Luku 11: Verkkopelit Resurssit Ennustaminen Huijaus Lähde: Smed, Hakonen
Verkkopelit Useat pelit mahdollistavat monen pelaajan yhtäaikaisen osallistumisen tietoverkon avulla Smed ja Hakonen jakavat verkkopelien kommunikaation kolmeen kerrokseen: fyysinen alusta looginen rakenne sovellustaso
Fyysinen alusta Fyysinen alusta asettaa rajat yhteyden suorituskyvylle kaistanleveys (bandwidth) latenssi solmujen prosessointiteho Siedettävä latenssi reaaliaikapelissä luokkaa 0,1 s - 1 s latenssin vaihtelu eli jitter myös haitallista
TCP ja UDP TCP yhteydellinen, varma, hidas UDP yhteydetön, epävarma, nopea Peleissä usein kovat reaaliaikaiset vaatimukset; jos tieto ei ole ajoissa perillä, se on turhaa TCP:n tarjoamat ominaisuudet mukavia, mutta ne ovat yleensä liian raskaita pelikäyttöön esim. paketin kadotessa seuraaviin ei pääse käsiksi ennen uudelleenlähetystä TCP ei siis sovellu hyvin reaaliaikaisiin peleihin
Looginen rakenne Loogisessa rakenteessa kaksi pääratkaisua: vertaisverkko (peer-to-peer) palvelin-asiakas (voi olla hierarkinen/monipalvelin) jostain syystä tätä kutsutaan joskus p2p:ksi jos palvelin on yksi pelaajien koneista Skaalautuvuus, kontrolli Datan hajautus eheys (consistency) vs vasteajat (responsiveness) Ratkaisut: keskitetty, kopioitu, hajautettu keskitetty eheä, hajautettu nopea
Sovellustaso Sovellus rakennetaan loogisen rakenteen päälle Skaalautuvuus: pelaajamäärän muutos Jatkuvuus (persistence): pelaajien liittyminen ja poistuminen lennossa Yhteistyö: pelaajien välinen interaktio, riippuu etäisyydestä
Resurssien rajat Resurssien riittävyys riippuu monesta tekijästä viestien määrä, kohteiden määrä, viestin koko, kiireellisyysvaatimukset, prosessointitarve Jos yksi vaatimus kiristyy, täytyy kompensoida löysentämällä muita yleensä kommunikaatio korvataan laskennalla Resurssivaatimukset, n pelaajaa, unicast: vertaisverkko O(n 2 ) palvelin-asiakas O(n)
Resurssien säästäminen Viestien pakkaaminen redundanssin poisto erotusten lähettäminen epäoleellisen jättäminen pois (mahd. häviöllinen) Viestien yhdistäminen (batching) säästää kaistaa (headerit) vaatii prosessointia ja vasteaika kasvaa yhdistetään esim. kaikki tiettyyn hetkeen mennessä lähetetyt tai aina n kpl peräkkäisiä
Ennustaminen Tilapäivityksiä voi lähettää harvemmin, jos käytetään ennustamista Lähetetään paikan p 0 lisäksi nopeus v 0 ja kiihtyvyys a 0 ajanhetkellä 0 Asiakas voi nyt laskea muiden sijainnin ajanhetkellä t: p t = p 0 + v 0 t + 0,5 a 0 t 2 Kiihtyvyyden käyttö sopii hyvin esim. autoihin, mutta ihmisten suhteen pelkkä nopeus riittää
Ennustaminen Asiakas voi myös laskea nopeuden ja kiihtyvyyden itse aiempien sijaintien perusteella Kiihtyvyys voidaan jättää dynaamisesti huomiotta silloin kun se vaihtelee kovasti Erityyppisille pelihahmoille voi olla eri algoritmi Palvelin voi laskea ennusteen samalla tavalla ja lähettää päivityksen kun virhe on liian suuri liian suuri voi riippua vapaana olevasta kaistasta
Konvergenssi Päivityspaketin saapuessa aiheutuu hyppäys ennustettu sijainti ja oikea poikkeavat toisistaan Ratkaisu: siirrytään uusimman informaation antamalle polulle vähitellen lineaarinen konvergenssi pehmeämpi liike: spliinit Voi silti aiheuttaa seinien läpäisyä ym.
Pelaajien eri ajat Viiveestä aiheutuu erittäin haastava ongelma pelaajien vuorovaikutukseen esim. viive 100 ms, A ampuu B:tä hyvin nopealla luodilla (jota ei edes piirretä) B on ehtinyt liikkua 100 ms ajan, joten B voi olla todellisuudessa jo vaikka seinän takana joko A:sta näyttää, että selvä osuma meni ohi, tai B:stä näyttää, että A onnistui ampumaan hänet seinän läpi ei ole olemassa täydellistä ratkaisua
Local perception filters Local perception filters mahdollistaa hitaan vuorovaikutuksen viiveen tapauksessa Temporal contour avaruuden kullekin pisteelle viivearvo t, pelaajan itsensä kohdalla t=0, muiden kohdalla t=viive esineestä piirretään t:n verran viivästetty sijainti esim. ammus aloittaa A:n näkökulmasta t=0:sta ja saavuttaa B:n kohdalla t=100ms, eli matka kestää 100 ms ylimääräistä B:n näkökulmasta 100 ms todellista vähemmän mitä jos ammuksen matka alle 100 ms? tässä jitter tuottaa suuria ongelmia
Samanaikainen simulaatio Pelin tapahtumat voidaan jakaa deterministisiin ja epädeterministisiin ihmispelaajien toimet epädeterministisiä pseudosatunnaislukujen avulla jopa kaikki muu determinististä Kaikki pelaajat voivat suorittaa saman simulaation, jolloin teoriassa voisi riittää välittää epädeterministiset tapahtumat käytännössä tarvitaan myös tarkistusdataa
Läheisyyssuodatus Usein olento on kiinnostunut vain sen lähellä tapahtuvista asioista tällöin vain pieni osa asioista tarvitsee lähettää sille Olennon ympärillä kiinnostava alue: aura vastaa esim. pelaajan näkemää aluetta Jos aurat leikkaavat, saavat toistensa viestit Voidaan jakaa vielä fokukseen ja nimbukseen fokus: mitä olento näkee nimbus: millä alueella olento tulee nähdyksi
Huijaaminen Huijaus vie huijatuilta peli-ilon hyvin nopeasti Huijaamisella on monia tavoitteita päteminen: mainetta ja kunniaa voiman tunne taloudelliset hyödyt Huijaamisen estämisen tavoitteita salatun informaation suojeleminen pelin reiluuden takaaminen pelimaailman oikeuden turvaaminen
Huijaaminen Palvelin-asiakas-rakenteessa on monia haavoittuvia kohtia muunneltu asiakasohjelma itse ohjelma datatiedostot/muistin sisältö asiakkaalta lähtevän verkkoliikenteen peukalointi spoofing, palvelunesto palvelimen hakkerointi, fyysiset hyökkäykset
Liikenteen peukalointi Esimerkkejä asiakasohjelman ja palvelimen välisen liikenteen peukaloinnista tähtäysproxy automaatti tietää missä muut pelaajat ovat, ennen ampumista luo ylimääräisen ohjauspaketin jotta ammus osuu pakettien pysäyttäminen (haavoittumattomuus) pakettien toistaminen tarkoituksellinen viive
Suojautumiskeinoja Viestit voi salata julkisen avaimen menetelmät Viestejä voi suojata tiivisteillä (MD5 jne.) tällöin viestiä ei voi muokata jäämättä kiinni olettaen ettei osata laskea tiivistettä uudestaan vaikka osattaisiin, ei auta jos viestit on salattu toiston estämiseksi mukaan satunnaisluku tiivistealgoritmeissa heikkouksia, törmäykset Ohuet asiakkaat ja kaikki äly palvelimella hyvä, mutta voi vaatia liikaa kaistaa/laskentaa
Ennustava huijaus Tilanne: vertaisverkossa pelin tila on kaikilla pelaajilla; viestit lähetetään aikaleimalla kaikille nyt asiakas voi tarkoituksella odottaa muiden toimintoja ennen omansa päättämistä lähetetään toiminto väärennetyllä aikaleimalla Lockstep-protokolla: pelaajat sitoutuvat toimintoon lähettämällä hajautusarvon muut eivät voi päätellä mikä toiminto on mutta kun toiminnot paljastetaan, voidaan tarkastaa, ettei pelaaja ole vaihtanut toimintoa
Muunneltu asiakasohjelma Tyypilliset asiakasohjelman muunnokset paljastavat ylimääräistä tietoa fog of warin poisto, seinien läpi näkeminen tavoite: palvelin lähettää mahdollisimman vähän salaista tietoa; salaus voi myös auttaa joskus Grafiikan ym. ominaisuuksien muutokset Auktoriteetin väärinkäyttö tarkasta, että toiminnot ovat laillisia ja mahdollisia pelaajat antavat vain komentoja, palvelin toteuttaa vertaisverkossa varotaan vääriä huijausilmoituksia
Sääntörikkeet Peleissä on säännöt, mutta joskus niissä on aukkoja; onko niiden hyväksikäyttö huijausta? Salaliitto (collusion) epätäydellisen informaation peleissä jaetaan tietoa, joka kuuluu vain yhdelle pelaajalle toimitaan yhteistyössä kilpailullisessa pelissä ongelma esim. nettipokerissa styling, käyttäytymisen tarkkailu turnauksen tuloksiin vaikuttaminen (esim. luovutus, lahjonta)
Huono käytös Sääntöjen lisäksi huijaukseksi lasketaan joskus myös pelin hengen vastainen käytös MMOissa aloittelijoiden teurastus, PK-jengit eräs ratkaisu: pelaajien kimppuun voi hyökätä vain jos he ovat antaneet luvan alueet, joista osassa lakia valvotaan ja osassa ei Kulkuväylien tukkiminen, kämppäys, sanallinen loukkaaminen, omien ampuminen, spämmäys,... ignore auttaa osaan ilmoittaminen pelin valvojille (taas väärien ilmoitusten riski) Eve-filosofia: huono käytös on osa peliä