mirror of
https://github.com/digarok/flapple.git
synced 2024-05-28 10:41:27 +00:00
partiall working sprites
This commit is contained in:
parent
2590a8d2ca
commit
82a8a1b406
147
src/bird.s
147
src/bird.s
|
@ -1,52 +1,97 @@
|
|||
BIRD_X db #$38 ; (0-79)
|
||||
BIRD_Y db #$22 ; (0-47)
|
||||
|
||||
BIRD_X db #20 ; (0-79)
|
||||
BIRD_Y db #5 ; (0-47)
|
||||
BIRD_FLAP db #0 ; 0=down 1=up
|
||||
|
||||
DrawBird
|
||||
* lda #10
|
||||
* sta SPRITE_W ; all birds are same width
|
||||
*
|
||||
* lda BIRD_Y
|
||||
* lsr
|
||||
* bcs :oddHeight
|
||||
*:evenHeight asl
|
||||
* sta SPRITE_Y
|
||||
* lda #3
|
||||
* sta SPRITE_H
|
||||
* lda BIRD_FLAP
|
||||
* beq :flapDownEven
|
||||
*:flapUpEven CopyPtr #BIRD_WUP_MAIN;SPRITE_MAIN_P
|
||||
* CopyPtr #BIRD_WUP_AUX;SPRITE_AUX_P
|
||||
* CopyPtr #BIRD_WUP_MASK;SPRITE_MASK_P
|
||||
* CopyPtr #BIRD_WUP_IMASK;SPRITE_IMASK_P
|
||||
* jmp :drawSprite
|
||||
*:flapDownEven CopyPtr #BIRD_WDN_MAIN;SPRITE_MAIN_P
|
||||
* CopyPtr #BIRD_WDN_AUX;SPRITE_AUX_P
|
||||
* CopyPtr #BIRD_WDN_MASK;SPRITE_MASK_P
|
||||
* CopyPtr #BIRD_WDN_IMASK;SPRITE_IMASK_P
|
||||
* jmp :drawSprite
|
||||
*:oddHeight asl
|
||||
* sta SPRITE_Y
|
||||
* lda #4
|
||||
* sta SPRITE_H
|
||||
* lda BIRD_FLAP
|
||||
* beq :flapDownOdd
|
||||
*:flapUpOdd CopyPtr #BIRD_WUP_O_MAIN;SPRITE_MAIN_P
|
||||
* CopyPtr #BIRD_WUP_O_AUX;SPRITE_AUX_P
|
||||
* CopyPtr #BIRD_WUP_O_MASK;SPRITE_MASK_P
|
||||
* CopyPtr #BIRD_WUP_O_IMASK;SPRITE_IMASK_P
|
||||
* jmp :drawSprite
|
||||
*:flapDownOdd CopyPtr #BIRD_WDN_O_MAIN;SPRITE_MAIN_P
|
||||
* CopyPtr #BIRD_WDN_O_AUX;SPRITE_AUX_P
|
||||
* CopyPtr #BIRD_WDN_O_MASK;SPRITE_MASK_P
|
||||
* CopyPtr #BIRD_WDN_O_IMASK;SPRITE_IMASK_P
|
||||
* jmp :drawSprite
|
||||
*:drawSprite
|
||||
* jsr DrawSpriteC
|
||||
rts
|
||||
|
||||
*** "Even" / base sprites
|
||||
BIRD_WDN_MAIN
|
||||
hex 00,50,D5,D5,D5,A5,FF,0F,F0,00
|
||||
hex 55,DD,DD,5D,DD,0A,0F,00,0F,00
|
||||
hex A0,5D,5D,55,50,50,00,00,00,00
|
||||
hex 00,50,D5,D5,D5,A5,FF,0F,F0,00
|
||||
hex 55,DD,DD,5D,DD,0A,0F,00,0F,00
|
||||
hex A0,5D,5D,55,50,50,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WDN_AUX
|
||||
hex 00,A0,EA,EA,EA,5A,FF,0F,F0,00
|
||||
hex AA,EE,EE,AE,EE,05,0F,00,0F,00
|
||||
hex 50,AE,AE,AA,A0,A0,00,00,00,00
|
||||
hex 00,A0,EA,EA,EA,5A,FF,0F,F0,00
|
||||
hex AA,EE,EE,AE,EE,05,0F,00,0F,00
|
||||
hex 50,AE,AE,AA,A0,A0,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WDN_MASK
|
||||
hex FF,0F,00,00,00,00,00,00,0F,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex 00,00,00,00,00,00,F0,F0,F0,FF
|
||||
hex FF,0F,00,00,00,00,00,00,0F,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex 00,00,00,00,00,00,F0,F0,F0,FF
|
||||
|
||||
|
||||
BIRD_WDN_IMASK
|
||||
hex 00,F0,FF,FF,FF,FF,FF,FF,F0,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex FF,FF,FF,FF,FF,FF,0F,0F,0F,00
|
||||
hex 00,F0,FF,FF,FF,FF,FF,FF,F0,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex FF,FF,FF,FF,FF,FF,0F,0F,0F,00
|
||||
|
||||
BIRD_WUP_MAIN
|
||||
hex 00,50,D5,D5,D5,A5,FF,0F,F0,00
|
||||
hex 55,D5,D5,55,DD,0A,0F,00,0F,00
|
||||
hex 0A,05,50,5D,50,50,00,00,00,00
|
||||
hex 00,50,D5,D5,D5,A5,FF,0F,F0,00
|
||||
hex 55,D5,D5,55,DD,0A,0F,00,0F,00
|
||||
hex 0A,05,50,5D,50,50,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WUP_AUX
|
||||
hex 00,A0,EA,EA,EA,5A,FF,0F,F0,00
|
||||
hex AA,EA,EA,AA,EE,05,0F,00,0F,00
|
||||
hex 05,0A,A0,AE,A0,A0,00,00,00,00
|
||||
hex 00,A0,EA,EA,EA,5A,FF,0F,F0,00
|
||||
hex AA,EA,EA,AA,EE,05,0F,00,0F,00
|
||||
hex 05,0A,A0,AE,A0,A0,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WUP_MASK
|
||||
hex FF,0F,00,00,00,00,00,00,0F,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex F0,F0,00,00,00,00,F0,F0,F0,FF
|
||||
hex FF,0F,00,00,00,00,00,00,0F,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,0F
|
||||
hex F0,F0,00,00,00,00,F0,F0,F0,FF
|
||||
|
||||
|
||||
BIRD_WUP_IMASK
|
||||
hex 00,F0,FF,FF,FF,FF,FF,FF,F0,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex 0F,0F,FF,FF,FF,FF,0F,0F,0F,00
|
||||
hex 00,F0,FF,FF,FF,FF,FF,FF,F0,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,F0
|
||||
hex 0F,0F,FF,FF,FF,FF,0F,0F,0F,00
|
||||
|
||||
*** "Odd" / shifted sprites
|
||||
BIRD_WUP_O_MAIN
|
||||
|
@ -64,41 +109,41 @@ BIRD_WUP_O_AUX
|
|||
|
||||
|
||||
BIRD_WUP_O_MASK
|
||||
hex FF,FF,0F,0F,0F,0F,0F,0F,FF,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex FF,FF,F0,F0,F0,F0,FF,FF,FF,FF
|
||||
hex FF,FF,0F,0F,0F,0F,0F,0F,FF,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex FF,FF,F0,F0,F0,F0,FF,FF,FF,FF
|
||||
|
||||
|
||||
BIRD_WUP_O_IMASK
|
||||
hex 00,00,F0,F0,F0,F0,F0,F0,00,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 00,00,0F,0F,0F,0F,00,00,00,00
|
||||
hex 00,00,F0,F0,F0,F0,F0,F0,00,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 00,00,0F,0F,0F,0F,00,00,00,00
|
||||
|
||||
IRD_WDN_O_MAIN
|
||||
hex 00,00,50,50,50,50,F0,F0,00,00
|
||||
hex 50,D5,DD,DD,DD,AA,FF,00,FF,00
|
||||
hex 05,DD,DD,55,0D,00,00,00,00,00
|
||||
hex 0A,05,05,05,05,05,00,00,00,00
|
||||
BIRD_WDN_O_MAIN
|
||||
hex 00,00,50,50,50,50,F0,F0,00,00
|
||||
hex 50,D5,DD,DD,DD,AA,FF,00,FF,00
|
||||
hex 05,DD,DD,55,0D,00,00,00,00,00
|
||||
hex 0A,05,05,05,05,05,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WDN_O_AUX
|
||||
hex 00,00,A0,A0,A0,A0,F0,F0,00,00
|
||||
hex A0,EA,EE,EE,EE,55,FF,00,FF,00
|
||||
hex 0A,EE,EE,AA,0E,00,00,00,00,00
|
||||
hex 05,0A,0A,0A,0A,0A,00,00,00,00
|
||||
hex 00,00,A0,A0,A0,A0,F0,F0,00,00
|
||||
hex A0,EA,EE,EE,EE,55,FF,00,FF,00
|
||||
hex 0A,EE,EE,AA,0E,00,00,00,00,00
|
||||
hex 05,0A,0A,0A,0A,0A,00,00,00,00
|
||||
|
||||
|
||||
BIRD_WDN_O_MASK
|
||||
hex FF,FF,0F,0F,0F,0F,0F,0F,FF,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex F0,F0,F0,F0,F0,F0,FF,FF,FF,FF
|
||||
hex FF,FF,0F,0F,0F,0F,0F,0F,FF,FF
|
||||
hex 0F,00,00,00,00,00,00,00,00,FF
|
||||
hex 00,00,00,00,00,00,00,00,00,F0
|
||||
hex F0,F0,F0,F0,F0,F0,FF,FF,FF,FF
|
||||
|
||||
|
||||
BIRD_WDN_O_IMASK
|
||||
hex 00,00,F0,F0,F0,F0,F0,F0,00,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 0F,0F,0F,0F,0F,0F,00,00,00,00
|
||||
hex 00,00,F0,F0,F0,F0,F0,F0,00,00
|
||||
hex F0,FF,FF,FF,FF,FF,FF,FF,FF,00
|
||||
hex FF,FF,FF,FF,FF,FF,FF,FF,FF,0F
|
||||
hex 0F,0F,0F,0F,0F,0F,00,00,00,00
|
||||
|
|
175
src/flapple.s
175
src/flapple.s
|
@ -31,163 +31,6 @@ Main
|
|||
lda #$77
|
||||
jsr DL_Clear
|
||||
|
||||
sec
|
||||
bcs SKIP
|
||||
lst on
|
||||
SPRITE_X db 0
|
||||
SPRITE_Y db 0
|
||||
SPRITE_W db 0
|
||||
SPRITE_H db 0 ; <- in bytes
|
||||
|
||||
SPRITE_MAIN da 0
|
||||
SPRITE_AUX da 0
|
||||
SPRITE_MASK da 0
|
||||
SPRITE_IMASK da 0
|
||||
SPRITE_COLLISION db 0
|
||||
SPRITE_Y_IDX dw 0
|
||||
SPRITE_X_IDX dw 0
|
||||
|
||||
SPRITE_SCREEN_P equz $00
|
||||
SPRITE_MAIN_P equz $02
|
||||
SPRITE_AUX_P equz $04
|
||||
SPRITE_MASK_P equz $FA
|
||||
SPRITE_IMASK_P equz $FC
|
||||
|
||||
SPRITE_SCREEN_IDX db 0
|
||||
AUX_BG_COLOR db #$BB
|
||||
MAIN_BG_COLOR db #$77
|
||||
|
||||
lst off
|
||||
SKIP
|
||||
lda BIRD_X
|
||||
sta SPRITE_X
|
||||
lda BIRD_Y
|
||||
sta SPRITE_Y
|
||||
lda #10
|
||||
sta SPRITE_W
|
||||
lda #3
|
||||
sta SPRITE_H
|
||||
CopyPtr BIRD_WDN_MAIN;SPRITE_MAIN_P
|
||||
CopyPtr BIRD_WDN_AUX;SPRITE_AUX_P
|
||||
CopyPtr BIRD_WDN_MASK;SPRITE_MASK_P
|
||||
CopyPtr BIRD_WDN_IMASK;SPRITE_IMASK_P
|
||||
jsr DrawSpriteC
|
||||
sec
|
||||
bcs GameLoop
|
||||
|
||||
** Doesn't handle odd horizontal displacement, but vertical works.
|
||||
DrawSpriteC
|
||||
lda SPRITE_W
|
||||
lsr
|
||||
sta SPRITE_W ; /2
|
||||
:yLoop lda SPRITE_Y ;
|
||||
lsr
|
||||
asl
|
||||
lda LoLineTable,y
|
||||
sta SPRITE_SCREEN_P+1
|
||||
lda LoLineTable+1,y
|
||||
sta SPRITE_SCREEN_P
|
||||
lda SPRITE_X
|
||||
lsr
|
||||
clc
|
||||
adc SPRITE_SCREEN_P
|
||||
sta SPRITE_SCREEN_P
|
||||
bcc :noCarry
|
||||
inc SPRITE_SCREEN_P+1
|
||||
|
||||
|
||||
* FANCYCOLLISION ; "pixel" level
|
||||
* load SCREEN,x
|
||||
* and IMASK,x
|
||||
* cmp BGNIB1
|
||||
* beq :NOCOLLISION
|
||||
* cmp BGNIB2
|
||||
* beq :NOCOLLISION
|
||||
* lda 1
|
||||
* sta COLLISION
|
||||
* bra :DRAWMASKEDPIXEL
|
||||
|
||||
|
||||
:noCarry sta TXTPAGE2 ; start with even pixels on aux
|
||||
lda #0
|
||||
sta SPRITE_SCREEN_IDX
|
||||
tax ;\_ x/y = 0
|
||||
tay ;/
|
||||
:lineLoop
|
||||
lda (SPRITE_IMASK_P),y
|
||||
beq :noPixel
|
||||
cmp #$FF
|
||||
beq :simpleCollision
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
pha
|
||||
txa
|
||||
tay
|
||||
pla
|
||||
pha ; store one more time
|
||||
and (SPRITE_IMASK_P),y
|
||||
cmp #$B0
|
||||
beq :noFancyCollision
|
||||
cmp #$0B
|
||||
beq :noFancyCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
:noFancyCollision
|
||||
pla
|
||||
and (SPRITE_MASK_P),y ;woops.. cut out sprite shape
|
||||
ora (SPRITE_AUX_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
:simpleCollision
|
||||
lda (SPRITE_SCREEN_P),y
|
||||
cmp #$BB ; AUX BCG
|
||||
bne :noSimpleCollision
|
||||
lda #1
|
||||
sta SPRITE_COLLISION
|
||||
:noSimpleCollision
|
||||
txa
|
||||
tay
|
||||
lda (SPRITE_AUX_P),y
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
sta (SPRITE_SCREEN_P),y
|
||||
:noPixel
|
||||
inx
|
||||
inx
|
||||
inc SPRITE_SCREEN_IDX
|
||||
ldy SPRITE_SCREEN_IDX
|
||||
cpy SPRITE_W
|
||||
bcc :lineLoop
|
||||
|
||||
rts
|
||||
|
||||
* for y
|
||||
* SETLINEPTRS()
|
||||
* for x
|
||||
* load imask,x
|
||||
* beq :NOPIXEL
|
||||
*
|
||||
* FANCYCOLLISION ; "pixel" level
|
||||
* load SCREEN,x
|
||||
* and IMASK,x
|
||||
* cmp BGNIB1
|
||||
* beq :NOCOLLISION
|
||||
* cmp BGNIB2
|
||||
* beq :NOCOLLISION
|
||||
* lda 1
|
||||
* sta COLLISION
|
||||
* bra :DRAWMASKEDPIXEL
|
||||
* SIMPLECOLLISION
|
||||
* load SCREEN,x
|
||||
* cmp #BGCOLOR
|
||||
* beq :NOCOLLISION
|
||||
* lda 1
|
||||
* sta COLLISION
|
||||
*:NOCOLLISION
|
||||
*:DRAWMASKEDPIXEL
|
||||
* load SCREEN,(IDX)X
|
||||
* and MASK,x ; can I reuse (IDX)X?
|
||||
* or MAIN/AUX,x
|
||||
* sta SCREEN,(IDX)X
|
||||
*:NOPIXEL advance ptrs
|
||||
|
||||
GameLoop
|
||||
; handle input
|
||||
|
@ -197,9 +40,21 @@ GameLoop
|
|||
; update pipes / draw
|
||||
; update player / draw (w/collision)
|
||||
; update score
|
||||
lda #1
|
||||
sta STATE
|
||||
jsr UpdatePipes
|
||||
lda #2
|
||||
sta STATE
|
||||
jsr BirdTest
|
||||
lda #3
|
||||
sta STATE
|
||||
;jsr DrawBird
|
||||
jsr DrawScore
|
||||
lda #4
|
||||
sta STATE
|
||||
jsr UpdateGrass
|
||||
lda #5
|
||||
sta STATE
|
||||
jsr VBlank
|
||||
*jsr WaitKey
|
||||
|
||||
|
@ -211,6 +66,9 @@ GameLoop
|
|||
:noKey bpl GameLoop
|
||||
|
||||
|
||||
lst on
|
||||
STATE dw 0 ; 1=pipes, 2=bird
|
||||
lst off
|
||||
|
||||
Quit jsr MLI ; first actual command, call ProDOS vector
|
||||
dfb $65 ; with "quit" request ($65)
|
||||
|
@ -268,6 +126,8 @@ ScoreLo db 0
|
|||
ScoreHi db 0
|
||||
|
||||
|
||||
|
||||
|
||||
**************************************************
|
||||
* Grass
|
||||
**************************************************
|
||||
|
@ -440,3 +300,4 @@ VBlankNormal
|
|||
use pipes
|
||||
use bird
|
||||
use numbers
|
||||
use sprite ; this is getting to be a lot
|
||||
|
|
Loading…
Reference in New Issue
Block a user