CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 15 Nov 2018 14:08

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 13 Jul 2009 12:26 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Hola a todos.

Sigo intentando terminar mi primera aventura y me he encontrado con un error en tiempo de ejecución que no se cómo solucionar. Cuando compilo la aventura no aparecen ni errores ni avisos, pero probándola, si dejo algún objeto en un contenedor en el que se puede entrar, y luego entro yo mismo en él, me salta el siguiente error: [** Programming error: tried to test "has" or "hasn't" of nada **]. Por ejemplo:

Código:
Habitación (en el armario)
Descripción de la habitación.

Puedes ver <objetos presentes en la habitación>.

[** Programming error: tried to test "has" or "hasn't" of nada **]
En el armario puedes ver una camiseta.


No sólo me ocurre con el armario, sino con todos los recipientes en los que puedo entrar en la aventura. ¿Alguien sabría decirme por qué puede pasar esto?

Para definir los contenedores en los que se puede entrar uso: has static container enterable openable open; ¿Puede estar ahí el fallo?

Ahm. Y una cosa más, ¿hay alguna forma de desactivar la última línea de las descripciones de localidad cuando estás en el interior de un objeto de ese estilo? Esa que dice "En el armario puedes ver una camiseta."

Como siempre, muchas gracias adelantadas por cualquier ayuda o comentario.

Un saludo y feliz verano!


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Jul 2009 14:28 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
1) Sería interesante que copiaras el código de tus "contenedores". Ese error pasa porque el parser está tratando de aplica una comprobación del tipo has/hasnt a un objeto nulo, inexistente. Suele suceder cuando la variable global 'lm_o' no queda correctamente seteada o no lo está en ese punto de la ejecución. Idealmente, si pueden "entrar" en tus contenedor y tener "acción" dentro de ellos, lo mejor sería que los declaras como "localidades". En todo caso, no existe ningún impedimento real para que sólo sean "objetos". xD De hecho, las localidades son simplemente objetos con el atributo 'light'. :) (Ah, por cierto, intenta poner 'light' como atributo de tu contenedor, porque no es 'transparent', así que la luz de la localidad no le llega adentro). Mejor copia el código de tus "contenedores" para que podamos examinar con mayor claridad.

2) Sí, existe una posibilidad para que no se mencionen. Tienes que decirle que estén ocultos (concealed) como atributo. También existe otra, que no me acuerdo, que los deja como decorados (ocultos y no los puedes coger ni mover). Con ello, ya no se mostrarán el mensaje de aviso. Claro que si quieres que se mencione, tendrás que ponerlo tú a mano en el texto.

Saludos! :D

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Jul 2009 15:56 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Bien, el código de los contenedores es siempre tan sencillo como este:

Código:
Object   barril_bodegas "barril" BODEGAS
 with   name 'barril' 'barrica' 'cuba' 'tonel' 'bidon' 'tapa' 'tapon',
   adjectives 'madera' 'grande' 'voluminoso' 'voluminosa',
   description
       "Es un gran cilindro abombado de madera destinado al transporte de
       líquidos.",
 has   static container enterable openable open;


En el caso del barril o en el de los armarios, no he creado una localidad nueva porque sólo les quiero para guardar otros objetos, y para que el jugador pueda esconderse en su interior y me gusta que no tengan luz para así poder jugar más fácilmente con los sonidos y no distraer la atención en otras cosas. Mientras el personaje está envuelto en las tinieblas dentro de un armario, puede estar escuchando a un asesino fuera que lo está buscando, por ejemplo. Y no hay descripciones del armario, ni de cualquier otro objeto, que distraigan la atención del jugador.

Sea como sea, creo que he encontrado el fallo. He hecho muchas modificaciones de los mensajes por defecto de la librería con LibraryMessages y sunpongo que en algún lado me estoy cargando la variable "lm_o". Ahora mismo le echo un vistazo.

En cuanto a la segunda cuestión, me interesa que en la descripción de la localidad se diga que hay un gran barril del tamaño de una persona, por eso no lo hago 'concealed'. Pero, por lo que tenía curiosidad era por saber si se puede cancelar el mensaje "Dentro del barril hay una rata muerta." (en el caso de que la hubiese, claro) que aparece cuando el personaje se mete en él.

En fin, gracias una vez más por tu tiempo, Eliuk.
Un saludo!


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Jul 2009 16:06 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Makinaimo escribió:
En el caso del barril o en el de los armarios, no he creado una localidad nueva porque sólo les quiero para guardar otros objetos, y para que el jugador pueda esconderse en su interior y me gusta que no tengan luz para así poder jugar más fácilmente con los sonidos y no distraer la atención en otras cosas. Mientras el personaje está envuelto en las tinieblas dentro de un armario, puede estar escuchando a un asesino fuera que lo está buscando, por ejemplo. Y no hay descripciones del armario, ni de cualquier otro objeto, que distraigan la atención del jugador.

En cuanto a la segunda cuestión, me interesa que en la descripción de la localidad se diga que hay un gran barril del tamaño de una persona, por eso no lo hago 'concealed'. Pero, por lo que tenía curiosidad era por saber si se puede cancelar el mensaje "Dentro del barril hay una rata muerta." (en el caso de que la hubiese, claro) que aparece cuando el personaje se mete en él.


1) Pues es raro que te funcione (al menos me lo parece a mí). Se supone que cuando estás en una localidad (o objeto) a oscuras, te manda a un objeto llamado "la oscuridad". Se supone que dentro de él no puedes hacer mucho. ¿Por qué no intentas "simular" lo oscuro mediante una descripción especial cuando el jugador esté dentro? (digo, es una idea, porque nunca he trabajado mucho con contenedores).

2) Pues haz que la rata sea "concealed". :) Y asunto arreglado.

Saludos!

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Jul 2009 18:33 
Desconectado
Archivero
Archivero

Registrado: 08 Sep 2008 22:04
Mensajes: 266
Eliuk Blua escribió:
1) Pues es raro que te funcione (al menos me lo parece a mí). Se supone que cuando estás en una localidad (o objeto) a oscuras, te manda a un objeto llamado "la oscuridad". Se supone que dentro de él no puedes hacer mucho.


En el modelo de mundo de Inform la luz de la localidad se aplica al interior de cualquier contenedor abierto aunque no sea transparente. Si el jugador cerrase el armario o el barril desde dentro, entonces sí que se quedaría a oscuras.

Eliuk Blua escribió:
Pues haz que la rata sea "concealed"


El atributo "scenery" es tu aliado para estos casos. La rata seguiría estando ahí pero no aparecería en los listados de "Puedes ver"... para la bueno y para lo malo, ya que habría que tener cuidado con que la rata seguiría sin aparecer en esos listados aunque el jugador la cogiera y la llevara a otro sitio.

(por otra parte, he sido incapaz de reproducir el mensaje de error de maki en circunstancias parecidas !!)

--


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 13 Jul 2009 19:51 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Makinaimo escribió:
En cuanto a la segunda cuestión, me interesa que en la descripción de la localidad se diga que hay un gran barril del tamaño de una persona, por eso no lo hago 'concealed'. Pero, por lo que tenía curiosidad era por saber si se puede cancelar el mensaje "Dentro del barril hay una rata muerta." (en el caso de que la hubiese, claro) que aparece cuando el personaje se mete en él.


Si lo que quieres es hacer desaparecer el mensaje del contenido sólo cuando el jugador accede al barril (y no cuando escribe MIRAR) la solución es fácil.

dentro del objeto barril:
Código:
react_before[;
enter, goin: if(noun==self && self has open){
Playerto(self, 1); "Entras en el barril...";
}
],


Claro que, si luego escribes mirar te saldrá la descripción estandar y la rata.
Si no quieres listar nunca el contenido (a lo que no le veo sentido, para eso no lo metas), a parte de ocultar objetos, puedes sabotear la rutina de Escribir_lista de ese objeto barril concreto.

Así:

Código:
Object LibraryMessages
          with
               before[; 
               Look:
                               if(parent(Player)==el_barril)rtrue; !KAPUT
];


No he probado si funciona, y no sé si esto anula también la descripción, quizá haya que acotar con el número de mensaje de librería que escribe las listas.

if (lm_n== 4) if(parent(Player)==el_barril)rtrue; !KAPUT
if (lm_n> 4) if(parent(Player)==el_barril)rtrue; !KAPUT

Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 14 Jul 2009 00:16 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 04 Sep 2008 17:23
Mensajes: 726
Justo. Al modificar los mensajes de la librería para el comando 'Mirar' me cargaba la variable lm_o en algún punto. Ya está solucionado. (Como me alegro de que exista el foro).

Eso de no listar el contenido de los objetos sólo era un capricho. Si existía alguna manera sencilla y limpia de hacerlo había pensado en crear una 'inside_description' del estilo: "Notas algo con los pies, en el fondo del barril. Al mirar hacia abajo ves lo que parece una rata muerta, una palanca y una pata de palo carcomida." Sin que justo a continuación aparezca:

Dentro del barril ves una rata muerta, una palanca y una pata de palo carcomida.

Pero no tiene mayor importancia.
En fin, gracias por la ayuda.

Un saludo.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 14 Jul 2009 11:12 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Makinaimo escribió:
Justo. Al modificar los mensajes de la librería para el comando 'Mirar' me cargaba la variable lm_o en algún punto. Ya está solucionado. (Como me alegro de que exista el foro).

Eso de no listar el contenido de los objetos sólo era un capricho. Si existía alguna manera sencilla y limpia de hacerlo había pensado en crear una 'inside_description' del estilo: "Notas algo con los pies, en el fondo del barril. Al mirar hacia abajo ves lo que parece una rata muerta, una palanca y una pata de palo carcomida." Sin que justo a continuación aparezca:

Dentro del barril ves una rata muerta, una palanca y una pata de palo carcomida.

Pero no tiene mayor importancia.
En fin, gracias por la ayuda.

Un saludo.


Bueno, no es difícil, con los códigos de arriba, igual que anulas la lista de objetos contenidos para cuando estés dentro del barril, bien puedes reescribirla cambiando el encabezado.

Éstas son la rutinas tales cuales copiadas de Spanish.h, tan sencillo como copiarlas y cambiar los textos y los flags para cuando estés dentro del objeto barril:

Código:
if (parent(player)==barril){

switch (lm_n);
     4: #ifndef NI_BUILD_COUNT; new_line; #endif;
          print "Sobre ", (the) x1;
    WriteListFrom(child(x1),
                      ENGLISH_BIT + RECURSE_BIT + PARTINV_BIT
                      + TERSE_BIT + ISARE_BIT + CONCEAL_BIT);
    ".";
     5,6:
       #ifndef NI_BUILD_COUNT; new_line; #endif;
         if (x1~=location)
         {      if (x1 has supporter) print "Sobre "; else print "En ";
                 print (the) x1;
                 print " puedes ver ";
         }
         else print "Puedes ver ";
         if (n==5) print "también ";
         WriteListFrom(child(x1),
                      ENGLISH_BIT + WORKFLAG_BIT + RECURSE_BIT
                      + PARTINV_BIT + TERSE_BIT + CONCEAL_BIT);
         if (x1~=location) ".";
         ".";


}


Saludos

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 14 Jul 2009 12:53 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Makinaimo escribió:
Eso de no listar el contenido de los objetos sólo era un capricho. Si existía alguna manera sencilla y limpia de hacerlo había pensado en crear una 'inside_description' del estilo: "Notas algo con los pies, en el fondo del barril. Al mirar hacia abajo ves lo que parece una rata muerta, una palanca y una pata de palo carcomida." Sin que justo a continuación aparezca:


Sí, esa es la solución "ortodoxa". :lol:

_________________
Eliuk Blau
eliukblau (AT) gmail.com
http://www.caad.es/eliukblau/


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 9 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 2 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:  
cron
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM