mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-09-28 02:55:03 +00:00
ootw: c4: alien now appears
note: blends in with background :(
This commit is contained in:
parent
24f4205ad9
commit
2659de34b2
143
ootw/alien.s
143
ootw/alien.s
@ -1,39 +1,60 @@
|
|||||||
; draw/move the bad guy aliens
|
; draw/move the bad guy aliens
|
||||||
|
|
||||||
alien_state:
|
MAX_ALIENS = 3
|
||||||
alien0:
|
|
||||||
|
alien_out:
|
||||||
alien0_out: .byte 0
|
alien0_out: .byte 0
|
||||||
alien0_x: .byte 0
|
|
||||||
alien0_y: .byte 0
|
|
||||||
alien0_state: .byte 0
|
|
||||||
alien0_gait: .byte 0
|
|
||||||
alien0_direction: .byte 0
|
|
||||||
alien0_gun: .byte 0
|
|
||||||
|
|
||||||
alien1:
|
|
||||||
alien1_out: .byte 0
|
alien1_out: .byte 0
|
||||||
|
alien2_out: .byte 0
|
||||||
|
|
||||||
|
alien_room:
|
||||||
|
alien0_room: .byte 0
|
||||||
|
alien1_room: .byte 0
|
||||||
|
alien2_room: .byte 0
|
||||||
|
|
||||||
|
alien_x:
|
||||||
|
alien0_x: .byte 0
|
||||||
alien1_x: .byte 0
|
alien1_x: .byte 0
|
||||||
|
alien2_x: .byte 0
|
||||||
|
|
||||||
|
alien_y:
|
||||||
|
alien0_y: .byte 0
|
||||||
alien1_y: .byte 0
|
alien1_y: .byte 0
|
||||||
|
alien2_y: .byte 0
|
||||||
|
|
||||||
|
alien_state:
|
||||||
|
alien0_state: .byte 0
|
||||||
alien1_state: .byte 0
|
alien1_state: .byte 0
|
||||||
|
alien2_state: .byte 0
|
||||||
|
|
||||||
|
A_STANDING = 0
|
||||||
|
A_WALKING = 1
|
||||||
|
A_RUNNING = 2
|
||||||
|
A_CROUCHING = 3
|
||||||
|
A_TURNING = 4
|
||||||
|
A_YELLING = 5
|
||||||
|
A_SHOOTING_UP = 6
|
||||||
|
A_DISINTEGRATING = 7
|
||||||
|
|
||||||
|
|
||||||
|
alien_gait:
|
||||||
|
alien0_gait: .byte 0
|
||||||
alien1_gait: .byte 0
|
alien1_gait: .byte 0
|
||||||
|
alien2_gait: .byte 0
|
||||||
|
|
||||||
|
alien_direction:
|
||||||
|
alien0_direction: .byte 0
|
||||||
alien1_direction: .byte 0
|
alien1_direction: .byte 0
|
||||||
|
alien2_direction: .byte 0
|
||||||
|
|
||||||
|
alien_gun:
|
||||||
|
alien0_gun: .byte 0
|
||||||
alien1_gun: .byte 0
|
alien1_gun: .byte 0
|
||||||
|
alien2_gun: .byte 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ALIEN_OUT = 0
|
|
||||||
ALIEN_X = 1
|
|
||||||
ALIEN_Y = 2
|
|
||||||
ALIEN_STATE = 3
|
|
||||||
ALIEN_GAIT = 4
|
|
||||||
ALIEN_DIRECTION = 5
|
|
||||||
ALIEN_GUN = 6
|
|
||||||
|
|
||||||
A_STANDING = 0
|
|
||||||
A_WALKING = 1
|
|
||||||
A_RUNNING = 2
|
|
||||||
A_CROUCHING = 3
|
|
||||||
A_TURNING = 4
|
|
||||||
A_YELLING = 5
|
|
||||||
A_SHOOTING_UP = 6
|
|
||||||
|
|
||||||
;=======================================
|
;=======================================
|
||||||
; Move alien based on current state
|
; Move alien based on current state
|
||||||
@ -43,10 +64,10 @@ move_alien:
|
|||||||
; FIXME: loop through all alieans
|
; FIXME: loop through all alieans
|
||||||
ldx #0
|
ldx #0
|
||||||
|
|
||||||
lda alien_state+ALIEN_OUT,X
|
lda alien_out,X
|
||||||
beq done_move_alien
|
beq done_move_alien
|
||||||
|
|
||||||
lda alien_state+ALIEN_STATE,X
|
lda alien_state,X
|
||||||
|
|
||||||
cmp #A_WALKING
|
cmp #A_WALKING
|
||||||
beq move_alien_walking
|
beq move_alien_walking
|
||||||
@ -62,47 +83,47 @@ done_move_alien:
|
|||||||
;======================
|
;======================
|
||||||
; yelling
|
; yelling
|
||||||
move_alien_yelling:
|
move_alien_yelling:
|
||||||
inc alien_state+ALIEN_GAIT,X ; cycle through animation
|
inc alien_gait,X ; cycle through animation
|
||||||
rts
|
rts
|
||||||
|
|
||||||
;======================
|
;======================
|
||||||
; walking
|
; walking
|
||||||
|
|
||||||
move_alien_walking:
|
move_alien_walking:
|
||||||
inc alien_state+ALIEN_GAIT,X ; cycle through animation
|
inc alien_gait,X ; cycle through animation
|
||||||
|
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
and #$f
|
and #$f
|
||||||
cmp #$8 ; only walk roughly 1/8 of time
|
cmp #$8 ; only walk roughly 1/8 of time
|
||||||
bne alien_no_move_walk
|
bne alien_no_move_walk
|
||||||
|
|
||||||
lda alien_state+ALIEN_DIRECTION,X
|
lda alien_direction,X
|
||||||
beq a_walk_left
|
beq a_walk_left
|
||||||
|
|
||||||
inc alien_state+ALIEN_X,X ; walk right
|
inc alien_x,X ; walk right
|
||||||
rts
|
rts
|
||||||
a_walk_left:
|
a_walk_left:
|
||||||
dec alien_state+ALIEN_X,X ; walk left
|
dec alien_x,X ; walk left
|
||||||
alien_no_move_walk:
|
alien_no_move_walk:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
;======================
|
;======================
|
||||||
; running
|
; running
|
||||||
move_alien_running:
|
move_alien_running:
|
||||||
inc alien_state+ALIEN_GAIT,X ; cycle through animation
|
inc alien_gait,X ; cycle through animation
|
||||||
|
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
and #$3
|
and #$3
|
||||||
cmp #$2 ; only run roughly 1/4 of time
|
cmp #$2 ; only run roughly 1/4 of time
|
||||||
bne alien_no_move_run
|
bne alien_no_move_run
|
||||||
|
|
||||||
lda alien_state+ALIEN_DIRECTION,X
|
lda alien_direction,X
|
||||||
beq a_run_left
|
beq a_run_left
|
||||||
|
|
||||||
inc alien_state+ALIEN_X,X ; run right
|
inc alien_x,X ; run right
|
||||||
rts
|
rts
|
||||||
a_run_left:
|
a_run_left:
|
||||||
dec alien_state+ALIEN_X,X ; run left
|
dec alien_x,X ; run left
|
||||||
alien_no_move_run:
|
alien_no_move_run:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
@ -151,10 +172,10 @@ draw_alien:
|
|||||||
; FIXME
|
; FIXME
|
||||||
ldx #0
|
ldx #0
|
||||||
|
|
||||||
lda alien_state+ALIEN_OUT,X
|
lda alien_out,X
|
||||||
beq no_alien
|
beq no_alien
|
||||||
|
|
||||||
lda alien_state+ALIEN_STATE,X
|
lda alien_state,X
|
||||||
tay
|
tay
|
||||||
lda astate_table_lo,y
|
lda astate_table_lo,y
|
||||||
sta ajump
|
sta ajump
|
||||||
@ -202,12 +223,12 @@ alien_crouching:
|
|||||||
;================================
|
;================================
|
||||||
|
|
||||||
alien_walking:
|
alien_walking:
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
cmp #64
|
cmp #64
|
||||||
bcc alien_gait_fine ; blt
|
bcc alien_gait_fine ; blt
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta alien_state+ALIEN_GAIT,X
|
sta alien_gait,X
|
||||||
|
|
||||||
alien_gait_fine:
|
alien_gait_fine:
|
||||||
lsr
|
lsr
|
||||||
@ -216,7 +237,7 @@ alien_gait_fine:
|
|||||||
|
|
||||||
tay
|
tay
|
||||||
|
|
||||||
lda alien_state+ALIEN_GUN,X
|
lda alien_gun,X
|
||||||
beq alien_walk_nogun
|
beq alien_walk_nogun
|
||||||
|
|
||||||
alien_walk_gun:
|
alien_walk_gun:
|
||||||
@ -243,12 +264,12 @@ alien_walk_nogun:
|
|||||||
;================================
|
;================================
|
||||||
|
|
||||||
alien_running:
|
alien_running:
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
cmp #32
|
cmp #32
|
||||||
bcc alien_run_gait_fine ; blt
|
bcc alien_run_gait_fine ; blt
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta alien_state+ALIEN_GAIT,X
|
sta alien_gait,X
|
||||||
|
|
||||||
alien_run_gait_fine:
|
alien_run_gait_fine:
|
||||||
lsr
|
lsr
|
||||||
@ -270,19 +291,19 @@ alien_run_gait_fine:
|
|||||||
|
|
||||||
alien_turning:
|
alien_turning:
|
||||||
|
|
||||||
dec alien_state+ALIEN_GAIT,X
|
dec alien_gait,X
|
||||||
bpl alien_draw_turning
|
bpl alien_draw_turning
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta alien_state+ALIEN_GAIT,X
|
sta alien_gait,X
|
||||||
|
|
||||||
; switch direction
|
; switch direction
|
||||||
lda alien_state+ALIEN_DIRECTION,X
|
lda alien_direction,X
|
||||||
eor #$1
|
eor #$1
|
||||||
sta alien_state+ALIEN_DIRECTION,X
|
sta alien_direction,X
|
||||||
|
|
||||||
lda #A_WALKING
|
lda #A_WALKING
|
||||||
sta alien_state+ALIEN_STATE,X
|
sta alien_state,X
|
||||||
|
|
||||||
alien_draw_turning:
|
alien_draw_turning:
|
||||||
lda #<alien_turning_sprite
|
lda #<alien_turning_sprite
|
||||||
@ -300,7 +321,7 @@ alien_draw_turning:
|
|||||||
;================================
|
;================================
|
||||||
|
|
||||||
alien_yelling:
|
alien_yelling:
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
|
|
||||||
; 00
|
; 00
|
||||||
; 01
|
; 01
|
||||||
@ -310,7 +331,7 @@ alien_yelling:
|
|||||||
and #$40
|
and #$40
|
||||||
bne alien_yelling_no_waving
|
bne alien_yelling_no_waving
|
||||||
|
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
|
|
||||||
alien_yelling_no_waving:
|
alien_yelling_no_waving:
|
||||||
and #$10
|
and #$10
|
||||||
@ -335,7 +356,7 @@ alien_yelling_no_waving:
|
|||||||
;================================
|
;================================
|
||||||
|
|
||||||
alien_shooting_up:
|
alien_shooting_up:
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
and #$30
|
and #$30
|
||||||
|
|
||||||
; 000 000
|
; 000 000
|
||||||
@ -358,7 +379,7 @@ alien_shooting_up:
|
|||||||
|
|
||||||
cpy #0
|
cpy #0
|
||||||
|
|
||||||
lda alien_state+ALIEN_GAIT,X
|
lda alien_gait,X
|
||||||
; and #$ff
|
; and #$ff
|
||||||
bne finally_draw_alien
|
bne finally_draw_alien
|
||||||
|
|
||||||
@ -379,13 +400,13 @@ alien_shooting_up:
|
|||||||
|
|
||||||
|
|
||||||
finally_draw_alien:
|
finally_draw_alien:
|
||||||
lda alien_state+ALIEN_X,X
|
lda alien_x,X
|
||||||
sta XPOS
|
sta XPOS
|
||||||
|
|
||||||
lda alien_state+ALIEN_Y,X
|
lda alien_y,X
|
||||||
sta YPOS
|
sta YPOS
|
||||||
|
|
||||||
lda alien_state+ALIEN_DIRECTION,X
|
lda alien_direction,X
|
||||||
bne alien_facing_right
|
bne alien_facing_right
|
||||||
|
|
||||||
alien_facing_left:
|
alien_facing_left:
|
||||||
@ -395,5 +416,13 @@ alien_facing_right:
|
|||||||
jmp put_sprite_flipped_crop
|
jmp put_sprite_flipped_crop
|
||||||
|
|
||||||
|
|
||||||
|
;==================
|
||||||
|
; clear aliens
|
||||||
|
;==================
|
||||||
|
clear_aliens:
|
||||||
|
lda #0
|
||||||
|
sta alien0_out
|
||||||
|
sta alien1_out
|
||||||
|
sta alien2_out
|
||||||
|
|
||||||
|
rts
|
||||||
|
@ -1,6 +1,10 @@
|
|||||||
; Ootw Checkpoint4 -- Running around the City
|
; Ootw Checkpoint4 -- Running around the City
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
;=======================
|
||||||
|
; ootw_city_init
|
||||||
|
;=======================
|
||||||
|
;=======================
|
||||||
; call once before entering city for first time
|
; call once before entering city for first time
|
||||||
ootw_city_init:
|
ootw_city_init:
|
||||||
lda #0
|
lda #0
|
||||||
@ -8,6 +12,34 @@ ootw_city_init:
|
|||||||
sta BG_SCROLL
|
sta BG_SCROLL
|
||||||
sta DIRECTION ; left
|
sta DIRECTION ; left
|
||||||
sta LASER_OUT
|
sta LASER_OUT
|
||||||
|
sta ALIEN_OUT
|
||||||
|
|
||||||
|
|
||||||
|
;===============
|
||||||
|
; set up aliens
|
||||||
|
|
||||||
|
jsr clear_aliens
|
||||||
|
|
||||||
|
lda #1
|
||||||
|
sta alien0_out
|
||||||
|
|
||||||
|
lda #2
|
||||||
|
sta alien0_room
|
||||||
|
|
||||||
|
lda #27
|
||||||
|
sta alien0_x
|
||||||
|
|
||||||
|
lda #18
|
||||||
|
sta alien0_y
|
||||||
|
|
||||||
|
lda #A_STANDING
|
||||||
|
sta alien0_state
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta alien0_direction
|
||||||
|
|
||||||
|
|
||||||
|
; set up physicist
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
sta HAVE_GUN
|
sta HAVE_GUN
|
||||||
@ -32,15 +64,35 @@ ootw_city_init:
|
|||||||
rts
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
;===========================
|
||||||
;===========================
|
;===========================
|
||||||
; enter new room in jail
|
; enter new room in jail
|
||||||
;===========================
|
;===========================
|
||||||
|
;===========================
|
||||||
ootw_city:
|
ootw_city:
|
||||||
|
|
||||||
;==============================
|
|
||||||
; each room init
|
|
||||||
|
|
||||||
|
;==============================
|
||||||
|
; if alien in room, set ALIEN_OUT
|
||||||
|
|
||||||
|
lda #0
|
||||||
|
sta ALIEN_OUT
|
||||||
|
|
||||||
|
ldx #0
|
||||||
|
alien_room_loop:
|
||||||
|
lda alien_out,X
|
||||||
|
beq alien_room_continue
|
||||||
|
|
||||||
|
lda alien_room,X
|
||||||
|
cmp WHICH_ROOM
|
||||||
|
bne alien_room_continue
|
||||||
|
|
||||||
|
inc ALIEN_OUT
|
||||||
|
|
||||||
|
alien_room_continue:
|
||||||
|
inx
|
||||||
|
cpx #MAX_ALIENS
|
||||||
|
bne alien_room_loop
|
||||||
|
|
||||||
|
|
||||||
;==============================
|
;==============================
|
||||||
@ -234,8 +286,9 @@ ootw_room_already_set:
|
|||||||
bit SET_GR
|
bit SET_GR
|
||||||
bit FULLGR
|
bit FULLGR
|
||||||
|
|
||||||
;===========================
|
;============================================
|
||||||
; Setup pages (is this necessary?)
|
; Setup pages (is this necessary?)
|
||||||
|
; FIXME: use code from c3 which clears better
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta DRAW_PAGE
|
sta DRAW_PAGE
|
||||||
@ -538,6 +591,14 @@ regular_room:
|
|||||||
|
|
||||||
jsr draw_physicist
|
jsr draw_physicist
|
||||||
|
|
||||||
|
;===============
|
||||||
|
; draw alien
|
||||||
|
;===============
|
||||||
|
|
||||||
|
lda ALIEN_OUT
|
||||||
|
beq no_draw_alien
|
||||||
|
jsr draw_alien
|
||||||
|
no_draw_alien:
|
||||||
|
|
||||||
;================
|
;================
|
||||||
; fire laser
|
; fire laser
|
||||||
|
@ -118,6 +118,8 @@ LZ4_DONE = $96
|
|||||||
; 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
|
||||||
|
|
||||||
|
ALIEN_OUT = $DA ; 2+
|
||||||
|
|
||||||
LASER_OUT = $DB ; 2+
|
LASER_OUT = $DB ; 2+
|
||||||
|
|
||||||
GUN_CHARGE = $DC ; 2+
|
GUN_CHARGE = $DC ; 2+
|
||||||
|
Loading…
Reference in New Issue
Block a user