31.1.2013

Pommiräkkejä

Tästähän jäi osia yli...

Viikon saavutukset ovat taas pienet mutta sitäkin valtavammat. Sotkin vähän lattioita, jotteivät ne näyttäisi ihan neitseellisen valkoisilta, mikä ei oikein sovi paskaiseen sotakoneeseen. Kohelsin vähän noiden ammustelineitten kanssa mutta siitä huolimatta päätin, etten lähde tunkemaan kaikkia 32 tuubia ohjeessa tarjottuun tapaan. Syy? Tekele näyttää vähän vähemmän lavastetulta, kun kaikki ei olekaan täynnä tai muuten tiptop-kunnossa.

Kikkakeppostelua

Muistelin jostain lukemistani, että teipinpätkistä saa käteviä syöksyvöitä piloteille. Sovelsin ideaa vähän omaan käyttööni sopivammaksi. Siispä saksin erilleen muutaman pätkän maskausteippiä ja viipaloin ne pituussuunnassa skaalaansopivampaan leveyteen (fiilispohjalta). Huitaisin ne jotenkin noiden putkien yli ja huljuttelin Devlan Mudilla vähän vähemmän räikeiksi. Ne ovat olevinaan kuormansidontaliinoja. Minkäänsorttisia lukkoja tai klipsuttimia en sentään keksinyt askarrella...




Ei se minusta ihan karmealta näytä.

23.1.2013

Takaisin maalien pariin

Törkeysjärjestys

Todellinen maailma on taas vaihteeksi hidastanut erinäköisten projektieni (3+) etenemistä ikävästi. Vaan minkäs teet, harrasteet eivät ole aina prioriteettijonossa ykkösenä. Otin silti itseäni jälleen niskasta kiinni kevyellä otteella ja roiskin valkoista sisämaalipintaa vaunun sisätiloihin. Lisäksi googlettelin vähän, josko sisätiloista olisi vaikka ihan värikuvia tarjolla niin, että saisin jotain ehkä oikeankin näköistä aikaan.


Huolellisen tutkimustyön tulos

Nuo radiolaitteet olisivat olevinaan vihreitä. Katsotaan, saisinko maalattua noita jo tänään illemmalla. Ehtiminen riippuu tapansa mukaan ympäröivästä maailmasta vaatimuksineen.

11.1.2013

Oma koodailuprojekti, osa V

Pikkumuutoksia sinne tänne

Saavutukseni näiden viikkojen aikana ovat aika vähäiset, kiitos vajaan kolmeviikkoisen loman ja kaiken muun pienen. Koetin vähän sörkkiä 'roidien törmäilyä siten, että massaerolla olisi vaikutusta - isompaan törmääminen vaikuttaa siihen isoon kiveen vähemmän kuin pieneen jne. Viilailuahan tuo vaatii, mutta on askel vähän normaalimpaan suuntaan. Nyt megamurkula ei lähde kiitämään tuhatta ja sataa kun pikkumurikka kolahtaa siihen. Ja jos oikein hassusti käy, se halkeaa kahteen suureen murikkaan.

Huvikseni kokeilin väkertää vaaleansinisen gridin taustalle. Ikäänkuin koko roska olisi tuherrettu ruutupaperille. Ehkei se toimi niin hyvin. Katsotaan nyt.
Raapusteluefektin tavoittelua


Sataa sataa ropisee...

Samoin pykäsin kevyen planeettaluokan. Ruudulla se on ympyrä ja taustalla sillä on myös nimi, massa, populaatio sun muuta epäoleellista. Kun kivet kopsahtelevat tonttiin, populaatio vähenee niin kauan kun sitä vielä on. Yllättävän hauskaa tuotakin oli testata :P
Candyland II


Paukkuraudat, kuolemansäteet ja n-vaiheiset raketit ovat tietysti vielä vain ideatasolla. Aloittelin tuossa ennen lomalle lähtöäni risteävien janojen tutkimista mutten päässyt puusta pitkään. Vielä.


Muu touhu

Ensi viikolla saattaisin ehkä ehtiä tuon tankinkin kimppuun, jos kaikki muu kiirus sallii. Sekin on ruvennut vähitellen taas kuumottelemaan, usean viikon tauon jälkeen.

2.1.2013

Oma koodailuprojekti, osa IV

Toiminnallisuutta mukaan

Sain ruudulla näkymään sitä ja tätä, mutta millään ei ollut mitään vaikutusta mihinkään. Tämä ei käynyt laatuun, joten seuraavat GameObjectiin lisättävät luokkamuuttujat olivat mm. hitpoints eli osumapisteet. Tungin minä sinne kaikkea muutakin hienoa, kivaa ja tulevaisuudessa oleellistakin, mutta ei niistä ole hirveästi iloa tässä vaiheessa. Kun kerran ollaan jonkunsorttisen Asteroids-viritelmän kanssa tekemisissä (en meinannut jäädä siihen, vaan lisätä jotain todella sekavaa mutta ainakin omasta mielestäni mielenkiintoista), törmäily on kai aika olennaista. Tätä raapustaessani olen tehnyt pohjaa pidemmälle kuin mistä nyt on kertoa.

Törmäilymietteitä

  • Murkulat voivat törmäillä pelaajan purtiloon ja päinvastoin
  • Murkulat voivat törmäillä toisiinsa
  • Nopeuseroilla pitäisi olla merkitystä törmäystilanteessa
  • Massaeroilla pitäisi olla merkitystä törmäystilanteessa
  • Törmäyskulmakaan ei ole yhdentekevä

Kaksivaiheinen törmäystestaus

Kun kullakin hetkellä listoilla voi olla aika hyvä määrä olioita, ei ole mitään tolkkua käydä kaikkien törmäyksiä läpi supertarkasti, vaan voidaan ensin käydä kaikki läpi ja katsoa edes summittaisesti, josko kolisee ja sitten, tarpeen vaatiessa, tarkemmin. Ykkösvaiheen toteutuksessa käyn kaikki 'roidit ja pelaajan aluksen läpi ja vertaan toisiinsa, josko niiden summittaiset pinta-alat risteävät. Tähän puuhaan pygamen rectangle.colliderect() riittää mukavasti:

def collides_with(self, other):
        collides = False
        if self and other:
            if self.get_rect().colliderect(other.get_rect()):
                collides = self.accurate_collision(other)
        return collides
 
def accurate_collision(self, other):
        return True


Jälkimmäinen metodi on luonnollisesti stubi, jonka toteutus tulee kohdille kun ehtii. Tämänhetkinen vain toteaa, että "näyttää siltä, että törmäävät ja se kelpaa minulle" ja sen jälkeen molemmille törmääville elementeille heitetään 2d6-vauriot, kunnes toinen tai molemmat tuhoutuvat. Koska murkuloita on neljää kokoluokkaa, isommat hajoavat n kappaleeksi pienempiä, jos sille päälle sattuvat.
Kyllästyin aika pian siihen, että alukseni hajosi aika ripeästi testailun tiimellyksessä, joten lisäsin mukaan automaattisen Megatron-huijauksen. Peli sanoo Afterdeath ja kaikki jatkuu pelaajan kannalta kuin mitään ei olisi tapahtunut.

Yhtenä aamuna juttelin tästä projektinkuvatuksesta yhden työkaverini kanssa (oli huomannut jotain mutinoitani g+:ssa). Muiden seassa esiin nousi kommentti antialiasoinnin puutteesta, olinko miettinyt käyttäväni sitä vai aioinko tehdä tarkoituksella sahalaitaista. Vastasin, että meinasin korjata tilanteen nätimmäksi kun saan oleellisemmat pulmat ratkottua. Siinä samalla katseltiin pikaisesti dokumentaatiota ja hops, jos vaihtaa drawpolygon-metodikutsun aalines-kutsuksi ja muistaa lisätä yhden True-parametrin, muuta ei tarvita. Kokeilin kurillani samana iltana ja näyttäähän se nätimmältä näin, vai mitä?
Antialiasoituna

Törmäyksen jälkeen

Koska olisi aika naurettavaa, että avaruuskivet poikkeuksetta jatkaisivat törmäämisensä jälkeen toistensa sisään syöksymistä, mietin, että seuraavaksi pitäisi toteuttaa deflect-metodi, joka laskisi jotenkin molemmille törmäyksen osapuolille uudet nopeusvektorit. Jos saisin aikaan jotain edes etäisesti biljardipöydän toimia jäljittelevän toteutuksen, olisin onnellinen. Kun tuon yhdistää kriittisiin osumiin (pieni ja nopea kivi voisi sopivasti osuessaan halkaista suunnattoman kiven kahtia), lopputulos voisi olla vänkä. Niin ja ne planeetat ja ties mitkä... ei tässä ole vielä mitään tehtynä!

"Sota. Sota ei koskaan muutu."

Kaikille tätä lässytystä jonkun aikaa seuranneelle lienee kai ihan päivänselvää, että kaiken muun omituisen lisäksi Star Wars ja Battletech ovat minulle isoja juttuja. Vallankin jälkimmäisestä olen miettinyt lähteväni rosmoamaan aseistukseen liittyvää kamaa. Pääideana on, että purkkiinsa saisi valikoida jonkun tai jokusen väkivallan välineen riippuen vähän aluksen sloteista. Ohjuksia/raketteja, kuolemansäteitä (pulssittaisina tai ei), automaattikanuunoita ja taivaansinisiä salamoita yskiviä partikkelikanuunoita. Muahaha! Ja jos kerran aseistusta voi muuttaa, miksei moottoriakin voisi vaihtaa?

Kunhan mietin, myöhemminhän se selviää, mitä hemmettiä oikein haluan.