mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-26 11:30:12 +00:00
anothermist: can blast the book
This commit is contained in:
parent
92d563a063
commit
e2e30040df
@ -1,25 +1,25 @@
|
||||
Title screen
|
||||
|
||||
play intro music???
|
||||
intro ending, with scrolling text
|
||||
sound effects for splash?
|
||||
|
||||
zap
|
||||
appear underwater, but different background
|
||||
climb out by clock
|
||||
sea creature gets you
|
||||
|
||||
solve puzzle
|
||||
solve puzzle (spaceship puzzle)
|
||||
|
||||
zap linking book
|
||||
|
||||
atrus zaps out of linking book, picks you up and flies off
|
||||
* atrus zaps out of linking book, picks you up and flies off
|
||||
* the end
|
||||
* has not yet been written
|
||||
|
||||
|
||||
the end
|
||||
|
||||
has not yet been written
|
||||
|
||||
play intro music
|
||||
|
||||
sound effects for splash?
|
||||
|
||||
0123456789012345678901234567890123456789
|
||||
______
|
||||
|
557
another_myst/alien.s
Normal file
557
another_myst/alien.s
Normal file
@ -0,0 +1,557 @@
|
||||
; draw/move the bad guy aliens
|
||||
|
||||
MAX_ALIENS = 3
|
||||
|
||||
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
|
||||
A_SHOOTING = 8
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;=======================================
|
||||
; Move alien based on current state
|
||||
;
|
||||
|
||||
move_alien:
|
||||
|
||||
ldx #0
|
||||
|
||||
move_alien_loop:
|
||||
lda alien_room,X
|
||||
cmp WHICH_ROOM
|
||||
bne done_move_alien
|
||||
|
||||
lda alien_state,X
|
||||
|
||||
cmp #A_WALKING
|
||||
beq move_alien_walking
|
||||
cmp #A_RUNNING
|
||||
beq move_alien_running
|
||||
cmp #A_YELLING
|
||||
beq move_alien_yelling
|
||||
cmp #A_SHOOTING_UP
|
||||
beq move_alien_yelling
|
||||
cmp #A_STANDING
|
||||
beq move_alien_standing
|
||||
cmp #A_SHOOTING
|
||||
beq move_alien_shooting
|
||||
|
||||
done_move_alien:
|
||||
|
||||
inx
|
||||
cpx #MAX_ALIENS
|
||||
bne move_alien_loop
|
||||
|
||||
rts
|
||||
|
||||
;======================
|
||||
; yelling
|
||||
move_alien_yelling:
|
||||
inc alien_gait,X ; cycle through animation
|
||||
jmp done_move_alien
|
||||
|
||||
;======================
|
||||
; walking
|
||||
|
||||
move_alien_walking:
|
||||
inc alien_gait,X ; cycle through animation
|
||||
|
||||
lda alien_gait,X
|
||||
and #$f
|
||||
cmp #$8 ; only walk roughly 1/8 of time
|
||||
bne alien_no_move_walk
|
||||
|
||||
lda alien_direction,X
|
||||
beq a_walk_left
|
||||
|
||||
inc alien_x,X ; walk right
|
||||
jmp done_move_alien
|
||||
a_walk_left:
|
||||
dec alien_x,X ; walk left
|
||||
alien_no_move_walk:
|
||||
jmp done_move_alien
|
||||
|
||||
;======================
|
||||
; running
|
||||
move_alien_running:
|
||||
inc alien_gait,X ; cycle through animation
|
||||
|
||||
lda alien_gait,X
|
||||
and #$3
|
||||
cmp #$2 ; only run roughly 1/4 of time
|
||||
bne alien_no_move_run
|
||||
|
||||
lda alien_direction,X
|
||||
beq a_run_left
|
||||
|
||||
inc alien_x,X ; run right
|
||||
jmp done_move_alien
|
||||
a_run_left:
|
||||
dec alien_x,X ; run left
|
||||
alien_no_move_run:
|
||||
jmp done_move_alien
|
||||
|
||||
;======================
|
||||
; standing
|
||||
|
||||
move_alien_standing:
|
||||
|
||||
; turn to face physicist if on same level
|
||||
lda PHYSICIST_Y
|
||||
cmp alien_y,X
|
||||
bne done_move_alien_standing
|
||||
|
||||
;=================
|
||||
; delay a bit so it doesn't happen instantaneously
|
||||
|
||||
lda FRAMEL
|
||||
and #$3f
|
||||
bne done_move_alien_standing
|
||||
|
||||
lda PHYSICIST_X
|
||||
cmp alien_x,X
|
||||
bcs alien_face_right
|
||||
|
||||
alien_face_left:
|
||||
lda #0
|
||||
beq alien_done_facing
|
||||
alien_face_right:
|
||||
lda #1
|
||||
|
||||
alien_done_facing:
|
||||
sta alien_direction,X
|
||||
|
||||
; change to shooting
|
||||
|
||||
lda #A_SHOOTING
|
||||
sta alien_state,X
|
||||
|
||||
|
||||
done_move_alien_standing:
|
||||
|
||||
|
||||
jmp done_move_alien
|
||||
|
||||
;======================
|
||||
; shooting
|
||||
|
||||
move_alien_shooting:
|
||||
|
||||
; only fire occasionally
|
||||
lda FRAMEL
|
||||
and #$7f
|
||||
bne done_alien_shooting_now
|
||||
|
||||
jsr fire_alien_laser
|
||||
|
||||
done_alien_shooting_now:
|
||||
jmp done_move_alien
|
||||
|
||||
|
||||
astate_table_lo:
|
||||
.byte <alien_standing ; 00
|
||||
.byte <alien_walking ; 01
|
||||
.byte <alien_running ; 02
|
||||
.byte <alien_crouching ; 03
|
||||
.byte <alien_turning ; 04
|
||||
.byte <alien_yelling ; 05
|
||||
.byte <alien_shooting_up; 06
|
||||
.byte <alien_disintegrating; 07
|
||||
.byte <alien_shooting ; 08
|
||||
|
||||
astate_table_hi:
|
||||
.byte >alien_standing ; 00
|
||||
.byte >alien_walking ; 01
|
||||
.byte >alien_running ; 02
|
||||
.byte >alien_crouching ; 03
|
||||
.byte >alien_turning ; 04
|
||||
.byte >alien_yelling ; 05
|
||||
.byte >alien_shooting_up; 06
|
||||
.byte >alien_disintegrating; 07
|
||||
.byte >alien_shooting ; 08
|
||||
|
||||
; Urgh, make sure this doesn't end up at $FF or you hit the
|
||||
; NMOS 6502 bug
|
||||
|
||||
.align 2
|
||||
|
||||
ajump:
|
||||
.word $0000
|
||||
|
||||
.align 1
|
||||
|
||||
;======================================
|
||||
;======================================
|
||||
; draw alien
|
||||
;======================================
|
||||
;======================================
|
||||
|
||||
draw_alien:
|
||||
|
||||
ldx #0
|
||||
draw_alien_loop:
|
||||
lda alien_room,X
|
||||
cmp WHICH_ROOM
|
||||
bne no_alien
|
||||
|
||||
txa
|
||||
pha
|
||||
|
||||
lda alien_state,X
|
||||
tay
|
||||
lda astate_table_lo,y
|
||||
sta ajump
|
||||
lda astate_table_hi,y
|
||||
sta ajump+1
|
||||
jmp (ajump)
|
||||
done_draw_alien_loop:
|
||||
pla
|
||||
tax
|
||||
|
||||
no_alien:
|
||||
inx
|
||||
cpx #MAX_ALIENS
|
||||
bne draw_alien_loop
|
||||
|
||||
rts
|
||||
|
||||
;==================================
|
||||
; STANDING
|
||||
;==================================
|
||||
|
||||
alien_standing:
|
||||
|
||||
lda #<alien_stand
|
||||
sta INL
|
||||
|
||||
lda #>alien_stand
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
;==================================
|
||||
; SHOOTING
|
||||
;==================================
|
||||
|
||||
alien_shooting:
|
||||
|
||||
lda #<alien_shoot_sprite
|
||||
sta INL
|
||||
|
||||
lda #>alien_shoot_sprite
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
|
||||
;===================================
|
||||
; CROUCHING
|
||||
;===================================
|
||||
|
||||
alien_crouching:
|
||||
|
||||
; FIXME: we have an animation?
|
||||
|
||||
lda #<alien_crouch2
|
||||
sta INL
|
||||
|
||||
lda #>alien_crouch2
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
|
||||
;===============================
|
||||
; Walking
|
||||
;================================
|
||||
|
||||
alien_walking:
|
||||
lda alien_gait,X
|
||||
cmp #64
|
||||
bcc alien_gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta alien_gait,X
|
||||
|
||||
alien_gait_fine:
|
||||
lsr
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tay
|
||||
|
||||
lda alien_gun,X
|
||||
beq alien_walk_nogun
|
||||
|
||||
alien_walk_gun:
|
||||
|
||||
lda alien_walk_gun_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_walk_gun_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
alien_walk_nogun:
|
||||
lda alien_walk_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_walk_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
;===============================
|
||||
; Running
|
||||
;================================
|
||||
|
||||
alien_running:
|
||||
lda alien_gait,X
|
||||
cmp #32
|
||||
bcc alien_run_gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta alien_gait,X
|
||||
|
||||
alien_run_gait_fine:
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tay
|
||||
|
||||
lda alien_run_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_run_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
;===============================
|
||||
; Turning
|
||||
;================================
|
||||
|
||||
alien_turning:
|
||||
|
||||
dec alien_gait,X
|
||||
bpl alien_draw_turning
|
||||
|
||||
lda #0
|
||||
sta alien_gait,X
|
||||
|
||||
; switch direction
|
||||
lda alien_direction,X
|
||||
eor #$1
|
||||
sta alien_direction,X
|
||||
|
||||
lda #A_WALKING
|
||||
sta alien_state,X
|
||||
|
||||
alien_draw_turning:
|
||||
lda #<alien_turning_sprite
|
||||
sta INL
|
||||
|
||||
lda #>alien_turning_sprite
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
|
||||
|
||||
;===============================
|
||||
; Yelling
|
||||
;================================
|
||||
|
||||
alien_yelling:
|
||||
lda alien_gait,X
|
||||
|
||||
; 00
|
||||
; 01
|
||||
; 10
|
||||
; 11
|
||||
|
||||
and #$40
|
||||
bne alien_yelling_no_waving
|
||||
|
||||
lda alien_gait,X
|
||||
|
||||
alien_yelling_no_waving:
|
||||
and #$10
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
and #2
|
||||
|
||||
tay
|
||||
|
||||
lda alien_yell_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_yell_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
|
||||
;===============================
|
||||
; Disintegrating
|
||||
;================================
|
||||
|
||||
alien_disintegrating:
|
||||
lda alien_gait,X
|
||||
|
||||
cmp #13
|
||||
bne alien_keep_disintegrating
|
||||
|
||||
lda #$ff
|
||||
sta alien_room,X
|
||||
|
||||
dec ALIEN_OUT
|
||||
|
||||
jmp done_draw_alien_loop
|
||||
|
||||
alien_keep_disintegrating:
|
||||
|
||||
asl
|
||||
tay
|
||||
|
||||
lda alien_disintegrating_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_disintegrating_progression+1,Y
|
||||
sta INH
|
||||
|
||||
lda FRAMEL
|
||||
and #$7
|
||||
bne slow_disintegration
|
||||
|
||||
inc alien_gait,X
|
||||
slow_disintegration:
|
||||
|
||||
jmp finally_draw_alien
|
||||
|
||||
|
||||
;===============================
|
||||
; Shooting Upward
|
||||
;================================
|
||||
|
||||
alien_shooting_up:
|
||||
lda alien_gait,X
|
||||
and #$30
|
||||
|
||||
; 000 000
|
||||
; 010 000
|
||||
; 100 000
|
||||
; 110 000
|
||||
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
|
||||
and #6
|
||||
tay
|
||||
|
||||
lda alien_shoot_up_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_shoot_up_progression+1,Y
|
||||
sta INH
|
||||
|
||||
cpy #0
|
||||
|
||||
lda alien_gait,X
|
||||
; and #$ff
|
||||
bne finally_draw_alien
|
||||
|
||||
lda #32
|
||||
sta SHOOTING_BOTTOM
|
||||
lda #28
|
||||
sta SHOOTING_TOP
|
||||
|
||||
inc LITTLEGUY_OUT
|
||||
|
||||
; bne finally_draw_alien ; bra
|
||||
|
||||
|
||||
|
||||
;=============================
|
||||
; Actually Draw Alien
|
||||
;=============================
|
||||
|
||||
|
||||
finally_draw_alien:
|
||||
lda alien_x,X
|
||||
sta XPOS
|
||||
|
||||
lda alien_y,X
|
||||
sta YPOS
|
||||
|
||||
lda alien_direction,X
|
||||
bne alien_facing_right
|
||||
|
||||
alien_facing_left:
|
||||
jsr put_sprite_crop
|
||||
jmp done_draw_alien_loop
|
||||
|
||||
alien_facing_right:
|
||||
jsr put_sprite_flipped_crop
|
||||
jmp done_draw_alien_loop
|
||||
|
||||
;==================
|
||||
;==================
|
||||
; clear aliens
|
||||
;==================
|
||||
;==================
|
||||
clear_aliens:
|
||||
lda #$ff
|
||||
sta alien0_room
|
||||
sta alien1_room
|
||||
sta alien2_room
|
||||
|
||||
rts
|
||||
|
||||
|
96
another_myst/alien_laser.s
Normal file
96
another_myst/alien_laser.s
Normal file
@ -0,0 +1,96 @@
|
||||
|
||||
; Handle alien laser
|
||||
|
||||
; uses laser1 slot
|
||||
|
||||
; should handle multiple at once?
|
||||
|
||||
;laser1_out: .byte $0
|
||||
;laser1_start: .byte $0
|
||||
;laser1_end: .byte $0
|
||||
;laser1_y: .byte $0
|
||||
;laser1_direction: .byte $0
|
||||
;laser1_count: .byte $0
|
||||
|
||||
;=========================
|
||||
; fire alien laser
|
||||
;=========================
|
||||
; which alien in X
|
||||
|
||||
fire_alien_laser:
|
||||
|
||||
lda laser1_out
|
||||
bne done_fire_alien_laser
|
||||
|
||||
lda alien_x,X
|
||||
sta COLLISION_X
|
||||
lda alien_y,X
|
||||
sta COLLISION_Y
|
||||
|
||||
; activate laser slot
|
||||
|
||||
inc laser1_out
|
||||
|
||||
; reset count
|
||||
|
||||
lda #0
|
||||
sta laser1_count
|
||||
|
||||
; set y
|
||||
|
||||
; assume for now no crouching
|
||||
|
||||
lda alien_y,X
|
||||
clc
|
||||
adc #4
|
||||
sta laser1_y
|
||||
|
||||
; set direction
|
||||
|
||||
lda alien_direction,X
|
||||
sta laser1_direction
|
||||
|
||||
beq alien_laser_left
|
||||
bne alien_laser_right
|
||||
|
||||
; set x
|
||||
|
||||
alien_laser_left:
|
||||
stx LASER_TEMP
|
||||
|
||||
jsr calc_gun_left_collision
|
||||
|
||||
ldx LASER_TEMP
|
||||
|
||||
lda alien_x,X
|
||||
sec
|
||||
sbc #2
|
||||
sta laser1_end
|
||||
|
||||
sec
|
||||
sbc #10
|
||||
sta laser1_start
|
||||
|
||||
jmp done_fire_alien_laser
|
||||
|
||||
alien_laser_right:
|
||||
|
||||
stx LASER_TEMP
|
||||
|
||||
jsr calc_gun_right_collision
|
||||
|
||||
ldx LASER_TEMP
|
||||
|
||||
lda alien_x,X
|
||||
clc
|
||||
adc #5
|
||||
sta laser1_start
|
||||
|
||||
clc
|
||||
adc #10
|
||||
sta laser1_end
|
||||
|
||||
done_fire_alien_laser:
|
||||
rts
|
||||
|
||||
|
@ -13,8 +13,6 @@
|
||||
|
||||
another_mist:
|
||||
|
||||
|
||||
|
||||
ending:
|
||||
|
||||
;=========================
|
||||
@ -90,9 +88,12 @@ repeat_ending:
|
||||
sta DISP_PAGE
|
||||
|
||||
;===========================
|
||||
; show some pictures
|
||||
; do the shooting part
|
||||
;============================
|
||||
|
||||
jsr ootw_cave_init
|
||||
jsr ootw_cave
|
||||
|
||||
|
||||
;===========================
|
||||
; ending sequence
|
||||
@ -860,6 +861,27 @@ long_wait:
|
||||
.include "pt3_lib_mockingboard_setup.s"
|
||||
|
||||
|
||||
.include "keyboard.s"
|
||||
.include "gr_putsprite.s"
|
||||
.include "gr_putsprite_crop.s"
|
||||
.include "laser.s"
|
||||
.include "gr_hlin.s"
|
||||
.include "blast.s"
|
||||
.include "shield.s"
|
||||
.include "collision.s"
|
||||
.include "dummy_friend.s"
|
||||
.include "alien.s"
|
||||
.include "physicist.s"
|
||||
.include "gun.s"
|
||||
.include "ootw_c5_cave.s"
|
||||
.include "door.s"
|
||||
.include "alien_laser.s"
|
||||
|
||||
; sprites
|
||||
|
||||
.include "sprites/physicist.inc"
|
||||
.include "sprites/alien.inc"
|
||||
|
||||
|
||||
; backgrounds
|
||||
|
||||
|
360
another_myst/blast.s
Normal file
360
another_myst/blast.s
Normal file
@ -0,0 +1,360 @@
|
||||
; Handle blast
|
||||
|
||||
blast0_out: .byte $0
|
||||
blast0_start: .byte $0
|
||||
blast0_end: .byte $0
|
||||
blast0_y: .byte $0
|
||||
blast0_direction: .byte $0
|
||||
blast0_count: .byte $0
|
||||
|
||||
;=========================
|
||||
; fire blast
|
||||
;=========================
|
||||
|
||||
fire_blast:
|
||||
|
||||
lda blast0_out
|
||||
bne done_fire_blast
|
||||
|
||||
lda PHYSICIST_X
|
||||
|
||||
ldx DIRECTION ; 0=left, 1=right
|
||||
beq blast_facing_left
|
||||
|
||||
clc
|
||||
adc #5
|
||||
jmp blast_done_adjust
|
||||
|
||||
|
||||
blast_facing_left:
|
||||
sec
|
||||
sbc #2
|
||||
|
||||
blast_done_adjust:
|
||||
|
||||
sta COLLISION_X
|
||||
lda PHYSICIST_Y
|
||||
sta COLLISION_Y
|
||||
|
||||
; activate blast slot
|
||||
|
||||
inc blast0_out
|
||||
|
||||
; reduce gun charge
|
||||
; FIXME: don't shoot if too low
|
||||
lda GUN_CHARGE
|
||||
sec
|
||||
sbc #10
|
||||
sta GUN_CHARGE
|
||||
|
||||
; reset blast count
|
||||
|
||||
lda #0
|
||||
sta blast0_count
|
||||
|
||||
; set y
|
||||
|
||||
lda PHYSICIST_Y
|
||||
clc
|
||||
adc #4
|
||||
|
||||
ldx PHYSICIST_STATE
|
||||
cpx #P_CROUCH_SHOOTING
|
||||
bne blast_ypos_done
|
||||
|
||||
blast_crouch:
|
||||
clc
|
||||
adc #4
|
||||
blast_ypos_done:
|
||||
|
||||
sta blast0_y
|
||||
|
||||
; set direction
|
||||
|
||||
lda DIRECTION
|
||||
sta blast0_direction
|
||||
|
||||
beq blast_left
|
||||
bne blast_right
|
||||
|
||||
; set x
|
||||
|
||||
blast_left:
|
||||
jsr calc_gun_left_collision
|
||||
|
||||
ldx PHYSICIST_X
|
||||
dex
|
||||
stx blast0_end
|
||||
|
||||
txa
|
||||
sec
|
||||
sbc #10
|
||||
sta blast0_start
|
||||
|
||||
jmp done_fire_blast
|
||||
|
||||
blast_right:
|
||||
jsr calc_gun_right_collision
|
||||
|
||||
lda PHYSICIST_X
|
||||
clc
|
||||
adc #5
|
||||
sta blast0_start
|
||||
|
||||
clc
|
||||
adc #10
|
||||
sta blast0_end
|
||||
|
||||
done_fire_blast:
|
||||
rts
|
||||
|
||||
|
||||
;====================
|
||||
; draw blast
|
||||
;====================
|
||||
|
||||
draw_blast:
|
||||
|
||||
lda blast0_out
|
||||
beq done_draw_blast
|
||||
|
||||
lda #$fe
|
||||
sta hlin_color_smc+1
|
||||
|
||||
lda #$00
|
||||
sta hlin_mask_smc+1
|
||||
|
||||
ldy blast0_y
|
||||
|
||||
sec
|
||||
lda blast0_end
|
||||
sbc blast0_start
|
||||
tax
|
||||
|
||||
lda blast0_start
|
||||
|
||||
jsr hlin
|
||||
|
||||
ldy blast0_y
|
||||
sty YPOS
|
||||
|
||||
lda blast0_direction
|
||||
beq blast_going_left
|
||||
ldy blast0_end
|
||||
jmp blast_going_done
|
||||
blast_going_left:
|
||||
ldy blast0_start
|
||||
blast_going_done:
|
||||
sty XPOS
|
||||
|
||||
lda #<gun_charge_sprite8
|
||||
sta INL
|
||||
lda #>gun_charge_sprite8
|
||||
sta INH
|
||||
|
||||
jsr put_sprite_crop
|
||||
|
||||
done_draw_blast:
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;===================
|
||||
; move blast
|
||||
;===================
|
||||
move_blast:
|
||||
lda blast0_out
|
||||
beq done_move_blast
|
||||
|
||||
; slow down blast
|
||||
lda blast0_count
|
||||
and #$3
|
||||
bne no_move_blast
|
||||
|
||||
lda blast0_direction
|
||||
bne move_blast_right
|
||||
|
||||
move_blast_left:
|
||||
|
||||
lda blast0_count
|
||||
cmp #4
|
||||
bcc still_starting_blast_left
|
||||
cmp #8
|
||||
bcc still_shooting_blast_left
|
||||
|
||||
continue_shooting_blast_left:
|
||||
still_shooting_blast_left:
|
||||
|
||||
lda blast0_end
|
||||
sec
|
||||
sbc #10
|
||||
sta blast0_end
|
||||
|
||||
still_starting_blast_left:
|
||||
|
||||
lda blast0_start
|
||||
sec
|
||||
sbc #10
|
||||
sta blast0_start
|
||||
|
||||
blast_edge_detect_left:
|
||||
|
||||
lda blast0_end
|
||||
cmp LEFT_SHOOT_LIMIT
|
||||
bmi disable_blast_left
|
||||
|
||||
lda blast0_start
|
||||
cmp LEFT_SHOOT_LIMIT
|
||||
bpl no_move_blast
|
||||
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
sta blast0_start
|
||||
|
||||
jmp no_move_blast
|
||||
|
||||
|
||||
move_blast_right:
|
||||
|
||||
lda blast0_count
|
||||
cmp #4
|
||||
bcc still_starting_blast_right
|
||||
cmp #8
|
||||
bcc still_shooting_blast_right
|
||||
|
||||
continue_shooting_blast_right:
|
||||
lda blast0_start
|
||||
clc
|
||||
adc #10
|
||||
sta blast0_start
|
||||
|
||||
still_shooting_blast_right:
|
||||
lda blast0_end
|
||||
clc
|
||||
adc #10
|
||||
sta blast0_end
|
||||
|
||||
still_starting_blast_right:
|
||||
|
||||
blast_edge_detect_right:
|
||||
|
||||
; detect if totally off screen
|
||||
lda blast0_start
|
||||
cmp RIGHT_SHOOT_LIMIT
|
||||
bcs disable_blast_right
|
||||
|
||||
lda blast0_end
|
||||
cmp RIGHT_SHOOT_LIMIT
|
||||
bcc no_move_blast
|
||||
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
sta blast0_end
|
||||
|
||||
no_move_blast:
|
||||
inc blast0_count
|
||||
|
||||
done_move_blast:
|
||||
|
||||
rts
|
||||
|
||||
;=====================
|
||||
; hit something, left
|
||||
;=====================
|
||||
disable_blast_left:
|
||||
lda LEFT_SHOOT_TARGET
|
||||
jmp blast_something_common
|
||||
|
||||
;==================
|
||||
; hit something, right
|
||||
;==================
|
||||
disable_blast_right:
|
||||
|
||||
lda RIGHT_SHOOT_TARGET
|
||||
|
||||
|
||||
;=========================
|
||||
; blash something, common
|
||||
;=========================
|
||||
blast_something_common:
|
||||
|
||||
ldx #0
|
||||
stx blast0_out
|
||||
tax
|
||||
and #$f0
|
||||
|
||||
cmp #TARGET_DOOR
|
||||
beq blast_door
|
||||
|
||||
cmp #TARGET_ALIEN
|
||||
beq blast_alien
|
||||
|
||||
cmp #TARGET_FRIEND
|
||||
beq blast_friend
|
||||
|
||||
cmp #TARGET_SHIELD
|
||||
beq blast_shield
|
||||
|
||||
jmp done_blasting_common
|
||||
|
||||
|
||||
blast_alien:
|
||||
txa
|
||||
and #$f
|
||||
tax
|
||||
|
||||
lda #A_DISINTEGRATING
|
||||
sta alien_state,X
|
||||
|
||||
lda #0
|
||||
sta alien_gait,X
|
||||
|
||||
jmp done_blasting_common
|
||||
|
||||
blast_friend:
|
||||
|
||||
lda #F_DISINTEGRATING
|
||||
sta friend_state
|
||||
|
||||
lda #FAI_DISINTEGRATING
|
||||
sta friend_ai_state
|
||||
|
||||
lda #0
|
||||
sta friend_gait
|
||||
|
||||
jmp done_blasting_common
|
||||
|
||||
blast_shield:
|
||||
|
||||
; FIXME: need animation for this
|
||||
|
||||
txa
|
||||
and #$f
|
||||
tax
|
||||
|
||||
lda #0
|
||||
sta shield_out,X
|
||||
|
||||
dec SHIELD_OUT
|
||||
|
||||
jmp done_blasting_common
|
||||
|
||||
blast_door:
|
||||
|
||||
inc BLASTED_WALL
|
||||
|
||||
; FIXME: change direction based on blast
|
||||
txa
|
||||
and #$f
|
||||
tay
|
||||
|
||||
lda #DOOR_STATUS_EXPLODING1
|
||||
sta (DOOR_STATUS),Y
|
||||
|
||||
jsr recalc_walk_collision
|
||||
|
||||
|
||||
done_blasting_common:
|
||||
|
||||
rts
|
||||
|
||||
|
606
another_myst/collision.s
Normal file
606
another_myst/collision.s
Normal file
@ -0,0 +1,606 @@
|
||||
TARGET_NONE = $00
|
||||
TARGET_DOOR = $10
|
||||
TARGET_SHIELD = $20
|
||||
TARGET_FRIEND = $30
|
||||
TARGET_ALIEN = $40
|
||||
TARGET_PHYSICIST= $80
|
||||
|
||||
;=============================
|
||||
;=============================
|
||||
; recalc_walk_collision
|
||||
;=============================
|
||||
;=============================
|
||||
; far left limit is LEVEL_LEFT limit
|
||||
; far right limit is LEVEL_RIGHT limit
|
||||
; any LOCKED doors in the way also stop things
|
||||
; FIXME: only door collision if on same level
|
||||
recalc_walk_collision:
|
||||
|
||||
; note the limits have $80 added to them :(
|
||||
|
||||
lda RIGHT_LIMIT
|
||||
sta RIGHT_WALK_LIMIT
|
||||
|
||||
lda LEFT_LIMIT
|
||||
sta LEFT_WALK_LIMIT
|
||||
|
||||
lda NUM_DOORS
|
||||
beq done_recalc_walk_right_collision
|
||||
|
||||
recalc_walk_left:
|
||||
|
||||
ldy NUM_DOORS
|
||||
dey
|
||||
recalc_walk_left_loop:
|
||||
|
||||
lda PHYSICIST_X
|
||||
cmp (DOOR_X),Y
|
||||
bcc recalc_walk_left_continue ; blt
|
||||
|
||||
; only if on same level
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp PHYSICIST_Y
|
||||
bne recalc_walk_left_continue
|
||||
|
||||
; only if closer than previous found
|
||||
lda (DOOR_X),Y
|
||||
ora #$80
|
||||
cmp LEFT_WALK_LIMIT
|
||||
|
||||
bcc recalc_walk_left_continue ; blt
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
cmp #DOOR_STATUS_LOCKED
|
||||
bne recalc_walk_left_continue
|
||||
|
||||
; early exit
|
||||
lda (DOOR_X),Y
|
||||
ora #$80
|
||||
sta LEFT_WALK_LIMIT
|
||||
; jmp done_recalc_walk_left_collision
|
||||
|
||||
recalc_walk_left_continue:
|
||||
dey
|
||||
bpl recalc_walk_left_loop
|
||||
|
||||
done_recalc_walk_left_collision:
|
||||
|
||||
|
||||
ldy #0
|
||||
recalc_walk_right_loop:
|
||||
|
||||
; only if on same level
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp PHYSICIST_Y
|
||||
bne recalc_walk_right_continue
|
||||
|
||||
lda PHYSICIST_X
|
||||
cmp (DOOR_X),Y
|
||||
bcs recalc_walk_right_continue ; bge
|
||||
|
||||
; only if closer than previous found
|
||||
lda (DOOR_X),Y
|
||||
ora #$80
|
||||
cmp RIGHT_WALK_LIMIT
|
||||
|
||||
bcs recalc_walk_right_continue ; bge
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
cmp #DOOR_STATUS_LOCKED
|
||||
bne recalc_walk_right_continue
|
||||
|
||||
; early exit
|
||||
lda (DOOR_X),Y
|
||||
sec
|
||||
sbc #4
|
||||
ora #$80
|
||||
sta RIGHT_WALK_LIMIT
|
||||
jmp done_recalc_walk_right_collision
|
||||
|
||||
recalc_walk_right_continue:
|
||||
iny
|
||||
cpy NUM_DOORS
|
||||
bne recalc_walk_right_loop
|
||||
|
||||
done_recalc_walk_right_collision:
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;=============================
|
||||
;=============================
|
||||
; calc_gun_right_collision
|
||||
;=============================
|
||||
;=============================
|
||||
; far right limit is LEVEL_RIGHT
|
||||
; any LOCKED or CLOSED doors with SAME_Y to left of LEVEL_RIGHT
|
||||
; any shield stops things
|
||||
; our friend stops things
|
||||
; any enemies stop things
|
||||
|
||||
calc_gun_right_collision:
|
||||
|
||||
lda #$00
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
;=====================================================================
|
||||
; by default set it to left limit (which is often but not always a wall)
|
||||
|
||||
lda RIGHT_LIMIT
|
||||
and #$7f
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
;===========================
|
||||
; stop if hit door
|
||||
|
||||
calc_gun_right_door:
|
||||
lda NUM_DOORS
|
||||
beq done_calc_gun_right_door_collision
|
||||
|
||||
calc_gun_right_doors:
|
||||
|
||||
|
||||
ldy #0
|
||||
calc_gun_right_door_loop:
|
||||
|
||||
; only if on same level
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp COLLISION_Y
|
||||
bne calc_gun_right_door_continue
|
||||
|
||||
lda COLLISION_X
|
||||
cmp (DOOR_X),Y
|
||||
bcs calc_gun_right_door_continue ; bge
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
cmp #DOOR_STATUS_LOCKED
|
||||
beq calc_gun_right_door_there
|
||||
cmp #DOOR_STATUS_CLOSED
|
||||
bne calc_gun_right_door_continue
|
||||
|
||||
calc_gun_right_door_there:
|
||||
; early exit
|
||||
lda (DOOR_X),Y
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
tya ; set target if hit
|
||||
ora #TARGET_DOOR
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
jmp done_calc_gun_right_door_collision
|
||||
|
||||
calc_gun_right_door_continue:
|
||||
iny
|
||||
cpy NUM_DOORS
|
||||
bne calc_gun_right_door_loop
|
||||
|
||||
done_calc_gun_right_door_collision:
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for shield
|
||||
|
||||
calc_gun_right_shield:
|
||||
|
||||
lda SHIELD_OUT
|
||||
beq done_calc_gun_right_shield_collision
|
||||
|
||||
ldx #0
|
||||
calc_gun_right_shield_loop:
|
||||
|
||||
; FIXME: check for on same level?
|
||||
|
||||
lda shield_out,X
|
||||
beq calc_gun_right_shield_continue
|
||||
|
||||
lda COLLISION_X
|
||||
cmp shield_x,X
|
||||
bcs calc_gun_right_shield_continue ; bge
|
||||
|
||||
; be sure closer than current max limit
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
cmp shield_x,X
|
||||
bcc calc_gun_right_shield_continue ; blt
|
||||
|
||||
calc_gun_right_shield_there:
|
||||
|
||||
lda shield_x,X
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
txa ; set target if hit
|
||||
ora #TARGET_SHIELD
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
; can't early exit
|
||||
|
||||
calc_gun_right_shield_continue:
|
||||
inx
|
||||
cpx #MAX_SHIELDS
|
||||
bne calc_gun_right_shield_loop
|
||||
|
||||
done_calc_gun_right_shield_collision:
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for friend
|
||||
|
||||
calc_gun_right_friend:
|
||||
|
||||
lda friend_room
|
||||
cmp WHICH_ROOM
|
||||
bne done_calc_gun_right_friend_collision
|
||||
|
||||
lda COLLISION_X
|
||||
cmp friend_x
|
||||
bcs calc_gun_right_friend_continue ; bge
|
||||
|
||||
; only if closer than previous found
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
cmp friend_x
|
||||
bcc calc_gun_right_friend_continue ; blt
|
||||
|
||||
lda friend_state
|
||||
cmp #F_DISINTEGRATING
|
||||
beq calc_gun_right_friend_continue
|
||||
|
||||
calc_gun_right_friend_there:
|
||||
; early exit
|
||||
lda friend_x
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
; set target if hit
|
||||
lda #TARGET_FRIEND
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
calc_gun_right_friend_continue:
|
||||
|
||||
done_calc_gun_right_friend_collision:
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for physicist
|
||||
|
||||
calc_gun_right_physicist:
|
||||
|
||||
lda COLLISION_X
|
||||
cmp PHYSICIST_X
|
||||
bcs calc_gun_right_physicist_continue ; bge
|
||||
|
||||
; only if closer than previous found
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
cmp PHYSICIST_X
|
||||
bcc calc_gun_right_physicist_continue ; blt
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_DISINTEGRATING
|
||||
beq calc_gun_right_physicist_continue
|
||||
|
||||
calc_gun_right_physicist_there:
|
||||
|
||||
lda PHYSICIST_X
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
; set target if hit
|
||||
lda #TARGET_PHYSICIST
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
calc_gun_right_physicist_continue:
|
||||
done_calc_gun_right_physicist_collision:
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for alien
|
||||
|
||||
calc_gun_right_alien:
|
||||
|
||||
lda ALIEN_OUT
|
||||
beq done_calc_gun_right_alien_collision
|
||||
|
||||
ldx #0
|
||||
calc_gun_right_alien_loop:
|
||||
|
||||
lda alien_room,X
|
||||
cmp WHICH_ROOM
|
||||
bne calc_gun_right_alien_continue
|
||||
|
||||
; only if on same level
|
||||
lda alien_y,X
|
||||
cmp COLLISION_Y
|
||||
bne calc_gun_right_alien_continue
|
||||
|
||||
lda COLLISION_X
|
||||
cmp alien_x,X
|
||||
bcs calc_gun_right_alien_continue ; bge
|
||||
|
||||
; only if closer than previous found
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
cmp alien_x,X
|
||||
bcc calc_gun_right_alien_continue ; blt
|
||||
|
||||
lda alien_state,X
|
||||
cmp #A_DISINTEGRATING
|
||||
beq calc_gun_right_alien_continue
|
||||
|
||||
calc_gun_right_alien_there:
|
||||
lda alien_x,X
|
||||
sta RIGHT_SHOOT_LIMIT
|
||||
|
||||
txa ; set target if hit
|
||||
ora #TARGET_ALIEN
|
||||
sta RIGHT_SHOOT_TARGET
|
||||
|
||||
; can't early exit
|
||||
|
||||
calc_gun_right_alien_continue:
|
||||
inx
|
||||
cpx #MAX_ALIENS
|
||||
bne calc_gun_right_alien_loop
|
||||
|
||||
done_calc_gun_right_alien_collision:
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;=============================
|
||||
;=============================
|
||||
; calc_gun_left_collision
|
||||
;=============================
|
||||
;=============================
|
||||
; far right limit is LEVEL_LEFT
|
||||
; any LOCKED or CLOSED doors stop things
|
||||
; any shield stops things
|
||||
; our friend stops things
|
||||
; any enemies stop things
|
||||
|
||||
calc_gun_left_collision:
|
||||
|
||||
lda #0
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
;=============================
|
||||
; by default set to left limit
|
||||
; tricky as LEFT_LIMIT does some hacks to put it up above $80
|
||||
|
||||
lda LEFT_LIMIT
|
||||
sec
|
||||
sbc #$80
|
||||
bpl left_limit_ok
|
||||
lda #0
|
||||
|
||||
left_limit_ok:
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
|
||||
;==========================
|
||||
; stop if hit door
|
||||
|
||||
calc_gun_left_door:
|
||||
lda NUM_DOORS
|
||||
beq done_calc_gun_left_door_collision
|
||||
|
||||
calc_gun_left_doors:
|
||||
|
||||
|
||||
ldy NUM_DOORS
|
||||
dey
|
||||
calc_gun_left_door_loop:
|
||||
|
||||
; only if on same level
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp COLLISION_Y
|
||||
bne calc_gun_left_door_continue
|
||||
|
||||
lda COLLISION_X
|
||||
cmp (DOOR_X),Y
|
||||
bcc calc_gun_left_door_continue ; blt
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
cmp #DOOR_STATUS_LOCKED
|
||||
beq calc_gun_left_door_there
|
||||
cmp #DOOR_STATUS_CLOSED
|
||||
bne calc_gun_left_door_continue
|
||||
|
||||
calc_gun_left_door_there:
|
||||
; early exit
|
||||
lda (DOOR_X),Y
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
|
||||
tya ; set target if hit
|
||||
ora #TARGET_DOOR
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
jmp done_calc_gun_left_door_collision
|
||||
|
||||
calc_gun_left_door_continue:
|
||||
dey
|
||||
bpl calc_gun_left_door_loop
|
||||
|
||||
done_calc_gun_left_door_collision:
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for shield
|
||||
|
||||
calc_gun_left_shield:
|
||||
|
||||
lda SHIELD_OUT
|
||||
beq done_calc_gun_left_shield_collision
|
||||
|
||||
ldx #0
|
||||
|
||||
calc_gun_left_shield_loop:
|
||||
|
||||
; if shield not out, skip
|
||||
lda shield_out,X
|
||||
beq calc_gun_left_shield_continue
|
||||
|
||||
; if current wall is closer, skip
|
||||
lda COLLISION_X
|
||||
cmp shield_x,X
|
||||
bcc calc_gun_left_shield_continue ; blt
|
||||
|
||||
; be sure closer than current max limit
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
cmp shield_x,X
|
||||
bcs calc_gun_left_shield_continue ; bge
|
||||
|
||||
calc_gun_left_shield_there:
|
||||
|
||||
lda shield_x,X
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
|
||||
txa ; set target if hit
|
||||
ora #TARGET_SHIELD
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
; can't early exit
|
||||
|
||||
calc_gun_left_shield_continue:
|
||||
inx
|
||||
cpx #MAX_SHIELDS
|
||||
bne calc_gun_left_shield_loop
|
||||
|
||||
|
||||
done_calc_gun_left_shield_collision:
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for friend
|
||||
|
||||
calc_gun_left_friend:
|
||||
|
||||
lda friend_room
|
||||
cmp WHICH_ROOM
|
||||
bne done_calc_gun_left_friend_collision
|
||||
|
||||
lda COLLISION_X
|
||||
cmp friend_x
|
||||
bcc calc_gun_left_friend_continue ; blt
|
||||
|
||||
; only if closer than previous found
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
cmp friend_x
|
||||
bcs calc_gun_left_friend_continue ; bge
|
||||
|
||||
lda friend_state
|
||||
cmp #F_DISINTEGRATING
|
||||
beq calc_gun_left_friend_continue
|
||||
|
||||
calc_gun_left_friend_there:
|
||||
|
||||
lda friend_x
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
; set target if hit
|
||||
lda #TARGET_FRIEND
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
calc_gun_left_friend_continue:
|
||||
done_calc_gun_left_friend_collision:
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for physicist
|
||||
|
||||
calc_gun_left_physicist:
|
||||
|
||||
lda COLLISION_X
|
||||
cmp PHYSICIST_X
|
||||
beq calc_gun_left_physicist_continue ; ble (not w self)
|
||||
bcc calc_gun_left_physicist_continue ; blt
|
||||
|
||||
; only if closer than previous found
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
cmp PHYSICIST_X
|
||||
bcs calc_gun_left_physicist_continue ; bge
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_DISINTEGRATING
|
||||
beq calc_gun_left_physicist_continue
|
||||
|
||||
calc_gun_left_physicist_there:
|
||||
|
||||
lda PHYSICIST_X
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
; set target if hit
|
||||
lda #TARGET_PHYSICIST
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
calc_gun_left_physicist_continue:
|
||||
done_calc_gun_left_physicist_collision:
|
||||
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
; adjust for alien
|
||||
|
||||
calc_gun_left_alien:
|
||||
|
||||
lda ALIEN_OUT
|
||||
beq done_calc_gun_left_alien_collision
|
||||
|
||||
ldx #MAX_ALIENS
|
||||
dex
|
||||
|
||||
calc_gun_left_alien_loop:
|
||||
|
||||
lda alien_room,X
|
||||
cmp WHICH_ROOM
|
||||
bne calc_gun_left_alien_continue
|
||||
|
||||
; only if on same level
|
||||
lda alien_y,X
|
||||
cmp COLLISION_Y
|
||||
bne calc_gun_left_alien_continue
|
||||
|
||||
lda COLLISION_X
|
||||
cmp alien_x,X
|
||||
beq calc_gun_left_alien_continue ; if exact equal
|
||||
; might be ourselves
|
||||
bcc calc_gun_left_alien_continue ; blt
|
||||
|
||||
; only if closer than previous found
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
cmp alien_x,X
|
||||
bcs calc_gun_left_alien_continue ; bge
|
||||
|
||||
lda alien_state,X
|
||||
cmp #A_DISINTEGRATING
|
||||
beq calc_gun_left_alien_continue
|
||||
|
||||
calc_gun_left_alien_there:
|
||||
; early exit
|
||||
lda alien_x,X
|
||||
sta LEFT_SHOOT_LIMIT
|
||||
|
||||
txa ; set target if hit
|
||||
ora #TARGET_ALIEN
|
||||
sta LEFT_SHOOT_TARGET
|
||||
|
||||
jmp done_calc_gun_left_alien_collision
|
||||
|
||||
calc_gun_left_alien_continue:
|
||||
dex
|
||||
bpl calc_gun_left_alien_loop
|
||||
|
||||
done_calc_gun_left_alien_collision:
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
401
another_myst/door.s
Normal file
401
another_myst/door.s
Normal file
@ -0,0 +1,401 @@
|
||||
DOOR_STATUS_OPENING1 = $00
|
||||
DOOR_STATUS_OPENING2 = $01
|
||||
DOOR_STATUS_OPEN = $02
|
||||
DOOR_STATUS_CLOSING1 = $03
|
||||
DOOR_STATUS_CLOSING2 = $04
|
||||
DOOR_STATUS_CLOSED = $05
|
||||
DOOR_STATUS_EXPLODED = $06
|
||||
DOOR_STATUS_LOCKED = $07
|
||||
DOOR_STATUS_EXPLODING1 = $08
|
||||
DOOR_STATUS_EXPLODING2 = $09
|
||||
DOOR_STATUS_EXPLODING3 = $0A
|
||||
DOOR_STATUS_EXPLODING4 = $0B
|
||||
DOOR_STATUS_EXPLODING5 = $0C
|
||||
DOOR_STATUS_EXPLODING6 = $0D
|
||||
|
||||
|
||||
;==================================
|
||||
; draw_doors
|
||||
;==================================
|
||||
; be sure to smc to point to right place
|
||||
|
||||
draw_doors:
|
||||
lda NUM_DOORS
|
||||
beq done_draw_doors
|
||||
|
||||
ldy #0
|
||||
draw_doors_loop:
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
tax
|
||||
|
||||
lda door_sprite_lookup_lo,X
|
||||
sta INL
|
||||
lda door_sprite_lookup_hi,X
|
||||
sta INH
|
||||
|
||||
actually_draw_door:
|
||||
lda (DOOR_X),Y
|
||||
sta XPOS
|
||||
|
||||
lda (DOOR_Y),Y
|
||||
sta YPOS
|
||||
|
||||
tya
|
||||
pha
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
cmp #DOOR_STATUS_EXPLODING1
|
||||
bcs draw_exploding_door
|
||||
|
||||
jsr put_sprite_crop
|
||||
|
||||
after_door_put_sprite:
|
||||
|
||||
pla
|
||||
tay
|
||||
|
||||
draw_doors_continue:
|
||||
iny
|
||||
cpy NUM_DOORS
|
||||
bne draw_doors_loop
|
||||
|
||||
done_draw_doors:
|
||||
|
||||
rts
|
||||
|
||||
draw_exploding_door:
|
||||
|
||||
lda FRAMEL
|
||||
and #$7
|
||||
bne not_done_exploding_door
|
||||
|
||||
lda (DOOR_STATUS),Y
|
||||
clc
|
||||
adc #1
|
||||
sta (DOOR_STATUS),Y
|
||||
|
||||
cmp #DOOR_STATUS_EXPLODING6
|
||||
bcc not_done_exploding_door
|
||||
|
||||
lda #DOOR_STATUS_EXPLODED
|
||||
sta (DOOR_STATUS),Y
|
||||
|
||||
not_done_exploding_door:
|
||||
dec XPOS
|
||||
|
||||
jsr put_sprite_crop
|
||||
|
||||
jmp after_door_put_sprite
|
||||
|
||||
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; handle doors
|
||||
;==========================
|
||||
;==========================
|
||||
handle_doors:
|
||||
|
||||
lda NUM_DOORS
|
||||
beq done_handle_doors
|
||||
|
||||
ldy #0
|
||||
handle_doors_loop:
|
||||
|
||||
; state machine
|
||||
lda (DOOR_STATUS),Y
|
||||
|
||||
; if locked->do nothing
|
||||
cmp #DOOR_STATUS_LOCKED
|
||||
beq handle_doors_continue
|
||||
|
||||
; if exploded->do nothing
|
||||
cmp #DOOR_STATUS_EXPLODED
|
||||
beq handle_doors_continue
|
||||
|
||||
|
||||
; if closed and xpos/ypos in range: open
|
||||
; if open and xpos/ypos not ni range: close
|
||||
cmp #DOOR_STATUS_OPEN
|
||||
beq handle_doors_open
|
||||
cmp #DOOR_STATUS_CLOSED
|
||||
beq handle_doors_closed
|
||||
|
||||
; if exploding: continue exploding
|
||||
; we handle the increment elsewhere
|
||||
cmp #DOOR_STATUS_EXPLODING1
|
||||
bcs handle_doors_continue ; bge
|
||||
|
||||
; if opening, continue to open
|
||||
; if closing, continue to close
|
||||
handle_door_inc_state:
|
||||
lda (DOOR_STATUS),Y
|
||||
clc
|
||||
adc #1
|
||||
sta (DOOR_STATUS),Y
|
||||
|
||||
handle_doors_continue:
|
||||
iny
|
||||
cpy NUM_DOORS
|
||||
bne handle_doors_loop
|
||||
|
||||
done_handle_doors:
|
||||
rts
|
||||
|
||||
handle_doors_open:
|
||||
|
||||
; only open/close if on same level
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp PHYSICIST_Y
|
||||
bne close_door
|
||||
|
||||
lda PHYSICIST_X
|
||||
cmp (DOOR_XMAX),Y
|
||||
bcs close_door ; bge
|
||||
|
||||
cmp (DOOR_XMIN),Y
|
||||
bcc close_door ; blt
|
||||
|
||||
; made it here, we are in bounds, stay open
|
||||
|
||||
jmp handle_doors_continue
|
||||
|
||||
close_door:
|
||||
lda #DOOR_STATUS_CLOSING1
|
||||
sta (DOOR_STATUS),Y
|
||||
jmp handle_doors_continue
|
||||
|
||||
handle_doors_closed:
|
||||
|
||||
; only open if on same level
|
||||
|
||||
lda (DOOR_Y),Y
|
||||
clc
|
||||
adc #4
|
||||
cmp PHYSICIST_Y
|
||||
bne handle_doors_continue
|
||||
|
||||
lda PHYSICIST_X
|
||||
cmp (DOOR_XMAX),Y
|
||||
bcs handle_doors_continue
|
||||
|
||||
cmp (DOOR_XMIN),Y
|
||||
bcc handle_doors_continue
|
||||
|
||||
open_door:
|
||||
lda #DOOR_STATUS_OPENING1
|
||||
sta (DOOR_STATUS),Y
|
||||
jmp handle_doors_continue
|
||||
|
||||
|
||||
;====================
|
||||
;====================
|
||||
; setup door table
|
||||
;====================
|
||||
;====================
|
||||
setup_door_table:
|
||||
|
||||
ldx #9
|
||||
setup_door_table_loop:
|
||||
setup_door_table_loop_smc:
|
||||
lda $1000,X
|
||||
sta DOOR_STATUS,X
|
||||
dex
|
||||
bpl setup_door_table_loop
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;======================================
|
||||
;======================================
|
||||
; door sprites
|
||||
;======================================
|
||||
;======================================
|
||||
|
||||
|
||||
door_sprite_lookup_lo:
|
||||
.byte <door_opening_sprite1 ; DOOR_STATUS_OPENING1
|
||||
.byte <door_opening_sprite2 ; DOOR_STATUS_OPENING2
|
||||
.byte <door_open_sprite ; DOOR_STATUS_OPEN
|
||||
.byte <door_closing_sprite1 ; DOOR_STATUS_CLOSING1
|
||||
.byte <door_closing_sprite2 ; DOOR_STATUS_CLOSING2
|
||||
.byte <door_closed_sprite ; DOOR_STATUS_CLOSED
|
||||
.byte <door_exploded_sprite ; DOOR_STATUS_EXPLODED
|
||||
.byte <door_closed_sprite ; DOOR_STATUS_LOCKED
|
||||
.byte <door_exploding_sprite1 ; DOOR_STATUS_EXPLODING1
|
||||
.byte <door_exploding_sprite2 ; DOOR_STATUS_EXPLODING2
|
||||
.byte <door_exploding_sprite3 ; DOOR_STATUS_EXPLODING3
|
||||
.byte <door_exploding_sprite4 ; DOOR_STATUS_EXPLODING4
|
||||
.byte <door_exploding_sprite5 ; DOOR_STATUS_EXPLODING5
|
||||
.byte <door_exploding_sprite6 ; DOOR_STATUS_EXPLODING6
|
||||
|
||||
door_sprite_lookup_hi:
|
||||
|
||||
.byte >door_opening_sprite1 ; DOOR_STATUS_OPENING1
|
||||
.byte >door_opening_sprite2 ; DOOR_STATUS_OPENING2
|
||||
.byte >door_open_sprite ; DOOR_STATUS_OPEN
|
||||
.byte >door_closing_sprite1 ; DOOR_STATUS_CLOSING1
|
||||
.byte >door_closing_sprite2 ; DOOR_STATUS_CLOSING2
|
||||
.byte >door_closed_sprite ; DOOR_STATUS_CLOSED
|
||||
.byte >door_exploded_sprite ; DOOR_STATUS_EXPLODED
|
||||
.byte >door_closed_sprite ; DOOR_STATUS_LOCKED
|
||||
.byte >door_exploding_sprite1 ; DOOR_STATUS_EXPLODING1
|
||||
.byte >door_exploding_sprite2 ; DOOR_STATUS_EXPLODING2
|
||||
.byte >door_exploding_sprite3 ; DOOR_STATUS_EXPLODING3
|
||||
.byte >door_exploding_sprite4 ; DOOR_STATUS_EXPLODING4
|
||||
.byte >door_exploding_sprite5 ; DOOR_STATUS_EXPLODING5
|
||||
.byte >door_exploding_sprite6 ; DOOR_STATUS_EXPLODING6
|
||||
|
||||
|
||||
door_closed_sprite:
|
||||
.byte 1,10
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
|
||||
door_open_sprite:
|
||||
.byte 1,10
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
|
||||
door_opening_sprite2:
|
||||
door_closing_sprite1:
|
||||
.byte 1,10
|
||||
.byte $00
|
||||
.byte $A0
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $0A
|
||||
.byte $00
|
||||
|
||||
door_opening_sprite1:
|
||||
door_closing_sprite2:
|
||||
.byte 1,10
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $00
|
||||
.byte $00
|
||||
.byte $00
|
||||
|
||||
|
||||
door_exploded_sprite:
|
||||
.byte 1,10
|
||||
.byte $00
|
||||
.byte $A5
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $A5
|
||||
|
||||
door_exploding_sprite1:
|
||||
.byte 3,10
|
||||
.byte $AA,$FF,$66
|
||||
.byte $AA,$FF,$66
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$AA
|
||||
.byte $AA,$FF,$66
|
||||
.byte $AA,$FF,$66
|
||||
|
||||
door_exploding_sprite2:
|
||||
.byte 3,10
|
||||
.byte $AA,$FF,$EE
|
||||
.byte $AA,$FF,$EE
|
||||
.byte $EE,$FF,$EE
|
||||
.byte $FF,$FF,$EE
|
||||
.byte $FF,$FF,$EE
|
||||
.byte $FF,$FF,$EE
|
||||
.byte $EE,$FF,$EE
|
||||
.byte $AA,$FF,$EE
|
||||
.byte $AA,$FF,$EE
|
||||
.byte $AA,$FF,$EE
|
||||
|
||||
door_exploding_sprite3:
|
||||
.byte 3,10
|
||||
.byte $AA,$00,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
|
||||
door_exploding_sprite4:
|
||||
.byte 3,10
|
||||
.byte $AA,$00,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $FF,$AA,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
|
||||
door_exploding_sprite5:
|
||||
.byte 3,10
|
||||
.byte $AA,$00,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $FA,$AA,$AA
|
||||
.byte $AF,$A5,$AA
|
||||
|
||||
door_exploding_sprite6:
|
||||
.byte 3,10
|
||||
.byte $AA,$00,$AA
|
||||
.byte $AA,$A5,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $AA,$AA,$AA
|
||||
.byte $FA,$AA,$AA
|
||||
.byte $AF,$A5,$AA
|
||||
|
||||
|
26
another_myst/dummy_friend.s
Normal file
26
another_myst/dummy_friend.s
Normal file
@ -0,0 +1,26 @@
|
||||
; Include on levels where there is no friend
|
||||
|
||||
|
||||
FAI_FOLLOWING = 0
|
||||
FAI_RUNTO_PANEL = 1
|
||||
FAI_OPENING_PANEL = 2
|
||||
FAI_DISINTEGRATING = 3
|
||||
FAI_END_L2 = 4
|
||||
|
||||
|
||||
F_STANDING = 0
|
||||
F_WALKING = 1
|
||||
F_RUNNING = 2
|
||||
F_CROUCHING = 3
|
||||
F_TURNING = 4
|
||||
F_KEYPAD = 5
|
||||
F_OPEN_VENT = 6
|
||||
F_DISINTEGRATING= 7
|
||||
|
||||
friend_ai_state:
|
||||
friend_state:
|
||||
friend_x:
|
||||
friend_gait:
|
||||
.byte $00
|
||||
friend_room:
|
||||
.byte $ff
|
492
another_myst/friend.s
Normal file
492
another_myst/friend.s
Normal file
@ -0,0 +1,492 @@
|
||||
; draw/move our friend
|
||||
|
||||
friend_room: .byte 0 ; $FF means not out
|
||||
friend_x: .byte 0
|
||||
friend_y: .byte 0
|
||||
friend_state: .byte 0
|
||||
friend_gait: .byte 0
|
||||
friend_direction: .byte 0
|
||||
friend_ai_state: .byte 0
|
||||
|
||||
FAI_FOLLOWING = 0
|
||||
FAI_RUNTO_PANEL = 1
|
||||
FAI_OPENING_PANEL = 2
|
||||
FAI_DISINTEGRATING = 3
|
||||
FAI_END_L2 = 4
|
||||
|
||||
|
||||
F_STANDING = 0
|
||||
F_WALKING = 1
|
||||
F_RUNNING = 2
|
||||
F_CROUCHING = 3
|
||||
F_TURNING = 4
|
||||
F_KEYPAD = 5
|
||||
F_OPEN_VENT = 6
|
||||
F_DISINTEGRATING= 7
|
||||
|
||||
fai_table_lo:
|
||||
.byte <friend_ai_following ; 00
|
||||
.byte <friend_ai_runto_panel ; 01
|
||||
.byte <friend_ai_opening_panel ; 02
|
||||
.byte <friend_ai_disintegrating ; 03
|
||||
.byte <friend_ai_end_l2 ; 04
|
||||
|
||||
fai_table_hi:
|
||||
.byte >friend_ai_following ; 00
|
||||
.byte >friend_ai_runto_panel ; 01
|
||||
.byte >friend_ai_opening_panel ; 02
|
||||
.byte >friend_ai_disintegrating ; 03
|
||||
.byte >friend_ai_end_l2 ; 04
|
||||
|
||||
|
||||
;=======================================
|
||||
; Process friend AI
|
||||
;
|
||||
|
||||
handle_friend_ai:
|
||||
|
||||
lda friend_ai_state
|
||||
tay
|
||||
lda fai_table_lo,y
|
||||
sta fjump
|
||||
lda fai_table_hi,y
|
||||
sta fjump+1
|
||||
jmp (fjump)
|
||||
|
||||
rts
|
||||
|
||||
friend_ai_end_l2:
|
||||
; FAI_END_L2
|
||||
; crouch, holding panel open
|
||||
rts
|
||||
|
||||
friend_ai_following:
|
||||
; FAI_FOLLOWING
|
||||
; if x> phys_x by more than 8, walk left
|
||||
; if x< phys_x by more than 8, walk right
|
||||
|
||||
friend_ai_runto_panel:
|
||||
; FAI_RUNTO_PANEL
|
||||
; otherwise, if not in ROOM#2, run right
|
||||
; if in room#2, run to panel
|
||||
|
||||
lda #1
|
||||
sta friend_direction
|
||||
|
||||
lda #F_RUNNING
|
||||
sta friend_state
|
||||
|
||||
lda WHICH_ROOM
|
||||
cmp #3
|
||||
bne ai_runto_panel_done
|
||||
|
||||
lda friend_x
|
||||
cmp #30
|
||||
bcc ai_runto_panel_done
|
||||
|
||||
; hack, if running stop wrong place?
|
||||
lda #31
|
||||
sta friend_x
|
||||
|
||||
lda #FAI_OPENING_PANEL
|
||||
sta friend_ai_state
|
||||
|
||||
lda #0
|
||||
sta friend_direction
|
||||
|
||||
ai_runto_panel_done:
|
||||
jmp friend_ai_done
|
||||
|
||||
friend_ai_opening_panel:
|
||||
; FAI_OPENING_PANEL
|
||||
; if door2 unlocked -> FAI_FOLLOWING
|
||||
|
||||
; FIXME: open panel for a bit, then open door and continue
|
||||
lda #F_KEYPAD
|
||||
sta friend_state
|
||||
|
||||
friend_ai_disintegrating:
|
||||
friend_ai_done:
|
||||
rts
|
||||
|
||||
|
||||
;=======================================
|
||||
; Move friend based on current state
|
||||
;
|
||||
|
||||
move_friend:
|
||||
lda friend_room
|
||||
cmp WHICH_ROOM
|
||||
bne done_move_friend
|
||||
|
||||
jsr handle_friend_ai
|
||||
|
||||
lda friend_state
|
||||
beq done_move_friend
|
||||
|
||||
lda friend_state
|
||||
|
||||
cmp #F_WALKING
|
||||
beq move_friend_walking
|
||||
cmp #F_RUNNING
|
||||
beq move_friend_running
|
||||
|
||||
done_move_friend:
|
||||
rts
|
||||
|
||||
;======================
|
||||
; walking
|
||||
|
||||
move_friend_walking:
|
||||
inc friend_gait ; cycle through animation
|
||||
|
||||
lda friend_gait
|
||||
and #$f
|
||||
cmp #$8 ; only walk roughly 1/8 of time
|
||||
bne friend_no_move_walk
|
||||
|
||||
lda friend_direction
|
||||
beq f_walk_left
|
||||
|
||||
inc friend_x ; walk right
|
||||
rts
|
||||
f_walk_left:
|
||||
dec friend_x ; walk left
|
||||
friend_no_move_walk:
|
||||
rts
|
||||
|
||||
;======================
|
||||
; running
|
||||
move_friend_running:
|
||||
inc friend_gait ; cycle through animation
|
||||
|
||||
lda friend_gait
|
||||
and #$7
|
||||
cmp #5 ; only run roughly 3/8 of time
|
||||
bcc friend_no_move_run
|
||||
|
||||
lda friend_direction
|
||||
beq f_run_left
|
||||
|
||||
inc friend_x ; run right
|
||||
jmp friend_running_check_limits
|
||||
f_run_left:
|
||||
dec friend_x ; run left
|
||||
friend_no_move_run:
|
||||
|
||||
friend_running_check_limits:
|
||||
lda friend_x
|
||||
cmp #39
|
||||
bcc friend_done_running ; blt
|
||||
|
||||
; move to next room
|
||||
lda #0
|
||||
sta friend_x
|
||||
|
||||
inc friend_room
|
||||
|
||||
friend_done_running:
|
||||
rts
|
||||
|
||||
;======================
|
||||
; standing
|
||||
|
||||
move_friend_standing:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
fstate_table_lo:
|
||||
.byte <friend_standing ; 00
|
||||
.byte <friend_walking ; 01
|
||||
.byte <friend_running ; 02
|
||||
.byte <friend_crouching ; 03
|
||||
.byte <friend_turning ; 04
|
||||
.byte <friend_keypad ; 05 KEYPAD
|
||||
.byte <friend_open_vent ; 06
|
||||
.byte <friend_disintegrating ; 07
|
||||
|
||||
fstate_table_hi:
|
||||
.byte >friend_standing ; 00
|
||||
.byte >friend_walking ; 01
|
||||
.byte >friend_running ; 02
|
||||
.byte >friend_crouching ; 03
|
||||
.byte >friend_turning ; 04
|
||||
.byte >friend_keypad ; 05 KEYPAD
|
||||
.byte >friend_open_vent ; 06
|
||||
.byte >friend_disintegrating ; 07
|
||||
|
||||
; Urgh, make sure this doesn't end up at $FF or you hit the
|
||||
; NMOS 6502 bug
|
||||
|
||||
.align 2
|
||||
|
||||
fjump:
|
||||
.word $0000
|
||||
.align 1
|
||||
|
||||
;======================================
|
||||
; draw friend
|
||||
;======================================
|
||||
|
||||
draw_friend:
|
||||
|
||||
lda friend_room
|
||||
cmp WHICH_ROOM
|
||||
bne no_friend
|
||||
|
||||
lda friend_state
|
||||
tay
|
||||
lda fstate_table_lo,y
|
||||
sta fjump
|
||||
lda fstate_table_hi,y
|
||||
sta fjump+1
|
||||
jmp (fjump)
|
||||
|
||||
no_friend:
|
||||
rts
|
||||
|
||||
;==================================
|
||||
; STANDING
|
||||
;==================================
|
||||
|
||||
friend_standing:
|
||||
|
||||
lda #<friend_stand
|
||||
sta INL
|
||||
|
||||
lda #>friend_stand
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
|
||||
;===================================
|
||||
; CROUCHING
|
||||
;===================================
|
||||
|
||||
friend_crouching:
|
||||
|
||||
; FIXME: we have an animation?
|
||||
|
||||
lda #<friend_crouch2
|
||||
sta INL
|
||||
|
||||
lda #>friend_crouch2
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
;===================================
|
||||
; OPEN_VENT
|
||||
;===================================
|
||||
|
||||
friend_open_vent:
|
||||
|
||||
; draw vent -- HACK
|
||||
|
||||
lda #1
|
||||
sta VENT_OPEN
|
||||
|
||||
lda #$00
|
||||
sta COLOR
|
||||
|
||||
; X, V2 at Y
|
||||
; from x=top, v2=bottom
|
||||
|
||||
|
||||
ldy #18
|
||||
lda #48
|
||||
sta V2
|
||||
ldx #24
|
||||
jsr vlin
|
||||
|
||||
ldy #19
|
||||
lda #48
|
||||
sta V2
|
||||
ldx #24
|
||||
jsr vlin
|
||||
|
||||
|
||||
|
||||
lda #21
|
||||
sta friend_x
|
||||
lda #8
|
||||
sta friend_y
|
||||
|
||||
lda #<friend_crouch2
|
||||
sta INL
|
||||
|
||||
lda #>friend_crouch2
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
|
||||
|
||||
;===============================
|
||||
; Walking
|
||||
;================================
|
||||
|
||||
friend_walking:
|
||||
lda friend_gait
|
||||
cmp #64
|
||||
bcc friend_gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta friend_gait
|
||||
|
||||
friend_gait_fine:
|
||||
lsr
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tay
|
||||
|
||||
lda friend_walk_progression,Y
|
||||
sta INL
|
||||
|
||||
lda friend_walk_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
;===============================
|
||||
; Running
|
||||
;================================
|
||||
|
||||
friend_running:
|
||||
lda friend_gait
|
||||
cmp #32
|
||||
bcc friend_run_gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta friend_gait
|
||||
|
||||
friend_run_gait_fine:
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tay
|
||||
|
||||
lda friend_run_progression,Y
|
||||
sta INL
|
||||
|
||||
lda friend_run_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
;===============================
|
||||
; Turning
|
||||
;================================
|
||||
|
||||
friend_turning:
|
||||
|
||||
dec friend_gait
|
||||
bpl friend_draw_turning
|
||||
|
||||
lda #0
|
||||
sta friend_gait
|
||||
|
||||
; switch direction
|
||||
lda friend_direction
|
||||
eor #$1
|
||||
sta friend_direction
|
||||
|
||||
lda #F_WALKING
|
||||
sta friend_state
|
||||
|
||||
friend_draw_turning:
|
||||
lda #<friend_turning_sprite
|
||||
sta INL
|
||||
|
||||
lda #>friend_turning_sprite
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
|
||||
;===============================
|
||||
; Using Keypad
|
||||
;================================
|
||||
|
||||
friend_keypad:
|
||||
|
||||
inc friend_gait
|
||||
|
||||
lda friend_gait
|
||||
and #$10
|
||||
lsr
|
||||
lsr
|
||||
lsr
|
||||
tay
|
||||
|
||||
friend_draw_keypad:
|
||||
lda friend_keypad_progression,Y
|
||||
sta INL
|
||||
|
||||
lda friend_keypad_progression+1,Y
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
;===============================
|
||||
; Disintegrating
|
||||
;================================
|
||||
|
||||
friend_disintegrating:
|
||||
lda friend_gait
|
||||
cmp #13
|
||||
bne friend_keep_disintegrating
|
||||
|
||||
lda #$ff
|
||||
sta friend_room
|
||||
|
||||
rts
|
||||
|
||||
friend_keep_disintegrating:
|
||||
asl
|
||||
tay
|
||||
|
||||
; re-use alien sprites
|
||||
|
||||
lda alien_disintegrating_progression,Y
|
||||
sta INL
|
||||
|
||||
lda alien_disintegrating_progression+1,Y
|
||||
sta INH
|
||||
|
||||
lda FRAMEL
|
||||
and #$7
|
||||
bne slow_friend_disintegration
|
||||
|
||||
inc friend_gait
|
||||
slow_friend_disintegration:
|
||||
|
||||
jmp finally_draw_friend
|
||||
|
||||
|
||||
|
||||
;=============================
|
||||
; Actually Draw Friend
|
||||
;=============================
|
||||
|
||||
|
||||
finally_draw_friend:
|
||||
lda friend_x
|
||||
sta XPOS
|
||||
|
||||
lda friend_y
|
||||
sta YPOS
|
||||
|
||||
lda friend_direction
|
||||
bne friend_facing_right
|
||||
|
||||
friend_facing_left:
|
||||
jmp put_sprite_crop
|
||||
|
||||
friend_facing_right:
|
||||
jmp put_sprite_flipped_crop
|
||||
|
34
another_myst/gr_hlin.s
Normal file
34
another_myst/gr_hlin.s
Normal file
@ -0,0 +1,34 @@
|
||||
;===============================
|
||||
; hlin
|
||||
;===============================
|
||||
; Y = y position
|
||||
; A = start
|
||||
; X = length
|
||||
hlin:
|
||||
clc
|
||||
adc gr_offsets,Y
|
||||
sta hlin_smc1+1
|
||||
sta hlin_smc2+1
|
||||
|
||||
lda gr_offsets+1,Y
|
||||
clc
|
||||
adc DRAW_PAGE
|
||||
sta hlin_smc1+2
|
||||
sta hlin_smc2+2
|
||||
|
||||
|
||||
hlin_loop:
|
||||
|
||||
hlin_smc1:
|
||||
lda $c00,X
|
||||
hlin_mask_smc:
|
||||
and #$f0
|
||||
hlin_color_smc:
|
||||
ora #$01
|
||||
hlin_smc2:
|
||||
sta $c00,X
|
||||
|
||||
dex
|
||||
bpl hlin_loop
|
||||
|
||||
rts
|
152
another_myst/gr_putsprite.s
Normal file
152
another_myst/gr_putsprite.s
Normal file
@ -0,0 +1,152 @@
|
||||
|
||||
;=============================================
|
||||
; put_sprite
|
||||
;=============================================
|
||||
; Sprite to display in INH,INL
|
||||
; Location is XPOS,YPOS
|
||||
; Note, only works if YPOS is multiple of two
|
||||
|
||||
; transparent color is $A (grey #2)
|
||||
; this means we can have black ($0) in a sprite
|
||||
|
||||
; also note all the cycle count is out of date
|
||||
|
||||
; time= 28 setup
|
||||
; Y*outerloop
|
||||
; outerloop = 34 setup
|
||||
; X*innerloop
|
||||
; innerloop = 30 if $00 17+13(done)
|
||||
; 64 if $0X 16+7+8+20(put_sprite_mask)+13(done)
|
||||
; 69 if $X0 16+8+7+5+20(put_sprite_mask)+13(done)
|
||||
; 54 if if $XX 16+8+8+9(put_all)+13(done)
|
||||
|
||||
|
||||
; -1 for last iteration
|
||||
; 18 (-1 for last)
|
||||
; 6 return
|
||||
|
||||
; so cost = 28 + Y*(34+18)+ (INNER-Y) -1 + 6
|
||||
; = 33 + Y*(52)+(INNER-Y)
|
||||
; = 33 + Y*(52)+ [30A + 64B + 69C + 54D]-Y
|
||||
|
||||
put_sprite:
|
||||
|
||||
ldy #0 ; byte 0 is xsize ; 2
|
||||
lda (INL),Y ; 5
|
||||
sta CH ; xsize is in CH ; 3
|
||||
iny ; 2
|
||||
|
||||
lda (INL),Y ; byte 1 is ysize ; 5
|
||||
sta CV ; ysize is in CV ; 3
|
||||
iny ; 2
|
||||
|
||||
lda YPOS ; make a copy of ypos ; 3
|
||||
sta TEMPY ; as we modify it ; 3
|
||||
;===========
|
||||
; 28
|
||||
put_sprite_loop:
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy TEMPY ; 3
|
||||
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||
clc ; 2
|
||||
adc XPOS ; add in xpos ; 3
|
||||
sta OUTL ; store out low byte of addy ; 3
|
||||
lda gr_offsets+1,Y ; look up high byte ; 4
|
||||
adc DRAW_PAGE ; ; 3
|
||||
sta OUTH ; and store it out ; 3
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
; OUTH:OUTL now points at right place
|
||||
|
||||
ldx CH ; load xsize into x ; 3
|
||||
;===========
|
||||
; 34
|
||||
put_sprite_pixel:
|
||||
lda (INL),Y ; get sprite colors ; 5
|
||||
iny ; increment sprite pointer ; 2
|
||||
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy #$0 ; 2
|
||||
|
||||
; check if completely transparent
|
||||
; if so, skip
|
||||
|
||||
cmp #$aa ; if all zero, transparent ; 2
|
||||
beq put_sprite_done_draw ; don't draw it ; 2nt/3
|
||||
;==============
|
||||
; 16/17
|
||||
|
||||
sta COLOR ; save color for later ; 3
|
||||
|
||||
; check if top pixel transparent
|
||||
|
||||
and #$f0 ; check if top nibble zero ; 2
|
||||
cmp #$a0
|
||||
bne put_sprite_bottom ; if not skip ahead ; 2nt/3
|
||||
;==============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$0f
|
||||
sta COLOR
|
||||
|
||||
lda #$f0 ; setup mask ; 2
|
||||
sta MASK ; 3
|
||||
bmi put_sprite_mask ; always? ; 3
|
||||
;=============
|
||||
; 8
|
||||
|
||||
put_sprite_bottom:
|
||||
lda COLOR ; re-load color ; 3
|
||||
and #$0f ; check if bottom nibble zero ; 2
|
||||
cmp #$0a
|
||||
bne put_sprite_all ; if not, skip ahead ; 2nt/3
|
||||
;=============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$f0
|
||||
sta COLOR
|
||||
lda #$0f ; 2
|
||||
sta MASK ; setup mask ; 3
|
||||
;===========
|
||||
; 5
|
||||
|
||||
put_sprite_mask:
|
||||
lda (OUTL),Y ; get color at output ; 5
|
||||
and MASK ; mask off unneeded part ; 3
|
||||
ora COLOR ; or the color in ; 3
|
||||
sta (OUTL),Y ; store it back ; 6
|
||||
|
||||
jmp put_sprite_done_draw ; we are done ; 3
|
||||
;===========
|
||||
; 20
|
||||
|
||||
put_sprite_all:
|
||||
lda COLOR ; load color ; 3
|
||||
sta (OUTL),Y ; and write it out ; 6
|
||||
;============
|
||||
; 9
|
||||
|
||||
put_sprite_done_draw:
|
||||
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
inc OUTL ; increment output pointer ; 5
|
||||
dex ; decrement x counter ; 2
|
||||
bne put_sprite_pixel ; if not done, keep looping ; 2nt/3
|
||||
;==============
|
||||
; 12/13
|
||||
|
||||
inc TEMPY ; each line has two y vars ; 5
|
||||
inc TEMPY ; 5
|
||||
dec CV ; decemenet total y count ; 5
|
||||
bne put_sprite_loop ; loop if not done ; 2nt/3
|
||||
;==============
|
||||
; 17/18
|
||||
|
||||
rts ; return ; 6
|
||||
|
||||
|
||||
|
||||
|
353
another_myst/gr_putsprite_crop.s
Normal file
353
another_myst/gr_putsprite_crop.s
Normal file
@ -0,0 +1,353 @@
|
||||
;=============================================
|
||||
; put_sprite_crop
|
||||
;=============================================
|
||||
; Sprite to display in INH,INL
|
||||
; Location is XPOS,YPOS
|
||||
; Note, only works if YPOS is multiple of two
|
||||
|
||||
; transparent color is $A (grey #2)
|
||||
; this means we can have black ($0) in a sprite
|
||||
|
||||
; FIXME: force YPOS to be even?
|
||||
|
||||
put_sprite_crop:
|
||||
|
||||
ldy #0 ; byte 0 is xsize ; 2
|
||||
lda (INL),Y ; 5
|
||||
sta CH ; xsize is in CH ; 3
|
||||
iny ; 2
|
||||
clc
|
||||
adc XPOS
|
||||
sta XMAX
|
||||
|
||||
lda (INL),Y ; byte 1 is ysize ; 5
|
||||
sta CV ; ysize is in CV ; 3
|
||||
iny ; 2
|
||||
|
||||
lda YPOS ; make a copy of ypos ; 3
|
||||
sta TEMPY ; as we modify it ; 3
|
||||
;===========
|
||||
; 28
|
||||
put_sprite_crop_loop:
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy TEMPY ; 3
|
||||
|
||||
bpl put_sprite_crop_pos ; if < 0, skip to next
|
||||
|
||||
clc ; skip line in sprite too
|
||||
lda TEMP
|
||||
adc CH
|
||||
tay
|
||||
|
||||
bne crop_increment_y
|
||||
|
||||
put_sprite_crop_pos:
|
||||
cpy #48 ; bge if >= 48, done sprite
|
||||
bcs crop_sprite_done
|
||||
|
||||
|
||||
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||
clc ; 2
|
||||
adc XPOS ; add in xpos ; 3
|
||||
sta OUTL ; store out low byte of addy ; 3
|
||||
clc ; never wraps, handle negative
|
||||
lda gr_offsets+1,Y ; look up high byte ; 4
|
||||
adc DRAW_PAGE ; ; 3
|
||||
sta OUTH ; and store it out ; 3
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
; OUTH:OUTL now points at right place
|
||||
|
||||
ldx XPOS ; load xposition into x ; 3
|
||||
;===========
|
||||
; 34
|
||||
crop_put_sprite_pixel:
|
||||
lda (INL),Y ; get sprite colors ; 5
|
||||
iny ; increment sprite pointer ; 2
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
|
||||
|
||||
cpx #0 ; if off-screen left, skip draw
|
||||
bmi skip_drawing
|
||||
cpx #40
|
||||
bcs skip_drawing ; if off-screen right, skip draw
|
||||
|
||||
ldy #$0 ; 2
|
||||
|
||||
; check if completely transparent
|
||||
; if so, skip
|
||||
|
||||
cmp #$aa ; if all zero, transparent ; 2
|
||||
beq crop_put_sprite_done_draw ; don't draw it ; 2nt/3
|
||||
;==============
|
||||
; 16/17
|
||||
|
||||
sta COLOR ; save color for later ; 3
|
||||
|
||||
; check if top pixel transparent
|
||||
|
||||
and #$f0 ; check if top nibble zero ; 2
|
||||
cmp #$a0
|
||||
bne crop_put_sprite_bottom ; if not skip ahead ; 2nt/3
|
||||
;==============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$0f
|
||||
sta COLOR
|
||||
|
||||
lda #$f0 ; setup mask ; 2
|
||||
sta MASK ; 3
|
||||
bmi crop_put_sprite_mask ; always? ; 3
|
||||
;=============
|
||||
; 8
|
||||
|
||||
crop_put_sprite_bottom:
|
||||
lda COLOR ; re-load color ; 3
|
||||
and #$0f ; check if bottom nibble zero ; 2
|
||||
cmp #$0a
|
||||
bne crop_put_sprite_all ; if not, skip ahead ; 2nt/3
|
||||
;=============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$f0
|
||||
sta COLOR
|
||||
lda #$0f ; 2
|
||||
sta MASK ; setup mask ; 3
|
||||
;===========
|
||||
; 5
|
||||
|
||||
crop_put_sprite_mask:
|
||||
lda (OUTL),Y ; get color at output ; 5
|
||||
and MASK ; mask off unneeded part ; 3
|
||||
ora COLOR ; or the color in ; 3
|
||||
sta (OUTL),Y ; store it back ; 6
|
||||
|
||||
jmp crop_put_sprite_done_draw ; we are done ; 3
|
||||
;===========
|
||||
; 20
|
||||
|
||||
crop_put_sprite_all:
|
||||
lda COLOR ; load color ; 3
|
||||
sta (OUTL),Y ; and write it out ; 6
|
||||
;============
|
||||
; 9
|
||||
|
||||
crop_put_sprite_done_draw:
|
||||
skip_drawing:
|
||||
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
inc OUTL ; increment output pointer ; 5
|
||||
inx ; increment x counter ; 2
|
||||
cpx XMAX
|
||||
bne crop_put_sprite_pixel ; if not done, keep looping ; 2nt/3
|
||||
;==============
|
||||
; 12/13
|
||||
crop_increment_y:
|
||||
|
||||
inc TEMPY ; each line has two y vars ; 5
|
||||
inc TEMPY ; 5
|
||||
dec CV ; decemenet total y count ; 5
|
||||
bne put_sprite_crop_loop ; loop if not done ; 2nt/3
|
||||
;==============
|
||||
; 17/18
|
||||
crop_sprite_done:
|
||||
rts ; return ; 6
|
||||
|
||||
|
||||
|
||||
; 0,0 = 400+0
|
||||
; -1,0 = 400+ff=4ff, inc=400
|
||||
|
||||
; sprite: 5x4
|
||||
;
|
||||
; -2,0 Xstart=0, sprite_offset=2, xsize=3
|
||||
; -1,0, Xstart=0, sprite_offset=1, xsize=4
|
||||
; 0,0, Xstrat=0, sprite_offset=0, xsize=5
|
||||
; 1,0, Xstart=1, sprite_offset=0, xsize=5
|
||||
;
|
||||
; 39,0 Xstart=39, sprite_offset=0, xsize=1
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
|
||||
;=============================================
|
||||
; put_sprite_flipped_crop
|
||||
;=============================================
|
||||
; Sprite to display in INH,INL
|
||||
; Location is XPOS,YPOS
|
||||
; Note, only works if YPOS is multiple of two
|
||||
|
||||
; transparent color is $A (grey #2)
|
||||
; this means we can have black ($0) in a sprite
|
||||
|
||||
|
||||
put_sprite_flipped_crop:
|
||||
|
||||
ldy #0 ; byte 0 is xsize ; 2
|
||||
lda (INL),Y ; 5
|
||||
sta CH ; xsize is in CH ; 3
|
||||
iny ; 2
|
||||
|
||||
|
||||
lda (INL),Y ; byte 1 is ysize ; 5
|
||||
sta CV ; ysize is in CV ; 3
|
||||
dey ; make Y zero again ; 2
|
||||
|
||||
lda INH ; ???
|
||||
sta ppfc_smc+2
|
||||
clc
|
||||
lda INL
|
||||
adc #1 ; add one (not two) because X counts
|
||||
; from CH to 1 (not CH-1 to 0)
|
||||
sta ppfc_smc+1
|
||||
bcc psfc16
|
||||
inc ppfc_smc+2
|
||||
psfc16:
|
||||
|
||||
|
||||
lda YPOS ; make a copy of ypos ; 3
|
||||
|
||||
sta TEMPY ; as we modify it ; 3
|
||||
;===========
|
||||
; 28
|
||||
|
||||
|
||||
|
||||
put_spritefc_loop:
|
||||
; sty TEMP ; save sprite pointer ; 3
|
||||
ldy TEMPY ; 3
|
||||
|
||||
bmi fcrop_increment_y ; if < 0, skip to next
|
||||
cpy #48 ; bge if >= 48, done sprite
|
||||
bcs fcrop_sprite_done
|
||||
|
||||
|
||||
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||
clc ; 2
|
||||
adc XPOS ; add in xpos ; 3
|
||||
sta OUTL ; store out low byte of addy ; 3
|
||||
lda gr_offsets+1,Y ; look up high byte ; 4
|
||||
clc
|
||||
adc DRAW_PAGE ; ; 3
|
||||
sta OUTH ; and store it out ; 3
|
||||
; ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
; OUTH:OUTL now points at right place
|
||||
|
||||
ldx CH ; load xsize into x ; 3
|
||||
;===========
|
||||
; 34
|
||||
put_spritefc_pixel:
|
||||
|
||||
clc
|
||||
txa ; want (CH-X-1)+XPOS
|
||||
eor #$ff
|
||||
adc CH
|
||||
adc XPOS
|
||||
|
||||
bmi cskip_drawing
|
||||
cmp #40
|
||||
|
||||
bcs cskip_drawing ; if off-screen right, skip draw
|
||||
|
||||
ppfc_smc:
|
||||
lda $C000,X ; get sprite colors ; 5
|
||||
; iny ; increment sprite pointer ; 2
|
||||
; sty TEMP ; save sprite pointer ; 3
|
||||
ldy #$0 ; 2
|
||||
|
||||
; check if completely transparent
|
||||
; if so, skip
|
||||
|
||||
cmp #$aa ; if all zero, transparent ; 2
|
||||
beq put_spritefc_done_draw ; don't draw it ; 2nt/3
|
||||
;==============
|
||||
; 16/17
|
||||
|
||||
sta COLOR ; save color for later ; 3
|
||||
|
||||
; check if top pixel transparent
|
||||
|
||||
and #$f0 ; check if top nibble zero ; 2
|
||||
cmp #$a0
|
||||
bne put_spritefc_bottom ; if not skip ahead ; 2nt/3
|
||||
;==============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$0f
|
||||
sta COLOR
|
||||
|
||||
lda #$f0 ; setup mask ; 2
|
||||
sta MASK ; 3
|
||||
bmi put_spritefc_mask ; always? ; 3
|
||||
;=============
|
||||
; 8
|
||||
|
||||
put_spritefc_bottom:
|
||||
lda COLOR ; re-load color ; 3
|
||||
and #$0f ; check if bottom nibble zero ; 2
|
||||
cmp #$0a
|
||||
bne put_spritefc_all ; if not, skip ahead ; 2nt/3
|
||||
;=============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$f0
|
||||
sta COLOR
|
||||
lda #$0f ; 2
|
||||
sta MASK ; setup mask ; 3
|
||||
;===========
|
||||
; 5
|
||||
|
||||
put_spritefc_mask:
|
||||
lda (OUTL),Y ; get color at output ; 5
|
||||
and MASK ; mask off unneeded part ; 3
|
||||
ora COLOR ; or the color in ; 3
|
||||
sta (OUTL),Y ; store it back ; 6
|
||||
|
||||
jmp put_spritefc_done_draw ; we are done ; 3
|
||||
;===========
|
||||
; 20
|
||||
|
||||
put_spritefc_all:
|
||||
lda COLOR ; load color ; 3
|
||||
sta (OUTL),Y ; and write it out ; 6
|
||||
;============
|
||||
; 9
|
||||
|
||||
put_spritefc_done_draw:
|
||||
cskip_drawing:
|
||||
; ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
inc OUTL ; increment output pointer ; 5
|
||||
dex ; decrement x counter ; 2
|
||||
bne put_spritefc_pixel ; if not done, keep looping ; 2nt/3
|
||||
;==============
|
||||
; 12/13
|
||||
fcrop_increment_y:
|
||||
inc TEMPY ; each line has two y vars ; 5
|
||||
inc TEMPY ; 5
|
||||
|
||||
lda CH
|
||||
clc
|
||||
adc ppfc_smc+1
|
||||
sta ppfc_smc+1
|
||||
bcc psfco
|
||||
inc ppfc_smc+2
|
||||
psfco:
|
||||
|
||||
dec CV ; decemenet total y count ; 5
|
||||
beq fcrop_sprite_done ; loop if not done ; 2nt/3
|
||||
jmp put_spritefc_loop
|
||||
;==============
|
||||
; 17/18
|
||||
|
||||
fcrop_sprite_done:
|
||||
rts ; return ; 6
|
||||
|
||||
|
157
another_myst/gr_putsprite_flipped.s
Normal file
157
another_myst/gr_putsprite_flipped.s
Normal file
@ -0,0 +1,157 @@
|
||||
;=============================================
|
||||
; put_sprite_flipped
|
||||
;=============================================
|
||||
; Sprite to display in INH,INL
|
||||
; Location is XPOS,YPOS
|
||||
; Note, only works if YPOS is multiple of two
|
||||
|
||||
; transparent color is $A (grey #2)
|
||||
; this means we can have black ($0) in a sprite
|
||||
|
||||
|
||||
put_sprite_flipped:
|
||||
|
||||
ldy #0 ; byte 0 is xsize ; 2
|
||||
lda (INL),Y ; 5
|
||||
sta CH ; xsize is in CH ; 3
|
||||
iny ; 2
|
||||
|
||||
|
||||
lda (INL),Y ; byte 1 is ysize ; 5
|
||||
sta CV ; ysize is in CV ; 3
|
||||
dey ; make Y zero again ; 2
|
||||
|
||||
lda INH
|
||||
sta ppf_smc+2
|
||||
clc
|
||||
lda INL
|
||||
adc #1 ; add one (not two) because X counts
|
||||
; from CH to 1 (not CH-1 to 0)
|
||||
sta ppf_smc+1
|
||||
bcc psf16
|
||||
inc ppf_smc+2
|
||||
psf16:
|
||||
|
||||
|
||||
lda YPOS ; make a copy of ypos ; 3
|
||||
|
||||
sta TEMPY ; as we modify it ; 3
|
||||
;===========
|
||||
; 28
|
||||
|
||||
|
||||
|
||||
put_spritef_loop:
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy TEMPY ; 3
|
||||
lda gr_offsets,Y ; lookup low-res memory address ; 4
|
||||
clc ; 2
|
||||
adc XPOS ; add in xpos ; 3
|
||||
sta OUTL ; store out low byte of addy ; 3
|
||||
lda gr_offsets+1,Y ; look up high byte ; 4
|
||||
adc DRAW_PAGE ; ; 3
|
||||
sta OUTH ; and store it out ; 3
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
; OUTH:OUTL now points at right place
|
||||
|
||||
ldx CH ; load xsize into x ; 3
|
||||
;===========
|
||||
; 34
|
||||
put_spritef_pixel:
|
||||
ppf_smc:
|
||||
lda $C000,X ; get sprite colors ; 5
|
||||
iny ; increment sprite pointer ; 2
|
||||
|
||||
sty TEMP ; save sprite pointer ; 3
|
||||
ldy #$0 ; 2
|
||||
|
||||
; check if completely transparent
|
||||
; if so, skip
|
||||
|
||||
cmp #$aa ; if all zero, transparent ; 2
|
||||
beq put_spritef_done_draw ; don't draw it ; 2nt/3
|
||||
;==============
|
||||
; 16/17
|
||||
|
||||
sta COLOR ; save color for later ; 3
|
||||
|
||||
; check if top pixel transparent
|
||||
|
||||
and #$f0 ; check if top nibble zero ; 2
|
||||
cmp #$a0
|
||||
bne put_spritef_bottom ; if not skip ahead ; 2nt/3
|
||||
;==============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$0f
|
||||
sta COLOR
|
||||
|
||||
lda #$f0 ; setup mask ; 2
|
||||
sta MASK ; 3
|
||||
bmi put_spritef_mask ; always? ; 3
|
||||
;=============
|
||||
; 8
|
||||
|
||||
put_spritef_bottom:
|
||||
lda COLOR ; re-load color ; 3
|
||||
and #$0f ; check if bottom nibble zero ; 2
|
||||
cmp #$0a
|
||||
bne put_spritef_all ; if not, skip ahead ; 2nt/3
|
||||
;=============
|
||||
; 7/8
|
||||
|
||||
lda COLOR
|
||||
and #$f0
|
||||
sta COLOR
|
||||
lda #$0f ; 2
|
||||
sta MASK ; setup mask ; 3
|
||||
;===========
|
||||
; 5
|
||||
|
||||
put_spritef_mask:
|
||||
lda (OUTL),Y ; get color at output ; 5
|
||||
and MASK ; mask off unneeded part ; 3
|
||||
ora COLOR ; or the color in ; 3
|
||||
sta (OUTL),Y ; store it back ; 6
|
||||
|
||||
jmp put_spritef_done_draw ; we are done ; 3
|
||||
;===========
|
||||
; 20
|
||||
|
||||
put_spritef_all:
|
||||
lda COLOR ; load color ; 3
|
||||
sta (OUTL),Y ; and write it out ; 6
|
||||
;============
|
||||
; 9
|
||||
|
||||
put_spritef_done_draw:
|
||||
|
||||
ldy TEMP ; restore sprite pointer ; 3
|
||||
|
||||
inc OUTL ; increment output pointer ; 5
|
||||
dex ; decrement x counter ; 2
|
||||
bne put_spritef_pixel ; if not done, keep looping ; 2nt/3
|
||||
;==============
|
||||
; 12/13
|
||||
|
||||
inc TEMPY ; each line has two y vars ; 5
|
||||
inc TEMPY ; 5
|
||||
|
||||
lda CH
|
||||
clc
|
||||
adc ppf_smc+1
|
||||
sta ppf_smc+1
|
||||
bcc psfo
|
||||
inc ppf_smc+2
|
||||
psfo:
|
||||
|
||||
dec CV ; decemenet total y count ; 5
|
||||
bne put_spritef_loop ; loop if not done ; 2nt/3
|
||||
;==============
|
||||
; 17/18
|
||||
|
||||
rts ; return ; 6
|
||||
|
||||
|
287
another_myst/gun.s
Normal file
287
another_myst/gun.s
Normal file
@ -0,0 +1,287 @@
|
||||
;
|
||||
; Gun behavior
|
||||
;
|
||||
; When 'L' pressed gun is charging
|
||||
; we handle that here
|
||||
|
||||
|
||||
;===================================
|
||||
; handle/draw all gun related stuff
|
||||
;===================================
|
||||
handle_gun:
|
||||
|
||||
;===================
|
||||
; check_gun_firing
|
||||
;===================
|
||||
jsr check_gun_firing
|
||||
|
||||
;=======================
|
||||
; draw gun charge effect
|
||||
;=======================
|
||||
|
||||
jsr draw_gun_charging
|
||||
|
||||
;================
|
||||
; move laser
|
||||
;================
|
||||
|
||||
jsr move_laser
|
||||
|
||||
;================
|
||||
; draw laser
|
||||
;================
|
||||
|
||||
jsr draw_laser
|
||||
|
||||
;================
|
||||
; move blast
|
||||
;================
|
||||
|
||||
jsr move_blast
|
||||
|
||||
;================
|
||||
; draw blast
|
||||
;================
|
||||
|
||||
jsr draw_blast
|
||||
|
||||
;================
|
||||
; draw shields
|
||||
;================
|
||||
|
||||
jmp draw_shields
|
||||
|
||||
; rts
|
||||
|
||||
|
||||
;====================
|
||||
;====================
|
||||
; check gun firing
|
||||
;====================
|
||||
;====================
|
||||
|
||||
check_gun_firing:
|
||||
|
||||
lda HAVE_GUN ; no gun, do nothing
|
||||
beq no_have_gun
|
||||
|
||||
;================
|
||||
; fire laser
|
||||
;================
|
||||
|
||||
lda LASER_OUT
|
||||
beq no_fire_laser
|
||||
jsr fire_laser
|
||||
no_fire_laser:
|
||||
lda #0
|
||||
sta LASER_OUT
|
||||
|
||||
|
||||
lda GUN_STATE ; gun not charging, do nothing
|
||||
beq done_gun
|
||||
|
||||
lda GUN_FIRE ; if fired, fire it
|
||||
bne fire_gun
|
||||
|
||||
; increment gun state
|
||||
|
||||
lda FRAMEL ; slow down
|
||||
and #$7
|
||||
bne done_inc_gun_state
|
||||
|
||||
inc GUN_STATE
|
||||
|
||||
; saturate
|
||||
|
||||
lda GUN_STATE
|
||||
cmp #24
|
||||
bne done_inc_gun_state
|
||||
|
||||
lda #21 ; wrap at end
|
||||
sta GUN_STATE
|
||||
|
||||
done_inc_gun_state:
|
||||
|
||||
|
||||
jmp done_gun
|
||||
|
||||
fire_gun:
|
||||
; fire here
|
||||
|
||||
lda GUN_STATE
|
||||
cmp #5
|
||||
bcc done_gun ; too short, do nothing
|
||||
|
||||
cmp #21
|
||||
bcs do_blast ; too long, blast
|
||||
|
||||
; shield
|
||||
|
||||
jsr activate_shield
|
||||
jmp done_firing
|
||||
do_blast:
|
||||
jsr fire_blast
|
||||
|
||||
done_firing:
|
||||
lda #0
|
||||
sta GUN_STATE
|
||||
done_gun:
|
||||
no_have_gun:
|
||||
lda #0
|
||||
sta GUN_FIRE
|
||||
|
||||
rts
|
||||
|
||||
|
||||
;============================
|
||||
; draw gun charging effect
|
||||
;============================
|
||||
draw_gun_charging:
|
||||
|
||||
lda HAVE_GUN ; no gun, do nothing
|
||||
beq done_draw_gun_charging
|
||||
|
||||
lda GUN_STATE ; gun not charging, do nothing
|
||||
beq done_draw_gun_charging
|
||||
|
||||
|
||||
; set direction
|
||||
|
||||
lda DIRECTION
|
||||
bne zap_right
|
||||
|
||||
zap_left:
|
||||
|
||||
ldx PHYSICIST_X
|
||||
dex
|
||||
dex
|
||||
stx XPOS
|
||||
|
||||
jmp done_zap
|
||||
|
||||
zap_right:
|
||||
|
||||
lda PHYSICIST_X
|
||||
clc
|
||||
adc #5
|
||||
sta XPOS
|
||||
done_zap:
|
||||
|
||||
lda PHYSICIST_Y
|
||||
clc
|
||||
adc #4
|
||||
|
||||
ldy PHYSICIST_STATE
|
||||
cpy #P_CROUCH_SHOOTING
|
||||
bne done_zap_ypos
|
||||
clc
|
||||
adc #4
|
||||
|
||||
done_zap_ypos:
|
||||
sta YPOS
|
||||
|
||||
ldy GUN_STATE
|
||||
lda gun_charge_progression,Y
|
||||
tay
|
||||
|
||||
lda gun_charge_table_lo,Y
|
||||
sta INL
|
||||
|
||||
lda gun_charge_table_hi,Y
|
||||
sta INH
|
||||
|
||||
jsr put_sprite
|
||||
|
||||
done_draw_gun_charging:
|
||||
rts
|
||||
|
||||
; progression
|
||||
|
||||
gun_charge_progression:
|
||||
.byte 0,0,0,1,2,3
|
||||
.byte 4,5,6,4,5,6,4,5,6,4,5,6,4,5,6 ; 20
|
||||
.byte 7,8,9
|
||||
|
||||
gun_charge_table_lo:
|
||||
.byte <gun_charge_sprite0
|
||||
.byte <gun_charge_sprite1
|
||||
.byte <gun_charge_sprite2
|
||||
.byte <gun_charge_sprite3
|
||||
.byte <gun_charge_sprite4
|
||||
.byte <gun_charge_sprite5
|
||||
.byte <gun_charge_sprite6
|
||||
.byte <gun_charge_sprite7
|
||||
.byte <gun_charge_sprite8
|
||||
.byte <gun_charge_sprite9
|
||||
|
||||
gun_charge_table_hi:
|
||||
.byte >gun_charge_sprite0
|
||||
.byte >gun_charge_sprite1
|
||||
.byte >gun_charge_sprite2
|
||||
.byte >gun_charge_sprite3
|
||||
.byte >gun_charge_sprite4
|
||||
.byte >gun_charge_sprite5
|
||||
.byte >gun_charge_sprite6
|
||||
.byte >gun_charge_sprite7
|
||||
.byte >gun_charge_sprite8
|
||||
.byte >gun_charge_sprite9
|
||||
|
||||
|
||||
|
||||
; startup
|
||||
|
||||
gun_charge_sprite0:
|
||||
.byte 2,2
|
||||
.byte $AA,$AA
|
||||
.byte $AA,$AA
|
||||
|
||||
gun_charge_sprite1:
|
||||
.byte 2,2
|
||||
.byte $fA,$AA
|
||||
.byte $AA,$AA
|
||||
|
||||
gun_charge_sprite2:
|
||||
.byte 2,2
|
||||
.byte $22,$AA
|
||||
.byte $AA,$AA
|
||||
|
||||
gun_charge_sprite3:
|
||||
.byte 2,2
|
||||
.byte $ef,$eA
|
||||
.byte $fe,$Ae
|
||||
|
||||
; medium
|
||||
|
||||
gun_charge_sprite4:
|
||||
.byte 2,2
|
||||
.byte $ff,$AA
|
||||
.byte $Ae,$AA
|
||||
|
||||
gun_charge_sprite5:
|
||||
.byte 2,2
|
||||
.byte $ef,$AA
|
||||
.byte $Ae,$AA
|
||||
|
||||
gun_charge_sprite6:
|
||||
.byte 2,2
|
||||
.byte $ef,$AA
|
||||
.byte $Af,$AA
|
||||
|
||||
; large
|
||||
|
||||
gun_charge_sprite7:
|
||||
.byte 2,2
|
||||
.byte $fe,$fe
|
||||
.byte $Ae,$Ae
|
||||
|
||||
gun_charge_sprite8:
|
||||
.byte 2,2
|
||||
.byte $fe,$fe
|
||||
.byte $ef,$ef
|
||||
|
||||
gun_charge_sprite9:
|
||||
.byte 2,2
|
||||
.byte $ff,$ff
|
||||
.byte $Ae,$Ae
|
||||
|
||||
|
422
another_myst/keyboard.s
Normal file
422
another_myst/keyboard.s
Normal file
@ -0,0 +1,422 @@
|
||||
|
||||
;======================================
|
||||
; handle keypress
|
||||
;======================================
|
||||
|
||||
; A or <- : start moving left
|
||||
; D or -> : start moving right
|
||||
; W or up : jump or elevator/transporter up
|
||||
; S or down : crouch or pickup or elevator/transporter down
|
||||
; L : charge gun
|
||||
; space : action
|
||||
; escape : quit
|
||||
|
||||
; if left: if running right, walk right
|
||||
; if walk right, stand right
|
||||
; if stand right, stand left
|
||||
; if stand left, walk left
|
||||
; if walk left, run left
|
||||
; if up: if crouching, stand up
|
||||
; if standing, jump
|
||||
; if walking, jump
|
||||
; if running, run-jump
|
||||
; if down: if standing, crouch
|
||||
; if walking, crouch
|
||||
; if if running, slide-crouch
|
||||
|
||||
|
||||
handle_keypress:
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
bmi no_keypress ; ignore keypress if dying/action
|
||||
|
||||
lda KEYPRESS ; 4
|
||||
bmi keypress ; 3
|
||||
no_keypress:
|
||||
bit KEYRESET ; clear
|
||||
; avoid keeping old keys around
|
||||
rts ; nothing pressed, return
|
||||
|
||||
keypress:
|
||||
; -1
|
||||
|
||||
and #$7f ; clear high bit
|
||||
|
||||
;======================
|
||||
; check escape
|
||||
|
||||
check_quit:
|
||||
cmp #27 ; quit if ESCAPE pressed
|
||||
bne check_left
|
||||
|
||||
;=====================
|
||||
; QUIT
|
||||
;=====================
|
||||
quit:
|
||||
lda #$ff ; could just dec
|
||||
sta GAME_OVER
|
||||
rts
|
||||
|
||||
;======================
|
||||
; check left
|
||||
check_left:
|
||||
cmp #'A'
|
||||
beq left_pressed
|
||||
cmp #$8 ; left arrow
|
||||
bne check_right
|
||||
|
||||
|
||||
;====================
|
||||
;====================
|
||||
; Left/A Pressed
|
||||
;====================
|
||||
;====================
|
||||
left_pressed:
|
||||
inc GUN_FIRE ; fire gun if charging
|
||||
|
||||
; left==0
|
||||
lda DIRECTION ; if facing right, turn to face left
|
||||
bne left_going_right
|
||||
|
||||
left_going_left:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_STANDING
|
||||
beq walk_left
|
||||
cmp #P_SHOOTING
|
||||
beq walk_left
|
||||
cmp #P_WALKING
|
||||
beq run_left
|
||||
and #STATE_CROUCHING
|
||||
bne stand_left
|
||||
|
||||
;=============================
|
||||
; already running, do nothing?
|
||||
jmp done_keypress
|
||||
|
||||
left_going_right:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_RUNNING
|
||||
beq walk_right
|
||||
cmp #P_WALKING
|
||||
beq stand_right
|
||||
cmp #P_STANDING
|
||||
beq stand_left
|
||||
cmp #P_SHOOTING
|
||||
beq stand_left
|
||||
and #STATE_CROUCHING
|
||||
bne stand_left
|
||||
|
||||
;===========================
|
||||
; otherwise?
|
||||
jmp done_keypress
|
||||
|
||||
;========================
|
||||
; check for right pressed
|
||||
|
||||
check_right:
|
||||
cmp #'D'
|
||||
beq right_pressed
|
||||
cmp #$15
|
||||
bne check_up
|
||||
|
||||
;===================
|
||||
;===================
|
||||
; Right/D Pressed
|
||||
;===================
|
||||
;===================
|
||||
right_pressed:
|
||||
inc GUN_FIRE ; fire if charging
|
||||
|
||||
; right==1
|
||||
lda DIRECTION ; if facing left, turn to face right
|
||||
beq right_going_left
|
||||
|
||||
|
||||
right_going_right:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_STANDING
|
||||
beq walk_right
|
||||
cmp #P_SHOOTING
|
||||
beq walk_right
|
||||
cmp #P_WALKING
|
||||
beq run_right
|
||||
and #STATE_CROUCHING
|
||||
bne stand_right
|
||||
|
||||
;=============================
|
||||
; already running, do nothing?
|
||||
jmp done_keypress
|
||||
|
||||
right_going_left:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_RUNNING
|
||||
beq walk_left
|
||||
cmp #P_WALKING
|
||||
beq stand_left
|
||||
cmp #P_STANDING
|
||||
beq stand_right
|
||||
cmp #P_SHOOTING
|
||||
beq stand_right
|
||||
and #STATE_CROUCHING
|
||||
bne stand_right
|
||||
|
||||
|
||||
;===========================
|
||||
; otherwise?
|
||||
jmp done_keypress
|
||||
|
||||
|
||||
;=====================
|
||||
; Left, direction=0
|
||||
; Right, direction=1
|
||||
|
||||
stand_left:
|
||||
lda #0 ; left
|
||||
sta DIRECTION
|
||||
sta GAIT
|
||||
lda #P_STANDING
|
||||
beq update_state
|
||||
|
||||
walk_left:
|
||||
lda #P_WALKING
|
||||
bne update_state
|
||||
|
||||
run_left:
|
||||
lda #P_RUNNING
|
||||
bne update_state
|
||||
|
||||
|
||||
stand_right:
|
||||
lda #0
|
||||
sta GAIT
|
||||
lda #1 ; just inc DIRECTION?
|
||||
sta DIRECTION
|
||||
lda #P_STANDING
|
||||
beq update_state
|
||||
|
||||
walk_right:
|
||||
lda #P_WALKING
|
||||
bne update_state
|
||||
|
||||
run_right:
|
||||
lda #P_RUNNING
|
||||
bne update_state
|
||||
|
||||
update_state:
|
||||
sta PHYSICIST_STATE
|
||||
jmp done_keypress
|
||||
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
; check up
|
||||
|
||||
check_up:
|
||||
cmp #'W'
|
||||
beq up
|
||||
cmp #$0B
|
||||
bne check_down
|
||||
up:
|
||||
;=============================
|
||||
;=============================
|
||||
; Up/W Pressed -- Jump, Get up
|
||||
;=============================
|
||||
;=============================
|
||||
|
||||
lda PHYSICIST_STATE ; shoot if charging
|
||||
cmp #P_CROUCH_SHOOTING
|
||||
beq up_no_fire
|
||||
|
||||
inc GUN_FIRE
|
||||
up_no_fire:
|
||||
|
||||
lda ON_ELEVATOR
|
||||
beq up_not_elevator
|
||||
|
||||
up_on_elevator:
|
||||
lda #P_ELEVATING_UP
|
||||
jmp change_state_clear_gait
|
||||
|
||||
up_not_elevator:
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_CROUCHING
|
||||
beq stand_up
|
||||
cmp #P_CROUCH_SHOOTING
|
||||
beq stand_up_shoot
|
||||
cmp #P_RUNNING
|
||||
beq run_jump
|
||||
|
||||
up_jump:
|
||||
lda #P_JUMPING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
run_jump:
|
||||
lda #P_JUMPING|STATE_RUNNING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
stand_up:
|
||||
lda #P_STANDING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
stand_up_shoot:
|
||||
lda #P_SHOOTING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
|
||||
;==========================
|
||||
check_down:
|
||||
cmp #'S'
|
||||
beq down
|
||||
cmp #$0A
|
||||
bne check_gun
|
||||
|
||||
;==========================
|
||||
;==========================
|
||||
; Down/S Pressed -- Crouch
|
||||
;==========================
|
||||
;==========================
|
||||
down:
|
||||
|
||||
lda PHYSICIST_STATE ; shoot if charging
|
||||
cmp #P_SHOOTING
|
||||
beq down_no_fire
|
||||
|
||||
inc GUN_FIRE
|
||||
down_no_fire:
|
||||
|
||||
lda ON_ELEVATOR
|
||||
beq down_not_elevator
|
||||
|
||||
down_on_elevator:
|
||||
lda #P_ELEVATING_DOWN
|
||||
jmp change_state_clear_gait
|
||||
|
||||
down_not_elevator:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_SHOOTING
|
||||
bne start_crouch
|
||||
|
||||
start_crouch_shoot:
|
||||
and #STATE_RUNNING
|
||||
ora #P_CROUCH_SHOOTING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
start_crouch:
|
||||
and #STATE_RUNNING
|
||||
beq start_crouch_norun
|
||||
|
||||
ldx #4 ; slide a bit
|
||||
stx GAIT
|
||||
ora #P_CROUCHING
|
||||
sta PHYSICIST_STATE
|
||||
jmp done_keypress
|
||||
|
||||
start_crouch_norun:
|
||||
ora #P_CROUCHING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
|
||||
;==========================
|
||||
|
||||
check_gun:
|
||||
cmp #'L'
|
||||
bne check_space
|
||||
|
||||
;======================
|
||||
; 'L' to charge gun
|
||||
;======================
|
||||
charge_gun:
|
||||
lda HAVE_GUN ; only if have gun
|
||||
beq done_keypress
|
||||
|
||||
lda GUN_STATE
|
||||
beq not_already_firing
|
||||
|
||||
inc GUN_FIRE ; if charging, fire
|
||||
|
||||
jmp done_keypress
|
||||
|
||||
not_already_firing:
|
||||
|
||||
inc GUN_STATE
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
and #STATE_CROUCHING
|
||||
beq crouch_charge
|
||||
ldy #P_CROUCH_SHOOTING
|
||||
bne crouch_charge_go ; bra
|
||||
crouch_charge:
|
||||
ldy #P_SHOOTING
|
||||
crouch_charge_go:
|
||||
sty PHYSICIST_STATE
|
||||
|
||||
jmp shoot
|
||||
|
||||
|
||||
check_space:
|
||||
cmp #' '
|
||||
beq space
|
||||
; cmp #$15 ; ascii 21=??
|
||||
jmp unknown
|
||||
|
||||
;======================
|
||||
; SPACE -- Kick or shoot
|
||||
;======================
|
||||
space:
|
||||
lda HAVE_GUN
|
||||
beq kick
|
||||
|
||||
; shoot pressed
|
||||
|
||||
inc GUN_FIRE ; if charging, shoot
|
||||
shoot:
|
||||
lda PHYSICIST_STATE ; if in stance, then shoot
|
||||
cmp #P_SHOOTING
|
||||
beq in_position
|
||||
cmp #P_CROUCH_SHOOTING
|
||||
bne no_stance
|
||||
|
||||
in_position:
|
||||
lda #1
|
||||
sta LASER_OUT
|
||||
jmp done_keypress
|
||||
|
||||
no_stance:
|
||||
and #STATE_CROUCHING
|
||||
beq stand_stance
|
||||
|
||||
crouch_stance:
|
||||
lda #P_CROUCH_SHOOTING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
stand_stance:
|
||||
lda #P_SHOOTING
|
||||
jmp change_state_clear_gait
|
||||
|
||||
kick:
|
||||
bit PHYSICIST_STATE ; crouching state in V now
|
||||
bvc kick_standing
|
||||
|
||||
lda #P_CROUCH_KICKING
|
||||
jmp kick_final
|
||||
|
||||
kick_standing:
|
||||
lda #P_KICKING
|
||||
kick_final:
|
||||
sta PHYSICIST_STATE
|
||||
lda #15
|
||||
sta GAIT
|
||||
unknown:
|
||||
done_keypress:
|
||||
bit KEYRESET ; clear the keyboard strobe ; 4
|
||||
|
||||
rts ; 6
|
||||
|
||||
|
||||
change_state_clear_gait:
|
||||
sta PHYSICIST_STATE
|
||||
lda #0
|
||||
sta GAIT
|
||||
jmp done_keypress
|
395
another_myst/laser.s
Normal file
395
another_myst/laser.s
Normal file
@ -0,0 +1,395 @@
|
||||
; FIXME: merge a lot of the target code
|
||||
|
||||
; Handle laser
|
||||
|
||||
; should handle multiple at once?
|
||||
|
||||
; when pressed, find empty slot?
|
||||
; initially 10 wide, from gun to right or left
|
||||
; expand to 20 wide
|
||||
; stop when encounter door, enemy, or edge of screen
|
||||
; should bounds check carefully
|
||||
|
||||
; should handle shooting while crouching
|
||||
|
||||
; in general, 0 for physicist, 1/2 for alien
|
||||
|
||||
MAX_LASERS = 3
|
||||
|
||||
; 0=not out, else out. ff=can't hurt
|
||||
laser_out:
|
||||
laser0_out: .byte $0
|
||||
laser1_out: .byte $0
|
||||
laser2_out: .byte $0
|
||||
laser3_out: .byte $0
|
||||
|
||||
laser_start:
|
||||
laser0_start: .byte $0
|
||||
laser1_start: .byte $0
|
||||
laser2_start: .byte $0
|
||||
laser3_start: .byte $0
|
||||
|
||||
laser_end:
|
||||
laser0_end: .byte $0
|
||||
laser1_end: .byte $0
|
||||
laser2_end: .byte $0
|
||||
laser3_end: .byte $0
|
||||
|
||||
laser_y:
|
||||
laser0_y: .byte $0
|
||||
laser1_y: .byte $0
|
||||
laser2_y: .byte $0
|
||||
laser3_y: .byte $0
|
||||
|
||||
laser_direction:
|
||||
laser0_direction: .byte $0
|
||||
laser1_direction: .byte $0
|
||||
laser2_direction: .byte $0
|
||||
laser3_direction: .byte $0
|
||||
|
||||
laser_count:
|
||||
laser0_count: .byte $0
|
||||
laser1_count: .byte $0
|
||||
laser2_count: .byte $0
|
||||
laser3_count: .byte $0
|
||||
|
||||
;=========================
|
||||
; fire laser
|
||||
;=========================
|
||||
|
||||
fire_laser:
|
||||
lda PHYSICIST_X
|
||||
|
||||
; adjust so laser pokes out from shield
|
||||
|
||||
ldx DIRECTION ; 0=left, 1=right
|
||||
beq laser_facing_left
|
||||
|
||||
clc
|
||||
adc #5 ; only add 5 if facing right
|
||||
jmp laser_done_adjust
|
||||
|
||||
laser_facing_left:
|
||||
sec
|
||||
sbc #2 ; decrement 2 if facing left
|
||||
|
||||
laser_done_adjust:
|
||||
sta COLLISION_X
|
||||
|
||||
lda PHYSICIST_Y
|
||||
sta COLLISION_Y
|
||||
|
||||
lda laser0_out
|
||||
bne done_fire_laser
|
||||
|
||||
; activate laser slot
|
||||
|
||||
inc laser0_out
|
||||
|
||||
; reset count
|
||||
|
||||
lda #0
|
||||
sta laser0_count
|
||||
|
||||
; set y
|
||||
|
||||
lda PHYSICIST_Y
|
||||
clc
|
||||
adc #4
|
||||
|
||||
ldx PHYSICIST_STATE
|
||||
cpx #P_CROUCH_SHOOTING
|
||||
bne laser_crouch_done
|
||||
laser_crouch:
|
||||
clc
|
||||
adc #4
|
||||
laser_crouch_done:
|
||||
sta laser0_y
|
||||
|
||||
; set direction
|
||||
|
||||
lda DIRECTION
|
||||
sta laser0_direction
|
||||
|
||||
beq laser_left
|
||||
bne laser_right
|
||||
|
||||
; set x
|
||||
|
||||
laser_left:
|
||||
|
||||
jsr calc_gun_left_collision
|
||||
|
||||
ldx PHYSICIST_X
|
||||
dex
|
||||
stx laser0_end
|
||||
|
||||
txa
|
||||
sec
|
||||
sbc #10
|
||||
sta laser0_start
|
||||
|
||||
jmp done_fire_laser
|
||||
|
||||
laser_right:
|
||||
|
||||
jsr calc_gun_right_collision
|
||||
|
||||
lda PHYSICIST_X
|
||||
clc
|
||||
adc #5
|
||||
sta laser0_start
|
||||
|
||||
clc
|
||||
adc #10
|
||||
sta laser0_end
|
||||
|
||||
done_fire_laser:
|
||||
rts
|
||||
|
||||
|
||||
|
||||
|
||||
;====================
|
||||
; draw laser
|
||||
;====================
|
||||
|
||||
draw_laser:
|
||||
|
||||
ldx #0
|
||||
draw_laser_loop:
|
||||
lda laser_out,X
|
||||
beq done_draw_laser
|
||||
|
||||
txa
|
||||
pha ; save X on stack
|
||||
|
||||
lda #$10
|
||||
sta hlin_color_smc+1
|
||||
|
||||
lda #$0f
|
||||
sta hlin_mask_smc+1
|
||||
|
||||
ldy laser_y,X
|
||||
|
||||
sec
|
||||
lda laser_end,X
|
||||
sbc laser_start,X
|
||||
sta LASER_TEMP
|
||||
|
||||
lda laser_start,X
|
||||
|
||||
ldx LASER_TEMP
|
||||
|
||||
jsr hlin
|
||||
|
||||
pla ; restore X from stack
|
||||
tax
|
||||
|
||||
done_draw_laser:
|
||||
inx
|
||||
cpx #MAX_LASERS
|
||||
bne draw_laser_loop
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
;===================
|
||||
; move laser
|
||||
;===================
|
||||
move_laser:
|
||||
ldx #0
|
||||
|
||||
move_laser_loop:
|
||||
lda laser_out,X
|
||||
beq done_move_laser
|
||||
|
||||
; slow down laser
|
||||
lda laser_count,X
|
||||
and #$3
|
||||
bne no_move_laser
|
||||
|
||||
lda laser_direction,X
|
||||
bne move_laser_right
|
||||
|
||||
move_laser_left:
|
||||
|
||||
lda laser_count,X
|
||||
cmp #4
|
||||
bcc still_starting_left
|
||||
cmp #8
|
||||
bcc still_shooting_left
|
||||
|
||||
continue_shooting_left:
|
||||
still_shooting_left:
|
||||
|
||||
lda laser_end,X
|
||||
sec
|
||||
sbc #10
|
||||
sta laser_end,X
|
||||
|
||||
still_starting_left:
|
||||
|
||||
lda laser_start,X
|
||||
sec
|
||||
sbc #10
|
||||
sta laser_start,X
|
||||
|
||||
laser_edge_detect_left:
|
||||
|
||||
lda laser_end,X
|
||||
cmp LEFT_SHOOT_LIMIT
|
||||
bmi disable_laser_left
|
||||
|
||||
lda laser_start,X
|
||||
cmp LEFT_SHOOT_LIMIT
|
||||
bpl no_move_laser
|
||||
|
||||
lda LEFT_SHOOT_LIMIT
|
||||
sta laser_start,X
|
||||
|
||||
jmp no_move_laser
|
||||
|
||||
|
||||
move_laser_right:
|
||||
|
||||
lda laser_count,X
|
||||
cmp #4
|
||||
bcc still_starting_right
|
||||
cmp #8
|
||||
bcc still_shooting_right
|
||||
|
||||
continue_shooting_right:
|
||||
lda laser_start,X
|
||||
clc
|
||||
adc #10
|
||||
sta laser_start,X
|
||||
|
||||
still_shooting_right:
|
||||
lda laser_end,X
|
||||
clc
|
||||
adc #10
|
||||
sta laser_end,X
|
||||
|
||||
still_starting_right:
|
||||
|
||||
laser_edge_detect_right:
|
||||
|
||||
; detect if totally off screen
|
||||
lda laser_start,X
|
||||
cmp RIGHT_SHOOT_LIMIT
|
||||
bcs disable_laser_right
|
||||
|
||||
lda laser_end,X
|
||||
cmp RIGHT_SHOOT_LIMIT
|
||||
bcc no_move_laser
|
||||
|
||||
lda RIGHT_SHOOT_LIMIT
|
||||
sta laser_end,X
|
||||
|
||||
no_move_laser:
|
||||
inc laser_count,X
|
||||
|
||||
done_move_laser:
|
||||
inx
|
||||
cpx #MAX_LASERS
|
||||
bne move_laser_loop
|
||||
|
||||
rts
|
||||
|
||||
;===================
|
||||
; hit something, left
|
||||
;===================
|
||||
disable_laser_left:
|
||||
lda LEFT_SHOOT_TARGET
|
||||
jmp hit_something_common
|
||||
|
||||
;====================
|
||||
; hit something, right
|
||||
;====================
|
||||
disable_laser_right:
|
||||
|
||||
lda RIGHT_SHOOT_TARGET
|
||||
|
||||
|
||||
;======================
|
||||
; hit something, common
|
||||
;======================
|
||||
hit_something_common:
|
||||
pha
|
||||
|
||||
; disable laser
|
||||
lda #0
|
||||
sta laser_out,X
|
||||
|
||||
pla
|
||||
|
||||
tay
|
||||
and #$f0
|
||||
|
||||
cmp #TARGET_ALIEN
|
||||
beq laser_hit_alien
|
||||
|
||||
cmp #TARGET_FRIEND
|
||||
beq laser_hit_friend
|
||||
|
||||
cmp #TARGET_PHYSICIST
|
||||
beq laser_hit_physicist
|
||||
|
||||
; FIXME: reduce shields if hit them?
|
||||
|
||||
jmp done_hit_something
|
||||
|
||||
laser_hit_alien:
|
||||
|
||||
tya
|
||||
and #$f
|
||||
tay
|
||||
|
||||
lda #A_DISINTEGRATING
|
||||
sta alien_state,Y
|
||||
|
||||
lda #0
|
||||
sta alien_gait,Y
|
||||
|
||||
jmp done_hit_something
|
||||
|
||||
laser_hit_friend:
|
||||
|
||||
lda #F_DISINTEGRATING
|
||||
sta friend_state
|
||||
|
||||
lda #FAI_DISINTEGRATING
|
||||
sta friend_ai_state
|
||||
|
||||
lda #0
|
||||
sta friend_gait
|
||||
|
||||
jmp done_hit_something
|
||||
|
||||
laser_hit_physicist:
|
||||
|
||||
lda #P_DISINTEGRATING
|
||||
sta PHYSICIST_STATE
|
||||
|
||||
lda #0
|
||||
sta GAIT
|
||||
|
||||
done_hit_something:
|
||||
jmp done_move_laser
|
||||
; rts
|
||||
|
||||
|
||||
;===============
|
||||
; clear lasers
|
||||
;===============
|
||||
clear_lasers:
|
||||
ldx #MAX_LASERS
|
||||
lda #0
|
||||
clear_laser_loop:
|
||||
sta laser_out,X
|
||||
dex
|
||||
bne clear_laser_loop
|
||||
|
||||
rts
|
299
another_myst/ootw_c5_cave.s
Normal file
299
another_myst/ootw_c5_cave.s
Normal file
@ -0,0 +1,299 @@
|
||||
; Ootw Checkpoint5 -- Running around the Caves
|
||||
|
||||
|
||||
; call once before entering cave for first time
|
||||
ootw_cave_init:
|
||||
lda #0
|
||||
sta WHICH_CAVE
|
||||
sta BLASTED_WALL
|
||||
; yes you fall in facing left for some reason
|
||||
sta DIRECTION ; left
|
||||
sta NUM_DOORS
|
||||
|
||||
lda #1
|
||||
sta HAVE_GUN
|
||||
|
||||
lda #0
|
||||
sta PHYSICIST_X
|
||||
lda #24
|
||||
sta PHYSICIST_Y
|
||||
|
||||
;====================
|
||||
; reset doors
|
||||
lda #DOOR_STATUS_CLOSED
|
||||
sta c4_r0_door0_status
|
||||
|
||||
|
||||
rts
|
||||
|
||||
|
||||
;===========================
|
||||
; enter new room in cave
|
||||
;===========================
|
||||
|
||||
ootw_cave:
|
||||
|
||||
;==============================
|
||||
; each room init
|
||||
|
||||
|
||||
;==============================
|
||||
; setup per-room variables
|
||||
|
||||
lda WHICH_CAVE
|
||||
bne cave1
|
||||
|
||||
jsr init_shields
|
||||
|
||||
; Room0 entrance
|
||||
cave0:
|
||||
lda #(0+128)
|
||||
sta LEFT_LIMIT
|
||||
lda #(39+128)
|
||||
sta RIGHT_LIMIT
|
||||
|
||||
; set right exit
|
||||
lda #$ff
|
||||
sta cer_smc+1
|
||||
|
||||
; set left exit
|
||||
lda #0
|
||||
sta cel_smc+1
|
||||
|
||||
; set up doors
|
||||
|
||||
lda #1
|
||||
sta NUM_DOORS
|
||||
|
||||
lda #<door_c4_r0
|
||||
sta setup_door_table_loop_smc+1
|
||||
lda #>door_c4_r0
|
||||
sta setup_door_table_loop_smc+2
|
||||
jsr setup_door_table
|
||||
|
||||
not_falling_in:
|
||||
lda #24
|
||||
sta PHYSICIST_Y
|
||||
|
||||
; load background
|
||||
lda #>(temple_center_w_rle)
|
||||
sta GBASH
|
||||
lda #<(temple_center_w_rle)
|
||||
sta GBASL
|
||||
lda #$c ; load to page $c00
|
||||
jsr load_rle_gr ; tail call
|
||||
|
||||
;=====================
|
||||
; setup walk collision
|
||||
jsr recalc_walk_collision
|
||||
|
||||
|
||||
cave1:
|
||||
|
||||
ootw_cave_already_set:
|
||||
;===========================
|
||||
; Enable graphics
|
||||
|
||||
bit LORES
|
||||
bit SET_GR
|
||||
bit FULLGR
|
||||
|
||||
;===========================
|
||||
; Setup pages (is this necessary?)
|
||||
|
||||
lda #0
|
||||
sta DRAW_PAGE
|
||||
lda #1
|
||||
sta DISP_PAGE
|
||||
|
||||
;=================================
|
||||
; setup vars
|
||||
|
||||
lda #0
|
||||
sta GAIT
|
||||
sta GAME_OVER
|
||||
|
||||
;============================
|
||||
;============================
|
||||
; Cave Loop
|
||||
;============================
|
||||
;============================
|
||||
cave_loop:
|
||||
|
||||
;================================
|
||||
; copy background to current page
|
||||
|
||||
jsr gr_copy_to_current
|
||||
|
||||
;==================================
|
||||
; draw background action
|
||||
|
||||
lda WHICH_CAVE
|
||||
|
||||
bg_cave0:
|
||||
|
||||
|
||||
c5_no_bg_action:
|
||||
|
||||
;============================
|
||||
; switch bg if exploded
|
||||
|
||||
lda BLASTED_WALL
|
||||
cmp #1
|
||||
bne wall_good
|
||||
|
||||
; load background
|
||||
lda #>(temple_center_ex_rle)
|
||||
sta GBASH
|
||||
lda #<(temple_center_ex_rle)
|
||||
sta GBASL
|
||||
lda #$c ; load to page $c00
|
||||
jsr load_rle_gr ; tail call
|
||||
|
||||
inc BLASTED_WALL
|
||||
wall_good:
|
||||
|
||||
;===============================
|
||||
; check keyboard
|
||||
|
||||
jsr handle_keypress
|
||||
|
||||
;===============================
|
||||
; move physicist
|
||||
;===============================
|
||||
|
||||
jsr move_physicist
|
||||
|
||||
;===============
|
||||
; check room limits
|
||||
|
||||
jsr check_screen_limit
|
||||
|
||||
;=================
|
||||
; adjust floor
|
||||
|
||||
|
||||
check_floor0_done:
|
||||
|
||||
check_floor1:
|
||||
|
||||
|
||||
;===============
|
||||
; draw physicist
|
||||
|
||||
jsr draw_physicist
|
||||
|
||||
|
||||
;===============
|
||||
; handle gun
|
||||
|
||||
jsr handle_gun
|
||||
|
||||
|
||||
;===============
|
||||
; handle doors
|
||||
|
||||
jsr handle_doors
|
||||
|
||||
;=========
|
||||
; jsr draw_doors
|
||||
|
||||
;========================
|
||||
; draw foreground action
|
||||
|
||||
c5_no_fg_action:
|
||||
|
||||
|
||||
|
||||
;================
|
||||
; move fg objects
|
||||
;================
|
||||
|
||||
|
||||
|
||||
;===============
|
||||
; page flip
|
||||
|
||||
jsr page_flip
|
||||
|
||||
;================
|
||||
; inc frame count
|
||||
|
||||
inc FRAMEL
|
||||
bne cave_frame_no_oflo
|
||||
inc FRAMEH
|
||||
cave_frame_no_oflo:
|
||||
|
||||
;==========================
|
||||
; check if done this level
|
||||
;==========================
|
||||
|
||||
lda GAME_OVER
|
||||
beq still_in_cave
|
||||
|
||||
cmp #$ff ; if $ff, we died
|
||||
beq done_cave
|
||||
|
||||
;===============================
|
||||
; check if exited room to right
|
||||
cmp #1
|
||||
beq cave_exit_left
|
||||
|
||||
;=================
|
||||
; exit to right
|
||||
|
||||
cave_right_yes_exit:
|
||||
|
||||
lda #0
|
||||
sta PHYSICIST_X
|
||||
cer_smc:
|
||||
lda #$0 ; smc+1 = exit location
|
||||
sta WHICH_CAVE
|
||||
jmp done_cave
|
||||
|
||||
;=====================
|
||||
; exit to left
|
||||
|
||||
cave_exit_left:
|
||||
|
||||
lda #37
|
||||
sta PHYSICIST_X
|
||||
cel_smc:
|
||||
lda #0 ; smc+1
|
||||
sta WHICH_CAVE
|
||||
jmp done_cave
|
||||
|
||||
; loop forever
|
||||
still_in_cave:
|
||||
lda #0
|
||||
sta GAME_OVER
|
||||
|
||||
jmp cave_loop
|
||||
|
||||
done_cave:
|
||||
rts
|
||||
|
||||
|
||||
door_c4_r0:
|
||||
.word door_c4_r0_status
|
||||
.word door_c4_r0_x
|
||||
.word door_c4_r0_y
|
||||
.word door_c4_r0_xmin
|
||||
.word door_c4_r0_xmax
|
||||
|
||||
door_c4_r0_status:
|
||||
c4_r0_door0_status: .byte DOOR_STATUS_CLOSED
|
||||
|
||||
door_c4_r0_x:
|
||||
c4_r0_door0_x: .byte 19
|
||||
|
||||
door_c4_r0_y:
|
||||
c4_r0_door0_y: .byte 20
|
||||
|
||||
door_c4_r0_xmin:
|
||||
c4_r0_door0_xmin: .byte 11 ; 7-4-5
|
||||
|
||||
door_c4_r0_xmax:
|
||||
c4_r0_door0_xmax: .byte 24 ; 7+4
|
||||
|
||||
|
BIN
another_myst/ootw_graphics/temple_center_ex.png
Normal file
BIN
another_myst/ootw_graphics/temple_center_ex.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
BIN
another_myst/ootw_graphics/temple_center_w.png
Normal file
BIN
another_myst/ootw_graphics/temple_center_w.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
696
another_myst/physicist.s
Normal file
696
another_myst/physicist.s
Normal file
@ -0,0 +1,696 @@
|
||||
;=======================================
|
||||
; Move physicist based on current state
|
||||
;
|
||||
|
||||
move_physicist:
|
||||
lda PHYSICIST_STATE
|
||||
cmp #P_WALKING
|
||||
beq move_physicist_walking
|
||||
cmp #P_RUNNING
|
||||
beq move_physicist_running
|
||||
rts
|
||||
|
||||
;======================
|
||||
; walking
|
||||
|
||||
move_physicist_walking:
|
||||
inc GAIT ; cycle through animation
|
||||
|
||||
lda GAIT
|
||||
and #$7
|
||||
cmp #$4 ; only walk roughly 1/8 of time
|
||||
bne no_move_walk
|
||||
|
||||
lda DIRECTION
|
||||
beq p_walk_left
|
||||
|
||||
inc PHYSICIST_X ; walk right
|
||||
rts
|
||||
p_walk_left:
|
||||
dec PHYSICIST_X ; walk left
|
||||
no_move_walk:
|
||||
rts
|
||||
|
||||
;======================
|
||||
; running
|
||||
move_physicist_running:
|
||||
; inc GAIT ; cycle through animation
|
||||
inc GAIT ; cycle through animation
|
||||
|
||||
lda GAIT
|
||||
and #$3
|
||||
cmp #$2 ; only run roughly 1/4 of time
|
||||
bne no_move_run
|
||||
|
||||
lda DIRECTION
|
||||
beq p_run_left
|
||||
|
||||
inc PHYSICIST_X ; run right
|
||||
rts
|
||||
p_run_left:
|
||||
dec PHYSICIST_X ; run left
|
||||
no_move_run:
|
||||
rts
|
||||
;======================
|
||||
; standing
|
||||
|
||||
move_physicist_standing:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
pstate_table_lo:
|
||||
.byte <physicist_standing ; 00
|
||||
.byte <physicist_walking ; 01
|
||||
.byte <physicist_running ; 02
|
||||
.byte <physicist_crouching ; 03
|
||||
.byte <physicist_kicking ; 04
|
||||
.byte <physicist_jumping ; 05
|
||||
.byte <physicist_collapsing ; 06
|
||||
.byte <physicist_falling_sideways; 07
|
||||
.byte <physicist_standing ; 08 swinging
|
||||
.byte <physicist_standing ; 09 elevator up
|
||||
.byte <physicist_standing ; 0A elevator down
|
||||
.byte <physicist_shooting ; 0B
|
||||
.byte <physicist_falling_down ; 0C
|
||||
.byte <physicist_impaled ; 0D
|
||||
.byte <physicist_crouch_shooting; 0E
|
||||
.byte <physicist_crouch_kicking ; 0F
|
||||
.byte <physicist_disintegrating ; 10
|
||||
|
||||
|
||||
pstate_table_hi:
|
||||
.byte >physicist_standing
|
||||
.byte >physicist_walking
|
||||
.byte >physicist_running
|
||||
.byte >physicist_crouching
|
||||
.byte >physicist_kicking
|
||||
.byte >physicist_jumping
|
||||
.byte >physicist_collapsing
|
||||
.byte >physicist_falling_sideways
|
||||
.byte >physicist_standing ; 08 swinging
|
||||
.byte >physicist_standing ; 09 elevator up
|
||||
.byte >physicist_standing ; 0A elevator down
|
||||
.byte >physicist_shooting ; 0B
|
||||
.byte >physicist_falling_down ; 0C
|
||||
.byte >physicist_impaled ; 0D
|
||||
.byte >physicist_crouch_shooting; 0E
|
||||
.byte >physicist_crouch_kicking ; 0F
|
||||
.byte >physicist_disintegrating ; 10
|
||||
|
||||
; Urgh, make sure this doesn't end up at $FF or you hit the
|
||||
; NMOS 6502 bug
|
||||
|
||||
.align 2
|
||||
|
||||
pjump:
|
||||
.word $0000
|
||||
|
||||
.align 1
|
||||
|
||||
;======================================
|
||||
; draw physicist
|
||||
;======================================
|
||||
|
||||
draw_physicist:
|
||||
|
||||
lda PHYSICIST_STATE
|
||||
and #$1f ; mask off high state bits
|
||||
tax
|
||||
lda pstate_table_lo,x
|
||||
sta pjump
|
||||
lda pstate_table_hi,x
|
||||
sta pjump+1
|
||||
jmp (pjump)
|
||||
|
||||
|
||||
;==================================
|
||||
; STANDING
|
||||
;==================================
|
||||
|
||||
physicist_standing:
|
||||
|
||||
lda #<phys_stand
|
||||
sta INL
|
||||
|
||||
lda #>phys_stand
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;==================================
|
||||
; SHOOTING
|
||||
;==================================
|
||||
|
||||
physicist_shooting:
|
||||
|
||||
lda #<shooting1
|
||||
sta INL
|
||||
|
||||
lda #>shooting1
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
;==================================
|
||||
; KICKING
|
||||
;==================================
|
||||
|
||||
physicist_kicking:
|
||||
lda #<kick1
|
||||
sta INL
|
||||
|
||||
lda #>kick1
|
||||
sta INH
|
||||
|
||||
; If kicking long enough, return to standing
|
||||
|
||||
dec GAIT
|
||||
bne short_draw
|
||||
|
||||
lda #P_STANDING
|
||||
sta PHYSICIST_STATE
|
||||
|
||||
short_draw:
|
||||
jmp finally_draw_him
|
||||
|
||||
;===================================
|
||||
; CROUCHING
|
||||
;===================================
|
||||
|
||||
physicist_crouching:
|
||||
|
||||
; FIXME: we have an animation?
|
||||
|
||||
; if we have some gait left, slide a bit
|
||||
lda GAIT
|
||||
beq crouch_done_slide
|
||||
|
||||
dec GAIT
|
||||
bne crouch_done_slide
|
||||
|
||||
lda DIRECTION
|
||||
beq p_slide_left
|
||||
inc PHYSICIST_X
|
||||
jmp crouch_done_slide
|
||||
p_slide_left:
|
||||
dec PHYSICIST_X
|
||||
|
||||
crouch_done_slide:
|
||||
|
||||
lda #<crouch2
|
||||
sta INL
|
||||
|
||||
lda #>crouch2
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;===================================
|
||||
; CROUCH KICKING
|
||||
;===================================
|
||||
|
||||
physicist_crouch_kicking:
|
||||
|
||||
dec GAIT
|
||||
lda GAIT
|
||||
bpl still_kicking
|
||||
|
||||
lda #P_CROUCHING
|
||||
sta PHYSICIST_STATE
|
||||
|
||||
still_kicking:
|
||||
|
||||
lda #<crouch_kicking
|
||||
sta INL
|
||||
|
||||
lda #>crouch_kicking
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;===================================
|
||||
; CROUCH SHOOTING
|
||||
;===================================
|
||||
|
||||
physicist_crouch_shooting:
|
||||
|
||||
lda #<crouch_shooting
|
||||
sta INL
|
||||
|
||||
lda #>crouch_shooting
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
;===================================
|
||||
; JUMPING
|
||||
;===================================
|
||||
|
||||
physicist_jumping:
|
||||
|
||||
lda GAIT
|
||||
cmp #32
|
||||
bcc still_jumping ; blt
|
||||
|
||||
; done juming
|
||||
lda #STATE_RUNNING
|
||||
bit PHYSICIST_STATE
|
||||
beq jump_to_stand
|
||||
|
||||
jump_to_run:
|
||||
lda #0
|
||||
sta GAIT
|
||||
lda #P_RUNNING
|
||||
sta PHYSICIST_STATE
|
||||
jmp physicist_running
|
||||
|
||||
jump_to_stand:
|
||||
lda #0
|
||||
sta GAIT
|
||||
lda #P_STANDING
|
||||
sta PHYSICIST_STATE
|
||||
jmp physicist_standing
|
||||
|
||||
still_jumping:
|
||||
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tax
|
||||
|
||||
lda phys_jump_progression,X
|
||||
sta INL
|
||||
|
||||
lda phys_jump_progression+1,X
|
||||
sta INH
|
||||
|
||||
inc GAIT
|
||||
|
||||
lda #STATE_RUNNING
|
||||
bit PHYSICIST_STATE
|
||||
beq jump_change_x_regular
|
||||
|
||||
jump_change_x_running:
|
||||
lda GAIT
|
||||
; 1/4 not enough, 1/2 too much
|
||||
; 3/8?
|
||||
and #$7
|
||||
cmp #5
|
||||
bcc jump_no_move
|
||||
jmp jump_change_x
|
||||
|
||||
; only change X every 8th frame
|
||||
jump_change_x_regular:
|
||||
lda GAIT
|
||||
and #$7
|
||||
bne jump_no_move
|
||||
jump_change_x:
|
||||
lda DIRECTION
|
||||
beq jump_left
|
||||
|
||||
jump_right:
|
||||
inc PHYSICIST_X
|
||||
jmp finally_draw_him
|
||||
|
||||
jump_left:
|
||||
dec PHYSICIST_X
|
||||
|
||||
jump_no_move:
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
|
||||
;===============================
|
||||
; Walking
|
||||
;================================
|
||||
|
||||
physicist_walking:
|
||||
lda GAIT
|
||||
cmp #40
|
||||
bcc gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta GAIT
|
||||
|
||||
gait_fine:
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tax
|
||||
|
||||
lda phys_walk_progression,X
|
||||
sta INL
|
||||
|
||||
lda phys_walk_progression+1,X
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;===============================
|
||||
; Running
|
||||
;================================
|
||||
|
||||
physicist_running:
|
||||
lda GAIT
|
||||
cmp #40
|
||||
bcc run_gait_fine ; blt
|
||||
|
||||
lda #0
|
||||
sta GAIT
|
||||
|
||||
run_gait_fine:
|
||||
lsr
|
||||
and #$fe
|
||||
|
||||
tax
|
||||
|
||||
lda phys_run_progression,X
|
||||
sta INL
|
||||
|
||||
lda phys_run_progression+1,X
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
;==================================
|
||||
; COLLAPSING
|
||||
;==================================
|
||||
|
||||
physicist_collapsing:
|
||||
|
||||
lda GAIT
|
||||
cmp #18
|
||||
bne collapse_not_done
|
||||
|
||||
really_dead:
|
||||
lda #$ff
|
||||
sta GAME_OVER
|
||||
jmp finally_draw_him
|
||||
|
||||
collapse_not_done:
|
||||
|
||||
ldx GAIT
|
||||
|
||||
lda collapse_progression,X
|
||||
sta INL
|
||||
lda collapse_progression+1,X
|
||||
sta INH
|
||||
|
||||
lda FRAMEL
|
||||
and #$1f
|
||||
bne no_collapse_progress
|
||||
|
||||
inc GAIT
|
||||
inc GAIT
|
||||
|
||||
no_collapse_progress:
|
||||
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;==================================
|
||||
; DISINTEGRATING
|
||||
;==================================
|
||||
|
||||
physicist_disintegrating:
|
||||
|
||||
lda GAIT
|
||||
cmp #28
|
||||
bne disintegrate_not_done
|
||||
|
||||
disintegrate_really_dead:
|
||||
lda #$ff
|
||||
sta GAME_OVER
|
||||
jmp finally_draw_him
|
||||
|
||||
disintegrate_not_done:
|
||||
|
||||
ldx GAIT
|
||||
|
||||
lda disintegrate_progression,X
|
||||
sta INL
|
||||
lda disintegrate_progression+1,X
|
||||
sta INH
|
||||
|
||||
lda FRAMEL
|
||||
and #$7
|
||||
bne no_disintegrate_progress
|
||||
|
||||
inc GAIT
|
||||
inc GAIT
|
||||
|
||||
no_disintegrate_progress:
|
||||
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
|
||||
;==================================
|
||||
; FALLING SIDEWAYS
|
||||
;==================================
|
||||
|
||||
physicist_falling_sideways:
|
||||
|
||||
|
||||
lda FRAMEL
|
||||
and #$3
|
||||
bne no_fall_progress
|
||||
|
||||
inc PHYSICIST_X
|
||||
inc PHYSICIST_Y ; must me mul of 2
|
||||
inc PHYSICIST_Y
|
||||
|
||||
no_fall_progress:
|
||||
|
||||
lda PHYSICIST_Y
|
||||
fall_sideways_destination_smc:
|
||||
cmp #22
|
||||
bne still_falling
|
||||
done_falling:
|
||||
; lda #0
|
||||
; sta GAIT
|
||||
|
||||
lda #P_CROUCHING
|
||||
sta PHYSICIST_STATE
|
||||
jmp physicist_crouching
|
||||
|
||||
still_falling:
|
||||
|
||||
lda #<phys_falling
|
||||
sta INL
|
||||
|
||||
lda #>phys_falling
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
;==================================
|
||||
; FALLING DOWN
|
||||
;==================================
|
||||
|
||||
physicist_falling_down:
|
||||
|
||||
falling_stop_smc: ; $2C to fall, $4C for not
|
||||
bit still_falling_down
|
||||
|
||||
lda FRAMEL
|
||||
and #$1
|
||||
bne no_fall_down_progress
|
||||
|
||||
inc PHYSICIST_Y ; must be mul of 2
|
||||
inc PHYSICIST_Y
|
||||
|
||||
no_fall_down_progress:
|
||||
|
||||
lda PHYSICIST_Y
|
||||
fall_down_destination_smc:
|
||||
cmp #22
|
||||
bne still_falling_down
|
||||
done_falling_down:
|
||||
|
||||
jsr recalc_walk_collision
|
||||
|
||||
lda #P_CROUCHING
|
||||
sta PHYSICIST_STATE
|
||||
jmp physicist_crouching
|
||||
|
||||
still_falling_down:
|
||||
|
||||
lda #<phys_stand
|
||||
sta INL
|
||||
|
||||
lda #>phys_stand
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
|
||||
|
||||
;==================================
|
||||
; IMPALED
|
||||
;==================================
|
||||
|
||||
physicist_impaled:
|
||||
|
||||
lda GAIT
|
||||
cmp #$80
|
||||
bne impale_not_done
|
||||
|
||||
impale_really_dead:
|
||||
lda #$ff
|
||||
sta GAME_OVER
|
||||
jmp finally_draw_him
|
||||
|
||||
impale_not_done:
|
||||
|
||||
cmp #2 ; slide down one more
|
||||
bne impale_enough
|
||||
inc PHYSICIST_Y
|
||||
inc PHYSICIST_Y
|
||||
|
||||
impale_enough:
|
||||
inc GAIT
|
||||
|
||||
lda #<physicist_spike_sprite
|
||||
sta INL
|
||||
|
||||
lda #>physicist_spike_sprite
|
||||
sta INH
|
||||
|
||||
jmp finally_draw_him
|
||||
|
||||
;=============================
|
||||
; Actually Draw Him
|
||||
;=============================
|
||||
|
||||
|
||||
finally_draw_him:
|
||||
lda PHYSICIST_X
|
||||
sta XPOS
|
||||
|
||||
lda PHYSICIST_Y
|
||||
sec
|
||||
sbc EARTH_OFFSET ; adjust for earthquakes
|
||||
sta YPOS
|
||||
|
||||
lda DIRECTION
|
||||
bne facing_right
|
||||
|
||||
facing_left:
|
||||
jmp put_sprite_crop
|
||||
|
||||
facing_right:
|
||||
jmp put_sprite_flipped_crop
|
||||
|
||||
|
||||
|
||||
;======================================
|
||||
;======================================
|
||||
; Check screen limits
|
||||
;======================================
|
||||
;======================================
|
||||
; If too far right or left, stop at boundary
|
||||
; If also > 39 or < -4 then exit room
|
||||
|
||||
check_screen_limit:
|
||||
|
||||
clc
|
||||
lda PHYSICIST_X
|
||||
adc #$80
|
||||
cmp LEFT_WALK_LIMIT
|
||||
bcs just_fine_left ; (bge==bcs)
|
||||
|
||||
left_on_screen:
|
||||
|
||||
; if limit was -4, means we are off screen
|
||||
; otherwise, stop physicist at limit
|
||||
|
||||
lda LEFT_WALK_LIMIT
|
||||
cmp #($80 - 4)
|
||||
beq too_far_left
|
||||
|
||||
left_stop_at_barrier:
|
||||
lda #0
|
||||
sta PHYSICIST_STATE
|
||||
|
||||
lda LEFT_WALK_LIMIT
|
||||
sec
|
||||
sbc #$7f
|
||||
sta PHYSICIST_X
|
||||
|
||||
rts
|
||||
|
||||
too_far_left:
|
||||
lda #1
|
||||
sta GAME_OVER
|
||||
rts
|
||||
|
||||
just_fine_left:
|
||||
|
||||
; Check right edge of screen
|
||||
|
||||
; lda PHYSICIST_X
|
||||
cmp RIGHT_WALK_LIMIT
|
||||
bcc just_fine_right ; blt
|
||||
|
||||
|
||||
right_on_screen:
|
||||
|
||||
; if limit was 39, means we are off screen
|
||||
; otherwise, stop physicist at limit
|
||||
|
||||
lda RIGHT_WALK_LIMIT
|
||||
cmp #($80 + 39)
|
||||
beq too_far_right
|
||||
|
||||
right_stop_at_barrier:
|
||||
lda #0
|
||||
sta PHYSICIST_STATE
|
||||
|
||||
lda RIGHT_WALK_LIMIT
|
||||
clc
|
||||
adc #$7f
|
||||
sta PHYSICIST_X
|
||||
rts
|
||||
|
||||
too_far_right:
|
||||
lda #2
|
||||
sta GAME_OVER
|
||||
|
||||
just_fine_right:
|
||||
|
||||
rts
|
||||
|
||||
|
||||
|
||||
; LIMIT VALUE FLAGS
|
||||
; 0 10 -----
|
||||
; 0 0 Z----
|
||||
; 0 FF
|
||||
|
||||
|
||||
; 1 -> 129
|
||||
; 0 -> 128
|
||||
; -1 -> 127 FF + 80 = 7f
|
||||
|
||||
|
||||
|
||||
; XPOS XSIZE XMAX
|
||||
; -5 8 3
|
||||
; -4 4
|
||||
; -3 5
|
||||
; -2 6
|
||||
; -1 7
|
||||
; 0 8
|
||||
; 1 9
|
||||
; 2
|
||||
; 3
|
||||
; 4
|
||||
; 5
|
294
another_myst/shield.s
Normal file
294
another_myst/shield.s
Normal file
@ -0,0 +1,294 @@
|
||||
; Handle shield
|
||||
|
||||
; when pressed, find empty slot? Up to 3?
|
||||
; gradually expire, flash when done
|
||||
; should update the laser range when start/stop
|
||||
; destroyed by blast. Weakened by laser?
|
||||
|
||||
MAX_SHIELDS = 3
|
||||
|
||||
shield_out:
|
||||
shield0_out: .byte $0
|
||||
shield1_out: .byte $0
|
||||
shield2_out: .byte $0
|
||||
|
||||
shield_x:
|
||||
shield0_x: .byte $0
|
||||
shield1_x: .byte $0
|
||||
shield2_x: .byte $0
|
||||
|
||||
shield_y:
|
||||
shield0_y: .byte $0
|
||||
shield1_y: .byte $0
|
||||
shield2_y: .byte $0
|
||||
|
||||
shield_count:
|
||||
shield0_count: .byte $0
|
||||
shield1_count: .byte $0
|
||||
shield2_count: .byte $0
|
||||
|
||||
;=========================
|
||||
; activate_shield
|
||||
;=========================
|
||||
|
||||
activate_shield:
|
||||
|
||||
lda SHIELD_OUT
|
||||
cmp #MAX_SHIELDS
|
||||
beq done_activate_shield
|
||||
|
||||
; find slot
|
||||
ldx #0
|
||||
activate_shield_loop:
|
||||
lda shield_out,X
|
||||
beq found_shield_slot
|
||||
inx
|
||||
bne activate_shield_loop ; bra
|
||||
|
||||
found_shield_slot:
|
||||
|
||||
; take the slot
|
||||
|
||||
inc SHIELD_OUT
|
||||
inc shield_out,X
|
||||
|
||||
; reset count
|
||||
|
||||
lda #0
|
||||
sta shield_count,X
|
||||
|
||||
; set y
|
||||
|
||||
lda PHYSICIST_Y
|
||||
sta shield_y,X
|
||||
|
||||
; set x
|
||||
lda DIRECTION
|
||||
bne shield_right
|
||||
|
||||
shield_left:
|
||||
|
||||
ldy PHYSICIST_X
|
||||
dey
|
||||
tya
|
||||
sta shield_x,X
|
||||
|
||||
jmp done_activate_shield
|
||||
|
||||
shield_right:
|
||||
|
||||
lda PHYSICIST_X
|
||||
clc
|
||||
adc #5
|
||||
sta shield_x,X
|
||||
|
||||
done_activate_shield:
|
||||
rts
|
||||
|
||||
|
||||
;====================
|
||||
; draw shields
|
||||
;====================
|
||||
|
||||
draw_shields:
|
||||
|
||||
lda SHIELD_OUT
|
||||
beq done_draw_shields
|
||||
|
||||
ldx #0
|
||||
|
||||
draw_shields_loop:
|
||||
|
||||
lda shield_out,X
|
||||
beq draw_shields_loop_continue
|
||||
|
||||
lda shield_x,X
|
||||
sta XPOS
|
||||
lda shield_y,X
|
||||
sta YPOS
|
||||
|
||||
ldy shield_count,X
|
||||
|
||||
lda shield_progression,Y
|
||||
bmi destroy_shield
|
||||
|
||||
tay
|
||||
|
||||
lda FRAMEL
|
||||
and #$7
|
||||
bne dont_increment_shield
|
||||
|
||||
inc shield_count,X
|
||||
|
||||
dont_increment_shield:
|
||||
|
||||
lda shield_table_lo,Y
|
||||
sta INL
|
||||
lda shield_table_hi,Y
|
||||
sta INH
|
||||
|
||||
txa
|
||||
pha
|
||||
|
||||
jsr put_sprite
|
||||
|
||||
pla
|
||||
tax
|
||||
jmp draw_shields_loop_continue
|
||||
|
||||
destroy_shield:
|
||||
lda #0
|
||||
sta shield_out,X
|
||||
dec SHIELD_OUT
|
||||
|
||||
draw_shields_loop_continue:
|
||||
inx
|
||||
cpx #MAX_SHIELDS
|
||||
bne draw_shields_loop
|
||||
|
||||
done_draw_shields:
|
||||
|
||||
rts
|
||||
|
||||
;====================
|
||||
; init shields
|
||||
;====================
|
||||
|
||||
init_shields:
|
||||
|
||||
ldx #0
|
||||
stx SHIELD_OUT
|
||||
init_shields_loop:
|
||||
|
||||
lda #0
|
||||
sta shield_out,X
|
||||
|
||||
inx
|
||||
cpx #MAX_SHIELDS
|
||||
bne init_shields_loop
|
||||
|
||||
rts
|
||||
|
||||
shield_progression:
|
||||
.byte 0,1
|
||||
.byte 2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3
|
||||
.byte 2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3,2,3
|
||||
.byte 4,5,4,5,4,5,4,5,4,5,4,5
|
||||
.byte 4,5,4,5,4,5,4,5,4,5,4,5
|
||||
.byte 6,7,6,7,6,7,6,7
|
||||
.byte 6,7,6,7,6,7,6,7
|
||||
.byte 0
|
||||
.byte $FF
|
||||
|
||||
shield_table_hi:
|
||||
.byte >shield_flash_sprite ; 0
|
||||
.byte >shield_start_sprite ; 1
|
||||
.byte >shield_high1_sprite ; 2
|
||||
.byte >shield_high2_sprite ; 3
|
||||
.byte >shield_medium1_sprite ; 4
|
||||
.byte >shield_medium2_sprite ; 5
|
||||
.byte >shield_low1_sprite ; 6
|
||||
.byte >shield_low2_sprite ; 7
|
||||
|
||||
shield_table_lo:
|
||||
.byte <shield_flash_sprite
|
||||
.byte <shield_start_sprite
|
||||
.byte <shield_high1_sprite
|
||||
.byte <shield_high2_sprite
|
||||
.byte <shield_medium1_sprite
|
||||
.byte <shield_medium2_sprite
|
||||
.byte <shield_low1_sprite
|
||||
.byte <shield_low2_sprite
|
||||
|
||||
|
||||
|
||||
|
||||
shield_flash_sprite:
|
||||
.byte 1,8
|
||||
.byte $f3
|
||||
.byte $ff
|
||||
.byte $ff
|
||||
.byte $ff
|
||||
.byte $ff
|
||||
.byte $3f
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
|
||||
shield_start_sprite:
|
||||
.byte 1,8
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
.byte $11
|
||||
|
||||
shield_high1_sprite:
|
||||
.byte 1,8
|
||||
.byte $BA
|
||||
.byte $3A
|
||||
.byte $A1
|
||||
.byte $A1
|
||||
.byte $BA
|
||||
.byte $A3
|
||||
.byte $BA
|
||||
.byte $13
|
||||
|
||||
shield_high2_sprite:
|
||||
.byte 1,8
|
||||
.byte $3A
|
||||
.byte $1A
|
||||
.byte $3A
|
||||
.byte $AA
|
||||
.byte $AB
|
||||
.byte $3A
|
||||
.byte $1B
|
||||
.byte $3A
|
||||
|
||||
shield_medium1_sprite:
|
||||
.byte 1,8
|
||||
.byte $A1
|
||||
.byte $AA
|
||||
.byte $1B
|
||||
.byte $AA
|
||||
.byte $A3
|
||||
.byte $AA
|
||||
.byte $3A
|
||||
.byte $BA
|
||||
|
||||
shield_medium2_sprite:
|
||||
.byte 1,8
|
||||
.byte $AB
|
||||
.byte $AA
|
||||
.byte $A3
|
||||
.byte $A3
|
||||
.byte $AA
|
||||
.byte $B3
|
||||
.byte $AA
|
||||
.byte $1A
|
||||
|
||||
shield_low1_sprite:
|
||||
.byte 1,8
|
||||
.byte $A3
|
||||
.byte $AB
|
||||
.byte $AA
|
||||
.byte $3A
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $1A
|
||||
.byte $AA
|
||||
|
||||
shield_low2_sprite:
|
||||
.byte 1,8
|
||||
.byte $A1
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $A1
|
||||
.byte $AA
|
||||
.byte $AA
|
||||
.byte $A3
|
||||
.byte $AB
|
||||
|
||||
|
600
another_myst/sprites/alien.inc
Normal file
600
another_myst/sprites/alien.inc
Normal file
@ -0,0 +1,600 @@
|
||||
; note, for some reason these are all facing left
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; STANDING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
;====================
|
||||
; Going Left
|
||||
|
||||
alien_stand:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$10,$77,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$a5,$5a
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$0a,$00,$0a,$00
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; WALKING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_walk_progression:
|
||||
.word alien_walk_left1
|
||||
.word alien_walk_left2
|
||||
.word alien_walk_left3
|
||||
.word alien_walk_left4
|
||||
.word alien_walk_left5
|
||||
.word alien_walk_left6
|
||||
.word alien_walk_left7
|
||||
.word alien_walk_left8
|
||||
|
||||
|
||||
|
||||
|
||||
alien_walk_left1:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$5a,$00,$77,$aa
|
||||
.byte $aa,$55,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$77,$a5,$5a
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$a0,$00,$0a,$00
|
||||
|
||||
alien_walk_left2:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$5a,$77,$17,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_walk_left3:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$00,$0a
|
||||
.byte $aa,$0a,$00,$aa,$a0
|
||||
|
||||
alien_walk_left4:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$05,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
alien_walk_left5:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$5a,$55,$77,$aa
|
||||
.byte $aa,$00,$a7,$07,$aa
|
||||
.byte $a0,$a0,$0a,$00,$aa
|
||||
|
||||
alien_walk_left6:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$17,$5a
|
||||
.byte $aa,$aa,$07,$00,$a5
|
||||
.byte $aa,$5a,$55,$77,$7a
|
||||
.byte $aa,$05,$aa,$aa,$07
|
||||
.byte $a0,$a0,$aa,$0a,$00
|
||||
|
||||
alien_walk_left7:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$57,$77,$aa
|
||||
.byte $aa,$aa,$05,$a7,$07
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_walk_left8:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$5a,$10,$77,$7a
|
||||
.byte $aa,$a5,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$aa,$00,$00,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; WALKING with gun
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_walk_gun_progression:
|
||||
.word alien_walk_gun_left1
|
||||
.word alien_walk_gun_left2
|
||||
.word alien_walk_gun_left3
|
||||
.word alien_walk_gun_left4
|
||||
.word alien_walk_gun_left5
|
||||
.word alien_walk_gun_left6
|
||||
.word alien_walk_gun_left7
|
||||
.word alien_walk_gun_left8
|
||||
|
||||
|
||||
alien_walk_gun_left1:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $a0,$5a,$00,$77,$aa
|
||||
.byte $aa,$aa,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$77,$a5,$5a
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$a0,$00,$0a,$00
|
||||
|
||||
alien_walk_gun_left2:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $0a,$aa,$00,$77,$aa
|
||||
.byte $aa,$5a,$77,$17,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_walk_gun_left3:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $0a,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a5,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$00,$0a
|
||||
.byte $aa,$0a,$00,$aa,$a0
|
||||
|
||||
alien_walk_gun_left4:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $0a,$aa,$00,$77,$aa
|
||||
.byte $aa,$a5,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$05,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
alien_walk_gun_left5:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $a0,$5a,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$5a,$55,$77,$aa
|
||||
.byte $aa,$00,$a7,$07,$aa
|
||||
.byte $a0,$a0,$0a,$00,$aa
|
||||
|
||||
alien_walk_gun_left6:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $a0,$5a,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$17,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$5a,$55,$77,$7a
|
||||
.byte $aa,$05,$aa,$aa,$07
|
||||
.byte $a0,$a0,$aa,$0a,$00
|
||||
|
||||
alien_walk_gun_left7:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $0a,$aa,$00,$77,$aa
|
||||
.byte $aa,$a5,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$57,$77,$aa
|
||||
.byte $aa,$aa,$05,$a7,$07
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_walk_gun_left8:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $0a,$aa,$00,$77,$aa
|
||||
.byte $aa,$a5,$10,$77,$7a
|
||||
.byte $aa,$aa,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$aa,$00,$00,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; RUNNING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_run_progression:
|
||||
.word alien_run_left1
|
||||
.word alien_run_left2
|
||||
.word alien_run_left3
|
||||
.word alien_run_left4
|
||||
.word alien_run_left5
|
||||
.word alien_run_left6
|
||||
.word alien_run_left7
|
||||
.word alien_run_left8
|
||||
|
||||
alien_run_left1:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$5a,$00,$77,$aa
|
||||
.byte $aa,$55,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$77,$a5,$5a
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$a0,$00,$0a,$00
|
||||
|
||||
alien_run_left2:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$5a,$77,$17,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$aa,$05
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_run_left3:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$aa,$07,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$00,$0a
|
||||
.byte $aa,$0a,$00,$aa,$a0
|
||||
|
||||
alien_run_left4:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$aa,$77,$55,$aa
|
||||
.byte $aa,$aa,$07,$05,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
alien_run_left5:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$10,$aa
|
||||
.byte $aa,$a7,$00,$00,$aa
|
||||
.byte $aa,$5a,$55,$77,$aa
|
||||
.byte $aa,$00,$a7,$07,$aa
|
||||
.byte $a0,$a0,$0a,$00,$aa
|
||||
|
||||
alien_run_left6:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$77,$17,$5a
|
||||
.byte $aa,$aa,$07,$00,$a5
|
||||
.byte $aa,$5a,$55,$77,$7a
|
||||
.byte $aa,$05,$aa,$aa,$07
|
||||
.byte $a0,$a0,$aa,$0a,$00
|
||||
|
||||
alien_run_left7:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$aa,$10,$77,$aa
|
||||
.byte $aa,$aa,$00,$07,$aa
|
||||
.byte $aa,$aa,$57,$77,$aa
|
||||
.byte $aa,$aa,$05,$a7,$07
|
||||
.byte $aa,$0a,$00,$00,$a0
|
||||
|
||||
alien_run_left8:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $aa,$77,$07,$00,$aa
|
||||
.byte $aa,$aa,$00,$77,$aa
|
||||
.byte $aa,$5a,$10,$77,$7a
|
||||
.byte $aa,$a5,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$aa,$00,$00,$aa
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; JUMPING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; CROUCHING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_crouch_progression:
|
||||
.word alien_crouch1
|
||||
.word alien_crouch2
|
||||
|
||||
alien_crouch1:
|
||||
.byte $5,$8
|
||||
.byte $AA,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$7A,$f7,$7f,$aa
|
||||
.byte $AA,$77,$07,$00,$aa
|
||||
.byte $AA,$AA,$00,$77,$aa
|
||||
.byte $AA,$A7,$17,$07,$aa
|
||||
.byte $AA,$AA,$70,$70,$aa
|
||||
.byte $AA,$AA,$07,$05,$0a
|
||||
.byte $AA,$0A,$00,$AA,$00
|
||||
|
||||
|
||||
alien_crouch2:
|
||||
.byte $5,$8
|
||||
.byte $AA,$AA,$AA,$AA,$AA
|
||||
.byte $AA,$AA,$7A,$fA,$aa
|
||||
.byte $AA,$77,$7f,$07,$aa
|
||||
.byte $AA,$A7,$00,$70,$aa
|
||||
.byte $AA,$7A,$70,$07,$aa
|
||||
.byte $AA,$AA,$70,$70,$aa
|
||||
.byte $AA,$AA,$07,$55,$0a
|
||||
.byte $AA,$0A,$00,$0A,$00
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; TURNING
|
||||
;=====================
|
||||
;=====================
|
||||
alien_turning_sprite:
|
||||
.byte $5,$8
|
||||
.byte $aa,$57,$77,$aa,$aa
|
||||
.byte $0a,$05,$00,$0a,$aa
|
||||
.byte $77,$00,$00,$55,$aa
|
||||
.byte $77,$00,$00,$55,$aa
|
||||
.byte $aa,$00,$00,$a5,$aa
|
||||
.byte $aa,$77,$55,$aa,$aa
|
||||
.byte $07,$aa,$05,$aa,$aa
|
||||
.byte $00,$aa,$00,$aa,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; YELLING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_yell_progression:
|
||||
.word alien_yelling_1
|
||||
.word alien_yelling_2
|
||||
|
||||
alien_yelling_1:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $0a,$a7,$07,$00,$aa
|
||||
.byte $00,$aa,$00,$77,$aa
|
||||
.byte $aa,$55,$10,$77,$7a
|
||||
.byte $aa,$aa,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
alien_yelling_2:
|
||||
.byte $5,$8
|
||||
.byte $aa,$7a,$f7,$7f,$aa
|
||||
.byte $00,$77,$07,$00,$aa
|
||||
.byte $0a,$5a,$00,$77,$aa
|
||||
.byte $aa,$a5,$10,$77,$7a
|
||||
.byte $aa,$aa,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; SHOOTING UPWARD
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_shoot_up_progression:
|
||||
.word alien_shooting_up_sprite
|
||||
.word alien_shooting_up_sprite
|
||||
.word alien_yelling_1
|
||||
.word alien_yelling_2
|
||||
|
||||
alien_shooting_up_sprite:
|
||||
.byte $5,$8
|
||||
.byte $00,$7a,$f7,$7f,$aa
|
||||
.byte $00,$77,$07,$00,$aa
|
||||
.byte $55,$aa,$00,$77,$aa
|
||||
.byte $aa,$55,$10,$77,$7a
|
||||
.byte $aa,$aa,$00,$00,$a7
|
||||
.byte $aa,$aa,$55,$77,$aa
|
||||
.byte $aa,$aa,$a5,$07,$aa
|
||||
.byte $aa,$0a,$00,$00,$aa
|
||||
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; DISINTEGRATING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
alien_disintegrating_progression:
|
||||
.word alien_disintegrating_2 ; 0
|
||||
.word alien_disintegrating_3 ; 1
|
||||
.word alien_disintegrating_4 ; 2
|
||||
.word alien_disintegrating_4 ; 3
|
||||
.word alien_disintegrating_4 ; 4
|
||||
.word alien_disintegrating_4 ; 5
|
||||
.word alien_disintegrating_3 ; 6
|
||||
.word alien_disintegrating_9 ; 7
|
||||
.word alien_disintegrating_10 ; 8
|
||||
.word alien_disintegrating_11 ; 9
|
||||
.word alien_disintegrating_12 ; 10
|
||||
.word alien_disintegrating_13 ; 11
|
||||
.word alien_disintegrating_14 ; 12
|
||||
.word alien_disintegrating_14 ; 13
|
||||
|
||||
|
||||
alien_disintegrating_2: ; 0
|
||||
.byte $5,$8
|
||||
.byte $aa,$ea,$ea,$ea,$aa
|
||||
.byte $fe,$ff,$ff,$ee,$ea
|
||||
.byte $ef,$ff,$ff,$ff,$ee
|
||||
.byte $aa,$ff,$ff,$ff,$ee
|
||||
.byte $fe,$fe,$ff,$ff,$ee
|
||||
.byte $ef,$ff,$ff,$ff,$ee
|
||||
.byte $ee,$ff,$ff,$ff,$ff
|
||||
.byte $fe,$ff,$ff,$ee,$ff
|
||||
|
||||
alien_disintegrating_3: ; 1
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$ff,$ff,$aa,$aa
|
||||
.byte $af,$af,$fa,$ff,$aa
|
||||
.byte $af,$af,$fa,$ff,$aa
|
||||
.byte $fa,$fa,$aa,$ff,$aa
|
||||
.byte $af,$ff,$ff,$ff,$aa
|
||||
.byte $aa,$ff,$ff,$fa,$fa
|
||||
.byte $fa,$ff,$aa,$aa,$ff
|
||||
|
||||
alien_disintegrating_4: ; 2
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $0a,$00,$00,$aa,$aa
|
||||
.byte $a0,$a0,$0a,$00,$aa
|
||||
.byte $a0,$a0,$0a,$00,$aa
|
||||
.byte $0a,$0a,$aa,$00,$aa
|
||||
.byte $a0,$00,$00,$00,$aa
|
||||
.byte $aa,$00,$00,$0a,$0a
|
||||
.byte $0a,$00,$aa,$aa,$00
|
||||
|
||||
alien_disintegrating_9: ; 3
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$fa,$aa
|
||||
.byte $5a,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$0a
|
||||
.byte $a7,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$af,$aa
|
||||
.byte $aa,$7a,$aa,$aa,$7a
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$aa,$aa,$aa,$aa
|
||||
|
||||
alien_disintegrating_10: ; 4
|
||||
.byte $5,$8
|
||||
.byte $5a,$aa,$aa,$aa,$fa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$fa,$a0
|
||||
.byte $a7,$aa,$aa,$fa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$7a
|
||||
.byte $a7,$aa,$aa,$aa,$a7
|
||||
.byte $fa,$aa,$aa,$aa,$aa
|
||||
|
||||
alien_disintegrating_11: ; 5
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$5a,$aa,$fa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$fa
|
||||
.byte $a7,$aa,$aa,$aa,$0a
|
||||
.byte $a7,$aa,$aa,$aa,$fa
|
||||
.byte $aa,$aa,$aa,$aa,$7a
|
||||
.byte $aa,$aa,$aa,$aa,$7a
|
||||
.byte $fa,$aa,$aa,$aa,$aa
|
||||
|
||||
alien_disintegrating_12: ; 6
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$a5,$aa,$fa,$aa
|
||||
.byte $aa,$aa,$aa,$0a,$aa
|
||||
.byte $7a,$aa,$aa,$aa,$af
|
||||
.byte $7a,$aa,$aa,$aa,$af
|
||||
.byte $fa,$aa,$aa,$aa,$5a
|
||||
|
||||
alien_disintegrating_13: ; 7
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$fa,$aa
|
||||
.byte $aa,$a5,$aa,$0a,$aa
|
||||
.byte $5a,$a7,$aa,$aa,$fa
|
||||
|
||||
alien_disintegrating_14: ; 8
|
||||
.byte $5,$8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $7a,$5a,$fa,$0a,$fa
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; 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
|
||||
|
749
another_myst/sprites/physicist.inc
Normal file
749
another_myst/sprites/physicist.inc
Normal file
@ -0,0 +1,749 @@
|
||||
; note, for some reason these are all facing left
|
||||
; also note: too lazy to make separate sprites for running w/ gun
|
||||
; don't think it would work well at this resolution anyway
|
||||
; also technically should have separate sprites for facing left/right
|
||||
; rather than cheating and just mirror-flipping it
|
||||
|
||||
; TODO:
|
||||
; zapped by laser
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; STANDING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
;====================
|
||||
; Going Left
|
||||
|
||||
phys_stand:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$fa,$f4,$aa,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; WALKING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
phys_walk_progression:
|
||||
.word phys_walk_left1
|
||||
.word phys_walk_left2
|
||||
.word phys_walk_left3
|
||||
.word phys_walk_left4
|
||||
.word phys_walk_left5
|
||||
.word phys_walk_left6
|
||||
.word phys_walk_left7
|
||||
.word phys_walk_left8
|
||||
.word phys_walk_left9
|
||||
.word phys_walk_left10
|
||||
|
||||
|
||||
|
||||
phys_walk_left1:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ab,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$a4,$cc,$aa
|
||||
.byte $af,$af,$7a,$7c,$aa
|
||||
|
||||
phys_walk_left2:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$a4,$cc,$aa
|
||||
.byte $af,$f4,$7a,$7c,$aa
|
||||
|
||||
phys_walk_left3:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$a4,$cc,$aa
|
||||
.byte $fa,$f4,$7a,$7c,$aa
|
||||
|
||||
phys_walk_left4:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$a4,$ca,$aa
|
||||
.byte $fa,$f4,$aa,$7c,$a7
|
||||
|
||||
phys_walk_left5:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$bb,$00,$aa,$aa
|
||||
.byte $7a,$aa,$44,$aa,$aa
|
||||
.byte $aa,$cc,$44,$aa,$aa
|
||||
.byte $aa,$f7,$f4,$aa,$aa
|
||||
|
||||
phys_walk_left6:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $7a,$cc,$a4,$4a,$aa
|
||||
.byte $aa,$a7,$fa,$f4,$aa
|
||||
|
||||
phys_walk_left7:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $aa,$cc,$a4,$4a,$aa
|
||||
.byte $a7,$7c,$fa,$f4,$aa
|
||||
|
||||
phys_walk_left8:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $aa,$cc,$a4,$44,$aa
|
||||
.byte $7a,$7c,$aa,$fa,$af
|
||||
|
||||
phys_walk_left9:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$aa,$c4,$a4,$fa
|
||||
.byte $aa,$7a,$7c,$af,$aa
|
||||
|
||||
phys_walk_left10:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$fa,$7f,$7c,$aa
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; RUNNING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
phys_run_progression:
|
||||
.word phys_run_left1
|
||||
.word phys_run_left2
|
||||
.word phys_run_left3
|
||||
.word phys_run_left4
|
||||
.word phys_run_left5
|
||||
.word phys_run_left6
|
||||
.word phys_run_left7
|
||||
.word phys_run_left8
|
||||
.word phys_run_left9
|
||||
.word phys_run_left9
|
||||
|
||||
phys_run_left1:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$aa,$44,$ac,$77
|
||||
.byte $aa,$fa,$f4,$aa,$aa
|
||||
|
||||
phys_run_left2:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $ba,$ab,$00,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $aa,$ac,$44,$4a,$aa
|
||||
.byte $aa,$aa,$fa,$f4,$aa
|
||||
|
||||
phys_run_left3:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $ab,$ab,$00,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $aa,$cc,$a4,$4a,$aa
|
||||
.byte $a7,$a7,$fa,$af,$aa
|
||||
|
||||
phys_run_left4:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $ba,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$ab,$00,$aa,$aa
|
||||
.byte $aa,$ca,$44,$aa,$aa
|
||||
.byte $aa,$cc,$aa,$44,$aa
|
||||
.byte $7a,$a7,$aa,$fa,$af
|
||||
|
||||
phys_run_left5:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ab,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$44,$4a,$fa
|
||||
.byte $aa,$cc,$aa,$aa,$af
|
||||
.byte $7a,$7c,$aa,$aa,$aa
|
||||
|
||||
phys_run_left6:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ab,$00,$aa,$aa
|
||||
.byte $aa,$aa,$44,$4a,$fa
|
||||
.byte $aa,$aa,$cc,$aa,$af
|
||||
.byte $aa,$7a,$7c,$aa,$aa
|
||||
|
||||
phys_run_left7:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ab,$0b,$aa,$aa
|
||||
.byte $aa,$4a,$44,$aa,$aa
|
||||
.byte $aa,$a4,$c4,$ff,$aa
|
||||
.byte $aa,$7a,$7c,$aa,$aa
|
||||
|
||||
phys_run_left8:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$ba,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$ba,$aa
|
||||
.byte $aa,$4a,$44,$aa,$aa
|
||||
.byte $aa,$44,$ac,$ca,$aa
|
||||
.byte $af,$af,$7a,$7c,$aa
|
||||
|
||||
phys_run_left9:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$bb,$aa
|
||||
.byte $aa,$aa,$00,$bb,$aa
|
||||
.byte $aa,$aa,$44,$ca,$aa
|
||||
.byte $aa,$44,$aa,$cc,$aa
|
||||
.byte $fa,$f4,$aa,$7a,$7c
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; JUMPING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; KICKING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
; note: he needs to be facing left by default
|
||||
kick1:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $bb,$ab,$00,$ba,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$a4,$ca,$aa
|
||||
.byte $af,$f4,$5a,$5c,$aa
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; SHOOTING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
shooting1:
|
||||
.byte 5,8
|
||||
.byte $AA,$AA,$9A,$9A,$AA
|
||||
.byte $AA,$AA,$bb,$99,$AA
|
||||
.byte $0A,$0A,$AA,$0B,$AA
|
||||
.byte $AA,$A0,$AB,$B0,$AA
|
||||
.byte $AA,$AA,$AA,$00,$AA
|
||||
.byte $AA,$AA,$AA,$44,$AA
|
||||
.byte $AA,$AA,$44,$c4,$AA
|
||||
.byte $AA,$fA,$f4,$7A,$7C
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; FALLING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
; note: he falls into a crouch
|
||||
|
||||
phys_falling:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$9a,$9a,$aa
|
||||
.byte $aa,$aa,$bb,$99,$aa
|
||||
.byte $ab,$ba,$ba,$b0,$0b
|
||||
.byte $aa,$aa,$aa,$00,$00
|
||||
.byte $aa,$aa,$aa,$44,$44
|
||||
.byte $ca,$4c,$44,$a4,$aa
|
||||
.byte $f5,$f4,$aa,$aa,$aa
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; CROUCHING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
crouch_progression:
|
||||
.word crouch1
|
||||
.word crouch2
|
||||
|
||||
crouch1:
|
||||
.byte 3,8
|
||||
.byte $aa,$aa,$aa
|
||||
.byte $9a,$9a,$aa
|
||||
.byte $bb,$99,$aa
|
||||
.byte $aa,$0b,$aa
|
||||
.byte $aa,$bb,$aa
|
||||
.byte $aa,$bb,$aa
|
||||
.byte $44,$44,$aa
|
||||
.byte $5a,$fc,$f4
|
||||
|
||||
crouch2:
|
||||
.byte 5,8
|
||||
.byte $AA,$aa,$aa,$aa,$AA
|
||||
.byte $AA,$aa,$aa,$aa,$AA
|
||||
.byte $AA,$9a,$9a,$aa,$AA
|
||||
.byte $AA,$bb,$99,$aa,$AA
|
||||
.byte $AA,$aa,$0b,$0a,$AA
|
||||
.byte $AA,$aa,$bb,$00,$AA
|
||||
.byte $AA,$ba,$4b,$aa,$AA
|
||||
.byte $AA,$54,$f4,$f4,$AA
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; SWIMMING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
; see physicist_l1_swim.inc
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; COLLAPSING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
;=======================
|
||||
; I've got a match
|
||||
; your embrace, and my collapse
|
||||
|
||||
collapse_progression:
|
||||
.word collapse1 ; 00
|
||||
.word collapse2 ; 02
|
||||
.word collapse3 ; 04
|
||||
.word collapse4 ; 06
|
||||
.word collapse5 ; 08
|
||||
.word collapse5 ; 10
|
||||
.word collapse5 ; 12
|
||||
.word collapse5 ; 14
|
||||
.word collapse5 ; 16
|
||||
|
||||
collapse1:
|
||||
.byte 4,8
|
||||
.byte $9a,$9a,$aa,$aa
|
||||
.byte $ab,$99,$aa,$aa
|
||||
.byte $aa,$0b,$aa,$aa
|
||||
.byte $aa,$bb,$aa,$aa
|
||||
.byte $aa,$bb,$aa,$aa
|
||||
.byte $aa,$44,$aa,$aa
|
||||
.byte $aa,$a4,$4a,$aa
|
||||
.byte $aa,$fa,$f4,$aa
|
||||
|
||||
|
||||
collapse2:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $b9,$99,$aa,$aa,$aa
|
||||
.byte $ab,$b9,$aa,$aa,$aa
|
||||
.byte $aa,$b0,$aa,$aa,$aa
|
||||
.byte $aa,$bb,$00,$aa,$aa
|
||||
.byte $aa,$bb,$44,$4a,$aa
|
||||
.byte $aa,$ab,$aa,$a4,$4a
|
||||
.byte $aa,$aa,$aa,$fa,$f4
|
||||
|
||||
|
||||
|
||||
collapse3:
|
||||
.byte 6,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $9a,$9a,$aa,$aa,$aa,$aa
|
||||
.byte $bb,$99,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$0b,$0a,$aa,$aa,$aa
|
||||
.byte $aa,$bb,$00,$4a,$aa,$aa
|
||||
.byte $aa,$bb,$a0,$44,$44,$fa
|
||||
.byte $aa,$ab,$aa,$aa,$a4,$ff
|
||||
|
||||
collapse4:
|
||||
.byte 7,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $9a,$9a,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $99,$bb,$00,$0a,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$00,$44,$4a,$fa
|
||||
.byte $aa,$aa,$aa,$bb,$aa,$a4,$ff
|
||||
|
||||
|
||||
collapse5:
|
||||
.byte 8,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa,$aa,$aa,$aa
|
||||
.byte $99,$b9,$00,$b0,$00,$bb,$4a,$aa
|
||||
.byte $a9,$ab,$aa,$aa,$bb,$b4,$44,$ff
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; JUMPING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
|
||||
phys_jump_progression:
|
||||
.word jump1
|
||||
.word jump2
|
||||
.word jump3
|
||||
.word jump4
|
||||
.word jump5
|
||||
.word jump6
|
||||
.word jump7
|
||||
.word jump8
|
||||
|
||||
|
||||
jump1:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$bb,$aa,$aa
|
||||
.byte $aa,$ba,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$44,$aa,$aa
|
||||
.byte $aa,$44,$cc,$aa,$aa
|
||||
.byte $fa,$f4,$5c,$aa,$aa
|
||||
|
||||
jump2:
|
||||
.byte 5,8
|
||||
.byte $9a,$9a,$aa,$aa,$aa
|
||||
.byte $bb,$99,$aa,$aa,$aa
|
||||
.byte $aa,$0b,$00,$aa,$aa
|
||||
.byte $aa,$00,$bb,$aa,$aa
|
||||
.byte $aa,$a0,$bb,$aa,$aa
|
||||
.byte $aa,$44,$cb,$aa,$aa
|
||||
.byte $aa,$44,$cc,$aa,$aa
|
||||
.byte $fa,$f4,$5c,$aa,$aa
|
||||
|
||||
jump3:
|
||||
.byte 5,8
|
||||
.byte $9a,$9a,$aa,$aa,$aa
|
||||
.byte $bb,$99,$aa,$aa,$aa
|
||||
.byte $aa,$0b,$00,$aa,$aa
|
||||
.byte $aa,$00,$bb,$aa,$aa
|
||||
.byte $aa,$a0,$bb,$aa,$aa
|
||||
.byte $44,$c4,$cb,$aa,$aa
|
||||
.byte $a4,$4c,$cc,$cc,$aa
|
||||
.byte $fa,$f4,$5a,$a5,$aa
|
||||
|
||||
jump4:
|
||||
.byte 5,8
|
||||
.byte $9a,$9a,$aa,$aa,$aa
|
||||
.byte $bb,$99,$aa,$aa,$aa
|
||||
.byte $aa,$0b,$00,$aa,$aa
|
||||
.byte $aa,$00,$bb,$aa,$aa
|
||||
.byte $aa,$a0,$bb,$aa,$aa
|
||||
.byte $aa,$4b,$c4,$ca,$5a
|
||||
.byte $aa,$44,$4c,$ac,$55
|
||||
.byte $aa,$aa,$f4,$f4,$aa
|
||||
|
||||
jump5:
|
||||
.byte 5,8
|
||||
.byte $b9,$99,$aa,$aa,$aa
|
||||
.byte $ab,$b9,$aa,$aa,$aa
|
||||
.byte $ba,$b0,$0b,$aa,$aa
|
||||
.byte $aa,$aa,$00,$aa,$aa
|
||||
.byte $aa,$aa,$00,$aa,$aa
|
||||
.byte $aa,$cc,$44,$4a,$aa
|
||||
.byte $5a,$5c,$a4,$44,$fa
|
||||
.byte $aa,$aa,$aa,$aa,$af
|
||||
|
||||
jump6:
|
||||
.byte 5,8
|
||||
.byte $aa,$b9,$99,$aa,$aa
|
||||
.byte $aa,$ab,$b9,$aa,$aa
|
||||
.byte $ab,$ba,$b0,$aa,$aa
|
||||
.byte $aa,$aa,$00,$aa,$aa
|
||||
.byte $aa,$aa,$40,$aa,$aa
|
||||
.byte $aa,$cc,$44,$4a,$fa
|
||||
.byte $aa,$cc,$a4,$a4,$ff
|
||||
.byte $a5,$a5,$aa,$aa,$aa
|
||||
|
||||
jump7:
|
||||
.byte 5,8
|
||||
.byte $aa,$b9,$99,$aa,$aa
|
||||
.byte $aa,$ab,$b9,$aa,$aa
|
||||
.byte $aa,$aa,$b0,$aa,$aa
|
||||
.byte $ab,$ab,$00,$aa,$aa
|
||||
.byte $aa,$aa,$40,$aa,$aa
|
||||
.byte $aa,$cc,$44,$4a,$fa
|
||||
.byte $aa,$cc,$a4,$a4,$ff
|
||||
.byte $a5,$a5,$aa,$aa,$aa
|
||||
|
||||
jump8:
|
||||
.byte 5,8
|
||||
.byte $aa,$9a,$9a,$aa,$aa
|
||||
.byte $aa,$bb,$99,$aa,$aa
|
||||
.byte $aa,$aa,$0b,$aa,$aa
|
||||
.byte $aa,$b0,$bb,$aa,$aa
|
||||
.byte $aa,$aa,$40,$aa,$aa
|
||||
.byte $aa,$4a,$44,$aa,$aa
|
||||
.byte $aa,$44,$c4,$ca,$aa
|
||||
.byte $fa,$f4,$5a,$5c,$aa
|
||||
|
||||
|
||||
;====================
|
||||
;====================
|
||||
; On Spike
|
||||
;====================
|
||||
;====================
|
||||
|
||||
; 9x40
|
||||
physicist_spike_sprite:
|
||||
.byte 3,4
|
||||
.byte $AA,$11,$AA
|
||||
.byte $0A,$90,$0A
|
||||
.byte $BB,$A9,$BB
|
||||
.byte $BB,$AA,$BB
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; CROUCH SHOOTING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
crouch_shooting:
|
||||
.byte 5,8
|
||||
.byte $AA,$AA,$aa,$aa,$aa
|
||||
.byte $AA,$AA,$aa,$aa,$aa
|
||||
.byte $AA,$AA,$9a,$9a,$aa
|
||||
.byte $AA,$AA,$bb,$99,$aa
|
||||
.byte $0A,$0A,$aa,$0b,$0a
|
||||
.byte $AA,$A0,$ba,$bb,$00
|
||||
.byte $AA,$AA,$4a,$4b,$aa
|
||||
.byte $AA,$AA,$54,$f4,$f4
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; CROUCH KICKING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
crouch_kicking:
|
||||
.byte 5,8
|
||||
.byte $AA,$AA,$aa,$aa,$aa
|
||||
.byte $AA,$AA,$aa,$aa,$aa
|
||||
.byte $AA,$AA,$9a,$9a,$aa
|
||||
.byte $AA,$AA,$bb,$99,$aa
|
||||
.byte $AA,$AA,$aa,$0b,$0a
|
||||
.byte $AA,$AA,$aa,$bb,$00
|
||||
.byte $AA,$AA,$4a,$bb,$a0
|
||||
.byte $5A,$5C,$A4,$f4,$f4
|
||||
|
||||
|
||||
|
||||
|
||||
;=====================
|
||||
;=====================
|
||||
; DISINTEGRATING
|
||||
;=====================
|
||||
;=====================
|
||||
|
||||
disintegrate_progression:
|
||||
.word disintegrating_2 ; 0
|
||||
.word disintegrating_3 ; 1
|
||||
.word disintegrating_4 ; 2
|
||||
.word disintegrating_4 ; 3
|
||||
.word disintegrating_4 ; 4
|
||||
.word disintegrating_4 ; 5
|
||||
.word disintegrating_3 ; 6
|
||||
.word disintegrating_9 ; 7
|
||||
.word disintegrating_10 ; 8
|
||||
.word disintegrating_11 ; 9
|
||||
.word disintegrating_12 ; 10
|
||||
.word disintegrating_13 ; 11
|
||||
.word disintegrating_14 ; 12
|
||||
.word disintegrating_14 ; 13
|
||||
|
||||
disintegrating_2:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $ee,$fe,$fe,$ee,$aa
|
||||
.byte $ee,$ff,$ff,$ee,$aa
|
||||
.byte $aa,$ee,$ff,$ee,$aa
|
||||
.byte $ae,$ef,$ff,$ee,$aa
|
||||
.byte $aa,$ee,$ff,$ee,$aa
|
||||
.byte $aa,$ee,$ff,$ee,$aa
|
||||
.byte $ff,$fe,$ff,$ee,$aa
|
||||
|
||||
disintegrating_3:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$fa,$fa,$aa,$aa
|
||||
.byte $aa,$ff,$ff,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
.byte $aa,$af,$fa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
.byte $aa,$aa,$ff,$aa,$aa
|
||||
.byte $aa,$fa,$ff,$aa,$aa
|
||||
|
||||
disintegrating_4:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$0a,$0a,$aa,$aa
|
||||
.byte $aa,$00,$00,$aa,$aa
|
||||
.byte $aa,$aa,$0a,$aa,$aa
|
||||
.byte $aa,$a0,$0a,$aa,$aa
|
||||
.byte $aa,$aa,$0a,$aa,$aa
|
||||
.byte $aa,$aa,$00,$aa,$aa
|
||||
.byte $aa,$0a,$00,$aa,$aa
|
||||
|
||||
disintegrating_9:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$aa,$af,$aa,$aa
|
||||
.byte $aa,$5a,$aa,$af,$aa
|
||||
.byte $aa,$aa,$aa,$0a,$aa
|
||||
.byte $af,$aa,$0a,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$fa,$aa
|
||||
.byte $af,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
|
||||
disintegrating_10:
|
||||
.byte 5,8
|
||||
.byte $fa,$aa,$af,$aa,$aa
|
||||
.byte $aa,$5a,$aa,$aa,$fa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$aa,$aa,$aa,$a0
|
||||
.byte $aa,$aa,$aa,$0a,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$5a
|
||||
.byte $fa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
|
||||
disintegrating_11:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
.byte $af,$aa,$aa,$aa,$af
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$aa,$aa,$aa,$a0
|
||||
.byte $aa,$aa,$aa,$0a,$fa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $af,$aa,$fa,$aa,$aa
|
||||
|
||||
disintegrating_12:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$fa,$aa,$aa
|
||||
.byte $aa,$af,$aa,$aa,$fa
|
||||
.byte $fa,$a5,$aa,$0a,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$a0
|
||||
.byte $fa,$aa,$fa,$aa,$aa
|
||||
|
||||
disintegrating_13:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$af,$aa,$aa
|
||||
.byte $aa,$4a,$aa,$0a,$a0
|
||||
.byte $fa,$aa,$5a,$aa,$af
|
||||
|
||||
disintegrating_14:
|
||||
.byte 5,8
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $aa,$aa,$aa,$aa,$aa
|
||||
.byte $fa,$5a,$5a,$0a,$fa
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user