Gracias a los dos por contestar. Ya pensaba que clamaba en el desierto
dhan, me explico mejor para que veas por qué tanto rollo. En un principio estaba haciendo una prueba para la aventura que voy a empezar con belky. Estaba tratando de programar uno de los puzzles para ir soltándome, pero a medida que iba complicando la cosa me dije que mejor hacer las cosas bien y empezar a crear las clases que vamos a necesitar.
En principio el juego tiene unos 25 PSI's así que es un tema importante. Es más, el juego está basado en la interacción con los PSI's y se deben pasar la partida diciendo cosas en respuesta a tus acciones.
Quería crear una serie de funciones genéricas parar decir, gritar, cantar y un par de cosas más que harán. Cada una funciona de una forma un poco diferente. Por ejemplo gritar se oye en toda la aventura y decir sólo si está en la habitación del jugador. Las funciones se llaman continuamente y desde muchos puntos (otros objetos, daemons, ...) por eso no pueden ir en el describir, ni en el cada_turno (que es el que se activa cuando está el jugador).
Estaba muy contento de cómo funcionaba hasta que me encontré que tenía que pasar un número y algún modificador
No te creas que ha sido por documentación, hoy me he estado mirando el manual, la Inform Beginer Guide y los FAQ de las páginas de la IBG donde leí que nanaidelachina a trabajar con las cadenas (también leí en la página del Inform que no piensa meter nada de manipulación de cadenas en la siguiente versión).
Intenté distinguir el tipo con las metaclases hasta que me di cuenta de que la cadena, una vez la pasas, se convierte en un número (dirección) indistinguible de otro normal y que los números no tienen metaclase.
La idea de Al-Khwarizmi no se me había ocurrido (y mira que había pensado cosas más complicadas) pero creo que me servirá ya que le podré indicar cómo quiero que se trate el dato, si como cadena, número o número en letras que básicamente es lo que necesito.
Una vez más gracias.
[EDITADO]
Ya he implementado el método alkhwarizmiano usando unas constantes cortitas y suponiendo que el primer parámetro siempre es un string para simplificar la mayoría de los mensajes que sólo contienen o empiezar por un string. Ha quedado justo como yo quería y no se ve demasiado feo.
Código:
Pirata.decir("Espera un momento que apunto esto.");
Pirata.realizar("saca una tiza y dibuja un ", PNJ_NUM, self.cantidad, PNJ_CAD, " en el suelo");