Initial commit: Western Shooter - Complete implementation
Retro western vertical shooter inspired by Gun.Smoke, built with TypeScript and WebGL2. Features 3-direction shooting, vertical scrolling, economy/shop loop, boss fights, and CRT shader effects. Phases implemented: - Phase 1: Engine skeleton (WebGL2 renderer, fixed timestep loop, input) - Phase 2: Shooting identity (3-dir shooting, bullet pools, collision) - Phase 3: Enemies & patterns (JSON waves, 4 enemy types, parallax bg) - Phase 4: Economy loop (pickups, shop, upgrades, HUD) - Phase 5: Boss system (3 bosses, wanted posters, multi-phase attacks) - Phase 6: Shader layer (CRT effects, bloom, scanlines, screen shake) - Phase 7: Performance (VAO batching, O(1) allocation, stress testing) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
{
|
||||
"id": "stage1",
|
||||
"name": "Dusty Trail",
|
||||
"scrollSpeed": 20,
|
||||
"waves": [
|
||||
{
|
||||
"id": "wave1",
|
||||
"duration": 5,
|
||||
"spawns": [
|
||||
{ "type": "bandit", "x": "center", "delay": 0 },
|
||||
{ "type": "bandit", "x": "left", "delay": 0.5 },
|
||||
{ "type": "bandit", "x": "right", "delay": 0.5 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "wave2",
|
||||
"duration": 6,
|
||||
"spawns": [
|
||||
{ "type": "gunman", "x": "left", "delay": 0 },
|
||||
{ "type": "gunman", "x": "right", "delay": 0 },
|
||||
{ "type": "bandit", "x": "center", "delay": 1 },
|
||||
{ "type": "bandit", "x": "random", "delay": 2 },
|
||||
{ "type": "bandit", "x": "random", "delay": 2.5 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "wave3",
|
||||
"duration": 7,
|
||||
"spawns": [
|
||||
{ "type": "rifleman", "x": "center", "delay": 0 },
|
||||
{ "type": "bandit", "x": "left", "delay": 0.5 },
|
||||
{ "type": "bandit", "x": "right", "delay": 0.5 },
|
||||
{ "type": "gunman", "x": "random", "delay": 2 },
|
||||
{ "type": "gunman", "x": "random", "delay": 3 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "wave4",
|
||||
"duration": 8,
|
||||
"spawns": [
|
||||
{ "type": "dynamite", "x": "center", "delay": 0 },
|
||||
{ "type": "bandit", "x": "left", "delay": 0 },
|
||||
{ "type": "bandit", "x": "right", "delay": 0 },
|
||||
{ "type": "rifleman", "x": "left", "delay": 2 },
|
||||
{ "type": "rifleman", "x": "right", "delay": 2 },
|
||||
{ "type": "gunman", "x": "center", "delay": 4 }
|
||||
]
|
||||
},
|
||||
{
|
||||
"id": "wave5",
|
||||
"duration": 10,
|
||||
"spawns": [
|
||||
{ "type": "gunman", "x": "left", "delay": 0 },
|
||||
{ "type": "gunman", "x": "right", "delay": 0 },
|
||||
{ "type": "gunman", "x": "center", "delay": 0 },
|
||||
{ "type": "rifleman", "x": "random", "delay": 2 },
|
||||
{ "type": "rifleman", "x": "random", "delay": 2.5 },
|
||||
{ "type": "dynamite", "x": "random", "delay": 4 },
|
||||
{ "type": "bandit", "x": "random", "delay": 5 },
|
||||
{ "type": "bandit", "x": "random", "delay": 5.5 },
|
||||
{ "type": "bandit", "x": "random", "delay": 6 }
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user