baltasarq / fi-js Goto Github PK
View Code? Open in Web Editor NEWFramework JavaScript para ficción interactiva / JavaScript framework for interactive fiction
Home Page: http://baltasarq.github.io/fi-js/
License: Other
Framework JavaScript para ficción interactiva / JavaScript framework for interactive fiction
Home Page: http://baltasarq.github.io/fi-js/
License: Other
En la https://github.com/Baltasarq/fi-js/wiki/Movimientos en el ejemplo se usa estaAbierta varias veces y creo debe ser estaAbierto
En https://github.com/Baltasarq/fi-js/wiki/Creando-acciones-nuevas#buscando-una-acci%C3%B3n pone el código siguiente un par de veces
const examineAction = actions.getAction( "examine" );
pero cuando lo uso me da error:
"caught SyntaxError: Identifier 'examineAction' has already been declared"
creo que abría que borrar el const, pero si borro el const me pone "caught TypeError: Assignment to constant variable."...
Parece que no es posible para el jugador de reiniciar, sin que tenga que dar a actualizar el navegador, no?
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?
Cuando se usa el modificador ^{ } descrito en https://github.com/Baltasarq/fi-js/wiki/Loc#modificaciones-en-los-textos
parece que solo funciona si la descripción tiene unas llaves.
Si ponemos por ejemplo:
^{Mi texto solo una vez.} Más texto. ^{Otra parte del texto solo una vez.}
La primera vez que entramos pone: Mi texto solo una vez. Más texto. ^{Otra parte del texto solo una vez.}
La segunda vez que ponemos "mirar", aparece Más texto. ^{Otra parte del texto solo una vez.}
Me gustaría una música ambiente en bucle durante todo el juego. Mirando la wiki debería de ser algo así:
let snd = {
"src": "res/music.mp3",
"volume": 1.0,
"loop": true
};
ctrl.audio.setInfo( snd );
ctrl.audio.play();
Por un lado, si lo pongo en game.js o en el ctrl.ini() parece que el navegador me lo bloquea por la nueva política contra el autoplay de los navegadores que exige que tengas que interactuar primero con la página. Podría preguntar si se quiere música o no...
Sin embargo, si lo pongo en un preExamine de la primera localidad por ejemplo, me da un error más raro...
GET file:///C:/code/[object%20Object] net::ERR_FILE_NOT_FOUND
como si el path al src no se haya capturado bien...
Creo que la Wiki tendría que tener un apartado solo para el Audio, ahora está un poco disperso en Loc y en Miscelánea. Así una persona que solo se encarga de la música en un juego puede verlo ahí directamente. También lo que permite el motor podría estar más claro, si he entendido bien no se puede tener por el momento una música ambiente global y fxs o sonidos rápidos en sucesos que no la paren, no?
En una location, si pongo una imagen grande se escala muy bien al tamaño de la pantalla "locBiblioteca.pic =", pero en la intro, si uso "ctrl.ponImg(" y pongo una imagen muy grande, se escapa de la pantalla por la derecha.
Este bug está relacionado con #3 pero por lo menos no era tan bloqueante.
Si llamamos a updateDesc con un solo argumento, por ejemplo un preLook() como dice la Wiki resulta que loc tiene el valor de un String... y ahí empiezan los problemas que hace que luego falle todo. El chequeo de argumentos que hay ahora no lo soluciona.
function updateDesc(loc, desc)
{
...
if ( arguments.length < 1
|| loc == null )
{
loc = ctrl.places.getCurrentLoc();
}
if ( arguments.length < 2
|| desc == null )
{
desc = loc.desc;
}
En https://github.com/Baltasarq/fi-js/wiki/Lista-de-acciones#lista-de-acciones hay por lo menos una que habría que actualizar, drop soporta también "lanzar", "lanza", "lanzo". Igual es la única que no está actualizada, no he mirado en detalle, pero estuve a punto de crear la acción "lanzar" hasta que vi que funcionaba con lo que ya había puesto para "dejar".
En verbs.js actualmente hay
const waitAction = actions.crea( "wait",
[ "espera", "z" ]
);
creo que para seguir con el mismo estilo de otras acciones, debería valer también por lo menos "esperar" y "espero"
Igual está por ahí, pero me está costando en la wiki encontrar información sobre llevar un objeto al inventario, supongo que es algo como miObjeto.moveTo(ctrl.personas.getPlayer());
Imagino que un buen sitio para añadir algo al respecto sería en https://github.com/Baltasarq/fi-js/wiki/Obj#objetos-objetos-contenedores-y-objetos-para-ponerse
Es una tontería, pero un logo puede hacer el framework más reconocible por la gente :)
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?
No estoy 100% seguro pero creo que la Wiki no menciona lo que se puede hacer gracias al método buildDescOfEntity
* Takes a description and removes or prepends
* the intro text, marked with ^{ and }
* i.e. "^{This only appears once. }This is the regular desc."
* ```
Por defecto, al final del texto de una localización aparece la lista sintética de objetos que hay presentes.
Creo que no hay alguna forma de desactivar esto. Lo quité añadiendo if (loc != player) { return "" };
después de está línea
Line 2199 in 453f578
Por ejemplo, en vampiro https://baltasarq.github.io/fi-js/lib/ ponemos "encender antorcha" sale del juego a una página 404. La solución creo que es en vergs.js, en startAction.doIt = function(s) {, añadir un if ( objDest != null ) { justo después del primer else. Parece que así está hecho para las otras acciones.
La función endGame(msg, pic)
permite añadir imágenes en el parámetro pic pero me interesaba que apareciese un video y no una imagen. Para solucionarlo cambié un poco el código de fi.js de esa función, mi código puede mejorarse seguro, pero me permitió el resultado esperado.
// if ( pic != null ) {
// const pImg = document.createElement( "p" );
// const img = document.createElement( "img" );
//
// pImg.align = "center";
// pImg.style.width = "100%";
// img.style = "width: auto; height: auto; max-width: 70%";
// img.src = pic;
// img.alt = img.title = "game over";
//
// pImg.appendChild( img );
// dvPic.appendChild( pImg );
// dvPic.style.display = "block";
// }
if ( pic != null ) {
const pImg = document.createElement( "p" );
pImg.align = "center";
pImg.style.width = "100%";
if (pic.endsWith(".mp4")) {
const video = document.createElement( "video" );
video.style = "width: auto; height: auto; max-width: 70%";
video.width = "320";
video.height = "240";
video.autoplay = "true";
video.muted = "true";
const videoSource = document.createElement( "source" );
videoSource.src = pic;
videoSource.type = "video/mp4";
video.appendChild(videoSource);
pImg.appendChild( video );
} else {
const img = document.createElement( "img" );
img.style = "width: auto; height: auto; max-width: 70%";
img.src = pic;
img.alt = img.title = "game over";
pImg.appendChild( img );
}
dvPic.appendChild( pImg );
dvPic.style.display = "block";
}
No estoy seguro si hay algo que estoy haciendo mal o si hay un bug...
Tengo una acción que pone algo en el área de resultado pero quiero también que modifique ligeramente el código de la descripción de la localidad. Uso el preLook para tener un if que me da bien el texto nuevo. Primero usando lo que comenta la wiki
ctrl.lugares.updateDesc( ctrl.lugares.getCurrentLoc().preLook() );
me daba error cuando llegaba a if ( loc.audio.src != null ) {
y ya no se puede jugar.
Pero usando ctrl.lugares.updateDesc( ctrl.lugares.getCurrentLoc(), ctrl.lugares.getCurrentLoc().preLook() );
ya no me daba el error. Sin embargo, el updateDesc llama desc = ctrl.buildDescOfEntity( loc );
que directamente hace que se reescriba el parámetro desc
que le he pasado a updateDesc... total, que vuelve a poner el mismo texto que tenía al principio, y no el nuevo calculado con el preLook...
En algunos sitios de fi.js está por defecto que aparezcan cosas en modo que puedas pinchar. Por ejemplo esta línea en list toret += "${" + obj.id + ',';
o esta otra toret += examineAction.verbs[ 0 ] + ' ' + obj.id;
o toret += " (${puesto,";
Line 2229 in 453f578
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.