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!


