dos33fsprogs/games/lemm/move_lemming.s

236 lines
3.0 KiB
ArmAsm
Raw Normal View History

2022-03-10 06:10:42 +00:00
2022-03-13 06:28:37 +00:00
;==========================
; move them
;==========================
2022-03-10 06:10:42 +00:00
move_lemmings:
2022-03-11 05:53:18 +00:00
ldy #0
lda lemming_out,Y
2022-03-10 06:10:42 +00:00
2022-03-11 05:53:18 +00:00
bne really_move_lemming
2022-03-11 06:22:51 +00:00
jmp done_checking_lemming
2022-03-11 05:53:18 +00:00
really_move_lemming:
2022-03-12 23:03:53 +00:00
; bump frame
tya
tax
inc lemming_frame,X ; only can inc with X
lda lemming_status,Y
2022-03-10 06:10:42 +00:00
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
2022-03-13 21:18:19 +00:00
;=========================
; falling
;=========================
2022-03-10 06:10:42 +00:00
do_lemming_falling:
2022-03-13 21:18:19 +00:00
inc lemming_y ; fall speed
2022-03-10 06:10:42 +00:00
inc lemming_y
2022-03-11 04:02:08 +00:00
jsr collision_check_ground
2022-03-10 06:10:42 +00:00
jmp done_move_lemming
2022-03-13 21:18:19 +00:00
;=========================
; walking
;=========================
2022-03-10 06:10:42 +00:00
do_lemming_walking:
2022-03-11 05:53:18 +00:00
2022-03-13 06:28:37 +00:00
; collision detect walls
2022-03-11 05:53:18 +00:00
lda lemming_y
clc
adc #3 ; waist-high?
tay
lda hposn_high,Y
2022-03-13 06:28:37 +00:00
clc
adc #$20
2022-03-11 05:53:18 +00:00
sta GBASH
lda hposn_low,Y
sta GBASL
2022-03-13 21:18:19 +00:00
; increment
; only do this every 4th frame?
lda lemming_frame
and #$3
beq walking_increment
lda lemming_x
jmp walking_done
walking_increment:
; actually incrememt
2022-03-11 04:02:08 +00:00
clc
lda lemming_x
adc lemming_direction
2022-03-11 05:53:18 +00:00
tay
lda (GBASL),Y
and #$7f
beq walking_no_wall
walking_yes_wall:
2022-03-13 21:18:19 +00:00
; reverse direction
2022-03-11 05:53:18 +00:00
lda lemming_direction
eor #$ff
clc
adc #1
sta lemming_direction
lda lemming_x
walking_no_wall:
tya
walking_done:
2022-03-11 04:02:08 +00:00
sta lemming_x
jsr collision_check_ground
2022-03-10 06:10:42 +00:00
2022-03-11 05:53:18 +00:00
jmp done_move_lemming
2022-03-10 06:10:42 +00:00
do_lemming_digging:
2022-03-11 05:53:18 +00:00
lda lemming_y
clc
adc #9
tay
lda hposn_high,Y
2022-03-13 06:28:37 +00:00
clc
adc #$20
2022-03-11 05:53:18 +00:00
sta GBASH
lda hposn_low,Y
sta GBASL
ldy lemming_x
lda (GBASL),Y
and #$7f
beq digging_falling
digging_digging:
lda #$0
sta (GBASL),Y
2022-03-13 06:28:37 +00:00
; lda GBASH
; clc
; adc #$20 ; erase bg
; sta GBASH
; lda #$0
; sta (GBASL),Y
2022-03-11 05:53:18 +00:00
inc lemming_y
jmp done_digging
digging_falling:
lda #LEMMING_FALLING
sta lemming_status
done_digging:
2022-03-10 06:10:42 +00:00
done_move_lemming:
2022-03-11 06:22:51 +00:00
; see if beat level
lda lemming_y
cmp #116
bcc not_done_level
cmp #127
bcs not_done_level
lda lemming_x
cmp #31
bcc not_done_level
; done level
jsr remove_lemming
2022-03-15 04:50:35 +00:00
lda #LEVEL_WIN
2022-03-11 06:22:51 +00:00
sta LEVEL_OVER
not_done_level:
done_checking_lemming:
rts
;==========================
; remove lemming from game
remove_lemming:
lda #0
sta lemming_out
dec LEMMINGS_OUT
jsr update_lemmings_out
2022-03-10 06:10:42 +00:00
rts
2022-03-11 06:22:51 +00:00
2022-03-11 04:02:08 +00:00
lemming_direction:
.byte 1
2022-03-10 06:10:42 +00:00
lemming_x:
.byte 12
lemming_y:
.byte 45
lemming_out:
.byte $0
2022-03-12 23:03:53 +00:00
lemming_frame:
.byte 0
2022-03-10 06:10:42 +00:00
LEMMING_FALLING = 1
LEMMING_WALKING = 2
LEMMING_DIGGING = 3
lemming_status:
.byte LEMMING_FALLING
lemming_job:
.byte $00
2022-03-11 04:02:08 +00:00
2022-03-13 06:28:37 +00:00
;=============================
; collision check ground
;=============================
2022-03-11 04:02:08 +00:00
collision_check_ground:
lda lemming_y
clc
adc #9
tay
lda hposn_high,Y
2022-03-13 06:28:37 +00:00
clc
adc #$20 ; check bg, not fg
2022-03-11 04:02:08 +00:00
sta GBASH
lda hposn_low,Y
sta GBASL
ldy lemming_x
lda (GBASL),Y
and #$7f
beq ground_falling
ground_walking:
2022-03-15 04:02:46 +00:00
; lda #0
; sta lemming_frame
2022-03-11 04:02:08 +00:00
lda #LEMMING_WALKING
jmp done_check_ground
ground_falling:
lda #LEMMING_FALLING
done_check_ground:
sta lemming_status
rts