dos33fsprogs/games/ootw/ootw_c15/ootw_c15.s

1465 lines
24 KiB
ArmAsm

; Ootw for Apple II Lores
; Checkpoint-15 (arrival at the baths)
; by Vince "DEATER" Weaver <vince@deater.net>
.include "../zp.inc"
.include "../hardware.inc"
; TODO:
; die if not move and get shot by column (first screen)
; die it try to go back into original room
; bath:
; after crash, hop out of sphere. move quickly as you can get lasered
; right near the pod, but if you walk by the column you can stand
; forever and not get shot
; walkway1:
; does not appear you can re-enter bath? lasers from behind come in
; but don't hurt you unless you try to walk back in
;============================
; ENTRY POINT FOR LEVEL
;============================
ootw_c15:
; blast out zero page trying to find bugs where assume
; init to ff or 0
; lda #$5a
;loopy:
; ldx #0
; sta $0,X
; inx
; bne loopy
; Initializing when entering level for first time
;========================================================
; RESTART: called when restarting level (after game over)
;========================================================
ootw_c15_restart:
;===================================
; run bath intro
;===================================
jsr bath_intro
;===================================
; re-initialize level state
;===================================
jsr ootw_c15_level_init
;===========================
; c15_new_room
;===========================
; enter new room on level 15
c15_new_room:
lda #0
sta GAME_OVER
;====================================
; Initialize room based on WHICH_ROOM
; and then play until we exit
;====================================
jsr ootw_c15_setup_room_and_play
;====================================
; we exited the room
;====================================
c15_check_done:
lda GAME_OVER ; if died or quit, jump to quit level
cmp #$ff
beq quit_level
;=====================================================
; Check to see which room to enter next
; If it's a special value, means we succesfully beat the level
c15_defeated:
lda WHICH_ROOM
cmp #$ff
bne c15_new_room
; point to next level
; and exit to the level loader
lda #16
sta WHICH_LOAD
rts
;===========================
; quit_level
;===========================
quit_level:
jsr TEXT ; text mode
jsr HOME ; clear screen
lda KEYRESET ; clear keyboard state
lda #0 ; set to PAGE0
sta DRAW_PAGE
lda #<end_message ; print the end message
sta OUTL
lda #>end_message
sta OUTH
jsr move_and_print
jsr move_and_print
wait_loop:
lda KEYPRESS ; wait for keypress
bpl wait_loop
lda KEYRESET ; clear strobe
lda #0
sta GAME_OVER
jmp ootw_c15_restart ; restart level
;=========================================
;=========================================
; Ootw Checkpoint 15 -- End of the game
;=========================================
;=========================================
; call once before entering for first time
ootw_c15_level_init:
lda #0
sta NUM_DOORS
sta BROKEN_GLASS
sta BRIDGE_COLLAPSE
; DEBUG
; lda #2 ; REMOVE
sta WHICH_ROOM
lda #1
sta HAVE_GUN
sta DIRECTION ; right
; DEBUG
; lda #2 ; REMOVE
lda #22
sta PHYSICIST_X
lda #10
sta PHYSICIST_Y
lda #P_STANDING
sta PHYSICIST_STATE
; set up friend
lda #$ff ; not there at start
sta friend_room
; set up aliens
jsr clear_aliens
lda #1
sta ALIEN_OUT
lda #1
sta alien0_room
lda #36
sta alien0_x
lda #8
sta alien0_y
lda #A_STANDING
sta alien0_state
lda #0
sta alien0_direction
rts
;===========================
;===========================
; enter new room
;===========================
;===========================
ootw_c15_setup_room_and_play:
;==============================
; each room init
jsr clear_lasers
lda #0
sta LEFT_SHOOT_LIMIT
lda #39
sta RIGHT_SHOOT_LIMIT
;==============================
; setup per-room variables
lda WHICH_CAVE
bne room1
jsr init_shields
;===============================
; Room0 -- with the bathers
;===============================
room0:
lda #(20+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #1
sta cer_smc+1
; set left exit
lda #0
sta cel_smc+1
lda #20
sta PHYSICIST_Y
; load background
lda #>(bath_end_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(bath_end_lzsa)
jmp room_setup_done
;===============================
; Room1 -- first walkway
;===============================
room1:
cmp #1
bne room2
;
first_shield:
lda #0
sta FIRST_SHIELD
sta shield_count
lda #1
sta shield_out
lda #34
sta shield_x
lda #8
sta shield_y
inc SHIELD_OUT
; reset for animation
lda #0
sta FOREGROUND_COUNT
sta FRAMEL
sta FRAMEH
lda #(-4+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #2
sta cer_smc+1
; set left exit
lda #0
sta cel_smc+1
lda #8
sta PHYSICIST_Y
; load background
lda #>(walkway1_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(walkway1_lzsa)
jmp room_setup_done
;===============================
; Room2 -- second walkway
;===============================
room2:
cmp #2
bne room3
lda #(-4+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #3
sta cer_smc+1
; set left exit
lda #1
sta cel_smc+1
lda #8
sta PHYSICIST_Y
lda BROKEN_GLASS
beq unbroken_background
; load background
lda #>(walkway2_after_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(walkway2_after_lzsa)
jmp room_setup_done
unbroken_background:
; load background
lda #>(walkway2_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(walkway2_lzsa)
jmp room_setup_done
;===============================
; Room3 -- third walkway
;===============================
room3:
cmp #3
bne room4
lda #(-4+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #4
sta cer_smc+1
; set left exit
lda #2
sta cel_smc+1
lda #8
sta PHYSICIST_Y
; load background
lda #>(walkway3_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(walkway3_lzsa)
jmp room_setup_done
;===============================
; Room4 -- above pit
;===============================
room4:
cmp #4
bne room5
lda #(-4+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #5
sta cer_smc+1
; set left exit
lda #3
sta cel_smc+1
lda #24
sta PHYSICIST_Y
; load background
lda #>(above_pit_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(above_pit_lzsa)
jmp room_setup_done
;===============================
; Room5 -- final scene
;===============================
room5:
; cmp #4
; bne room5
lda #(-4+128)
sta LEFT_LIMIT
lda #(39+128)
sta RIGHT_LIMIT
; set right exit
lda #$ff ; exit level when done
sta cer_smc+1
; set left exit
lda #4
sta cel_smc+1
lda #24
sta PHYSICIST_Y
; load background
lda #>(final_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(final_lzsa)
; jmp room_setup_done
room_setup_done:
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #$c ; load to page $c00
jsr decompress_lzsa2_fast ; tail call
;=====================
; setup walk collision
jsr recalc_walk_collision
ootw_room_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
;============================
;============================
; Room Loop
;============================
;============================
room_loop:
;================================
; copy background to current page
jsr gr_copy_to_current
;==================================
; draw background action
; lda WHICH_ROOM
bg_room0:
; cmp #0
; bne c15_no_bg_action
; lda FRAMEL
; and #$c
; lsr
; tay
; lda #11
; sta XPOS
; lda #24
; sta YPOS
; lda recharge_bg_progression,Y
; sta INL
; lda recharge_bg_progression+1,Y
; sta INH
; jsr put_sprite
c15_no_bg_action:
;===============================
; check keyboard
;===============================
jsr handle_keypress
;===============================
; move physicist
;===============================
jsr move_physicist
;===============================
; move friend
;===============================
jsr move_friend
;===============================
; check room limits
;===============================
jsr check_screen_limit
;===============================
; adjust floor if necessary
;===============================
; no sloped floors in c15
;=====================================
; draw physicist
;=====================================
jsr draw_physicist
;=====================================
; draw friend
;=====================================
jsr draw_friend
;=====================================
; draw alien
;=====================================
lda ALIEN_OUT
beq no_draw_alien
jsr move_alien
jsr draw_alien
no_draw_alien:
;=====================================
; handle gun
;=====================================
jsr handle_gun
;=====================================
; draw foreground action
;=====================================
lda WHICH_ROOM
cmp #0
beq c15_room0_foreground
jmp c15_room1_foreground
c15_room0_foreground:
; Room 0 laser fire
lda laser1_out
bne handle_laser2
handle_laser1:
jsr random16
lda SEEDL
and #$7 ; 0..7 (+1 carry)
adc #20 ; make random
sta laser1_y
lda #1 ; right
sta laser1_direction
lda #0
sta laser1_start
sta laser1_count
lda #10
sta laser1_end
lda #$ff
sta laser1_out
jmp done_handle_laser
handle_laser2:
lda laser2_out
bne done_handle_laser
done_handle_laser:
; Room 0 draw guard
c15_draw_fg_guard:
; real game it's not quite so regular, double shot eventually
; every so often, shoots
; for frames 0 and 1 every 32 ($1F)
lda FRAMEL
and #$1f
cmp #3
bcs fg_guard_noshoot ; bgt
fg_guard_shoot:
lda #$ff
bne fg_guard_draw
fg_guard_noshoot:
lda #$00
fg_guard_draw:
sta XPOS
lda #22
sta YPOS
lda #<guard_sprite
sta INL
lda #>guard_sprite
sta INH
jsr put_sprite_crop
; draw forground lasers
lda FRAMEL
and #$1f
cmp #3
bcs fg_guard_no_laser ; bge
lda #9
sta XPOS
lda #20
sta YPOS
lda #<guard_laser
sta INL
lda #>guard_laser
sta INH
jsr put_sprite
fg_guard_no_laser:
; draw from-bottom-laser
lda FRAMEL
and #$20
beq skip_this
lda FRAMEL
and #$18
lsr
lsr
tay
lda shot_lookup1,Y
sta INL
lda shot_lookup1+1,Y
sta INH
jsr draw_trapezoid
skip_this:
jmp c15_no_fg_action
;=====================================
; Room 1 foreground
;=====================================
c15_room1_foreground:
cmp #1
beq actual_room1_foreground
jmp c15_room2_foreground
actual_room1_foreground:
; run soldier/laser in the front
; every 256 frames start a laser
; if 1024 start a soldier
lda FRAMEL
bne not_new_walk
lda FRAMEH
and #$3
beq start_soldier
start_blast:
ldy #26
sty FOREGROUND_COUNT
bne not_new_walk
start_soldier:
ldy #2
sty FOREGROUND_COUNT
not_new_walk:
ldy FOREGROUND_COUNT
beq skip_enemy_walk
cpy #24
beq reset_walk
cpy #34
beq reset_walk
bne do_enemy_walk
reset_walk:
ldy #0
sty FOREGROUND_COUNT
beq skip_enemy_walk
do_enemy_walk:
lda FRAMEL
and #$3
bne no_update_enemy_walk
lda enemy_walking_sequence,y
sta getsrc_smc+1 ; LZSA_SRC_LO
lda enemy_walking_sequence+1,y
sta getsrc_smc+2 ; LZSA_SRC_HI
iny
iny
sty FOREGROUND_COUNT
lda #$10 ; load to $1000
jsr decompress_lzsa2_fast
no_update_enemy_walk:
; can we only overlay bottom half of screen?
; current overlay code starts at CV and counts to zero :(
jsr gr_overlay_noload
skip_enemy_walk:
; occasional laser
; FRAMEL: every 8th frame (111) update, draw 4-long animation
; cycle through 4 possible shots
; FIXME: we could randomly adjust some of the parameters?
lda FRAMEL
and #$18
lsr
lsr
tay
lda FRAMEL
and #$60
beq shot4_base
cmp #$20
beq shot3_base
cmp #$40
beq shot2_base
shot1_base:
lda shot_lookup1,Y
sta INL
lda shot_lookup1+1,Y
jmp draw_shot
shot2_base:
lda shot_lookup2,Y
sta INL
lda shot_lookup2+1,Y
jmp draw_shot
shot3_base:
lda shot_lookup3,Y
sta INL
lda shot_lookup3+1,Y
jmp draw_shot
shot4_base:
lda shot_lookup4,Y
sta INL
lda shot_lookup4+1,Y
draw_shot:
sta INH
jsr draw_trapezoid
jmp c15_no_fg_action
;=====================================
; Room 2 foreground
;=====================================
c15_room2_foreground:
cmp #2
beq actual_room2_foreground
jmp c15_room3_foreground
actual_room2_foreground:
; after trigger, have some shooting
; if already triggered, skip
lda BROKEN_GLASS
cmp #14
bne not_broken
jmp c15_no_fg_action
not_broken:
cmp #0
bne break_glass
; once physicist past 5, start breakout
lda PHYSICIST_X
cmp #5
bcs break_glass
jmp c15_no_fg_action
break_glass:
ldy BROKEN_GLASS
lda glass_breaking_sequence,y
sta getsrc_smc+1 ; LZSA_SRC_LO
lda glass_breaking_sequence+1,y
sta getsrc_smc+2 ; LZSA_SRC_HI
lda FRAMEL
and #$3
bne no_inc_break_glass
iny
iny
sty BROKEN_GLASS
no_inc_break_glass:
lda #$10 ; load to $1000
jsr decompress_lzsa2_fast
jsr gr_overlay_noload
ldy BROKEN_GLASS
cpy #14
bne no_update_break_glass
; load new background at end
lda #>(walkway2_after_lzsa)
sta getsrc_smc+2 ; LZSA_SRC_HI
lda #<(walkway2_after_lzsa)
sta getsrc_smc+1 ; LZSA_SRC_LO
lda #$c ; load to $c00
jsr decompress_lzsa2_fast
; activate friend
lda #2
sta friend_room
lda #FAI_RUNTO_PANEL
sta friend_ai_state
lda #F_RUNNING
sta friend_state
lda #16
sta friend_x
lda #8
sta friend_y
lda #1
sta friend_direction
no_update_break_glass:
;=====================================
; Room 3 foreground
;=====================================
c15_room3_foreground:
cmp #3
beq actual_room3_foreground
jmp c15_draw_friend_cliff
actual_room3_foreground:
; after trigger, have some shooting
; if already triggered, skip
lda BRIDGE_COLLAPSE
cmp #12
bcs draw_bridge ; bge
cmp #0
bne collapse_bridge
; once physicist past 20, start breakout
lda PHYSICIST_X
cmp #16
bcc c15_no_fg_action ; blt
collapse_bridge:
ldy BRIDGE_COLLAPSE
lda bridge_sequence,y
sta getsrc_smc+1 ; LZSA_SRC_LO
lda bridge_sequence+1,y
sta getsrc_smc+2 ; LZSA_SRC_HI
lda FRAMEL
and #$3
bne no_inc_bridge_collapse
iny
iny
sty BRIDGE_COLLAPSE
no_inc_bridge_collapse:
lda #$10 ; load to $1000
jsr decompress_lzsa2_fast
draw_bridge:
jsr gr_overlay_noload
ldy BRIDGE_COLLAPSE
cpy #12
bne no_update_bridge_collapse
lda #P_FALLING_DOWN
sta PHYSICIST_STATE
lda #48
sta fall_down_destination_smc+1
iny
sty BRIDGE_COLLAPSE
no_update_bridge_collapse:
; Room 5 friend slowly working to left
c15_draw_friend_cliff:
c15_no_fg_action:
;====================
; activate fg objects
;====================
;c2_fg_check_jail1:
; lda WHICH_JAIL
; cmp #1
; bne c2_fg_check_jail2
;
; lda CART_OUT
; bne c2_fg_check_jail2
;
; inc CART_OUT
;================
; move fg objects
;================
c15_move_fg_objects:
; lda CART_OUT
; cmp #1
; bne cart_not_out
; move cart
; lda FRAMEL
; and #$3
; bne cart_not_out
;
; inc CART_X
; lda CART_X
; cmp #39
; bne cart_not_out
; inc CART_OUT
;====================================
; page flip
;====================================
jsr page_flip
;====================================
; inc frame count
;====================================
inc FRAMEL
bne room_frame_no_oflo
inc FRAMEH
room_frame_no_oflo:
;==========================
; check if done this level
;==========================
lda GAME_OVER
beq still_in_room
cmp #$ff ; if $ff, we died
beq done_room
;===============================
; check if exited room to right
cmp #1
beq room_exit_left
;=================
; exit to right
room_right_yes_exit:
lda #0
sta PHYSICIST_X
cer_smc:
lda #$0 ; smc+1 = exit location
sta WHICH_ROOM
jmp done_room
;=====================
; exit to left
room_exit_left:
lda #37
sta PHYSICIST_X
cel_smc:
lda #0 ; smc+1
sta WHICH_ROOM
jmp done_room
; loop forever
still_in_room:
lda #0
sta GAME_OVER
jmp room_loop
done_room:
rts
end_message:
.byte 8,10,"PRESS RETURN TO CONTINUE",0
.byte 11,20,"ACCESS CODE: ANKD",0
.include "../text_print.s"
.include "../gr_pageflip.s"
.include "../decompress_fast_v2.s"
.include "../gr_vlin.s"
.include "../gr_copy.s"
.include "../gr_putsprite.s"
.include "../gr_putsprite_crop.s"
.include "../gr_offsets.s"
.include "../gr_hlin.s"
.include "../keyboard.s"
.include "../gr_overlay.s"
.include "../gr_run_sequence.s"
.include "../random16.s"
.include "../gr_trapezoid.s"
.include "../physicist.s"
.include "../alien.s"
.include "../friend.s"
.include "../gun.s"
.include "../laser.s"
.include "../alien_laser.s"
.include "../blast.s"
.include "../shield.s"
.include "../door.s"
.include "../collision.s"
; room backgrounds
.include "graphics/l15_final/ootw_c15_bath.inc"
.include "graphics/l15_final/ootw_c15_final.inc"
; sprites
.include "../sprites/physicist.inc"
.include "../sprites/alien.inc"
.include "../sprites/friend.inc"
; animations
.include "graphics/l15_final/ootw_c15_walk.inc"
.include "graphics/l15_final/ootw_c15_walkway.inc"
.include "graphics/l15_final/ootw_c15_bridge.inc"
.include "graphics/l15_final/ootw_c15_fall.inc"
;=======================
; Bath intro
bath_intro:
;===========================
; Enable graphics
bit LORES
bit SET_GR
bit FULLGR
bit KEYRESET
;===========================
; Setup pages (is this necessary?)
lda #0
sta DRAW_PAGE
lda #4
sta DISP_PAGE
lda #<bath_arrival_sequence
sta INTRO_LOOPL
lda #>bath_arrival_sequence
sta INTRO_LOOPH
jmp run_sequence
; rts
;=======================
; Bath Arrival Sequence
bath_arrival_sequence:
.byte 255
.word bath_00_lzsa
.byte 25
.word bath_01_lzsa
.byte 25
.word bath_02_lzsa
.byte 25
.word bath_03_lzsa
.byte 25
.word bath_04_lzsa
.byte 25
.word bath_05_lzsa
.byte 25
.word bath_06_lzsa
.byte 25
.word bath_07_lzsa
.byte 25
.word bath_08_lzsa
.byte 25
.word bath_09_lzsa
.byte 25
.word bath_10_lzsa
.byte 25
.word bath_11_lzsa
.byte 25
.word bath_12_lzsa
.byte 25
.word bath_13_lzsa
.byte 25
.word bath_14_lzsa
.byte 25
.word bath_15_lzsa
.byte 25
.word bath_16_lzsa
.byte 25
.word bath_17_lzsa
.byte 25
.word bath_18_lzsa
.byte 25
.word bath_19_lzsa
.byte 25
.word bath_20_lzsa
.byte 25
.word bath_21_lzsa
.byte 25
.word bath_22_lzsa
.byte 25
.word bath_23_lzsa
.byte 25
.word bath_24_lzsa
.byte 25
.word bath_25_lzsa
.byte 25
.word bath_26_lzsa
.byte 25
.word bath_27_lzsa
.byte 25
.word bath_28_lzsa
.byte 25
.word bath_29_lzsa
.byte 25
.word bath_30_lzsa
.byte 25
.word bath_31_lzsa
.byte 25
.word bath_32_lzsa
.byte 25
.word bath_33_lzsa
.byte 25
.word bath_34_lzsa
.byte 25
.word bath_35_lzsa
.byte 25
.word bath_35_lzsa
.byte 0
;=======================
; guard sprite
guard_sprite:
.byte 10,13
.byte $7A,$7A,$7A,$7A,$AA,$AA,$AA,$AA,$AA,$AA
.byte $77,$77,$77,$77,$77,$AA,$AA,$AA,$AA,$AA
.byte $77,$77,$77,$77,$77,$AA,$AA,$AA,$0A,$00
.byte $00,$00,$00,$77,$A7,$AA,$AA,$7A,$70,$AA
.byte $00,$00,$00,$00,$AA,$7A,$77,$77,$77,$7A
.byte $00,$00,$00,$70,$77,$77,$77,$77,$77,$77
.byte $00,$00,$70,$77,$77,$77,$77,$77,$AA,$AA
.byte $00,$00,$07,$77,$77,$77,$A7,$AA,$AA,$AA
.byte $00,$00,$00,$07,$A7,$A7,$AA,$AA,$AA,$AA
.byte $00,$00,$00,$00,$AA,$AA,$AA,$AA,$AA,$AA
.byte $00,$00,$00,$00,$AA,$AA,$AA,$AA,$AA,$AA
.byte $00,$00,$00,$00,$AA,$AA,$AA,$AA,$AA,$AA
.byte $00,$00,$00,$00,$AA,$AA,$AA,$AA,$AA,$AA
;=======================
; guard laser
guard_laser:
; .byte 15,4
; .byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$1A,$1A,$A1
; .byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$1A,$1A,$A1,$A1,$AA,$AA,$AA
; .byte $AA,$AA,$AA,$AA,$1A,$1A,$11,$A1,$A1,$AA,$AA,$AA,$AA,$AA,$AA
; .byte $1A,$1A,$11,$A1,$A1,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
.byte 15,3
.byte $AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$1A,$1A,$1A
.byte $AA,$AA,$AA,$AA,$AA,$AA,$1A,$1A,$1A,$11,$A1,$A1,$A1,$AA,$AA
.byte $1A,$1A,$1A,$11,$A1,$A1,$A1,$AA,$AA,$AA,$AA,$AA,$AA,$AA,$AA
shot_lookup1:
.word shot1_frame1
.word shot1_frame2
.word shot1_frame3
.word shot1_hole
shot_lookup2:
.word shot2_frame1
.word shot2_frame2
.word shot2_frame3
.word shot2_hole
shot_lookup3:
.word shot3_frame1
.word shot3_frame2
.word shot3_frame3
.word shot3_hole
shot_lookup4:
.word shot4_frame1
.word shot4_frame2
.word shot4_frame3
.word shot4_hole
shot1_frame1:
.byte 2,128 ; LEFT SLOPE H/L
.byte 0,128 ; RIGHT SLOPE H/L
.byte 4,0 ; STARTX H/L
.byte 17,0 ; ENDX H/L
.byte 36,46 ; ENDY/STARTY
shot1_frame2:
.byte 2,0 ; LEFT SLOPE H/L
.byte 0,$80 ; RIGHT SLOPE H/L
.byte 5,0 ; STARTX H/L
.byte 16,128 ; ENDX H/L
.byte 30,46 ; ENDY/STARTY
shot1_frame3:
.byte 2,0 ; LEFT SLOPE H/L
.byte 2,0 ; RIGHT SLOPE H/L
.byte 19,0 ; STARTX H/L
.byte 21,9 ; ENDX H/L
.byte 28,32 ; ENDY/STARTY
shot1_hole:
.byte 21,28 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 0,0 ; STARTX H/L
.byte 0,0 ; ENDX H/L
.byte 0,$ff ; ENDY/STARTY
; shot 2
shot2_frame1:
.byte $ff,00 ; LEFT SLOPE H/L
.byte $fe,00 ; RIGHT SLOPE H/L
.byte 19,0 ; STARTX H/L
.byte 32,0 ; ENDX H/L
.byte 28,46 ; ENDY/STARTY
shot2_frame2:
.byte $ff,00 ; LEFT SLOPE H/L
.byte $fe,$80 ; RIGHT SLOPE H/L ; approximately 1/3?
.byte 17,0 ; STARTX H/L
.byte 23,0 ; ENDX H/L
.byte 18,36 ; ENDY/STARTY
shot2_frame3:
.byte 0,0 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 7,0 ; STARTX H/L
.byte 9,0 ; ENDX H/L
.byte 18,20 ; ENDY/STARTY
shot2_hole:
.byte 6,20 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 0,0 ; STARTX H/L
.byte 0,0 ; ENDX H/L
.byte 0,$ff ; ENDY/STARTY
; shot3
shot3_frame1:
.byte $FE,0 ; LEFT SLOPE H/L
.byte $FE,$80 ; RIGHT SLOPE H/L
.byte 37,0 ; STARTX H/L
.byte 40,0 ; ENDX H/L
.byte 18,24 ; ENDY/STARTY
shot3_frame2:
.byte $FD,0 ; LEFT SLOPE H/L
.byte $FD,0 ; RIGHT SLOPE H/L
.byte 19,0 ; STARTX H/L
.byte 23,0 ; ENDX H/L
.byte 12,16 ; ENDY/STARTY
shot3_frame3:
.byte 0,0 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 9,0 ; STARTX H/L
.byte 10,0 ; ENDX H/L
.byte 10,12 ; ENDY/STARTY
shot3_hole:
.byte 7,12 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 0,0 ; STARTX H/L
.byte 0,0 ; ENDX H/L
.byte 0,$ff ; ENDY/STARTY
; shot4
shot4_frame1:
.byte $FD,$00 ; LEFT SLOPE H/L
.byte $FF,$80 ; RIGHT SLOPE H/L
.byte 13,0 ; STARTX H/L
.byte 18,0 ; ENDX H/L
.byte $FE,6 ; ENDY/STARTY
shot4_frame2:
.byte $FD,$00 ; LEFT SLOPE H/L
.byte $FF,$00 ; RIGHT SLOPE H/L
.byte 22,0 ; STARTX H/L
.byte 24,0 ; ENDX H/L
.byte 0,10 ; ENDY/STARTY
shot4_frame3:
.byte 0,0 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 24,0 ; STARTX H/L
.byte 25,9 ; ENDX H/L
.byte 10,12 ; ENDY/STARTY
shot4_hole:
.byte 23,12 ; LEFT SLOPE H/L
.byte 0,0 ; RIGHT SLOPE H/L
.byte 0,0 ; STARTX H/L
.byte 0,0 ; ENDX H/L
.byte 0,$ff ; ENDY/STARTY
; shot notes
; + from bottom-right to mid-left
; + from top-center to mid-right
; + from mid-right to mid-left
; + straight across bottom
; + from top-left to mid-right
; + from center-right to mid-left
;
enemy_walking_sequence:
.word 0 ; makes code easier
.word walk00_lzsa
.word walk01_lzsa
.word walk02_lzsa
.word walk03_lzsa
.word walk04_lzsa
.word walk05_lzsa
.word walk06_lzsa
.word walk07_lzsa
.word walk08_lzsa
.word walk09_lzsa
.word walk10_lzsa
.word 0
bigshot_sequence:
.word bigshot01_lzsa
.word bigshot02_lzsa
.word bigshot03_lzsa
.word bigshot04_lzsa
glass_breaking_sequence:
.word crash1_lzsa ; 2
.word crash2_lzsa ; 4
.word crash3_lzsa ; 6
.word crash4_lzsa ; 8
.word crash5_lzsa ; 10
.word crash6_lzsa ; 12
.word crash7_lzsa ; 14
bridge_sequence:
.word lshot1_lzsa ; 2
.word lshot2_lzsa ; 4
.word lshot3_lzsa ; 6
.word lshot4_lzsa ; 8
.word lshot5_lzsa ; 10
.word lshot6_lzsa ; 12
; grab sequence
; note, in the actual game both the background and the falling is not
; 100% the same as the fall sequence, but it's close enough to not
; really be worth the trouble/space to do them separately
; grab52 -> fall01
; grab53 -> fall02 shifted right by 2?
; grab54 -> fall03 shifted right by 4?
; grab55 -> fall04 shifted right by 4?
; grab56 -> fall05 shifted right by 4?
; grab57 -> fall06 shifted right by 4?
; grab58 -> fall07 shifted right by 4?
; grab59 -> fall08 shifted right by 4?
; grab60 -> fall09 shifted right by 4?
; grab61 -> fall10 shifted right by 4?
; grab62 -> fall11 shifted right by 4?
; grab63 -> fall12 shifted right by 4?
; grab64 -> fall13 shifted right by 4?
; grab65 -> fall14 shifted right by 4?
; grab66 -> fall15 shifted right by 4?