tag:blogger.com,1999:blog-112021512024-03-23T19:11:07.986+01:00Digipure's weblogJuegos, móviles y Japón (todo mezcladito)Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.comBlogger1064125tag:blogger.com,1999:blog-11202151.post-89603654018579350212020-05-08T17:15:00.001+02:002020-05-08T18:33:33.745+02:00Lisp y Naughty Dog<a href="https://en.wikipedia.org/wiki/Lisp_%28programming_language%29" target="_blank">Lisp </a>es uno de los lenguajes de programación mas antiguos (el segundo de alto nivel, solo posterior a Fortran) y hoy en día, en diferentes dialectos o inspirando otros lenguajes, aun sigue bastante vivo. Sin embargo, a pesar de que una buena implementación es lo bastante compacta para ser un lenguaje de script para juegos, a poca gente se le ocurriría usarlo como lenguaje principal en el mundo de los videojuegos. Si exceptuamos a Naughty Dog, claro.<br />
<br />
<div>
Por que como <a href="https://all-things-andy-gavin.com/2011/10/25/lispings-ala-john-mccarthy/" target="_blank">Andy Gavin cuenta</a>, empezaron usando su propia versión de Lisp en el cutre clon de Mortal Kombat llamado Way of the Warrior para implementar las maquinas de estado. La cosa continuo en su siguiente saga, Crash Bandicoot, creando una versión de Lisp llamada <a href="https://en.wikipedia.org/wiki/Game_Oriented_Assembly_Lisp" target="_blank">GOOL </a>(Game Oriented Object Lisp), que usaron para scriptar el gameplay de los objetos del juego.</div>
<div>
<br /></div>
<div>
El código de GOOL esta basado en los estados de los objectos, que implementaban su jugabilidad con diferentes bloques de código. Permitía ejecutar trozos de código estilo corutina: el código marcado como ":code" se ejecuta hasta que encuentra una variante del comando "frame", que pasa el control al siguiente bloque. Por ejemplo, aquí repite una animación hasta que colisiona con algo</div>
<pre style="text-align: left;">:code (defgcode (:label play animation)
; play the animation until this object is colliding with
; another, then change states
(until (status colliding)
(play frame group animation))
(goto collided)))</pre>
<div>
<br /></div>
<div>
Dentro de los estados también permitía código ejecutado cada frame, marcándolo con ":trans". Por ejemplo, aquí rota un objecto 10 grados cada frame hasta 180.</div>
<pre style="text-align: left;">:trans (defgcode (:label turn 180)
; set the y rotation 10 degrees closer to 180 degrees
(setf roty (degseek roty (deg 180) (deg 10))))</pre>
<div>
GOOL también contaba con un sistema de eventos tan sencillo de usar como este ejemplo para colisiones en la cabeza</div>
<pre style="text-align: left;">(send event hit on the head (find the nearest object))</pre>
<div>
Vamos que si podías sobrevivir a usar LISP tenias a tu disposición un lenguaje de script muy potente para la época y la plataforma.</div>
<div>
<br /></div>
<div>
Y todo llego a un nivel mas con <a href="https://all-things-andy-gavin.com/goal-test/" target="_blank">GOAL </a>(Game Oriented Assembly Lisp) que se usó en la saga de Jak & Daxter. En este caso nada mas y nada menos que el 98% del código del juego estaba escrito en esta variante de Lisp. Esto les llevo a <a href="https://www.gamasutra.com/view/feature/131394/postmortem_naughty_dogs_jak_and_.php?page=2" target="_blank">unos cuantos quebraderos de cabeza</a> a la hora de encontrar programadores, ya que en el mundo de los videojuegos es relativamente fácil encontrar expertos en C++, pero es muy difícil reclutar a expertos en Lisp. No hay mucha información mas sobre GOAL, a parte de que esta implementado con Allegro CL y que, como su nombre indica, se compila directamente en assembler para la PS2.</div>
<div>
<br /></div>
<div>
Y vaya, parece que ND estaba muy augusto con su engine hasta que la unión con Sony les obligo a programar en C++, para que pudieran compartir código con otros equipos dentro de la compañía japonesa. Eso si, aunque ya no sea su lenguaje principal, se sigue usando como lenguaje de script, como demuestra <a href="https://www.gameenginebook.com/resources/gdc09-statescripting-uncharted2.pdf" target="_blank">esta presentación sobre Uncharted 2</a> en la que se ve que aun siguen usando una nueva versión de Lisp para scriptar partes del juego.</div>
Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-50913951005310113782020-02-02T16:01:00.001+01:002020-02-02T16:02:01.607+01:00"The Curse of the Red Forest" ya disponible!<div align="left">
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoFz0Yb5ZEaU0uC5L8LfLf4RsG3BZzNuypqB1W5cq3IvzAj8jnC50tJhZcWIydk7QWYiJ5sjgTjsRg8qpXfLjH8L7OUdLcHozLKXBLGRCuMJtiVETvvUrjbma9e8iximT-WGcypA/s1600/Imagen+destacada.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="1024" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoFz0Yb5ZEaU0uC5L8LfLf4RsG3BZzNuypqB1W5cq3IvzAj8jnC50tJhZcWIydk7QWYiJ5sjgTjsRg8qpXfLjH8L7OUdLcHozLKXBLGRCuMJtiVETvvUrjbma9e8iximT-WGcypA/s400/Imagen+destacada.jpg" width="400" /></a></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
Con "unos arreglos" he conseguido terminar y <a href="https://play.google.com/store/apps/details?id=com.digipure.redforest" target="_blank">publicar</a> "The Curse of the Red Forest", un juego en el que estuve trabajando hace años y que tuve que dejar congelado por falta tiempo. Vamos a dar un repaso a su desarrollo.</div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Comencé a usar Unity haya por 2011</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> cuando decidí dedicar la semana de vacaciones de primavera</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> la Golden Week</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> a realizar un pequeño juego </span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">(</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"><a href="http://www.digipure.jp/cms/?page_id=167" target="_blank">un clon de Diablo</a></span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">)</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> durante 7 días para aprender como usar el engine.</span></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTG4gHioll9pLNmlrKNqrVgaVw_esjSQ50ZTCEU31VxWA8ONTqVR5apvo0aLlEcZigEP679WaQgoaUwlkg9ZX5LH8IoofPhv4suKjJoBfi8WSBhh1PcTIl4wRXIR4Mcfmpg81DNQ/s1600/rf1+2014-03-13+18-07-22-97-0013.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="1280" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTG4gHioll9pLNmlrKNqrVgaVw_esjSQ50ZTCEU31VxWA8ONTqVR5apvo0aLlEcZigEP679WaQgoaUwlkg9ZX5LH8IoofPhv4suKjJoBfi8WSBhh1PcTIl4wRXIR4Mcfmpg81DNQ/s200/rf1+2014-03-13+18-07-22-97-0013.png" width="200" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwAhdmFXRJNOdepuCbVNurOzf-mgj07wW-LPlHTS7PSW3r3Nqb4lUsNoW2qQA10XCBLimP4yhMQrOGI-NwLGB0weFk4HYyJeytd3fI8tE4LdRjz2O79EjcRsgE_G2w3zSH1UOJUw/s1600/2014-01-27+01.44.05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="640" data-original-width="1136" height="112" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgwAhdmFXRJNOdepuCbVNurOzf-mgj07wW-LPlHTS7PSW3r3Nqb4lUsNoW2qQA10XCBLimP4yhMQrOGI-NwLGB0weFk4HYyJeytd3fI8tE4LdRjz2O79EjcRsgE_G2w3zSH1UOJUw/s200/2014-01-27+01.44.05.png" width="200" /></a></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Después de algún proyecto relativamente pequeño en Unity</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> me decidí a empezar uno mas grande</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> un RPG en primera persona con combates por turnos y con bastante historia a lo visual novel </span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">(</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">¡ya tenia el engine hecho!</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">)</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">. Después de hacer unas pruebas </span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">(</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">que convertí en <a href="https://www.youtube.com/watch?v=x67Tj0V8yZg" target="_blank">tutoriales para YouTube</a></span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">)</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> me decidí embarcarme en este The Curse of the Red Forest como proyecto personal. Sería un juego para móviles y no demasiado largo a pesar de ser n RPG. Mas o menos hasta 2014 el desarrollo avanzaba bastante bien: el juego tenia toda la base terminada y siete de los ocho niveles estaban acabados o casi. El combate también era totalmente funcional</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> pero faltaba crear mas skills para protagonistas y enemigos</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> ademas de la ardua tarea de balancear adecuadamente las subidas de nivel con los enemigos que deberían enfrentar los jugadores. Este trailer muestra bastante bien lo que ya tenia terminado para entonces.</span><br />
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"><br /></span>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen="" class="YOUTUBE-iframe-video" data-thumbnail-src="https://i.ytimg.com/vi/tbu2vBj9OBI/0.jpg" frameborder="0" height="266" src="https://www.youtube.com/embed/tbu2vBj9OBI?feature=player_embedded" width="320"></iframe></div>
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"><br /></span></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Sin embargo alrededor de 2014 muchas cosas cambian en mi vida y ya no puedo dedicar tanto tiempo a proyectos personales. Así que decido </span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">“</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">congelar</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">”</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> a Red Forest y seguir avanzando con <a href="https://www.youtube.com/watch?v=QUTSR5YeOrs" target="_blank">Heroes Trials</a></span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> un proyecto en equipo dentro de <a href="http://www.shinyuden.com/" target="_blank">Shinyuden</a>. Después de muchos sufrimientos</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> retrasos y recortes Heroes Trials al final ve la luz en 2018 y puedo recuperar mis proyectos antiguos.</span></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Pero mucho tiempo ha pasado desde que congele Red Forest... Muchos componentes del juego están anticuados. Incluso una parte importante ya no funciona en la versión de 2019 de Unity. A parte</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> durante estos casi 5 años de pausa he tenido la oportunidad de participar en varios RPG por turnos en mi trabajo de día</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> incluso he tenido que realizar el diseño para implementar el sistema de combate por turnos en cierto proyecto. Después de tanto combate por turnos el cuerpo me pedía centrarme en algún tipo de juego con mas acción</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> al menos en mis proyectos personales.</span></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Cierta día examino el estado del Red Forest y hago una lista de cosas por hacer para poder sacarlo</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> junto con una estimación del tiempo para completarlas. Después de barajar varias alternativas y dado que el juego era completable de principio a fin con excepción de los combates</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> saco las tijeras y empiezo a recortar: todo el combate fuera</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> la progresión</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> las skills... Red Forest se había convertido en un juego de exploración de laberintos con historia </span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">(</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">con solo unos pequeños reajustes para quitar las menciones a los combates que ya no están</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">)</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">.</span></div>
<div data-mce-style="margin-top: 1em; margin-bottom: 1em;" style="border: 0px; color: #383838; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, Cantarell, "Fira Sans", "Droid Sans", "Helvetica Neue", sans-serif; font-size: 14px; line-height: 1.57143em; margin: 1em 0px; padding: 0px;">
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">Y ese es el juego que ya esta disponible en la <a href="https://play.google.com/store/apps/details?id=com.digipure.redforest" target="_blank">Play Store</a>. Si Red Forest era ya un juego corto en su origen</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> ahora lo es más. Pero es un juego terminado y lanzado</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;">,</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> cosas que dudo que hubiera podido hacer si hubiera seguido con el plan original.</span><span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"> </span><br />
<span data-mce-style="-en-paragraph: true;" style="line-height: 1.57143em;"><br /></span></div>
</div>
Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-50201234212496666762016-04-22T17:53:00.002+02:002016-04-28T18:36:05.652+02:00Como usar Lua como sistema multi-tarea para cutscenes o IA en Unity<br clear="none" />
Trabajando en la industria del videojuego, llevo ya unos cuantos años usando sistemas de scripts empotrados en juegos para controlar las cutscenes, la IA y otros elementos varios del juego.<br />
<br clear="none" />
Menos algunas excepciones eran sistemas de script muy sencillos y específicos para ciertas operaciones o para maquinas poco potentes, así que principalmente he estado usando sistemas propios creados a medida de la tareas a realizar (bueno, también cree un interprete de Forth, pero este fue mas como un reto que otra cosa).<br />
<br clear="none" />
Sin embargo el tamaño de los juegos en los que estoy metido, y por tanto la variedad, complejidad y extension de los scripts a utilizar, ha crecido hasta tal punto que ya merecía la penar utilizar un lenguaje empotrado de uso general como Lua.<br />
<br />
Usando Lua perdemos eficiencia y la capacidad de personalización de los scripts a medida, pero a cambio ganamos un lenguaje de programación completo, ademas de contar con muchas librerías y soporte de una comunidad.<br />
<br clear="none" />
Y el origen de este articulo viene precisamente de no poder personalizar Lua fácilmente para ejecutar varios scripts a la vez a modo de multi-tarea utilizando los wrappers en C# para Unity.<br />
Tal vez en juegos de aventura como <a href="https://play.google.com/store/apps/details?id=com.shinyuden.tsn&hl=en" target="_blank">Tokyo Super Night</a> o incluso RPGs por turnos como <a href="http://www.digipure.jp/cms/?page_id=223" target="_blank">Curse of the Red Forest</a> es posible tener un solo hilo de ejecución. Pero normalmente quieres tener varios: por ejemplo uno por cada IA activa, otro para cut-scenes, unos cuantos para gestionar triggers, etc..<br />
<br />
Vamos a imaginar una situación mas concreta, una cutscene de un JRPG en la que dos personajes se mueven hasta un punto y inician una conversación cuando ambos han llegado. Podríamos escribirlo así:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">function my_cutscene()<br /> move_npc(npc1,{120,120,0})<br /> move_npc(npc2,{120,100,0})<br /> say(npc1, "Hola npc2!")<br /> say(npc2, "Hola npc1!")<br /> end</span><br />
<div>
<br />
<div>
A primera vista es un código fácil de entender, ¿no? El problema es que no estamos sincronizando el movimiento de los NPCs con el dialogo para que empiece solo cuando ambos hayan llegado al punto de destino.<br />
<br />
Simplemente no podemos bloquear la ejecución en move_npc, porque impediría ejecutarse a la siguiente instrucción (y cualquier otro script que haya activo), pero si podemos esperar a que terminen de moverse con un comando nuevo:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace; font-size: x-small;">move_npc(npc1,{120,120,0})<br /> move_npc(npc2,{120,100,0})<br /> -- El script parara de ejecutarse hasta que todos los personajes se paren.<br /> say(npc1, "Hola npc2!")<br /> say(npc2, "Hola npc1!")<br />wait_move()</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;"><br clear="none" /></span>
Este tipo de scripts funcionaria si solo tuviéramos este script en ejecución. Y aun así, el wrapper de Lua para Unity que usábamos no soportaba pausar la ejecución de la VM de Lua a mitad de un script para retomarla luego (o al menos yo no encontré como hacerlo), así que este método tampoco funcionaba.<br />
<br />
Lo que hacíamos para ejecutar scripts con "pausa" para sincronizar era aprovechar que nuestro engine para juegos de aventura soportaba bloques de codigo Lua entre texto de diálogos, al estilo de los scripts para visual novels:</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">%{</span></div>
<div>
<span style="font-size: xx-small;"><span style="font-family: "courier new" , "courier" , monospace;"> move_npc(npc1,{120,120,0})<br /> move_npc(npc2,{120,100,0})<br /> wait_to_finish_all_moves()<br /> }%<br /> %{ say(npc1) }% Hola npc2!<br /> %{ say(npc2) }% Hola npc1!</span></span><br />
</div>
<div>
En nuestros scripts el código Lua va entre %{ }% y cada bloque se ejecuta entero, pero se pausa para mostrar el texto entre bloques en pantalla (si lo hay) y continua con el siguiente bloque. Esta solución un poco cutre, nos valía para las pocas sincronizaciones que teníamos en juegos de aventura o por turnos. Pero para <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=478256041" target="_blank">Adel</a> necesitábamos una sincronizacion mas completa.<br />
<br clear="none" />
En principio deje aparcado como mejorar este sistema de scripts, pero un día, revisitando la página del nuevo juego de uno de los maestros del videojuego, Ron Gilbert, encontré una posible solución. En <a href="https://blog.thimbleweedpark.com/scripting_test" target="_blank">este articulo</a>, se explicaba como usar las co-rutinas que incluyen algunos lenguajes de programación para simular multi-tarea, al estilo de como lo hacia el mítico <a href="http://wiki.scummvm.org/index.php/SCUMM/Technical_Reference" target="_blank">SCUMM</a>. Y aquí es cuando descubrí que Lua cuenta con <a href="http://www.lua.org/pil/9.1.html" target="_blank">co-rutinas</a> en su funciones principales y, por lo tanto, lo podía utilizar para simular multi-tarea dentro de los scripts. Esto no es para nada nuevo, ya <a href="http://blog.brainasylum.com/coroutines-scheduler-in-lua/" target="_blank">existen scripts</a> para gestionar las tareas con subrutinas. Y investigando un poco, usar co-rutinas para juegos, incluso triple-A, parece ser algo muy común: las <a href="http://www.slideshare.net/naughty_dog/statebased-scripting-in-uncharted-2-among-thieves" target="_blank">saga Uncharted</a> (con su propio lenguaje de script basado en Lisp) o <a href="http://twvideo01.ubm-us.net/o1/vault/gdc10/slides/Shaw_Johnathan_LuaScripting_LuaInFableII.pdf" target="_blank">Fable II</a> y III (usando Lua, como es nuestro caso).<br />
<br clear="none" />
Ninguna de los scripts que gestionaban de multi-tarea en Lua con co-rutinas que encontré en la red me convenció, así que decidí crear el mio propio a medida (ques lo que podéis descargar junto a un proyecto de ejemplo de Unity mas abajo).<br />
<br clear="none" />
Pero llegados a este punto, ¿que son exactamente las co-rutinas? Si programáis en Unity seguramente ya las habréis visto usadas en C#. Son métodos o funciones ejecutados paralelamente a otros programas, pero no a la vez y no con cambio automático de tarea. Así una co-rutina debe dejar paso a los demás hilos de ejecución normalmente con el un comando <i>yield</i> y volverá a ejecutarse después de un tiempo establecido o cuando lo despierte otro hilo. Aunque nunca sera tan optimo cono usar los threads del sistema, usar co-rutinas nos libra de muchos de los problemas de programar en paralelo usando threads, al saber exactamente cuando vamos a pasar el control a otro hilo, y ademas nos permite tener muchísimos mas hilos de ejecución (tareas en nuestro caso) de los que permiten los thread del Kernel.<br />
<br clear="none" />
La pequeña librería que hice permite ejecutar varias tareas, pararlas y pausarlas por un tiempo o hasta que se genere una señal o simplemente por un frame (para recordar al mítico DIV, que contaba también con el mismo tipo de multi-tarea hace ya casi 20 años).<br />
<br />
Creo que todo queda mas claro aplicándolo al ejemplo del principio:<br />
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">function my_cutscene()<br /> -- Iniciamos una tarea para mover a cada personaje<br /> Task:start("move_mycutscene",move_npc,npc1,{120,120,0})<br /> Task:start("move_mycutscene",move_npc,npc1,{120,120,0})<br /> -- Mientras no ternminen, esperamos<br /> while Task:alive("move_mycutscene") do<br /> Task:frame()<br /> end<br /> -- Mostramos el dialogo<br /> say(npc1, "Hola npc2!")<br /> say(npc2, "Hola npc1!")<br /> end</span></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace; font-size: xx-small;">--Aqui iniciamos la cutscene<br /> Task:start("cutscene",my_cutscene)</span></div>
<div>
<span style="font-family: "helvetica neue light" , , "helvetica" , "arial" , sans-serif;"><br /></span></div>
<div>
<span style="font-family: "helvetica neue light" , , "helvetica" , "arial" , sans-serif;">Y de paso la función say también utiliza el sistema de tareas para esperar a que se muestra un mensaje antes de continuar:</span></div>
<div>
<div>
<br />
<span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;">function say(npc_id,text)<br /> -- La parte en Unity mostrara el mensaje con la cara </span></span><br />
<span style="font-size: x-small;"><span style="font-family: "courier new" , "courier" , monospace;"> -- del personaje<br /> game.say(npc_id,text)<br /> -- Y esa parte en Unity también envía siempre a la señal "end-dialog" cuando<br /> -- acaba de mostrar el texto, así que la esperamos<br /><br /> Task:wait_signal("end-dialog")<br /> end</span></span></div>
<div>
<br /></div>
<div>
Y ya tenemos nuestro sistema multi-tarea para cutscenes, IA y lo que necesitemos. Este ejemplo es muy sencillo, pero imaginad que hasta la saga Uncharted ejecutaría<span style="font-family: "helvetica neue light" , , "helvetica" , "arial" , sans-serif;"> un script parecido cada vez que un NPC acompañante se para a esperarte antes de continuar la escalada.</span></div>
<div>
<br clear="none" />
En el link de abajo, tenéis un ejemplo prestado del articulo que me inspiro a crear este sistema, implementado con un intérprete de Lua, mi mini-librería y unos gráficos de <a href="http://opengameart.org/" target="_blank">opengameart.org</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9p2CjQ3GRhtuNDm1hPRP95Cqbe734QfjjjRE5xLM2OoAomr4LdpocbIzGX2cybs-CSFF3dZQDiIbSLNa5emvcJGxiSr4O3ZbtFC_N16spXW7NkmAb9j5XXuSxT8spT9xMkPrU7Q/s1600/unity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9p2CjQ3GRhtuNDm1hPRP95Cqbe734QfjjjRE5xLM2OoAomr4LdpocbIzGX2cybs-CSFF3dZQDiIbSLNa5emvcJGxiSr4O3ZbtFC_N16spXW7NkmAb9j5XXuSxT8spT9xMkPrU7Q/s400/unity.png" width="400" /></a></div>
<br />
<br />
<a href="https://mega.nz/#!PRsH0TqD!akOxqTUATVzCepZ3iwOOcv1NAPbfXAfppINDg3u33bs" target="_blank">Descarga</a><br />
<br />
No soy un experto en Lua y es la primera vez que trabajo con este tipo de sub-rutinas, así que cualquier reporte de bugs, posibles mejoras o comentario sobre este ejemplo serán bien recibidas.</div>
</div>
</div>
Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-73353923133616476432015-04-28T09:05:00.001+02:002020-01-28T17:01:49.412+01:00Primeras impresiones de Castlevania Mirror of Fate<iframe allowfullscreen="" frameborder="0" height="200" scrolling="no" src="https://www.ivoox.com/player_ej_4642314_2_1.html?data=lZuhlJiVeI6ZmKiakpqJd6KnmJKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRlNPdzsrfw9iPrc7k08rgy9TSqdSfxcqYpcbXuM3Z18bby8aPkcrm09TfjdTKb6fV1cqah5ynccXdyM7d19fJcYarpJKh&" width="100%"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-54069262906253378782015-04-02T08:50:00.001+02:002020-01-28T17:05:15.225+01:00Continuando las impresiones de Dragon Age Inquisition<iframe width="100%" height="200" frameborder="0" allowfullscreen="" scrolling="no" src="https://www.ivoox.com/player_ej_4213443_2_1.html?data=lZeelZmYd46ZmKiakpiJd6KolJKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRh9Di1c7b18bSqNCfzcbgjdXWrc7Z08bgjc7RtNPZ1M7c0MrXb8XZjKnfw8zTsoy1yMqYq9PVuY6ZmKiaxs7LrdHp08qah5yncZU.&"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-76495427487901865162015-03-25T07:30:00.001+01:002020-01-28T17:03:37.816+01:00Mis divagaciones sobre lo ocurrido con Konami y Kojima Productions<iframe width="100%" height="200" frameborder="0" allowfullscreen="" scrolling="no" src="https://www.ivoox.com/player_ej_4307116_2_1.html?data=lZidmZaVeo6ZmKiakpuJd6KokpKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRkcrnjMnW2MbLpcTd0NPS1ZDXs8PmxpDZ0ZDTp9bm087R0ZDHs8-frNTbw9LNb9qfrNTXy9LFb46ZmKiaxs7LrdHp08qah5yncZU.&"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-11953643132211753922015-03-16T08:31:00.001+01:002020-01-28T17:04:23.361+01:00Impresiones a las 4 horas de Dragon Age Inquisition<iframe width="100%" height="200" frameborder="0" allowfullscreen="" scrolling="no" src="https://www.ivoox.com/player_ej_4307020_2_1.html?data=lZidmZWWdI6ZmKiakpuJd6KklZKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRjc7k08rgy9TSqdSfwpDZw9iPeIzc0NfO1ZDIqYy408bU0dOPhcjZjK7b09rNt8roytTbj4qbh47YyszW0trWqY6ZmKialg..&"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-37667575201219638952015-03-13T07:36:00.001+01:002020-01-28T17:07:03.741+01:00Continuando las primeras impresiones de Dragon Age Inquisition<iframe width="100%" height="200" frameborder="0" allowfullscreen="" scrolling="no" src="https://www.ivoox.com/player_ej_4213443_2_1.html?data=lZeelZmYd46ZmKiakpiJd6KolJKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRh9Di1c7b18bSqNCfzcbgjdXWrc7Z08bgjc7RtNPZ1M7c0MrXb8XZjKnfw8zTsoy1yMqYq9PVuY6ZmKiaxs7LrdHp08qah5yncZU.&"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-4707797326103558002015-03-12T10:29:00.001+01:002020-01-28T17:06:31.039+01:00Primeras impresiones de Dragon Age Inquisition<iframe width="100%" height="200" frameborder="0" allowfullscreen="" scrolling="no" src="https://www.ivoox.com/player_ej_4203882_2_1.html?data=lZedlZ2cdo6ZmKiakpmJd6KolJKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRlNPdzsrfw9iPrc7k08rgy9TSqdSfxcqYptfFq9DijKbUx5CtstLpytjW1s7Tso6ZmKiaxs7LrdHp08qah5yncZU.&"></iframe>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-16643271572385585212015-03-10T17:37:00.001+01:002015-03-10T17:37:06.653+01:00Continuando las primeras impresiones del Mass Effect 2<br /> <div xmlns='http://www.w3.org/1999/xhtml'><br /> <div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:300px; max-width:700px;' data-boourl='http://audioboom.com/boos/2972702-continuando-las-primeras-impresiones-del-mass-effect-2/embed/v3?eid=AQAAALId_1QeXC0A' class='ab-player'><a href='http://audioboom.com/boos/2972702-continuando-las-primeras-impresiones-del-mass-effect-2'>listen to ‘Continuando las primeras impresiones del Mass Effect 2’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br /> </div><br /> Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-24654924073331997492015-02-09T15:07:00.001+01:002015-02-09T15:07:02.030+01:00Impresiones al 80% de Zelda A Link between Worlds<br /> <div xmlns='http://www.w3.org/1999/xhtml'><br /> <div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:300px; max-width:700px;' data-boourl='http://audioboom.com/boos/2875877-impresiones-al-80-de-zelda-a-link-between-worlds/embed/v3?eid=AQAAAAW_2FTl4SsA' class='ab-player'><a href='http://audioboom.com/boos/2875877-impresiones-al-80-de-zelda-a-link-between-worlds'>listen to ‘Impresiones al 80% de Zelda A Link between Worlds’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br /> </div><br /> Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-57634102510286188592015-01-27T17:00:00.001+01:002015-01-27T17:00:05.443+01:00Mis primeras impresiones de Mass Effect 2 con divagaciones sobre jugar en PC<br /> <div xmlns='http://www.w3.org/1999/xhtml'><br /> <div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:300px; max-width:700px;' data-boourl='http://audioboom.com/boos/2834091-mis-primeras-impresiones-de-mass-effect-2-con-divagaciones-sobre-jugar-en-pc/embed/v3?eid=AQAAAAW2x1SrPisA' class='ab-player'><a href='http://audioboom.com/boos/2834091-mis-primeras-impresiones-de-mass-effect-2-con-divagaciones-sobre-jugar-en-pc'>listen to ‘Mis primeras impresiones de Mass Effect 2 con divagaciones sobre jugar en PC’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br /> </div><br /> Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-59653028737230375422015-01-18T18:19:00.001+01:002015-01-18T18:19:06.969+01:00Impresiones rápidas sobre "The Shivah"<br /> <div xmlns='http://www.w3.org/1999/xhtml'><br /> <div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:300px; max-width:700px;' data-boourl='http://audioboom.com/boos/2808194-impresiones-rapidas-sobre-the-shivah/embed/v3?eid=AQAAAArru1SC2SoA' class='ab-player'><a href='http://audioboom.com/boos/2808194-impresiones-rapidas-sobre-the-shivah'>listen to ‘Impresiones rápidas sobre "The Shivah"’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br /> </div><br /> Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-58784563965405663692014-12-10T15:47:00.001+01:002014-12-10T15:54:35.494+01:00Continuando mis divagaciones sobre Assassin's Creed II<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiq-cPgqQpD50tD60qZxIb60tkLhyphenhyphenZczV4La5vV4hyphenhyphenV1Sht9TW66fgcRVEXOiMc7IAYEqYfYWfoVa4EuladEHYCAL10_JFMXDmnEBUDcpYfAhfnA_Jd44k-TP8QHvsM9xmTTJIOw/s1600/13543_assassins_creed_2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiq-cPgqQpD50tD60qZxIb60tkLhyphenhyphenZczV4La5vV4hyphenhyphenV1Sht9TW66fgcRVEXOiMc7IAYEqYfYWfoVa4EuladEHYCAL10_JFMXDmnEBUDcpYfAhfnA_Jd44k-TP8QHvsM9xmTTJIOw/s400/13543_assassins_creed_2.jpg" /></a></div><div xmlns='http://www.w3.org/1999/xhtml'><div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:300px; max-width:700px;' data-boourl='http://audioboom.com/boos/2720115-continuando-mis-divagaciones-sobre-assassin-s-creed-ii/embed/v3?eid=AQAAAP9ciFRzgSkA' class='ab-player'><a href='http://audioboom.com/boos/2720115-continuando-mis-divagaciones-sobre-assassin-s-creed-ii'>listen to ‘Continuando mis divagaciones sobre Assassin's Creed II’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div>Mas impresiones y desvarios sobre la segunnda entrega de esta saga.Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-83320358822928979782014-12-01T14:42:00.001+01:002014-12-01T15:10:01.400+01:00Primeras impresiones y muchas divagaciones sobre Assassin's Creed 2<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ3MxJRRHxPFRPK4yeR4zpuxY7CpOxkaNXRcANb32j5Yx0TtuVwFTmiBPnWEZ-ia0BVKOGUlG2v7kzVNyVNsDRSnNvkWt2vK1MhFfhGCSI3zWxnmm5P01GzYfcesVqWJNveLD6hA/s1600/AC-AC2-02.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZ3MxJRRHxPFRPK4yeR4zpuxY7CpOxkaNXRcANb32j5Yx0TtuVwFTmiBPnWEZ-ia0BVKOGUlG2v7kzVNyVNsDRSnNvkWt2vK1MhFfhGCSI3zWxnmm5P01GzYfcesVqWJNveLD6hA/s1600/AC-AC2-02.jpg" height="180" width="320" /></a></div><div xmlns="http://www.w3.org/1999/xhtml"><div class="ab-player" data-boourl="http://audioboom.com/boos/2695123-primeras-impresiones-y-muchas-divagaciones-sobre-assassin-s-creed-2/embed/v3?eid=AQAAAFxwfFTTHykA" data-iframestyle="background-color:transparent; display:block; min-width:300px; max-width:700px;" style="background-color: transparent;"><a href="http://audioboom.com/boos/2695123-primeras-impresiones-y-muchas-divagaciones-sobre-assassin-s-creed-2">listen to ‘Primeras impresiones y muchas divagaciones sobre Assassin's Creed 2’ on audioBoom</a></div><script type="text/javascript">(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div>Como siempre, estoy jugando con retraso a este juego de Ubi; así que aquí tenéis mis impresiones a las pocas horas. O mas bien mis divagaciones aleatorias sobre el juego...Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-89153487126223971352014-10-22T15:31:00.001+02:002014-10-22T16:09:20.018+02:00Mis humildes impresiones de las nuevas 3DS<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin1rP0XVH6N2L3PHteD-3GYsLPuEAyCY4cU80Wn4gbkN1gieMrA6K0nlri9ncbdoXvMLRFswc5Q21nRU7H59A1UNLBNYVBd-WuXfaG5JHhuF3yGFCSZrj3wbpksqYvWl4dLzR98Q/s1600/new3ds.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEin1rP0XVH6N2L3PHteD-3GYsLPuEAyCY4cU80Wn4gbkN1gieMrA6K0nlri9ncbdoXvMLRFswc5Q21nRU7H59A1UNLBNYVBd-WuXfaG5JHhuF3yGFCSZrj3wbpksqYvWl4dLzR98Q/s400/new3ds.png" /></a></div><div xmlns='http://www.w3.org/1999/xhtml'><div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:320px; max-width:700px;' data-boourl='http://audioboom.com/boos/2584634-mis-humildes-impresiones-de-las-nuevas-3ds/embed/v3?eid=AQAAALuxR1Q6cCcA' class='ab-player'><a href='http://audioboom.com/boos/2584634-mis-humildes-impresiones-de-las-nuevas-3ds'>listen to ‘Mis humildes impresiones de las nuevas 3DS’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div>Nuevos modelos de 3DS ya están en el mercado en Japón. Aquí tenéis un breve repaso a las novedades y mis opiniones tras jugar una hora con estas maquinas.<br />
Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-9764439544201285862014-10-01T15:28:00.001+02:002014-10-01T15:58:03.218+02:00Impresiones del gameplay / trailer de Metal Gear Solid V del TGS 2014<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ3Cvkn7U7WHEYbiUg44L9SOQJgJquyRJ1w2ZhcvWBDosaOB4kpRMI7qxSjcOAvPUm_z2BdEzevRuuFlwyHvthe6E4bVtqcVA2nLQwcn8gEpqinYqklczcMz09VrMZQbfJwC7d0w/s1600/mgs5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZ3Cvkn7U7WHEYbiUg44L9SOQJgJquyRJ1w2ZhcvWBDosaOB4kpRMI7qxSjcOAvPUm_z2BdEzevRuuFlwyHvthe6E4bVtqcVA2nLQwcn8gEpqinYqklczcMz09VrMZQbfJwC7d0w/s400/mgs5.png" /></a></div><div xmlns='http://www.w3.org/1999/xhtml'><div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:320px; max-width:700px;' data-boourl='http://audioboom.com/boos/2526060-impresiones-del-gameplay-trailer-de-metal-gear-solid-v-del-tgs-2014/embed/v3?eid=AQAAAGMBLFRsiyYA' class='ab-player'><a href='http://audioboom.com/boos/2526060-impresiones-del-gameplay-trailer-de-metal-gear-solid-v-del-tgs-2014'>listen to ‘Impresiones del gameplay / trailer de Metal Gear Solid V del TGS 2014’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div><br />
Mis impresiones de fanboy de la saga Metal Gear sobre el gameplay que pudimos ver en el Tokyo Game Show 2014Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-35986368907792709682014-09-23T10:51:00.001+02:002014-10-01T15:59:16.799+02:00Mis humildes impresiones del TGS 2014 en 4 minutos<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ysDbu4JqwQoiV1dvzAbqzX0V-w5HT75ZQn1qN-yGjlZB-zKVy-4JpYPD_9TdPA-gEKMdsVDSpClYKVugXrMjjyWjLu4RbIa1YDbD9ThkdltrgO4H45sRQ3hCHWzL_aAqvJZ_Lw/s1600/6513A6EE-CE93-4F27-85AE-9C2E782EF392-1309-0000016F95966C07.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ysDbu4JqwQoiV1dvzAbqzX0V-w5HT75ZQn1qN-yGjlZB-zKVy-4JpYPD_9TdPA-gEKMdsVDSpClYKVugXrMjjyWjLu4RbIa1YDbD9ThkdltrgO4H45sRQ3hCHWzL_aAqvJZ_Lw/s400/6513A6EE-CE93-4F27-85AE-9C2E782EF392-1309-0000016F95966C07.jpg" /></a></div><div xmlns='http://www.w3.org/1999/xhtml'><div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; min-width:320px; max-width:700px;' data-boourl='http://audioboom.com/boos/2502085-mis-humildes-impresiones-del-tgs-2014-en-4-minutos/embed/v3?eid=AQAAAH00IVTFLSYA' class='ab-player'><a href='http://audioboom.com/boos/2502085-mis-humildes-impresiones-del-tgs-2014-en-4-minutos'>listen to ‘Mis humildes impresiones del TGS 2014 en 4 minutos’ on audioBoom</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div><br />
Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-29368705350746289232014-09-15T13:38:00.001+02:002020-01-28T17:00:51.934+01:00Con mucho retraso: impresiones del trailer de Metal Gear Solid V<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQI3ifNcclvT5jcSVhHmCfD5Lxe_gVcGzLLMfQB8Ii3DxW3rjxzx1pXkOO7zUV314w0xe9__jB7hySJGBU1Eto66Jig_uJwSOgdqQq-NbLzOfQ4svi9lXQoYabDmIF8CueZYzCw/s1600/metal_gear_solid_5-2549477.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtQI3ifNcclvT5jcSVhHmCfD5Lxe_gVcGzLLMfQB8Ii3DxW3rjxzx1pXkOO7zUV314w0xe9__jB7hySJGBU1Eto66Jig_uJwSOgdqQq-NbLzOfQ4svi9lXQoYabDmIF8CueZYzCw/s1600/metal_gear_solid_5-2549477.jpg" width="400" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
Grabe este audioboo hace muucho tiempo sobre el ultimo trailer del MGS V (por entonces el del E3 2014), y se me quedo perdido en el disco duro. Como últimamente no tengo tiempo de publicar cosas por aquí he decidido recuperarlo aunque ahora este un poco desfasado.<br />
<br />
<iframe allowfullscreen="" frameborder="0" height="200" scrolling="no" src="https://www.ivoox.com/player_ej_3556892_2_1.html?data=lJqimJ2ddo6ZmKiakpyJd6KnkpKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRjc7k08rgy9TSqdSfxcrZjczFscbkzcbmjYqWiozo08bWzsrWb8XZjLLS1sbQb6jZwteYtdTQrcWfjoqkpZLIrcjd0drfx5KJe6ShlQ..&" width="100%"></iframe><br />Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-84876137653877883152014-08-21T02:21:00.001+02:002014-08-21T02:21:16.952+02:00Continuacion de las impresiones de Titan Quest<br /> <div xmlns='http://www.w3.org/1999/xhtml'><br /> <div style='background-color:transparent;' data-iframestyle='background-color:transparent; display:block; box-shadow:0 0 1px 1px rgba(0, 0, 0, 0.15); min-width:320px; max-width:700px;' data-boourl='https://audioboo.fm/boos/2410455-continuacion-de-las-impresiones-de-titan-quest/embed/v2?eid=AQAAAHw79VPXxyQA' class='ab-player'><a href='http://audioboo.fm/boos/2410455-continuacion-de-las-impresiones-de-titan-quest'>listen to ‘Continuacion de las impresiones de Titan Quest’ on Audioboo</a></div><script type='text/javascript'>(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br /> </div><br /> Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-83497906379586158882014-06-27T10:02:00.001+02:002014-06-27T10:08:23.199+02:00Primeras impresiones de Titan Quest Inmortal Throne<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwOXW4Alc5niFov83Ke_cmjTdtQ5EdwLUZBP4F0AbnQEiicvAyw0_KStsnxUjgKe3mhSwwKbNrvUaGveyezVO92LNFxR0sAUwgJL6CCJCv4UfJi-82Yoad5Vh-886fGSZompe2Ew/s1600/titan_quest-12.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwOXW4Alc5niFov83Ke_cmjTdtQ5EdwLUZBP4F0AbnQEiicvAyw0_KStsnxUjgKe3mhSwwKbNrvUaGveyezVO92LNFxR0sAUwgJL6CCJCv4UfJi-82Yoad5Vh-886fGSZompe2Ew/s400/titan_quest-12.jpg" /></a></div><div xmlns="http://www.w3.org/1999/xhtml"><div class="ab-player" data-boourl="https://audioboo.fm/boos/2286227-primeras-impresiones-de-titan-quest-inmortal-throne/embed/v2?eid=AQAAAAclrVOT4iIA" data-iframestyle="background-color:transparent; display:block; box-shadow:0 0 1px 1px rgba(0, 0, 0, 0.15); min-width:349px; max-width:700px;" style="background-color: transparent;"><a href="http://audioboo.fm/boos/2286227-primeras-impresiones-de-titan-quest-inmortal-throne">listen to ‘Primeras impresiones de Titan Quest Inmortal Throne’ on Audioboo</a></div><script type="text/javascript">(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script></div>Impresiones que hice de este juego cuando llevaba de 12 horas de juego mas o menos. Ahora llevo 30 horas, así que pronto grabare la continuación.Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-11485731584687530712014-06-12T06:21:00.001+02:002014-06-14T07:35:20.067+02:00Mis impresiones de las conferencias del E3 2014<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6GfkidC9x2NSAkV42jK72Mmm-xbZjCMHRfaiqv4QvqXR1OyyOCuHmmF_rBqRlfcC6VIJxfEqQdbjzxFfczEw_ts1zIOc-wK5j-h6k76O-Cmbyo6pI1mewSbFc8B3YYIWb3UaNw/s1600/E3-2014.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjh6GfkidC9x2NSAkV42jK72Mmm-xbZjCMHRfaiqv4QvqXR1OyyOCuHmmF_rBqRlfcC6VIJxfEqQdbjzxFfczEw_ts1zIOc-wK5j-h6k76O-Cmbyo6pI1mewSbFc8B3YYIWb3UaNw/s400/E3-2014.jpg" /></a></div><div><iframe width="100%" height="120" frameborder="0" allowfullscreen="" scrolling="no" src="http://www.ivoox.com/player_ej_3213720_2_1.html?data=lJeelZyWdI6ZmKiak5aJd6KlkZKSmaiRdo6ZmKiakpKJe6ShkZKSmaiRkcrnjM7a0tfJt8rjz8rgjcnJb83V1JDQ0dPKqdPZz8jWw9iPqMbgjKqgjZeUdZWhhpywj8nNq8rk1tfSj4qbh46o&"></iframe><br />
<br />
</div>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-38163661941014192112014-06-09T16:39:00.001+02:002014-06-09T16:45:53.363+02:00Lo que espero del E3 2014<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivs0XengKdY9SAeazISAMlVJDgF-z_QVuzGnL-Ubeq3acK_eXMVhP5rupB6bqI4r2t0KsrqX7QfnyMO1ROhzT3tmDW0f5ty9eCtOj8Pa_ldVJoRsSb3szE5lET8yarcP41DBWosw/s1600/E3-2014.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivs0XengKdY9SAeazISAMlVJDgF-z_QVuzGnL-Ubeq3acK_eXMVhP5rupB6bqI4r2t0KsrqX7QfnyMO1ROhzT3tmDW0f5ty9eCtOj8Pa_ldVJoRsSb3szE5lET8yarcP41DBWosw/s400/E3-2014.jpg" /></a></div><div xmlns="http://www.w3.org/1999/xhtml"><div class="ab-player" data-boourl="https://audioboo.fm/boos/2237513-lo-que-espero-del-e3-2014/embed/v2?eid=AQAAADTHlVNJJCIA" data-iframestyle="background-color:transparent; display:block; box-shadow:0 0 1px 1px rgba(0, 0, 0, 0.15); min-width:349px; max-width:700px;" style="background-color: transparent;"><a href="http://audioboo.fm/boos/2237513-lo-que-espero-del-e3-2014">listen to ‘Lo que espero del E3 2014’ on Audioboo</a></div><script type="text/javascript">(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div><span style="background-color: white; color: #555555; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px;">Lo que espero encontrarme en este E3 que esta a punto de comenzar.</span>Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-80200526579059429722014-05-24T15:28:00.001+02:002014-05-24T16:25:33.287+02:00Primeras impresiones del Super Robot Taisen Z 3 para PS Vita<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE0SY1B0iN3HUaAdJLmLt9W9MGTbZDwhAZNopH0HA8iFLD0g1KXMtv_WXT0cHIGM0UmmgSh4RQeplYzo_ehJM3COs_5rF-5eOo_Bqic5PRWAPejkCe6YbR0XizP126fdP7-DaEog/s1600/3rd-SRWZ-Box-Art_01-22_002-257x327.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE0SY1B0iN3HUaAdJLmLt9W9MGTbZDwhAZNopH0HA8iFLD0g1KXMtv_WXT0cHIGM0UmmgSh4RQeplYzo_ehJM3COs_5rF-5eOo_Bqic5PRWAPejkCe6YbR0XizP126fdP7-DaEog/s400/3rd-SRWZ-Box-Art_01-22_002-257x327.jpg" /></a></div><div xmlns="http://www.w3.org/1999/xhtml"><div class="ab-player" data-boourl="https://audioboo.fm/boos/2193272-primeras-impresiones-del-super-robot-taisen-z-3-para-ps-vita/embed/v2?eid=AQAAAH6egFN4dyEA" data-iframestyle="background-color:transparent; display:block; box-shadow:0 0 1px 1px rgba(0, 0, 0, 0.15); min-width:349px; max-width:700px;" style="background-color: transparent;"><a href="http://audioboo.fm/boos/2193272-primeras-impresiones-del-super-robot-taisen-z-3-para-ps-vita">listen to ‘Primeras impresiones del Super Robot Taisen Z 3 para PS Vita’ on Audioboo</a></div><script type="text/javascript">(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script><br />
</div>Continuando el micro-podcast anterior, aquí tenéis las impresiones de la ultima entrega de esta saga de estrategia de robots.Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0tag:blogger.com,1999:blog-11202151.post-51266706652088341792014-05-18T17:06:00.001+02:002014-05-18T17:21:26.431+02:00Sobre los Super Robot Taisen y el nuevo SRTZ3 en particular<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZcIzml8YiYObzFxx9gSQ4KcgpjDArEL8OCTc9UbLJFLp38SVqVxni367LbfBn8S9wi3zgNtGTXWQ6MyWeX4Y8TMzyl8o7kCGxl0-IznBlmQWyQh7_dCsUK00_SAqjNgmL-FdHZw/s1600/Srwz3screenfi.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhZcIzml8YiYObzFxx9gSQ4KcgpjDArEL8OCTc9UbLJFLp38SVqVxni367LbfBn8S9wi3zgNtGTXWQ6MyWeX4Y8TMzyl8o7kCGxl0-IznBlmQWyQh7_dCsUK00_SAqjNgmL-FdHZw/s400/Srwz3screenfi.jpg" /></a></div>
<div xmlns="http://www.w3.org/1999/xhtml">
<div class="ab-player" data-boourl="https://audioboo.fm/boos/2174305-sobre-los-super-robot-taisen-y-srtz3-en-particular/embed/v2?eid=AQAAAI7MeFNhLSEA" data-iframestyle="background-color:transparent; display:block; box-shadow:0 0 1px 1px rgba(0, 0, 0, 0.15); min-width:349px; max-width:700px;" style="background-color: transparent;">
<a href="http://audioboo.fm/boos/2174305-sobre-los-super-robot-taisen-y-srtz3-en-particular">listen to ‘Sobre los Super Robot Taisen y SRTZ3 en particular’ on Audioboo</a></div>
<script type="text/javascript">(function() { var po = document.createElement("script"); po.type = "text/javascript"; po.async = true; po.src = "https://d15mj6e6qmt1na.cloudfront.net/cdn/embed.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(po, s); })();</script></div>
<br />
Iba a hablar sobre el nuevo SRTZ3, pero para variar me he enrollado hablando sobre la saga en general, así que tendréis las primeras impresiones en un próximo audioboo.<br />
<br />
Por cierto, a partir de ahora subiré los audioboos también a Ivoox los tendréis <a href="http://www.ivoox.com/podcast-digipure_sq_f1111532.539995_1.html">aquí</a>.Digipurehttp://www.blogger.com/profile/15478629420024654684noreply@blogger.com0