diff --git a/games/keen/Makefile b/games/keen/Makefile index 1b54294b..ea502a93 100644 --- a/games/keen/Makefile +++ b/games/keen/Makefile @@ -51,6 +51,7 @@ KEEN_MARS: keen_mars.o ld65 -o KEEN_MARS keen_mars.o -C ../../linker_scripts/apple2_2000.inc keen_mars.o: keen_mars.s zp.inc hardware.inc game_over.s \ + gr_fade.s \ mars_sfx.s longer_sound.s print_help.s \ maps/mars_map.gr.zx02 graphics/parts.gr.zx02 ca65 -o keen_mars.o keen_mars.s -l keen_mars.lst diff --git a/games/keen/gr_fade.s b/games/keen/gr_fade.s new file mode 100644 index 00000000..34b7d0a2 --- /dev/null +++ b/games/keen/gr_fade.s @@ -0,0 +1,191 @@ + + ;============================================ + ; gr, "fade" out. Badly fake a pallette fade + ;============================================ + ; Image to fade out should be in $C00 +fade_out: + + lda #fade_lookup + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+16) + sta GBASL + lda #>(fade_lookup+16) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+32) + sta GBASL + lda #>(fade_lookup+32) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+48) + sta GBASL + lda #>(fade_lookup+48) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + rts + + ;=========================================== + ; gr, "fade" in. Badly fake a pallette fade + ;=========================================== + ; Image to fade in should be in $C00 +fade_in: + + lda #<(fade_lookup+48) + sta GBASL + lda #>(fade_lookup+48) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+32) + sta GBASL + lda #>(fade_lookup+32) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+16) + sta GBASL + lda #>(fade_lookup+16) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + lda #<(fade_lookup+0) + sta GBASL + lda #>(fade_lookup+0) + sta GBASH + + jsr gr_fade + jsr page_flip + + lda #200 + jsr WAIT + + rts + + ;================================================ + ; Fade in/out lowres graphics + ; GR image should be in $C00 + ; pointer to fade table in GBASL/GBASH + +gr_fade: + + ldx #0 ; set ypos to zero ; 2 + +gr_fade_loop: + lda gr_offsets,X ; lookup low byte for line addr ; 4+ + + sta gr_fade_line1+1 ; out and in are the same ; 4 + sta gr_fade_line2+1 ; 4 + + lda gr_offsets+1,X ; lookup high byte for line addr ; 4+ + clc ; 2 + adc DRAW_PAGE ; 3 + sta gr_fade_line2+2 ; 4 + + lda gr_offsets+1,X ; lookup high byte for line addr ; 4+ + adc #$8 ; for now, fixed 0xc ; 2 + sta gr_fade_line1+2 ; 4 + + ldy #0 ; set xpos counter to 0 ; 2 + + +; cpx #$8 ; don't want to copy bottom 4*40 ; 2 +; bcs gr_fade_above4 ; 2nt/3 + +gr_fade_below4: + ldy #119 ; for early ones, copy 120 bytes ; 2 + bcc gr_fade_line1 ; ; 3 + +gr_fade_above4: ; for last four, just copy 80 bytes + ldy #79 ; 2 + +gr_fade_line1: + lda $ffff,Y ; load a byte (self modified) ; 4+ + pha + + sty TEMPY ; save Y + + ; do high nibble + and #$f0 + lsr + lsr + lsr + lsr + + tay + lda (GBASL),Y + and #$f0 + sta TEMP + + ; do low nibble + pla + and #$0f + + tay + lda (GBASL),Y + and #$0f + ora TEMP + + ldy TEMPY ; restore Y + +gr_fade_line2: + sta $ffff,Y ; store a byte (self modified) ; 5 + dey ; decrement pointer ; 2 + bpl gr_fade_line1 ; ; 2nt/3 + +gr_fade_line_done: + inx ; increment ypos value ; 2 + inx ; twice, as address is 2 bytes ; 2 + cpx #16 ; there are 8*2 of them ; 2 + bne gr_fade_loop ; if not, loop ; 3 + rts ; 6 + + + +; Fade paramaters +fade_lookup: +.byte $00,$11,$22,$33,$44,$55,$66,$77, $88,$99,$aa,$bb,$cc,$dd,$ee,$ff +.byte $00,$00,$00,$22,$00,$00,$22,$55, $55,$88,$55,$33,$44,$88,$44,$77 +.byte $00,$00,$00,$00,$00,$00,$55,$00, $00,$00,$00,$00,$88,$00,$00,$55 +.byte $00,$00,$00,$00,$00,$00,$00,$00, $00,$00,$00,$00,$00,$00,$00,$00 diff --git a/games/keen/keen_level1.s b/games/keen/keen_level1.s index 70cf158a..61c9cfb4 100644 --- a/games/keen/keen_level1.s +++ b/games/keen/keen_level1.s @@ -14,8 +14,8 @@ MAX_TILE_Y = 5 ; (34 - 24)/2 (maybe?) keen_start: ;=================== ; init screen - jsr TEXT - jsr HOME +; jsr TEXT +; jsr HOME bit KEYRESET bit SET_GR diff --git a/games/keen/keen_mars.s b/games/keen/keen_mars.s index 88ebf5b3..5cf2c6a0 100644 --- a/games/keen/keen_mars.s +++ b/games/keen/keen_mars.s @@ -13,8 +13,8 @@ mars_start: ;=================== ; init screen - jsr TEXT - jsr HOME +; jsr TEXT +; jsr HOME bit KEYRESET bit SET_GR @@ -70,7 +70,7 @@ mars_start: lda #1 sta INITIAL_SOUND - + jsr fade_in ;==================================== ;==================================== @@ -155,6 +155,8 @@ done_with_keen: ldy #SFX_WLDENTRSND jsr play_sfx + jsr fade_out + lda #LOAD_KEEN1 sta WHICH_LOAD @@ -191,9 +193,8 @@ parts_zx02: .include "gr_pageflip.s" ; .include "gr_putsprite_crop.s" .include "zx02_optim.s" + .include "gr_fade.s" -; .include "status_bar.s" -; .include "keyboard.s" .include "joystick.s" .include "text_drawbox.s"