Compare commits

...

5 Commits

Author SHA1 Message Date
Vince Weaver 871836628a keen: hook up level6 2024-04-22 01:31:08 -04:00
Vince Weaver 7b3705dcf0 keen: release v0.7 2024-04-22 00:53:02 -04:00
Vince Weaver 9c5472339d keen: update maps/items
you can now collect keycards and pogo but can't do anything with them
2024-04-22 00:52:08 -04:00
Vince Weaver 9b418215d1 keen: level4 map complete 2024-04-21 22:15:30 -04:00
Vince Weaver f836ca3e5b keen: hook up all 16 levels
most aren't even remotely playable yet
2024-04-21 21:03:36 -04:00
40 changed files with 897 additions and 85 deletions

View File

@ -12,7 +12,10 @@ EMPTY_DISK = ../../empty_disk/empty.dsk
all: keen1_lores.dsk
keen1_lores.dsk: HELLO LOADER TITLE ENGINE MARS \
LEVEL1 LEVEL2 LEVEL3 LEVEL4 LEVEL5
LEVEL1 LEVEL2 LEVEL3 LEVEL4 \
LEVEL5 LEVEL6 LEVEL7 LEVEL8 \
LEVEL9 LEVEL10 LEVEL11 LEVEL12 \
LEVEL13 LEVEL14 LEVEL15 LEVEL16
cp $(EMPTY_DISK) keen1_lores.dsk
$(DOS33) -y keen1_lores.dsk SAVE A HELLO
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x1000 LOADER
@ -24,7 +27,17 @@ keen1_lores.dsk: HELLO LOADER TITLE ENGINE MARS \
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL3
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL4
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL5
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL6
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL7
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL8
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL9
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL10
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL11
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL12
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL13
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL14
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL15
$(DOS33) -y keen1_lores.dsk BSAVE -a 0x6000 LEVEL16
###
@ -107,9 +120,104 @@ level5.o: level5.s enemies.inc \
maps/level5_map.zx02
ca65 -o level5.o level5.s -l level5.lst
####
LEVEL6: level6.o
ld65 -o LEVEL6 level6.o -C ../../linker_scripts/apple2_6000.inc
level6.o: level6.s enemies.inc \
maps/level6_map.zx02
ca65 -o level6.o level6.s -l level6.lst
####
LEVEL7: level7.o
ld65 -o LEVEL7 level7.o -C ../../linker_scripts/apple2_6000.inc
level7.o: level7.s enemies.inc \
maps/level7_map.zx02
ca65 -o level7.o level7.s -l level7.lst
####
LEVEL8: level8.o
ld65 -o LEVEL8 level8.o -C ../../linker_scripts/apple2_6000.inc
level8.o: level8.s enemies.inc \
maps/level8_map.zx02
ca65 -o level8.o level8.s -l level8.lst
####
LEVEL9: level9.o
ld65 -o LEVEL9 level9.o -C ../../linker_scripts/apple2_6000.inc
level9.o: level9.s enemies.inc \
maps/level9_map.zx02
ca65 -o level9.o level9.s -l level9.lst
####
LEVEL10: level10.o
ld65 -o LEVEL10 level10.o -C ../../linker_scripts/apple2_6000.inc
level10.o: level10.s enemies.inc \
maps/level10_map.zx02
ca65 -o level10.o level10.s -l level10.lst
####
LEVEL11: level11.o
ld65 -o LEVEL11 level11.o -C ../../linker_scripts/apple2_6000.inc
level11.o: level11.s enemies.inc \
maps/level11_map.zx02
ca65 -o level11.o level11.s -l level11.lst
####
LEVEL12: level12.o
ld65 -o LEVEL12 level12.o -C ../../linker_scripts/apple2_6000.inc
level12.o: level12.s enemies.inc \
maps/level12_map.zx02
ca65 -o level12.o level12.s -l level12.lst
####
LEVEL13: level13.o
ld65 -o LEVEL13 level13.o -C ../../linker_scripts/apple2_6000.inc
level13.o: level13.s enemies.inc \
maps/level13_map.zx02
ca65 -o level13.o level13.s -l level13.lst
####
LEVEL14: level14.o
ld65 -o LEVEL14 level14.o -C ../../linker_scripts/apple2_6000.inc
level14.o: level14.s enemies.inc \
maps/level14_map.zx02
ca65 -o level14.o level14.s -l level14.lst
####
LEVEL15: level15.o
ld65 -o LEVEL15 level15.o -C ../../linker_scripts/apple2_6000.inc
level15.o: level15.s enemies.inc \
maps/level15_map.zx02
ca65 -o level15.o level15.s -l level15.lst
####
LEVEL16: level16.o
ld65 -o LEVEL16 level16.o -C ../../linker_scripts/apple2_6000.inc
level16.o: level16.s enemies.inc \
maps/level16_map.zx02
ca65 -o level16.o level16.s -l level16.lst
####
@ -118,7 +226,7 @@ ENGINE: engine.o
engine.o: engine.s zp.inc hardware.inc \
text_help.s gr_fast_clear.s text_quit_yn.s text_drawbox.s \
level1_enemies.s level1_items.s \
level1_enemies.s engine_items.s \
graphics/keen_graphics.inc sprites/keen_sprites.inc \
status_bar.s draw_keen.s move_keen.s gr_putsprite_crop.s \
draw_tilemap.s tilemap_lookup.s \
@ -127,22 +235,6 @@ engine.o: engine.s zp.inc hardware.inc \
ca65 -o engine.o engine.s -l engine.lst
####
#LEVEL2: level2.o
# ld65 -o LEVEL2 level2.o -C ../../linker_scripts/apple2_2000.inc
#
#level2.o: level2.s zp.inc hardware.inc \
# text_help.s gr_fast_clear.s text_quit_yn.s text_drawbox.s \
# level1_enemies.s level1_items.s \
# graphics/keen_graphics.inc sprites/keen_sprites.inc \
# maps/level2_map.zx02 \
# status_bar.s draw_keen.s move_keen.s gr_putsprite_crop.s \
# draw_tilemap.s tilemap_lookup.s \
# level1_sfx.s longer_sound.s level2_data.inc \
# keyboard.s handle_laser.s
# ca65 -o level2.o level2.s -l level2.lst
####
graphics/keen1_title.hgr.zx02:

View File

@ -9,8 +9,6 @@
.include "enemies.inc"
; .include "level1_data.inc"
level_data = $6000
max_tile_x = level_data+0
max_tile_y = level_data+1
@ -97,6 +95,7 @@ level_start:
sta KEEN_FALLING
sta KEEN_SHOOTING
sta KEYCARDS
sta ORACLE_SPOKEN
; debug
@ -324,7 +323,7 @@ level1_levelover:
.include "handle_laser.s"
.include "draw_tilemap.s"
.include "level1_enemies.s"
.include "level1_items.s"
.include "engine_items.s"
.include "level1_sfx.s"
.include "longer_sound.s"

View File

@ -1,3 +1,26 @@
ITEMS_START = 24 ; pogo is first?
ITEMS_MAX = 35 ; green keycard is last
ITEM_DOOR = 11
ITEM_POGO = 24
ITEM_SPECIAL = 25
ITEM_KEYCARD = 32
; POGO= 24
; SPECIAL = 25 (ship part or oracle)
; GUN = 26
; LOLLIPOP = 27
; SODA = 28
; PIZZA = 29
; BOOK = 30
; BEAR = 31
; YELLOW KEYCARD = 32
; RED KEYCARD = 33
; BLUE KEYCARD = 34
; GREEN KEYCARD = 35
;======================
; check touching things
;======================
@ -123,25 +146,33 @@ check_item:
lda (INL),Y
do_check_item:
cmp #26
beq was_oracle
cmp #27
cmp #ITEMS_START
bcc done_check_item ; not an item
cmp #32
cmp #(ITEMS_MAX+1)
bcs done_check_item ; not an item
cmp #ITEM_POGO
beq was_pogo ; if pogo, then pogo
cmp #ITEM_SPECIAL ; if oracle/ship part skip ahead
beq was_special
sec
sbc #27 ; subtract off to get index
sbc #ITEMS_START ; subtract off to get index
; 0 = laser gun
; 1 = lollipop 100 pts
; 2 = book 1000 pts
; 2 = carbonated beverage 200 pts
; 3 = pizza 500 pts
; 4 = carbonated beverage 200 pts
; ? = bear 5000 pts
; 4 = book 1000 pts
; 5 = bear 5000 pts
; 6...9 = keycards
beq get_laser_gun
beq get_laser_gun ; if laser gun skip ahead
cmp #6
bcs get_keycard
; otherwise look up points and add it
@ -163,6 +194,9 @@ get_laser_gun:
; keycards go here too...
get_keycard:
; TODO
done_item_pickup:
; erase big tilemap
@ -186,7 +220,7 @@ done_check_item:
check_door:
ldy #0
lda (INL),Y
cmp #11 ; door tile
cmp #ITEM_DOOR ; door tile
bne done_check_door
at_door:
@ -200,10 +234,31 @@ at_door:
done_check_door:
rts
;==================================
; item pogo
;==================================
was_pogo:
lda #$FF
sta POGO ; pick up pogo
bne done_item_pickup ; bra
;==================================
; item special
;==================================
; if oracle text, then oracle
; otherwise is ship part
was_special:
lda oracle_message
cmp #$ff
beq was_ship_part
was_oracle:
lda ORACLE_SPOKEN
bne done_oracle
bit KEYRESET
inc ORACLE_SPOKEN
bit TEXTGR
@ -232,6 +287,13 @@ done_oracle:
rts
was_ship_part:
; TODO
; play sound effect
jmp done_item_pickup
;=============================
; check if touching enemy
@ -318,8 +380,8 @@ score_lookup:
.byte $00,$01,$10,$05,$02,$50 ; BCD
; 0 = laser gun
; 1 = lollipop 100 pts
; 2 = book 1000 pts
; 2 = carbonated beverage 200 pts
; 3 = pizza 500 pts
; 4 = carbonated beverage 200 pts
; ? = bear 5000 pts
; 4 = book 1000 pts
; 5 = bear 5000 pts

View File

@ -1,5 +1,5 @@
5 HOME
10 PRINT "LOADING KEEN V0.06"
10 PRINT "LOADING KEEN V0.07"
20 PRINT " KEEN1 PROOF-OF-CONCEPT DEMAKE"
30 PRINT:PRINT
70 PRINT "BASED ON KEEN1 BY ID"

View File

@ -16,8 +16,8 @@ level1_data:
.byte 8 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.byte 40 ;HARDTOP_TILES = 40
.byte 48 ;ALLHARD_TILES = 48
.align $100
@ -40,7 +40,7 @@ enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; at $6200
oracle_message:
.byte $0
.byte $FF ; no message
.align $100

40
games/keen/level10.s Normal file
View File

@ -0,0 +1,40 @@
; Level 10 (Ice Shrine 1)
; at $6000
level10_data:
.byte 20 ;MAX_TILE_X = 116 ; 116 wide
.byte 26 ;MAX_TILE_Y = 16 ; 16 tall
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 012345678901234567890123456789012345678
.byte 2,21,"YOU HEAR IN YOUR MIND:",0
.byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0
.byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0
.align $100
; at $6300
level10_data_zx02:
.incbin "maps/level10_map.zx02"

40
games/keen/level11.s Normal file
View File

@ -0,0 +1,40 @@
; Level 11 (Fourth Shrine)
; at $6000
level11_data:
.byte 20 ;MAX_TILE_X = 20 ; 20 wide
.byte 26 ;MAX_TILE_Y = 26 ; 26 tall
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 012345678901234567890123456789012345678
.byte 2,21,"YOU HEAR IN YOUR MIND:",0
.byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0
.byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0
.align $100
; at $6300
level11_data_zx02:
.incbin "maps/level11_map.zx02"

40
games/keen/level12.s Normal file
View File

@ -0,0 +1,40 @@
; Level 12 (Fifth Shrine)
; at $6000
level12_data:
.byte 20 ;MAX_TILE_X = 20 ; 20 wide
.byte 26 ;MAX_TILE_Y = 26 ; 26 tall
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 012345678901234567890123456789012345678
.byte 2,21,"YOU HEAR IN YOUR MIND:",0
.byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0
.byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0
.align $100
; at $6300
level12_data_zx02:
.incbin "maps/level12_map.zx02"

65
games/keen/level13.s Normal file
View File

@ -0,0 +1,65 @@
; Level 13 (Red Maze City)
.include "enemies.inc"
; at $6000
level13_data:
.byte 116 ;MAX_TILE_X = 116 ; 116 wide
.byte 20 ;MAX_TILE_Y = 16 ; 20 tall
.byte 4 ;START_KEEN_TILEX = 4
.byte 16 ;START_KEEN_TILEY = 16
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
.align $100
; at $6200
oracle_message:
.byte $0
.align $100
; at $6300
level13_data_zx02:
.incbin "maps/level13_map.zx02"

65
games/keen/level14.s Normal file
View File

@ -0,0 +1,65 @@
; Level 14 (Secret City)
.include "enemies.inc"
; at $6000
level14_data:
.byte 116 ;MAX_TILE_X = 116 ; 116 wide
.byte 20 ;MAX_TILE_Y = 16 ; 20 tall
.byte 4 ;START_KEEN_TILEX = 4
.byte 16 ;START_KEEN_TILEY = 16
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
.align $100
; at $6200
oracle_message:
.byte $0
.align $100
; at $6300
level14_data_zx02:
.incbin "maps/level14_map.zx02"

40
games/keen/level15.s Normal file
View File

@ -0,0 +1,40 @@
; Level 15 (Ice Shrine 2)
; at $6000
level15_data:
.byte 20 ;MAX_TILE_X = 20 ; 20 wide
.byte 26 ;MAX_TILE_Y = 26 ; 26 tall
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 012345678901234567890123456789012345678
.byte 2,21,"A YORPY MIND-THOUGHT BELLOWS:",0
.byte 2,22,"YOU CANNOT KILL THE",0
.byte 2,23,"VORTICON COMMANDER DIRECTLY.",0
.align $100
; at $6300
level15_data_zx02:
.incbin "maps/level15_map.zx02"

65
games/keen/level16.s Normal file
View File

@ -0,0 +1,65 @@
; Level 16 (Vorticon Castle)
.include "enemies.inc"
; at $6000
level16_data:
.byte 116 ;MAX_TILE_X = 116 ; 116 wide
.byte 20 ;MAX_TILE_Y = 16 ; 20 tall
.byte 4 ;START_KEEN_TILEX = 4
.byte 16 ;START_KEEN_TILEY = 16
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
.align $100
; at $6200
oracle_message:
.byte $0
.align $100
; at $6300
level16_data_zx02:
.incbin "maps/level16_map.zx02"

View File

@ -14,30 +14,30 @@ SFX_YORPBOPSND = 8
play_sfx:
lda sounds_low,Y
sta INL
sta SOUNDL
lda sounds_high,Y
sta INH
sta SOUNDH
ldy #0
sty SOUND_OFFSET
play_sfx_loop:
ldy SOUND_OFFSET
lda (INL),Y
lda (SOUNDL),Y
sta speaker_frequency
iny
lda (INL),Y
lda (SOUNDL),Y
cmp #$FF
beq play_done
asl
; clc
; adc (INL),Y
; adc (SOUNDL),Y
sta speaker_duration
iny
bne no_wrap
inc INH
inc SOUNDH
no_wrap:
sty SOUND_OFFSET

View File

@ -14,8 +14,8 @@ level2_data:
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.byte 40 ;HARDTOP_TILES = 40
.byte 48 ;ALLHARD_TILES = 48
.align $100

View File

@ -16,8 +16,8 @@ level3_data:
.byte 8 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.byte 40 ;HARDTOP_TILES = 40
.byte 48 ;ALLHARD_TILES = 48
.align $100
@ -56,7 +56,7 @@ enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; at $6200
oracle_message:
.byte $0
.byte $FF ; no message
.align $100

View File

@ -14,10 +14,10 @@ level4_data:
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 8 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.byte 40 ;HARDTOP_TILES = 40
.byte 48 ;ALLHARD_TILES = 48
.align $100
@ -28,38 +28,37 @@ enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_direction: .byte LEFT, LEFT, LEFT, LEFT, RIGHT, RIGHT,RIGHT,RIGHT
enemy_data_tilex: .byte 18, 31, 18, 43, 17, 32, 105, 103
enemy_data_tiley: .byte 3, 3, 7, 7 , 16, 16, 11, 16
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy1: yorp @18,3, leftt
; enemy2: yorp @31,3 left
; enemy3: yorp @18,7 left
; enemy4: yorp @43,7 left
; enemy5: yorp @17,16 right
; enemy6: yorp @32,16 right
; enemy7: yorp @105,11 right
; enemy8: yorp @103,16 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
; enemy9: garg @63,16 right
; enemy?: vorticon @97,4 right
.align $100
; at $6200
oracle_message:
.byte $0
.byte $FF ; no message
.align $100
; at $6300
level1_data_zx02:
level4_data_zx02:
.incbin "maps/level4_map.zx02"

View File

@ -2,20 +2,20 @@
; at $6000
level2_data:
.byte 20 ;MAX_TILE_X = 116 ; 116 wide
.byte 26 ;MAX_TILE_Y = 16 ; 16 tall
level5_data:
.byte 24 ;MAX_TILE_X
.byte 37 ;MAX_TILE_Y
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 1 ;START_KEEN_TILEX
.byte 29 ;START_KEEN_TILEY
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;START_TILEMAP_X
.byte 21 ;START_TILEMAP_Y
.byte 0 ;NUM_ENEMIES = 8
.byte 0 ;NUM_ENEMIES
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.byte 40 ;HARDTOP_TILES
.byte 48 ;ALLHARD_TILES
.align $100
@ -24,14 +24,15 @@ level2_data:
enemy_data:
.byte $0
; enemy0: garg at 7,7, right
.align $100
; at $6200
oracle_message:
.byte $FF ; no message
; 012345678901234567890123456789012345678
.byte 2,21,"YOU HEAR IN YOUR MIND:",0
.byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0
.byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0
.align $100

40
games/keen/level6.s Normal file
View File

@ -0,0 +1,40 @@
; Level 6 (Second Shrine)
; at $6000
level6_data:
.byte 24 ;MAX_TILE_X
.byte 40 ;MAX_TILE_Y
.byte 1 ;START_KEEN_TILEX
.byte 32 ;START_KEEN_TILEY
.byte 0 ;START_TILEMAP_X
.byte 24 ;START_TILEMAP_Y
.byte 0 ;NUM_ENEMIES
.byte 40 ;HARDTOP_TILES
.byte 48 ;ALLHARD_TILES
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 0123456789012345678901234567890123456789
.byte 2,21,"A MESSAGE ECHOES IN YOUR HEAD:",0
.byte 2,22,"THE TELEPORTER IN THE ICE WILL",0
.byte 2,23,"SEND YOU TO THE DARK SIDE OF MARS.",0
.align $100
; at $6300
level6_data_zx02:
.incbin "maps/level6_map.zx02"

65
games/keen/level7.s Normal file
View File

@ -0,0 +1,65 @@
; Level 7 (Emerald City)
.include "enemies.inc"
; at $6000
level7_data:
.byte 116 ;MAX_TILE_X = 116 ; 116 wide
.byte 20 ;MAX_TILE_Y = 16 ; 20 tall
.byte 4 ;START_KEEN_TILEX = 4
.byte 16 ;START_KEEN_TILEY = 16
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
.align $100
; at $6200
oracle_message:
.byte $0
.align $100
; at $6300
level7_data_zx02:
.incbin "maps/level7_map.zx02"

65
games/keen/level8.s Normal file
View File

@ -0,0 +1,65 @@
; Level 8 (Ice City)
.include "enemies.inc"
; at $6000
level8_data:
.byte 116 ;MAX_TILE_X = 116 ; 116 wide
.byte 20 ;MAX_TILE_Y = 16 ; 20 tall
.byte 4 ;START_KEEN_TILEX = 4
.byte 16 ;START_KEEN_TILEY = 16
.byte 0 ;START_TILEMAP_X = 0
.byte 8 ;START_TILEMAP_Y = 8
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
enemy_data_out: .byte 1, 0, 0, 0, 0, 0, 0, 0
enemy_data_exploding: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_type: .byte YORP, YORP, YORP, YORP, YORP, YORP,YORP,YORP
enemy_data_direction: .byte RIGHT, LEFT, LEFT, RIGHT, LEFT, RIGHT,LEFT,LEFT
enemy_data_tilex: .byte 16, 19, 23, 14, 14, 16, 42, 70
enemy_data_tiley: .byte 9, 9, 9, 45, 38, 43, 44, 34
enemy_data_x: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_y: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_state: .byte 0, 0, 0, 0, 0, 0, 0, 0
enemy_data_count: .byte 8, 8, 8, 8, 8, 8, 8, 8
; FIXME: this is not correct
; enemy1: yorp @16,9, right
; enemy2: yorp @19,9 left
; enemy3: yorp @23,9 left
; enemy4: yorp @14,45 right
; enemy5: yorp @14,38 left
; enemy6: yorp @16,43 right
; enemy7: yorp @42,44 left
; enemy8: yorp @70,34 left
; enemy9: garg @50,31 right
; enemy10: garg @63,45 right
; enemy?: butler robot@27,7 left
; enemy?: vorticon @53,8 right
.align $100
; at $6200
oracle_message:
.byte $0
.align $100
; at $6300
level8_data_zx02:
.incbin "maps/level8_map.zx02"

40
games/keen/level9.s Normal file
View File

@ -0,0 +1,40 @@
; Level 9 (Third Shrine)
; at $6000
level9_data:
.byte 20 ;MAX_TILE_X = 116 ; 116 wide
.byte 26 ;MAX_TILE_Y = 16 ; 16 tall
.byte 1 ;START_KEEN_TILEX = 1
.byte 13 ;START_KEEN_TILEY = 13
.byte 0 ;START_TILEMAP_X = 0
.byte 5 ;START_TILEMAP_Y = 5
.byte 0 ;NUM_ENEMIES = 8
.byte 32 ;HARDTOP_TILES = 32 ; start at 32
.byte 40 ;ALLHARD_TILES = 40 ; start at 40
.align $100
; at $6100
enemy_data:
.byte $0
.align $100
; at $6200
oracle_message:
; 012345678901234567890123456789012345678
.byte 2,21,"YOU HEAR IN YOUR MIND:",0
.byte 2,22,"IT IS TOO BAD THAT YOU CANNOT READ",0
.byte 2,23,"THE STANDARD GALACTIC ALPHABET, HUMAN",0
.align $100
; at $6300
level9_data_zx02:
.incbin "maps/level9_map.zx02"

View File

@ -8,7 +8,12 @@ PNG2GR = ../../../utils/gr-utils/png2gr
all: png2map \
level1_map.zx02 level2_map.zx02 \
level3_map.zx02 level4_map.zx02 \
level5_map.zx02 \
level5_map.zx02 level6_map.zx02 \
level7_map.zx02 level8_map.zx02 \
level9_map.zx02 level10_map.zx02 \
level11_map.zx02 level12_map.zx02 \
level13_map.zx02 level14_map.zx02 \
level15_map.zx02 level16_map.zx02 \
mars_map.zx02
###
@ -51,6 +56,93 @@ level5_map.zx02: level5_map.inc
level5_map.inc: level5_map.png png2map
./png2map level5_map.png level5_map.inc
###
level6_map.zx02: level6_map.inc
$(ZX02) level6_map.inc level6_map.zx02
level6_map.inc: level6_map.png png2map
./png2map level6_map.png level6_map.inc
###
level7_map.zx02: level7_map.inc
$(ZX02) level7_map.inc level7_map.zx02
level7_map.inc: level7_map.png png2map
./png2map level7_map.png level7_map.inc
###
level8_map.zx02: level8_map.inc
$(ZX02) level8_map.inc level8_map.zx02
level8_map.inc: level8_map.png png2map
./png2map level8_map.png level8_map.inc
###
level9_map.zx02: level9_map.inc
$(ZX02) level9_map.inc level9_map.zx02
level9_map.inc: level9_map.png png2map
./png2map level9_map.png level9_map.inc
###
level10_map.zx02: level10_map.inc
$(ZX02) level10_map.inc level10_map.zx02
level10_map.inc: level10_map.png png2map
./png2map level10_map.png level10_map.inc
###
level11_map.zx02: level11_map.inc
$(ZX02) level11_map.inc level11_map.zx02
level11_map.inc: level11_map.png png2map
./png2map level11_map.png level11_map.inc
###
level12_map.zx02: level12_map.inc
$(ZX02) level12_map.inc level12_map.zx02
level12_map.inc: level12_map.png png2map
./png2map level12_map.png level12_map.inc
###
level13_map.zx02: level13_map.inc
$(ZX02) level13_map.inc level13_map.zx02
level13_map.inc: level13_map.png png2map
./png2map level13_map.png level13_map.inc
###
level14_map.zx02: level14_map.inc
$(ZX02) level14_map.inc level14_map.zx02
level14_map.inc: level14_map.png png2map
./png2map level14_map.png level14_map.inc
###
level15_map.zx02: level15_map.inc
$(ZX02) level15_map.inc level15_map.zx02
level15_map.inc: level15_map.png png2map
./png2map level15_map.png level15_map.inc
###
level16_map.zx02: level16_map.inc
$(ZX02) level16_map.inc level16_map.zx02
level16_map.inc: level16_map.png png2map
./png2map level16_map.png level16_map.inc
###

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.1 KiB

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

View File

@ -155,6 +155,8 @@ MAX_TILE_Y = $AA
NUM_ENEMIES = $AF
HARDTOP_TILES = $B0
ALLHARD_TILES = $B1
SOUNDL = $B2
SOUNDH = $B3
WHICH_SLOT = $DA
JS_BUTTON_STATE = $DB