diff --git a/games/sb/Makefile b/games/sb/Makefile index 62950624..e6ed250f 100644 --- a/games/sb/Makefile +++ b/games/sb/Makefile @@ -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 diff --git a/games/sb/draw_ducks.s b/games/sb/draw_ducks.s new file mode 100644 index 00000000..b6e3b84c --- /dev/null +++ b/games/sb/draw_ducks.s @@ -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 + jmp do_draw_duck1 + +duck1_draw_right: + 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 + jmp do_draw_duck2 + +duck2_draw_right: + lda #d2_right1_sprite + +do_draw_duck2: + sta INH + jsr gr_put_sprite + +done_draw_duck2: + rts + diff --git a/games/sb/duck_pond.s b/games/sb/duck_pond.s index 28a3b10e..add00666 100644 --- a/games/sb/duck_pond.s +++ b/games/sb/duck_pond.s @@ -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 #> 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 + + #### diff --git a/games/sb/graphics/a2_duckpond.png b/games/sb/graphics/a2_duckpond.png index 37bb38fa..3b2ecd47 100644 Binary files a/games/sb/graphics/a2_duckpond.png and b/games/sb/graphics/a2_duckpond.png differ diff --git a/games/sb/graphics/a2_duckpond_night.png b/games/sb/graphics/a2_duckpond_night.png new file mode 100644 index 00000000..467fec13 Binary files /dev/null and b/games/sb/graphics/a2_duckpond_night.png differ diff --git a/games/sb/graphics/a2_duckpond_twilight.png b/games/sb/graphics/a2_duckpond_twilight.png new file mode 100644 index 00000000..b7ff0df0 Binary files /dev/null and b/games/sb/graphics/a2_duckpond_twilight.png differ diff --git a/games/sb/graphics/duck1_sprites.png b/games/sb/graphics/duck1_sprites.png deleted file mode 100644 index ed19b66d..00000000 Binary files a/games/sb/graphics/duck1_sprites.png and /dev/null differ diff --git a/games/sb/graphics/duck1_sprites_left.png b/games/sb/graphics/duck1_sprites_left.png new file mode 100644 index 00000000..f9306792 Binary files /dev/null and b/games/sb/graphics/duck1_sprites_left.png differ diff --git a/games/sb/graphics/duck1_sprites_right.png b/games/sb/graphics/duck1_sprites_right.png new file mode 100644 index 00000000..6e5232d5 Binary files /dev/null and b/games/sb/graphics/duck1_sprites_right.png differ diff --git a/games/sb/graphics/duck2_sprites.png b/games/sb/graphics/duck2_sprites.png deleted file mode 100644 index a085668c..00000000 Binary files a/games/sb/graphics/duck2_sprites.png and /dev/null differ diff --git a/games/sb/graphics/duck2_sprites_left.png b/games/sb/graphics/duck2_sprites_left.png new file mode 100644 index 00000000..0529884c Binary files /dev/null and b/games/sb/graphics/duck2_sprites_left.png differ diff --git a/games/sb/graphics/duck2_sprites_right.png b/games/sb/graphics/duck2_sprites_right.png new file mode 100644 index 00000000..b02b7787 Binary files /dev/null and b/games/sb/graphics/duck2_sprites_right.png differ diff --git a/games/sb/hardware.inc b/games/sb/hardware.inc index 69ea5b93..83a10a6c 100644 --- a/games/sb/hardware.inc +++ b/games/sb/hardware.inc @@ -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 diff --git a/games/sb/move_ducks.s b/games/sb/move_ducks.s new file mode 100644 index 00000000..48d005a0 --- /dev/null +++ b/games/sb/move_ducks.s @@ -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 diff --git a/games/sb/sb.s b/games/sb/sb.s index 40e95ab3..3610da80 100644 --- a/games/sb/sb.s +++ b/games/sb/sb.s @@ -17,7 +17,7 @@ hires_start: bit HIRES bit FULLGR bit SET_GR - bit PAGE0 + bit PAGE1 ;=================== diff --git a/games/sb/zp.inc b/games/sb/zp.inc index 2f39a567..2efe97f1 100644 --- a/games/sb/zp.inc +++ b/games/sb/zp.inc @@ -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