Combustible de los JetPacs 1

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!

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s