Pakettiin lisätty ikkunoitu exe
The Matrix CodeFall
The Matrix CodeFall
Koodasin pääpunaisena ja sormet blurrautuen The Matrix Codefall:n löydettynäni tämän kuvan, josta poistin .jpg:n glitchit. Syystä tai toisesta en anna teille efektin lähdekoodia. Nauttikaa koodi putouksesta!
EDIT:
- Attachments
-
- the_MatrixCodeFall.zip
- (1.17 MiB) Downloaded 416 times
Last edited by JATothrim on Fri Mar 05, 2010 2:09 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...
Re: The Matrix CodeFall
Unable to set...
Näyttöni koko on 1980 x 1080.
Näyttöni koko on 1980 x 1080.
Re: The Matrix CodeFall
Laitoin tuon näytön säästäjäksi ja kun näytönsäästäjä aktivoitui niiin tuli MAV.
Mutta ihan hieno. voisi olla parempi että kaikki numerot liikkuisi yhtä nopeaa.
Mutta ihan hieno. voisi olla parempi että kaikki numerot liikkuisi yhtä nopeaa.
Sumu Games: Sam, Ur eye!
Re: The Matrix CodeFall
KOOWEE, OIS HOMMIA! :DJATothrim wrote:Syystä tai toisesta en anna teille efektin lähdekoodia.
Noei. Mut tää matrixin koodiputous on aina hieno efekti. Gj.
Re: The Matrix CodeFall
Minulla sama reso ja toimi täydellisesti. Ja oli muuten hieno!legend wrote:Unable to set...
Näyttöni koko on 1980 x 1080.
Re: The Matrix CodeFall
ohjelma testaa GFXModeExists() funktiolla 2000x2000 (32bbp) resoon asti mitkä resot toimivat ja asettaa sitten suurimman reportoidun... Joten legendin probleeman taidan laittaa 800x600 32bpp:n ikkunoidun version.legend wrote:Unable to set...
Näyttöni koko on 1980 x 1080.
Näytönsäätäjää mietin, mutta säädin ohjelman vain puoliväliin näytönsäästäjäksi. Jos siis vaihdat .exe -> .scr en ota mitään vastuuta modauksestasi.
-On selkeästi impulsiivinen koodaaja joka...
Re: The Matrix CodeFall
Voi vitsi.. Tuli punainen laatikko jonka sisällä on vaaleansininen pienempi laatikko, jokta liikkuvat johonkin suuntaan, jossa lukee: "Sync out of range"
Edit: Reso: 1152*864
Edit: Reso: 1152*864
Re: The Matrix CodeFall
Wanha CB beta 10.4 on tunnetusti vakaa ja järkkymätön, kun Screen komennon kanssa pelleilään..
-On selkeästi impulsiivinen koodaaja joka...
Re: The Matrix CodeFall
Onhan tämä reilusti hienompi kuin oma, pari viikkoa sitten vääntämäni vastaava.
Re: The Matrix CodeFall
Effekti on todella hieno ja kaikkea muuta, mutta miksi se on Esimerkit ja tutoriaalit alueella jos se ei edes ole koodina katsottavana...?
-
- Tech Developer
- Posts: 545
- Joined: Sun Aug 26, 2007 2:43 pm
- Location: Liminka
Re: The Matrix CodeFall
Samaa pohdimme irkissä #toisaalla. Esimerkit ja tutoriaalit alueen kuvauskin sanoo "Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne." ja minun mielestäni koodittomasta efektistä ei ole kellekkään mitään hyötyä. IMO tämä kuuluisi projekteihin koska tämä näyttää lähinnä huonoa esimerkkiäKnoy wrote:Effekti on todella hieno ja kaikkea muuta, mutta miksi se on Esimerkit ja tutoriaalit alueella jos se ei edes ole koodina katsottavana...?
CoolBasic henkilökuntaa
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Kehittäjä
cbFUN Kello
cbSDL
Whale.dy.fi
<@cce> miltäs tuntuu olla suomen paras
Re: The Matrix CodeFall
Itsellesi on, niin kauan kun se on CB:llä tehty :<KilledWhale wrote:minun mielestäni koodittomasta efektistä ei ole kellekkään mitään hyötyä
Re: The Matrix CodeFall
:3 Ylläri. Koodi oli sen verta pikakirjoitettua, ettei minua huvittanut laitaa sitä mukaan pakettiin heti. Vaan suunnittelin koodin siistimistä + ohjelman toiminnan parantamista. Ja tuohon KW:n decompileriin pitää todellakin keksiä jokin vasta veto. :< Et voisi edes näyttää, millaista *shittiä* se sylkee ulos tuosta minun ohjelmastani. Ja tässäpä efektin pullasorsa, vain 265 riviä:
Code: Select all
Const img_char_w = 26
Const img_char_h = 21
Const img_chars = 55
Dim imgchartbl(48)
Type codefall
Field x#
Field y#
Field speed#
Field xoff#
Field memsize%
Field memque%
Field rpl_counter%
Field rpl_at%
Field rpl_turbulence%
Field rpl_maxjmp%
Field gen_counter%
Field gen_at%
Field gen_turbulence%
Field dmo_at%
EndType
Function DrawLetter(x%, y%, ind%, fade% = 0)
imgW% = ImageWidth(imgchartbl(0))
row% = ind / (imgW / img_char_w)
colum% = ind - row * (imgW / img_char_w)
If row >= 4 Then a = 1 'korjataan kuvan virhettä..
DrawImageBox imgchartbl(fade), x, y, colum*img_char_w, a + row*img_char_h, img_char_w, img_char_h
EndFunction
Color 0,255,0
Text ScreenWidth()/2 - TextWidth("Looking for best graphics mode..") /2, ScreenHeight()/2, "Looking for best graphics mode.."
DrawScreen
// Etsitään suurin (toivottavasti) tuettu grafiikka tila. Parametrilla /w Ohjelma käynnistyy
// 800x600 kokoisessa ikkunassa.
If Trim(CommandLine()) = "/w"
SCREEN 800,600
Else
modew = 0
modeh = 0
For y=0 To 2000 Step 2
For x=0 To 2000 Step 2
If GFXModeExists(x,y,32) Then
If modew < x Then modew = x
If modey < y Then modeh = y
EndIf
Next x
Next y
SCREEN modew,modeh,0,0
EndIf
Color 0,255,0
Text ScreenWidth()/2 - TextWidth("Loading awesome graphics..") /2, ScreenHeight()/2, "Loading awesome graphics.."
DrawScreen
// Ladataan kuva ja
m_imgchars% = LoadImage("matrix_code.png")
For i = 0 To 48
imgchartbl(i) = ImageBrightness(m_imgchars, -6*i + 30)
Next i
rndposwc% = ScreenWidth() / img_char_w
rndposhc% = ScreenHeight() / img_char_h
fall_gen_counter% = 0
fall_gen_at% = 400
m_x% = MouseX()
m_y% = MouseY()
Randomize Timer()
// Näytetään demo.
ApplyDemo()
Repeat
If fall_gen_counter > fall_gen_at
fall_gen_counter = 0
fall_gen_at = Rand(1, 4)
// generoidaan uusi koodipötkö:
nque.codefall = New(codefall)
nque\x = Rand(rndposwc) * img_char_w + Rand(-1,1) * (img_char_w/2)
nque\y = -img_char_h
// kaikki pötkön generoimis parametrit riippuvat sen nopeudesta..
nque\speed = Rand(1, img_char_h) + Rnd(-0.5, 1.0)
nque\xoff = (1 - 2*Rand(1)) * Rnd(nque\speed*3)
// Arvotaan pötkön pituus. (Min 2 merkkiä, koska muuten MemCopy ei toimi!)
quesize% = 2 + ((Rand(3, rndposhc) / nque\speed))
nque\memque = MakeMEMBlock(quesize)
nque\gen_at% = 1+(randposhc / quesize) + Int(img_char_h / nque\speed)
nque\gen_turbulence = Rand(1, nque\gen_at / 2) * (1 - 2*Rand(1))
// jos pötkö liikuu hitaasti tapahtuu siinä paljon "virheitä"
nque\rpl_maxjmp = Rand(0, quesize-1)
nque\rpl_turbulence = Rand(nque\rpl_maxjmp / 6)
nque\rpl_at = Int(nque\speed * 0.75)
EndIf
fall_gen_counter + 1
TheMatrixCodefall()
If KeyHit(cbkeyspace)
ApplyDemo()
fall_gen_at = 10
EndIf
If KeyDown(cbkeyf) Then Text 0,0,"FPS:"+FPS()
// Suljetaan ohjelma jos hiiri liikkuu tarpeeksi.
If Distance(MouseX(),MouseY(),m_x,m_y) > 10 Then End
DrawScreen
Forever
End
Function TheMatrixCodefall()
For cf.codefall = Each codefall
cf\y = cf\y + cf\speed
cf\gen_counter = cf\gen_counter + 1
cf\rpl_counter = cf\rpl_counter + 1
If cf\memsize = 0
PokeByte cf\memque, 0, Rand(img_chars)
cf\memsize = 1
EndIf
If cf\gen_counter > cf\gen_at + cf\gen_turbulence + cf\dmo_at
cf\dmo_at = 0
cf\gen_counter = 0
cf\gen_turbulence = Rand(1, cf\gen_at / 2) * (1 - 2*Rand(1))
// siirrä merkki pötköä muistipalassa..
If MEMBlockSize(cf\memque)-1 < cf\memsize Then cf\memsize = cf\memsize - 1
MemCopy cf\memque, 0, cf\memque, 1, cf\memsize
cf\memsize = cf\memsize + 1
// arvo keulaan uusi merkki
PokeByte cf\memque, 0, Rand(img_chars)
cf\y = cf\y + img_char_h / 2
EndIf
If cf\rpl_counter > cf\rpl_at + cf\dmo_at
// Koravataan jokin merkki, pötkön 'hännässä' on epätodennäköisepää
// että merkki korvautuu.
cf\rpl_counter = 0
pos% = cf\rpl_maxjmp
Repeat
If Rand(pos) = 0
PokeByte cf\memque, Int(Min(MEMBlockSize(cf\memque)-1, pos + Rand(cf\rpl_turbulence))), Rand(img_chars)
Exit
EndIf
pos = pos - 1
Until pos < 0
EndIf
// Piirretään koodipötkö.
For i = 0 To cf\memsize-1
y# = cf\y - i * img_char_h
If y < ScreenHeight()
x# = cf\x+(Float(cf\y)/Float(ScreenHeight()))*cf\xoff
fade% = Max(0, (i / Max(1, Float(cf\memsize-1))) * 48)
DrawLetter(x, y, PeekByte(cf\memque, i), fade)
EndIf
Next i
// jos koko pötkö tipahti ulos ruudusta, se poistetaan.
If (cf\y - cf\memsize * img_char_h) > ScreenHeight()
DeleteMEMBlock cf\memque
Delete cf
EndIf
Next cf
EndFunction
// CBSDK:n Vastaavan nimiminen, nopeampi funktio.
Function ImageBrightness(pic%, bright%)
iw = ImageWidth(pic)
ih = ImageHeight(pic)
modified = MakeImage(iw,ih)
MaskImage modified, Int(Max(0, bright)),int(Max(0, bright)),int(Max(0, bright))
Lock Image(pic)
Lock Image(modified)
For j = 0 To ih-1
For i = 0 To iw-1
pixel% = GetPixel2(i,j,Image(pic))
r = Max(Min((pixel Shl 8) Shr 24 + bright, 255),0)
g = Max(Min((pixel Shl 16) Shr 24 + bright, 255),0)
b = Max(Min((pixel Shl 24) Shr 24 + bright, 255),0)
PutPixel2 i,j,b + (g Shl 8) + (r Shl 16), Image(modified)
Next i
Next j
Unlock Image(modified)
Unlock Image(pic)
Return modified
EndFunction
Function ApplyDemo()
// Luodaan kuvan merkeistä nipin napin tunnistettava "The Matrix codefall"
// Merkit ON valittu luovasti vapaalla silmällä. ;)
q.codefall = NULL
// ensin 19 pötköä..
For i = 1 To 19
nque.codefall = New(codefall)
// Keskitetään merkit n. ruudun keskelle.
nque\x = ((ScreenWidth() / img_char_w)/2 - 9 + i) * img_char_w
nque\y = -img_char_h
nque\speed = 1
nque\xoff = (1 - 2*Rand(1)) * Rnd(nque\speed*2)
quesize% = 2 + ((Rand(3, rndposhc) / nque\speed))
nque\memque = MakeMEMBlock(quesize)
nque\gen_at% = 2+(randposhc / quesize) + Int(img_char_h / nque\speed)
nque\dmo_at% = 400 'demo jono ..
nque\gen_turbulence = Rand(1, nque\gen_at / 2) * (1 - 2*Rand(1))
nque\rpl_maxjmp = rand(0, quesize-1)
nque\rpl_turbulence = Rand(1, nque\rpl_maxjmp / 6)
nque\rpl_at = Int(nque\speed * 0.75)
// lisäämme jokaiseen ainakin yhden merkin!
nque\memsize = 1
If i = 1 Then q = nque
Next i
// kirjoitetaan viesti.. : P
PokeByte q\memque, 0, 13't
q = After(q)
PokeByte q\memque, 0, 49'h
q = After(q)
PokeByte q\memque, 0, 31'e
q = After(q)
PokeByte q\memque, 0, 19'space
q = After(q)
PokeByte q\memque, 0, 11'M
q = After(q)
PokeByte q\memque, 0, 20'a
q = After(q)
PokeByte q\memque, 0, 13't
q = After(q)
PokeByte q\memque, 0, 49'r
q = After(q)
PokeByte q\memque, 0, 16'i
q = After(q)
PokeByte q\memque, 0, 54'x
q = After(q)
PokeByte q\memque, 0, 19'space
q = After(q)
PokeByte q\memque, 0, 10'c
q = After(q)
PokeByte q\memque, 0, 8'o
q = After(q)
PokeByte q\memque, 0, 4'd
q = After(q)
PokeByte q\memque, 0, 31'e
q = After(q)
PokeByte q\memque, 0, 50'f
q = After(q)
PokeByte q\memque, 0, 20'a
q = After(q)
PokeByte q\memque, 0, 32'l
q = After(q)
PokeByte q\memque, 0, 32'l
EndFunction
-On selkeästi impulsiivinen koodaaja joka...
Re: The Matrix CodeFall
Tässä oma käsitykseni asiasta, Hutaisten Tehty Matrix-koodi. Pituutta tahi suorituskykyä en viitsinyt juuri optimoida, pahoittelen.
Code: Select all
Repeat
For i=0 To 1200 // 40*30
Color 0, (((i*10) (Timer()/1000) ) Mod 255), 0
if i< 1200 then Text (i*10) Mod 400, Int(i/40)*10, Chr( (i*1337+(Timer()/1000) Mod 94)+35 ) Else DrawScreen
Next i
Forever
-
- Moderator
- Posts: 1583
- Joined: Mon Aug 27, 2007 11:24 pm
- Location: Otaniemi - Mikkeli -pendelöinti
Re: The Matrix CodeFall
Rivien pituus vähän kasvaa mutta niiden määrä karsiutuu tuosta vielä ainakin kahdella.
EDIT: Lisättäköön vielä (ettei ihan offtopiciksi luisu :>) että Jaton efekti on varsin komea, muttei jotenkin tunnu samalta kuin elokuvien. Pitääpä joskus tutkia sitä oikein tarkasti ja jäljitellä.
Code: Select all
For i = 0 To i+1
If i = 0 then SCREEN 800, 600 Else Color 0, 255-15*(i Mod 16), 0
If i Mod 1280 Then Text (RoundDown(i/16.0) Mod 80)*10, (Sin(200*Float(((RoundDown(i/16.0) Mod 80)*887.0/619.0)-RoundDown(((RoundDown(i/16.0) Mod 80)*887.0/619.0))))*1800-10*(i Mod 16)+2*Max(0.2,Abs(Sin(2405*(((RoundDown(i/16.0) Mod 80)*887.0/619.0)-RoundDown((((RoundDown(i/16.0) Mod 80)*887.0/619.0)))))))(i/640.0)) Mod 610-10, Chr(int(79.5+46.5*Cos((RoundDown(i/16.0) Mod 80)*4647+(i/2560)-40((RoundDown(i/2560.0))-(i Mod 16) Mod 80)))) Else DrawScreen
Next i
Last edited by koodaaja on Sat Mar 06, 2010 9:39 pm, edited 1 time in total.
Re: The Matrix CodeFall
Löysin koneeltani tällasen umpi vanhan koodin:
Ei ole oma..
Code: Select all
SCREEN 1280,1024
//Rajoitetaan pyörimisnopeutta,ettei nykimistä tapahdu
//Tekstin putoamisnopeus ei ole suoraan verrannollinen tämän arvon kanssa
//VAKIOITA
Const ScrWidth=1024//Efektiruudun leveys
Const ScrHeight=1024//Efektiruudun korkeus
Const ScrPosX=100//Efektiruudun vasemman yläkulman x-koordinaatti
Const ScrPosY=100//Efektiruudun vasemman yläkulman y-koordinaatti
Const RowWidth=10//Tekstirivin leveys
Const CharHeight=14//Kirjaimen korkeus
Const UpdSpeed=33//Monenko millisekunnin välein tekstiriviä siirretään alas pykälällä
Const DropProb1=0.02////Millä todennäköisyydellä tekstirivi pudotetaan,JOS KAKSI VIEREISTÄ RIVIÄ KUMMALLAKAAN PUOLELLAA EIVÄT TIPU
Const DropProb2=0.01//Millä todennäköisyydellä tekstirivi pudotetaan,JOS VIEREISET RIVIT EIVÄT TIPU
Const DropProb3=0.005//Millä todennäköisyydellä tekstirivi pudotetaan,JOS VIEREINEN RIVI TIPPUU
//MUITA TARVITTAVIA MUUTTUJIA YMS.
Rows=RoundDown(ScrWidth/RowWidth)
CharsInRow=RoundDown(ScrHeight/CharHeight)
//Taulukko tekstirivien tietoja varten
Dim CharRow(Rows+1,3) As Integer
//Vakioita osoittimiksi taulukon sarakkeille
Const IsRowFalling=1//Tippuuko tekstirivi
Const RowFallPosition=2//Tekstirivin sijainti ruuudussa; YKSIKKÖ=CharsInRow*Pikseli
Const LastFallUpd=3//Koska tekstirivin putoaminen viimeksi päivitettiin
//Arvotaan tippuvat rivit, ettei alussa tule "tekstisumaa", joka näyttää huonolta
For i=1 To Rows
If Rand(1,8)=1 Then
CharRow(x,IsRowFalling)=True
EndIf
Next i
//Aputekstit oletuksellisesti päällä
InfoOn=True
//LUUPPI
Repeat
counter=Timer()
For x=1 To Rows
//Ettei lueta taulukon ulkopuolelta arpomisissa (MIKSI TAULUKON PARAMETRIKSI TÄYTYY ANTAA VAKIO TAI MUUTTUJA?!?!?!?!)
tmp1=Max(x-2,0)
tmp2=Min(x+2,Rows+1)
//Jos tekstirivi ei putoa
If CharRow(x,IsRowFalling)=False Then
//Sijainti ruudun yläreunassa
CharRow(x,RowFallPosition)=-1
//Jos kaksi viereistä riviä kummallakaan puolella ei putoa
If CharRow(x-1,IsRowFalling)=False And CharRow(x+1,IsRowFalling)=False And CharRow(tmp1,IsRowFalling)=False And CharRow(tmp2,IsRowFalling)=False Then
//Arvotaan pudotetaanko tekstirivi
If Rand(1,1/DropProb1)=1 Then
CharRow(x,IsRowFalling)=True
EndIf
//Jos viereiset rivit eivät putoa
ElseIf CharRow(x-1,IsRowFalling)=False And CharRow(x+1,IsRowFalling)=False Then
//Arvotaan pudotetaanko tekstirivi
If Rand(1,1/DropProb2)=1 Then
CharRow(x,IsRowFalling)=True
EndIf
//Jos viereiset rivit putoavat
Else
//Arvotaan pudotetaanko tekstirivi
If Rand(1,1/DropProb3)=1 Then
CharRow(x,IsRowFalling)=True
EndIf
EndIf
//Jos tekstirivi putoaa
ElseIf CharRow(x,IsRowFalling)=True Then
//Sijainnin päivitys ajan mukaan
If Timer()>CharRow(x,LastFallUpd)+UpdSpeed Then
//Siirretään
CharRow(x,RowFallPosition)=CharRow(x,RowFallPosition)+1
//Päivitetään viimeisimmän päivityksen tapahtumaajankohta biggrin.gif
CharRow(x,LastFallUpd)=Timer()
EndIf
//Jos koko jono on ulkona ruudusta, siirretään se ylös; kts. luupin alkupuoli
If CharRow(x,RowFallPosition)>2*CharsInRow Then
CharRow(x,IsRowFalling)=False
EndIf
EndIf
//Yksittäisten merkkien käsittely ylhäältä alas
//Jonon ylin merkki on siis järjestysluvultaan 1
For y=1 To CharsInRow
//Jos Tulostettava merkki on efektiruudun sisällä tulostetaan se
If CharRow(x,RowFallPosition)-(CharsInRow+1-y)>=0 And CharRow(x,RowFallPosition)-(CharsInRow+1-y)=<CharsInRow Then
//Merkin sijainti jonossa määrää merkin värin
Color 0,RoundDown(255/CharsInRow)*y,0
Text ScrPosX+x*RowWidth-RowWidth,ScrPosY+(CharRow(x,RowFallPosition)-(CharsInRow+1-y))*CharHeight,Chr(Rand(0,256))
EndIf
Next y
Next x
DrawScreen
Forever
Re: The Matrix CodeFall
phons, koodaaja: hienoja. Paitsi että fps ei ole lähellekään siedettavä, toisin kuin omassa efektissäni. Koodaajalle vinkki, mikäli aijot tehdä samankaltaisen, (kuvan merkeillä siis) niin kokeile käyttää jokaisen putoavaan koodipötköön vain _yhtä_ kuvaa. Tämän pitäisi parantaa suoritus kykyä varsin paljon. :> The Matrix Input ohjelma olisi myös siisti: näpytät asdf ja kirjaimet putoavat nätisti koodipötkön saattelemana keskelle ruutua. Vielä kun äänet saisi.
-On selkeästi impulsiivinen koodaaja joka...
-
- Moderator
- Posts: 227
- Joined: Wed Aug 29, 2007 3:55 pm
Re: The Matrix CodeFall
Minun versioni:
Tarkistin leffasta niin ne noudattavat ihan ruudukkoa
Code: Select all
For i=i To i+1
If i Mod (40*30) = 40*30-1 Then SetWindow "fps: "+FPS() Else Color 200-Max(0,Min(200,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*1500))),255-Max(0,Min(255,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*800))),200-Max(0,Min(200,Abs((((-(i Mod (40*30))/30.0/40-(Sin(i Mod 40*7)*Sin(i Mod 40*13)*Sin(i Mod 40*5)*8+2)^2+Timer()/1500.0)Mod 3) )*1500)))
If i Mod (40*30) = 40*30-1 Then DrawScreen Else Text i Mod 40*10,(i Mod (40*30))/40*10,Chr((i Mod (40*30)) Mod 93 +33)
Next i
- TheDuck
- Devoted Member
- Posts: 632
- Joined: Sun Aug 26, 2007 3:51 pm
- Location: C:\Program Files\Tuusula\
Re: The Matrix CodeFall
Voisin viimeisten viestien perusteella sanoa että JATohrim on failannut rivimäärien perusteella aika pahasti....
^^
Re: The Matrix CodeFall
Noup, en ole, sillä yksikään tähän ketjuun lähetetyistä vastineista ei ole vielä hyödyntänyt tuota kuvaa, joka on siis fonttina oikeassa matrixin efekteissä. Ja tuo oma tekeleeni on nimen omaan minun näkemys koodiputouksesta. Se on nätti ja hieman vauhdikaampi kuin leffassa.TheDuck wrote:Voisin viimeisten viestien perusteella sanoa että JATohrim on failannut rivimäärien perusteella aika pahasti....
Last edited by JATothrim on Sun Mar 07, 2010 2:31 pm, edited 1 time in total.
-On selkeästi impulsiivinen koodaaja joka...