Post del foro "General InformATE" en el que me enrroll sobre la necesidad o no de crear soluciones para el comportamiento por defecto de InformATE que permite la interaccin no deseada con techos, cielos y dems y que explica la razn de ser del ensayo de libreras "Facilitar_alt" y "Facilitar_alt_02":


[quote="Mapache"]Yo por ejemplo estoy deseando que por defecto no se pueda andar lamiendo todo... hay alguien que no?[/quote]

Pueees, si te he de ser honesto... aheem, yo! 

Ya se explicaron largo y tendido en su da los motivos para pensar que una solucin "por defecto" introducida en la librera no era necesariamente la mejor de las ideas. Por supuesto, no hay ningn problema en exponerlo de nuevo. Hay bsicamente dos tipos de razones para preferir las soluciones "individuales" (que cada uno lo implemente como mejor le convenga) a las "colectivas" (aadamoslo a la librera por defecto) al problema de andar tocando techos o lamiendo cielos en Inform: la [i]filosfica[/i] y la [i]prctica[/i].

-[b]La filosfica[/b]: Inform propone, y no impone, un modelo de mundo, un modelo bastante bsico, ya puestos a decirlo todo. Es potestad, y por tanto, responsabilidad del autor, pulirlo y adaptarlo a sus necesidades concretas.
En el "sus" est la clave, es decir, se trata de cumplir las necesidades del autor y no, por ejemplo, las mas. A m puede parecerme (por motivos que a mi me resultarn incontestablemente incuestionables) que, adems de, como propone Urba, responder a "saltar por la ventana" la librera est preparada para entender "tirate por la ventana", o que adems de "sube arriba" la librera pueda pillar "sube hacia arriba" (que ahora mismo no lo coge) (otra cosa es que tampoco entienda "baja abajo" pero ese ya es el tipo de "fallos" que, emho, deberan ser escrupulosamente preservados para la posteridada y uso y disfrute de futuras generaciones XDDD)
A lo que voy, si por cada frase hecha o comportamiento por defecto que a m se me ocurriese que fueran de "sentido comn" hubiese que hacer un aadido a la librera, esta pasara de ser "simplemente" un monstruo dficil de controlar (que es como naci XDD) a convertirse adems en lo que yo llamara un inmenso cementerio de "cdigo-parsito", es decir, lineas de programa pensadas para ser tiles a una persona en una determinada situacin con las que luego tienen que cargar todas las personas en todas las situaciones. Eso s, quiz el tamao de fichero generado fuese aplicable a la categora de ficcin interactiva "monumental" que hay en la seccin de IF de underdogs, la que sealaba Usagi el otro da ;-)

-[b]La prctica[/b]. En la librera InformATE, por herencia del Inform ingls, palabras como "techo", "cielo" o "arriba" resultan, para lo bueno y lo malo, ser sinnimos incrustados a fuego del "obj_arriba", que a su vez viene incrustado a fuego dentro del objeto "brujula" que a su vez est incrustado a fuego dentro de todo lo referente al sistema programado de movimiento del jugador. Una de las consecuencias indirectas de ello es que el obj_arriba (y con l, todos los vocablos que lo denominan) est al alcance del jugador en todas las localidades del juego. 

(Curiosamente, mientras que Inform tiene una gramtica demasiado "estricta" para los programadores de herramientas "tipo-paws" para sus propios desarrolladores, como indican a menudo en el manual original, es en realidad demasiado "abierto" y adolece de, en aras de pillar el mayor nmero posible de frases coherentes del jugador, tragar tambin con buena parte de las incoherentes. As, el peculiar funcionamiento de las acciones de movimento hace que, a poco que haya una salida "arriba" en una localidad, la librera trague con frases inverosmiles como "metete en arriba" "metete en el techo" "sube al cielo","lame arriba", etc... sin importarle, por supuesto, donde ests en ese momento XDD)

Por supuesto, hay literalmente docenas de soluciones posibles a todo esto, y, por supuesto, ninguna de ellas es 100% eficaz en el 100% de las ocasiones. Atacar el problema "desde dentro", es decir, modificando la librera, implica el riesgo de crear un efecto domin sobre muchos otros comportamientos por defecto relacionados con ese de consecuencias imprevisibles (o, si lo prefieres, previsiblemente desastrosas XDD). En el mejor de los casos se podra crear un modelo "por defecto" que cubrira parte de los escenarios posibles, pero no servira para otros (con lo cual sera harto discutible su valor como opcin por defecto) Pensemos que las necesidades no van a ser ni siquiera remotamente parecidas en las distintas obras de diferentes autores y, de hecho, van a ser variables dentro de cada una de ellas. As, en una misma historia, no ser lo mismo que el jugador est buceando bajo el agua a que est en la plaza del centro de la ciudad, frente a la catedral... y no ser lo mismo que est sentado en un banco de la catedral, con su cpula de decenas de metros de altura a que haya descibierto un angosto pasadizo por el que apenas cabe una perosana que lo lleva a la cripta que... Ya sabis, el tratamiento que habr que dar a techos, cielos y dems ser distinto en cada momento.

Es por todo ello que de siempre (este tema se ha discutido a menudo en raif, como os podais imaginar) se ha pensado que lo ms ptimo, econmico, efectivo, y menos peligroso son las soluciones externas y personalizadas, vamos, que cada uno se busque la vida para aplicar lo que mejor se acople a sus necesidades concretas.

Con todo, se puede opinar que no es de recibo que el "fallo" de andar por ah comiendose los techos XDD o metiendose en los cielos sea recurrente en los principiantes por ignorar este detalle rebuscado del funcionamiento interno de la librera, para lo cual quiz lo mejor sera una solucin, llamemosla, intermedia.

Podramos proponer la creacin de una pequea librera externa que manejase el tema del modo ms "neutral" y a su vez ms modificable posible que se incluyese en la distribucin de la librera (y a su vez en el kit del autor), y por tanto, estuviese lo ms a mano posible del aprendiz de creador de aventuras. Quiz una versin alternativa y ampliada de "Facilitar.h" que, al fin y al cabo, es llamada incluso desde la propia plantilla de aventura incluida en la distribucin, fuese la opcin ms "amigable" para el novato sin suponer una imposicin por defecto negativa para el resto de autores. En cuanto termine de postear esto tratar de subir un par de propouestas ms concretas, cuyo cdigo fuente voy adelantando aqu mismo.

Cada una de ellas, llamadas provisional y respectivamente "Facilitar_alt.h" y "Facilitar_alt_02.h" funciona manejando dos clases de objetos diferentes para las habitaciones internas y externas, llamados "Habitacion" y "Exterior". As el autor slo tendr que cuidarse de llamar "Habitacion" a las interiores y "Exterior" a las que estn al aire libre. Salvo algn detalle las libreras se encargan de que las respuestas a las posibles acciones sobre techos y cielos (y a los intentos de subir a alguna parte) sean lo ms coherentes posibles. Las frases por defecto son deliberadamente escuetas, para incentivar al autor a cambiarlas por otras lo ms personalizadas posibles, o mejor, en cuanto aprenda a a hacerlo, por rutinas ms elaboradas y dinmicas.

A partir de ahi cada una de ellas presenta sus virtudes e inconvenientes:

-la primera tiene de bueno que es "plug & play" o, en este caso "include & play" XDD, vamos, incluir y listo. El autor slo debe preocuparse de poner Include "Facilitar_alt"; tras los includes habituales.
Su parte mala es que es farragosa de modificar y adems, se "come" el punto de entrada "AntesDelParsing". Esto ltimo probablemente no sea un problema, ya que para cuando el programador est interesado en usarlo para algo tendr conocimientos sobrados para implementar su propia solucin al problema del obj_arriba. An as ser incompatible con otras posibles libreras que lo usasen, pero eso s que no tiene, por el momento, remedio conocido.

Lo que hace a grandes rasgos es buscar en el input del jugador cualquiera de las palabras "crticas", es decir, "techo", "cielo", o "arriba" para, en caso de referenciar al obj_arriba, la propiedad antes de la localidad, sea "Habitacion" o "Exterior" de una respuesta lo ms coherente posible. Por defecto responde frases diferenciadas para los intentos de examinar segn hablemos de techos o cielos, trata de liarse lo menos posible ante intentos de ejecutar la accin "Subir", y bloquea sin piedad cualquier otra accin.
Por supuesto, al programador puede desear modificar esto en lugares puntuales de la aventura, lo que le proporcionar la ocasin ideal para aprender a esquivar los comportamientos por defecto, que es, en ltima instancia, el arte de escribir en Inform!

-La segunda efectua bsicamente lo mismo pero con otro enfoque. Tiene la virtud de ser ms intuitiva a la hora de modificar comportamientos, ya que incluye objetos "techo" y "cielo" diferenciados del obj_arriba sobre los que actuar a placer y con comodidad. El punto negativo es que no es precisamente el colmo de la "encapsulacin", y requiere una intervencin externa a ella. Concretamente necesita una instruccin, a poner, normalmente, en la rutina "Inicializar" que le de una pequea patada al objeto "brujula" y le saque el obj_arriba. La librera ya se encarga debidamente de sustituirlo por una copia convenientemente modificada para el fin que nos ocupa. Es tan sencillo como poner en "Inicializar" una linea de cdigo que diga 
[code]remove obj_arriba;[/code]
Pero entiendo que todo ello ya es bastante poco "novato-friendly", es decir, decirle a uno que acaba de empezar que si tiene que hacer "include" con esto y luego andar poniendo nosequ nosedonde...


En cualquier caso, con estos ejemplos no pretenda tanto ofrecer una herramienta til que se llegue a usar realmente sino ilustrar lo poco prctico que sera introducir en la librera soluciones por defecto, que dificilmente seran de autntica utilidad para la mayora. Lo comprobarais si las intentseis usar y vieseis, a poco que pretendierais adaptarlas a situaciones particulares, como los problemas ms inesperados surgen y se encadenan sin misericordia XDDD (De hecho, tengo ya una lista de posibles situaciones que no cubren y que habra que ir mirando... con tiempo y calma :-)  )




