diff --git a/games/lemm/draw_lemming.s b/games/lemm/draw_lemming.s index 49ca2d63..3dd888b0 100644 --- a/games/lemm/draw_lemming.s +++ b/games/lemm/draw_lemming.s @@ -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_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 + ;========================== ; Handle particles diff --git a/games/lemm/graphics/sprites.png b/games/lemm/graphics/sprites.png index 00c58f7b..10f9679c 100644 Binary files a/games/lemm/graphics/sprites.png and b/games/lemm/graphics/sprites.png differ diff --git a/games/lemm/keyboard.s b/games/lemm/keyboard.s index d021566c..7ab0cde8 100644 --- a/games/lemm/keyboard.s +++ b/games/lemm/keyboard.s @@ -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 + + ;============================= ;============================= diff --git a/games/lemm/level1.s b/games/lemm/level1.s index 338d70ea..be14df7c 100644 --- a/games/lemm/level1.s +++ b/games/lemm/level1.s @@ -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 diff --git a/games/lemm/level2.s b/games/lemm/level2.s index 29de6892..fa99b7d0 100644 --- a/games/lemm/level2.s +++ b/games/lemm/level2.s @@ -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 diff --git a/games/lemm/level3.s b/games/lemm/level3.s index a9755310..cbac8f6d 100644 --- a/games/lemm/level3.s +++ b/games/lemm/level3.s @@ -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 diff --git a/games/lemm/level4.s b/games/lemm/level4.s index 2fb0250c..44e111f8 100644 --- a/games/lemm/level4.s +++ b/games/lemm/level4.s @@ -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 diff --git a/games/lemm/level5.s b/games/lemm/level5.s index 36176ab4..4229427c 100644 --- a/games/lemm/level5.s +++ b/games/lemm/level5.s @@ -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 diff --git a/games/lemm/move_lemming.s b/games/lemm/move_lemming.s index fde9af46..d9bb57e9 100644 --- a/games/lemm/move_lemming.s +++ b/games/lemm/move_lemming.s @@ -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: