mist_hgr: initial sprite pointer support

still needs work, also is too big
This commit is contained in:
Vince Weaver 2021-07-12 12:34:57 -04:00
parent 67c80ee430
commit 45ec8a3fe0
8 changed files with 1328 additions and 105 deletions

View File

@ -6,6 +6,7 @@ PNG_TO_40x96 = ../../utils/gr-utils/png_to_40x96
PNG_TO_40x48D = ../../utils/gr-utils/png_to_40x48d
PNG2RLE = ../../utils/gr-utils/png2rle
B2D = ../../utils/bmp2dhr/b2d
EMPTY_DISK = ../../empty_disk/empty.dsk
TOKENIZE = ../../utils/asoft_basic-utils/tokenize_asoft
@ -17,19 +18,20 @@ all: mist_hgr.dsk
# zip mist.zip mist_hgr.dsk mist_side2.dsk mist_side3.dsk
mist_hgr.dsk: QBOOT TEXT_TITLE QLOAD \
MIST_TITLE MIST OCTAGON VIEWER \
DENTIST D\'NI SHIP GENERATOR \
SAVE1 SAVE2 SAVE3 SAVE4 SAVE5
cp extra_empty.dsk mist_hgr.dsk
MIST_TITLE
#MIST OCTAGON VIEWER \
# DENTIST D\'NI SHIP GENERATOR \
# SAVE1 SAVE2 SAVE3 SAVE4 SAVE5
cp $(EMPTY_DISK) mist_hgr.dsk
$(DOS33_RAW) mist_hgr.dsk 0 0 QBOOT 0 1
$(DOS33_RAW) mist_hgr.dsk 0 2 QBOOT 1 1
$(DOS33_RAW) mist_hgr.dsk 0 4 QBOOT 2 1
$(DOS33_RAW) mist_hgr.dsk 0 6 TEXT_TITLE 0 3
$(DOS33_RAW) mist_hgr.dsk 0 11 SAVE1 0 1
$(DOS33_RAW) mist_hgr.dsk 0 12 SAVE2 0 1
$(DOS33_RAW) mist_hgr.dsk 0 13 SAVE3 0 1
$(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
$(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
# $(DOS33_RAW) mist_hgr.dsk 0 11 SAVE1 0 1
# $(DOS33_RAW) mist_hgr.dsk 0 12 SAVE2 0 1
# $(DOS33_RAW) mist_hgr.dsk 0 13 SAVE3 0 1
# $(DOS33_RAW) mist_hgr.dsk 0 14 SAVE4 0 1
# $(DOS33_RAW) mist_hgr.dsk 0 15 SAVE5 0 1
$(DOS33_RAW) mist_hgr.dsk 1 0 QLOAD 0 14
$(DOS33_RAW) mist_hgr.dsk 2 0 MIST_TITLE 0 0
# 84
@ -98,7 +100,7 @@ QLOAD: qload.o
ld65 -o QLOAD qload.o -C ../../linker_scripts/apple2_1200.inc
qload.o: qload.s qboot.inc \
gr_offsets.s \
gr_offsets.s hgr_14x14_sprite.s common_sprites.inc \
text_print.s gr_fast_clear.s decompress_fast_v2.s \
keyboard.s audio.s loadstore.s \
qkumba_popwr.s
@ -505,20 +507,20 @@ clean:
GENERATOR \
generate_common
cd graphics_title && make clean
cd graphics_mist && make clean
cd graphics_octagon && make clean
cd books && make clean
cd graphics_viewer && make clean
cd graphics_meche && make clean
cd graphics_selena && make clean
cd graphics_cabin && make clean
cd graphics_channel && make clean
cd graphics_stoney && make clean
cd graphics_dentist && make clean
cd graphics_generator && make clean
cd graphics_arbor && make clean
cd graphics_nibel && make clean
cd graphics_dni && make clean
cd graphics_ship && make clean
cd graphics_sub && make clean
# cd graphics_mist && make clean
# cd graphics_octagon && make clean
# cd books && make clean
# cd graphics_viewer && make clean
# cd graphics_meche && make clean
# cd graphics_selena && make clean
# cd graphics_cabin && make clean
# cd graphics_channel && make clean
# cd graphics_stoney && make clean
# cd graphics_dentist && make clean
# cd graphics_generator && make clean
# cd graphics_arbor && make clean
# cd graphics_nibel && make clean
# cd graphics_dni && make clean
# cd graphics_ship && make clean
# cd graphics_sub && make clean

View File

@ -1,88 +1,862 @@
finger_point_sprite:
.byte 5,5
.byte $AA,$BB,$AA,$AA,$AA
.byte $AA,$BB,$AA,$AA,$AA
.byte $BA,$BB,$BB,$BB,$BB
.byte $AB,$BB,$BB,$BB,$BB
.byte $AA,$BB,$BB,$BB,$AA
;===============
; 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:
.byte 5,5
.byte $AA,$AA,$BB,$AA,$AA
.byte $BB,$AA,$BB,$AA,$BB
.byte $BB,$BA,$BB,$BA,$BB
.byte $AB,$BB,$BB,$BB,$BB
.byte $AA,$BB,$BB,$BB,$AA
;===============
; 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:
.byte 6,4
.byte $AA,$AA,$AA,$AB,$BA,$AA
.byte $BB,$BB,$BB,$BB,$BB,$BB
.byte $AA,$AA,$BB,$BB,$BB,$BB
.byte $AA,$AA,$AB,$BB,$BB,$AB
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:
.byte 6,4
.byte $AA,$BA,$AB,$AA,$AA,$AA
.byte $BB,$BB,$BB,$BB,$BB,$BB
.byte $BB,$BB,$BB,$BB,$AA,$AA
.byte $AB,$BB,$BB,$AB,$AA,$AA
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:
.byte 6,4
.byte $aa,$aa,$ba,$bb,$aa,$aa
.byte $ba,$bb,$bb,$bb,$bb,$ba
.byte $aa,$ab,$bb,$bb,$ab,$bb
.byte $aa,$aa,$aa,$ab,$aa,$ab
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:
.byte 6,4
.byte $aa,$aa,$bb,$ba,$aa,$aa
.byte $ba,$bb,$bb,$bb,$bb,$ba
.byte $bb,$ab,$bb,$bb,$ab,$aa
.byte $ab,$aa,$ab,$aa,$aa,$aa
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:
.byte 6,4
.byte $aa,$aa,$aa,$aa,$ba,$ba
.byte $1a,$da,$da,$db,$db,$db
.byte $a1,$ad,$ad,$bd,$bd,$ad
.byte $aa,$aa,$aa,$aa,$ab,$bb
.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:
.byte 6,4
.byte $9a,$a9,$aa,$aa,$ba,$ba
.byte $19,$da,$da,$db,$db,$db
.byte $a9,$ad,$ad,$bd,$bd,$ad
.byte $aa,$aa,$aa,$aa,$ab,$bb
.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:
.byte 6,4
.byte $aa,$aa,$aa,$aa,$aa,$bd
.byte $dd,$dd,$dd,$dd,$db,$bb
.byte $aa,$ad,$aa,$ab,$bd,$bb
.byte $aa,$aa,$aa,$aa,$ab,$ab
.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:
.byte 5,5
.byte $3a,$33,$33,$aa,$aa
.byte $33,$33,$33,$ba,$aa
.byte $33,$b3,$33,$bb,$ba
.byte $33,$3b,$bb,$bb,$bb
.byte $a3,$a3,$bb,$bb,$bb
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:
.byte 5,5
.byte $6a,$66,$66,$aa,$aa
.byte $66,$66,$66,$ba,$aa
.byte $66,$b6,$66,$bb,$ba
.byte $66,$6b,$bb,$bb,$bb
.byte $a6,$a6,$bb,$bb,$bb
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:
.byte 5,5
.byte $fa,$ff,$ff,$aa,$aa
.byte $ff,$ff,$ff,$ba,$aa
.byte $ff,$bf,$ff,$bb,$ba
.byte $ff,$fb,$bb,$bb,$bb
.byte $af,$af,$bb,$bb,$bb
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

View File

@ -0,0 +1,266 @@
;====================================
; draw pointer
;====================================
draw_pointer:
; for now assume the only 14x14 sprites are the pointers
lda CURSOR_X
sta XPOS
lda CURSOR_Y
sta YPOS
; see if inside special region
ldy #LOCATION_SPECIAL_EXIT
lda (LOCATION_STRUCT_L),Y
cmp #$ff
beq finger_not_special ; if $ff not special
; lda (LOCATION_STRUCT_L),Y
; cmp #DIRECTION_ANY
; beq was_any
lda DIRECTION
and #$f
and (LOCATION_STRUCT_L),Y
beq finger_not_special ; only special if facing right way
;was_any:
; 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
; we made it this far, we are special
finger_grab:
lda #1
sta IN_SPECIAL
lda CURSOR_VISIBLE ; if not visible skip
bne really_draw_grab
rts
really_draw_grab:
lda DIRECTION
and #DIRECTION_ONLY_POINT
bne special_but_point
lda #<finger_grab_sprite
sta INL
lda #>finger_grab_sprite
jmp finger_draw
special_but_point:
jmp finger_point
finger_not_special:
lda CURSOR_VISIBLE ; if not visible skip
bne really_not_special
rts
really_not_special:
; check for left/right
lda CURSOR_X
cmp #7
bcc check_cursor_left ; blt
cmp #$f0 ; check if off left side of screen
bcs check_cursor_left ; bge
cmp #33
bcs check_cursor_right ; bge
; otherwise, finger_point
finger_point:
; holding item takes precednce
lda HOLDING_ITEM
cmp #HOLDING_MATCH
beq match_finger
cmp #HOLDING_LIT_MATCH
beq match_lit_finger
cmp #HOLDING_KEY
beq key_finger
lda HOLDING_PAGE
and #$c0
beq real_finger_point
cmp #HOLDING_BLUE_PAGE
beq blue_finger
cmp #HOLDING_WHITE_PAGE
beq white_finger
cmp #HOLDING_RED_PAGE
; beq red_finger
red_finger:
lda #<finger_red_page_sprite
sta INL
lda #>finger_red_page_sprite
jmp finger_draw
; all that's left is key
key_finger:
lda #<finger_key_sprite
sta INL
lda #>finger_key_sprite
jmp finger_draw
match_finger:
lda #<finger_match_sprite
sta INL
lda #>finger_match_sprite
jmp finger_draw
match_lit_finger:
lda #<finger_match_lit_sprite
sta INL
lda #>finger_match_lit_sprite
jmp finger_draw
blue_finger:
lda #<finger_blue_page_sprite
sta INL
lda #>finger_blue_page_sprite
jmp finger_draw
white_finger:
lda #<finger_white_page_sprite
sta INL
lda #>finger_white_page_sprite
jmp finger_draw
real_finger_point:
lda #<finger_point_sprite
sta INL
lda #>finger_point_sprite
jmp finger_draw
check_cursor_left:
jsr lookup_direction
and #$f
beq finger_point
cmp #$1
beq finger_left
bne finger_uturn_left
check_cursor_right:
jsr lookup_direction
and #$f0
beq finger_point
cmp #$10
beq finger_right
bne finger_uturn_right
lookup_direction:
lda DIRECTION
and #$f
tay
lda log2_table,Y
asl
asl
asl
asl
clc
ldy #LOCATION_BGS
adc (LOCATION_STRUCT_L),Y
tay
lda direction_lookup,Y
rts
finger_left:
lda #1
sta IN_LEFT
lda #<finger_left_sprite
sta INL
lda #>finger_left_sprite
jmp finger_draw
finger_right:
lda #1
sta IN_RIGHT
lda #<finger_right_sprite
sta INL
lda #>finger_right_sprite
jmp finger_draw
finger_uturn_left:
lda #2
sta IN_LEFT
lda #<finger_turn_left_sprite
sta INL
lda #>finger_turn_left_sprite
jmp finger_draw
finger_uturn_right:
lda #2
sta IN_RIGHT
lda #<finger_turn_right_sprite
sta INL
lda #>finger_turn_right_sprite
jmp finger_draw
finger_draw:
sta INH
jsr hgr_draw_sprite_14x14
no_draw_pointer:
rts
; 0 = point
; 1 = left
; 2 = left u-turn
; R/L EWSN 0010
; 1010
direction_lookup:
direction_lookup_n:
.byte $00,$00,$22,$22,$01,$01,$21,$21,$10,$10,$12,$12,$11,$11,$11,$11
direction_lookup_s:
; N S SN W WN WS WSN
.byte $00, $22,$00,$22,$10,$12,$10,$12
; E EN ES ESN EW EWN EWS EWSN
.byte $01,$02,$01,$21,$11,$11,$11,$11
direction_lookup_e:
.byte $00,$01,$10,$11,$22,$21,$12,$11,$00,$01,$10,$11,$22,$21,$12,$11
direction_lookup_w:
.byte $00,$10,$01,$11,$00,$10,$01,$11,$22,$12,$21,$11,$22,$12,$21,$11

View File

@ -97,8 +97,16 @@ int main(int argc, char **argv) {
find_address("page_flip");
printf("\n");
printf("; gr_putsprite_crop.s\n");
find_address("put_sprite_crop");
// printf("; gr_putsprite_crop.s\n");
// find_address("put_sprite_crop");
// find_address("psc_smc1");
// find_address("psc_smc2");
// printf("\n");
printf("; hgr_14x14_sprite.s\n");
find_address("hgr_draw_sprite_14x14");
find_address("save_bg_14x14");
find_address("restore_bg_14x14");
find_address("psc_smc1");
find_address("psc_smc2");
printf("\n");

View File

@ -44,4 +44,4 @@ title_graphics.inc: \
####
clean:
rm -f *~ *.o *.lst *.data *.lzsa
rm -f *~ *.o *.lst *.data *.lzsa title_graphics.inc

View File

@ -0,0 +1,177 @@
;======================
; 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)
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)
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)
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

View File

@ -472,6 +472,9 @@ done_intro:
lda #1
sta CURSOR_VISIBLE ; visible at first
jsr save_bg_14x14 ; save initial bg
game_loop:
;=================
; reset things
@ -560,13 +563,7 @@ nothing_special:
; draw pointer
;====================================
; jsr draw_pointer
;====================================
; page flip
;====================================
; jsr page_flip
jsr draw_pointer ; draw pointer
;====================================
; handle keypress/joystick
@ -574,7 +571,6 @@ nothing_special:
jsr handle_keypress
;====================================
; inc frame count
;====================================

View File

@ -224,13 +224,13 @@ length_array:
.include "audio.s"
.include "linking_noise.s"
.include "decompress_fast_v2.s"
; .include "draw_pointer.s"
.include "draw_pointer.s"
; .include "end_level.s"
; .include "gr_copy.s"
.include "gr_fast_clear.s"
.include "gr_offsets.s"
; .include "gr_pageflip.s"
; .include "gr_putsprite_crop.s"
.include "hgr_14x14_sprite.s"
.include "keyboard.s"
.include "text_print.s"
.include "loadstore.s"
@ -238,7 +238,7 @@ length_array:
.include "log_table.s"
; .include "page_sprites.inc"
; .include "common_sprites.inc"
.include "common_sprites.inc"
.include "qkumba_popwr.s"