Snake5's Blog

Kāda spēļu veidotāja blogs…

Monthly Archives: jūlijs 2010

Phe.. detailmapes

Šausmīgi nepatika tas, ko Valve izdarīja ar Half-Life 2 tekstūrām (es demo jaunāko versiju skatījos..)

Visādiem veidojumiem no akmens šādas detailmapes vienkārši neder. Izskatās pēc zemes…

Tā nu es izdomāju, ka varētu uzrakstīt savu detailmapes šeideri un pielikt viņam modifikācijas izskata uzlabošanai.

Te rezultāts (pirms|pēc):

Pikseļšeideris:
float4 ps_main( PS_INPUT Input ) : COLOR0
{
float4 base = tex2D( baseMap, Input.Texcoord );
float4 det = tex2D( detMap, Input.Texcoord * 4 );
//modifikāciju sākums
det = det – 0.5;
det *= 0.5;
det = pow( abs(det), 1.5-base ) * sign( det );
det = det + 0.5;
//beigas..
return base * det * 2;
}

Tekstūru gan jau visi pazīst, bet šeit ir detailmape, kuru lietoju testiem (highpass no asfalta tekstūras :D):

Darbs lēnām iet uz priekšu…

Nesen izveidoju 4to līmeni. Ir palicis viens mēnesis visa pārējā izveidošanai. Pagaidām viss process nav pārāk garš… tāpēc šķiet, ka piektā līmeņa procesu vajadzēs pastiept, izmantojot visas iepriekšējos līmeņos iemācītās darbības. Citādi pavadītais laiks spēlē ir nenormāli īss. Tā ir vienmēr bijusi man liela problēma…

Piektajā līmenī ieplānots veidot stealth tipa spēles procesu. Kā izstiepšu – pagaidām nezinu… plānoju izdomāt.. šodien. 😀

“Karstā nauda” – mūzika 4/5/6

Iepriekš rādītās mūzikas modificētais variants: http://www.box.net/shared/e14r07baq4

Video mūzika – nedaudz modificēta: http://www.box.net/shared/3bo9ve4587

Kaut kas jauns: http://www.box.net/shared/ay7qtlulc8

Crazy Maze…

Izstrādes process laikam jau būs pabeigts. Tāpēc domāju, ka nedaudz varētu pastāstīt par dažādām interesantām lietām sakarā ar konkrēto spēles procesa tipu.

Spēles ideja jau no paša sākuma bija katrā līmenī ielikt kaut ko jaunu, tomēr beigās vajadzēja visu izlīdzināt izstrādē, lai nebūtu katrā līmenī spēlētājam jāaprij nenormāls zināšanu daudzums, lai turpinātu. Centos lēnām izplest procesu tā, ka spēlētājs nekad nebūtu iesviests kādā jaunā līmenī ar vismaz diviem pavisam jauniem elementiem. Šķiet, ka vismaz daļēji tas arī izdevās.

Ar stāsta konstrukciju bija tā, ka nedaudz vēlāk par pusspēles izveidošanu ienāca prātā viss stāsts. Pati ideja par kārtējo cīņu starp labo un ļauno bija gatava jau diezgan sen. Bet nu priekš stāsta implementācijas bija pietiekami ātri tas izdomāts – nevajadzēja atgriezties uz vecajiem līmeņiem, tos labot vai pārkārtot. Iemetu vēl pirms beigām dažādas norādes uz finālu, lai nedabūtu tik ļoti nevēlamo WTF momentu. http://en.wikipedia.org/wiki/Foreshadowing – uzskatu, ka bez šī normāli stāsti nevar iztikt. Bez šīs ievadīšanas pazūd ticamība stāstam un skatītājs tiek atstumts tik ilgi, kamēr viņš atrod pats savu loģisko izskaidrojumu, ja tāds ir. Tas, protams, liek viņam palaist garām atlikušā stāsta jēgu vismaz daļēji… Dialogu beigās izdomāt arī bija ļoti viegli, ņemot vērā to, ka gribēju galveno pretinieku attēlot kā gudru, bet ne gudrāku par galveno palīgu un vadītāju, kurš ir labo spēku pārstāvis. Nepateikšu gan momentā, no kā iespaidojos, domājot pretinieka tekstu, bet ir kaut kur tā visa ideja par nepareiziem dzīves mērķiem + nepiedomāšanu līdz galam + sākotnēji vieglo attieksmi uz lietām jau parādījusies.

Viena no interesantajām lietām, ko ievēroju, bija problēma ar vadību stresa situācijā — spēlētāju viegli var izvest no pacietības, kā rezultātā viņš sāk diezgan nekontrolējami kustināt peli, kas noved pie ātras nāves spēlē. Nepalīdzēja arī stresa momentu ietekme uz spēlētāju, kura bija tieši tāda pati. Tās rezultātā es nevarēju kārtīgi pabiedēt spēlētāju, pacelt adrenalīnu nedaudz. Tas diezgan nejauki ietekmēja visu ideju par kārtīgām cīņām tik šaurās telpās, tāpēc pārāk daudz cīņas līmeņu tur arī nebija. Tikai 2, no kuriem viens ir mazo pretinieku cīņas līmenis – tajā vajadzēja palēnināt pretiniekus, lai tie neskrietu virsū pārāk ātri. Citādi rezultāts bija nāve pat tad, kad pretinieki nebija tik tuvu… spēlējot vienkārši sanāca aizsardzības gājienā uzskriet kaut kam vai uztraukumā aizmirst paiet malā. Otrs ir lielā pretinieka cīņas līmenis, kurā ar stresa kāpināšanu nedaudz varēju izvērsties, jo bija telpa. Pēdējā (28.07) versijā lielais pretinieks nedaudz kustējās uz spēlētāja pusi, kas deva uzkrāto uzbrukumu efektu, tomēr arī deva diezgan daudz laika izvairīties. Likās, ka vajadzētu būt pietiekami lielai iespējai paskraidīt pa telpu, šaujot uz to pretinieku.

Par pēdējo līmeni gan neesmu pavisam drošs. Tur it kā vajadzētu nostrādāt dabiskajām asociācijām – ja gājēja priekšā ir šķērslis, tas gājējam traucē, liek tam apstāties un no tā atbrīvoties, ja nevar apiet. Pieliku vēl sākumā vienu kasti, kura uzreiz jau ir pretinieka ceļā, lai spēlētājs redzētu, kā viss darbojas. Vismaz tajā līmenī vajadzēja tikai vienu elementu parādīt spēlētājam, kas pamatīgi atvieglo mācīšanos.

Lai gan uz peles kustībām bāzētas piedzīvojumu spēles ir diezgan ierobežotas dažādos veidos, es uzskatu, ka šis žanrs tomēr vēl nav pilnībā izpētīts un tur ir vēl iespējas dažādot procesu. Piemēram, ar drag&drop, pārveidojamu apkārtni, “klikšķiem ar ieskrējienu” 😀 (t.i. peles pogas spiestas esot kustībā), ar kustību noteikšanas rīku stila darbībām, dažādiem fizikas pielietojumiem spēlē u.tml. Ceru, ka kāds drīz mēģinās kaut ko tādu izveidot, jo nav nemaz tik daudz tādu spēļu, būtu interesanti redzēt kaut ko jaunu. Viss vecais jau kaut kā… noveco.

P.S. Ceru, ka mēs sapratīsim Latvijā, ka spēlēm obligāti nevajag būt AAA, atvērtā pasaulē, ar 500 iespējām, tonnu bezjēdzīgu 3d objektu un mazu, aprobežotu spēles procesu, kurš ir kaitinoši grūts. Var arī citādāk un citādāk vajag, lai te kaut kas nopietni attīstītos vairāk par sapņiem.

Pusdzīvās lightmapes

Implementēju vienu tādu savādu veidu, kā zīmēt lightmapes…

Šeit redzams rezultāts – kreisajā pusē – bez, labajā – ar.

Metode ir diezgan traka, bet vismaz strādā kaut kā.

Ideja ir zīmēt pāri līmenim lielu četrstūri, kurš satur lightmapes tekstūru (jo GM neatbalsta vairākas tekstūras)…

Pirmais variants bija zīmēt ar bm_zero;bm_src_color.. bet tad sapratu, ka gribētos redzēt stiprāku lightmapes gaismu.. tad otrais variants bija bm_dest_color;bm_src_color, kas strādā tāpat kā modulate2X multiteksturēšanā.

Viena problēma, kuru ir kustībā ļoti grūti ievērot, ir lightmapes ietekme uz fona tekstūru. Ja nu galīgi nevēlami tas kļūs, varēšu izveidot speciālu trijstūru čupu, ar kuru zīmē tikai uz līmeņa. Palēninājums garantēts, bet nešķiet, ka to man vajadzēs lietot…

Laikam izdevās uzlabot…

Te var apskatīt uzlabojumus darbībā: http://www.youtube.com/watch?v=SbAQQBvZjuA

Tātad, pieliku visu iepriekšminēto. Lai neizstāstītu visu taktisko sistēmu precīzi, nerakstīšu te gari.

Tikai īsumā par rezultātiem – šķiet, ka ir izdevies uzlabot. Idejas strādāja diezgan nekļūdīgi. Ir tomēr vēl daži sīkumi parādījušies, kurus derētu salabot, bet uzlabojums ir ievērojams. Vislabāk to varēja redzēt, rakstot video. Dažādu tehnisku problēmu dēļ vajadzēja ierakstīt vairākas reizes. Visās vajadzēja parādīt jaunās iespējas. Problēmu ar to nebija – iespējas bija vienkārši lietot, tās diezgan nemanāmi ieplūda visā procesā, to dažādojot. Nodokļi ir biedējošāki pat ar game over screen’a trūkumu, kas manuprāt ir diezgan spēcīgs ieguvums… 😀 …gribēju vieglākus testus, tāpēc es vēl neesmu implementējis spēles beigu paziņojumus, bet drīz to darīšu.

Daži sīkumi, kurus vēl labošu:
-starta drošība (var sanākt tā, ka sākumā pretinieks redz spēlētāju, kaut arī viņam to nevajadzētu uzreiz)
-dubultais lēciens (nodokļu pievilkšanas spēks un galvenā varoņa kustību fizika pavisam labi kopā nesadzīvo, bet padarīt kustības daudz vienkāršākas arī negribēju, jo tas izbojātu cīņas “asumu”, tāpēc pielikšu dubulto lēcienu, lai rodas lielāka iespēja izvairīties no nodokļiem)

Spēlē būs 2 šāda tipa līmeņi, tāpēc būs vēl jāizdomā, kā papildināšu procesu otrajā (neskaitot grūtības līmeni.. 😀 ).

Vajadzētu uzlabot…

Kur nu bez problēmām… protams, tādas ir arī Karstās naudas izstrādes procesā.

Pilnai informācijas klātbūtnei iesaku apskatīt šo video:

http://www.youtube.com/watch?v=rxuazrAfibg (neembed’oju, jo baidos, ka AKKA/LAA vēl pārstāv fotogrāfu biedrību un varētu prasīt naudu par tā attēla izmantošanu kā fona attēlu savā blogā caur video embedošanu video kvalitāte ir diezgan augsta, tāpēc gribēju, lai video tiek skatīts labākajā iespējamajā kvalitātē, kādu var nodrošināt — blogs neļauj tā embedot).

Kā jau pats izsecināju, skatīties video nav tik slikti. Neko sliktu tur nevar redzēt – kāds nenosakāmas izcelsmes cilvēks vālē ar pusautomātisko pistoli pa politiķiem, šie atkal maksimālā kaifā dzen pretī nodokļus. Kur tad ir problēma?

Spēles procesā ir viena liela. Varbūt tas ir tikai man, par ko es tomēr stipri šaubos, bet nav tik interesanti to visu darīt. Biedēšanas procesā vēl ir kāda taktika jāpielieto, bet šeit – maz. Protams – šāda tipa spēlē nav īpaši lielas iespējas kaut ko uzlabot, nepiepildot visu ar daudzām reti lietotām iespējām, no kā nāk mans pirmais secinājums:

2D spēles veidot ir daudz grūtāk nekā 3D. Tieši tāpēc, ka dimensionālais kustības ierobežojums neļauj bez lieka darba neredzēt pretinieku, neļauj paskatīties uz problēmām no cita skatupunkta, padara primitīvu procesu pārāk sarežģītu. Kas arī noved pie otra secinājuma – vienkāršas un inovatīvas spēles nespēj iztikt bez savdabīgiem risinājumiem.

Lai uzlabotu procesu, vajag strādāt pie spēlētāja mijiedarbības ar pretinieku – gan tiešas, gan netiešas. Ir 2 varianti, kā to uzlabot, kad ir maksimāla pieeja testiem stabilā versijā. Pirmais variants, ko jau nesen joka pēc izmēģināju, īpaši labi nestrādāja – mēģināju izdomāt dažādas idejas, kuras uzlabotu visu. Tātad, mūs interesē otrais…

Otrais ir vecā labā kļūdu labošanas metode. Lai zinātu, kādas ir problēmas, tās vispirms jārada, tad jānovēro. Lai tās salabotu, jācenšas maksimāli modificēt, minimāli pievienot. Problēmas ir radītas. Ir novērotas (pārsvarā spēlējot, nedaudz arī tajā video). Bet minimāli pievienot vajag tāpēc, ka ir pavisam viegli dabūt lietas ārpus savas kontroles – pazaudēt iespēju viegli modificēt, neizjaucot sarežģītu struktūru, kura būs pēc tam jāpārbalansē.

Tātad – kādas problēmas es te saskatīju (vecā labā paškritika 😀 ):

Lai gan nodokļu ietekme spēlē bija dažādos veidos spēcīga – ar tiem varēja veidot nedaudz sarežģītāku taktiku pretinieku uzvarēšanā un tie varēja noraut pamatīgu naudas čupu, to trāpījums un lietošana neizraisīja nekādas emocijas. Manuprāt, gan vajadzētu norādīt, kad tieši pienāk bonusi, kādi, kad pazūd nauda un cik, gan vajadzētu nodokļus padarīt fiziski biedējošākus. Tie varētu pievilkt spēlētāju. To trāpījums varētu traucēt kustībām vai procesa uztveršanai.

Pretinieki uzvedās nedaudz smieklīgi, tomēr to varētu nedaudz augstākā līmenī pārnest. Kad pretinieks nevar piedāvāt aizraujošu cīņu, jāieskatās citās izklaides dimensijās. Tie varētu būt smieklīgi teksti, muļķīgas darbības, savāda reakcija. Protams, ar mēru un gaumes izjūtu, lai nekļūtu tik garlaicīgi kā Švarcenēgera balss atdarinājumi. 😀

Tā kā iepriekšējo problēmu risināšana nepadara dažādāku spēlē lietoto taktiku, nedod vairāk iespējas pretinieku uzvarēšanā, tad to vajag izdarīt man pašam. Spēlētājam inventory’a nav. Vidē ielikt dažādus objektus tikai tāpēc, lai būtu inventory un daudz reti lietotu iespēju ir iztērēts laiks šādā arkādē. Bonusi? Uzdevums nav savākt pēc iespējas augstāku naudas summu, nepieciešams savākt tikai minimālo prasīto naudas summu (nekas neliedz vākt vairāk, bet tas nav nepieciešams). Minimālais laiks uzdevuma paveikšanai tagad ir apmēram 1,5 minūtes. Tātad, viss, kas ir spēlētāja rīcībā, ir nauda, pretinieki, ierocis un savs ķermenis. Kombinējam! Viena no trakajām idejām ir pielikt naudas izmešanas iespēju. Darbotos kā apdullinošā granāta uz pretiniekiem. Tā rezultātā viņi pat varētu noķert nodokli, kurš bija paredzēts spēlētājam, kas savukārt palīdzētu tikt galā ar otro problēmu. Pats labākais ar šo ideju ir tas, ka tā prasa ļoti maz modificēt kodu. Labas haosa teorijas stilā… 😀 Tas arī ir viens no mērķiem procesa labojumu plānošanā – censties pievienot pēc iespējas mazāk, vairāk – modificēt. Tas pamatīgi atmaksājas ne tikai procesa kontroles, bet arī laika ziņā.

Rīt vai vēlāk šodien implementēšu šīs idejas, izveidošu video salīdzināšanai. Redzēsim, kā šis plāns strādā. 🙂

Karstā nauda – WIP screenshot

2. līmenis, pamatfunkcijas strādā, bet detalizējis vēl neesmu. Visādus sīkumus piemetīšu vēlāk acu priekam. Galvenais tomēr ir pamats. 🙂

Redzamības rēķināšana ar portāliem..

Tagad izdomāju vienu diezgan vienkāršu algoritmu (gandrīz?) nekļūdīgam redzamības testam, kuru var lietot ar portāliem PVS rēķināšanai. Nezinu, vai ideja ir 100% mana, bet vismaz neatceros to kaut kur citur.

Visiem zināmie pamatfakti:
-istabas jeb manā gadījumā BSP koka lapas ir konveksas telpas, kuras ir savienotas ar portāliem
-portāls ir konvekss daudzstūris, kurš savieno 2 istabas
-no vienas istabas ir iespējams redzēt otru istabu tad, ja taisna līnija, kuras abi gali atrodas katrs savā istabā, nekrusto nevienas citas istabas daudzstūrus, tikai to portālus…

Uzdevums: maksimāli samazināt pārbaudāmo līniju skaitu, nezaudējot aprēķinu precizitāti.

Maksimāli samazināt pagaidām nesanāca, bet nekaitētu kādam pabīdītu šo manu ideju tālāk…

Pamatalgoritms diezgan vienkāršs:

PP – visas portālu daudzstūru virsotnes
II – visas istabas
foreach room i1 in II
foreach room i2 in II, sākot no i1 + 1 indeksa
foreach point3d p1 in PP
foreach point3d p2 in PP
p1 aizstumjam līdz sadursmei ar i1 istabu, ja tās nav vai sadursme notiek ar istabas daudzstūri, ne istabas portāla daudzstūri, izlaižam šo punktu kombināciju;
p2 aizstumjam līdz sadursmei ar i2 istabu, ja tās nav vai sadursme notiek ar istabas daudzstūri, ne istabas portāla daudzstūri, izlaižam šo punktu kombināciju;
ja līnija no p1 uz p2 nesaduras ar nevienu citu istabu, šīs abas istabas ir redzamas viena no otras, var ņemt nākamo istabu kombināciju testiem;

Implementācija kaut kad sekos… 😀
Īpašām problēmām ar to nevajadzētu būt, tikai defaultais craps – epsiloni floating point operācijās utt.
EDIT: Prātā ienāca pirmā īpašā problēma – portālu vertex’i ir stūros. Raycast’ā nedrīkst lietot samazīnātus daudzstūrus, tāpēc būs jāveic papildu testi, lai uzzinātu, vai daudzstūris, ar kuru ir sadursme, neveido to sadursmi punktā, kurš atrodas pārāk tuvu portālam — tik tuvu, ka sadursmi nevajadzētu ieskaitīt..

P.S. Jā, es 6os no rīta pēc negulētas nakts domāju šādus algoritmus.. so what? 😀

P.P.S.
Šeit ir tas paša zīmētais attēls, kurš man deva šo ideju:

P.P.P.S.
Pirmais algoritms, ko lietoju, bija pārbaude tikai ar istabu portālu vertex’u veidotām līnijām.. attēlā gan var redzēt, kāpēc visos gadījumos tas nestrādātu…

Klasiskā mūzika, atkal..

http://www.box.net/shared/nr4oa6iy4b

Es ceru, ka izklausās nozagts no kāda profesionāļa. 😀 Tāpēc, ka es esmu autors. 🙂

Gan jau izklausās kādam citam valsim līdzīgs vai kaut kam tādam.. gan jau daļēji arī ir, bet nekādas notis es noteikti nepārrakstīju. 😛

Ja būs iespēja, iemetīšu kādā spēlē, bet cerība maza. :/