mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-06-26 00:29:29 +00:00
duke: can shoot enemies now
This commit is contained in:
parent
c33743ee43
commit
9b898272f2
11
duke/duke.s
11
duke/duke.s
|
@ -40,12 +40,14 @@ duke_start:
|
||||||
sta LEVEL_OVER
|
sta LEVEL_OVER
|
||||||
sta LASER_OUT
|
sta LASER_OUT
|
||||||
sta DUKE_XL
|
sta DUKE_XL
|
||||||
|
sta SCORE0
|
||||||
sta SCORE1
|
sta SCORE1
|
||||||
sta SCORE2
|
sta SCORE2
|
||||||
sta DUKE_FALLING
|
sta DUKE_FALLING
|
||||||
sta DUKE_SHOOTING
|
sta DUKE_SHOOTING
|
||||||
sta KICK_UP_DUST
|
sta KICK_UP_DUST
|
||||||
sta DOOR_ACTIVATED
|
sta DOOR_ACTIVATED
|
||||||
|
sta INVENTORY
|
||||||
|
|
||||||
lda #<enemy_data
|
lda #<enemy_data
|
||||||
sta ENEMY_DATAL
|
sta ENEMY_DATAL
|
||||||
|
@ -53,11 +55,12 @@ duke_start:
|
||||||
sta ENEMY_DATAH
|
sta ENEMY_DATAH
|
||||||
|
|
||||||
; FIXME: temporary
|
; FIXME: temporary
|
||||||
lda #INV_RED_KEY
|
; lda INVENTORY
|
||||||
sta INVENTORY
|
; ora #INV_RED_KEY
|
||||||
|
; sta INVENTORY
|
||||||
|
|
||||||
lda #$10
|
; lda #$10
|
||||||
sta SCORE0
|
; sta SCORE0
|
||||||
|
|
||||||
lda #1
|
lda #1
|
||||||
sta FIREPOWER
|
sta FIREPOWER
|
||||||
|
|
100
duke/enemies.s
100
duke/enemies.s
|
@ -1,5 +1,66 @@
|
||||||
NUM_ENEMIES = 4
|
NUM_ENEMIES = 4
|
||||||
|
|
||||||
|
;=======================
|
||||||
|
; laser enemies
|
||||||
|
;=======================
|
||||||
|
; see if laser hits any enemies
|
||||||
|
laser_enemies:
|
||||||
|
|
||||||
|
ldy #0
|
||||||
|
laser_enemies_loop:
|
||||||
|
|
||||||
|
; see if out
|
||||||
|
|
||||||
|
lda enemy_data+ENEMY_DATA_OUT,Y
|
||||||
|
beq done_laser_enemy
|
||||||
|
|
||||||
|
; get local tilemap co-ord
|
||||||
|
sec
|
||||||
|
lda enemy_data+ENEMY_DATA_TILEX,Y
|
||||||
|
sbc TILEMAP_X
|
||||||
|
|
||||||
|
sta TILE_TEMP
|
||||||
|
|
||||||
|
sec
|
||||||
|
lda enemy_data+ENEMY_DATA_TILEY,Y
|
||||||
|
sbc TILEMAP_Y
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
clc
|
||||||
|
adc TILE_TEMP
|
||||||
|
|
||||||
|
cmp LASER_TILE
|
||||||
|
bne done_laser_enemy
|
||||||
|
|
||||||
|
; hit something
|
||||||
|
hit_something:
|
||||||
|
lda #0
|
||||||
|
sta LASER_OUT
|
||||||
|
sta FRAMEL
|
||||||
|
; sta enemy_data+ENEMY_DATA_OUT,Y
|
||||||
|
lda #1
|
||||||
|
sta enemy_data+ENEMY_DATA_EXPLODING,Y
|
||||||
|
|
||||||
|
jsr enemy_noise
|
||||||
|
|
||||||
|
jsr inc_score_by_10
|
||||||
|
|
||||||
|
jmp exit_laser_enemy
|
||||||
|
|
||||||
|
done_laser_enemy:
|
||||||
|
|
||||||
|
tya
|
||||||
|
clc
|
||||||
|
adc #8
|
||||||
|
tay
|
||||||
|
cpy #(NUM_ENEMIES*8)
|
||||||
|
bne laser_enemies_loop
|
||||||
|
exit_laser_enemy:
|
||||||
|
rts
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
;=======================
|
;=======================
|
||||||
; move enemy
|
; move enemy
|
||||||
|
@ -100,9 +161,36 @@ draw_enemies_loop:
|
||||||
sta YPOS
|
sta YPOS
|
||||||
|
|
||||||
; see if exploding
|
; see if exploding
|
||||||
|
lda enemy_data+ENEMY_DATA_EXPLODING,Y
|
||||||
|
beq draw_proper_enemy
|
||||||
|
draw_exploding_enemy:
|
||||||
|
asl
|
||||||
|
tax
|
||||||
|
lda enemy_explosion_sprites,X
|
||||||
|
sta INL
|
||||||
|
lda enemy_explosion_sprites+1,X
|
||||||
|
sta INH
|
||||||
|
|
||||||
|
lda FRAMEL
|
||||||
|
and #$3
|
||||||
|
bne done_exploding
|
||||||
|
|
||||||
|
; move to next frame
|
||||||
|
lda enemy_data+ENEMY_DATA_EXPLODING,Y
|
||||||
|
clc
|
||||||
|
adc #1
|
||||||
|
sta enemy_data+ENEMY_DATA_EXPLODING,Y
|
||||||
|
|
||||||
|
cmp #4
|
||||||
|
bne done_exploding
|
||||||
|
lda #0
|
||||||
|
sta enemy_data+ENEMY_DATA_OUT,Y
|
||||||
|
|
||||||
|
done_exploding:
|
||||||
|
jmp draw_enemy
|
||||||
|
|
||||||
; otherwise draw proper sprite
|
; otherwise draw proper sprite
|
||||||
|
draw_proper_enemy:
|
||||||
lda enemy_data+ENEMY_DATA_TYPE,Y
|
lda enemy_data+ENEMY_DATA_TYPE,Y
|
||||||
tax
|
tax
|
||||||
lda enemy_sprites,X
|
lda enemy_sprites,X
|
||||||
|
@ -110,6 +198,7 @@ draw_enemies_loop:
|
||||||
lda enemy_sprites+1,X
|
lda enemy_sprites+1,X
|
||||||
sta INH
|
sta INH
|
||||||
|
|
||||||
|
draw_enemy:
|
||||||
tya
|
tya
|
||||||
pha
|
pha
|
||||||
|
|
||||||
|
@ -127,8 +216,10 @@ done_draw_enemy:
|
||||||
adc #8
|
adc #8
|
||||||
tay
|
tay
|
||||||
cpy #(NUM_ENEMIES*8)
|
cpy #(NUM_ENEMIES*8)
|
||||||
bne draw_enemies_loop
|
beq exit_draw_enemy
|
||||||
|
jmp draw_enemies_loop
|
||||||
|
|
||||||
|
exit_draw_enemy:
|
||||||
rts
|
rts
|
||||||
|
|
||||||
enemy_sprites:
|
enemy_sprites:
|
||||||
|
@ -172,6 +263,11 @@ enemy_camera_sprite2:
|
||||||
.byte $76,$AA
|
.byte $76,$AA
|
||||||
.byte $A5,$f7
|
.byte $A5,$f7
|
||||||
|
|
||||||
|
enemy_explosion_sprites:
|
||||||
|
.word enemy_explosion_sprite1
|
||||||
|
.word enemy_explosion_sprite1
|
||||||
|
.word enemy_explosion_sprite2
|
||||||
|
.word enemy_explosion_sprite3
|
||||||
|
|
||||||
enemy_explosion_sprite1:
|
enemy_explosion_sprite1:
|
||||||
.byte 2,2
|
.byte 2,2
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
; draw/move laser
|
; draw/move laser
|
||||||
|
|
||||||
|
; o/~ carrying a laser, down the road that I must travel o/~
|
||||||
|
; o/~ carrying a laser, in the darkness of the night o/~
|
||||||
|
|
||||||
;====================
|
;====================
|
||||||
; move laser
|
; move laser
|
||||||
|
@ -13,15 +15,52 @@ move_laser:
|
||||||
adc LASER_DIRECTION
|
adc LASER_DIRECTION
|
||||||
sta LASER_X
|
sta LASER_X
|
||||||
|
|
||||||
cmp #31
|
laser_check_tiles:
|
||||||
bcc not_too_far_right
|
; collision detect with tiles
|
||||||
lda #0
|
|
||||||
sta LASER_OUT
|
|
||||||
beq done_move_laser
|
|
||||||
|
|
||||||
not_too_far_right:
|
; laser location is roughly
|
||||||
|
; (y/4)*16 + (x/2) - 2
|
||||||
|
lda LASER_Y
|
||||||
|
lsr
|
||||||
|
lsr
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
asl
|
||||||
|
sta LASER_TILE
|
||||||
|
lda LASER_X
|
||||||
|
lsr
|
||||||
|
clc
|
||||||
|
adc LASER_TILE
|
||||||
|
sec
|
||||||
|
sbc #2
|
||||||
|
sta LASER_TILE
|
||||||
|
|
||||||
|
ldx LASER_TILE
|
||||||
|
lda TILEMAP,X
|
||||||
|
cmp #HARD_TILES
|
||||||
|
bcs destroy_laser
|
||||||
|
|
||||||
|
|
||||||
|
laser_check_enemies:
|
||||||
|
; collision detect with enemies
|
||||||
|
|
||||||
|
jsr laser_enemies
|
||||||
|
|
||||||
|
|
||||||
|
; detect if off screen
|
||||||
|
laser_check_right:
|
||||||
|
lda LASER_X
|
||||||
|
cmp #31
|
||||||
|
bcc laser_check_left ; not_too_far_right
|
||||||
|
bcs destroy_laser
|
||||||
|
|
||||||
|
laser_check_left:
|
||||||
cmp #6
|
cmp #6
|
||||||
bcs done_move_laser
|
bcs done_move_laser
|
||||||
|
bcc destroy_laser
|
||||||
|
|
||||||
|
destroy_laser:
|
||||||
lda #0
|
lda #0
|
||||||
sta LASER_OUT
|
sta LASER_OUT
|
||||||
|
|
||||||
|
|
|
@ -101,3 +101,25 @@ done_buzzer_noise:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
;======================
|
||||||
|
; enemy noise
|
||||||
|
enemy_noise:
|
||||||
|
|
||||||
|
lda SOUND_STATUS
|
||||||
|
bmi done_enemy_noise
|
||||||
|
|
||||||
|
lda #NOTE_A3
|
||||||
|
sta speaker_frequency
|
||||||
|
lda #20
|
||||||
|
sta speaker_duration
|
||||||
|
jsr speaker_tone
|
||||||
|
|
||||||
|
lda #NOTE_A4
|
||||||
|
sta speaker_frequency
|
||||||
|
lda #10
|
||||||
|
sta speaker_duration
|
||||||
|
jsr speaker_tone
|
||||||
|
|
||||||
|
done_enemy_noise:
|
||||||
|
rts
|
||||||
|
|
|
@ -114,6 +114,8 @@ SUPPRESS_WALK = $98
|
||||||
ENEMY_DATAL = $99
|
ENEMY_DATAL = $99
|
||||||
ENEMY_DATAH = $9A
|
ENEMY_DATAH = $9A
|
||||||
DOOR_ACTIVATED = $9B
|
DOOR_ACTIVATED = $9B
|
||||||
|
LASER_TILE = $9C
|
||||||
|
TILE_TEMP = $9D
|
||||||
|
|
||||||
; done game puzzle state
|
; done game puzzle state
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user