What I Learned from Creating My First Video Game with Just Over a Year of Coding Experience

As a lifelong gamer, I‘ve always been fascinated by the magic behind the pixels. Games have transported me to fantastical worlds, challenged my brain, and forged some of my closest friendships. So it was only natural that when I finally took the plunge to learn coding, my dream was to develop a game of my own someday.

That dream became a reality last year when I released my first commercial game after teaching myself to code from scratch. The game is called "Hyper Hop" – a fast-paced, arcade-style endless jumper for mobile. The goal is simple but addictive: bounce your character up an never-ending series of platforms, collecting coins and power-ups while avoiding hazards along the way.

[Screenshot of Hyper Hop gameplay]

Hyper Hop may not be the next App Store sensation, but it represents a huge personal milestone. In just over a year, I went from zero coding knowledge to single-handedly shipping a game played by thousands. It was the hardest fun I‘ve ever had.

In this deep dive, I‘ll share a behind-the-scenes look at my journey to create Hyper Hop – from ideation and technical hurdles to launch and beyond. I‘ll highlight the key lessons I learned along the way, analyze the design and monetization strategies used, and offer advice for aspiring indie game developers.

Whether you‘re a seasoned programmer looking to branch into games, or a complete beginner like I was, I hope my experience can inform and inspire your own game dev adventures.

Learning to Code for Games

Choosing a Tech Stack

When I committed to learning game development, the first major decision was choosing which programming language and tools to focus on. The list of popular game engines is dizzying:

  • Unity
  • Unreal Engine
  • Godot
  • GameMaker Studio
  • Construct
  • Phaser
  • LÖVE
  • MonoGame
[Comparison table of game engines and their features/pros/cons]

After much research and experimentation, I landed on the Phaser framework, which uses JavaScript and HTML5 to create games that run in a web browser. A few key factors drove this choice:

  1. Excellent documentation and resources – Phaser has a robust set of official docs and tons of open-source examples to reference. For a beginner, having clear guides to follow is invaluable.

  2. Web-based games – Since Phaser games are built with JS/HTML/CSS, they can run right in a browser in addition to being packaged as native desktop or mobile apps. The instant deployability of web games is a huge boon for early sharing and playtesting. No downloads required.

  3. Lightweight 2D rendering – Phaser is geared toward 2D sprite-based games vs. complex 3D. As a solo developer, this narrower focus was perfect for scoping my first projects. It‘s also less resource-intensive than heavier engines like Unity or Unreal.

  4. Familiarity with web tech – Phaser appealed to me since I already had some experience with JavaScript and web development. Being able to double-dip and grow my web skills alongside game skills was a nice bonus.

Accelerated Learning Techniques

With a basic tech stack chosen, it was time to start the real learning. Tutorials and courses are great for laying a foundation, but I found I learned the most by doing – examining sample code, extending existing games, and most importantly, building small finished projects of my own.

One of the most transformative learning experiences was participating in regular game jams through my local IGDA chapter. A typical game jam challenges small teams to create a game from scratch in a set period of time (usually 24-72 hours) around a particular theme. Working under this tight deadline pressure was like an intensive bootcamp for rapid prototyping and problem-solving.

[Photo from a game jam]

The jamming format also forces you to ruthlessly cut any non-essential features and focus on the core elements that make the game work. Countless developers have gotten stuck in the weeds obsessing over minute details only to never finish their grand opus. Jams teach you how to ship early and often.

[Quote card on not letting perfect be the enemy of good]

Another key to my accelerated learning was becoming an active participant in several game dev communities, both online (r/gamedev, itch.io, GameDev.net) and in-person (meetups, conferences). Regularly sharing my progress, soliciting feedback, and studying others‘ work kept me motivated and introduced me to new techniques and possibilities.

[Testimonial about the value of community]

Through it all, I kept a steady practice of coding every single day, even if only for 30 minutes. Consistent effort and incremental progress is the "secret" to acquiring any skill. There‘s a great quote by game designer Rami Ismail: "The only way to go from ‘zero to one‘ is to stop debating how, and start doing."

Hyper Hop: From Prototype to Polished Product

Ideation and Rapid Prototyping

After a few months of small experiments and game jam projects, I felt ready to attempt my first serious solo game. When brainstorming concepts, a few key criteria emerged:

  1. Simple core mechanic – suitable for touch input, easy to learn but hard to master
  2. Endless replayability – procedurally generated levels so the game never plays exactly the same way twice
  3. Quick play sessions – mobile-friendly, engaging in short bursts
  4. Monetizable – opportunities to incorporate ads and in-app purchases tastefully
[Flowchart of the brainstorming/ideation process]

I was playing a lot of mobile games like Crossy Road, Flappy Bird, and Doodle Jump at the time. I loved how they took a simple formula – traverse as far as you can in one direction – and put a unique twist on it. Hyper Hop was born out of my desire to create an updated endless jumper with slicker visuals, deeper progression, and a fresh ‘one-touch‘ control scheme.

[GIF of early Hyper Hop prototype]

With the core concept in mind, I set to work creating a basic prototype to test out the movement and platform spawning. At this stage, it‘s all about answering questions and proofing out the fun as quickly as possible:

  • How high/far should the character jump?
  • At what rate should platforms spawn?
  • What‘s the right ratio of easy vs. hard jumps?
  • When should new obstacles/power-ups get introduced?

The prototype was ugly, glitchy, and unbalanced – but it showed the core idea had promise. Now the real work began to develop it into a full game.

[Before and after images showing prototype vs. final polished version]

Technical Challenges and Solutions

Taking Hyper Hop from rough concept to a real game was littered with tricky design and technical challenges to overcome. Below are a few of the thorniest problems I wrestled with:

Procedural level generation
Ensuring that platforms spawned in a unpredictable but fair way was crucial to keep the game feeling endless. My solution was to code a system that dynamically selected platforms from a pre-made collection of ‘chunks‘ and adjusted parameters like the gap distance based on the player‘s current skill level.

Touch control responsiveness
The snappiness of the character‘s jump proved essential to nailing the ‘feel‘. To eliminate any input lag, I ultimately rewrote the control scheme to track raw touch events on the DOM canvas element rather than using Phaser‘s event manager. I also added a slight ‘coyote time‘ grace period after running off a platform where the player could still initiate a jump.

Performance optimization
Older mobile devices struggled to maintain 60fps with the graphical demands of the game. Aggressive optimization was needed across the board. I used object pools to recycle sprites, compressed spritesheets and atlases, and refactored the physics system to rely on simplified AABB collision rather than Arcade physics.

Cross-platform woes
While Hyper Hop was designed for mobile, I also wanted it to be playable on web. This meant handling multiple screen sizes/orientations, supporting keyboard controls, and lots of device-specific bug hunting. In Phaser, I took advantage of the Scale Manager to adapt the game to any screen size. I also set up a custom ‘control scheme‘ module to seamlessly swap between touch and keyboard input.

[Code snippets demonstrating some of the optimizations]

Design Iteration and Feedback Loops

Game design is as much art as it is science. As a designer, my most valuable tool was soliciting frequent, honest playtesting feedback and being willing to iterate (and kill my darlings) in response.

Some of the biggest mechanical changes came out of seeing where playtesters struggled or got bored:

  • Adding an extra ‘air jump‘ to help players recover from near-misses
  • Introducing an ‘Overdrive‘ mode as a reward for perfectly timing 10 jumps in a row
  • Creating more granular and persistent goals/achievements to chase beyond a simple high score
[Evolution of the game‘s UI and HUD based on playtesting]

I also put a lot of work into game feel and ‘juice‘ – the little audiovisual flourishes that give the game its personality. Over the course of development, I:

  • Dreamt up dozens of costumes and cosmetic upgrades for the character
  • Fussed over the particle effects and camera shake that punctuate a satisfying jump
  • Agonized over finding the perfect sound effects and color palette to match the cute but hardcore vibe
[Video clip showing off the game‘s ‘juice‘ and polish]

All of these elements had to come together to create a cohesive, engaging minute-to-minute experience that hooked players and kept them coming back. The only way to stress test it was to put it in front of as many players as I could and watch them react.

Product Launch and Live Ops

Porting and Polishing for Release

With core gameplay locked in, the finish line was in sight – but there were still several steps to get Hyper Hop shipped. Porting a web-based game to the App Store and Google Play required bundling the HTML/JS/CSS with Cordova and ironing out any quirks in the native wrapper.

I also needed to build out the systems and user flows for monetization and retention:

  • Setting up the in-game store and currency for purchasing cosmetic items
  • Integrating unobtrusive banner ads and interstitial videos
  • Instrumenting analytics to track usage and identify areas for improvement
  • Developing an upgrade/achievement system to give players long-term goals
[Graphic outlining the game‘s economic loops and systems]

Then there was the app store submission process itself. I hadn‘t anticipated just how many assets and pieces of information you need to provide: app description, icons, screenshots, preview videos, keywords, age rating, and more. It‘s a daunting but important exercise to boil your game down into its core value proposition and present it in an attractive way.

[App store screenshots and description for Hyper Hop]

Launch Impact and Metrics

After over 6 months of hard work, Hyper Hop was finally released into the wild in March 2022. Though it was a soft launch without any marketing budget, the results exceeded my wildest expectations:

  • 15,000+ downloads in the first week
  • Average rating of 4.6 stars across both app stores
  • Reached top 100 in the Arcade category in 12 countries
  • Average play session of 8 minutes
  • 10% D1 retention, 5% D7 retention
[Graph of key metrics over time]

While these numbers pale in comparison to hit games, for a solo dev‘s first game they felt like a huge accomplishment. But I quickly realized that launch is far from the end for a live game like this. I had to shift my mindset and effort to operating and supporting a live product.

I started studying player behavior, looking at analytics and reading reviews to see what I could learn:

  • The first-time user experience had too much friction. I streamlined the tutorial and added clearer signposting to teach the mechanics.
  • Certain level setups were more rage-inducing than fun. I revisited the procedural generation algorithms to reduce the frequency of awkward obstacles.
  • Some cosmetic items were much more popular than others. I adjusted the in-game currency costs and bundling to take advantage of the favorites.
  • One-third of players never came back after their first session. I added more scaffolded goals and explicit ‘appointment mechanics‘ to encourage repeat plays.
[Table of live-ops changes and their impact on KPIs]

It became clear that the work of supporting Hyper Hop would be an ongoing process. Even a year after launch, I‘m still delivering regular updates, running events, and interacting with the community. As long as there are players, there are always improvements to make.

Lessons Learned and Road Ahead

When I set out on this journey, my primary goal was just to prove to myself that I could make a game from scratch and get it across the finish line. In that regard, Hyper Hop was a resounding victory. But its modest success brought a host of new learnings and opportunities to light.

A few key insights I‘m carrying forward:

  1. Prototype quickly, test constantly. The only way to find the fun is to put something playable in front of people early and often. Developing in a vacuum is a recipe for a bloated, unfocused game.

  2. Don‘t skimp on the juice. A solid core mechanic is essential, but it‘s the little details, polish, and personality that will make your game stand out in a crowded market. Players notice and feel the love you put into your work.

  3. Think beyond launch. Releasing your game is a milestone but not the destination. In the modern gaming ecosystem, the most successful titles are ‘games as a service‘ that grow and evolve over months and years. It‘s never too early to plan for live ops and envision your ideal post-launch roadmap.

[Retrospective ‘postmortem‘ slide of what went right and wrong with Hyper Hop‘s development]

Looking ahead, I‘m energized to take on even more ambitious projects, now equipped with the hard-earned knowledge of shipping my first commercial game. Some opportunities on the horizon:

  • Leveraging my web game dev skills to explore the bourgeoning web3 gaming space
  • Collaborating with an artist and/or game designer to develop a larger scope multi-platform title
  • Experimenting with new monetization models like premium paid games, battle passes, or NFTs
  • Porting Hyper Hop to consoles and PC to expand its reach

Whatever comes next, this experience reinforced my love for the craft of game development and my appreciation for this incredible form of interactive media. I‘m beyond excited to continue learning, leveling up my skills, and bringing joy to more players.

For anyone considering embarking on their own game dev quest, I‘ll leave you with my favorite piece of advice, courtesy of Shigeru Miyamoto:

"A delayed game is eventually good, but a rushed game is forever bad."

Don‘t be afraid to take your time to explore, experiment, and get it right. With sufficient dedication and iteration, we all have a great game in us. Keep hopping, friends!

Similar Posts