--genesis
genesis = Image.load("images/genesis.png")
ygenesis = 272
valeur = 0
apparition_splash = true
--menu langues
fond_menu_langue = Image.load("images/menu.png")
mcurseur = Image.load("images/curseurstart.png")
y_menu_langue = 88
apparition_menu_langue = false
--variables application
fond = Image.load("images/fond.png")
fond2 = Image.load("images/fond.png")
curseur = Image.load("images/curseur.png")
curseur_grand = Image.load("images/curseur.png")
curseur_petit = Image.load("images/curseur2.png")
curseur_menu = Image.load("images/curseurstart.png")
fiche_couleurs = Image.load("images/couleurs.png")
fondcharger = Image.load("images/fondcharger.png")
curseur_choix = Image.load("images/curseur_sauvegarder.png")
curseur_save = Image.load("images/curseur_save.png")
antidebordement = Image.load("images/antidebordement.png")
xcurseur = 233
ycurseur = 88
ycurseur_menu = 45
largeur = 8
hauteur = 8
etape = 1
ligne_remplace = 0
colonne_remplace= 0
nom_fichier_save = ""
ycurseur_save = 48
xcurseur_format = 244
r = 0
v = 0
b = 0
taille_curseur = 1
rouge = Color.new(255,0,0)
vert = Color.new(0,255,0)
bleu = Color.new(0,0,255)
blanc = Color.new(255,255,255)
gris = Color.new(64,60,60)
memoire = Color.new(0,0,0)
couleur_prise = Image.createEmpty(12,12)
couleur_memoire = Image.createEmpty(12,12)
menu_graphisme = false
fonction_charger_image = false
sauvegarder = false
application_fancais = false
application_anglais = false
application_espagnole = false
application = false

--FUNCTIONS FOR PSPIXEL V2.0 BY ALEXANDRE RIMBOT. 2011. FOR PSP GENESIS COMPETITION

function blitter()
  if pad:cross() then fond:blit(xcurseur-153,ycurseur-8,pixel_couleur)
    elseif pad:circle() then fond:blit(xcurseur-153,ycurseur-8,pixel_blanc)
    elseif pad:triangle() then fond:blit(xcurseur-153,ycurseur-8,pixel_memoire)
  end
end
function taille()
  if taille_curseur==1 then largeur=8;hauteur=8;curseur = curseur_grand
    elseif taille_curseur==0 then largeur=4;hauteur=4;curseur = curseur_petit
  end
  if pad:square() and oldpad:square()~=pad:square() and taille_curseur==1 then taille_curseur = 0
    elseif pad:square() and oldpad:square()~=pad:square() and xcurseur~=469 and ycurseur~=220 and taille_curseur==0 then taille_curseur = 1
  end
end
function pipette()
  if pad:select() then memoire = fond:pixel(xcurseur-153,ycurseur-8) end
end
function deplacements_palette()
  if not pad:r() and not pad:l() then
      if ((pad:up() and oldpad:up()~=pad:up()) or pad:analogY() < -60) and ycurseur~=8 then ycurseur = ycurseur - hauteur end
      if ((pad:down() and oldpad:down()~=pad:down()) or pad:analogY() > 60) and ycurseur~=(224-hauteur)  then ycurseur = ycurseur + hauteur end
      if ((pad:left() and oldpad:left()~=pad:left()) or pad:analogX() < -60) and xcurseur~=153 then xcurseur = xcurseur - largeur end
      if ((pad:right() and oldpad:right()~=pad:right()) or pad:analogX() > 60) and xcurseur~=(473-largeur) then xcurseur = xcurseur + largeur end
  end
  if xcurseur<153 then xcurseur = 153 end
  if xcurseur+largeur>473 then xcurseur = (473-largeur) end
  if ycurseur<8 then ycurseur=8 end
  if ycurseur+hauteur>224 then ycurseur = (224-hauteur) end
end
function deplacements_menu()
  if pad:up() and oldpad:up()~=pad:up() and ycurseur_menu~=45 then ycurseur_menu = ycurseur_menu - 31
    elseif pad:down() and oldpad:down()~=pad:down() and ycurseur_menu~=200 then ycurseur_menu = ycurseur_menu + 31
  end
end

function changer_couleur()
    if pad:r() and pad:up() then v = v + 1
      elseif pad:r() and pad:down() then v = v - 1
    end
    if pad:r() and pad:left() then r = r - 1
      elseif pad:r() and pad:right() then r = r + 1
    end
    if pad:l() and pad:up() then b = b + 1
      elseif pad:l() and pad:down() then b = b - 1
    end
    if r>255 then r=0 end
    if r<0 then r=255 end
    if v>255 then v=0 end
    if v<0 then v=255 end
    if b>255 then b=0 end
    if b<0 then b=255 end
end
function charger_image()
ligne = 0
y=0
selecteur=1
affichage=false
charger=false
nom=""
debut=1
repertoire="ms0:/picture/PsPixel v2.0/"

fichiers = System.listDirectory(repertoire)
nombre_fichiers = table.getn(fichiers)

	while true do
		if affichage==false then
		screen:clear()
		screen:blit(0,0,fondcharger)
		pad = Controls.read()

			for i = debut,nombre_fichiers do
			longueur = string.len(fichiers[selecteur].name)
			nom = string.sub(fichiers[selecteur].name, longueur-3)
			screen:print(133,ligne,fichiers[i].name,gris)
			ligne = ligne + 10
				if i == nombre_fichiers then ligne = 0 end
				screen:print(125,y,">",gris)
					if pad:square() and affichage==false and (nom==".png" or nom==".jpg" or nom==".PNG" or nom==".JPG") then
					affichage = true
					charger = true
				end
			end

			if pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers<=27 then y=y+10;selecteur=selecteur+1
				elseif pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y<=250 then y=y+10;selecteur=selecteur+1
				elseif pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y==260 then selecteur=selecteur+1;debut = debut + 1
			end
			if pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers<=27 then y=y-10;selecteur=selecteur-1
				elseif pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers>27 and y>=10 then y=y-10;selecteur=selecteur-1
				elseif pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers>27 and y==0 then selecteur=selecteur-1;debut = debut - 1
			end

			if pad:analogY() > 60 and selecteur ~= nombre_fichiers and nombre_fichiers<=27 then y=y+10;selecteur=selecteur+1
				elseif pad:analogY() > 60 and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y<=250 then y=y+10;selecteur=selecteur+1
				elseif pad:analogY() > 60 and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y==260 then selecteur=selecteur+1;debut = debut + 1
			end
			if pad:analogY() < -60 and selecteur ~= 1 and nombre_fichiers<=27 then y=y-10;selecteur=selecteur-1
				elseif pad:analogY() < -60 and selecteur ~= 1 and nombre_fichiers>27 and y>=10 then y=y-10;selecteur=selecteur-1
				elseif pad:analogY() < -60 and selecteur ~= 1 and nombre_fichiers>27 and y==0 then selecteur=selecteur-1;debut = debut - 1
			end
		screen:blit(350,0,antidebordement)
		end

	if affichage==true then
	screen:clear()
	pad=Controls.read()
		if pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers<=27 then y=y+10;selecteur=selecteur+1;charger = true
			elseif pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y<=250 then y=y+10;selecteur=selecteur+1;charger = true
			elseif pad:down() and pad:down()~=oldpad:down() and selecteur ~= nombre_fichiers and nombre_fichiers>27 and y==260 then selecteur=selecteur+1;debut = debut + 1;charger = true
		end
		if pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers<=27 then y=y-10;selecteur=selecteur-1;charger = true
			elseif pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers>27 and y>=10 then y=y-10;selecteur=selecteur-1;charger = true
			elseif pad:up() and pad:up()~=oldpad:up() and selecteur ~= 1 and nombre_fichiers>27 and y==0 then selecteur=selecteur-1;debut = debut - 1;charger = true
		end

		if charger==true then
			longueur = string.len(fichiers[selecteur].name)
			nom = string.sub(fichiers[selecteur].name, longueur-3)
			if (nom==".png" or nom==".jpg" or nom==".PNG" or nom==".JPG") then
				img = fichiers[selecteur].name
				image = Image.load(repertoire..img)
				charger = false
				else charger = false
				end
			end
			screen:blit((480-image:width())/2,(272-image:height())/2,image)
			if pad:circle() then affichage = false end
	end

			if pad:cross() then
			longueur = string.len(fichiers[selecteur].name)
			nom = string.sub(fichiers[selecteur].name, longueur-3)
				if (nom==".png" or nom==".jpg" or nom==".PNG" or nom==".JPG") then
				img = fichiers[selecteur].name
				image_load = Image.load(repertoire..img)
				fond:blit(0,0,image_load)
				menu_graphisme=false
				fonction_charger_image=false
				break
				end
			end

		if pad:circle() then
		fonction_charger_image=false
		menu_graphisme=false
		break
		end

	screen.waitVblankStart()
	oldpad=pad
	screen.flip()
	end
end

function ChangeCouleur()
colonne_changecouleur = 0
ligne_changecouleur = 0
pixel_changecouleur = Image.createEmpty(4,4)
pixel_changecouleur:clear(couleur)
  while ligne_changecouleur < fond:height() do
    if colonne_changecouleur == fond:width() then
      colonne_changecouleur = 0
      ligne_changecouleur = ligne_changecouleur + 4
    end
    if ligne_changecouleur < fond:height() and colonne_changecouleur < fond:width() then 
      lecture = fond:pixel(colonne_changecouleur,ligne_changecouleur)
    end
    if lecture == memoire then
      fond:blit(colonne_changecouleur,ligne_changecouleur,pixel_changecouleur)
    end
    if colonne_changecouleur < fond:width() then
      colonne_changecouleur = colonne_changecouleur + 4
    end
  end
end

while true do

	while apparition_splash==true do
		System.setcpuspeed(333)
		screen:clear()
		screen:blit(0,ygenesis,genesis)
			if ygenesis~=0 then ygenesis = ygenesis - 2 end
			if ygenesis==0 then
				valeur = valeur + 1
			end
			if valeur>=100 then
				valeur = 0
				splashscreen = nil
				System.createDirectory("ms0:/picture/PsPixel v2.0")
				genesis = nil
				ygenesis = 272
				valeur = 0
				apparition_splash = false
				apparition_menu_langue = true
				break
			end
	screen.waitVblankStart()
	screen.flip()
	oldpad=pad
	end 

------MENU PSPIXEL v2.0 BY ALEXANDRE RIMBOT. PSPIXEL v2.0. 2011. FOR PSP GENESIS COMPETITION

	while apparition_menu_langue==true do
		screen:clear()
		pad=Controls.read()
		screen:blit(0,0,fond_menu_langue)
		screen:blit(135,y_menu_langue,mcurseur)

			if pad:up() and oldpad:up()~=pad:up() and y_menu_langue~=88 then
				y_menu_langue=y_menu_langue-34
			elseif pad:down() and oldpad:down()~=pad:down() and y_menu_langue~=156 then
				y_menu_langue=y_menu_langue+34
			end
			if y_menu_langue==88 and pad:cross() then
				application_francais = true
				apparition_splash = false
				application_anglais = false
				application_espagnole = false
				application = true
				fond_menu_langue = nil
				mcurseur = nil
				y_menu_langue = 88
				arriere = Image.load("images/arriere.png")
				page_menu = Image.load("images/start.png")
				fondsauvegarder = Image.load("images/fondsauvegarder.png")
				apparition_menu_langue = false
				break
			elseif y_menu_langue==122 and pad:cross() then
				application_anglais = true
				apparition_splash = false
				application_francais = false
				application_espagnole = false
				application = true
				fond_menu_langue=nil
				mcurseur=nil
				y_menu_langue = 88
				arriere = Image.load("images/arriereanglais.png")
				page_menu = Image.load("images/startanglais.png")
				fondsauvegarder = Image.load("images/fondsauvegarderanglais.png")
				apparition_menu_langue = false
				break
			elseif y_menu_langue==156 and pad:cross() then
				application_espagnole = true
				apparition_splash = false
				application_anglais = false
				application_francais = false
				application = true
				fond_menu_langue=nil
				mcurseur=nil
				y_menu_langue = 88
				arriere = Image.load("images/arriereespagnole.png")
				page_menu = Image.load("images/startespagnole.png")
				fondsauvegarder = Image.load("images/fondsauvegarderespagnole.png")
				apparition_menu_langue = false
				break
			end
	screen.waitVblankStart()
	screen.flip()
	oldpad=pad
	end
	
--FRENCH ENGLISH ESPANOL PSPIXEL v2.0 BY ALEXANDRE RIMBOT. PSPIXEL v2.0. 2011. FOR PSP GENESIS COMPETITION
	
	while application==true do
		screen:clear()
		pad = Controls.read()
		pixel_couleur = Image.createEmpty(largeur,hauteur)
		pixel_blanc = Image.createEmpty(largeur,hauteur)
		pixel_memoire = Image.createEmpty(largeur,hauteur)
		couleur = Color.new(r,v,b)
		pixel_couleur:clear(couleur)
		pixel_memoire:clear(memoire)
		couleur_prise:clear(couleur)
		couleur_memoire:clear(memoire)
		pixel_blanc:clear(blanc)
		screen:blit(0,0,arriere)
		screen:blit(153,8,fond)
		screen:blit(xcurseur,ycurseur,curseur)
		screen:print(61,10,r,rouge)
		screen:print(61,89,v,vert)
		screen:print(61,169,b,bleu)
		screen:blit(105,240,couleur_prise)
		screen:blit(105,253,couleur_memoire)
		screen:fillRect(9,19,(r/2),10,rouge)
		screen:fillRect(9,98,(v/2),10,vert)
		screen:fillRect(9,177,(b/2),10,bleu)
			if menu_graphisme==false then

				deplacements_palette()
				changer_couleur()
				taille()
				blitter()
				pipette()
    
				if pad:start() and oldpad:start()~=pad:start() then menu_graphisme=true end
			end
    
			if menu_graphisme==true then
				if sauvegarder==false then
					screen:blit((480-page_menu:width())/2,(272-page_menu:height())/2,page_menu)
					screen:blit(132,ycurseur_menu,curseur_menu)
					screen:blit(207,113,couleur_memoire)
					screen:blit(250,113,couleur_prise)
					deplacements_menu()
						if ycurseur_menu==45 and pad:cross() and oldpad:cross()~=pad:cross() then affiche_couleurs=true
							elseif ycurseur_menu==76 and pad:cross() and oldpad:cross()~=pad:cross() then memoire=couleur
							elseif ycurseur_menu==107 and pad:cross() and oldpad:cross()~=pad:cross() then ChangeCouleur()
							elseif ycurseur_menu==138 and pad:cross() and oldpad:cross()~=pad:cross() then sauvegarder=true
							elseif ycurseur_menu==169 and pad:cross() and oldpad:cross()~=pad:cross() then fonction_charger_image=true
							elseif ycurseur_menu==200 and pad:cross() and oldpad:cross()~=pad:cross() then System.Quit()
						end
		
						if fonction_charger_image==true then charger_image() end
        
						if affiche_couleurs==true then
							screen:blit(0,0,fiche_couleurs)
							if pad:circle() then affiche_couleurs = false end
						end
				end
	
		
				if sauvegarder==true then
					if pad:circle() then
						menu_graphisme = false
						sauvegarder = false
						fond2 = Image.load("images/fond.png")
						xcurseur_format = 244
						ycruseur_save = 48
						etape = 1
						nom_fichier_save = ""
						choix_image = 0
						ligne_remplace = 0
						colonne_remplace= 0
					end
					screen:blit(0,0,fondsauvegarder)
					screen:blit(13,ycurseur_save,curseur_save)
					screen:blit(xcurseur_format,41,curseur_choix)
					if application_francais == true then
					screen:print(15,150,"Si vous choisissez le format 1/1, vous devrez patienter",gris)
					screen:print(15,160,"une disaine de secondes, le temps que l'image diminue.",gris)
					screen:print(15,180,"Si vous choisissez le format 4/4, votre image sera",gris)
					screen:print(15,190,"identique a celle que vous avez cree.",gris)
					elseif application_anglais == true then
					screen:print(15,150,"If you select pixels 1/1, you have to wait 10 seconds",gris)
					screen:print(15,160,"while the picture get the good size.",gris)
					screen:print(15,180,"If you select pixels 4/4, your picture will be the same.",gris)
					elseif application_espagnole == true then
					screen:print(15,150,"Si seleccionas pixeles de 1/1, tendras que esperar 10",gris)
					screen:print(15,160,"segundos mientras la imagen adquiere el tamano.",gris)
					screen:print(15,180,"Si seleccionas pixeles de 4/4, la imagen seguira igual.",gris)
					end
					if etape==1 then
							if nom_fichier_save~="" then
							screen:print(100,20,nom_fichier_save..".png",gris)
							end
							if pad:up() and oldpad:up()~=pad:up() and ycurseur_save~= 8 then ycurseur_save = ycurseur_save - 40
							elseif pad:down() and oldpad:down()~=pad:down() and ycurseur_save~= 88 then ycurseur_save = ycurseur_save + 40
							end
	
							if ycurseur_save==8 and pad:cross() then nom_fichier_save = System.startOSK(nom_fichier_save,"") end
								if ycurseur_save==48 and pad:r() and xcurseur_format~=334 then xcurseur_format=xcurseur_format + 90
								elseif ycurseur_save==48 and pad:l() and xcurseur_format~=244 then xcurseur_format=xcurseur_format - 90
								end
							if xcurseur_format==244 then choix_image = 0
							elseif xcurseur_format==334 then choix_image = 1
							end
	
						if ycurseur_save==88 and pad:cross() and nom_fichier_save~="" and etape==1 then etape = 2 end
					end

					if etape==2 then
						if nom_fichier_save~="" and choix_image==0 then
							while ligne_remplace < fond:height()/2 do
								couleur_fond = fond:pixel(colonne_remplace,ligne_remplace)
								couleur_fond2 = fond:pixel(colonne_remplace,ligne_remplace+108)
								pixel_remplace = Image.createEmpty(1,1)
								pixel_remplace:clear(couleur_fond)
								pixel_remplace2 = Image.createEmpty(1,1)
								pixel_remplace2:clear(couleur_fond2)
								fond2:blit(colonne_remplace/4,ligne_remplace/4,pixel_remplace)
								fond2:blit(colonne_remplace/4,(ligne_remplace/4)+27,pixel_remplace2)
								colonne_remplace = colonne_remplace + 4
									if colonne_remplace == fond:width() then
										colonne_remplace = 0
										ligne_remplace = ligne_remplace + 4
									end
							end
									if ligne_remplace >= fond:height()/2 then
									fond2:save("ms0:/picture/PsPixel v2.0/"..nom_fichier_save..".png")
									fond2 = Image.load("images/fond.png")
									xcurseur_format = 244
									ycruseur_save = 48
									etape = 1
									nom_fichier_save = ""
									choix_image = 0
									ligne_remplace = 0
									colonne_remplace= 0
									sauvegarder = false
									menu_graphisme=false
									end
					end
					if nom_fichier_save~="" and choix_image == 1 then
						fond2 = Image.load("images/fond.png")
						fond:save("ms0:/picture/PsPixel v2.0/"..nom_fichier_save..".png")
						xcurseur_format = 244
						ycruseur_save = 48
						etape = 1
						nom_fichier_save = ""
						choix_image = 0
						ligne_remplace = 0
						colonne_remplace= 0
						sauvegarder = false
						menu_graphisme=false
					end
				end
			end
				if pad:circle() then menu_graphisme=false end
			end
	screen.waitVblankStart()
	screen.flip()
	oldpad=pad
	end

screen.waitVblankStart()
screen.flip()
oldpad=pad
end 