From fb54ea2c6eb54a23fc64f348f4c8e87d0be8b5e9 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Sun, 12 May 2024 23:15:58 -0400 Subject: [PATCH] riven_hgr: add pointer code from mist_hgr --- games/riven_hgr/Makefile | 2 + games/riven_hgr/common_sprites.inc | 862 +++++++++++++++++++++++++++++ games/riven_hgr/hello.bas | 6 +- games/riven_hgr/hgr_14x14_sprite.s | 195 +++++++ games/riven_hgr/keyboard.s | 241 ++++++++ games/riven_hgr/main.s | 36 +- games/riven_hgr/zp.inc | 3 + 7 files changed, 1341 insertions(+), 4 deletions(-) create mode 100644 games/riven_hgr/common_sprites.inc create mode 100644 games/riven_hgr/hgr_14x14_sprite.s create mode 100644 games/riven_hgr/keyboard.s diff --git a/games/riven_hgr/Makefile b/games/riven_hgr/Makefile index f9b9624f..d05c8a91 100644 --- a/games/riven_hgr/Makefile +++ b/games/riven_hgr/Makefile @@ -39,6 +39,8 @@ MAIN: main.o main.o: main.s zp.inc hardware.inc \ zx02_optim.s \ hgr_sprite.s hgr_tables.s \ + keyboard.s \ + hgr_14x14_sprite.s \ graphics/maglev1.hgr.zx02 ca65 -o main.o main.s -l main.lst diff --git a/games/riven_hgr/common_sprites.inc b/games/riven_hgr/common_sprites.inc new file mode 100644 index 00000000..dd8bd76e --- /dev/null +++ b/games/riven_hgr/common_sprites.inc @@ -0,0 +1,862 @@ +finger_point_sprite: + +;=============== +; point sprite +;=============== + +point_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +point_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +point_mask_l: ; X 654 3 210 +.byte $9f ; 1 001 1 111 +.byte $8f ; 1 000 1 111 +.byte $8f ; 1 000 1 111 +.byte $8f ; 1 000 1 111 +.byte $88 ; 1 000 1 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $81 ; 1 000 0 001 +.byte $81 ; 1 000 0 001 +.byte $83 ; 1 000 0 011 +.byte $87 ; 1 000 0 111 +.byte $8f ; 1 000 1 111 +.byte $8f ; 1 000 1 111 + +point_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + +finger_grab_sprite: +;=============== +; grab sprite +;=============== + +grab_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $4c ; 0 100 1 100 +.byte $4c ; 0 100 1 100 +.byte $58 ; 0 101 1 000 +.byte $58 ; 0 101 1 000 +.byte $70 ; 0 111 0 000 +.byte $73 ; 0 111 0 011 +.byte $77 ; 0 111 0 111 +.byte $7e ; 0 111 1 110 +.byte $7c ; 0 111 1 100 +.byte $7c ; 0 111 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 + +grab_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $0d ; 0 000 1 101 +.byte $0d ; 0 000 1 101 +.byte $0d ; 0 000 1 101 +.byte $6d ; 0 110 1 101 +.byte $6f ; 0 110 1 111 +.byte $7f ; 0 111 1 111 +.byte $3f ; 0 011 1 111 +.byte $3f ; 0 011 1 111 +.byte $3f ; 0 011 1 111 +.byte $1f ; 0 001 1 111 +.byte $1f ; 0 001 1 111 +.byte $0f ; 0 000 1 111 +.byte $0f ; 0 000 1 111 + +grab_mask_l: ; X 654 3 210 +.byte $b3 ; 1 011 0 011 +.byte $81 ; 1 000 0 001 +.byte $81 ; 1 000 0 001 +.byte $83 ; 1 000 0 011 +.byte $83 ; 1 000 0 011 +.byte $84 ; 1 000 0 100 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $81 ; 1 000 0 001 +.byte $81 ; 1 000 0 001 +.byte $83 ; 1 000 0 011 +.byte $c7 ; 1 100 0 111 +.byte $c7 ; 1 100 1 111 + +grab_mask_r: ; X 654 3 210 +.byte $f2 ; 1 111 0 010 +.byte $e0 ; 1 110 0 000 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 +.byte $e0 ; 1 110 0 000 +.byte $e0 ; 1 110 0 000 + + +;====================== +; finger left +;====================== +; TODO + +finger_left_sprite: + +finger_left_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_left_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_left_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_left_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + +;==================== +; finger right +;==================== +; TODO + +finger_right_sprite: +finger_right_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_right_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_right_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_right_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + +;==================== +; Finger turn left +;==================== +finger_turn_left_sprite: + +finger_turn_left_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_turn_left_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_turn_left_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_turn_left_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + +;===================== +; Finger turn right +;===================== +; TODO + +finger_turn_right_sprite: + +finger_turn_right_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_turn_right_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_turn_right_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_turn_right_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + +;===================== +; finger match +;===================== +; TODO + +finger_match_sprite: +.if 0 +finger_match_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_match_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_match_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_match_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 +.endif + +;====================== +; finger match lit +;====================== +; TODO + +finger_match_lit_sprite: +.if 0 +finger_match_lit_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_match_lit_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_match_lit_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_match_lit_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 +.endif + +;========================= +; finger key sprite +;========================= +; TODO + +finger_key_sprite: +.if 0 +finger_key_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_key_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_key_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_key_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 +.endif + +;=========================== +; finger red sprite +;=========================== +; TODO + +finger_red_page_sprite: + +finger_red_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_red_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_red_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_red_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + +;===================== +; finger blue sprite +;===================== +; TODO + +finger_blue_page_sprite: + +finger_blue_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_blue_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_blue_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_blue_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + +;======================== +; finger white page +;======================== +; TODO + +finger_white_page_sprite: + +finger_white_sprite_l: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 +.byte $63 ; 0 110 0 011 +.byte $66 ; 0 110 0 110 +.byte $2c ; 0 010 1 100 +.byte $6c ; 0 110 1 100 +.byte $78 ; 0 111 1 000 +.byte $70 ; 0 111 0 000 +.byte $70 ; 0 111 0 000 +.byte $60 ; 0 110 0 000 +.byte $60 ; 0 110 0 000 + +finger_white_sprite_r: ; X 654 3 210 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $00 ; 0 000 0 000 +.byte $0A ; 0 000 1 010 +.byte $2A ; 0 010 1 010 +.byte $2D ; 0 010 1 101 +.byte $37 ; 0 011 0 111 +.byte $3F ; 0 011 1 111 +.byte $3F ; 0 011 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 +.byte $1F ; 0 001 1 111 + +finger_white_mask_l: ; X 654 3 210 +.byte $ff ; 1 001 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 000 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 001 +.byte $ff ; 1 000 0 011 +.byte $ff ; 1 000 0 111 +.byte $ff ; 1 000 1 111 +.byte $ff ; 1 000 1 111 + +finger_white_mask_r: ; X 654 3 210 +.byte $ff ; 1 111 1 111 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $fe ; 1 111 1 110 +.byte $e0 ; 1 110 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $80 ; 1 000 0 000 +.byte $c0 ; 1 100 0 000 +.byte $c0 ; 1 100 0 000 + + + + + + + + diff --git a/games/riven_hgr/hello.bas b/games/riven_hgr/hello.bas index cf1788d9..8336a1e6 100644 --- a/games/riven_hgr/hello.bas +++ b/games/riven_hgr/hello.bas @@ -1,8 +1,8 @@ 5 HOME -10 PRINT "LOADING KEEN V0.08" -20 PRINT " KEEN1 PROOF-OF-CONCEPT DEMAKE" +10 PRINT "LOADING RIVEN SUBSET V0.01" +20 PRINT " RIVEN SCENES" 30 PRINT:PRINT -70 PRINT "BASED ON KEEN1 BY ID" +70 PRINT "BASED ON RIVEN BY CYAN" 75 PRINT:PRINT 80 PRINT "APPLE II PORT: VINCE WEAVER" 90 PRINT "DISK CODE : QKUMBA" diff --git a/games/riven_hgr/hgr_14x14_sprite.s b/games/riven_hgr/hgr_14x14_sprite.s new file mode 100644 index 00000000..5815babf --- /dev/null +++ b/games/riven_hgr/hgr_14x14_sprite.s @@ -0,0 +1,195 @@ + + ;====================== + ; hgr 14x14 draw sprite + ;====================== + ; SPRITE in INL/INH + ; Location at CURSOR_X CURSOR_Y + + ; left sprite AT INL/INH + ; right sprite at INL/INH + 14 + ; left mask at INL/INH + 28 + ; right mask at INL/INH + 42 + +hgr_draw_sprite_14x14: + + ; set up pointers + lda INL + sta hds_smc1+1 + lda INH + sta hds_smc1+2 + + clc + lda INL + adc #14 + sta hds_smc2+1 + lda INH + adc #0 + sta hds_smc2+2 + + clc + lda INL + adc #28 + sta hds_smc3+1 + lda INH + adc #0 + sta hds_smc3+2 + + clc + lda INL + adc #42 + sta hds_smc4+1 + lda INH + adc #0 + sta hds_smc4+2 + + + ldx #0 +hgr_14x14_sprite_yloop: + txa + pha + + clc + adc CURSOR_Y + + tax + lda hposn_high,X + sta GBASH + lda hposn_low,X + sta GBASL + +; ldx #0 +; ldy #0 + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + pla + tax + + ldy CURSOR_X + + lda (GBASL),Y +hds_smc3: + and point_mask_l,X +hds_smc1: + ora point_sprite_l,X + sta (GBASL),Y + + iny + + lda (GBASL),Y +hds_smc4: + and point_mask_r,X +hds_smc2: + ora point_sprite_r,X + sta (GBASL),Y + + inx + cpx #14 + bne hgr_14x14_sprite_yloop + + rts + + + + ;====================== + ; save bg 14x14 + ;====================== + +save_bg_14x14: + + ldx #0 +save_yloop: + txa + pha + + clc + adc CURSOR_Y + +; ldx #0 +; ldy #0 + + tax + lda hposn_high,X + sta GBASH + lda hposn_low,X + sta GBASL + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + pla + tax + + ldy CURSOR_X + + lda (GBASL),Y + sta save_left_14x14,X + + iny + + lda (GBASL),Y + sta save_right_14x14,X + + inx + cpx #14 + bne save_yloop + + rts + + ;====================== + ; restore bg 14x14 + ;====================== + +restore_bg_14x14: + + ldx #0 +restore_yloop: + txa + pha + + clc + adc CURSOR_Y + +; ldx #0 +; ldy #0 + + tax + lda hposn_high,X + sta GBASH + lda hposn_low,X + sta GBASL + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + pla + tax + + ldy CURSOR_X + + lda save_left_14x14,X + sta (GBASL),Y + + iny + + lda save_right_14x14,X + sta (GBASL),Y + + + inx + cpx #14 + bne restore_yloop + + rts + + +;==================== +; save area +;==================== + +save_right_14x14: +.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 + +save_left_14x14: +.byte $00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00,$00 diff --git a/games/riven_hgr/keyboard.s b/games/riven_hgr/keyboard.s new file mode 100644 index 00000000..d785b358 --- /dev/null +++ b/games/riven_hgr/keyboard.s @@ -0,0 +1,241 @@ + + ;============================== + ; Handle Keypress + ;============================== +handle_keypress: + + ; first handle joystick + lda JOYSTICK_ENABLED + beq actually_handle_keypress + + ; only check joystick every-other frame + lda FRAMEL + and #$1 + beq actually_handle_keypress + +check_button: + lda PADDLE_BUTTON0 + bpl button_clear + + lda JS_BUTTON_STATE + bne js_check + + lda #1 + sta JS_BUTTON_STATE + lda #' ' + jmp handle_input + +button_clear: + lda #0 + sta JS_BUTTON_STATE + +js_check: +; jsr handle_joystick + +js_check_left: +; lda value0 + ; cmp #$20 + ; bcs js_check_right ; if less than 32, left + ; lda #'A' + ; bne handle_input + +js_check_right: + cmp #$40 + bcc js_check_up + lda #'D' + bne handle_input + +js_check_up: +; lda value1 + ; cmp #$20 + ; bcs js_check_down + ; lda #'W' + + bne handle_input + +js_check_down: + cmp #$40 + bcc done_joystick + lda #'S' + bne handle_input + + +done_joystick: + + + +actually_handle_keypress: + lda KEYPRESS + bmi keypress + + jmp no_keypress + +keypress: + and #$7f ; clear high bit + cmp #' ' + beq handle_input ; make sure not to lose space + and #$df ; convert uppercase to lower case + + +handle_input: + + pha + jsr restore_bg_14x14 ; restore old background + inc UPDATE_POINTER + pla + +;check_sound: +; cmp #$14 ; control-T +; bne check_joystick +; +; lda SOUND_STATUS +; eor #SOUND_DISABLED +; sta SOUND_STATUS +; jmp done_keypress + + ; can't be ^J as that's the same as down +;check_joystick: +; cmp #$10 ; control-P +; cmp #'J' +; bne check_load + +; lda JOYSTICK_ENABLED +; eor #1 +; sta JOYSTICK_ENABLED +; jmp done_keypress + +;check_load: +; cmp #$C ; control-L +; bne check_save + +; jsr load_game +; jmp done_keypress + +;check_save: +; cmp #$13 ; control-S +; bne check_left + +; jsr save_game +; jmp done_keypress + +check_left: + cmp #'A' + beq left_pressed + cmp #8 ; left key + bne check_right +left_pressed: + lda CURSOR_X ; if 41finger_point_sprite + sta INH + jsr hgr_draw_sprite_14x14 + +no_draw_pointer: + jmp blah .if 0 @@ -397,11 +427,15 @@ init_vars: ; .include "lc_detect.s" + .include "keyboard.s" + .include "hgr_14x14_sprite.s" new_title: .incbin "graphics/maglev1.hgr.zx02" +.include "common_sprites.inc" + .if 0 .include "graphics/title_sprites.inc" diff --git a/games/riven_hgr/zp.inc b/games/riven_hgr/zp.inc index 780d423a..2897e881 100644 --- a/games/riven_hgr/zp.inc +++ b/games/riven_hgr/zp.inc @@ -165,6 +165,9 @@ SPRITE_X = $B8 ; title HGR_PAGE = $B9 ; title MENU_OPTION = $BA ; title WHICH_CURSOR = $BB ; title +CURSOR_X = $BC +CURSOR_Y = $BD +UPDATE_POINTER = $BE WHICH_SLOT = $DA JS_BUTTON_STATE = $DB