CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 25 May 2019 12:18

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
NotaPublicado: 22 Jul 2009 19:25 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 734
¡Hola!

Sigo intentando hacer mi primera aventura y se me ha ocurrido implementar una nueva acción 'asomar' para que, por ejemplo, el jugador pueda asomarse a las puertas de las habitaciones y ver si hay algún peligro en la localidad de al lado. El problema es que sigo sin tener mucha idea de Inform y no se cómo programar la nueva acción y los verbos en condiciones.

He hecho lo siguiente:

Código:
Verb 'asoma' 'asomate' 'asomarse' 'asomarte'
    * 'a//' noun      -> StickOut
    * 'por' noun      -> StickOut;

[ StickOutSub;
    "No te va a ayudar en nada intentar asomarte a eso.";
];


Con lo que ya puedo escribir dentro de la aventura: "> asomate a la puerta", y si la puerta tiene prevista la acción podría imprimir algo parecido a: "Parece no haber nada extraño en el cuarto de baño."

El problema viene cuando tecleo:

Código:
> asomate
¿A quién quieres asomarterte?

> asoma
¿A quién quieres asomar?

[...]


¿Alguien sabe si se puede cambiar esa pregunta por "¿A dónde quieres asomarte?" o "¿A dónde te quieres asomar?" (y que al escribir después "> a la puerta" en lugar del comando completo, la aventura siga comprendido que el jugador quiere asomarse a la puerta)? ¿Cómo se puede hacer?


Arriba
 Perfil  
 
 Asunto: asomate
NotaPublicado: 22 Jul 2009 21:33 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Maikinaimo, el problema es que primero la defines como que va a llevar un complemento directo, y después a usas sola. Además, hay que tener en cuenta que el "te" se interpreta como "el jugador", es decir el objeto apuntado por player.

Tampoco sé muy bien que es eso de StickOut, parece como si estuvieras redefniendo algo que ya existe, aunque desde luego yo no la conzco.

Si quieres usarla sola, tienes que añadir una línea de gramática nueva:

Código:
Verb 'asoma'
    *                                     -> StickOut
    * creature                      -> StickOut
    * creature 'a//' noun      -> StickOut
    * creature 'por' noun      -> StickOut
;


En el primer caso, la acción la maneja StickOutSub:

Código:
[ StickOutSub;
    "No te va a ayudar en nada intentar asomarte a eso.";
];


Tras introducir:

Código:
> asomar


En el segundo caso, la acción la recibe el jugador:

Código:
> asomate


Y, finalmente,

Código:
> asomate por la ventana


La recibe el jugador con second==objVentana.

Si quieres, mejor que lo reciba la ventana, entonces pon:

Código:
Verb 'asoma'
    *                                     -> StickOut
    * creature                      -> StickOut
    * creature 'a//'/'por' noun      -> StickOut reverse
;


Las preposiciones pueden separarse con barras.

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 23 Jul 2009 12:22 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 734
Uhmm... no acabo de conseguir que funcione como quiero.

La acción 'StickOut' es completamente nueva. No estoy reescribiendo nada (como INFSP6 define todas las acciones en inglés he querido definir la nueva acción también en inglés ---espero no haberme equivocado en la traducción---).

Como dices, he definido la nueva acción como que va a llevar un complemento directo. Si un jugador intenta usarla sola: "> asomate", la librería pregunta cuál es el objeto sobre el que se realiza la acción y así, en el siguiente comando, en lugar de tener que escribir "> asomate a la ventana", el jugador puede escribir simplemente "> la ventana", y el comando se entiende perfectamente. Lo que quiero cambiar es esa pregunta que hace la librería para saber cuál es el objeto que recibe la acción.

Voy a intentar explicarme mejor.
He añadido una nueva línea al definir StickOut (VerboIrregular...):

Código:
Verb 'asoma' 'asomate' 'asomarse' 'asomarte'
    * creature                        -> StickOut
    * creature 'a//'/'por' noun           -> StickOut
    * noun                                -> StickOut
    * 'a//'/'por' noun                     -> StickOut;
VerboIrregular "asomar" with imperativo 'asomate';


Ahora, el jugador puede asomarse por una puerta usando:

Código:
> asomate por la puerta


Pero si escribe:

Código:
> asomate


La librería pregunta:

Código:
¿Qué quieres asomarte?
> a la puerta


Y el comando se entiende, haciendo que el PJ se asome a la puerta.

Mi pregunta es: ¿Puede cambiarse el mensaje por defecto "¿Qué quieres asomarte?" por "¿Por dónde quieres asomarte?" o ¿A qué quieres asomarte??
¿Volviendo a meter mano al objeto 'LibraryMessages'?

Y como siempre, muchas gracias por responder tan rápido Balta.
Un saludo.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 23 Jul 2009 12:59 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

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

Perfecto lo del verbo irregular.

Citar:
cambiarse el mensaje por defecto "¿Qué quieres asomarte?" por "¿Por dónde quieres asomarte?" o ¿A qué quieres asomarte??
¿Volviendo a meter mano al objeto 'LibraryMessages'?


Lo cierto es que no sé si ese mensaje puede cambiarse, probablemente sea fijo, y no se preocupe por la preposición utilizada.

Citar:
Y como siempre, muchas gracias por responder tan rápido Balta.
Un saludo.


Nada, hombre, aunque creo que esta vez no ha servido de mucho. :-D

_________________
-- Baltasar, el arquero


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 23 Jul 2009 14:49 
Desconectado
Archivero
Archivero

Registrado: 19 Nov 2008 12:32
Mensajes: 268
Hola!

Makinaimo escribió:
Mi pregunta es: ¿Puede cambiarse el mensaje por defecto "¿Qué quieres asomarte?" por "¿Por dónde quieres asomarte?" o ¿A qué quieres asomarte??
¿Volviendo a meter mano al objeto 'LibraryMessages'?


Puedes hacer algo de ello con la rutina PreguntarPreposicion, que básicamente está para eso.
(es propia de informATE, pero infsp6 la ha heredado).

[spoiler="Del Manual de Referencia InformATE"]PreguntarPreposicion: Si existe es llamada cuando la librería debe imprimir una
preposición como inicio de pregunta. Por ejemplo “¿Por dónde quieres mirar?”. La
preposición depende del verbo y de la línea de gramática que se haya interpretado,
ya que por ejemplo a una línea que espere “mirar a” le iría bien la pregunta “¿Hacia
dónde quieres mirar?”, mientras que otra que espere “Preguntar a”, le iría mejor
“¿A quién quieres preguntar?”, a pesar de que ambas usan la preposición “a”.
Normalmente esta rutina no es necesaria ya que la librería maneja correctamente la
mayor parte de las preposiciones, pero si se define algún verbo nuevo para el que
la respuesta estándar de la librería no encajara, esta rutina da una oportunidad de
mejorarla.
Para que esta rutina pueda decidir cuál es la forma más adecuada de iniciar la pre-
gunta, recibe como parámetros el verbo y la preposición esperados por la gramática.

[/spoiler]

Entonces, agrega al codigo de tu aventura algo como:

Código:
    [ PreguntarPreposicion prepos action;

     if (action==##StickOut){
   print "Por dónde";
   return 1;
   } else {
   return 0;
   }
    ];


Como ayuda tienes una funcion similar de la libreria llamada IdiomaPreguntarPrep en Spanish.h

_________________
I7 Spanish / Notas de desarrollo


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 5 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 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