en unas horas más doy de nuevo la nunca bien ponderada psu. ¿qué hago despierto? oh, sencillo: a mi organismo no le pareció que yo tuviese que dormir, así que me despertó a la hora de haber empezado a dormir. me acosté y dije "no, yo voy a seguir durmiendo" y en eso estaba hasta que me di cuenta que no sabía sacar el volumen de una esfera (es 4/3p*r^3) y que todavía estaba a tiempo de saber si yo estaba bien con las fórmulas para volúmenes de figuras tridimensionales o si todo este tiempo de supocisiones eran puras mentiras (estaba en lo correcto, me sentí un poco seco cuando vi que estaba en lo correcto) y luego dije "ya, qué chucha, voy a escribir una entrada en el blog y me largo."
ayer, además de ir a reconocer sala, terminé de programar una cosa que me molestaba mucho de mi sistema de diálogos, que es que no había nada programado para ejecutar múltiples instancias de líneas que no fuesen líneas de texto comunes en un mismo diálogo. por ejemplo, si teníamos dos líneas de items en el mismo diálogo, no había ninguna manera de manejarlo. a mi me da la sensación que lo que hacía era dejar como trigger válido el último trigger definido, lo cual tiene sentido la mayor parte del tiempo. a mi no se me ocurre ninguna instancia en que activar más de un trigger seguido sea necesario, pero puede ser parte importante de algún puzzle, qué se yo, multiples actores que activen un set definido de instancias, que algunos activen más de una... si usamos los triggers exclusivamente para definir cuando un personaje muestra su diálogo alternativo es limitar las posibilidades que tiene un trigger, aunque activar más de uno en una misma instancia de diálogo no tiene muchos usos, pero hey, catbox está pensado para que funcione en la mayor cantidad de casos posibles, y a a alguien se le puede ocurrir activar dos triggers en una conversación y tengo que programar eso si no me cuesta nada hacerlo.
se me acaba de ocurrir una instancia válida en que activar dos triggers en una misma línea puede ser válido. imaginense el siguiente caso: tienen a un personaje que te pregunta una cosa, el primer diálogo activa un trigger que sirve para decirle al resto de los actores que ya hablaste con él, pero luego además te hace una serie de preguntas, que si las contestas bien te dan otro objeto, que activa el trigger de diálogo alternativo de ese actor. todas esas líneas se ejecutan de una vez en el actor, y es necesario tener un sistema que maneje eso. bueno, ayer lo programé.
el principal problema con la programación de ese pedazo fue sumar variables y comprobar el array. la variable que contaba el siguiente número de trigger a esperar sumaba 1 cuando terminaba la parte que reconocía que, efectivamente, el evento ya se había ejecutado y había que esperar otro trigger. el problema es que cuando ése trigger no existía, una variable pedía el valor de un trigger no definido, cosa que devolvía un error. ¿la solución? la función min. nunca en mi vida había ocupado ésta función, y he de decir que es muy útil. si no la había ocupado es porque no había encontrado la situación para hacerlo. la función min es una función que devuelve el valor más pequeño de los 16 argumentos que acepta. así, min(0,1) siempre devolverá 0, min(8,2) siempre devolverá 2, y así. se puede usar para comparar largos de líneas, tamaños de sprites, y cualquier cosa que devuelva un número. pero ese era sólo el primero de los problemas. pasa que la función que define líneas lleva la cuenta de una variable a la que le suma 1 cada vez que termina para la cantidad de líneas (e índice de éstas en el arreglo bidimensional, siendo el segundo índice el que indica si corresponde a la conversación normal o a la alternativa) y también hay otra variable que funciona del mismo modo pero para contar la cantidad de triggers que hay en una conversación. ¿el problema? la variable termina con 1 más que el valor de la cifra. es sencillo de arreglar cuando la variable es mayor a 0, pues es cosa de restarle 1 y se acabó el problema. pero ¿qué se hace cuando la variable es 0? si le resto 1 la variable queda negativa, dejando la expresión como variable[-1], cosa que game maker no acepta y devuelve como error (error: arreglo con índice de valor negativo). la solución, esta vez, fue la función hermana de min, max. como se imaginarán, max devuelve el valor más alto de los 16 argumentos que soporta. ésta vez fue cosa de pedir el valor más alto entre 0 y la variable en cuestión, así siempre que la variable fuese menor que 0, max devolvería 0, revisando una variable con un índice que sí está definido.
estaba pensando que ésta solución, de todos modos, es innecesaria porque eventualmente voy a tener que empezara definir la variable que almacena los índices de los triggers como -1 cuando no hay trigger asociado al objeto, haciendo así referencia nuevamente a un arreglo con índice negativo. no lo he pensado mucho, y a lo mejor nuevamente usar max para esa parte puede funcionar, pero si no funciona, voy a tener que hacer una condición de if/else, lo que aseguraría que siempre que se cumpla va a haber una variable de trigger asociada, y por lo mismo, imposibilidad de que la variable que cuenta sea 0 y, por ende, imposibilidad de que haga referencia a arreglos con índices negativos.
y de grafx2 me molesta que no haya una herramienta clara para cortar y mover pedazos. está la herramienta de clonado, sí, pero es una paja usarla, borrar lo que está y luego pegarlo en otro lado, sobre todo para selecciones más pequeñas. volví, una vez más, a idraw3. aunque yo creo que voy a ocupar grafx2 para editar gráficos sin tener que abrir parallels más que para hacerlos.
y hoy día me encontré con el sebastián y la midori y me tomé una caja de te negro con limón.