CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 02 Jun 2020 00:41

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 4 mensajes ] 
Autor Mensaje
NotaPublicado: 17 Sep 2008 04:37 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Hola, soy Eliuk. Escribo para ver si alguien puede ayudarme. A ver si puedes ayudarme, Sarganar, porque creo que eres la persona más apropiada en este caso (pero acepto la ayuda que quien pueda, gracias).

Como ya lo dije por acá, creo, liberaré Damusix I7 en dos semanas más (bueno, quizá la próxima semana, no estoy seguro). La publicación será una versión de beta-testeo, exclusiva para los tester (no será de dominio público). Si alguien está interesado en beta-testear, aviso para que me mande un mail y cuando sea la publicación le enviaré una copia de Damusix I7 para el testing.

El caso es que, programando funcionalidades adicionales y por el estilo, me he encontrado con dos asuntos de cierto cuidado en Inform 7 que quisiera que alguien (Sarganar, jejeje, supongo) pudiera reportar, o en el RAIF, o directamente a Graham Nelson... tampoco tengo la seguridad de lo que sea más apropiado para este caso.

Primero, lo más simple: Inform7 (5T18) tiene un bug grave relacionado con los canales Glk de sonido que abre por defecto para toda aventura Glulx programada en el sistema. I7 abre por defecto dos canales de audio para sus propias funcionalidades de "play the sound..."; estos canales son el 410 y el 411. Se abren cada vez que se inicia la aventura. El error es que las referencias para estos canales no se recuperan correctamente cuando se "reinicia" la aventura, por lo tanto se vuelve a crear en cada reinicio. Este bug no tiene consecuencias ni a corto ni a largo plazo porque, por fortuna, Glulx acepta una elevada cantidad de canales de sonido... y tal vez sea ése el motivo por el cual a pasado desapercibido hasta ahora. Pero, con todo, sigue siendo un Bug de cuidado, porque no debería existir. No recuperar correctamente las referencias de los objetos Glk siempre es un error grave.

Este bug puede comprobarse fácilmente simplemente creando una aventura con la estructura mínima: los títulos y una localidad. Cuando la aventura esté en ejecución, se debe ejecutar el comando GLKLIST. En la lista de canales de sonido pueden advertirse los canales con rock 410 y 411. Pero si se hace un REINICIAR y luego se vuelve a comprobar la lista de objetos Glk con GLKLIST, aparecerán ahora dos canales con la rock 410 y dos más con la rock 411. Y cada vez que se "reinicia" el juego, se siguen abriendo más y más canales con esas mismas rocks. Esto se produce, claramente, porque las referencias no están siendo apropiadamente recuperadas.

En primer lugar, el código que abre los canales siempre debe comprobar que las variables que alojan las referencias a estos canales tengan valor cero, y sólo entonces se deben crear dichos canales. Estas variables no valdran cero en el caso de un "reinicio", porque antes, en el punto de entrada IdentifyGlkObject(), ya se habrán recuperado sus referencias correctas a los canales de sonido. En I7 no se usa IdentifyGlkObject() para los dos canales de sonido por defecto (410 y 411), pero de todas formas el código que los crea [imagino que dentro de la rutina VM_Initialise() y o en aquellas que son llamadas dentro de esta] SE DEBE DE TODAS FORMAS RECUPERAR aquellas referencias y COMPROBAR QUE VALGAN CERO antes de que intentar abrir aquellos canales.

--------------------------------------------------------------

Lo segundo no es un Bug, es en realidad una "carencia" que, aparentemente, no tiene motivo de ser. Si, por ejemplo, se escribe el siguiente código:

Código:
A room has a figure-name called room picture.


El juego se compila sin ningún problema. Estoy es muy útil porque, por ejemplo, se puede "enlazar" una imagen con una localidad y mostrarla cada vez que se llega a esa localidad.

Programé el código de una extensión adicional para Damusix, que permita "enlazar" un sonido con una localidad y poder usarlo como música de fondo para aquella localidad. Cada localidad tendría una propiedad "ambient sound" que se usaría para determinar el sonido de fondo para la misma.

Lamentablemente, esto no se pude conseguir de la manera "elegante" como en el ejemplo que puse anteriormente. Una frase como...

Código:
A room has a sound-name called ambient sound.


... FALLA ESTREPITOSAMENTE, mostrando el siguiente mensaje:

Citar:
Problem. I am unable to create 'ambient sound' with the kind of value 'the name of a sound effect', because this is a kind of value which is not allowed as something to be stored in properties, variables and the like. (See the Kinds index for which kinds of value are available. The ones which aren't available are really for internal use by Inform.)


Esto no tiene NINGÚN SENTIDO. =P Si se acepta usar un figure-name como propiedad, variable y parecidos, entonces no tiene ningún sentido que no se pueda usar un sound-name para los mismos fines.

De momento, solucioné el problema de las músicas de fondo para cada localidad mediante una tabla (que curiosamente es lo único que acepta alojar el valor de un sound-name). Pero no es práctico: sólo basta imaginar el largo de la tabla si tuvieramos unas 40 o 50 localidades. Un infierno. =P

Pues eso. Agradezco al que sea tan amable de traducir esto (JB?, Sarganar?), aunque sea parafraseándolo, y publicarlo en el RAIF o como un reporte de Bugs para Graham. No estoy seguro de lo que sea más apropiado (supongo que si es ambos, mejor que mejor, tal vez en el RAIF alguien tenga algo que comentar). Ojalá puedas leer esto tú, Sarganar, que al parecer tienes más contacto con Graham.

Saludos! (y gracias por vuestro tiempo)

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


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Sep 2008 05:58 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Al parecer, en esta nueva versión de Inform7 (5U92) ya se ha incorporado la funcionalidad necesaria para usar un sound-name como variable, propiedad, etc.

No lo he probado aún, pero cualquier cosa lo estaré publicando por aquí. Todavía queda el Bug de los canales de sonidos que se re-abren, que parece seguir sin ser detectado.

Saludos!
(a ver si alguien me puede ayudar con esto).

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


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 17 Sep 2008 12:51 
Desconectado
Grafista
Grafista
Avatar de Usuario

Registrado: 15 Ene 2005 22:26
Mensajes: 780
hola!
mi tiempo hasta el fin de semana es cero.

brevemente he tenido un encontronazo con la nueva brujula de I7 y aun sigo con el cuello torcido como un pollo.


veré qué puedo hacer.

Salud!

EDITO: ya que son dos rocks incluidos de fábrica, lo lógico sería incluir tambien el codigo de recuperacion necesario en la seccion 'de fabrica' GGRecoverObjects(), donde se recuperan la mainwin, statuswins y demás.

Algo como

[spoiler="Esto"]
if (phase == 0) { ! Zero out references to our objects.

gg_foregroundchan = 0;
gg_backgroundchan = 0;

return;

}

if (phase == 1) { ! Nothing to do for sound in this phase.
return;
}



if (phase == 2) {

! Iterate through all the existing channels -- there should

! be either none or one -- and identify ours.

id = glk_schannel_iterate(0, gg_arguments);

while (id) {
switch (gg_arguments-->0) {

GG_FOREGROUNDCHAN_ROCK: gg_foregroundchan= id;
GG_BACKGROUNDCHAN_ROCK: gg_backgroundchan= id;

}
id = glk_schannel_iterate(id, gg_arguments);

}

}
[/spoiler]

Integrado en GGRecoverObjects().
El codigo anterior está adaptado a IdentifyGlkObject, pero como te digo, IdentifyGlkObject es ya para lidiar con los objetos programados por los autores de aventuras y librerias; y no el creador de Inform.

Y, creo que hay que decirlo, la inclusion de sonido en I7 es hasta ahora más bien tímida y apañada. No prioritario, vamos.
Tu Damusix llenará ese vacío con creces.

_________________
INFSP7 - Canal de Noticias INFSP

Porque donde está tu tesoro, allí también estará tu corazón.


Arriba
 Perfil  
 
 Asunto:
NotaPublicado: 18 Sep 2008 01:45 
Desconectado
Semimomio
Semimomio
Avatar de Usuario

Registrado: 24 Ago 2007 00:41
Mensajes: 2023
Ubicación: Chile
Sarganar, si ibas a traducir si mensaje, por favor aún no lo hagas.

He corregido ayer mismo el Bug, de forma parecida a la que copiaste, pero a partir de ahí encontré dos "potenciales" Bugs màs. Definitivamente CGRecoverObjects() fue escrita como un poco "a la rapida", y pues no fue revisada correctamente.

Escribiré un mensaje explicando la corrección y a ver si tú o JB pueden ayudarme a hacérselo llegar a Graham.

Sí, es cierto que el sonido no es prioritario... pero ese error es grave. Se debe corregir. Es casi tan grave como si no se recuperaran correctamente las ventanas Glk y sus referencias volvieran a abrirse cada vez (sòlo que los canales de audio no se ven, así que pasa desapercibido).

Lo otro, lo de sound-name, pues ya funciona como quería, así que la extensión para sonido ambiental localizado con Damusix ya está casi lista. :D

Saludos, mandaré el mensaje con la corrección a la brevedad, en este mismo hilo. Gracias por tu ayuda y por la que otros quieran brindarme.

Saludos!

P.S: Graham no corrigiò el error que hace que CBLORB corrompa los archivos Ogg Vorbis... Buf!! :(

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


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 4 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 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