Bien, ya hemos aprendido las reglas básicas del Decorate. Ahora vamos a crear nuestro primer monstruo, que aterrorizará a los marines en cuanto le vean... Por lo demás, deberíamos recordar que ciertos Code Pointers solamente funcionarán en el Community Build
de Zdoom, o incluso en GZdoom.
Entonces, ¿empezamos?
Lo que vamos a crear aquí será un zombi que disparará unas cargas de plasma personalizadas. ¿A que mola? Bueno, pues vamos a ello; cuanto antes, mejor.
Lo primero de todo y más importante, escribiremos ACTOR
, el nombre del nuevo monstruo y su número de identificación —por si queremos ponerlo en un mapa desde un editor como DoomBuilder o Wadauthor—. A nuestro pequeño amigo zombi le llamaremos "Plasmozombie" y le asignaremos el número 20002.
ACTOR PlasmoZombie 20002 {
Después ponemos las propiedades del monstruo en cuestión. Lo que especificaremos en el lump será "haz que mi zombi mida 56 píxeles de alto, ocupe 32 píxeles de radio, tenga 30 puntos de vida, corra a 10 de velocidad, y que sea fácil hacerle chillar COMO UNA CERDILLA, EHEHEHEHEHEH"..., perdón. En fin, lo que deberemos escribir será lo siguiente:
Health 30 PainChance 100 Speed 10 Radius 32 Height 56
Bueno, ya le hemos puesto la vida que tendrá —Health—, la velocidad a la que se moverá —Speed—, sus medidas —Height y Radius— y la probabilidad de que chille y se lamente al ser herido —PainChance—. Pero lo tenemos que completar con más cosas, para que sea un monstruo totalmente funcional. Añadimos pues lo siguiente:
SeeSound "grunt/sight" PainSound "grunt/pain" DeathSound "grunt/death" ActiveSound "grunt/active" Obituary "%o ha sido derretido por un zombi" MissileType PersoPlasma Solid DropItem PlasmaCell
SeeSound es el sonido que emitirá el monstruo al ver al jugador; o sea, el rugido del zombi, el "bisbiseo" del cacodemonio... PainSound indica su quejido al recibir daño, y DeathSound el sonido que hará al morir. ActiveSound, por último, corresponde a esos sonidos ambientales que escuchamos cuando hay un monstruo activo en las cercanías; en este caso, el zombi hará raar...
Luego tenemos Obituary, que indica qué mensaje aparecerá cuando este bicho nos mate. Ahí ponemos %o para definir el nombre del jugador.
Y finalmente tenemos MissileType, que define el misil o proyectil que va a lanzar el monstruo en sus ataques; en este caso, la "PersoPlasma". Por lo demás, le ponemos la característica Solid para que nos bloquee el paso, y DropItem PlasmaCell para que deje una célula de plasma al morir.
Ahora lo que NO DEBEMOS OLVIDAR es escribir esto:
MONSTER
Esto define al actor como un monstruo, por lo que durante el juego contará como monstruo y se comportará como tal.
Ya estamos en la parte interesante. Añadiremos ahora esto:
States { Spawn: PPOS AB 10 A_Look Loop
Estamos en los estados, señores. Empezamos con el estado Spawn
, donde le diremos a nuestro zombi que vigile si ve algún jugador.
*Zombi se aproxima*
*escopetazo*
No interrumpas.
Además, le decimos que repita indefinidamente este estado hasta que vea a su víctima —la orden Loop—. También le ponemos la propiedad A_Look para que pueda funcionar esto de detectar al enemigo...
Bueno, y ahora lo siguiente:
See: PPOS ABCD 4 A_Chase Loop
Tenemos ante nuestros ojos el estado See
, que es cuando el monstruo nos persigue una vez nos ha visto. Le ponemos el Code Pointer A_Chase para que nos persiga y se mueva. En la siguiente línea escribimos Loop para que se repita indefinidamente la animación.
Y ahora:
Missile: PPOS E 10 A_FaceTarget PPOS F 4 A_MissileAttack PPOS E 4 PPOS F 4 A_MissileAttack PPOS E 4 PPOS F 4 A_MissileAttack PPOS E 10 Goto See
Lo que hemos hecho aquí es el estado de arranque del proyectil. Le decimos al zombi que mire al objetivo (PPOS E 10 A_FaceTarget) y dispare tres cargas de plasma. A_MissileAttack hará que nuestro personaje dispare la carga de plasma personalizada que acabamos de definir antes en las propiedades (MissileType PersoPlasma). Por último, con la línea Goto See le decimos que vuelva al estado See
una vez terminado el estado Missile
.
A continuación ponemos:
Pain: PPOS G 10 A_Pain Goto See Death: PPOS H 3 A_Scream PPOS I 3 PPOS J 3 A_Fall PPOS K 3 PPOS L 3 PPOS M 3 PPOS N 3 PPOS N -1 Stop
Pain es el estado de nuestro amigo zombi al quejarse por haber recibido daño —de un disparo que le haya hecho el marine de Doom, por ejemplo—; Death, el estado cuando muere. Ahora explicaré los Code Pointers usados:
Al final del estado Pain
hemos puesto Goto See, porque no queremos que el monstruo se quede parado con la mueca de dolor al recibir un disparo, ¿no? Y al final del estado Death
hemos escrito PPOS N -1, y en la siguiente línea Stop. Esto hace que nuestro zombi se quede quieto en el suelo una vez muerto.
Para terminar, cerramos los corchetes:
} }
Bueno, creo que ha sido divertido eso, ¿verdad? Ahora lo que necesitamos es el proyectil que disparará el zombi —PersoPlasma
—. Pues bien, su código es el siguiente:
ACTOR PersoPlasma { Radius 13 Height 8 Speed 35 Damage 5 PROJECTILE SpawnSound "weapons/plasmaf" DeathSound "weapons/rocklx" DontHurtShooter States { Spawn: PPFA AB 5 Bright Death: PPFX A 3 Bright A_Scream PPFX BCDEFG 3 Bright PPFX G 3 Bright Stop } }
Bueno, en resumen, el script completo nos quedaría así:1
ACTOR PlasmoZombie 20002 { Health 30 PainChance 100 Speed 10 Radius 32 Height 56 SeeSound "grunt/sight" PainSound "grunt/pain" DeathSound "grunt/death" ActiveSound "grunt/active" Obituary "%o ha sido derretido por un zombi." MissileType PersoPlasma DropItem PlasmaCell MONSTER States { Spawn: PPOS AB 10 A_Look Loop See: PPOS ABCD 4 A_Chase Loop Missile: PPOS E 10 A_FaceTarget PPOS F 4 A_MissileAttack PPOS E 4 PPOS F 4 A_MissileAttack PPOS E 4 PPOS F 4 A_MissileAttack PPOS E 10 Goto See Pain: PPOS G 10 A_Pain Goto See Death: PPOS H 3 A_Scream PPOS I 3 PPOS J 3 A_Fall PPOS K 3 PPOS L 3 PPOS M 3 PPOS N 3 PPOS N -1 Stop } } ACTOR PersoPlasma { Radius 13 Height 8 Speed 35 Damage 5 PROJECTILE SpawnSound "weapons/plasmaf" DeathSound "weapons/rocklx" DontHurtShooter States { Spawn: PPFA AB 5 Bright Death: PPFX A 3 Bright A_Scream PPFX BCDEFG 3 Bright PPFX G 3 Bright Stop } }
Bueno, creo que hemos terminado. Creamos los sprites necesarios —PPOS, PPFX, PPFA—, al menos si queremos que nuestro zombi tenga un nuevo aspecto, y lo probamos en el juego. Si lo hemos hecho bien, tendremos un zombi que disparará tres proyectiles de plasma.
Quién tenga dudas puede ver este "plasmozombi" en acción en el mapa de ejemplo; simplemente cargadlo en Doom 2 usando Zdoom o GZdoom, y empezad a jugar una partida del modo acostumbrado... Un puñado de "plasmozombis" os esperan:
¡Bien hecho! Has completado la lección 3. Ahora pasa a la siguiente lección; nos complicaremos mucho esta vez...
1 La propiedad SpawnSound
que aparece en el script de ejemplo —en la parte donde se especifican las características de los disparos del "plasmozombi"— puede resultar problemática en Zdoom. Al menos yo lo he intentado corriendo la versión 2.1.1 de Zdoom en Linux, para encontrarme con el siguiente error:
Script error, "DECORATE" line 56:
"spawnsound" is an unknown actor property
La solución más obvia que se me ocurre —al menos hasta que Jack the Ripper explique este detalle— sería simplemente no usar esta propiedad. De todas formas sospecho que podría sustituirse por SeeSound
, como se muestra en el script de ejemplo que aparece en el prólogo de este tutorial.
Podéis copiar libremente cualquier contenido de esta página. Si se trata del texto o las imágenes, mencionad la fuente (www.arcades3d.net)...