fazt/dust-strike

Shooter táctico 3D en primera persona estilo CS:GO con Three.js — mapa, armas, bots, efectos y audio 100% procedurales

★ 0Forks 0JavaScriptGitHub ↗Compare
prototype

README

DUST STRIKE

Shooter táctico 3D en primera persona inspirado en CS:GO, hecho con Three.js y Vite. Sin assets externos: el mapa, las armas, los bots, los efectos y los sonidos son 100% procedurales — texturas dibujadas en <canvas>, modelos con geometrías primitivas y audio sintetizado con la Web Audio API.

⚠️ Prototipo. Proyecto de exploración técnica, no un juego terminado. Nombres y armas son un homenaje a CS:GO; ningún asset original de Valve está incluido.

Ejecutar

npm install
npm run dev

Build de producción: npm run build y npm run preview.

Controles

Tecla Acción
WASD Moverse
Ratón Apuntar · Click izq. disparar
R Recargar
Espacio / Ctrl / Shift Saltar / agacharse / caminar
1 · 2 · 3 / Q / Rueda Cambiar de arma
B Menú de compra (primeros 20s de ronda)
Tab Marcador
ESC Pausa

Jugabilidad

  • Rondas de 1:55 contra bots terroristas; gana al eliminarlos a todos.
  • Economía estilo CS: +$300 por baja (+$1500 con cuchillo), +$3250 por ronda ganada, +$1400 por perdida.
  • Armas: USP-S (inicial), Desert Eagle, AK-47, M4A4 y cuchillo; retroceso con patrón, spread por movimiento, headshots ×4.
  • Chaleco + casco absorbe daño. Los bots patrullan por waypoints, cazan por sonido y combaten con ráfagas.

Arquitectura

src/
├─ main.js            Arranque: menú, pointer lock y bucle principal
├─ core/
│  ├─ game.js         Estado de ronda, economía, spawns y orquestación
│  ├─ input.js        Teclado, ratón y pointer lock
│  ├─ physics.js      Colisionadores AABB y resolución de movimiento (moveBody)
│  └─ audio.js        Síntesis Web Audio: disparos, pasos, recargas, impactos
├─ world/
│  ├─ map.js          Mapa procedural + grafo de waypoints y pathfinding
│  └─ effects.js      Partículas, impactos, fogonazos y trazadoras
├─ player/
│  ├─ player.js       Cámara, movimiento, agacharse, salto y daño
│  └─ weapons.js      Tabla de armas (daño, RPM, spread, retroceso) y viewmodels
├─ enemies/bot.js     IA: patrulla, percepción visual/auditiva y combate
└─ ui/hud.js          HUD, marcador, menú de compra y killfeed

Física propia, sin motor externo: PhysicsWorld mantiene una lista de cajas AABB y moveBody resuelve el desplazamiento eje a eje, lo que da colisiones estables contra paredes y cajas sin necesidad de Ammo/Cannon.

IA por waypoints: map.js publica el grafo de navegación del nivel y los bots buscan ruta con findPath, alternando entre patrulla, investigación de un sonido y combate según lo que ven u oyen.

Todo procedural: makeTexture pinta las texturas en un canvas 2D y las sube como CanvasTexture; el audio se genera con osciladores y buffers de ruido. El resultado es un juego completo que no descarga ni un solo archivo de assets.

Contributors

fazt

Issues