sb: both ducks move
|
@ -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
|
||||
|
||||
|
||||
|
|
|
@ -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?)
|
||||
; 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"
|
||||
|
|
|
@ -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
|
||||
|
||||
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
|
||||
|
||||
|
||||
|
||||
|
||||
####
|
||||
|
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 7.9 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 8.0 KiB |
Before Width: | Height: | Size: 813 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 798 B |
Before Width: | Height: | Size: 795 B |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 783 B |
|
@ -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
|
||||
|
|
|
@ -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 FULLGR
|
||||
bit SET_GR
|
||||
bit PAGE0
|
||||
bit PAGE1
|
||||
|
||||
|
||||
;===================
|
||||
|
|
|
@ -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
|
||||
|
|