Inspiration

Anvils pays homage to several classic retro games, most notably Tetris (1985). We envisioned a game with a similar abstract setting, but supporting a same-device multiplayer, akin to that of the Fireboy and Watergirl Series (2009-2021). We channeled the creative constraints necessary for the development of early video games, with limited computing power, graphics, and sonic capabilities, in order to create a game much aligning with these in its spirit.

Notable mention goes to anvil firing, a British and Canadian tradition of launching anvils into the air with gunpowder.

What it does

In Anvils, you (and optionally a friend) control a cherry (and a blueberry, if multi-player) respectively, aiming to survive in a tiny world constantly being littered with falling anvils. In the single player mode, the objective is simply to survive for as long as possible by avoiding being squished by the incoming anvil rain. In multiplayer, the objective is to survive longer than the other player, a competitive factor constituting a significant detraction from the mechanic’s inspiration. As the berries can collide and push each other around, their coexistence in this tiny world is mutually threatening, demanding players to grapple with the relative strategy of collaborative vs. adversarial playstyles. As time elapses, time speeds up: the anvils fall faster, and the fruit move faster, demanding faster reaction time from the player(s).

How we built it

Designed in Unity, Anvils is crafted out of C# scripts, customized sprites/UIs, and buttons. It was purposefully designed so that the player(s) could get from screen to screen without needing to refresh the website, maximizing their experience. Additionally, the scripts often dealt with time; for instance, to increase anvil and player speed at an increasingly faster rate.

Using WebGL, we integrated our game in unity into the React project, using Vercel to help deploy it. For authentication, we used Auth0, which securely manages user login and logout through a redirect-based flow. When a user logs in, Auth0 authenticates their credentials and redirects them back into the game.

All backgrounds were created using a pixelizer tool, which allowed us to create flicker animations by adjusting colors and pixel size (images were found on the web, and were flattened to a set amount of colors as determined by a k-means algorithm). The title text, as well as sprites, were drawn by hand in Affinity Illustrator. Buttons were created using pixilart.

A complete original soundtrack was composed for the game, using a square wave generator to imitate the classic 8-bit chiptune sound. Different game states trigger one of several variations on a central musical theme, with varying levels of harmonic complexity.

Challenges we ran into

One significant challenge we faced during implementation was integrating Auth0 authentication into our single-page website. Since we managed our site using React states rather than a formal routing system, tracking which "screen" the user was on (e.g., Home, Game, or Login) became complex. Auth0's redirect-based login flow relies heavily on navigating between URLs, but our app didn’t use traditional URL-based routing. As a result, after a user logged in, Auth0 would redirect back to the site without clear context of which "page" to return to.

Another challenge we faced was rendering the retro designs on Unity, especially the buttons. We wanted to ensure both functionality and to stay on theme (as the buttons on the UI aren’t considered “buttons” in Unity). We managed to resolve this problem by overlaying a Unity button on top of the retro-designed buttons and making the Unity button invisible when not hovered over, and highlighting in the theme color of that page if hovered over.

Accomplishments that we're proud of

We’re proud of creating a feel-good retro game through hand-drawn sprites, custom soundtracks, and atmospheric UI within the time constraints. Putting all these separate pieces together and seeing them culminate into a unique-yet-nostalgic game was a very satisfying and rewarding process.

Most importantly, we’re proud of us.

What we learned

Technical skills acquired: Unity functionalities including deltaTime, static variables, 2-player inputs/Input Manager, CircleCast, and fonts Integrating Unity into React Audacity for audio file editing Graphic design Basic animation/pixel art techniques

Outside of technical skills, we learned how to collaborate with each other efficiently and seamlessly.

What's next for Anvils

In future iterations of Anvils, we hope to introduce increased complexity and game mechanics through the addition of powerups (shields/immunity from the anvils, increase in speed, brief anvil control) as well as improve the multiplayer experience by creating a larger effect when players collide through game physics.

In addition, refining our use of Auth0, storing user scores, and creating a leaderboard could contribute to creating a community around our web app.

Built With

Share this project:

Updates