31 Commits

Author SHA1 Message Date
59ec0542a1 - [NEW] Afegit icono al executable de Windows 2024-10-11 12:46:04 +02:00
2634cc1b2c - Neteja d'arxius inutils
- Afegits iconos
2024-10-11 12:23:08 +02:00
3132dc0157 - [CHG] Augmentada la duració del boost de invulnerabilitat
- [CHG] Afegits uns quants cafés estratègicament, i canviats alguns
2024-10-11 11:50:16 +02:00
9c10b6a372 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/thepool 2024-10-11 09:20:28 +02:00
31f63516ca - [CHG] Ara en Linux la configuració se guarda en " ~/.config/thepool/config.txt"
- [FIX] Solventada explosió en pantalla de gameover per un dangling pointer. Aplicades medides similars en catslife i ingame.
2024-10-11 09:20:24 +02:00
b5f4425672 - [FIX] Ja no es mostra el cursor mai (excepte si estas editant) 2024-10-10 20:38:12 +02:00
51eb933383 - [FIX] Arreglats els errors de la paleta de fósforo
- [CHG] Augmentades les probabilitats de una Cat's Life
- [NEW] Informació dels renderers al arrancar
- [FIX] Quan apareix un dialeg ja no es queda el só de caminar sonant de fondo
- [NEW] Quan apareix un dialeg i sona una fanfarria, la música se pausa
2024-10-10 20:14:18 +02:00
3f127b5444 - [FIX] En pantalla completa se veïa el cursor, ara ja no 2024-10-10 17:28:46 +02:00
2055ac523d - [FIX] El mode a pantalla completa ja manté proporcions senceres, amb barres negres pels costat quan fa falta
- [NEW] Amb F4 se fa toggle entre mode NORMAL, SCANLINES, FOSFORO i SCANLINES+FOSFORO
2024-10-10 16:10:09 +02:00
0a5a79dc60 - [FIX] Guarda per a quan falla un arxiu en JFile 2024-10-10 13:48:24 +02:00
baae73a38d - [FIX] Un café feia impossible passar per una habitació
- [FIX] No s'activaba el prólogo quan toca
- [FIX] El gràfic de les portes de vegades era transparent
- [FIX] Separades unes caixes que feien molt frustrant agafar una cosa
- [FIX] Quan tenia el café de doble velocitat no podia creuar portes
- [FIX] Algunes vegades el objecte dropejat encara feia clipping amb altres
- [NEW] Missatges en els moments importants
- [NEW] Quan te pases el joc també te dona els 'stats' de temps, vides i habitacions visitades.
2024-10-10 12:58:22 +02:00
ec7ac7114e - [FIX] No es podia entrar al editor de bitmap_pos des de l'editor
- [FIX] Recreativa afegida
- [NEW] Prologo acabat
- [FIX] Quan s'acava el boost de invulnerabilitat se moria
2024-10-10 09:33:56 +02:00
cabbb52cbb - [FIX] Solventats els problemes de memòria al eliminar un actor 2024-10-09 12:03:16 +02:00
ac4e1f3298 Merge branch 'master' of https://gitea.sustancia.synology.me/JailDoctor/thepool 2024-10-09 10:10:23 +02:00
b292ae710a - [FIX] La porta de l'habitacio de les sabates, que vaig pujar en la party pero se m'havia oblidat fer-ho en el repo
- [FIX] Solució a un dangling pointer que me va trobar valgrind
- [COMMIT ABANS DEL MEGACANVI]
2024-10-09 10:10:21 +02:00
9827865e9c - Prologo quasi acabat 2024-10-08 13:59:04 +02:00
119136332b - [FIX] Si està escribint un text, que no pille la D o la M com a "duplicar" o "moure" el actor seleccionat 2024-10-08 08:08:17 +02:00
77cdf90c99 - Treballant en el prólogo 2024-10-07 20:07:03 +02:00
304f636a95 - [CHG] Pujat el maxim d'habitacions per al prologo 2024-10-07 13:56:09 +02:00
fa97ea79e8 - [NEW] Anbernics en el lloc i ja se poden recollir
- [CHG] Canviats uns pixels en les portes
- [NEW] Sequencia de final de joc acabada
- [NEW] Al pillar un booster fa sorollet
- Treballant en el prólogo
2024-10-07 13:35:01 +02:00
f38d50e7f9 - [FIX] Llevat el SDL2_mixer del Makefile 2024-10-06 19:27:46 +02:00
0ccd8a570a - [NEW] Sempre es pot navegar pels menus amb cursors, RETURN i ESCAPE
- [NEW] El gamepad es configura amb la info del gamescontrollerdb.txt per defecte
- [NEW] El botó de START en el gamepad funciona com el ESCAPE del teclat
- [FIX] La música ingame continuava estant mal
- [FIX] Si la música està desactivada que no sone la del logo
2024-10-06 19:23:06 +02:00
52d3916f8c - [FIX] La pilota de l'habitació 02 ja no te una ralla de pixels
- [FIX] Al pegar botonà en el logo el fondo se quedava de algún color durant la intro.
- [FIX] Al morir el malo que t'ha matat ja no es queda tot loco
- [FIX] Retocades un poc algunes portes on s'ha pogut
2024-10-06 17:36:51 +02:00
394773003a - [FIX] La música ja sona be en un auricularet
- [CHG] El joc ja no usa SDL_Mixer, sinó JailAudio
- [FIX] La música de game over ja no fa bucle
- [FIX] Tanquem les coses abans d'eixir pa que Valgrind no s'enfade
2024-10-06 15:03:46 +02:00
da3cb5ff8e - [FIX] Els actors que canvien de direcció aleatòriament no han de fer roido de tropeçar si han canviat de direcció perque sí i no han tropeçat 2024-10-04 20:46:20 +02:00
d17ac3a2ed - [NEW] Intro acabada 2024-10-04 17:53:27 +02:00
f84eb3e238 - [NEW] Afegit xicotet detall al logo
- [NEW] Sequencia de introducció (ongoing)
2024-10-04 14:00:27 +02:00
c3d1b672c2 - [NEW] Músiques definitives
- [FIX] Si ja està sonant el só de push, que no sonen més. Sinó s'acumulen i atronen
2024-10-04 08:10:58 +02:00
3919281080 - [NEW] Só del logo
- [NEW] Só de quan mor
- [NEW] Só de quan agafa trastos
- [NEW] Só de quan desapareix un bloc
- [FIX] Ruido en una habitació
2024-10-03 17:40:14 +02:00
1251ef5110 - [NEW] Nova debug info: flags
- [NEW] Só de caminar i botar funcionant
- [NEW] Só de enemics rebotant
- [NEW] Menus amb só (MOC MOC!)
- [FIX] El so de caminar ja no continua durant el menu ingame
2024-10-03 16:27:43 +02:00
9ca1e59f44 - Arreglats un milló de warnings tontos (i alguno serio) 2024-10-03 13:40:54 +02:00
131 changed files with 13793 additions and 1351 deletions

3
.gitignore vendored
View File

@@ -5,3 +5,6 @@
build/*
thepool
thepool_debug
valgrind*
release/*
data.jf2

View File

@@ -3,25 +3,25 @@ source = source/*.cpp
windows:
@echo off
g++ $(source) icon.res -lmingw32 -lSDL2main -lSDL2 -lSDL2_mixer -mwindows -o "$(executable).exe"
g++ $(source) bin/icon.res -lmingw32 -lSDL2main -lSDL2 -mwindows -o "$(executable).exe"
strip -s -R .comment -R .gnu.version --strip-unneeded "$(executable).exe"
windows_debug:
@echo off
g++ $(source) -D DEBUG -g -Wall -fvar-tracking -lmingw32 -lSDL2main -lSDL2 -lSDL2_mixer -o "$(executable)_debug.exe"
g++ $(source) -D DEBUG -g -Wall -fvar-tracking -lmingw32 -lSDL2main -lSDL2 -o "$(executable)_debug.exe"
macos:
clang++ $(source) -Wall -Os -std=c++11 -ffunction-sections -fdata-sections -lSDL2 -lSDL2_mixer -o "$(executable)"
clang++ $(source) -Wall -Os -std=c++11 -ffunction-sections -fdata-sections -lSDL2 -o "$(executable)"
macos_debug:
clang++ $(source) -D DEBUG -g -Wall -std=c++11 -lSDL2 -lSDL2_mixer -o "$(executable)_debug"
clang++ $(source) -D DEBUG -g -Wall -std=c++11 -lSDL2 -o "$(executable)_debug"
macos_bundle:
clang++ $(source) -D MACOS_BUNDLE -Wall -Os -std=c++11 -framework SDL2 -framework SDL2_mixer -F /Library/Frameworks -ffunction-sections -fdata-sections -o mini_bundle -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
clang++ $(source) -D MACOS_BUNDLE -Wall -Os -std=c++11 -framework SDL2 -F /Library/Frameworks -ffunction-sections -fdata-sections -o mini_bundle -rpath @executable_path/../Frameworks/ -target x86_64-apple-macos10.12
linux:
g++ $(source) -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -lSDL2 -lSDL2_mixer -o "$(executable)"
g++ $(source) -Wall -Os -ffunction-sections -fdata-sections -Wl,--gc-sections -lSDL2 -o "$(executable)"
strip -s -R .comment -R .gnu.version --strip-unneeded "$(executable)"
linux_debug:
g++ $(source) -D DEBUG -g -lSDL2 -lSDL2_mixer -o "$(executable)_debug"
g++ $(source) -D DEBUG -g -lSDL2 -o "$(executable)_debug"

BIN
bin/icon.icns Normal file

Binary file not shown.

BIN
bin/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

BIN
bin/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

1
bin/icon.rc Normal file
View File

@@ -0,0 +1 @@
id ICON "icon.ico"

BIN
bin/icon.res Normal file

Binary file not shown.

BIN
data/25anys.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 190 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

BIN
data/end1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
data/end2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
data/fosforo.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 148 B

2078
data/gamecontrollerdb.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,19 +1,32 @@
25anys.gif
abad.gif
altres.gif
batman.gif
caixes.gif
doors.gif
end1.gif
end2.gif
floor.gif
font.gif
font2.gif
fosforo.gif
gat.gif
gat2.gif
intro1.gif
intro2.gif
intro3.gif
intro4.gif
intro5.gif
jailgames.gif
lordabad.gif
mapa.gif
objectes.gif
obrer.gif
piscina.gif
prologo1.gif
prologo2.gif
prologo3.gif
prologo4.gif
roomaux.gif
sam.gif
test.gif

View File

@@ -9,4 +9,5 @@ objectes.gif
obrer.gif
piscina.gif
sam.gif
test.gif
doors.gif

BIN
data/intro1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
data/intro2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
data/intro3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
data/intro4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

BIN
data/intro5.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

BIN
data/mus_ingame.ogg Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -1,57 +0,0 @@
width: 2
height: 1
door-height-xp: 1
door-height-xn: 1
color: CYAN
floor-texture: 0
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xp: 5
exit-xn: 1
exit-zn: 2
actor{
name: PLATFORM02
bmp: test.gif
bmp-rect: 64 0 32 24
bmp-offset: 0 24
pos: 16 20 0
size: 8 8 4
}
actor{
name: PLATFORM00
bmp: test.gif
bmp-rect: 64 0 32 24
bmp-offset: 0 24
pos: 8 28 0
size: 8 8 4
}
actor{
name: PLATFORM01
bmp: test.gif
bmp-rect: 64 0 32 24
bmp-offset: 0 24
pos: 16 28 0
size: 8 8 4
}
actor{
name: PLATFORM04
bmp: test.gif
bmp-rect: 64 0 32 24
bmp-offset: 0 24
pos: 40 28 0
size: 8 8 4
}
actor{
name: PLATFORM03
bmp: test.gif
bmp-rect: 64 0 32 24
bmp-offset: 0 24
pos: 48 28 0
size: 8 8 4
}

View File

@@ -1,112 +0,0 @@
width: 2
height: 2
door-height-xp: 0
door-height-yp: 0
color: CYAN
floor-texture: 9
wall-texture: 3
door-texture: 1
under-door-texture: 0
exit-xp: 0
exit-yp: 3
actor{
name: ARMARI01
bmp: caixes.gif
bmp-rect: 64 32 24 32
bmp-offset: -8 36
pos: 8 8 0
size: 8 4 5
movement: CW
}
actor{
name: TAULETA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 24 8 0
size: 8 8 5
movement: CW
}
actor{
name: S-SHOES
bmp: objectes.gif
bmp-rect: 162 0 28 22
bmp-offset: -3 24
pos: 48 8 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: TAULA01
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 8 24 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: TAULA02
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 8 32 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: ARMARI02
bmp: caixes.gif
bmp-rect: 96 32 24 32
bmp-offset: -8 36
pos: 8 8 8
size: 8 4 8
movement: CW
}
actor{
name: TV
bmp: caixes.gif
bmp-rect: 32 64 32 32
bmp-offset: 0 32
pos: 24 7 5
size: 8 5 8
orient: XP
movement: CW
}
actor{
name: NES
bmp: caixes.gif
bmp-rect: 96 0 32 32
bmp-offset: 0 32
pos: 24 16 0
size: 8 8 6
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: ROOMBA
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 40 32 0
size: 8 8 4
orient: YP
flags: MOVING DEADLY
movement: Y
}

View File

@@ -1,24 +0,0 @@
width: 2
height: 1
door-height-xn: 4
door-height-yp: 0
color: PURPLE
floor-texture: 1
wall-texture: 2
door-texture: 0
under-door-texture: 2
exit-xn: 3
exit-yp: 4
exit-zp: 0
actor{
name: G-FILTER
bmp: objectes.gif
bmp-rect: 0 0 24 32
bmp-offset: 0 32
pos: 8 16 0
size: 8 8 8
anim-wait: 4
flags: PUSHABLE ANIMATED GRAVITY SPECIAL
movement: CW
}

View File

@@ -1,67 +0,0 @@
width: 1
height: 2
door-height-xp: 0
door-height-yn: 4
color: PURPLE
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-xp: 2
exit-yn: 1
actor{
name: CONVEYOR
bmp: caixes.gif
bmp-rect: 0 144 32 32
bmp-offset: 0 32
pos: 16 48 0
size: 8 8 4
anim-cycle: MIN
flags: REACTIVE ANIMATED
react-mask: ZN
react-push: XP
movement: CW
}
actor{
name: FINESTRA
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 15 23 4
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA01
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 15 31 4
size: 1 1 9
movement: CW
}
actor{
name: BOX
bmp: test.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 27 31 0
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX01
bmp: test.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 27 29 8
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}

View File

@@ -1,250 +0,0 @@
width: 2
height: 3
door-height-yp: 2
door-height-yn: 2
color: GREEN
floor-texture: 1
wall-texture: 5
door-texture: 4
under-door-texture: 0
exit-yn: 2
actor{
name: BOX
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX02
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 16 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX03
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 24 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX20
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 8
movement: CW
}
actor{
name: BOX01
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 16 0
size: 8 8 8
movement: CW
}
actor{
name: BOX11
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 24 0
size: 8 8 8
movement: CW
}
actor{
name: BOX12
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 32 0
size: 8 8 8
movement: CW
}
actor{
name: BOX13
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 40 0
size: 8 8 8
movement: CW
}
actor{
name: BOX14
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 48 0
size: 8 8 8
movement: CW
}
actor{
name: BOX21
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 8 56 0
size: 8 8 8
movement: CW
}
actor{
name: BOX15
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 16 56 0
size: 8 8 8
movement: CW
}
actor{
name: BOX16
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 24 56 0
size: 8 8 8
movement: CW
}
actor{
name: BOX04
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 32 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX17
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 32 56 0
size: 8 8 8
movement: CW
}
actor{
name: BOX05
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 40 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX22
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX06
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 8
movement: CW
}
actor{
name: BOX07
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 16 0
size: 8 8 8
movement: CW
}
actor{
name: BOX08
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 24 0
size: 8 8 8
movement: CW
}
actor{
name: BOX09
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 32 0
size: 8 8 8
movement: CW
}
actor{
name: BOX10
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 40 0
size: 8 8 8
movement: CW
}
actor{
name: BOX19
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 48 0
size: 8 8 8
movement: CW
}
actor{
name: BOX18
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 40 56 0
size: 8 8 8
movement: CW
}
actor{
name: BOX23
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 48 56 0
size: 8 8 8
movement: CW
}

View File

@@ -1,11 +0,0 @@
width: 2
height: 2
door-height-xp: 0
door-height-xn: 0
color: YELLOW
floor-texture: 8
wall-texture: 8
door-texture: 5
under-door-texture: 0
exit-xp: 6
exit-xn: 0

View File

@@ -1,114 +0,0 @@
width: 3
height: 3
door-height-xn: 0
color: CYAN
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-xn: 5
exit-zp: 7
actor{
name: SOFA
bmp: altres.gif
bmp-rect: 0 0 48 40
bmp-offset: 0 32
pos: 0 0 0
size: 16 8 6
movement: CW
}
actor{
name: LLIT
bmp: altres.gif
bmp-rect: 48 0 57 47
bmp-offset: 12 33
pos: 16 0 0
size: 16 16 6
movement: CW
}
actor{
name: LIFT
bmp: caixes.gif
bmp-rect: 32 32 32 24
bmp-offset: 0 24
pos: 56 0 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}
actor{
name: B4-02
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 0 40 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: B8-00
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 0 48 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: YONKI
bmp: caixes.gif
bmp-rect: 168 64 19 32
bmp-offset: -7 37
pos: 18 56 0
size: 6 6 12
anim-cycle: SEQ
anim-wait: 1
flags: PUSHABLE GRAVITY
movement: CW
}
actor{
name: BARREL
bmp: caixes.gif
bmp-rect: 96 64 18 32
bmp-offset: -7 37
pos: 25 57 0
size: 6 6 12
anim-cycle: SEQ
anim-wait: 1
flags: PUSHABLE ANIMATED GRAVITY
movement: CW
}
actor{
name: NEVERA1
bmp: caixes.gif
bmp-rect: 0 96 32 32
bmp-offset: 0 32
pos: 32 32 0
size: 8 8 8
movement: CW
}
actor{
name: NEVERA2
bmp: caixes.gif
bmp-rect: 32 96 32 32
bmp-offset: 0 32
pos: 32 32 8
size: 8 8 8
movement: CW
}

View File

@@ -1,33 +0,0 @@
width: 3
height: 3
door-height-xp: 0
door-height-xn: 0
color: PURPLE
floor-texture: 0
wall-texture: 14
door-texture: 2
under-door-texture: 0
exit-xn: 8
exit-zn: 6
actor{
name: LIFT
bmp: caixes.gif
bmp-rect: 32 32 32 24
bmp-offset: 0 24
pos: 56 0 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}
actor{
name: FINESTRA
bmp: altres.gif
bmp-rect: 48 76 18 32
bmp-offset: 0 39
pos: 0 9 6
size: 1 1 9
movement: CW
}

View File

@@ -1,105 +0,0 @@
width: 2
height: 2
door-height-xp: 0
color: CYAN
floor-texture: 0
wall-texture: 11
door-texture: 0
under-door-texture: 0
exit-xp: 7
actor{
name: P-ELBOW
bmp: objectes.gif
bmp-rect: 0 32 22 32
bmp-offset: -2 35
pos: 8 16 0
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: P-PIPE
bmp: objectes.gif
bmp-rect: 0 64 16 32
bmp-offset: -8 36
pos: 8 24 0
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: P-SALT
bmp: objectes.gif
bmp-rect: 66 32 20 32
bmp-offset: -7 35
pos: 8 32 0
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: EXPLOSION
bmp: caixes.gif
bmp-rect: 0 160 18 22
bmp-offset: -7 38
pos: 32 32 0
size: 8 8 4
anim-cycle: SEQ
flags: ANIMATED
movement: CW
}
actor{
name: P-FILTER
bmp: objectes.gif
bmp-rect: 0 0 24 32
bmp-offset: -4 34
pos: 8 24 8
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: P-PUMP
bmp: objectes.gif
bmp-rect: 48 64 22 32
bmp-offset: -5 35
pos: 8 32 11
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: BOX01
bmp: caixes.gif
bmp-rect: 0 160 18 22
bmp-offset: -7 38
pos: 32 32 5
size: 8 8 4
anim-cycle: SEQ
flags: ANIMATED
movement: CW
}
actor{
name: P-TIMER
bmp: objectes.gif
bmp-rect: 72 0 24 32
bmp-offset: -4 34
pos: 8 40 8
size: 4 4 4
anim-wait: 6
flags: ANIMATED SPECIAL
movement: CW
}

BIN
data/prologo1.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
data/prologo2.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

BIN
data/prologo3.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
data/prologo4.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -52,7 +52,7 @@ actor{
}
actor{
name: B-00-LIVE
name: B-00-JUMP
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
@@ -129,7 +129,7 @@ actor{
actor{
name: PILOTA
bmp: altres.gif
bmp-rect: 0 108 22 22
bmp-rect: 0 108 21 21
bmp-offset: -5 24
pos: 28 32 0
size: 8 8 2

View File

@@ -28,13 +28,13 @@ actor{
}
actor{
name: ANBERNIC
name: ANBERNIC0
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 56 16 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}

View File

@@ -1,7 +1,7 @@
width: 2
height: 3
door-height-xn: 3
door-height-yp: 2
door-height-yp: 3
color: WHITE
floor-texture: 11
wall-texture: 2
@@ -19,7 +19,6 @@ actor{
pos: 8 0 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}
@@ -31,7 +30,6 @@ actor{
pos: 8 56 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}
@@ -43,7 +41,6 @@ actor{
pos: 40 56 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}
@@ -55,7 +52,6 @@ actor{
pos: 24 0 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}

View File

@@ -9,6 +9,19 @@ under-door-texture: 0
exit-yp: 15
editor-done: 1
actor{
name: B-05-GOD
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 40 40 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: BOX-A-01
bmp: caixes.gif

View File

@@ -24,7 +24,7 @@ actor{
}
actor{
name: B-01-JUMP
name: B-01-RUN
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22

View File

@@ -11,13 +11,13 @@ exit-zp: 21
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC1
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 24 40 8
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}

View File

@@ -7,6 +7,7 @@ floor-texture: 10
wall-texture: 1
door-texture: 0
under-door-texture: 0
exit-xp: 86
exit-yp: 50
exit-yn: 24
editor-done: 1
@@ -26,13 +27,24 @@ actor{
}
actor{
name: ANBERNIC
name: ANBERNIC2
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -6 10
pos: 40 8 6
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}
actor{
name: ARCADE
bmp: altres.gif
bmp-rect: 160 0 30 48
bmp-offset: 0 49
pos: 56 8 0
size: 8 8 16
orient: YP
movement: CW
}
@@ -66,7 +78,7 @@ actor{
bmp: altres.gif
bmp-rect: 128 0 20 41
bmp-offset: -6 45
pos: 56 8 0
pos: 16 8 0
size: 6 6 16
movement: CW
}

View File

@@ -12,18 +12,20 @@ exit-xn: 28
editor-done: 1
actor{
name: BOX-B
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 8
flags: PUSHABLE
name: B-03-LIVE
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 24
pos: 48 56 16
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: CADIRA
name: CADIRA-00
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
@@ -34,12 +36,24 @@ actor{
movement: CW
}
actor{
name: CADIRA-01
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 8 7 0
size: 6 5 8
orient: YP
flags: PUSHABLE
movement: CW
}
actor{
name: CUADRO-00
bmp: altres.gif
bmp-rect: 66 75 18 32
bmp-offset: 0 39
pos: 7 8 6
pos: 7 13 6
size: 1 1 9
orient: YP
movement: CW
@@ -50,7 +64,7 @@ actor{
bmp: altres.gif
bmp-rect: 102 75 18 32
bmp-offset: 0 39
pos: 7 48 6
pos: 7 43 6
size: 1 1 9
orient: YP
movement: CW
@@ -152,6 +166,26 @@ actor{
movement: CW
}
actor{
name: LAMPARA-00
bmp: altres.gif
bmp-rect: 128 0 20 41
bmp-offset: -6 45
pos: 48 56 0
size: 6 6 16
movement: CW
}
actor{
name: LAMPARA-01
bmp: altres.gif
bmp-rect: 128 0 20 41
bmp-offset: -6 45
pos: 8 56 0
size: 6 6 16
movement: CW
}
actor{
name: MESITA
bmp: caixes.gif
@@ -169,7 +203,7 @@ actor{
bmp-offset: -2 33
pos: 32 0 0
size: 8 7 6
flags: PUSHABLE
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
@@ -178,7 +212,7 @@ actor{
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 8 56 0
pos: 16 56 0
size: 8 8 2
orient: XN
flags: REACTIVE MOVING DEADLY
@@ -217,6 +251,6 @@ actor{
bmp-offset: -4 34
pos: 24 0 4
size: 8 6 8
flags: PUSHABLE
flags: PUSHABLE GRAVITY
movement: CW
}

View File

@@ -13,6 +13,17 @@ exit-yp: 35
exit-yn: 29
editor-done: 1
actor{
name: ANBERNIC3
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 0 8 0
size: 6 4 2
flags: SPECIAL
movement: CW
}
actor{
name: BLOCMATA-00
bmp: altres.gif

View File

@@ -14,13 +14,13 @@ exit-yn: 32
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC4
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 24 32 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}

View File

@@ -12,13 +12,13 @@ exit-yn: 33
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC5
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 40 16 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}

View File

@@ -11,6 +11,19 @@ exit-xn: 33
exit-yn: 28
editor-done: 1
actor{
name: B-06-LIVE
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 24 32 12
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: PLATH-00
bmp: caixes.gif
@@ -227,3 +240,15 @@ actor{
orient: ZP
movement: Z
}
actor{
name: PLATH-18
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 32 8
size: 8 8 4
orient: ZP
flags: DISAPPEAR
movement: Z
}

View File

@@ -12,13 +12,13 @@ exit-yp: 37
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC6
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 0 8 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}
@@ -47,7 +47,7 @@ actor{
bmp: doors.gif
bmp-rect: 160 7 16 40
bmp-offset: -8 47
pos: 8 16 0
pos: 10 18 0
size: 6 6 14
movement: CW
}

View File

@@ -10,21 +10,6 @@ exit-yn: 42
exit-zn: 47
editor-done: 1
actor{
name: ABAD
bmp: lordabad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 2 28 20
size: 8 8 8
orient: XP
anim-cycle: MIN
anim-wait: 1
flags: ANIMATED ORIENTABLE
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: LIFT-00
bmp: caixes.gif
@@ -47,6 +32,21 @@ actor{
movement: Z
}
actor{
name: LORD-ABAD
bmp: lordabad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 2 28 20
size: 8 8 8
orient: XP
anim-cycle: MIN
anim-wait: 1
flags: ANIMATED ORIENTABLE
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: PLATH-00
bmp: caixes.gif

View File

@@ -14,7 +14,7 @@ actor{
name: BOX-A
bmp: sam.gif
bmp-rect: 0 0 19 33
bmp-offset: -7 37
bmp-offset: -10 38
pos: 27 0 19
size: 8 8 8
anim-cycle: DUO
@@ -37,8 +37,8 @@ actor{
actor{
name: PLATH-00
bmp: caixes.gif
bmp-rect: 128 128 32 32
bmp-offset: 0 32
bmp-rect: 32 32 32 32
bmp-offset: 0 24
pos: 24 0 15
size: 8 8 4
orient: ZP
@@ -59,8 +59,8 @@ actor{
actor{
name: PLATH-01
bmp: caixes.gif
bmp-rect: 128 128 32 32
bmp-offset: 0 32
bmp-rect: 32 32 32 32
bmp-offset: 0 24
pos: 32 0 15
size: 8 8 4
orient: ZP

View File

@@ -10,6 +10,29 @@ exit-yp: 52
exit-zp: 47
editor-done: 1
actor{
name: ANBERNIC7
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 8 40 0
size: 6 4 2
flags: SPECIAL
movement: CW
}
actor{
name: ARCADE
bmp: altres.gif
bmp-rect: 160 0 30 48
bmp-offset: 0 49
pos: 8 24 0
size: 8 8 16
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: CADIRA
bmp: caixes.gif

View File

@@ -256,9 +256,9 @@ actor{
bmp: gat.gif
bmp-rect: 0 0 24 28
bmp-offset: -4 32
pos: 16 16 0
pos: 16 24 0
size: 8 8 8
orient: XP
orient: YN
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
@@ -270,9 +270,9 @@ actor{
bmp: gat2.gif
bmp-rect: 0 0 24 28
bmp-offset: -4 32
pos: 40 40 0
pos: 40 32 0
size: 8 8 8
orient: XN
orient: YP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN

View File

@@ -10,13 +10,13 @@ exit-yn: 59
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC8
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 48 40 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}
@@ -183,9 +183,9 @@ actor{
bmp: obrer.gif
bmp-rect: 0 0 24 32
bmp-offset: -4 37
pos: 8 24 0
pos: 24 24 0
size: 8 8 8
orient: XN
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
@@ -197,9 +197,9 @@ actor{
bmp: obrer.gif
bmp-rect: 0 0 24 32
bmp-offset: -4 37
pos: 48 48 0
pos: 40 48 0
size: 8 8 8
orient: XN
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN

View File

@@ -10,13 +10,26 @@ exit-xp: 59
editor-done: 1
actor{
name: ANBERNIC
name: ANBERNIC9
bmp: altres.gif
bmp-rect: 157 80 24 14
bmp-offset: -4 16
pos: 0 40 0
size: 6 4 2
flags: PUSHABLE GRAVITY
flags: SPECIAL
movement: CW
}
actor{
name: B-04-LIVE
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 48 0 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
@@ -25,7 +38,7 @@ actor{
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 0 48 0
pos: 0 51 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
@@ -61,6 +74,7 @@ actor{
bmp-offset: 0 32
pos: 0 49 6
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
@@ -72,7 +86,7 @@ actor{
pos: 8 40 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
flags: PUSHABLE ORIENTABLE GRAVITY
movement: CW
}
@@ -83,6 +97,7 @@ actor{
bmp-offset: 0 32
pos: 8 32 8
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
@@ -117,6 +132,7 @@ actor{
bmp-offset: 0 32
pos: 31 2 0
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
@@ -128,7 +144,7 @@ actor{
pos: 54 0 8
size: 8 8 8
orient: YP
flags: ORIENTABLE
flags: PUSHABLE ORIENTABLE GRAVITY
movement: CW
}
@@ -149,6 +165,7 @@ actor{
bmp-offset: 0 32
pos: 10 32 0
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
@@ -167,8 +184,9 @@ actor{
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 40 0 0
pos: 40 1 0
size: 8 8 8
flags: PUSHABLE GRAVITY
movement: CW
}
@@ -180,7 +198,7 @@ actor{
pos: 46 3 10
size: 8 8 8
orient: YP
flags: ORIENTABLE
flags: PUSHABLE ORIENTABLE GRAVITY
movement: CW
}
@@ -256,3 +274,42 @@ actor{
flags: MOVING ANIMATED
movement: RANDV
}
actor{
name: EXPLOSION-03
bmp: caixes.gif
bmp-rect: 0 160 18 22
bmp-offset: -7 24
pos: 48 48 0
size: 8 8 4
orient: YN
anim-cycle: SEQ
flags: MOVING ANIMATED
movement: RANDV
}
actor{
name: EXPLOSION-04
bmp: caixes.gif
bmp-rect: 0 160 18 22
bmp-offset: -7 24
pos: 0 0 0
size: 8 8 4
orient: XP
anim-cycle: SEQ
flags: MOVING ANIMATED
movement: RANDV
}
actor{
name: EXPLOSION-05
bmp: caixes.gif
bmp-rect: 0 160 18 22
bmp-offset: -7 24
pos: 16 24 0
size: 8 8 4
orient: XN
anim-cycle: SEQ
flags: MOVING ANIMATED
movement: RANDV
}

View File

@@ -9,6 +9,19 @@ under-door-texture: 2
exit-xp: 62
editor-done: 1
actor{
name: B-02-GOD
bmp: objectes.gif
bmp-rect: 114 78 15 18
bmp-offset: -8 22
pos: 56 16 20
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: ANIMATED SPECIAL
movement: CW
}
actor{
name: P-ELBOW
bmp: objectes.gif
@@ -45,6 +58,29 @@ actor{
movement: Y
}
actor{
name: PLATH-02
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 56 16 16
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-04
bmp: altres.gif
bmp-rect: 160 48 32 32
bmp-offset: 0 32
pos: 32 8 16
size: 8 8 4
orient: XN
flags: MOVING
movement: X
}
actor{
name: TRANSPA-00
bmp: altres.gif

228
data/rooms/64.txt Normal file
View File

@@ -0,0 +1,228 @@
width: 3
height: 1
door-height-xp: 0
color: CYAN
floor-texture: 0
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xp: 65
editor-done: 1
actor{
name: BOX-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 46 40 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-02
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 56 40 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-03
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 52 40 8
size: 8 8 8
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: FINESTRA-01
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: -1 30 6
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-02
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: -1 23 6
size: 1 1 9
movement: CW
}
actor{
name: JAILDES
bmp: test.gif
bmp-rect: 0 32 20 32
bmp-offset: -6 38
pos: 0 32 0
size: 8 8 8
orient: XN
anim-wait: 1
flags: REACTIVE ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: KALLAX-01
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 32 16 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-02
bmp: altres.gif
bmp-rect: 24 48 24 27
bmp-offset: -8 31
pos: 32 16 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-03
bmp: altres.gif
bmp-rect: 48 48 24 27
bmp-offset: -8 31
pos: 40 16 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-04
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: -8 31
pos: 40 16 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: LAMPARA
bmp: altres.gif
bmp-rect: 128 0 20 41
bmp-offset: -6 45
pos: 1 41 0
size: 6 6 16
movement: CW
}
actor{
name: LLIT
bmp: altres.gif
bmp-rect: 48 0 57 47
bmp-offset: 11 32
pos: 8 16 0
size: 16 16 4
movement: CW
}
actor{
name: MANCUERNA
bmp: altres.gif
bmp-rect: 106 33 17 14
bmp-offset: -6 20
pos: 24 25 0
size: 6 4 2
movement: CW
}
actor{
name: MESITA-01
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 0 16 0
size: 8 8 4
movement: CW
}
actor{
name: MESITA-02
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 24 16 0
size: 8 8 4
movement: CW
}
actor{
name: X-0
bmp: objectes.gif
bmp-rect: 162 0 28 22
bmp-offset: -3 24
pos: 8 32 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: X-1
bmp: objectes.gif
bmp-rect: 167 22 18 23
bmp-offset: -7 27
pos: 16 24 4
size: 4 4 6
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: X-2
bmp: objectes.gif
bmp-rect: 165 45 21 22
bmp-offset: -2 26
pos: 24 14 4
size: 4 4 5
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: X-3
bmp: objectes.gif
bmp-rect: 145 41 20 25
bmp-offset: -5 27
pos: 34 13 16
size: 6 4 6
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}

38
data/rooms/65.txt Normal file
View File

@@ -0,0 +1,38 @@
width: 3
height: 0
door-height-xp: 0
door-height-xn: 0
door-height-yp: 0
color: WHITE
floor-texture: 0
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xp: 66
exit-xn: 64
exit-yp: 70
editor-done: 1
actor{
name: CUADRO-01
bmp: altres.gif
bmp-rect: 102 75 18 32
bmp-offset: 0 39
pos: 18 23 6
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: CUADRO-02
bmp: altres.gif
bmp-rect: 66 75 18 32
bmp-offset: 0 39
pos: 42 23 6
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}

152
data/rooms/66.txt Normal file
View File

@@ -0,0 +1,152 @@
width: 3
height: 2
door-height-xn: 0
door-height-yn: 0
color: GREEN
floor-texture: 0
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xn: 65
exit-yn: 67
editor-done: 1
actor{
name: ARMARI-A1
bmp: caixes.gif
bmp-rect: 64 32 24 32
bmp-offset: -8 36
pos: 16 8 0
size: 8 4 8
movement: CW
}
actor{
name: ARMARI-A2
bmp: caixes.gif
bmp-rect: 96 32 24 32
bmp-offset: -8 36
pos: 16 8 8
size: 8 4 8
movement: CW
}
actor{
name: ARMARI-B1
bmp: caixes.gif
bmp-rect: 64 32 24 32
bmp-offset: -8 36
pos: 4 8 0
size: 8 4 8
movement: CW
}
actor{
name: ARMARI-B2
bmp: caixes.gif
bmp-rect: 96 32 24 32
bmp-offset: -8 36
pos: 4 8 8
size: 8 4 8
movement: CW
}
actor{
name: BOX-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 14 24 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-02
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 13 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: KALLAX-01
bmp: altres.gif
bmp-rect: 48 48 24 27
bmp-offset: 0 31
pos: 0 12 0
size: 4 8 8
movement: CW
}
actor{
name: KALLAX-02
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: 0 31
pos: 0 12 8
size: 4 12 8
movement: CW
}
actor{
name: LLIT
bmp: altres.gif
bmp-rect: 48 0 57 47
bmp-offset: 11 32
pos: 40 8 0
size: 16 16 8
movement: CW
}
actor{
name: MESITA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 56 8 0
size: 8 8 4
movement: CW
}
actor{
name: PILOTA
bmp: altres.gif
bmp-rect: 0 108 21 21
bmp-offset: -5 24
pos: 28 32 0
size: 8 8 2
orient: XN
flags: PUSHABLE INERTIA
movement: CCW
}
actor{
name: ROOMBA-01
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 8 32 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: ROOMBA-02
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 56 24 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CCW
}

144
data/rooms/67.txt Normal file
View File

@@ -0,0 +1,144 @@
width: 2
height: 2
door-height-xn: 0
door-height-yp: 0
color: CYAN
floor-texture: 4
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-xn: 68
exit-yp: 66
editor-done: 1
actor{
name: ABAD
bmp: abad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 40 48 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: X
}
actor{
name: ARMARI-01
bmp: caixes.gif
bmp-rect: 64 32 32 32
bmp-offset: 8 36
pos: 8 40 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: ARMARI-02
bmp: caixes.gif
bmp-rect: 96 32 32 32
bmp-offset: 8 36
pos: 8 40 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: BATMAN
bmp: batman.gif
bmp-rect: 0 0 21 32
bmp-offset: -5 35
pos: 8 8 0
size: 8 8 8
orient: YP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: BOX-01
bmp: test.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 24 32 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-02
bmp: test.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 19 40 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: ESPILL
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: -10 38
pos: 24 7 8
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-01
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 13 8 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-02
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 48 8 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: PILA
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 24 8 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: WC
bmp: altres.gif
bmp-rect: 105 0 21 33
bmp-offset: -4 36
pos: 40 8 0
size: 8 8 6
movement: CW
}

109
data/rooms/68.txt Normal file
View File

@@ -0,0 +1,109 @@
width: 3
height: 1
door-height-xp: 0
door-height-xn: 0
color: WHITE
floor-texture: 1
wall-texture: 6
door-texture: 6
under-door-texture: 6
exit-xp: 67
exit-xn: 69
editor-done: 1
actor{
name: BOX-00
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 56 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 0 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: KALLAX-01
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 8 16 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-02
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 24 16 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-03
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 40 16 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: ROOMBA-01
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 8 16 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: ROOMBA-02
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 24 24 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: ROOMBA-03
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 40 32 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}

236
data/rooms/69.txt Normal file
View File

@@ -0,0 +1,236 @@
width: 2
height: 2
door-height-xp: 0
color: YELLOW
floor-texture: 4
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-xp: 68
editor-done: 1
actor{
name: ABAD
bmp: abad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 32 48 2
size: 8 8 8
orient: YP
anim-wait: 1
flags: PUSHABLE REACTIVE ORIENTABLE DEADLY GRAVITY
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: BATMAN
bmp: batman.gif
bmp-rect: 0 0 21 32
bmp-offset: -5 38
pos: 16 48 2
size: 8 8 8
orient: XP
anim-wait: 1
flags: PUSHABLE REACTIVE ORIENTABLE DEADLY GRAVITY
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: FINESTRA-01
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 7 19 6
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-02
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 7 26 6
size: 1 1 9
movement: CW
}
actor{
name: KALLAX-01
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: 0 31
pos: 8 8 0
size: 4 8 8
movement: CW
}
actor{
name: KALLAX-02
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: 0 31
pos: 8 8 8
size: 4 8 8
movement: CW
}
actor{
name: KALLAX-03
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: 0 31
pos: 8 36 0
size: 4 8 8
movement: CW
}
actor{
name: KALLAX-04
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: 0 31
pos: 8 36 8
size: 4 8 8
movement: CW
}
actor{
name: PILA-01
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 24 16 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-02
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 24 24 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-03
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 24 32 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-04
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 24 40 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-11
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 40 16 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-12
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 40 24 0
size: 8 8 8
movement: CW
}
actor{
name: PILA-13
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 40 32 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: PILA-14
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 40 40 0
size: 8 8 8
orient: YP
movement: CW
}
actor{
name: ROOMBA-01
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 16 48 0
size: 8 8 2
orient: XP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: ROOMBA-02
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 32 48 0
size: 8 8 2
orient: YN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: WC
bmp: altres.gif
bmp-rect: 105 0 21 33
bmp-offset: -4 36
pos: 8 48 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CCW
}
actor{
name: Y-2
bmp: objectes.gif
bmp-rect: 165 45 21 22
bmp-offset: -2 26
pos: 8 22 0
size: 4 4 5
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}

143
data/rooms/70.txt Normal file
View File

@@ -0,0 +1,143 @@
width: 2
height: 2
door-height-xp: 0
door-height-yn: 0
color: PURPLE
floor-texture: 3
wall-texture: 2
door-texture: 0
under-door-texture: 2
exit-xp: 71
exit-yn: 65
editor-done: 1
actor{
name: BOX-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 16 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-02
bmp: caixes.gif
bmp-rect: 64 0 32 32
bmp-offset: 0 32
pos: 28 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-03
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 40 16 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-04
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 16 24 0
size: 8 8 8
orient: YP
flags: PICKABLE PUSHABLE ORIENTABLE GRAVITY
movement: CCW
}
actor{
name: BOX-05
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 16 32 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-06
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 16 40 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-07
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 40 40 0
size: 8 8 8
orient: YP
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: ROOMBA-01
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 40 48 0
size: 8 8 2
orient: XP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: ROOMBA-02
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 48 16 0
size: 8 8 2
orient: YN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: ROOMBA-03
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 16 8 0
size: 8 8 2
orient: XN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: ROOMBA-04
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 8 40 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}

147
data/rooms/71.txt Normal file
View File

@@ -0,0 +1,147 @@
width: 2
height: 2
door-height-xn: 0
door-height-yp: 0
color: YELLOW
floor-texture: 3
wall-texture: 0
door-texture: 0
under-door-texture: 2
exit-xn: 70
exit-yp: 72
editor-done: 1
actor{
name: GAT-BATMAN
bmp: test.gif
bmp-rect: 0 32 20 32
bmp-offset: -4 32
pos: 40 16 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: HUNT
}
actor{
name: MESITA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 28 28 0
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: PILAR-01
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 8
movement: CW
}
actor{
name: PILAR-02
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 8 8 8
size: 8 8 8
movement: CW
}
actor{
name: PILAR-03
bmp: caixes.gif
bmp-rect: 96 128 32 32
bmp-offset: 0 32
pos: 8 8 16
size: 8 8 4
movement: CW
}
actor{
name: PILAR-11
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 8
movement: CW
}
actor{
name: PILAR-12
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 48 8 8
size: 8 8 8
movement: CW
}
actor{
name: PILAR-13
bmp: caixes.gif
bmp-rect: 96 128 32 32
bmp-offset: 0 32
pos: 48 8 16
size: 8 8 4
movement: CW
}
actor{
name: PILAR-21
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 48 48 0
size: 8 8 8
movement: CW
}
actor{
name: PILAR-22
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 48 48 8
size: 8 8 8
movement: CW
}
actor{
name: PILAR-31
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 8 48 0
size: 8 8 8
movement: CW
}
actor{
name: PILAR-32
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 8 48 8
size: 8 8 8
movement: CW
}
actor{
name: PILAR-33
bmp: caixes.gif
bmp-rect: 96 128 32 32
bmp-offset: 0 32
pos: 8 48 16
size: 8 8 4
movement: CW
}

View File

@@ -2,109 +2,111 @@ width: 0
height: 3
door-height-yp: 0
door-height-yn: 5
color: WHITE
floor-texture: 6
color: CYAN
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-yn: 9
exit-yp: 73
exit-yn: 71
editor-done: 1
actor{
name: BOX01
name: ESCALO-001
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 24 0 12
pos: 24 0 8
size: 8 8 8
movement: CW
}
actor{
name: BOX
name: ESCALO-011
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 32 0 12
size: 8 8 8
movement: CW
}
actor{
name: BOX08
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 8 8
size: 8 8 8
size: 8 8 4
movement: CW
}
actor{
name: BOX01
name: ESCALO-020
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 8 8
pos: 24 16 0
size: 8 8 8
movement: CW
}
actor{
name: BOX07
name: ESCALO-030
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 24 16 4
size: 8 8 8
movement: CW
}
actor{
name: BOX02
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-offset: 0 32
pos: 32 16 4
size: 8 8 8
movement: CW
}
actor{
name: BOX06
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 24 0
size: 8 8 4
movement: CW
}
actor{
name: ESCALO-100
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 0 0
size: 8 8 8
movement: CW
}
actor{
name: BOX03
name: ESCALO-101
bmp: caixes.gif
bmp-rect: 64 64 32 32
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 0 8
size: 8 8 8
movement: CW
}
actor{
name: ESCALO-110
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 8 0
size: 8 8 8
movement: CW
}
actor{
name: ESCALO-111
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 8 8
size: 8 8 4
movement: CW
}
actor{
name: ESCALO-120
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 16 0
size: 8 8 8
movement: CW
}
actor{
name: ESCALO-130
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 24 0
size: 8 8 8
movement: CW
}
actor{
name: BOX05
bmp: caixes.gif
bmp-rect: 32 32 32 24
bmp-offset: 0 24
pos: 24 32 0
size: 8 10 4
movement: CW
}
actor{
name: BOX04
bmp: caixes.gif
bmp-rect: 32 32 32 24
bmp-offset: 0 24
pos: 32 32 0
size: 8 10 4
size: 8 8 4
movement: CW
}

187
data/rooms/73.txt Normal file
View File

@@ -0,0 +1,187 @@
width: 2
height: 2
door-height-xp: 0
door-height-xn: 0
door-height-yp: 0
door-height-yn: 0
color: PURPLE
floor-texture: 3
wall-texture: 9
door-texture: 3
under-door-texture: 9
exit-xp: 76
exit-xn: 74
exit-yp: 80
exit-yn: 72
editor-done: 1
actor{
name: BUBBLE-00
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 32 24 28
size: 8 8 8
orient: ZP
flags: PUSHABLE REACTIVE MOVING DEADLY INERTIA
react-mask: XP XN YP YN ZP ZN
movement: Z
}
actor{
name: BUBBLE-01
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 24 32 9
size: 8 8 8
orient: ZN
flags: PUSHABLE REACTIVE MOVING DEADLY INERTIA
react-mask: XP XN YP YN ZP ZN
movement: Z
}
actor{
name: BUBBLE-02
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 32 32 21
size: 8 8 8
orient: ZN
flags: PUSHABLE REACTIVE MOVING DEADLY INERTIA
react-mask: XP XN YP YN ZP ZN
movement: Z
}
actor{
name: BUBBLE-03
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 24 24 15
size: 8 8 8
orient: ZP
flags: PUSHABLE REACTIVE MOVING DEADLY INERTIA
react-mask: XP XN YP YN ZP ZN
movement: Z
}
actor{
name: CADIRA-00
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 18 8 0
size: 6 5 4
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: CADIRA-01
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 8 19 0
size: 6 5 4
orient: YP
movement: CW
}
actor{
name: CADIRA-02
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 8 41 0
size: 6 5 4
orient: YP
movement: CW
}
actor{
name: CADIRA-03
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 8 49 0
size: 6 5 4
orient: YP
movement: CW
}
actor{
name: CADIRA-04
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 49 8 0
size: 6 5 4
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: CADIRA-05
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 41 8 0
size: 6 5 4
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: MESITA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 4
movement: CW
}
actor{
name: TRANSPA-00
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-01
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 32 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-02
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 32 32 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-03
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 32 0
size: 8 8 6
movement: CW
}

190
data/rooms/74.txt Normal file
View File

@@ -0,0 +1,190 @@
width: 2
height: 3
door-height-xp: 0
door-height-yn: 0
color: WHITE
floor-texture: 4
wall-texture: 7
door-texture: 2
under-door-texture: 0
exit-xp: 73
exit-yn: 75
editor-done: 1
actor{
name: BANCADA-01
bmp: caixes.gif
bmp-rect: 96 96 32 32
bmp-offset: 0 32
pos: 8 0 0
size: 8 8 8
movement: CW
}
actor{
name: BANCADA-02
bmp: caixes.gif
bmp-rect: 96 96 32 32
bmp-offset: 0 32
pos: 8 16 0
size: 8 8 8
movement: CW
}
actor{
name: BANCADA-03
bmp: caixes.gif
bmp-rect: 96 96 32 32
bmp-offset: 0 32
pos: 8 32 0
size: 8 8 8
movement: CW
}
actor{
name: CADIRA-01
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -8 40
pos: 8 51 0
size: 5 4 4
orient: YP
movement: CW
}
actor{
name: CADIRA-02
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -8 40
pos: 8 59 0
size: 5 4 4
orient: YP
movement: CW
}
actor{
name: CADIRA-03
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -8 40
pos: 31 44 0
size: 5 4 4
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: FINESTRA-01
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 8 33 9
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-02
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 8 41 9
size: 1 1 9
movement: CW
}
actor{
name: FORN
bmp: caixes.gif
bmp-rect: 128 96 32 32
bmp-offset: 0 32
pos: 8 24 0
size: 8 8 8
movement: CW
}
actor{
name: NEVERA-01
bmp: caixes.gif
bmp-rect: 0 96 32 32
bmp-offset: 2 33
pos: 8 8 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: NEVERA-02
bmp: caixes.gif
bmp-rect: 32 96 32 32
bmp-offset: 2 33
pos: 8 8 8
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: PILA
bmp: caixes.gif
bmp-rect: 160 96 32 32
bmp-offset: 0 32
pos: 8 40 0
size: 8 8 8
movement: CW
}
actor{
name: ROOMBA-00
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 48 0 0
size: 8 8 2
orient: XN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RAND
}
actor{
name: ROOMBA-01
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 24 48 0
size: 8 8 2
orient: YP
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RAND
}
actor{
name: TAULA-01
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 28 32 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: TAULA-02
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 28 24 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}

318
data/rooms/75.txt Normal file
View File

@@ -0,0 +1,318 @@
width: 3
height: 2
door-height-yp: 0
color: YELLOW
floor-texture: 4
wall-texture: 3
door-texture: 1
under-door-texture: 0
exit-yp: 74
editor-done: 1
actor{
name: ABAD
bmp: abad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 40 32 0
size: 8 8 8
orient: XN
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: X
}
actor{
name: BATMAN
bmp: batman.gif
bmp-rect: 0 0 21 32
bmp-offset: -5 35
pos: 8 16 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: X
}
actor{
name: FINESTRA-00
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: -1 36 4
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-01
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: -1 44 4
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-02
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 48 2 5
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: FINESTRA-03
bmp: altres.gif
bmp-rect: 0 75 20 33
bmp-offset: 0 39
pos: 40 2 5
size: 1 1 9
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: ROOMBA
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 56 24 0
size: 8 8 2
orient: YN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: TRANSPA-00
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 8 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-01
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 16 8 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-02
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 8 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-03
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 40 8 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-04
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-05
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-06
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 40 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-07
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 32 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-08
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-09
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 16 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-10
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-11
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 8 24 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-12
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 8 6
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-13
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 8 40 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-14
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 16 40 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-15
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 8 12
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-16
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 32 40 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-17
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 40 40 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-18
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 40 48 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-19
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 24 6
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-20
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 0 24 12
size: 8 8 6
movement: CW
}
actor{
name: Y-1
bmp: objectes.gif
bmp-rect: 167 22 18 23
bmp-offset: -7 27
pos: 0 16 0
size: 4 4 6
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}

159
data/rooms/76.txt Normal file
View File

@@ -0,0 +1,159 @@
width: 3
height: 1
door-height-xp: 5
door-height-xn: 5
door-height-yn: 0
color: GREEN
floor-texture: 0
wall-texture: 3
door-texture: 1
under-door-texture: 3
exit-xp: 77
exit-xn: 73
exit-yn: 79
editor-done: 1
actor{
name: ABAD
bmp: abad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 0 40 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: X
}
actor{
name: BATMAN
bmp: batman.gif
bmp-rect: 0 0 21 32
bmp-offset: -5 35
pos: 56 40 0
size: 8 8 8
orient: XN
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: X
}
actor{
name: BOX-A-00
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 24 16
size: 8 8 4
movement: CW
}
actor{
name: BOX-A-01
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 28 16
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-02
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 16 28 16
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-03
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 28 16
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-04
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 28 16
size: 8 8 4
flags: DISAPPEAR
movement: CW
}
actor{
name: BOX-A-05
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 40 28 16
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-06
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 48 28 16
size: 8 8 4
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-07
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 56 24 16
size: 8 8 4
movement: CW
}
actor{
name: BOX-A-08
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 32 16
size: 8 8 4
movement: CW
}
actor{
name: BOX-A-09
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 56 32 16
size: 8 8 4
movement: CW
}
actor{
name: PILOTA
bmp: altres.gif
bmp-rect: 0 108 21 21
bmp-offset: -6 26
pos: 40 40 0
size: 8 8 8
flags: PUSHABLE INERTIA
movement: CW
}

244
data/rooms/77.txt Normal file
View File

@@ -0,0 +1,244 @@
width: 2
height: 2
door-height-xn: 1
door-height-yn: 1
color: CYAN
floor-texture: 0
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xn: 76
exit-yn: 78
exit-zn: 81
editor-done: 1
actor{
name: LIFT
bmp: altres.gif
bmp-rect: 160 56 32 24
bmp-offset: 0 24
pos: 24 48 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT13
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 32 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT14
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 40 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT16
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 24 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT17
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 16 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT18
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT19
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 16 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT20
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT21
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT22
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 40 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT23
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: LIFT28
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 16 40 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT29
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 16 32 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT30
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 16 24 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT31
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 16 16 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT32
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 24 16 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT33
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 32 16 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT34
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 40 16 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: LIFT35
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 48 16 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: PLATF
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 16 48 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: PLATH
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 8 48 0
size: 8 8 4
orient: ZP
movement: Z
}

415
data/rooms/78.txt Normal file
View File

@@ -0,0 +1,415 @@
width: 2
height: 3
door-height-xn: 3
door-height-yp: 3
color: WHITE
floor-texture: 11
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xn: 79
exit-yp: 77
editor-done: 1
actor{
name: BLOCK-00
bmp: caixes.gif
bmp-rect: 0 40 32 24
bmp-offset: 0 24
pos: 8 0 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: BLOCK-01
bmp: caixes.gif
bmp-rect: 0 40 32 24
bmp-offset: 0 24
pos: 8 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: BLOCK-02
bmp: caixes.gif
bmp-rect: 0 40 32 24
bmp-offset: 0 24
pos: 40 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: BLOCK-03
bmp: caixes.gif
bmp-rect: 0 40 32 24
bmp-offset: 0 24
pos: 24 0 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: CONV-XP-00
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 56 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-01
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 16 56 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-02
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 24 56 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-03
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 32 56 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-04
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 40 56 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-05
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 16 0 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-XP-06
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 24 0 4
size: 8 8 4
orient: XP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: XP
}
actor{
name: CONV-YP-00
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 0 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-01
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 8 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-02
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 16 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-03
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 24 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-04
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 32 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-05
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 40 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: CONV-YP-06
bmp: caixes.gif
bmp-rect: 0 128 32 32
bmp-offset: 0 32
pos: 8 48 4
size: 8 8 4
orient: YP
anim-cycle: MIN
flags: REACTIVE ANIMATED ORIENTABLE
react-mask: ZN
react-push: YP
}
actor{
name: OBRER
bmp: obrer.gif
bmp-rect: 0 0 24 32
bmp-offset: -4 37
pos: 48 0 4
size: 8 8 8
orient: YP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: PLAT-00
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-01
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 48 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-02
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 40 48 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-03
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 40 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-04
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 32 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-05
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 40 32 0
size: 8 8 4
orient: ZP
flags: DISAPPEAR
movement: Z
}
actor{
name: PLAT-06
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 24 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-07
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 16 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-08
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 40 16 0
size: 8 8 4
orient: ZP
flags: REACTIVE
react-mask: ZN
react-push: XP
movement: Z
}
actor{
name: PLAT-09
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 8 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-10
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 48 0 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLAT-11
bmp: caixes.gif
bmp-rect: 160 136 32 24
bmp-offset: 0 24
pos: 40 0 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: Y-0
bmp: objectes.gif
bmp-rect: 162 0 28 22
bmp-offset: -3 24
pos: 40 0 4
size: 6 6 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}

13
data/rooms/79.txt Normal file
View File

@@ -0,0 +1,13 @@
width: 1
height: 3
door-height-xp: 0
door-height-yp: 0
door-height-yn: 3
color: YELLOW
floor-texture: 6
wall-texture: 3
door-texture: 1
under-door-texture: 3
exit-xp: 78
exit-yp: 76
editor-done: 1

32
data/rooms/80.txt Normal file
View File

@@ -0,0 +1,32 @@
width: 0
height: 3
door-height-xn: 1
door-height-yn: 0
color: CYAN
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-xn: 82
exit-yn: 73
editor-done: 1
actor{
name: FINESTRA-00
bmp: altres.gif
bmp-rect: 48 76 18 32
bmp-offset: 0 39
pos: 23 8 4
size: 1 1 9
movement: CW
}
actor{
name: FINESTRA-01
bmp: altres.gif
bmp-rect: 84 76 18 32
bmp-offset: 0 39
pos: 23 48 4
size: 1 1 9
movement: CW
}

114
data/rooms/81.txt Normal file
View File

@@ -0,0 +1,114 @@
width: 2
height: 2
door-height-xn: 0
door-height-yn: 0
color: PURPLE
floor-texture: 1
wall-texture: 13
door-texture: 7
under-door-texture: 0
exit-zp: 77
editor-done: 1
actor{
name: BOX-A
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 40 48 0
size: 8 8 8
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: BOX-A-00
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 8 20 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-A-01
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 8
movement: CW
}
actor{
name: BOX-A-02
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 10 8 0
size: 8 8 8
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: BOX-B-00
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 40 10 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-B-01
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 42 48 8
size: 8 8 8
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: BOX-C-00
bmp: caixes.gif
bmp-rect: 64 0 32 32
bmp-offset: 0 32
pos: 13 32 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: BOX-C-01
bmp: caixes.gif
bmp-rect: 64 0 32 32
bmp-offset: 0 32
pos: 26 8 0
size: 8 8 8
orient: YP
flags: PUSHABLE ORIENTABLE
movement: CW
}
actor{
name: LIFT
bmp: altres.gif
bmp-rect: 160 56 32 24
bmp-offset: 0 24
pos: 24 48 0
size: 8 8 4
orient: ZP
flags: MOVING
movement: Z
}

View File

@@ -1,57 +1,89 @@
width: 3
width: 2
height: 3
door-height-yp: 0
color: CYAN
floor-texture: 0
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-yp: 10
door-height-xp: 0
door-height-xn: 0
color: YELLOW
floor-texture: 10
wall-texture: 9
door-texture: 3
under-door-texture: 9
exit-xp: 80
exit-xn: 83
editor-done: 1
actor{
name: KALLAX-A03
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: 0 31
pos: 0 16 0
size: 4 8 8
name: BOX-B
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 48 8 0
size: 8 8 8
flags: PUSHABLE
movement: CW
}
actor{
name: KALLAX-A
name: CADIRA
bmp: caixes.gif
bmp-rect: 64 96 20 32
bmp-offset: -7 38
pos: 16 32 0
size: 6 5 8
orient: YP
flags: PUSHABLE
movement: CW
}
actor{
name: CUADRO-00
bmp: altres.gif
bmp-rect: 66 75 18 32
bmp-offset: 0 39
pos: 7 8 6
size: 1 1 9
orient: YP
movement: CW
}
actor{
name: CUADRO-01
bmp: altres.gif
bmp-rect: 102 75 18 32
bmp-offset: 0 39
pos: 7 48 6
size: 1 1 9
orient: YP
movement: CW
}
actor{
name: KALLAX-00
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: 0 31
pos: 0 32 0
size: 4 8 8
bmp-offset: -8 31
pos: 16 0 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-A02
name: KALLAX-01
bmp: altres.gif
bmp-rect: 48 48 24 27
bmp-offset: 0 31
pos: 0 16 8
size: 4 8 8
bmp-offset: -8 31
pos: 16 0 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-A01
name: KALLAX-02
bmp: altres.gif
bmp-rect: 24 48 24 27
bmp-offset: 0 31
pos: 0 32 8
size: 4 8 8
movement: CW
}
actor{
name: KALLAX-A04
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: -8 31
pos: 8 0 0
size: 8 4 8
@@ -61,7 +93,55 @@ actor{
}
actor{
name: KALLAX-A05
name: KALLAX-02
bmp: altres.gif
bmp-rect: 48 48 24 27
bmp-offset: -8 31
pos: 40 0 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-03
bmp: altres.gif
bmp-rect: 24 48 24 27
bmp-offset: -8 31
pos: 48 0 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-04
bmp: altres.gif
bmp-rect: 96 48 24 27
bmp-offset: -8 31
pos: 40 0 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-05
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: -8 31
pos: 48 0 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-06
bmp: altres.gif
bmp-rect: 96 48 24 27
bmp-offset: -8 31
@@ -73,138 +153,70 @@ actor{
}
actor{
name: ARCADE
bmp: altres.gif
bmp-rect: 160 0 30 48
bmp-offset: 0 48
pos: 16 0 0
size: 8 8 16
movement: CW
}
actor{
name: KALLAX-A07
bmp: altres.gif
bmp-rect: 96 48 24 27
bmp-offset: -8 31
pos: 24 0 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-A08
bmp: altres.gif
bmp-rect: 24 48 24 27
bmp-offset: -8 31
pos: 32 0 0
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-A06
bmp: altres.gif
bmp-rect: 72 48 24 27
bmp-offset: -8 31
pos: 24 0 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: KALLAX-A09
bmp: altres.gif
bmp-rect: 0 48 24 27
bmp-offset: -8 31
pos: 32 0 8
size: 8 4 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: TAULETA
name: MESITA
bmp: caixes.gif
bmp-rect: 0 64 32 32
bmp-offset: 0 32
pos: 40 0 0
pos: 24 0 0
size: 8 8 4
movement: CW
}
actor{
name: BOX05
bmp: altres.gif
bmp-rect: 128 0 20 42
bmp-offset: -5 46
pos: 40 0 4
size: 8 8 8
name: NES
bmp: caixes.gif
bmp-rect: 96 0 32 32
bmp-offset: -2 33
pos: 32 0 0
size: 8 7 6
flags: PUSHABLE
movement: CW
}
actor{
name: BOX01
name: ROOMBA
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 8 56 0
size: 8 8 2
orient: XN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: TAULA-A
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 16 24 0
size: 8 8 8
movement: CW
}
actor{
name: BOX02
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 24 24 0
size: 8 8 8
react-push: XP
movement: CW
}
actor{
name: GAT
bmp: gat2.gif
bmp-rect: 0 0 24 28
bmp-offset: -5 30
pos: 40 32 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: PUSHABLE MOVING ANIMATED ORIENTABLE INERTIA
movement: X
}
actor{
name: BOX03
bmp: caixes.gif
bmp-rect: 128 0 32 32
bmp-offset: 0 32
pos: 16 24 8
size: 8 8 2
flags: PUSHABLE
react-push: XP
movement: CW
}
actor{
name: BOX04
bmp: caixes.gif
bmp-rect: 32 64 32 32
bmp-offset: 0 32
pos: 24 24 8
size: 8 8 8
orient: YP
flags: ORIENTABLE
react-push: XP
movement: CW
}
actor{
name: TAULA-B
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 24 32 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: TV
bmp: caixes.gif
bmp-rect: 32 64 32 32
bmp-offset: -4 34
pos: 24 0 4
size: 8 6 8
flags: PUSHABLE
movement: CW
}

280
data/rooms/83.txt Normal file
View File

@@ -0,0 +1,280 @@
width: 3
height: 3
door-height-xp: 0
door-height-yn: 0
color: GREEN
floor-texture: 10
wall-texture: 3
door-texture: 1
under-door-texture: 3
exit-xp: 82
exit-yn: 84
editor-done: 1
actor{
name: ABAD
bmp: abad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 32 16 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RAND
}
actor{
name: BATMAN
bmp: batman.gif
bmp-rect: 0 0 21 32
bmp-offset: -5 35
pos: 0 24 0
size: 8 8 8
orient: YP
anim-wait: 1
flags: REACTIVE MOVING ANIMATED ORIENTABLE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: RAND
}
actor{
name: BLOCMATA-00
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 48 48 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-01
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 48 40 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-02
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 40 48 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-03
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 48 16 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-04
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 48 8 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-05
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 40 8 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-06
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 16 8 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-07
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 8 8 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-08
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 8 16 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-09
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 8 40 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-10
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 8 48 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-11
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 16 48 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-12
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 24 24 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-13
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 32 24 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-14
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 32 32 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BLOCMATA-15
bmp: altres.gif
bmp-rect: 0 133 32 27
bmp-offset: 0 27
pos: 24 32 0
size: 8 8 6
flags: REACTIVE DEADLY
react-mask: XP XN YP YN ZP ZN
movement: CW
}
actor{
name: BUBBLE-00
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 8 8 6
size: 8 8 8
orient: ZP
flags: PUSHABLE MOVING INERTIA
movement: Z
}
actor{
name: BUBBLE-01
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 8 48 31
size: 8 8 8
orient: ZP
flags: PUSHABLE MOVING INERTIA
movement: Z
}
actor{
name: BUBBLE-02
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 48 48 23
size: 8 8 8
orient: ZP
flags: PUSHABLE MOVING INERTIA
movement: Z
}
actor{
name: BUBBLE-03
bmp: altres.gif
bmp-rect: 20 75 28 26
bmp-offset: -2 28
pos: 48 8 15
size: 8 8 8
orient: ZP
flags: PUSHABLE MOVING INERTIA
movement: Z
}

36
data/rooms/84.txt Normal file
View File

@@ -0,0 +1,36 @@
width: 0
height: 3
door-height-xn: 0
door-height-yp: 0
door-height-yn: 0
color: WHITE
floor-texture: 4
wall-texture: 2
door-texture: 0
under-door-texture: 0
exit-xn: 86
exit-yp: 83
exit-yn: 85
editor-done: 1
actor{
name: CUADRO-00
bmp: altres.gif
bmp-rect: 66 75 18 32
bmp-offset: 0 39
pos: 23 8 6
size: 1 1 9
orient: YP
movement: CW
}
actor{
name: CUADRO-01
bmp: altres.gif
bmp-rect: 102 75 18 32
bmp-offset: 0 39
pos: 23 48 6
size: 1 1 9
orient: YP
movement: CW
}

270
data/rooms/85.txt Normal file
View File

@@ -0,0 +1,270 @@
width: 3
height: 3
door-height-yp: 1
color: CYAN
floor-texture: 11
wall-texture: 0
door-texture: 0
under-door-texture: 0
exit-yp: 84
editor-done: 1
actor{
name: PLATF-02
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 0 8 16
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: PLATF-04
bmp: caixes.gif
bmp-rect: 96 160 32 32
bmp-offset: 0 32
pos: 0 8 0
size: 8 8 8
orient: ZP
movement: Z
}
actor{
name: PLATH-00
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 16 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-00
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 56 16
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-00
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 32 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-01
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 24 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-02
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 24 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-03
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 32 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-04
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 40 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-05
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 48 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-06
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 56 0
size: 8 8 4
orient: ZP
movement: Z
}
actor{
name: PLATH-07
bmp: caixes.gif
bmp-rect: 160 128 32 32
bmp-offset: 0 32
pos: 0 32 16
size: 8 8 4
orient: ZP
flags: DISAPPEAR
movement: Z
}
actor{
name: ROOMBA
bmp: caixes.gif
bmp-rect: 160 0 32 32
bmp-offset: 0 34
pos: 0 56 4
size: 8 8 2
orient: YN
flags: REACTIVE MOVING DEADLY
react-mask: XP XN YP YN ZP ZN
movement: Y
}
actor{
name: TRANSPA-00
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 48 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-01
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 26 6
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-02
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 26 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-03
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 4 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-04
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 4 6
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-05
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 48 4 12
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-06
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 4 0
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-06
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 4 16
size: 8 8 6
movement: CW
}
actor{
name: TRANSPA-07
bmp: altres.gif
bmp-rect: 0 160 32 32
bmp-offset: 0 32
pos: 24 4 8
size: 8 8 6
movement: CW
}
actor{
name: TV
bmp: caixes.gif
bmp-rect: 32 64 32 32
bmp-offset: -4 34
pos: 0 13 24
size: 8 6 8
flags: PUSHABLE GRAVITY
movement: CW
}
actor{
name: Y-3
bmp: objectes.gif
bmp-rect: 145 41 20 25
bmp-offset: -5 27
pos: 0 56 20
size: 6 4 6
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}

117
data/rooms/86.txt Normal file
View File

@@ -0,0 +1,117 @@
width: 2
height: 2
door-height-xp: 0
door-height-yp: 5
color: PURPLE
floor-texture: 1
wall-texture: 2
door-texture: 3
under-door-texture: 2
exit-xp: 84
editor-done: 1
actor{
name: BOX-A
bmp: caixes.gif
bmp-rect: 0 0 32 32
bmp-offset: 0 32
pos: 26 29 0
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: BOX-B
bmp: caixes.gif
bmp-rect: 32 0 32 32
bmp-offset: 0 32
pos: 8 8 8
size: 8 8 8
flags: PICKABLE PUSHABLE GRAVITY
movement: CW
}
actor{
name: ESTANT-00
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 48 8 0
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-01
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 40 8 0
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-02
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 40 8 6
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-03
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 48 8 6
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-04
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 48 8 12
size: 8 5 6
movement: CW
}
actor{
name: ESTANT-05
bmp: altres.gif
bmp-rect: 21 101 26 24
bmp-offset: -6 27
pos: 40 8 12
size: 8 5 6
movement: CW
}
actor{
name: TAULA-A
bmp: caixes.gif
bmp-rect: 128 32 32 32
bmp-offset: 0 32
pos: 8 8 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}
actor{
name: TAULA-B
bmp: caixes.gif
bmp-rect: 160 32 32 32
bmp-offset: 0 32
pos: 8 16 0
size: 8 8 8
orient: YP
flags: ORIENTABLE
movement: CW
}

BIN
data/snd_boost.wav Normal file

Binary file not shown.

BIN
data/snd_dead.wav Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
data/snd_logo.wav Normal file

Binary file not shown.

Binary file not shown.

View File

@@ -47,19 +47,6 @@ category{
movement: CW
}
actor{
name: S-SHOES
bmp: objectes.gif
bmp-rect: 162 0 28 22
bmp-offset: -3 24
pos: 48 8 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: FINESTRA
bmp: altres.gif
@@ -217,6 +204,87 @@ category{
movement: CW
}
actor{
name: SAM
bmp: sam.gif
bmp-rect: 0 0 19 33
bmp-offset: -8 38
pos: 24 40 0
size: 8 8 8
orient: XP
anim-cycle: DUO
anim-wait: 20
flags: ANIMATED
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: YONKI
bmp: caixes.gif
bmp-rect: 168 65 19 31
bmp-offset: -6 36
pos: 24 40 0
size: 8 8 8
orient: XP
anim-wait: 20
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: LORD-ABAD
bmp: lordabad.gif
bmp-rect: 0 0 20 33
bmp-offset: -6 38
pos: 56 48 0
size: 8 8 8
orient: XP
anim-cycle: MIN
anim-wait: 1
flags: ANIMATED ORIENTABLE
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: JAILDES
bmp: test.gif
bmp-rect: 0 32 20 32
bmp-offset: -6 38
pos: 48 40 0
size: 8 8 8
orient: XP
anim-wait: 1
flags: ANIMATED
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: ROOMBA2
bmp: caixes.gif
bmp-rect: 164 0 24 32
bmp-offset: 0 34
pos: 24 40 0
size: 8 8 2
orient: XN
react-mask: XP XN YP YN ZP ZN
movement: CCW
}
actor{
name: ARCADE
bmp: altres.gif
bmp-rect: 160 0 30 48
bmp-offset: 0 49
pos: 0 16 0
size: 8 8 16
orient: YP
flags: ORIENTABLE
movement: CW
}
}
category{
@@ -400,11 +468,11 @@ category{
bmp: objectes.gif
bmp-rect: 96 0 24 32
bmp-offset: -4 34
pos: 8 40 8
pos: 16 0 8
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
flags: PUSHABLE GRAVITY SPECIAL
movement: CW
}
@@ -657,3 +725,60 @@ category{
}
}
category{
name: SKILLS
actor{
name: S-SHOES
bmp: objectes.gif
bmp-rect: 162 0 28 22
bmp-offset: -3 24
pos: 40 0 4
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: S-BAG
bmp: objectes.gif
bmp-rect: 145 41 20 25
bmp-offset: -5 27
pos: 0 56 20
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: S-PANTS
bmp: objectes.gif
bmp-rect: 167 22 18 23
bmp-offset: -7 27
pos: 0 16 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
actor{
name: S-GLOVES
bmp: objectes.gif
bmp-rect: 165 45 21 22
bmp-offset: -2 26
pos: 8 22 0
size: 4 4 4
anim-cycle: SEQ
anim-wait: 2
flags: SPECIAL
movement: CW
}
}

Binary file not shown.

View File

@@ -1,4 +1,4 @@
libs = -lSDL2 -lSDL2_mixer
libs = -lSDL2
cppflags = -D DEBUG -g
executable = thepool_debug
sourcepath = source

View File

@@ -32,7 +32,8 @@ namespace actor
bool floating_editing = false;
int walk_channel = -1;
int falling_sound = -1;
bool push_sound_already_playing = false;
std::vector<actor_t*> purgatory;
void resetTag()
{
@@ -69,6 +70,7 @@ namespace actor
act->surface = draw::getSurface(bmp.c_str());
act->bmp_rect = r;
act->bmp_offset = o;
act->alive = true;
return act;
}
@@ -89,6 +91,8 @@ namespace actor
act->react_mask = act->react_push = 0;
act->flags = FLAG_NONE;
act->template_category = 0;
act->alive = true;
return act;
}
@@ -233,7 +237,7 @@ namespace actor
newactor->prev = act->prev;
newactor->next = act->next;
act->prev = act->next = nullptr;
remove(act);
sendToPurgatory(act);
return newactor;
}
@@ -457,13 +461,33 @@ namespace actor
actor_t *hero = find("HERO");
while (obj2)
{
if (obj2 != hero && obj1 != obj2 && check_2d_collision(obj1, obj2))
if (obj2 != hero && obj1 != obj2 && (obj1->pos.z<obj2->pos.z+obj2->size.z) && check_2d_collision(obj1, obj2))
return true;
obj2 = obj2->next;
}
return false;
}
void find_non_colliding_position(actor_t *obj)
{
int dist = 1;
while (does_collide(obj))
{
obj->pos.x += dist;
if (!does_collide(obj)) return;
obj->pos.x -= dist*2;
if (!does_collide(obj)) return;
obj->pos.x += dist;
obj->pos.y += dist;
if (!does_collide(obj)) return;
obj->pos.y -= dist*2;
if (!does_collide(obj)) return;
obj->pos.y += dist;
dist++;
}
}
const bool is_above(actor_t *obj1, actor_t *obj2)
{
return check_2d_collision(obj1, obj2) && (obj1->pos.z == obj2->pos.z + obj2->size.z);
@@ -633,8 +657,10 @@ namespace actor
}
if ((source->flags & FLAG_HERO) && (act->flags & FLAG_DISAPPEAR))
{
audio::playSound("snd_disappear.wav", SOUND_BASIC);
act = actor::replaceWithTemplate(act, "EXPLOSION");
act->name[0] = '_';
return PUSH_NONE;
}
if (source->flags & FLAG_DEADLY)
@@ -649,22 +675,61 @@ namespace actor
if (act->name[0] == 'B')
{ // Es un booster
hero::collectBooster(&act->name[5], (act->name[2] - 48) * 10 + (act->name[3] - 48));
audio::playSound("snd_boost.wav", SOUND_BASIC);
}
else if (act->name[0] == 'S')
{ // Es un skill
hero::giveSkill(&act->name[2]);
audio::playSound("snd_boost.wav", SOUND_BASIC);
}
else if (act->name[0] == 'P')
{
if (hero::getSkills() & SKILL_BAG)
{ // Es una part
hero::pickPart(&act->name[2]);
audio::playSound("snd_pick.wav", SOUND_BASIC);
}
else
{
audio::playSound("snd_push.wav", SOUND_BASIC);
return result;
}
}
else if (act->name[0] == 'A')
{
hero::pickAnbernic(act->name);
audio::playSound("snd_pick.wav", SOUND_BASIC);
}
else if (act->name[0] == 'X')
{
if (hero::isCarryingPrologoObject()) {
audio::playSound("snd_push.wav", SOUND_BASIC);
return result;
} else {
hero::pickPrologoObject(act->name[2]-48);
audio::playSound("snd_pick.wav", SOUND_BASIC);
}
}
else if (act->name[0] == 'Y')
{
const int which = act->name[2]-48;
if (hero::getPrologoObjectState(which)==PROLOGO_OBJECT_PICKED)
{
hero::leavePrologoObject(which);
audio::playSound("snd_pick.wav", SOUND_BASIC);
act->name[0] = 'Z';
room::cycleColor(1);
return result;
} else {
audio::playSound("snd_push.wav", SOUND_BASIC);
return result;
}
}
else if (act->name[0] == 'Z')
{
audio::playSound("snd_push.wav", SOUND_BASIC);
return result;
}
else
{
SDL_assert(false);
@@ -672,6 +737,7 @@ namespace actor
act = actor::replaceWithTemplate(act, "EXPLOSION");
act->name[0] = '_';
room::cycleColor(1);
return PUSH_NONE;
}
}
return result;
@@ -690,6 +756,7 @@ namespace actor
if ((act->pos.x > min.x && act->pos.y >= min.y && (act->pos.y + act->size.y) <= max.y) || ((room::getDoors() & DOOR_XN) && (act->pos.y >= 24) && (act->pos.y <= 32)))
{
moving = true;
// Si està en les vores d'una porta, espenta cap a centrar-lo
if ((act->pos.x <= min.x) && (act->pos.z == room::getDoor(XN) * 4) && (room::getDoors() & DOOR_XN))
{
if (act->pos.y < 28)
@@ -697,10 +764,16 @@ namespace actor
else if (act->pos.y > 28)
act->push |= PUSH_YN;
else
{
act->push |= PUSH_XN;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
else
{
act->push |= PUSH_XN;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
}
else if (controller::down(KEY_RIGHT)) //(input::keyDown(SDL_SCANCODE_RIGHT) || input::keyDown(config::getKey(KEY_RIGHT)))
@@ -710,6 +783,7 @@ namespace actor
if (((act->pos.x + act->size.x) < max.x && act->pos.y >= min.y && (act->pos.y + act->size.y) <= max.y) || ((room::getDoors() & DOOR_XP) && (act->pos.y >= 24) && (act->pos.y <= 32)))
{
moving = true;
// Si està en les vores d'una porta, espenta cap a centrar-lo
if (((act->pos.x + act->size.x) >= max.x) && (act->pos.z == room::getDoor(XP) * 4) && (room::getDoors() & DOOR_XP))
{
if (act->pos.y < 28)
@@ -717,19 +791,26 @@ namespace actor
else if (act->pos.y > 28)
act->push |= PUSH_YN;
else
{
act->push |= PUSH_XP;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
else
{
act->push |= PUSH_XP;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
}
else if (controller::down(KEY_UP)) //input::keyDown(SDL_SCANCODE_UP) || input::keyDown(config::getKey(KEY_UP)))
else if (controller::down(KEY_UP)) // input::keyDown(SDL_SCANCODE_UP) || input::keyDown(config::getKey(KEY_UP)))
{
hero::useBoostRun();
act->orient = PUSH_YN;
if ((act->pos.y > min.y && act->pos.x >= min.x && (act->pos.x + act->size.x) <= max.x) || ((room::getDoors() & DOOR_YN) && (act->pos.x >= 24) && (act->pos.x <= 32)))
{
moving = true;
// Si està en les vores d'una porta, espenta cap a centrar-lo
if ((act->pos.y <= min.y) && (act->pos.z == room::getDoor(YN) * 4) && (room::getDoors() & DOOR_YN))
{
if (act->pos.x < 28)
@@ -737,19 +818,26 @@ namespace actor
else if (act->pos.x > 28)
act->push |= PUSH_XN;
else
{
act->push |= PUSH_YN;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
else
{
act->push |= PUSH_YN;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
}
else if (controller::down(KEY_DOWN)) //input::keyDown(SDL_SCANCODE_DOWN) || input::keyDown(config::getKey(KEY_DOWN)))
else if (controller::down(KEY_DOWN)) // input::keyDown(SDL_SCANCODE_DOWN) || input::keyDown(config::getKey(KEY_DOWN)))
{
hero::useBoostRun();
act->orient = PUSH_YP;
if (((act->pos.y + act->size.y) < max.y && act->pos.x >= min.x && (act->pos.x + act->size.x) <= max.x) || ((room::getDoors() & DOOR_YP) && (act->pos.x >= 24) && (act->pos.x <= 32)))
{
moving = true;
// Si està en les vores d'una porta, espenta cap a centrar-lo
if (((act->pos.y + act->size.y) >= max.y) && (act->pos.z == room::getDoor(YP) * 4) && (room::getDoors() & DOOR_YP))
{
if (act->pos.x < 28)
@@ -757,13 +845,19 @@ namespace actor
else if (act->pos.x > 28)
act->push |= PUSH_XN;
else
{
act->push |= PUSH_YP;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
else
{
act->push |= PUSH_YP;
if (hero::getBoostRun() > 0) act->push |= PUSH_DOUBLE;
}
}
}
//if ((input::keyPressed(SDL_SCANCODE_RETURN) || input::keyPressed(config::getKey(KEY_PICK))) && (hero::getSkills() & SKILL_PANTS))
// if ((input::keyPressed(SDL_SCANCODE_RETURN) || input::keyPressed(config::getKey(KEY_PICK))) && (hero::getSkills() & SKILL_PANTS))
if ((controller::pressed(KEY_PICK)) && (hero::getSkills() & SKILL_PANTS))
{
if (picked)
@@ -775,7 +869,8 @@ namespace actor
if (picked->pos.y + picked->size.y > room::getMax().y)
picked->pos.y = room::getMax().y - picked->size.y;
picked->pos.z = act->pos.z;
if (does_collide(picked))
find_non_colliding_position(picked);
/*if (does_collide(picked))
{
picked->pos.x -= 2;
if (does_collide(picked))
@@ -783,7 +878,7 @@ namespace actor
picked->pos.x += 2;
picked->pos.y -= 2;
}
}
}*/
act->pos.z += picked->size.z;
actor::actor_t *above = act->above;
while (above)
@@ -810,13 +905,16 @@ namespace actor
// act->pos.z -= height;
}
}
actor::actor_t *future_below = any_below_me(act);
//if ((input::keyDown(SDL_SCANCODE_SPACE) || input::keyDown(config::getKey(KEY_JUMP))) &&
if ((controller::down(KEY_JUMP)) &&
(hero::getSkills() & SKILL_SHOES) && (act->pos.y + act->size.y) <= max.y && act->pos.y >= min.y && (act->pos.x + act->size.x) <= max.x && act->pos.x >= min.x && act->react_mask == 0 && ((act->pos.z == 0 && room::getFloor() != 11) || (act->below || future_below)))
// if ((input::keyDown(SDL_SCANCODE_SPACE) || input::keyDown(config::getKey(KEY_JUMP))) &&
if ((controller::down(KEY_JUMP)) && ((hero::getSkills() & SKILL_SHOES) || actor::hero::isPrologo())
&& (act->pos.y + act->size.y) <= max.y && act->pos.y >= min.y && (act->pos.x + act->size.x) <= max.x && act->pos.x >= min.x && act->react_mask == 0 && ((act->pos.z == 0 && room::getFloor() != 11) || (act->below || future_below)))
{
audio::pauseChannel(walk_channel);
audio::playSound("snd_jump.wav", SOUND_ALL);
audio::playSound("snd_jump.wav", SOUND_BASIC);
// [RZC 01/10/2024] Hack per a que al aterrar sobre els que desapareixen puga botar sobre ells, i a més ells desapareguen
if (!act->below && future_below && future_below->flags & FLAG_DISAPPEAR)
actor::push(act, future_below, PUSH_ZN);
@@ -858,9 +956,6 @@ namespace actor
{
act->react_mask = 0; // desactivem la guarda (react_mask=0)
act->flags |= FLAG_GRAVITY; // i reactivem el flag de gravetat
if (falling_sound!=-1) { audio::stopChannel(falling_sound); falling_sound = -1; }
falling_sound = audio::playSound("snd_fall.wav", SOUND_ALL, -1);
}
}
@@ -868,7 +963,8 @@ namespace actor
if (moving)
{
act->flags |= FLAG_ANIMATED;
if (act->react_mask==0 && !(act->flags&FLAG_GRAVITY)) audio::resumeChannel(walk_channel);
if ((config::getSoundMode() == SOUND_ALL) && act->react_mask == 0 && ((act->below) || (act->pos.z == 0)))
audio::resumeChannel(walk_channel);
}
else
{
@@ -884,8 +980,13 @@ namespace actor
act->push |= act->mov_push;
}
void changeMoving(actor_t *act)
void changeMoving(actor_t *act, const bool silent = false)
{
if (!silent && !push_sound_already_playing)
{
audio::playSound("snd_push.wav", SOUND_BASIC);
push_sound_already_playing = true;
}
switch (act->movement)
{
case MOV_X:
@@ -1010,7 +1111,7 @@ namespace actor
vec3_t min = room::getMin();
vec3_t max = room::getMax();
if ((act->push & PUSH_KILL) && (act->flags & FLAG_HERO))
if ((act->push & PUSH_KILL) && (act->flags & FLAG_HERO) && (!hero::hasBoostGod()))
{
if (!editor::isDevMode())
{
@@ -1019,6 +1120,8 @@ namespace actor
stats::loseLive();
}
// [TODO] If lives == 0 anar a la pantalla de game-over o cat's life
audio::pauseChannel(walk_channel);
audio::playSound("snd_dead.wav", SOUND_BASIC);
actor_t *act = actor::find("HERO");
act = actor::replaceWithTemplate(act, "EXPLOSION");
actor_t *act2 = actor::createFromTemplate("EXPLOSION");
@@ -1026,17 +1129,25 @@ namespace actor
act2->pos.z += 8;
act2->anim_frame = 2;
act->anim_wait = act2->anim_wait = 1;
actor_t *other = first;
while (other)
{
other->flags &= ~FLAG_MOVING;
other = other->next;
}
actor::setDirty(act2);
room::cycleColor(4);
return;
}
if ((act->flags & FLAG_HERO) && (hero::hasBoostGod())) act->push &= ~PUSH_KILL;
// [RZC 26/09/2024] Hack usant react_push en el moviment RAND per a contar la distancia abans de canviar de direcció
if (act->movement == MOV_RAND)
{
act->react_push--;
if (act->react_push == 0)
changeMoving(act);
changeMoving(act, true);
}
// [RZC 26/09/2024] Hack usant react_push en les bambolles de café per al dz del moviment de anar pegant botets
@@ -1049,7 +1160,9 @@ namespace actor
act->pos.z += act->react_push;
}
int vel = (act->flags & FLAG_HERO) && (hero::getBoostRun() > 0) ? 2 : 1;
//int vel = (act->flags & FLAG_HERO) && (hero::getBoostRun() > 0) ? 2 : 1;
int vel = (act->flags & FLAG_HERO) && (act->push & PUSH_DOUBLE) ? 2 : 1;
act->push &= ~ PUSH_DOUBLE;
if (act->push & PUSH_ZP)
{
@@ -1110,8 +1223,10 @@ namespace actor
actor::actor_t *other = actor::get_collision(act);
if (other || (act->pos.x < min.x && (!(room::getDoors() & DOOR_XN) || (act->pos.y != 28) || (act->pos.z != room::getDoor(XN) * 4) || !(act->flags & FLAG_HERO))))
{
if (other)
other->push |= push(act, other, PUSH_XN);
if (other) {
uint8_t push_value = push(act, other, PUSH_XN);
if (push_value) other->push |= push_value;
}
act->pos.x += vel;
if (act->flags & FLAG_MOVING)
changeMoving(act);
@@ -1148,8 +1263,10 @@ namespace actor
actor::actor_t *other = actor::get_collision(act);
if (other || ((act->pos.x + act->size.x) > max.x && (!(room::getDoors() & DOOR_XP) || (act->pos.y != 28) || !(act->flags & FLAG_HERO))))
{
if (other)
other->push |= push(act, other, PUSH_XP);
if (other) {
uint8_t push_value = push(act, other, PUSH_XP);
if (push_value) other->push |= push_value;
}
act->pos.x -= vel;
if (act->flags & FLAG_MOVING)
changeMoving(act);
@@ -1169,7 +1286,7 @@ namespace actor
room::load(room::getExit(XP));
if (llevar_abad)
{
actor::remove(actor::find("ABAD"));
actor::sendToPurgatory(actor::find("ABAD"));
}
act->pos.x = room::getMin().x - 3;
act->pos.z = room::getDoor(XN) * 4;
@@ -1189,8 +1306,10 @@ namespace actor
actor::actor_t *other = actor::get_collision(act);
if (other || (act->pos.y < min.y && (!(room::getDoors() & DOOR_YN) || (act->pos.x != 28) || (act->pos.z != room::getDoor(YN) * 4) || !(act->flags & FLAG_HERO))))
{
if (other)
other->push |= push(act, other, PUSH_YN);
if (other) {
uint8_t push_value = push(act, other, PUSH_YN);
if (push_value) other->push |= push_value;
}
act->pos.y += vel;
if (act->flags & FLAG_MOVING)
changeMoving(act);
@@ -1225,8 +1344,10 @@ namespace actor
actor::actor_t *other = actor::get_collision(act);
if (other || ((act->pos.y + act->size.y) > max.y && (!(room::getDoors() & DOOR_YP) || (act->pos.x != 28) || !(act->flags & FLAG_HERO))))
{
if (other)
other->push |= push(act, other, PUSH_YP);
if (other) {
uint8_t push_value = push(act, other, PUSH_YP);
if (push_value) other->push |= push_value;
}
act->pos.y -= vel;
if (act->flags & FLAG_MOVING)
changeMoving(act);
@@ -1260,8 +1381,6 @@ namespace actor
// Si estic sobre el piso, no faig res
if (act->pos.z == 0)
{
if (act->flags&FLAG_HERO && falling_sound!=-1) { audio::stopChannel(falling_sound); falling_sound = -1; }
if ((act->flags & FLAG_MOVING) && (act->movement == MOV_Z))
changeMoving(act);
act->push &= ~PUSH_ZN;
@@ -1285,7 +1404,8 @@ namespace actor
if (is_above(act, act->below))
{
// ...li pase a ell el push, neteje el meu flag, canvie direcció si pertoca i me ane
act->push |= push(act, act->below, PUSH_ZN); // [RZC 20/09/2024] Canvie "act->below->push" per "act->push". Se li deu passar la reacció al que la inicia
uint8_t push_value = push(act, act->below, PUSH_ZN); // [RZC 20/09/2024] Canvie "act->below->push" per "act->push". Se li deu passar la reacció al que la inicia
if (push_value) act->push |= push_value;
act->push &= ~PUSH_ZN;
if ((act->flags & FLAG_MOVING) && (act->movement == MOV_Z))
changeMoving(act);
@@ -1302,12 +1422,13 @@ namespace actor
// Si sí que hi ha...
if (below)
{
if (act->flags&FLAG_HERO && falling_sound!=-1) { audio::stopChannel(falling_sound); falling_sound = -1; }
// ...el asociem...
act->below = below;
below->above = act;
// ... i li passem el push, netejem el meu flag i gonnem
act->push |= push(act, act->below, PUSH_ZN); // [RZC 20/09/2024] Canvie "act->below->push" per "act->push". Se li deu passar la reacció al que la inicia
uint8_t push_value = push(act, act->below, PUSH_ZN); // [RZC 20/09/2024] Canvie "act->below->push" per "act->push". Se li deu passar la reacció al que la inicia
if (push_value) act->push |= push_value;
act->push &= ~PUSH_ZN;
if ((act->flags & FLAG_MOVING) && (act->movement == MOV_Z))
changeMoving(act);
@@ -1349,6 +1470,7 @@ namespace actor
if (act == first)
{
push_sound_already_playing = false;
brilli_brilli = (brilli_brilli + 1) & 0x7;
}
@@ -1362,7 +1484,7 @@ namespace actor
{
if (act->name[0] == '_')
{
actor::remove(act);
actor::sendToPurgatory(act);
return;
}
else
@@ -1379,23 +1501,16 @@ namespace actor
act->anim_wait_count++;
}
if (act->flags & FLAG_HERO)
updateUserInput(act);
if (act->flags & FLAG_HERO) updateUserInput(act);
if (act->flags & FLAG_MOVING)
{
if (act->movement == MOV_HUNT && ((act->pos.x & 7) == 0 || (act->pos.y & 7) == 0))
changeMoving(act);
updateMoving(act);
}
if (act->flags & FLAG_GRAVITY)
act->push |= PUSH_ZN;
if (act->flags & FLAG_GRAVITY) act->push |= PUSH_ZN;
// if (act->flags & FLAG_PUSHABLE)
updatePush(act);
// if (act->flags & FLAG_GRAVITY) updateGravity(act);
// if (act->flags & FLAG_REACTIVE) updateReactive(act);
// act->push = PUSH_NONE;
if (!room_changed && update_all && next)
update(next);
@@ -1478,9 +1593,10 @@ namespace actor
if (editor::isEditing() && (act == selected) && modules::game::getSection() == modules::game::SECTION_ACTOR)
draw::swapcol(1, room::getColor(1)); // Si està seleccionat, que canvie de color
draw::stencil::set(act->tag);
draw::draw(x, y, act->bmp_rect.w, act->bmp_rect.h, act->bmp_rect.x + ao, act->bmp_rect.y + oo, flip);
if (!(act->flags & FLAG_SPECIAL) || !(act->name[0] == 'Y') || (brilli_brilli<4) )
draw::draw(x, y, act->bmp_rect.w, act->bmp_rect.h, act->bmp_rect.x + ao, act->bmp_rect.y + oo, flip);
draw::swapcol(1, room::getColor(0)); // Tornem al color per defecte
if (act->flags & FLAG_SPECIAL)
if ((act->flags & FLAG_SPECIAL) && (act->name[0] != 'A') && (act->name[0] != 'Z'))
{
draw::setSource(brilli);
const int dx = (act->bmp_rect.w - 22) >> 1;
@@ -1496,6 +1612,13 @@ namespace actor
draw::swapcol(1, room::getColor(0)); // Tornem al color per defecte
}
}
if ((act->flags & FLAG_HERO) && debug::isEnabled(DEBUG_ACTOR_FLAGS))
{
char tmp[100];
draw::print(SDL_itoa(act->flags, tmp, 2), 1, 1, LIGHT + WHITE, BLACK);
draw::swapcol(1, room::getColor(0)); // Tornem al color per defecte
}
if (draw_all && act->next)
draw(act->next);
}
@@ -1606,6 +1729,26 @@ namespace actor
free(act);
}
void sendToPurgatory(actor_t *act)
{
if (!act) return;
if (act->prev) act->prev->next = act->next;
if (act == first) first = act->next;
if (act == dirty) dirty = act->next;
if (act->next) act->next->prev = act->prev;
if (act == selected) selected = nullptr;
if (act->below) act->below->above = nullptr;
if (act->above) act->above->below = nullptr;
act->alive = false;
purgatory.push_back(act);
}
void cleanPurgatory()
{
for (auto act : purgatory) remove(act);
purgatory.clear();
}
void pick(actor_t *act)
{
if (!act)
@@ -1671,6 +1814,11 @@ namespace actor
{
return floating_editing;
}
void pauseWalkSound()
{
audio::pauseChannel(walk_channel);
}
namespace templates
{
std::vector<actor_t> templates;
@@ -1757,7 +1905,7 @@ namespace actor
std::vector<actor_t> actors;
for (auto act : templates)
{
if (act.template_category >= categories.size())
if (act.template_category >= (int)categories.size())
act.template_category = 0;
if (categories[act.template_category] == catname)
actors.push_back(act);
@@ -1783,7 +1931,7 @@ namespace actor
actor_t *getByName(const char *name)
{
for (int i = 0; i < templates.size(); ++i)
for (int i = 0; i < (int)templates.size(); ++i)
if (util::strcomp(name, templates[i].name))
return &templates[i];
// for (auto t : templates) if (util::strcomp(name, t.name)) return &t;
@@ -1837,9 +1985,9 @@ namespace actor
void swapCategories(const int a, const int b)
{
if (a >= categories.size() || a < 0)
if (a >= (int)categories.size() || a < 0)
return;
if (b >= categories.size() || b < 0)
if (b >= (int)categories.size() || b < 0)
return;
auto str = categories[a];
categories[a] = categories[b];
@@ -1878,13 +2026,35 @@ namespace actor
int skills = SKILL_NONE;
int parts = PART_NONE;
bool boosters_collected[100];
bool anbernics[10] = {false, false, false, false, false, false, false, false, false, false};
vec3_t first_pos = {0, 0, 0};
int first_orient = 0;
bool dead = false;
bool prologo = false;
int prologo_objects[4] = {PROLOGO_OBJECT_INITIAL, PROLOGO_OBJECT_INITIAL, PROLOGO_OBJECT_INITIAL, PROLOGO_OBJECT_INITIAL};
int num_prologo_objects=0;
void setPrologo(const bool value)
{
prologo = value;
}
const bool isPrologo()
{
return prologo;
}
void init(const bool complete)
{
actor::actor_t *hero = actor::create("HERO", {16, 32, 0}, {6, 6, 12}, "test.gif", {0, 32, 20, 32}, {-6, 38});
actor::actor_t *hero = nullptr;
if (prologo)
{
hero = actor::create("HERO", {16, 32, 0}, {6, 6, 8}, "gat.gif", {0, 0, 24, 28}, {-4, 32});
}
else
{
hero = actor::create("HERO", {16, 32, 0}, {6, 6, 12}, "test.gif", {0, 32, 20, 32}, {-6, 38});
}
hero->flags = FLAG_HERO | FLAG_PUSHABLE | FLAG_GRAVITY | FLAG_ORIENTABLE | FLAG_ANIMATED;
actor::setDirty(hero, true);
@@ -1896,11 +2066,17 @@ namespace actor
stats::reset();
lives = 8;
skills = SKILL_NONE;
if (prologo) skills &= SKILL_SHOES;
for (int i=0;i<4;++i) prologo_objects[i] = PROLOGO_OBJECT_INITIAL;
num_prologo_objects=0;
parts = PART_NONE;
for (int i = 0; i < 10; ++i)
anbernics[i] = false;
for (int i = 0; i < 100; ++i)
boosters_collected[i] = false;
brilli = draw::getSurface("objectes.gif");
if ( (config::getSoundMode()==SOUND_ALL) ) {
if ((config::getSoundMode() == SOUND_ALL))
{
walk_channel = audio::playSound("snd_walk.wav", SOUND_ALL, -1);
audio::pauseChannel(walk_channel);
}
@@ -1931,8 +2107,8 @@ namespace actor
{
return dead;
}
const int getBoosterFromString(const char *booster)
{
static const char *boostset_name[4] = {"RUN", "GOD", "JUMP", "LIVE"};
for (int i = 0; i < 4; ++i)
@@ -1988,7 +2164,7 @@ namespace actor
switch (getBoosterFromString(booster))
{
case BOOST_GOD:
boost_god = 99 * 2;
boost_god = 99 * 4;
break;
case BOOST_RUN:
boost_steps = 99 * 2;
@@ -2039,6 +2215,11 @@ namespace actor
boost_jumps--;
}
const bool hasBoostGod()
{
return boost_god > 0;
}
const int getSkillFromString(char *skill)
{
static const char *skillset_name[4] = {"SHOES", "GLOVES", "PANTS", "BAG"};
@@ -2077,7 +2258,12 @@ namespace actor
bool giveSkill(char *skill)
{
return giveSkill(getSkillFromString(skill));
const int skill_number = getSkillFromString(skill);
if (skill_number==SKILL_SHOES) modules::game::setMissatge(" JA TENS LES SABATES!- ARA JA POTS BOTAR!");
else if (skill_number==SKILL_GLOVES) modules::game::setMissatge(" JA TENS ELS GUANTS!- ARA JA POTS ESPENTAR!");
else if (skill_number==SKILL_PANTS) modules::game::setMissatge(" JA TENS ELS PANTALONS!- JA POTS AGAFAR COSES!");
else if (skill_number==SKILL_BAG) modules::game::setMissatge(" JA TENS LA MOTXILLA!- A ARREPLEGAR PECES!");
return giveSkill(skill_number);
}
bool dropSkill(int skill)
@@ -2139,8 +2325,13 @@ namespace actor
{
const int value = getPartFromString(part);
parts |= value;
if (value != 0)
stats::collectPart();
if (value != 0) stats::collectPart();
int num_parts = stats::getNumPartsCollected();
char text[] = " PECES ARREPLEGADES:- 0/6";
text[34] = num_parts + 48;
modules::game::setMissatge(text);
return value != 0;
}
@@ -2161,6 +2352,64 @@ namespace actor
return parts;
}
void pickAnbernic(char *name)
{
anbernics[name[8] - 48] = true;
int num_anbernics = getNumAmbernicsCollected();
if (num_anbernics==10)
{
modules::game::setMissatge(" HAS DESBLOQUEJAT- EL PROLOGO!");
config::setProgoloDesbloquejat();
}
else
{
char text[] = " ANBERNICS ARREPLEGADES:- 0/10";
text[36] = num_anbernics+48;
modules::game::setMissatge(text);
}
}
bool wasAnbernicCollected(char *name)
{
return anbernics[name[8] - 48];
}
int getNumAmbernicsCollected()
{
int count = 0;
for (auto anbernic : anbernics)
if (anbernic)
count++;
return count;
}
void pickPrologoObject(int which)
{
prologo_objects[which] = PROLOGO_OBJECT_PICKED;
}
void leavePrologoObject(int which)
{
prologo_objects[which] = PROLOGO_OBJECT_LEFT;
num_prologo_objects++;
}
const bool isCarryingPrologoObject()
{
for (auto object : prologo_objects) if (object==PROLOGO_OBJECT_PICKED) return true;
return false;
}
const int getPrologoObjectState(int which)
{
return prologo_objects[which];
}
const int getNumPrologoObjectsDone()
{
return num_prologo_objects;
}
void move(int *x, int *y, int *z)
{
actor_t *hero = actor::find("HERO");
@@ -2186,13 +2435,13 @@ namespace actor
int partsCollected = 0;
bool roomVisited[MAX_ROOMS];
int livesLost = 0;
int catsLifeOdds = 5;
int catsLifeOdds = 2;
uint32_t start_time = 0;
void reset()
{
partsCollected = livesLost = 0;
catsLifeOdds = 5;
catsLifeOdds = 2;
for (int i = 0; i < MAX_ROOMS; ++i)
roomVisited[i] = false;
start_time = SDL_GetTicks();

View File

@@ -33,6 +33,7 @@
#define PUSH_ZP 16
#define PUSH_ZN 32
#define PUSH_KILL 64
#define PUSH_DOUBLE 128
// Tipus de moviment de l'actor
#define MOV_NONE 0 // Ningun
@@ -109,6 +110,7 @@ namespace actor
int tag;
int template_category;
bool alive;
};
void resetTag();
@@ -169,6 +171,10 @@ namespace actor
void remove(actor_t *act);
void sendToPurgatory(actor_t *act);
void cleanPurgatory();
void pick(actor_t *act);
actor_t *getPicked();
@@ -179,6 +185,8 @@ namespace actor
const bool getFloatingEditing();
void pauseWalkSound();
namespace templates
{
void load();
@@ -196,6 +204,17 @@ namespace actor
namespace hero
{
#define PROLOGO_OBJECT_INITIAL 0
#define PROLOGO_OBJECT_PICKED 1
#define PROLOGO_OBJECT_LEFT 2
#define PROLOGO_SHOES 0
#define PROLOGO_PANTS 1
#define PROLOGO_GLOVES 2
#define PROLOGO_BAG 3
void setPrologo(const bool value);
const bool isPrologo();
void init(const bool complete = true);
int getLives();
void setLives(int value);
@@ -214,6 +233,7 @@ namespace actor
void useBoostGod();
void useBoostRun();
void useBoostJump();
const bool hasBoostGod();
const int getSkillFromString(char *skill);
const char *getSkillName(int skill);
@@ -231,6 +251,16 @@ namespace actor
bool wasPartCollected(char *part);
int getParts();
void pickAnbernic(char *name);
bool wasAnbernicCollected(char *name);
int getNumAmbernicsCollected();
void pickPrologoObject(int which);
void leavePrologoObject(int which);
const bool isCarryingPrologoObject();
const int getPrologoObjectState(int which);
const int getNumPrologoObjectsDone();
void move(int *x, int *y, int *z);
void setFirstPos();
}

View File

@@ -6,8 +6,9 @@ namespace config
{
bool musicEnabled = true;
int soundMode = SOUND_ALL;
uint8_t keys[6] = {SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_SPACE, SDL_SCANCODE_RETURN};
int8_t pad_btns[6] = {0, 1, 2, 3, 4, 5};
uint8_t keys[7] = {SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_SPACE, SDL_SCANCODE_RETURN, SDL_SCANCODE_ESCAPE};
int8_t pad_btns[7] = {SDL_CONTROLLER_BUTTON_DPAD_UP, SDL_CONTROLLER_BUTTON_DPAD_DOWN, SDL_CONTROLLER_BUTTON_DPAD_LEFT, SDL_CONTROLLER_BUTTON_DPAD_RIGHT, SDL_CONTROLLER_BUTTON_A, SDL_CONTROLLER_BUTTON_B, SDL_CONTROLLER_BUTTON_START};
bool prologo_desbloquejat = false;
void setMusic(const bool value)
{
@@ -46,7 +47,7 @@ namespace config
void defineKey(const int which, const int key)
{
static const char* nomtecles[6] = {"keyup", "keydown", "keyleft", "keyright", "keyjump", "keypick"};
static const char* nomtecles[7] = {"keyup", "keydown", "keyleft", "keyright", "keyjump", "keypick", "keymenu"};
keys[which] = key;
char tmp[5];
file::setConfigValue(nomtecles[which], SDL_itoa(key, tmp, 10));
@@ -59,7 +60,7 @@ namespace config
void definePadBtn(const int which, const int btn)
{
static const char* nombotons[6] = {"btnup", "btndown", "btnleft", "btnright", "btnjump", "btnpick"};
static const char* nombotons[7] = {"btnup", "btndown", "btnleft", "btnright", "btnjump", "btnpick", "btnmenu"};
pad_btns[which] = btn;
char tmp[5];
file::setConfigValue(nombotons[which], SDL_itoa(btn, tmp, 10));
@@ -69,4 +70,16 @@ namespace config
{
return pad_btns[which];
}
void setProgoloDesbloquejat()
{
prologo_desbloquejat = true;
file::setConfigValue("prologo", "unlocked");
}
const bool isProgoloDesbloquejat()
{
return prologo_desbloquejat;
}
}

View File

@@ -5,7 +5,6 @@ namespace config
#define SOUND_ALL 0
#define SOUND_BASIC 1
#define SOUND_NONE 2
#define SOUND_MUSIC 2
#define KEY_UP 0
#define KEY_DOWN 1
@@ -13,6 +12,7 @@ namespace config
#define KEY_RIGHT 3
#define KEY_JUMP 4
#define KEY_PICK 5
#define KEY_MENU 6
void setMusic(const bool value);
void toggleMusic();
@@ -28,4 +28,6 @@ namespace config
void definePadBtn(const int which, const int btn);
const int getPadBtn(const int which);
void setProgoloDesbloquejat();
const bool isProgoloDesbloquejat();
}

View File

@@ -173,7 +173,7 @@ namespace console
const int getIndexFromString(char *str, std::vector<const char*> list)
{
//static const char *skillset_name[4] = {"SHOES", "GLOVES", "PANTS", "BAG"};
for (int i=0;i<list.size();++i)
for (int i=0; i<(int)list.size(); ++i)
{
if (strcmp(str, list[i])==0)
{
@@ -264,7 +264,7 @@ namespace console
strcpy(msg, "ERROR: Nothing to show.");
} else {
strcpy(msg, "Ok.");
const int value = getIndexFromString(tokens[1], {"NOTHING", "ACTOR-POS"});
const int value = getIndexFromString(tokens[1], {"NOTHING", "POS", "FLAGS"});
if (value==-1)
strcpy(msg, "ERROR: Cannot show that.");
else
@@ -276,7 +276,7 @@ namespace console
strcpy(msg, "ERROR: Nothing to hide.");
} else {
strcpy(msg, "Ok.");
const int value = getIndexFromString(tokens[1], {"NOTHING", "ACTOR-POS"});
const int value = getIndexFromString(tokens[1], {"NOTHING", "POS", "FLAGS"});
if (value==-1)
strcpy(msg, "ERROR: Cannot hide that.");
else
@@ -309,10 +309,10 @@ namespace console
strcpy(msg, "Exits the game.");
break;
case CMD_SHOW:
strcpy(msg, "NOTHING ACTOR-POS");
strcpy(msg, "NOTHING POS FLAGS");
break;
case CMD_HIDE:
strcpy(msg, "NOTHING ACTOR-POS");
strcpy(msg, "NOTHING POS FLAGS");
break;
}

View File

@@ -2,7 +2,7 @@
namespace debug
{
bool debug_info[2] {false, false};
bool debug_info[3] {false, false, false};
void enable(int info_type)
{

View File

@@ -3,6 +3,7 @@
namespace debug
{
#define DEBUG_ACTOR_POS 1
#define DEBUG_ACTOR_FLAGS 2
void enable(int info_type);
void disable(int info_type);

345
source/jail_audio.cpp Normal file
View File

@@ -0,0 +1,345 @@
#ifndef JA_USESDLMIXER
#include "jail_audio.h"
#include "stb_vorbis.c"
#include <SDL2/SDL.h>
#include <stdio.h>
#define JA_MAX_SIMULTANEOUS_CHANNELS 5
struct JA_Sound_t {
Uint32 length {0};
Uint8* buffer {NULL};
};
struct JA_Channel_t {
JA_Sound_t *sound;
int pos {0};
int times {0};
JA_Channel_state state { JA_CHANNEL_FREE };
};
struct JA_Music_t {
int samples {0};
int pos {0};
int times {0};
short* output {NULL};
JA_Music_state state {JA_MUSIC_INVALID};
};
JA_Music_t *current_music{NULL};
JA_Channel_t channels[JA_MAX_SIMULTANEOUS_CHANNELS];
int JA_freq {48000};
SDL_AudioFormat JA_format {AUDIO_S16};
Uint8 JA_channels {2};
int JA_musicVolume = 128;
int JA_soundVolume = 64;
bool JA_musicEnabled = true;
bool JA_soundEnabled = true;
SDL_AudioDeviceID sdlAudioDevice = 0;
void audioCallback(void * userdata, uint8_t * stream, int len) {
SDL_memset(stream, 0, len);
if (current_music != NULL && current_music->state == JA_MUSIC_PLAYING) {
const int size = SDL_min(len, current_music->samples*2-current_music->pos);
SDL_MixAudioFormat(stream, (Uint8*)(current_music->output+current_music->pos), AUDIO_S16, size, JA_musicVolume);
current_music->pos += size/2;
if (size < len) {
if (current_music->times != 0) {
SDL_MixAudioFormat(stream+size, (Uint8*)current_music->output, AUDIO_S16, len-size, JA_musicVolume);
current_music->pos = (len-size)/2;
if (current_music->times > 0) current_music->times--;
} else {
current_music->pos = 0;
current_music->state = JA_MUSIC_STOPPED;
}
}
}
// Mixar els channels mi amol
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) {
if (channels[i].state == JA_CHANNEL_PLAYING) {
const int size = SDL_min(len, channels[i].sound->length - channels[i].pos);
SDL_MixAudioFormat(stream, channels[i].sound->buffer + channels[i].pos, AUDIO_S16, size, JA_soundVolume);
channels[i].pos += size;
if (size < len) {
if (channels[i].times != 0) {
SDL_MixAudioFormat(stream + size, channels[i].sound->buffer, AUDIO_S16, len-size, JA_soundVolume);
channels[i].pos = len-size;
if (channels[i].times > 0) channels[i].times--;
} else {
JA_StopChannel(i);
}
}
}
}
}
void JA_Init(const int freq, const SDL_AudioFormat format, const int channels) {
JA_freq = freq;
JA_format = format;
JA_channels = channels;
SDL_AudioSpec audioSpec{JA_freq, JA_format, JA_channels, 0, 1024, 0, 0, audioCallback, NULL};
if (sdlAudioDevice != 0) SDL_CloseAudioDevice(sdlAudioDevice);
sdlAudioDevice = SDL_OpenAudioDevice(NULL, 0, &audioSpec, NULL, 0);
SDL_PauseAudioDevice(sdlAudioDevice, 0);
}
void JA_Quit() {
SDL_PauseAudioDevice(sdlAudioDevice, 1);
if (sdlAudioDevice != 0) SDL_CloseAudioDevice(sdlAudioDevice);
sdlAudioDevice = 0;
}
JA_Music_t *JA_LoadMusic(Uint8* buffer, Uint32 length)
{
int chan, samplerate;
JA_Music_t *music = new JA_Music_t();
music->samples = stb_vorbis_decode_memory(buffer, length, &chan, &samplerate, &music->output);
// [RZC 28/08/22] Abans el descomprimiem mentre el teniem obert
// music->samples = stb_vorbis_decode_filename(filename, &chan, &samplerate, &music->output);
SDL_AudioCVT cvt;
SDL_BuildAudioCVT(&cvt, AUDIO_S16, chan, samplerate, JA_format, JA_channels, JA_freq);
if (cvt.needed) {
cvt.len = music->samples * chan * 2;
cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult);
SDL_memcpy(cvt.buf, music->output, cvt.len);
SDL_ConvertAudio(&cvt);
free(music->output);
music->output = (short*)cvt.buf;
}
music->pos = 0;
music->state = JA_MUSIC_STOPPED;
return music;
}
JA_Music_t *JA_LoadMusic(const char* filename)
{
// [RZC 28/08/22] Carreguem primer el arxiu en memòria i després el descomprimim. Es algo més rapid.
FILE *f = fopen(filename, "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
Uint8 *buffer = (Uint8*)malloc(fsize + 1);
if (fread(buffer, fsize, 1, f)!=1) return NULL;
fclose(f);
JA_Music_t *music = JA_LoadMusic(buffer, fsize);
free(buffer);
return music;
}
void JA_PlayMusic(JA_Music_t *music, const int loop)
{
if (!JA_musicEnabled) return;
if (current_music != NULL) {
current_music->pos = 0;
current_music->state = JA_MUSIC_STOPPED;
}
current_music = music;
current_music->pos = 0;
current_music->state = JA_MUSIC_PLAYING;
current_music->times = loop;
}
void JA_PauseMusic()
{
if (!JA_musicEnabled) return;
if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return;
current_music->state = JA_MUSIC_PAUSED;
}
void JA_ResumeMusic()
{
if (!JA_musicEnabled) return;
if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return;
current_music->state = JA_MUSIC_PLAYING;
}
void JA_StopMusic()
{
if (!JA_musicEnabled) return;
if (current_music == NULL || current_music->state == JA_MUSIC_INVALID) return;
current_music->pos = 0;
current_music->state = JA_MUSIC_STOPPED;
}
JA_Music_state JA_GetMusicState() {
if (!JA_musicEnabled) return JA_MUSIC_DISABLED;
if (current_music == NULL) return JA_MUSIC_INVALID;
return current_music->state;
}
void JA_DeleteMusic(JA_Music_t *music) {
if (current_music == music) current_music = NULL;
free(music->output);
delete music;
}
int JA_SetMusicVolume(int volume)
{
JA_musicVolume = volume > 128 ? 128 : volume < 0 ? 0 : volume;
return JA_musicVolume;
}
void JA_EnableMusic(const bool value)
{
if (!value && current_music != NULL && current_music->state==JA_MUSIC_PLAYING) JA_StopMusic();
JA_musicEnabled = value;
}
JA_Sound_t *JA_NewSound(Uint8* buffer, Uint32 length) {
JA_Sound_t *sound = new JA_Sound_t();
sound->buffer = buffer;
sound->length = length;
return sound;
}
JA_Sound_t *JA_LoadSound(uint8_t* buffer, uint32_t size) {
JA_Sound_t *sound = new JA_Sound_t();
SDL_AudioSpec wavSpec;
SDL_LoadWAV_RW(SDL_RWFromMem(buffer, size),1, &wavSpec, &sound->buffer, &sound->length);
SDL_AudioCVT cvt;
SDL_BuildAudioCVT(&cvt, wavSpec.format, wavSpec.channels, wavSpec.freq, JA_format, JA_channels, JA_freq);
cvt.len = sound->length;
cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult);
SDL_memcpy(cvt.buf, sound->buffer, sound->length);
SDL_ConvertAudio(&cvt);
SDL_FreeWAV(sound->buffer);
sound->buffer = cvt.buf;
sound->length = cvt.len_cvt;
return sound;
}
JA_Sound_t *JA_LoadSound(const char* filename) {
JA_Sound_t *sound = new JA_Sound_t();
SDL_AudioSpec wavSpec;
SDL_LoadWAV(filename, &wavSpec, &sound->buffer, &sound->length);
SDL_AudioCVT cvt;
SDL_BuildAudioCVT(&cvt, wavSpec.format, wavSpec.channels, wavSpec.freq, JA_format, JA_channels, JA_freq);
cvt.len = sound->length;
cvt.buf = (Uint8 *) SDL_malloc(cvt.len * cvt.len_mult);
SDL_memcpy(cvt.buf, sound->buffer, sound->length);
SDL_ConvertAudio(&cvt);
SDL_FreeWAV(sound->buffer);
sound->buffer = cvt.buf;
sound->length = cvt.len_cvt;
return sound;
}
int JA_PlaySound(JA_Sound_t *sound, const int loop)
{
if (!JA_soundEnabled) return -1;
int channel = 0;
while (channel < JA_MAX_SIMULTANEOUS_CHANNELS && channels[channel].state != JA_CHANNEL_FREE) { channel++; }
if (channel == JA_MAX_SIMULTANEOUS_CHANNELS) channel = 0;
channels[channel].sound = sound;
channels[channel].times = loop;
channels[channel].pos = 0;
channels[channel].state = JA_CHANNEL_PLAYING;
return channel;
}
void JA_DeleteSound(JA_Sound_t *sound)
{
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) {
if (channels[i].sound == sound) JA_StopChannel(i);
}
SDL_free(sound->buffer);
delete sound;
}
void JA_PauseChannel(const int channel)
{
if (!JA_soundEnabled) return;
if (channel == -1) {
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) {
if (channels[i].state == JA_CHANNEL_PLAYING) channels[i].state = JA_CHANNEL_PAUSED;
}
} else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) {
if (channels[channel].state == JA_CHANNEL_PLAYING) channels[channel].state = JA_CHANNEL_PAUSED;
}
}
void JA_ResumeChannel(const int channel)
{
if (!JA_soundEnabled) return;
if (channel == -1) {
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) {
if (channels[i].state == JA_CHANNEL_PAUSED) channels[i].state = JA_CHANNEL_PLAYING;
}
} else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) {
if (channels[channel].state == JA_CHANNEL_PAUSED) channels[channel].state = JA_CHANNEL_PLAYING;
}
}
void JA_StopChannel(const int channel)
{
if (!JA_soundEnabled) return;
if (channel == -1) {
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++) {
channels[i].state = JA_CHANNEL_FREE;
channels[i].pos = 0;
channels[i].sound = NULL;
}
} else if (channel >= 0 && channel < JA_MAX_SIMULTANEOUS_CHANNELS) {
channels[channel].state = JA_CHANNEL_FREE;
channels[channel].pos = 0;
channels[channel].sound = NULL;
}
}
JA_Channel_state JA_GetChannelState(const int channel)
{
if (!JA_soundEnabled) return JA_SOUND_DISABLED;
if (channel < 0 || channel >= JA_MAX_SIMULTANEOUS_CHANNELS) return JA_CHANNEL_INVALID;
return channels[channel].state;
}
int JA_SetSoundVolume(int volume)
{
JA_soundVolume = volume > 128 ? 128 : volume < 0 ? 0 : volume;
return JA_soundVolume;
}
void JA_EnableSound(const bool value)
{
for (int i = 0; i < JA_MAX_SIMULTANEOUS_CHANNELS; i++)
{
if (channels[i].state == JA_CHANNEL_PLAYING) JA_StopChannel(i);
}
JA_soundEnabled = value;
}
int JA_SetVolume(int volume)
{
JA_musicVolume = volume > 128 ? 128 : volume < 0 ? 0 : volume;
JA_soundVolume = JA_musicVolume/2;
return JA_musicVolume;
}
#endif

36
source/jail_audio.h Normal file
View File

@@ -0,0 +1,36 @@
#pragma once
#include <SDL2/SDL.h>
enum JA_Channel_state { JA_CHANNEL_INVALID, JA_CHANNEL_FREE, JA_CHANNEL_PLAYING, JA_CHANNEL_PAUSED, JA_SOUND_DISABLED };
enum JA_Music_state { JA_MUSIC_INVALID, JA_MUSIC_PLAYING, JA_MUSIC_PAUSED, JA_MUSIC_STOPPED, JA_MUSIC_DISABLED };
struct JA_Sound_t;
struct JA_Music_t;
void JA_Init(const int freq, const SDL_AudioFormat format, const int channels);
void JA_Quit();
JA_Music_t *JA_LoadMusic(const char* filename);
JA_Music_t *JA_LoadMusic(Uint8* buffer, Uint32 length);
void JA_PlayMusic(JA_Music_t *music, const int loop = -1);
void JA_PauseMusic();
void JA_ResumeMusic();
void JA_StopMusic();
JA_Music_state JA_GetMusicState();
void JA_DeleteMusic(JA_Music_t *music);
int JA_SetMusicVolume(int volume);
void JA_EnableMusic(const bool value);
JA_Sound_t *JA_NewSound(Uint8* buffer, Uint32 length);
JA_Sound_t *JA_LoadSound(Uint8* buffer, Uint32 length);
JA_Sound_t *JA_LoadSound(const char* filename);
int JA_PlaySound(JA_Sound_t *sound, const int loop = 0);
void JA_PauseChannel(const int channel);
void JA_ResumeChannel(const int channel);
void JA_StopChannel(const int channel);
JA_Channel_state JA_GetChannelState(const int channel);
void JA_DeleteSound(JA_Sound_t *sound);
int JA_SetSoundVolume(int volume);
void JA_EnableSound(const bool value);
int JA_SetVolume(int volume);

View File

@@ -1,6 +1,6 @@
#include "jaudio.h"
#include "jail_audio.h"
#include <SDL2/SDL.h>
#include <SDL2/SDL_mixer.h>
#include <stdio.h>
#include "jfile.h"
#include <vector>
@@ -11,28 +11,29 @@ namespace audio
struct sound_cache_t
{
std::string name;
Mix_Chunk *chunk;
JA_Sound_t *chunk;
};
char *music_buffer = nullptr;
Mix_Music *music = nullptr;
//char *music_buffer = nullptr;
JA_Music_t *music = nullptr;
std::vector<sound_cache_t> sounds;
std::string musica_actual = "";
// Inicialitza el sistema de só
void init()
{
int result = Mix_Init(MIX_INIT_OGG | MIX_INIT_WAVPACK);
// Al final he ficat la configuració automàtica i au. Si en el futur necesitem canviar-ho pos se canvia
result = Mix_OpenAudio(48000, AUDIO_S16, 2, 512);
JA_Init(48000, AUDIO_S16, 2);
//Mix_Init(MIX_INIT_OGG);// | MIX_INIT_WAVPACK);
//Mix_OpenAudio(48000, AUDIO_S16, 2, 512);
}
// Tanca el sistema de só (no shit, sherlock)
void quit()
{
for (auto sound : sounds) Mix_FreeChunk(sound.chunk);
if (music) JA_DeleteMusic(music);
for (auto sound : sounds) JA_DeleteSound(sound.chunk); // Mix_FreeChunk(sound.chunk);
sounds.clear();
Mix_CloseAudio();
JA_Quit(); // Mix_CloseAudio();
}
// Comença a reproduïr la música en questió
@@ -40,46 +41,49 @@ namespace audio
{
if (!config::isMusicEnabled()) return;
// Si hi havia musica carregada, alliberem memòria
if (music_buffer) free(music_buffer);
if (music) Mix_FreeMusic(music);
//if (music_buffer) free(music_buffer);
if (music) JA_DeleteMusic(music); //Mix_FreeMusic(music);
int size;
music_buffer = file::getFileBuffer(filename, size);
auto rwops = SDL_RWFromMem(music_buffer, size);
auto mus = Mix_LoadMUS_RW(rwops, 1);
char *buffer = file::getFileBuffer(filename, size);
music = JA_LoadMusic((uint8_t*)buffer, size);
free(buffer);
//auto rwops = SDL_RWFromMem(music_buffer, size);
//auto mus = Mix_LoadMUS_RW(rwops, 1);
//free(music_buffer); // [RZC 03/10/2024] Si allibere el buffer, no funciona la música. Porca miseria! Per aixó l'allibere abans de carregar si ja estava usat.
Mix_PlayMusic((Mix_Music *)mus, loop);
//Mix_PlayMusic((Mix_Music *)mus, loop);
JA_PlayMusic(music, loop);
musica_actual = filename;
}
// Pausa la música que està sonant ara
void pauseMusic()
{
Mix_PauseMusic();
JA_PauseMusic(); //Mix_PauseMusic();
}
// Continua la música pausada
void resumeMusic()
{
if (!config::isMusicEnabled()) return;
Mix_ResumeMusic();
JA_ResumeMusic(); //Mix_ResumeMusic();
}
// Para la música que estava sonant
void stopMusic()
{
Mix_HaltMusic();
JA_StopMusic(); //Mix_HaltMusic();
musica_actual = "";
}
// Obté el estat actual de la música
const music_state getMusicState()
{
if (Mix_PausedMusic())
if (JA_GetMusicState() == JA_MUSIC_PAUSED)
{
return MUSIC_PAUSED;
}
else if (Mix_PlayingMusic())
else if (JA_GetMusicState() == JA_MUSIC_PLAYING)
{
return MUSIC_PLAYING;
}
@@ -102,8 +106,11 @@ namespace audio
{
int size;
char *buffer = file::getFileBuffer(filename, size);
auto chunk = Mix_LoadWAV_RW(SDL_RWFromMem(buffer, size), 1);
if (!chunk) printf("ERROR: %s\n", SDL_GetError());
auto chunk = JA_LoadSound((uint8_t *)buffer, size);
free(buffer);
//auto chunk = Mix_LoadWAV_RW(SDL_RWFromMem(buffer, size), 1);
//if (!chunk) printf("ERROR: %s\n", SDL_GetError());
sound_cache_t sound = { filename, chunk };
sounds.push_back(sound);
}
@@ -114,7 +121,7 @@ namespace audio
if (priority < config::getSoundMode()) return -1;
for (auto sound : sounds)
{
if (sound.name == name) return Mix_PlayChannel(-1, sound.chunk, loop);
if (sound.name == name) return JA_PlaySound(sound.chunk, loop); // Mix_PlayChannel(-1, sound.chunk, loop);
}
return -1;
}
@@ -123,37 +130,37 @@ namespace audio
void pauseChannel(const int channel)
{
if (channel == -1) return;
Mix_Pause(channel);
JA_PauseChannel(channel); // Mix_Pause(channel);
}
// Continua un canal pausat
void resumeChannel(const int channel)
{
if (channel == -1) return;
Mix_Resume(channel);
JA_ResumeChannel(channel); // Mix_Resume(channel);
}
// Para un canal que estava reproduïnt un só
void stopChannel(const int channel)
{
if (channel == -1) return;
Mix_HaltChannel(channel);
JA_StopChannel(channel); // Mix_HaltChannel(channel);
}
// Para tots els canals
void stopAllChannel()
{
Mix_HaltChannel(-1);
JA_StopChannel(-1); // Mix_HaltChannel(-1);
}
// Obté l'estat d'un canal
const channel_state getChannelState(const int channel)
{
if (Mix_Paused(channel))
if (JA_GetChannelState(channel) == JA_CHANNEL_PAUSED)
{
return CHANNEL_PAUSED;
}
else if (Mix_Playing(channel))
else if (JA_GetChannelState(channel) == JA_CHANNEL_PLAYING)
{
return CHANNEL_PLAYING;
}
@@ -166,6 +173,6 @@ namespace audio
// Estableix el volum general
const int setVolume(int volume)
{
return Mix_Volume(-1, volume);
return JA_SetVolume(volume); // Mix_Volume(-1, volume);
}
}

View File

@@ -15,11 +15,15 @@ namespace draw
SDL_Renderer *sdl_renderer = nullptr; // El renderer de SDL
SDL_Texture *sdl_texture = nullptr; // La textura de SDL a la que pintarem la nostra superficie "screen" i que despres volcarem a pantalla
SDL_Rect dest_rect = {0, 0, 320, 240};
static int fullscreen_scale = 1;
static int screen_zoom = 1;
static bool screen_fullscreen = false;
static int screen_width = 320;
static int screen_height = 240;
std::string screen_title = "";
static int screen_mode = SCREEN_MODE_NORMAL;
surface *screen = nullptr; // La superficie screen, que representa la pantalla. Se crea i destrueix internament
surface *destination = nullptr; // Punter a la actual superficie de destí
@@ -89,8 +93,39 @@ namespace draw
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, screen_width, screen_height);
SDL_RendererInfo info;
const int num_render_drivers = SDL_GetNumRenderDrivers();
printf("Available renderers:\n");
for (int i=0; i<num_render_drivers; ++i)
{
SDL_GetRenderDriverInfo(i, &info);
printf(" - %i: %s\n", i, info.name);
}
SDL_GetRendererInfo(sdl_renderer, &info);
printf("\nRenderer: %s\n", info.name);
SDL_ShowCursor(false);
if (screen_fullscreen)
{
int w, h;
SDL_GetWindowSize(sdl_window, &w, &h);
fullscreen_scale = h/screen_height;
dest_rect.w = screen_width * fullscreen_scale;
dest_rect.h = screen_height * fullscreen_scale;
dest_rect.x = (w - dest_rect.w)/2;
dest_rect.y = (h - dest_rect.h)/2;
}
else
{
dest_rect.x = dest_rect.y = 0;
dest_rect.w = screen_width * zoom;
dest_rect.h = screen_height * zoom;
}
// Establim el tamany "logic", indepndent del tamany de finestra
SDL_RenderSetLogicalSize(sdl_renderer, width, height);
//SDL_RenderSetLogicalSize(sdl_renderer, width, height);
// Creem la superficie "screen" i la establim com a superficie destinació
screen = createSurface(width, height);
@@ -103,7 +138,8 @@ namespace draw
char *p = buffer;
char *n = buffer;
while (*n!=0) {
while (*n!='\n') n++; *n=0;
while (*n!='\n') n++;
*n=0;
loadSurface(p);
p=++n;
}
@@ -151,8 +187,27 @@ namespace draw
sdl_renderer = SDL_CreateRenderer(sdl_window, -1, 0);
sdl_texture = SDL_CreateTexture(sdl_renderer, SDL_PIXELFORMAT_ARGB8888, SDL_TEXTUREACCESS_STREAMING, screen_width, screen_height);
SDL_ShowCursor(false);
if (screen_fullscreen)
{
int w, h;
SDL_GetWindowSize(sdl_window, &w, &h);
fullscreen_scale = h/screen_height;
dest_rect.w = screen_width * fullscreen_scale;
dest_rect.h = screen_height * fullscreen_scale;
dest_rect.x = (w - dest_rect.w)/2;
dest_rect.y = (h - dest_rect.h)/2;
}
else
{
dest_rect.x = dest_rect.y = 0;
dest_rect.w = screen_width * zoom;
dest_rect.h = screen_height * zoom;
}
// Establim el tamany "logic", indepndent del tamany de finestra
SDL_RenderSetLogicalSize(sdl_renderer, screen_width, screen_height);
//SDL_RenderSetLogicalSize(sdl_renderer, screen_width, screen_height);
}
void setZoom(const int value)
@@ -202,6 +257,23 @@ namespace draw
return screen_zoom;
}
void toggleScreenMode()
{
screen_mode++;
if (screen_mode == SCREEN_MODE_NUM_MODES) screen_mode = 0;
//reinit();
}
void setScreenMode(const int value)
{
screen_mode = value;
}
const int getScreenMode()
{
return screen_mode;
}
// Crea una superficie i torna un punter a ella
surface *createSurface(const uint16_t w, const uint16_t h)
{
@@ -614,7 +686,8 @@ namespace draw
const uint32_t size = screen->w * screen->h; // tamany de la superficie
// Bloquejem la textura SDL i agafem els seus pixels (son enters de 32 bits amb format 0xAARRGGBB)
int result = SDL_LockTexture(sdl_texture, NULL, (void **)&sdl_pixels, &sdl_pitch);
//int result =
SDL_LockTexture(sdl_texture, NULL, (void **)&sdl_pixels, &sdl_pitch);
// Cada pixel de la superficie "screen" es un enter de 8 bits que representa un index en la paleta de colors
// Per tant, per a pintar en la textura SDL, pillem el color de la paleta que correspon al index en "screen"
@@ -627,9 +700,35 @@ namespace draw
// Desbloquejem la textura
SDL_UnlockTexture(sdl_texture);
// Pintem la textura a pantalla
SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, NULL);
if (screen_fullscreen)
{
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 255);
SDL_RenderClear(sdl_renderer);
}
// Pintem la textura a pantalla
SDL_RenderCopy(sdl_renderer, sdl_texture, NULL, &dest_rect);
if (screen_mode & SCREEN_MODE_SCANLINES)
{
if (screen_zoom>=3 || screen_fullscreen)
{
int zoom = screen_fullscreen ? fullscreen_scale : screen_zoom;
SDL_SetRenderDrawBlendMode(sdl_renderer, SDL_BLENDMODE_BLEND);
for (int y=0; y<screen_height; ++y)
{
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 192);
SDL_RenderDrawLine(sdl_renderer, dest_rect.x, dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, dest_rect.y + y*zoom);
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 96);
if (zoom>3) SDL_RenderDrawLine(sdl_renderer, dest_rect.x, 1+dest_rect.y + y*zoom, dest_rect.x + dest_rect.w, 1+dest_rect.y + y*zoom);
}
SDL_SetRenderDrawColor(sdl_renderer, 0, 0, 0, 16);
for (int x=0; x<screen_width; ++x)
{
SDL_RenderDrawLine(sdl_renderer, dest_rect.x + x*zoom, dest_rect.y, dest_rect.x + x*zoom, dest_rect.y + dest_rect.h);
}
}
}
// I ho presentem
SDL_RenderPresent(sdl_renderer);
}

View File

@@ -13,6 +13,12 @@
#define FONT_ZOOM_HORIZONTAL 2
#define FONT_ZOOM_BOTH 3
#define SCREEN_MODE_NORMAL 0
#define SCREEN_MODE_SCANLINES 1
#define SCREEN_MODE_FOSFORO 2
#define SCREEN_MODE_SCANFOS 3
#define SCREEN_MODE_NUM_MODES 4
// Unitat per a la gestió dels recursos gràfics i dibuixat en pantalla
namespace draw
{
@@ -44,6 +50,10 @@ namespace draw
const bool getFullscreen();
const int getZoom();
void toggleScreenMode();
void setScreenMode(const int value);
const int getScreenMode();
/// @brief Crea una superficie i torna un punter a ella
/// @param w ample de la superficie
/// @param h alt de la superficie

Some files were not shown because too many files have changed in this diff Show More