sb: both ducks move
|
@ -33,7 +33,9 @@ DUCK_POND: duck_pond.o
|
||||||
|
|
||||||
duck_pond.o: duck_pond.s zx02_optim.s \
|
duck_pond.o: duck_pond.s zx02_optim.s \
|
||||||
zp.inc hardware.inc \
|
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
|
ca65 -o duck_pond.o duck_pond.s -l duck_pond.lst
|
||||||
|
|
||||||
|
|
||||||
|
|
70
games/sb/draw_ducks.s
Normal 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
|
||||||
|
|
|
@ -13,7 +13,9 @@
|
||||||
; N night (twilight?)
|
; N night (twilight?)
|
||||||
; J jump in pond
|
; J jump in pond
|
||||||
|
|
||||||
; how show score?
|
; D/G throw short vs long?
|
||||||
|
|
||||||
|
; replace "bread" with "food"
|
||||||
|
|
||||||
|
|
||||||
;123456789012345678901234567890123456789
|
;123456789012345678901234567890123456789
|
||||||
|
@ -36,7 +38,7 @@ duck_pond:
|
||||||
bit LORES
|
bit LORES
|
||||||
bit FULLGR
|
bit FULLGR
|
||||||
bit SET_GR
|
bit SET_GR
|
||||||
bit PAGE0
|
bit PAGE1
|
||||||
|
|
||||||
lda #$0
|
lda #$0
|
||||||
sta DRAW_PAGE
|
sta DRAW_PAGE
|
||||||
|
@ -78,6 +80,25 @@ init_game:
|
||||||
sta D2_SCORE
|
sta D2_SCORE
|
||||||
sta D2_SCORE_H
|
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
|
lda #<main_data
|
||||||
sta ZX0_src
|
sta ZX0_src
|
||||||
|
@ -98,6 +119,7 @@ init_game:
|
||||||
|
|
||||||
|
|
||||||
main_loop:
|
main_loop:
|
||||||
|
jsr gr_copy_to_current
|
||||||
|
|
||||||
; copy over background
|
; copy over background
|
||||||
|
|
||||||
|
@ -105,9 +127,10 @@ main_loop:
|
||||||
|
|
||||||
; draw food
|
; draw food
|
||||||
|
|
||||||
; draw duck1
|
; draw ducks
|
||||||
|
|
||||||
; draw duck2
|
jsr draw_duck1
|
||||||
|
jsr draw_duck2
|
||||||
|
|
||||||
; draw anvil/splash
|
; draw anvil/splash
|
||||||
|
|
||||||
|
@ -115,6 +138,11 @@ main_loop:
|
||||||
|
|
||||||
jsr draw_score
|
jsr draw_score
|
||||||
|
|
||||||
|
|
||||||
|
; flip page
|
||||||
|
|
||||||
|
jsr page_flip
|
||||||
|
|
||||||
; move food
|
; move food
|
||||||
|
|
||||||
; move arm
|
; move arm
|
||||||
|
@ -123,6 +151,8 @@ main_loop:
|
||||||
|
|
||||||
; move ducks
|
; move ducks
|
||||||
|
|
||||||
|
jsr move_ducks
|
||||||
|
|
||||||
; drain water
|
; drain water
|
||||||
|
|
||||||
; check keyboard
|
; check keyboard
|
||||||
|
@ -145,9 +175,11 @@ check_bracket:
|
||||||
|
|
||||||
jsr score_inc_d1
|
jsr score_inc_d1
|
||||||
|
|
||||||
|
lda #$ff
|
||||||
|
sta D1_XSPEED
|
||||||
|
|
||||||
done_keyboard:
|
done_keyboard:
|
||||||
|
|
||||||
; flip page
|
|
||||||
|
|
||||||
|
|
||||||
done_loop:
|
done_loop:
|
||||||
|
@ -159,8 +191,11 @@ done_loop:
|
||||||
.include "gr_offsets.s"
|
.include "gr_offsets.s"
|
||||||
|
|
||||||
.include "gr_putsprite.s"
|
.include "gr_putsprite.s"
|
||||||
|
.include "gr_pageflip.s"
|
||||||
|
|
||||||
.include "duck_score.s"
|
.include "duck_score.s"
|
||||||
|
.include "draw_ducks.s"
|
||||||
|
.include "move_ducks.s"
|
||||||
|
|
||||||
title_data:
|
title_data:
|
||||||
.incbin "graphics/a2_duckpond_title.gr.zx02"
|
.incbin "graphics/a2_duckpond_title.gr.zx02"
|
||||||
|
@ -169,3 +204,4 @@ main_data:
|
||||||
.incbin "graphics/a2_duckpond.gr.zx02"
|
.incbin "graphics/a2_duckpond.gr.zx02"
|
||||||
|
|
||||||
.include "graphics/num_sprites.inc"
|
.include "graphics/num_sprites.inc"
|
||||||
|
.include "graphics/duck_sprites.inc"
|
||||||
|
|
24
games/sb/gr_pageflip.s
Normal 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
|
||||||
|
|
|
@ -10,8 +10,12 @@ PNG2GR = ../../../utils/gr-utils/png2gr
|
||||||
PNG2SPRITES = ../../../utils/gr-utils/png2sprites
|
PNG2SPRITES = ../../../utils/gr-utils/png2sprites
|
||||||
|
|
||||||
all: strongbad_sample.hgr.zx02 \
|
all: strongbad_sample.hgr.zx02 \
|
||||||
a2_duckpond_title.gr.zx02 a2_duckpond.gr.zx02 \
|
a2_duckpond_title.gr.zx02 \
|
||||||
num_sprites.inc
|
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 d_sprite 12 6 3 6 >> num_sprites.inc
|
||||||
$(PNG2SPRITES) lores_font.png space_sprite 16 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
|
a2_duckpond.gr: a2_duckpond.png
|
||||||
$(PNG2GR) a2_duckpond.png a2_duckpond.gr
|
$(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
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
####
|
####
|
||||||
|
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.9 KiB |
BIN
games/sb/graphics/a2_duckpond_night.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
BIN
games/sb/graphics/a2_duckpond_twilight.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 813 B |
BIN
games/sb/graphics/duck1_sprites_left.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
games/sb/graphics/duck1_sprites_right.png
Normal file
After Width: | Height: | Size: 798 B |
Before Width: | Height: | Size: 795 B |
BIN
games/sb/graphics/duck2_sprites_left.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
games/sb/graphics/duck2_sprites_right.png
Normal file
After Width: | Height: | Size: 783 B |
|
@ -4,8 +4,8 @@ KEYPRESS = $C000
|
||||||
KEYRESET = $C010
|
KEYRESET = $C010
|
||||||
|
|
||||||
;; SOFT SWITCHES
|
;; SOFT SWITCHES
|
||||||
CLR80COL = $C000 ; PAGE0/PAGE1 normal
|
CLR80COL = $C000 ; PAGE1/PAGE2 normal
|
||||||
SET80COL = $C001 ; PAGE0/PAGE1 switches PAGE0 in Aux instead
|
SET80COL = $C001 ; PAGE1/PAGE1 switches PAGE1 in Aux instead
|
||||||
EIGHTYCOLOFF = $C00C
|
EIGHTYCOLOFF = $C00C
|
||||||
EIGHTYCOLON = $C00D
|
EIGHTYCOLON = $C00D
|
||||||
SPEAKER = $C030
|
SPEAKER = $C030
|
||||||
|
@ -13,8 +13,8 @@ SET_GR = $C050
|
||||||
SET_TEXT = $C051
|
SET_TEXT = $C051
|
||||||
FULLGR = $C052
|
FULLGR = $C052
|
||||||
TEXTGR = $C053
|
TEXTGR = $C053
|
||||||
PAGE0 = $C054
|
PAGE1 = $C054
|
||||||
PAGE1 = $C055
|
PAGE2 = $C055
|
||||||
LORES = $C056 ; Enable LORES graphics
|
LORES = $C056 ; Enable LORES graphics
|
||||||
HIRES = $C057 ; Enable HIRES graphics
|
HIRES = $C057 ; Enable HIRES graphics
|
||||||
AN3 = $C05E ; Annunciator 3
|
AN3 = $C05E ; Annunciator 3
|
||||||
|
|
50
games/sb/move_ducks.s
Normal 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
|
|
@ -17,7 +17,7 @@ hires_start:
|
||||||
bit HIRES
|
bit HIRES
|
||||||
bit FULLGR
|
bit FULLGR
|
||||||
bit SET_GR
|
bit SET_GR
|
||||||
bit PAGE0
|
bit PAGE1
|
||||||
|
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
|
|
|
@ -133,11 +133,29 @@ D1_SCORE_H = $E1
|
||||||
D2_SCORE = $E2
|
D2_SCORE = $E2
|
||||||
D2_SCORE_H = $E3
|
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
|
D1_XPOS = $E6
|
||||||
DISP_PAGE = $ED
|
D2_XPOS = $E7
|
||||||
DRAW_PAGE = $EE
|
|
||||||
OFFSET = $EF
|
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
|
XPOS = $F0
|
||||||
|
|