Skip to content

Commit 6253a1c

Browse files
authored
Merge pull request #5 from Alexoid1/update-1
Update 1
2 parents 08fcd81 + 21e56f3 commit 6253a1c

52 files changed

Lines changed: 12408 additions & 12547 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

CONTEXT.md

Lines changed: 259 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,259 @@
1+
# AI CONTEXT - RoboBlaster Game
2+
# Para uso exclusivo del asistente de IA
3+
4+
## PROYECTO: Juego de plataformas Phaser 3 (MegaMan-style)
5+
**Tipo**: Videojuego educativo/capstone assessment
6+
**Estado**: Completado, funcional
7+
**Live URL**: https://robo-blaster-game.netlify.app/
8+
9+
## ESTRUCTURA CLAVE (quick reference)
10+
11+
### PUNTO DE ENTRADA
12+
- `src/index.js` → Clase Game extiende Phaser.Game
13+
- `window.game = new Game()` → Instancia global
14+
- `this.globals = { model, bgMusic: null }` → Estado global
15+
16+
### CONFIGURACIÓN PHASER
17+
- `src/Config/config.js` → type: Phaser.AUTO, 1000x630, physics: arcade
18+
- NO gravity por defecto (y: 0), debug: false
19+
20+
### JERARQUÍA DE CLASES
21+
```
22+
Entity (base class)
23+
├── Player (hp: 1000, damage: 10)
24+
├── ChaserDude (enemy)
25+
└── JumperDude (enemy)
26+
27+
Game extends Phaser.Game
28+
└── 8 Scenes (Boot, Preloader, Menu, Game, GameOver, etc.)
29+
30+
Componentes:
31+
- Laser/LaserGroup (disparos)
32+
- Slash/SlashGroup (ataques melee)
33+
- Sound (audio management)
34+
- Button (UI)
35+
```
36+
37+
### ESCENAS (8 total)
38+
1. BootScene → PreloaderScene → MenuScene
39+
2. MenuScene → GameScene (main gameplay)
40+
3. GameScene → GameOverScene (on death)
41+
4. Side scenes: LeaderBoardScene, CreditsScene, OptionsScene
42+
43+
### ARCHIVOS CRÍTICOS PARA MODIFICAR
44+
- `src/Js/Player.js` → Lógica del jugador, sistema de corazones, doble salto
45+
- `src/Scenes/GameScene.js` → Gameplay principal, tile world, rampas, UI corazones
46+
- `src/Js/Entity.js` → Clase base para todas las entidades
47+
- `src/Config/config.js` → Configuración Phaser
48+
- `src/Scenes/PreloaderScene.js` → Carga de assets de tiles, corazones, splat.png
49+
- `src/Js/Laser.js` → Proyectiles con splat.png
50+
51+
## PATRONES DE CÓDIGO DETECTADOS
52+
53+
### IMPORT/EXPORT
54+
```javascript
55+
// Todos usan ES6 modules
56+
import Phaser from 'phaser';
57+
import Entity from './Entity';
58+
export default class Player extends Entity
59+
```
60+
61+
### CONSTRUCTORES TÍPICOS
62+
```javascript
63+
constructor(config) {
64+
super({ ...config, texture: 'stand' });
65+
this.body.setSize(160, 200);
66+
this.setScale(0.5);
67+
// Player-specific
68+
this.hp = 1000;
69+
this.damage = 10;
70+
// Sistema de corazones
71+
this.maxHearts = 3;
72+
this.hearts = 3;
73+
this.isInvulnerable = false;
74+
// Sistema de doble salto
75+
this.jumpsAvailable = 2;
76+
this.jumpForce = -470;
77+
this.doubleJumpForce = -350;
78+
}
79+
```
80+
81+
### MÉTODOS COMUNES EN ENTITIES
82+
- `damageOrKill(damage)` → Aplica daño, retorna true si muere
83+
- `die()` → Maneja muerte
84+
- `update()` → Lógica por frame (override de Phaser)
85+
- `activateInvulnerability(duration)` → Activa invulnerabilidad con parpadeo
86+
- `updateJumpState(onGround)` → Actualiza estado de saltos
87+
- `tryJump()` → Intenta realizar salto (doble salto)
88+
- `addHeart()` → Añade corazón al jugador
89+
90+
### CONVENCIONES DE NOMBRES
91+
- Clases: PascalCase (Player, GameScene, ChaserDude)
92+
- Métodos: camelCase (damageOrKill, update)
93+
- Variables: camelCase (bgMusic, touchDamage)
94+
- Archivos: PascalCase para clases, camelCase para utilidades
95+
96+
## SISTEMA DE ARCHIVOS RELEVANTE
97+
98+
### src/Js/ (core game logic)
99+
```
100+
Entity.js # Base class for all game entities
101+
Player.js # Main player (extends Entity)
102+
ChaserDude.js # Chasing enemy
103+
JumperDude.js # Jumping enemy
104+
Laser.js # Projectile class
105+
LaserGroup.js # Projectile group management
106+
Slash.js # Melee attack
107+
SlashGroup.js # Melee attack group
108+
Sound.js # Audio management
109+
Button.js # UI buttons
110+
```
111+
112+
### src/Scenes/ (game states)
113+
```
114+
BootScene.js # Initialization
115+
PreloaderScene.js # Asset loading
116+
MenuScene.js # Main menu
117+
GameScene.js # Main gameplay
118+
GameOverScene.js # Game over screen
119+
LeaderBoardScene.js# Score leaderboard
120+
CreditsScene.js # Credits
121+
OptionsScene.js # Game options
122+
```
123+
124+
### UTILITIES
125+
```
126+
src/Js/api.js # API calls (leaderboard)
127+
src/Js/dom.js # DOM manipulation
128+
src/Js/localStorage.js # Local storage wrapper
129+
```
130+
131+
## DEPENDENCIAS Y BUILD
132+
133+
### package.json highlights
134+
```json
135+
"scripts": {
136+
"test": "jest",
137+
"build": "webpack --config webpack/prod.js",
138+
"start": "webpack-dev-server --config webpack/base.js --open"
139+
},
140+
"dependencies": {
141+
"phaser": "^3.24.1"
142+
}
143+
```
144+
145+
### Webpack configs
146+
- `webpack/base.js` → Desarrollo
147+
- `webpack/prod.js` → Producción
148+
149+
### Testing setup
150+
- Jest con `jest-canvas-mock`
151+
- Mocks para assets (.gif, .png, etc.)
152+
- `test/mocks/fileMock.js`
153+
154+
## VARIABLES DE ESTADO GLOBAL
155+
```javascript
156+
// En src/index.js
157+
this.globals = {
158+
model: new Sound(), // Audio state
159+
bgMusic: null // Current background music
160+
};
161+
162+
// En Player.js (SISTEMA DE CORAZONES)
163+
this.maxHearts = 3; // Máximo de corazones (3 corazones completos = 6 medios)
164+
this.hearts = 3; // Corazones actuales
165+
this.isInvulnerable = false; // Estado de invulnerabilidad
166+
this.invulnerabilityTimer = null; // Temporizador de invulnerabilidad
167+
this.alive = true; // Estado de vida
168+
this.damage = 10; // Base damage
169+
170+
// Sistema de doble salto
171+
this.jumpsAvailable = 2; // Saltos disponibles (doble salto)
172+
this.jumpForce = -470; // Fuerza del primer salto
173+
this.doubleJumpForce = -350; // Fuerza del segundo salto (75% del primero)
174+
this.wasOnGround = true; // Para detectar cuando toca el suelo
175+
```
176+
177+
## PHYSICS CONFIGURATION
178+
- Arcade physics (no gravity default)
179+
- Player: `setGravityY(520)` → Custom gravity
180+
- `setCollideWorldBounds(true)` → No salir de pantalla
181+
- Body size: 160x200 (Player), scaled 0.5
182+
183+
## EVENTOS Y COLISIONES
184+
- Phaser built-in collision system
185+
- Groups para manejo de múltiples entidades
186+
- Scene events para transiciones
187+
188+
## ASSETS Y MEDIA
189+
- Directorio `images/` para sprites y UI
190+
- Sonidos manejados por clase `Sound`
191+
- PreloaderScene carga todos los assets
192+
- **Tile assets**: `/home/pablo/Documentos/spreets/kenney_new-platformer-pack-1.1/Sprites/Tiles/Double/`
193+
- **Ramp tiles**: `terrain_stone_ramp_long_a`, `terrain_stone_ramp_long_b`, `terrain_stone_ramp_long_c`
194+
- **Heart system**: `hud_heart`, `hud_heart_half`, `hud_heart_empty`, `heart` (collectible)
195+
- **Projectile**: `splat.png` usado como `redlight` y `splat`
196+
197+
## COMMON TASKS & LOCATIONS
198+
199+
### Añadir nuevo enemigo
200+
1. Crear clase en `src/Js/` que extienda `Entity`
201+
2. Añadir a `GameScene.js` en `create()` method
202+
3. Configurar física y comportamiento en `update()`
203+
204+
### Modificar jugador
205+
- `src/Js/Player.js` → Stats, movimiento, habilidades
206+
- `src/Scenes/GameScene.js` → Input handling, game logic
207+
208+
### Añadir nueva escena
209+
1. Crear archivo en `src/Scenes/`
210+
2. Importar en `src/index.js`
211+
3. Añadir a `this.scene.add()`
212+
4. Configurar transiciones desde otras escenas
213+
214+
### Modificar UI
215+
- `src/Js/Button.js` → Botones reutilizables
216+
- Cada Scene tiene sus propios elementos UI
217+
- DOM manipulation en `src/Js/dom.js`
218+
219+
## GOTCHAS Y NOTAS TÉCNICAS
220+
221+
1. **NO gravity por defecto** → Player tiene gravity personalizada (520)
222+
2. **Entity es clase abstracta** → Todas las entidades la extienden
223+
3. **window.game es global** → Acceder desde cualquier lugar
224+
4. **Scene management** → Phaser maneja transiciones automáticas
225+
5. **Audio via Sound class** → No usar Phaser audio directamente
226+
6. **Testing requiere mocks** → Canvas y assets mockeados
227+
7. **Arcade physics solo rectángulos/círculos** → Rampas implementadas con múltiples cuerpos pequeños
228+
8. **Sistema de corazones** → 3 corazones = 6 medios, invulnerabilidad 3 segundos tras daño
229+
9. **Doble salto** → 2 saltos disponibles, segundo salto 75% fuerza del primero
230+
10. **Shooting while running** → Separado de lógica de movimiento en GameScene.js
231+
232+
## QUICK COMMANDS
233+
```bash
234+
# Ver estado actual
235+
git status
236+
npm run test
237+
238+
# Desarrollo
239+
npm start # http://localhost:8080
240+
241+
# Build
242+
npm run build # Output en dist/
243+
244+
# Ver estructura
245+
find src -name "*.js" | grep -v node_modules
246+
```
247+
248+
## CONTACT POINTS FOR MODIFICATIONS
249+
- **Game balance**: `Player.js` (hp, damage), enemy classes
250+
- **Graphics**: `images/` directory, Scene preload methods
251+
- **Audio**: `Sound.js`, Scene create methods
252+
- **UI**: `Button.js`, Scene create methods
253+
- **Game flow**: Scene transition methods
254+
- **Physics**: `config.js`, Entity constructors
255+
- **Tile system**: `GameScene.js` createTileWorld(), PreloaderScene.js
256+
- **Ramp physics**: `GameScene.js` createRealRamp()
257+
- **Heart system**: `Player.js` damageOrKill(), `GameScene.js` createHeartsUI()
258+
- **Double jump**: `Player.js` tryJump(), `GameScene.js` update() jump logic
259+
- **Shooting**: `Laser.js`, `LaserGroup.js`, `GameScene.js` shooting logic

0 commit comments

Comments
 (0)