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

Comando para que un tester guarde la transcripción en un fichero de texto? #15

Open paravaariar opened 1 year ago

paravaariar commented 1 year ago

Una manera que me gusta bastante para depurar juegos es decirle al jugador o al tester que guarde una transcripción de los comandos que fue introduciendo. Creo que es también más o menos habitual que la transcripción también vaya guardando lo que aparece en la descripción y en el texto de resultado de acciones. Está disponible o sería posible un comando para guardar este histórico de las partidas y que lo descargase en un archivo de texto plano?

Baltasarq commented 1 year ago

He creado la acción "transcript" con los sinónimos "transcribo", "transcribir", "transcribe", que guarda todo el histórico de comandos hasta el momento, en un archivo llamado transcript.txt. Faltaría transcribir además todo lo mostrado al usuario, tanto mediante ctrl.print() como simplemente las descripciones de las localidades y el resultado de las acciones.

paravaariar commented 1 year ago

aparte de los textos, la versión actual no guarda comandos de acciones que no están registradas. Por ejemplo, si pones un verbo no reconocido, no se guarda.

Baltasarq commented 1 year ago

Esto sucede así por cómo funciona el parser. No es algo que pueda añadirse fácilmente, pues depende de la arquitectura del reconocimiento del comando. Si lo que quieres es que los jugadores puedan dejar mensajes al desarrollador, lo único que se me ocurre es añadir un comando como "rem" o "rec" o incluso "msg"... cualquier posibilidad serviría.

paravaariar commented 1 year ago

He hecho un workaround que no se si creará nuevos problemas... en load o save por ejemplo... Es en la función parse de fi.js. Como ves antes solo guardaba si sentence.act era diferente de null, ahora la guarda siempre...

// Execute action
                identifyObjects();

        // paravaariar guardar todo en history, incluso verbos que no existen
        ctrl.addToHistory( cmd );

                if ( sentence.act != null ) {
             // paravaariar guardar todo en history, incluso verbos que no existen
                    // ctrl.addToHistory( cmd );
                    const playerAnswer = player.preAction();

luego no borro el hecho que haya escrito transcript al guardar el transcript... porque cuando habías puesto transcript varias veces en una partida te lo intentaba ejecutar

    function saveTranscript()
    {
        // Prepare history
        let transcript = history

        // paravaariar no borrar la última
        // let lastLinePos = transcript.trim().lastIndexOf( "\n" );

        // if ( lastLinePos > 0 ) {
        //    transcript = transcript.substring( 0, lastLinePos );
        //}

para que funcione bien el load sin intentar bajar los transcripts, cambié esto en el "load"

for(var i = 0; i < cmds.length; ++i) {
                    var cmd = cmds[ i ];
                    var s = { "verb": cmd };

                    if ( !saveAction.match( s )
                      && !loadAction.match( s )
            // paravaariar transcript tampoco la lanzamos
            && !transcriptAction.match (s))
                    {
                        parser.parse( cmd );
                    }
                }
Baltasarq commented 1 year ago

Lo siento, pero no voy a implementar esto. Como te dije, puedo pensar en un verbo o incluso un caracter especial, pero cambiar el comportamiento del parser a estas alturas, no. No sé qué posibilidades de efectos laterales pueden suceder con los juegos que ya existen. Por supuesto, en tu juego puedes modificar lo que quieras. Eso sí, tu juego permanecerá "anclado" a esa versión que modifiques.

paravaariar commented 1 year ago

Entiendo. De todas maneras esto es un workaround porque para hacer un transcript bien que guarde todo tendría que ser con otra cosa que no fuese el history directamente, quizás así sea menos intrusivo a lo que ya existe. Le daré una vuelta a ver si se me ocurre :)