|
El resultado final del Sistema de Dialogos/Subtítulos es este:
|
Bueno, han sido unos meses bastante duros en los que la pandemia de
COVID-19 ha causado y sigue causando estragos a nivel social mundialmente
(no voy a mencionar económicamente porqué aquí hay muchos puntos de vista según a quién te dirijas). Y si bien es cierto que esta entrada no va dirigida a hablar sobre un tema tan copado, polémico y que divida tanto a las personas, sí que tengo que compartir que mi trabajo público como profesional en
JonatanFoto cerró sus puertas durante el
confinamiento en el
Estado de Alarma. Por lo que he vuelto a la
búsqueda activa de empleo y a la
impartición de CLASES PARTICULARES aquí en
Bizkaia.
Si bien es cierto que JonatanFoto ha cerrado puertas como servicio, también es claro que seguirá existiendo como perfil WEB sobre el que ir publicando mis trabajos fotográficos y de desarrollo multimedia bajo el estandarte también de Variedalia aquí en el Blog.
Seguiré trabajando en mis pasiones, y quien sabe si algún día tendré opciones de regresar como servicio a ofrecer a mis clientes.
Mientras tanto, este fin de semana hemos regresado al desarrollo de contenidos en
FotoMuseo 3D, juego que estrené en
Steam en
Mayo durante el
confinamiento con la publicación de mi
primera Expo basada en el
Proyecto 365 - Nostalgic Items. Si tenéis
Steam y quereis apoyarme disponéis del juego aquí:
Pues bueno, tal como venía anunciando cuando publiqué FotoMuseo 3D, es que será un juego al que le voy a ir añadiendo contenido que será accesible gratuitamente a toda aquella persona que tenga su copia original en Steam.
Y ahora le ha llegado el turno a la creación de una historia personal, contada y accesible sobre la mayor parte de objetos 3D, fotografías y modelados interactivos que hay implementados a lo largo de los diferentes niveles que componen el juego. Todo ello mediante diálogos, flashbacks interactivos e imágenes. (Aunque por ahora estoy haciendo la parte sencilla de los diálogos).
Mediante el uso de TRIGGERS que se disparan al pulsar el BOTÓN DE ACCIÓN al acercanos a distintos objetos, podremos escuchar un diálogo concreto sobre ese objeto o relacionado con ese objeto que nos expandirá un poco más la experiencia de juego y contará la historia que tengo en mente.
Si habéis jugado o conocéis
"WHAT REMAINS OF EDITH FINCH" sabréis perfectamente a lo que me refiero. Es cierto que no puedo compararme con esa obra maestra de
Giant Sparrow y
Annapurna Interactive, pero aportaré mi granito de arena creando mi propia experiencia
Walking Simulator con
Puzzles y toques de
Aventura gráfica bajo mi propio sello personal, que es lo que vengo haciendo en
Variedalia, Youtube y
JonatanFoto en los últimos años.
Tengo mucho trabajo por delante para desarrollar los contenidos que tengo en mente desde que concebí FotoMuseo 3D, solo que ahora, además, estoy añadiendo contenido más personal con el desarrollo de distintos diálogos que doblaré yo mismo y quizás amigos y familiares si lo necesitara y quisieran echarme un mano. (Y cuando empiece con los FLASHBACKS, será mucho mejor!!)
Pues bien, mi dilema en cuanto al desarrollo del Sistema de Diálogos era la de: ¿cuantas entidades necesitaré por cada elemento interactivo al que quiera darle un diálogo y subtitulado en pantalla?
En un comienzo eran 3 entidades solamente:
A saber:
- Un Trigger de Botón Interactivo sobre el objeto que emite un AUDIO al ser activado.
- Un Temporizador, Delay o Timer con la duración del AUDIO que se dispara cuando pulsamos el botón anterior.
- Un SUBTITULADO dinámico que contiene el TEXTO del subtítulo y el Marco que lo contiene.
Tras unas primeras pruebas en las que me he vuelto loco con los SCRIPTS LUA de cada uno de los elementos, he conseguido mostrar un primer subtítulo en pantalla obteniendo el siguiente resultado:
Se acerca mucho a la idea que tengo en mente, pero a nivel funcional desde los SCRIPTS aún es un jodido desastre que; por fuerza; tengo que OPTIMIZAR.
Así que al final, he optado por añadir la posibilidad de una 4ª Entidad cuando sea necesario. El 4º elemento o entidad que usaré OPCIONALMENTE según vaya siendo necesario sería el AUDIO del diálogo. Solo que no lo ejecutaría desde el interior del botón como he venido haciendo arriba. En este caso el audio sería independiente para dejar el sonido del botón disponible a algún efecto sonoro de activación.
Es decir, ahora si pulso una tecla de un teclado por ejemplo, oíremos primero el sonido de esa tecla, y acto seguido el diálogo que pueda interesarme situar en ese sitio concreto. El diagrama con los 4 elementos sacando el audio del diálogo aparte sería:
Como bien digo las 2 versiones de este Sistema de DIÁLOGOS me van a ser de utilidad para este objetivo. Sin embargo tras hacer esto, se me han presentado 2 problemas de optimización y funcionalidad que tengo que arreglar, y estos son:
- Si voy a mostrar una
puñetera IMAGEN por cada uno de los subtítulos en vez de utilizar elementos de texto como LABELS o PANELS con texto codificado, debería intentar OPTIMIZAR el máximo espacio posible para que no saturemos la memoria con decenas de imágenes con diálogos. - Si activamos un diálogo/subtítulo en un objeto, debería bloquear que se puedan activar otros diálogos/subtítulos en otros objetos mientras se escucha el primero para que no se pisen los diálogos y se escuchen a la vez.
Os diré que la verdadera razón de escribir esta entrada que no muchos de mis visitantes habituales entenderán, es la de resumir en resultados útiles mi periplo con la programación en LUA que me estaba volviendo loco, pero al final lo he conseguido...
En fin...
No había manera de conseguir lo que tenía en mente. Si utilizaba TEXTO dinámico desde el código para situarlo en los MARCOS de los subtítulos, dependiendo de la resolución del juego el texto se descentraba de una manera bárbara. Y como la resolución del juego es algo que cada persona en el mundo tendrá adaptado a su manera, es algo que no puedo controlar.
Es cierto que mucha gente ejecutará el juego en resolución FULL HD (1920x1080), pero no todas las personas lo harán así, y muchos equipos pueden necesitar otras resoluciones. Y desde código, no consigo que quede bien situado el texto si lo dejo programado como tal.
Así que mi solución pasa por la de utilizar una imagen por cada uno de los diálogos/subtítulos que quiera implementar. Solo que en vez de ser el subtítulo y el marco juntos siendo un total del 110 kbs por imagen (algo bastante chapucero), he podido mejorar el diseño y el código para que las imágenes sean solo texto por un total de 10 míseros kbs. Con lo que además ahora, puedo controlar tambíen qué MARCO quiero cargar con cada uno de los subtítulos. Un script ideal para realizar diálogos al más puro estilo AVENTURA GRÁFICA o NOVELA VISUAL donde cada personaje, cada objeto tiene su propio marco.
Ahora mismo, los diálogos de los pensamientos de nuestro personaje en PRIMERA PERSONA, quedan de esta manera, y dependiendo de si el diálogo es de algún personaje u objeto, puedo ir variándolo a voluntad mediante parámetros sin tener que modificar el código LUA del script:
El segundo punto que me quedaba, me parecía el más importante. Ya que es horrible lo de activar un diálogo, y que acto seguido; mientras lo estamos escuchando; podamos activar otro distinto que se escuche invadiendo el primero.
Aquí tenía 2 opciones:
- O silenciar el audio que se estuviera reproduciendo cuando activamos otro distinto.
- O hayar el modo de que mientras un audio se está reproduciendo, no podamos activar otro diferente hasta que termine.
Mi opción obvia era la segunda. Me interesa que se pueda escuchar el diálogo completo pero que no se pise con otro que vayamos a escuchar después.
Así que tenía que hayar el modo de comunicar los 3 scripts que componen el sistema de diálogo mediante una variable GLOBAL que estuviera cargada en memoria todo el rato que estemos paseando por niveles y mapeados con elementos interactivos susceptibles de ser activados.
Mi conocimiento de LUA sigue siendo muy limitado. A pesar de que he aprendido muchísimo en un año y he podido realizar un ambicioso juego (a nivel de codificación sobretodo) de alguien que no sabía nada de LUA, reconozco que hay aspectos básicos que todavía no controlo como me gustaría en el lenguaje.
Y el tratamiento de las VARIABLES LOCALES, VARIABLES GLOBALES, las TABLAS y MATRICES de OBJETOS y FAMILIAS DE OBJETOS, son algo que me siguen trayendo de cabeza.
Me siento como un pez fuera del agua dando coletazos a diestro y siniestro intentando llegar al mar antes de asfixiarme en tierra. De hecho; con la experiencia de desarrollo de FotoMuseo 3D; hasta ahora ha sido como ir recibiendo distintos vasos de agua, baldes de agua, y garrafas de agua que me han hecho sobrevivir y respirar un poco a medida que conseguía avanzar poco a poco codificando objetos y scripts variados para conseguir mis objetivos.
Pequeños pasitos para conseguir algo muy grande.
Pero hoy ha sido distinto...
Esta, amigos míos, ha sido la primera vez que este pececito ha conseguido llegar a un pequeño estanque de tranquilidad, con una codificación sencilla de 3 SCRIPTS unidos por una variable GLOBAL y un WORKFLOW relativamente sencillo que hace posible utilizar un sistema complejo de diálogos!!!
Lo digo en serio, esta solución conseguida no un simple vaso de agua, ni siquira un gran barreño de agua con el que aguantar un poco de tiempo hasta el siguiente paso. Esto ha sido un pedazo de estanque!! Me siento tan satisfecho con el resultado obtenido y las posibilidades que me brinda ahora esto en mi proyecto, que me da la sensación de estar nadando libremente en un lugar mucho más amplio del que había estado asfixiado hasta ahora...
Lo dije en su día y lo vuelvo a decir hoy... LEADWERKS se ha convertido por méritos propios en uno de mis ENGINES de Desarrollo favoritos. Ya no solo porque yo venía de HAMMER, sino porque las posibilidades totales que presenta la herramienta; accesibles desde el minuto uno; lo hacen un MUST HAVE para los que nos apasione el desarrollo de juegos o software virtual interactivo.
Es cierto que hay muchos engines, y alguno más profesionales y quizá más llenos de posibilidades. Pero bueno, yo estoy con LEADWERKS y el híbrido de código LUA y C++ (compatible con objetos C#) que tiene en su haber.
En fin, estoy contento porque con el Sistema de Diálogos/Subtítulos que he desarrollado, pasamos de ESTO:
Con una gran diferencia y mejora visual a ESTO OTRO:
Estoy muy ilusionado!! De verdad lo digo!!
Además este Sistema de Diálogos/Subtítulos que he creado, me permitirá programar animaciones sencillas en los subtítulos sin tener que aumentar carga gráfica en la renderización de los equipos de las personas que tengan FotoMuseo 3D.
CONTINUAR leyendo el post...
OCULTAR texto mostrado.