; 256 bajtowa gra zrcznociowa "Synch";  15-16 kwiecie 2010 Wyszkw 
;
;                      napisana na Grzybsoniad
;
;                     autor: Kamil "Gorgh" Trzaska




 org $9000
finish                      ; wyjcie z programu

       jsr swing   
       lda #$e0             ;przywrcenie systemowych fontw
       sta $2f4
       jmp ($a)
start
 ldy #1
 sty $9f
 sty $fc
 sty $fd
 sty $ff
 lda #$70                   ;przygotowanie displaylisty
 ldx #0
aa sta $a000,x
 inx
 cpx #18
 bne aa
ala lda #0                  ;czyszczenie pamici ekranu i przygotowanie fontu
 sta $3fec,x
 lda #$ff
 sta $4ff6,x
 inx
 bne ala
 lda #0                     ;DL c.d.
 sta $a00d
 lda #$40
 sta $a00e
 lda #$47
 sta $a00c

bb lda $d20a                ;procka losujca czsto pojawiania si kolejnych kwadratw, ilo w rej.y ( $9f)
 sta $a0,y
 sta $d0,y
 cmp #$ff
 bne *+4
 dec $fc
 dey
 bne bb


mainloop                    
 ldx $9f
 cpx #10                    ;10 poziom=koniec gry
 beq finish
 lda $fc                    
 bne ab                     ;gdy wszystkie kwadraty zbite- nowe losowanie; ilo kwadratw++
 inc $9f
 ldy $9f
 sty $fc
 jsr swing                  
 jmp bb
ab lda $d0,x                ;liczniki kwadratw
 cmp #$ff
 beq pomin
 dec $d0,x                  ;s co ramk zminiejszane
 bne pomin
      lda $a0,x
      sta $d0,x             ;odwieenie wartoci licznika
      txa                   ;kolor kwadratu zaleny od czstoci pojawiania si
      asl @
      asl @
      asl @
      asl @
      asl @
      adc #12
      sta 708
      lda #2
      sta $4008             ;zapalenie kwadratu
      lda #9
      sta $fe
      lda $fd          
      cmp #1
      beq pomin
      dec $fc               ;gdy kwadrat gracza zapalony podczas zapalania kwadratu lewego- strcenie
      sta $d201
      lda #$ff
      sta $d0,x

pomin
 dex
 bne ab
 lda $ff
 beq tut
 dec $ff                    ; licznik trwania strzau
tut
 dec $fe                    ;licznik czasu wywietlania kwadratu na ekranie
    bne put
    lda #0
    sta $4008               ; zgaszenie kwadratu
    inc $fe
    sta $d201               ; w przypadku trafienia- wyciszenie dwiku
put lda $d010
    bne pomin2            
pushed lda $ff              ;fire nacinity
       bne pomin2
       lda #31
       sta $ff              ;pauza midzy kolejnymi strzaami
       lda #6
       sta $fd
       lda #2
       sta $400b            ; zapalenie kwadratu gracza
pomin2
 lda 20
 cmp 20 
 beq *-2
 dec $fd
 bne dalej
 inc $fd
 lda #0
 sta $400b
dalej
 sta $d200
 jmp mainloop


swing       lda 20         ;efekt po pokonaniu poziomu
       sta 712
       bne swing
       rts

 org $a013
 dta b($41),a($a000)       ; DL c.d.

 org $230
 dta a($a000)               ;dlisplay list pointer
 org $2f4                   
 dta b($50)                 ;nowe fonty

 run start