From cb84455f653638ec4f1011f1a19bd23375316f4e Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Tue, 2 May 2023 22:10:19 -0400 Subject: [PATCH] fn: first implementation --- games/sb/Makefile | 2 +- games/sb/fn.s | 55 +++++++++++- games/sb/fn_graphics/a2_fortnight_sprites.png | Bin 1396 -> 14457 bytes games/sb/hgr_sprite.s | 83 ++++++++++++++++++ games/sb/hgr_sprite_mask.s | 47 +++++----- 5 files changed, 164 insertions(+), 23 deletions(-) create mode 100644 games/sb/hgr_sprite.s diff --git a/games/sb/Makefile b/games/sb/Makefile index 91121910..75e274d7 100644 --- a/games/sb/Makefile +++ b/games/sb/Makefile @@ -34,7 +34,7 @@ sb.o: sb.s zx02_optim.s \ FN: fn.o ld65 -o FN fn.o -C $(LINKER_SCRIPTS)/apple2_6000.inc -fn.o: fn.s zx02_optim.s duet.s hgr_sprite_mask.s hgr_tables.s \ +fn.o: fn.s zx02_optim.s duet.s hgr_sprite_mask.s hgr_sprite.s hgr_tables.s \ zp.inc hardware.inc \ fn_sound/fortnight.ed \ fn_graphics/a2_fortnight.hgr.zx02 \ diff --git a/games/sb/fn.s b/games/sb/fn.s index eb82a554..4bec6337 100644 --- a/games/sb/fn.s +++ b/games/sb/fn.s @@ -25,6 +25,9 @@ fortnight_start: bit SET_GR bit PAGE1 + ldx #0 + sta FRAME + sta FRAMEH ;========================== ; Floppy Animation @@ -32,6 +35,7 @@ fortnight_start: floppy_animation: + ; decompress background to page1 lda #fn_image + sta ZX0_src+1 + lda #$40 jsr full_decomp + reset_floppy_loop: lda #0 sta XPOS @@ -61,9 +76,43 @@ floppy_loop: lda floppy_mask_h,X sta MASKH + ; draw sprite + jsr hgr_draw_sprite_mask_and_save + +time_loop: + + lda KEYPRESS ; 4 + bmi done_floppy + + lda #160 + jsr WAIT + + +; jsr wait_until_keypress + + ; see if end + inc FRAME + bne no_frame_oflo + inc FRAMEH +no_frame_oflo: + + lda FRAMEH + cmp #3 + beq done_floppy + + lda FRAME + and #$3 + bne time_loop + + ; erase sprite + + lda #backup_sprite + sta INH jsr hgr_draw_sprite - jsr wait_until_keypress + ; move sprite inc XPOS lda XPOS @@ -71,7 +120,8 @@ floppy_loop: bcc floppy_loop bcs reset_floppy_loop - +done_floppy: + bit KEYRESET ; clear the keyboard buffer ;========================== ; "breakdancing" rat @@ -127,6 +177,7 @@ wait_until_keypress: .include "zx02_optim.s" + .include "hgr_sprite.s" .include "hgr_sprite_mask.s" .include "hgr_tables.s" diff --git a/games/sb/fn_graphics/a2_fortnight_sprites.png b/games/sb/fn_graphics/a2_fortnight_sprites.png index 0130ae98dac996af200c7012ab3a536d64b4ccfa..6cc5e64c907569463a319b07507122eb39b76a86 100644 GIT binary patch literal 14457 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