3.7.2013

Oma koodailuprojekti, osa VI

Toisesta suunnasta lähestyen

Aiemmin aloitin suoraan peliolioiden ja niiden kontrolloinnin parissa. Koetin jossain välissä tehdä välistä jäänyttä muuta osuutta, mutta jotenkin tuon .py-filun sörkkiminen ei oikein tuntunut hyvältä ratkaisulta. Olemassaoleva koodi oli kokonsa puolesta vähän ikävää käpälöitävää IDLEllä (enkä ole laiskana käyttänyt muuta), joten aloitin sivussa sivuprojektin sille kaikelle muulle. Myöhemmin voisin sitten yhdistää tekemäni viritelmät ja nauttia/kärsiä lopputuloksesta.

Tilasta toiseen

Päätin aloittaa määrittelemällä tekeleelleni muutaman eri tilan, jossa se voi olla. Näiden mukaan eventtien (tapahtumien) käpälöinti olisi jaoteltavissa aika siististi erikseen:
  • päävalikossa
  • kartassa
  • pelissä
  • taukotilassa (ihmisten kielellä ihan vaan pause)
Näin. Päävalikkoidea lienee peräisin jostain Apogeen tasohyppelypeleistä sun muista, tai niitä muistellessani minä tuota hahmottelin. Oleellista on, että pelin voi aloittaa ja siitä voidaan poistua - muut vaihtoehdot, kuten tallenna, lataa/jatka (riippuen siitä, onko mitään tallennusviritelmiä olemassa) ja asetukset voidaan toteuttaa sitten joskus mutta ruudulle ne voitaisiin silti syöstä.



Kun peli aloitetaan, pelimaailma alustetaan annettujen ja tässä vaiheessa täysin kovakoodattujen parametrien mukaisesti. Java-taustani voi vaikuttaa siihen, että olin alusta alkaen takomassa paisuvaa määrää luokkia ja perintää sinne tänne.

Maailmojen rakentaja

Mietiskelin, mitä kaikkea oleellista tähän voitaisiin tarvita. Game luonnollisesti sisältää ja pyörittää peliin itseensä yleisesti liittyviä asioita, kuten tilansa, asetuksensa ja erinäköisten näkymien renderöinnin. Gameen sisältyy sitä varten luotu World, pelimaailma, jossa taas pyöritellään Osapuolia (Faction), niiden asioita ja pelimaailman kokoa (testivaiheessa 3x3 -maailma). Maailma koostuu Sektoreista eli loppujen lopuksi niistä "tasoista", joissa pelaaja avaruuslaivallaan koheltaa. Sektorilla on tässä vaiheessa lähinnä koko (pelialueen x,y  -koko) ja omistaja (joko ei ketään tai jokin Osapuoli). Jatkossa sillä on lista romusta, jota se sisältää.

"Politiikka"

Osapuolilla taas on nykyhetkellä nimi, tunnusväri, rotu, politiikka ja nollasta useampaan laivastoa. Rotuoppina on hatusta vedetty humanoidi / insektoidi  / robotoidi tai sekalainen - en ollut kovinkaan innovatiivisella tuulella noita raapustaessani. Rotujen ainoa vaikutus tulee politiikan kautta, yleispoliittisia maailmankatsontoja on kolme: neutraali, ksenofobi ja aggressiivinen. Ideana on, että neutraaleja ei kiinnosta, mikä olet, ksenofobit suuttuvat oitis, jos olet erirotuinen ja viimeistä ryhmää ei sitäkään kiinnosta, kuka ja miksi olet, kunhan et ole kauaa.

Ehkä typeränä ideana raapustelin vielä osapuolien välisiä suhteita varten listan asetuksia. Liittolaiset, ystävällismieliset, neutraalit, epäystävälliset ja viholliset - siinä viisi tapaa, jolla kaksi eri osapuolta voivat toisiinsa suhtautua, jos suinkaan kykenevät.

Politiikan jatke

Kukkien jakaminen kanssaolioille ei varmaan kiinnosta ketään, joten sotaa tulee käymän. Sodankäyntiin mietin Laivastoja (Fleet) eri Osapuolille. Laivasto voisi koostua yhdestä tai useammasta emoaluksesta (Capital Ship), joilla voi tai ei voi olla uumenissaan hävittäjäkokoluokan (Fighter) aluksia sun muita rotteloita.
Testimielessä ajettava alustin rakentaa pelaajan kaveriksi muutaman Osapuolen, joista tasan yksi on nimetty: Subspace Pirates (rotu: sekalainen, politiikka: valitaan aina satunnaisesti) ja sillä on aloitussektorissa Laivasto "Hammer of the gods" kolmella aluksellaan ("Thunder", "Wind", "Rain"). Riemukasta. Loput nimet avain kaikelle ja kaikille on tarkoitus kaivaa jostain puppugeneraattorista, epämääräisellä lopputuloksella. Satunnaisuus on hieno asia ja tekee mm. testaamisesta huomattavasti mielenkiintoisempaa, kun kaikki ei tapahdu aina 1:1 samassa järjestykessä.
Laivastoille voi antaa kohdesektorin eli mikään niistä ei olisi sidottu tiettyyn sektoriin, vaan voisi siirtyä tarpeen vaatiessa kiusaamaan pelaajaa tai toista Osapuolta. Noin ainakin ideatasolla sen pitäisi toimia. Tekoälyttömyyden arpominen onkin sitten ihan oma lukunsa, joka pelottaa lievästi jo nyt.

Kartalla vai kujalla?

Pelin aloitettuaan ja maailman alustajaa ehkä odoteltuaan peluuttelija pääsee ihastelemaan karttanäkymää. Nollasektorissa näkyvä rastiympyrä osoittaa pelaajan purtilon suhteellisen paikan maailmassa. Samaa kuviota meinasin harkita käyttäväni minikartassa, jos sellainen tuntuu tulevaisuudessa tarpeelliselta.

3x3

5x5


Tässä vaiheessa, kun kartasta poistuu, ei olekaan sitten mitään tekemistä. Ruudulle jää tyhjä näkymä ja pois pääsee joko karttaan tai välimenuun (jatka/asetukset/poistu), jollaisen väkästelin kasaan tuossa pari päivää sitten. Niin ja k-näppäintä hivelemällä kuolee ja pääsee kuolemanäkymään, josta taas jatketaan päävalikkoon. Oleellista sekin.

Seuraavaksi varmaan koetan saada vanhat luokkani käyttöön ja toimintaa ruudulle. Yksi iso mietittävä asia on vielä tuo peliolion nopeus... haluanko pitää sen entisellään (x- ja y-nopeudet) vaiko nopeus ja kulma -arvot erillisinä muuttujina. Joka tapauksessa joudun sörkkimään asioita, eli ihan helpolla en pääsisi missään nimessä.

2 kommenttia:

  1. Onko universumi persistentti? Muinoin Eliteä ja nyttemmin Ooliteä hakatessani haaveilin, että oma rellestys vaikuttaisi aurinkokuntien tilaan. Rosmoilee agri-worldin ympärillä niin se luisuu anarkiaan, nitistää piraatit niin anarkomarkojen kotipesä rauhoittuu, diktatuureja uhkaa vallankumous kommunistiseksi tai demokraattiseksi, kolhoosia uhkaa aina vastavallankumous, ja kaikkeen tähän voisi vaikuttaa sillä, ketä kurmottaa tai mitä kieltotavaraa rahtaa jne.

    VastaaPoista
    Vastaukset
    1. Idiksenä oli, että kun pomppaat sektorista ulos, se jää siihen tilaansa. Mahdollisesti palatessasi mesta on sitten millainen on.
      Ehkä joku avaruuslaivasto voisi saada kohteekseen loikata ko. sektoriin katsomaan, kuka perkele on riekkunut ja sitten löytyä sieltä odottelemasta. Tai sitten ei.

      Poista