sb: both ducks move

This commit is contained in:
Vince Weaver 2023-03-13 15:29:05 -04:00
parent 29f92a2df4
commit 6545f5e521
18 changed files with 256 additions and 17 deletions

View File

@ -33,7 +33,9 @@ DUCK_POND: duck_pond.o
duck_pond.o: duck_pond.s zx02_optim.s \
zp.inc hardware.inc \
gr_copy.s duck_score.s gr_putsprite.s
gr_copy.s duck_score.s gr_putsprite.s \
draw_ducks.s move_ducks.s \
graphics/duck_sprites.inc graphics/num_sprites.inc
ca65 -o duck_pond.o duck_pond.s -l duck_pond.lst

70
games/sb/draw_ducks.s Normal file
View File

@ -0,0 +1,70 @@
;====================
; draw duck1
;====================
draw_duck1:
lda D1_XPOS
sta XPOS
lda D1_YPOS
sta YPOS
lda D1_STATE
beq done_draw_duck1
bmi duck1_draw_right
duck1_draw_left:
lda #<d1_left1_sprite
sta INL
lda #>d1_left1_sprite
jmp do_draw_duck1
duck1_draw_right:
lda #<d1_right1_sprite
sta INL
lda #>d1_right1_sprite
do_draw_duck1:
sta INH
jsr gr_put_sprite
done_draw_duck1:
rts
;====================
; draw duck2
;====================
draw_duck2:
lda D2_XPOS
sta XPOS
lda D2_YPOS
sta YPOS
lda D2_STATE
beq done_draw_duck2
bmi duck2_draw_right
duck2_draw_left:
lda #<d2_left1_sprite
sta INL
lda #>d2_left1_sprite
jmp do_draw_duck2
duck2_draw_right:
lda #<d2_right1_sprite
sta INL
lda #>d2_right1_sprite
do_draw_duck2:
sta INH
jsr gr_put_sprite
done_draw_duck2:
rts

View File

@ -13,7 +13,9 @@
; N night (twilight?)
; J jump in pond
; how show score?
; D/G throw short vs long?
; replace "bread" with "food"
;123456789012345678901234567890123456789
@ -36,7 +38,7 @@ duck_pond:
bit LORES
bit FULLGR
bit SET_GR
bit PAGE0
bit PAGE1
lda #$0
sta DRAW_PAGE
@ -78,6 +80,25 @@ init_game:
sta D2_SCORE
sta D2_SCORE_H
lda #1
sta D1_STATE
sta D2_STATE
lda #10
sta D1_XPOS
sta D1_YPOS
lda #14
sta D2_XPOS
sta D2_YPOS
lda #$FF
sta D1_XSPEED
sta D1_YSPEED
sta D2_XSPEED
sta D2_YSPEED
; load background
lda #<main_data
sta ZX0_src
@ -98,6 +119,7 @@ init_game:
main_loop:
jsr gr_copy_to_current
; copy over background
@ -105,9 +127,10 @@ main_loop:
; draw food
; draw duck1
; draw ducks
; draw duck2
jsr draw_duck1
jsr draw_duck2
; draw anvil/splash
@ -115,6 +138,11 @@ main_loop:
jsr draw_score
; flip page
jsr page_flip
; move food
; move arm
@ -123,6 +151,8 @@ main_loop:
; move ducks
jsr move_ducks
; drain water
; check keyboard
@ -145,9 +175,11 @@ check_bracket:
jsr score_inc_d1
lda #$ff
sta D1_XSPEED
done_keyboard:
; flip page
done_loop:
@ -159,8 +191,11 @@ done_loop:
.include "gr_offsets.s"
.include "gr_putsprite.s"
.include "gr_pageflip.s"
.include "duck_score.s"
.include "draw_ducks.s"
.include "move_ducks.s"
title_data:
.incbin "graphics/a2_duckpond_title.gr.zx02"
@ -169,3 +204,4 @@ main_data:
.incbin "graphics/a2_duckpond.gr.zx02"
.include "graphics/num_sprites.inc"
.include "graphics/duck_sprites.inc"

24
games/sb/gr_pageflip.s Normal file
View File

@ -0,0 +1,24 @@
;==========
; page_flip
;==========
page_flip:
lda DISP_PAGE ; 3
beq page_flip_show_2 ; 2nt/3
page_flip_show_1:
bit PAGE1 ; 4
lda #4 ; 2
sta DRAW_PAGE ; DRAW_PAGE=2 ; 3
lda #0 ; 2
sta DISP_PAGE ; DISP_PAGE=1 ; 3
rts ; 6
page_flip_show_2:
bit PAGE2 ; 4
sta DRAW_PAGE ; DRAW_PAGE=1 ; 3
lda #1 ; 2
sta DISP_PAGE ; DISP_PAGE=2 ; 3
rts ; 6
;====================
; DISP_PAGE=1 26
; DISP_PAGE=2 24

View File

@ -10,8 +10,12 @@ PNG2GR = ../../../utils/gr-utils/png2gr
PNG2SPRITES = ../../../utils/gr-utils/png2sprites
all: strongbad_sample.hgr.zx02 \
a2_duckpond_title.gr.zx02 a2_duckpond.gr.zx02 \
num_sprites.inc
a2_duckpond_title.gr.zx02 \
a2_duckpond.gr.zx02 \
a2_duckpond_twilight.gr.zx02 \
a2_duckpond_night.gr.zx02 \
num_sprites.inc \
duck_sprites.inc
####
@ -30,6 +34,24 @@ num_sprites.inc: lores_font.png
$(PNG2SPRITES) lores_font.png d_sprite 12 6 3 6 >> num_sprites.inc
$(PNG2SPRITES) lores_font.png space_sprite 16 6 3 6 >> num_sprites.inc
####
duck_sprites.inc: duck1_sprites_left.png duck1_sprites_right.png \
duck2_sprites_left.png duck2_sprites_right.png
$(PNG2SPRITES) duck1_sprites_left.png d1_left1_sprite 1 2 11 12 > duck_sprites.inc
$(PNG2SPRITES) duck1_sprites_left.png d1_left2_sprite 1 16 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck1_sprites_left.png d1_left3_sprite 1 30 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck1_sprites_right.png d1_right1_sprite 1 2 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck1_sprites_right.png d1_right2_sprite 1 16 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck1_sprites_right.png d1_right3_sprite 1 30 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_left.png d2_left1_sprite 1 2 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_left.png d2_left2_sprite 1 16 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_left.png d2_left3_sprite 1 30 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_right.png d2_right1_sprite 1 2 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_right.png d2_right2_sprite 1 16 11 12 >> duck_sprites.inc
$(PNG2SPRITES) duck2_sprites_right.png d2_right3_sprite 1 30 11 12 >> duck_sprites.inc
####
@ -56,6 +78,23 @@ a2_duckpond.gr.zx02: a2_duckpond.gr
a2_duckpond.gr: a2_duckpond.png
$(PNG2GR) a2_duckpond.png a2_duckpond.gr
####
a2_duckpond_twilight.gr.zx02: a2_duckpond_twilight.gr
$(ZX02) a2_duckpond_twilight.gr a2_duckpond_twilight.gr.zx02
a2_duckpond_twilight.gr: a2_duckpond_twilight.png
$(PNG2GR) a2_duckpond_twilight.png a2_duckpond_twilight.gr
####
a2_duckpond_night.gr.zx02: a2_duckpond_night.gr
$(ZX02) a2_duckpond_night.gr a2_duckpond_night.gr.zx02
a2_duckpond_night.gr: a2_duckpond_night.png
$(PNG2GR) a2_duckpond_night.png a2_duckpond_night.gr
####

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 813 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 798 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 795 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 783 B

View File

@ -4,8 +4,8 @@ KEYPRESS = $C000
KEYRESET = $C010
;; SOFT SWITCHES
CLR80COL = $C000 ; PAGE0/PAGE1 normal
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
CLR80COL = $C000 ; PAGE1/PAGE2 normal
SET80COL = $C001 ; PAGE1/PAGE1 switches PAGE1 in Aux instead
EIGHTYCOLOFF = $C00C
EIGHTYCOLON = $C00D
SPEAKER = $C030
@ -13,8 +13,8 @@ SET_GR = $C050
SET_TEXT = $C051
FULLGR = $C052
TEXTGR = $C053
PAGE0 = $C054
PAGE1 = $C055
PAGE1 = $C054
PAGE2 = $C055
LORES = $C056 ; Enable LORES graphics
HIRES = $C057 ; Enable HIRES graphics
AN3 = $C05E ; Annunciator 3

50
games/sb/move_ducks.s Normal file
View File

@ -0,0 +1,50 @@
move_ducks:
ldx #1 ; start with duck2
move_duck_loop:
clc
lda D1_XPOS,X
adc D1_XSPEED,X
sta D1_XPOS,X
; check out of bounds
; duck XPOS is middle of duck (which is 12 wide)
;
; to stay in pond want XPOS to be between and 8 and 34?
lda D1_XPOS,X
cmp #8
bcc duck_too_far_left ; blt
cmp #34
bcs duck_too_far_right ; bge
jmp duck_good
duck_too_far_left:
lda #$1 ; move right
sta D1_XSPEED,X
lda D1_STATE,X ; face right
ora #DUCK_RIGHT
sta D1_STATE,X
jmp duck_good
duck_too_far_right:
lda #$ff ; move left
sta D1_XSPEED,X
lda D1_STATE,X ; face left
and #<~DUCK_RIGHT
sta D1_STATE,X
duck_good:
dex
bpl move_duck_loop
rts

View File

@ -17,7 +17,7 @@ hires_start:
bit HIRES
bit FULLGR
bit SET_GR
bit PAGE0
bit PAGE1
;===================

View File

@ -133,11 +133,29 @@ D1_SCORE_H = $E1
D2_SCORE = $E2
D2_SCORE_H = $E3
D1_STATE = $E4
DUCK_MISSING = $00
DUCK_LEFT = $00
DUCK_RIGHT = $80
DUCK_NORMAL = $01
DUCK_MOVE = $02
DUCK_FEEDING = $03
D2_STATE = $E5
STATE = $ED
DISP_PAGE = $ED
DRAW_PAGE = $EE
OFFSET = $EF
D1_XPOS = $E6
D2_XPOS = $E7
D1_YPOS = $E8
D2_YPOS = $E9
D1_XSPEED = $EA
D2_XSPEED = $EB
D1_YSPEED = $EC
D2_YSPEED = $ED
DISP_PAGE = $EE
DRAW_PAGE = $EF
XPOS = $F0