Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Ammattilaiset

Sivun loppuun

ttuoppi [27.07.2004 14:39:27]

#

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...

Metabolix [27.07.2004 14:54:21]

#

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.

Antti Laaksonen [27.07.2004 15:09:43]

#

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.

Heikki [27.07.2004 15:18:14]

#

Onhan se urakka, mutta niitähän tehdään vuosia suurella porukalla.

Hieman aihetta sivuava keskustelu

hunajavohveli [27.07.2004 17:21:14]

#

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.

Latska [27.07.2004 20:49:23]

#

Tosin ensimmäinen Tetris tehtiin pascalilla, mutta eiköhän C:tä nykyään käytetä enemmän.

P.S. Latska90 on kuollut.

Metabolix [27.07.2004 21:33:02]

#

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.

hunajavohveli [28.07.2004 13:03:56]

#

Niin, täytyyhän niiden skriptien totta kai olla koodattu jollain ohjelmointikielellä.

prot [28.07.2004 19:01:38]

#

ttuoppi:Käy hakemassa vaikka jonkun Quaken source ja tutki sitä, siitä näät onko se sekavaa, ja tee vaikka MODi sen jälkeen;)

Lanttihame [29.07.2004 14:00:18]

#

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ä.

JoreSoft [29.07.2004 16:54:49]

#

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.

prot [29.07.2004 19:22:57]

#

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.

Metabolix [29.07.2004 22:36:07]

#

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ä:

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.

prot [29.07.2004 23:50:13]

#

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=)

hunajavohveli [30.07.2004 11:34:12]

#

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.

Metabolix [30.07.2004 11:38:45]

#

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

prot [30.07.2004 19:51:15]

#

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..

Meitsi [31.07.2004 21:48:36]

#

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...

hunajavohveli [31.07.2004 23:08:08]

#

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.

Meitsi [03.08.2004 18:13:53]

#

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?

hunajavohveli [03.08.2004 20:23:13]

#

Ei vaan Black & White.

Meitsi [03.08.2004 20:38:28]

#

Jaa. aom:issa on villagerejä storagepittejä ja norse(norjalaiset) joten luulin niin.

hunajavohveli [03.08.2004 21:24:13]

#

Juu, en tiedä sitten mitä tuo norse tuossa tarkoittaa.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta