prosessi jolla skillit nousee selostus file namhasille, ideaa ensin ja sitten code-wise systeemia hieman mietitty. tekijat mita vaikuttaa kehitykseen : - skillin vaikeus taso (v. easy, easy, average, hard, v.hard) - pisteita keraantynyt (raja kaikilla sama tai v-tason mukaan?) - skillin onnistuminen, paljon alle (01 kritilla nousee eniten jne.) - tehtavan vaikeus taso (monsun haaste tai static skillin af) - learn rate kategoriassa (roduilla tune-tason vuoksi learn ratet) - universal learn rate (saataa koko mudin oppimis vauhtia) - tamanhetkinen skilli-% (vakuttaa pisteiden tarpeeseen) - olosuhteet joissa taito toteutettiin (kirkas paiva, laavamyrsky) - fumblesta pitaa oppia myos (eli mita ei saa tehda) eli siis noista asioista koostuu se haaste mita taytyy olla jotta skilit nousee. Jos haastetta ei ole ja olostuhteet on liian helpot niin myoskaan edistysta ei tapahdu tai se taphatuu hyvin hyvin hyvin hitaasti. Niin tuossa toi static skillin af.. tarkoittaa static skillin add-factoria tai "vaikeustason lisaajaa" tai siis vaikeustasoa. se siis tarkottaa etta esim jos on taito "timantinveisto" milla on tarkotus kyeta muovailemaan timantteja ja hiomaan niita tai sinneppain. Niin jollain vaikeammilla timanteilla on suurempi af kuin helpommilla.. siis jos timantinveisto taitoa kayttaa johonkin helposti tyostettavaan timanttiin milla on pieni af niin siina on vahemman haastetta ja nousee hitaammin kuin siita etta veistelisi hyvin vaativia timantteja ainoastaan. Se mita me tallseen systeemiin sitten tarvittaisiin codewise nin ehka tassa ois jotain lahtokohtia : - global_learn_rate, yksi ainut muuttuja tietylla arvolla. Tama on vakio kaikkialla pelissa ja maaraa sen miten nopeasti koko pelin edistys tapahtuu. Eli tama on olemassa tunettamista varten. Jos huomataan etta edistysta ei tapahdu nopeesit niin tata lukua muutetaan ja sit taas toisinpain. - category_learn_rate, Oppimisnopeus tietylla rodulla, tietyn tyyppisissa taidoissa. Esim gnomet on matemaattisesti lahjakkaampia kun innohu barbaarit. Siksi gnomeilla on kovempi educational skills category learn rate. Nama pitaisi olla olemassa senkin takia etta eri rodut on tunessa keskenaan ja on periaatteessa sama minka rodun otat, eli mikaan ei ole kokonaisuutena huonompi kun joku toinen rotu. - Skill_difficulty, taa tarvitaan skillin koodiin, ja tamahan meilla on jo olemassa. Maarittaa tietyin yksittaisin skillin vaikeuden, miten vaikea siina on kehittya ja edistya. - Exp_points[skill], joku muuttuja mika ilmasee sen maaran paljon sita nakymatonta expaa on tallahetkella keraantynyt tietyyn skilliin. Siis kun edistysta tapahtuu niin tama muuttuja saa lisaa arvoa ja mahdollisuus kehittya paremmaksi kasvaa. Eli siis tama voitas tehda samalla systeemilla kun skillejen arvot on nyt, tai miten esim batissa on kaytetty expa/skilli. Tama vaan on siis se expa mita ei nay ja.. no kohta nakyy esimerkkissa miten taa toimis. - Skill_made_by, eli miten skilli onnistui. jonkun skillin arvo on vaikka 56% miten hyvin sita osataan. sitten lasketaan kaikki siihen vaikuttavat boonukset ja miinukset. lopuksi kone ottaa random(jotain) arvon ja vertaa sita askesen tulokseen, saadaan tulos onnistuiko skilli vai ei. Eli normaali menettely tassa. ainut vaan etta silla on valia tuleeko erittian hyva onnistuminen tai erittain huono. Virheista oppii siksi myos erittain huono onnistuminen antaa jotain kehitysta tapahtua. Ja kriittisella onnistumisella tai puhumattakaan super-kritista niin oppii jo enemman. Jos sitten skilli onnistui hyvin/huonosti niin tuota Exp_points[skill] muuttujaa callitaan lisaa. Ja se maara etta miten paljon sita callitaan tulee sitten taas koostumaan noista tekijoista mista koostui tuo haaste-elementti. eli sita callitaan enemman jos skilli oli haastavampi ja vahemman jos ei. Tietysti siis jos skilli epa-onnistuu ei exp_points[skill] nouse yhtaan kun mitaan ei saavutettu. Mutta jossain tapauksissa exp_points[skill] nousee ihan tavallisella onnistumi sellakin jonkun verran jos kysessa oli todella haastava teko. kriittinen moka/onnistuminen vaan nostaa sita entista enemman. - challange_factor, nyt paastaan tahan mika maarittaa tota haastetta jonkunverran voimakkaammin ku muut yksinaan. Eli tallanen factor pitas olla olemassa periaatteessa kaikilla mihin skillia voi targettaa. esim siis esineilla mita tyostetaan jollain puusepan taidoilla, pitas olla tama. ja esim monsuilla mita lyodaan miekoilla pitas olla tama. Esim jonkun pehmean balsa-puun challange_factor vois olla 2, kun taas jonkun kovan ebon-puun vois olla 14. Ja taas janiksen challange_factor ois 3, kun taas greater demonin jopa 85, vaikka. Eli taa muuttuja kuvastais sita miten vaikea/helppo haaste ois edessa kun kasitellaan juuri tata kohdetta. Mahdollista on etta ei selvita yhdella factorilla vaan pitaa tehda challange_factor[type] esim.. onhan balsa puusta helppoa veistaa vaikka haarukka, mutta miltei mahdotonta rakentaa kestavaa taloa kun itse rakennus materiaali ei kesta. jossain/useissa tapauksissa kuitenkin selvitaan varmaan yhdella factorilla kun on vaan selvaa missa sen factorin arvoa tarkistetaan. - skill_change, skillin taman hetkinen-%. Tamahan meilla on jo. Eli mita kokeneempi olet jo jossain skillissa niin sita vaikeampi on enaa oppia siita uusia asioita. 98->99% on kummasti vaikeampi nostaa kuin 12->13% vaadittava tieto/taito maara on ihan eri jne. Eli taa skill_change tulee vaikuttamaan siihen paljonko tota exp_points[skill] muuttujaa tarvitaan siihen etta skilli nousisi. kohta tos alku-idea esimerkkissa pitas selvita edes jotenkin miten se vois toimia. - enviroment_challange, taa muuttuja kuvaa sita miten vaikeat olosuhteet on skillia tehdessa. Eli taa pitas sisallyttaa esim weather-demoniin ja saailmioihin sisalle. Sellain etta esim pouta- paivan arvo ois 3 ja lumimyrksyn 18. sitten room.c koodiin pitas lisata myoskin tama sellain etta roomin koodaaja voi halutessaan asetaaa roomilleen jonkun ymparisto-haaste-arvon. Jos siella olevat olostuhteet esim on jotain tosi haastavaa, tai sellasta mika ei sovi normaalin weatherin piiriin (sateilya, kuuma/kylma, jotain) siinapa oiski melkein kaikki mita tarvittas.. sitten tyhjentava esimerkki : Esimerkiksi otetaan nyt vaikka mikka mies ja lohikaarme. hyvin klassinen siis. Mikka miehen query_skill_change("sword") palauttaa tassa esimerkissa arvon 65. eli se osaa jo jotain. miekka mies lyo taistelussa lohikaarmetta. Ensin taphatuu taysin normaali kaavan-poyritys siis lohikaarmeen defence vastaan mikkailijan taito, statit jne.. sama ruljanssi mika tapahtuu aina combatissa kun matsataan. Sitten tulee sen aika etta tarkistetaan onnistuuko skilli kun ollaan kaavoista saatu valmis arvo mihin voidaan onnistumista verrata. sanotaan etta kaavasta tulee etta tarvii saada 34 etta osuu lohariin. Random arvonnassa tulee lukema 15, eli kaava laskee 34-15 ja skill_made_by muuttuja arvoksi tulee 19, skilli onnistui hyvin. Eli miekkamies osu lohariin. tasta lahtee tietysti normaalit damaget jne resistance laskennat nyt sitten mutta samalla myos tama. Seuraava askel ois se etta koodi ottaa query_challange_factor("dragon") mika palauttaa monsun haaste-tekijan. eli miten vaikeana tekona monsun koodaaja on sita pitanyt etta monsua voi vahingoittaa. Tama tietenkin vois tulla automaattisesti jostain kaavasta mihin vaikuttaa dragonin statit/defence ja yleensakkin sen ominaisuudet/kyvyt. mutta se pitas olla myos dragon.c monsun kooodissa ihan manuaalisesti asetettavissa. sittne kun query_challange_factor palauttaa jotain vaikka 31, (talla ei valia kun ei tiedeta kaavoja tai scaalaa viela), niin seuraava askel on ottaa siita ymparistosta missa miekkamies loi dragonia se enviroment challange... eli query_enviroment_challange[here] (miten ikina syntaksi olikaan), kuitenkin se palauttaa arvon siita milllanen ymparisto oli. Nyt on saatu jo 3 arvoa selville mitka vaikuttaa. Seuraavaksi sitten otetaan skillin vaikeustaso Query_skill_difficulty("sword"), toi sitten palauttaa vaikk arvoksi 2, eli "average". Nyt on 4 arvoa. Sitten aletaan rakentamaan sita paljon pisteita tasta onnistuneesta lyonnista sankarimme saa exp_points["sword"] muuttujaan lisaa. Tahan vaikuttaa naa kaikki asiat.. eli : skill_made_by + challange_factor + enviroment_ challange / skill_difficulty.. kaava vois olla jotain tollasta. kuitenkin se palauttaa jollain scallalla olevan numero arvon (pitaa scaala maarittaa joskus sitten) sitten tama numeroarvo callitaan lisaa exp_skill["sword"] muuttujaan. Heti peraan ton muuttujan arvo tarkistetaan, ja sita verrataan johonkin arvoon vaikka nyt esimerkissa 100. eli query_exp_skill["sword"], ja se nyt vaikka tan onnistuneen iskun jalkeen palauttaa 103 eli on suurempi ku tarvittava arvo. Se tarkoittaa sita etta talla lyonnilla lohikkarmeeseen mikkamies saavutti just sen verrna kokemusta miekkataidossa etta tapahtuu skillin tarkistus. Sitten alkaa toinen prosessi eli skillin tarkistus. Jos query_exp_skill["sword"] palauttaa alle 100 niin tarkistusta ei tule ja ne pisteet mita se palautti jaa sinne odottelemaan etta niita tulee lisaa, jos tulee. Nyt siis tahan tarkistukseen tulee vaikuttamaan global_learn_rate, category_learn_rate ja skill_change("sword"). tamakin prosessin voidaan suunnitella ihan uudelleen viela mutta tassa vaikka ehdotus : ensin se tarkistaa heti karkeen global_learn_raten, mika voisi olla ihan suora arvo valilta 0-100. kooti arppo randomilla 0-100 ja vertaa sita global_learn_rateen. ja jos vaikka tulee vastaan yli meneva arvo niin prosessi keskeytyy. eli jos query_global_learn_rate antaa 76, ja randomista tulee 82 niin tama tarkistus-prosessi keskeytyy tahan.. nyt vain on erona etta exp_skill["sword"] on edelleenkin 103, eli heti seuraavaksi kun miekkamies onnistuu saamaan lisaa expaa skilliin tulee uusi tarkistus. Jos randomi on vaikak 35 eli alle 76, niin tama tarkistus jatkuu : seuraavaksi voitaisiin tarkistaa category_learn_rate. eli tassa tapaukselal combat_skill_learn_rate, joka mikkamiehen roudulla on vaikka 95. eli arvotaan taas randomi valilta 0-100 ja jos tulee yli 95, prosessi taas keskytyy, jos alle niin viela viimeinen tarkistus. Eli viimeiseksi tarkistetaan nouseeko skilli-% nyt sitten vihdoin ja se tarkistetaan olemassa olevaan skillia vasten. se voisi olla jotain query_skill_change("sword")-5 ja tata sitten verrataan random lukuun valilta 0-100. Eli mahdolisuus olisi aina 105% skilleihin nousta talla systeemilla, tai jopa 106% mutta siina on 1% taalla viimeisess tarkistuksessa =) ja kattokaa miten pitka matka tanne paasemiseenkin jo tarvii kulkea. Kuitenkin jos randomi menee ALI niin prosessi taas keskeytyy ja skilli ei nouse, sama kuin aijjemmin. Eli nyt mita korkeampi jo olemassa oleva skilli on niin sita vaikeammin se enaa nousee. Jos kuitenkin randomi menee luvusta yli niin skilia callitaan 1 lisaa, eli mikkamiehella se nousisi nyt 65->66%, tuon nousemisen yhteydessa pitaa muistaa exp_skill("sword") muuttuja sitten callia takas nollaan. Eli kun yksi prosentti tulee niin sitten on taas uusi tyo edessa kerata expaa seuraava prosenttia varten. Tama koko prosessi toistuu aina kun mies ostuu lohikaarmeeseen jne.. Siis tama on vaan ensimmainen "koodi-idea-ehdotus" jossa varmasti on omat kusemisensa ja tuskin on 100% optimi. mutta tolla selostuksella pitaisi jokaisen ymmartaa etta se on taysin mahdollista koodata, kunhan vaan tehdaan siita totta.. ei vakisin juuri talla mallilla, mutta otetaan tama edes alku-malliksi ja kehitetaan tata eteenpain niin saadaan tasta mahdolisesti taysin optimi ja erittain hyva systeemi. Tuloksena olisi jarjestelma joka ois niin VITUN paljon esim. batin expaa parempi ettei mitaan rajaa. Ja sama jarjestelma sopisi nyt esim automaattisesti toimiviin (dodge esim) skilleihin tain sitten jos vaihdat miekan tilalle puusepain taltan ja loharin tilalle eboniitti puun niin huomaat etta systeemi toimisi myos muillekkin kuin matsi skilleille.. vaihda taas vaikka kuokka ja peruna niin se toimii myos maanviljelyssa. Arvoja ja scaalaa pitaa vaan tunettaa siten etta tosiaan myos semmoset skillit mita oikeasti kaytetaan harvemmin vois edistya kohtuullisesti. mutta siis kuka sanoo etta kayttamalla harvemmin voi tulla hyvaksi? Tuskin meistakaan kukaan koskaan tulee hyvaksi ruuanlaittajaksi jos ei sita itse harjoittele tai harrasta, sama jotain maanviljelya. Mut siis ma en ymmarra miksi tama ois mahdotonta koodata. otetaan taa tosiaan lahto-ideaksi ja ne ketka osaa paremmin niin optimoi ja muuttaa tan jarkevammaksi niin tama on hyvinkin mahdollista. Miten tama sittne toimisi kaytannossa ? no tuossa esim miekkamiehen pitaa jo 65% taitoon paastakseen kerata niita pisteita 64 kertaa kun kerran laskuri joka % noustessa nollataan takaisin. ja pisteita nyt taman systeemin kanssa saa vain jos hommassa on tarpeeksi haastetta. Jos tappaaa jotain janiksia niin haaste sielta on 1 ja viela pouta saassa (myos vaikka 1) ja sitten viela vaikealle skillilla (jaettuna jolllain ~5:lla) eli ei saa kuin murto osia niista pisteista mita tarvii skillin nostamiseen. Me voidaan lisata viela kaavaan jokin osa tai yksi muuttuja lisaa mika aiheuttaa sen ettei tasta tule yhtaan ainutta pistetta, eli vaan ja ainoastaan haasteella kehittyy ja tekemalla oppii. (tosin batissakin level 100 tyyppi saa sen 204exp kun tappaa jano pupun =) niin ehka tassakin vois juuri noita hyvin pienia rippeita tulla kuitenkin jostain.) Myos skill_change voidaan sisallyttaan tan osan koodiin jos tarve vaatii eli se vaikuttais tassa vaihessa jo siihen etta onko haastetta vaiko eiko. Sitten teoriassa oppiminen tai sellanen ohjattu harjoittelu menee ihan oman systeeminsa mukaan tai on suoraa callimista skilleja korkeammaksi tms.. (se tosin ei ole kovin jarkevaa) .. mutta ma sanon sen etta tama systeemi VOI toimia jos me vaan halutaan se tehda. Ja mita siita ois palkkiona? mun mielesta paras vitun expa systeemi mita misaan mudissa on koskaan ollu, siis ei nain monipuolista ole missaan ikuna nakynyt eika varmaan tule nakymaankaan. Paljompa jossain batissa saa-olosuhteet vaikuttaa siihen mita jostain elf guardista saa expaa joku Qurp mika on sumu jo ennestaan ja milla ei ole mitaan haastetta tappaa edes koko guardia. Hyvaa tassa ois myos se ettei mikaan onnistunut isku lohariin menisi hukkaan, aina oppisi edes vahan jotain. Joskus vaan ei onnista noi tarkistukset etta skilli nousis, mutta kun niita pisteita on tarpeeksi niin eikohan se siita joskus lahde. Yksi vaihtoehto on myos ettei exp_points[skill] laskuria nollattaisi vaan siita vahennettaisiin aina 100, kun skill% nousee. Sillon siis miekkamies milla ois paljon kokemusta mutta on aina vaan esim global_raten takia mokannut sen tarkistuksen etta skilli nousis ja onkin silla aikaa saanut vaikka 406 kokemusta taitoon, niin voisi aika yllattaen kehittaa +4% taitoon kun ne tarkistukset vaan onnistuisi tuurilla tulemaan sielta sitten. Taa ois itseasiassa parempi, nain ei menis hukkaan tyota yhtaan pelkan randomin takia, koska onhan se kokemus kuitenkin ansaittua. ... siina sita ois, jos ette lukeneet joka sanaa niin kehotan etta jaksatte lukea.. silla muuten tata voi olal vaikea tajuta. Kehitetaan majikista paras mudi/murpe/muvge, kiitos.. ei mitaan bat-kloonia. - ondoval.