mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-09 10:30:21 +00:00
1136 lines
19 KiB
ArmAsm
1136 lines
19 KiB
ArmAsm
; Fishing Challenge '91
|
|
;
|
|
; "Are you asking for some sort of early-90s fishing challenge????"
|
|
;
|
|
; Yet Another HR project
|
|
;
|
|
; by deater (Vince Weaver) <vince@deater.net>
|
|
|
|
.include "zp.inc"
|
|
.include "hardware.inc"
|
|
|
|
; NOTES FROM WIKI
|
|
; green fish 50 or 100
|
|
; grey fish 100 points
|
|
; red fish 400 or 500
|
|
; bubbles easier to catch?
|
|
; grey = lures, red green = jigs
|
|
|
|
|
|
; NOTES
|
|
; hgr page1= $2000-$3fff
|
|
; hgr page2= $4000-$5fff
|
|
; code = $4000-$9fff (24k) code
|
|
; saved bg = $a000-$bfff
|
|
|
|
; note we have to be done with the code in page2 before
|
|
; we over-write it by playing the game
|
|
|
|
div7_table = $400
|
|
mod7_table = $500
|
|
hposn_high = $600
|
|
hposn_low = $700
|
|
|
|
|
|
fish_start:
|
|
|
|
;===================
|
|
; set graphics mode
|
|
;===================
|
|
jsr HOME
|
|
|
|
bit HIRES
|
|
bit FULLGR
|
|
bit SET_GR
|
|
bit PAGE1
|
|
|
|
;====================
|
|
; set up tables
|
|
;====================
|
|
|
|
lda #$20
|
|
sta HGR_PAGE
|
|
jsr hgr_make_tables
|
|
|
|
;==========================
|
|
; Load Sound
|
|
;===========================
|
|
|
|
lda SOUND_STATUS
|
|
and #SOUND_IN_LC
|
|
beq done_load_sound
|
|
|
|
; read/write RAM, use $d000 bank1
|
|
bit $C083
|
|
bit $C083
|
|
|
|
; fish = 4225 bytes load at $D000 - $E0FF
|
|
; boat = 4966 bytes load at $E100 - $F4FF
|
|
|
|
lda #<sound_data_fish
|
|
sta ZX0_src
|
|
lda #>sound_data_fish
|
|
sta ZX0_src+1
|
|
|
|
lda #$D0
|
|
|
|
jsr full_decomp
|
|
|
|
lda #<sound_data_boat
|
|
sta ZX0_src
|
|
lda #>sound_data_boat
|
|
sta ZX0_src+1
|
|
|
|
lda #$E1
|
|
|
|
jsr full_decomp
|
|
|
|
; read ROM/no-write
|
|
bit $C082
|
|
|
|
done_load_sound:
|
|
|
|
;==========================
|
|
; Load Title
|
|
;===========================
|
|
|
|
load_title:
|
|
lda #<title_data
|
|
sta ZX0_src
|
|
lda #>title_data
|
|
sta ZX0_src+1
|
|
|
|
lda #$20
|
|
|
|
jsr full_decomp
|
|
|
|
|
|
wait_at_tile:
|
|
lda KEYPRESS
|
|
bpl wait_at_tile
|
|
|
|
bit KEYRESET
|
|
|
|
;===================
|
|
; print directions
|
|
;===================
|
|
; in the actual game this is overlay ontop of the faded gameplay
|
|
; that would be a pain so we're not going to do it
|
|
|
|
lda #$0
|
|
sta DRAW_PAGE
|
|
|
|
jsr clear_all
|
|
|
|
bit LORES
|
|
bit FULLGR
|
|
bit SET_TEXT
|
|
bit PAGE1
|
|
|
|
lda #<help_text
|
|
sta OUTL
|
|
lda #>help_text
|
|
sta OUTH
|
|
|
|
jsr set_normal ; normal text
|
|
|
|
ldx #7
|
|
print_help:
|
|
jsr move_and_print
|
|
dex
|
|
bne print_help
|
|
|
|
jsr set_flash ; have the "press spacebar" flash
|
|
jsr move_and_print
|
|
|
|
wait_at_directions:
|
|
lda KEYPRESS
|
|
bpl wait_at_directions
|
|
|
|
bit KEYRESET
|
|
|
|
;===================
|
|
; setup game
|
|
;===================
|
|
|
|
; lda #0
|
|
; sta DRAW_PAGE
|
|
|
|
|
|
jmp skip_ahead
|
|
|
|
|
|
help_text:
|
|
.byte 0,0,"INSTRUCTIONS:",0
|
|
.byte 5,3,"- PRESS 'J' TO JIG",0
|
|
.byte 5,4,"- PRESS 'L' TO LURE",0
|
|
.byte 5,7,"SOME FISH RESPOND TO LURES,",0
|
|
.byte 5,8,"OTHERS TO JIGS.",0
|
|
.byte 5,11,"CATCH MORE FISH FOR MAXIMUM",0
|
|
.byte 5,12,"FUNTIME!",0
|
|
.byte 13,20,"PRESS SPACEBAR!",0 ; note, flash?
|
|
|
|
sound_data_fish:
|
|
.incbin "sounds/fish.btc.zx02"
|
|
sound_data_boat:
|
|
.incbin "sounds/get_in_boat.btc.zx02"
|
|
|
|
title_data:
|
|
.incbin "graphics/fish_title.hgr.zx02"
|
|
|
|
|
|
skip_ahead:
|
|
|
|
;==========================
|
|
; Load Background
|
|
;===========================
|
|
|
|
load_background:
|
|
|
|
lda #<bg_data
|
|
sta ZX0_src
|
|
lda #>bg_data
|
|
sta ZX0_src+1
|
|
|
|
lda #$a0 ; background copy at $a000
|
|
|
|
jsr full_decomp
|
|
|
|
; lda #<bg_data
|
|
; sta ZX0_src
|
|
; lda #>bg_data
|
|
; sta ZX0_src+1
|
|
|
|
; lda #$40
|
|
|
|
;===================
|
|
; set up variables
|
|
|
|
|
|
bit HIRES
|
|
bit FULLGR
|
|
bit SET_GR
|
|
bit PAGE1
|
|
|
|
; re-set up hgr tables
|
|
|
|
lda #$20
|
|
sta HGR_PAGE
|
|
jsr hgr_make_tables
|
|
|
|
; init score
|
|
lda #$00
|
|
sta SCORE_L
|
|
sta SCORE_H
|
|
|
|
; init fish
|
|
lda #FISH_NONE
|
|
sta RED_FISH_STATE_PTR
|
|
sta GREY_FISH_STATE_PTR
|
|
sta GREEN_FISH_STATE_PTR
|
|
sta BUBBLE_STATE_PTR ; init bubble too
|
|
|
|
|
|
; start at least 8k in?
|
|
|
|
;==========================
|
|
; main loop
|
|
;===========================
|
|
main_loop:
|
|
|
|
|
|
|
|
jsr flip_page
|
|
|
|
|
|
;========================
|
|
;========================
|
|
; draw the scene
|
|
;========================
|
|
;========================
|
|
|
|
;==================================
|
|
; copy over (erase) old background
|
|
|
|
; this isn't fast, but much faster than decompressing
|
|
; we could be faster if we unrolled, or only
|
|
; did part of the screen
|
|
|
|
lda #$a0
|
|
sta INH
|
|
|
|
clc
|
|
lda DRAW_PAGE
|
|
adc #$20
|
|
sta OUTH
|
|
|
|
lda #$0
|
|
sta INL
|
|
sta OUTL
|
|
|
|
ldy #0
|
|
bg_copy_loop:
|
|
lda (INL),Y
|
|
sta (OUTL),Y
|
|
dey
|
|
bne bg_copy_loop
|
|
inc INH
|
|
inc OUTH
|
|
lda INH
|
|
cmp #$C0
|
|
bne bg_copy_loop
|
|
|
|
|
|
; lda #<bg_data
|
|
; sta ZX0_src
|
|
; lda #>bg_data
|
|
; sta ZX0_src+1
|
|
|
|
; clc
|
|
; lda DRAW_PAGE
|
|
; adc #$20
|
|
|
|
; jsr full_decomp
|
|
|
|
inc FRAME
|
|
|
|
;==========================
|
|
; draw boat
|
|
|
|
lda FRAME
|
|
lsr
|
|
; lsr
|
|
and #$3
|
|
tax
|
|
|
|
lda boat_offsets,X
|
|
sta BOAT_OFFSET
|
|
|
|
|
|
lda boat_sprites_l,X
|
|
sta INL
|
|
lda boat_sprites_h,X
|
|
sta INH
|
|
lda #8
|
|
sta SPRITE_X
|
|
lda #94
|
|
sta SPRITE_Y
|
|
jsr hgr_draw_sprite_big
|
|
|
|
;===========================
|
|
; draw ripples
|
|
; should we do this last?
|
|
|
|
lda FRAME
|
|
and #$3
|
|
tax
|
|
|
|
lda ripple_l_sprites_l,X
|
|
sta INL
|
|
lda ripple_l_sprites_h,X
|
|
sta INH
|
|
|
|
lda #8
|
|
sta SPRITE_X
|
|
lda #136
|
|
sta SPRITE_Y
|
|
jsr hgr_draw_sprite
|
|
|
|
lda FRAME
|
|
and #$3
|
|
tax
|
|
|
|
lda ripple_r_sprites_l,X
|
|
sta INL
|
|
lda ripple_r_sprites_h,X
|
|
sta INH
|
|
|
|
lda #32
|
|
sta SPRITE_X
|
|
lda #139
|
|
sta SPRITE_Y
|
|
jsr hgr_draw_sprite
|
|
|
|
|
|
;===========================
|
|
; draw strong bad
|
|
|
|
draw_strong_bad:
|
|
|
|
lda ANIMATION_TYPE
|
|
cmp #ANIMATION_LURE
|
|
beq draw_lure_animation
|
|
cmp #ANIMATION_JIG
|
|
beq draw_jig_animation
|
|
|
|
draw_regular_animation:
|
|
lda #<sb_sprite
|
|
sta INL
|
|
lda #>sb_sprite
|
|
sta INH
|
|
|
|
lda #23
|
|
sta SPRITE_X
|
|
lda #42
|
|
sta SPRITE_Y
|
|
|
|
jmp draw_common_animation
|
|
|
|
draw_lure_animation:
|
|
ldx ANIMATION_COUNT
|
|
lda lure_sprites_l,X
|
|
sta INL
|
|
lda lure_sprites_h,X
|
|
sta INH
|
|
|
|
lda #23
|
|
sta SPRITE_X
|
|
lda #42
|
|
sta SPRITE_Y
|
|
jmp draw_common_animation
|
|
|
|
draw_jig_animation:
|
|
ldx ANIMATION_COUNT
|
|
lda jig_sprites_l,X
|
|
sta INL
|
|
lda jig_sprites_h,X
|
|
sta INH
|
|
|
|
lda #22
|
|
sta SPRITE_X
|
|
lda #27
|
|
sta SPRITE_Y
|
|
|
|
update_animation:
|
|
dec ANIMATION_COUNT
|
|
bpl draw_common_animation
|
|
|
|
; done
|
|
|
|
lda #ANIMATION_NONE
|
|
sta ANIMATION_TYPE
|
|
|
|
draw_common_animation:
|
|
lda SPRITE_Y
|
|
clc
|
|
adc BOAT_OFFSET
|
|
sta SPRITE_Y
|
|
|
|
jsr hgr_draw_sprite_big
|
|
|
|
;============================
|
|
;============================
|
|
; handle fish
|
|
;============================
|
|
;============================
|
|
|
|
|
|
;============================
|
|
; deploy fish
|
|
;============================
|
|
; TODO: if fish not out, randomly start one?
|
|
handle_fish:
|
|
|
|
handle_red_fish:
|
|
lda RED_FISH_STATE_PTR
|
|
cmp #$ff
|
|
bne handle_grey_fish ; #$ff means fish is not active
|
|
|
|
; create new red/big fish
|
|
lda #0
|
|
sta RED_FISH_STATE_PTR
|
|
|
|
lda #FISH_SPRITE_LONG
|
|
sta RED_FISH_SPRITE
|
|
|
|
lda #17
|
|
sta RED_FISH_X
|
|
lda #180
|
|
sta RED_FISH_Y
|
|
|
|
handle_grey_fish:
|
|
lda GREY_FISH_STATE_PTR
|
|
cmp #$ff
|
|
bne handle_green_fish ; $FF means fish is not active
|
|
|
|
; create new grey/left fish
|
|
; lda #0
|
|
; sta GREY_FISH_STATE_PTR
|
|
|
|
lda #FISH_SPRITE_LEFT
|
|
sta GREY_FISH_SPRITE
|
|
|
|
lda #31
|
|
sta GREY_FISH_X
|
|
lda #170
|
|
sta GREY_FISH_Y
|
|
|
|
handle_green_fish:
|
|
lda GREEN_FISH_STATE_PTR
|
|
cmp #$FF
|
|
bne done_handle_fish ; $FF means fish is not active
|
|
|
|
; create new green/right fish
|
|
; lda #0
|
|
; sta GREEN_FISH_STATE_PTR
|
|
|
|
lda #FISH_SPRITE_RIGHT
|
|
sta GREEN_FISH_SPRITE
|
|
|
|
lda #11
|
|
sta GREEN_FISH_X
|
|
lda #146
|
|
sta GREEN_FISH_Y
|
|
|
|
done_handle_fish:
|
|
|
|
|
|
; draw red fish
|
|
|
|
draw_red_fish:
|
|
|
|
ldx RED_FISH_STATE_PTR
|
|
cpx #$FF
|
|
beq draw_grey_fish ; $FF means no fish
|
|
|
|
ldy red_fish_behavior,X
|
|
|
|
ldx #0 ; which fish
|
|
|
|
jsr draw_fish
|
|
|
|
draw_grey_fish:
|
|
|
|
ldx GREY_FISH_STATE_PTR ; negative means no fish
|
|
cpx #$FF
|
|
beq draw_green_fish
|
|
|
|
ldy grey_fish_behavior,X
|
|
|
|
ldx #1 ; which fish
|
|
|
|
jsr draw_fish
|
|
|
|
draw_green_fish:
|
|
|
|
ldx GREEN_FISH_STATE_PTR ; negative means no fish
|
|
cmp #$ff
|
|
beq done_draw_fish
|
|
|
|
ldy green_fish_behavior,X
|
|
|
|
ldx #2 ; which fish
|
|
|
|
jsr draw_fish
|
|
|
|
done_draw_fish:
|
|
|
|
;============================
|
|
; draw bubble
|
|
;============================
|
|
; yes there should be multiple bubbles possible at same time
|
|
; but I got lazy
|
|
draw_bubble:
|
|
ldx BUBBLE_STATE_PTR
|
|
bmi done_draw_bubble
|
|
|
|
cpx #6
|
|
bcc bubble_not_done
|
|
|
|
; disable bubble and don't draw
|
|
|
|
ldx #$FF
|
|
stx BUBBLE_STATE_PTR
|
|
bmi done_draw_bubble
|
|
|
|
bubble_not_done:
|
|
|
|
; set up co-ords
|
|
|
|
lda BUBBLE_X
|
|
sta SPRITE_X
|
|
|
|
lda BUBBLE_Y
|
|
sta SPRITE_Y
|
|
|
|
; set up sprite
|
|
|
|
lda bubble_sprite_table_l,X
|
|
sta INL
|
|
lda bubble_sprite_table_h,X
|
|
sta INH
|
|
|
|
; set up mask
|
|
|
|
lda bubble_mask_table_l,X
|
|
sta MASKL
|
|
lda bubble_mask_table_h,X
|
|
sta MASKH
|
|
|
|
jsr hgr_draw_sprite_mask
|
|
|
|
inc BUBBLE_STATE_PTR ; point to next state
|
|
|
|
dec BUBBLE_Y ; have bubble float up a bit
|
|
; dec BUBBLE_Y
|
|
|
|
done_draw_bubble:
|
|
|
|
|
|
;==========================
|
|
; draw score
|
|
;==========================
|
|
|
|
jsr draw_score
|
|
|
|
|
|
|
|
|
|
;============================
|
|
; play sound
|
|
;============================
|
|
|
|
; ldy #5
|
|
; jsr play_asplode
|
|
|
|
|
|
;===========================
|
|
; check keypress
|
|
;===========================
|
|
|
|
check_keypress:
|
|
lda KEYPRESS
|
|
bpl done_keyboard_check
|
|
|
|
bit KEYRESET ; clear the keyboard strobe
|
|
|
|
; clear high bit
|
|
and #$7f
|
|
|
|
and #$df ; convert lowercase to upper
|
|
|
|
cmp #27 ; escape
|
|
beq done_game
|
|
|
|
cmp #'J' ; jig
|
|
beq do_jig
|
|
cmp #'L' ; lure
|
|
beq do_lure
|
|
|
|
done_keyboard_check:
|
|
jmp main_loop
|
|
|
|
|
|
;======================
|
|
; "get in boat"/jig
|
|
do_jig:
|
|
jsr play_boat ; `come on and get in the boat'
|
|
lda #ANIMATION_JIG
|
|
sta ANIMATION_TYPE
|
|
lda #10
|
|
sta ANIMATION_COUNT
|
|
|
|
; FIXME: see if valid fish
|
|
|
|
; FIXME: make fish visible
|
|
|
|
ldx #FISH_SPRITE_RED
|
|
stx RED_FISH_SPRITE
|
|
|
|
; FIXME: start fish on catch path
|
|
|
|
lda #<(catch_fish_behavior-red_fish_behavior)
|
|
sta RED_FISH_STATE_PTR
|
|
|
|
; FIXME: update proper score
|
|
|
|
ldx #0
|
|
jsr update_score
|
|
|
|
jmp main_loop
|
|
|
|
;======================
|
|
; "fish fish"/lure
|
|
do_lure:
|
|
jsr play_fish ; 'fish'
|
|
lda #ANIMATION_LURE
|
|
sta ANIMATION_TYPE
|
|
lda #10
|
|
sta ANIMATION_COUNT
|
|
jmp main_loop
|
|
|
|
;==========================
|
|
; done game
|
|
;==========================
|
|
|
|
done_game:
|
|
lda #0
|
|
really_done_game:
|
|
sta WHICH_LOAD
|
|
rts
|
|
|
|
|
|
.if 0
|
|
|
|
wait_until_keypress:
|
|
lda KEYPRESS ; 4
|
|
bpl wait_until_keypress ; 3
|
|
bit KEYRESET ; clear the keyboard buffer
|
|
rts
|
|
|
|
.endif
|
|
;==========
|
|
; flip page
|
|
;==========
|
|
flip_page:
|
|
lda DRAW_PAGE
|
|
beq draw_page2
|
|
draw_page1:
|
|
bit PAGE2
|
|
lda #0
|
|
|
|
beq done_flip
|
|
|
|
draw_page2:
|
|
bit PAGE1
|
|
lda #$20
|
|
|
|
done_flip:
|
|
sta DRAW_PAGE
|
|
|
|
rts
|
|
|
|
|
|
;===================================
|
|
; draw score
|
|
;===================================
|
|
; score is at 6,7,8,9,10. 10 is always 0
|
|
draw_score:
|
|
lda SCORE_L
|
|
and #$f
|
|
tax
|
|
lda #9
|
|
jsr actual_draw_score
|
|
|
|
lda SCORE_L
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
lda #8
|
|
jsr actual_draw_score
|
|
|
|
lda SCORE_H
|
|
and #$f
|
|
tax
|
|
lda #7
|
|
jsr actual_draw_score
|
|
|
|
lda SCORE_H
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
lda #6
|
|
|
|
; jsr actual_draw_score
|
|
; rts
|
|
|
|
|
|
actual_draw_score:
|
|
sta SPRITE_X
|
|
|
|
lda numbers_l,X
|
|
sta INL
|
|
lda numbers_h,X
|
|
sta INH
|
|
|
|
lda #177
|
|
sta SPRITE_Y
|
|
|
|
jmp hgr_draw_sprite
|
|
|
|
; rts
|
|
|
|
|
|
;====================================
|
|
; update score
|
|
;====================================
|
|
; offset of update value in X
|
|
; score is BCD and in SCORE_H,SCORE_L
|
|
update_score:
|
|
sed
|
|
lda score_values,X
|
|
clc
|
|
adc SCORE_L
|
|
sta SCORE_L
|
|
lda #0
|
|
adc SCORE_H
|
|
sta SCORE_H
|
|
cld
|
|
rts
|
|
|
|
score_values:
|
|
; 50 100 400 500
|
|
.byte $05, $10, $40, $50
|
|
|
|
|
|
;============================
|
|
;============================
|
|
; draw_fish
|
|
;============================
|
|
;============================
|
|
; X=which fish
|
|
; Y=current fish behavior
|
|
|
|
draw_fish:
|
|
|
|
; update fish state, use jump table
|
|
update_fish:
|
|
lda fish_state_dest_h,Y
|
|
pha
|
|
lda fish_state_dest_l,Y
|
|
pha
|
|
rts
|
|
done_update_fish:
|
|
|
|
inc RED_FISH_STATE_PTR,X ; point to next state
|
|
|
|
; set up co-ords
|
|
|
|
lda RED_FISH_X,X
|
|
sta SPRITE_X
|
|
|
|
lda RED_FISH_Y,X
|
|
sta SPRITE_Y
|
|
|
|
|
|
; set up sprite
|
|
|
|
lda RED_FISH_SPRITE,X
|
|
tax
|
|
|
|
lda fish_sprite_table_l,X
|
|
sta INL
|
|
lda fish_sprite_table_h,X
|
|
sta INH
|
|
|
|
; set up mask
|
|
|
|
lda fish_mask_table_l,X
|
|
sta MASKL
|
|
lda fish_mask_table_h,X
|
|
sta MASKH
|
|
|
|
jsr hgr_draw_sprite_mask
|
|
|
|
no_draw_fish:
|
|
rts
|
|
|
|
fish_state_dest_l:
|
|
.byte <(move_fish_pause-1),<(move_fish_up-1),<(move_fish_bubble-1)
|
|
.byte <(move_fish_right-1),<(move_fish_fast_right-1)
|
|
.byte <(move_fish_left_up-1),<(move_fish_left_down-1)
|
|
.byte <(move_fish_flip-1)
|
|
.byte <(move_fish_done-1)
|
|
.byte <(move_fish_catch_up-1),<(move_fish_catch_down-1)
|
|
|
|
fish_state_dest_h:
|
|
.byte >(move_fish_pause-1),>(move_fish_up-1),>(move_fish_bubble-1)
|
|
.byte >(move_fish_right-1),>(move_fish_fast_right-1)
|
|
.byte >(move_fish_left_up-1),>(move_fish_left_down-1)
|
|
.byte >(move_fish_flip-1)
|
|
.byte >(move_fish_done-1)
|
|
.byte >(move_fish_catch_up-1),>(move_fish_catch_down-1)
|
|
|
|
move_fish_done:
|
|
lda #FISH_NONE ; disable fish
|
|
sta RED_FISH_STATE_PTR,X
|
|
jmp no_draw_fish
|
|
|
|
move_fish_catch_up:
|
|
inc RED_FISH_X,X ; move right
|
|
move_fish_up:
|
|
dec RED_FISH_Y,X ; move up by two
|
|
dec RED_FISH_Y,X
|
|
jmp done_update_fish
|
|
|
|
move_fish_catch_down:
|
|
inc RED_FISH_Y,X ; move down by two
|
|
inc RED_FISH_Y,X
|
|
move_fish_right:
|
|
inc RED_FISH_X,X ; move right
|
|
jmp done_update_fish
|
|
|
|
move_fish_left_up:
|
|
dec RED_FISH_Y,X ; move up by one
|
|
; dec RED_FISH_Y,X
|
|
dec RED_FISH_X,X ; move left
|
|
jmp done_update_fish
|
|
|
|
move_fish_left_down:
|
|
inc RED_FISH_Y,X ; move down by one
|
|
; inc RED_FISH_Y,X
|
|
dec RED_FISH_X,X ; move left
|
|
jmp done_update_fish
|
|
|
|
move_fish_flip:
|
|
lda #FISH_SPRITE_RIGHT
|
|
sta RED_FISH_SPRITE,X
|
|
jmp done_update_fish
|
|
|
|
move_fish_bubble:
|
|
lda #0
|
|
sta BUBBLE_STATE_PTR
|
|
lda RED_FISH_X,X
|
|
sta BUBBLE_X
|
|
inc BUBBLE_X ; more likely to be from head
|
|
lda RED_FISH_Y,X
|
|
sta BUBBLE_Y
|
|
jmp done_update_fish
|
|
|
|
move_fish_fast_right:
|
|
move_fish_pause:
|
|
jmp done_update_fish
|
|
|
|
|
|
|
|
|
|
fish_sprite_table_l:
|
|
.byte <big_fish_sprite,<left_fish_sprite,<right_fish_sprite
|
|
.byte <red_fish_sprite,<grey_fish_sprite,<green_fish_sprite
|
|
fish_sprite_table_h:
|
|
.byte >big_fish_sprite,>left_fish_sprite,>right_fish_sprite
|
|
.byte >red_fish_sprite,>grey_fish_sprite,>green_fish_sprite
|
|
fish_mask_table_l:
|
|
.byte <big_fish_mask,<left_fish_mask,<right_fish_mask
|
|
.byte <red_fish_mask,<grey_fish_mask,<green_fish_mask
|
|
fish_mask_table_h:
|
|
.byte >big_fish_mask,>left_fish_mask,>right_fish_mask
|
|
.byte >red_fish_mask,>grey_fish_mask,>green_fish_mask
|
|
|
|
|
|
|
|
boat_sprites_l:
|
|
.byte <boat2_sprite,<boat1_sprite,<boat3_sprite,<boat1_sprite
|
|
|
|
boat_sprites_h:
|
|
.byte >boat2_sprite,>boat1_sprite,>boat3_sprite,>boat1_sprite
|
|
|
|
; add to Y to account for boat moving
|
|
; 1 2 3
|
|
; 18, 15, 19
|
|
boat_offsets:
|
|
.byte 0,3,4,3
|
|
|
|
; 2 3 2 1 2 3 2 1 2 3 2
|
|
; c r c l c r c l c r c
|
|
jig_sprites_l:
|
|
.byte <sb_boat2_sprite,<sb_boat3_sprite
|
|
.byte <sb_boat2_sprite,<sb_boat1_sprite
|
|
.byte <sb_boat2_sprite,<sb_boat3_sprite
|
|
.byte <sb_boat2_sprite,<sb_boat1_sprite
|
|
.byte <sb_boat2_sprite,<sb_boat3_sprite
|
|
.byte <sb_boat2_sprite
|
|
jig_sprites_h:
|
|
.byte >sb_boat2_sprite,>sb_boat3_sprite
|
|
.byte >sb_boat2_sprite,>sb_boat1_sprite
|
|
.byte >sb_boat2_sprite,>sb_boat3_sprite
|
|
.byte >sb_boat2_sprite,>sb_boat1_sprite
|
|
.byte >sb_boat2_sprite,>sb_boat3_sprite
|
|
.byte >sb_boat2_sprite
|
|
|
|
; 0 1 0 2 0 1 0 2 0 1 0
|
|
; m u m d m u m d m u m
|
|
lure_sprites_l:
|
|
.byte <sb_sprite,<sb_fish1_sprite
|
|
.byte <sb_sprite,<sb_fish2_sprite
|
|
.byte <sb_sprite,<sb_fish1_sprite
|
|
.byte <sb_sprite,<sb_fish2_sprite
|
|
.byte <sb_sprite,<sb_fish1_sprite
|
|
.byte <sb_sprite
|
|
lure_sprites_h:
|
|
.byte >sb_sprite,>sb_fish1_sprite
|
|
.byte >sb_sprite,>sb_fish2_sprite
|
|
.byte >sb_sprite,>sb_fish1_sprite
|
|
.byte >sb_sprite,>sb_fish2_sprite
|
|
.byte >sb_sprite,>sb_fish1_sprite
|
|
.byte >sb_sprite
|
|
|
|
|
|
numbers_l:
|
|
.byte <zero_sprite,<one_sprite,<two_sprite
|
|
.byte <three_sprite,<four_sprite,<five_sprite
|
|
.byte <six_sprite,<seven_sprite,<eight_sprite
|
|
.byte <nine_sprite
|
|
|
|
numbers_h:
|
|
.byte >zero_sprite,>one_sprite,>two_sprite
|
|
.byte >three_sprite,>four_sprite,>five_sprite
|
|
.byte >six_sprite,>seven_sprite,>eight_sprite
|
|
.byte >nine_sprite
|
|
|
|
bg_data:
|
|
.incbin "graphics/fish_bg.hgr.zx02"
|
|
|
|
|
|
.include "zx02_optim.s"
|
|
.include "gr_fast_clear.s"
|
|
|
|
.include "hgr_tables.s"
|
|
.include "hgr_sprite_big.s"
|
|
.include "hgr_sprite_mask.s"
|
|
.include "hgr_sprite.s"
|
|
|
|
|
|
; .include "hgr_copy_fast.s"
|
|
.include "audio.s"
|
|
.include "play_sounds.s"
|
|
.include "text_print.s"
|
|
.include "gr_offsets.s"
|
|
.include "random16.s"
|
|
|
|
.include "graphics/boat_sprites.inc"
|
|
.include "graphics/strongbad_sprites.inc"
|
|
.include "graphics/fish_sprites.inc"
|
|
|
|
|
|
|
|
; Fish behavior
|
|
|
|
; red fish
|
|
; 120,183? (bottom)
|
|
; u 14? to maybe 160? pause 5?
|
|
; r 8? blow bubble? pause 8?
|
|
; r quickly through reeds, off screen
|
|
;
|
|
|
|
red_fish_behavior:
|
|
; up 14
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_UP
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_UP
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_UP
|
|
.byte FISH_UP,FISH_UP,FISH_UP
|
|
; pause 5
|
|
.byte FISH_PAUSE,FISH_PAUSE,FISH_PAUSE,FISH_PAUSE,FISH_PAUSE
|
|
; slow right 4
|
|
.byte FISH_RIGHT,FISH_PAUSE,FISH_RIGHT,FISH_PAUSE
|
|
.byte FISH_RIGHT,FISH_PAUSE,FISH_RIGHT,FISH_PAUSE
|
|
; bubble
|
|
.byte FISH_BUBBLE
|
|
; pause 8
|
|
.byte FISH_PAUSE,FISH_PAUSE,FISH_PAUSE,FISH_PAUSE
|
|
.byte FISH_PAUSE,FISH_PAUSE,FISH_PAUSE,FISH_PAUSE
|
|
; fast right 12
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_DONE
|
|
|
|
; left fish, (grey) appears in reeds
|
|
; 218,170 or so
|
|
; left 8 to center of boat gradually up, blows bubble
|
|
; left 12, gradually down, blow bubble
|
|
; 3 frames to turn right
|
|
; 5 frames right (center of boat) blows bubble
|
|
; 15 frames to move off right side
|
|
|
|
grey_fish_behavior:
|
|
; LEFT UP 8, gradually
|
|
.byte FISH_LEFT_UP,FISH_PAUSE,FISH_LEFT_UP,FISH_PAUSE
|
|
.byte FISH_LEFT_UP,FISH_PAUSE,FISH_LEFT_UP,FISH_PAUSE
|
|
.byte FISH_LEFT_UP,FISH_PAUSE,FISH_LEFT_UP,FISH_PAUSE
|
|
.byte FISH_LEFT_UP,FISH_PAUSE,FISH_LEFT_UP,FISH_PAUSE
|
|
; bubble
|
|
.byte FISH_BUBBLE
|
|
; LEFT DOWN 12, gradually
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
.byte FISH_LEFT_DOWN,FISH_PAUSE,FISH_LEFT_DOWN,FISH_PAUSE
|
|
; turn right
|
|
.byte FISH_PAUSE
|
|
.byte FISH_FLIP
|
|
.byte FISH_PAUSE
|
|
; slow right 5
|
|
.byte FISH_RIGHT,FISH_PAUSE,FISH_RIGHT,FISH_PAUSE
|
|
.byte FISH_RIGHT,FISH_PAUSE,FISH_RIGHT,FISH_PAUSE
|
|
.byte FISH_RIGHT,FISH_PAUSE
|
|
; bubble
|
|
.byte FISH_BUBBLE
|
|
; fast right 15
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_DONE
|
|
|
|
|
|
; right fish (green) appears in left reeds approx 76, 146
|
|
; blows bubble
|
|
; right 12 off screen
|
|
|
|
green_fish_behavior:
|
|
; bubble
|
|
.byte FISH_BUBBLE
|
|
; fast right 15
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_RIGHT,FISH_RIGHT,FISH_RIGHT
|
|
.byte FISH_DONE
|
|
|
|
|
|
catch_fish_behavior:
|
|
; up+to right 20 times?
|
|
; then down+right 5 times?
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_CATCH_UP
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_CATCH_UP
|
|
.byte FISH_UP,FISH_UP,FISH_UP,FISH_CATCH_UP
|
|
|
|
.byte FISH_CATCH_DOWN,FISH_CATCH_DOWN,FISH_CATCH_DOWN,FISH_CATCH_DOWN
|
|
.byte FISH_CATCH_DOWN,FISH_CATCH_DOWN,FISH_CATCH_DOWN,FISH_CATCH_DOWN
|
|
.byte FISH_DONE
|
|
|
|
|
|
|
|
|
|
; bubbles
|
|
; go medium/large/medium
|
|
; some go mostly up, some wiggle left right
|
|
|
|
bubble_sprite_table_l:
|
|
.byte <med1_bubble_sprite,<med1_bubble_sprite
|
|
.byte <big_bubble_sprite,<big_bubble_sprite
|
|
.byte <med2_bubble_sprite,<med2_bubble_sprite
|
|
|
|
bubble_sprite_table_h:
|
|
.byte >med1_bubble_sprite,>med1_bubble_sprite
|
|
.byte >big_bubble_sprite,>big_bubble_sprite
|
|
.byte >med2_bubble_sprite,>med2_bubble_sprite
|
|
|
|
bubble_mask_table_l:
|
|
.byte <med1_bubble_mask,<med1_bubble_mask
|
|
.byte <big_bubble_mask,<big_bubble_mask
|
|
.byte <med2_bubble_mask,<med2_bubble_mask
|
|
|
|
bubble_mask_table_h:
|
|
.byte >med1_bubble_mask,>med1_bubble_mask
|
|
.byte >big_bubble_mask,>big_bubble_mask
|
|
.byte >med2_bubble_mask,>med2_bubble_mask
|
|
|
|
ripple_l_sprites_l:
|
|
.byte <ripple_l1_sprite,<ripple_l2_sprite,<ripple_l3_sprite,<ripple_none_sprite
|
|
ripple_l_sprites_h:
|
|
.byte >ripple_l1_sprite,>ripple_l2_sprite,>ripple_l3_sprite,>ripple_none_sprite
|
|
|
|
ripple_r_sprites_l:
|
|
.byte <ripple_r1_sprite,<ripple_r2_sprite,<ripple_r3_sprite,<ripple_none_sprite
|
|
ripple_r_sprites_h:
|
|
.byte >ripple_r1_sprite,>ripple_r2_sprite,>ripple_r3_sprite,>ripple_none_sprite
|
|
|