ootw: c4: alien now appears

note: blends in with background :(
This commit is contained in:
Vince Weaver 2019-08-12 13:34:49 -04:00
parent 24f4205ad9
commit 2659de34b2
3 changed files with 154 additions and 62 deletions

View File

@ -1,39 +1,60 @@
; draw/move the bad guy aliens
alien_state:
alien0:
MAX_ALIENS = 3
alien_out:
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
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
alien2_x: .byte 0
alien_y:
alien0_y: .byte 0
alien1_y: .byte 0
alien2_y: .byte 0
alien_state:
alien0_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
alien2_gait: .byte 0
alien_direction:
alien0_direction: .byte 0
alien1_direction: .byte 0
alien2_direction: .byte 0
alien_gun:
alien0_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
@ -43,10 +64,10 @@ move_alien:
; FIXME: loop through all alieans
ldx #0
lda alien_state+ALIEN_OUT,X
lda alien_out,X
beq done_move_alien
lda alien_state+ALIEN_STATE,X
lda alien_state,X
cmp #A_WALKING
beq move_alien_walking
@ -62,47 +83,47 @@ done_move_alien:
;======================
; yelling
move_alien_yelling:
inc alien_state+ALIEN_GAIT,X ; cycle through animation
inc alien_gait,X ; cycle through animation
rts
;======================
; 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
cmp #$8 ; only walk roughly 1/8 of time
bne alien_no_move_walk
lda alien_state+ALIEN_DIRECTION,X
lda alien_direction,X
beq a_walk_left
inc alien_state+ALIEN_X,X ; walk right
inc alien_x,X ; walk right
rts
a_walk_left:
dec alien_state+ALIEN_X,X ; walk left
dec alien_x,X ; walk left
alien_no_move_walk:
rts
;======================
; 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
cmp #$2 ; only run roughly 1/4 of time
bne alien_no_move_run
lda alien_state+ALIEN_DIRECTION,X
lda alien_direction,X
beq a_run_left
inc alien_state+ALIEN_X,X ; run right
inc alien_x,X ; run right
rts
a_run_left:
dec alien_state+ALIEN_X,X ; run left
dec alien_x,X ; run left
alien_no_move_run:
rts
@ -151,10 +172,10 @@ draw_alien:
; FIXME
ldx #0
lda alien_state+ALIEN_OUT,X
lda alien_out,X
beq no_alien
lda alien_state+ALIEN_STATE,X
lda alien_state,X
tay
lda astate_table_lo,y
sta ajump
@ -202,12 +223,12 @@ alien_crouching:
;================================
alien_walking:
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
cmp #64
bcc alien_gait_fine ; blt
lda #0
sta alien_state+ALIEN_GAIT,X
sta alien_gait,X
alien_gait_fine:
lsr
@ -216,7 +237,7 @@ alien_gait_fine:
tay
lda alien_state+ALIEN_GUN,X
lda alien_gun,X
beq alien_walk_nogun
alien_walk_gun:
@ -243,12 +264,12 @@ alien_walk_nogun:
;================================
alien_running:
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
cmp #32
bcc alien_run_gait_fine ; blt
lda #0
sta alien_state+ALIEN_GAIT,X
sta alien_gait,X
alien_run_gait_fine:
lsr
@ -270,19 +291,19 @@ alien_run_gait_fine:
alien_turning:
dec alien_state+ALIEN_GAIT,X
dec alien_gait,X
bpl alien_draw_turning
lda #0
sta alien_state+ALIEN_GAIT,X
sta alien_gait,X
; switch direction
lda alien_state+ALIEN_DIRECTION,X
lda alien_direction,X
eor #$1
sta alien_state+ALIEN_DIRECTION,X
sta alien_direction,X
lda #A_WALKING
sta alien_state+ALIEN_STATE,X
sta alien_state,X
alien_draw_turning:
lda #<alien_turning_sprite
@ -300,7 +321,7 @@ alien_draw_turning:
;================================
alien_yelling:
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
; 00
; 01
@ -310,7 +331,7 @@ alien_yelling:
and #$40
bne alien_yelling_no_waving
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
alien_yelling_no_waving:
and #$10
@ -335,7 +356,7 @@ alien_yelling_no_waving:
;================================
alien_shooting_up:
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
and #$30
; 000 000
@ -358,7 +379,7 @@ alien_shooting_up:
cpy #0
lda alien_state+ALIEN_GAIT,X
lda alien_gait,X
; and #$ff
bne finally_draw_alien
@ -379,13 +400,13 @@ alien_shooting_up:
finally_draw_alien:
lda alien_state+ALIEN_X,X
lda alien_x,X
sta XPOS
lda alien_state+ALIEN_Y,X
lda alien_y,X
sta YPOS
lda alien_state+ALIEN_DIRECTION,X
lda alien_direction,X
bne alien_facing_right
alien_facing_left:
@ -395,5 +416,13 @@ alien_facing_right:
jmp put_sprite_flipped_crop
;==================
; clear aliens
;==================
clear_aliens:
lda #0
sta alien0_out
sta alien1_out
sta alien2_out
rts

View File

@ -1,6 +1,10 @@
; Ootw Checkpoint4 -- Running around the City
;=======================
;=======================
; ootw_city_init
;=======================
;=======================
; call once before entering city for first time
ootw_city_init:
lda #0
@ -8,6 +12,34 @@ ootw_city_init:
sta BG_SCROLL
sta DIRECTION ; left
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
sta HAVE_GUN
@ -32,15 +64,35 @@ ootw_city_init:
rts
;===========================
;===========================
; enter new room in jail
;===========================
;===========================
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 FULLGR
;===========================
;============================================
; Setup pages (is this necessary?)
; FIXME: use code from c3 which clears better
lda #0
sta DRAW_PAGE
@ -538,6 +591,14 @@ regular_room:
jsr draw_physicist
;===============
; draw alien
;===============
lda ALIEN_OUT
beq no_draw_alien
jsr draw_alien
no_draw_alien:
;================
; fire laser

View File

@ -118,6 +118,8 @@ LZ4_DONE = $96
; More zero-page addresses
; we try not to conflict with anything DOS, MONITOR or BASIC related
ALIEN_OUT = $DA ; 2+
LASER_OUT = $DB ; 2+
GUN_CHARGE = $DC ; 2+