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 ; 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

View File

@ -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

View File

@ -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+