CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 21 Ago 2017 09:35

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 9 mensajes ] 
Autor Mensaje
NotaPublicado: 16 May 2016 12:39 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Buenas,
a raíz de un comentario de la ficha de la aventura Venenarius Verborum (http://www.caad.es/fichas/venenarius-verborum.html), he visto que la aventura para jugar online desde la página del CAAD mostraba ciertos bugs.
Tras revisar el código y no ver nada incorrecto en esa parte, y comprobar que el Z5 se ejecutaba normalmente sin esos fallos tanto en Gargoyle como en WinFrotz, he buscado otro Parchment, y tampoco daba problemas.

Por tanto, parece que es la versión de Parchment que usa CAAD desde iplayif.com la que falla por alguna razón.

El fallo se puede apreciar nada más empezar la aventura, yendo al este.
Así desde el enlace a iplayif desde CAAD:
http://iplayif.com/?story=http://caad.es/jarel/games2/venenariusverborum.z5
Código:
>E
...
El cocinero le dice al pinche: 'ZIZEZAZO'. ...y éste le responde: 'ZU'.

*Las zetas de ZIZEZAZO indican un error, en concreto que una variable cuyo valor debe de ser z=random(6); tiene contra toda lógica valores fuera de rango. Y ese es sólo uno de varios fallos de interpretación del código por parte de Parchment.

Pero desde este otro lugar, en cambio:
http://parchment.game-testing.org/play/parchment.full.html?story=http://caad.es/jarel/games2/venenariusverborum.z5
Código:
>E
...
El cocinero le dice al pinche: 'DUPIMENA'.
...y éste le responde: 'BO'.

Aquí el intérprete ejecuta correctamente.

Es extraño que desde el sitio que se supone oficial de Parchment el código falle.
Pero como solución práctica ¿podría algún administrador cambiar el actual enlace de Venenarius Verborum por este otro?
http://parchment.game-testing.org/play/parchment.full.html?story=http://caad.es/jarel/games2/venenariusverborum.z5

Gracias

PD: Éste es el código del objeto que falla:
Spoiler: Mostrar
object cocinero "cocinero" cocina
with name 'cocinero',
description "El cocinero es un señor de gran tamaño y de barriga semejante a un globo terráqueo, fondón y colorado, sudoroso. De cabeza pequeña y trapezoidal in creschendo desde el cuello hasta el gorro; adornada la cara con un bigotillo fino bajo la bolita que tiene por nariz. Agarra un enorme cucharón cual cetro de mando, y es que es el rey de la cocina.",
retos 0,
ronda 0,
!vocales cogidas
voc1 0,
voc2 0,
voc3 0,
voc4 0,
!vocales libres
vl1 0,
vl2 0,
vl3 0,
vl4 0,
sucesos 0,
each_turn[i j z;
if (self hasnt gen2) {!hasnt gen2
if(self hasnt general && pinche hasnt general){
self.retos++;
if (self.retos>7){give self general; give pinche general;}!comienzan un juego
}
if (self has general){!eee
!elección de self.vocales a usar:
self.voc1= random(1,2,3,4,5);

self.voc2=self.voc1+1;
if (self.voc2==6)self.voc2=1;

self.voc3=self.voc2+1;
if (self.voc3==6)self.voc3=1;

self.voc4=self.voc3+1;
if (self.voc4==6)self.voc4=1;
!ahora mezclo:
if(random(3)==2){self.vl1=self.voc1;self.voc1=self.voc4;self.voc4=self.vl1;}
if(random(2)==1){self.vl1=self.voc2;self.voc2=self.voc4;self.voc4=self.vl1;}
if(random(3)==1){self.vl1=self.voc3;self.voc3=self.voc1;self.voc1=self.vl1;}

!print "vocales cocinero: ", self.voc1, " ", self.voc2, " ", self.voc3, " ", self.voc4,".^"; !TEST
!adjudicacion de vocales libres
z=0;j=0;self.vl1=0;self.vl2=0;self.vl3=0;self.vl4=0;
for (i=1:i<6:i++){!rrr
z=4-self.ronda;
if(self.voc1~=i)z--;
if(self.ronda<3 && self.voc2~=i)z--;
if(self.ronda<2 && self.voc3~=i)z--;
if(self.ronda<1 && self.voc4~=i)z--;
if (z==0){
switch (j){
0:self.vl1=i;
1:self.vl2=i;
2:self.vl3=i;
3:self.vl4=i;
}
j++;
}

}!rrr

!mezclo un poquito para que no sea tan obvio:
!uso self.voc4 como temporal, pues a partir del segundo turno no entra en juego.
if (self.ronda>0)if (random(3)==2){self.voc4=self.vl1;self.vl1=self.vl2;self.vl2=self.voc4;}
if (self.ronda>1)if (random(7)>2){self.voc4=self.vl1;self.vl1=self.vl3;self.vl3=self.voc4;}
if (self.ronda>2)if (random(3)==2){self.voc4=self.vl4;self.vl4=self.vl2;self.vl2=self.voc4;}

!print "vocales pinche: ", self.vl1, " ", self.vl2, " ", self.vl3, " ", self.vl4,".^"; !TEST

!El cocinero suelta su frase:
if (pinche has general)print "^El cocinero le dice al pinche: "; else
{
switch(self.ronda){
0:if (variable2==-20)print "El cocinero suelta una risotada burlona y, mirándote con engreídos aires de superioridad, vuelve a decir: "; else print "El cocinero te dice: ";
1:print "El cocinero levanta una ceja sorprendido, y suelta a continuación: ";
2:print "El cocinero, maldiciendo, ataca de nuevo con: ";
3:print "El cocinero, sudando la gota gorda y muy nervioso, dice: ";
}
}
print "'";
z=4;
for (i=0:i<(4-self.ronda):i++){!www
z=random(6);
if(z<1)print "Z";
if(z==1)print "B";
if(z==2)print "T";
if(z==3)print "D";
if(z==4)print "P";
if(z==5)print "M";
if(z>5)print "N";

if(i==0)switch(self.voc1){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==1)switch(self.voc2){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==2)switch(self.voc3){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==3)switch(self.voc4){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1

}!www
print "'";
print ".^";
if(pinche has general){!PINCHE
print "...y éste le responde: '";
for (i=0:i<(self.ronda+1):i++){!www
z=random(6);
if(z<1)print "Z";
if(z==1)print "B";
if(z==2)print "T";
if(z==3)print "D";
if(z==4)print "P";
if(z==5)print "M";
if(z>5)print "N";

if(i==0)switch(self.vl1){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==1)switch(self.vl2){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==2)switch(self.vl3){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1
if(i==3)switch(self.vl4){!v1
1:print "A";
2:print "E";
3:print "I";
4:print "O";
5:print "U";
}!v1

}!www
print "'";
print ".^";
self.ronda++;
if (self.ronda>3){self.ronda=0;
self.voc2=0;
give pinche ~general;
give self ~general;
print "-¡Excelente!- El cocinero felicita al pinche palmeándole la espalda, mientras el pobre enclenque a punto está de venirse al suelo en cada manotazo.^";}
}!PINCHE
}!eee
}!hasnt gen2

rtrue;
],
! etc
has animate concealed general;

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 13:57 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
La ficha del juego está a tu nombre, lo que te permite editar su contenido (lo que incluye el enlace del campo "jugar online"). Fíjate que tendrás una "pestaña" editar.

Ya estoy haciendo pesquisas sobre el estado de iplayif.com.


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 14:07 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
Igual tiene que ver con http://www.intfiction.org/forum/viewtop ... 594#p60665

¿Encaja con el comportamiento que estás viendo?

Intentaré enterarme si iplayif.com tiene algún fix aplicado al respecto.


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 14:33 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
Hmm, parece que el parchment de iplayif.com es más moderno que el otro que propones.

En este commit parece que se modificó el comportamiento de generador aleatorio. Es de suponer que a mejor, pero igual introdujeron alguna regresión o incompatibilidad...

https://github.com/curiousdannii/parchm ... 60df97542c


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 21:05 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
Efectivamente, parece que el problema se produce en la instrucción random, aunque sin motivo aparente, porque el hecho de que hayan modificado el generador aleatorio es irrelevante, no debería afectar a que la función devuelva valores dentro del rango.

En concreto, las partes donde el código falla son de este estilo:
Código:
z=random(6); !valores posibles: 1,2,3,4,5 y 6
if(z<1)print "Z"; !esto lo puse para comprobar si fallaba el rango
if(z==1)print "B";
if(z==2)print "T";
if(z==3)print "D";
if(z==4)print "P";
if(z==5)print "M";
if(z>5)print "N";


Modifiqué el enlace como arreglo de forma temporal, ya que cualquier día actualizan el otro Parchment.
Luego haré pruebas a ver si por prueba y error...

Saludos y gracias

_________________
_/ /\ R e \_


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 22:27 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
Cuando digo regresión, me refiero a una provocada por un bug. Ante un bug, puede ocurrir cualquier cosa. Parece raro que algo así haya pasado desapercibido... pero todo puede ser.

Intenta crear un z5 con lo mínimo que reproduzca el problema, que entiendo es que random(6) está devolviendo cero o negativo (o más en general, fuera de rango). Ayudará si hay que reportarlo. Igual tienes que intentar generar varios para provocar el fallo, o establecer la semilla (no sé si en VV lo haces, pero podría ser relevante para el supuesto bug).


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 23:02 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
¡Cazado! --o eso creo. Desde el commit mencionado falla, efectivamente, al poner semilla.
DM4 escribió:
Because you just might want to make it predictable, though, you can change the seed value within the story file by calling random(N) for a negative number N of your own choosing.

Código:
[ Main;  random(-1);  print random(6); ];
(el compilador que tengo a mano es inform-6.33b1, en linux)

Parchment imprime -1 en vez de un número entre 1 y 6.
DM4 escribió:
random(N)
returns a random number in the range 1, 2, …, N


Arriba
 Perfil  
 
NotaPublicado: 16 May 2016 23:23 
Desconectado
Implementador
Implementador

Registrado: 13 Feb 2005 18:57
Mensajes: 1854
He escrito a Dannii al respecto, a ver si lo puede reproducir también.


Arriba
 Perfil  
 
NotaPublicado: 17 May 2016 14:13 
Desconectado
Implementador
Implementador
Avatar de Usuario

Registrado: 10 Mar 2004 11:58
Mensajes: 1817
Ubicación: Madrid
dddddd escribió:
¡Cazado! --o eso creo. Desde el commit mencionado falla, efectivamente, al poner semilla.
DM4 escribió:
Because you just might want to make it predictable, though, you can change the seed value within the story file by calling random(N) for a negative number N of your own choosing.

Código:
[ Main;  random(-1);  print random(6); ];

¡Sí! Era exactamente eso.
Tras eliminar ese "inicializador" de números aleatorios, random vuelve a funcionar como es debido, aunque ya sin el efecto buscado de que la secuencia aleatoria fuera la misma en partidas distintas:
http://iplayif.com/?story=http://caad.es/jarel/games2/venenariusverborum.z5
He dejado el anterior Z5, renombrado con un dos al final:
http://iplayif.com/?story=http://caad.es/jarel/games2/venenariusverborum2.z5
De modo que la única diferencia entre ambos es la eliminación en la nueva versión de la línea:
Citar:
random (-12);!para inicializar la semilla y obtener una serie pseudoaleatoria predecible


Muchas gracias por la indagación. Esta pequeña omisión habrá dejado infuncionales a más aventuras, espero que Dannii lo tome en cuenta.

Saludos

_________________
_/ /\ R e \_


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