P2: The Empathy Machine – Alienis Oculis

Overview

Agonies are one of my changes of garments,
I do not ask the wounded person how he feels, I myself become the wounded person,
My hurts turn livid upon me as I lean on a cane and observe.

Walt Whitman, Song of Myself, Section 33 (1855)

Alienis Oculis is a RenPy visual novel about the experience of living under extreme scarcity. This P2 submission is Chapter I of the story, centered around life in a destitute frontier village under strict imperial rule.

You play as a formless being with no senses of its own. You gain lived experiences by being pulled into the bodies of living organisms, fully embodying their thoughts and actions. In each body, you inevitably encounter conflicts and dilemmas, and you must make the decision that you think is best. In this harsh and unforgiving world, there is never enough to help everyone. At every crossroads, your choices can help some but also cause doom to befall others. The ultimate question is: what will you prioritize?

This game is targeted towards people who are fans of narrative games, particularly long form text-based storytelling. The runtime is approximately 30 minutes for me, but can vary significantly depending on how fast you read.

The game can be found at the following link. Please play the game ahead of reading the rest of the writeup, as spoilers are imminent.

https://microwavedmouse.itch.io/alienis-oculis

Story Map

If the images are blurry on the blog, the images can also be found at the following link (you’ll find some bonuses there too!): 

https://drive.google.com/drive/folders/1xjbbs4gOvl54Wm1rLYVYw6lM-MtODYIY?usp=sharing

Initial Ideation

My very first inspiration was the premise behind Mononoke (2007, TV). The premise is that the main character can only exorcise spirits once he has found out about the truth about why the spirit lingers in the world (its shape, truth, and reasoning). Since my knowledge of this series was very loose, the core idea that I took from it was building empathy through learning the difficult choices and uncomfortable past truths of a character. I wanted to create a complex emotion where the player has to simultaneously condemn a character, yet empathize with their motives.

Then, I thought about one of my favorite thought-experiments, introduced in The Egg by Andy Weir. The premise of Weir’s short story is that you are every person who has ever lived, and will be every person that will ever exist. I wanted to leverage the idea created in this premise: whenever you caused harm to someone, you were causing harm to another version of yourself. For me, this idea presents a direct dose of empathy. By thinking about yourself in place of every single person you interact with, you place yourself in their shoes and try to understand their emotions more. This also added onto the previous idea in a way that created more enacted narrative. Instead of spectating difficult decisions and judging characters, I could instead transport players directly into the body of the characters and leave the choices up to the player. That way, there is an additional emotional weight of having to deal with guilt due to the player’s own choices.

It turns out that after combining this idea, I realized that the story very closely resembled the initial plot of To Your Eternity. As to better differentiate this story from that one, I forwent the theme of self-discovery, and instead honed in on the theme of living through human experiences under scarcity in multiple perspectives. This way, my story would be much more about the guilt and consequence that human choices have on other humans, rather than To Your Eternity‘s theme of grief while finding out what it means to be alive as a timeless being. 

Iterations

The large scope of my story meant that I had to keep implementing the story over the cycle of many playtests throughout the design process. When rapidly iterating across playtests, I found it to be more valuable to continue with implementing more of the story to get new eyes on the new bits of narrative, instead of fixing small issues in the existing story. By the final playtest, I do address all of the feedback given by the playtesters.

Hence, the structure of each playtest will go:

  • What changed since the last playtest and my goals for this playtest.
  • Playtest observations and feedback: what worked and what needs improvement.
  • New changes that I pushed onto the backlog, to be fixed in the final version. I will describe the solution that I inevitably used to address the feedback that I got.

Playtest 0: Tiny Playable Prototype

Date: October 19th. 

Playtester: Saharat, a grad student in education and fellow 377G student.

Changes & Goals:

  • For the first checkpoint, I brought in an initial RenPy project with the introductory void scene written in.
  • I wanted to get an opinion on the flow of the initial narration, since the introduction handles a lot of abstract descriptions of being unable to feel and move.

Observations & Feedback:

  • I unfortunately don’t have visual proof of this playtest because it was so early on in the process.
  • Saharat said that the descriptions were intriguing, how the thumping noise created a little bit of curiosity.
  • He also said that he liked the short sentence style because it made reading easy.

Backlog Changes:

  • This playtest only affirmed that the introductory idea of being a formless void is understood by the player. So the only change to make is to expand on the story even more. 

Playtest 1: Playtest Prototype (Out of Class)

Date: October 21st.

Playtester: Sabrina, a junior CS student and fellow 377G student. When it comes to digital games, she likes games of abnegation.

Playtest link: Passcode: hgh!8DGX

Shock at my beautiful graphics

Changes & Goals:

  • I implemented the sequence of embodying a baby goat being birthed, then discovering the village where the story will take place. 
  • I added the kinetic choice of staying behind or leaving your mother when she appears to not wake up.

Observations & Feedback:

  • 02:33 – “Well she’s clearly dead…”, in response to the goat’s mother not moving.
  • 02:40 – “The grass is not brown and brittle”, mentioning a mismatch with the assets.
  • 07:34 – Sabrina points out that the text puts a lot of emphasis on assigning words to observations, yet there are inconsistencies. Sometimes the text uses a word that is a human construct, like “fence”, and sometimes the text uses a defamiliarized version of a word, like “stone ring” for “well”. 
  • 14:37 – Sabrina identifies The Egg as an inspiration for the story.
  • 15:20 – Sabrina agrees that the goat exposition is a good way to tell what is happening in the world. Whereas the human perspective is good for telling why something is happening, like political systems. 

Scheduled Changes:

  • The kinetic choice felt like it invoked a bit of sadness, which made me continue in the direction where each choice in the game is tied to an emotional outcome. 
  • The mismatch between the placeholder assets and the textual descriptions would eventually be fixed with the addition of real assets. But I paid careful mind to align the textual descriptions to match the generated assets in the future.
  • To fix the jarring inconsistency in the goat’s narration, I ended up developing a “goat language” that consists of elementary ideas being hyphenated together. I thought that this solution would best preserve meaning for the player but also create the sense of defamiliarization that I wanted to maintain. Some words stayed as the base English version, like “stick”, but I tried to choose a basis of words that made up of natural objects that the goat could have observed.

Playtest 2: Playtest Prototype (In Class) 

Date: October 21st.

Playtester: Emma, a fellow CS377G student.

Playtest link: Passcode: 7=&Or7A1

Appalled at the goat-napping

Changes & Goals:

  • N/A, since the previous playtest and this playtest were back to back

Observations & Feedback:

  • 3:02 – “Oh no, she’s dead!”
  • 3:44 – “Well how would I know she’s the small one? Is she smaller than me?”
  • 3:57 – “Woah, she just goat-napped me!”
  • 6:27 – “I thought they were going to eat me.” Good prediction.

Scheduled Changes:

  • This reinforced the emotional impact of the goat segment, like the previous playtest. The death of the mother is really felt, so in the final version I used death sparingly to convey the weight of the situation in the village.
  • I eventually changed the “Small One” naming, since another playtester mentions this again later. 

Playtest 3: Refined Prototype (Out of Class)

Date: October 25.

Playtester: Noe, a fellow 377G student. And Lucas, one of our amazing CAs. Both of them have experience with a huge breadth of games, including narrative games.

Playtest link: Passcode: @Cg3=L94

Deliberating who to give rations to first

Changes & Goals:

  • Basically implemented the rest of the story:
    • Added the first transition scene from Mica the goat to Opimia the mother.
    • Added the first year as Opimia, choosing whether to hand over the boy, and whether to betray our neighbor.
    • Added two paths to the game: if you rat out your neighbor you become Reeve of the village; if you pay the full levy you become weakened and sick.
    • Added a choice on who to prioritize out of three households in the town.
    • Added the vagabond boy returning with refugees, and giving information about the location of water to the village (behavior based on previous choices).
  • My goal was again to see how players would react to the story’s contents, and not so much the presentation and polish.

Observations & Feedback:

  • 6:47 – “Wait what just happened? Did you just die?” 
  • 7:17 – “Oh wow, we’re like a spirit.”
  • 8:41 – “So are you a human now? Or are you still a goat?”
  • 9:00 – “Cuz they go under your hand… so that means we are the person now. We’re the person of the knife. We possessed the person.”
  • 13:34 – “Tell him about our neighbor, which I’m confused at…” They were unsure what we were telling the collector about.
  • 14:00 – Discussion between Lucas and Noe about whether we should’ve ratted out our neighbor versus letting our own family starve. Or whether they should have saved the boy.
  • 21:55 – Chose Fabia and Septimus to give rations to because “these kids have been sick since I was little”.
  • 22:55 – “Now that we have so much power, we have all this food, I’m not that worried anymore.”
  • 24:12 – Recognizes the boy from earlier in the story.
  • 24:42 – Lucas predicts we’re going to possess him before the screen goes black.
  • 26:03 – “The wording is a little cryptic in some parts.”
  • 30:06 – Lucas says that the pronoun “you” makes him think of himself the player and confuses him, but Noe doesn’t agree.
  • 41:30 – Lucas suggests adding more struggle for the boy, maybe trying to convince the village of the outcome.

Scheduled Changes:

  • There was confusion about who the player was at any given point in time. To fix this, I added in a portrait of the character you are currently embodying in the top left corner. When we possess a body, the portrait immediately changes, so there’s more modes of information that helps the player understand that they are possessing different characters. 
  • I ended up correcting wording on some of the descriptions that were cryptic or incorrect. For example, “counting mouths” confused Lucas, and became “counting mouths to feed” to be more explicit. 
  • The players indicated that they felt less struggle as soon as they became the Reeve. To fix this, I added a scene where the Reeve now takes on the role of the collector, and has to live with the guilt of demanding grain from the rest of the villagers. I also lessened the amount of grain that Opimia gets upon her appointment and emphasized that it would only make a difference for one household, in order to make that choice more meaningful and not fully take away the feeling of food scarcity.
  • They also indicated that there was no struggle from the Vagabond when he and Opimia are allies. I decided that this was actually mostly intentional, as Opimia made good decisions to keep him in her good graces and chose to make herself powerful. However, I did add a small verbal conflict for the boy to convince the Opimia that she should still call for the village to move despite meaning that she would lose her power.
  • I ended up keeping the “you” pronouns because no other playtester found a big problem with that. 

Playtest 4: Refined Prototype (In Class)

Date: October 26.

Playtester: Olu, a fellow 377G student. He said that he doesn’t play many games, and primarily watches sports as his pastime.

Playtest link: Passcode: 4wD#Nc9?

Seeing effect of not saving Mica

 

Changes & Goals:

  • N/A, since this playtest was back to back from the previous one.
  • This playtest was short, so I couldn’t get to the story past year 1. My goal was mainly to see another reaction to the Goat-Opimia transition.

Observations & Feedback:

  • 3:07 – Speculates that the thumping vibration is because we were inside the belly of a big creature, like a fish.
  • 8:01 – Recalls that “the baby left the mom lifeless”. Doesn’t necessarily assume whether the mother died or not.
  • 18:24 – He likes that most of the sentences are one or two lines.
  • 19:00 – It would be nice to have a timeline, “because I wasn’t sure if I was close to the end…”
  • 20:53 – Felt like the game had opportunities to end, but the game keeps on going. There could be multiple endings that end earlier.

Scheduled Changes:

  • Olu’s comments reinforced my choice to reformat most of the dialogue to be broken up into single sentences, or two sentences at most.
  • I took his comment about adding a timeline and implemented it in a way that ties into the story. The title card that tells you what year it is now has an image of a well that slowly dwindles, and a rope that has more and more knots in it. This helps to foreshadow the water crisis in year 5 while also adding a natural timer (i.e. if the water runs out, something must happen in the story).
  • I couldn’t implement the feedback about adding multiple endings that end sooner because I thought that it would not deliver the empathy/message of my story. And I have a personal distaste for having to save at every turning point so that you don’t get an abrupt game-over, because I think it makes the player unnecessarily paranoid. So to address this feedback, I have to narrow my target audience to people who like narrative games (especially long ones).

Playtest 5: Final Playtest In Class

Date: October 28.

Playtester: Alex, a fellow 377G student. He indicated that he loves strategy games like 4 player chess.

Playtest link: Passcode: +bjMX%6+

Laughs at the plump man’s description

Changes & Goals:

  • I added the Gemini graphics and replaced the placeholder assets.
  • I added the portrait in the top left to keep track of who the player was.
  • My goal was to ask how having a clearer visual component to the game affects the understanding of the story.

Observations & Feedback:

  • 6:55 – Points out the “cognitive dissonance” between the player understanding that the mother is dead, but the goat does not. 
  • 8:42 – Feels like the goat sequence has “absurdist humor” which contrasts against the serious nature of the game.
  • 9:55 – Laughs at “plump man”.
  • 21:23 – Remembers the scene where Mica goes and finds Decimus’s hidden sacks of grain. Chooses to rat him out because “we are broke”.
  • 24:36 – “The problem with equitable sharing is that… people can hide stuff, and I feel like it’s fairly easy to hide things.” Points out a flaw in the design of the non-Reeve path.
  • 25:15 – “I cannot hoard it… because otherwise I’ll die.” Has guilt and fear about hoarding supplies because it would draw the ire of the other villagers. 
  • 25:40 – Glossed over the 3 households exposition and had to scroll back.
  • 33:16 – About visuals: they were helpful for spatial reasoning and keeping track of where things were. They were nice for aesthetic purposes. They helped keep track of who he was.
  • 34:58 – Gets the central emotional core: that it’s hard to survive as a human in an era of scarcity.
  • 35:44 – Regarding the thief: when he was Opimia, he considered his choice mainly in terms of retaliation and preventing future theft.
  • 36:17 – Regarding neighbor: felt like he had to rat out the neighbor so that there would be more resources to go around. Didn’t even think about a potential reward.
  • 37:45 – After the fact, considers the factor of fairness and hoarding grain more.
  • 38:45 – Felt less empathy for the goat compared to the humans because as a human, he empathizes with the human need for survival more. That it’s more of a “necessary evil” to kill a goat for food.
  • 40:17 – Felt a little more empathetic towards the thief, “…you kind of understand their point of view. They have to eat food [too].” 
  • 43:57 – Forgets the role of Gallus the miller in the story (to be fair, I forgot too!)
  • 44:50 – Still values the goat POV for being interesting despite initially saying he empathized more with the human need for survival rather than the goat’s.

Scheduled Changes:

  • Since playtesters have generally found the goat part to be an ironic humorous section in the dark world, I decided to keep the tone as is and reinforce its use as an expository tool for natural worldbuilding about what exists in the world. 
  • I’m glad that the visual consistency helped him reason where things are spatially. Going forward, I kept this going, making sure to rewrite descriptions such that they match the assets.
  • To address the issue about equitable sharing of food being unfeasible, I changed the option to be the request for additional labor from the village folk, with an optional donation of food on the side. This makes it so that people can still keep their own stash for their own survival, but people can still help each other out when necessary. 
  • To fix how unmemorable Gallus the miller was, I added more dialogue and much more of a pause in the beginning of his year 5 journey. In the Reeve path, he now also takes a supporting role behind Opimia acting as collector. 
  • To address him missing the exposition of the three households, I added more of a separation between the Gallus plot line and added a few lines prefacing the descriptions. Adding more clicks before giving these descriptions would hopefully help players process the previous plot line before getting hit with this new one.
  • I didn’t think any thematic changes were necessary at this point, since it looked like Alex fully understood the intended emotional impact of the game.

Playtest 6: FINAL Final Playtest Outside of Class 

Date: October 28.

Playtester: Michael, a fellow 377G student. He indicated that he loves complicated strategy games like EU4. 

Playtest Link: Passcode: C8^^Yji4

“You… boy! Look what you’ve done!”

Changes & Goals:

  • Any unimplemented thread from above was implemented here. A few notable things:
    • Finally added more goat time with Mica’s mother, learning about the materials of wood, dirt, grass, and water.
    • Added goat-language for Mica’s thoughts, consisting of hyphenated ideas.
    • Chopped up sentences to be shorter.
  • My goal was to see if the completed game can deliver the intended emotional impact to another player.

Observations & Feedback:

  • 2:23 – Intro part is “very ethereal”. Predicts that the thumping is the beating of a heart.
  • 5:47 – “It’s so sad. My existence [as a goat].”
  • 6:44 – Upon figuring out goat-language words: “I am the smartest lamb.”
  • 8:42 – “All mothers have it bad in this world”. He laughs at the stark visual of Opimia with heavy eyebags, which parallels how thin and deathly Mica’s mother looked.
  • 9:42 – Recalls all of the things that the goat has actually experienced, which is not many.
  • 11:15 – “I’m a goat. I lunge for the bread.” Fun to role play the character of the goat.
  • 15:54 – “Decimus… one of ten.”
  • 16:24 – “One of ten and you had ten more? You are… orders of magnitude.”
  • 16:39 – “Man, this blows.”
  • 18:47 – Decision of whether or not to hand over the boy: chosen because he wasn’t sure what the collector was going to do. Speculates about whether the collector is also conscripting men from the households.
  • 20:42 – Anger at the collector / the choice: “What is there to pay? I don’t have the grain.”
  • 20:45 – Confusion about “Tell him about Decimus”: “what is there to tell?”
  • 21:29 – Exasperated at the fact that the collector was satisfied with just one more. “I shoulda had 10 bags out… then pulled out the 11th bag, and you would have been like…”
  • 21:48 – “Well thanks”, responding to Lucilla’s question about food. 
  • 22:26 – “He ate my food”, even though he didn’t steal. 
  • 24:33 – “No… disease!” When Lucilla coughs.
  • 25:07 – “It is the one and true only option.” Doesn’t seem to mind that there’s one option.
  • 26:05 – Considers both empathy and utility when making the choice between the three households. Feels justified by the text description after.
  • 26:44 – Saddened by the death of Septimus but also glad that the utility he foresaw paid off. Decimus just has too many children.
  • 28:59 – “Dang. Things are rough… if you knew me for like four days [and you remembered me].”
  • 31:43 – “I’m surprised Mica has survived this long”.
  • 32:25 – “It’s hard being in this Roman land. You can’t even have wants and wishes. There’s just survival… Your wants… are just who suffers least. Do I give my food and starve for another day, or do I not, and this person dies? It definitely speaks to the human experience.”
  • 33:17 – “What do you do if you’re suffering and those around you are suffering so greatly?”
  • 33:23 – “How can you even [measure]… the magnitude on [your suffering]? How could you say I’m suffering so greatly and… you’re suffering slightly less?”  
  • 33:48 – Relates own value, that selflessness is important, onto the game.
  • 34:00 – “Interesting seeing it from so many different perspectives… When you’re the goat, you’re like, oh my god I don’t wanna be killed… But when you’re the mother, now you understand… what that food would mean. It was equal to all the sacks the collector was carrying. When the boy comes in, you could just think ‘you just stole my barley’…. But then when you’re the boy, you realize that’s the only kindness you’ve given me… It definitely shows that everyone else has their own experience.”
  • 35:13 – “How could you [consider these things] if you don’t step into someone else’s shoes?”
  • 36:14 – One potential way to take it is to add even more verbose descriptions to Opimia’s narration to contrast her age with the young goat. But that would add even more verbosity that some people wouldn’t like.

Final Changes:

  • I think that all parts of the story correctly delivered on the theme that I was going for. Mica’s POV was a more ironic and humorous thought-provoker, Opimia’s POV was more about the difficulty of staying alive in scarcity, and the Vagabond’s perspective was about responding to kindness.
  • There was confusion about the choices about the collector scene, so I changed the choices to be more explicit whether or not the player picked up on the information that Decimus was hiding grain. I changed it to be “Cough up your hidden stash” / “Blame Decimus” so that the implications of the choice are clear.
  • I noticed that Mica had poor placement in the year 5 scene, so I moved her further to the right as to not overlap with Opimia.

Finishing Touches:

  • Changed the RenPy theme on the dialogue boxes to better match the gritty aesthetic of the game.
  • Made the RenPy theme turn grey and white when we are a formless spirit.
  • Added title card to the game, and imported a Roman-esque font.

Future Changes If Time Allowed:

If time allowed, I would have loved to test whether more kinetic choices would’ve helped give the user a little bit more interactivity. The game is very heavily text focused, so I think that it would engage the player a little bit more if they had a more active role in the story. However, since it’s a fine balance between adding more actions and giving the player many meaningless choices, it would’ve taken too many more rounds of playtesting for me to feasibly implement.

An open issue regarding graphics is that some of the sprite sizes don’t necessarily make sense. I made the mistake of having an image generation model create images directly with pixels, instead of post processing a line drawing into pixels. This meant that I couldn’t scale up or down my images without breaking the mostly consistent pixel size on screen. If I had more time, I would try to commission an artist or learn to illustrate the game myself.

Personal Learnings

Through developing this game, I learned that writing narrative games takes a lot of refinement. I started out with an ambitious idea spanning multiple characters and multiple scenes, and found myself scrambling to substantiate these ideas, let alone refine them in the short time frame of this assignment. I learned that I should be prepared to spend exponentially higher amounts of time writing every new scene in a story, since they have to make sense and meaningfully progress the story beyond what was already written. And I learned that there’s drawbacks for using different tools. Asking Claude for a draft can lead to a slippery slope where the text is full of AI ticks; doing it by hand may mean that I don’t finish in time. The next time, I think I will pick a central idea that doesn’t necessitate so much complexity. I think my current premise is only interesting once we see the paths of two humans collide, and I wouldn’t take any part of it away now. But certainly, a simpler core would have been better suited for this class.

 


Attributions

The font used in the game is Roman Rvstica Pixel Font, purchasable for 1.99 USD at the following link:

https://valiegraphie.itch.io/ancient-roman-pixel-font-rvstica 

AI Usage Disclaimer

Sprites, backgrounds, and ending CGs were generated via Gemini 4 Argon + Nano Banana. They were specified to be generated with a strict pixel grid (although Gemini sucks at strict rules), then post processed by a Claude script that snapped pixels to a discrete grid. The Claude script also handled changing assets from white-background JPG files to transparent PNGs.

Scaffolding the story beats to fit my story premise was also done with Claude. When fleshing out the story, I asked Claude to parse over the whole story and maintain consistency across different scenes. I personally approved all changes to the file, so any mistakes or excess AI-isms are my own fault.

I also asked Claude to generate the story map based on my .rpy files for better detail than I could have created on my own. 

About the author

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.