lemm: hook up floaters

This commit is contained in:
Vince Weaver 2022-03-24 21:25:26 -04:00
parent f4bb380802
commit 7ba8b5b8a4
9 changed files with 194 additions and 44 deletions

View File

@ -82,6 +82,8 @@ do_draw_lemming:
beq draw_digging_sprite
cmp #LEMMING_FALLING
beq draw_falling_sprite
cmp #LEMMING_FLOATING
beq draw_floating_sprite
cmp #LEMMING_EXPLODING
beq draw_exploding_sprite
cmp #LEMMING_PARTICLES
@ -117,36 +119,22 @@ draw_walking_common:
lda lemming_y,Y
jmp draw_common
;====================
; draw floating
;====================
draw_floating_sprite:
jsr do_draw_floating_sprite
jmp draw_common
;====================
; draw falling
;====================
draw_falling_sprite:
lda lemming_frame,Y
and #$3
tax
lda lemming_direction,Y
bpl draw_falling_right
draw_falling_left:
lda lfall_sprite_l,X
sta INL
lda lfall_sprite_h,X
jmp draw_falling_common
draw_falling_right:
lda rfall_sprite_l,X
sta INL
lda rfall_sprite_h,X
draw_falling_common:
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
jsr do_draw_falling_sprite
jmp draw_common
@ -225,6 +213,73 @@ really_done_draw_lemming:
rts
;===============
;===============
; draw floating
;===============
;===============
do_draw_floating_sprite:
lda lemming_frame,Y
cmp #4
bcc umbrella_opening ; blt
; if <4 then draw first 4
; frames
and #3 ; otherwise repeat frames
clc ; 4..7
adc #4
umbrella_opening:
tax
lda umbrella_sprite_l,X
sta INL
lda umbrella_sprite_h,X
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
sec
sbc #4
rts
;===============
;===============
; draw falling
;===============
;===============
do_draw_falling_sprite:
lda lemming_frame,Y
and #$3
tax
lda lemming_direction,Y
bpl draw_falling_right
draw_falling_left:
lda lfall_sprite_l,X
sta INL
lda lfall_sprite_h,X
jmp draw_falling_common
draw_falling_right:
lda rfall_sprite_l,X
sta INL
lda rfall_sprite_h,X
draw_falling_common:
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
rts
lfall_sprite_l:
.byte <lemming_lfall1_sprite,<lemming_lfall2_sprite
.byte <lemming_lfall3_sprite,<lemming_lfall4_sprite
@ -318,6 +373,18 @@ splatting_sprite_h:
.byte >lemming_splat5_sprite,>lemming_splat6_sprite
.byte >lemming_splat7_sprite,>lemming_splat8_sprite
umbrella_sprite_l:
.byte <lemming_umbrella1_sprite,<lemming_umbrella2_sprite
.byte <lemming_umbrella3_sprite,<lemming_umbrella4_sprite
.byte <lemming_umbrella5_sprite,<lemming_umbrella6_sprite
.byte <lemming_umbrella7_sprite,<lemming_umbrella8_sprite
umbrella_sprite_h:
.byte >lemming_umbrella1_sprite,>lemming_umbrella2_sprite
.byte >lemming_umbrella3_sprite,>lemming_umbrella4_sprite
.byte >lemming_umbrella5_sprite,>lemming_umbrella6_sprite
.byte >lemming_umbrella7_sprite,>lemming_umbrella8_sprite
;==========================
; Handle particles

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -243,8 +243,10 @@ return_check_lemming:
bne done_keypress
make_climber:
jsr make_climber_routine
jmp done_keypress
make_floater:
jsr make_floater_routine
jmp done_keypress
make_exploding:
jsr make_exploding_routine
@ -301,6 +303,27 @@ make_exploding_routine:
sta lemming_exploding,Y
rts
;========================
; make climber
;========================
make_climber_routine:
lda #LEMMING_CLIMBER
ora lemming_attribute,Y
sta lemming_attribute,Y
rts
;========================
; make floater
;========================
make_floater_routine:
lda #LEMMING_FLOATER
ora lemming_attribute,Y
sta lemming_attribute,Y
rts
;=============================
;=============================

View File

@ -286,4 +286,4 @@ level1_intro_text:
.byte 12,16,"RELEASE RATE 50",0
.byte 13,18,"TIME 5 MINUTES",0
.byte 15,20,"RATING FUN",0
.byte 8,23,"PRESS RETURN TO CONINUE",0
.byte 8,23,"PRESS RETURN TO CONTINUE",0

View File

@ -294,4 +294,4 @@ level2_intro_text:
.byte 12,16,"RELEASE RATE 50",0
.byte 13,18,"TIME 5 MINUTES",0
.byte 15,20,"RATING FUN",0
.byte 8,23,"PRESS RETURN TO CONINUE",0
.byte 8,23,"PRESS RETURN TO CONTINUE",0

View File

@ -296,4 +296,4 @@ level3_intro_text:
.byte 12,16,"RELEASE RATE 50",0
.byte 13,18,"TIME 5 MINUTES",0
.byte 15,20,"RATING FUN",0
.byte 8,23,"PRESS RETURN TO CONINUE",0
.byte 8,23,"PRESS RETURN TO CONTINUE",0

View File

@ -296,4 +296,4 @@ level4_intro_text:
.byte 12,16,"RELEASE RATE 1",0
.byte 13,18,"TIME 5 MINUTES",0
.byte 15,20,"RATING FUN",0
.byte 8,23,"PRESS RETURN TO CONINUE",0
.byte 8,23,"PRESS RETURN TO CONTINUE",0

View File

@ -287,4 +287,4 @@ level5_intro_text:
.byte 12,16,"RELEASE RATE 50",0
.byte 13,18,"TIME 5 MINUTES",0
.byte 15,20,"RATING FUN",0
.byte 8,23,"PRESS RETURN TO CONINUE",0
.byte 8,23,"PRESS RETURN TO CONTINUE",0

View File

@ -1,5 +1,3 @@
; TODO: auto-size this based on MAX_LEMMINGS
lemming_x:
@ -51,6 +49,8 @@ really_move_lemming:
beq do_lemming_walking
cmp #LEMMING_DIGGING
beq do_lemming_digging
cmp #LEMMING_FLOATING
beq do_lemming_floating
jmp done_move_lemming
@ -59,17 +59,19 @@ really_move_lemming:
;=========================
do_lemming_falling:
tya
tax
inc lemming_y,X ; fall speed
inc lemming_y,X
inc lemming_fall_distance,X ; how far
jsr collision_check_ground
jsr handle_lemming_falling
jmp done_move_lemming
;=========================
; floating
;=========================
do_lemming_floating:
jsr handle_lemming_floating
jmp done_move_lemming
;=========================
; walking
;=========================
@ -146,6 +148,11 @@ walking_no_increment:
walking_done:
jmp done_move_lemming
;=====================
; digging
;=====================
@ -202,6 +209,54 @@ really_done_checking_lemming:
rts
;=====================
; falling
;=====================
handle_lemming_falling:
tya
tax
inc lemming_y,X ; fall speed
inc lemming_y,X
inc lemming_fall_distance,X ; how far
lda lemming_fall_distance,X
cmp #12
bcc not_fallen_enough ; blt
lda lemming_attribute,X
bpl not_fallen_enough ; see if high bit set
; we can switch to floating
lda #LEMMING_FLOATING
sta lemming_status,X
lda #0
sta lemming_frame,X
not_fallen_enough:
jsr collision_check_ground
rts
;=====================
; floating
;=====================
handle_lemming_floating:
tya
tax
inc lemming_y,X ; fall speed
lda #0
sta lemming_fall_distance,X
jsr collision_check_ground
rts
;==========================
; remove lemming from game
;==========================
@ -291,14 +346,19 @@ ground_walking:
sta lemming_fall_distance,Y
lda #LEMMING_WALKING ; else, walk
jmp done_check_ground
jmp update_status_check_ground
ground_falling:
ldy CURRENT_LEMMING
lda lemming_status,Y ; if floating, don't go back to fall
cmp #LEMMING_FLOATING
beq done_check_ground
lda #LEMMING_FALLING
done_check_ground:
update_status_check_ground:
ldy CURRENT_LEMMING
sta lemming_status,Y
done_check_ground:
rts
lemming_goes_splat: