escape/assets
Brian Fertig f38e6ba299 feat: data-driven weapon system, projectiles, and enemy AI
Replace hitscan shooting with flying projectiles and introduce a
data-driven weapons.json supporting 8 weapons (melee through double
shotgun) with per-weapon stats for damage, spread, cooldown, ammo,
and explosions.

Enemies patrol authored waypoint loops and engage on sight using
line-of-sight checks, firing skill-based weapon shots with reaction
delays and accuracy scaling (skill 1–10). Each enemy now uses a
13-frame animation sheet (front/left/right/back, walk variants,
aim, fire, pain, dying, dead) with procedural placeholder art per
pose.

Player gains per-weapon ammo pools, number-key weapon switching,
melee combat, and death/restart with score carry-forward. HUD shows
weapon viewmodels, kill notifications, hurt flash, and "YOU DIED"
overlay. Explosive weapons spawn expanding fireball VFX.

New assets: per-enemy sprite sheets, expanded pickups sheet (16
frames), nerf gun HUD images.
2026-07-02 18:11:10 -06:00
..
textures feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
RAW-Gun.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
README.md feat: add door/keys system, patrol paths, and data-driven pickups 2026-07-01 23:08:48 -06:00
gun1.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
gun2.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
gun3.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
gun4.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
gun5.png feat: data-driven content with JSON configs, textured walls, and editor overhaul 2026-07-01 22:14:37 -06:00
nerf-doubleshotgun.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-gatlin.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-knife.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-pistol.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-plasma.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-rifle.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-rocketlauncher.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00
nerf-shotgun.png feat: data-driven weapon system, projectiles, and enemy AI 2026-07-02 18:11:10 -06:00

README.md

Spritesheets

Full art brief — every sheet with dimensions, frame maps, and drawing notes — lives in sprites.md at the project root.

Art is optional: any sheet that is missing (or too small for a requested frame) gets a procedurally generated placeholder baked in its entry's color from the config JSON, so the game always runs.

Layout

Every sheet is a horizontal strip of square frames, left to right. The frame field in the config JSON is the 0-based index into the strip. Frames are 192×192 (walls can override via textureSize in walls.json; baked output is always 192×192).

Expected files (paths are what src/config/*.json references — change them there if you prefer a different arrangement):

File Used by Notes
assets/textures/walls.png walls.json Opaque. Frame per wall id (frame 0 = Gray Brick, …)
assets/textures/overlays.png overlays.json Transparent PNG — composited over wall textures
assets/sprites/items.png items.json Transparent PNG — billboard props (plant, lamp, …)
assets/sprites/enemies.png enemies.json Transparent PNG — one frame per enemy type for now
assets/sprites/pickups.png pickups.json Transparent PNG — ammo/health/treasure + keys

A 7-frame walls sheet is therefore 1344×192; a 3-frame enemies sheet 576×192.

You can also point different entries at different files — each unique texture path is loaded once and shared.