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 😎"
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.
*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
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
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.
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.
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.
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
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
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!! 💪🏻
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
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
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.
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.
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.
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
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
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.
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
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
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
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
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
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 😂🎉
Una idea para hacer el rebobinado: Cada vez que se ejecuta una linea (que no sea de condición como if) añadir en una pila (array) un objeto con 3 propiedades: número de línea, la acción y el conexto Ir hacía atrás sería ir quitando acciones de la pila y "deshaciebdolas" gráficamente El contexto serviría por si estás en una linea de dentro de un bloque de condición (un if por ejemplo). Seguir hacia delante sería seguir las líneas del csv normal teniendo en cuenta el contexto. Para deshacer una acción supongo que se necesita algo de programación porque "mover persona a la izquierda" al deshacerlo supongo que sería "mover el persona a la derecha". Cada posible "comando ' necesitaría su comando de "inversa"
Estoy de acuerdo en lo del modo inverso. Con lo poco que sé de c++ y desconociendo si sea posible en lo que sea que programe alva majo (no he visto sus videos últimamente, y no me acuerdo en qué lo está haciendo) yo propondría que el personaje sea un struct con los siguientes atributos y métodos. struct Personaje{ string nombre; int posX,posY; int velX,velY; int transparencia; bool estaEnPantalla; void copytorenderer(); void aumentarX(){posX = posX + velX;} }; Que el script que lee el csv tenga las instrucciones para cambiar los atributos del personaje, por ejemplo que la velocidad velX se vuelva negativa (personaje.velX = - personaje.velX;) y así la instrucción de mover a la izquierda se convierte en mover a la derecha, o un atributo de transparencia aumenta hasta que el personaje no se vea en pantalla. De esta forma se regresa una instrucción en el csv y se ejecuta con los parámetros invertidos, y luego regresas otra línea y ejecutas la nueva instrucción.
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).
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.
No se si te interesa o si me leerás, pero para hacer más fácil la parte del csv, podrías almacenar cada goto de la conversación en una lista dentro del programa y así volver atrás sin problemas incluso si hay condicionales
Ahora serio, programando mi juego recientemente, estuve pensando en forma de dar soporte para mods y que estos tengan interacción con el juego compilado, para lo cual hay múltiples soluciones, yaml siendo una opción, LUA, el mismo lenguaje en el que estoy haciendo el juego (typescript), react, jsx. Esto podría ayudarte un montón con convertir tu guión en interactuable porque manejan eventos asíncronos, objetos, tipos de datos, etc... No te sobrecompliques creando un lenguaje en el arcaico CSV y creando un compilador/interprete para eso, te prometo que muchas de las opciones de arriba no tienen una curva de aprendizaje larga y te ahorrarán mucho tiempo cuando refactorices.
@@yelitzanieto1250 ¿no te parece que sobrecomplica mucho tener que hacer un mini interprete para csv? que, no sé, usar jsx, LUA, cualquier otra cosa, no tiene porqué ser yaml.
@@chuchocore Si se podría, pero es como que vas a utilizar un lenguaje (X) muy difícil de utilizar con uno que es más fácil y es mejor porqué solamente es algo fácil, si fuera algo más profesional se utilizaría eso
Basicamente has programado un compilador. Al final un compilador hace un analysis lexico con una state machine parecido al parseo de tus CSVs. Para hacer la funcion de rebobinado es bastante mas complejo de lo cuentas y es muy dificil considerar todos los edge cases que puedas tener, especialmente si tienes que asegurarte que el estado es el mismo del que saliste
6:14 ¡stop! 🐓🗿
Xddd
😂😂
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:
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🎵🎵🎵🗣️🗣️🗣️🔥🔥❗❗
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.
alva majo rule 34 buscar
genial el primer comentario que veo
El sabio:
alva majo senos buscar
Con guinxu?
No es tiktok, npc
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.
*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
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
6:22 cuando me va mal en un examen
OJO! 7:33 Cuidao!!! , me parece que eso jamas ocurrira.
La tesis final de grado del 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.
¿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.
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
th-cam.com/video/d5QYfv0Q7Iw/w-d-xo.html@@jesustorrejon1509
Sí Alva Majo, todavía estoy aquí...
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.
6:28 jajaja no te rindas, que te explicas muy bien!
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.
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
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
Con lo del aspect-ratio, puedes usar el nodo AspectRatioContainer de godot y hacer todo ahí dentro menos algunas cosas que pueden "sobresalir"
5:55 tambien podrias hacer algo como: En el dialogo: daisy! codigo intermedio ingrid!
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 😉
8:16
Con merchandising y todo 🙀
Un buen video de Alva Majo después de la escuela, siuuuuu
Antes de ver este video estaba pensando en hacer una aventura gráfica...
Ahora creo que solo haré juego de plataformas y simuladores 🥹
Buen video alba, yo llevo ya mas de un año desarrollando mi primer juego (metroidvania 2d), mucho animo con tu proyecto!
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
Excelente consejo, eso de rehacer el código cuando sabes los aspectos que debes ocupar.
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
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!
6:25 me he reído demasiado 😂😂😂 ànims Alva!
Y todas estas complicaciones sin tener en cuenta el árbol argumental con todas las variantes de la historia.
Un buen vídeo de Alba Majo después de la escuela
AHI ESTAMOS! Friendship ended with Unity, now Godot is my best friend
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
Se está montando un transpilador el tío XD.
Mano eres un crack, a la firme que wen video la rcmsre.
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!! 💪🏻
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
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
Tremendo laburo la verdad
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.
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
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.
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.
continue, goto y stop.....los 3 caballeros de la muerte de cualquier lenguaje malo
2:44 referencias
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 ha encantado este video, personalmente me ha servido 🦔
Ese final no lo esperaba jajaja
Alva mago nos sorprende de nuevo 👏
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
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.
Yo solo espero que nikola y lariat aparezcan en este juego son buenos personajes, iconicos y chulos
Majorariatto verse gente
Si hay AlvaMajo, por que no hay AlvaJunio?
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
Me encanta la idea. Luego puedes hacer tu motor de juego open source para que cualquiera pueda crear su propio juego de novela visual 😊
esto a lo mejor me hubiera servido hace un par de semanas para una jam x3
Nada, muy bueno el video. Claramente tienes experiencia cagándola xd. Sub.
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
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
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
6:25 no importa la situación cuando se comienza a programar esta siempre es una opción válida.
Así es un poco como funcionaba el SCUMM de LucasFilm. Grande, Alva!
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
Esto me recuerda al sistema de dialogos de cave story, además de dialogos controla música, movimiento de npcs y otros detalles
La caspa en el cabello de Alva me distrajo todo el video
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 😂🎉
6:22 como dev, demasiado real
Te kiero mucho alva, un beso
Me alegra haber visto al verdadero alva majo al 5:00 😊
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)
Alva majo venga la alegría descuido gogogo buscar
Alva es muy listo 💥
6:25
Cuando ya no sabes cómo pagar las deudas y te quedas sin ideas:
Parece que va a ser más complejo de lo que parece, pero quedará un buen producto final.
La dueña de mis chaquetas 🤩
Una idea para hacer el rebobinado:
Cada vez que se ejecuta una linea (que no sea de condición como if) añadir en una pila (array) un objeto con 3 propiedades: número de línea, la acción y el conexto
Ir hacía atrás sería ir quitando acciones de la pila y "deshaciebdolas" gráficamente
El contexto serviría por si estás en una linea de dentro de un bloque de condición (un if por ejemplo). Seguir hacia delante sería seguir las líneas del csv normal teniendo en cuenta el contexto.
Para deshacer una acción supongo que se necesita algo de programación porque "mover persona a la izquierda" al deshacerlo supongo que sería "mover el persona a la derecha". Cada posible "comando ' necesitaría su comando de "inversa"
Estoy de acuerdo en lo del modo inverso. Con lo poco que sé de c++ y desconociendo si sea posible en lo que sea que programe alva majo (no he visto sus videos últimamente, y no me acuerdo en qué lo está haciendo) yo propondría que el personaje sea un struct con los siguientes atributos y métodos.
struct Personaje{
string nombre;
int posX,posY;
int velX,velY;
int transparencia;
bool estaEnPantalla;
void copytorenderer();
void aumentarX(){posX = posX + velX;}
};
Que el script que lee el csv tenga las instrucciones para cambiar los atributos del personaje, por ejemplo que la velocidad velX se vuelva negativa (personaje.velX = - personaje.velX;) y así la instrucción de mover a la izquierda se convierte en mover a la derecha, o un atributo de transparencia aumenta hasta que el personaje no se vea en pantalla.
De esta forma se regresa una instrucción en el csv y se ejecuta con los parámetros invertidos, y luego regresas otra línea y ejecutas la nueva instrucción.
Mola!!! 👏🏻👏🏻👏🏻
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).
Nueva remera adquirida:
-tres en raya ✅
Que locura, que complejo sentí todo
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 locura la publicidad
Alva Mago 🧙
Asumo que probaste complementos como 'Dialog Manager' o 'Dialogic' tienen muchas características interesantes
No se si te interesa o si me leerás, pero para hacer más fácil la parte del csv, podrías almacenar cada goto de la conversación en una lista dentro del programa y así volver atrás sin problemas incluso si hay condicionales
titulo alternativo: he hecho un lenguaje de programacion para mi juego, en excel
La tecnología YAML viendo como Alva se complica usando CSV: "¿Acaso soy una broma para ti?"
Ahora serio, programando mi juego recientemente, estuve pensando en forma de dar soporte para mods y que estos tengan interacción con el juego compilado, para lo cual hay múltiples soluciones, yaml siendo una opción, LUA, el mismo lenguaje en el que estoy haciendo el juego (typescript), react, jsx. Esto podría ayudarte un montón con convertir tu guión en interactuable porque manejan eventos asíncronos, objetos, tipos de datos, etc... No te sobrecompliques creando un lenguaje en el arcaico CSV y creando un compilador/interprete para eso, te prometo que muchas de las opciones de arriba no tienen una curva de aprendizaje larga y te ahorrarán mucho tiempo cuando refactorices.
Diría yo que podrías utilizar YAML pero para casos como el de Alva se utiliza CSV
@@yelitzanieto1250 ¿no te parece que sobrecomplica mucho tener que hacer un mini interprete para csv? que, no sé, usar jsx, LUA, cualquier otra cosa, no tiene porqué ser yaml.
@@chuchocore Si se podría, pero es como que vas a utilizar un lenguaje (X) muy difícil de utilizar con uno que es más fácil y es mejor porqué solamente es algo fácil, si fuera algo más profesional se utilizaría eso
Alva no sabe que cuando use sus manos para acompañar el mensaje que está diciendo y que sea visible en cámara, dominará el mundo.
Basicamente has programado un compilador. Al final un compilador hace un analysis lexico con una state machine parecido al parseo de tus CSVs. Para hacer la funcion de rebobinado es bastante mas complejo de lo cuentas y es muy dificil considerar todos los edge cases que puedas tener, especialmente si tienes que asegurarte que el estado es el mismo del que saliste
Adoro los "¿todavia estas aqui?"❤🕊❤