jeffsquared dot com
Hello there, I’m Jeff, a software engineer. This page documents toy video games I’ve created on a journey to learn video game development. Games are listed in chronological order. All games are developed in Unity 6 unless otherwise noted. I don’t use LLMs or Generative AI for content, code, art, music, etc. - only for Googling things.
Table of contents
Game 1: Sprite Flight
Sprite Flight is a 2D space evasion game built from a Unity Engine tutorial. Use the mouse to steer and and left click (or W key on US keyboards) to boost forward. It features an immunity window, particle effects, and uses the Unity physics engine. This is the only game created directly via tutorial.
- Download: WebGL (in-browser)
- Challenges: Fine tuning Unity Editor for faster debug/loading times
- Favorite Part: Shipping a game
- Assets:
- Code: Jeff
- SFX/Music: Unity Tutorial-provided
- 2D Assets: Jeff
- UI: Jeff
- Particles: Jeff
- Fonts: Szymon Furjan
- LLMs Used: None
Game 2: JeffPong
JeffPong is a 2D pong clone built fully from scratch. It features basic enemy AI and ball fuzzing to reduce lulls in the game. Use the mouse to move the paddle. First to 5 points wins.
- Download: WebGL (in-browser)
- Challenges: Re-learning vector3/vector2 math, pong doesn’t obey normal physics, using physics is folly; simple reflections are too perfect leading to game lulls, gameplay needs further fine tuning.
- Favorite Part: Implementing a ball fuzzing function.
- Assets:
- Code: Jeff
- SFX/Music: Jeff
- 2D Assets: kenney.nl - Creative Commons CC0
- UI: Jeff
- Particles: None
- Fonts: Google Fonts (OFL)
- LLMs Used: None
Game 3: JeffBreakout
JeffBreakout is a 2D Breakout clone built fully from scratch. It features bounce exaggeration based on where the player hits the ball on the paddle to give the player more control. Levels are auto generated via a very simple algorithm.
- Download: WebGL (in-browser)
- Challenges: Fine tuning runtime brick generation and positioning, bounding boxes, local vs world positioning, auto generated levels, analyzing breakout physics, seeing serious limitations without a proper event system, avoiding scope creep, exaggerating bounces
- Favorite Part: incorporating sound effects all at once and seeing the result; bounce exaggeration function
- Assets:
- Code: Jeff
- SFX/Music: Jeff
- 2D Assets: kenney.nl - Creative Commons CC0
- UI: Jeff
- Particles: None
- Fonts: Google Fonts OFL
- LLMs Used: None
Game 4: JeffSpaceInvaders
JeffSpaceInvaders is a 2D Space Invaders clone built from scratch. This clone focuses on relatively rapid gameplay rather than the slow, measured mechanics of the classic game. It features 3 levels, 4 enemy types, 4 projectile types, particle explosions, game pausing, and uses a pub/sub event system. For this game, I focused on finding good patterns and implementing them. Special thanks to O’Reilly’s Unity Game Development Cookbook (Buttfield-Addison).
- Download: WebGL (in-browser)
- Tidbits and Challenges:
- First time using various concepts in Unity: sprite atlas, difficulty levels, loading levels, prefab variants, animation, custom particles, pub/sub event system, Unity UI Toolkit transitions, time vs unscaledTime.
- Logic to ensure only bottom enemy shoots - initially didn’t have columns set up, required changes to enemyZone generation
- Event system revealed all the work that was ahead for decoupling
- Ensuring prefabs are organized and varianted appropriately
- Learning animation keyframes and curves for UFO movement
- Deciding to treat UFO like any other enemy was a mistake
- Refactoring UI to be active by default and use new USS to fade in/out
- Favorite Parts:
- SFX, gameplay tuning, adding fade in/out to UI transitions, tick tock controller for enemy movement.
- Assets:
- Code: Jeff
- SFX/Music: Most SFX made by Jeff, with a few SFX from kenney.nl, and BGM from Jonathan So’s Creator’s Game Pack
- 2D Assets: kenney.nl - Creative Commons CC0, space bg image Screaming Brain Studios
- UI: Jeff
- Particles: Jeff
- Fonts: Google Fonts OFL
- LLMs Used: Once, to generate a hex color gradient for the explosions.