Juu, tässä mietiskelin että kuinkahan ne ammattilaiset tekevät pelejä? Koodaavatko he kenties C++:alla vai onko kenties joku sitäkin edistyneempi kieli jota käytetään "kunnon peleissä" kuten GTA vice city tms. Tuntuu että olisi melko urakka koodata moinen peli C++:alla. Ja mahtaisi lähdekoodi pursuta ehtoja jos sitä pääsisi vilkaisemaan...
C++:aa käytetään, räiskintäpeleissä kuulemma yhä "vanhaa" C:tä. Quake 1 & 2 ja Doom löytyvät netistä GNU-lisenssin (GPL) alta VisualC-projektina. On se tosiaankin aika sekavaa.
Edit: Jotkut pienet osat tehdään jopa Assemblyllä jotta ne toimisivat mahdollisimman nopeasti.
En nyt ole perehtynyt asiaan, mutta voisin kuvitella, että laajoissa peleissä käytetään jonkinlaisia yksinkertaisia skriptikieliä, joiden avulla pelin varsinaiset tapahtumat määritellään. Pelin runko toteutetaan sitten vaikka C++:lla. Tosin GTA:n kaltaisen pelin ohjelmoiminen on hirveä urakka käytetystä kielestä riippumatta.
Onhan se urakka, mutta niitähän tehdään vuosia suurella porukalla.
Hieman aihetta sivuava keskustelu
Eiköhän se ole juuri tuo C/C++ millä useimmat kaupalliset pelit tehdään. Asmia kai käytetään niissä kohdissa, joista halutaan mahdollisimman nopeita. Veikkaisin samaten, että jonkinlainen skriptikieli isoissa peleissä luultavasti on, jolla voi käskyttää pelitapahtumia. Ainakin tällaisen käsityksen saa, kun tutkii esim. "The Mask of Eternityn" konsolia, jonka kautta pääsee esim. kirjoittamaan pelin huijauskoodeja. Ja nämä koodit näyttäisivät todellisuudessa olevan jonkinmoisia skriptikomentoja.
Tosin ensimmäinen Tetris tehtiin pascalilla, mutta eiköhän C:tä nykyään käytetä enemmän.
P.S. Latska90 on kuollut.
Varsinaista pelin toimintaahan ei voi tehdä skriptikielellä. Skripti / konsoli toimii vain perjaatteella "if (input = 'Liiku') then Liiku(loput_argumentit);". Itse peli todennäköisesti kutsuu funktiota "Liiku" suoraan sen sijaan, että kirjoittaisi omaan konsoliinsa komennon ja lukisi sen saman tien. (Moninpelit taas voivat lähettää hostin omat komennot itselleen, koska se on helpompaa toteuttaa.)
Skriptikielen hyöty on se, että pelin laajentaminen tulee helpommaksi. Sen lisäksi, että voi vain piirtää uuden tason peliin, voi myös luoda oman otuksen jolla on skriptikielellä tehty tekoäly. Myöskin isojen pelien tasojen suunnittelijat voivat tällöin tehdä työnsä erikseen koskematta varsinaiseen lähdekoodiin.
Niin, täytyyhän niiden skriptien totta kai olla koodattu jollain ohjelmointikielellä.
ttuoppi:Käy hakemassa vaikka jonkun Quaken source ja tutki sitä, siitä näät onko se sekavaa, ja tee vaikka MODi sen jälkeen;)
Vois ainakin olettaa että kätevintä olisi kirjoittaa ohjelma, joka sitten kirjoittaa koodin. Meinaan, että vaikka käytössä olisi 20 vuotta, niin se että "käsin" kirjoitettaisiin JOKAINEN merkki, kuulostaa todella tyhmältä.
Homma kuulostaa huomattavasti mielekkäämmältä, jos mietti, että ensin rakentaa tai muokkaa itselleen työkalun, joka sopivin atribuutein tekisi halutulla lailla toimivaa koodia.
Tokihan se on vain lisää koodia, jonkunhan ne työkalutkin on rakennettava, mutta suuressa projektissa hyöty on huomattava.
ESIM.
Jos on tarkoitus tehdä vaikka 60 erilaista/tasoista TÄ.
Kielistä C/C++ ja/tai niiden muunnokset ovat varmaan yleisimpiä niiden muokattavuuden vuoksi. Voihan toki olla että siellä DISEn kellareissa joku insinööripiiri junailee ihan uutta kieltä.
Eikös nuo ohjelmointifirmat, jotka tekevät pelejä monelle eri alustalle käytä juuri jonkinlaista "omaa" kieltä?? C++ pohjalla...
ja kääntävät sen sitten valitulle alustalle. esim PC tai XBOX.
Ei niitä kaikkia merkkejä "käsin" kirjoitetakkaan. Pelintekoa aloitettaessa "käsin" tehdään tekniikka pelimoottorille tai ne on ehkä ostettu valmiina. Kun runko on valmis tehdään yleensä erilaisia editoreita kuten kenttä/3d-malli/ym jotka sitten kirjoittavat koodin.. Niin ja onhan noita ohjelmia tai ohjelmointikieliä jotka "kirjoittavat koodia" valmiiksi kunten DarkBasic 3D-pelien tekoon, 3d laskukaavat ja muut valmiina, ei itse tarvitse keksiä moottoria(tuli taas mieleen toi DB ekana) =o Kait ne pro pelintekijät käyttää jotain samantapasta koodaajaa emt.
Siis: Itse pelin toiminta on kerta kaikkiaan pakko tehdä itse. Se tehdään yleensä C/C++:lla. Tuollaista ohjelmaa, joka tekee halutun koodin, ei ole oikein mahdollista tehdä (toisaiseksi). Se edellyttäisi, että ohjelma osaisi ohjelmoida ja ymmärtäisi, mitä siltä pyydetään. Ei ole mahdollista pyytää tietokoneelta funktiota, joka liikuttaa hahmoa, koska kone ei osaa ajatella. Lähimmäksi pääsee pelinteko-ohjelmilla, jotka nekin vain sijoittavat valmiisiin kaavoihin tietyt muuttujat. Tällöin lpullisesta koodista / toiminnasta tulee monin paikoin kömpelöä, kun funktiossa voi olla monta kertaa vaikkapa "+ 0" tai "* 1" jotta samalla systeemillä voi tehdä monenlaisia pelejä.
Ihan vain tiedoksi, että:
Kuten on jo mainittu, Quake 1 ja 2 sekä Doom ovat vapaassa levityksessä GPL:n alla, eli niitä saa muokata ja levittää. (siis niiden C-kieliset lähdekoodit)
BlueByten sivuilla Settlers IV:n FAQ:ssa lukee toiseksi viimeisessä kysymyksessä:
Settlers IV: FAQ kirjoitti:
Which programs/programming languages did you use in making the game?
We work with Visual Studio C/C++ and use Assembler for some smaller parts of the game.
Niille jotka eivät tiedä, Settlers IV on yksi laajimpia strategiapelejä.
Nuo prot:n mainitsemat editorit eivät kirjoita koodia, vaan luovat tiedostoja, joita peli osaa tulkita. Peli lukee tiedostosta mikä tile piiretään ja piirtää sen. Koodia ei kirjoita mikään, mitä voi käyttää vielä käännösvaiheen jälkeenkin. Tässä vaiheessa käytössä on jo skriptikieli.
Jos haluaa saada selville, millaisilla porukoilla pelejä tehdään, voi laskea nimet Credits-listasta. Alkuperäisessä Unrealissa oli kuusi ohjelmoijaa ja suunnilleen saman verran väkeä kussakin muussa osastossa.
Metabolix kirjoitti:
Nuo prot:n mainitsemat editorit eivät kirjoita koodia, vaan luovat tiedostoja, joita peli osaa tulkita. Peli lukee tiedostosta mikä tile piiretään ja piirtää sen. Koodia ei kirjoita mikään, mitä voi käyttää vielä käännösvaiheen jälkeenkin.
On se taas pilkunviilausta PRKL=)
prot kirjoitti:
On se taas pilkunviilausta PRKL=)
Ei ole minusta pilkunviilausta. Onhan se tiedostosta luettava skriptikielimuotoinen data ihan eri asia kuin ohjelmointikieli, joka käännetään konekieleksi.
Niin, varsinkin kun kaikki skriptikielen komennot on joka tapauksessa koodattu jo aiemmin, editorin tiedosto vain kertoo mitkä komennot ja missä järjestyksessä. Harvemmassa pelissä taitaa olla editoria, joka kääntäisi ja linkittäisi uudet tasot DLL-tiedostoiksi. Se olisikin muuten aika ovelaa :D
skriptaus-koodaus-ohjelmointi
Skriptauksesta(skriptikielimuotoisesta tai ohjelmointikielimuotoisesta) ja ohjelmoinnista puhuttaessa käytetään yleensä yhteistä nimitystä koodaus ilman sen kummempia erotteluja ja/tai selittelyjä(niin, ilman selittelyjä=D), ainakin täällä päin.
No OK, myönnetään kun sanoin "kirjoittavat koodia.." ehkä se saattaa kuulostaa vähän väärältä ilmaukselta tuohon..
Siis varmaan on tehty eka pohja vaikkapa c++ssalla ja sitten vaikka skripti esim. tekoälyn ja juonen käsittelyyn. vaikkapa:
laita_örkki_paikkaan_(x,y,z) kehitä_taitoja(miekkailu, +100)
Tajusitte mitä tarkoitan...
Joo, juuri tuohon tapaan. Tässä esimerkkiskriptikoodia yhdestä isosta pelistä:
CREATE_NEW_TOWN_FIELD(1, "2685.12,2004.93", 0, 0.000000) CREATE_NEW_TOWN_FIELD(1, "2685.10,2014.95", 0, 0.000000) CREATE_NEW_TOWN_FIELD(1, "2685.01,1985.06", 0, 0.000000) CREATE_ABODE(1, "2761.43,1980.72", "NORSE_ABODE_STORAGE_PIT", 4123, 1000, 10000, 10000) CREATE_ABODE(1, "2717.99,1935.90", "NORSE_ABODE_CRECHE", 2878, 1000, 0, 0) CREATE_ABODE(1, "2698.53,1935.83", "NORSE_ABODE_B", 0, 1000, 0, 0) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.53,1935.83", "NORSE_FORESTER", 33) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.43,1997.33", "NORSE_FORESTER", 5) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.64,1939.84", "NORSE_HOUSEWIFE", 30) CREATE_ABODE(1, "2674.51,1943.12", "NORSE_ABODE_C", 5756, 1000, 0, 0) CREATE_VILLAGER_POS("2678.47,1949.88", "2674.51,1943.12", "NORSE_FORESTER", 1) CREATE_VILLAGER_POS("2678.47,1949.88", "2674.51,1943.12", "NORSE_FORESTER", 1)
Tämä koodi ilmeisesti luo jonkinlaisen kentän, eli luo taloja, kyliä, ihmisiä jne.
hunajavohveli kirjoitti:
Joo, juuri tuohon tapaan. Tässä esimerkkiskriptikoodia yhdestä isosta pelistä:
CREATE_NEW_TOWN_FIELD(1, "2685.12,2004.93", 0, 0.000000) CREATE_NEW_TOWN_FIELD(1, "2685.10,2014.95", 0, 0.000000) CREATE_NEW_TOWN_FIELD(1, "2685.01,1985.06", 0, 0.000000) CREATE_ABODE(1, "2761.43,1980.72", "NORSE_ABODE_STORAGE_PIT", 4123, 1000, 10000, 10000) CREATE_ABODE(1, "2717.99,1935.90", "NORSE_ABODE_CRECHE", 2878, 1000, 0, 0) CREATE_ABODE(1, "2698.53,1935.83", "NORSE_ABODE_B", 0, 1000, 0, 0) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.53,1935.83", "NORSE_FORESTER", 33) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.43,1997.33", "NORSE_FORESTER", 5) CREATE_VILLAGER_POS("2698.64,1939.84", "2698.64,1939.84", "NORSE_HOUSEWIFE", 30) CREATE_ABODE(1, "2674.51,1943.12", "NORSE_ABODE_C", 5756, 1000, 0, 0) CREATE_VILLAGER_POS("2678.47,1949.88", "2674.51,1943.12", "NORSE_FORESTER", 1) CREATE_VILLAGER_POS("2678.47,1949.88", "2674.51,1943.12", "NORSE_FORESTER", 1)Tämä koodi ilmeisesti luo jonkinlaisen kentän, eli luo taloja, kyliä, ihmisiä jne.
Ettei peli vaan olisi MS Age of Mythology?
Ei vaan Black & White.
Jaa. aom:issa on villagerejä storagepittejä ja norse(norjalaiset) joten luulin niin.
Juu, en tiedä sitten mitä tuo norse tuossa tarkoittaa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.