From 64d38d1cc2128eae33302cc79c24a561e9fd1f8d Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Wed, 9 Mar 2022 15:15:38 -0500 Subject: [PATCH] lemm: start adding pointer --- games/lemm/common_sprites.inc | 862 ++++++++++++++++++++++++++++++++++ games/lemm/draw_door.s | 4 +- games/lemm/draw_flames.s | 8 +- games/lemm/draw_pointer.s | 52 ++ games/lemm/hgr_14x14_sprite.s | 207 ++++++++ games/lemm/hgr_sprite.s | 18 +- games/lemm/lemm.s | 16 + games/lemm/update_time.s | 12 +- games/lemm/zp.inc | 1 + 9 files changed, 1159 insertions(+), 21 deletions(-) create mode 100644 games/lemm/common_sprites.inc create mode 100644 games/lemm/draw_pointer.s create mode 100644 games/lemm/hgr_14x14_sprite.s diff --git a/games/lemm/common_sprites.inc b/games/lemm/common_sprites.inc new file mode 100644 index 00000000..dd8bd76e --- /dev/null +++ b/games/lemm/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/lemm/draw_door.s b/games/lemm/draw_door.s index fd36fe63..7a296656 100644 --- a/games/lemm/draw_door.s +++ b/games/lemm/draw_door.s @@ -13,9 +13,9 @@ draw_door: sta INH ldx #9 ; 63 - stx CURSOR_X + stx XPOS lda #36 - sta CURSOR_Y + sta YPOS jsr hgr_draw_sprite diff --git a/games/lemm/draw_flames.s b/games/lemm/draw_flames.s index eb063699..5f99e0ba 100644 --- a/games/lemm/draw_flames.s +++ b/games/lemm/draw_flames.s @@ -13,9 +13,9 @@ draw_flames: sta INH ldx #31 ; 217 - stx CURSOR_X + stx XPOS lda #108 - sta CURSOR_Y + sta YPOS jsr hgr_draw_sprite @@ -31,9 +31,9 @@ draw_flames: sta INH ldx #35 ; 245 - stx CURSOR_X + stx XPOS lda #108 - sta CURSOR_Y + sta YPOS jmp hgr_draw_sprite diff --git a/games/lemm/draw_pointer.s b/games/lemm/draw_pointer.s new file mode 100644 index 00000000..aa7e7112 --- /dev/null +++ b/games/lemm/draw_pointer.s @@ -0,0 +1,52 @@ + ;==================================== + ; draw pointer + ;==================================== + + +draw_pointer: + + lda #0 + sta OVER_LEMMING + +; jsr save_bg_14x14 ; save old bg + + ; for now assume the only 14x14 sprites are the pointers + + lda CURSOR_X + sta XPOS + lda CURSOR_Y + sta YPOS + + ; see if over lemming + + ; TODO + + ; see if X1 < X < X2 +; lda CURSOR_X +; ldy #LOCATION_SPECIAL_X1 +; cmp (LOCATION_STRUCT_L),Y +; bcc finger_not_special ; blt + +; ldy #LOCATION_SPECIAL_X2 +; cmp (LOCATION_STRUCT_L),Y +; bcs finger_not_special ; bge + + ; see if Y1 < Y < Y2 +; lda CURSOR_Y +; ldy #LOCATION_SPECIAL_Y1 +; cmp (LOCATION_STRUCT_L),Y +; bcc finger_not_special ; blt + +; ldy #LOCATION_SPECIAL_Y2 +; cmp (LOCATION_STRUCT_L),Y +; bcs finger_not_special ; bge + + + + lda #>finger_turn_right_sprite + sta INL + lda #>finger_turn_right_sprite + sta INH + jsr hgr_draw_sprite_14x14 + + rts diff --git a/games/lemm/hgr_14x14_sprite.s b/games/lemm/hgr_14x14_sprite.s new file mode 100644 index 00000000..376dfeb6 --- /dev/null +++ b/games/lemm/hgr_14x14_sprite.s @@ -0,0 +1,207 @@ + + ;====================== + ; 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 + +; ldx #0 +; ldy #0 + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + tay + + lda hposn_high,Y + sta GBASH + lda hposn_low,Y + sta GBASL + + + + 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 + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + + tay + + lda hposn_high,Y + sta GBASH + lda hposn_low,Y + sta GBASL + + + 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 + + ; calc GBASL/GBASH +; jsr HPOSN ; (Y,X),(A) (values stored in HGRX,XH,Y) + + tay + + lda hposn_high,Y + sta GBASH + lda hposn_low,Y + sta GBASL + + + 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 + + + +.include "common_sprites.inc" diff --git a/games/lemm/hgr_sprite.s b/games/lemm/hgr_sprite.s index 92d0a28f..8e2d91c0 100644 --- a/games/lemm/hgr_sprite.s +++ b/games/lemm/hgr_sprite.s @@ -2,7 +2,7 @@ ; hgr draw sprite (only at 7-bit boundaries) ;=========================================== ; SPRITE in INL/INH - ; Location at CURSOR_X CURSOR_Y + ; Location at XPOS YPOS ; xsize, ysize in first two bytes @@ -13,7 +13,7 @@ hgr_draw_sprite: ldy #0 lda (INL),Y ; load xsize clc - adc CURSOR_X + adc XPOS sta sprite_width_end_smc+1 ; self modify for end of line iny ; load ysize @@ -38,7 +38,7 @@ hgr_sprite_yloop: lda MASK ; row clc - adc CURSOR_Y ; add in cursor_y + adc YPOS ; add in cursor_y ; calc GBASL/GBASH @@ -53,7 +53,7 @@ hgr_sprite_page_smc: eor #$00 sta GBASH - ldy CURSOR_X + ldy XPOS sprite_inner_loop: @@ -95,7 +95,7 @@ sprite_ysize_smc: ; and shifts it if in odd column ; SPRITE in INL/INH - ; Location at CURSOR_X CURSOR_Y + ; Location at XPOS YPOS ; xsize, ysize in first two bytes @@ -107,7 +107,7 @@ hgr_draw_sprite_autoshift: ; SEC=$38 0b0011 1000 CLC=$18 0b0001 10000 - lda CURSOR_X + lda XPOS lsr bcc make_it_even @@ -123,7 +123,7 @@ make_it_so: ldy #0 lda (INL),Y ; load xsize clc - adc CURSOR_X + adc XPOS sta sprite_width_end_smc_as+1 ; self modify for end of line iny ; load ysize @@ -148,7 +148,7 @@ hgr_sprite_yloop_as: lda MASK ; row clc - adc CURSOR_Y ; add in cursor_y + adc YPOS ; add in cursor_y ; calc GBASL/GBASH @@ -163,7 +163,7 @@ hgr_sprite_page_smc_as: eor #$00 sta GBASH - ldy CURSOR_X + ldy XPOS sprite_inner_loop_as: diff --git a/games/lemm/lemm.s b/games/lemm/lemm.s index ac0d70f5..f21894eb 100644 --- a/games/lemm/lemm.s +++ b/games/lemm/lemm.s @@ -251,6 +251,16 @@ zurg: jsr decompress_lzsa2_fast + ;======================= + ; Setup cursor + ;======================= + + lda #0 + sta OVER_LEMMING + lda #10 + sta CURSOR_X + lda #100 + sta CURSOR_Y ;======================= ; Play "Let's Go" @@ -311,6 +321,9 @@ door_is_open: jsr update_time + jsr draw_pointer + + lda #$ff jsr wait @@ -380,10 +393,13 @@ load_song_chunk_good: ; .include "print_help.s" ; .include "gr_fast_clear.s" + + .include "hgr_14x14_sprite.s" .include "text_print.s" .include "lc_detect.s" + .include "draw_pointer.s" .include "hgr_tables.s" .include "hgr_sprite.s" diff --git a/games/lemm/update_time.s b/games/lemm/update_time.s index 99c9b8f2..d35abbe9 100644 --- a/games/lemm/update_time.s +++ b/games/lemm/update_time.s @@ -40,9 +40,9 @@ draw_time: ; 246, 152 ldx #35 ; 245 - stx CURSOR_X + stx XPOS lda #152 - sta CURSOR_Y + sta YPOS jsr hgr_draw_sprite_autoshift @@ -60,9 +60,9 @@ draw_time: sta INH ldx #37 - stx CURSOR_X + stx XPOS lda #152 - sta CURSOR_Y + sta YPOS jsr hgr_draw_sprite_autoshift @@ -78,9 +78,9 @@ draw_time: sta INH ldx #38 - stx CURSOR_X + stx XPOS lda #152 - sta CURSOR_Y + sta YPOS jsr hgr_draw_sprite_autoshift diff --git a/games/lemm/zp.inc b/games/lemm/zp.inc index d07ae85c..dd562811 100644 --- a/games/lemm/zp.inc +++ b/games/lemm/zp.inc @@ -59,6 +59,7 @@ DOOR_OPEN = $7C CHUNK_NEXT_LOAD = $7D CHUNK_NEXT_PLAY = $7E LOAD_NEXT_CHUNK = $7F +OVER_LEMMING = $80 APPLEII_MODEL = $8B