keen: add mars map

This commit is contained in:
Vince Weaver 2024-03-11 01:37:08 -04:00
parent 3143e46d90
commit e002d2e982
9 changed files with 445 additions and 8 deletions

View File

@ -11,12 +11,13 @@ EMPTY_DISK = ../../empty_disk/empty.dsk
all: keen.dsk
keen.dsk: HELLO LOADER KEEN_TITLE KEEN_LEVEL1
keen.dsk: HELLO LOADER KEEN_TITLE KEEN_MARS KEEN_LEVEL1
#KEEN_LEVEL2
cp $(EMPTY_DISK) keen.dsk
$(DOS33) -y keen.dsk SAVE A HELLO
$(DOS33) -y keen.dsk BSAVE -a 0x1000 LOADER
$(DOS33) -y keen.dsk BSAVE -a 0x4000 KEEN_TITLE
$(DOS33) -y keen.dsk BSAVE -a 0x2000 KEEN_MARS
$(DOS33) -y keen.dsk BSAVE -a 0x2000 KEEN_LEVEL1
# $(DOS33) -y keen.dsk BSAVE -a 0x2000 KEEN_LEVEL2
@ -46,6 +47,15 @@ keen_title.o: keen_title.s zp.inc hardware.inc init_vars.s \
####
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 \
maps/mars_map.gr.zx02
ca65 -o keen_mars.o keen_mars.s -l keen_mars.lst
####
KEEN_LEVEL1: keen_level1.o
ld65 -o KEEN_LEVEL1 keen_level1.o -C ../../linker_scripts/apple2_2000.inc
@ -94,7 +104,7 @@ maps/level1_map.lzsa:
####
clean:
rm -f *~ *.o *.lst HELLO KEEN_TITLE KEEN_LEVEL1
rm -f *~ *.o *.lst HELLO KEEN_TITLE KEEN_MARS KEEN_LEVEL1
cd graphics && make clean
cd maps && make clean
# cd title && make clean

View File

@ -1,6 +1,7 @@
LOAD_TITLE = 0
LOAD_KEEN1 = 1
LOAD_KEEN2 = 2
LOAD_MARS = 1
LOAD_KEEN1 = 2
LOAD_KEEN2 = 3
TILES = $9000

View File

@ -196,7 +196,7 @@ done_with_keen:
bit KEYRESET ; clear keypress
lda #LOAD_KEEN2
lda #LOAD_TITLE
sta WHICH_LOAD
rts ; exit back

410
games/keen/keen_mars.s Normal file
View File

@ -0,0 +1,410 @@
; Keen MARS main map
; TODO: should make it scrollable, etc
; by deater (Vince Weaver) <vince@deater.net>
; Zero Page
.include "zp.inc"
.include "hardware.inc"
.include "common_defines.inc"
keen_start:
;===================
; init screen
jsr TEXT
jsr HOME
bit KEYRESET
bit SET_GR
bit PAGE0
bit LORES
bit FULLGR
jsr clear_all ; avoid grey stripes at load
;=====================
; init vars
;=====================
lda #0
sta ANIMATE_FRAME
sta FRAMEL
sta FRAMEH
sta DISP_PAGE
sta JOYSTICK_ENABLED
sta KEEN_WALKING
sta KEEN_JUMPING
sta LEVEL_OVER
sta LASER_OUT
sta KEEN_XL
sta SCORE0
sta SCORE1
sta SCORE2
sta KEEN_FALLING
sta KEEN_SHOOTING
sta KICK_UP_DUST
sta DOOR_ACTIVATED
sta INVENTORY
; lda #<enemy_data
; sta ENEMY_DATAL
; lda #>enemy_data
; sta ENEMY_DATAH
; FIXME: temporary
; lda INVENTORY
; ora #INV_RED_KEY
; sta INVENTORY
; lda #$10
; sta SCORE0
lda #1
sta FIREPOWER
lda #2 ; draw twice (both pages)
sta UPDATE_STATUS
lda #7
sta HEALTH
lda #4
sta DRAW_PAGE
lda #18
sta KEEN_X
lda #11
sta KEEN_Y
;====================================
; load mars background
;====================================
lda #<mars_zx02
sta ZX0_src
lda #>mars_zx02
sta ZX0_src+1
lda #$c ; load to page $c00
jsr full_decomp
;====================================
;====================================
; Main loop
;====================================
;====================================
keen_loop:
; copy over background
jsr gr_copy_to_current
; draw keen
jsr draw_keen
jsr page_flip
jsr handle_keypress
; jsr move_keen
;========================
; increment frame count
;========================
inc FRAMEL
bne no_frame_oflo
inc FRAMEH
no_frame_oflo:
;===========================
; check end of level
;===========================
lda LEVEL_OVER
beq do_keen_loop
jmp done_with_keen
do_keen_loop:
; delay
; lda #200
; jsr WAIT
jmp keen_loop
done_with_keen:
bit KEYRESET ; clear keypress
lda #LOAD_KEEN1
sta WHICH_LOAD
rts ; exit back
;==========================
; includes
;==========================
; level graphics
mars_zx02:
.incbin "maps/mars_map.gr.zx02"
.include "text_print.s"
.include "gr_offsets.s"
.include "gr_fast_clear.s"
.include "gr_copy.s"
.include "gr_pageflip.s"
; .include "gr_putsprite_crop.s"
.include "zx02_optim.s"
; .include "status_bar.s"
; .include "keyboard.s"
.include "joystick.s"
.include "text_drawbox.s"
.include "print_help.s"
.include "quit_yn.s"
; .include "level_end.s"
.include "sound_effects.s"
.include "speaker_tone.s"
;=========================
; draw keen
;=========================
; D32
draw_keen:
lda KEEN_Y
and #1
bne draw_keen_odd
draw_keen_odd:
draw_keen_even:
lda KEEN_Y
and #$FE
tay
lda gr_offsets,Y
sta OUTL
lda gr_offsets+1,Y
clc
adc DRAW_PAGE
sta OUTH
ldy KEEN_X
lda #$3D
sta (OUTL),Y
rts
;==============================
; 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 check_sound
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 check_sound
js_check_right:
cmp #$40
bcc js_check_up
lda #'D'
bne check_sound
js_check_up:
lda value1
cmp #$20
bcs js_check_down
lda #'W'
bne check_sound
js_check_down:
cmp #$40
bcc done_joystick
lda #'S'
bne check_sound
done_joystick:
actually_handle_keypress:
lda KEYPRESS
bmi keypress
jmp no_keypress
keypress:
and #$7f ; clear high bit
cmp #' '
beq check_sound ; make sure not to lose space
and #$df ; convert uppercase to lower case
check_sound:
cmp #$14 ; control-T
bne check_help
lda SOUND_STATUS
eor #SOUND_DISABLED
sta SOUND_STATUS
jmp done_keypress
check_help:
cmp #'H' ; H (^H is same as left)
bne check_joystick
jsr print_help
jmp done_keypress
; can't be ^J as that's the same as down
check_joystick:
cmp #'J' ; J
bne check_left
lda JOYSTICK_ENABLED
eor #1
sta JOYSTICK_ENABLED
jmp done_keypress
check_left:
cmp #'A'
beq left_pressed
cmp #8 ; left key
bne check_right
left_pressed:
; lda KEEN_DIRECTION
; cmp #$ff ; check if facing left
; bne face_left
; lda #1
; sta KEEN_WALKING
dec KEEN_X
done_left_pressed:
jmp done_keypress
check_right:
cmp #'D'
beq right_pressed
cmp #$15 ; right key
bne check_up
right_pressed:
inc KEEN_X
done_right_pressed:
jmp done_keypress
check_up:
cmp #'W'
beq up_pressed
cmp #$0B ; up key
bne check_down
up_pressed:
dec KEEN_Y
done_up_pressed:
jmp done_keypress
check_down:
cmp #'S'
beq down_pressed
cmp #$0A
bne check_space
down_pressed:
inc KEEN_Y
done_down_pressed:
jmp done_keypress
check_space:
cmp #' '
bne check_return
space_pressed:
; lda KEEN_JUMPING
; bne done_keypress ; don't jump if already jumping
inc LEVEL_OVER
jmp done_keypress
check_return:
cmp #13
bne check_escape
return_pressed:
inc LEVEL_OVER
done_return:
jmp no_keypress
check_escape:
cmp #27
bne done_keypress
jsr print_quit
jmp done_keypress
done_keypress:
no_keypress:
bit KEYRESET
rts

View File

@ -186,7 +186,7 @@ done_intro:
;============================
; set up initial location
lda #LOAD_KEEN1
lda #LOAD_MARS
sta WHICH_LOAD ; start at first level
rts

View File

@ -157,7 +157,7 @@ check_up:
bne check_down
up_pressed:
jsr up_action
; jsr up_action
done_up_pressed:
jmp done_keypress

View File

@ -150,11 +150,14 @@ copy_filename_done:
filenames:
.word title_filename
.word mars_filename
.word keen1_filename
.word keen2_filename
title_filename:
.byte "KEEN_TITLE",0
mars_filename:
.byte "KEEN_MARS",0
keen1_filename:
.byte "KEEN_LEVEL1",0
keen2_filename:

View File

@ -2,8 +2,10 @@ CC = gcc
CFLAGS = -g -Wall -O2
ZX02 = ~/research/6502_compression/zx02.git/build/zx02 -f
PNG2GR = ../../../utils/gr-utils/png2gr
all: level1_map.zx02 png2map
all: level1_map.zx02 png2map mars_map.gr.zx02
###
@ -13,6 +15,17 @@ level1_map.zx02: level1_map.inc
level1_map.inc: level1_map.png png2map
./png2map level1_map.png level1_map.inc
###
mars_map.gr.zx02: mars_map.gr
$(ZX02) mars_map.gr mars_map.gr.zx02
mars_map.gr: mars_map.png
$(PNG2GR) mars_map.png mars_map.gr
###
loadpng.o: loadpng.c loadpng.h

Binary file not shown.

After

Width:  |  Height:  |  Size: 873 B