CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 12 Jul 2020 23:58

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 37 mensajes ]  Ir a página 1, 2, 3  Siguiente
Autor Mensaje
NotaPublicado: 03 Nov 2010 12:32 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Hola a todos.

Después de decidirme por usar informATE para mi primera aventura y de haber abierto un par de post en otro subforo con dudas, he decidido abrir este mensaje para tener un poco más organizadas las dudas que me vayan surgiendo.

Ya he empezado a hacer mi primera aventura, tengo todas las localizaciones hechas y un par de puzzles "facilitos".

Por ahora varios problemas que he tenido, he conseguido sacarlos adelante, seguramente no de la mejor forma, o más fácil, posible, pero bueno, al fin y al cabo los he solucionado.

Pero ahora tengo una duda, que seguro tiene una solución fácil pero la que he encontrado, no me acaba de convencer.

Para que os hagais una idea, dentro de una casa, os encontrais en el vestidor (que es una localización) y desde ahí podeis ver el pasillo (que es otra localización).
Bien, pues la idea es que si el jugador escribe "examinar pasillo" le salga la descripción de la localización pasillo.

Por ahora lo he resuelto creando un nuevo objeto, llamado pasillo, dentro de la localización vestidor, pero estoy seguro que debe haber otra forma para no tener que duplicar objetos tontamente.....

Un saludo.


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 15:30 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Si sólo se trata de examinar el pasillo, me quedaría con la opción que has escogido, teniendo en cuenta que puedes llamar a la descripción de la localidad_pasillo desde el objeto_pasillo, ahorrándote duplicar textos:

Código:
object pasillo_objeto "pasillo" vestidor
with nombre 'pasillo',
antes[;
entrar, ir: !!!
examinar: pasillo_localidad.descripcion(); rtrue;
],
has escenario;


Si en cambio quieres una interacción total entre una y otra localidad, podrías considerar el vestidor como un contenedor dentro del pasillo, como si fuera una caja o un armario entrable.

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 16:23 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Ok, gracias Jarel.

Por lo visto no estaba muy equivocado en mi forma de hacerlo...

Un saludo.


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 17:14 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 23 Abr 2004 08:49
Mensajes: 2956
Ubicación: España (Galicia)
Hola !

Louen escribió:
Por ahora varios problemas que he tenido, he conseguido sacarlos adelante, seguramente no de la mejor forma, o más fácil, posible, pero bueno, al fin y al cabo los he solucionado.


Es decir, has estado aprendiendo.

Citar:
Pero ahora tengo una duda, que seguro tiene una solución fácil pero la que he encontrado, no me acaba de convencer.
Para que os hagais una idea, dentro de una casa, os encontrais en el vestidor (que es una localización) y desde ahí podeis ver el pasillo (que es otra localización).
Bien, pues la idea es que si el jugador escribe "examinar pasillo" le salga la descripción de la localización pasillo.
Por ahora lo he resuelto creando un nuevo objeto, llamado pasillo, dentro de la localización vestidor, pero estoy seguro que debe haber otra forma para no tener que duplicar objetos tontamente.....


No, no la hay. Para mi es uno de los aspectos más molestos de Inform... aunque quizás es un quejarse por vicio, pues en otros entornos a lo mejor ni te lo planteas.

Una cosa que a mi me fastidia muchísimo es que estás en el vestidor, y tienes una descripción al teclear "mirar". Pero tecleas "ex vestidor", y te dice "no puedes ver de eso por aquí" (a no ser que realmente tengas un objeto vestidor "real"). La única forma de solucionarlo que yo conozco, es crear lo que yo denomino "objetos falsos":

Código:
object locVestidor "Vestidor"
with
    descripcion "Un vestidor..."
;

object objVestidorFalso "Vestidor"
with
    name 'vestidor',
    antes [;
        Examinar: <<Mirar>>;
    ]
;


Efectivamente, no estuviste nada desencaminado.

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 17:40 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Hola Baltasarq, gracias por tu ayuda.

Por ahora lo estoy haciendo así yo también, creando falsos objetos, es tedioso pero bueno...


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 17:51 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
De todas formas, a lo mejor hay solución, lo que no sé si será posible ya que mi nivel de inform es 1 xD

ATENCIÓN: SEGURAMENTE LO QUE VAS A LEER A CONTINUACIÓN ES UNA SOBERANA TONTERIA, NO ME HAGO RESPONSABLE...

Se podría crear una clase en la que se incluyera la propiedad antes tal que así:

Código:
Class Habitacion
with antes [; Examinar: if (uno == nombrelocalizacion) <<Mirar>>; rtrue;],
has luz;


Lo que no sé como especificar, ni si se puede, le de "nombrelocalizacion"


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 17:59 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 747
En realidad, hay una forma de hacer que al teclear "> examina el vestidor" se te devuelva la descripción del vestidor como si estuvieses examinando cualquier otro objeto (al menos en INFSP6, supongo que se pueda hacer algo similar en InformATE!):

Código:
[ Handle_SCENERY_PE;
   if ( action_to_be == ##Examine or ##Search or ##Consult ) {
      if ( location.describe ~= NULL ) RunRoutines(location, describe);
      else {
         if ( location.description == 0 ) RunTimeError(11, location);
         else PrintOrRun(location, description);
      }
      InformLibrary.end_turn_sequence();
      return true;
   }
   return false;   ! Error was NOT handled by this routine.
];

[ ParserError pe j;
   switch( pe ) {
      SCENERY_PE: return Handle_SCENERY_PE();
      [...] ! Aquí va el resto de errores del parser.
      default: return false;   ! Error was NOT handled by this routine
   }
];

Con esto, podemos definir las localidades del siguiente modo:

Código:
Object   VESTIDOR "Dentro del vestidor"
  with      name 'vestidor' 'armario' 'mueble',
         description "Estás dentro de un vestidor vacío.",
  out_to   HABITACION,
  has      light;


Y ahora, cuando estamos dentro del vestidor y tecleamos "> examina vestidor/armario/mueble" se nos retorna su descripción en lugar del mensaje habitual "No necesitas referirte a eso para terminar el juego." (o algo parecido) que suele aparecer al intentar examinar palabras definidas en la propiedad nombre de la localidad. Pero ya digo que esto sirve para INFSP6, no estoy seguro de cómo se hace en InformATE!

Un saludo.

(PD: Hay un poco más de información sobre el punto de entrada ParserError siguiendo este enlace).


Arriba
 Perfil  
 
NotaPublicado: 03 Nov 2010 21:13 
Desconectado
Implementador
Implementador

Registrado: 09 Jun 2010 14:50
Mensajes: 1675
Ubicación: Argentina
Hola Louen.
Supongo que cuando dices lo de nombrelocalizacion se puede implementar mediante el nombre interno de la misma, aquel que no puede contener espacios, caracteres internacionales y que no va entre comillas.

¡Saludos!


Arriba
 Perfil  
 
NotaPublicado: 04 Nov 2010 10:16 
Desconectado
Archivero
Archivero

Registrado: 08 Sep 2008 22:04
Mensajes: 290
baltasarq escribió:
No, no la hay... [...]


Con perdón por la afirmación categórica que niega otra afirmación categórica, pero sí, sí que la hay :P :P :P

Es un típico problema de "alcances" en Inform. Para el modelo de mundo de la librería de Inform el objeto en el que está "contenido" el jugador, que en el 99.9% de la veces es, obviamente, la localización actual, no se encuentra "al alcance" de este con objeto de no permitirle intentar coger, meterse en el bolsillo, merendarse o abrazarse a la propia localidad en la que se encuentra. Como los ordenadores tienden a no pensar como los humanos, eso significa que tampoco permitirá "examinar" a la localidad en sí :)

La buena noticia es que por cada cosa que se da por sentada en el modelo de mundo, Inform siempre suele ofrecer una vía (y a menudo hasta dos o tres, como ya estamos viendo en este caso) para que el autor cambie el comportamiento por defecto a su gusto. Así puedes usar la rutina "PonerAlAlcance" para que en una determinada circunstancia la localidad actual (o una adyacente) se considere como un objeto al alcance del jugador y así conseguir que se porte como si pudieras verlo.

Se que es algo que ensayé con éxito una vez, pero ahora estoy en el trabajo, doblando turno, y con otros temas que estoy hablando en otros foros, así que no tengo tiempo material de comprobarlo como Dios manda. Pero vamos, que la idea es interceptar la acción "examinar" en la localidad "vestidor" para "PonerAlAlcance" el objeto "pasillo" y listo. Como esta manipulación de los alcances sólo tiene efecto durante el turno en que se la invoca, para el resto de las acciones el "pasillo" seguirá estando fuera del alcance como sería el caso normal.

La idea de usar una clase "habitacion" para interceptar la acción "examinar" y así poder examinar la propia localidad en la que esté el jugador es correctísima. Probablemente el problema de como especificar el "nombrelocalizacion" se resuelva simplemente consultando la `variable "localizacion" sin más complicación. Aunque, como os contaba, lo mismo me equivoco de medio a medio, ya que no puedo probarlo en este momento.

EDIT: Aaajá, la manera adecuada de hacerlo es usando el punto de entrada "AlAlcance" pensado para este tipo de cosas. Se explica en el cap. 32 del maual inglés de Inform que, eso es el único fallo, está sin traducir en DocumentATE.

--


Arriba
 Perfil  
 
NotaPublicado: 04 Nov 2010 14:44 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 747
DrVanHalenFan escribió:
EDIT: Aaajá, la manera adecuada de hacerlo es usando el punto de entrada "AlAlcance" pensado para este tipo de cosas. Se explica en el cap. 32 del maual inglés de Inform que, eso es el único fallo, está sin traducir en DocumentATE.

http://www.inform-fiction.org/manual/html/s32.html


Arriba
 Perfil  
 
NotaPublicado: 05 Nov 2010 18:12 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Bueno, dadas mis nociones actuales con inform, creo que voy a seguir haciéndolo como hasta ahora, creando objetos ficticios para que al examinarlos dé la descripción de la habitación, que aunque un poco lioso, para mi ahora es lo más fácil.

Gracias a todos por las respuestas....

Ahora van las siguientes preguntas :D :D

He activado el comando salidas en el juego, y tal como en el ejemplo vampiro lo he puesto en la classe habitación para que salgan por defecto las salidas después de la descripción, hasta ahí ningún problema...

Ahora quiero cambiar la frase "Salidas visibles:" por "Puedes ir al "
¿Hay alguna forma de cambiarlo directamente desede el archivo del juego sin tener que modificar el archivo ¿gramatica.h? (creo que es este el archivo pero no estoy seguro, que no estoy en el ordenador con el juego)

Segunda pregunta, a ver si me sé explicar...
Hay alguna forma de indicar a inform que una acción ya programada, no finalice...?

Un ejemplo..

Código:
Object mesa "mesa"
with descripcion [;
print "Una mesa de madera";
<<Buscaren Mesa>>;
"Está casi rota;
],


Con esté código, al examinar la mesa aparece:
"Una mesa de madera. Encima de la mesa hay un sobre. (por ejemplo)"
pero ahí acaba la sentencia ya que el buscaren devuelve true y no aparece lo de "está casi rota".

Espero que me hayais entendido, aunque no las tengo todas conmigo... :P


Arriba
 Perfil  
 
NotaPublicado: 05 Nov 2010 18:36 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Por cierto, que no he dicho nada...

El juego está basado en un módulo de rol de La Llamada de Cthulhu, aunque como es el primer juego, no profundizo mucho en los mitos.

Ya es algo jugable pero no acabable :lol: pero según lo vaya acabando me gustaría algún testeo ya que al ser el primer juego seguro que hay acciones que se me escapan y que quedarán mal si no se modifican.

Así que busco betatesters. :roll:


Arriba
 Perfil  
 
NotaPublicado: 05 Nov 2010 22:25 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 747
Sobre la segunda pregunta; sólo tienes que hacer <Buscaren Mesa>; en lugar de <<Buscaren Mesa>>; para que te realice la acción Buscaren sin retornar verdadero.
Ánimo con el proyecto.


Arriba
 Perfil  
 
NotaPublicado: 06 Nov 2010 10:41 
Desconectado
Dragón
Dragón

Registrado: 22 Oct 2010 10:09
Mensajes: 117
Makinaimo escribió:
Sobre la segunda pregunta; sólo tienes que hacer <Buscaren Mesa>; en lugar de <<Buscaren Mesa>>; para que te realice la acción Buscaren sin retornar verdadero.
Ánimo con el proyecto.


Muchas gracias Makinaimo, la verdad es que le he estado dando bastantes vueltas y era mucho más sencillo que todo y seguramente lo que quiero hacer es más simple todavía.

He creado una mesa, con un objeto encima, y al mirar en la habitación aparece eso de "Puedes ver un objeto sobre la mesa", pero al examinar la mesa solo aparece la descripcion de la mesa...

Lo que quiero es que al mirar la habitación no aparezca lo que hay encima de la mesa y salga al examinar la mesa, así que a la mesa le he puesto el atributo 'soporte' y al objeto el atributo 'oculto' y el código de la mesa lo he puesto así:

Código:
Object mesa ...
descripcion [; "Una mesa grande";
give objeto ~oculto;
<buscaren mesa>;
give objeto oculto;


Por cierto Makinaimo, te tengo en cuena....


Arriba
 Perfil  
 
NotaPublicado: 07 Nov 2010 01:12 
Desconectado
Archivero
Archivero

Registrado: 08 Sep 2008 22:04
Mensajes: 290
Louen escribió:
Bueno, dadas mis nociones actuales con inform, creo que voy a seguir haciéndolo como hasta ahora, creando objetos ficticios para que al examinarlos dé la descripción de la habitación, que aunque un poco lioso, para mi ahora es lo más fácil.


Naah, sin miedo. Mira, así acabo de comprobar que funciona en INFSP6:

Código:
[InScope;
   if (action_to_be == ##Examine) PlaceInScope(Location);
   rfalse;
];


Meter ese "Entry Point" o "Punto de entrada" en las rutinas de tu programa hace que automáticamente la localidad actual siempre responda con su descripción a la acción "examinar"

Podemos añadirle un vericueto de aquellos para que además el pasillo se pueda ver desde el vestidor:

Código:
[InScope;
   if (action_to_be == ##Examine)
   {
      PlaceInScope(Location);
      if (location==Vestidor) PlaceInScope(Pasillo);
   }
   rfalse;
];


Y ahora, traduzco a ojimetro a InformATE. Esto ya sí que no lo he podido comprobar, ya que no tengo las librerías de InformATE a mano desde que uso mayormente INFSP6, pero la teoría es que funcionaría correctamente:

Código:
[AlAlcance;
   if (accion_que_seria == ##Examinar)
   {
      PonerAlAlcance(localizacion);
      if (localizacion==Vestidor) PonerAlAlcance(Pasillo);
   }
   rfalse;
];


Pero ya te digo que esta traducción la he hecho casi de memoria. En cualquier caso, funcionaría rápido, limpio, y sin duplicar objetos.

Notas:
-Se usa la variable "accion_que_seria" en lugar de "accion" porque el punto de entrada "AlAlcance" se consulta durante (y no después) del parseado, momento en el que el parser no ha tomado una decisión definitiva sobre si la frase del jugador le cuadra o no para la gramática de la acción "examinar", aunque ya, diciéndolo a grosso modo, tiene una idea aproximada de que por ahí pueden ir los tiros.

-Si usas esta técnica, asegurate de que la descripción de una localidad que se puede examinar desde otra no comienza con la típica frase "Estás en..." ya que al examinar el pasillo desde el vestidor te respondería con un "Estás en el pasillo..." aunque no estés allí. Puestos a sofisticarlo un poco, la propiedad "descripcion" del pasillo podría ser una rutina que ofreciese una frase diferente si se examina desde el vestidor que si se mira desde sí mismo. ¡Ahí tienes un sencillo y bonito ejercicio! :)

-EDIT: y una tercera nota importante, para que el truco funcione cada localidad debe tener bien definida su propiedad "nombre". Es algo que se tiende a olvidar ^_^'

--


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 37 mensajes ]  Ir a página 1, 2, 3  Siguiente

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM