;;--- CODE START ---;;
 .inesprg 16
 .inesmap 24
 .inesmir 1
 .ineschr 0

 ; Common includes
 .include "./common/NES.inc" 

USE_VRC6 = 1        ; Enable this to include VRC6 code

 ; Zero page variables
 .ZP
zpJoy1Status:  .ds 1  ; Status of first joystick
zpPreviousJoy1Status: .ds 1   ; Previous status of first joystick
zpNmiCount:  .ds 1   ; This reserves 1 byte for nmi counter
zpPpuCtrlFlags:    .ds 1   ; backup state of PPU_CTRL flags
zpPpuMaskFlags:  .ds 1  ; backup state of PPU_MASK flags
zpCopySrcAdr:           .ds 2   ; Temporary address of data
 
 .CODE
 .bank 0
 .org $0020
addrLO: .db 0  ; make "variable"s for our indirect addressing
addrHI: .db 0
seed: .db 0    ;Do losowania spacjala
ID_SPECIAL .db 0 ;ID grafiki specjala spadającego...Ustawia się go w OPCJE
current_bank: .db 0   
current_bankC: .db 0  
current_bank_Back: .db 0 ;Żeby wiedziało do jakiego banku wrócić po wczytaniu grafiki...      
        .org $0180
X_Specjal: .db 0
Y_Specjal: .db 0
Lock_Special: .db 0  ;Sprawia że losowanie liczby nie odbywa się jak specjal już zostanie wylosowany
SP_ACTIVE: .db 0     ;Czy i jaki special aktywny
        .org $0720
Nacisn_guzik: .db 0
Trzyma_guzik: .db 0
Losowa_kropla: .db 0
Hero_Y: .db 0
Hero_X: .db 0
 .org $8000
LevPointers:
   .dw Lev1, Lev2, Title
OpisyPointers:
   .dw Dizzy_Opis, Daisy_Opis, Denzil_Opis

Start:
 lda current_bank
 sta current_bank_Back
 ldx #$00         ;Numer Grafiki
 lda #$02         ;Numer banku z grafiką
 jsr Load_GFX



Czysc_RAM:
 ldx #$00
 jsr Music_Init

Title_Start:



  lda #$02
  sta $150               ;Daj ID mapy do załadowania i skocz do ładowania tła
  jsr Laduj_Mapa

  lda $7F4
  bne LoadAttribute
plik2paleta:
        lda tilepal, X     ; use a simple load of 32 bytes.
 inx
 sta $6ff,X
 cpx #32
 bne plik2paleta


  jsr Laduj_Paleta
  inc $7F4

LoadAttribute:
  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$23
  STA $2006             ; write the high byte of $23C0 address
  LDA #$C0
  STA $2006             ; write the low byte of $23C0 address
  LDX #$00              ; start out at 0
LoadAttributeLoop:
  LDA Atryb1,x             ; load data from address (attribute + the value in x)
  STA $2007             ; write to PPU
  INX                   ; X = X + 1
  CPX #$8              ; Compare X to hex $08, decimal 8 - copying 8 bytes
  BNE LoadAttributeLoop


  LDA #010000 ;enable NMI, sprites from Pattern 0, background from Pattern 1
  STA $2000

  LDA #011110 ; enable sprites, enable background
  STA $2001
  LDA #$00
  STA $2005
  STA $2005

 ; Setup the PPU
 lda #001000
 sta $2000
 lda #011010
 sta $2001

 
 lda #PPU_CTRL_NMI
 sta zpPpuCtrlFlags ;To musi być żeby muzyka nie zaczynała się od nowa w tej klatce
 sta PPU_CTRL
cos
  jsr Czysc_Sprity


;-------------------------------
Title_START

        ldx #$00
        TXA

;-------------------------------
Ustaw_Strzalka:
        lda #$80
        sta $101

;-------------------------------
Dodatkowe:
        ldx #$00   ;Ustaw 00 dla X przed wczytywaniem spritów

        lda #$00  ;Ustaw 00 dla licznika spritów
        sta $7F2
 ; and yes, it MUST go in that order.

;--------------------------------

Strzalka:
        lda #$02
        sta $7F0  ;Atryb

        ldy $101  ;Y

        ldx #$5d  ;X

        lda #$0A   ;ID
        jsr Rys1
;*************************

sprity_textu:
infinite:  ; a label to start our infinite loop
;----------------------------------------------


        jsr KEYPAD

;-------------------------------------------------------------------------------------------
           lda Nacisn_guzik
           cmp #$20       ;Sprawdza czy SELECT naciśnięty
           beq Select1
           jmp STARTREAD
Select1:
           lda Trzyma_guzik

           beq Select2
           jmp Dodatkowe
Select2:
           lda $101
           cmp #$A0
           beq UstawXStrzalki
           clc
           adc #$10     ;Zwiększ Y Strzałki o 10
           sta $101
           jmp KontSELECT
UstawXStrzalki:
           lda #$80
           sta $101
KontSELECT
           inc Trzyma_guzik
;---------------------------------------------------------------------------------------------
STARTREAD:
           lda Nacisn_guzik
           cmp #$80       ;Sprawdza czy guzik A naciśnięty
           beq START1
           jmp Dodatkowe
START1:
           lda $101
           cmp #$A0
           beq Ekran_Autorzy_skocz
           cmp #$90
           beq Ekran_OPCJE_skocz
           cmp #$80
           beq GRA_skocz1
           jmp Dodatkowe
Ekran_Autorzy_skocz:
           inc Trzyma_guzik
           jmp Ekran_Autorzy
Ekran_OPCJE_skocz:
           inc Trzyma_guzik
           jmp Ekran_OPCJE
GRA_skocz1:
           lda Trzyma_guzik
           beq GRA2
           jmp Dodatkowe
GRA2:
           inc Trzyma_guzik
           jmp GRA



;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\AUTORZY\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ekran_Autorzy:
  jsr Czysc_Sprity
  jsr Rys.Sprity
  jsr CZYSC_PPU


LoadBackground2:

  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$20
  STA $2006             ; write the high byte of $2000 address
  LDA #$00
  STA $2006             ; write the low byte of $2000 address
  lda #low(ourMap2)
  sta addrLO
  Lda #high(ourMap2)              ; start out at 0
  sta addrHI

  ldx #4
  ldy #0

LoadBackgroundLoop2:
  LDA [addrLO], y     ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  BNE LoadBackgroundLoop2  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  inc addrHI
  dex
  bne LoadBackgroundLoop2


  jsr Laduj_Paleta



  LDA #010000 ;enable NMI, sprites from Pattern 0, background from Pattern 1
  STA $2000

  LDA #011110 ; enable sprites, enable background
  STA $2001
  LDA #$00
  STA $2005
  STA $2005



 ; Setup the PPU
 lda #001000
 sta $2000
 lda #011010
 sta $2001

 lda #PPU_CTRL_NMI
 sta zpPpuCtrlFlags ;To musi być żeby muzyka nie zaczynała się od nowa w tej klatce
 sta PPU_CTRL

MAIN:
       


        jsr KEYPAD

        lda Nacisn_guzik
        cmp #$80
        beq Zapetl_Autorzy
 jmp MAIN
Zapetl_Autorzy:
        lda Trzyma_guzik
        beq Zapetl_Autorzy2
        jmp MAIN

Zapetl_Autorzy2:
        jsr CZYSC_PPU
        inc Trzyma_guzik
        jmp Title_Start
;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\OPCJE\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Ekran_OPCJE:


 lda #001000
 sta $2000       ;Wyczyść PPU
 lda #000001
 sta $2001
Odnow_OPIS:

  jsr Laduj_Opisy

  jsr Doczytaj_Mape

  jsr Laduj_Paleta


  LDA #010000 ;enable NMI, sprites from Pattern 0, background from Pattern 1
  STA $2000

  LDA #011110 ; enable sprites, enable background
  STA $2001
  LDA #$00
  STA $2005
  STA $2005

 ; Setup the PPU
 lda #001000
 sta $2000
 lda #011010
 sta $2001

 lda #PPU_CTRL_NMI
 sta zpPpuCtrlFlags ;To musi być żeby muzyka nie zaczynała się od nowa w tej klatce
 sta PPU_CTRL
MAIN_OPCJE:

        ldx #$00   ;Ustaw 00 dla X przed wczytywaniem spritów

        lda #$00  ;Ustaw 00 dla licznika spritów
        sta $7F2


SUB_OPCJE
Strzalka_OPCJE:
        lda #$02
        sta $7F0  ;Atryb

        ldy $101  ;Y

        ldx #$5d  ;X

        lda #$0A   ;ID
        jsr Rys1
;---------------------------------------
        lda #$50
        sta Hero_Y  ;Ustaw Wysokość rysowanej postaci

        lda #$6D
        sta Hero_X  ;Ustaw X Postaci

        jsr Rys.Postac_STOP

Sprawdz_Akcesor_Postac:
        lda $10A           ;Sprawdź czy postać to Dizzy
        cmp #$20
        bne Vblank_Opcje

        jsr Daisy_Wlosy_Stoi
;---------------------------------------
Vblank_Opcje:
        lda Nacisn_guzik
        bne waitblank2
        lda #$00
        sta Trzyma_guzik   ;Zresetuj możliwość naciśnięcia guzika
;----------------------------------------------
waitblank2:


 lda #$00   ; these lines tell $2003
 sta $2003  ; to tell
 lda #$00   ; $2004 to start
 sta $2003  ; at $0000.

 lda #$00
 sta $02

        jsr KEYPAD
;----------------------------------------------------------
POWRÓT_OPCJE:
           lda $101
           cmp #$90
           beq Zmiana_Postac

           lda $101
           cmp #$A0
           beq ZMIANA_SKIN

           cmp #$B0
           bne Przewijanie_OPCJE_SKOK


           lda Nacisn_guzik
           cmp #$80
           bne Przewijanie_OPCJE_SKOK
           jsr CZYSC_PPU
           inc Trzyma_guzik
           jmp Title_Start
Przewijanie_OPCJE_SKOK:
           jmp Przewijanie_OPCJE
;---------------------------------------------------------- 
Zmiana_Postac:
           lda Nacisn_guzik
           cmp #$80
           bne Przewijanie_OPCJE

           lda Trzyma_guzik
           bne Przewijanie_OPCJE

           lda $10A
           clc
           adc #$20    ;Zwiększ ID postaci
           sta $10A

           inc $151    ;Zwiększ ID opisu postaci

           lda $10A
           cmp #$20
           beq Daisy_Paleta
           cmp #$40
           beq Denzil_Paleta
           jmp Wyjdz_zmiana_postaci
Daisy_Paleta:
           lda #$0D
           sta $719        ;Zmień Palete Akcesoria
           
           lda #$17
           sta $71A
           
           lda #$07
           sta $71B
           jmp Wyjdz_zmiana_postaci
Denzil_Paleta:
           lda #$64
           sta ID_SPECIAL ;Ustaw nr. grafiki dla specjala Denzila

           lda #$01
           sta $716    ;Zmiań palete łap

           jsr Denz_Paleta_Spec

           lda #$01
           sta $7F4    ;Ustaw by ekran początkowy nie wczytywał palety
           
           lda #$03
           sta $116    ;O ile ma zwiększyć wysokość postaci
Wyjdz_zmiana_postaci:
           jsr Czysc_Sprity
           inc Trzyma_guzik
           jmp Ekran_OPCJE
;----------------------------------------------------------
ZMIANA_SKIN:
           lda Nacisn_guzik
           cmp #$80
           bne Przewijanie_OPCJE

           lda Trzyma_guzik
           bne Przewijanie_OPCJE
           lda #$05
           sta $104

           lda #$09
           sta $316        ;Zmień palete łap i nóg

           inc Trzyma_guzik
           jmp Ekran_OPCJE
;----------------------------------------------------------
Przewijanie_OPCJE:
           lda Nacisn_guzik
           cmp #$20       ;Sprawdza czy SELECT naciśnięty
           beq Select_Opcje1
           jmp MAIN_OPCJE
Select_Opcje1:
           lda Trzyma_guzik

           beq Select_Opcje2
           jmp MAIN_OPCJE
Select_Opcje2:
           lda $101
           cmp #$B0
           beq UstawYStrzalki_Opcje
           clc
           adc #$10     ;Zwiększ Y Strzałki o 10
           sta $101
           jmp KontSELECT_Opcje
UstawYStrzalki_Opcje:
           lda #$90
           sta $101
KontSELECT_Opcje
           inc Trzyma_guzik
;----------------------------------------------------------

        jmp MAIN_OPCJE
;----------------------------------------

;---------------------------------------------------------------
Mapa_Startuje:
  jsr Czysc_Sprity
  jsr Rys.Sprity
  jsr CZYSC_PPU
  
  lda #$01       ;dźwięk "cisza"
  jsr Music_Init

  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$20
  STA $2006             ; write the high byte of $2000 address
  LDA #$00
  STA $2006             ; write the low byte of $2000 address

  ldx #$03

Laduj_Puste:
  ldy #$00
Mapa_Start:
  LDA #$0A    ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  cpy #$80
  BNE Mapa_Start  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  dex
  bne Laduj_Puste
;..........................................................
Laduj_Plik:
   lda $150 ;get the index
   asl A;multiply by 2 because each address is 2 bytes
   tax
   lda LevPointers+0, x ;copy the low byte
   sta addrLO
   lda LevPointers+1, x ;copy the high byte
   sta addrHI

   ldy #$00
Ladujplik2:
  LDA [addrLO], y     ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  cpy #$A0
  bne Ladujplik2
;............................................
  ldx #$03
Laduj_Puste2:
  ldy #$00
Mapa_Start2:
  LDA #$0A    ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  cpy #$8C
  BNE Mapa_Start2  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  dex
  bne Laduj_Puste2
;..........................................
Atryb_Start_Mapa:
  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$23
  STA $2006             ; write the high byte of $23C0 address
  LDA #$C0
  STA $2006             ; write the low byte of $23C0 address

  LDX #$00              ; start out at 0
Atryb_Start_Mapa_Petla:
  LDA #$00
  STA $2007             ; write to PPU
  INX                   ; X = X + 1
  CPX #$30              ; Compare X to hex $08, decimal 8 - copying 8 bytes
  BNE Atryb_Start_Mapa_Petla
;.........................................

  LDA #010000 ;enable NMI, sprites from Pattern 0, background from Pattern 1
  STA $2000

  LDA #011110 ; enable sprites, enable background
  STA $2001
  LDA #$00
  STA $2005
  STA $2005

  ; Setup the PPU
  lda #001000
  sta $2000
  lda #001000
  sta $2001

Mapa_Start_Guzik
        jsr KEYPAD
        lda Nacisn_guzik
        cmp #$80
        beq Mapa_Start_Guzik2
 jmp Mapa_Start_Guzik
Mapa_Start_Guzik2:
        lda Trzyma_guzik
        beq Mapa_Start_Guzik3
        jmp Mapa_Start_Guzik

Mapa_Start_Guzik3:
        inc Trzyma_guzik
        rts



  rts
;---------------------------------------------------------------
Laduj_Mapa:

  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$20
  STA $2006             ; write the high byte of $2000 address
  LDA #$00
  STA $2006             ; write the low byte of $2000 address

   lda $150 ;get the index
   asl A;multiply by 2 because each address is 2 bytes
   tax
   lda LevPointers+0, x ;copy the low byte
   sta addrLO
   lda LevPointers+1, x ;copy the high byte
   sta addrHI


  ldx #4
  ldy #0

LoadBackgroundLoop:
  LDA [addrLO], y     ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  BNE LoadBackgroundLoop  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  inc addrHI
  dex
  bne LoadBackgroundLoop
  rts
;---------------------------------------------------------------
Laduj_Opisy:

  LDA $2002             ; read PPU status to reset the high/low latch
  LDA #$20
  STA $2006             ; write the high byte of $2000 address
  LDA #$00
  STA $2006             ; write the low byte of $2000 address

   lda $151 ;get the index
   asl A;multiply by 2 because each address is 2 bytes
   tax
   lda OpisyPointers+0, x ;copy the low byte
   sta addrLO
   lda OpisyPointers+1, x ;copy the high byte
   sta addrHI


  ldx #4
  ldy #0

LoadBackgroundOpisy:
  LDA [addrLO], y     ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  BNE LoadBackgroundOpisy  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  inc addrHI
  dex
  bne LoadBackgroundOpisy
  rts
;---------------------------------------------------------------


  ;\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
 .bank 1
 .org $A000

Title: .incbin "Title.map" ;Mapa tła dla Titla
Title2: .incbin "Title.map" ;Mapa tła dla Titla
tilepal:   .incbin "our.pal"  ; a label for our pallete data
Yolkfolkpal:   .incbin "Yolkfolk.pal"  ; a label for our pallete data
ourMap2: .incbin "Autorzy.map" ;Mapa tła dla okienka "autorzy":D
ourMap3: .incbin "Opcje.map" ;Mapa tła dla okienka "Opcje":D
ourMap4: .incbin "Yolkfolk.map" ;Mapa Yolkfolku
Atryb1: .incbin "Title.at"   ;Spis atrybutów dla Titla
Dizzy_Opis: .incbin "Opisy/DIZZY.txt"
Daisy_Opis: .incbin "Opisy/DAISY.txt"
Denzil_Opis: .incbin "Opisy/DENZIL.txt"
Lev1: .incbin "Lev/Lev1.map"
Lev2: .incbin "Lev/Lev2.map"

        .include "Postacie/Efekty_Specjali.txt"
        .include "Postacie/Denzil.txt"
        .include "Postacie/Specjale_palety.txt"
        .include "SYS/Grafika.txt"

 .bank 2
 .org $8000
        .include "a_e3/Main.txt"


 .bank 4
 .org $8000
Tlo1:  .incbin "tlo.chr"
Sprity1: .incbin "sprity.chr"

 .bank 6
 .org $8000
coss: .incbin "music.bin"

 .bank 8
 .org $8000

 .bank 10
 .org $8000

 .bank 12
 .org $8000


 .bank 14
 .org $8000


 .bank 16
 .org $8000


 .bank 18
 .org $8000


 .bank 20
 .org $8000


 .bank 22
 .org $8000


 .bank 24
 .org $8000


 .bank 26
 .org $8000


 .bank 28
 .org $8000
        .include "SYS/Game_Select.txt"

        .bank 30
 .org $C000

; The music data
songData1:     
 .incbin "./music/vrc6.bin"
songData2:
        .incbin "./music/cisza.bin"
songData3:
        .incbin "./music/prime.bin"
 
        .bank 31
 .org $E000

Music_Init:                          ;X to numer muzyki!

 ; ignore IRQs 
 sei

 ; Then store the address of the intented music data, if any.
 lda musicDataTableLow, x  
 sta ft_music_addr
 lda musicDataTableHigh, x 
 sta ft_music_addr + 1
 
 ; Finally select the song inside the music data
 lda #$0    ; track 0
 ldx #$0                   ; NTSC
 jsr ft_music_init
 ; init default value for ppu_crtl flags + activate NMI
 lda #PPU_CTRL_NMI
 sta zpPpuCtrlFlags
 sta PPU_CTRL
        rts
 ; Then set the display parameters


 
;->BANK 01: Test code and utils -------------------------------------------
 ; Separated in another file to make it easier to read
 .include "./common/utils.asm"

 ; The code for the player
 .include "./soundDrv/driver.asm"


;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
; Vectors for NMI and IRQ
;-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

;->BEGIN----------------------------------------------------------------------
; NMI interrupt handler. Called 60 times per second (NTSC)
; 
vector_nmi:

        PHA
        TXA
        PHA
        TYA
        PHA

 jsr Rys.Sprity
        jsr ft_music_play

        PLA
        TAY
        PLA
        TAX
        PLA
        RTI          
;-<END------------------------------------------------------------------------
Laduj_Paleta:
 lda #$3F
 sta $2006
 lda #$00    ; point $2006 to the pallete
 sta $2006
 ldx #$00

palload:
 lda #$02
 sta $2008
        lda $700, X     ; use a simple load of 32 bytes.
 inx
 sta $2007
 cpx #32
 bne palload
        rts

;--------------------------------------------------------------
Load_GFX:
  sta $8000          ;load Bank number before running this...
  sta current_bank
  TXA

  asl A          ;multiply by 2 because each address is 2 bytes
  tax
  lda grafTable+0, x ;copy the low byte
  sta addrLO
  lda grafTable+1, x ;copy the high byte
  sta addrHI

  ldx #32
  ldy #0

Load_Grafics:
  LDA [addrLO], y     ; load data from address (background + the value in x)
  STA $2007             ; write to PPU
  INy                   ; X = X + 1
  BNE Load_Grafics  ; Branch to LoadBackgroundLoop if compare was Not Equal to zero
  inc addrHI
  dex
  bne Load_Grafics
  lda current_bank_Back
  sta $8000
  sta current_bank
  rts


grafTable:
   .dw Tlo1, Sprity1

Reset:
         sei ;disable all 6502 interrupts
         lda #0
         sta $2000
         lda #$40
         sta $4017 ;disable APU frame IRQ

         LDA #$00
         STA $0000, x
         STA $0100, x
         STA $0200, x
         STA $0400, x
         STA $0500, x
         STA $0600, x
         STA $0700, x
         STA $0300, x
         INX
         BNE Reset

         ldx #$ff
         txs

         ldx #$00


         lda #0
         sta $8000
         sta current_bank

         lda #-2
         sta $C000
         sta current_bankC

        ; set CHR registers
         ldx #0
         stx $D000
         inx
         stx $D001
         inx
         stx $D002
         inx
         stx $D003
         inx
         stx $E000
         inx
         stx $E001
         inx
         stx $E002
         inx
         stx $E003

        ; virtical mirroring
         lda #00
         sta $B003

        ; disable IRQs
         lda #0
         sta $F001

        ; disable VRC6 audio(Don't affect Music driver...)
         lda #0
         sta $9002
         sta $A002
         sta $B002

        jmp Start

musicDataTableLow:  .byte LOW(songData1), LOW(songData2), LOW(songData3)
musicDataTableHigh:  .byte HIGH(songData1), HIGH(songData2), HIGH(songData3)

        .include "SYS/Rysowania.txt"

 .org $FFFA
 .dw vector_nmi        ; no VBlank
 .dw Reset   ; address to execute on reset
 .dw 0        ; no whatever

;;--- END OF CODE FILE ---;;

Add a code snippet to your website: www.paste.org