lemm: add level5

This commit is contained in:
Vince Weaver 2022-03-15 15:16:37 -04:00
parent 6d946b7f23
commit 62ce6377fb
10 changed files with 327 additions and 39 deletions

View File

@ -44,7 +44,7 @@ lemm.o: lemm.s zp.inc hardware.inc \
hgr_hlin.s hgr_vlin.s update_menu.s \
interrupt_handler.s keyboard.s draw_pointer.s \
pointer_sprites.inc \
level1.s
level1.s level5.s
ca65 -o lemm.o lemm.s -l lemm.lst

View File

@ -5,17 +5,17 @@ LZSA = ~/research/lzsa/lzsa/lzsa
B2D = ../../../utils/bmp2dhr/b2d
HGR_SPRITE = ../../../utils/hgr-utils/hgr_make_sprite
all: graphics_test.inc graphics_level1.inc sprites.inc
all: graphics_test.inc graphics_level1.inc graphics_level5.inc sprites.inc
###
graphics_test.inc: \
level1.lzsa \
level2.lzsa \
level2_fine.lzsa
level5.lzsa \
level5_fine.lzsa
echo "level1_lzsa: .incbin \"level1.lzsa\"" > graphics_test.inc
echo "level2_lzsa: .incbin \"level2.lzsa\"" >> graphics_test.inc
echo "level2_fine_lzsa: .incbin \"level2_fine.lzsa\"" >> graphics_test.inc
echo "level5_lzsa: .incbin \"level5.lzsa\"" >> graphics_test.inc
echo "level5_fine_lzsa: .incbin \"level5_fine.lzsa\"" >> graphics_test.inc
graphics_level1.inc: \
@ -24,6 +24,12 @@ graphics_level1.inc: \
echo "level1_lzsa: .incbin \"level1.lzsa\"" > graphics_level1.inc
echo "level1_preview_lzsa: .incbin \"level1_preview.lzsa\"" >> graphics_level1.inc
graphics_level5.inc: \
level5.lzsa \
level5_preview.lzsa
echo "level5_lzsa: .incbin \"level5.lzsa\"" > graphics_level5.inc
echo "level5_preview_lzsa: .incbin \"level5_preview.lzsa\"" >> graphics_level5.inc
###
sprites.inc: sprites.png
@ -135,19 +141,28 @@ level1_preview.hgr: level1_preview.png
###
level2.lzsa: level2.hgr
$(LZSA) -r -f2 level2.hgr level2.lzsa
level5.lzsa: level5.hgr
$(LZSA) -r -f2 level5.hgr level5.lzsa
level2.hgr: level2.png
$(PNG2HGR) level2.png > level2.hgr
level5.hgr: level5.png
$(PNG2HGR) level5.png > level5.hgr
###
level2_fine.lzsa: level2_fine.hgr
$(LZSA) -r -f2 level2_fine.hgr level2_fine.lzsa
level2_fine.hgr: level2_fine.png
$(PNG2HGR) level2_fine.png > level2_fine.hgr
level5_preview.lzsa: level5_preview.hgr
$(LZSA) -r -f2 level5_preview.hgr level5_preview.lzsa
level5_preview.hgr: level5_preview.png
$(PNG2HGR) level5_preview.png > level5_preview.hgr
###
level5_fine.lzsa: level5_fine.hgr
$(LZSA) -r -f2 level5_fine.hgr level5_fine.lzsa
level5_fine.hgr: level5_fine.png
$(PNG2HGR) level5_fine.png > level5_fine.hgr
####

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

@ -3,11 +3,24 @@
; print the intro message for level1
;=====================================
intro_level1:
intro_level:
lda WHICH_LEVEL
cmp #1
bne its_level_5_preview
its_level_1_preview:
lda #<level1_preview_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level1_preview_lzsa
jmp done_load_preview
its_level_5_preview:
lda #<level5_preview_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level5_preview_lzsa
done_load_preview:
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #$20
@ -25,9 +38,22 @@ intro_level1:
; print messages
lda WHICH_LEVEL
cmp #1
bne its_level_5_text
its_level_1_text:
lda #<level1_intro_text
sta OUTL
lda #>level1_intro_text
jmp its_level_1_text_done
its_level_5_text:
lda #<level5_intro_text
sta OUTL
lda #>level5_intro_text
its_level_1_text_done:
sta OUTH
; print the text
@ -150,7 +176,6 @@ level5_intro_text:
.byte 8,23,"PRESS RETURN TO CONINUE",0
.align $100
; split screen?

View File

@ -202,7 +202,23 @@ zurg:
play_level1:
jsr do_level1
jmp play_level1
lda LEVEL_OVER
cmp #LEVEL_WIN
beq play_level5
bne play_level1
;=======================
; do level5
;=======================
play_level5:
jsr do_level5
lda LEVEL_OVER
cmp #LEVEL_WIN
beq play_level1
bne play_level5
@ -241,9 +257,6 @@ load_song_chunk_good:
; includes
;==========================
; .include "gr_pageflip.s"
; .include "gr_copy.s"
; .include "wait_a_bit.s"
.include "gr_offsets.s"
.include "decompress_fast_v2.s"
@ -253,6 +266,7 @@ load_song_chunk_good:
.include "joystick.s"
.include "level1.s"
.include "level5.s"
.include "gr_fast_clear.s"
@ -297,6 +311,7 @@ config_string:
.include "graphics/graphics_level1.inc"
.include "graphics/graphics_level5.inc"
.include "graphics/sprites.inc"
music_parts_h:

View File

@ -241,9 +241,9 @@ load_graphics_loop:
jsr wait_until_keypress
lda #<level2_lzsa
lda #<level5_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level2_lzsa
lda #>level5_lzsa
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #$20
@ -252,9 +252,9 @@ load_graphics_loop:
jsr wait_until_keypress
lda #<level2_fine_lzsa
lda #<level5_fine_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level2_fine_lzsa
lda #>level5_fine_lzsa
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #$20

View File

@ -27,7 +27,9 @@ do_level1:
; show title screen
;=======================
jsr intro_level1
lda #1
sta WHICH_LEVEL
jsr intro_level
;=======================
; Load Graphics
@ -131,10 +133,10 @@ do_level1:
; Main Loop
;===================
;===================
main_loop:
l1_main_loop:
lda LOAD_NEXT_CHUNK ; see if we need to load next chunk
beq no_load_chunk ; outside IRQ to avoid glitch in music
beq l1_no_load_chunk ; outside IRQ to avoid glitch in music
jsr load_song_chunk
@ -142,29 +144,29 @@ main_loop:
sta LOAD_NEXT_CHUNK
no_load_chunk:
l1_no_load_chunk:
lda DOOR_OPEN
bne door_is_open
bne l1_door_is_open
jsr draw_door
door_is_open:
l1_door_is_open:
;======================
; release lemmings
;======================
lda LEMMINGS_TO_RELEASE
beq done_release_lemmings
beq l1_done_release_lemmings
lda DOOR_OPEN
beq done_release_lemmings
beq l1_done_release_lemmings
lda FRAMEL
and #$f
bne done_release_lemmings
bne l1_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
@ -174,20 +176,20 @@ door_is_open:
dec LEMMINGS_TO_RELEASE
done_release_lemmings:
l1_done_release_lemmings:
jsr draw_flames
lda TIMER_COUNT
cmp #$50
bcc timer_not_yet
bcc l1_timer_not_yet
jsr update_time
lda #$0
sta TIMER_COUNT
timer_not_yet:
l1_timer_not_yet:
; main drawing loop
@ -210,12 +212,12 @@ timer_not_yet:
inc FRAMEL
lda LEVEL_OVER
bne level_over
bne l1_level_over
jmp main_loop
jmp l1_main_loop
level_over:
l1_level_over:
bit SET_TEXT

230
games/lemm/level5.s Normal file
View File

@ -0,0 +1,230 @@
do_level5:
;==============
; set up music
;==============
lda #0
sta CURRENT_CHUNK
sta DONE_PLAYING
sta BASE_FRAME_L
sta BUTTON_LOCATION
lda #$D0
sta CHUNK_NEXT_LOAD ; Load at $D0
jsr load_song_chunk
lda #$D0 ; music starts at $d000
sta CHUNK_NEXT_PLAY
sta BASE_FRAME_H
lda #1
sta LOOP
sta CURRENT_CHUNK
;=======================
; show title screen
;=======================
lda #5
sta WHICH_LEVEL
jsr intro_level
;=======================
; Load Graphics
;=======================
lda #$20
sta HGR_PAGE
jsr hgr_make_tables
bit SET_GR
bit PAGE0
bit HIRES
bit FULLGR
lda #<level5_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level5_lzsa
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #$20
jsr decompress_lzsa2_fast
lda #<level5_lzsa
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #>level5_lzsa
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #$40
jsr decompress_lzsa2_fast
;=======================
; Setup cursor
;=======================
lda #0
sta OVER_LEMMING
lda #10
sta CURSOR_X
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
lda #12
sta lemming_x
lda #45
sta lemming_y
lda #1
sta lemming_direction
lda #LEMMING_FALLING
sta lemming_status
;=======================
; Play "Let's Go"
;=======================
;=======================
; start music
;=======================
; cli
;=======================
; init vars
;=======================
lda #0
sta LEVEL_OVER
sta DOOR_OPEN
sta FRAMEL
sta LOAD_NEXT_CHUNK
sta JOYSTICK_ENABLED
sta LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta LEMMINGS_TO_RELEASE
; jsr save_bg_14x14 ; save initial bg
; set up time
lda #$5
sta TIME_MINUTES
lda #$00
sta TIME_SECONDS
sta TIMER_COUNT
;===================
;===================
; Main Loop
;===================
;===================
l5_main_loop:
lda LOAD_NEXT_CHUNK ; see if we need to load next chunk
beq l5_no_load_chunk ; outside IRQ to avoid glitch in music
jsr load_song_chunk
lda #0 ; reset
sta LOAD_NEXT_CHUNK
l5_no_load_chunk:
lda DOOR_OPEN
bne l5_door_is_open
jsr draw_door
l5_door_is_open:
;======================
; release lemmings
;======================
lda LEMMINGS_TO_RELEASE
beq l5_done_release_lemmings
lda DOOR_OPEN
beq l5_done_release_lemmings
lda FRAMEL
and #$f
bne l5_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
l5_done_release_lemmings:
jsr draw_flames
lda TIMER_COUNT
cmp #$50
bcc l5_timer_not_yet
jsr update_time
lda #$0
sta TIMER_COUNT
l5_timer_not_yet:
; main drawing loop
jsr erase_lemming
jsr erase_pointer
jsr move_lemmings
jsr draw_lemming
jsr handle_keypress
jsr draw_pointer
lda #$ff
jsr wait
inc FRAMEL
lda LEVEL_OVER
bne l5_level_over
jmp l5_main_loop
l5_level_over:
bit SET_TEXT
jsr disable_music
jsr outro_level1
rts

View File

@ -70,6 +70,7 @@ SAVED_Y1 = $84
SAVED_Y2 = $85
LEMMINGS_OUT = $86
BUTTON_LOCATION = $87
WHICH_LEVEL = $88
APPLEII_MODEL = $8B