dimarts, 31 de març del 2009

Per fi!!!

Ale, ja està el motor basic acavat. Després d'un montó de proves no he trobat cap poll. Segur que acavarà eixint-ne algún, pero al menys la base es robusta i prou confiable.

Al final no hi ha forces ni resistències. El que si que pasa es que un objecte, quan espenta a altre, va la meitat de apresa. Si espenta a dos seguits, encara més lento. Queda prou be. De totes formes te un xicotet efecte raro, heretat del Batman de Jon Ritman (ja que ho he implementat like ho va fer ell): si espentes cap a fora de la pantalla tot es veu be, pero si espentes cap a dins se veu un xicotet bot entre els dos últims objectes de la cua. Es algo amb el que puc viure tranquilament. Tinc un video gravat amb el Fraps, pero al pujarlo me diu que no sap convertir-lo. ¿Algú me sap dir un format amb el que pujar les coses a YouTube i llocs similars?

Ara el sistema el que fa es el següent:
Quan un objecte es mou cap a un costat primer comprova si colisiona amb algú. Si no hi ha colisió es mou, i a més comprova si te algún objecte damunt d'ell. En cas afirmatiu els espenta en el mateix sentit en que s'ha menejat (no espera a vore si es mouen o no).

Si sí que hi ha colisió, no es mourà, i li pegarà una espenta al objecte o objectes contra els que ha colisionat, en el mateix sentit en que pretenia moures. Un objecte, al rebre una espenta, comprovarà si ha de respondre a una espenta per eixe costat. Si no ha de respondre, no farà res. Pero si sí que ha de respondre, li tornarà la "espenta de retorn" que tinga definida.

Normalment un objecte no te espenta de retorn, pero hi ha algúns que sí que la tenen. Per exemple, els malos tenen una espenta de retorn que el que fa es matar al espentador (en el cas que siga Patman); altres, al rebre una espenta per dalt, tornen una espenta cap a un costat, convertint-se en cintes transportadores; i els marcs de les portes tornen una espenta cap a la porta (al igual que pasava en el Batman), fent que siga més facil entrar en les portes. A més, si el objecte es movible intentarà moures en el sentit indicat, fent el mateix que abans.

A part, si el objecte te definit el flag de gravetat, tendirà a caure (espenta cap a baix) fins trobar altre objecte per baix, o el piso.

Quan s'espenta a un objecte, en realitat el que es fà es fixar un flag en el byte de espenta. Al haver 6 direccions, s'usen els bits 0-5. A més, el bit 6 es el flag de matar (el 7 no s'usa per ara).

Per a determinar per quins costats es sensible el objecte a que li espenten (per quins costat el objecte farà algo si l'espenten) cada objecte te un byte de màscara contra el que es compararà el byte de espenta amb un AND. Si se li ha espentat per un costat sensible, tornarà el byte de retorn, que es un byte amb la mateix estructura que el de espenta i determina per quins costats se li espenta al objecte que havía iniciat l'espenta (mmm, igual ha quedat molt lios).

Si un objecte es mou o no al ser espentat es defineix amb altre flag. Altres flags disponibles son: gravetat, desapareix, invisible, animat, orientable i actiu. Crec que son prou descriptius per si mateix, i crec que ja he parlat abans de quasi tots ells.

A part, cada objecte pot ser d'un tipus especific, o tindre una movilitat inherent, dels quals ja he parlat abans.

Demà intentarè implementar les portes, i a vore si puc releasar algo.

dilluns, 30 de març del 2009

Poc que dir

Pos eso, hui tinc poc que dir. No es que no haja fet res, pero es que estic en un moment de canvis en el codi i primer vull tindre clares les coses.

Joer, son quatre línies de codi mataes, pero lo que costaràn de parir... En realitat, el problema es intentar fer-ho tot bonic i genèric. Si haguera començat a escriure like loc, a part de que serien moltes més linies de codi ja estaria de sobra fet, pero crec que val la pena pensar ben pensades les coses per anar guanyant soltura en fer bones sol·lucions. Total, sent projectes personals m'ho puc permetre.

diumenge, 29 de març del 2009

Patman i més

Be, arriva el cap de setmana i es fa més dificil trobar temps. Be, com sempre, es té temps per al que se vol, perqué matinar si que he matinat per a vore la F1. Aixó si, la F1 es pot vore amb el xiquet en braços, pero programar no (snif...).

De totes formes, el desenvolupament del Patman no ha estat parat. El divendres li vaig pegar una bona ullada al sistema i vaig vore que no està tan mal. El poll causant de quasi tots els mals de cap ve de la forma en que procese les colisions.

Vaig a canviar el sistema un poc. Ara cada objecte, al moures en certa direcció comprovarà colisions amb tots els demés. Si troba una colisió amb un objecte directament no es mou, pero "l'espenta". Després, haja colisionat o no amb eixe objecte, pasa al següent, i així amb tots.

Espentar va a ser igual que amb el Batman de Jon Ritman. Quan un objecte espenta a altre, el que fa es encendre-li un flag on s'indica el sentit de l'espenta. Quan li toque a eixe objecte ser procesat, comprovarà els seus flags i intentará moures, fent el mateix que l'altre objecte. En principi, no vaig a tindre en compte forces, per simplificar el model (el Batman no te en compte forces, de totes formes).

Amb aquest sistema les espentes poden tindre una especie de retard, depenent de l'ordre de procesament dels objectes (but then again, al Batman li pasa lo mateix). Amb aquesta simplificació espere tindre un motor més estable sobre el que, si vull, fer ampliacions i tal.


En otro orden de cosas, he decidit que el Bryndiana siga una trilogia, en la qual cada joc serà d'un estil diferent:

Bryndiana Juan And The Fucking Machine (tentative title)
- To be announced
- Motivation: Serà tipus arcade de plataformes.
- Synopsis: Una extranya màquina esta fent coses rares a l'altra punta de la UPV. Bry, la fama del qual com a expert en aquest cap es mondialment reconeguda, serà requerit per a anar e investigar els aconteixements.

Bryndiana Juan And The Riot Of The Jail (tentative title)
- To be announced
- Motivation: Serà tipus Double Dragon, Golden Axe, i similar.
- Synopsis: La Jail ha sigut presa per Saucs i altres maleantes d'eixa calanya. Bry (amb l'ajuda opcional de Usufondo) tindrà que recuperarla a base de calbots.

Bryndiana Juan And The Quest For The Lost Comp (tentative title)
- In production
- Motivation: Serà el que tenía pensat, tipus Prince Of Persia.
- Synopsis: Falta una hora per obrir les Jails. Bry i Fondy veuen que s'ha estropeat un comp de la Jail y Bry ha d'anar a buscar-ne altre de reemplaç al magatzem, situat en les profunditats de les catacombes que s'extenen per baix de la UPV. Els ràcanos dels administradors de la UPV no li ficaràn les coses fàcils, pero Bry no deixarà la seua Jail sense un comp. Té una hora!

dijous, 26 de març del 2009

Agh! Plaga de polls!!

Buff, hui he estat implementant les espentes, he modificat la reordenació, les colisions i les forces. La conclusió es la següent:

Intentar resoldre un sistema determinista d'una forma poc formal ens du inevitablement al fracas.

Per moltes revisions que porte fetes, reescritures, captura de polls, etc... no paren de apareixer més. I estem parlant de nomes un centenar de línies de codi dispersades entre 2 classes i uns menys de 15 mètodes.

Quan no es que la reordenació no ha funcionat despres de moure un objecte al est d'altre objecte amb una z 1 unitat major, es que l'aplicació de la força de la gravetat sobre un objecte al mateix temps que altre l'està espentant cap amunt deixa un buit entre ells, o... be, farragosos polls.

Total, que vaig a agafar good old llapisera i paper i a planificar tots els casos posibles i les seues interaccions; i després vorem qué me toca afegir, esborrar o modificar.

Per a començar, probàblement vaig a tirar a la basura el mètode de reordenar nomes quan es mou un objecte i faré una reordenació total a cada bucle de proces. O com a molt nomes ordenaré quan s'haja menejat algo, pero tota la llista, no de forma selectiva com feia abans. Vaig a investigar quin es el millor algorisme per a ordenar llistes quasi ordenades.

Es més, vaig a plantejarme el sistema complet. Si no ho faig ara més tard perdre més temps solventant polls, o m'arrepentiré perque no podré fer alguna cosa, com va passar amb el "Patman i Estos". La premisa a seguir es:

Si tinc una sol·lució que m'aporta el 90% del que vull amb un 10% de l'esforç, decantar-se per eixa sol·lució.

En un principi volia encarar el desenvolupament del Patman desde el punt de vista de l'optimització, fent que les estructures de dades foren el més comprimit possible, etc... Més tard he vist que algunes coses, a part de no tindre sentit voler comprimirles tant, me complicaven molt la vida. Així que millor replantejar-ho tot. M'he donat compte que el codi del "Patman i Estos" es més simple i permitia moltes mes coses, lo qual es absurd.

Esta vesprada em dedicaré a pensar qué es el millor per al joc, la forma més simple de tindre el més prompte posible el joc funcionant. Vaig a intentar ser reduccionista i aplicar la navalla de Occam:

En igualtat de condicions, la sol·lució més senzilla es probablement la correcta

Mmm... deuria deixar totes estes frases per ací per a recordarles sempre. Hui ha sigut un dia amb molt de temps, pero també ha sigut un dia frustrant, perque despres de tot el treball vaig que el camí que estava agafant no es precissament un camí de roses. Intentarem ser optimistes i alegrarse per haver tingut un dia amb temps per a concentrarse i detectar prompte que el sistema era una merda per a corregir-ho.

Demà vos conte...

dimecres, 25 de març del 2009

Ordenant Objectes

Hui, per fí, he avançat prou amb el Patman. He implementat l'ordenació dels objectes i he fet una mínima interacció entre ells. El sistema de espentes encara no està funcionant, es lo següent que ve.

Vaig a parlar un poc més en profunditat del sistema d'ordenació del objectes. En un mapa isomètric els objectes en un moment donat poden estar més cap a dins o més cap a fora. Si estàn més cap a fora s'han de pintar després que els que estàn més cap a dins.

La forma que he decidit usar per a mantindre els objectes en l'ordre que toca es ficar-los en una llista enllaçada, així puc mourelos sense massa dificultat ni cost, movent punters. La llista està enllaçada desde el objecte més profund (que se pintarà primer) fins el mes extern (que es pintarà l'ultim).

Una aproximació hauria pogut ser reordenar la llista a cada pas del bucle, per si ha canviat algún objecte de posició. No obstant, he decidit que l'ordenació nomes es farà quan un objecte es moga. Es més, l'unic que es reordena es eixe objecte, que buscarà sobre quins objectes ha de permutar la seua posició.

Una optimització que he implementat sobre aquest sistema es el fet que no fa falta recorrer tota la llista de objectes, sino nomes el costat de la llista que convinga. Si el objecte va cap avall, cap al nord o cap a l'est, nomes pot pujar posicions en la llista (o siga, anar cap al fondo). Així, nomes he de comparar la seua posició amb els que te davant en la llista.


Pel contrari, si es mou cap a dalt, cap al sud o cap a l'oest, nomes pot baixar posicions en la llista, pel que nomes el compararé amb els que te darrere en la llista.


La comparació consistirà en: si he superat en posició al que tinc després, m'intercanvie amb ell i ho comprove amb el següent. Pararà en el moment en que trobe un objecte al que no pot superar.

Les colisions les comprove de la mateixa forma, ja que si em meneje cap al sud nomes puc colisionar amb un objecte que estiga més al sud que jo. Més baix en la llista, per tant, i només fa falta que mire eixe costat de la llista.

Està quedant super-sucosot (be, a mi m'ho pareix :-), es una llàstima no tindre molt de temps esta setmana. Com sempre, espere que demà millore la cosa. En quan tinga el sistema de espentes implementat releasaré una versió alpha amb una sola habitació amb objectes que espentar i tal, per que pugau tastar el saboret que tindrà i pugau provar, de paso, si trobeu algún poll.

dilluns, 23 de març del 2009

Sombres i espentes

Jope, al final no he pogut avançar tot el que volia, en part pel temps i en part per problems amb les sombres.


En principi, volia que el Patman tinguera sombres dinàmiques. Bàsicament, el que faria es: Si un objecte te marcat el flag de fer sombra, que mire baix d'ell. Si troba un objecte que el fique en sombra, sinó, que fique en sombra el piso. Pareixia simple.

Problema 1: els objectes no sempre estàn exàctament baix de altre objecte, sino que poden estar-ho parcialment.


Aixó es un problema que te cagues. En primer lloc, la sombra es pot repartir entre varios objectes. En eixe cas, he de pintar sombres parcials. Tenint en compte la quantitat de combinacions posibles (16 posicions diferents, 2^16=65536), implementar sombres com deu mana pot requerir més codi que tota la resta del joc.

En segon lloc, pot haver diversos objectes fent sombra parcial sobre un mateix objecte, amb el que tindría que comprovar colisions entre sombres, sinó les sombres s'acumularien, cosa que no es lògica.

No se que faré al final. El que tinc clar es que no vaig a fer unes sombres que me costen més que la resta del joc. Pero també tinc clar que algo al respecte m'agradaria fer. Ja vorem com acava la cosa, per ara les sombres han caigut al final de la llista de coses que fer.

Problema 2: El sistema de espentes pot arrivar a complicar-se prou. Tal i com tinc pensat fer-ho un objecte A que colisiona amb altre objecte B li envia una espenta amb la orientació i força especificada, i no es mou. El objecte B, al rebre la espenta, intentarà moures en eixa direcció. Si al intentar-ho fa una colisió amb altre objecte C, li enviarà una espenta i, igualment, no es mourà. Pero en cas de que sí es puga moure, ho farà i li enviarà una espenta al objecte A que li havia espentat, amb la força i orientació incial. Com el objecte B ja s'ha menejat, el objecte A al rebre l'espenta veu que sí es pot moure i ho fà.

Es un sistema de acció-reacció. El problema es pot presentar quan un objecte espenta dos objectes a l'hora. Els dos li respondràn amb una espenta per a que es moga, pel que el objecte A es mourà dos vegades! La segona vegada tornarà a espentar les caixes, i entrarà en un bucle fins que es topete amb altres objectes o amb la paret.

Altre problema diferent es quan un dels dos objectes a espentar sí es puga moure pero l'altre no. Un d'ells es mourà i l'altre no, ni el objecte que espentava tampoc, fent un efecte raro.

He de repensar millor este sistema de espentes.

Tutorial i tal

Al final el tutorial no està releasat per tres motius:

1.- Les clases no estàn apenes provades. Se me va ocorrer fer una coseta i fallaba. Primer vull tindre un joc funcionant sobre eixes clases i després les release. Supose que això serà al llarg de esta setmana, que espere acavar (i començar) el gros del codi del Patman.

2.- Ahir el nano estava malet i el vaig tindre en braços fins anar a momir. Com encara no he apres a escriure en els peus, pos ha tingut que esperar la cosa. Està, no obstant, començat: Instalació De SDL En Windows. Hui li afegiré com crear un projecte SDL nou i amb aixó ja estarieu preparats per fer qualsevol cosa. I en uns dies vos passe les clases que use jo.

Hui tinc la sensació de que serà un dia productiu...

NOTA: De vegades me pregunte qui llig açò. Sé que el JDes, JGamer i el Master ho lligen perque de quan en quan deixen un comentari, pero me preguntava perqué ningún altre jailer ha donat senyals de vida:
A) Directament, no lligen el blog (snif...)
B) Lligen el blog, pero en la seua agitada vida no hi ha temps per a comentar!
C) Lligen el blog, pero no saben comentar
D) Lligen el blog, pero els fa perea comentar perque no tenen un compte

O inclus alguna opció rara com:
E) No lligen el blog, pero no els fa perea comentar perque sí tenen un compte.

dissabte, 21 de març del 2009

Qui vol fer JailGames?

Be, com sempre en vacances es quan menys temps se té per a fer coses d'estes. Entre arreglar la casa, estar amb el nano, eixir per ahí, etc... No obstant, he continuat perfilant les APIs internes. Es el treball menys divertit, pero en algun moment s'ha de fer.

Amb el nou DrawManager, carregar una imatge es tan senzill com:

TextureInfo *perico = drawManager->Load("prueba.png");

Internament controle si la imatge s'ha de carregar desde arxiu, desde un arxiu de recursos like faig en el Arounders, o desde on siga. Després, per a pintar l'imatge:

perico->Draw(xd, yd, wd, hd, xs, ys, ws, hs, angle);

On xd, yd, wd i hd son les coordenades de l'imatge al destí (al donar un ample i un alt es pot escalar al gust) i xs, ys, ws i hs son les coordenades de l'imatge a l'origen (per a agafar el tile que interese), i angle es l'angle de rotació. Use PNGs i així la transparencia ja ve fixada en l'arxiu. Molt cómode. A més, tambe permet fer espill invertint les coordenades de l'oritge.

Si es vol fer un fade desde negre, pos:

drawManager->FadeIn();

I per al fade a negre igual pero amb FadeOut. Els fades son asincrons, o siga, que se li diu que el faça pero l'execució i pintat de l'escena continua com si res. Per al fadein no importa, pero el fadeout es sol fer al acavar, pel que despres de ordenar el fadeout, i abans de finiquitar, s'ha de comprovar que no estiga encara fent-se. Per a tal cosa he preparant un mètode que ens diu si s'està fent un fade (o el que siga):

if (exitSignal && !drawManager->Working()) exit = true;

Per suposat, quan acavem de pintar l'escena hem de fer el tipic:

drawManager->Flip();

Respecte al teclat, primer hem de actualitzar-lo:

exit = !inputManager->Update();

Aquest mètode torna false si s'ha pulsat el botó de tancar finestra, pel que es deu controlar per a actuar consequentment, sino no es podrà tancar la finestra amb l'aspa.

Una vegada actualitzat el teclat, nomes tenim que comprovar si la tecla pertinent està polsada:

if ( inputManager->IsUp() ) y-=2;

He preferit fer comprovacions genèriques (si s'ha pulsat la tecla o botó del pad que siga asignada a anar amunt) que no específiques (si s'ha polsat la tecla de cursor amunt) per a que el codi quede mes boniquet. Per suposat, la clase tindrà un mètode per a comprovar si s'ha polsat qualsevol tecla. Pero les comprovacions genèriques estàn per a les tecles usuals, que a més podràn ser configurades amb un mètode del tipus:

inputManager->SetUp(SDLK_UP);

On SDLK_UP es el codi de la tecla (en aquest cas correspon al cursor amunt).

La música es igual de senzilla. Un mètode per a carregar, altre per a play altre per a stop i poc més.

Amb açò es pot fer quasi qualsevol jailgame. Al pròxim post parlaré de tota la infrastructura que hi ha per baix per a poder programar un joc sense preocuparse de tot el voltant. Un bucle de joc simple, amb un sprite que no para de rotar, que pots moure amb els cursor, i que comença amb un fadein i acava amb un fadeout quedaria mes o menys així (la indentació no es veu be, pero com es un codi molt simple...):

void GameController::Go(GameInfo *pGameInfo)
{
bool exit = false; // Acavar el bucle principal
bool exitSignal = false; // Senyal de que l'acavada es imminent
int angle = 0; // Angle de gir de l'sprite
gameInfo = pGameInfo; // Info del joc, ja ho explicaré

int x = 0; // Coordenada x del sprite
int y = 0; // Coordenada y del sprite

TextureInfo *perico = drawManager->Load("prueba.png"); // Carreguem el dibuix
drawManager->FadeIn(); // Començarem amb un fadein

while (!exit) {
exit = !inputManager->Update();

if ( inputManager->IsUp() ) y-=2;
if ( inputManager->IsDown() ) y+=2;
if ( inputManager->IsLeft() ) x-=2;
if ( inputManager->IsRight() ) x+=2;

if ( inputManager->IsESC() ) {
exitSignal = true;
drawManager->FadeOut();
}

perico->Draw(x, y, 32, 32, 0, 0, 32, 32, angle);

drawManager->Flip();

angle+=2;
if (angle == 360) angle = 0;

if (exitSignal && !drawManager->Working()) exit = true;
}
gameInfo->estado = ESTADO_SALIR;
}

Prou simple, no?

divendres, 20 de març del 2009

Brand new infraestructura

Ale, els managers ja estàn funcionant. Mola, ara es prou simple carregar gràfics i pintarlos, i al tindre OpenGL per baix puc fer un montó de coses xules, com invertir, rotar, etc... sense afegir cost considerable. Respecte a la música ja ho vaig deixar ben xulet. I respecte a teclat/ratolí/pad, ara ho he deixat mes boniquet.

La veritat es que ha quedat molt facil i sucoset per a fer jocs, així que demà escriuré un tutorial per a començar a trastejar si voleu (realment ja he començat el tutorial, pero com encara no està acavat, pos simplement ho anuncie).

Respecte al Patman, hui no l'he avançat. Demà potser deixe el motor funcionant. Ho tinc tan repensat que es quasi escriure-ho de una sentada. El cas es que també m'he encapritxat en passar el Patman antic a SDL, pero segurament m'espere a tindre el motor del Patman nou funcionant.

Respecte al Bryndiana, que fa temps que no dic res. Vaig estar dos o tres dies planejant-ho tot. El joc en sí, desde el punt de vista de la programació, es molt simple, prou més que el Patman. La dificultat es en les animacions ultra-suaus. Primer vaig pensar en ficar al del Prince of Persia i ja el repitnaria com a Bry, pero quedava fatal. Despres se me va ocorrer agafar els gràfics del Flashback, pero canvien prou. A més, es molt diferent del Prince Of Persia, molt mes restringit. I jo vull el saboret del Prince. Així que al final he decidit... lo més dificil.

Vaig a usar la tècnica del Rotoscoping per a filmarme a mi mateix vestit like Bryndiana, treure els frames i repintar la animació, like es va fer amb el Prince Of Persia. No se si quedarà be, pero al menys ho intentaré. El que mes em preocupa es el motion blur quan me fique a correr i botar, que amb la merda camareta que tinc dubte que puga aconseguir frames clars, pero ja ho vorem. En quan tinga algo ho poste per ací, segur que al menys serà divertit ;-)

Eso, que estem (estavem) en falles, i tinc 4 o 5 dies de vacances (ja en duc dos) i estic aprofitant pa fer cosetes de eixes. He escrit la API en OpenGL, estic pintant animacions del Patman, escrivint el tutorial, vaig a fer lo del Bry... Seguiré informando...

dijous, 19 de març del 2009

OpenGL

Entre ahir per la vesprada i hui estic ideant i provant el nou DrawManager que usarà OpenGL per baix. Vull que siga totalment transparent. A més, tambè vull que el DrawManager s'encarregue de carregar i mantindre tots els gràfics, i que els demés objectes nomes tinguen que dir l'identificador del gràfic a pintar, sense saber res d'ell (tant internament com on està guardat i en quin format).

D'aquesta forma el codi del joc no nomes queda independent de la tecnologia que s'use per a pintar en pantalla, tambe queda independent de la gestió de recursos que es faça (PNGs solts, arxiu de recursos com el Arounders, o en un array en memòria, com es faria pa la GBA o la DS).

No se si pararme a parlar de temes tan interns ací. En un principi la idea era parlar dels jocs, tot lo internament que fera falta, pero sense parar-se a mirar l'implementació interna de les funcionalitats satèl·lit (gràfics, música, teclat...). Ho vaig decidir així perque vaig suposar que vos resultaria un rollo. Però potser sí vos interesa una explicacioneta de com fer gràfics 2D amb una API 3D com es OpenGL.

No se, si vos interessa ho dieu i escric algo. Sino, pos pillareu la classe ja implementada i a programar JailGames ;-)

dimecres, 18 de març del 2009

El Patman Original

Poc sabieu de l'existència del Patman. Va ser un projecte que vam començar JailDesigner i jo durant unes festes de Pascua, cada u desde sa casa, comunicant-se per IRC, si no recorde mal. El joc anava a ser un poc tribut al Batman de Jon Ritman, pero a interpretació lliure. El joc es deia "Patman i estos".


He de dir que vam ser molt ambiciosos, i també he de dir que, si no fora per desanim i falta de temps, el projecte anava molt be. Vam anar desenvolupant el joc a l'hora junt amb el seu editor, potser l'editor més potent i complet que mai he escrit. Es una alegria vore que encara funciona, i encara tinc el codi font. Aixó si, els dos projectes estaven escrits en Delphi.


La història del joc era la següent: Patman salva la ciutat per milèsima vegada. Per a celebrar-ho se'n va de festa amb els amics i pilla una castanya monumental. Quan desperta al dia següent es dona compte que anit es va comprar una mansió enorme i ara no sap com eixir de ella. Per a empitjorar-ho, te una resaca de por, així que mentres busca l'eixida tindrà que buscar també aspirines per a aguantar.

La mansió es distribuïa en diverses zones: Dormitori, Salons, Cuina, Sotano, Desvan.., amb un montó d'habitacions per zona. Ací podeu vore alguns documents originals amb el disseny de algunes zones.




Aquest joc te mes tiles fets que tots els jailgames junts, com podreu vore ara després en els shots del joc.

El joc no estava exent de problemes. Un error de calcul a l'hora de triar el tamany dels tiles ens va prohibir usar certes optimitzacions, lo qual em va desanimar un poc (que rabia!) ja que, amb tants grafics fets, no anavem a començar de zero. Per altra part, l'animació de Patman no m'agradava, i vaig estar provant diferents sprites per al personatge. Ací baix podeu vore el original, un super currat que vaig fer despres (el vaig descartar perque era massa currat per al tipo de joc) i altre diferent que vaig fer molt mes avant, quan el desenvolupament del joc ja estava mort.


I ara vos deixe un montó de escrinxots del joc en marxa:

Dormitori:


Hall:


Cuina:


Patio:


Torre:


Desvan:


Sótano:


Catacombes:


El Patman que estic fent ara no es este perque espere que algún dia el JailDesigner i jo pugam continuar aquest joc.

PD: Vos propose als demes que averigueu, dels shots de dalt, quí s'encarregà de fer cada zona (be clar, excepte la cuina, que com vaig firmar el disseny pos ja ho sabeu ;-)

dimarts, 17 de març del 2009

Patman en pijama

En primer lloc, parlar un poc de que va el joc. Els que haveu jugat al Batman ja ho sabeu mes o menys. Les modificacions son mínimes. Per tant, no es la mateixa història del Patman que començarem JDes i jo.

Patman, després d'una de les seues festotes, te una resaca de por. Anit es va deixar la porta de la PatCova oberta i li han entrat tota clase de bitxos i coses rares. Per si fora poc, quan va arrivar es va anar llevant el traje pel camí i ara ha de trobar cada part del seu traje (guants, botes, cinturó i capa), dispersat per la BatCova.

Per suposat, també s'ha deixat les seues càpsules de poder tirades per ahí (al prendre una càpsula Patman tindrà poders especials durant un curt periode de temps (valocitat, força, altura i immunitat).

El que es pitjor, els bitxos que se li han colat li han desmontat la BatMoto i desperdigat les peces per ahí (Roda de davant, roda de darrere, motor, depòsit, manillar i tubo d'escape).

Ara Patman no te mes remei que recorrer la BatCova evitant als bitxos i recuperant les parts del seu traje, així com les parts de la BatMoto, si es que vol arrivar a temps a altra festota.

Patman, segons les parts del traje que ha recuperat, tindrà un aspecte diferent, com es pot vore a la imatge de baix.


Cada part del traje li proporciona a Patman una habilitat:
- Botes: Permeten a Patman botar
- Guants: Permeten a Patman agafar objectes (nomes dins de la habitació)
- Cinturó: Permet a Patman controlar la direcció cap on va mentres està en l'aire
- Capa: Ralentitza les caigudes de Patman

Les càpsules que pot arreplegar també li propocionen, temporalment, poders especials:
- Velocitat: Permet a Patman correr el doble de rapid
- Altura: Permet a Patman botar el doble de alt
- Força: Permet a Patman arrastrar varios objectes en línea
- Immunitat: Res li farà mal a Patman

¿Que vos pareix?

En segón lloc, JDes ha dit que no entenia molt be el que vaig comentar ahir. Vaig a intentar il·lustrar-ho amb un shot del Batman.


En aquest shot podem vore el piso, tilejat de negre i roig, i les pareds, mes o menys rojes, del fondo. Eixa es la part estàtica.

Després podem vore les portes. Les portes tenen un tractament especial i ja parlaré de elles més avant.

Per últim, Batman, el malo eixe, i les caixes o cubs que es veuen tot son objectes. La diferencia entre el malo i un cub es que el malo tindrà activat el flag de animació, de moviment nord-sud, de respectar orientació, força=3 i resistencia=2, mentres que les caixes no tindràn activat ningún d'eixos flags, força=0 i resistencia=2 (mes vant parle dels objectes i les seues propietats i flags)

Be, darrere del malo també està la bolsa de Batman (equivalent als guants de Patman), que no tindrà flags activats, tipus=guants, força=0 i resistència=2.

Cada objecte té unes propietats:
- Tile: el tile (o primer tile) en el bitmap de tiles que mostrarà el objecte
- X, Y, Z: Les coordenades del objecte
- Tipus: normal, traje-guants, traje-botes, traje-cinturó, traje-capa, item-velocitat, item-força, item-altura, item-immunitat, patmoto-roda1, patmoto-roda2, patmoto-motor, patmoto-deposit, patmoto-manillar i patmoto-tubo
- Movilitat: ninguna, est-oest, nord-sud, clockwise, counter-clockwise, random
- Força: 0 (no pot espentar res), 1 (pot espentar objectes normals), 2 (pot espentar tots els objectes que no siguen inamovibles) i 3 (mata)
- Resistencia: 0 i 1 (qualsevol pot espentarlo, diriem que es un objecte normal), 2 (nomes el pot espentar la gravetat, els ascensors i patman amb el poder de força) i 3 (objecte inamovible, res el pot menejar)
- Flag desapareix: Al tocar-lo, desapareix (tipic taulell de xafar i botar rapid abans que desaparega). Torna a apareixer al tornar a entrar a la pantalla.
- Flag Invisible: Pos eso, no se veu.
- Flag Animat: El objecte no mostra un tile nomes, sino una succesió de 3 tiles.
- Flag Respecta orientació: Aquest flag nomes val si el flag "animat" està activat. Si "respecta orientacio" no està activat, el objecte farà un loop entre tres tiles (el tile al que apunta i els dos següents) en la sucesió 1-2-3-1-2-3-1... Si sí que està activat, la successió serà 1-2-3-2-1-2-3-2... simulant una animació de caminar. A més, depenent de la orientació canviarà la sucesió de tiles (3 per orientació).

Aquest post ja es molt gran. Si tinc temps mes tard parlaré de l'estructura de les pantalles.

United Colors Of Patman

Ja estem com sempre... de quin color faig a Patman? Que opineu? (encara que siga algun color o combinació que no estiga en la captura)

dilluns, 16 de març del 2009

Disenyant el Patman

Com ja vaig dir, este Patman va a ser un clon del Batman de Jon Ritman, així que vaig a intentar que el saboret que done al jugarlo siga similar al del joc. No obstant, tindrà les seues similituds i diferències. El gràfics, por suposat, seràn 100% JailGame Style. Respecte a la jugabilitat, vull que siga més facil i, sobre tot, menys frustrant de jugar. Ja vorem com ajustar la jugabilitat durant la fase beta.

Respecte a la implementació, es pareixerà prou a com era el Batman. No hi haurà tiles isomètrics com en el Patman que començarem JailDesigner i jo. L'única part tilejada i, a més, estàtica, serà la pared del fondo i el piso.


Serà una graella de 8x8x4 blocs, sent el bloc unitari el que podeu vore en roig pel mig de la captura de dalt. Aquesta graella es podrà reduïr a menys de 8x8 (4x6 per exemple) en tamanys sempre parells, ja que cada porta ocupa 2 tiles i sempre ha de estar centrada (lo qual vol dir que redueix les posibilitats de portes a una per pared i sempre al mig, igual que el Batman).

A més, cada bloc unitari (que al final, internament, no valdrà per a res) es subdivideix en 4x4x2 divisions, el que fa un total de 32x32x8 unitats mínimes.

Tota la resta de coses que es vegen seràn, per dir-ho d'alguna forma, objectes. Els objectes, segons les seues propietats, podràn ser inamovibles, arrastrables, mòvils, "matadors", etc...

La forma d'implementar el pintat en ordre dels objectes serà mantenint una llista enllaçada del objecte que està més al fondo al objecte que està mes prop. Aquest ordre realment serà primer ordenarlos per l'eix NS (nord-sud), després per l'eix EW (est-oest) i per últim per l'eix UD (dalt-baix). Per a ser sincers, el que realment importa es el UD, els altres dos podría mirar un primer o l'altre, pero tenía que decidir.


Per a reaordenarlos, no usaré quicksort ni algorismes d'eixe tipus, ja que son poc optims per a llistes quasi ordenades, com es el cas. El que faré serà vore si estic fent un moviment que em faria anar cap amunt o cap avall en la llista ordenada, i començar a comparar posicions amb els objectes en el sentit que toque. Així, el cost en el pitjor cas es n, i en el promedi n/2. En realitat, el cost normalment es molt baix, ja que en cada moviment lo normal es que li guanyes la posició als mes propers, no al mens llunyà. La reordenació es farà cada vegada que un objecte es menetje (es reordena eixe objecte nomes).

Aquesta implementació es similar a la que usà Jon Ritman en el seu Batman, amb l'optimització de nomes mirar els objectes del costat de la llista que m'afecten, en compte de tots.

Respecte a la interacció entre objectes, també usaré la tècnica del senyor Ritman, pero amb alguns refinaments. Quan un objecte colisione amb altre, l'"espenta". Un objete, al ser espentant, comprova si la força de l'espenta es major que la seua resistencia a moures involuntariament. Si ho es, comprova si eixe moviment li causarà una colisió amb altre objecte i, en cas afirmatiu, també l'espenta, pero amb una força d'espenta igual a la original menys la seua resistència.

Açò junt amb una força d'espenta "universal" per a tots els objectes en sentit cap avall (la gravetat) conforma un sistema de físiques símple pero efectiu.

Jugant amb el sistema d'espentes i resistencies puc crear objectes inamovibles (alta resistència), objectes que pots arrastrar de un en un pero no varios (resistencia = força de patman), ascensors (objectes amb una resistència major que la força de la gravetat, i amb una força major que la resistencia dels demes objectes), i objectes que maten, com per exemple enemics (amb una força altísima, que s'interpretarà internament com la mort).

Estic viu!

Be, duc 2 o 3 dies sense escriure, es que estava malet. Deia, "bah, demà estaré millor, ja escriure un bon post..." i al dia següent: "bah, demà estaré millor...".

Pese a no haver escrit, he estat pensant i repensant i provant cosetes. Al llarg de hui escriuré dos o tres posts sobre diferents coses. Parlaré del Bryndiana i les seues animacions, del Patman i el sistema de mapes i de l'editor d'animacions.

Pos aixó, si hui ja no torneu a mirar el blog, que sapigau que demà tindreu bona cosa que llegir.

dijous, 12 de març del 2009

BryndianED

Hui he començat amb el desenvolupament del BryndianED. He començat mirant-me els mapes.

En un principi vaig a reutilitzar els tiles del Prince of Persia. Com tenia a mà tots els mapes, he fet un programeta que passant-li un bitmap t'agafa tots els tiles diferents i els arregla en un nou bitmap. M'he trobat amb la sorpresa de que em trau una animalada de tiles. He provat amb diferents tamanys de tile i sempre igual (escalant el resultat, clar). Al final, ho he mirat a nivell de pixel i he vist que l'unic patró que puc trobar es amb tiles de 32x63. Peazo tamany raro. Clar, en una pantalla del PoP hi ha 3 altures, i si et fixes es veu tant el piso de la altura 4 (per a poder trepar) com el de la altura 1. Per a aconseguir aixó, o tens un semi-tile per ahí, o perds un pixel per altura, que es el que pareix que va fer Broderbund. Al final he agafat els tiles i els he retocat a mà per a que tinguen 1 pixel més, així tinc tiles amb un tamany més normal.

Després m'he ficat amb l'editor. Aquesta vegada no vull que siga un editor de tiles a baix nivell, sino un editor més boniquet en el que fiques blocs logics sencers (buit, piso, paret, pilars...) i després internament ja se monta en tiles. Tenint un editor a més alt nivell em premetrà fer mapes like rosquilletes, així que crec que val la pena el temps que he usat fent-lo.


Encara no està acavat, espere demà poder pegar-li una bona espenta que el deixe ja amb la suficient funcionalitat com per a servir per a fer mapes amb que provar el codi del joc.

dimecres, 11 de març del 2009

New JailGames

Be, en vista de la massiva afluència de comentaris a l'anterior post, he decidit dur dos projectes: Bryndiana Juan, a petició del MasterJail, i PatMan, perque li tinc ganueles.

En el cas del Bryndiana, serà molt paregut al Prince of Persia. De fet, l'animació del personatge la vaig a calcar, no tinc ganes de currarme una animació tan completa desde zero. Serà un prince of persia amb saboret jailer.

En el cas del PatMan, va a ser prou mes paregut al Batman que el Patman que començarem el JailDesigner i jo.

Bàsicament, el que tinc ganes es de programar jailgames, no de pegarme el curro amb gràfics i històries, per això no vaig a desviar-me molt dels jocs originals.

Per altra part, amb aquestos dos projectes aniré fent un seguiment major des d'ací, parlant més de la estructura interna dels jocs i releasant versions beta cada x temps.

Respecte a la expansió del Arounders, no tinc presa. Duc un mes amb Arounders i tinc ganes de desintoxicar-me un poc.

dimarts, 10 de març del 2009

Futur JailGame

Be, com ja vaig dir ahir, el cuerpo me pide fer altre jailgame. Ací vos fique als candidats:

Patman
Basat en: Batman de Ocean
Patman va ser un projecte que començarem entre el JailDesigner i jo. Vam fer enormes progresos, amb una animalada de grafics i pantalles fetes, pero problemes de base amb el codi que vaig fer i una pobre jugabilitat ens van desanimar i es quedà sense releasar. Quasi el començaria desde zero, refent els gràfics amb la persepctiva corregida, millorant les animacions i revisant molt la jugabilitat. Podría aprofitar el disseny dels mons que ferem i les músiques, encara que igual m'ho repense i el planteje més paregut al batman original.

Job's Quest
Basat en: The Wall
No crec que molts conegau este joc, pero a mi me viciaba prou en la seua època. Un alien ha de anar per un pasillo esquivant les trampes que es va trobant sense caure a l'aigua. La versió seria prou pareguda pero amb Job (el bitxo de Pepe el Pintor) de protagonista.

Fray Botijo
Basat en: Teenage Mutant Ninja Turtles
Encara que este joc, en un principi, anava a estar basat en La Abadía del Crimen, prompte me'l vaig replantejar i vaig decidir fer-lo més com el de les tortugues ninja que jo jugava en el meu primer PC.

Bryndiana Juan
Basat en: Prince of Persia
D'aquest joc vaig traure un previo el día del meu aniversari fa la tira de anys, després ja no vaig continuar amb ell.

JailBattle, Usufondo: Beyond the Jail, nanoMachines, SpeedJailers, CalculinDoom o les mil versions de sequèla del AEE en principi queden fora, cada una per diferents raons.

¿Que opineu? ¿Quin jailgame vos agradaria vore fet (inclus si no està en la llista)?

dilluns, 9 de març del 2009

Monos i cutres

Ie, que li donen pel cul al Qt. No se en que estaven pensant quan el disenyaren pero la corva d'aprenentagte es absurdament alta. No vull dir que siga molt complicat, pero es que el que et costa 4 clicks en .Net en Qt has de fer un master.

Així que continuaré fent les ferramentes en .Net. Ja he provat a executar-les desde Linux amb Mono i va de boles. Fi de la història. Si arriva un dia en que me sobre el temps, ja faré coses en Qt. Mentres el temps siga tan valuos, usaré les millors ferramentes que puga.

Per altra part, hui he provat un poc l'aspecte que tindrà la expansió del Arounders i està mes sucoseta del que esperava. No ensenyarè scrinxots fins que no tinga un bon scrinxot que ensanyar.

I que ganes de fer altra jailgame. Es que el Aroudners HD serà un curro respecte a gràfics i tal, i dubte que tinga el temps o els anims necessaris ara mateix. Així que, probablement, quan acave amb la expansió em ficaré amb altre jailgame. Tinc varios condidats. Demà vos ho comente.

diumenge, 8 de març del 2009

Relax

Be, este cap de setmana tampoc es que haja tingut molt de temps per a res, així que tampoc m'he matat per traure un rato per a sentarme ací. He pujat les versions 1.1 per a MacOSX i Linux de 64bits (sense presa, total, ningú les ha descarregat...).

També he estat llegint un poc més sobre Qt, que ja tinc ganes de passar-me a ell com a ferramenta principal per a fer aplicacions de formularis (per exemple, totes les aplicacions i editors que cree al voltant de cada joc).

Demà, si no passa res, ensenyaré alguna coseta de la expansió. Ara gonne descansar un ratet.

divendres, 6 de març del 2009

Arounders v1.1

Ja he pujat la versió 1.1 amb les correccions dels bugs i sol·licituds fetes pel JailGamer (moltes gràcies), i un parell que var dir el JailDesigner ací al blog i que he ficat jo al bug tracker. Están pujades ja les versions de Windows i Linux 32bits. Esta vesprada pujare la de Mac i Linux 64bits.

M'ha sorgit un dubte amb una sol·licitud del jailgamer. Que deu fer el botó de caminar?

- Igual que el botó dret, o siga, cancel·lar la acció actual.
- Cancel·lar la acció actual i, a més, cancel·lar la acció encuada, si hi ha. Seria una forma rápida de que el arounder camine sí o sí.

Que penseu?

Per altra part, ja he pujat el codi font de la versió 1.1.

Per últim, ja he començat el treball amb la expansió. Va quedant xuleta. Van a fer falta un parell de modificacions al codi i als mapes, pel que per a jugar a la expansió farà falta la versió 1.2 o superior del Arounders. Prompte ficaré algún shot ;-).

dimecres, 4 de març del 2009

Arounders releasat!

Ale, ja he releasat la primera versió per a Windows. Podeu descarregarla des d'ací.

Si trobeu algún poll podeu informar d'ell des d'ací. Supose que hi haurà mil, perque no l'he provat seriament, sobre tot en les sequències.

Espere pujar les versions per a Linux i Mac entre esta nit i demà. El codi font també el pujaré demà.

Be, espere que algú el jugue un poc :-)

ACTUALITZACIÓ 19:23: Ja està disponible la versió per a MacOSX. Podeu descarregarla del mateix lloc.

ACTUALITZACIÓ 07:09 del día següent: Ja està disponible la versió per a Linux de 64 bits. Podeu descarregarla del mateix lloc. La de 32 bits, si no passa res, esta vesprada.

dimarts, 3 de març del 2009

Sequències

Hui he estat debatint-me amb mi mateix sobre si fer una serie de modificacions al codi per a soportar millor les expansions i, a més, acostarme mes a com serà el codi del Arounders HD, o símplement fer lo justet i acavar el joc, i deixar tot això per al Arounders HD. Al final he decidit lo segon. I fer lo justet es traure les sequències fora del codi.

Per tant, he repensat un poc el tema de les sequències. En primer lloc, he vist que puc carregarme dos o tres clases específiques i usar el SequenceController per a tot. En segon lloc, he fet un quick & dirty editor de sequències per a que siga facil i rapid fer els guions de les sequències. Amb tot açò fet, ja he avançat algunes sequències. A aquest ritme podria tindre la Release Candidate per a Windows demà per la vesprada, la de Mac i Linux supose que per la nit.


Per altra part, he creat un compte en Google Code. Ahí deixaré el programa per a baixar-lo, a més del codi font per a qui li interese. Mola perque també te un "bug tracker", que pot resultar útil. Demà, després de l'ultima revisió de codi, pujaré la versió 1.0 i començaré a dur un control de versions (que per ara anava tot arreu).

dilluns, 2 de març del 2009

Nivells provats

Ale, ja están tots els nivells provats. La veritat es que la dificultat dels nivells es un poc aleatòria, amb nivells dificils massa prompte i nivells molt facils pel final. Al final he fet un parell de reparacions que ningú notarà. Per lo demés, els nivells es queden com estàn, facils o dificils.

Ja nomes queden les sequències, però estic pensant soltar-vos una beta ja. Total, el joc ja está complet, sols que les sequències no es veuen. Clar, depen de si hi ha demanda...

Respecte a la música, estic pensant en pasar els midis a mp3 i així me desfaig dels problemes que me donen en Mac (i probàblement en Linux). A més, així aguantarà millor el temps, ja que reproduïr midis cada vegada es més complicat en els comps de hui en dia. S'escoltaràn exàctament like el original, no dependré dels instruments midis de cada comp i me donarà menys problemes. Això sí, ocuparà prou mes espai. Pero total, que son 3Mb hui en dia? Que penseu al respecte?

Per altra part, ja he començat a disenyar el "Arounders: You killed his brothers" Expansion Pack. Ja contaré alguna coseta mes avant.

diumenge, 1 de març del 2009

No Fun!

Joer, vatja cap de setmana. L'he dedicat toalment a fer anar el Arounders en Mac i Linux. Be, en realitat a fer que vaja en Linux, perqué el divendres ja vaig deixar el de Mac funcionant, a falta de vore que li pica amb els midis.


La resta del temps l'he dedicada a instalar la Ubuntu en una imatge virtual. Una vegada fet, he provat diferents IDEs (fins ara sempre que havia fet algo de SDL en linux, usava el TextEdit i compilava a mà desde la consola). No si quin es mes perculer, si Kdevelop o Eclipse. Ja fa temps també vaig provar Anjuta. La veritat es que en ningún de tots he aconseguit compilar el joc, així que este matí, com ja estava hasta la p***a, ho he compilat desde la consola i a prendre pel cul. Com podeu vore en el screenshot del post anterior, funciona correctament... excepte que no s'escolten els midis (cosa que es culpa del propi Ubuntu, ja que no reconeix ninguna targeta de só, i em du a tindre que fer el que tenia que haver fet desde el principi, pujar un p**o comp del trastero i instalar la Ubuntu ahí), i que es penja al acavar un nivell. No se perquè serà aixó, pero possiblement tinga algo que vore amb la música. Fins que no ho prove millor no em preocupa massa. El cas es que inclus des de la imatge virtual es podia jugar be.

En otro orden de cosas, el Mighty Mouse de Mac, es el més bonico i per a 4 gallonades va be, pero es una p**a basura per a treballar o jugar. Gonne ara mateix al trastero a rescatar el meu good old Logitech. I el teclat, pos es molt millor del que esperava, crec que el vertader problema son les diferencies amb Windows/Linux. Ctrl+C, Ctrl+V... ara son Cmd+C, Cmd+V... i quasi te trenques els dits fent la extranya posició requerida per a aquestes combinacións. Per lo demés, si escrius molt de rato, sobre tot escritura de programació, avant, arrere, seleccionar, etc... acaves amb la mà feta pols, així que també gonne a rescatar el meu good old teclat Logitech. I canviaré totes les combinacions de teclat per a que siguen com Windows/Linux.

Si hui tinc temps, provaré mapes. Les proves són per vore si algún es ara imposible o algo així. Si tots son pasables, no es retocarán.

Arounders en Linux

Be, este post es nomes per ficar el xot del Arounders en la Ubuntu. Ara seguidament escriuré un post des del mac mostrant un shot de ell, i contant com ha anat tot.