Combustible de los JetPacs 1 #Mauro Cifuentes

En esta entrada vamos a implementar el indicador que figura debajo de HITS, concretamente el combustible de los jets. La idea detras de esto es agregar un poco de dificultad haciendo que los jets tengan una cantidad limitada de combustible, y que haya una posibilidad de recuperarlo con tanques que caerán aleatoriamente. Y para darle mas emoción, que se puedan destruir con los tiros (para, por ejemplo, evitar que el otro jugador agarre combustible).

Para comenzar, vamos a agregar una dirección de memoria que guarde la cantidad de combustible, para lo cual agregaremos la siguiente etiqueta en vars.asm:

 JP1Jet = $c003 ; cantidad de combustible del jet 1 

y luego la inicializamos en initVars.asm:

 ldx #$ff    stx JP1Jet 

También necesitaremos un 'tick' extra. Como hicimos previamente en otro post, vamos a agregar un poco de código para generar una señal, en este caso cada 64 loops, la que usaremos dentro de animatePlayer1.asm para decrementar el combustible cuando empujamos el joystick hacia arriba. La razón de usar un tick cada 64 loops es porque si no lo incluimos el combustible baja rapidamente, y consideré que cada 64 ciclos esta mas que bien (este código va en tickGenerator.asm).

; tick64 ------------------------------------  @tick64   lda internalCounter   and #64   cmp tick64 ; comparo con nuevo tick64   bne @setTick64_1    ldx #0   stx tick64   jmp @skip   @setTick64_1   ldx #1    stx tick64

Ahora, con las variables definidas y el tick64 disponible, vamos a agregar el codigo para que decremente el combustible cada vez que 'volamos' (en animatePlayer1.asm):

@chkUp   lda joy2    cmp #127    beq @jmpNext      ldx JP1Jet ; check si hay combustible   cpx #$0    beq @chkLeft ; si se acaba... adiooos   .   .   .   beq @chkLeft   dec spry       lda tick64    cmp #0 ; si no hay tick64 paso a revisar otra direccion   beq @chkLeft    dec JP1Jet ; y si no gasta combustible (c/64 frames)    @chkLeft .   .   .  @jmpNext    rts

Y para actualizar en pantalla la cantidad de combustible tenemos que agregar 2 cositas mas: una llamada, al final de la maquina de estados en animatePlayer1.asm.

@exit    .   .   .   jsr updateJP1Jet   rts  ; ------------- end of main animatePlayer1 ---------------------------

y la subrutina 'updateJP1Jet' que se encargará de mostrar el valor en pantalla (la podemos agregar luego de la que actualiza los hits:

; actualiza el medidor de JET de JP1  updateJP1Jet   lda JP1Jet    jsr convert2ascii   sty $0565   stx $0566   sta $0567   rts

Y creo que eso es todo.
Como siempre, el codigo completo lo pueden bajar desde el repositorio:
https://github.com/moonorongo/jp_wars.git
La idea en la próxima entrega vamos a implementar un generador simple de numeros pseudoaleatorios, el que utilizaremos para que aparezcan cayendo tanques de combustible.
Hasta la proxima!



Editar

Josepzin

No hay comentarios:

Publicar un comentario