From 7d52059f6a928ce6508449edaefd55fe76be5bd5 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 20 Jan 2019 00:14:21 -0500 Subject: [PATCH] ootw: more code movement --- ootw/gr_copy.s | 58 ++++++++ ootw/ootw_cavern.s | 322 --------------------------------------------- 2 files changed, 58 insertions(+), 322 deletions(-) diff --git a/ootw/gr_copy.s b/ootw/gr_copy.s index 1211d0e8..ca68db55 100644 --- a/ootw/gr_copy.s +++ b/ootw/gr_copy.s @@ -56,3 +56,61 @@ gr_copy_line: rts ; 6 + + + ;========================================================= + ; gr_copy_to_current, 40x48 version + ;========================================================= + ; copy 0x1000 to DRAW_PAGE + +gr_copy_to_current_40: + + lda DRAW_PAGE ; 3 + clc ; 2 + adc #$4 ; 2 + sta gr_copy_line_40+5 ; 4 + sta gr_copy_line_40+11 ; 4 + adc #$1 ; 2 + sta gr_copy_line_40+17 ; 4 + sta gr_copy_line_40+23 ; 4 + adc #$1 ; 2 + sta gr_copy_line_40+29 ; 4 + sta gr_copy_line_40+35 ; 4 + adc #$1 ; 2 + sta gr_copy_line_40+41 ; 4 + sta gr_copy_line_40+47 ; 4 + ;=========== + ; 45 + + ldy #119 ; for early ones, copy 120 bytes ; 2 + +gr_copy_line_40: + lda $1000,Y ; load a byte (self modified) ; 4 + sta $400,Y ; store a byte (self modified) ; 5 + + lda $1080,Y ; load a byte (self modified) ; 4 + sta $480,Y ; store a byte (self modified) ; 5 + + lda $1100,Y ; load a byte (self modified) ; 4 + sta $500,Y ; store a byte (self modified) ; 5 + + lda $1180,Y ; load a byte (self modified) ; 4 + sta $580,Y ; store a byte (self modified) ; 5 + + lda $1200,Y ; load a byte (self modified) ; 4 + sta $600,Y ; store a byte (self modified) ; 5 + + lda $1280,Y ; load a byte (self modified) ; 4 + sta $680,Y ; store a byte (self modified) ; 5 + + lda $1300,Y ; load a byte (self modified) ; 4 + sta $700,Y ; store a byte (self modified) ; 5 + + lda $1380,Y ; load a byte (self modified) ; 4 + sta $780,Y ; store a byte (self modified) ; 5 + + dey ; decrement pointer ; 2 + bpl gr_copy_line_40 ; ; 2nt/3 + + rts ; 6 + diff --git a/ootw/ootw_cavern.s b/ootw/ootw_cavern.s index ba565256..36be9bb6 100644 --- a/ootw/ootw_cavern.s +++ b/ootw/ootw_cavern.s @@ -261,325 +261,3 @@ still_in_cavern: done_cavern: rts - -;================================== -; draw slugs -;================================== - - ; outstate 0=dead 1=normal 2=dieing 3=falling - -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 ; 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: - - ldx #0 - stx WHICH_SLUG -draw_slugs_loop: - ldx WHICH_SLUG - lda slugg0_out,X - bne check_kicked ; don't draw if not there - jmp slug_done - -check_kicked: - lda slugg0_out,X ; only kick if normal - cmp #1 - bne check_attack - - ;================== - ; see if kicked - - lda KICKING - beq check_attack - - lda PHYSICIST_X - sec - sbc slugg0_x,X ; -4 to +4 - clc - adc #4 - and #$f8 - bne not_kicked -kicked: - lda #2 - sta slugg0_out,X - lda #10 - sta slugg0_dieing,X - lda DIRECTION - sta slugg0_dir,X - -not_kicked: - -check_attack: - ;================== - ; see if attack - - lda slugg0_out,X - cmp #1 - bne no_attack - - lda PHYSICIST_X - sec - sbc slugg0_x,X ; -2 to +2 - clc - adc #2 - and #$fc - bne no_attack -attack: - - ;================= - ; start an attack - - lda #1 - sta slugg0_attack,X - - lda SLUGDEATH ; don't re-attack if already dead - bne no_attack - - lda #$1 - sta SLUGDEATH - lda #0 - sta SLUGDEATH_PROGRESS - - stx WHICH_SLUG - jsr slug_cutscene - ldx WHICH_SLUG - -no_attack: - inc slugg0_gait,X ; increment slug gait counter - - lda slugg0_gait,X ; only move every 64 frames - and #$3f - cmp #$00 - bne slug_no_move - -slug_move: - lda slugg0_x,X - clc - adc slugg0_dir,X - sta slugg0_x,X - -slug_check_right: - cmp #37 - bne slug_check_left - jmp remove_slug - -slug_check_left: - cmp #0 - bne slug_no_move - jmp remove_slug - -slug_no_move: - - - ;=============================== - ;=============================== - ; DRAW SLUG - ;=============================== - ;=============================== - - ;============== - ; if exploding - ;============== - - 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 - - lda FRAMEL - and #$f - bne no_progress - - bit SPEAKER - - dec slugg0_dieing,X - dec slugg0_dieing,X - bne no_progress - jmp remove_slug - -no_progress: - - jmp slug_selected - - - ;============== - ; if attacking - ;============== -check_draw_attacking: - lda slugg0_attack,X - beq slug_normal -slug_attacking: - - lda slugg0_gait,X - stx WHICH_SLUG - and #$70 - lsr - lsr - lsr - tax - - lda slug_attack_progression,X - sta INL - lda slug_attack_progression+1,X - sta INH - - ldx WHICH_SLUG - - jmp slug_selected - - ;============== - ; if normal - ;============== -slug_normal: - lda slugg0_gait,X - and #$20 - beq slug_squinched - -slug_flat: - lda #slug1 - sta INH - bne slug_selected - -slug_squinched: - lda #slug2 - sta INH - - ;================ - ; end slug normal - ;================ - -slug_selected: - - - lda slugg0_x,X - sta XPOS - - lda #30 - sec - sbc EARTH_OFFSET - sta YPOS - - lda slugg0_dir,X - stx WHICH_SLUG - bmi slug_right - -slug_left: - jsr put_sprite - jmp slug_done - -slug_right: - jsr put_sprite_flipped - -slug_done: - lda WHICH_SLUG - clc - adc #6 - tax - stx WHICH_SLUG - - cpx #18 - beq slug_exit - - jmp draw_slugs_loop - -slug_exit: - rts - -remove_slug: - lda #0 - sta slugg0_out,X - jmp slug_done - - - - - ;========================================================= - ; gr_copy_to_current, 40x48 version - ;========================================================= - ; copy 0x1000 to DRAW_PAGE - -gr_copy_to_current_40: - - lda DRAW_PAGE ; 3 - clc ; 2 - adc #$4 ; 2 - sta gr_copy_line_40+5 ; 4 - sta gr_copy_line_40+11 ; 4 - adc #$1 ; 2 - sta gr_copy_line_40+17 ; 4 - sta gr_copy_line_40+23 ; 4 - adc #$1 ; 2 - sta gr_copy_line_40+29 ; 4 - sta gr_copy_line_40+35 ; 4 - adc #$1 ; 2 - sta gr_copy_line_40+41 ; 4 - sta gr_copy_line_40+47 ; 4 - ;=========== - ; 45 - - ldy #119 ; for early ones, copy 120 bytes ; 2 - -gr_copy_line_40: - lda $1000,Y ; load a byte (self modified) ; 4 - sta $400,Y ; store a byte (self modified) ; 5 - - lda $1080,Y ; load a byte (self modified) ; 4 - sta $480,Y ; store a byte (self modified) ; 5 - - lda $1100,Y ; load a byte (self modified) ; 4 - sta $500,Y ; store a byte (self modified) ; 5 - - lda $1180,Y ; load a byte (self modified) ; 4 - sta $580,Y ; store a byte (self modified) ; 5 - - lda $1200,Y ; load a byte (self modified) ; 4 - sta $600,Y ; store a byte (self modified) ; 5 - - lda $1280,Y ; load a byte (self modified) ; 4 - sta $680,Y ; store a byte (self modified) ; 5 - - lda $1300,Y ; load a byte (self modified) ; 4 - sta $700,Y ; store a byte (self modified) ; 5 - - lda $1380,Y ; load a byte (self modified) ; 4 - sta $780,Y ; store a byte (self modified) ; 5 - - dey ; decrement pointer ; 2 - bpl gr_copy_line_40 ; ; 2nt/3 - - rts ; 6 -