diff --git a/games/lemm/Makefile b/games/lemm/Makefile index 1a492297..c611adc0 100644 --- a/games/lemm/Makefile +++ b/games/lemm/Makefile @@ -29,7 +29,7 @@ LEMM_TEST: lemm_test.o lemm_test.o: lemm_test.s zp.inc hardware.inc \ graphics/graphics_test.inc \ - interrupt_handler.s keyboard.s + interrupt_handler.s ca65 -o lemm_test.o lemm_test.s -l lemm_test.lst #### @@ -40,8 +40,8 @@ LEMM: lemm.o lemm.o: lemm.s zp.inc hardware.inc \ graphics/graphics_test.inc \ intro_level1.s update_time.s hgr_sprite.s draw_flames.s \ - draw_door.s \ - interrupt_handler.s + draw_door.s move_lemming.s draw_lemming.s \ + interrupt_handler.s keyboard.s ca65 -o lemm.o lemm.s -l lemm.lst diff --git a/games/lemm/draw_lemming.s b/games/lemm/draw_lemming.s new file mode 100644 index 00000000..abee99cc --- /dev/null +++ b/games/lemm/draw_lemming.s @@ -0,0 +1,22 @@ + + +draw_lemming: + + lda lemming_out + beq done_draw_lemming + + lda #lemming_fall1_sprite + sta INH + + ldx lemming_x + stx XPOS + lda lemming_y + sta YPOS + + jsr hgr_draw_sprite + +done_draw_lemming: + rts + diff --git a/games/lemm/graphics/Makefile b/games/lemm/graphics/Makefile index 05b07e44..6a98788a 100644 --- a/games/lemm/graphics/Makefile +++ b/games/lemm/graphics/Makefile @@ -49,6 +49,7 @@ sprites.inc: sprites.png $(HGR_SPRITE) -s -l door2_sprite sprites.png 7 76 55 91 >> sprites.inc $(HGR_SPRITE) -s -l door3_sprite sprites.png 7 98 55 114 >> sprites.inc $(HGR_SPRITE) -s -l door4_sprite sprites.png 7 118 55 137 >> sprites.inc + $(HGR_SPRITE) -s -l lemming_fall1_sprite sprites.png 56 32 62 41 >> sprites.inc diff --git a/games/lemm/graphics/sprites.png b/games/lemm/graphics/sprites.png index cf009818..397ed341 100644 Binary files a/games/lemm/graphics/sprites.png and b/games/lemm/graphics/sprites.png differ diff --git a/games/lemm/lemm.s b/games/lemm/lemm.s index 430d6b67..51b28679 100644 --- a/games/lemm/lemm.s +++ b/games/lemm/lemm.s @@ -321,6 +321,28 @@ no_load_chunk: door_is_open: + ;====================== + ; release lemmings + ;====================== + + lda LEMMINGS_TO_RELEASE + beq done_release_lemmings + + lda DOOR_OPEN + beq done_release_lemmings + + lda FRAMEL + and #$f + bne done_release_lemmings + + lda #1 + sta lemming_out + + dec LEMMINGS_TO_RELEASE + +done_release_lemmings: + + jsr draw_flames lda TIMER_COUNT @@ -333,6 +355,10 @@ door_is_open: sta TIMER_COUNT timer_not_yet: + jsr move_lemmings + + jsr draw_lemming + jsr handle_keypress ; jsr draw_pointer @@ -411,6 +437,8 @@ load_song_chunk_good: ; .include "print_help.s" .include "gr_fast_clear.s" + .include "move_lemming.s" + .include "draw_lemming.s" .include "hgr_14x14_sprite.s" .include "text_print.s" diff --git a/games/lemm/move_lemming.s b/games/lemm/move_lemming.s new file mode 100644 index 00000000..2bd7b257 --- /dev/null +++ b/games/lemm/move_lemming.s @@ -0,0 +1,64 @@ + +move_lemmings: + + lda lemming_out + beq done_move_lemming + + lda lemming_status + cmp #LEMMING_FALLING + beq do_lemming_falling + cmp #LEMMING_WALKING + beq do_lemming_walking + cmp #LEMMING_DIGGING + beq do_lemming_digging + jmp done_move_lemming + +do_lemming_falling: + inc lemming_y + + lda lemming_y + clc + adc #9 + tay + + lda hposn_high,Y + sta GBASH + lda hposn_low,Y + sta GBASL + + ldy lemming_x + lda (GBASL),Y + and #$7f + beq done_move_lemming + + lda #LEMMING_WALKING + sta lemming_status + + jmp done_move_lemming + + +do_lemming_walking: + +do_lemming_digging: + +done_move_lemming: + rts + +lemming_x: + .byte 12 +lemming_y: + .byte 45 + +lemming_out: + .byte $0 + + +LEMMING_FALLING = 1 +LEMMING_WALKING = 2 +LEMMING_DIGGING = 3 + +lemming_status: + .byte LEMMING_FALLING + +lemming_job: + .byte $00 diff --git a/games/lemm/zp.inc b/games/lemm/zp.inc index 7f84d31e..55ca7d45 100644 --- a/games/lemm/zp.inc +++ b/games/lemm/zp.inc @@ -62,6 +62,7 @@ LOAD_NEXT_CHUNK = $7F OVER_LEMMING = $80 TIMER_COUNT = $81 UPDATE_POINTER = $82 +LEMMINGS_TO_RELEASE = $83 APPLEII_MODEL = $8B