mirror of
https://github.com/deater/dos33fsprogs.git
synced 2025-01-14 13:33:48 +00:00
climb: adjust so rocks go off bottom when on upper levels
This commit is contained in:
parent
b6202fa141
commit
1d7e3f4f3a
@ -2,8 +2,10 @@
|
|||||||
Rocks on right at base are impassable
|
Rocks on right at base are impassable
|
||||||
Change collision code to work on three-wide sprites
|
Change collision code to work on three-wide sprites
|
||||||
Change draw transparency code to work on three-wide sprites
|
Change draw transparency code to work on three-wide sprites
|
||||||
Add all three levels
|
Erase flame even when not moving? That is tricky as would need to
|
||||||
Alternate color schemes for sprites
|
redraw head as well :( maybe just erase part above the head?
|
||||||
|
Draw/erase the rocks in order for less flicker
|
||||||
|
Make it so you can't go down to previous level
|
||||||
|
|
||||||
for coach-z release
|
for coach-z release
|
||||||
+ add some method of keeping score
|
+ add some method of keeping score
|
||||||
|
@ -16,6 +16,10 @@ mod7_table = $b900
|
|||||||
hposn_high = $ba00
|
hposn_high = $ba00
|
||||||
hposn_low = $bb00
|
hposn_low = $bb00
|
||||||
|
|
||||||
|
; defines
|
||||||
|
|
||||||
|
MAX_ROCKS = 3
|
||||||
|
|
||||||
cliff_climb:
|
cliff_climb:
|
||||||
|
|
||||||
;===================
|
;===================
|
||||||
@ -57,9 +61,9 @@ cliff_climb:
|
|||||||
; Load Peasant Sprites
|
; Load Peasant Sprites
|
||||||
;========================
|
;========================
|
||||||
|
|
||||||
lda #<walking_sprite_data
|
lda #<climbing_sprite_data
|
||||||
sta ZX0_src
|
sta ZX0_src
|
||||||
lda #>walking_sprite_data
|
lda #>climbing_sprite_data
|
||||||
sta ZX0_src+1
|
sta ZX0_src+1
|
||||||
|
|
||||||
lda #$a0
|
lda #$a0
|
||||||
@ -153,7 +157,7 @@ done_draw_bird:
|
|||||||
; draw rock
|
; draw rock
|
||||||
;=====================
|
;=====================
|
||||||
|
|
||||||
MAX_ROCKS=3
|
|
||||||
|
|
||||||
lda #0
|
lda #0
|
||||||
sta CURRENT_ROCK
|
sta CURRENT_ROCK
|
||||||
@ -250,8 +254,18 @@ maybe_new_bird:
|
|||||||
and #7 ; 1/8 of time start new bird?
|
and #7 ; 1/8 of time start new bird?
|
||||||
bne move_bird_done
|
bne move_bird_done
|
||||||
|
|
||||||
|
; bird on base level, 12 .. 76 (MAP_LOCATION==0)
|
||||||
|
; bird on other levels, 12 .. 140
|
||||||
|
|
||||||
jsr random16
|
jsr random16
|
||||||
|
|
||||||
|
ldx MAP_LOCATION
|
||||||
|
bne new_bird_wider
|
||||||
|
|
||||||
and #$3f ; 0... 64
|
and #$3f ; 0... 64
|
||||||
|
new_bird_wider:
|
||||||
|
and #$7f ; 0... 128
|
||||||
|
|
||||||
clc
|
clc
|
||||||
adc #12 ; skip top bar
|
adc #12 ; skip top bar
|
||||||
sta bird_y
|
sta bird_y
|
||||||
@ -287,20 +301,28 @@ move_rock_loop:
|
|||||||
|
|
||||||
move_rock_waiting:
|
move_rock_waiting:
|
||||||
|
|
||||||
|
; see if start new rock
|
||||||
|
|
||||||
jsr random16
|
jsr random16
|
||||||
and #7 ; 1/8 of time start new rock
|
and #7 ; 1/8 of time start new rock
|
||||||
bne rock_good
|
bne rock_good
|
||||||
|
|
||||||
|
start_new_rock:
|
||||||
|
|
||||||
|
; pick x position
|
||||||
|
; bit of a hack, really should be from 0..38
|
||||||
|
; but we actually do 2..34 as it's easier
|
||||||
|
|
||||||
jsr random16
|
jsr random16
|
||||||
and #$1f ; 0... 31
|
and #$1f ; 0... 31
|
||||||
clc
|
clc
|
||||||
adc #2 ; skip to middle slightly
|
adc #2 ; push away from edge a bit
|
||||||
sta rock_x,X
|
sta rock_x,X
|
||||||
|
|
||||||
lda #12
|
lda #12 ; start at top
|
||||||
sta rock_y,X
|
sta rock_y,X
|
||||||
|
|
||||||
lda #0
|
lda #0 ; put in falling state
|
||||||
sta rock_state,X
|
sta rock_state,X
|
||||||
|
|
||||||
jmp rock_good
|
jmp rock_good
|
||||||
@ -311,8 +333,28 @@ move_rock_exploding:
|
|||||||
jmp rock_good
|
jmp rock_good
|
||||||
|
|
||||||
move_rock_normal:
|
move_rock_normal:
|
||||||
|
|
||||||
|
; two states. If MAP_LOCATION==0, if ypos>105 start exploding
|
||||||
|
; else if ypos>190 or so just go away
|
||||||
|
; sprite code will truncate sprite so we don't
|
||||||
|
; run off screen and corrupt memory
|
||||||
|
|
||||||
inc rock_y,X
|
inc rock_y,X
|
||||||
lda rock_y,X
|
lda rock_y,X
|
||||||
|
|
||||||
|
ldy MAP_LOCATION
|
||||||
|
beq move_rock_base_level
|
||||||
|
|
||||||
|
move_rock_upper_level:
|
||||||
|
cmp #190 ; if > 168 make disappear
|
||||||
|
bcc rock_good
|
||||||
|
|
||||||
|
lda #3 ; make it go away
|
||||||
|
sta rock_state,X
|
||||||
|
bne rock_good ; bra
|
||||||
|
|
||||||
|
move_rock_base_level:
|
||||||
|
|
||||||
cmp #105
|
cmp #105
|
||||||
bcc rock_good
|
bcc rock_good
|
||||||
rock_start_explode:
|
rock_start_explode:
|
||||||
@ -561,7 +603,7 @@ rock_y:
|
|||||||
|
|
||||||
.include "hgr_sprite_bg_mask.s"
|
.include "hgr_sprite_bg_mask.s"
|
||||||
|
|
||||||
walking_sprite_data:
|
climbing_sprite_data:
|
||||||
.incbin "climbing_sprites.zx02"
|
.incbin "climbing_sprites.zx02"
|
||||||
|
|
||||||
peasant_sprite_offset = $a000
|
peasant_sprite_offset = $a000
|
||||||
|
@ -13,6 +13,10 @@
|
|||||||
; which sprite in X
|
; which sprite in X
|
||||||
; where to save in Y
|
; where to save in Y
|
||||||
|
|
||||||
|
; if Ypos+SPRITE_Y>191 we clip to 191
|
||||||
|
early_exit:
|
||||||
|
rts
|
||||||
|
|
||||||
hgr_draw_sprite:
|
hgr_draw_sprite:
|
||||||
|
|
||||||
; backup location for eventual restore
|
; backup location for eventual restore
|
||||||
@ -20,6 +24,8 @@ hgr_draw_sprite:
|
|||||||
sta save_xstart,Y
|
sta save_xstart,Y
|
||||||
lda SPRITE_Y
|
lda SPRITE_Y
|
||||||
sta save_ystart,Y
|
sta save_ystart,Y
|
||||||
|
cmp #192 ; exit if try to draw off bottom
|
||||||
|
bcs early_exit ; bge
|
||||||
|
|
||||||
; generate x-end for both restore as well as inner loop
|
; generate x-end for both restore as well as inner loop
|
||||||
|
|
||||||
@ -35,6 +41,22 @@ hgr_draw_sprite:
|
|||||||
sta sprite_ysize_smc+1 ; self modify for end row
|
sta sprite_ysize_smc+1 ; self modify for end row
|
||||||
clc
|
clc
|
||||||
adc SPRITE_Y
|
adc SPRITE_Y
|
||||||
|
cmp #192
|
||||||
|
bcc hgr_sprite_ysize_ok ; blt
|
||||||
|
|
||||||
|
hgr_sprite_ysize_not_ok:
|
||||||
|
|
||||||
|
; adjust self modify
|
||||||
|
; want it to be (192-SPRITE_Y)
|
||||||
|
|
||||||
|
lda #192
|
||||||
|
sec
|
||||||
|
sbc SPRITE_Y
|
||||||
|
sta sprite_ysize_smc+1 ; self modify for end row
|
||||||
|
|
||||||
|
lda #191 ; max out yend
|
||||||
|
|
||||||
|
hgr_sprite_ysize_ok:
|
||||||
sta save_yend,Y
|
sta save_yend,Y
|
||||||
|
|
||||||
; point smc to sprite
|
; point smc to sprite
|
||||||
|
Loading…
x
Reference in New Issue
Block a user