Doom Wiki
Advertisement
Doom Wiki

Qué es un script[]

Los scripts son un sencillo lenguaje que nos permite ejecutar varias de las acciones propias del zdoom al mismo tiempo, más algunas propias de los scripts. También podremos incluir algunas rutinas de programación. Junto con el DECORATE, podremos modificar casi cualquier aspecto del juego.


Los scripts se organizan en bloques numerados (números a los que haremos referencia para ejecutarlos). Algunos ejemplos de como se verían:


script 1 (void)

{

door_open (12,32);

delay(7);

thing_spawn(2,T_CACODEMON,0);

}


script 2 open

{

sector_setcolor(2,0,0,255);

sector_setfade(3,100,100,100);

}

Cómo se hace[]

En el menú de tu editor, debe haber uno que es Edit script. En elgunos editores deberás hacer una instalación previa del ACS (el código de los scripts) consulta la documentación del mismo. Una vez heco esto nos encontraremos con una ventana donde introduciremos nuestro texto.

Conviene que en la primera línea, se escriba siempre:

#include "zcommon.acs"


Esto hace referencia a un archivo externo, no tienes porque preocuparte por qué es. Luego, los scrips. Constan de la palabra script, un número que lo identifica, y un tipo. Las líneas de specials (acciones) que le corresponden, deben estar entre { }.

Ejemplo:

script 1 OPEN

{



}


Dentro de los { } colocaremos uno o varios specials (acciones), que se ejecutarán en el orden escrito. Es importante que después de cada special se coloque el ; que indica que la línea ha terminado, como en el ejemplo:

script 2 open

{

sector_setcolor(2,0,0,255);

sector_setfade(3,100,100,100);

}


Cualquier línea que empiece con // es un comentario, es decir que no se toma en cuenta como script.

Cómo se ejecutan[]

Depende del tipo:

Genéricos[]

Siempre se escriben, por ahora '(void)'. Ejemplo:

script 15 (void)

{



}


Estos se ejecutan como cualquier acción, es decir, al cruzar una línea, apretar un switch, etc.

La acción de la línea será:

ACS_executealways

ACS_execute

La diferencia es que con ACS_executealways podemos ejecutar un mismo script varias veces simultaneamente, esto es fundamental por ejemplo, cuando una acción debe ocurrir al morir un monstruo, ya que dos pueden hacerlo al mismo tiempo.


También tenemos estas acciones relacionadas:


ACS_lockedexecute: necesita una llave (ver Código del argumento KEY) para ejecutarse.

ACS_terminate: detiene la ejecución.

ACS_suspend: la suspende. Puede continuarse desde el punto donde se interrumpió.


Estas acciones tienen estos argumentos principales:

script: el número de script al que haremos referencia.

map: el # de mapa del script (útil para HUBs) si es cero, se ejecutará el script del mapa actual

key: para el ACS_lockedexecute, la llave (Código del argumento KEY) necesaria.

También pueden ejecutarse scripts desde los scripts con los specials (acciones) correspondientes.


OPEN

Inmediatamente después que el nivel es cargado.

Se escribe:

script 2 OPEN

ENTER

Cuando un jugador entra a un nivel (se ejecutan una vez por jugador por nivel).

RESPAWN

Cuando un jugador 'revive' en un juego multijugador.

DEATH

Cuando un jugador muere.

LIGHTNING

Cuando una luz 'flashea' en en nivel actual.

UNLOADING

Entre que se sale de un nivel y se entra al siguiente.

DISCONNECT

Cuando un jugador se desconecta de un juego en red.


Nociones básicas de programación[]

Primero, mencionar algunos scpecials básicos:

Delay nos permite hacer una pausa en tics (35 tics=1 seg.). Por ejemplo, para abrir una puerta 2 segundos (70 tics) después de mostrar un mensaje:


script 2 (void)

{

print (s:"La puerta se abrirá en 2 segundos");

delay(70);

door_open(2,32);

}



restart hace que el script donde se encuentre empieze otra vez desde es comienzo. Por ejemplo, para que un mensahe se muestre y no desaparezca:

script 1 open

{

print(s:"Estas jugando al mejor juego del mundo");

delay(35);

restart;

}


Variables

La variable es un espacio de memoria que almacena información, de acuerdo a su tipo. deben declararse al comienzo, donde también se puede agregar un valor inicial.

Tipos:


int (integer), un valor numérico.

str (string), una cadena alfanumérica.

Ejemplos:


Simples:

int var1;

int var1=10;


Estas contiene 5 elementos (no olviden el cero). Las variables serían var1[1],

var1[2], etc.

int var2[4]; //valores iniciales en cero

int var2[4] = { 1, 5, 9, 8, 9 }; //valores iniciales


¿Para que sirven?

Podemos hacer cualquier tipo de operación matemática (ver specials (acciones) para más operadores):


var1=var2/100;


Mostrarlas:


print(s:"Valor de var1 aquí: ",d:var1);


O compararlas.....


if

La instrucción de programación por exelencia, con un poco de maña no nececitaremos otra.


if ([condición])

{

[instrucciones si la condición es verdadera]

}


// esto es opcional:



else

{

[instrucciones si la condición es falsa}

}


Nótese que no hay ; después del IF o el ELSE


Las condiciones pueden ser cualquiera mátemática como:

var1==4 (nótese que hay dos signos =)

var2>7


Ejemplo:


script 1 (void)	

{

	if (var1==3)

	{

	print(s:"usted ganó. se abre la puerta");

	delay (70);

	door_open(2,32);

	}



	else

	{

	print(s:"usted no sirve para nada");

	}


}


Case

(en construcción) (?)

Ejemplos típicos[]

Ejemplo 1

Hay que apretar varios switchs dispersos por el mapa para que un piso baje: Los swithcs ejecutarán el script 2 y (esto es importante) la acción debe ejecutarse una sólo vez por switch (es decir, la acción no es repetible).


En este ejemplo hay que encontrar 5 switchs.


int cuantos=0;


script 2 (void)

{

cuantos=cuantos+1;

	

	if (cuantos==5)

	{

	print(s:"muy bien chico");

	floor_LowerToLowest(3,64,64);

	}

	
	else

	{

	print(s:"faltan",d:5-cuantos);

	}

}



Ejemplo 2

La puerta se abre al morir ciertos monstruos:


-Los bichos que deban morir deben tener un cierto tid#, por ejemplo, 23.

-La acción de estos mismos bichos debe ser ACS_executealways y el script a ejecutar, por ejemplo, el 3.

-El sector de la puerta, tiene un tag# de 4.


script 3 (void)

{

	if (thingcount(0,23)==0)

	{

	door_open(4,32);

	}


}


Se irán agregando más ejemplos más adelante.- ( : 3 )=

Advertisement