dos33fsprogs/games/lemm/draw_lemming.s

515 lines
8.7 KiB
ArmAsm
Raw Normal View History

2022-03-13 21:18:19 +00:00
;==================
;==================
2022-03-22 04:05:49 +00:00
; erase lemmings
2022-03-13 21:18:19 +00:00
;==================
;==================
2022-03-11 04:02:08 +00:00
erase_lemming:
ldy #0
2022-03-22 04:05:49 +00:00
sty CURRENT_LEMMING
erase_lemming_loop:
ldy CURRENT_LEMMING
2022-03-11 04:02:08 +00:00
lda lemming_out,Y
beq done_erase_lemming
lda lemming_y,Y
2022-03-13 03:13:05 +00:00
sec
2022-03-16 01:00:30 +00:00
sbc #6
2022-03-11 04:02:08 +00:00
sta SAVED_Y1
clc
2022-03-16 01:00:30 +00:00
adc #15
2022-03-11 04:02:08 +00:00
sta SAVED_Y2
lda lemming_x,Y
tax
inx
jsr hgr_partial_restore
done_erase_lemming:
2022-03-22 04:05:49 +00:00
inc CURRENT_LEMMING
lda CURRENT_LEMMING
cmp #MAX_LEMMINGS
bne erase_lemming_loop
2022-03-11 04:02:08 +00:00
rts
2022-03-13 21:18:19 +00:00
;=========================
;=========================
; draw lemming
;=========================
;=========================
2022-03-10 06:10:42 +00:00
draw_lemming:
2022-03-11 04:02:08 +00:00
ldy #0
2022-03-22 04:05:49 +00:00
sty CURRENT_LEMMING
draw_lemming_loop:
ldy CURRENT_LEMMING
2022-03-10 06:10:42 +00:00
2022-03-11 04:02:08 +00:00
lda lemming_out,Y
2022-03-16 01:00:30 +00:00
bne do_draw_countdown
2022-03-13 03:13:05 +00:00
jmp done_draw_lemming
2022-03-10 06:10:42 +00:00
2022-03-16 01:00:30 +00:00
do_draw_countdown:
lda lemming_exploding,Y
beq do_draw_lemming
2022-03-23 01:48:02 +00:00
ldx lemming_exploding,Y
2022-03-16 01:00:30 +00:00
dex
lda countdown_sprites_l,X
sta INL
lda countdown_sprites_h,X
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
sec
sbc #6
sta YPOS
jsr hgr_draw_sprite_autoshift
2022-03-13 03:13:05 +00:00
do_draw_lemming:
2022-03-22 04:05:49 +00:00
ldy CURRENT_LEMMING
2022-03-13 01:55:20 +00:00
lda lemming_status,Y
cmp #LEMMING_DIGGING
beq draw_digging_sprite
2022-03-13 03:13:05 +00:00
cmp #LEMMING_FALLING
beq draw_falling_sprite
2022-03-16 01:00:30 +00:00
cmp #LEMMING_EXPLODING
beq draw_exploding_sprite
2022-03-16 01:56:47 +00:00
cmp #LEMMING_PARTICLES
beq draw_particles
2022-03-24 04:21:50 +00:00
cmp #LEMMING_SPLATTING
beq draw_splatting_sprite
2022-03-13 03:13:05 +00:00
draw_walking_sprite:
lda lemming_frame,Y
and #$7
tax
lda lemming_direction,Y
bpl draw_walking_right
2022-03-13 01:55:20 +00:00
2022-03-13 03:13:05 +00:00
draw_walking_left:
lda lwalk_sprite_l,X
sta INL
lda lwalk_sprite_h,X
jmp draw_walking_common
draw_walking_right:
lda rwalk_sprite_l,X
sta INL
lda rwalk_sprite_h,X
draw_walking_common:
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
jmp draw_common
;====================
; draw falling
;====================
2022-03-12 23:03:53 +00:00
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
2022-03-10 06:10:42 +00:00
sta INL
2022-03-12 23:03:53 +00:00
lda rfall_sprite_h,X
draw_falling_common:
2022-03-10 06:10:42 +00:00
sta INH
2022-03-11 04:02:08 +00:00
ldx lemming_x,Y
2022-03-10 06:10:42 +00:00
stx XPOS
2022-03-11 04:02:08 +00:00
lda lemming_y,Y
2022-03-13 01:55:20 +00:00
jmp draw_common
2022-03-16 01:00:30 +00:00
;====================
; draw exploding
;====================
draw_exploding_sprite:
2022-03-16 01:24:13 +00:00
jsr handle_explosion
2022-03-16 01:00:30 +00:00
2022-03-16 01:24:13 +00:00
jmp done_draw_lemming
2022-03-16 01:00:30 +00:00
2022-03-24 04:21:50 +00:00
;====================
; draw splatting
;====================
draw_splatting_sprite:
jsr handle_splatting
jmp done_draw_lemming
2022-03-16 01:56:47 +00:00
;====================
; draw particles
;====================
draw_particles:
jsr handle_particles
jmp done_draw_lemming
2022-03-16 01:00:30 +00:00
2022-03-13 01:55:20 +00:00
;======================
; digging
draw_digging_sprite:
lda lemming_frame,Y
and #$7
tax
lda dig_sprite_l,X
sta INL
lda dig_sprite_h,X
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
sec
sbc #2
jmp draw_common
draw_common:
2022-03-10 06:10:42 +00:00
sta YPOS
2022-03-13 21:18:19 +00:00
jsr hgr_draw_sprite_autoshift
2022-03-10 06:10:42 +00:00
done_draw_lemming:
2022-03-22 04:05:49 +00:00
inc CURRENT_LEMMING
lda CURRENT_LEMMING
cmp #MAX_LEMMINGS
beq really_done_draw_lemming
jmp draw_lemming_loop
really_done_draw_lemming:
2022-03-10 06:10:42 +00:00
rts
2022-03-12 23:03:53 +00:00
lfall_sprite_l:
.byte <lemming_lfall1_sprite,<lemming_lfall2_sprite
.byte <lemming_lfall3_sprite,<lemming_lfall4_sprite
lfall_sprite_h:
.byte >lemming_lfall1_sprite,>lemming_lfall2_sprite
.byte >lemming_lfall3_sprite,>lemming_lfall4_sprite
rfall_sprite_l:
.byte <lemming_rfall1_sprite,<lemming_rfall2_sprite
.byte <lemming_rfall3_sprite,<lemming_rfall4_sprite
rfall_sprite_h:
.byte >lemming_rfall1_sprite,>lemming_rfall2_sprite
.byte >lemming_rfall3_sprite,>lemming_rfall4_sprite
2022-03-13 01:55:20 +00:00
dig_sprite_l:
.byte <lemming_dig1_sprite,<lemming_dig2_sprite
.byte <lemming_dig3_sprite,<lemming_dig4_sprite
.byte <lemming_dig5_sprite,<lemming_dig6_sprite
.byte <lemming_dig7_sprite,<lemming_dig8_sprite
dig_sprite_h:
.byte >lemming_dig1_sprite,>lemming_dig2_sprite
.byte >lemming_dig3_sprite,>lemming_dig4_sprite
.byte >lemming_dig5_sprite,>lemming_dig6_sprite
.byte >lemming_dig7_sprite,>lemming_dig8_sprite
2022-03-13 03:13:05 +00:00
rwalk_sprite_l:
.byte <lemming_rwalk1_sprite,<lemming_rwalk2_sprite
.byte <lemming_rwalk3_sprite,<lemming_rwalk4_sprite
.byte <lemming_rwalk5_sprite,<lemming_rwalk6_sprite
.byte <lemming_rwalk7_sprite,<lemming_rwalk8_sprite
rwalk_sprite_h:
.byte >lemming_rwalk1_sprite,>lemming_rwalk2_sprite
.byte >lemming_rwalk3_sprite,>lemming_rwalk4_sprite
.byte >lemming_rwalk5_sprite,>lemming_rwalk6_sprite
.byte >lemming_rwalk7_sprite,>lemming_rwalk8_sprite
lwalk_sprite_l:
.byte <lemming_lwalk1_sprite,<lemming_lwalk2_sprite
.byte <lemming_lwalk3_sprite,<lemming_lwalk4_sprite
.byte <lemming_lwalk5_sprite,<lemming_lwalk6_sprite
.byte <lemming_lwalk7_sprite,<lemming_lwalk8_sprite
lwalk_sprite_h:
.byte >lemming_lwalk1_sprite,>lemming_lwalk2_sprite
.byte >lemming_lwalk3_sprite,>lemming_lwalk4_sprite
.byte >lemming_lwalk5_sprite,>lemming_lwalk6_sprite
.byte >lemming_lwalk7_sprite,>lemming_lwalk8_sprite
2022-03-16 01:00:30 +00:00
exploding_sprite_l:
2022-03-13 05:05:24 +00:00
.byte <lemming_explode1_sprite,<lemming_explode1_sprite
.byte <lemming_explode2_sprite,<lemming_explode3_sprite
.byte <lemming_explode4_sprite,<lemming_explode5_sprite
.byte <lemming_explode6_sprite,<lemming_explode7_sprite
.byte <lemming_explode8_sprite,<lemming_explode7_sprite
.byte <lemming_explode9_sprite,<lemming_explode8_sprite
.byte <lemming_explode9_sprite,<lemming_explode8_sprite
.byte <lemming_explode9_sprite,<lemming_explode8_sprite
2022-03-16 01:00:30 +00:00
exploding_sprite_h:
2022-03-13 05:05:24 +00:00
.byte >lemming_explode1_sprite,>lemming_explode1_sprite
.byte >lemming_explode2_sprite,>lemming_explode3_sprite
.byte >lemming_explode4_sprite,>lemming_explode5_sprite
.byte >lemming_explode6_sprite,>lemming_explode7_sprite
.byte >lemming_explode8_sprite,>lemming_explode7_sprite
.byte >lemming_explode9_sprite,>lemming_explode8_sprite
.byte >lemming_explode9_sprite,>lemming_explode8_sprite
.byte >lemming_explode9_sprite,>lemming_explode8_sprite
; 787989898
; clcrlrlrle
2022-03-16 01:00:30 +00:00
countdown_sprites_l:
.byte <countdown5_sprite,<countdown4_sprite,<countdown3_sprite
.byte <countdown2_sprite,<countdown1_sprite
2022-03-13 05:05:24 +00:00
2022-03-16 01:00:30 +00:00
countdown_sprites_h:
.byte >countdown5_sprite,>countdown4_sprite,>countdown3_sprite
.byte >countdown2_sprite,>countdown1_sprite
2022-03-13 03:13:05 +00:00
2022-03-16 01:24:13 +00:00
2022-03-24 04:21:50 +00:00
splatting_sprite_l:
.byte <lemming_splat1_sprite,<lemming_splat2_sprite
.byte <lemming_splat3_sprite,<lemming_splat4_sprite
.byte <lemming_splat5_sprite,<lemming_splat6_sprite
.byte <lemming_splat7_sprite,<lemming_splat8_sprite
splatting_sprite_h:
.byte >lemming_splat1_sprite,>lemming_splat2_sprite
.byte >lemming_splat3_sprite,>lemming_splat4_sprite
.byte >lemming_splat5_sprite,>lemming_splat6_sprite
.byte >lemming_splat7_sprite,>lemming_splat8_sprite
2022-03-23 01:48:02 +00:00
;==========================
; Handle particles
;==========================
2022-03-16 01:56:47 +00:00
handle_particles:
jsr hgr_draw_particles
2022-03-23 01:48:02 +00:00
ldy CURRENT_LEMMING
lda lemming_frame,Y
2022-03-16 01:56:47 +00:00
cmp #16
bne still_going
2022-03-23 01:48:02 +00:00
; TODO: partway through make lemming not out?
2022-03-16 01:56:47 +00:00
lda #0
2022-03-23 01:48:02 +00:00
sta lemming_out,Y
2022-03-24 02:57:02 +00:00
clc ; mark as not exiting via door
jsr remove_lemming ; remove the lemming
2022-03-16 01:56:47 +00:00
still_going:
not_done_particle:
rts
2022-03-23 01:48:02 +00:00
;==========================
; Handle explosion
;==========================
2022-03-16 01:24:13 +00:00
; moved to make room
handle_explosion:
lda lemming_frame,Y
cmp #$10
bcc exploding_animation
beq draw_explosion
start_particles:
2022-03-16 01:56:47 +00:00
lda #0
2022-03-23 01:48:02 +00:00
sta lemming_frame,Y
2022-03-16 01:56:47 +00:00
jsr init_particles
2022-03-16 01:24:13 +00:00
; erase explosion
2022-03-23 01:48:02 +00:00
ldy CURRENT_LEMMING
2022-03-16 01:24:13 +00:00
lda lemming_y,Y
sec
sbc #16
sta SAVED_Y1
clc
adc #32
sta SAVED_Y2
lda lemming_x,Y
sec
sbc #1
tax
inx
inx
inx
jsr hgr_partial_restore
; start particles
2022-03-23 01:10:57 +00:00
ldy CURRENT_LEMMING
2022-03-16 01:24:13 +00:00
lda #LEMMING_PARTICLES
2022-03-23 01:10:57 +00:00
sta lemming_status,Y
2022-03-16 01:24:13 +00:00
rts
draw_explosion:
; first erase pit in background art
jsr hgr_hlin_page_toggle ; toggle to page2
ldx #0
sta HGR_COLOR
2022-03-23 01:10:57 +00:00
ldy CURRENT_LEMMING
2022-03-16 01:24:13 +00:00
; line from (x,a) to (x+y,a)
2022-03-23 01:10:57 +00:00
lda lemming_x,Y
asl
2022-03-23 01:10:57 +00:00
adc lemming_x,Y
asl
2022-03-23 01:10:57 +00:00
adc lemming_x,Y ; multiply by 7
tax
pha
2022-03-23 01:10:57 +00:00
lda lemming_y,Y
2022-03-16 01:24:13 +00:00
clc
adc #9
2022-03-23 01:10:57 +00:00
ldy #7
2022-03-16 01:24:13 +00:00
jsr hgr_hlin
; line from (x,a) to (x+y,a)
pla
tax
2022-03-23 01:10:57 +00:00
ldy CURRENT_LEMMING
lda lemming_y,Y
ldy #7
2022-03-16 01:24:13 +00:00
clc
adc #10
2022-03-16 01:24:13 +00:00
jsr hgr_hlin
jsr hgr_hlin_page_toggle ; toggle back to page1
jsr click_speaker
2022-03-16 01:24:13 +00:00
ldy #0
lda #<explosion_sprite
sta INL
lda #>explosion_sprite
sta INH
2022-03-23 01:10:57 +00:00
ldy CURRENT_LEMMING
2022-03-16 01:24:13 +00:00
ldx lemming_x,Y
dex
stx XPOS
lda lemming_y,Y
sec
sbc #5
; jmp draw_common
jmp done_handle_exploding
exploding_animation:
; and #$f
tax
lda exploding_sprite_l,X
sta INL
lda exploding_sprite_h,X
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
; jmp draw_common
done_handle_exploding:
sta YPOS
jsr hgr_draw_sprite_autoshift
rts
2022-03-24 04:21:50 +00:00
;==========================
; Handle splatting
;==========================
; moved to make room
handle_splatting:
lda lemming_frame,Y
cmp #$8
beq done_splatting
draw_splatting:
jsr click_speaker
tax
lda splatting_sprite_l,X
sta INL
lda splatting_sprite_h,X
sta INH
ldx lemming_x,Y
stx XPOS
lda lemming_y,Y
sta YPOS
jsr hgr_draw_sprite_autoshift
rts
done_splatting:
clc
jsr remove_lemming ; FIXME: tail call
rts