Baltasarq / fi-js

Framework JavaScript para ficción interactiva / JavaScript framework for interactive fiction
http://baltasarq.github.io/fi-js/
Other
5 stars 4 forks source link

Sobre Guardar y Cargar #7

Closed paravaariar closed 1 year ago

paravaariar commented 1 year ago

En caso de que llegado un momento se decidiera implementar esta funcionalidad, ¿Cuál sería la mejor solución técnica? Por un lado hay propiedades que se guardan en los propios elementos, por ejemplo ponAbierta(true) etc. luego está también guardar en que localidad están las personas, y también luego otras variables booleanas o de otros tipos que el desarrollador añada para controlar ciertos aspectos del juego. Lo que es propio del motor en teoría está accesible desde ctrl de una manera predefinida, y quizás para las variables relevantes podría haber alguna manera de predefinir dónde guardarlo para que una nueva funcionalidad genérica del motor permita guardar en slots y cargar las partidas... Luego entiendo que en LocalStorage del navegador se podría guardar todo eso. ¿Qué otra solución podría existir? ¿Alguna idea o desarrollo existente sobre cuál sería la mejor forma?

Baltasarq commented 1 year ago

No entiendo. Existe la posibilidad de guardar y cargar partida, y se basa en guardar los comandos del usuario hasta el momento. Cualquiera de mis juegos tiene esa posibilidad incorporada... ¿o te refieres a alguna otra cosa?

paravaariar commented 1 year ago

Tienes toda la razón! Estuve probando poniendo "guardar" y "cargar" en castellano pero no funcionaba y pensaba que no estaba soportado, pero veo ahora que si cuando estoy jugando pongo "load" o "save" en inglés sí que lo guarda y carga. Voy a mirar como sería la manera de poder hacer que al poner "guardar" se ejecute el código del load y así. Si te suena como hacerlo de la manera más correcta avísame please. Creo que esto del load y save podría añadirse a la documentación. Y una pregunta, me parece muy válido lo de hacerlo guardando el historial y reproduciéndolo, pero si esto es así imagino que los juegos no podrán usar cálculos aleatorios, no?

Baltasarq commented 1 year ago

Ahora mismo dudo de cual es el formato exactamente, pero creo que en cada ejecución se genera la semilla y también se guarda. Ahora no puedo, pero te contesto a todo más tarde.

On Fri, Apr 28, 2023, 23:38 paravaariar @.***> wrote:

Tienes toda la razón! Estuve probando poniendo "guardar" y "cargar" en castellano pero no funcionaba y pensaba que no estaba soportado, pero veo ahora que si cuando estoy jugando pongo "load" o "save" en inglés sí que lo guarda y carga. Voy a mirar como sería la manera de poder hacer que al poner "guardar" se ejecute el código del load y así. Si te suena como hacerlo de la manera más correcta avísame please. Creo que esto del load y save podría añadirse a la documentación. Y una pregunta, me parece muy válido lo de hacerlo guardando el historial y reproduciéndolo, pero si esto es así imagino que los juegos no podrán usar cálculos aleatorios, no?

— Reply to this email directly, view it on GitHub https://github.com/Baltasarq/fi-js/issues/7#issuecomment-1528120131, or unsubscribe https://github.com/notifications/unsubscribe-auth/AABRCNARLC6C3PFXLLVMN4DXDQ2D3ANCNFSM6AAAAAAXOEDDPA . You are receiving this because you commented.Message ID: @.***>

paravaariar commented 1 year ago

ah! ya lo veo en el código de fi.js, efectivamente hay una seed que se guarda, y luego la idea será de usar siempre el método rnd del propio fi-js cuando se quiera un número aleatorio. Está muy bien. Creo que no está en la documentación en la Wiki. Me falta descubrir cómo hacer para capturar la entrada del usuario para poder hacer algo cuando el jugador ponga verbos que no son parte de las acciones pre-establecidas, por ejemplo para lanzar "save" cuando ponga "guardar", ¿o crees que se debería añadir guardar como sinónimo de save en verbs.js? Tengo la impresión que dejarlo en inglés fue a propósito pero no estoy muy seguro si es lo mejor...

Baltasarq commented 1 year ago

En vampiro.js tienes al final la creación de una acción. Si solo quieres meterle sinónimos a una acción, basta con encontrarla y rellenar verbs.

const loadAction = actions.getAction( "load" );
loadAction.verbs.push( "carga" );
paravaariar commented 1 year ago

En el apartado Interacción de la Wiki se podría añadir quizás una nueva sección, algo de este tipo:

Guardar y cargar partida

El jugador puede guardar y cargar la partida escribiendo el comando save o load. Si se desease añadir en castellano, se puede añadir código para contemplar esos sinónimos. Por ejemplo:

loadAction = actions.getAction( "load" );
loadAction.verbs.push( "carga" );

Internamente, el mecanismo de guardar y cargar está basado en guardar los comandos que el jugador ha ido escribiendo desde el comienzo del juego en el local storage del navegador. Se guarda también la semilla para el generador de números aleatorios en caso de que el juego quiera hacer uso del método rnd(min, max) del propio motor. Es importante usar siempre ese método de generar números aleatorios propio de fi-js porque si no los resultados de cargar la partida serían impredecibles.

Los métodos relevantes en el código son save() y load() que pueden ser llamados. Por ejemplo, si quisieras que la partida solo se guardase en ciertos puntos, se podrían quitar las acciones de load y save y llamar a los métodos de fi-js cuando se llegase a esos puntos.

Baltasarq commented 1 year ago

Hola @paravaariar , he hecho lo que me decías (lo he copiado en la wiki) y también te he añadido como colaborador de la librería. De esta forma, creo que, como estñas tan activo como usuario del framework, creo que de esta manera las cosas irán más fluídas.

Baltasarq commented 1 year ago

Cierro la issue pq está ya completada. Estoy trabajando, de hecho, ahora mismo, en completar la wiki con las acciones.