mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-13 03:29:32 +00:00
lemm: release up to 10 lemmings
This commit is contained in:
parent
0b8fdb163b
commit
6f6e057b1e
|
@ -87,9 +87,9 @@ lemm.o: lemm.s zp.inc hardware.inc qload.inc \
|
|||
graphics/sprites.inc \
|
||||
intro_level.s update_time.s hgr_sprite.s draw_flames.s \
|
||||
draw_door.s move_lemming.s draw_lemming.s \
|
||||
hgr_hlin.s hgr_vlin.s update_menu.s \
|
||||
hgr_hlin.s hgr_vlin.s update_menu.s init_level.s \
|
||||
interrupt_handler.s keyboard.s draw_pointer.s \
|
||||
pointer_sprites.inc particle_hgr.s \
|
||||
pointer_sprites.inc particle_hgr.s release_lemming.s \
|
||||
title.s audio.s letsgo.s load_music.s
|
||||
ca65 -o lemm.o lemm.s -l lemm.lst
|
||||
|
||||
|
@ -135,6 +135,8 @@ lemm.inc: generate_common LEMM
|
|||
./generate_common -a 0x6000 -s load_music lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s intro_text_smc_l lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s intro_text_smc_h lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s release_lemming lemm.lst >> lemm.inc
|
||||
./generate_common -a 0x6000 -s init_level lemm.lst >> lemm.inc
|
||||
|
||||
####
|
||||
|
||||
|
@ -209,5 +211,7 @@ graphics/graphics_test.inc:
|
|||
####
|
||||
|
||||
clean:
|
||||
rm -f *~ *.o *.lst HELLO LEMM LEMM_TEST generate_common
|
||||
rm -f *~ *.o *.lst HELLO LEMM LEMM_TEST generate_common \
|
||||
LEVEL1 LEVEL2 LEVEL3 LEVEL4 LEVEL5 \
|
||||
lemm.inc
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
19
games/lemm/init_level.s
Normal file
19
games/lemm/init_level.s
Normal file
|
@ -0,0 +1,19 @@
|
|||
;====================
|
||||
; reset level vars
|
||||
;====================
|
||||
init_level:
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
sta NEXT_LEMMING_TO_RELEASE
|
||||
|
||||
jsr clear_lemmings_out
|
||||
|
||||
jsr update_lemmings_out ; update display
|
||||
|
||||
jsr update_time
|
||||
|
||||
rts
|
|
@ -254,7 +254,12 @@ oof:
|
|||
|
||||
play_level:
|
||||
|
||||
;=======================
|
||||
; load level from disk
|
||||
;=======================
|
||||
|
||||
; skip if already resident
|
||||
|
||||
lda WHICH_LEVEL ; see if level is same as current
|
||||
cmp $9000
|
||||
beq level_already_resident
|
||||
|
@ -263,6 +268,11 @@ play_level:
|
|||
jsr load_file
|
||||
|
||||
level_already_resident:
|
||||
|
||||
;==================
|
||||
; start level
|
||||
;==================
|
||||
|
||||
jsr start_level
|
||||
|
||||
lda LEVEL_OVER
|
||||
|
@ -331,7 +341,8 @@ level_continue:
|
|||
|
||||
.include "load_music.s"
|
||||
.include "simple_sounds.s"
|
||||
|
||||
.include "release_lemming.s"
|
||||
.include "init_level.s"
|
||||
|
||||
; moved to qload.s
|
||||
; .include "wait.s"
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
MAX_LEMMINGS = 10
|
||||
|
||||
LEMMING_RIGHT = $01
|
||||
LEMMING_LEFT = $FF
|
||||
|
||||
|
|
|
@ -147,24 +147,12 @@ do_level1:
|
|||
lda #100
|
||||
sta CURSOR_Y
|
||||
|
||||
|
||||
|
||||
;=======================
|
||||
; init vars
|
||||
;=======================
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
|
||||
jsr update_lemmings_out ; update display
|
||||
|
||||
lda #1
|
||||
lda #10
|
||||
sta LEMMINGS_TO_RELEASE
|
||||
jsr clear_lemmings_out
|
||||
|
||||
; set up time
|
||||
|
||||
|
@ -173,7 +161,9 @@ do_level1:
|
|||
lda #$00
|
||||
sta TIME_SECONDS
|
||||
|
||||
sta TIMER_COUNT
|
||||
sta TIMER_COUNT ; ??
|
||||
|
||||
jsr init_level
|
||||
|
||||
;=======================
|
||||
; Play "Let's Go"
|
||||
|
@ -213,20 +203,8 @@ l1_door_is_open:
|
|||
; release lemmings
|
||||
;======================
|
||||
|
||||
lda LEMMINGS_TO_RELEASE
|
||||
beq l1_done_release_lemmings
|
||||
|
||||
lda DOOR_OPEN
|
||||
beq l1_done_release_lemmings
|
||||
|
||||
lda FRAMEL
|
||||
and #$f
|
||||
bne l1_done_release_lemmings
|
||||
|
||||
jsr release_lemming
|
||||
|
||||
l1_done_release_lemmings:
|
||||
|
||||
;=====================
|
||||
; animate flames
|
||||
;=====================
|
||||
|
@ -280,12 +258,6 @@ l1_level_over:
|
|||
rts
|
||||
|
||||
|
||||
|
||||
.include "release_lemming.s"
|
||||
|
||||
|
||||
|
||||
|
||||
.include "graphics/graphics_level1.inc"
|
||||
|
||||
|
||||
|
|
|
@ -152,18 +152,8 @@ do_level2:
|
|||
; init vars
|
||||
;=======================
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
|
||||
jsr update_lemmings_out ; update display
|
||||
|
||||
lda #1
|
||||
sta LEMMINGS_TO_RELEASE
|
||||
jsr clear_lemmings_out
|
||||
|
||||
; set up time
|
||||
|
||||
|
@ -171,9 +161,9 @@ do_level2:
|
|||
sta TIME_MINUTES
|
||||
lda #$00
|
||||
sta TIME_SECONDS
|
||||
sta TIMER_COUNT ; 1/50
|
||||
|
||||
sta TIMER_COUNT
|
||||
|
||||
jsr init_level
|
||||
|
||||
;=======================
|
||||
; Play "Let's Go"
|
||||
|
@ -282,10 +272,6 @@ l2_level_over:
|
|||
|
||||
|
||||
|
||||
.include "release_lemming.s"
|
||||
|
||||
|
||||
|
||||
.include "graphics/graphics_level2.inc"
|
||||
|
||||
|
||||
|
|
|
@ -151,18 +151,8 @@ do_level3:
|
|||
; init vars
|
||||
;=======================
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
|
||||
jsr update_lemmings_out ; update display
|
||||
|
||||
lda #1
|
||||
sta LEMMINGS_TO_RELEASE
|
||||
jsr clear_lemmings_out
|
||||
|
||||
; set up time
|
||||
|
||||
|
@ -170,8 +160,9 @@ do_level3:
|
|||
sta TIME_MINUTES
|
||||
lda #$00
|
||||
sta TIME_SECONDS
|
||||
sta TIMER_COUNT ; 1/50
|
||||
|
||||
sta TIMER_COUNT
|
||||
jsr init_level
|
||||
|
||||
;=======================
|
||||
; Play "Let's Go"
|
||||
|
@ -275,8 +266,6 @@ l4_level_over:
|
|||
rts
|
||||
|
||||
|
||||
.include "release_lemming.s"
|
||||
|
||||
|
||||
.include "graphics/graphics_level3.inc"
|
||||
|
||||
|
|
|
@ -152,18 +152,8 @@ do_level4:
|
|||
; init vars
|
||||
;=======================
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
|
||||
jsr update_lemmings_out
|
||||
|
||||
lda #1
|
||||
sta LEMMINGS_TO_RELEASE
|
||||
jsr clear_lemmings_out
|
||||
|
||||
; set up time
|
||||
|
||||
|
@ -171,8 +161,9 @@ do_level4:
|
|||
sta TIME_MINUTES
|
||||
lda #$00
|
||||
sta TIME_SECONDS
|
||||
sta TIMER_COUNT ; 1/50
|
||||
|
||||
sta TIMER_COUNT
|
||||
jsr init_level
|
||||
|
||||
;=======================
|
||||
; Play "Let's Go"
|
||||
|
@ -276,9 +267,6 @@ l4_level_over:
|
|||
rts
|
||||
|
||||
|
||||
.include "release_lemming.s"
|
||||
|
||||
|
||||
.include "graphics/graphics_level4.inc"
|
||||
|
||||
|
||||
|
|
|
@ -134,18 +134,8 @@ do_level5:
|
|||
; init vars
|
||||
;=======================
|
||||
|
||||
lda #0
|
||||
sta LEVEL_OVER
|
||||
sta DOOR_OPEN
|
||||
sta FRAMEL
|
||||
sta LOAD_NEXT_CHUNK
|
||||
sta LEMMINGS_OUT
|
||||
|
||||
jsr update_lemmings_out
|
||||
|
||||
lda #1
|
||||
sta LEMMINGS_TO_RELEASE
|
||||
jsr clear_lemmings_out
|
||||
|
||||
; set up time
|
||||
|
||||
|
@ -153,9 +143,9 @@ do_level5:
|
|||
sta TIME_MINUTES
|
||||
lda #$00
|
||||
sta TIME_SECONDS
|
||||
sta TIMER_COUNT ; 1/50
|
||||
|
||||
sta TIMER_COUNT
|
||||
|
||||
jsr init_level
|
||||
|
||||
;=======================
|
||||
; Play "Let's Go"
|
||||
|
@ -260,8 +250,6 @@ l5_level_over:
|
|||
rts
|
||||
|
||||
|
||||
.include "release_lemming.s"
|
||||
|
||||
|
||||
.include "graphics/graphics_level5.inc"
|
||||
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
|
||||
; TODO: auto-size this based on MAX_LEMMINGS
|
||||
|
||||
lemming_x:
|
||||
.byte 0,0,0,0,0,0,0,0,0,0
|
||||
lemming_y:
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
|
||||
|
||||
|
||||
;=======================
|
||||
; Clear Lemmings Out
|
||||
;=======================
|
||||
|
@ -11,16 +9,31 @@ clear_lemmings_out:
|
|||
clear_lemmings_loop:
|
||||
sta lemming_out,Y
|
||||
iny
|
||||
cpy LEMMINGS_TO_RELEASE
|
||||
cpy #MAX_LEMMINGS
|
||||
bne clear_lemmings_loop
|
||||
|
||||
rts
|
||||
|
||||
;=======================
|
||||
; Init Lemmings
|
||||
; Release Lemmings
|
||||
;=======================
|
||||
; TODO: adjust speed based on release speed
|
||||
release_lemming:
|
||||
ldy #0
|
||||
|
||||
; don't release if we've released them all
|
||||
lda LEMMINGS_TO_RELEASE
|
||||
beq done_release_lemmings
|
||||
|
||||
; don't release if door is still opening
|
||||
lda DOOR_OPEN
|
||||
beq done_release_lemmings
|
||||
|
||||
; only release every X frames
|
||||
lda FRAMEL
|
||||
and #$f
|
||||
bne done_release_lemmings
|
||||
|
||||
ldy NEXT_LEMMING_TO_RELEASE
|
||||
|
||||
lda #1
|
||||
sta lemming_out,Y
|
||||
|
@ -35,11 +48,20 @@ release_lemming:
|
|||
lda #LEMMING_FALLING
|
||||
sta lemming_status,Y
|
||||
|
||||
inc LEMMINGS_OUT
|
||||
sed
|
||||
lda LEMMINGS_OUT ; BCD
|
||||
clc
|
||||
adc #1
|
||||
sta LEMMINGS_OUT
|
||||
cld
|
||||
|
||||
jsr update_lemmings_out
|
||||
|
||||
inc NEXT_LEMMING_TO_RELEASE
|
||||
|
||||
dec LEMMINGS_TO_RELEASE
|
||||
|
||||
done_release_lemmings:
|
||||
|
||||
rts
|
||||
|
||||
|
|
|
@ -111,21 +111,50 @@ draw_time:
|
|||
|
||||
rts
|
||||
|
||||
|
||||
;===========================
|
||||
;===========================
|
||||
; update lemmings out number
|
||||
;===========================
|
||||
;===========================
|
||||
|
||||
; TODO: combine with time drawing code?
|
||||
|
||||
update_lemmings_out:
|
||||
|
||||
; draw minute
|
||||
ldy LEMMINGS_OUT
|
||||
; draw tens
|
||||
lda LEMMINGS_OUT
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
beq lemmings_out_ones
|
||||
lemmings_out_tens:
|
||||
|
||||
tay
|
||||
lda bignums_l,Y
|
||||
sta INL
|
||||
lda bignums_h,Y
|
||||
sta INH
|
||||
|
||||
ldx #15 ; 105
|
||||
stx XPOS
|
||||
lda #152
|
||||
sta YPOS
|
||||
|
||||
jsr hgr_draw_sprite_autoshift
|
||||
|
||||
|
||||
lemmings_out_ones:
|
||||
lda LEMMINGS_OUT
|
||||
and #$f
|
||||
tay
|
||||
|
||||
lda bignums_l,Y
|
||||
sta INL
|
||||
lda bignums_h,Y
|
||||
sta INH
|
||||
|
||||
; 246, 152
|
||||
|
||||
ldx #15 ; 105
|
||||
ldx #16 ; 112
|
||||
stx XPOS
|
||||
lda #152
|
||||
sta YPOS
|
||||
|
|
|
@ -66,12 +66,13 @@ LOAD_NEXT_CHUNK = $7F
|
|||
OVER_LEMMING = $80
|
||||
TIMER_COUNT = $81
|
||||
UPDATE_POINTER = $82
|
||||
LEMMINGS_TO_RELEASE = $83
|
||||
NEXT_LEMMING_TO_RELEASE = $83
|
||||
SAVED_Y1 = $84
|
||||
SAVED_Y2 = $85
|
||||
LEMMINGS_OUT = $86
|
||||
BUTTON_LOCATION = $87
|
||||
WHICH_LEVEL = $88
|
||||
LEMMINGS_TO_RELEASE = $89
|
||||
|
||||
APPLEII_MODEL = $8B
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user