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!
No hay comentarios:
Publicar un comentario