The Hills of San Francisco is a hack-and-slash fantasy roguelike about a warrior cat traveling cross-country in order to return home to San Francisco before he succumbs to his terminal illness. As he traverses the abandoned high schools of upstate New York and the college quads of Illinois, he must survive battles with evil mice and creepy doctors while feeling his health slowly worsen – all in order to see, once more, the hills of San Francisco.
I am making this game in memory of my childhood cat, Waffle, who was diagnosed with Stage Four Kidney Disease in May 2024. Waffle was a very shy cat who enjoyed eating food and snoring loudly. He passed away at the end of August 2024, 9 years after his adoption day.
Leftward movement: A or left arrow key
Rightward movement: D or right arrow key
Attack: Z, J, or left mouse button
Interact: E
Show Cursor: Left Alt
Restart Game: R (for testing purposes only)
Quit Game: Esc
Player is able to make Tabby move backwards while attacking
Tabby can’t jump yet
The mouse doesn’t move
Dialogue animation cannot be skipped
The premise of this game is that as you keep playing, Tabby's stats will progressively decrease, making the game more and more difficult until Tabby cannot fight any longer and the player can choose to let him rest. Initially, combat was the central focus of the game and most of the gameplay would be spent fighting enemies in a gladiator's arena. The issue I started to run into was ensuring that players had a reason to keep playing -- more specifically, what was player's end goal supposed to be? Even in popular roguelikes and roguelites, there often still existed some kind of finish line for the player to cross.
This is when I began fleshing out the narrative a bit more, making it more salient in the game. I settled on the idea that Tabby traveling cross-country, with his final destination being his home in San Francisco. Throughout his journey, he has to travel through three major areas of his family's life.
The first area is Poughkeepsie, New York -- my hometown. In this area, Tabby will explore themes of childhood and belonging.
The second area will be rural Illinois, where my parents first met in college. Secretly, though this area will also bring Tabby to Guangdong and Hong Kong, where my parents are from. In these areas, Tabby will explore his family's history and culture.
The third area is the San Francisco International Airport (SFO). This area will be the brief, final stretch before Tabby's return home. In this area, Tabby will reflect on life and death.
An issue I ran into a lot was that I kept jumping into the art without taking the steps beforehand to develop the style I wanted for this game. As a result, I had a lot of dissatisfaction with the way my game looked (and I still do, to some extent, but I think that's more to do with being a perfectionist haha).
A prime example is when I was learning Unity's Tilemap system, and I got way too caught up with making new tiles that I realized I didn't actually like how the tiles looked in game. The world looked cold and cave-like, as though Tabby was stuck in a dungeon, which was NOT my intention. After doing a bit of sketching and narrative development (see above), I decided to go with an autumn forest scene instead, which I feel fits the tone of my piece much more.
This happened with the arena as well. I wasn't really enjoying the look of a gladiator's arena in this new environment -- it felt too out of place, and the perspective felt too warped. As a result, I developed an arena that was much more meaningful to both the setting and myself -- a high school hallway with stained glass windows depicting three major landmarks of my hometown. The first window depicts my old church, the second window depicts my old house, and the third window depicts the playground near my house.
While there are definitely some adjustments I can make to the visual style now, I feel much more satisfied with the style I've developed so far!
For this project, I decided to use Unity. I had some knowledge of Unity due to taking Professor John Craig Freeman's 3D Computer Gaming class the previous semester, but the technological side of game development was a major concern for me going into this project. I had limited experience with programming, but I still felt I had a lot to learn to even understand the basics. The concept of functions and classes confused me, and I often relied heavily on nesting conditionals within conditionals within conditionals. My primary goal during this semester was to learn how to code in a non-hacky way -- that is, developing robust coding frameworks rather than patching all my bugs with equally buggy fixes.
The main issue I was running into was that even when I follow tutorials or reading coding forums, I often did not actually understand the logic of what I was putting into the code. Often, I was simply copy-pasting chunks of code and hoping that it worked. Consequently, if was really difficult to figure out what parts of my code were broken whenever I ran into a bug.
I figured out a few ways to help me understand my code. Firstly, I began placing comments next to every single line of my code that explains what each line does. This helped me get accustomed to the syntax of coding by translating the lines into something more easily comprehendable.
A second way to help me out with programming was not just to use tutorials, but also to visually map out the coding after finishing the tutorial. In the below images, I mapped out the flow of functions and classes for Brackey's Unity Dialogue System tutorial I'm a very visual person, so doing this really helped me understand the structure behind the code I was adding to my game. After doing this, I was able to adjust the code from the tutorial to fit the kinds of interactivity I wanted for my game.
Now, about four months after I started this project, I feel like I'm starting to get a better understanding of coding!
Slideshow script provided by Lokesh Dhakar
Hosted by Neocities