TeeWorlds (2007), Super Meat Boy (2010), Terraria (2011), BattleBlock Theater (2013), Starbound (2016). At first glance, these 5 titles share very little with each other. They're all video games, they all feature platforming mechanics... Oh, and one more thing: They're all developed with Windows/MacOS users in mind.
With the exception of Starbound, all of these games are relatively old, having been around with me since I was still a middle schooler starting off with Computer Science and Web Development. These were both my forms of entertainment, as well as my introductions into what fantastic UI/UX looks like.
Times have changed significantly since that time. The HTML5 cache manifest for offline data storage was introduced & deprecated, the HTML5 canvas has become more powerful and more efficient, several services such as Heroku & GitHub Pages now allow for quick and easy hosting for personal projects. Just a few years ago, free hosting meant setting up with Google Cloud on Google App Engine or using a super shady 000WebHost.
Yet, despite all of these changes, the most we've seen with in-browser gaming has come from the dying Adobe Flash, or the Unity web plug ins. The only HTML5 web games out there are typically top-down, mechanically simple "*.io" games, designed more for a quick fix than a construction of worlds.
With a little ingenuity & a lot of naivety, I want to challenge that. I want to build a proof of concept of what is possible in my time at PennApps, and grow that over time into a whole new game, and demonstrate the potential of world building through the web-based medium that has captured my attention for as long as video games have.
What it does
A fast-paced & mechanically challenging boss fight between Oxymora, the Rainbow Arsonist, and Jeeeeney, the absolute emodiment of my irrational fear of a rogue genie from Aladdin.
WASD keys are used to conjure and throw potion-infused fireballs in any of the four cardinal directions, the space bar is used to jump/fly, the two brackets [ and ] are used to cycle between potions (of which there are only two). The blueish-white potion is an ice-based projectile; use this for higher damage and higher velocity. The green potion is a health-restoration projectile, or, as I like to call it, the Healing Gun.
There is a little randomness in the timing of the attacks and in the movements of the boss, but the game was continually playtested for balance. Learning the attack pattern is possible: watch for openings. When transparent, the boss can't receive or deal damage. Look for the holes in the bullet hell. The pattern is there.
How I built it
Challenges I ran into
HTML5 presents several challenges in regards to performance. First and foremost, sprites cannot be flipped or rotated without significant performance drops, so flipped/rotated sprites were all created with Pixlr. By choice, I developed the physics & graphics engines from scratch for the project, which admittedly felt like biting off a lot more than I could chew.
Accomplishments that I'm proud of
What I learned
- Working with sprites & animating them using HTML5 canvas
- Optimizing assets and operations for increased performance
- Developing fluid and intuitive in-game physics
What's next for Oxymora
By the end of the 24 hours, most of the code was very, very wet (as in, opposite of Don't Repeat Yourself and keeping code dry), and large strands of spaghetti. In the future, I not only want to expand the world of Oxymora, but also refine the engine that it was built upon. Though it draws inspiration from Terraria, I'd very much like to avoid building a massive world on top of a messy framework. The in-house physics engine will aid in creating the multiplayer game that I've dreamed of making, as understanding the physics will help me extrapolate player movement even in spite of higher latency, as well as mitigate cheating by detecting anomalies.