Offtopic (I/2011)

Muu yhteisön välinen keskustelu.
Locked
User avatar
CCE
Artist
Artist
Posts: 650
Joined: Mon Aug 27, 2007 9:53 pm

Re: Offtopic (I/2011)

Post by CCE »

legend wrote:Mitäs sanotte tästä http://www.youtube.com/watch?v=00gAbgBu8R4 . Tuleeko coolbasic 3d tukemaan tuota :D (Niille jotka ei klikkaa videota: Videossa kerrotaan uudesta tekniikasta, jossa polygoneja voi olla loputtomasti. Ja näyttetään demoa, jossa tekniikka on toiminnassa. Eli peleissä ei tule enään olemaan kulmikkaita palloja, eikä neljömäisiä henkilöitä.)
Kyllä. Jos katsoit videon kokonaan kuulit kuinka suurieleinen esittelijä mainitsi sen pyörivän kokonaan prosessorilla ilman 3d laitteistokiihdytystä. Itseasiassa se olisi mahdollinen jo nykyisellä CoolBasicilla, ei tosin realiajassa. Käsittääkseni tuossa käytetään joko raytracettua (yksinkertainen raytracer CoolBasicilla tehtynä) vokselikarttaa, tai splatting algoritmia point cloud datan kanssa, jotka molemmat ovat toteutettavissa ilman laitteistokiihdytystä.

Edit: Niin tosiaan tarkkojen kenttien tallentaminen veisi valtavat määrät muistia, mutta videossa esitelty ilmeisesti kolmiulotteisista tileistä kasattu kenttä on täysin mahdollinen.
Last edited by CCE on Mon Aug 08, 2011 11:43 pm, edited 1 time in total.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2011)

Post by esa94 »

CCE wrote:
legend wrote:Mitäs sanotte tästä http://www.youtube.com/watch?v=00gAbgBu8R4 . Tuleeko coolbasic 3d tukemaan tuota :D (Niille jotka ei klikkaa videota: Videossa kerrotaan uudesta tekniikasta, jossa polygoneja voi olla loputtomasti. Ja näyttetään demoa, jossa tekniikka on toiminnassa. Eli peleissä ei tule enään olemaan kulmikkaita palloja, eikä neljömäisiä henkilöitä.)
Kyllä. Jos katsoit videon kokonaan kuulit kuinka suurieleinen esittelijä mainitsi sen pyörivän kokonaan prosessorilla ilman 3d laitteistokiihdytystä. Itseasiassa se olisi mahdollinen jo nykyisellä CoolBasicilla, ei tosin realiajassa. Käsittääkseni tuossa käytetään joko raytracettua (yksinkertainen raytracer CoolBasicilla tehtynä) vokselikarttaa, tai splatting algoritmia point cloud datan kanssa, jotka molemmat ovat toteutettavissa ilman laitteistokiihdytystä.
Heijastava vesi vaikuttaisi raytracingilta.


Tai huijaukselta.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Offtopic (I/2011)

Post by axu »

Myös animaatioiden kanssa voisi tulla ongelmaa... Ainakin oma käsitykseni on, että vokselit taittuvat paljon kehnommin kuin polygonit animointiin. Myös miguelcepero puhuu tämän tekniikan heikkouksista tässä.

Itse voisin ajatella, että jonkinsortin sekatekniikka voisi toimia: Pelin hahmot ja maasto rakennetaan polygoneista, ja toistuvat objektit kuten kasvisto ja arkkitehtuurin osat vokseleista.
Last edited by axu on Tue Aug 09, 2011 2:57 pm, edited 1 time in total.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2011)

Post by esa94 »

axu wrote:Myös animaatioiden kanssa voisi tulla ongelmaa... Ainakin oma käsitykseni on, että vokselit taittuvat paljon kehnommin kuin polygonit animointiin. Myös miguelcepero puhuu tämän tekniikan heikkouksisä tässä.

Itse voisin ajatella, että jonkinsortin sekatekniikka voisi toimia: Pelin hahmot ja maasto rakennetaan polygoneista, ja toistuvat objektit kuten kasvisto ja arkkitehtuurin osat vokseleista.
Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Offtopic (I/2011)

Post by axu »

esa94 wrote:Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.
Kaiken maaston tallentaminen vie paljon tilaa, ja sen vuoksi ajattelin vain ne kohteet, jotka toistuu maastossa (yksityiskohdat) vokselidatana.
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2011)

Post by esa94 »

axu wrote:
esa94 wrote:Ei kun maasto ja muu staattinen vekseleistä ja dynaamiset osat polyista.
Kaiken maaston tallentaminen vie paljon tilaa, ja sen vuoksi ajattelin vain ne kohteet, jotka toistuu maastossa (yksityiskohdat) vokselidatana.
Vähintään maaston pintakerros pitää joka tapauksessa tallentaa vekselidatana ja silloinhan sillä ei ole mitään väliä.
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: Offtopic (I/2011)

Post by MaGetzUb »

Mitä jos aina tarvittavat osat, joita piirretään konvertataan muistiin ladatusta 3D objektista vekseleiksi?
EDIT:

Hidastahan se voi olla, riippuu toteutuksesta. :)

Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2011)

Post by esa94 »

MaGetzUb wrote:Mitä jos aina tarvittavat osat, joita piirretään konvertataan muistiin ladatusta 3D objektista vekseleiksi?
EDIT:

Hidastahan se voi olla, riippuu toteutuksesta. :)

Wat

Instantiointi on kyllä keksitty elikkä voi tehdä vaikka kuutiometrin kokoisen palikan vekseleitä, panna sen muistiin ja sitten tiputella niitä sata miljoonaa vierekkäin.
atomimalli
Moderator
Moderator
Posts: 227
Joined: Wed Aug 29, 2007 3:55 pm

Re: Offtopic (I/2011)

Post by atomimalli »

Ikävä fakta on ettei vokseleilla saa paremman näköistä jälkeä kuin polygoneillakaan, ei parempaa fysiikkaa, eikä parempaa suorituskykyä.

Lupauksieen täyttämiseen tarvittavan muistin määrä saavutetaan vasta parissa kymmenessä vuodessa, eikä nykyresoluutio riitä tyydyttävään simulaatioon. Realistinen simulaatio oikeassa mittakaavassa vedellä nykyisin hiukan kättä suuremman alueen ja siinäkin huijataan vähäsen. Vokseleilla joutuisi menemään vielä paljon pienempään mittakaavaan jotta vesi käyttäytyisi oikein. Vielä ainakin kymmenen vuotta kannattaa ennemmin huijata kuin käyttää "atomeita", eivätkä vokselit edes ole atomeita. Ne ovat jumittuneet ruudukkoon. Niillä ei ole vapaata liikkuvuutta.

Henkilökohtaisesti kyllä pidän vokselimaastosta ja minua kiehtoo ajatus atomipohjaisesta virtuaalimaailmasta mutta toistaiseksi niistä ei ole nykyaikaisiin peleihin.

Vokseleilla on kyllä sovellusta nykyaikaisessa grafiikassa, kuten tämä esimerkki näyttää http://artis.imag.fr/Publications/2011/CNSGE11a/, mutta siinäkin vokseleille on käyttöä vain epäsuorasti ja ne generoidaan polygonien pohjalta.

Minecraft on hyvä esimerkki vokselien raskaudesta. Serveri huutaa tuskissaan kun pelaajia on yli kymmenen ja muistinkäyttö ja nettiliikenne jokaista muutosta kohden on valtava. Yhtään pienempiä vokseleilla ei voi kuvitellakaan dynaamista pelaamista netissä.

Atomontage enginestä ei ole taidetukaan vielä puhua. Se on ihan kiva, se jopa käyttää näytönohjainta hyväksi ja näyttää edistyneempää valaistusta kuin unlimited detail ja sillä on näyttää pelinkaltaisia esimerkkejä. Se ei markkinoi yhtä aggressiivisesti ja harhaanjohtavasti vaan näyttää tuloksia ja kertoo että missä on parannettavaa.

Sitten pitää vielä esitellä parempi välivaihtoehto, dynaamiset partikkelit tai mitä lienevätkään.
Niitä ei tarvitse olla yhtä paljon kuin vokseleita, eivätkä ne ole rajoittuneita ruudukkoon. Niillä onnistuu kangassimulaatio, esineiden repiminen, hajoittaminen luonnollisesti, nesteet...
Niitä käytetään jo nyt ja ne kehittyvät koko aika pienempään mittakaavaan ja niiden määrää voidaan säädellä tarpeen mukaan, toisinkuin vokselien, joiden on oltava ruudukossa.

Vokselit joutuvat vieläpä säilömään paljon ylimäärästä dataa, jos niillä halutaan jotain nykyaikaisia shadereita, fysiikoita tai jotain muita vuorovaikutuksia. Se työntää ne entistä kauemmaksi tulevaisuuteen.

Minusta vokseligrafiikka on okei, sillä pystyy kivasti ja suht halvasti esittää yleistä maastoa ja sitä sillä on tehty jo kymmeniä vuosia, mutta sitä ei ole okei väittää paremmaksi seuraavilla osa-alueilla: tarkkuus, fysiikat, animaatio, fotorealistisuus, käytännöllisyys.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Offtopic (I/2011)

Post by axu »

Jee Trackmania 2:n julkinen beta tulee vajaan viikon päästä! Kuinka moni aikoo ostaa?
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
Wingman
Devoted Member
Posts: 594
Joined: Tue Sep 30, 2008 4:30 pm
Location: Ruudun toisella puolella

Re: Offtopic (I/2011)

Post by Wingman »

axu wrote:Jee Trackmania 2:n julkinen beta tulee vajaan viikon päästä! Kuinka moni aikoo ostaa?
Riippuu vähän rahatilanteesta, ainakin aion ostaa ;)
- - - -
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Offtopic (I/2011)

Post by legend »

Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
MrMonday
Advanced Member
Posts: 378
Joined: Fri Oct 10, 2008 2:35 pm

Re: Offtopic (I/2011)

Post by MrMonday »

legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
Eikö tuo funktio olisi kohtalaisen helppo tehdä itsekkin, kun cb:n PlaySound-komennossa voi määrittää äänen sijainnin suoraan..
EDIT:

Siis tarkoitan, että jos haluaa äänen sijainnin vaikka johonkin objektiin, niin vääntää nuo arvot (-100 vasen kaijutin, 100 oikea kaiutin) ruudun leveyteen ja siitä laskisi objektin sijainnin, elis siis jos ikkunan koko esim. 800*600, niin tuo leveys jaettaisiin kahdella sadalla (800/200)=4, eli kun objekti liikkuu neljä oikealle niin äänen sijaintia muutettaisiin yhden pykälän oikeaan kaiuttimeen päin, jolloin ääni siirtyisi objektin mukana.. Ja tuo siis toimisi varmaankin SetSound-komennolla.. En tiedä ymmärsitkö tai oliko tämä yhtään sitä mitä hait, mutta toivottavasti oli jotain apua :D

Last edited by MrMonday on Sun Aug 14, 2011 1:29 pm, edited 1 time in total.
User avatar
axu
Devoted Member
Posts: 854
Joined: Tue Sep 18, 2007 6:50 pm

Re: Offtopic (I/2011)

Post by axu »

legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
En kyllä näe miten tuo olisi 3D-ääntä... Sehän on 1d sound :D Kuitenkin, eikös setsoundissa saa asetettua äänen sijainnin oikealle tai vasemmalle. Seuraavalla periaatteella saa äänen sijoitettua maailmakoordinaattehin:

Code: Select all

Const F_Balance = 90   //Määrittää, kuinka nopeasti ääni siirtyy
Const F_Volume = 0.3    //Määrittää, kuinka nopeasti ääni hiljenee
Function Sound1D(sound, x#, y#)
    Dist# = Distance(CameraX(), CameraY(), x, y)
    x = x - CameraX()
    x = x / ScreenWidth() * Balance
    
    PlaySound(sound, Min(100, Max(0, 100 - Dist * F_Volume)), Min(100, Max(-100, x)))
End Function
Tässä tosiaan on vain periaate, ja tasapaino on säätämättä (en testannut ollenkaan toimivuutta). Bonuksena myös ääni hiljenee kauettaessa kamerasta!
Jos tämä viesti on kirjoitettu alle 5 min. sitten, päivitä sivu. Se on saattanut jo muuttua :roll:
Image
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Offtopic (I/2011)

Post by valscion »

NetMatchissa moinen toteutetaan Sound.cb-tiedostossa tällaisessa funktiossa:

Code: Select all

//================================================================================
// Äänen soittaminen
//================================================================================
Function PlayGameSound(_sound, _x, _y)
    // Ääntä ei ole olemassa
    If _sound = 0 Then Return 0
    snd = gSounds(_sound)
    
    // Äänenvoimakkuus riippuu etäisyydestä
    volume# = (100 - Max(0, Distance(_x, _y, CameraX(), CameraY()) / 20)) / 100.0 * Float(gFXVolume)
    Return PlaySound(snd, volume)
EndFunction
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: Offtopic (I/2011)

Post by esa94 »

axu wrote:En kyllä näe miten tuo olisi 3D-ääntä... Sehän on 1d sound :D
Äänellä ei ole ulottuvuuksia. Kysehän on tietysti siitä että kanavien voimakkuutta säädetään sen perusteella missä äänilähde sijaitsee pelaajaan verrattuna, mikä aiheuttaa illuusion siitä että ääni todellakin lähtisi äänilähteestä.
User avatar
MetalRain
Active Member
Posts: 188
Joined: Sun Mar 21, 2010 11:17 am
Location: Espoo

Re: Offtopic (I/2011)

Post by MetalRain »

legend wrote:Joskus satuin näkemään cbkk 3d sound function. Se osasi soittaa äänen oikealta, jos ääni oli sijoitettu oikealle. Niin voisiko joku uppia sen tänne. Ymmärsikö kukaan?
Teinpä tälläisen äänen suunnan ja etäisyyden huomioon ottavan systeemin. Doppler-ilmiö vielä saattaisi jossain tilanteissa olla
hyödyllinen, mutta äänitiedostojen taajuuksien arvaaminen voi olla hieman hankalaa.

Code: Select all

SCREEN 1024,768

Type Sound2D
    Field file As String
    Field source As Integer 
    Field sound As Integer 
    Field x As Float
    Field y As Float
    Field vol As Integer 
    Field freq As Integer 
    Field cont As integer 
    Field isPlaying
    Field isLoad 
    Field static 
End Type 

//etäisyyden merkitys yksikköä kohden
// esim jos etäisyys on 100 vaikuttaa se 100*0.3 = 30 yksikköä voimakkuuteen
Const DistanceModifier = 0.3

//kuinka paljon voimakkuuteen etäisyydellä on merkitystä maksimissaan
Const DistanceModifierAmount = 100.0

//kuinka paljon voimakkuuteen kulmalla on merkitystä maksimissaan
Const ListeningAngleModifierAmount = 40.0

//kuuntelupisteen arvot
Global ListeningPointX, ListeningPointY, ListeningAngle, ListenInWorldCoordinates


b = LoadSound("Media\SK_Battle2.mp3")

s = PlayLoadedSound2D(b)

DrawToWorld ON 

ShowMouse OFF

Repeat

    //luodaan staattisia hetkellisiä ääniä
    If MouseHit(1) Then 
        PositionSound2D(PlaySound2D("Media\SK_Battle2.mp3",1,Rand(30,100)),MouseWX(),MouseWY())
    EndIf 
        
 
    a#=Timer()/30.0
    sx# = Cos(a#)*100
    sy# = Sin(a#)*100
    
    PositionSound2D(s, sx, sy)
    
    
    For ss.sound2D = Each sound2D
    
        If ss\static Then Color 0,255,0 Else Color 255,0,0
    
        If ss\isPlaying Then  
            DrawSound(ConvertToInteger(ss))
        EndIf 
    Next ss
    
    Color cbwhite

    lx = MouseWX()
    ly = MouseWY()
    
    Circle lx-2, ly+2,5,1
    Line lx+Cos(la+45)*20, ly+Sin(la+45)*20, lx, ly
    Line lx+Cos(la-45)*20, ly+Sin(la-45)*20, lx, ly

    la = la + MouseMoveZ()*10
    
    ListenIn(lx,ly,la)
    
    
    DrawScreen 

Forever 

//piirtää ääniaaltoja
Function DrawSound(sound,border#=60)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        If s <> NULL Then 
            
            a#=Timer()/15.0
        
            r = GetRGB(RED)
            g = GetRGB(GREEN)
            b = GetRGB(BLUE)
            
            size# = DistanceModifierAmount*(1.0/DistanceModifier)
            
            amount = size#/border#
            
            For i=0 To amount-1
                rad = Int(a#+i*border#) Mod Int(size#)
                
                m# = 1.0-(Float(rad)/size#)
                
                Color r*m#,g*m#,b*m#
                
               // If ListenInWorldCoordinates Then 
                    Circle s\x-rad, s\y+rad,rad*2,0
               // Else 
               //     Circle s\x-rad, s\y-rad,rad*2,0
               // EndIf 
            Next i
            
        EndIf 
            
    EndIf 

End Function 

//kertasoitto tiedostosta
Function PlaySound2D(source$, static = 0, vol=100,freq=-1)

    s.Sound2D = New (Sound2D)
    s\vol = vol
    s\freq = freq
    s\cont = 0
    s\static = static
    s\isload = False 
    s\sound = PlaySound (source$, s\vol)
    s\isPlaying = True

    Return ConvertToInteger(s)
End Function 

//alkaa soittamaan muistiin ladattua ääntä, voi myös toistaa
Function PlayLoadedSound2D(source, static = 0, vol=100,cont=1,freq=-1)

    s.Sound2D = New (Sound2D)
    
    s\source = source
    s\vol = vol
    s\freq = freq
    s\cont = cont
    s\static = static
    s\isload = True 
    s\isPlaying = True 
    s\sound = PlaySound (s\source, s\vol)
    
    Return ConvertToInteger(s)
End Function 

//asettaa kuuntelupisteen ja päivittää staattiset äänet
Function ListenIn(x#=0.0,y#=0.0,ang#=0.0,worldCoordinates=1)
    ListeningPointX = x#
    ListeningPointY = y#
    ListeningAngle = ang#
    ListenInWorldCoordinates = worldCoordinates
    
    For s.sound2D = Each sound2D
        If s\static = 1 And s\isPlaying Then  
    
            UpdateSound2D(ConvertToInteger(s))
    
        EndIf 
    Next s
    
End Function 


// asettaa äänilähteen paikoilleen ja päivittää
// soivan äänen
Function PositionSound2D(sound, x#, y#)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        
        s\x=x#
        s\y=y#
        
        If s\static = 0 Then UpdateSound2D(ConvertToInteger(s))

    EndIf 
End Function 

//päivittää soivan äänen
Function UpdateSound2D(sound)
    If sound <> 0 Then 
        s.Sound2D = ConvertToType(sound)
        
        If SoundPlaying(s\sound) = 0 Then 
        
            If s\cont = 1 And s\isLoad And s\isPlaying Then 
                s\sound = PlaySound (s\source, s\vol)
            Else 
                Delete s
            EndIf 
        EndIf 
        
        If s <> NULL And s\isPlaying Then 
         
            x#=s\x
            y#=s\y
            
            ly# = ListeningPointY
            lx# = ListeningPointX
            
            If ListenInWorldCoordinates Then 
                y#=-y#
                ly#=-ListeningPointY
            EndIf 
            
            ang# = GetAngle(lx#,ly#,x#,y#)
            
            dis# = Distance(lx#,ly#,x#,y#)
            
            fVol# = Min(Cos(ang#-ListeningAngle)*ListeningAngleModifierAmount,0.0) +  s\vol - Min(dis#*DistanceModifier,DistanceModifierAmount)
            
            vol = Min(Max(fVol#,0),100)
            
            position = -Sin(float(ang#-ListeningAngle))*100.0
        
            If s\freq = -1 Then 
                SetSound s\sound, OFF, vol, position
            Else 
                SetSound s\sound, OFF, vol, position, s\freq
            EndIf 
        EndIf 
    EndIf 

End Function 
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: Offtopic (I/2011)

Post by legend »

Kiitos monista vastauksista :)
Nassi_Setä
Advanced Member
Posts: 281
Joined: Sat Jun 28, 2008 5:19 pm
Location: Hämeessä miä

Re: Offtopic (I/2011)

Post by Nassi_Setä »

Huoh on ensimmäinen kunnon lukio päivä saatettu loppuun. On aika uupunut olo ja oli vaan lyhyt päivä :D
Huomenna sitten on tavallinen päivä eli koulu alkaa klo. 8:05 ja loppuu 16:00
Olis pitänyt mennä amikseen metallille...
\../(-_-)\../ <---klick MyBrute Image
Jotain evilii on tekeillä....
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: Offtopic (I/2011)

Post by valscion »

Nassi_Setä wrote:Huoh on ensimmäinen kunnon lukio päivä saatettu loppuun. On aika uupunut olo ja oli vaan lyhyt päivä :D
Huomenna sitten on tavallinen päivä eli koulu alkaa klo. 8:05 ja loppuu 16:00
Olis pitänyt mennä amikseen metallille...
Kyllä se lukion arki sitten alkaa jossain vaiheessa rullaamaan ;) loppua kohti helpponee. Itselläni oli tänään eka sivarityöpäivä, klo 8.15 - 16:15 ja matkoihin se 45min vielä molempiin suuntiin. Lukioaikana sentään riitti kun heräsi seitsemän aikoihin, nyt piti herätä jo sitäkin aikasemmin niin nyt vähä väsyttääpi.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Locked