mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-10-30 02:26:58 +00:00
ootw: aliens can shoot. also make laser collision code generic
This commit is contained in:
parent
02b123ccfa
commit
33738a7cc9
@ -9,6 +9,11 @@ TODO Before release:
|
|||||||
l2 -- move doors to final behavior (break room one needs to
|
l2 -- move doors to final behavior (break room one needs to
|
||||||
be locked)
|
be locked)
|
||||||
|
|
||||||
|
l2 -- re-activate opening cutscene
|
||||||
|
|
||||||
|
l2 -- shield up in alien hallway
|
||||||
|
|
||||||
|
shooting through shield is broken
|
||||||
|
|
||||||
MISSING SPRITES:
|
MISSING SPRITES:
|
||||||
================
|
================
|
||||||
@ -45,6 +50,8 @@ BEHAVIOR DIFFERENCES:
|
|||||||
we call down.
|
we call down.
|
||||||
also I think if you wait long enough more aliens
|
also I think if you wait long enough more aliens
|
||||||
appear if you try to go left.
|
appear if you try to go left.
|
||||||
|
- should be able to crouch/shoot
|
||||||
|
- should be able to blast/shield
|
||||||
|
|
||||||
* gun behavior:
|
* gun behavior:
|
||||||
- doors/walls should explode outward away from blast
|
- doors/walls should explode outward away from blast
|
||||||
|
@ -180,7 +180,13 @@ done_move_alien_standing:
|
|||||||
|
|
||||||
move_alien_shooting:
|
move_alien_shooting:
|
||||||
|
|
||||||
|
lda FRAMEL
|
||||||
|
and #$3f
|
||||||
|
bne done_alien_shooting_now
|
||||||
|
|
||||||
|
jsr fire_alien_laser
|
||||||
|
|
||||||
|
done_alien_shooting_now:
|
||||||
jmp done_move_alien
|
jmp done_move_alien
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,6 +22,11 @@ fire_alien_laser:
|
|||||||
lda laser1_out
|
lda laser1_out
|
||||||
bne done_fire_alien_laser
|
bne done_fire_alien_laser
|
||||||
|
|
||||||
|
lda alien_x,X
|
||||||
|
sta COLLISION_X
|
||||||
|
lda alien_y,X
|
||||||
|
sta COLLISION_Y
|
||||||
|
|
||||||
; activate laser slot
|
; activate laser slot
|
||||||
|
|
||||||
inc laser1_out
|
inc laser1_out
|
||||||
@ -51,9 +56,12 @@ fire_alien_laser:
|
|||||||
; set x
|
; set x
|
||||||
|
|
||||||
alien_laser_left:
|
alien_laser_left:
|
||||||
|
stx LASER_TEMP
|
||||||
|
|
||||||
jsr calc_gun_left_collision
|
jsr calc_gun_left_collision
|
||||||
|
|
||||||
|
ldx LASER_TEMP
|
||||||
|
|
||||||
lda alien_x,X
|
lda alien_x,X
|
||||||
; dex
|
; dex
|
||||||
sta laser1_end
|
sta laser1_end
|
||||||
@ -67,8 +75,12 @@ alien_laser_left:
|
|||||||
|
|
||||||
alien_laser_right:
|
alien_laser_right:
|
||||||
|
|
||||||
|
stx LASER_TEMP
|
||||||
|
|
||||||
jsr calc_gun_right_collision
|
jsr calc_gun_right_collision
|
||||||
|
|
||||||
|
ldx LASER_TEMP
|
||||||
|
|
||||||
lda alien_x,X
|
lda alien_x,X
|
||||||
clc
|
clc
|
||||||
adc #5
|
adc #5
|
||||||
|
@ -16,6 +16,11 @@ fire_blast:
|
|||||||
lda blast0_out
|
lda blast0_out
|
||||||
bne done_fire_blast
|
bne done_fire_blast
|
||||||
|
|
||||||
|
lda PHYSICIST_X
|
||||||
|
sta COLLISION_X
|
||||||
|
lda PHYSICIST_Y
|
||||||
|
sta COLLISION_Y
|
||||||
|
|
||||||
; activate blast slot
|
; activate blast slot
|
||||||
|
|
||||||
inc blast0_out
|
inc blast0_out
|
||||||
|
@ -4,10 +4,6 @@ TARGET_SHIELD = $20
|
|||||||
TARGET_FRIEND = $30
|
TARGET_FRIEND = $30
|
||||||
TARGET_ALIEN = $40
|
TARGET_ALIEN = $40
|
||||||
|
|
||||||
; FIXME!!!!
|
|
||||||
; if doors/aliens/shields then stop check if X passing them. URGH.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;=============================
|
;=============================
|
||||||
;=============================
|
;=============================
|
||||||
@ -140,10 +136,10 @@ calc_gun_right_door_loop:
|
|||||||
lda (DOOR_Y),Y
|
lda (DOOR_Y),Y
|
||||||
clc
|
clc
|
||||||
adc #4
|
adc #4
|
||||||
cmp PHYSICIST_Y
|
cmp COLLISION_Y
|
||||||
bne calc_gun_right_door_continue
|
bne calc_gun_right_door_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp (DOOR_X),Y
|
cmp (DOOR_X),Y
|
||||||
bcs calc_gun_right_door_continue ; bge
|
bcs calc_gun_right_door_continue ; bge
|
||||||
|
|
||||||
@ -188,7 +184,7 @@ calc_gun_right_shield_loop:
|
|||||||
lda shield_out,X
|
lda shield_out,X
|
||||||
beq calc_gun_right_shield_continue
|
beq calc_gun_right_shield_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp shield_x,X
|
cmp shield_x,X
|
||||||
bcs calc_gun_right_shield_continue ; bge
|
bcs calc_gun_right_shield_continue ; bge
|
||||||
|
|
||||||
@ -225,7 +221,7 @@ calc_gun_right_friend:
|
|||||||
cmp WHICH_ROOM
|
cmp WHICH_ROOM
|
||||||
bne done_calc_gun_right_friend_collision
|
bne done_calc_gun_right_friend_collision
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp friend_x
|
cmp friend_x
|
||||||
bcs calc_gun_right_friend_continue ; bge
|
bcs calc_gun_right_friend_continue ; bge
|
||||||
|
|
||||||
@ -269,10 +265,10 @@ calc_gun_right_alien_loop:
|
|||||||
|
|
||||||
; only if on same level
|
; only if on same level
|
||||||
lda alien_y,X
|
lda alien_y,X
|
||||||
cmp PHYSICIST_Y
|
cmp COLLISION_Y
|
||||||
bne calc_gun_right_alien_continue
|
bne calc_gun_right_alien_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp alien_x,X
|
cmp alien_x,X
|
||||||
bcs calc_gun_right_alien_continue ; bge
|
bcs calc_gun_right_alien_continue ; bge
|
||||||
|
|
||||||
@ -354,10 +350,10 @@ calc_gun_left_door_loop:
|
|||||||
lda (DOOR_Y),Y
|
lda (DOOR_Y),Y
|
||||||
clc
|
clc
|
||||||
adc #4
|
adc #4
|
||||||
cmp PHYSICIST_Y
|
cmp COLLISION_Y
|
||||||
bne calc_gun_left_door_continue
|
bne calc_gun_left_door_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp (DOOR_X),Y
|
cmp (DOOR_X),Y
|
||||||
bcc calc_gun_left_door_continue ; blt
|
bcc calc_gun_left_door_continue ; blt
|
||||||
|
|
||||||
@ -400,7 +396,7 @@ calc_gun_left_shield_loop:
|
|||||||
lda shield_out,X
|
lda shield_out,X
|
||||||
beq calc_gun_left_shield_continue
|
beq calc_gun_left_shield_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp shield_x,X
|
cmp shield_x,X
|
||||||
bcc calc_gun_left_shield_continue ; blt
|
bcc calc_gun_left_shield_continue ; blt
|
||||||
|
|
||||||
@ -438,7 +434,7 @@ calc_gun_left_friend:
|
|||||||
cmp WHICH_ROOM
|
cmp WHICH_ROOM
|
||||||
bne done_calc_gun_left_friend_collision
|
bne done_calc_gun_left_friend_collision
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp friend_x
|
cmp friend_x
|
||||||
bcc calc_gun_left_friend_continue ; blt
|
bcc calc_gun_left_friend_continue ; blt
|
||||||
|
|
||||||
@ -482,10 +478,10 @@ calc_gun_left_alien_loop:
|
|||||||
|
|
||||||
; only if on same level
|
; only if on same level
|
||||||
lda alien_y,X
|
lda alien_y,X
|
||||||
cmp PHYSICIST_Y
|
cmp COLLISION_Y
|
||||||
bne calc_gun_left_alien_continue
|
bne calc_gun_left_alien_continue
|
||||||
|
|
||||||
lda PHYSICIST_X
|
lda COLLISION_X
|
||||||
cmp alien_x,X
|
cmp alien_x,X
|
||||||
bcc calc_gun_left_alien_continue ; blt
|
bcc calc_gun_left_alien_continue ; blt
|
||||||
|
|
||||||
|
33
ootw/laser.s
33
ootw/laser.s
@ -13,6 +13,8 @@
|
|||||||
|
|
||||||
; should handle shooting while crouching
|
; should handle shooting while crouching
|
||||||
|
|
||||||
|
MAX_LASERS = 2
|
||||||
|
|
||||||
laser_out:
|
laser_out:
|
||||||
laser0_out: .byte $0
|
laser0_out: .byte $0
|
||||||
laser1_out: .byte $0
|
laser1_out: .byte $0
|
||||||
@ -42,6 +44,10 @@ laser1_count: .byte $0
|
|||||||
;=========================
|
;=========================
|
||||||
|
|
||||||
fire_laser:
|
fire_laser:
|
||||||
|
lda PHYSICIST_X
|
||||||
|
sta COLLISION_X
|
||||||
|
lda PHYSICIST_Y
|
||||||
|
sta COLLISION_Y
|
||||||
|
|
||||||
lda laser0_out
|
lda laser0_out
|
||||||
bne done_fire_laser
|
bne done_fire_laser
|
||||||
@ -112,33 +118,48 @@ done_fire_laser:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;====================
|
;====================
|
||||||
; draw laser
|
; draw laser
|
||||||
;====================
|
;====================
|
||||||
|
|
||||||
draw_laser:
|
draw_laser:
|
||||||
|
|
||||||
lda laser0_out
|
ldx #0
|
||||||
|
draw_laser_loop:
|
||||||
|
lda laser_out,X
|
||||||
beq done_draw_laser
|
beq done_draw_laser
|
||||||
|
|
||||||
|
txa
|
||||||
|
pha ; save X on stack
|
||||||
|
|
||||||
lda #$10
|
lda #$10
|
||||||
sta hlin_color_smc+1
|
sta hlin_color_smc+1
|
||||||
|
|
||||||
lda #$0f
|
lda #$0f
|
||||||
sta hlin_mask_smc+1
|
sta hlin_mask_smc+1
|
||||||
|
|
||||||
ldy laser0_y
|
ldy laser_y,X
|
||||||
|
|
||||||
sec
|
sec
|
||||||
lda laser0_end
|
lda laser_end,X
|
||||||
sbc laser0_start
|
sbc laser_start,X
|
||||||
tax
|
sta LASER_TEMP
|
||||||
|
|
||||||
lda laser0_start
|
lda laser_start,X
|
||||||
|
|
||||||
|
ldx LASER_TEMP
|
||||||
|
|
||||||
jsr hlin
|
jsr hlin
|
||||||
|
|
||||||
|
pla ; restore X from stack
|
||||||
|
tax
|
||||||
|
|
||||||
done_draw_laser:
|
done_draw_laser:
|
||||||
|
inx
|
||||||
|
cpx #MAX_LASERS
|
||||||
|
bne draw_laser_loop
|
||||||
|
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
@ -97,6 +97,7 @@ end_message:
|
|||||||
|
|
||||||
.include "gun.s"
|
.include "gun.s"
|
||||||
.include "laser.s"
|
.include "laser.s"
|
||||||
|
.include "alien_laser.s"
|
||||||
.include "blast.s"
|
.include "blast.s"
|
||||||
.include "shield.s"
|
.include "shield.s"
|
||||||
|
|
||||||
|
@ -581,4 +581,20 @@ alien_disintegrating_14: ; 8
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;=====================
|
||||||
|
;=====================
|
||||||
|
; SHOOTING
|
||||||
|
;=====================
|
||||||
|
;=====================
|
||||||
|
|
||||||
|
alien_shoot_sprite:
|
||||||
|
.byte $5,$8
|
||||||
|
.byte $aa,$7a,$f7,$7f,$aa
|
||||||
|
.byte $aa,$77,$07,$00,$aa
|
||||||
|
.byte $0a,$aa,$00,$77,$aa
|
||||||
|
.byte $aa,$a7,$17,$10,$aa
|
||||||
|
.byte $aa,$aa,$00,$00,$aa
|
||||||
|
.byte $aa,$aa,$77,$a5,$5a
|
||||||
|
.byte $aa,$aa,$07,$aa,$05
|
||||||
|
.byte $aa,$0a,$00,$0a,$00
|
||||||
|
|
||||||
|
@ -56,9 +56,6 @@ LETTERD = $67
|
|||||||
LETTER = $68
|
LETTER = $68
|
||||||
BLARGH = $69
|
BLARGH = $69
|
||||||
|
|
||||||
|
|
||||||
;ZPOS = $78
|
|
||||||
|
|
||||||
AY_REGISTERS = $70
|
AY_REGISTERS = $70
|
||||||
A_FINE_TONE = $70
|
A_FINE_TONE = $70
|
||||||
A_COARSE_TONE = $71
|
A_COARSE_TONE = $71
|
||||||
@ -94,6 +91,8 @@ PT3_TEMP = $8A
|
|||||||
; More zero-page addresses
|
; More zero-page addresses
|
||||||
; we try not to conflict with anything DOS, MONITOR or BASIC related
|
; we try not to conflict with anything DOS, MONITOR or BASIC related
|
||||||
|
|
||||||
|
COLLISION_X = $BE
|
||||||
|
COLLISION_Y = $BF
|
||||||
|
|
||||||
DOOR_STATUS = $C0
|
DOOR_STATUS = $C0
|
||||||
DOOR_STATUS_H = $C1
|
DOOR_STATUS_H = $C1
|
||||||
@ -111,6 +110,7 @@ BEAST_DEAD = $CB ; 1
|
|||||||
VENT_OPEN = $CC ; 2
|
VENT_OPEN = $CC ; 2
|
||||||
INTRO_REPEAT = $CD ; INTRO
|
INTRO_REPEAT = $CD ; INTRO
|
||||||
|
|
||||||
|
LASER_TEMP = $CE ; 2+
|
||||||
LEFT_SHOOT_TARGET = $CF ; ALL
|
LEFT_SHOOT_TARGET = $CF ; ALL
|
||||||
RIGHT_SHOOT_TARGET = $D0 ; ALL
|
RIGHT_SHOOT_TARGET = $D0 ; ALL
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user