A retro-styled egg drop puzzle game inspired by Nintendo Land's Coin Game. Drop eggs from a moving bird to hit all targets while bouncing off pegs.
- Pixel-perfect retro rendering at 320x240, scaled to 1280x720
- Game Boy style shader with dot matrix effect
- 5 unique levels with increasing difficulty
- Two peg types:
- Square pegs (destructible, 3 hits)
- Round pegs (indestructible)
- Dynamic sound effects with pitch variation for natural audio variety
- Level progression with win detection
- Hot reload for rapid development
- Arcade-style physics with satisfying bouncing
- Play online - Playable in browser via GitHub Pages
- SPACE or Left Click - Drop egg
- F1 - Toggle debug overlay
- F2 - Toggle shader effect
- F3 - Skip to next level (debug)
- ESC - Quit game
- The bird moves back and forth at the top of the screen
- Press SPACE or click to drop eggs
- Hit all blue target circles to turn them orange
- Use pegs to bounce eggs toward targets
- Complete all targets to progress to the next level
- Win all 5 levels to beat the game!
love .Requires Love2D 11.4 or later.
The game is also available to play in your browser! See DEPLOY.md for deployment instructions.
The game supports hot-reloading with Lurker. Edit any .lua file and save - changes will be reflected instantly in the running game!
lovely/
├── conf.lua # Love2D configuration
├── main.lua # Entry point
├── lib/ # Third-party libraries
│ └── lurker.lua # Hot reload
├── src/
│ ├── entities/ # Game entities (bird, egg)
│ ├── objects/ # Reusable objects (peg, target, wall)
│ ├── systems/ # Core systems (renderer, level, pegs, audio)
│ ├── shaders/ # GLSL shaders
│ └── utils/ # Helper functions
├── levels/ # Level definitions
│ ├── level1.lua
│ ├── level2.lua
│ ├── level3.lua
│ ├── level4.lua
│ └── level5.lua
└── assets/ # Game assets
└── sounds/ # Audio files (.ogg format)
Levels use pixel-perfect coordinate placement. Create a new file in levels/:
return {
-- Play area is 240x240 pixels, starting at x=40
-- Available area: x: 40-280, y: 0-240
objects = {
-- Targets (blue circles that turn orange when hit)
targets = {
{x = 100, y = 50},
{x = 160, y = 50},
{x = 220, y = 50},
},
-- Pegs (obstacles)
pegs = {
-- Square pegs (destructible: white -> pink -> red -> destroyed)
{type = "square", x = 60, y = 90},
{type = "square", x = 120, y = 90},
-- Round pegs (indestructible bounce)
{type = "round", x = 100, y = 130},
{type = "round", x = 160, y = 130},
},
-- Walls (optional, thin line segments)
walls = {
{x1 = 50, y1 = 100, x2 = 200, y2 = 100}, -- Horizontal wall
}
},
config = {
name = "My Level",
bird_speed = 60, -- Speed of bird movement
gravity = 200, -- Gravity force on eggs
par_eggs = 15 -- Target number of eggs (for rating)
}
}Object Types:
- Targets: Blue circles (radius 4px) that turn orange when hit by eggs
- Square pegs: 6x6px destructible blocks (3 hits to destroy)
- Round pegs: 6px radius indestructible circles
- Walls: Thin line segments eggs bounce off of
Update maxLevel in main.lua to include new levels.
The game includes dynamic audio with pitch variation:
- pop.ogg - Egg drop sound
- bounce.ogg - Circle peg collision
- click.ogg - Square peg collision
- sweep.ogg - Target hit
- clack.ogg - Wall collision
All sounds use .ogg format and include random pitch variation for natural variety.
See BUILD.md for instructions on creating distributable versions:
.lovefiles for Love2D users- Platform-specific executables (Windows, macOS)
- Web builds for browser play
See DEPLOY.md for GitHub Pages deployment.
- Engine: Love2D 11.4+
- Language: Lua
- Resolution: 320x240 (scaled to 1280x720)
- FPS: 60 (vsync enabled)
- Physics: Custom arcade-style (not Box2D)
- Audio: OpenAL via Love2D with source pooling
Inspired by Nintendo Land (Wii U) - Coin Game Built with Love2D Shader effects for retro aesthetic Web support via love.js