← All projects

Independent project · 2021–2022

Light in the Dark

A top-down survival shooter where distinct enemy behaviors and mid-run upgrades reshape an escalating wave challenge.

Light in the Dark title artwork featuring the player character.
Role
Solo Developer
Genre
2D wave shooter
Technology
Unity · C#
Status
Published on itch.io

Overview

My first published Unity game

Light in the Dark began as a learning project and became the first game I carried through a complete release. I designed and implemented the core combat loop, enemy roster, wave progression, soul economy, upgrades, menus, controls, and supporting artwork.

Building the entire experience taught me how much work exists beyond an isolated mechanic. Difficulty, feedback, interface flow, content, and release preparation all had to support the same playable loop.

Playable result

A complete survival loop

Each run begins under immediate pressure. The player moves, aims, and fires while new waves introduce greater numbers and more varied threats. Defeated enemies provide souls that can be exchanged for upgrades before the pressure resumes.

View on itch.io ↗

My contribution

From core mechanic to playable release

I built the game as a connected set of systems rather than a collection of disconnected features.

01

Enemy behaviors

Created four enemy families with different navigation, range, vulnerability, and death behaviors so each one changes how the player uses space.

02

Wave progression

Connected enemy spawning and escalating difficulty to an endless-survival structure that steadily increases pressure and variety.

03

Soul economy

Rewarded defeated enemies with souls and connected that currency to purchases made during a run.

04

Player upgrades

Implemented improvements to firing speed, projectile output, and health that let the player respond to increasing danger.

05

Game flow and UI

Built the menus, upgrade interface, controls, win-and-loss flow, and restart path needed to make the project independently playable.

06

Visual production

Created and adapted character, enemy, icon, animation, and menu artwork into a consistent grayscale presentation.

Enemy design

Four behaviors, four kinds of pressure

The roster was intentionally small. Each enemy received a readable rule that asked the player to react differently.

Zombie enemy from Light in the Dark.

Zombie

A direct melee pursuer that creates consistent close-range pressure and becomes dangerous when allowed to gather into a group.

Skeleton enemy from Light in the Dark.

Skeleton

A ranged attacker that throws bones from a distance but retreats when the player closes in, reversing the usual chase relationship.

Ghost enemy from Light in the Dark.

Ghost

A phasing threat that passes through obstacles and only becomes vulnerable near the player, forcing risky close-range timing.

Spider enemy from Light in the Dark.

Spider

A slower enemy that splits into two fast baby spiders when defeated, turning an apparent success into a new positioning problem.

Design challenge

Creating variety from a simple foundation

The primary mechanic is intentionally straightforward: move, aim, and fire while surviving a growing horde. The challenge was making that loop remain interesting as pressure increased.

I combined enemy rules, wave pacing, and upgrades so the player repeatedly reevaluates positioning and priorities instead of only responding to higher enemy health.

Core gameplay loop

  1. 1Enter an enemy wave
  2. 2Read and prioritize threats
  3. 3Defeat enemies and collect souls
  4. 4Purchase upgrades and face stronger pressure
Faster firing
Double shot
Restore health

Development process

From guided learning to an original release

I began with guided Unity material, then branched into independent research, additional systems, original enemy rules, and the work required to publish the finished build.

01

Learn the foundation

Used a structured course to understand Unity’s core workflow and establish a working player-and-enemy prototype.

02

Move beyond the tutorial

Researched and implemented additional enemy behaviors, progression, interface, and artwork around my own design direction.

03

Control the scope

Recognized feature creep—including plans for an unnecessary multiplayer mode—and refocused the project on a finishable single-player experience.

04

Publish the result

Completed the menus and game flow, packaged the build, and released my first game publicly on itch.io.

Takeaways

Lessons carried into later work

Finish the whole loop

Menus, controls, difficulty, feedback, and release preparation matter as much as the central mechanic.

Give enemies clear rules

Distinct behaviors create more meaningful decisions than simply increasing health or movement speed.

Define the finish line

Reducing feature creep helped me turn a growing learning project into something people could actually play.