juego spectrum
inicio noticias artículos entrevistas enlaces especiales juegos colecciones podcast taller prensa
Taller Crea tu propio juego de Spectrum (capítulo 7c) Churrera 3.99.2

jueves, 17 de octubre de 2013

La Churrera 3.99.2

Antes que nada, bájate el paquete de la nueva versión de la churrera haciendo click justo aquí debajo:

http://www.mojontwins.com/churrera/mt-churrera-3.99.2.zip

¿Otra vez? ¿Y el capítulo de scripting?

Sí, ya sé que os debemos el capítulo de scripting y veinte mil cosas más, pero no nos parecía guay seguir ampliando la churrera y que vosotros no pudiéseis disfrutar de las cosas nuevas que trae. ¿Qué significa esto? Pues nada, que a lo mejor no os enteráis mucho de algunas de las características que vamos a explicar aquí, pero paciencia. El capítulo del scripting es muy importante y no queremos hacerlo de cualquier forma. Intentaremos empezar la semana que viene a dar las primeras pautas. Mientras tanto, echadle un ojete a esto... Y consultad el capítulo anterior en el que se explica cómo actualizar la churrera de tu güego a una nueva versión.

Pulsa aquí para ver el capítulo entero.

Temporizadores

Se añade a la churrera un temporizador que podemos usar de forma automática o desde el script. El temporizador toma un valor inicial, va contando hacia abajo, puede recargarse, se puede configurar cada cuántos frames se decrementa o decidir qué hacer cuando se agota. En config.h, como siempre:


#define TIMER_ENABLE


Con TIMER_ENABLE se incluye el código necesario para manejar el temporizador. Este código necesitará algunas otras directivas que especifican la forma de funcionar:


#define TIMER_INITIAL 99
#define TIMER_REFILL 25
#define TIMER_LAPSE 32


TIMER_INITIAL
especifica el valor inicial del temporizador. Las recargas de tiempo, que se ponen con el colocador como hotspots de tipo 5, recargarán el valor especificado en TIMER_REFILL. El valor máximo del timer, tanto para el inicial como al recargar, es de 99. Para controlar el intervalo de tiempo que transcurre entre cada decremento del temporizador, especificamos en TIMER_LAPSE el número de frames que debe transcurrir.


#define TIMER_START


Si se define TIMER_START, el temporizador estará activo desde el principio.
Tenemos, además, algunas directivas que definen qué pasará cuando el temporizador llegue a cero. Hay que descomentar las que apliquen:


#define TIMER_SCRIPT_0


Definiendo esta, cuando llegue a cero el temporizador se ejecutará una sección especial del script, ON_TIMER_OFF. Es ideal para llevar todo el control del temporizador por scripting, como ocurre en Cadàveriön.


//#define TIMER_GAMEOVER_0


Definiendo esta, el juego terminará ("GAME OVER") cuando el temporizador llegue a cero.


//#define TIMER_KILL_0
//#define TIMER_WARP_TO 0
//#define TIMER_WARP_TO_X 1
//#define TIMER_WARP_TO_Y 1


Si se define TIMER_KILL_0, se restará una vida cuando el temporizador llegue a cero. Si, además, se define TIMER_WARP_TO, además se cambiará a la pantalla espeficiada, apareciendo el jugador en las coordenadas TIMER_WARP_TO_X y TIMER_WARP_TO_Y. Usa esto si estos datos van a ser fijos durante el juego. En Cadàveriön, por ejemplo, van cambiando, por lo que todo se maneja desde el script.


//#define TIMER_AUTO_RESET


Si se define esta opción, el temporizador volverá al máximo tras llegar a cero de forma automática. Si vas a realizar el control por scripting, mejor deja esta comentada.


#define SHOW_TIMER_OVER


Si se define esta, en el caso de que hayamos definido o bien TIMER_SCRIPT_0 o bien TIMER_KILL_0, se mostrará un cartel de "TIME'S UP!" cuando el temporizador llegue a cero.

Scripting:

Como hemos dicho, el temporizador puede administrarse desde el script. Es interesante que, si decidimos hacer esto, activemos TIMER_SCRIPT_0 para que cuando el temporizador llegue a cero se ejecute la sección ON_TIMER_OFF de nuestro script y que el control sea total.

Además, se definen estas comprobaciones y comandos:

Comprobaciones:


IF TIMER >= x
IF TIMER <= x


Que se cumplirán si el valor del temporizador es mayor o igual o menor o igual que el valor especificado, respectivamente.

Comandos


SET_TIMER a, b


Sirve para establecer los valores TIMER_INITIAL (a) y TIMER_LAPSE (b) desde el script.


TIMER_START


Sirve para iniciar el temporizador.


TIMER_STOP


Sirve para parar el temporizador.

Control de bloques empujables

Hemos mejorado el motor para que se pueda hacer más cosas con el tile 14 de tipo 10 (tile empujable) que simplemente empujarlo o que detenga la trayectoria de los enemigos. Ahora podemos decirle al motor que lance la sección PRESS_FIRE de la pantalla actual en el script justo después de empujar un bloque empujable. Además, el número del tile que se "pisa" y las coordenadas finales se almacenan en tres flags que podemos configurar, para poderlas usar desde el script para hacer comprobaciones.

Este es el sistema que se emplea en el script de Cadàveriön para controlar que coloquemos las estatuas sobre los pedestales, por poner un ejemplo.

Recordemos lo que teníamos hasta ahora:


#define PLAYER_PUSH_BOXES
#define FIRE_TO_PUSH


La primera es necesaria para activar los tiles empujables. La segunda obliga al jugador a pulsar FIRE para empujar y, por tanto, no es obligatoria. Veamos ahora las nuevas directivas:


#define ENABLE_PUSHED_SCRIPTING
#define MOVED_TILE_FLAG 1
#define MOVED_X_FLAG 2
#define MOVED_Y_FLAG 3


Activando ENABLE_PUSHED_SCRIPTING, el tile que se pisa y sus coordenadas se almacenarán en los flags especificados por las directivas MOVED_TILE_FLAG, MOVED_X_FLAG y MOVED_Y_FLAG, respectivamente. En el código que se muestra, el tile pisado se almacenará en el flag 1, y sus coordenadas en los flags 2 y 3.


#define PUSHING_ACTION


Si definimos esta, además, cuando empujemos un bloque se ejecutarán las secciones PRESS_FIRE AT ANY y PRESS_FIRE de la pantalla actual del script. En este caso, se cumplirá la condición "JUST_PUSHED" y desde el scripting podremos controlar qué pasa cuando empujamos un bloque.

Recomendamos estudiar el script de Cadàveriön, el cual, además de ser un buen ejemplo del uso del temporizador y del control del bloque empujable, resulta ser un script bastante complejo que emplea un montón de técnicas avanzadas. Bueno, cuando el tutorial esté listo :*)

Comprobar si nos salimos del mapa

Es aconsejable poner límites en tu mapa para que el jugador no se pueda escaparse del mapa y que el motor haga cosas raras, pero si tu mapa es estrecho puede que quieras aprovechar toda la pantalla. En ese caso, puedes activar:


#define PLAYER_CHECK_MAP_BOUNDARIES


Que añadirá comprobaciones y no dejará que el jugador se salga del mapa. ¡Ojo! Si puedes evitar usarlo, mejor: ahorrarás espacio.

Tipo de enemigo "custom" de regalo

Hasta ahora habíamos dejado sin código los enemigos de tipo 6, pero hemos pensado que no nos cuesta poner uno, de ejemplo. Se comporta como los murciélagos de Cheril the Goddess. Para usarlos, ponlos en el colocador de enemigos como tipo 6 y usa estas directivas
:

#define ENABLE_CUSTOM_TYPE_6
#define TYPE_6_FIXED_SPRITE 2
#define SIGHT_DISTANCE 96


La primera los activa, la segunda define qué sprite va a usar (menos 1, si quieres el sprite del enemigo 3, pon un 2. Sorry por la guarrada, pero ahorro bytes). La tercera dice cuántos píxels ve de lejos el bicho. Si te ve, te persigue. Si no, vuelve a su sitio (donde lo hayas puesto con el colocador).
Esta implementación, además, utiliza dos directivas de los enemigos de tipo 5 para funcionar:


#define FANTY_MAX_V 256
#define FANTY_A 12


Define ahí la aceleración y la velocidad máxima de tus tipo 6. Si vas a usar también tipo 5 y quieres otros valores, sé un hombre y modifica el motor.

Configuración de teclado / joystick para dos botones

Hay güegos de vista lateral que se juegan mejor con dos botones, uno de salto y otro de disparo. Si activas esta directiva:


#define USE_TWO_BUTTONS
#define FANTY_A 12


El teclado será el siguiente, en vez del habitual:



A izquierda
D derecha
W arriba
S abajo
N salto
M disparo


Si se elige algún joystick, FIRE y M disparan, y N salta.

Disparos hacia arriba y en diagonal para vista lateral

Ahora podrás permitir que el jugador dispare hacia arriba o en diagonal. Para ello define esto:


#define CAN_FIRE_UP


Esta configuración funciona mejor con USE_TWO_BUTTONS, ya que así separamos "arriba" del botón de salto.
Si no pulsas "arriba", el personaje disparará hacia donde esté mirando. Si pulsas "arriba" mientras disparas, el personaje disparará hacia arriba. Si, además, estás pulsando una dirección, el personaje disparará en la diagonal indicada.

Balas enmascaradas

Por velocidad, las balas no llevan máscaras. Esto funciona bien si el fondo sobre el que se mueven es oscuro (pocos pixels INK activos). Sin embargo, hay situaciones en las que esto no ocurre y se ve mal. En ese caso, podemos activar máscaras para las balas:


#define MASKED_BULLETS


Y ya está

Con estas cosas se pueden hacer muchos tipos de güego nuevos. No te rayes demasiado si la mitad de lo que se explica aquí suena a chino, porque pronto entenderás como funciona el scripting y todo el podewwwr que pone en tus manos.

8 comentarios The Mojon Twins


Hay actualmente 8 comentarios


anjuel 17/10/2013 a las 17:47:24

Próximamente capítulo 8, que ya está en la imprenta! ^_^

A favor A favor En contra En contra
0(0 votos)
UsuarioEliminado 17/10/2013 a las 17:48:47

...mensaje eliminado por expreso deseo de su autor...

A favor A favor En contra En contra
0(0 votos)
Lord Raptor 18/10/2013 a las 00:28:30

Ke sí, ke sí... pero tenemos una versión arkaika de la churrera !! Liberad la 4.6 mamoncetes !! XD

En serio, ké ganotas de meterle mano al script

A favor A favor En contra En contra
0(0 votos)
na_th_an 18/10/2013 a las 11:00:48

La 4.6 la tienes en el código del Ramiro. Volvimos a la 3.1 y re-comenzamos desde ahí porque la 4.6 estaba inmanejable. La 3.99.2 es muy superior a la 4.6 en todo: el código es más rápido y más compacto. Para nada es una versión "arkaika", es la versión actual. Es la que usamos nosotros mismos para desarrollar, vaya :D Pero ya te digo que si realmente quieres la 4.6 no tienes más que descargar los fuentes de Ramiro.

A favor A favor En contra En contra
0(0 votos)
Lord Raptor 21/10/2013 a las 20:15:20

Lo sé, sólo es un komentario 'teletériko' para echarnos unas risas.

nota: me auto-kastigaré sartando en la korchoneta de sartar. mirando a la pared unas 40 horas aproximádamente.

Vamos, ke se me enfría el proyecto.. XDD

nota2: Tengo unas kuántas dudakas ke tengo al respecto, y kreo ke el mejor sitio para hacerlas es en el foro mojóniko [no?] Aun así, entoavía estoy xperando el 'vvisto bueno' de mi registro allí mesmo.

A favor A favor En contra En contra
0(0 votos)
anjuel 21/10/2013 a las 23:40:12

@lordraptor con qué nombre te has registrado? tenemos un problema de spam y no nos enteramos a veces de los registros. Dime nombre y te activo :-)

A favor A favor En contra En contra
0(0 votos)
anjuel 21/10/2013 a las 23:44:56

Ya te he encontrado :D

Activado!

A favor A favor En contra En contra
0(0 votos)
Lord Raptor 22/10/2013 a las 00:33:14

Faaleeee... de koña !!
De momento ya he realizau mis primeras dudakas en el kapítulo 8.
De toas formas nus vemoz po'allí.

Un saludo

A favor A favor En contra En contra
0(0 votos)


Escribe tu comentario:


Si ya tienes usuario loguéate desde aquí


Nick:

E-mail (opcional):


Si el comentario es largo te recomendamos que lo escribas primero en otro sitio no vaya a ser que seas medio robot y falles con el captcha.
Tu Comentario:


Tenemos que comprobar que eres humano:

· El número de verificación es obligatorio y tiene como objetivo evitar spam.
· El Mundo del Spectrum se reserva el derecho a eliminar el comentario.




Posicionamiento Zaragoza
Posicionamiento SEO Zaragoza
Hostal zaragoza
Hostal barato Zaragoza
Flores Zaragoza
Compra flores baratas Zaragoza
te interesa




Introduce aquí lo que quieres buscar:
Colecciones de Spectrum   Colecciones de Spectrum

Échale un vistazo a las colecciones de Spectrum de nuestros lectores. ¿Todavía no has publicado la tuya? Créate un usuario y enseña tu colección.

Ver colecciones



Podcast Retro Spectrum

Colección aleatoria

La colección de PePe ZM

La colección de PePe ZM



El Mundo del Spectrum
 
 
Últimos comentarios
Holdsworth

Enhorabuena, García! Tu primer juego para Spectrum, que no será el...

Ocrum

Yo soy uno de los afectados del Vega+, con la experiencia de apoyar v...

srfox

Estoy deseando probarlo ,tiene una pintaza brutal y gracias a ti Osc...

Oscar

Muchas gracias por publicarlo. Ojalá os resulte tan divertido jugarlo...

javi ortiz speccy

Mc: puedes mandarnos un mail a elmundodelspectrum@g para cualquier c...

 



Iniciar sesión
acceder
Recordar contraseña




¿Eres nuevo en
El Mundo del Spectrum?
Regístrate




  Hacen El Mundo del Spectrum posible
 
El Mundo del Spectrum es una web dedicada al Sinclair ZX Spectrum. Nació como homenaje a Microhobby en 1996 en formato revista mensual evolucionando hasta esta tercera época que incluye su programa de Podcast llamado El Mundo del Spectrum Podcast.

Si quieres saber quién la hace posible haz clic en cada uno de sus miembros a la derecha de este texto.
Jesús Martínez del Vas Javier Ortiz Juan Fº Torres Alejandro Ibáñez  

© 1996 - 2017 El Mundo del Spectrum es un producto de Consultis

3ª época - www.elmundodelspectrum.com - Contacta

Los contenidos son opinión de su autor, EMS no tiene porqué compartir esa opinión.
Colaboran:
Curro, Kidsaguf, Deckard, Manu Sevilla, Antonio Ortiz
Han colaborado:
Falsworth, Hoz3, Slobulus