Tilemap Editor v2

Started by Drumpi, March 02, 2016, 08:12:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Drumpi

Pues nada, aquí va mi consejo de la semana: nunca borreis ninguna de las versiones anteriores de vuestro código, si vais a hacer cambios críticos, salvadlo antes de modificar nada, aunque sepais que ese código está mal.
¿Por qué? Pues porque después de todo lo que estuve soltando en el mensaje anterior, resulta que el código sí que estaba bien, que lo había malinterpretado hasta que me puse a darle vueltas a un nuevo código y terminé con el que ya tenía hecho. Por suerte más o menos me sé el código de memoria (me cuesta localizar las cosas, pero tengo en mente el proceso de ejecución) y no lo borré ni lo sobreescribí.
Hala, después de arreglar un par de bugs y escribir las funciones para eliminar filas, columnas o capas, ya puedo modificar el tamaño del mapa... pero aun no funciona en el editor, porque les tengo que añadir la posibilidad de deshacer.
He empezado por las filas. Añadir fila no supone ningún problema, porque lo mismo que la añades, basta con quitar la fila para haber deshecho el paso. Pero si quieres quitar la línea, eso es harina de otro costal, porque tienes que almacenar todos los datos que había en esa fila (para cada capa) para restaurarlos al deshacer. Hoy me he tirado todo el día intentando que funcionase porque me estaba dando unos segmentation fault de narices.
Al principio creía que era cosa de haber creado un word pointer, que se estaba volviendo loco añadiendo datos tipo int, pero no, estaba haciendo bien la conversión. Era culpa de no asignar bien el espacio necesario. Aun no sé si fue culpa del autocompletar o de que soy estúpido, pero había hecho un "capas*filas*capas" en lugar de "capas*filas*columnas".

Y en eso estaba, hasta que un random bug ha aparecido. He conseguido aislarlo a una función que refresca los gráficos de los tiles seleccionados, que cuando no hay mapas cargados, usa un ID de FPG no válido. Lo he corregido en una parte del código, pero no hay forma de hacerlo en los tiles rápidos: los ID de los mapas creados con NEW_MAP se reutilizan si no están en uso (si hago un NEW_MAP, luego un UNLOAD_MAP y otra vez NEW_MAP, es posible que ambos NEW_MAP devuelvan el mismo valor), y los UNLOAD_MAP son peligrosos porque me pueden descargar un mapa creado en otra parte, y no puedo poner esos valores a 0 porque si no el tile tendrá el gráfico del fondo de la pantalla. Creo que no me ha dejado guardar -1 como valor de FILE, pero lo voy a dejar para mañana que esté más fresco, que hoy el debug me ha dejado rendido.

Odio cuando pasa eso, que estoy centrado en una parte del código, y tengo que dejarlo de lado porque ha aparecido un error, y hay que corregirlo antes de seguir para evitar que sea más difícil de corregir o que desaparezca por arte de magia (variante del Heissenbug :P). Quería haber terminado hoy con la modificación de filas para ponerme mañana con el copy-past... digooo, con la modificación de columnas.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

je, lo mismo me pasaba a mi el otro dia, hice el screen_get() para capturar directo del render, y no mostraba el grafico capturado, hice un dump en hexa de la data capturada y tenia datos, pero no se dibujaba en pantalla cuando lo asignaba a un graph de un proceso, mientras los otros graphs no capturados se veian, pense que eran los alphas a 0, volvi de nuevo y reescribi todo el codigo, usando funciones mas pesadas pero asegurandome de convertir los datos... despues de un rato de escribir y tras probar tampoco iba... diablos! agarre hice un for y reemplace todos los 0 por 255, si eran alpha con esto se deberia ver (ya habia probado con b_nocolorkey, y tampoco iba), pero no funciono... ya estaba enloquecido... agarre SDL_SaveBMP, y grabo el surface creado y si tiene la imagen! diablos que paso? revise y revise, y revise, y mientras cambiaba otras cosas, ahi lo vi, eran los cpoints que apuntaban a viejo valor de bennugd que se usaba para indicar "no centro definido"... diablos! lo quite y funciono perfecto! volvi al codigo anterior optimizado (por suerte no lo borre, lo comente) y funciono tambien perfecto!
para esto, perdi unas 2-3 horas con pruebas e intentos...
si van a reescribir no borrar la version anterior por las dudas...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

#32
Esos fallos puñeteros, que no hay forma de encontrar. La de veces que me ha psado eso, pero porque las coordenadas del mapa o la Z no eran correctas :D :D :D
Hoy mismo he resuelto uno que al crear un mapa, intentaba seleccionar la capa 1 en lugar de la 0. Usando el buscador de Notepad++ no encontraba la línea que le asignaba ese 1 a ese valor, así que tuve que hacer una traza del programa leyendo el código hasta que encontré la línea en un fichero que no estaba abierto (en serio, tengo que aprender a usar la herramienta de traza del código del debug de BennuGD ^^U).

Y es que tenía que ir cerrando ficheros porque fijaos cómo era mi "entorno de trabajo":



Al final he escondido las pestañas y he activado el "doc switcher" para tener una referencia del orden de los ficheros abiertos (suelo estar editando el último, y así es más fácil de encontrarlo que con el "sherlo explorer"), y ahora si tengo espacio para leer más código de golpe. No es que vaya a conseguir mucha más velocidad, pero algo hace, sobre todo para buscar fallos:



Bien, respecto al desarrollo en sí, he podido solucionar lo del random bug. Efectivamente era que al descargar un mapa, ese identificador pasaba a estar libre, y al crear un nuevo map, se usaba ese valor y la vista previa del tile lo mostraba como si fuera un tile. Intenté asignarle valores de file = -1, o de graph = 0, pero no sé si porque mi código estaba mal, o porque me identificaba el (file = 0, graph = 0) como un mapa válido y me descargaba un mapa aleatorio, me empezaban a desaparecer gráficos a medida que cerraba y abría nevos mapas. No, no me puse a hacer pruebas porque estaba ya muy cansado, y tiré por la calle de en medio: si no hay mapa cargado, se genera un gráfico de 1x1 transparente, de esta forma siempre que se llama a la función de actualizar, hay un graph en esa posición que descargar. No es una solución muy elegante, pero el código se ha simplificado tanto que ocupa la mitad de lineas.

Resuelto el bug, volví a la modificación del tamaño de los mapas de tiles, y ya se puede cambiar el tamaño y deshacer/rehacer los cambios... Y sí, eso incluye recuperar la información "perdida" al eliminar una fila o columna. Un momento ¿y las capas? Pues en su momento no lo pude probar (y lo cierto es que aun no lo he hecho ^^U) porque no podía editar en ninguna otra capa que no fuera la 0.
Así que ya tocaba trabajar con esa parte morada de la parte derecha del editor: la lista de capas. ¡Vaya follón! entre el número de capas disponibles, el número de elementos que se pueden mostrar a la vez, la primera posición mostrada, la posición seleccionada y la capa seleccionada, la función de refrescar me ha llevado todo un día arreglarla para que funcione bien. Creo que lo he conseguido, pero no descarto que al hacer algún "movimiento raro" no aparezca la lista en la posición 47 o se seleccione más de un elemento :D :D ^^U Nah, básicamente que he hecho varias pruebas, pero han sido tantos intentos que ya no sé si en el último he llegado a realizar todas las pruebas que había hecho en los anteriores.
Lo bueno es eso, que ya se puede ver la lista de las capas del mapa seleccionado, seleccionar una, ¡Y EDITARLA! Por fin se pueden generar mapas de dos o más capas sin tener que crear cada una en un mapa diferente, y unirlas posteriormente por código (aunque tengo previsto añadir dicha funcionalidad como herramienta en el editor en un futuro).

Os dejo una fotico para demostrar lo que vale ya el editor:



Aun no puedo subir una beta, porque para empezar aun no he creado una carpeta con los ficheros necesarios para compartir. Además, tengo que quitar unas cuantas llamadas a SAY o a funciones de debug.
También quiero añadir que las capas que están encima de la que se está editando se transparenten, y eso va a suponer un problema. El valor de la capa en edición y quien decide qué capas deben tranparentarse y cuales no son cosas del sistema; sin embargo, quien lleva el control total y absoluto de los tiles es el motor de scroll tileado, y no fue diseñado (porque no era su cometido) para que las capas tuvieran un comportamiento diferente unas de otras. Así que si el sistema hace transparente a algunos tiles (porque puede acceder a cualquier parte de esos datos), el motor automáticamente los volverá a poner opacos. Así que ahí estoy ahora, intentado ver en qué parte del código va esa modificación, o cómo poder implementarlo en el sistema sin alterar el scroll tileado.
Lo cierto es que veo que es posible que al final modifique el motor de scroll sólo para el editor, porque hace tiempo pensé que sería interesante tener capas que manejasen FPGs diferentes, por ejemplo, para crear una capa que no se verá en el juego, pero que incluye información de esa posición (por ejemplo, el valor de la energía de un enemigo situado en esa (X,Y), o la dureza o un flag de propiedades como en los mapas de Sonic de MD).
Y también me gustaría añadir una herramienta para ordenar los mapas cargados y, por tanto, alterar su Z (por ejemplo, para poner el segundo mapa que hayamos cargado sobre el primero, o para alternar entre ambos sin que el otro nos tape). Había pensado en poner un par de flechas al lado del nombre de cada mapa en la lista de mapas, pero es que tendría que poner las dos flechas, un botón para activar/desactivar el mapa (quitarlo, pero sin cerrarlo), y otro para hacer que se transparente.

Cualquier idea es bienvenida (y si es con boceto, mejor).

PD: que no se me olvide: la herramienta de cuentagotas. Aun no sé si asignarlo como un botón más o usar shift+clic
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

Es gracioso cómo un bug puede hacer que algo que funciona en una parte, falle en otra, haciendo teóricamente lo mismo.
Y lo digo porque hoy me he puesto a implementar el cambio de orden de los mapas de tiles, en la lista interna del sistema. Que esa es otra: el código para intercambiar de posición dos nodos de la lista, con todo lo complejo que es, por estar manejando punteros y una lista simplemente enlazada, funciona a las mil maravillas (leido por consola de debug), pero sin embargo, refrescar la lista de mapas de la parte derecha de la interfaz falla, aunque se pone bien si se desplaza la lista o se crea un nuevo mapa.
Y esa es la cosa, una función que, supuestamente, "elimina" los datos de la lista (sólo en la interfaz) y la vuelve a recuperar con los datos cargados en ese momento, y que ha funcionado bien al crear, cargar, cerrar, renombrar, etc, ahora no funciona cuando cambio el orden de dos mapas... que en teoría debería hacer lo mismo que al crear el mapa, pero bueno. Dadme tiempo para depurarlo.

Y es que al final he decidido que, de momento, sólo voy a poner un botón al lado de cada elemento de la lista de mapas para subirlo una posición. Es un peñazo tener que mover el nuevo mapa una posición tras otra para que quede por encima de las demás, pero ¿Cuántos mapas se van a tener abiertos a la vez? :D Yo nunca he tenido más de dos o tres. Echadle un vistazo a cómo está quedando:



A la izquierda de esos botones quiero poner otros para "activar" y "desactivar" cada uno de los mapas. Es fácil crear una función que elimine todos los procesos tile del scroll tileado, y el proceso de control, y aun así, mantenga los datos actualizados, y después devolverlo a la vida. Bueno, eliminar el proceso de control puede ser un poco "heavy", lo mismo se puede congelar o algo, aun no lo he comprobado en el código (lo he hecho de memoria) pero es sencillo.
Lo que no es tan sencillo es decirle que lo ponga transparente, ya sea a parte o a todas las capas. Es lo que comenté en el anterior mensaje: no es algo que le corresponda al motor de scroll tileado, sino al sistema de edición, pero es el único que tiene acceso al comportamiento de los procesos tile.

En fin, como bonus a los que estais siguiendo el culebrón, os subo una beta del programa hasta cómo estaba anteayer... pero sólo para Linux :D :D :D
He cogido el BennuGD "portable" de Pixel, que encontré en un hilo perdido, porque he intentado por enésima vez instalar Bennu desde la versión oficial (he analizado el instalador, y no es invasivo, está todo bien localizado, bien hecho, Splinter :D ) y por enésima-1 vez tengo problemas. Instalarse se ha instalado, pero me sale el famoso error de la libcrypto1.0.0. Tenerla la tengo, igual que la libssl, y he probado a poner en la misma carpeta las que vienen en la versión portable de Pixel, pero le da exactamente igual.
Bueno, que no me enrollo más. Aquí teneis el binario para probarlo. El que lo quiera para Windows, que se lo porte él mismo :D Y no, no hay código fuente. Cuando lo termine es posible que lo ponga, pero en un paquete aparte y bajo pedido. Cualquier sugerencia, bug reproducible, alabanzas y jamones serán bienvenidos :)

PD: He tenido que eliminar una carpeta .svn que no sé de dónde ha salido, del fichero comprimido porque se pasaba del tamaño máximo de adjunto, espero no haber quitado nada importante :P
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Es curioso cómo dos simples líneas entre más de 10000 (por decir un número) puede ocasionar tantos dolores de cabeza, y bugs "mu raros".
Todo el problema que tenía se debía a que en un copy-paste, uno de los punteros quedó sin renombrar, y al señalar a un null me sacaba de un bucle y se quedaba casi toda la lista sin comprobar.
Eso, sumado a que el proceso de refresco estaba empeñado en leer el final de la lista (que no estaba mal, es como se diseñó... hasta que empezaron a funcionar los botones de desplazamiento por la lista :D ), me tenía loco.

Para echar más leña al fuego, esta mañana me estaba fallando el código que modificaba la posición de los mapas en la lista. Tras detectar el fallo, empecé a poner says para leer los datos de cada variable y... empezó a funcionar sólo. Ya no estoy seguro si era porque arreglé lo del puntero o qué fue, pero, básicamente, se arregló solo (y no "mágicamente" como dicen los estudiantes de informática, no, sólo, sin tocar el código salvo para poner says). No sé, me duele la cabeza ya de pensar en ello.

En fin, arreglado eso, me he puesto con los botones para activar y desactivar los mapas. Ha sido bastante sencillo de implementar porque las herramientas estaban hechas, y el comportamiento era una mezcla entre los botones de mover mapas y los switches de selección de mapa (los nombres de los mapas en la lista). No puedo darlo por cerrado porque apenas he hecho unas pruebas de funcionalidad básicas, tengo que darle caña a ver si puedo romperlo, pero bueno, aquí os dejo una imágen del mapa 1 seleccionado, pero inactivo, y luego otros dos mapas activos. decidme qué os parece, pero me da a mi que tengo que cambiarle el color a los LEDs esos (y quizás la forma, admito sugerencias).



Pues nada, a darle caña a ver si saco errores. Se me ha ocurrido que, para el tema de las capas, tener un array de datos en la estructura general del mapa (la que contiene al tilemap y al scroll tileado) con la información de cada una de ellas (de momento, el alpha) en lugar de almacenarla en los tilemap en sí, y hacer que todas las llamadas de refresco del scroll tileado pasen a través del sistema.
Me explico. Actualmente, el motor scroll tileado tiene una función que actualiza todos los tiles de pantalla. Se usa cuando la cámara cambia de un tile a otro (en caso contrario, se usa una función de desplazamiento que es muchísimo más rápida), pero también se puede usar para forzar un refresco en cualquier momento.
Hasta ahora estaba dando permiso al sistema a usar esa función para cuando se hicieran diversos tipos de modificaciones (zoom, gráficos, tamaño de mapa...), pero creo que es buena idea dotar al sistema de su propia función de refresco del scroll tileado. Su función sería, al principio, llamar a la función de refresco del motor de scroll tileado, y después llevar a cabo las modificaciones necesarias a los procesos tile correspondientes (modificar su alpha en función de su posición z o... básicamente es el único cambio que voy a hacer de momento ^^U).
La pega es que el proceso de control del scroll tileado también hace uso de dicha función, y ahora tendría que hacer la llamada a la función de refresco del sistema, rompiendo la modularidad (aquí vendría bien algo para capturar la llamada a dicha función desde cualquier punto del programa, y ejecutar una serie de acciones después, como con las interrupciones ^^U).
Y aun así, me parece la solución menos invasiva y más elegante. A no ser que a alguien se le encienda una bombilla, que la mía está con la carga muy baja :D :D :D
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

esos cuelgues que se solucionan con say, son normalmente algun pise de memoria, el tema es saber si es pise es de bennugd o del manejo de listas que estas haciendo.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Quería descartarlo, y quité los SAY. No sólo los comenté, los eliminé del código, y seguía yendo bien. Intenté más o menos reproducir el error pero me fue imposible. Ya digo que me faltan hacer pruebas exhaustivas, pero es muy probable que el error fuese mio por dicho puntero que no renombré al copiar. Analicé el código y vi que tenía sentido el fallo, pero está demostrado que eso nunca es prueba de garantía: que no veas el error, no significa que no exista :D

Alguna vez me ha pasado eso, que los say eliminasen un error, y salvo Fenix v0.84, siempre he comprendido que era un puntero con valores mal asignados (he visto en mi cabeza cómo el say modificaba las posiciones y los datos de la zona de memoria del código, y cómo los punteros se escapaban de la zona de espacio reservado para memoria dinámica, por deformación profesional ^^U).

Ahora me interesa que los 6 o 12 que van viendo este "log" me digan qué les parece el color de los leds de la última imágen :D Estoy convencido en un 80% de que mañana debería cambiarlos por leds verdes, aunque aun no sé si de forma rectangular, con el brillo dándole menos altura, o qué.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

por mi se ven muy bien
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Bueno, al final los he cambiado por leds verdes, a juego con la zona de la lista de mapas, y los he hecho menos redondeados. Por desgracia no he traido imágen que enseñar :(

También le he añadido a la estructura de mapas del sistema una nueva lista enlazada (y ya van... pfffff) para que almacene los datos específicos de cada capa. Eso implica la creación de las funciones de añadir nodo, borrar, contar, escribir, etc... Y luego usarlas en el sistema cada vez que se modifica el tamaño del mapa en el número de capas. Por suerte no ha sido complicado, ya que modificar las capas no es algo que se use habitualmente, ya que por lo general este tipo de mapas se usan en juegos 2D (algún día, Tomb Raider/Mario 3D Land, algún día).

Y ahora tengo una pega, y aquí sí que necesito consejo: habeis visto las imágenes del editor, la lista de capas es la parte morada. Tengo ese espacio para añadir lo siguiente:
- Un botón para activar la capa.
- Un botón para desactivar la capa.
- Un botón para hacer la capa transparente (y si se puede definir la opacidad, mejor).
- Un botón para poner todas las capas en cualquiera de los tres estados mencionados antes.
- Un botón para poner sólo las capas por encima de la seleccionada en transparencia o invisibles.

Para los tres primeros casos, me planteaba usar un slider 0%-100% al lado de cada capa, pero me interesa que se puedan seleccionar fácilmente los valores 0%, 50% y 100%.
Los dos últimos ni idea, el espacio es reducido. Pensaba colocar una barra de texto por encima de todas las capas (puedo bajar la lista unos 12 pixels o poco más), a la derecha, donde se pudiera indicar un valor entre 0% y 100% (quien dice texto, puede decir slider o algo original), y a su lado dos botones: "set all" y "above selection", pero los textos no caben en tan reducido espacio, y encima el editor puede cambiar de idioma (en la beta que subí se pueden ver los ficheros .lang, pero no hay selector de idioma, de momento). Puedo poner imágenes, pero no sé cómo hacerlas para que se entiendan (mucha gente me ha mirado raro porque no entendía los botones de edición :S).
Pero si se os ocurre otra forma, aunque sea en combinación con la lista de mapas, estoy abierto a ideas. Más adelante habrá menús desplegables y botones que se puedan colocar en la barra de botones (la azul claro que ahora está vacía) para acceder a todo tipo de funcionalidades que aun no se han implementado, o para incrementar las que ya existen (como añadir columnas intermedias, acceso rápido a bloques predefinidos de tiles, o la configuración de una herramienta de "pintado inteligente" (que aun no sé exactamente qué significa eso ^^U).

Ya casi está lista la versión usable del programa, queda eso, unos detalles que tengo apuntados, y a partir de ahí es cuestión de ir añadiendo funcionalidades que no estaban en la v1 (tengo que repasar las notas de aquella versión, a ver qué me he dejado).
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

Pues nada, viendo que a nadie se le ocurre una buena idea, para que el proyecto no entre en la temida fase "pausa hasta que se me ocurra algo, pero se queda de forma indefinida hasta que tenga ganas de retomarlo", pues he decidido implementar la última forma que se me ha ocurrido. Ya cuando la haga os contaré.
De momento he estado implementando los botones que van a establecer la transparencia de forma individual a cada una de las capas que se ven en la lista, es decir, los que van a la izquierda de cada posición de la lista de capas. Estos botones no son botones normales, son un nuevo elemento que he creado para la ocasión, que he bautizado (a falta del nombre original) "botón-slider":
- Con una pulsación simple se comportan como un botón normal y corriente, con la diferencia de que incrementan el valor que contienen en un 50%, o vuelven a 0 si estaban ya al 100% (están programados para que dicho salto sea de 50%, 25%, 12%... en función de los "pasos" que se le indique al "botón-slider", y para darles cualquier valor máximo y mínimo que se quiera).
- Pero si se mantiene pulsado, se comporta como un slider, decrementando el valor que contiene si se desplaza el ratón a la izquierda, e incrementándolo si se desplaza a la derecha.

De momento no he podido hacer gran cosa, porque anoche estuve hasta las 5 de la mañana escribiendo el guión de mi próximo video (o lo soltaba de mi cabeza o me iba a pasar dos o tres noches en vela). Por ahora están puestos en el interfaz, funcionan bien con cualquier valor de paso, valor máximo y valor mínimo, y se congelan/despiertan en función de si hay alguna capa a su derecha, pero aun no modifican el valor de la capa ni se actualizan al desplazar la lista arriba y abajo. Eso ya me tocará mañana.

En fin, os dejo aquí la imágen para que lo veais. Hace algo extraño con la barra de relleno cuando está casi vacía (un valor de size_x muy bajo, no nulo), no sé por qué.
Por cierto ¿cuál es el valor máximo de la variable local predefinida alpha? ¿255 o 256? Es que la he buscado en la wiki, pero no está.

Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

#41
Hoy seré breve:
Ya se puede seleccionar el alpha de las capas de forma independiente, y se mantiene aunque cambies de mapa (pero no si lo cierras, eso es sólo información para la edición, no para el mapa de tiles. Los botones-sliders funcionan bien, y tienen valores automáticos a 0, 127 y 255. Y sí, se actualizan bien al cambiar de mapa y al desplazar la lista de capas.



También he preparado un pequeño montaje en paint de lo qe tengo previsto a continuación, y necesito opiniones, por favor:


Como veis, he añadido tres botones más. Quiero saber si tal como lo he puesto se entiende o no.
Tampoco tengo claro si los botones van a ser botones o interruptores, o botones que se quedan activos si se dejan pulsados más tiempo de la cuenta (como el botón mayúsculas en el teclado de Android).

Si no se entiende voy a explicarlo, pero intentad entenderlo antes de segir leyendo...
Esos tres botones, junto al boton-slider que lo acompañan, sirven para modificar todas las capas del actual mapa en grupos: el botón central sólo afecta a la capa seleccionada, el izquierdo a todas las que hay sobre ella, y el derecho a las que hay debajo. Se supone que si el botón queda activo, asignará ese valor de alpha automáticamente al conjunto, es decir, que si marcamos un alpha de 127 para todas las capas superiores a la seleccionada, si cambiamos de la capa 1 a la 3, automáticamente la capa 1 y 2 se pondrán transparentes al 50%.

...Aunque pensándolo bien, debería darle otra vuelta, porque ¿y si cambio de la capa 3 a la 1? ¿Se quedarían la capa 1 y 2 semitransparentes? ¿Debería añadir un botón-slider a cada grupo, y un switch al lado para mantenerlo automático (al cada grupo o a todos)? Pero entonces ¿esos símblos se entenderían? es que no tengo demasiado sitio para poner nada. Puedo eliminar una línea más de la lista de capas, pero eso sólo me daría espacio en vertical. Mmmm.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

Ya casi está, ya casi tengo lo suficiente para abandonar la v1 definitivamente. Lo sé porque se me están quitando las ganas de seguir con el programa :D :D :D
Aun quedan muchas cosas en el tintero, pero en cuanto arregle un par de cosillas, voy a aparcarlo para centrarme (por fin) en acabar los niveles 4 y 2 del Echo.

Mirad que monada :)


Al final lo que he hecho ha sido añadir 3 switches y 3 botones-sliders. Los switches activan o desactivan el cambio automático de alphas de las capas superiores, de la seleccionada o de las inferiores, según si se hace clic en el izquierdo, en el central o en el derecho respectivamente. Los botones-sliders sirven para seleccionar el alpha de esas capas.
Por ejemplo, si ponemos (0,255,0) sólo veremos la capa que estemos editando, da igual que cambiemos de capa, y da igual el mapa seleccionado (ojo, seguiremos viendo los dos mapas a la vez si los tenemos activados, la funcionalidad de ordenar los mapas y de verlos no se ha modificado). O por ejemplo, podemos poner (126,255,0) para ver en transparencia las capas superiores, totalmente opaca la capa que estemos editando, y que no se vean las capas de atrás para no liarnos.
Pero vamos, que si se desactivan podemos seguir usando los botones-sliders de cada capa como hasta ahora, incluyendo la memorización de las alphas de cada capa en cada mapa de forma individual.

También he resuelto un par de bugs que no había visto, he añadido a la ventana de selección de archivo la posibilidad de hacer scroll en la lista de ficheros usando la rueda del ratón, y que al iniciar el programa se tengan preseleccionadas las herramientas más habituales (poner tile 1, mover cámara y borrar).

Lo que tengo que pulir es que, para empezar, las barra de los boton-sliders no se actualiza si se cambia el valor que contiene de forma externa, que no se puede seleccionar idioma desde el fichero de configuración, y que los ficheros no se ordenan alfabéticamente en la ventana de selección. Tengo un par de cosillas más, y seguro que hay que corregir algún bug, pero de momento, vamos a por eso.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Drumpi

Bueno, no sé si seguiré con el editor o no, dependerá de las ganas que tenga mañana o pasado, porque hoy estoy ya sin ganas ^^U

Le he hecho unos cuantos retoques al programa, empezando por darle utilidad a la rueda del ratón, para hacer scroll en la lista de ficheros en las ventanas de selección de fichero, parecía una minucia pero resulta mucho más cómodo navegar ahora. Debería plantearme añadir algún botón de "atrás"...
También he completado la función que actualiza las barras de porcentaje de los boton-sliders con la ayuda de Splinter y Pixel. Ahora ya se refrescan en todas las ocasiones... o al menos en las que he probado.
He añadido botones invisibles en la interfaz en la zona del ratón, para poder cambiar directamente el tile a la herramienta que haga uso de ellos. Otra tontería que ahorra tiempo.
Y he añadido al fichero de configuración una línea para definir el fichero de idioma que queremos que se cargue. Por defecto he puesto el fichero en inglés (eng.lng) pero se puede poner tranquilamente el fichero en español (esp.lng) o cualquiera que se haga (estoy abierto a aportaciones en este sentido).

Lo bueno de haber terminado lo gordo es que cualquier cosa ahora se implementa en pocos minutos, sólo basta con saber dónde meterlo y las funciones que se pueden invocar... aunque a veces eso lleva bastantes minutos, porque hay cientos de funciones y hay que respetar las convenciones sobre a quién se puede llamar en cada capa :S

Lo que no he conseguido es ordenar la lista de ficheros (eso requiere muchísimo debug, porque no es una función precisamente sencilla), y faltaría cambiarle el texto a los botones de guardar y salir (es lo que tiene el añadir texto a una imágen) y quizás una función para modificar los valores del fichero de configuración, es decir, seleccionar un tamaño de ventana (que ahora mismo requeriría reiniciar el programa :S), seleccionar el fichero de idioma, y personalizar la barra de iconos, que ahora está vacía, y que se supone que se puede rellenar con cualquier función disponible en los paneles laterales. Quizás debería también desplazar la cámara al modificar el zoom.
Y sí, hay muchas funciones que me dejo en el tintero, como almacenar bloques de tiles, fusión de mapas, añadir/quitar filas y columnas en la parte interior del mapa, cargar mapas de Tiled (aunque necesito que alguien me explique algunas cosas del formato)... pero es lo dejo para más adelante que no esté tan cansado del proyecto :P

Si mañana no añado nada más, subiré la beta para que quien quiera pueda probarlo. Por mi parte, el Echo será el primer beneficiario del editor, a ver si por fin le puedo añadir banderas de mitad de nivel al juego, arreglo un par de cosillas, y empiezo con la tercera parte del cuarto nivel, que ya tengo unos cuantos tiles hechos desde hace la tira ¿Alguien sabe de algún programa sencillo que me permita crear imágenes BMP de 24bits con función de roll pallete? ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

a veces es bueno dejar un proyecto aparcado un tiempito y cambiar a otro, para retomarlo luego con mas ganas.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2