Post-Mortem: My first game released!


Introduction

Publishing my first game on itch.io has been a tough but also challenging milestone. Over the course of a year, I transitioned from being a complete novice to successfully shipping this functional and enjoyable space shooter. While the game originated from a course I followed, the amount of customization, iteration, and problem-solving has made it uniquely mine. Here’s a reflection on the challenges faced, the lessons learned, and the compromises made during this exciting journey.

What Went Well

  1. Core Gameplay Expansion Starting with the base mechanics of a 2D space shooter, I added layers of complexity:
    • Dynamic level progression based on a scoring system with increasing difficulty and enemy spawn rates.
    • A boost system that introduced invincibility, speed bursts, and life recovery mechanics.
    • A visually appealing scrolling background with shader optimizations for performance.
  2. Juiciness and Player Feedback Thanks to animations and particle effects, the game feels lively and responsive:
    • Enemy explosions using a particle system added satisfying feedback.
    • Added juice like a "1-life warning" to amplify the sense of urgency and engagement.
  3. Problem Solving and Debugging
    • Overcoming issues like event misfires, and alignment problems with nodes taught me the importance of systematic debugging.
    • Resolved performance concerns related to background scrolling and enemy waypoints by leveraging shaders and smart logic.
  4. Publishing and Web Optimization
    • I wanted to make it playable through web browser, so that anyone could play it from any PC/Mac. Adapting the game for browser play was a significant win. I learned to modify features like get_tree().quit() to gracefully handle unsupported functionality, ensuring a smooth web experience.

What Was Challenging

  1. User Interface and Input Handling
    • Coordinating visibility and functionality of mouse cursors across gameplay, menus, and splash screens took longer than expected.
  2. Enemy Movement Complexity
    • Creating an unpredictable yet fluid movement system for enemies involved significant testing and balancing. The waypoint-based movement introduced exciting variety, but ensuring enemies moved off-screen reliably without unintended behavior was a challenge.
  3. Victory and Game Over Conditions
    • Handling edge cases, like preventing the pause menu from appearing during victory or game over screens, required multiple iterations to resolve inconsistencies.
  4. Juicy Feedback for Buttons and Icons
    • Animating buttons to respond to mouse inputs revealed quirks in the way Godot handles UI. While I achieved a satisfactory result, some polish opportunities were left for future projects.

What We Decided to Leave Out

  1. Dynamic Background Changes
    • Initially, I planned for the background to change dynamically with each level. However, balancing visual transitions with gameplay focus proved too ambitious within the timeline.
  2. Advanced Enemy AI
    • While the waypoint-based system worked well, adding more reactive behaviors (e.g., dodging player shots) was deferred to avoid feature creep.
  3. Mouse Cursor Visibility in Splash Screen
    • Despite exploring several approaches to hide the cursor during the splash screen, the added complexity and minimal impact on the overall experience led me to leave it as is.
  4. Keyboard and Gamepad Navigation Across Menus
    • Ensuring keyboard and gamepad navigation across menus was surprisingly tricky. Implementing Godot's built-in focus and UI navigation systems required trial and error, especially when transitioning between different screens.

Lessons Learned

  1. Start Small, Finish Big
    • Building upon a simple core mechanic allowed me to expand gradually and refine features without being overwhelmed. This approach gave me confidence as a developer.
  2. The Power of Debugging
    • Debugging taught me patience and persistence. Adding print statements, testing edge cases, and isolating problems were invaluable tools.
  3. Iterate, Don’t Overthink
    • Many ideas that seemed daunting at first became manageable when broken into smaller steps. Tackling one issue at a time led to steady progress.
  4. Compromise is Okay
    • It’s better to ship a polished, functional game with a few cut features than to endlessly chase perfection.

What’s Next

This project has been an incredible learning experience. My goal for the next game is to design it entirely from scratch, using the knowledge and skills I’ve gained:

  • Explore new mechanics, probably in a card game genre (my favourite one).
  • Experiment with procedural generation for level design.
  • Collaborate with others to include unique art and sound.

Final Thoughts

This first game marks a significant milestone in my journey as a game developer. While it’s not perfect, it’s mine, and it’s playable. Sharing it with friends and seeing their reactions has been deeply rewarding. I made heavy use of ChatGPT, but not as a solution whisperer, but as a tutor and a brainstorming tool. It is super valuable, but it doesn't have all the answers and often, I don't know why, it gave answers related to Godot 3, not to Godot 4. Without things I learned before using it, I wouldn't be at this point, but I wouldn't be here either without ChatGPT. I can't wait applying everything I’ve learned to my next project and to discovering even more along the way.

Files

Game.zip 18 MB
Dec 05, 2024

Get Pixel Galaxies

Leave a comment

Log in with itch.io to leave a comment.