lemm: move common code out of the levels

This commit is contained in:
Vince Weaver 2022-03-20 11:32:08 -04:00
parent 0b732265f6
commit 33034fd868
11 changed files with 206 additions and 241 deletions

View File

@ -140,6 +140,7 @@ LEVEL1: level1.o
ld65 -o LEVEL1 level1.o -C ../../linker_scripts/apple2_9000.inc
level1.o: level1.s zp.inc hardware.inc qload.inc lemm.inc \
release_lemming.s \
graphics/graphics_level1.inc
ca65 -o level1.o level1.s -l level1.lst
@ -149,6 +150,7 @@ LEVEL2: level2.o
ld65 -o LEVEL2 level2.o -C ../../linker_scripts/apple2_9000.inc
level2.o: level2.s zp.inc hardware.inc qload.inc lemm.inc \
release_lemming.s \
graphics/graphics_level2.inc
ca65 -o level2.o level2.s -l level2.lst
@ -158,6 +160,7 @@ LEVEL3: level3.o
ld65 -o LEVEL3 level3.o -C ../../linker_scripts/apple2_9000.inc
level3.o: level3.s zp.inc hardware.inc qload.inc lemm.inc \
release_lemming.s \
graphics/graphics_level3.inc
ca65 -o level3.o level3.s -l level3.lst
@ -168,6 +171,7 @@ LEVEL4: level4.o
ld65 -o LEVEL4 level4.o -C ../../linker_scripts/apple2_9000.inc
level4.o: level4.s zp.inc hardware.inc qload.inc lemm.inc \
release_lemming.s \
graphics/graphics_level4.inc
ca65 -o level4.o level4.s -l level4.lst
@ -179,6 +183,7 @@ LEVEL5: level5.o
ld65 -o LEVEL5 level5.o -C ../../linker_scripts/apple2_9000.inc
level5.o: level5.s zp.inc hardware.inc qload.inc lemm.inc \
release_lemming.s \
graphics/graphics_level5.inc
ca65 -o level5.o level5.s -l level5.lst

View File

@ -1,11 +1,13 @@
+ ability to walk up hills
+ more than 1 lemming
+ move common code for lemming release to separate function,
update all 5 levels
+ wait a second after last lemming gone to exit
+ update the "in" %
+ dig off the map, end level
+ fill in some of the ground so we don't get stuck when digging
+ Update credits?
+ "Out" counter is only printed to page1 so gets erased by cursor
+ Level3
+ Falling too far and you go splat
+ See if the jerky animation is due to starting at an odd x vs
even x, maybe we should start animation 4 frames in if that's

View File

@ -8,10 +8,14 @@
.include "qload.inc"
.include "lemming_status.inc"
lemm_test_start:
lemm:
;=====================
; initializations
;=====================
lda #0
sta DRAW_PAGE
sta JOYSTICK_ENABLED
lda #1
sta WHICH_LEVEL

View File

@ -1,3 +1,6 @@
LEMMING_RIGHT = $01
LEMMING_LEFT = $FF
LEMMING_FALLING = 1
LEMMING_WALKING = 2
LEMMING_DIGGING = 3

View File

@ -1,4 +1,3 @@
.include "zp.inc"
.include "hardware.inc"
.include "qload.inc"
@ -102,8 +101,6 @@ do_level1:
; show title screen
;=======================
; lda #1
; sta WHICH_LEVEL
jsr intro_level
;=======================
@ -149,34 +146,7 @@ do_level1:
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
sta lemming_exploding
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"
;=======================
jsr play_letsgo
;=======================
; start music
;=======================
; cli
;=======================
; init vars
@ -187,15 +157,13 @@ do_level1:
sta DOOR_OPEN
sta FRAMEL
sta LOAD_NEXT_CHUNK
sta JOYSTICK_ENABLED
sta LEMMINGS_OUT
jsr update_lemmings_out
jsr update_lemmings_out ; update display
lda #1
sta LEMMINGS_TO_RELEASE
; jsr save_bg_14x14 ; save initial bg
jsr clear_lemmings_out
; set up time
@ -206,6 +174,14 @@ do_level1:
sta TIMER_COUNT
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;===================
;===================
; Main Loop
@ -221,7 +197,9 @@ l1_main_loop:
jsr load_music
;=========================
; open door
;=========================
lda DOOR_OPEN
bne l1_door_is_open
@ -244,16 +222,13 @@ l1_door_is_open:
and #$f
bne l1_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
jsr release_lemming
l1_done_release_lemmings:
;=====================
; animate flames
;=====================
jsr draw_flames
@ -305,6 +280,10 @@ l1_level_over:
.include "release_lemming.s"
.include "graphics/graphics_level1.inc"
@ -328,3 +307,4 @@ lemm5_part4_lzsa:
lemm5_part5_lzsa:
.incbin "music/lemm5.part5.lzsa"

View File

@ -1,4 +1,3 @@
.include "zp.inc"
.include "hardware.inc"
.include "qload.inc"
@ -13,6 +12,7 @@ do_level2:
;======================
; set up initial stuff
;======================
lda #3
sta DOOR_X
lda #5
@ -23,6 +23,8 @@ do_level2:
lda #15
sta INIT_Y
; flame locations
lda #29 ; 196
sta l_flame_x_smc+1
lda #122
@ -32,9 +34,9 @@ do_level2:
lda #33 ; 245
sta r_flame_x_smc+1
; exit location (1c 8b)
; door exit location
lda #29 ;
lda #29 ;
sta exit_x1_smc+1
lda #33
sta exit_x2_smc+1
@ -140,35 +142,6 @@ do_level2:
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
sta lemming_exploding
lda INIT_X
sta lemming_x
lda INIT_Y
sta lemming_y
lda #1
sta lemming_direction
lda #LEMMING_FALLING
sta lemming_status
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;=======================
; start music
;=======================
; cli
;=======================
; init vars
;=======================
@ -178,15 +151,13 @@ do_level2:
sta DOOR_OPEN
sta FRAMEL
sta LOAD_NEXT_CHUNK
sta JOYSTICK_ENABLED
sta LEMMINGS_OUT
jsr update_lemmings_out
jsr update_lemmings_out ; update display
lda #1
sta LEMMINGS_TO_RELEASE
; jsr save_bg_14x14 ; save initial bg
jsr clear_lemmings_out
; set up time
@ -197,6 +168,14 @@ do_level2:
sta TIMER_COUNT
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;===================
;===================
; Main Loop
@ -212,7 +191,9 @@ l2_main_loop:
jsr load_music
;=========================
; open door
;=========================
lda DOOR_OPEN
bne l2_door_is_open
@ -238,13 +219,14 @@ l2_door_is_open:
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
jsr release_lemming
l2_done_release_lemmings:
;======================
; animate flames
;======================
jsr draw_flames
@ -286,8 +268,6 @@ l2_timer_not_yet:
l2_level_over:
; bit SET_TEXT
jsr disable_music
jsr outro_level1
@ -296,6 +276,9 @@ l2_level_over:
.include "release_lemming.s"
.include "graphics/graphics_level2.inc"

View File

@ -1,18 +1,17 @@
.include "zp.inc"
.include "hardware.inc"
.include "qload.inc"
.include "lemm.inc"
.include "lemming_status.inc"
.byte 3 ; level 4
.byte 3 ; level 3
do_level3:
;======================
; set up initial stuff
;======================
lda #15
sta DOOR_X
lda #0
@ -23,6 +22,8 @@ do_level3:
lda #11
sta INIT_Y
; flame location
lda #15 ;
sta l_flame_x_smc+1
lda #122
@ -32,7 +33,7 @@ do_level3:
lda #19 ;
sta r_flame_x_smc+1
; exit location
; door exit location
lda #15 ;
sta exit_x1_smc+1
@ -140,35 +141,6 @@ do_level3:
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
sta lemming_exploding
lda INIT_X
sta lemming_x
lda INIT_Y
sta lemming_y
lda #1
sta lemming_direction
lda #LEMMING_FALLING
sta lemming_status
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;=======================
; start music
;=======================
; cli
;=======================
; init vars
;=======================
@ -178,15 +150,13 @@ do_level3:
sta DOOR_OPEN
sta FRAMEL
sta LOAD_NEXT_CHUNK
sta JOYSTICK_ENABLED
sta LEMMINGS_OUT
jsr update_lemmings_out
jsr update_lemmings_out ; update display
lda #1
sta LEMMINGS_TO_RELEASE
; jsr save_bg_14x14 ; save initial bg
jsr clear_lemmings_out
; set up time
@ -197,6 +167,13 @@ do_level3:
sta TIMER_COUNT
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;===================
;===================
; Main Loop
@ -212,9 +189,9 @@ l4_main_loop:
jsr load_music
l4_no_load_chunk:
;=========================
; open door
;=========================
lda DOOR_OPEN
bne l4_door_is_open
@ -237,16 +214,13 @@ l4_door_is_open:
and #$f
bne l4_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
jsr release_lemming
l4_done_release_lemmings:
;======================
; animate flames
;======================
jsr draw_flames
@ -288,8 +262,6 @@ l4_timer_not_yet:
l4_level_over:
; bit SET_TEXT
jsr disable_music
jsr outro_level1
@ -297,6 +269,7 @@ l4_level_over:
rts
.include "release_lemming.s"
.include "graphics/graphics_level3.inc"

View File

@ -1,4 +1,3 @@
.include "zp.inc"
.include "hardware.inc"
.include "qload.inc"
@ -23,6 +22,8 @@ do_level4:
lda #22
sta INIT_Y
; flame locations
lda #29 ;
sta l_flame_x_smc+1
lda #23
@ -32,7 +33,7 @@ do_level4:
lda #33 ;
sta r_flame_x_smc+1
; exit location
; door exit location
lda #29 ;
sta exit_x1_smc+1
@ -140,34 +141,6 @@ do_level4:
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
sta lemming_exploding
lda INIT_X
sta lemming_x
lda INIT_Y
sta lemming_y
lda #1
sta lemming_direction
lda #LEMMING_FALLING
sta lemming_status
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;=======================
; start music
;=======================
; cli
;=======================
; init vars
@ -178,15 +151,13 @@ do_level4:
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
jsr clear_lemmings_out
; set up time
@ -197,6 +168,13 @@ do_level4:
sta TIMER_COUNT
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;===================
;===================
; Main Loop
@ -237,16 +215,13 @@ l4_door_is_open:
and #$f
bne l4_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
jsr release_lemming
l4_done_release_lemmings:
;=====================
; animate flames
;=====================
jsr draw_flames
@ -288,8 +263,6 @@ l4_timer_not_yet:
l4_level_over:
; bit SET_TEXT
jsr disable_music
jsr outro_level1
@ -297,6 +270,7 @@ l4_level_over:
rts
.include "release_lemming.s"
.include "graphics/graphics_level4.inc"

View File

@ -16,6 +16,20 @@ do_level5:
lda #24
sta DOOR_Y
lda #12
sta INIT_X
lda #40
sta INIT_Y
; flame locations
; n/a
; exit location
; n/a
;==============
; set up intro
;==============
@ -65,8 +79,6 @@ do_level5:
; show title screen
;=======================
lda #5
sta WHICH_LEVEL
jsr intro_level
;=======================
@ -112,33 +124,6 @@ do_level5:
lda #100
sta CURSOR_Y
;=======================
; Init Lemmings
;=======================
lda #0
sta lemming_out
sta lemming_exploding
lda #12
sta lemming_x
lda #40
sta lemming_y
lda #1
sta lemming_direction
lda #LEMMING_FALLING
sta lemming_status
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;=======================
; start music
;=======================
; cli
;=======================
; init vars
@ -149,15 +134,13 @@ do_level5:
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
jsr clear_lemmings_out
; set up time
@ -168,6 +151,14 @@ do_level5:
sta TIMER_COUNT
;=======================
; Play "Let's Go"
;=======================
jsr play_letsgo
;===================
;===================
; Main Loop
@ -183,6 +174,9 @@ l5_main_loop:
jsr load_music
;=====================
; open door
;=====================
lda DOOR_OPEN
@ -206,16 +200,13 @@ l5_door_is_open:
and #$f
bne l5_done_release_lemmings
inc LEMMINGS_OUT
jsr update_lemmings_out
lda #1
sta lemming_out
dec LEMMINGS_TO_RELEASE
jsr release_lemming
l5_done_release_lemmings:
;=====================
; animate flames
;=====================
; jsr draw_flames
@ -257,8 +248,6 @@ l5_timer_not_yet:
l5_level_over:
; bit SET_TEXT
jsr disable_music
jsr outro_level1
@ -266,6 +255,8 @@ l5_level_over:
rts
.include "release_lemming.s"
.include "graphics/graphics_level5.inc"

View File

@ -1,3 +1,26 @@
lemming_x:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_y:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_direction:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_out:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_frame:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_status:
.byte 0,0,0,0,0,0,0,0,0,0
lemming_exploding:
.byte 0,0,0,0,0,0,0,0,0,0
;==========================
; move them
;==========================
@ -188,27 +211,6 @@ remove_lemming:
rts
lemming_direction:
.byte 1
lemming_x:
.byte 12
lemming_y:
.byte 45
lemming_out:
.byte $0
lemming_frame:
.byte 0
lemming_status:
.byte LEMMING_FALLING
lemming_exploding:
.byte $00
;=============================
; collision check ground

View File

@ -0,0 +1,48 @@
;=======================
; Clear Lemmings Out
;=======================
clear_lemmings_out:
lda #0
ldy #0
clear_lemmings_loop:
sta lemming_out,Y
iny
cpy LEMMINGS_TO_RELEASE
bne clear_lemmings_loop
rts
;=======================
; Init Lemmings
;=======================
release_lemming:
ldy #0
lda #1
sta lemming_out,Y
lda #0
sta lemming_exploding,Y
lda INIT_X
sta lemming_x,Y
lda INIT_Y
sta lemming_y,Y
lda #LEMMING_RIGHT
sta lemming_direction,Y
lda #LEMMING_FALLING
sta lemming_status,Y
inc LEMMINGS_OUT
jsr update_lemmings_out
dec LEMMINGS_TO_RELEASE
rts