Aparecer
"Aparecer en escena. Primer acto. Pac-man en el centro del escenario y suena una música. Los fantasmas en segundo plano, cada uno de un color. Todos permanecen inmóviles hasta que da comienzo el baile."
EVENT INITSPRITE
Es el momento en el que un Sprite se coloca por primera vez en una pantalla (o nivel). EngineZX nos da la oportunidad de cambiar algunas cosas en él.
En nuestro caso cada nuevo juego, nivel o pantalla transcurren en un sitio: "el laberinto".
EngineZX comprueba si hay nuevos Sprites que colocar, si es así, por cada uno de ellos lanza el EVENT INITSPRITE.
Aprovecharemos este momento para indexar nuestros fantasmas.
Abrimos el editor MPAGD. Abrimos el proyecto Pacman (esto lo repetiremos al inicio de cada capítulo). Selecciona "Initialise Sprite" del menú "Events". Deberás editarlo así:
EVENT INITSPRITE
; aparecer fantasmal
IF TYPE = 4 ; si el Sprite es Perseguidor
REPEAT A ; repite para A.
READ SETTINGA ; lee el color y resérvalo en SETTINGA
ENDREPEAT
ADD 1 TO A ; pasamos al siguiente fantasma
IF A = 5
LET A = 1 ; si aparecieron 4, reinicia A.
ENDIF
ENDIF
LET FRAME = 0 ; asegura fotograma = 0.
DATA 2, 3, 5, 6 ; RED, MAGENTA, CYAN, YELLOW
Guarda es script, cierra el editor de texto y guarda el proyecto.
Tenemos cuatro Sprites fantasmas del "tipo 4", perseguidores en un principio. Tenemos un script correspondiente, el EVENT SPRITETYPE4. Vamos a reservar la propiedad SETTINGA para identificarlos por su color.
Cuando el script EVENT SPRITETYPE4 se ejecute cuatro veces en juego, lo hará cada vez de forma distinta según su color. El resultado son cuatro personalidades distintas en una.
PROPIEDADES
Las propiedades de un Sprite persisten para cada "aparición". TYPE, IMAGE, FRAME, X, Y, DIRECTION, SETTINGA, SETTINGB y DATA. Tenemos aquí una fuente de datos muy potente si lo piensas.
En el script EVENT INITSPRITE usamos la variable global A para contar los fantasmas que aparecen en escena, detenemos la lectura de la secuencia DATA en el color correspondiente al fantasma A, y guardamos el valor en la propiedad SETTINGA. "Si digo rojo, digo Blinky".
EVENT RESTARTSCREEN
Para que comience siendo A = 1 en el EVENT INITSPRITE, la declaramos antes en el EVENT RESTARTSCREEN. De manera que cada vez que se pinte una pantalla nueva y en ella haya 4 fantasmas, presentarán esta serie de colores.
Abre tu editor MPAGD y selecciona "Restart screen" del menú "Events". Deberás editarlo así:
EVENT RESTARTSCREEN
LET A = 1 ; Reinicia el orden de EVENT INITSPRITE de fantasmas.
Guarda es script, cierra el editor de texto y guarda el proyecto.
EVENT SPRITETYPE4
Queda algo más por hacer. Editar nuestro "tipo 4". Abre tu editor MPAGD y selecciona "Sprite type 4" del menú "Events". Deberás editarlo así:
EVENT SPRITETYPE4
; FANTASMAS
SPRITEINK SETTINGA ; Soy mi color
; define el objetivo.
IF SETTINGA = 2 ; si es RED soy BLINKY
LET T = X ; Revelo X para Inky
LET U = Y ; Revelo y para Inky
LET Q = V ; Objetivo (Tarjet X) en modo persigue
LET R = W ; Objetivo (Tarjet Y) en modo persigue
ENDIF
IF SETTINGA = 3 ; si es MAGENTA soy PINKY
LET Q = V ; X TRAJET
LET R = W ; Y TRAJET
IF I = RIGHT ; si Pac-man mira a la derecha
ADD 32 TO Q ; apunta 4 celdas por delante
ELSE
IF I = LEFT ; lo mismo para izquierda
SUBTRACT 32 TO Q
ELSE
IF I = UP
SUBTRACT 32 TO R
ELSE
ADD 32 TO R
ENDIF
ENDIF
ENDIF
ENDIF
IF SETTINGA = 5 ; si en CYAN soy INKY
LET Q = V ; X TRAJET
LET R = W ; Y TRAJET
IF I = RIGHT
ADD 16 TO Q
ELSE
IF I = LEFT
SUBTRACT 16 TO Q
ELSE
IF I = UP
SUBTRACT 16 TO R
ELSE
ADD 16 TO R
ENDIF
ENDIF
ENDIF
MULTIPLY Q BY 2 ; Intermpolar con BLINKY
SUBTRACT T TO Q
MULTIPLY R BY 2
SUBTRACT U TO R
ENDIF
IF SETTINGA = 6 ; si es YELLOW soy Clyde
LET Q = X
IF X < V ; asegurar numero positivo. (absoluto).
SUBTRACT X TO V
LET Q = V ; Q = DISTANCIA horizontal con PAC-MAN
ADD X TO V ; restaura V
ELSE
SUBTRACT V TO Q ; Q = DISTANCIA horizontal con PAC-MAN
ENDIF
LET R = Y
IF Y < W ; asegurar numero positivo. (absoluto).
SUBTRACT Y TO W
LET R = W ; Q = DISTANCIA horizontal con PAC-MAN
ADD Y TO W ; restaura W
ELSE
SUBTRACT W TO R ; R = DISTANCIA vertical con PAC-MAN
ENDIF
IF Q < 64 ; si pac-man está a menos de 4 celdas entonces
IF R < 64
; MODO DISPERSION
ENDIF
ELSE ; si no, entonces persigue.
LET Q = V
LET R = W
ENDIF
ENDIF
; movimiento
IF DIRECTION = UP
; gira a favor del reloj
IF CANGOUP
SPRITEUP
ELSE
LET DIRECTION = RIGHT
ENDIF
; PERSIGUE EN UNA BIFURCACION
IF X > Q
IF CANGOLEFT
LET DIRECTION = LEFT
ANIMATE
ENDIF
ELSE
IF CANGORIGHT
LET DIRECTION = RIGHT
ANIMATE
ENDIF
ENDIF
ENDIF
IF DIRECTION = DOWN
; gira en contra del reloj
IF CANGODOWN
SPRITEDOWN
ELSE
LET DIRECTION = LEFT
ENDIF
; PERSIGUE EN UNA BIFURCACION
IF X > Q
IF CANGOLEFT
LET DIRECTION = LEFT
ANIMATE
ENDIF
ELSE
IF CANGORIGHT
LET DIRECTION = RIGHT
ANIMATE
ENDIF
ENDIF
ENDIF
IF DIRECTION = LEFT
; gira a favor del reloj
IF X <= LEFTEDGE
LET X = RIGHTEDGE
EXIT
ELSE
IF CANGOLEFT
SPRITELEFT
ELSE
LET DIRECTION = UP
ENDIF
ENDIF
; PERSIGUE
IF Y > R
IF CANGOUP
LET DIRECTION = UP
ANIMATE
ENDIF
ELSE
IF CANGODOWN
LET DIRECTION = DOWN
ANIMATE
ENDIF
ENDIF
ENDIF
IF DIRECTION = RIGHT
; gira a favor del reloj
IF X >= RIGHTEDGE
LET X = LEFTEDGE
EXIT
ELSE
IF CANGORIGHT
SPRITERIGHT
ELSE
LET DIRECTION = DOWN
ENDIF
ENDIF
; PERSIGUE
IF Y > R
IF CANGOUP
LET DIRECTION = UP
ANIMATE
ENDIF
ELSE
IF CANGODOWN
LET DIRECTION = DOWN
ANIMATE
ENDIF
ENDIF
ENDIF
Guarda es script, cierra el editor de texto y guarda el proyecto.
Perseguidores
Selecciona la opción "Sprite positions" en el menú "Editor".
Selecciona para cada fantasma el Sprite 4 con la cara sonriente, cambia el tipo a "Sprite type 4" ("Perseguidores").
Coloca por orden a Blinky fuera y los otros dentro.
El editor esperará que lo coloques en una posición. Si es necesario bórralos todos y comienza a colocarlos por orden. Coloca primero Blinky, fuera arriba a la izquierda, después el resto dentro.
Prueba. Pulsa F5 (si hay errores aparecen en la ventana de comandos).
"Ahora son cuatro contra uno. Segundo acto. Pac-man come una "píldora energizante" y el juego cambia..."
Comentarios
Publicar un comentario