diff --git a/ootw/ootw.s b/ootw/ootw.s index d786b6e5..7961303a 100644 --- a/ootw/ootw.s +++ b/ootw/ootw.s @@ -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 ;=========================== diff --git a/ootw/ootw_cavern.s b/ootw/ootw_cavern.s index 4043d622..d5578b68 100644 --- a/ootw/ootw_cavern.s +++ b/ootw/ootw_cavern.s @@ -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 diff --git a/ootw/ootw_pool.s b/ootw/ootw_pool.s index 014edfbc..10430d70 100644 --- a/ootw/ootw_pool.s +++ b/ootw/ootw_pool.s @@ -9,6 +9,12 @@ ootw_pool: bit FULLGR + ;============= + ; disable earthquake + + lda #0 + sta EARTH_OFFSET + ;=========================== ; Clear both bottoms diff --git a/ootw/zp.inc b/ootw/zp.inc index 13df69a2..b662c1c4 100644 --- a/ootw/zp.inc +++ b/ootw/zp.inc @@ -132,6 +132,7 @@ CURSOR = $9D ;COLOR1 = $E0 ;COLOR2 = $E1 ;MATCH = $E2 +WHICH_SLUG = $E2 XX = $E3 YY = $E4 HGR_COLOR = $E4