5:55 podrías en lugar de `¡Daisy! ¡Ingrid!` podrías hacer algo como Linea1 | ¡Daisy! Linea2 | ¡Ingrid! Esto evitaría tener dos punteros - para validar si después existe -- un diálogo --- que siga hablando -- una instrucción de código --- para que un personaje cambie su expresión --- que aparezca - Pará rebobinar podrías validar si existe un `noclear` al final de la línea para saber que estas eliminando un texto concatenado y no eliminando una línea de texto entera - evitas el código `stop` para simplificar el número de instrucciones a mantener
Lo más limpio a mi parecer (a bote pronto y sin pensar demasiado) es un excel con solo los Id, y frases de los distintos idiomas y luego otro excel con el código que te indique que id se lee y en qué orden, mezclar el texto y el código sería un caos absoluto.
Alva: "Odio programar, si pudiera lo evitaría para crear los juegos que quiero 😡" También Alva: "Inventé un mini-lenguaje de programación para crear escenas en mi juego 😎"
*Hasta que completes y saques el juego aprenderé a dibujar mejor, cuando salga tu juego haré fanarts de los personajes y memes de la historia y así te haré publicidad gratis en varios idiomas, este es mi nivel de amor por ti Alva Majo*
@@Castillo790 ¿Te unes? La secta consiste en volverse figuras importantes en el mundo del entretenimiento solo para hacerle publicidad gratis a los juegos de Alva Majo
Soy de IT, aunque no programador. No hago y no planeo nunca hacer videojuegos, pero... estos videos me encantan. Toda la logica y el paso a paso de como resolver problemas o afrontar una situacion siguen siendo utiles para muchas otras cosas no relacionadas a los videojuegos. Ahora a esto le agregamos el carisma de Alva... ufff. Excelente video.
Para el tema del rollback, bastaría con almacenar una lista de las ids que se han ido ejecutando y al hacer rollback ir a la escena de la id anterior. Cualquier solución aprovechando gdscript es mejor que crear 3845 commandos distintos para la línea code del csv.
Cosas a mencionar desde mi punto de vista y que ya lo han mencionado antes: - No combinar código con el texto de los personajes. - Hay que recordar el KISS (Keep It Simple, Stupid!) y con eso creo que no simple en absoluto xd. - Estás haciendo subcodigo, por lo tanto haces que mantenerlo pueda ser complicado, en especial al momento de testear por las lineas "goto" (código espagueti). Definitivamente habría que separar la logica del texto en este caso y quizás replantearse eso: 6:25 xd
hay una demo en youtube de alguien que lo hizo lo pueden encontrar como "tic tac toe for renpy" ahora alva puede tener otros motivos para hacerlo en godot pero eso ya dependerá de lo que haya planeado
Este es un buen caso para explicar porque se necesita estudiar diseño de software para poder programar bien a la mina complicación. Memento, Iterator, Interpreter son ejemplos de patrones de diseño que conceptualmente podrían ayudar a hacer más sencilla la gestion del sistema de dialogos.
Lo que puedes hacer es una pila de dialogos(un array), cuando alguien le de "rebobinar" eliminas la cantidad de elementos en el array que deses, cada que una "escena" termine, limpias el array , el array lo puedes llenar con CVS que estas armando
Alva eres mi referente como informático. Cuando siento que estoy estancando, o que no soy tan bueno como debería, veo como haces sobre-ingeniería con un lenguaje ensamblador inventado en un .csv, y siento que podría enviar cohetes a Marte. Sigue así y pronto pediré un aumento salarial, muchas gracias
La verdad es que me he reido con tu post. Pero, ¿eres consciente que no es tan rara esa opcion (crear lenguajes script custom) en el mundo de los videojuegos, verdad? Supongo que sabes qué es SCUMM.
Por cosas complicadas como esas, varios juegos de este estilo simplemente tienen un historial de dialogos en lugar de recrear las escenas, es mucho mas facil guardar un grupo de strings en una lista y mostrarla
Si vas a refactorizar el código, para los Goto, si quieres volver es un caos gestionarlo así, casi sería mejor hacer una pila según avanza el diálogo de por la linea de diálogo que va ocurriendo. O una lista doblemente enlazada
Existe una alta probabilidad de que ya lo hayas probado, sin embargo el tema de los diálogos durante la partida lo puedas realizar con eventos personalizados, de esta manera se ejecutan cuando el evento se cumpla y no de manera lineal como con el when que planteas.
Madre mía, te imagino haciendo un diccionario de un diccionario de un diccionario con tuplas para todos los when. Hacer una novela visual no es fácil al final. El plot twist final sería ver a Alva Majo eligiendo entre la soga o el RPG Maker para hacer el 3 en raya
Al principio utilizar Excel tenía sentido, pero conforme vas añadiendo más lógica al script carece de utilidad. Te diría que te llevases esa lógica a un fichero JSON o algo similar para trabajar con bloques de información y así trabajar con listas y tipos de datos más cómodamente.
Hola Alva, para volver a ver diálogos anteriores podrías hacer un buffer circular con la capacidad que quieras. El buffer almacenaría objetos de diálogo, que tendrán las propiedades que necesites. Esto permitiría volver a verlos sin necesidad de complicar tanto tu sistema. Ánimo con el juego!! 💪🏻
Justo estaba programando mi juego en mi casa todo triste sin internet (Porque vivo en un pueblo en el tercer mundo y se me corta cuando hay tormenta) y me vuelve el internet de la nada y veo la notificación de este video que me viene como anillo al dedo, no me hacen falta mas pruebas de que Alva es Jesucristo y nos guía por el camino de la programación a todos sus fieles seguidores.
Siempre es excelente separar las tareas, me recuerda al modelo mvvm de wpf que puedes trabajar la interfaz con xaml y en un archivo diferente el codigo con c# y para comunicar uno y otro usar enlaces. Por cierto me encanto eso de hacer tus escenas responsivas dependiendo al aspect ratio. He desarrollado algunas web y siempre trato de que se adapten lo mejor posible a cualquier resolucion xD
Yo no pondría la lógica del juego en la hoja de cálculo. En cambio, yo dejaría las propiedades como personaje y expresión en json en una columna llamada prop y en otras columnas los diálogos. Todo lo demás lo dejaría en un archivo de escenas que consumiría el de diálogos, y para el rebobinado, haría un log.
Totalmente de acuerdo, llevar toda la complejidad a un excel es complicarse la vida. En vez de utilizar unity, reutilizar clases, o diseñar ahi las escenas, llevarlo a texto plano en csv para luego reinterpretarlo creo que es un error
Pocas veces veo novelas visuales con alguna opcion para revovinar, a mayoria o suele tener un historial de textos o el sistema de guardado para volver, me gusta bastante esa idea de revovinar
Para lo de rewind podrías aplicar un buffer hecho con un aray de uint_8. Cada vez que actualices el ID lo guardas y aumentas la posición del buffer, luego para rebobinar puedes hacer hacia atrás hasta 256 posiciones. Es limitado pero simple, con microprocesadores lo hacemos seguido
solo pensar en esto me parece una locura pensar lo que se debio hacer en el persona 3 reload, si te hablan en el tartaro, y despues te dicen ciertas cosas si llevas a ciertos personajes, locura absoluta
Yo, osado necio e inculto en la materia me atreveria a dudar del genial intento del gran Alva de mezclar logica y contenido. por otro lado me atreveria a sugerir un etiquetado XML o Json como gestor del contenido
Lo has consultado con GiusCaminiti? Seguro que tiene buenas opiniones fuertes que se te está yendo demasiado la complejidad con lo de meter código dentro del script de esa forma. Desde mi niputeidismo, tendrías que mantener el fichero de traducciones (líneas de diálogo) lo más independiente posible para que sea fácilmente acopable cuando estés en fase tocha de produccion.
De todas las posibles formas de desarrollar un sistema de diálogo, creo que nunca en ningun universo paralelo lo haría así de esta forma. Pero claro, tampoco nunca en ningún universo paralelo sería yo Alva mago 😂🎉
Alva Majo: "Ese rollback suele ser algo instantáneo que te devuelve de golpe al estado anterior, pero me dije: Y si hago un sistema de rollback que rebobine realmente y reproduzca las animaciones del revés para que sea más suave y agradable?" Usuarios de Ren'py: 🗿
en cuanto a dialogos, elecciones, rollback, skipear texto ya leído, por si el jugador quiere regresarse para cambiar una elección y se regresa de más por ejemplo, sistema de guardado y cosas basicas pues sí, Alva tendría que seguir haciendo el su sistema de juego del tic tac toe, pero sería tan fácil de implementar como en cualquier motor, pero renpy le ahorraría muchísimo, y como lo demuestrán otras novelas visuales como DDLC se puede personalizar todo perfectamente, en vez de los menus con simple texto por defecto. Si Alva está usando godot pues por algo lo habra elegido, ya sea que conozca o no las alternativas. A nosotros solo nos queda esperar y ver como le va
Alva justo tambien estoy haciendo un juego en godot, voy a intentar tomar la idea de hacer los dialogos en hojas de calculos quizas cambiando un poco el sistema a mi conveniencia, muchas gracias
Si vas a hacer ejecuciones basadas en condiciones, rebobinar etc creo q esta aproximación de mezclar el código con el texto se te va a hacer bola, en su lugar puedes seguir un patron de árbol de comportamiento, una clase es un decorator q son condiciones , otra un task tarea a completar, services para ejecuciones q se hacen varias veces , y un controlador que va añadiendo cada uno en un rama, esto te permitirá que pueda ser muy complejo sin volverte loco.
Depende de que tan largas sean las escenas del diálogo podrías en lugar de ir hacia atrás en en csv, ir guardando en una lista/array el curso del diálogo Solo funcionaría si tu intención es la de permitir al jugador ver el diálogo previo pero no cambiar el curso (por si existen bifurcasiones de eventos, un `if` por ejemplo) Simplemente cada vez que se lea una línea del csv, añadir lo que hace en memoria Si se decide ir hacia atrás, guardar el punto del csv actual y leer la memoria el número de veces que el jugador decida Y para avanzar, lees la memoria desde ese punto hacia el final de la lista Cuándo ya no tenga más elementos la lista seguir con el csv
Para ahorrar espacio se podria guardar en vez de cada linea en el stack, cada salto de linea, y evaluar en cada retroceso si la linea actual se llego a traves de un salto de linea, si no es asi, simplemente lee la linea anterior, si es asi, entonces vuelve a la linea anterior al salto de linea
Para simplificar un poco la lógica del diálogo, se podría analizar todo el CSV, antes de comenzar a mostrarlo (como un proceso de compilación, conversión de tokens o algo parecido), ya tienes que sobre analizar el diálogo a futuro para la instrucción `when` 6:48 Esto generaría una carga inicial un poco más lenta (ya que requeriría de cargar todo el dialogo en un primer momento y analizarlo) - Cada vez que inicies una partida - Cada vez que cargues una partida Podrías dividir el dialogo en diversos CSV, para reducir la carga y reducir el tiempo, dividiéndolo en varias sesiones Pero después ya tendrías una estructura que seguir: - Eliminas la instrucción `when` si tiene una equivalencia con `if` - como ya se tiene analizada toda la estructura del diálogo ya pues moverte hacia adelante, atrás, o en varias bifurcaciones del dialogo - Como todo el diálogo se encuentra en memoria todo momento, no haría falta moverse nuevamente por el CSV, solo lo lees una vez
He jugueteado con hacer una VN en unity y en godot y en cuanto has dicho lo de "rebobinar" me ha entrado PTSD porque a mi me pasó justo lo mismo xDD Al final las soluciones que encontré para echar atrás el texto fueron: -Cargar la escena desde el principio y skipear directamente hasta la parte deseada -Guardar todas las variables necesarias para recrear la escena con cada linea de dialogo Ninguna me terminaba de convencer y me dio muchos dolores de cabeza, entonces me di cuenta de que era mucho mas fácil y cómodo para el jugador ponerle un log de texto al jugador accesible con la rueda del ratón o un botón, a veces estamos tan ocupados pensando si podemos hacer algo que no nos paramos a pensar en si debemos. Y sobre lo del continue yo lo hice de otra manera, haciendo que el texto no se borre al avanzar si pones un + al final, pero supongo que lo que se gana en comodidad se pierde por otro lado como con todas las cosas
CSV, no son hojas de calculo, de hecho las iniciales vienen del inglés de Valores Separados por Comas. Como a Separarse Values. Lo que pasa que han evolucionado, sobre todo cuando se empezaron a usar con hojas de cálculo y hoy en día puedes separar por otros valores, como el salto de linea. Aunque esto realmente no importa en lo que has comentado, lo digo por tener la información lo más veraz posible. Buen video como siempre y suerte con el proyecto. P.D: Gracias por hacer referencia a mi juego del Ahorcado XD.
Que pro el sistema, no? Es un planteamiento interesante. Aunque se ve demasiado complejo y además el texto de los diálogos deberías tenerlo guardado de forma independiente (para que los traductores puedan manejarlo de forma mas clara). Deberías darle una vuelta, pero ese es el espíritu :)
6:47 When desarrollas tus juegos en Godot El futuro es hoy, oiste viejo? Jejejejej But se termina eliminando :'v Ohhh mi código de programación xdXdXdCccDcxD
Alva, ya te lo advertí. Ríndete al todopoderoso Ren'py. Es literalmente la mejor opción para hacer una novela visual sin calentarte mucho los cascos (requiere aprendizaje, pero en mi opinión, merece mucho la pena).
Buenas Alva, formo parte de Campanella Studios e hice un motor para novelas visuales y espero que lo siguiente pueda servirte de ayuda: Lo hice en Unity y tu sistema es algo parecido al mío, en Unity lo que hacía era crear ScriptableObjects Dialogue, y ese diálogo contiene una lista de IDs de los diálogos en el CSV y tiene otras cositas como que dependiendo del id del diálogo puedes cambiar el fondo, música, añadir un sonido, mostrar una imagen, etc. Y en el tema de las decisiones hice que los Dialogue tuviesen una propiedad NextDialogue y al terminar pues pasaba al siguiente y así, de esa manera me quedaba una estructura de nodos (Dialogue) la cual podía dividir si habían decisiones y quedaba como un árbol de decisiones bastante ordenado. PD: Si en un futuro necesitas datos estadísticos para saber el porcentaje de finales buenos o malos de tu novela visual, en mi canal explico como usar un software que hice yo mismo con Python que te ayuda a balancearla y no la hagas demasiado fácil o difícil. Un saludo
6:14 ¡stop! 🐓🗿
Xddd
😂😂
5:55 podrías en lugar de `¡Daisy! ¡Ingrid!` podrías hacer algo como
Linea1 | ¡Daisy!
Linea2 | ¡Ingrid!
Esto evitaría tener dos punteros
- para validar si después existe
-- un diálogo
--- que siga hablando
-- una instrucción de código
--- para que un personaje cambie su expresión
--- que aparezca
- Pará rebobinar podrías validar si existe un `noclear` al final de la línea para saber que estas eliminando un texto concatenado y no eliminando una línea de texto entera
- evitas el código `stop` para simplificar el número de instrucciones a mantener
Muy buenos consejos aunque no te entendí nada.
@@AmargoMariano 😂😂
Te doy mi like para que alva lo vea ya que tú comentario parece que sabes de que va la cosa
@AlvaMajo
Esta interesante. creo que seria un buen reto de programación corregir este problema de alva.
6:47 when Alva dice when y te piensas que es un momazo🗿
When Wen le dice ven a Ben: ven Ben xdxdxdxdxd :vvvvvvvvvvv
@@Fredlii *En la grasa habían mejores momos*
Los momos de la grasa:
xDDDDDDDDDD
Yo era seguidor de la grasa🎵🎵🎵🗣️🗣️🗣️🔥🔥❗❗
Lo más limpio a mi parecer (a bote pronto y sin pensar demasiado) es un excel con solo los Id, y frases de los distintos idiomas y luego otro excel con el código que te indique que id se lee y en qué orden, mezclar el texto y el código sería un caos absoluto.
Alva: "Odio programar, si pudiera lo evitaría para crear los juegos que quiero 😡"
También Alva: "Inventé un mini-lenguaje de programación para crear escenas en mi juego 😎"
Es verdad 😂😂😂
Mejores desarrollo de personaje en el anime:
alva majo rule 34 buscar
genial el primer comentario que veo
El sabio:
alva majo senos buscar
Con guinxu?
No es tiktok, npc
*Hasta que completes y saques el juego aprenderé a dibujar mejor, cuando salga tu juego haré fanarts de los personajes y memes de la historia y así te haré publicidad gratis en varios idiomas, este es mi nivel de amor por ti Alva Majo*
Plot Twist tu cuenta será de NSFW furry
@@parzival2114 Eso dependerá de Alva 🗿
Uyyy... Pero ya sabes que alva tiene pareja no? GuinxuXAlva forever ❤
Puedes crear una secta, The Cult of Alva. o la Santísima Iglesia de Majorariato
@@Castillo790 ¿Te unes? La secta consiste en volverse figuras importantes en el mundo del entretenimiento solo para hacerle publicidad gratis a los juegos de Alva Majo
OJO! 7:33 Cuidao!!! , me parece que eso jamas ocurrira.
Soy de IT, aunque no programador. No hago y no planeo nunca hacer videojuegos, pero... estos videos me encantan. Toda la logica y el paso a paso de como resolver problemas o afrontar una situacion siguen siendo utiles para muchas otras cosas no relacionadas a los videojuegos. Ahora a esto le agregamos el carisma de Alva... ufff. Excelente video.
¿Cómo que IT? Fuera payaso asesino
Para el tema del rollback, bastaría con almacenar una lista de las ids que se han ido ejecutando y al hacer rollback ir a la escena de la id anterior. Cualquier solución aprovechando gdscript es mejor que crear 3845 commandos distintos para la línea code del csv.
quiza creando un "history" donde se guarden estos id de forma ordenada podria recorrer el array al derecho, al revez, saltando, etc.
Cosas a mencionar desde mi punto de vista y que ya lo han mencionado antes:
- No combinar código con el texto de los personajes.
- Hay que recordar el KISS (Keep It Simple, Stupid!) y con eso creo que no simple en absoluto xd.
- Estás haciendo subcodigo, por lo tanto haces que mantenerlo pueda ser complicado, en especial al momento de testear por las lineas "goto" (código espagueti).
Definitivamente habría que separar la logica del texto en este caso y quizás replantearse eso: 6:25 xd
La tesis final de grado del Alva Majo:
6:28 jajaja no te rindas, que te explicas muy bien!
Pfff este video me ha hecho apreciar más RenPy, que ya tiene una inmensa funciones de VN ya implementadas 💪
un capo alva majo volviendose un experto desarrollador de compiladores solo para no utilizar renpy
Con renpy podrías desarrollar una partida de tres en raya?
@@Emi-fg7fnseguramente pero el rendimiento no sé si sería bueno
Con renpy iria a 3 frames por semana
hay una demo en youtube de alguien que lo hizo lo pueden encontrar como "tic tac toe for renpy"
ahora alva puede tener otros motivos para hacerlo en godot pero eso ya dependerá de lo que haya planeado
ruclips.net/video/d5QYfv0Q7Iw/видео.html@@jesustorrejon1509
Este es un buen caso para explicar porque se necesita estudiar diseño de software para poder programar bien a la mina complicación.
Memento, Iterator, Interpreter son ejemplos de patrones de diseño que conceptualmente podrían ayudar a hacer más sencilla la gestion del sistema de dialogos.
Sí Alva Majo, todavía estoy aquí...
6:22 cuando me va mal en un examen
Con lo del aspect-ratio, puedes usar el nodo AspectRatioContainer de godot y hacer todo ahí dentro menos algunas cosas que pueden "sobresalir"
Lo que puedes hacer es una pila de dialogos(un array), cuando alguien le de "rebobinar" eliminas la cantidad de elementos en el array que deses, cada que una "escena" termine, limpias el array , el array lo puedes llenar con CVS que estas armando
5:55 tambien podrias hacer algo como: En el dialogo: daisy! codigo intermedio ingrid!
Buen video alba, yo llevo ya mas de un año desarrollando mi primer juego (metroidvania 2d), mucho animo con tu proyecto!
El todavía estas aqui me encanto, No planeo hacer un juego pero igual Alva hace que me interese por ese tema. Tal vez algun dia
6:25 me he reído demasiado 😂😂😂 ànims Alva!
Un buen video de Alva Majo después de la escuela, siuuuuu
Alva eres mi referente como informático. Cuando siento que estoy estancando, o que no soy tan bueno como debería, veo como haces sobre-ingeniería con un lenguaje ensamblador inventado en un .csv, y siento que podría enviar cohetes a Marte. Sigue así y pronto pediré un aumento salarial, muchas gracias
Top comment
La verdad es que me he reido con tu post. Pero, ¿eres consciente que no es tan rara esa opcion (crear lenguajes script custom) en el mundo de los videojuegos, verdad? Supongo que sabes qué es SCUMM.
Este video confirma el desarrollo de Majotori 2: ahora es personal?
Baity?
Y si es un éxito como el primer Majotori probablemente estaríamos en presencia de una trilogía, culminando con Majotori 3: Electric Boogaloo
@@cesarbarusheslava6757 Si entendí la referencia 😉
Bien guapo el sistema que te has sacado para no mezclar el script y el código para luego mezclar el script con código propio :P
Excelente consejo, eso de rehacer el código cuando sabes los aspectos que debes ocupar.
Mano eres un crack, a la firme que wen video la rcmsre.
Con merchandising y todo 🙀
Antes de ver este video estaba pensando en hacer una aventura gráfica...
Ahora creo que solo haré juego de plataformas y simuladores 🥹
Me ha encantado este video, personalmente me ha servido 🦔
6:25
Suele pasar jajaja cuando nos gana nuestro lado detallista
cuando superas tu limitación de lenguaje y creas el tuyo propio, I NEED MORE POOOWER
Ahora no Robin necesito tener una pequeña charla con el peruano de cyborg 🗿
No hay chance
ERA MI PONNY
Te veo en el canal de Aquino y memes no mames
NO SOY PERUANO!
Por cosas complicadas como esas, varios juegos de este estilo simplemente tienen un historial de dialogos en lugar de recrear las escenas, es mucho mas facil guardar un grupo de strings en una lista y mostrarla
Alva mago nos sorprende de nuevo 👏
Y todas estas complicaciones sin tener en cuenta el árbol argumental con todas las variantes de la historia.
Si vas a refactorizar el código, para los Goto, si quieres volver es un caos gestionarlo así, casi sería mejor hacer una pila según avanza el diálogo de por la linea de diálogo que va ocurriendo. O una lista doblemente enlazada
El único que ha propuesto algo decente en lo que llevo leido
Existe una alta probabilidad de que ya lo hayas probado, sin embargo el tema de los diálogos durante la partida lo puedas realizar con eventos personalizados, de esta manera se ejecutan cuando el evento se cumpla y no de manera lineal como con el when que planteas.
AHI ESTAMOS! Friendship ended with Unity, now Godot is my best friend
Madre mía, te imagino haciendo un diccionario de un diccionario de un diccionario con tuplas para todos los when. Hacer una novela visual no es fácil al final. El plot twist final sería ver a Alva Majo eligiendo entre la soga o el RPG Maker para hacer el 3 en raya
No puedo creer que acabo de llegar AL FIN al último video. Me los vi todo ctm.
Al principio utilizar Excel tenía sentido, pero conforme vas añadiendo más lógica al script carece de utilidad. Te diría que te llevases esa lógica a un fichero JSON o algo similar para trabajar con bloques de información y así trabajar con listas y tipos de datos más cómodamente.
Un buen vídeo de Alba Majo después de la escuela
Hola Alva, para volver a ver diálogos anteriores podrías hacer un buffer circular con la capacidad que quieras. El buffer almacenaría objetos de diálogo, que tendrán las propiedades que necesites. Esto permitiría volver a verlos sin necesidad de complicar tanto tu sistema. Ánimo con el juego!! 💪🏻
Se está montando un transpilador el tío XD.
Me alegra haber visto al verdadero alva majo al 5:00 😊
Justo estaba programando mi juego en mi casa todo triste sin internet (Porque vivo en un pueblo en el tercer mundo y se me corta cuando hay tormenta) y me vuelve el internet de la nada y veo la notificación de este video que me viene como anillo al dedo, no me hacen falta mas pruebas de que Alva es Jesucristo y nos guía por el camino de la programación a todos sus fieles seguidores.
Ufff, esto de las novelas visual esta bastante mas complicado de lo que me imaginaba, no me sorprende la verdad xD
1:03 Unity: Eso duele
Godot: 🗿👍
@@F_U Creo que fué a modo de protesta por lo de unity intentando cobrar por los juegos famosos
continue, goto y stop.....los 3 caballeros de la muerte de cualquier lenguaje malo
Nunca se desarrollan suficientes juegos como para no cometer el error de terminar algo y pensar "Bien funciona, me gusta... oye pero Y SI...."
Siempre es excelente separar las tareas, me recuerda al modelo mvvm de wpf que puedes trabajar la interfaz con xaml y en un archivo diferente el codigo con c# y para comunicar uno y otro usar enlaces.
Por cierto me encanto eso de hacer tus escenas responsivas dependiendo al aspect ratio. He desarrollado algunas web y siempre trato de que se adapten lo mejor posible a cualquier resolucion xD
Yo no pondría la lógica del juego en la hoja de cálculo. En cambio, yo dejaría las propiedades como personaje y expresión en json en una columna llamada prop y en otras columnas los diálogos. Todo lo demás lo dejaría en un archivo de escenas que consumiría el de diálogos, y para el rebobinado, haría un log.
Totalmente de acuerdo, llevar toda la complejidad a un excel es complicarse la vida. En vez de utilizar unity, reutilizar clases, o diseñar ahi las escenas, llevarlo a texto plano en csv para luego reinterpretarlo creo que es un error
@@ManKiros La cosa es que no quiere usar Unity. Porque ya nadie confía en esos.
Me encanta la idea. Luego puedes hacer tu motor de juego open source para que cualquiera pueda crear su propio juego de novela visual 😊
8:16
Pocas veces veo novelas visuales con alguna opcion para revovinar, a mayoria o suele tener un historial de textos o el sistema de guardado para volver, me gusta bastante esa idea de revovinar
Mola!!! 👏🏻👏🏻👏🏻
Nada, muy bueno el video. Claramente tienes experiencia cagándola xd. Sub.
Para lo de rewind podrías aplicar un buffer hecho con un aray de uint_8. Cada vez que actualices el ID lo guardas y aumentas la posición del buffer, luego para rebobinar puedes hacer hacia atrás hasta 256 posiciones. Es limitado pero simple, con microprocesadores lo hacemos seguido
solo pensar en esto me parece una locura pensar lo que se debio hacer en el persona 3 reload, si te hablan en el tartaro, y despues te dicen ciertas cosas si llevas a ciertos personajes, locura absoluta
6:28 me has matado 🤣
6:25
Cuando ya no sabes cómo pagar las deudas y te quedas sin ideas:
Esto me recuerda al sistema de dialogos de cave story, además de dialogos controla música, movimiento de npcs y otros detalles
Te kiero mucho alva, un beso
Ese final no lo esperaba jajaja
Yo, osado necio e inculto en la materia me atreveria a dudar del genial intento del gran Alva de mezclar logica y contenido. por otro lado me atreveria a sugerir un etiquetado XML o Json como gestor del contenido
Lo has consultado con GiusCaminiti? Seguro que tiene buenas opiniones fuertes que se te está yendo demasiado la complejidad con lo de meter código dentro del script de esa forma. Desde mi niputeidismo, tendrías que mantener el fichero de traducciones (líneas de diálogo) lo más independiente posible para que sea fácilmente acopable cuando estés en fase tocha de produccion.
De todas las posibles formas de desarrollar un sistema de diálogo, creo que nunca en ningun universo paralelo lo haría así de esta forma. Pero claro, tampoco nunca en ningún universo paralelo sería yo Alva mago 😂🎉
esto a lo mejor me hubiera servido hace un par de semanas para una jam x3
Ja al fin entendi todo un video y es porque hace mucho intenté hacer mí propia visual novel (y todavía no me rendí haré mí fangame de danganronpa)
Así es un poco como funcionaba el SCUMM de LucasFilm. Grande, Alva!
Asumo que probaste complementos como 'Dialog Manager' o 'Dialogic' tienen muchas características interesantes
Tremendo laburo la verdad
Alva Majo: "Ese rollback suele ser algo instantáneo que te devuelve de golpe al estado anterior, pero me dije: Y si hago un sistema de rollback que rebobine realmente y reproduzca las animaciones del revés para que sea más suave y agradable?"
Usuarios de Ren'py: 🗿
que significa?, renpy lo tiene por defecto?
en cuanto a dialogos, elecciones, rollback, skipear texto ya leído, por si el jugador quiere regresarse para cambiar una elección y se regresa de más por ejemplo, sistema de guardado y cosas basicas pues sí, Alva tendría que seguir haciendo el su sistema de juego del tic tac toe, pero sería tan fácil de implementar como en cualquier motor, pero renpy le ahorraría muchísimo, y como lo demuestrán otras novelas visuales como DDLC se puede personalizar todo perfectamente, en vez de los menus con simple texto por defecto. Si Alva está usando godot pues por algo lo habra elegido, ya sea que conozca o no las alternativas. A nosotros solo nos queda esperar y ver como le va
Alva justo tambien estoy haciendo un juego en godot, voy a intentar tomar la idea de hacer los dialogos en hojas de calculos quizas cambiando un poco el sistema a mi conveniencia, muchas gracias
Si vas a hacer ejecuciones basadas en condiciones, rebobinar etc creo q esta aproximación de mezclar el código con el texto se te va a hacer bola, en su lugar puedes seguir un patron de árbol de comportamiento, una clase es un decorator q son condiciones , otra un task tarea a completar, services para ejecuciones q se hacen varias veces , y un controlador que va añadiendo cada uno en un rama, esto te permitirá que pueda ser muy complejo sin volverte loco.
Haciendo llorar a desarrolladores, especial Chardi Tronic
6:22 como dev, demasiado real
Si hay AlvaMajo, por que no hay AlvaJunio?
Yo solo espero que nikola y lariat aparezcan en este juego son buenos personajes, iconicos y chulos
Majorariatto verse gente
También hay herramientas como Inkle que se integra con Unity. Tiene un lenguaje muy similar a pseudocódigo y su propia comunidad.
Adoro los "¿todavia estas aqui?"❤🕊❤
La caspa en el cabello de Alva me distrajo todo el video
Depende de que tan largas sean las escenas del diálogo podrías en lugar de ir hacia atrás en en csv, ir guardando en una lista/array el curso del diálogo
Solo funcionaría si tu intención es la de permitir al jugador ver el diálogo previo pero no cambiar el curso (por si existen bifurcasiones de eventos, un `if` por ejemplo)
Simplemente cada vez que se lea una línea del csv, añadir lo que hace en memoria
Si se decide ir hacia atrás, guardar el punto del csv actual y leer la memoria el número de veces que el jugador decida
Y para avanzar, lees la memoria desde ese punto hacia el final de la lista
Cuándo ya no tenga más elementos la lista seguir con el csv
Para ahorrar espacio se podria guardar en vez de cada linea en el stack, cada salto de linea, y evaluar en cada retroceso si la linea actual se llego a traves de un salto de linea, si no es asi, simplemente lee la linea anterior, si es asi, entonces vuelve a la linea anterior al salto de linea
Para simplificar un poco la lógica del diálogo, se podría analizar todo el CSV, antes de comenzar a mostrarlo (como un proceso de compilación, conversión de tokens o algo parecido), ya tienes que sobre analizar el diálogo a futuro para la instrucción `when` 6:48
Esto generaría una carga inicial un poco más lenta (ya que requeriría de cargar todo el dialogo en un primer momento y analizarlo)
- Cada vez que inicies una partida
- Cada vez que cargues una partida
Podrías dividir el dialogo en diversos CSV, para reducir la carga y reducir el tiempo, dividiéndolo en varias sesiones
Pero después ya tendrías una estructura que seguir:
- Eliminas la instrucción `when` si tiene una equivalencia con `if`
- como ya se tiene analizada toda la estructura del diálogo ya pues moverte hacia adelante, atrás, o en varias bifurcaciones del dialogo
- Como todo el diálogo se encuentra en memoria todo momento, no haría falta moverse nuevamente por el CSV, solo lo lees una vez
Alva majo venga la alegría descuido gogogo buscar
Parece que va a ser más complejo de lo que parece, pero quedará un buen producto final.
He jugueteado con hacer una VN en unity y en godot y en cuanto has dicho lo de "rebobinar" me ha entrado PTSD porque a mi me pasó justo lo mismo xDD Al final las soluciones que encontré para echar atrás el texto fueron:
-Cargar la escena desde el principio y skipear directamente hasta la parte deseada
-Guardar todas las variables necesarias para recrear la escena con cada linea de dialogo
Ninguna me terminaba de convencer y me dio muchos dolores de cabeza, entonces me di cuenta de que era mucho mas fácil y cómodo para el jugador ponerle un log de texto al jugador accesible con la rueda del ratón o un botón, a veces estamos tan ocupados pensando si podemos hacer algo que no nos paramos a pensar en si debemos.
Y sobre lo del continue yo lo hice de otra manera, haciendo que el texto no se borre al avanzar si pones un + al final, pero supongo que lo que se gana en comodidad se pierde por otro lado como con todas las cosas
6:25 no importa la situación cuando se comienza a programar esta siempre es una opción válida.
CSV, no son hojas de calculo, de hecho las iniciales vienen del inglés de Valores Separados por Comas. Como a Separarse Values. Lo que pasa que han evolucionado, sobre todo cuando se empezaron a usar con hojas de cálculo y hoy en día puedes separar por otros valores, como el salto de linea. Aunque esto realmente no importa en lo que has comentado, lo digo por tener la información lo más veraz posible. Buen video como siempre y suerte con el proyecto. P.D: Gracias por hacer referencia a mi juego del Ahorcado XD.
Que pro el sistema, no? Es un planteamiento interesante. Aunque se ve demasiado complejo y además el texto de los diálogos deberías tenerlo guardado de forma independiente (para que los traductores puedan manejarlo de forma mas clara).
Deberías darle una vuelta, pero ese es el espíritu :)
2:44 referencias
Nueva remera adquirida:
-tres en raya ✅
6:47 When desarrollas tus juegos en Godot
El futuro es hoy, oiste viejo? Jejejejej
But se termina eliminando :'v
Ohhh mi código de programación xdXdXdCccDcxD
titulo alternativo: he hecho un lenguaje de programacion para mi juego, en excel
Alva, ya te lo advertí. Ríndete al todopoderoso Ren'py. Es literalmente la mejor opción para hacer una novela visual sin calentarte mucho los cascos (requiere aprendizaje, pero en mi opinión, merece mucho la pena).
falto la remera amarilla, muy bien video
Buenas Alva, formo parte de Campanella Studios e hice un motor para novelas visuales y espero que lo siguiente pueda servirte de ayuda:
Lo hice en Unity y tu sistema es algo parecido al mío, en Unity lo que hacía era crear ScriptableObjects Dialogue, y ese diálogo contiene una lista de IDs de los diálogos en el CSV y tiene otras cositas como que dependiendo del id del diálogo puedes cambiar el fondo, música, añadir un sonido, mostrar una imagen, etc.
Y en el tema de las decisiones hice que los Dialogue tuviesen una propiedad NextDialogue y al terminar pues pasaba al siguiente y así, de esa manera me quedaba una estructura de nodos (Dialogue) la cual podía dividir si habían decisiones y quedaba como un árbol de decisiones bastante ordenado.
PD: Si en un futuro necesitas datos estadísticos para saber el porcentaje de finales buenos o malos de tu novela visual, en mi canal explico como usar un software que hice yo mismo con Python que te ayuda a balancearla y no la hagas demasiado fácil o difícil. Un saludo