Darkstar Dogfight

Overview

Darkstar Dogfight is a high-octane, space-themed bullet hell shooter inspired by the classic Galaga arcade game. In this action-packed title, players face waves of enemies, each with its own unique attack patterns, while dodging a constant barrage of bullets. As the game progresses, the difficulty steadily ramps up, challenging players to stay sharp and keep improving their skills to achieve the highest score.

At the heart of the gameplay are the power-ups, which provide a limited-time boost to your ship’s abilities. Players can pick up power-ups such as bullet spread, rapid fire, and increased movement speed, each offering a temporary advantage in the heat of battle. The catch is that these power-ups last for a set amount of time, adding a layer of strategy as players must maximize their effectiveness while they last.

In addition to power-ups, players have access to rockets, which can be fired for a powerful Area-of-Effect (AoE) splash attack. These rockets deal heavy damage to multiple enemies in the vicinity, offering a strategic way to clear out tougher waves or deal with clusters of enemies. However, players only have four rockets at their disposal, so timing and usage are critical to making the most of this weapon.

To help evade tricky situations, players can use the Jump Drive—a versatile tool that allows you to flash in any direction in the heat of combat. The Jump Drive is perfect for escaping dangerous spots or dodging incoming enemy fire, giving players an essential tool for survival in the increasingly chaotic battlefields of Darkstar Dogfight.

The game culminates in epic boss battles, where each boss brings unique attack patterns and challenges. These bosses are not only a test of reflexes but also require tactical thinking to defeat. Many bosses have multiple attack phases, making the battles even more intense as players must adapt to new patterns and attacks in real time.

With Darkstar Dogfight, the goal is simple: survive longer, score higher, and compete against others to climb the leaderboards. Every run is a race against time and difficulty, as players are constantly pushed to their limits, with new enemies and bosses testing their skills at every turn.

Arcade-Style Leaderboard

One of the features I added to the game was a live scoreboard, inspired by the classic arcade games. I wanted to give players and visitors the sense of competition by displaying other players' scores in real time. To keep the system simple and lightweight, I opted for a straightforward approach using a JSON file along with JavaScript on the front end. This allowed me to avoid unnecessary complexity while still achieving the goal of a dynamic leaderboard.

The game generates a JSON file that holds the current scores, which is served by an Nginx web server. This file is constantly updated with new scores as players complete the game. On the front end, a JavaScript script regularly refreshes the page, fetching the latest scores from the server and displaying them on the leaderboard. This ensures that visitors to the site always see the most up-to-date results, just like they would in a real arcade.

Interestingly, all of this is powered by just one computer. The game is played on a large monitor where players interact with it, while on a separate laptop screen, I have a full-screen webpage running, which serves as the live scoreboard. This webpage is hosted locally on the same laptop that serves the game. Everything — the game, the scoreboard, and the web server — runs seamlessly on this single machine, creating a self-contained experience for visitors.

The simplicity of this setup allows it to function smoothly while keeping the codebase clean and maintainable. However, the system is designed with scalability in mind. While the current implementation works well for a small-scale setup, I envision expanding it in the future by integrating a more robust back-end server. This would allow the game to handle more advanced features, such as storing persistent high scores, managing user profiles, and even supporting custom leaderboards based on different game modes. Instead of relying on a static JSON file, the game could then send API requests to the server to keep track of scores, offering more flexibility and scalability as the project grows.