mirror of
https://github.com/deater/dos33fsprogs.git
synced 2024-12-27 02:31:00 +00:00
606 lines
7.1 KiB
ArmAsm
606 lines
7.1 KiB
ArmAsm
|
; Ootw Pool Party
|
||
|
|
||
|
ootw_pool:
|
||
|
;================
|
||
|
; Enable graphics
|
||
|
|
||
|
bit LORES
|
||
|
bit SET_GR
|
||
|
bit FULLGR
|
||
|
|
||
|
;===================
|
||
|
; disable earthquake
|
||
|
|
||
|
lda #0
|
||
|
sta EARTH_OFFSET
|
||
|
|
||
|
lda #4
|
||
|
sta WHICH_CAVE
|
||
|
|
||
|
;===========================
|
||
|
; Setup pages (is this necessary?)
|
||
|
|
||
|
lda #0
|
||
|
sta DRAW_PAGE
|
||
|
lda #1
|
||
|
sta DISP_PAGE
|
||
|
|
||
|
;===========================
|
||
|
; Setup right/left exit paramaters
|
||
|
|
||
|
lda #(39+128)
|
||
|
sta RIGHT_LIMIT
|
||
|
sta RIGHT_WALK_LIMIT
|
||
|
lda #(-4+128)
|
||
|
sta LEFT_LIMIT
|
||
|
sta LEFT_WALK_LIMIT
|
||
|
|
||
|
;=============================
|
||
|
; Load background to $c00
|
||
|
|
||
|
lda #>(pool_rle)
|
||
|
sta GBASH
|
||
|
lda #<(pool_rle)
|
||
|
sta GBASL
|
||
|
lda #$c ; load image off-screen $c00
|
||
|
jsr load_rle_gr
|
||
|
|
||
|
|
||
|
;=================================
|
||
|
; setup vars
|
||
|
|
||
|
lda #0
|
||
|
sta GAIT
|
||
|
sta GAME_OVER
|
||
|
sta TENTACLE_GRAB
|
||
|
|
||
|
lda #30
|
||
|
sta TENTACLE_PROGRESS
|
||
|
|
||
|
;==================================
|
||
|
; setup beast if we're running from it
|
||
|
|
||
|
; jsr setup_beast
|
||
|
|
||
|
|
||
|
;============================
|
||
|
;============================
|
||
|
;============================
|
||
|
; Pool Loop (palindrome)
|
||
|
;============================
|
||
|
;============================
|
||
|
;============================
|
||
|
pool_loop:
|
||
|
|
||
|
;================================
|
||
|
; copy background to current page
|
||
|
|
||
|
jsr gr_copy_to_current
|
||
|
|
||
|
;================================
|
||
|
; draw bg beast, if needed
|
||
|
|
||
|
; jsr draw_bg_beast
|
||
|
|
||
|
|
||
|
;=======================
|
||
|
; draw pool ripples
|
||
|
|
||
|
; jsr draw_ripples
|
||
|
|
||
|
|
||
|
;==============================
|
||
|
; handle being grabbed
|
||
|
|
||
|
lda TENTACLE_GRAB
|
||
|
beq tentacle_action
|
||
|
|
||
|
;=================================
|
||
|
; actively being grabbed
|
||
|
|
||
|
lda TENTACLE_PROGRESS
|
||
|
tax
|
||
|
|
||
|
lda caught_progression,X
|
||
|
sta INL
|
||
|
lda caught_progression+1,X
|
||
|
sta INH
|
||
|
|
||
|
lda TENTACLE_X
|
||
|
sta XPOS
|
||
|
lda #32
|
||
|
sta YPOS
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$1f
|
||
|
bne no_caught_progress
|
||
|
|
||
|
inc TENTACLE_PROGRESS
|
||
|
inc TENTACLE_PROGRESS
|
||
|
no_caught_progress:
|
||
|
jsr put_sprite
|
||
|
|
||
|
lda TENTACLE_PROGRESS
|
||
|
cmp #24
|
||
|
bne beyond_tentacles
|
||
|
|
||
|
lda #$ff
|
||
|
sta GAME_OVER
|
||
|
|
||
|
jmp beyond_tentacles
|
||
|
|
||
|
|
||
|
;===============
|
||
|
; move/draw tentacle monster
|
||
|
tentacle_action:
|
||
|
lda FRAMEH
|
||
|
and #3
|
||
|
bne tentacle_move
|
||
|
lda FRAMEL
|
||
|
cmp #$ff
|
||
|
bne tentacle_move
|
||
|
tentacle_init:
|
||
|
sec
|
||
|
lda PHYSICIST_X
|
||
|
sbc #2
|
||
|
sta TENTACLE_X
|
||
|
|
||
|
lda #0
|
||
|
sta TENTACLE_PROGRESS
|
||
|
|
||
|
tentacle_move:
|
||
|
|
||
|
lda TENTACLE_PROGRESS
|
||
|
cmp #26
|
||
|
bpl no_tentacle
|
||
|
|
||
|
tax
|
||
|
|
||
|
lda tentacle_progression,X
|
||
|
sta INL
|
||
|
lda tentacle_progression+1,X
|
||
|
sta INH
|
||
|
|
||
|
lda TENTACLE_X
|
||
|
sta XPOS
|
||
|
lda #32
|
||
|
sta YPOS
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$3f
|
||
|
bne no_tentacle_progress
|
||
|
|
||
|
inc TENTACLE_PROGRESS
|
||
|
inc TENTACLE_PROGRESS
|
||
|
no_tentacle_progress:
|
||
|
jsr put_sprite
|
||
|
|
||
|
; See if we are fully extended
|
||
|
; if we are close enough to grab
|
||
|
|
||
|
lda TENTACLE_PROGRESS
|
||
|
cmp #12
|
||
|
bne no_tentacle
|
||
|
|
||
|
sec
|
||
|
lda PHYSICIST_X
|
||
|
sbc TENTACLE_X ; want -4 to 4
|
||
|
clc
|
||
|
adc #4 ; want 0 to 8
|
||
|
and #$f8
|
||
|
bne no_tentacle
|
||
|
|
||
|
lda #0
|
||
|
sta TENTACLE_PROGRESS
|
||
|
lda #1
|
||
|
sta TENTACLE_GRAB
|
||
|
|
||
|
no_tentacle:
|
||
|
|
||
|
;===============================
|
||
|
; check keyboard
|
||
|
|
||
|
jsr handle_keypress
|
||
|
|
||
|
|
||
|
;===============================
|
||
|
; move physicist
|
||
|
|
||
|
jsr move_physicist
|
||
|
|
||
|
;===============================
|
||
|
; check limits
|
||
|
|
||
|
jsr check_screen_limit
|
||
|
|
||
|
;===============
|
||
|
; draw physicist
|
||
|
|
||
|
jsr draw_physicist
|
||
|
|
||
|
;================
|
||
|
; handle beast
|
||
|
|
||
|
lda BEAST_OUT
|
||
|
beq pool_no_beast
|
||
|
|
||
|
;================
|
||
|
; move beast
|
||
|
|
||
|
; jsr move_beast
|
||
|
|
||
|
;================
|
||
|
; draw beast
|
||
|
|
||
|
; jsr draw_beast
|
||
|
|
||
|
pool_no_beast:
|
||
|
|
||
|
|
||
|
beyond_tentacles:
|
||
|
|
||
|
;======================
|
||
|
; draw foreground plant
|
||
|
|
||
|
; jsr draw_fg_plant
|
||
|
|
||
|
;===============
|
||
|
; page flip
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
;================
|
||
|
; inc frame count
|
||
|
|
||
|
inc FRAMEL
|
||
|
bne frame_no_oflo
|
||
|
inc FRAMEH
|
||
|
|
||
|
frame_no_oflo:
|
||
|
|
||
|
; pause?
|
||
|
|
||
|
; check if done this level
|
||
|
|
||
|
lda GAME_OVER
|
||
|
cmp #$ff
|
||
|
beq done_pool
|
||
|
|
||
|
; check if done this level
|
||
|
; cmp #$2
|
||
|
; bne not_to_right
|
||
|
|
||
|
; exit to right
|
||
|
|
||
|
; lda #0
|
||
|
; sta PHYSICIST_X
|
||
|
; sta WHICH_CAVE
|
||
|
|
||
|
; jmp ootw_cavern
|
||
|
|
||
|
;not_to_right:
|
||
|
; cmp #$1
|
||
|
; bne not_done_pool
|
||
|
|
||
|
; lda #36
|
||
|
; sta PHYSICIST_X
|
||
|
|
||
|
; jmp ootw_rope
|
||
|
|
||
|
;not_done_pool:
|
||
|
|
||
|
; loop forever
|
||
|
|
||
|
jmp pool_loop
|
||
|
|
||
|
done_pool:
|
||
|
rts
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
;=======================
|
||
|
; draw pool ripples
|
||
|
|
||
|
.if 0
|
||
|
draw_ripples:
|
||
|
lda FRAMEL
|
||
|
and #$30 ; 0110 1100
|
||
|
lsr
|
||
|
lsr
|
||
|
lsr
|
||
|
tax
|
||
|
|
||
|
lda pool_ripples,X
|
||
|
sta INL
|
||
|
lda pool_ripples+1,X
|
||
|
sta INH
|
||
|
|
||
|
lda #9
|
||
|
sta XPOS
|
||
|
lda #30
|
||
|
sta YPOS
|
||
|
|
||
|
jsr put_sprite
|
||
|
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$30 ; 0110 1100
|
||
|
lsr
|
||
|
lsr
|
||
|
lsr
|
||
|
clc
|
||
|
adc #2
|
||
|
and #$6
|
||
|
tax
|
||
|
|
||
|
lda pool_ripples,X
|
||
|
sta INL
|
||
|
lda pool_ripples+1,X
|
||
|
sta INH
|
||
|
|
||
|
|
||
|
lda #27
|
||
|
sta XPOS
|
||
|
lda #30
|
||
|
sta YPOS
|
||
|
|
||
|
jsr put_sprite
|
||
|
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$30 ; 0110 1100
|
||
|
lsr
|
||
|
lsr
|
||
|
lsr
|
||
|
clc
|
||
|
adc #4
|
||
|
and #$6
|
||
|
tax
|
||
|
|
||
|
lda #18
|
||
|
sta XPOS
|
||
|
lda #28
|
||
|
sta YPOS
|
||
|
|
||
|
jmp put_sprite ; tail call
|
||
|
; rts
|
||
|
|
||
|
|
||
|
.endif
|
||
|
|
||
|
|
||
|
;============================
|
||
|
;============================
|
||
|
; exit pool
|
||
|
;============================
|
||
|
;============================
|
||
|
|
||
|
exit_pool:
|
||
|
lda #0
|
||
|
sta BG_BEAST
|
||
|
sta EXIT_COUNT
|
||
|
|
||
|
;=============================
|
||
|
; Load background to $c00
|
||
|
|
||
|
lda #>(pool_rle)
|
||
|
sta GBASH
|
||
|
lda #<(pool_rle)
|
||
|
sta GBASL
|
||
|
lda #$c ; load image off-screen $c00
|
||
|
jsr load_rle_gr
|
||
|
|
||
|
|
||
|
exit_pool_loop:
|
||
|
|
||
|
;================================
|
||
|
; copy background to current page
|
||
|
|
||
|
jsr gr_copy_to_current
|
||
|
|
||
|
|
||
|
;=======================
|
||
|
; draw pool ripples
|
||
|
|
||
|
; jsr draw_ripples
|
||
|
|
||
|
|
||
|
;================
|
||
|
; draw background beast
|
||
|
|
||
|
; jsr draw_bg_beast
|
||
|
|
||
|
|
||
|
;===============
|
||
|
; draw physicist
|
||
|
|
||
|
lda EXIT_COUNT
|
||
|
and #$fe
|
||
|
tay
|
||
|
|
||
|
lda #20
|
||
|
sta XPOS
|
||
|
lda #32
|
||
|
sta YPOS
|
||
|
|
||
|
lda pool_exit_progression,Y
|
||
|
sta INL
|
||
|
lda pool_exit_progression+1,Y
|
||
|
sta INH
|
||
|
|
||
|
jsr put_sprite
|
||
|
|
||
|
|
||
|
;=================
|
||
|
; draw foreground plant
|
||
|
|
||
|
; jsr draw_fg_plant
|
||
|
|
||
|
;===============
|
||
|
; page flip
|
||
|
|
||
|
jsr page_flip
|
||
|
|
||
|
;================
|
||
|
; inc frame count
|
||
|
|
||
|
inc FRAMEL
|
||
|
bne framee_no_oflo
|
||
|
inc FRAMEH
|
||
|
|
||
|
framee_no_oflo:
|
||
|
|
||
|
; increment exit count
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$0f
|
||
|
bne exit_count_same
|
||
|
|
||
|
inc EXIT_COUNT
|
||
|
|
||
|
|
||
|
exit_count_same:
|
||
|
|
||
|
|
||
|
; see if start bg beast going
|
||
|
|
||
|
lda EXIT_COUNT
|
||
|
cmp #(14*2)
|
||
|
bne check_done_exiting_pool
|
||
|
|
||
|
lda #2
|
||
|
sta BG_BEAST
|
||
|
|
||
|
check_done_exiting_pool:
|
||
|
|
||
|
; check if done
|
||
|
|
||
|
lda EXIT_COUNT
|
||
|
cmp #(26*2)
|
||
|
beq done_exit_pool
|
||
|
|
||
|
jmp exit_pool_loop
|
||
|
|
||
|
done_exit_pool:
|
||
|
bit KEYRESET
|
||
|
|
||
|
rts
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
;=========================
|
||
|
; draw background beast
|
||
|
;=========================
|
||
|
|
||
|
draw_bg_beast:
|
||
|
.if 0
|
||
|
; if 0, skip altogether
|
||
|
lda BG_BEAST
|
||
|
beq done_draw_bg_beast
|
||
|
|
||
|
cmp #14
|
||
|
bcc bg_beast_incoming ; blt
|
||
|
|
||
|
cmp #$44
|
||
|
bcs bg_beast_outgoing ; bge
|
||
|
|
||
|
bg_beast_just_standing:
|
||
|
|
||
|
; FIXME: look at you when close
|
||
|
|
||
|
lda PHYSICIST_X
|
||
|
cmp #30
|
||
|
bcs beast_staring ; bge
|
||
|
|
||
|
lda #<beast_bg7
|
||
|
sta INL
|
||
|
lda #>beast_bg7
|
||
|
sta INH
|
||
|
lda #33
|
||
|
sta XPOS
|
||
|
jmp bg_beast_callsprite
|
||
|
|
||
|
beast_staring:
|
||
|
lda #<beast_bg8
|
||
|
sta INL
|
||
|
lda #>beast_bg8
|
||
|
sta INH
|
||
|
lda #33
|
||
|
sta XPOS
|
||
|
jmp bg_beast_callsprite
|
||
|
|
||
|
|
||
|
|
||
|
bg_beast_incoming:
|
||
|
|
||
|
lda BG_BEAST
|
||
|
and #$fe
|
||
|
asl
|
||
|
tay
|
||
|
|
||
|
lda beast_incoming,Y
|
||
|
sta INL
|
||
|
lda beast_incoming+1,Y
|
||
|
sta INH
|
||
|
lda beast_incoming+2,Y
|
||
|
jmp bg_beast_callsprite
|
||
|
|
||
|
bg_beast_outgoing:
|
||
|
|
||
|
lda BG_BEAST
|
||
|
sec
|
||
|
sbc #$44
|
||
|
and #$fe
|
||
|
asl
|
||
|
tay
|
||
|
|
||
|
lda beast_outgoing,Y
|
||
|
sta INL
|
||
|
lda beast_outgoing+1,Y
|
||
|
sta INH
|
||
|
lda beast_outgoing+2,Y
|
||
|
jmp bg_beast_callsprite
|
||
|
|
||
|
|
||
|
bg_beast_callsprite:
|
||
|
sta XPOS
|
||
|
lda #8
|
||
|
sta YPOS
|
||
|
jsr put_sprite_crop
|
||
|
|
||
|
lda FRAMEL
|
||
|
and #$7
|
||
|
bne done_draw_bg_beast
|
||
|
|
||
|
inc BG_BEAST
|
||
|
|
||
|
lda BG_BEAST
|
||
|
cmp #$50
|
||
|
bcc done_draw_bg_beast
|
||
|
|
||
|
; disable if hit $50
|
||
|
|
||
|
lda #0
|
||
|
sta BG_BEAST
|
||
|
|
||
|
done_draw_bg_beast:
|
||
|
.endif
|
||
|
rts
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|