A mobile-first tower defense game featuring embroidered lambs defending their textile kingdom from unraveling threats.
The Fighting Lambs of Threadland is a portrait-oriented (9:16) tower defense game built with a custom lightweight canvas engine. Players strategically place towers to defend against waves of enemies, utilizing combos for enhanced effectiveness.
game/
βββ public/
β βββ index.html # Main entry point
β βββ manifest.webmanifest # PWA configuration
β βββ sw.js # Service worker for offline play
β βββ assets/ # All game assets
β βββ sprites/
β β βββ towers/ # Tower sprites (64Γ64px)
β β βββ enemies/ # Enemy sprites (varied sizes)
β β βββ projectiles/ # Projectile sprites (16Γ16px)
β β βββ ui/ # UI icons and elements
β βββ maps/
β β βββ prairie/ # Prairie world tiles
β β βββ desert/ # Desert world tiles
β β βββ forest/ # Forest world tiles
β βββ interstitials/ # Wave transition images (540Γ960px)
β βββ audio/
β β βββ music/ # Ambient music loops
β β βββ sfx/ # Sound effects
β βββ icons/ # PWA icons (various sizes)
β βββ screenshots/ # Store screenshots
βββ src/
βββ main.js # Game bootstrap
βββ engine/ # Custom game engine
βββ scenes/ # Game scenes
βββ systems/ # Game systems
βββ ui/ # UI components
βββ data/ # Game configuration (JSON)
Location: public/assets/sprites/towers/
Naming Convention: tower-{towerType}.png
Required Files:
tower-pinLauncher.pngtower-buttonMortar.pngtower-woolCannon.pngtower-patchTotem.pngtower-spindleWard.pngSpecifications:
Example: Pin Launcher should show a decorative pin or needle with embroidered details.
Location: public/assets/sprites/enemies/
Naming Convention: enemy-{enemyType}.png
Required Files:
enemy-wolf.png (24Γ24px)enemy-threadling.png (18Γ18px)enemy-nightmoth.png (22Γ22px)enemy-tatterbeast.png (32Γ32px)enemy-spindler.png (26Γ26px)Specifications:
Note: Sizes vary by enemy type (see data/enemies.json for exact dimensions).
Location: public/assets/sprites/projectiles/
Naming Convention: projectile-{type}.png
Required Files:
projectile-pin.png (16Γ16px)projectile-button.png (20Γ20px)projectile-wool.png (24Γ24px)projectile-dart.png (12Γ12px)Specifications:
Location: public/assets/interstitials/
Required Files:
prairie.webp - Green fields, wildflowers, woven grass patternsdesert.webp - Sand dunes, warm colors, frayed fabric texturesforest.webp - Deep greens, tree trunks as thread spools, tangled vinesSpecifications:
Important: These images are central to the gameβs visual identity. They should be stunning textile/embroidery art that represents each world.
Location: public/assets/sprites/ui/
Suggested Files:
icon-fleece.png - Currency icon (24Γ24px)icon-heart.png - Lives/health (24Γ24px)icon-speed.png - Speed toggle (24Γ24px)icon-pause.png - Pause button (24Γ24px)icon-upgrade.png - Upgrade button (32Γ32px)icon-sell.png - Sell button (32Γ32px)Specifications:
Music Location: public/assets/audio/music/
Suggested Files:
prairie-ambient.mp3 - Gentle, pastoral loopdesert-ambient.mp3 - Sparse, warm, mysticalforest-ambient.mp3 - Dense, mysterious, organicSpecifications:
SFX Location: public/assets/audio/sfx/
Suggested Files:
tower-place.mp3 - Tower placement soundtower-fire-pin.mp3 - Pin launcher firetower-fire-button.mp3 - Button mortar firetower-fire-wool.mp3 - Wool cannon fireenemy-hit.mp3 - Enemy takes damageenemy-die.mp3 - Enemy deathwave-complete.mp3 - Wave completionswipe-transition.mp3 - Fabric rustle for transitionscombo-activate.mp3 - Combo trigger soundbutton-click.mp3 - UI button pressSpecifications:
Location: public/assets/icons/
Required Sizes:
icon-72.png (72Γ72)icon-96.png (96Γ96)icon-128.png (128Γ128)icon-144.png (144Γ144)icon-152.png (152Γ152)icon-192.png (192Γ192)icon-384.png (384Γ384)icon-512.png (512Γ512)icon-maskable-192.png (192Γ192 with safe zone)icon-maskable-512.png (512Γ512 with safe zone)Specifications:
Location: public/assets/maps/{world}/
Optional Files (for enhanced visuals):
{world}-background.png - Full background layer{world}-path.png - Path overlay texture{world}-tile-*.png - Individual tile variationsSpecifications:
Prairie Threads:
Desert Wastes:
Tangled Forest:
public/index.html in a browserQuick Test Server:
# Navigate to game directory
cd game/public
# Start a simple HTTP server (Python 3)
python3 -m http.server 8000
# Or use Node.js
npx serve
# Then open http://localhost:8000 in your browser
Before deploying, ensure you have:
# From the game directory
cd game/public
python3 -m http.server 8000
# Open http://localhost:8000
Deploy the public/ directory to any static hosting:
Ensure HTTPS is enabled for PWA functionality.
All game data is in JSON files under src/data/:
towers.json - Tower stats, costs, upgradesenemies.json - Enemy HP, speed, rewardswaves.json - Wave compositions per worldcombos.json - Combo definitions and bonusesFeel free to edit these to balance gameplay!
| Tower | Cost | Damage | Range | Fire Rate | Special |
|---|---|---|---|---|---|
| Pin Launcher | 100 | 10 | 150 | 0.5s | Fast shooter |
| Button Mortar | 150 | 15 | 140 | 1.2s | Splash (60px) |
| Wool Cannon | 200 | 40 | 180 | 2.0s | Heavy damage |
| Patch Totem | 180 | 0 | 120 | - | Support/buff |
| Spindle Ward | 120 | 12 | 160 | 0.6s | Anti-air |
| Enemy | HP | Speed | Type | Reward |
|---|---|---|---|---|
| Wolf | 30 | 80 | Ground | 10 |
| Threadling | 15 | 60 | Ground | 5 |
| Nightmoth | 25 | 70 | Air | 15 |
| Tatterbeast | 200 | 30 | Ground | 30 |
| Spindler | 40 | 50 | Air | 20 |
| Combo | Towers | Bonus |
|---|---|---|
| Needleburst | Pin + Button | +30% fire rate, +5 damage |
| Sky Stitcher | Button + Spindle | +30 range, air targeting |
| Guardian Loom | Wool + Patch | +50% damage, +10 armor |
Game Design & Development: Faux Embroidery Fabric Engine: Custom Canvas 2D Engine (No Phaser) Assets: To be created (see above)
[Add your license here]
For questions or issues, please open an issue on GitHub or contact [your contact info].
Ready to start creating assets? Follow the guides above and bring Threadland to life! π§΅β¨