mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-24 23:25:28 +00:00
ootw: c4: doors now block laser fire
This commit is contained in:
parent
c1220ab573
commit
f71d5fee48
@ -31,6 +31,9 @@ alien guard behavior:
|
|||||||
gun behavior:
|
gun behavior:
|
||||||
+ doors/walls should explode outward away from blast
|
+ doors/walls should explode outward away from blast
|
||||||
*unless* there is another door/wall behind it
|
*unless* there is another door/wall behind it
|
||||||
|
+ laser should show sparks when hits shields/walls
|
||||||
|
+ shield cannot be placed if room/floor wrong
|
||||||
|
+ shield collapse animation if blown up with blast
|
||||||
|
|
||||||
+ L1
|
+ L1
|
||||||
- underwater there is a water-motion effect
|
- underwater there is a water-motion effect
|
||||||
|
114
ootw/collision.s
114
ootw/collision.s
@ -6,6 +6,7 @@
|
|||||||
; far left limit is LEVEL_LEFT limit
|
; far left limit is LEVEL_LEFT limit
|
||||||
; far right limit is LEVEL_RIGHT limit
|
; far right limit is LEVEL_RIGHT limit
|
||||||
; any LOCKED doors in the way also stop things
|
; any LOCKED doors in the way also stop things
|
||||||
|
; FIXME: only door collision if on same level
|
||||||
recalc_walk_collision:
|
recalc_walk_collision:
|
||||||
|
|
||||||
lda RIGHT_LIMIT
|
lda RIGHT_LIMIT
|
||||||
@ -73,3 +74,116 @@ done_recalc_walk_right_collision:
|
|||||||
|
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
;=============================
|
||||||
|
; calc_gun_right_collision
|
||||||
|
;=============================
|
||||||
|
;=============================
|
||||||
|
; far right limit is LEVEL_RIGHT
|
||||||
|
; any LOCKED or CLOSED doors stop things
|
||||||
|
; any shield stops things
|
||||||
|
; our friend stops things
|
||||||
|
; any enemies stop things
|
||||||
|
|
||||||
|
calc_gun_right_collision:
|
||||||
|
|
||||||
|
lda RIGHT_LIMIT
|
||||||
|
and #$7f
|
||||||
|
sta RIGHT_SHOOT_LIMIT
|
||||||
|
|
||||||
|
lda NUM_DOORS
|
||||||
|
beq done_calc_gun_right_collision
|
||||||
|
|
||||||
|
calc_gun_right_doors:
|
||||||
|
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
calc_gun_right_loop:
|
||||||
|
|
||||||
|
lda PHYSICIST_X
|
||||||
|
|
||||||
|
cmp door_x,X
|
||||||
|
bcs calc_gun_right_continue ; bge
|
||||||
|
|
||||||
|
lda door_status,X
|
||||||
|
cmp #DOOR_STATUS_LOCKED
|
||||||
|
beq calc_gun_right_door_there
|
||||||
|
cmp #DOOR_STATUS_CLOSED
|
||||||
|
bne calc_gun_right_continue
|
||||||
|
|
||||||
|
calc_gun_right_door_there:
|
||||||
|
; early exit
|
||||||
|
lda door_x,X
|
||||||
|
sta RIGHT_SHOOT_LIMIT
|
||||||
|
jmp done_calc_gun_right_collision
|
||||||
|
|
||||||
|
calc_gun_right_continue:
|
||||||
|
inx
|
||||||
|
cpx NUM_DOORS
|
||||||
|
bne calc_gun_right_loop
|
||||||
|
|
||||||
|
done_calc_gun_right_collision:
|
||||||
|
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=============================
|
||||||
|
;=============================
|
||||||
|
; calc_gun_left_collision
|
||||||
|
;=============================
|
||||||
|
;=============================
|
||||||
|
; far right limit is LEVEL_LEFT
|
||||||
|
; any LOCKED or CLOSED doors stop things
|
||||||
|
; any shield stops things
|
||||||
|
; our friend stops things
|
||||||
|
; any enemies stop things
|
||||||
|
|
||||||
|
calc_gun_left_collision:
|
||||||
|
|
||||||
|
lda LEFT_LIMIT
|
||||||
|
and #$7f
|
||||||
|
sta LEFT_SHOOT_LIMIT
|
||||||
|
|
||||||
|
lda NUM_DOORS
|
||||||
|
beq done_calc_gun_left_collision
|
||||||
|
|
||||||
|
calc_gun_left_doors:
|
||||||
|
|
||||||
|
|
||||||
|
ldx NUM_DOORS
|
||||||
|
dex
|
||||||
|
calc_gun_left_loop:
|
||||||
|
lda PHYSICIST_X
|
||||||
|
|
||||||
|
cmp door_x,X
|
||||||
|
bcc calc_gun_left_continue ; blt
|
||||||
|
|
||||||
|
lda door_status,X
|
||||||
|
cmp #DOOR_STATUS_LOCKED
|
||||||
|
beq calc_gun_left_door_there
|
||||||
|
cmp #DOOR_STATUS_CLOSED
|
||||||
|
bne calc_gun_left_continue
|
||||||
|
|
||||||
|
calc_gun_left_door_there:
|
||||||
|
; early exit
|
||||||
|
lda door_x,X
|
||||||
|
sta LEFT_SHOOT_LIMIT
|
||||||
|
jmp done_calc_gun_left_collision
|
||||||
|
|
||||||
|
calc_gun_left_continue:
|
||||||
|
dex
|
||||||
|
bpl calc_gun_left_loop
|
||||||
|
|
||||||
|
done_calc_gun_left_collision:
|
||||||
|
|
||||||
|
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
14
ootw/laser.s
14
ootw/laser.s
@ -54,6 +54,8 @@ fire_laser:
|
|||||||
|
|
||||||
laser_left:
|
laser_left:
|
||||||
|
|
||||||
|
jsr calc_gun_left_collision
|
||||||
|
|
||||||
ldx PHYSICIST_X
|
ldx PHYSICIST_X
|
||||||
dex
|
dex
|
||||||
stx laser0_end
|
stx laser0_end
|
||||||
@ -67,6 +69,8 @@ laser_left:
|
|||||||
|
|
||||||
laser_right:
|
laser_right:
|
||||||
|
|
||||||
|
jsr calc_gun_right_collision
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda PHYSICIST_X
|
||||||
clc
|
clc
|
||||||
adc #5
|
adc #5
|
||||||
@ -153,12 +157,14 @@ still_starting_left:
|
|||||||
laser_edge_detect_left:
|
laser_edge_detect_left:
|
||||||
|
|
||||||
lda laser0_end
|
lda laser0_end
|
||||||
|
cmp LEFT_SHOOT_LIMIT
|
||||||
bmi disable_laser
|
bmi disable_laser
|
||||||
|
|
||||||
lda laser0_start
|
lda laser0_start
|
||||||
|
cmp LEFT_SHOOT_LIMIT
|
||||||
bpl no_move_laser
|
bpl no_move_laser
|
||||||
|
|
||||||
lda #0
|
lda LEFT_SHOOT_LIMIT
|
||||||
sta laser0_start
|
sta laser0_start
|
||||||
|
|
||||||
jmp no_move_laser
|
jmp no_move_laser
|
||||||
@ -190,14 +196,14 @@ laser_edge_detect_right:
|
|||||||
|
|
||||||
; detect if totally off screen
|
; detect if totally off screen
|
||||||
lda laser0_start
|
lda laser0_start
|
||||||
cmp #40
|
cmp RIGHT_SHOOT_LIMIT
|
||||||
bcs disable_laser
|
bcs disable_laser
|
||||||
|
|
||||||
lda laser0_end
|
lda laser0_end
|
||||||
cmp #40
|
cmp RIGHT_SHOOT_LIMIT
|
||||||
bcc no_move_laser
|
bcc no_move_laser
|
||||||
|
|
||||||
lda #39
|
lda RIGHT_SHOOT_LIMIT
|
||||||
sta laser0_end
|
sta laser0_end
|
||||||
|
|
||||||
no_move_laser:
|
no_move_laser:
|
||||||
|
Loading…
Reference in New Issue
Block a user