; 256 bajtowa gra zręcznościowa "Synch";  15-16 kwiecień 2010 Wyszków 

;

;                      napisana na Grzybsoniadę

;

;                     autor: Kamil "Gorgh" Trzaska









 org $9000

finish                      ; wyjście z programu



       jsr swing   

       lda #$e0             ;przywrócenie systemowych fontów

       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 pamięci 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 losująca częstość pojawiania się kolejnych kwadratów, 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ść kwadratów++

 inc $9f

 ldy $9f

 sty $fc

 jsr swing                  

 jmp bb

ab lda $d0,x                ;liczniki kwadratów

 cmp #$ff

 beq pomin

 dec $d0,x                  ;są co ramkę zminiejszane

 bne pomin

      lda $a0,x

      sta $d0,x             ;odświeżenie wartości licznika

      txa                   ;kolor kwadratu zależny od częstości 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- strącenie

      sta $d201

      lda #$ff

      sta $d0,x



pomin

 dex

 bne ab

 lda $ff

 beq tut

 dec $ff                    ; licznik trwania strzału

tut

 dec $fe                    ;licznik czasu wyświetlania kwadratu na ekranie

    bne put

    lda #0

    sta $4008               ; zgaszenie kwadratu

    inc $fe

    sta $d201               ; w przypadku trafienia- wyciszenie dźwięku

put lda $d010

    bne pomin2            

pushed lda $ff              ;fire naciśnięty

       bne pomin2

       lda #31

       sta $ff              ;pauza między kolejnymi strzałami

       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