Compare commits
178 Commits
f91748bdf0
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| c6d409c303 | |||
| 6914f7df93 | |||
| 1dbfff2c17 | |||
| 3493636954 | |||
| 8ff1073e4a | |||
| 6497e26202 | |||
| e0e37204d7 | |||
| 6595b28790 | |||
| 0ddb6c85e1 | |||
| f84007902e | |||
| 49ae2ae41f | |||
| c701421a8f | |||
| 1ecb427106 | |||
| c87779cc09 | |||
| 24594fa89a | |||
| 030779794e | |||
| 495c23a3d2 | |||
| 911ee7a13e | |||
| b876ccbb09 | |||
| 94684e8758 | |||
| 0c116665bc | |||
| d0ed49d192 | |||
| 5e013a8414 | |||
| 0cdbeb768d | |||
| cd0477cc4c | |||
| c6e2779429 | |||
| 9b7abc7725 | |||
| c87d682508 | |||
| 366c00fd22 | |||
| 55b58ded70 | |||
| d946ab7943 | |||
| 167797a7b2 | |||
| 7ec869a6d4 | |||
| 82603c1e41 | |||
| 3a2015256a | |||
| 9df3f1b929 | |||
| 43a6cc2d7a | |||
| aa292dcd92 | |||
| 06457654f4 | |||
| e9fc2e8fa0 | |||
| 23863c02a6 | |||
| 6996b3a82a | |||
| 2b2eb31c67 | |||
| 8aad52f33f | |||
| 4e2393f4d5 | |||
| d9ada12ee0 | |||
| a7d04d2bbc | |||
| c80dffe957 | |||
| 31bbaf997f | |||
| c4d4a3b930 | |||
| d027216dc6 | |||
| 483fe7251d | |||
| 852cda1984 | |||
| 8d9c838be2 | |||
| 9ebf259525 | |||
| f2e45940d5 | |||
| 2ae8fc7440 | |||
| e7860c697e | |||
| a8240a5d82 | |||
| 723ab3d800 | |||
| fda8ff3f65 | |||
| 9ef7f4274d | |||
| bd011a0ebb | |||
| 6052be0c38 | |||
| ec3cc49710 | |||
| 2e1738c20c | |||
| 7479231110 | |||
| 4fc5947ba7 | |||
| a21e6f8bb5 | |||
| d27f978c62 | |||
| 2fd101674e | |||
| e36fa95762 | |||
| 88ce6cd570 | |||
| d011a41d5a | |||
| 039eb20c06 | |||
| 959a513651 | |||
| 1fed8f63bd | |||
| b475c4d818 | |||
| 972d23f178 | |||
| 83d4d0b954 | |||
| ea43880d59 | |||
| 6bf26f7470 | |||
| 0fb986d7c4 | |||
| 9aa86cd531 | |||
| 34840a64cf | |||
| 7d962ae752 | |||
| 28f11a42b7 | |||
| 5337e3b4e5 | |||
| 35ef99cf7c | |||
| cbe71b5af4 | |||
| e73f573e9a | |||
| fa9723dafc | |||
| ceb2b71331 | |||
| 0a5594b9a8 | |||
| 932de53609 | |||
| b7db34cdf7 | |||
| 4477cc4bbc | |||
| 435358ef1e | |||
| fff77e47cf | |||
| 3550f26c45 | |||
| c0905adc62 | |||
| f9b8edc23c | |||
| 6a18d880f2 | |||
| d185a5e72a | |||
| 0c9becae4c | |||
| 6a6cc22b21 | |||
| 3c4092df5e | |||
| 10911990dd | |||
| 21a495e40a | |||
| 6827512025 | |||
| 23fe4a35a9 | |||
| a5d43dfb1f | |||
| e4a61a7241 | |||
| 24a71395da | |||
| e4c10b6b75 | |||
| 710e7cc8c1 | |||
| 8893e8f05b | |||
| 7f51f02d96 | |||
| 29e0daffb0 | |||
| b8dd6e80d9 | |||
| 46eeda4ae9 | |||
| e13a8e5930 | |||
| c59812e4af | |||
| e97c951d0d | |||
| 5365d62abc | |||
| c5ad8041e8 | |||
| 2f90338214 | |||
| 477ab34057 | |||
| 9cf45062a3 | |||
| e626ec9763 | |||
| cf40865d37 | |||
| 580e52a51e | |||
| d6ced94316 | |||
| 54fc6d2902 | |||
| 1821b84e73 | |||
| 6ea0acd3f3 | |||
| b70b728b75 | |||
| 5dd463ad5a | |||
| 1f01268dcf | |||
| 85d34fb907 | |||
| e9fed353ff | |||
| b4f6b919d7 | |||
| 667ab73fc6 | |||
| 7d0e0e0d18 | |||
| 2c92fe8372 | |||
| 6e3cd05cd2 | |||
| 84b5ff05ad | |||
| cf6831206e | |||
| 9e3d3a7ce3 | |||
| 85844645ac | |||
| da159f1409 | |||
| d875a2706b | |||
| 288e01e47f | |||
| a20ea5299d | |||
| 66a580aff6 | |||
| d4030ec1bc | |||
| 3f1c737247 | |||
| 1409ab5bff | |||
| e08badbf22 | |||
| 64f0ef7349 | |||
| 0d19cf18aa | |||
| 87527d01a8 | |||
| b79f30a57b | |||
| 6c766be023 | |||
| ee1dc70bd8 | |||
| eb550ab95b | |||
| 13513384d1 | |||
| f7aa6a2b8b | |||
| ba06bccabc | |||
| 9102c6a65e | |||
| 435ff5eb6a | |||
| af7420d7c7 | |||
| 4eac48ed78 | |||
| c5563768af | |||
| 46f7968faf | |||
| 9cd1755266 | |||
| ef89a858c3 | |||
| d46e2295ff |
@@ -1,6 +1,7 @@
|
||||
BasedOnStyle: Google
|
||||
IndentWidth: 4
|
||||
IndentAccessModifiers: true
|
||||
NamespaceIndentation: All
|
||||
IndentAccessModifiers: false
|
||||
ColumnLimit: 0 # Sin límite de longitud de línea
|
||||
BreakBeforeBraces: Attach # Llaves en la misma línea
|
||||
AllowShortIfStatementsOnASingleLine: true
|
||||
|
||||
@@ -16,10 +16,12 @@ Checks:
|
||||
- -performance-inefficient-string-concatenation
|
||||
- -bugprone-integer-division
|
||||
- -bugprone-easily-swappable-parameters
|
||||
- -modernize-avoid-c-arrays,-warnings-as-errors
|
||||
|
||||
WarningsAsErrors: '*'
|
||||
# Solo incluir archivos de tu código fuente
|
||||
HeaderFilterRegex: '^source/(sections|ui)/.*'
|
||||
# Solo incluir archivos de tu código fuente (external tiene su propio .clang-tidy)
|
||||
# Excluye jail_audio.hpp del análisis
|
||||
HeaderFilterRegex: '^source/(?!core/audio/jail_audio\.hpp).*'
|
||||
FormatStyle: file
|
||||
|
||||
CheckOptions:
|
||||
|
||||
172
.claude/commands/lint-clang-tidy.md
Normal file
@@ -0,0 +1,172 @@
|
||||
---
|
||||
description: Ejecuta clang-tidy en archivos C++ y analiza los resultados
|
||||
---
|
||||
|
||||
# Lint clang-tidy Command
|
||||
|
||||
Ejecuta análisis estático con clang-tidy en archivos C++ específicos, analiza los resultados inteligentemente, e identifica issues reales vs falsos positivos.
|
||||
|
||||
## Propósito
|
||||
|
||||
clang-tidy detecta:
|
||||
- Oportunidades de modernización C++ (auto, range-for, etc.)
|
||||
- Problemas de legibilidad del código
|
||||
- Potenciales bugs y memory leaks
|
||||
- Optimizaciones de performance
|
||||
- Violaciones de mejores prácticas
|
||||
|
||||
## Workflow de Ejecución
|
||||
|
||||
1. **Solicitar archivos al usuario** (si no se especifican)
|
||||
- Pedir rutas de archivos `.cpp` o `.hpp` a analizar
|
||||
- Validar que los archivos existen
|
||||
|
||||
2. **Verificar build directory**
|
||||
- Confirmar que `build/compile_commands.json` existe
|
||||
- Si no existe, informar al usuario que debe compilar primero
|
||||
|
||||
3. **Ejecutar clang-tidy (sin --fix)**
|
||||
```bash
|
||||
tools/linter/run_clang-tidy.sh archivo1.cpp archivo2.hpp
|
||||
```
|
||||
|
||||
4. **Capturar y analizar salida**
|
||||
- Parsear mensajes de error/warning
|
||||
- Clasificar por categoría (modernize, readability, performance, bugprone, etc.)
|
||||
- Identificar falsos positivos conocidos
|
||||
|
||||
5. **Presentar resumen al usuario**
|
||||
- Agrupar por tipo de issue
|
||||
- Separar "Críticos" vs "Recomendaciones" vs "Falsos Positivos"
|
||||
- Mostrar líneas de código afectadas con contexto
|
||||
|
||||
6. **Ofrecer acciones**
|
||||
- Preguntar si aplicar `--fix` automáticamente
|
||||
- Si el usuario acepta, ejecutar con `--fix` y recompilar
|
||||
|
||||
## Falsos Positivos Conocidos
|
||||
|
||||
Ignorar o marcar como "Opcional" estos casos:
|
||||
|
||||
### `readability-magic-numbers` / `cppcoreguidelines-avoid-magic-numbers`
|
||||
- **Contexto:** Game constants (block sizes, velocities, timers)
|
||||
- **Ejemplo:** `const int BLOCK = 16;`, `player.vx = 3.0F;`
|
||||
- **Acción:** Marcar como "Opcional - Game constant"
|
||||
|
||||
### `modernize-use-trailing-return-type`
|
||||
- **Contexto:** Funciones con tipos de retorno simples
|
||||
- **Ejemplo:** `int getValue() { return x_; }`
|
||||
- **Acción:** Marcar como "Opcional - Style preference"
|
||||
|
||||
### Errores en `defaults.hpp`
|
||||
- **Contexto:** Archivos de constantes del juego
|
||||
- **Acción:** Ignorar completamente, mencionar al usuario que es conocido
|
||||
|
||||
### `readability-identifier-length`
|
||||
- **Contexto:** Variables cortas comunes en loops o coordenadas (`x`, `y`, `i`, `j`)
|
||||
- **Acción:** Marcar como "Opcional - Common convention"
|
||||
|
||||
## Categorización de Issues
|
||||
|
||||
### 🔴 Críticos (Requieren atención)
|
||||
- `bugprone-*`: Potenciales bugs
|
||||
- `cert-*`: Security issues
|
||||
- Memory leaks y null pointer dereferences
|
||||
- Undefined behavior
|
||||
|
||||
### 🟡 Recomendados (Mejoran calidad)
|
||||
- `modernize-*`: C++20 modernization
|
||||
- `performance-*`: Optimizaciones
|
||||
- `readability-*`: Mejoras de legibilidad (excepto magic-numbers)
|
||||
|
||||
### ⚪ Opcionales (A criterio)
|
||||
- `readability-magic-numbers` en game constants
|
||||
- `modernize-use-trailing-return-type`
|
||||
- `readability-identifier-length` para `x`, `y`, `i`, `j`
|
||||
|
||||
### ⚫ Ignorar (Falsos positivos)
|
||||
- Errores en `defaults.hpp`
|
||||
- Issues en carpeta `external/`
|
||||
- Warnings en headers del sistema
|
||||
|
||||
## Formato de Reporte al Usuario
|
||||
|
||||
```
|
||||
=== clang-tidy Analysis Results ===
|
||||
|
||||
📁 Archivos analizados:
|
||||
- source/game/entities/player.cpp
|
||||
- source/game/entities/player.hpp
|
||||
|
||||
🔴 Críticos (2):
|
||||
player.cpp:145 [bugprone-use-after-move] - Uso de variable después de std::move()
|
||||
player.cpp:230 [cert-err58-cpp] - Excepción en inicialización estática
|
||||
|
||||
🟡 Recomendados (5):
|
||||
player.cpp:67 [modernize-use-auto] - Puede usar 'auto' en lugar de tipo explícito
|
||||
player.cpp:102 [performance-unnecessary-copy-initialization] - Copia innecesaria
|
||||
player.hpp:23 [readability-redundant-access-specifiers] - Especificador de acceso redundante
|
||||
|
||||
⚪ Opcionales (3):
|
||||
player.cpp:88 [readability-magic-numbers] - Magic number '16' (Game constant: BLOCK size)
|
||||
player.cpp:120 [modernize-use-trailing-return-type] - Style preference
|
||||
|
||||
✅ Total: 10 issues (2 críticos, 5 recomendados, 3 opcionales)
|
||||
|
||||
---
|
||||
|
||||
💡 Recomendaciones:
|
||||
1. Corregir los 2 issues críticos manualmente
|
||||
2. Aplicar --fix para 5 recomendaciones (revisa cambios antes de commitear)
|
||||
3. Los opcionales son aceptables en código de juego
|
||||
|
||||
¿Deseas aplicar fixes automáticos para los issues recomendados? (y/n)
|
||||
```
|
||||
|
||||
## Aplicar Fixes Automáticos
|
||||
|
||||
Si el usuario acepta:
|
||||
|
||||
1. **Ejecutar con --fix**
|
||||
```bash
|
||||
tools/linter/run_clang-tidy.sh --fix archivo1.cpp archivo2.hpp
|
||||
```
|
||||
|
||||
2. **Informar cambios**
|
||||
- Listar archivos modificados
|
||||
- Recomendar revisión manual
|
||||
|
||||
3. **Recompilar**
|
||||
```bash
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
4. **Verificar compilación exitosa**
|
||||
- Si falla, informar errores
|
||||
- Sugerir revertir cambios si es necesario
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
- **Siempre analizar sin --fix primero** para revisar cambios propuestos
|
||||
- **Requiere build/compile_commands.json** - el usuario debe haber compilado antes
|
||||
- **Contexto importa** - Game code tiene patrones legítimos que linters marcan como issues
|
||||
- **No aplicar --fix ciegamente** - Algunos fixes pueden romper lógica del juego
|
||||
- **Archivos específicos** - Siempre analizar archivos concretos, no todo el proyecto
|
||||
|
||||
## Integración con Otros Comandos
|
||||
|
||||
Este comando puede ser llamado desde:
|
||||
- `/refactor-class` - Después de refactorizar una clase
|
||||
- Manualmente por el usuario para análisis ad-hoc
|
||||
- Antes de commits importantes
|
||||
|
||||
---
|
||||
|
||||
**Uso:**
|
||||
```
|
||||
/lint-clang-tidy
|
||||
(El comando preguntará qué archivos analizar)
|
||||
|
||||
O especificar directamente:
|
||||
/lint-clang-tidy source/game/entities/player.cpp
|
||||
```
|
||||
275
.claude/commands/lint-cppcheck.md
Normal file
@@ -0,0 +1,275 @@
|
||||
---
|
||||
description: Ejecuta cppcheck en código C++ y analiza resultados
|
||||
---
|
||||
|
||||
# Lint cppcheck Command
|
||||
|
||||
Ejecuta análisis estático con cppcheck en código C++, filtra noise, e identifica issues reales relacionados con bugs, memory safety y undefined behavior.
|
||||
|
||||
## Propósito
|
||||
|
||||
cppcheck detecta:
|
||||
- Memory leaks y resource leaks
|
||||
- Null pointer dereferences
|
||||
- Buffer overflows y array bounds issues
|
||||
- Uninitialized variables
|
||||
- Dead code y unused functions
|
||||
- Style issues y code smells
|
||||
- Undefined behavior
|
||||
|
||||
## Workflow de Ejecución
|
||||
|
||||
1. **Solicitar archivos/rutas al usuario** (si no se especifican)
|
||||
- Pedir rutas de archivos `.cpp`/`.hpp` o carpetas a analizar
|
||||
- Preguntar nivel de análisis (warning/all/unused)
|
||||
- Default: `-w` (warning, style, performance)
|
||||
|
||||
2. **Validar precondiciones**
|
||||
- Confirmar que los archivos/carpetas existen
|
||||
- Si no existe `build/compile_commands.json`, el script lo generará automáticamente
|
||||
|
||||
3. **Ejecutar cppcheck**
|
||||
```bash
|
||||
# Para archivo específico
|
||||
tools/linter/run_cppcheck.sh -w --path source/game/entities/player.cpp
|
||||
|
||||
# Para carpeta
|
||||
tools/linter/run_cppcheck.sh -w --path source/game/entities/
|
||||
|
||||
# Proyecto completo (LENTO)
|
||||
tools/linter/run_cppcheck.sh -w
|
||||
```
|
||||
|
||||
4. **Leer archivo de resultados**
|
||||
- `-w`: `tools/linter/cppcheck-result-warning-style-performance.txt`
|
||||
- `-a`: `tools/linter/cppcheck-result-all.txt`
|
||||
- `-u`: `tools/linter/cppcheck-result-unusedFunction.txt`
|
||||
|
||||
5. **Analizar y clasificar issues**
|
||||
- Parsear formato de cppcheck: `[archivo:línea]: (severidad) mensaje`
|
||||
- Filtrar falsos positivos conocidos
|
||||
- Agrupar por categoría
|
||||
|
||||
6. **Presentar resumen al usuario**
|
||||
- Mostrar issues críticos primero
|
||||
- Explicar contexto cuando sea relevante
|
||||
- Sugerir acciones correctivas
|
||||
|
||||
## Niveles de Análisis
|
||||
|
||||
### `-w` / `--warning` (Recomendado para uso diario)
|
||||
- **Velocidad:** Rápido
|
||||
- **Checks:** warning, style, performance
|
||||
- **Uso:** Refactoring diario, antes de commits
|
||||
- **Ejemplo:** `tools/linter/run_cppcheck.sh -w --path source/game/entities/player.cpp`
|
||||
|
||||
### `-a` / `--all` (Análisis exhaustivo)
|
||||
- **Velocidad:** Lento
|
||||
- **Checks:** Todos los checks disponibles
|
||||
- **Uso:** Después de cambios mayores, auditorías de código
|
||||
- **Ejemplo:** `tools/linter/run_cppcheck.sh -a --path source/game/`
|
||||
|
||||
### `-u` / `--unused` (Funciones no usadas)
|
||||
- **Velocidad:** Medio
|
||||
- **Checks:** unusedFunction
|
||||
- **Uso:** Limpieza de código muerto
|
||||
- **Ejemplo:** `tools/linter/run_cppcheck.sh -u`
|
||||
- **Nota:** Requiere análisis de proyecto completo
|
||||
|
||||
## Falsos Positivos Conocidos
|
||||
|
||||
### `unusedFunction` en métodos públicos
|
||||
- **Contexto:** Métodos de API pública, callbacks, getters/setters
|
||||
- **Ejemplo:** `Player::getX()` usado desde múltiples lugares
|
||||
- **Acción:** Ignorar si el método es parte de la interfaz pública
|
||||
|
||||
### `passedByValue` para tipos pequeños
|
||||
- **Contexto:** SDL_FRect, SDL_Point, enums, small structs
|
||||
- **Ejemplo:** `void setPos(SDL_FPoint pos)`
|
||||
- **Acción:** Aceptable para tipos ≤ 16 bytes en game code
|
||||
|
||||
### `constParameter` en APIs consistentes
|
||||
- **Contexto:** Parámetros que no se modifican pero mantienen consistencia de API
|
||||
- **Acción:** Opcional, depende de estilo del proyecto
|
||||
|
||||
### `variableScope` en inicializaciones complejas
|
||||
- **Contexto:** Variables declaradas antes de inicialización compleja
|
||||
- **Acción:** Revisar caso por caso, puede ser falso positivo
|
||||
|
||||
## Categorización de Issues
|
||||
|
||||
### 🔴 Críticos (Requieren corrección inmediata)
|
||||
- `error`: Bugs confirmados
|
||||
- `memleakOnRealloc`: Memory leaks
|
||||
- `nullPointer`: Null pointer dereferences
|
||||
- `bufferAccessOutOfBounds`: Buffer overflows
|
||||
- `uninitvar`: Variables no inicializadas
|
||||
- `useAfterFree`: Use-after-free
|
||||
|
||||
### 🟠 Advertencias (Revisar y corregir)
|
||||
- `warning`: Potenciales problemas
|
||||
- `memleak`: Posibles memory leaks
|
||||
- `resourceLeak`: Resource leaks (file handles, etc.)
|
||||
- `doubleFree`: Double free
|
||||
- `arrayIndexOutOfBounds`: Array bounds issues
|
||||
|
||||
### 🟡 Estilo (Mejoran calidad)
|
||||
- `style`: Code smells
|
||||
- `unusedVariable`: Variables no usadas
|
||||
- `redundantAssignment`: Asignaciones redundantes
|
||||
- `unreadVariable`: Variables escritas pero no leídas
|
||||
|
||||
### 🟢 Performance (Optimizaciones)
|
||||
- `performance`: Optimizaciones de rendimiento
|
||||
- `passedByValue`: Pasar por const& en vez de value
|
||||
- `postfixOperator`: Usar prefix++ en vez de postfix++
|
||||
|
||||
### ⚪ Informativo (Opcional)
|
||||
- `information`: Información general
|
||||
- `portability`: Problemas de portabilidad
|
||||
- `unusedFunction`: Funciones no usadas (revisar contexto)
|
||||
|
||||
## Formato de Reporte al Usuario
|
||||
|
||||
```
|
||||
=== cppcheck Analysis Results ===
|
||||
|
||||
📁 Archivos analizados: source/game/entities/player.cpp
|
||||
📊 Nivel: warning + style + performance
|
||||
📝 Resultados: tools/linter/cppcheck-result-warning-style-performance.txt
|
||||
|
||||
🔴 Errores críticos (2):
|
||||
player.cpp:156 [error:uninitvar] - Variable 'velocity' no inicializada
|
||||
player.cpp:234 [error:nullPointer] - Posible null pointer dereference
|
||||
|
||||
🟠 Advertencias (3):
|
||||
player.cpp:89 [warning:memleak] - Posible memory leak en 'sprite_'
|
||||
player.cpp:178 [warning:arrayIndexOutOfBounds] - Índice fuera de límites
|
||||
|
||||
🟡 Estilo (4):
|
||||
player.cpp:45 [style:unusedVariable] - Variable 'temp' declarada pero no usada
|
||||
player.cpp:102 [style:redundantAssignment] - Asignación redundante a 'x_'
|
||||
|
||||
🟢 Performance (2):
|
||||
player.cpp:67 [performance:passedByValue] - Pasar 'data' por const& (8 bytes - FALSO POSITIVO)
|
||||
player.hpp:34 [performance:postfixOperator] - Usar prefix++ en lugar de postfix++
|
||||
|
||||
✅ Total: 11 issues
|
||||
- 2 críticos ❗
|
||||
- 3 advertencias
|
||||
- 4 estilo
|
||||
- 2 performance (1 falso positivo)
|
||||
|
||||
---
|
||||
|
||||
💡 Acción requerida:
|
||||
1. ✅ Corregir 2 errores críticos INMEDIATAMENTE
|
||||
2. ⚠️ Revisar 3 advertencias y corregir si aplica
|
||||
3. 🔧 Considerar 4 mejoras de estilo
|
||||
4. ⚡ 1 optimización real de performance (ignorar passedByValue)
|
||||
|
||||
📄 Detalles completos en: tools/linter/cppcheck-result-warning-style-performance.txt
|
||||
```
|
||||
|
||||
## Acciones Post-Análisis
|
||||
|
||||
### Si hay errores críticos:
|
||||
1. **Mostrar código afectado** con contexto
|
||||
2. **Explicar el problema** en términos claros
|
||||
3. **Sugerir corrección** específica
|
||||
4. **Ofrecer aplicar fix** si es sencillo
|
||||
|
||||
### Si solo hay warnings/style:
|
||||
1. **Resumir issues** por categoría
|
||||
2. **Indicar prioridades** (qué corregir primero)
|
||||
3. **Explicar falsos positivos** identificados
|
||||
4. **Preguntar si aplicar fixes** para issues simples
|
||||
|
||||
### Si no hay issues:
|
||||
```
|
||||
✅ ¡Código limpio! No se encontraron issues.
|
||||
```
|
||||
|
||||
## Ejemplos de Correcciones Comunes
|
||||
|
||||
### Uninitialized variable
|
||||
```cpp
|
||||
// ❌ Antes
|
||||
int velocity;
|
||||
if (condition) {
|
||||
velocity = 10;
|
||||
}
|
||||
use(velocity); // Error: puede estar no inicializada
|
||||
|
||||
// ✅ Después
|
||||
int velocity{0}; // Inicializar en declaración
|
||||
if (condition) {
|
||||
velocity = 10;
|
||||
}
|
||||
use(velocity);
|
||||
```
|
||||
|
||||
### Memory leak
|
||||
```cpp
|
||||
// ❌ Antes
|
||||
void loadTexture() {
|
||||
texture_ = new SDL_Texture(...);
|
||||
if (error) return; // Leak si hay error después
|
||||
}
|
||||
|
||||
// ✅ Después
|
||||
void loadTexture() {
|
||||
auto temp = std::make_unique<SDL_Texture>(...)
|
||||
if (error) return; // RAII - se libera automáticamente
|
||||
texture_ = std::move(temp);
|
||||
}
|
||||
```
|
||||
|
||||
### Null pointer dereference
|
||||
```cpp
|
||||
// ❌ Antes
|
||||
Player* player = getPlayer();
|
||||
player->update(); // Puede ser nullptr
|
||||
|
||||
// ✅ Después
|
||||
Player* player = getPlayer();
|
||||
if (player != nullptr) {
|
||||
player->update();
|
||||
}
|
||||
```
|
||||
|
||||
## Integración con Workflow
|
||||
|
||||
### Cuándo ejecutar:
|
||||
|
||||
1. **Después de refactoring** - Verificar que no se introdujeron bugs
|
||||
2. **Antes de commit** - Análisis `-w` rápido
|
||||
3. **Antes de PR** - Análisis `-a` completo
|
||||
4. **Periódicamente** - Análisis `-u` para limpieza de código
|
||||
|
||||
### Integración con `/refactor-class`:
|
||||
|
||||
El comando `/refactor-class` ejecuta automáticamente:
|
||||
```bash
|
||||
tools/linter/run_cppcheck.sh -w --path <archivo_refactorizado>
|
||||
```
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
- **Genera archivos de salida** en `tools/linter/cppcheck-result-*.txt`
|
||||
- **Auto-genera compile_commands.json** si no existe
|
||||
- **Paralelización automática** usa N-1 cores
|
||||
- **Suppressions file** excluye external/ y system headers
|
||||
- **Contexto importa** - Revisar falsos positivos manualmente
|
||||
- **No modifica código** - Solo reporta, no aplica fixes automáticos
|
||||
|
||||
---
|
||||
|
||||
**Uso:**
|
||||
```
|
||||
/lint-cppcheck
|
||||
(El comando preguntará qué analizar y qué nivel usar)
|
||||
|
||||
O especificar directamente:
|
||||
/lint-cppcheck source/game/entities/player.cpp
|
||||
```
|
||||
279
.claude/commands/refactor-class.md
Normal file
@@ -0,0 +1,279 @@
|
||||
---
|
||||
description: Refactoriza una clase C++ aplicando buenas prácticas de estilo
|
||||
---
|
||||
|
||||
# Refactor Class Command
|
||||
|
||||
Refactoriza una clase C++ siguiendo estas reglas de estilo y buenas prácticas:
|
||||
|
||||
## Reglas de Refactorización
|
||||
|
||||
### 1. Inicialización de Variables Miembro
|
||||
- **Inicializar en la declaración** todas las variables "simples" que no tengan dependencias complejas:
|
||||
- Tipos primitivos: `int`, `float`, `bool`, etc.
|
||||
- Enumeraciones: valores de enum class
|
||||
- Valores por defecto conocidos: `0`, `0.0F`, `false`, `nullptr`, etc.
|
||||
- **NO inicializar en declaración** si:
|
||||
- Dependen de otros miembros
|
||||
- Requieren llamadas a funciones complejas
|
||||
- Son punteros a recursos que necesitan construcción específica
|
||||
|
||||
### 2. Structs con Valores por Defecto
|
||||
- **Todos los miembros de structs** deben tener valores por defecto:
|
||||
- Tipos primitivos: `int x{0}`, `float y{0.0F}`, `bool flag{false}`
|
||||
- Strings: `std::string name{}`
|
||||
- Punteros: `Type* ptr{nullptr}`
|
||||
- **Ventajas**: Inicialización segura, evita valores indefinidos
|
||||
|
||||
### 3. Arrays C-style → std::array
|
||||
- Convertir **todos** los arrays C-style a `std::array`:
|
||||
- `Type array[N]` → `std::array<Type, N> array{}`
|
||||
- Inicializar con `{}` para zero-initialization
|
||||
- Agregar `#include <array>` si no existe
|
||||
- **Ventajas**: type-safety, size(), métodos STL, sin decay a pointer
|
||||
|
||||
### 3. Reorganización de la Clase
|
||||
|
||||
#### Orden de Secciones
|
||||
1. **public** (primero)
|
||||
2. **private** (después)
|
||||
|
||||
#### Dentro de cada sección (private principalmente)
|
||||
1. **Estructuras y enumeraciones** (tipos anidados)
|
||||
2. **Constantes** (static constexpr)
|
||||
3. **Métodos** (funciones miembro)
|
||||
4. **Variables miembro** (al final)
|
||||
|
||||
### 4. Agrupación y Comentarios de Métodos
|
||||
- **En sección public**: Agrupar métodos relacionados funcionalmente
|
||||
- **Comentarios en línea** (a la derecha) para describir cada método/grupo
|
||||
- **Formato**: `void method(); // Descripción concisa`
|
||||
- **Espaciado**: Línea en blanco entre grupos funcionales
|
||||
|
||||
**Ejemplo:**
|
||||
```cpp
|
||||
public:
|
||||
static void init(...); // Inicialización singleton
|
||||
static void destroy(); // Destrucción singleton
|
||||
static auto get() -> T*; // Acceso al singleton
|
||||
|
||||
void render(); // Renderizado
|
||||
void update(float dt); // Actualización lógica
|
||||
|
||||
auto isActive() -> bool; // Consulta estado
|
||||
```
|
||||
|
||||
### 5. Comentarios de Variables
|
||||
- **Posición**: A la derecha de la variable/grupo
|
||||
- **Formato**: `// Descripción concisa`
|
||||
- Agrupar variables relacionadas con un comentario común
|
||||
|
||||
### 6. Constructores en Structs
|
||||
- **Eliminar constructores por defecto redundantes** en structs:
|
||||
- Si todos los miembros tienen inicialización en declaración
|
||||
- Y no hay múltiples constructores
|
||||
- Eliminar `explicit Type() = default;`
|
||||
- El compilador generará automáticamente un constructor por defecto
|
||||
|
||||
**Ejemplo:**
|
||||
```cpp
|
||||
struct Data {
|
||||
int x{0};
|
||||
std::string name{};
|
||||
// NO NECESITA: explicit Data() = default;
|
||||
};
|
||||
```
|
||||
|
||||
### 7. Includes Necesarios
|
||||
- Agregar includes faltantes según lo que se use
|
||||
- Mantener orden alfabético si es posible
|
||||
|
||||
### 8. Header Guards
|
||||
- **Usar `#pragma once`** en todas las cabeceras (`.hpp`)
|
||||
- **NO usar** `#ifndef`/`#define`/`#endif` tradicionales
|
||||
- `#pragma once` debe ser la primera línea del archivo (antes de includes)
|
||||
- **Ventajas**: Más simple, menos propenso a errores, ampliamente soportado
|
||||
|
||||
## Ejemplo de Aplicación
|
||||
|
||||
### Antes:
|
||||
```cpp
|
||||
class Example {
|
||||
private:
|
||||
struct Data {
|
||||
std::string name;
|
||||
int value;
|
||||
};
|
||||
|
||||
int counter_;
|
||||
bool flag_;
|
||||
float values_[10];
|
||||
|
||||
public:
|
||||
Example();
|
||||
void update();
|
||||
};
|
||||
|
||||
// Constructor
|
||||
Example::Example()
|
||||
: counter_(0),
|
||||
flag_(false) {
|
||||
for (int i = 0; i < 10; ++i) {
|
||||
values_[i] = 0.0F;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Después:
|
||||
```cpp
|
||||
#pragma once
|
||||
|
||||
#include <array>
|
||||
|
||||
class Example {
|
||||
public:
|
||||
Example() = default; // Ya no necesita inicializar
|
||||
void update();
|
||||
|
||||
private:
|
||||
// Tipos anidados
|
||||
struct Data {
|
||||
std::string name{}; // Nombre con valor por defecto
|
||||
int value{0}; // Valor inicializado
|
||||
};
|
||||
|
||||
// Variables miembro
|
||||
int counter_{0}; // Contador de frames
|
||||
bool flag_{false}; // Estado activo
|
||||
std::array<float, 10> values_{}; // Buffer de valores
|
||||
};
|
||||
```
|
||||
|
||||
## Tareas a Realizar
|
||||
|
||||
Cuando uses este comando en una clase específica:
|
||||
|
||||
1. **Leer** el archivo `.hpp` y `.cpp` correspondiente
|
||||
2. **Verificar** que la cabecera use `#pragma once` (reemplazar `#ifndef`/`#define`/`#endif` si existen)
|
||||
3. **Identificar** structs y agregar valores por defecto a todos sus miembros
|
||||
4. **Identificar** variables que pueden inicializarse en declaración
|
||||
5. **Identificar** arrays C-style que convertir a std::array
|
||||
6. **Reorganizar** la estructura de la clase (public/private, agrupación)
|
||||
7. **Actualizar** el archivo `.cpp` eliminando inicializaciones redundantes
|
||||
8. **Compilar** para verificar sintaxis correcta
|
||||
9. **Ejecutar clang-tidy** (análisis, sin --fix) y revisar resultados
|
||||
10. **Ejecutar cppcheck** (nivel -w) y revisar resultados
|
||||
11. **Aplicar fixes apropiados** basados en análisis de linters
|
||||
12. **Recompilar** si se aplicaron fixes
|
||||
13. **Reportar resumen** al usuario: cambios + hallazgos de linters
|
||||
|
||||
## Workflow de Linters (Pasos 9-12)
|
||||
|
||||
### Paso 9: Ejecutar clang-tidy
|
||||
|
||||
```bash
|
||||
tools/linter/run_clang-tidy.sh archivo.cpp archivo.hpp
|
||||
```
|
||||
|
||||
**Analizar resultados:**
|
||||
- Identificar issues críticos (bugprone, cert)
|
||||
- Separar recomendaciones válidas de falsos positivos
|
||||
- Ignorar: magic-numbers en game constants, defaults.hpp errors
|
||||
- Si hay issues críticos, informar al usuario y pausar
|
||||
- Si solo hay recomendaciones, continuar
|
||||
|
||||
### Paso 10: Ejecutar cppcheck
|
||||
|
||||
```bash
|
||||
tools/linter/run_cppcheck.sh -w --path archivo.cpp
|
||||
```
|
||||
|
||||
**Leer archivo de resultados:**
|
||||
- `tools/linter/cppcheck-result-warning-style-performance.txt`
|
||||
- Identificar errores críticos (error, nullPointer, uninitvar)
|
||||
- Separar warnings de style issues
|
||||
- Filtrar falsos positivos (passedByValue para tipos pequeños, unusedFunction en API pública)
|
||||
- Si hay errores críticos, informar al usuario y pausar
|
||||
|
||||
### Paso 11: Aplicar Fixes
|
||||
|
||||
**Si hay issues aplicables:**
|
||||
|
||||
1. **Fixes automáticos de clang-tidy** (solo si son seguros):
|
||||
- modernize-use-auto
|
||||
- readability-redundant-access-specifiers
|
||||
- Performance optimizations claras
|
||||
|
||||
```bash
|
||||
tools/linter/run_clang-tidy.sh --fix archivo.cpp archivo.hpp
|
||||
```
|
||||
|
||||
2. **Fixes manuales necesarios:**
|
||||
- Inicializar variables no inicializadas
|
||||
- Corregir null pointer issues
|
||||
- Resolver memory leaks
|
||||
|
||||
3. **Documentar cambios** para el reporte final
|
||||
|
||||
### Paso 12: Recompilar
|
||||
|
||||
Si se aplicaron fixes en paso 11:
|
||||
|
||||
```bash
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
**Verificar:**
|
||||
- ✅ Compilación exitosa → Continuar a reporte
|
||||
- ❌ Errores → Informar al usuario, sugerir revisión manual
|
||||
|
||||
## Formato de Reporte Final (Paso 13)
|
||||
|
||||
```
|
||||
=== Refactor Completado: ClassName ===
|
||||
|
||||
📝 Cambios estructurales:
|
||||
✅ #pragma once aplicado
|
||||
✅ 3 structs actualizados con valores por defecto
|
||||
✅ 12 variables movidas a inicialización en declaración
|
||||
✅ 2 arrays C-style → std::array
|
||||
✅ Clase reorganizada (public primero, variables al final)
|
||||
✅ Constructor simplificado (elimina 12 inicializaciones redundantes)
|
||||
|
||||
🔍 Análisis de linters:
|
||||
|
||||
clang-tidy:
|
||||
✅ Sin issues críticos
|
||||
🟡 3 recomendaciones aplicadas automáticamente:
|
||||
- Modernize: use auto (2 lugares)
|
||||
- Readability: redundant specifier (1 lugar)
|
||||
⚪ 2 opcionales ignorados:
|
||||
- magic-numbers en game constants
|
||||
|
||||
cppcheck:
|
||||
✅ Sin errores
|
||||
🟡 2 style issues encontrados:
|
||||
- Unused variable 'temp' en línea 45 → Eliminada
|
||||
- Redundant assignment en línea 102 → Corregida
|
||||
|
||||
📊 Resultado:
|
||||
✅ Compilación exitosa
|
||||
✅ Todos los linters pasan sin issues críticos
|
||||
✅ Código refactorizado y verificado
|
||||
|
||||
💡 Próximos pasos:
|
||||
- Revisar cambios manualmente
|
||||
- Ejecutar tests si existen
|
||||
- Commitear con mensaje descriptivo
|
||||
```
|
||||
|
||||
## Notas Importantes
|
||||
|
||||
- **No cambiar lógica**: Solo refactorización estructural
|
||||
- **Mantener compatibilidad**: std::array usa misma sintaxis [] para acceso
|
||||
- **Formato consistente**: Respetar estilo del proyecto (comentarios, espaciado)
|
||||
- **Validar compilación**: Siempre verificar que compile después de cambios
|
||||
- **Linters integrados**: Análisis automático post-refactor para garantizar calidad
|
||||
- **Fixes inteligentes**: Solo aplicar --fix de clang-tidy si los cambios son seguros
|
||||
- **Contexto importa**: Game code tiene patrones legítimos (magic numbers, etc.)
|
||||
- **Falsos positivos**: Identificar y documentar, no corregir ciegamente
|
||||
13
.gitignore
vendored
@@ -1,5 +1,6 @@
|
||||
.cache/
|
||||
.vscode/
|
||||
*data/config/config.txt
|
||||
*data/config/config.yaml
|
||||
*stats.txt
|
||||
*.DS_Store
|
||||
thumbs.db
|
||||
@@ -15,7 +16,13 @@ jaildoctors_dilemma*
|
||||
todo
|
||||
build/
|
||||
linux_utils/
|
||||
.claude/
|
||||
source/version.h
|
||||
resources.pack
|
||||
jdd_release/
|
||||
jdd_release/
|
||||
tools/pack_resources/pack_resources
|
||||
tools/pack_resources/pack_resources.exe
|
||||
tools/pack_resources/pack_tool
|
||||
tools/pack_resources/pack_tool.exe
|
||||
*.res
|
||||
dist/
|
||||
.claude/settings.local.json
|
||||
|
||||
78
BUILDING.md
Normal file
@@ -0,0 +1,78 @@
|
||||
# Compilar JailDoctor's Dilemma
|
||||
|
||||
## Linux (Debian/Ubuntu)
|
||||
|
||||
Instal·la les dependències:
|
||||
|
||||
```bash
|
||||
sudo apt install cmake make g++ xxd glslang-tools glslc
|
||||
```
|
||||
|
||||
Per a SDL3, instal·la el paquet de desenvolupament si està disponible al teu repositori:
|
||||
|
||||
```bash
|
||||
sudo apt install libsdl3-dev
|
||||
```
|
||||
|
||||
Si `libsdl3-dev` no està als repos (SDL3 és recent i pot no estar a Debian stable), compila'l des del codi font:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/libsdl-org/SDL.git --branch release-3.x --depth 1
|
||||
cd SDL && cmake -B build && cmake --build build && sudo cmake --install build
|
||||
```
|
||||
|
||||
Compila el joc:
|
||||
|
||||
```bash
|
||||
cmake -B build
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Windows (MinGW via WinLibs)
|
||||
|
||||
1. Instal·la [WinLibs](https://winlibs.com/) (MinGW-w64 amb GCC)
|
||||
2. Instal·la [CMake](https://cmake.org/download/)
|
||||
3. Descarrega les [biblioteques de desenvolupament de SDL3 per a MinGW](https://github.com/libsdl-org/SDL/releases) — copia les capçaleres a `include/` i els fitxers `.a` a `lib/` de MinGW
|
||||
4. Instal·la el [Vulkan SDK](https://vulkan.lunarg.com/sdk/home) — proporciona `glslc` per a la compilació dels shaders
|
||||
|
||||
Compila el joc (des d'un terminal MinGW):
|
||||
|
||||
```bash
|
||||
cmake -B build -G "MinGW Makefiles"
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## macOS
|
||||
|
||||
Instal·la les dependències amb [Homebrew](https://brew.sh):
|
||||
|
||||
```bash
|
||||
brew install cmake sdl3 glslang
|
||||
```
|
||||
|
||||
Compila el joc:
|
||||
|
||||
```bash
|
||||
cmake -B build
|
||||
cmake --build build
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Què fa la compilació
|
||||
|
||||
`cmake --build build` ho gestiona tot en ordre:
|
||||
|
||||
1. **Compila els shaders** — regenera `postfx_vert_spv.h` / `postfx_frag_spv.h` si els fitxers `.vert` o `.frag` han canviat (requereix `glslc`)
|
||||
2. **Compila el joc** — només recompila els fitxers `.cpp` modificats
|
||||
3. **Empaqueta els recursos** — regenera `resources.pack` des de `data/` si algun asset ha canviat
|
||||
|
||||
Si `glslc` no està instal·lat, s'utilitzen les capçaleres de shaders precompilades (incloses al repositori).
|
||||
|
||||
> **Nota:** El `file(GLOB_RECURSE)` sobre `data/` s'avalua en temps de configuració de CMake. Si **afegeixes un fitxer nou** a `data/`, executa `cmake -B build` de nou perquè CMake el detecte com a dependència.
|
||||
|
||||
L'executable es genera a l'arrel del projecte: `./jaildoctors_dilemma`
|
||||
265
CLAUDE.md
@@ -55,9 +55,55 @@ cmake --build build --clean-first
|
||||
|
||||
**Important:** The build directory is `/Users/sergio/Gitea/jaildoctors_dilemma/build` and the output executable is placed in the project root directory.
|
||||
|
||||
### Linter (clang-tidy)
|
||||
### Testing in Headless Environment (SSH/Remote Server)
|
||||
|
||||
**IMPORTANT:** Always run the linter on specific files, NOT on the entire project, to avoid long execution times and errors in unrelated files.
|
||||
**IMPORTANT:** When working on a remote server via SSH without a physical display, the game MUST be run using Xvfb (X Virtual Framebuffer) to avoid SDL3 display initialization errors.
|
||||
|
||||
#### Required Setup (One-time)
|
||||
```bash
|
||||
# Install Xvfb
|
||||
sudo apt-get install xvfb
|
||||
```
|
||||
|
||||
#### Running the Game in Headless Mode
|
||||
|
||||
**Option 1: Using the wrapper script (RECOMMENDED)**
|
||||
```bash
|
||||
./run_headless.sh
|
||||
```
|
||||
|
||||
**Option 2: Using xvfb-run directly**
|
||||
```bash
|
||||
xvfb-run -a ./jaildoctors_dilemma
|
||||
```
|
||||
|
||||
**Option 3: Custom display configuration**
|
||||
```bash
|
||||
xvfb-run -a -s "-screen 0 1280x720x24" ./jaildoctors_dilemma
|
||||
```
|
||||
|
||||
#### Why This Is Critical
|
||||
|
||||
- **SDL3 requires a display:** The game uses SDL3 which requires X11/Wayland display
|
||||
- **No code changes needed:** Xvfb simulates a virtual display without modifying the codebase
|
||||
- **Full logging:** Console output and logs work normally, essential for debugging resource loading
|
||||
- **Testing resource loading:** When modifying asset loading code, running with xvfb-run allows seeing all initialization logs
|
||||
|
||||
**ALWAYS use xvfb-run when testing on the remote server, especially when:**
|
||||
- Modifying resource loading code
|
||||
- Testing asset initialization
|
||||
- Debugging startup issues
|
||||
- Verifying configuration changes
|
||||
|
||||
### Static Analysis Tools (Linters)
|
||||
|
||||
This project uses two complementary static analysis tools for code quality:
|
||||
|
||||
#### clang-tidy (Modernization & Best Practices)
|
||||
|
||||
**Purpose:** Detects style issues, modernization opportunities, and potential bugs. Best for refactoring and applying C++20 best practices.
|
||||
|
||||
**IMPORTANT:** Always run on specific files, NOT on the entire project, to avoid long execution times and errors in unrelated files.
|
||||
|
||||
```bash
|
||||
# Analyze a specific file (RECOMMENDED)
|
||||
@@ -73,7 +119,80 @@ tools/linter/run_clang-tidy.sh --fix source/game/entities/player.cpp
|
||||
tools/linter/run_clang-tidy.sh
|
||||
```
|
||||
|
||||
**Note:** Running the linter on the entire project can produce errors in files like `defaults.hpp` that are unrelated to your changes. Always target specific files you're working on.
|
||||
**Common clang-tidy Checks:**
|
||||
- `modernize-*`: C++ modernization (use auto, range-for, etc.)
|
||||
- `readability-*`: Code readability improvements
|
||||
- `performance-*`: Performance optimizations
|
||||
- `bugprone-*`: Potential bug detection
|
||||
|
||||
**Known False Positives:**
|
||||
- `defaults.hpp`: May report errors in constant definitions
|
||||
- `readability-magic-numbers`: Acceptable for game constants (block sizes, speeds, etc.)
|
||||
- `cppcoreguidelines-avoid-magic-numbers`: Same as above, acceptable in game code
|
||||
|
||||
#### cppcheck (Bug Detection & Memory Safety)
|
||||
|
||||
**Purpose:** Detects bugs, memory leaks, undefined behavior, and style issues. Complementary to clang-tidy.
|
||||
|
||||
```bash
|
||||
# Warning, style, and performance analysis (RECOMMENDED for daily use)
|
||||
tools/linter/run_cppcheck.sh -w --path source/game/entities/player.cpp
|
||||
|
||||
# Exhaustive analysis (slower, more thorough)
|
||||
tools/linter/run_cppcheck.sh -a --path source/game/entities/
|
||||
|
||||
# Detect unused functions (whole project analysis)
|
||||
tools/linter/run_cppcheck.sh -u
|
||||
|
||||
# Analyze entire project with warning level
|
||||
tools/linter/run_cppcheck.sh -w
|
||||
```
|
||||
|
||||
**Output:** Results are saved in `tools/linter/cppcheck-result-*.txt`
|
||||
|
||||
**Common cppcheck Checks:**
|
||||
- Memory leaks and resource management
|
||||
- Null pointer dereferences
|
||||
- Buffer overflows and array bounds
|
||||
- Uninitialized variables
|
||||
- Dead code and unused functions
|
||||
|
||||
**Known False Positives:**
|
||||
- `unusedFunction`: May report false positives for callback functions or public API methods
|
||||
- `passedByValue`: Acceptable for small types like SDL_FRect in game code
|
||||
- `constParameter`: Not always applicable for API consistency
|
||||
|
||||
#### When to Use Each Tool
|
||||
|
||||
| Scenario | Tool | Reason |
|
||||
|----------|------|--------|
|
||||
| **Daily refactoring** | clang-tidy | Fast, auto-fixable issues |
|
||||
| **Before committing** | Both | Comprehensive quality check |
|
||||
| **After major changes** | cppcheck -a | Deep bug analysis |
|
||||
| **Hunting memory leaks** | cppcheck | Specialized detection |
|
||||
| **Code modernization** | clang-tidy --fix | Automatic C++20 upgrades |
|
||||
|
||||
#### Best Practices
|
||||
|
||||
1. **Run linters after compilation succeeds** - Fix compile errors first
|
||||
2. **Analyze specific files** - Faster feedback, avoids unrelated errors
|
||||
3. **Review before applying --fix** - Understand changes before accepting
|
||||
4. **Context matters** - Game code may legitimately have "magic numbers" for gameplay constants
|
||||
5. **Use both tools** - They catch different issues and complement each other
|
||||
6. **Check suppressions file** - `tools/linter/cppcheck_suppressions` excludes external/ and system headers
|
||||
|
||||
#### Integration with Development Workflow
|
||||
|
||||
When refactoring code (especially with `/refactor-class` command):
|
||||
1. Make structural changes
|
||||
2. **Compile** to verify syntax
|
||||
3. **Run clang-tidy** (without --fix) to identify issues
|
||||
4. **Run cppcheck -w** to catch bugs
|
||||
5. Review and fix legitimate issues
|
||||
6. Apply automatic fixes if appropriate
|
||||
7. Recompile and test
|
||||
|
||||
**Note:** The `/refactor-class` command automatically runs both linters after compilation and provides intelligent analysis of results.
|
||||
|
||||
---
|
||||
|
||||
@@ -182,7 +301,7 @@ source/
|
||||
└── main.cpp # Application entry point
|
||||
|
||||
config/ # Configuration files
|
||||
└── assets.txt # Asset registry (text-based configuration)
|
||||
└── assets.yaml # Asset registry (text-based configuration)
|
||||
|
||||
data/ # Game assets
|
||||
├── font/ # Bitmap fonts + descriptors
|
||||
@@ -227,8 +346,8 @@ class Screen {
|
||||
- `Screen` - Rendering, window management, palette/shader effects
|
||||
- `Input` - Keyboard & gamepad input binding and checking
|
||||
- `Audio` - Music and sound effect playback
|
||||
- `Resource` - Asset loading, caching, streaming
|
||||
- `Asset` - Asset path registry and verification
|
||||
- `Resource::Cache` - Asset loading, caching, streaming (with error handling)
|
||||
- `Resource::List` - Asset path registry from assets.yaml (O(1) lookups)
|
||||
- `Director` - Main application controller
|
||||
- `Cheevos` - Achievement state management
|
||||
- `Debug` - Debug information overlay
|
||||
@@ -334,12 +453,14 @@ struct AnimationData {
|
||||
main()
|
||||
↓
|
||||
Director::Director() [Initialization]
|
||||
├─ Options::init() - Load game configuration
|
||||
├─ Asset::init() - Register asset paths
|
||||
├─ Screen::init() - Create window, SDL renderer
|
||||
├─ Resource::List::init() - Initialize asset registry singleton
|
||||
├─ Director::setFileList() - Load assets.yaml configuration (no verification)
|
||||
├─ Options::loadFromFile() - Load game configuration
|
||||
├─ Audio::init() - Initialize SDL audio
|
||||
├─ Screen::init() - Create window, SDL renderer
|
||||
├─ Input::init() - Bind keyboard/gamepad controls
|
||||
├─ Resource::init() - Load all game resources
|
||||
├─ Resource::Cache::init() - Load ALL game resources (with verification)
|
||||
│ └─ Throws exception if any required asset is missing
|
||||
└─ Cheevos::init() - Load achievement state
|
||||
|
||||
Director::run() [Main loop]
|
||||
@@ -354,11 +475,11 @@ Director::run() [Main loop]
|
||||
|
||||
Director::~Director() [Cleanup]
|
||||
├─ Options::saveToFile() - Save game settings
|
||||
├─ Resource::destroy()
|
||||
├─ Resource::Cache::destroy()
|
||||
├─ Audio::destroy()
|
||||
├─ Input::destroy()
|
||||
├─ Screen::destroy()
|
||||
└─ Asset::destroy()
|
||||
└─ Resource::List::destroy()
|
||||
```
|
||||
|
||||
### 4.2 Game Scene Flow (Core Gameplay Loop)
|
||||
@@ -389,24 +510,27 @@ Game::run() {
|
||||
|
||||
```
|
||||
Director::setFileList()
|
||||
├─ Asset::loadFromFile(config_path, PREFIX, system_folder_)
|
||||
│ ├─ Read config/assets.txt - Parse text configuration file
|
||||
│ ├─ Parse each line: TYPE|PATH|OPTIONS - Extract asset information
|
||||
│ ├─ Replace variables (${PREFIX}, ${SYSTEM_FOLDER})
|
||||
│ └─ Store in unordered_map (O(1) lookup) - Fast asset path retrieval
|
||||
└─ Asset::check() - Verify required files exist
|
||||
└─ Asset::loadFromFile(config_path, PREFIX, system_folder_)
|
||||
├─ Read config/assets.yaml - Parse text configuration file
|
||||
├─ Parse YAML structure: assets grouped by category
|
||||
├─ Replace variables (${PREFIX}, ${SYSTEM_FOLDER})
|
||||
└─ Store in unordered_map (O(1) lookup) - Fast asset path retrieval
|
||||
|
||||
Game Scene initialization
|
||||
└─ Resource::init() - Loads all resources
|
||||
├─ loadSounds() - WAV files
|
||||
├─ loadMusics() - OGG files
|
||||
├─ loadSurfaces() - GIF/PNG images
|
||||
├─ loadAnimations() - .ani animation definitions
|
||||
├─ loadTileMaps() - .room tilemap data
|
||||
└─ loadRooms() - Room metadata
|
||||
└─ Resource::Cache::init() - Loads all resources
|
||||
├─ loadSounds() - WAV files (with error handling)
|
||||
├─ loadMusics() - OGG files (with error handling)
|
||||
├─ loadSurfaces() - GIF/PNG images (with error handling)
|
||||
├─ loadPalettes() - PAL palette files (with error handling)
|
||||
├─ loadTextFiles() - Font definition files (with error handling)
|
||||
├─ loadAnimations() - YAML animation definitions (with error handling)
|
||||
└─ loadRooms() - Room YAML files (with error handling)
|
||||
|
||||
Note: Asset verification happens during actual loading.
|
||||
If a required file is missing, Cache::load() throws detailed exception.
|
||||
|
||||
During gameplay
|
||||
└─ Resource::get*(name) - Return cached resource
|
||||
└─ Resource::Cache::get*(name) - Return cached resource
|
||||
```
|
||||
|
||||
### 4.4 Input Flow
|
||||
@@ -508,7 +632,7 @@ namespace Options {
|
||||
inline Stats stats{}; // Game statistics
|
||||
}
|
||||
|
||||
Options::loadFromFile(path); // Load from config.txt
|
||||
Options::loadFromFile(path); // Load from config.yaml
|
||||
Options::saveToFile(path); // Save on exit
|
||||
```
|
||||
|
||||
@@ -574,8 +698,8 @@ Achievements trigger notifications on unlock.
|
||||
| `Screen` | Rendering, window, palette management | Singleton |
|
||||
| `Input` | Keyboard & gamepad input | Singleton |
|
||||
| `Audio` | Music and SFX playback | Singleton |
|
||||
| `Resource` | Asset caching and loading | Singleton |
|
||||
| `Asset` | Asset path registry from config/assets.txt, O(1) lookups, variable substitution | Singleton |
|
||||
| `Resource::Cache` | Asset caching and loading (with detailed error messages) | Singleton |
|
||||
| `Resource::List` | Asset path registry from config/assets.yaml, O(1) lookups, variable substitution | Singleton |
|
||||
| `Debug` | Debug overlay information | Singleton |
|
||||
| `globalEvents` | Global SDL event handling (quit, device reset, mouse) | Namespace |
|
||||
|
||||
@@ -638,16 +762,25 @@ Achievements trigger notifications on unlock.
|
||||
### Adding Game Assets
|
||||
|
||||
1. Place file in `data/` directory
|
||||
2. Add entry to `config/assets.txt`:
|
||||
2. Add entry to `config/assets.yaml` under the appropriate category:
|
||||
```yaml
|
||||
assets:
|
||||
category_name: # e.g., player, enemies, music, etc.
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/path/file.ext
|
||||
```
|
||||
TYPE|${PREFIX}/data/path/file.ext
|
||||
Available types: `DATA`, `BITMAP`, `ANIMATION`, `MUSIC`, `SOUND`, `FONT`, `ROOM`, `PALETTE`
|
||||
3. Optional flags can be added:
|
||||
```yaml
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/file.txt
|
||||
required: false # Don't fail if missing
|
||||
absolute: true # Path is absolute
|
||||
```
|
||||
Available types: `DATA`, `BITMAP`, `ANIMATION`, `MUSIC`, `SOUND`, `FONT`, `ROOM`, `TILEMAP`, `PALETTE`
|
||||
3. Optional flags can be added: `TYPE|${PREFIX}/path/file.ext|optional,absolute`
|
||||
4. Resource loads automatically during `Resource::init()`
|
||||
5. Access via: `Resource::get()->getSurface("name")`
|
||||
5. Access via: `Resource::Cache::get()->getSurface("name")`
|
||||
|
||||
**Note:** No recompilation needed when adding/removing/modifying assets in `config/assets.txt`
|
||||
**Note:** No recompilation needed when adding/removing/modifying assets in `config/assets.yaml`
|
||||
|
||||
### Modifying Collision Detection
|
||||
|
||||
@@ -703,36 +836,58 @@ In debug builds (`#ifdef DEBUG`), renders:
|
||||
|
||||
## 11. File Format Reference
|
||||
|
||||
### Asset Configuration File (config/assets.txt)
|
||||
Text-based asset registry with pipe-delimited format:
|
||||
```
|
||||
# Format: TYPE|PATH [|OPTIONS]
|
||||
# Comments start with # or ;
|
||||
### Asset Configuration File (config/assets.yaml)
|
||||
YAML-based asset registry with grouped structure:
|
||||
```yaml
|
||||
# JailDoctor's Dilemma - Asset Configuration
|
||||
# Variables: ${PREFIX}, ${SYSTEM_FOLDER}
|
||||
# Options: optional, absolute (comma-separated)
|
||||
|
||||
# Example entries:
|
||||
BITMAP|${PREFIX}/data/player/player.gif
|
||||
ANIMATION|${PREFIX}/data/player/player.ani
|
||||
MUSIC|${PREFIX}/data/music/title.ogg
|
||||
DATA|${SYSTEM_FOLDER}/config.txt|optional,absolute
|
||||
assets:
|
||||
# FONTS
|
||||
fonts:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/smb2.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/smb2.txt
|
||||
|
||||
# PLAYER
|
||||
player:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/player/player.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/player/player.yaml
|
||||
|
||||
# MUSIC
|
||||
music:
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/title.ogg
|
||||
|
||||
# SYSTEM FILES (optional, absolute paths)
|
||||
system:
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/config.yaml
|
||||
required: false
|
||||
absolute: true
|
||||
```
|
||||
|
||||
**Asset Structure:**
|
||||
- Assets are organized into categories (fonts, palettes, shaders, player, enemies, etc.)
|
||||
- Each asset entry contains:
|
||||
- `type` - Asset type (required)
|
||||
- `path` - File path with variable substitution (required)
|
||||
- `required` - Whether file must exist (optional, default: `true`)
|
||||
- `absolute` - Whether path is absolute (optional, default: `false`)
|
||||
|
||||
**Available Asset Types:**
|
||||
- `DATA` - General data files (text, JSON, etc.)
|
||||
- `BITMAP` - Images (GIF, PNG)
|
||||
- `ANIMATION` - Animation definition files (.ani)
|
||||
- `ANIMATION` - Animation definition files (.yaml)
|
||||
- `MUSIC` - Music files (OGG)
|
||||
- `SOUND` - Sound effects (WAV)
|
||||
- `FONT` - Font definition files
|
||||
- `ROOM` - Room data files (.room)
|
||||
- `TILEMAP` - Tilemap files (.tmx)
|
||||
- `ROOM` - Room data files (.yaml)
|
||||
- `PALETTE` - Color palette files (.pal)
|
||||
|
||||
**Options:**
|
||||
- `optional` - File is not required (won't fail check if missing)
|
||||
- `absolute` - Path is absolute (not relative to executable)
|
||||
|
||||
**Variables:**
|
||||
- `${PREFIX}` - Replaced with `/../Resources` on macOS bundles, empty otherwise
|
||||
- `${SYSTEM_FOLDER}` - Replaced with user's system config folder
|
||||
@@ -786,9 +941,9 @@ Binary 256-color palette format (256 × 4 bytes RGBA).
|
||||
- `Player::update()` - Physics and movement
|
||||
|
||||
### For Asset Management
|
||||
- `config/assets.txt` - Asset configuration file (text-based, no recompilation needed)
|
||||
- `config/assets.yaml` - Asset configuration file (text-based, no recompilation needed)
|
||||
- `Asset::loadFromFile()` - Loads assets from config file
|
||||
- `Asset::get()` - Retrieves asset path (O(1) lookup with unordered_map)
|
||||
- `Resource::List::get()` - Retrieves asset path (O(1) lookup with unordered_map)
|
||||
- `Resource::load()` - Asset loading
|
||||
- `Director::setFileList()` - Calls `Asset::loadFromFile()` with PREFIX and system_folder
|
||||
|
||||
|
||||
200
CMakeLists.txt
@@ -10,13 +10,6 @@ set(CMAKE_CXX_STANDARD_REQUIRED True)
|
||||
# Exportar comandos de compilación para herramientas de análisis
|
||||
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Establece la política CMP0072 para indicar cómo se debe seleccionar la implementación de OpenGL.
|
||||
# En este caso, se elige la opción "GLVND", que utiliza bibliotecas modernas y modulares (libOpenGL, libGLX),
|
||||
# en lugar de la biblioteca OpenGL clásica (libGL). Esto mejora la compatibilidad con drivers recientes
|
||||
# y evita ambigüedades cuando se encuentran múltiples implementaciones de OpenGL en el sistema.
|
||||
cmake_policy(SET CMP0072 NEW)
|
||||
set(OpenGL_GL_PREFERENCE GLVND)
|
||||
|
||||
# --- GENERACIÓN DE VERSIÓN AUTOMÁTICA ---
|
||||
find_package(Git QUIET)
|
||||
if(GIT_FOUND)
|
||||
@@ -47,23 +40,26 @@ set(APP_SOURCES
|
||||
|
||||
# Core - Rendering
|
||||
source/core/rendering/gif.cpp
|
||||
source/core/rendering/pixel_reveal.cpp
|
||||
source/core/rendering/screen.cpp
|
||||
source/core/rendering/surface.cpp
|
||||
source/core/rendering/surface_animated_sprite.cpp
|
||||
source/core/rendering/surface_moving_sprite.cpp
|
||||
source/core/rendering/surface_sprite.cpp
|
||||
source/core/rendering/sprite/animated_sprite.cpp
|
||||
source/core/rendering/sprite/dissolve_sprite.cpp
|
||||
source/core/rendering/sprite/moving_sprite.cpp
|
||||
source/core/rendering/sprite/sprite.cpp
|
||||
source/core/rendering/text.cpp
|
||||
source/core/rendering/texture.cpp
|
||||
|
||||
# Core - Locale
|
||||
source/core/locale/locale.cpp
|
||||
|
||||
# Core - Resources
|
||||
source/core/resources/asset.cpp
|
||||
source/core/resources/resource.cpp
|
||||
source/core/resources/resource_list.cpp
|
||||
source/core/resources/resource_cache.cpp
|
||||
source/core/resources/resource_pack.cpp
|
||||
source/core/resources/resource_loader.cpp
|
||||
source/core/resources/resource_helper.cpp
|
||||
|
||||
# Core - System
|
||||
source/core/system/debug.cpp
|
||||
source/core/system/director.cpp
|
||||
source/core/system/global_events.cpp
|
||||
|
||||
@@ -77,11 +73,16 @@ set(APP_SOURCES
|
||||
|
||||
# Game - Gameplay
|
||||
source/game/gameplay/cheevos.cpp
|
||||
source/game/gameplay/collision_map.cpp
|
||||
source/game/gameplay/enemy_manager.cpp
|
||||
source/game/gameplay/item_manager.cpp
|
||||
source/game/gameplay/item_tracker.cpp
|
||||
source/game/gameplay/room.cpp
|
||||
source/game/gameplay/room_loader.cpp
|
||||
source/game/gameplay/room_tracker.cpp
|
||||
source/game/gameplay/scoreboard.cpp
|
||||
source/game/gameplay/stats.cpp
|
||||
source/game/gameplay/tilemap_renderer.cpp
|
||||
|
||||
# Game - Scenes
|
||||
source/game/scenes/credits.cpp
|
||||
@@ -104,22 +105,69 @@ set(APP_SOURCES
|
||||
source/main.cpp
|
||||
)
|
||||
|
||||
# Fuentes de librerías de terceros
|
||||
set(EXTERNAL_SOURCES
|
||||
source/external/jail_audio.cpp
|
||||
# Fuentes del sistema de renderizado (SDL3 GPU para todas las plataformas)
|
||||
set(RENDERING_SOURCES
|
||||
source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp
|
||||
)
|
||||
|
||||
# Fuentes del sistema de renderizado
|
||||
set(RENDERING_SOURCES
|
||||
source/core/rendering/opengl/opengl_shader.cpp
|
||||
# Fuentes de debug (solo en modo Debug)
|
||||
set(DEBUG_SOURCES
|
||||
source/core/system/debug.cpp
|
||||
)
|
||||
|
||||
# Configuración de SDL3
|
||||
find_package(SDL3 REQUIRED CONFIG REQUIRED COMPONENTS SDL3)
|
||||
message(STATUS "SDL3 encontrado: ${SDL3_INCLUDE_DIRS}")
|
||||
|
||||
# --- SHADER COMPILATION (Linux/Windows only - macOS uses Metal) ---
|
||||
if(NOT APPLE)
|
||||
find_program(GLSLC_EXE NAMES glslc)
|
||||
|
||||
set(SHADER_VERT_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.vert")
|
||||
set(SHADER_FRAG_SRC "${CMAKE_SOURCE_DIR}/data/shaders/postfx.frag")
|
||||
set(SHADER_VERT_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_vert_spv.h")
|
||||
set(SHADER_FRAG_H "${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu/postfx_frag_spv.h")
|
||||
|
||||
if(GLSLC_EXE)
|
||||
add_custom_command(
|
||||
OUTPUT "${SHADER_VERT_H}" "${SHADER_FRAG_H}"
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
-D GLSLC=${GLSLC_EXE}
|
||||
-D SHADERS_DIR=${CMAKE_SOURCE_DIR}/data/shaders
|
||||
-D HEADERS_DIR=${CMAKE_SOURCE_DIR}/source/core/rendering/sdl3gpu
|
||||
-P ${CMAKE_SOURCE_DIR}/tools/shaders/compile_spirv.cmake
|
||||
DEPENDS "${SHADER_VERT_SRC}" "${SHADER_FRAG_SRC}"
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
COMMENT "Compilando shaders SPIR-V..."
|
||||
)
|
||||
add_custom_target(shaders DEPENDS "${SHADER_VERT_H}" "${SHADER_FRAG_H}")
|
||||
message(STATUS "glslc encontrado: shaders se compilarán automáticamente")
|
||||
else()
|
||||
if(NOT EXISTS "${SHADER_VERT_H}" OR NOT EXISTS "${SHADER_FRAG_H}")
|
||||
message(FATAL_ERROR
|
||||
"glslc no encontrado y headers SPIR-V no existen.\n"
|
||||
" Instala glslc: sudo apt install glslang-tools (Linux)\n"
|
||||
" choco install vulkan-sdk (Windows)\n"
|
||||
" O genera los headers manualmente: tools/shaders/compile_spirv.sh"
|
||||
)
|
||||
else()
|
||||
message(STATUS "glslc no encontrado - usando headers SPIR-V precompilados")
|
||||
endif()
|
||||
endif()
|
||||
else()
|
||||
message(STATUS "macOS: shaders SPIR-V omitidos (usa Metal)")
|
||||
endif()
|
||||
|
||||
# --- 2. AÑADIR EJECUTABLE ---
|
||||
add_executable(${PROJECT_NAME} ${APP_SOURCES} ${EXTERNAL_SOURCES} ${RENDERING_SOURCES})
|
||||
add_executable(${PROJECT_NAME} ${APP_SOURCES} ${RENDERING_SOURCES})
|
||||
|
||||
# Shaders deben compilarse antes que el ejecutable (Linux/Windows con glslc)
|
||||
if(NOT APPLE AND GLSLC_EXE)
|
||||
add_dependencies(${PROJECT_NAME} shaders)
|
||||
endif()
|
||||
|
||||
# Añadir fuentes de debug solo en modo Debug
|
||||
target_sources(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:${DEBUG_SOURCES}>)
|
||||
|
||||
# --- 3. DIRECTORIOS DE INCLUSIÓN ---
|
||||
target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
@@ -127,7 +175,7 @@ target_include_directories(${PROJECT_NAME} PUBLIC
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
)
|
||||
|
||||
# Enlazar la librería SDL3
|
||||
# Enlazar las librerías SDL3
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3)
|
||||
|
||||
|
||||
@@ -136,13 +184,14 @@ target_link_libraries(${PROJECT_NAME} PRIVATE SDL3::SDL3)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -Wall)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:RELEASE>:-Os -ffunction-sections -fdata-sections>)
|
||||
|
||||
# Definir _DEBUG en modo Debug
|
||||
# Definir _DEBUG en modo Debug y RELEASE_BUILD en modo Release
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:DEBUG>:_DEBUG>)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE $<$<CONFIG:RELEASE>:RELEASE_BUILD>)
|
||||
|
||||
# Configuración específica para cada plataforma
|
||||
if(WIN32)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE WINDOWS_BUILD)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 mingw32 opengl32)
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ws2_32 mingw32)
|
||||
elseif(APPLE)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE MACOS_BUILD)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE -Wno-deprecated)
|
||||
@@ -151,16 +200,97 @@ elseif(UNIX AND NOT APPLE)
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE LINUX_BUILD)
|
||||
endif()
|
||||
|
||||
# Configuración común para OpenGL
|
||||
if(NOT WIN32)
|
||||
find_package(OpenGL REQUIRED)
|
||||
if(OPENGL_FOUND)
|
||||
message(STATUS "OpenGL encontrado: ${OPENGL_LIBRARIES}")
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE ${OPENGL_LIBRARIES})
|
||||
else()
|
||||
message(FATAL_ERROR "OpenGL no encontrado")
|
||||
endif()
|
||||
# Especificar la ubicación del ejecutable
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
|
||||
# --- 5. STATIC ANALYSIS TARGETS ---
|
||||
|
||||
# Buscar herramientas de análisis estático
|
||||
find_program(CLANG_TIDY_EXE NAMES clang-tidy)
|
||||
find_program(CLANG_FORMAT_EXE NAMES clang-format)
|
||||
|
||||
# Recopilar todos los archivos fuente para formateo
|
||||
file(GLOB_RECURSE ALL_SOURCE_FILES
|
||||
"${CMAKE_SOURCE_DIR}/source/*.cpp"
|
||||
"${CMAKE_SOURCE_DIR}/source/*.hpp"
|
||||
"${CMAKE_SOURCE_DIR}/source/*.h"
|
||||
)
|
||||
|
||||
# Excluir directorio external del análisis
|
||||
list(FILTER ALL_SOURCE_FILES EXCLUDE REGEX ".*/external/.*")
|
||||
|
||||
# Para clang-tidy, también excluir jail_audio.hpp
|
||||
set(CLANG_TIDY_SOURCES ${ALL_SOURCE_FILES})
|
||||
list(FILTER CLANG_TIDY_SOURCES EXCLUDE REGEX ".*jail_audio\\.hpp$")
|
||||
list(FILTER CLANG_TIDY_SOURCES EXCLUDE REGEX ".*_spv\\.h$")
|
||||
|
||||
# Targets de clang-tidy
|
||||
if(CLANG_TIDY_EXE)
|
||||
add_custom_target(tidy
|
||||
COMMAND ${CLANG_TIDY_EXE}
|
||||
-p ${CMAKE_BINARY_DIR}
|
||||
${CLANG_TIDY_SOURCES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Running clang-tidy..."
|
||||
)
|
||||
|
||||
add_custom_target(tidy-fix
|
||||
COMMAND ${CLANG_TIDY_EXE}
|
||||
-p ${CMAKE_BINARY_DIR}
|
||||
--fix
|
||||
${CLANG_TIDY_SOURCES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Running clang-tidy with fixes..."
|
||||
)
|
||||
else()
|
||||
message(STATUS "clang-tidy no encontrado - targets 'tidy' y 'tidy-fix' no disponibles")
|
||||
endif()
|
||||
|
||||
# Especificar la ubicación del ejecutable
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR})
|
||||
# Targets de clang-format
|
||||
if(CLANG_FORMAT_EXE)
|
||||
add_custom_target(format
|
||||
COMMAND ${CLANG_FORMAT_EXE}
|
||||
-i
|
||||
${ALL_SOURCE_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Running clang-format..."
|
||||
)
|
||||
|
||||
add_custom_target(format-check
|
||||
COMMAND ${CLANG_FORMAT_EXE}
|
||||
--dry-run
|
||||
--Werror
|
||||
${ALL_SOURCE_FILES}
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Checking clang-format..."
|
||||
)
|
||||
else()
|
||||
message(STATUS "clang-format no encontrado - targets 'format' y 'format-check' no disponibles")
|
||||
endif()
|
||||
|
||||
# --- 6. PACK RESOURCES TARGETS ---
|
||||
set(PACK_TOOL_SOURCES
|
||||
${CMAKE_SOURCE_DIR}/tools/pack_resources/pack_resources.cpp
|
||||
${CMAKE_SOURCE_DIR}/source/core/resources/resource_pack.cpp
|
||||
)
|
||||
|
||||
add_executable(pack_tool ${PACK_TOOL_SOURCES})
|
||||
target_include_directories(pack_tool PRIVATE ${CMAKE_SOURCE_DIR}/source)
|
||||
set_target_properties(pack_tool PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/tools/pack_resources
|
||||
)
|
||||
|
||||
file(GLOB_RECURSE DATA_FILES "${CMAKE_SOURCE_DIR}/data/*")
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT "${CMAKE_SOURCE_DIR}/resources.pack"
|
||||
COMMAND $<TARGET_FILE:pack_tool>
|
||||
"${CMAKE_SOURCE_DIR}/data"
|
||||
"${CMAKE_SOURCE_DIR}/resources.pack"
|
||||
DEPENDS pack_tool ${DATA_FILES}
|
||||
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
|
||||
COMMENT "Generando resources.pack desde data/..."
|
||||
)
|
||||
|
||||
add_custom_target(pack DEPENDS "${CMAKE_SOURCE_DIR}/resources.pack")
|
||||
add_dependencies(${PROJECT_NAME} pack)
|
||||
|
||||
2
LICENSE
@@ -1,6 +1,6 @@
|
||||
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License
|
||||
|
||||
Copyright (c) 2022 JailDoctor's Dilemma
|
||||
Copyright (c) 2022 JailDoctor's Dilemma - JailDesigner
|
||||
|
||||
This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
|
||||
|
||||
|
||||
166
Makefile
@@ -12,9 +12,10 @@ DIR_TOOLS := $(addsuffix /, $(DIR_ROOT)tools)
|
||||
TARGET_NAME := jaildoctors_dilemma
|
||||
TARGET_FILE := $(DIR_BIN)$(TARGET_NAME)
|
||||
APP_NAME := JailDoctor's Dilemma
|
||||
RELEASE_FOLDER := jdd_release
|
||||
DIST_DIR := dist
|
||||
RELEASE_FOLDER := dist/_tmp
|
||||
RELEASE_FILE := $(RELEASE_FOLDER)/$(TARGET_NAME)
|
||||
RESOURCE_FILE := release/jdd.res
|
||||
RESOURCE_FILE := release/windows/jdd.res
|
||||
|
||||
# ==============================================================================
|
||||
# PACKING TOOL
|
||||
@@ -30,12 +31,20 @@ PACK_SOURCES := $(DIR_TOOLS)pack_resources/pack_resources.cpp source/core/reso
|
||||
PACK_INCLUDES := -Isource
|
||||
|
||||
# ==============================================================================
|
||||
# VERSION (automatic based on date)
|
||||
# SHADERS
|
||||
# ==============================================================================
|
||||
SHADER_SCRIPT := $(DIR_ROOT)tools/shaders/compile_spirv.sh
|
||||
SHADER_VERT_H := $(DIR_ROOT)source/core/rendering/sdl3gpu/postfx_vert_spv.h
|
||||
SHADER_FRAG_H := $(DIR_ROOT)source/core/rendering/sdl3gpu/postfx_frag_spv.h
|
||||
GLSLC := $(shell command -v glslc 2>/dev/null)
|
||||
|
||||
# ==============================================================================
|
||||
# VERSION (extracted from defines.hpp)
|
||||
# ==============================================================================
|
||||
ifeq ($(OS),Windows_NT)
|
||||
VERSION := $(shell powershell -Command "Get-Date -Format 'yyyy-MM-dd'")
|
||||
VERSION := v$(shell powershell -Command "(Select-String -Path 'source/utils/defines.hpp' -Pattern 'constexpr const char\* VERSION = \"(.+?)\"').Matches.Groups[1].Value")
|
||||
else
|
||||
VERSION := $(shell date +%Y-%m-%d)
|
||||
VERSION := v$(shell grep 'constexpr const char\* VERSION' source/utils/defines.hpp | sed -E 's/.*VERSION = "([^"]+)".*/\1/')
|
||||
endif
|
||||
|
||||
# ==============================================================================
|
||||
@@ -52,10 +61,10 @@ endif
|
||||
# ==============================================================================
|
||||
# RELEASE NAMES
|
||||
# ==============================================================================
|
||||
WINDOWS_RELEASE := $(TARGET_NAME)-$(VERSION)-win32-x64.zip
|
||||
MACOS_INTEL_RELEASE := $(TARGET_NAME)-$(VERSION)-macos-intel.dmg
|
||||
MACOS_APPLE_SILICON_RELEASE := $(TARGET_NAME)-$(VERSION)-macos-apple-silicon.dmg
|
||||
LINUX_RELEASE := $(TARGET_NAME)-$(VERSION)-linux.tar.gz
|
||||
WINDOWS_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-win32-x64.zip
|
||||
MACOS_INTEL_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-intel.dmg
|
||||
MACOS_APPLE_SILICON_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-macos-apple-silicon.dmg
|
||||
LINUX_RELEASE := $(DIST_DIR)/$(TARGET_NAME)-$(VERSION)-linux.tar.gz
|
||||
|
||||
# ==============================================================================
|
||||
# SOURCE FILES
|
||||
@@ -75,9 +84,11 @@ APP_SOURCES := \
|
||||
source/core/rendering/text.cpp \
|
||||
source/core/rendering/texture.cpp \
|
||||
source/core/rendering/gif.cpp \
|
||||
source/core/rendering/opengl/opengl_shader.cpp \
|
||||
source/core/resources/asset.cpp \
|
||||
source/core/resources/resource.cpp \
|
||||
source/core/rendering/pixel_reveal.cpp \
|
||||
source/core/rendering/surface_dissolve_sprite.cpp \
|
||||
source/core/rendering/sdl3gpu/sdl3gpu_shader.cpp \
|
||||
source/core/resources/resource_list.cpp \
|
||||
source/core/resources/resource_cache.cpp \
|
||||
source/core/resources/resource_helper.cpp \
|
||||
source/core/resources/resource_loader.cpp \
|
||||
source/core/resources/resource_pack.cpp \
|
||||
@@ -89,6 +100,11 @@ APP_SOURCES := \
|
||||
source/game/entities/enemy.cpp \
|
||||
source/game/entities/item.cpp \
|
||||
source/game/gameplay/room.cpp \
|
||||
source/game/gameplay/collision_map.cpp \
|
||||
source/game/gameplay/enemy_manager.cpp \
|
||||
source/game/gameplay/item_manager.cpp \
|
||||
source/game/gameplay/room_loader.cpp \
|
||||
source/game/gameplay/tilemap_renderer.cpp \
|
||||
source/game/gameplay/scoreboard.cpp \
|
||||
source/game/gameplay/cheevos.cpp \
|
||||
source/game/gameplay/item_tracker.cpp \
|
||||
@@ -104,8 +120,10 @@ APP_SOURCES := \
|
||||
source/game/scenes/credits.cpp \
|
||||
source/game/ui/notifier.cpp \
|
||||
source/utils/utils.cpp \
|
||||
source/utils/delta_timer.cpp \
|
||||
source/external/jail_audio.cpp
|
||||
source/utils/delta_timer.cpp
|
||||
|
||||
# All sources combined
|
||||
ALL_SOURCES := $(APP_SOURCES)
|
||||
|
||||
# ==============================================================================
|
||||
# INCLUDES
|
||||
@@ -123,7 +141,7 @@ ifeq ($(OS),Windows_NT)
|
||||
-Wl,--gc-sections -static-libstdc++ -static-libgcc \
|
||||
-Wl,-subsystem,windows -DWINDOWS_BUILD
|
||||
CXXFLAGS_DEBUG := -std=$(CPP_STANDARD) -Wall -g -D_DEBUG -DWINDOWS_BUILD
|
||||
LDFLAGS := -lmingw32 -lws2_32 -lSDL3 -lopengl32
|
||||
LDFLAGS := -lmingw32 -lws2_32 -lSDL3
|
||||
RM := del /Q
|
||||
MKDIR := mkdir
|
||||
else
|
||||
@@ -137,18 +155,35 @@ else
|
||||
UNAME_S := $(shell uname -s)
|
||||
ifeq ($(UNAME_S),Linux)
|
||||
CXXFLAGS += -DLINUX_BUILD
|
||||
LDFLAGS += -lGL
|
||||
endif
|
||||
ifeq ($(UNAME_S),Darwin)
|
||||
CXXFLAGS += -Wno-deprecated -DMACOS_BUILD
|
||||
CXXFLAGS_DEBUG += -Wno-deprecated -DMACOS_BUILD
|
||||
LDFLAGS += -framework OpenGL
|
||||
CXXFLAGS += -DMACOS_BUILD
|
||||
CXXFLAGS_DEBUG += -DMACOS_BUILD
|
||||
# Configurar arquitectura (por defecto arm64)
|
||||
CXXFLAGS += -arch arm64
|
||||
CXXFLAGS_DEBUG += -arch arm64
|
||||
endif
|
||||
endif
|
||||
|
||||
# ==============================================================================
|
||||
# REGLAS PARA COMPILACIÓN DE SHADERS
|
||||
# ==============================================================================
|
||||
compile_shaders:
|
||||
ifdef GLSLC
|
||||
@echo "Compilando shaders SPIR-V..."
|
||||
@$(SHADER_SCRIPT)
|
||||
@echo "✓ Shaders compilados"
|
||||
else
|
||||
@if [ -f "$(SHADER_VERT_H)" ] && [ -f "$(SHADER_FRAG_H)" ]; then \
|
||||
echo "⚠ glslc no encontrado - usando headers SPIR-V precompilados"; \
|
||||
else \
|
||||
echo "ERROR: glslc no encontrado y headers SPIR-V no existen."; \
|
||||
echo " Instala glslc: sudo apt install glslang-tools"; \
|
||||
echo " O ejecuta manualmente: tools/shaders/compile_spirv.sh"; \
|
||||
exit 1; \
|
||||
fi
|
||||
endif
|
||||
|
||||
# ==============================================================================
|
||||
# REGLAS PARA HERRAMIENTA DE EMPAQUETADO Y RESOURCES.PACK
|
||||
# ==============================================================================
|
||||
@@ -169,18 +204,15 @@ resources.pack: $(PACK_TOOL)
|
||||
# ==============================================================================
|
||||
windows:
|
||||
@echo off
|
||||
@echo Generando version.h...
|
||||
@powershell -Command "$$GIT_HASH = (git rev-parse --short=7 HEAD 2>$$null); if (-not $$GIT_HASH) { $$GIT_HASH = 'unknown' }; (Get-Content source/version.h.in) -replace '@GIT_HASH@', $$GIT_HASH | Set-Content source/version.h"
|
||||
@echo Compilando para Windows con nombre: "$(WIN_TARGET_FILE).exe"
|
||||
windres release/jdd.rc -O coff -o $(RESOURCE_FILE)
|
||||
g++ $(APP_SOURCES) $(RESOURCE_FILE) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_TARGET_FILE).exe"
|
||||
windres release/windows/jdd.rc -O coff -o $(RESOURCE_FILE)
|
||||
g++ $(ALL_SOURCES) $(RESOURCE_FILE) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_TARGET_FILE).exe"
|
||||
strip -s -R .comment -R .gnu.version "$(WIN_TARGET_FILE).exe" --strip-unneeded
|
||||
|
||||
windows_debug:
|
||||
@echo off
|
||||
@echo Compilando version debug para Windows: "$(WIN_TARGET_FILE)_debug.exe"
|
||||
g++ $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(WIN_TARGET_FILE)_debug.exe"
|
||||
|
||||
windows_release:
|
||||
@$(MAKE) pack_tool
|
||||
@$(MAKE) compile_shaders
|
||||
@$(MAKE) resources.pack
|
||||
@echo off
|
||||
@echo Creando release para Windows - Version: $(VERSION)
|
||||
@@ -189,7 +221,8 @@ windows_release:
|
||||
@echo "Generando version.h..."
|
||||
@powershell -Command "$$GIT_HASH = (git rev-parse --short=7 HEAD 2>$$null); if (-not $$GIT_HASH) { $$GIT_HASH = 'unknown' }; (Get-Content source/version.h.in) -replace '@GIT_HASH@', $$GIT_HASH | Set-Content source/version.h"
|
||||
|
||||
# Crea carpeta temporal 'RELEASE_FOLDER'
|
||||
# Crea carpeta de distribución y carpeta temporal 'RELEASE_FOLDER'
|
||||
powershell if (-not (Test-Path "$(DIST_DIR)")) {New-Item "$(DIST_DIR)" -ItemType Directory}
|
||||
powershell if (Test-Path "$(RELEASE_FOLDER)") {Remove-Item "$(RELEASE_FOLDER)" -Recurse -Force}
|
||||
powershell if (-not (Test-Path "$(RELEASE_FOLDER)")) {New-Item "$(RELEASE_FOLDER)" -ItemType Directory}
|
||||
|
||||
@@ -200,11 +233,11 @@ windows_release:
|
||||
powershell Copy-Item "LICENSE" -Destination "$(RELEASE_FOLDER)"
|
||||
powershell Copy-Item "README.md" -Destination "$(RELEASE_FOLDER)"
|
||||
powershell Copy-Item "gamecontrollerdb.txt" -Destination "$(RELEASE_FOLDER)"
|
||||
powershell Copy-Item "release\*.dll" -Destination "$(RELEASE_FOLDER)"
|
||||
powershell Copy-Item "release\windows\dll\*.dll" -Destination "$(RELEASE_FOLDER)"
|
||||
|
||||
# Compila (con icono)
|
||||
windres release/jdd.rc -O coff -o $(RESOURCE_FILE)
|
||||
g++ $(APP_SOURCES) $(RESOURCE_FILE) $(INCLUDES) -DRELEASE_BUILD $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_RELEASE_FILE).exe"
|
||||
windres release/windows/jdd.rc -O coff -o $(RESOURCE_FILE)
|
||||
g++ $(ALL_SOURCES) $(RESOURCE_FILE) $(INCLUDES) -DRELEASE_BUILD $(CXXFLAGS) $(LDFLAGS) -o "$(WIN_RELEASE_FILE).exe"
|
||||
strip -s -R .comment -R .gnu.version "$(WIN_RELEASE_FILE).exe" --strip-unneeded
|
||||
|
||||
# Crea el fichero .zip
|
||||
@@ -219,15 +252,13 @@ windows_release:
|
||||
# COMPILACIÓN PARA MACOS
|
||||
# ==============================================================================
|
||||
macos:
|
||||
@GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \
|
||||
sed "s/@GIT_HASH@/$$GIT_HASH/g" source/version.h.in > source/version.h
|
||||
@echo "Compilando para macOS: $(TARGET_NAME)"
|
||||
clang++ $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"
|
||||
|
||||
macos_debug:
|
||||
@echo "Compilando version debug para macOS: $(TARGET_NAME)_debug"
|
||||
clang++ $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug"
|
||||
clang++ $(ALL_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"
|
||||
|
||||
macos_release:
|
||||
@$(MAKE) pack_tool
|
||||
@$(MAKE) compile_shaders
|
||||
@$(MAKE) resources.pack
|
||||
@echo "Creando release para macOS - Version: $(VERSION)"
|
||||
|
||||
@@ -241,29 +272,31 @@ macos_release:
|
||||
|
||||
# Elimina datos de compilaciones anteriores
|
||||
$(RMDIR) "$(RELEASE_FOLDER)"
|
||||
$(RMDIR) Frameworks
|
||||
$(RMFILE) tmp.dmg
|
||||
$(RMFILE) "$(MACOS_INTEL_RELEASE)"
|
||||
$(RMFILE) "$(MACOS_APPLE_SILICON_RELEASE)"
|
||||
$(RMFILE) "$(DIST_DIR)"/rw.*
|
||||
|
||||
# Crea la carpeta temporal para hacer el trabajo y las carpetas obligatorias para crear una app de macOS
|
||||
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
||||
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS"
|
||||
$(MKDIR) "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||
$(MKDIR) Frameworks
|
||||
|
||||
# Copia carpetas y ficheros
|
||||
cp resources.pack "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||
cp gamecontrollerdb.txt "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||
cp -R release/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
||||
cp -R release/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework Frameworks
|
||||
cp release/*.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||
cp release/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents"
|
||||
cp -R release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64/SDL3.framework "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Frameworks"
|
||||
cp release/icons/*.icns "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Resources"
|
||||
cp release/macos/Info.plist "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents"
|
||||
cp LICENSE "$(RELEASE_FOLDER)"
|
||||
cp README.md "$(RELEASE_FOLDER)"
|
||||
|
||||
# Actualiza versión en Info.plist
|
||||
@echo "Actualizando Info.plist con versión $(VERSION)..."
|
||||
@RAW_VERSION=$$(echo "$(VERSION)" | sed 's/^v//'); \
|
||||
sed -i '' '/<key>CFBundleShortVersionString<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"; \
|
||||
sed -i '' '/<key>CFBundleVersion<\/key>/{n;s|<string>.*</string>|<string>'"$$RAW_VERSION"'</string>|;}' "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/Info.plist"
|
||||
|
||||
# Compila la versión para procesadores Intel
|
||||
clang++ $(APP_SOURCES) $(INCLUDES) -DMACOS_BUNDLE -DRELEASE_BUILD -std=$(CPP_STANDARD) -Wall -Os -framework SDL3 -F ./Frameworks -framework OpenGL -Wno-deprecated -ffunction-sections -fdata-sections -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.15
|
||||
clang++ $(ALL_SOURCES) $(INCLUDES) -DMACOS_BUNDLE -DRELEASE_BUILD -std=$(CPP_STANDARD) -Wall -Os -framework SDL3 -F release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64 -ffunction-sections -fdata-sections -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)" -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.15
|
||||
|
||||
# Firma la aplicación
|
||||
codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"
|
||||
@@ -286,7 +319,7 @@ macos_release:
|
||||
@echo "Release Intel creado: $(MACOS_INTEL_RELEASE)"
|
||||
|
||||
# Compila la versión para procesadores Apple Silicon
|
||||
clang++ $(APP_SOURCES) $(INCLUDES) -DMACOS_BUNDLE -DRELEASE_BUILD -std=$(CPP_STANDARD) -Wall -Os -framework SDL3 -F ./Frameworks -framework OpenGL -Wno-deprecated -ffunction-sections -fdata-sections -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11
|
||||
clang++ $(ALL_SOURCES) $(INCLUDES) -DMACOS_BUNDLE -DRELEASE_BUILD -std=$(CPP_STANDARD) -Wall -Os -framework SDL3 -F release/macos/frameworks/SDL3.xcframework/macos-arm64_x86_64 -ffunction-sections -fdata-sections -o "$(RELEASE_FOLDER)/$(APP_NAME).app/Contents/MacOS/$(TARGET_NAME)" -rpath @executable_path/../Frameworks/ -target arm64-apple-macos11
|
||||
|
||||
# Firma la aplicación
|
||||
codesign --deep --force --sign - --timestamp=none "$(RELEASE_FOLDER)/$(APP_NAME).app"
|
||||
@@ -309,23 +342,21 @@ macos_release:
|
||||
@echo "Release Apple Silicon creado: $(MACOS_APPLE_SILICON_RELEASE)"
|
||||
|
||||
# Elimina las carpetas temporales
|
||||
$(RMDIR) Frameworks
|
||||
$(RMDIR) "$(RELEASE_FOLDER)"
|
||||
$(RMFILE) "$(DIST_DIR)"/rw.*
|
||||
|
||||
# ==============================================================================
|
||||
# COMPILACIÓN PARA LINUX
|
||||
# ==============================================================================
|
||||
linux:
|
||||
@GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \
|
||||
sed "s/@GIT_HASH@/$$GIT_HASH/g" source/version.h.in > source/version.h
|
||||
@echo "Compilando para Linux: $(TARGET_NAME)"
|
||||
g++ $(APP_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"
|
||||
g++ $(ALL_SOURCES) $(INCLUDES) $(CXXFLAGS) $(LDFLAGS) -o "$(TARGET_FILE)"
|
||||
strip -s -R .comment -R .gnu.version "$(TARGET_FILE)" --strip-unneeded
|
||||
|
||||
linux_debug:
|
||||
@echo "Compilando version debug para Linux: $(TARGET_NAME)_debug"
|
||||
g++ $(APP_SOURCES) $(INCLUDES) -DDEBUG -DVERBOSE $(CXXFLAGS_DEBUG) $(LDFLAGS) -o "$(TARGET_FILE)_debug"
|
||||
|
||||
linux_release:
|
||||
@$(MAKE) pack_tool
|
||||
@$(MAKE) compile_shaders
|
||||
@$(MAKE) resources.pack
|
||||
@echo "Creando release para Linux - Version: $(VERSION)"
|
||||
|
||||
@@ -334,10 +365,8 @@ linux_release:
|
||||
@GIT_HASH=$$(git rev-parse --short=7 HEAD 2>/dev/null || echo "unknown"); \
|
||||
sed "s/@GIT_HASH@/$$GIT_HASH/g" source/version.h.in > source/version.h
|
||||
|
||||
# Elimina carpetas previas
|
||||
# Elimina carpeta temporal previa y la recrea (crea dist/ si no existe)
|
||||
$(RMDIR) "$(RELEASE_FOLDER)"
|
||||
|
||||
# Crea la carpeta temporal para realizar el lanzamiento
|
||||
$(MKDIR) "$(RELEASE_FOLDER)"
|
||||
|
||||
# Copia ficheros
|
||||
@@ -347,7 +376,7 @@ linux_release:
|
||||
cp gamecontrollerdb.txt "$(RELEASE_FOLDER)"
|
||||
|
||||
# Compila
|
||||
g++ $(APP_SOURCES) $(INCLUDES) -DRELEASE_BUILD $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FILE)"
|
||||
g++ $(ALL_SOURCES) $(INCLUDES) -DRELEASE_BUILD $(CXXFLAGS) $(LDFLAGS) -o "$(RELEASE_FILE)"
|
||||
strip -s -R .comment -R .gnu.version "$(RELEASE_FILE)" --strip-unneeded
|
||||
|
||||
# Empaqueta ficheros
|
||||
@@ -361,6 +390,25 @@ linux_release:
|
||||
# ==============================================================================
|
||||
# REGLAS ESPECIALES
|
||||
# ==============================================================================
|
||||
# Regla para mostrar la versión actual
|
||||
show_version:
|
||||
@echo "Version actual: $(VERSION)"
|
||||
|
||||
# Regla de ayuda
|
||||
help:
|
||||
@echo "Makefile para JailDoctor's Dilemma"
|
||||
@echo "Comandos disponibles:"
|
||||
@echo " windows - Compilar para Windows"
|
||||
@echo " windows_release - Crear release completo para Windows"
|
||||
@echo " linux - Compilar para Linux"
|
||||
@echo " linux_release - Crear release completo para Linux"
|
||||
@echo " macos - Compilar para macOS"
|
||||
@echo " macos_release - Crear release completo para macOS"
|
||||
@echo " pack_tool - Compilar herramienta de empaquetado"
|
||||
@echo " resources.pack - Generar pack de recursos desde data/"
|
||||
@echo " show_version - Mostrar version actual ($(VERSION))"
|
||||
@echo " help - Mostrar esta ayuda"
|
||||
|
||||
FORCE:
|
||||
|
||||
.PHONY: windows windows_debug windows_release macos macos_debug macos_release linux linux_debug linux_release pack_tool resources.pack
|
||||
.PHONY: windows windows_release macos macos_release linux linux_release compile_shaders pack_tool resources.pack show_version help
|
||||
|
||||
36
README.md
@@ -30,21 +30,25 @@ Quan hages recuperat la major part de les peces, dirigeix-te a la Jail per mostr
|
||||
|
||||
El joc permet tant l'ús del teclat com d'un comandament. Les tecles per a jugar són les següents:
|
||||
|
||||
- **Cursors**: Per moure's a l'esquerra o dreta i per saltar. Es poden modificar les tecles en el fitxer de configuració, triant entre aquestes opcions:
|
||||
- O, P per moure's i Q per saltar.
|
||||
- A, D per moure's i W per saltar.
|
||||
| Tecla | Acció |
|
||||
|-------|-------|
|
||||
| **←, →** | Moure's a l'esquerra o dreta |
|
||||
| **↑** | Saltar |
|
||||
| **Enter** | Eixir dels projectes |
|
||||
| **ESC** | Cancelar / Eixir del joc |
|
||||
| **F1** | Disminuir la mida de la finestra |
|
||||
| **F2** | Augmentar la mida de la finestra |
|
||||
| **F3** | Alternar pantalla completa |
|
||||
| **F4** | Activar/desactivar els shaders |
|
||||
| **F5** | Següent paleta de colors |
|
||||
| **F6** | Paleta de colors anterior |
|
||||
| **F7** | Activar/desactivar l'escalat exacte |
|
||||
| **F8** | Activar/desactivar la música |
|
||||
| **F9** | Activar/desactivar el marge de colors |
|
||||
| **F10** | Activar/desactivar VSync |
|
||||
| **F11** | Pausar el joc |
|
||||
|
||||
- **Tecla M**: Activa o desactiva la música.
|
||||
- **Tecla P**: Pausa el joc.
|
||||
- **Tecla ESC**: Ix del joc si estàs jugant. Tanca el programa en qualsevol altra circumstància.
|
||||
- **Tecla F1**: Disminueix la mida de la finestra.
|
||||
- **Tecla F2**: Augmenta la mida de la finestra.
|
||||
- **Tecla F3**: Alterna entre el mode de pantalla completa i el mode finestra.
|
||||
- **Tecla F4**: Activa o desactiva els shaders.
|
||||
- **Tecla F5**: Estableix la següent paleta de colors.
|
||||
- **Tecla F6**: Estableix la paleta de colors prèvia.
|
||||
- **Tecla F7**: Activa o desactiva el escalat exacte.
|
||||
- **Tecla B**: Activa o desactiva el marge de colors.
|
||||
**Nota:** Les tecles de moviment (←, →, ↑) es poden redefinir des del menú del joc.
|
||||
|
||||

|
||||
|
||||
@@ -56,9 +60,9 @@ El programa guarda automàticament la configuració del mode de vídeo i les est
|
||||
|
||||
- **Windows**: `C:\Users\<nom_d'usuari>\AppData\Roaming\jailgames\jaildoctors_dilemma`
|
||||
- **MacOS**: `~/Library/Application Support/jailgames/jaildoctors_dilemma`
|
||||
- **Linux**: `~/.jailgames/jaildoctors_dilemma`
|
||||
- **Linux**: `~/.config/jailgames/jaildoctors_dilemma`
|
||||
|
||||
Dins de la carpeta es troba el fitxer de configuració `config.txt`, on es pot modificar la configuració per connectar-se al servei en línia, i els fitxers `stats.csv` i `stats_buffer.csv`, que contenen informació sobre les estadístiques del joc.
|
||||
Dins de la carpeta es troba el fitxer de configuració `config.yaml`, on es pot modificar la configuració per connectar-se al servei en línia, i els fitxers `stats.csv` i `stats_buffer.csv`, que contenen informació sobre les estadístiques del joc.
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,396 +0,0 @@
|
||||
# JailDoctor's Dilemma - Asset Configuration
|
||||
# Format: TYPE|PATH [|OPTIONS]
|
||||
# Options: optional, absolute (comma-separated)
|
||||
# Variables: ${PREFIX}, ${SYSTEM_FOLDER}
|
||||
|
||||
# ===================================================================
|
||||
# FONTS
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/font/smb2.gif
|
||||
FONT|${PREFIX}/data/font/smb2.txt
|
||||
BITMAP|${PREFIX}/data/font/aseprite.gif
|
||||
FONT|${PREFIX}/data/font/aseprite.txt
|
||||
BITMAP|${PREFIX}/data/font/gauntlet.gif
|
||||
FONT|${PREFIX}/data/font/gauntlet.txt
|
||||
BITMAP|${PREFIX}/data/font/subatomic.gif
|
||||
FONT|${PREFIX}/data/font/subatomic.txt
|
||||
BITMAP|${PREFIX}/data/font/8bithud.gif
|
||||
FONT|${PREFIX}/data/font/8bithud.txt
|
||||
|
||||
# ===================================================================
|
||||
# PALETTES
|
||||
# ===================================================================
|
||||
PALETTE|${PREFIX}/data/palette/zx-spectrum.pal
|
||||
PALETTE|${PREFIX}/data/palette/zx-spectrum-adjusted.pal
|
||||
PALETTE|${PREFIX}/data/palette/zxarne-5-2.pal
|
||||
PALETTE|${PREFIX}/data/palette/black-and-white.pal
|
||||
PALETTE|${PREFIX}/data/palette/green-phosphor.pal
|
||||
PALETTE|${PREFIX}/data/palette/orange-screen.pal
|
||||
PALETTE|${PREFIX}/data/palette/ruzx-spectrum.pal
|
||||
PALETTE|${PREFIX}/data/palette/ruzx-spectrum-revision-2.pal
|
||||
PALETTE|${PREFIX}/data/palette/pico-8.pal
|
||||
PALETTE|${PREFIX}/data/palette/sweetie-16.pal
|
||||
PALETTE|${PREFIX}/data/palette/island-joy-16.pal
|
||||
PALETTE|${PREFIX}/data/palette/lost-century.pal
|
||||
PALETTE|${PREFIX}/data/palette/na16.pal
|
||||
PALETTE|${PREFIX}/data/palette/steam-lords.pal
|
||||
|
||||
# ===================================================================
|
||||
# SHADERS
|
||||
# ===================================================================
|
||||
DATA|${PREFIX}/data/shaders/crtpi_vertex.glsl
|
||||
DATA|${PREFIX}/data/shaders/crtpi_fragment.glsl
|
||||
DATA|${PREFIX}/data/shaders/crtpi_vertex_es.glsl
|
||||
DATA|${PREFIX}/data/shaders/crtpi_fragment_es.glsl
|
||||
|
||||
# ===================================================================
|
||||
# INPUT DATA (in root, not packed - SDL needs filesystem access)
|
||||
# ===================================================================
|
||||
DATA|${PREFIX}/gamecontrollerdb.txt
|
||||
|
||||
# ===================================================================
|
||||
# SYSTEM FILES (optional, absolute paths)
|
||||
# ===================================================================
|
||||
DATA|${SYSTEM_FOLDER}/config.txt|optional,absolute
|
||||
DATA|${SYSTEM_FOLDER}/stats_buffer.csv|optional,absolute
|
||||
DATA|${SYSTEM_FOLDER}/stats.csv|optional,absolute
|
||||
DATA|${SYSTEM_FOLDER}/cheevos.bin|optional,absolute
|
||||
|
||||
# ===================================================================
|
||||
# ROOMS AND TILEMAPS (60 rooms)
|
||||
# ===================================================================
|
||||
TILEMAP|${PREFIX}/data/room/01.tmx
|
||||
ROOM|${PREFIX}/data/room/01.room
|
||||
TILEMAP|${PREFIX}/data/room/02.tmx
|
||||
ROOM|${PREFIX}/data/room/02.room
|
||||
TILEMAP|${PREFIX}/data/room/03.tmx
|
||||
ROOM|${PREFIX}/data/room/03.room
|
||||
TILEMAP|${PREFIX}/data/room/04.tmx
|
||||
ROOM|${PREFIX}/data/room/04.room
|
||||
TILEMAP|${PREFIX}/data/room/05.tmx
|
||||
ROOM|${PREFIX}/data/room/05.room
|
||||
TILEMAP|${PREFIX}/data/room/06.tmx
|
||||
ROOM|${PREFIX}/data/room/06.room
|
||||
TILEMAP|${PREFIX}/data/room/07.tmx
|
||||
ROOM|${PREFIX}/data/room/07.room
|
||||
TILEMAP|${PREFIX}/data/room/08.tmx
|
||||
ROOM|${PREFIX}/data/room/08.room
|
||||
TILEMAP|${PREFIX}/data/room/09.tmx
|
||||
ROOM|${PREFIX}/data/room/09.room
|
||||
TILEMAP|${PREFIX}/data/room/10.tmx
|
||||
ROOM|${PREFIX}/data/room/10.room
|
||||
TILEMAP|${PREFIX}/data/room/11.tmx
|
||||
ROOM|${PREFIX}/data/room/11.room
|
||||
TILEMAP|${PREFIX}/data/room/12.tmx
|
||||
ROOM|${PREFIX}/data/room/12.room
|
||||
TILEMAP|${PREFIX}/data/room/13.tmx
|
||||
ROOM|${PREFIX}/data/room/13.room
|
||||
TILEMAP|${PREFIX}/data/room/14.tmx
|
||||
ROOM|${PREFIX}/data/room/14.room
|
||||
TILEMAP|${PREFIX}/data/room/15.tmx
|
||||
ROOM|${PREFIX}/data/room/15.room
|
||||
TILEMAP|${PREFIX}/data/room/16.tmx
|
||||
ROOM|${PREFIX}/data/room/16.room
|
||||
TILEMAP|${PREFIX}/data/room/17.tmx
|
||||
ROOM|${PREFIX}/data/room/17.room
|
||||
TILEMAP|${PREFIX}/data/room/18.tmx
|
||||
ROOM|${PREFIX}/data/room/18.room
|
||||
TILEMAP|${PREFIX}/data/room/19.tmx
|
||||
ROOM|${PREFIX}/data/room/19.room
|
||||
TILEMAP|${PREFIX}/data/room/20.tmx
|
||||
ROOM|${PREFIX}/data/room/20.room
|
||||
TILEMAP|${PREFIX}/data/room/21.tmx
|
||||
ROOM|${PREFIX}/data/room/21.room
|
||||
TILEMAP|${PREFIX}/data/room/22.tmx
|
||||
ROOM|${PREFIX}/data/room/22.room
|
||||
TILEMAP|${PREFIX}/data/room/23.tmx
|
||||
ROOM|${PREFIX}/data/room/23.room
|
||||
TILEMAP|${PREFIX}/data/room/24.tmx
|
||||
ROOM|${PREFIX}/data/room/24.room
|
||||
TILEMAP|${PREFIX}/data/room/25.tmx
|
||||
ROOM|${PREFIX}/data/room/25.room
|
||||
TILEMAP|${PREFIX}/data/room/26.tmx
|
||||
ROOM|${PREFIX}/data/room/26.room
|
||||
TILEMAP|${PREFIX}/data/room/27.tmx
|
||||
ROOM|${PREFIX}/data/room/27.room
|
||||
TILEMAP|${PREFIX}/data/room/28.tmx
|
||||
ROOM|${PREFIX}/data/room/28.room
|
||||
TILEMAP|${PREFIX}/data/room/29.tmx
|
||||
ROOM|${PREFIX}/data/room/29.room
|
||||
TILEMAP|${PREFIX}/data/room/30.tmx
|
||||
ROOM|${PREFIX}/data/room/30.room
|
||||
TILEMAP|${PREFIX}/data/room/31.tmx
|
||||
ROOM|${PREFIX}/data/room/31.room
|
||||
TILEMAP|${PREFIX}/data/room/32.tmx
|
||||
ROOM|${PREFIX}/data/room/32.room
|
||||
TILEMAP|${PREFIX}/data/room/33.tmx
|
||||
ROOM|${PREFIX}/data/room/33.room
|
||||
TILEMAP|${PREFIX}/data/room/34.tmx
|
||||
ROOM|${PREFIX}/data/room/34.room
|
||||
TILEMAP|${PREFIX}/data/room/35.tmx
|
||||
ROOM|${PREFIX}/data/room/35.room
|
||||
TILEMAP|${PREFIX}/data/room/36.tmx
|
||||
ROOM|${PREFIX}/data/room/36.room
|
||||
TILEMAP|${PREFIX}/data/room/37.tmx
|
||||
ROOM|${PREFIX}/data/room/37.room
|
||||
TILEMAP|${PREFIX}/data/room/38.tmx
|
||||
ROOM|${PREFIX}/data/room/38.room
|
||||
TILEMAP|${PREFIX}/data/room/39.tmx
|
||||
ROOM|${PREFIX}/data/room/39.room
|
||||
TILEMAP|${PREFIX}/data/room/40.tmx
|
||||
ROOM|${PREFIX}/data/room/40.room
|
||||
TILEMAP|${PREFIX}/data/room/41.tmx
|
||||
ROOM|${PREFIX}/data/room/41.room
|
||||
TILEMAP|${PREFIX}/data/room/42.tmx
|
||||
ROOM|${PREFIX}/data/room/42.room
|
||||
TILEMAP|${PREFIX}/data/room/43.tmx
|
||||
ROOM|${PREFIX}/data/room/43.room
|
||||
TILEMAP|${PREFIX}/data/room/44.tmx
|
||||
ROOM|${PREFIX}/data/room/44.room
|
||||
TILEMAP|${PREFIX}/data/room/45.tmx
|
||||
ROOM|${PREFIX}/data/room/45.room
|
||||
TILEMAP|${PREFIX}/data/room/46.tmx
|
||||
ROOM|${PREFIX}/data/room/46.room
|
||||
TILEMAP|${PREFIX}/data/room/47.tmx
|
||||
ROOM|${PREFIX}/data/room/47.room
|
||||
TILEMAP|${PREFIX}/data/room/48.tmx
|
||||
ROOM|${PREFIX}/data/room/48.room
|
||||
TILEMAP|${PREFIX}/data/room/49.tmx
|
||||
ROOM|${PREFIX}/data/room/49.room
|
||||
TILEMAP|${PREFIX}/data/room/50.tmx
|
||||
ROOM|${PREFIX}/data/room/50.room
|
||||
TILEMAP|${PREFIX}/data/room/51.tmx
|
||||
ROOM|${PREFIX}/data/room/51.room
|
||||
TILEMAP|${PREFIX}/data/room/52.tmx
|
||||
ROOM|${PREFIX}/data/room/52.room
|
||||
TILEMAP|${PREFIX}/data/room/53.tmx
|
||||
ROOM|${PREFIX}/data/room/53.room
|
||||
TILEMAP|${PREFIX}/data/room/54.tmx
|
||||
ROOM|${PREFIX}/data/room/54.room
|
||||
TILEMAP|${PREFIX}/data/room/55.tmx
|
||||
ROOM|${PREFIX}/data/room/55.room
|
||||
TILEMAP|${PREFIX}/data/room/56.tmx
|
||||
ROOM|${PREFIX}/data/room/56.room
|
||||
TILEMAP|${PREFIX}/data/room/57.tmx
|
||||
ROOM|${PREFIX}/data/room/57.room
|
||||
TILEMAP|${PREFIX}/data/room/58.tmx
|
||||
ROOM|${PREFIX}/data/room/58.room
|
||||
TILEMAP|${PREFIX}/data/room/59.tmx
|
||||
ROOM|${PREFIX}/data/room/59.room
|
||||
TILEMAP|${PREFIX}/data/room/60.tmx
|
||||
ROOM|${PREFIX}/data/room/60.room
|
||||
|
||||
# ===================================================================
|
||||
# TILESETS
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/tilesets/standard.gif
|
||||
|
||||
# ===================================================================
|
||||
# ENEMIES
|
||||
# ===================================================================
|
||||
ANIMATION|${PREFIX}/data/enemies/abad_bell.ani
|
||||
BITMAP|${PREFIX}/data/enemies/abad_bell.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/abad.ani
|
||||
BITMAP|${PREFIX}/data/enemies/abad.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/amstrad_cs.ani
|
||||
BITMAP|${PREFIX}/data/enemies/amstrad_cs.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/flying_arounder.ani
|
||||
BITMAP|${PREFIX}/data/enemies/flying_arounder.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/stopped_arounder.ani
|
||||
BITMAP|${PREFIX}/data/enemies/stopped_arounder.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/walking_arounder.ani
|
||||
BITMAP|${PREFIX}/data/enemies/walking_arounder.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/arounders_door.ani
|
||||
BITMAP|${PREFIX}/data/enemies/arounders_door.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/arounders_machine.ani
|
||||
BITMAP|${PREFIX}/data/enemies/arounders_machine.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/bat.ani
|
||||
BITMAP|${PREFIX}/data/enemies/bat.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/batman_bell.ani
|
||||
BITMAP|${PREFIX}/data/enemies/batman_bell.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/batman_fire.ani
|
||||
BITMAP|${PREFIX}/data/enemies/batman_fire.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/batman.ani
|
||||
BITMAP|${PREFIX}/data/enemies/batman.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/bell.ani
|
||||
BITMAP|${PREFIX}/data/enemies/bell.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/bin.ani
|
||||
BITMAP|${PREFIX}/data/enemies/bin.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/bird.ani
|
||||
BITMAP|${PREFIX}/data/enemies/bird.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/breakout.ani
|
||||
BITMAP|${PREFIX}/data/enemies/breakout.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/bry.ani
|
||||
BITMAP|${PREFIX}/data/enemies/bry.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/chip.ani
|
||||
BITMAP|${PREFIX}/data/enemies/chip.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/code.ani
|
||||
BITMAP|${PREFIX}/data/enemies/code.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/congo.ani
|
||||
BITMAP|${PREFIX}/data/enemies/congo.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/crosshair.ani
|
||||
BITMAP|${PREFIX}/data/enemies/crosshair.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/demon.ani
|
||||
BITMAP|${PREFIX}/data/enemies/demon.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/dimallas.ani
|
||||
BITMAP|${PREFIX}/data/enemies/dimallas.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/floppy.ani
|
||||
BITMAP|${PREFIX}/data/enemies/floppy.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/dong.ani
|
||||
BITMAP|${PREFIX}/data/enemies/dong.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/guitar.ani
|
||||
BITMAP|${PREFIX}/data/enemies/guitar.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/heavy.ani
|
||||
BITMAP|${PREFIX}/data/enemies/heavy.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jailer_#1.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jailer_#1.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jailer_#2.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jailer_#2.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jailer_#3.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jailer_#3.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jailbattle_alien.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jailbattle_alien.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jailbattle_human.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jailbattle_human.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/jeannine.ani
|
||||
BITMAP|${PREFIX}/data/enemies/jeannine.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/lamp.ani
|
||||
BITMAP|${PREFIX}/data/enemies/lamp.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/lord_abad.ani
|
||||
BITMAP|${PREFIX}/data/enemies/lord_abad.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/matatunos.ani
|
||||
BITMAP|${PREFIX}/data/enemies/matatunos.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/mummy.ani
|
||||
BITMAP|${PREFIX}/data/enemies/mummy.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/paco.ani
|
||||
BITMAP|${PREFIX}/data/enemies/paco.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/elsa.ani
|
||||
BITMAP|${PREFIX}/data/enemies/elsa.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/qvoid.ani
|
||||
BITMAP|${PREFIX}/data/enemies/qvoid.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/robot.ani
|
||||
BITMAP|${PREFIX}/data/enemies/robot.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/sam.ani
|
||||
BITMAP|${PREFIX}/data/enemies/sam.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/shock.ani
|
||||
BITMAP|${PREFIX}/data/enemies/shock.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/sigmasua.ani
|
||||
BITMAP|${PREFIX}/data/enemies/sigmasua.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/spark.ani
|
||||
BITMAP|${PREFIX}/data/enemies/spark.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/special/aerojailer.ani
|
||||
BITMAP|${PREFIX}/data/enemies/special/aerojailer.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/special/arounder.ani
|
||||
BITMAP|${PREFIX}/data/enemies/special/arounder.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/special/pepe_rosita_job.ani
|
||||
BITMAP|${PREFIX}/data/enemies/special/pepe_rosita_job.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/special/shooting_star.ani
|
||||
BITMAP|${PREFIX}/data/enemies/special/shooting_star.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/spider.ani
|
||||
BITMAP|${PREFIX}/data/enemies/spider.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/tree_thing.ani
|
||||
BITMAP|${PREFIX}/data/enemies/tree_thing.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/tuno.ani
|
||||
BITMAP|${PREFIX}/data/enemies/tuno.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/tv_panel.ani
|
||||
BITMAP|${PREFIX}/data/enemies/tv_panel.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/tv.ani
|
||||
BITMAP|${PREFIX}/data/enemies/tv.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/upv_student.ani
|
||||
BITMAP|${PREFIX}/data/enemies/upv_student.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/wave.ani
|
||||
BITMAP|${PREFIX}/data/enemies/wave.gif
|
||||
ANIMATION|${PREFIX}/data/enemies/z80.ani
|
||||
BITMAP|${PREFIX}/data/enemies/z80.gif
|
||||
|
||||
# ===================================================================
|
||||
# PLAYER
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/player/player.gif
|
||||
ANIMATION|${PREFIX}/data/player/player.ani
|
||||
BITMAP|${PREFIX}/data/player/player2.gif
|
||||
ANIMATION|${PREFIX}/data/player/player2.ani
|
||||
BITMAP|${PREFIX}/data/player/player_game_over.gif
|
||||
ANIMATION|${PREFIX}/data/player/player_game_over.ani
|
||||
|
||||
# ===================================================================
|
||||
# ITEMS
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/items/items.gif
|
||||
|
||||
# ===================================================================
|
||||
# MUSIC
|
||||
# ===================================================================
|
||||
MUSIC|${PREFIX}/data/music/title.ogg
|
||||
MUSIC|${PREFIX}/data/music/game.ogg
|
||||
MUSIC|${PREFIX}/data/music/loading_sound1.ogg
|
||||
MUSIC|${PREFIX}/data/music/loading_sound2.ogg
|
||||
MUSIC|${PREFIX}/data/music/loading_sound3.ogg
|
||||
MUSIC|${PREFIX}/data/music/ending1.ogg
|
||||
MUSIC|${PREFIX}/data/music/ending2.ogg
|
||||
MUSIC|${PREFIX}/data/music/game_over.ogg
|
||||
|
||||
# ===================================================================
|
||||
# SOUND EFFECTS
|
||||
# ===================================================================
|
||||
SOUND|${PREFIX}/data/sound/item.wav
|
||||
SOUND|${PREFIX}/data/sound/death.wav
|
||||
SOUND|${PREFIX}/data/sound/notify.wav
|
||||
|
||||
# Jump sounds (1-24)
|
||||
SOUND|${PREFIX}/data/sound/jump1.wav
|
||||
SOUND|${PREFIX}/data/sound/jump2.wav
|
||||
SOUND|${PREFIX}/data/sound/jump3.wav
|
||||
SOUND|${PREFIX}/data/sound/jump4.wav
|
||||
SOUND|${PREFIX}/data/sound/jump5.wav
|
||||
SOUND|${PREFIX}/data/sound/jump6.wav
|
||||
SOUND|${PREFIX}/data/sound/jump7.wav
|
||||
SOUND|${PREFIX}/data/sound/jump8.wav
|
||||
SOUND|${PREFIX}/data/sound/jump9.wav
|
||||
SOUND|${PREFIX}/data/sound/jump10.wav
|
||||
SOUND|${PREFIX}/data/sound/jump11.wav
|
||||
SOUND|${PREFIX}/data/sound/jump12.wav
|
||||
SOUND|${PREFIX}/data/sound/jump13.wav
|
||||
SOUND|${PREFIX}/data/sound/jump14.wav
|
||||
SOUND|${PREFIX}/data/sound/jump15.wav
|
||||
SOUND|${PREFIX}/data/sound/jump16.wav
|
||||
SOUND|${PREFIX}/data/sound/jump17.wav
|
||||
SOUND|${PREFIX}/data/sound/jump18.wav
|
||||
SOUND|${PREFIX}/data/sound/jump19.wav
|
||||
SOUND|${PREFIX}/data/sound/jump20.wav
|
||||
SOUND|${PREFIX}/data/sound/jump21.wav
|
||||
SOUND|${PREFIX}/data/sound/jump22.wav
|
||||
SOUND|${PREFIX}/data/sound/jump23.wav
|
||||
SOUND|${PREFIX}/data/sound/jump24.wav
|
||||
|
||||
# ===================================================================
|
||||
# LOGO
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/logo/jailgames.gif
|
||||
BITMAP|${PREFIX}/data/logo/since_1998.gif
|
||||
|
||||
# ===================================================================
|
||||
# LOADING SCREEN
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/loading/loading_screen_bn.gif
|
||||
BITMAP|${PREFIX}/data/loading/loading_screen_color.gif
|
||||
|
||||
# ===================================================================
|
||||
# TITLE SCREEN
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/title/title_logo.gif
|
||||
|
||||
# ===================================================================
|
||||
# ENDING SCREENS
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/ending/ending1.gif
|
||||
BITMAP|${PREFIX}/data/ending/ending2.gif
|
||||
BITMAP|${PREFIX}/data/ending/ending3.gif
|
||||
BITMAP|${PREFIX}/data/ending/ending4.gif
|
||||
BITMAP|${PREFIX}/data/ending/ending5.gif
|
||||
|
||||
# ===================================================================
|
||||
# CREDITS
|
||||
# ===================================================================
|
||||
BITMAP|${PREFIX}/data/credits/shine.gif
|
||||
ANIMATION|${PREFIX}/data/credits/shine.ani
|
||||
592
config/assets.yaml
Normal file
@@ -0,0 +1,592 @@
|
||||
# JailDoctor's Dilemma - Asset Configuration
|
||||
# Variables: ${PREFIX}, ${SYSTEM_FOLDER}
|
||||
|
||||
assets:
|
||||
# FONTS
|
||||
fonts:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/smb2.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/smb2.fnt
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/aseprite.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/aseprite.fnt
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/gauntlet.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/gauntlet.fnt
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/subatomic.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/subatomic.fnt
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/font/8bithud.gif
|
||||
- type: FONT
|
||||
path: ${PREFIX}/data/font/8bithud.fnt
|
||||
|
||||
# PALETTES
|
||||
palettes:
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/zx-spectrum.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/zx-spectrum-adjusted.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/zxarne-5-2.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/black-and-white.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/green-phosphor.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/orange-screen.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/ruzx-spectrum.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/ruzx-spectrum-revision-2.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/pico-8.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/sweetie-16.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/island-joy-16.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/lost-century.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/na16.pal
|
||||
- type: PALETTE
|
||||
path: ${PREFIX}/data/palette/steam-lords.pal
|
||||
|
||||
# LOCALE
|
||||
locale:
|
||||
- type: DATA
|
||||
path: ${PREFIX}/data/locale/en.yaml
|
||||
- type: DATA
|
||||
path: ${PREFIX}/data/locale/ca.yaml
|
||||
|
||||
# INPUT
|
||||
input:
|
||||
- type: DATA
|
||||
path: ${PREFIX}/gamecontrollerdb.txt
|
||||
|
||||
# SYSTEM
|
||||
system:
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/config.yaml
|
||||
required: false
|
||||
absolute: true
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/stats_buffer.csv
|
||||
required: false
|
||||
absolute: true
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/stats.csv
|
||||
required: false
|
||||
absolute: true
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/cheevos.bin
|
||||
required: false
|
||||
absolute: true
|
||||
- type: DATA
|
||||
path: ${SYSTEM_FOLDER}/postfx.yaml
|
||||
required: false
|
||||
absolute: true
|
||||
|
||||
# ROOMS
|
||||
rooms:
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/01.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/02.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/03.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/04.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/05.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/06.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/07.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/08.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/09.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/10.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/11.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/12.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/13.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/14.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/15.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/16.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/17.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/18.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/19.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/20.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/21.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/22.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/23.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/24.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/25.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/26.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/27.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/28.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/29.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/30.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/31.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/32.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/33.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/34.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/35.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/36.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/37.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/38.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/39.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/40.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/41.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/42.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/43.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/44.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/45.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/46.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/47.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/48.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/49.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/50.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/51.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/52.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/53.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/54.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/55.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/56.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/57.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/58.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/59.yaml
|
||||
- type: ROOM
|
||||
path: ${PREFIX}/data/room/60.yaml
|
||||
|
||||
# TILESETS
|
||||
tilesets:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/tilesets/standard.gif
|
||||
|
||||
# ENEMIES
|
||||
enemies:
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/abad_bell.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/abad_bell.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/abad.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/abad.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/amstrad_cs.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/amstrad_cs.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/flying_arounder.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/flying_arounder.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/stopped_arounder.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/stopped_arounder.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/walking_arounder.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/walking_arounder.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/arounders_door.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/arounders_door.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/arounders_machine.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/arounders_machine.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/bat.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/bat.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/batman_bell.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/batman_bell.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/batman_fire.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/batman_fire.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/batman.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/batman.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/bell.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/bell.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/bin.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/bin.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/bird.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/bird.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/breakout.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/breakout.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/bry.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/bry.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/chip.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/chip.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/code.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/code.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/congo.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/congo.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/crosshair.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/crosshair.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/demon.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/demon.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/dimallas.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/dimallas.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/floppy.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/floppy.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/dong.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/dong.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/guitar.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/guitar.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/heavy.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/heavy.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jailer1.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jailer1.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jailer2.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jailer2.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jailer3.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jailer3.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jailbattle_alien.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jailbattle_alien.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jailbattle_human.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jailbattle_human.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/jeannine.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/jeannine.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/lamp.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/lamp.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/lord_abad.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/lord_abad.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/matatunos.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/matatunos.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/mummy.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/mummy.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/paco.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/paco.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/elsa.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/elsa.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/qvoid.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/qvoid.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/robot.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/robot.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/sam.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/sam.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/shock.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/shock.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/sigmasua.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/sigmasua.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/spark.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/spark.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/special/aerojailer.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/special/aerojailer.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/special/arounder.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/special/arounder.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/special/pepe_rosita_job.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/special/pepe_rosita_job.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/special/shooting_star.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/special/shooting_star.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/spider.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/spider.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/tree_thing.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/tree_thing.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/tuno.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/tuno.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/tv_panel.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/tv_panel.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/tv.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/tv.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/upv_student.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/upv_student.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/wave.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/wave.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/enemies/z80.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/enemies/z80.gif
|
||||
|
||||
# PLAYER
|
||||
player:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/player/player.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/player/player.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/player/player2.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/player/player2.yaml
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/player/player_game_over.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/player/player_game_over.yaml
|
||||
|
||||
# ITEMS
|
||||
items:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/items/items.gif
|
||||
|
||||
# MUSIC
|
||||
music:
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/title.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/game.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/loading_data1.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/loading_data2.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/loading_header.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/loading_screen_color.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/loading_screen_data.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/ending1.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/ending2.ogg
|
||||
- type: MUSIC
|
||||
path: ${PREFIX}/data/music/game_over.ogg
|
||||
|
||||
# SOUNDS
|
||||
sounds:
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/item.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/death.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/notify.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump1.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump2.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump3.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump4.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump5.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump6.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump7.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump8.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump9.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump10.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump11.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump12.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump13.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump14.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump15.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump16.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump17.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump18.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump19.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump20.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump21.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump22.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump23.wav
|
||||
- type: SOUND
|
||||
path: ${PREFIX}/data/sound/jump24.wav
|
||||
|
||||
# LOGO
|
||||
logo:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/logo/jailgames.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/logo/since_1998.gif
|
||||
|
||||
# LOADING
|
||||
loading:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/loading/loading_screen_bn.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/loading/loading_screen_color.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/loading/program_jaildoc.gif
|
||||
|
||||
# TITLE
|
||||
title:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/title/title_logo.gif
|
||||
|
||||
# ENDING
|
||||
ending:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/ending/ending1.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/ending/ending2.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/ending/ending3.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/ending/ending4.gif
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/ending/ending5.gif
|
||||
|
||||
# CREDITS
|
||||
credits:
|
||||
- type: BITMAP
|
||||
path: ${PREFIX}/data/credits/shine.gif
|
||||
- type: ANIMATION
|
||||
path: ${PREFIX}/data/credits/shine.yaml
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=shine.gif
|
||||
frame_width=8
|
||||
frame_height=8
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=-1
|
||||
frames=0,1,2,3,4,5,6,7
|
||||
[/animation]
|
||||
10
data/credits/shine.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# shine animation
|
||||
tileSetFile: shine.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 8
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: -1
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
@@ -1,10 +0,0 @@
|
||||
tileSetFile=abad.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2
|
||||
[/animation]
|
||||
10
data/enemies/abad.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# abad animation
|
||||
tileSetFile: abad.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=abad_bell.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7,8,9
|
||||
[/animation]
|
||||
10
data/enemies/abad_bell.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# abad_bell animation
|
||||
tileSetFile: abad_bell.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=amstrad_cs.gif
|
||||
frame_width=8
|
||||
frame_height=8
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
|
||||
[/animation]
|
||||
10
data/enemies/amstrad_cs.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# amstrad_cs animation
|
||||
tileSetFile: amstrad_cs.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 8
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=arounders_door.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3,3,3,3,3,3,3,3,3,3,3,3,2,1,0,0,0
|
||||
[/animation]
|
||||
10
data/enemies/arounders_door.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# arounders_door animation
|
||||
tileSetFile: arounders_door.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 1, 0, 0, 0]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=arounders_machine.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/arounders_machine.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# arounders_machine animation
|
||||
tileSetFile: arounders_machine.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=bat.gif
|
||||
frame_width=9
|
||||
frame_height=7
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0500
|
||||
loop=0
|
||||
frames=0,1
|
||||
[/animation]
|
||||
10
data/enemies/bat.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# bat animation
|
||||
tileSetFile: bat.gif
|
||||
frameWidth: 9
|
||||
frameHeight: 7
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.05
|
||||
loop: 0
|
||||
frames: [0, 1]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=batman.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/batman.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# batman animation
|
||||
tileSetFile: batman.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=batman_bell.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5
|
||||
[/animation]
|
||||
10
data/enemies/batman_bell.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# batman_bell animation
|
||||
tileSetFile: batman_bell.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=batman_fire.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/batman_fire.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# batman_fire animation
|
||||
tileSetFile: batman_fire.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=bell.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7,8,9,10,11
|
||||
[/animation]
|
||||
10
data/enemies/bell.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# bell animation
|
||||
tileSetFile: bell.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=bin.gif
|
||||
frame_width=16
|
||||
frame_height=8
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1667
|
||||
loop=0
|
||||
frames=0,1,2,3,4
|
||||
[/animation]
|
||||
10
data/enemies/bin.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# bin animation
|
||||
tileSetFile: bin.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 8
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=bird.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/bird.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# bird animation
|
||||
tileSetFile: bird.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=breakout.gif
|
||||
frame_width=24
|
||||
frame_height=32
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7,6,5,4,3,2,1
|
||||
[/animation]
|
||||
10
data/enemies/breakout.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# breakout animation
|
||||
tileSetFile: breakout.gif
|
||||
frameWidth: 24
|
||||
frameHeight: 32
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=bry.gif
|
||||
frame_width=10
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5,4,5
|
||||
[/animation]
|
||||
10
data/enemies/bry.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# bry animation
|
||||
tileSetFile: bry.gif
|
||||
frameWidth: 10
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5, 4, 5]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=chip.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/chip.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# chip animation
|
||||
tileSetFile: chip.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=code.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/code.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# code animation
|
||||
tileSetFile: code.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=congo.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/congo.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# congo animation
|
||||
tileSetFile: congo.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=crosshair.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/crosshair.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# crosshair animation
|
||||
tileSetFile: crosshair.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=demon.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/demon.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# demon animation
|
||||
tileSetFile: demon.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=dimallas.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/dimallas.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# dimallas animation
|
||||
tileSetFile: dimallas.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=dong.gif
|
||||
frame_width=22
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5
|
||||
[/animation]
|
||||
10
data/enemies/dong.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# dong animation
|
||||
tileSetFile: dong.gif
|
||||
frameWidth: 22
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=elsa.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5
|
||||
[/animation]
|
||||
10
data/enemies/elsa.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# elsa animation
|
||||
tileSetFile: elsa.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=floppy.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/floppy.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# floppy animation
|
||||
tileSetFile: floppy.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=flying_arounder.gif
|
||||
frame_width=7
|
||||
frame_height=7
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1667
|
||||
loop=0
|
||||
frames=0
|
||||
[/animation]
|
||||
10
data/enemies/flying_arounder.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# flying_arounder animation
|
||||
tileSetFile: flying_arounder.gif
|
||||
frameWidth: 7
|
||||
frameHeight: 7
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1667
|
||||
loop: 0
|
||||
frames: [0]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=guitar.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/guitar.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# guitar animation
|
||||
tileSetFile: guitar.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=heavy.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/heavy.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# heavy animation
|
||||
tileSetFile: heavy.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jailbattle_alien.gif
|
||||
frame_width=13
|
||||
frame_height=15
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1
|
||||
[/animation]
|
||||
10
data/enemies/jailbattle_alien.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jailbattle_alien animation
|
||||
tileSetFile: jailbattle_alien.gif
|
||||
frameWidth: 13
|
||||
frameHeight: 15
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jailbattle_human.gif
|
||||
frame_width=11
|
||||
frame_height=13
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1
|
||||
[/animation]
|
||||
10
data/enemies/jailbattle_human.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jailbattle_human animation
|
||||
tileSetFile: jailbattle_human.gif
|
||||
frameWidth: 11
|
||||
frameHeight: 13
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1]
|
||||
|
Before Width: | Height: | Size: 224 B After Width: | Height: | Size: 224 B |
10
data/enemies/jailer1.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jailer1 animation
|
||||
tileSetFile: jailer1.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
|
Before Width: | Height: | Size: 280 B After Width: | Height: | Size: 280 B |
10
data/enemies/jailer2.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jailer2 animation
|
||||
tileSetFile: jailer2.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 1, 3, 5, 1, 3, 5, 1, 3, 5]
|
||||
|
Before Width: | Height: | Size: 226 B After Width: | Height: | Size: 226 B |
10
data/enemies/jailer3.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jailer3 animation
|
||||
tileSetFile: jailer3.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jailer_#1.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jailer_#2.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,4,5,1,3,5,1,3,5,1,3,5
|
||||
[/animation]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jailer_#3.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=jeannine.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/jeannine.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# jeannine animation
|
||||
tileSetFile: jeannine.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=lamp.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1
|
||||
[/animation]
|
||||
10
data/enemies/lamp.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# lamp animation
|
||||
tileSetFile: lamp.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=lord_abad.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/lord_abad.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# lord_abad animation
|
||||
tileSetFile: lord_abad.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=matatunos.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5
|
||||
[/animation]
|
||||
10
data/enemies/matatunos.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# matatunos animation
|
||||
tileSetFile: matatunos.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=mummy.gif
|
||||
frame_width=8
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.2000
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/mummy.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# mummy animation
|
||||
tileSetFile: mummy.gif
|
||||
frameWidth: 8
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.2
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=paco.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7
|
||||
[/animation]
|
||||
10
data/enemies/paco.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# paco animation
|
||||
tileSetFile: paco.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=qvoid.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.1333
|
||||
loop=0
|
||||
frames=0,1,2,3,4,5,6,7
|
||||
[/animation]
|
||||
10
data/enemies/qvoid.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# qvoid animation
|
||||
tileSetFile: qvoid.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.1333
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3, 4, 5, 6, 7]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=robot.gif
|
||||
frame_width=16
|
||||
frame_height=32
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0667
|
||||
loop=0
|
||||
frames=0,1,2,3
|
||||
[/animation]
|
||||
10
data/enemies/robot.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# robot animation
|
||||
tileSetFile: robot.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 32
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0667
|
||||
loop: 0
|
||||
frames: [0, 1, 2, 3]
|
||||
@@ -1,10 +0,0 @@
|
||||
tileSetFile=sam.gif
|
||||
frame_width=16
|
||||
frame_height=16
|
||||
|
||||
[animation]
|
||||
name=default
|
||||
speed=0.0833
|
||||
loop=0
|
||||
frames=0,1
|
||||
[/animation]
|
||||
10
data/enemies/sam.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
# sam animation
|
||||
tileSetFile: sam.gif
|
||||
frameWidth: 16
|
||||
frameHeight: 16
|
||||
|
||||
animations:
|
||||
- name: default
|
||||
speed: 0.0833
|
||||
loop: 0
|
||||
frames: [0, 1]
|
||||