ootw: start on multiple slug support

This commit is contained in:
Vince Weaver 2019-01-18 16:04:52 -05:00
parent cf56ee21d5
commit 12f0aafbfb
4 changed files with 94 additions and 34 deletions

View File

@ -34,13 +34,21 @@ ootw:
lda #1
sta slugg0_out
sta slugg1_out
sta slugg2_out
lda #0
sta slugg0_attack
sta slugg0_dieing
sta slugg1_attack
sta slugg1_dieing
sta slugg2_attack
sta slugg2_dieing
lda #$ff
sta slugg0_dir
sta slugg1_dir
sta slugg2_dir
jsr random16
and #$f
@ -48,10 +56,32 @@ ootw:
adc #16
sta slugg0_x
jsr random16
and #$f
clc
adc #16
sta slugg1_x
jsr random16
and #$f
clc
adc #16
sta slugg2_x
jsr random16
and #$3
sta slugg0_gait
jsr random16
and #$3
sta slugg1_gait
jsr random16
and #$3
sta slugg2_gait
jsr ootw_pool
;===========================

View File

@ -392,32 +392,43 @@ no_keypress_c:
; outstate 0=dead 1=normal 2=dieing 3=falling
slugg0_out: .byte 1
slugg0_attack: .byte 0
slugg0_dieing: .byte 0
slugg0_x: .byte 30
slugg0_dir: .byte $ff
slugg0_gait: .byte 0
slugg0_out: .byte 1 ; 0
slugg0_attack: .byte 0 ; 1
slugg0_dieing: .byte 0 ; 2
slugg0_x: .byte 30 ; 3
slugg0_dir: .byte $ff ; 4
slugg0_gait: .byte 0 ; 5
slugg1_out: .byte 1
slugg1_out: .byte 1 ; 6
slugg1_attack: .byte 0
slugg1_dieing: .byte 0
slugg1_x: .byte 30
slugg1_dir: .byte $ff
slugg1_gait: .byte 0
slugg2_out: .byte 1
slugg2_attack: .byte 0
slugg2_dieing: .byte 0
slugg2_x: .byte 30
slugg2_dir: .byte $ff
slugg2_gait: .byte 0
draw_slugs:
lda slugg0_out
ldx #0
sta WHICH_SLUG
draw_slugs_loop:
lda slugg0_out,X
bne check_kicked ; don't draw if not there
jmp slug_done
check_kicked:
lda slugg0_out ; only kick if normal
lda slugg0_out,X ; only kick if normal
cmp #1
bne check_attack
@ -429,18 +440,18 @@ check_kicked:
lda PHYSICIST_X
sec
sbc slugg0_x ; -4 to +4
sbc slugg0_x,X ; -4 to +4
clc
adc #4
and #$f8
bne not_kicked
kicked:
lda #2
sta slugg0_out
sta slugg0_out,X
lda #10
sta slugg0_dieing
sta slugg0_dieing,X
lda DIRECTION
sta slugg0_dir
sta slugg0_dir,X
not_kicked:
@ -448,13 +459,13 @@ check_attack:
;==================
; see if attack
lda slugg0_out
lda slugg0_out,X
cmp #1
bne no_attack
lda PHYSICIST_X
sec
sbc slugg0_x ; -2 to +2
sbc slugg0_x,X ; -2 to +2
clc
adc #2
and #$fc
@ -465,7 +476,7 @@ attack:
; start an attack
lda #1
sta slugg0_attack
sta slugg0_attack,X
lda SLUGDEATH ; don't re-attack if already dead
bne no_attack
@ -475,28 +486,33 @@ attack:
lda #0
sta SLUGDEATH_PROGRESS
stx WHICH_SLUG
jsr slug_cutscene
ldx WHICH_SLUG
no_attack:
inc slugg0_gait ; increment slug gait counter
inc slugg0_gait,X ; increment slug gait counter
lda slugg0_gait ; only move every 64 frames
lda slugg0_gait,X ; only move every 64 frames
and #$3f
cmp #$00
bne slug_no_move
slug_move:
lda slugg0_x
lda slugg0_x,X
clc
adc slugg0_dir
sta slugg0_x
adc slugg0_dir,X
sta slugg0_x,X
slug_check_right:
cmp #37
beq remove_slug
bne slug_check_left
jmp remove_slug
slug_check_left:
cmp #0
beq remove_slug
bne slug_no_move
jmp remove_slug
slug_no_move:
@ -511,14 +527,16 @@ slug_no_move:
; if exploding
;==============
lda slugg0_dieing
lda slugg0_dieing,X
beq check_draw_attacking
slug_exploding:
stx WHICH_SLUG
tax ; urgh can't forget tax
lda slug_die_progression,X
sta INL
lda slug_die_progression+1,X
sta INH
ldx WHICH_SLUG
bit SPEAKER
@ -528,8 +546,8 @@ slug_exploding:
bit SPEAKER
dec slugg0_dieing
dec slugg0_dieing
dec slugg0_dieing,X
dec slugg0_dieing,X
bne no_progress
jmp remove_slug
@ -542,11 +560,12 @@ no_progress:
; if attacking
;==============
check_draw_attacking:
lda slugg0_attack
lda slugg0_attack,X
beq slug_normal
slug_attacking:
lda slugg0_gait
lda slugg0_gait,X
stx WHICH_SLUG
and #$70
lsr
lsr
@ -557,13 +576,16 @@ slug_attacking:
sta INL
lda slug_attack_progression+1,X
sta INH
ldx WHICH_SLUG
jmp slug_selected
;==============
; if normal
;==============
slug_normal:
lda slugg0_gait
lda slugg0_gait,X
and #$20
beq slug_squinched
@ -587,7 +609,7 @@ slug_squinched:
slug_selected:
lda slugg0_x
lda slugg0_x,X
sta XPOS
lda #30
@ -595,7 +617,8 @@ slug_selected:
sbc EARTH_OFFSET
sta YPOS
lda DIRECTION
lda slugg0_dir,X
stx WHICH_SLUG
bmi slug_right
slug_left:
@ -610,8 +633,8 @@ slug_done:
remove_slug:
lda #0
sta slugg0_out
rts
sta slugg0_out,X
jmp slug_done

View File

@ -9,6 +9,12 @@ ootw_pool:
bit FULLGR
;=============
; disable earthquake
lda #0
sta EARTH_OFFSET
;===========================
; Clear both bottoms

View File

@ -132,6 +132,7 @@ CURSOR = $9D
;COLOR1 = $E0
;COLOR2 = $E1
;MATCH = $E2
WHICH_SLUG = $E2
XX = $E3
YY = $E4
HGR_COLOR = $E4