Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Ver el tema anterior Ver el tema siguiente Ir abajo

Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por newold el 2018-04-29, 10:20

Hola a todos. Últimamente he estado mirando de hacer un nuevo editor para RPG Maker ACE con nuevas funciones. Lo voy a hacer en C#. Lo primero que quiero hacer es un editor de mapas pero será diferente a los de los tres makers. En este editor tu eliges cuantas capas quieres para dibujar, en principio he pensado en limitarlas a 9. Cada capa tendría una z diferente para mostrarse por encima o debajo del personaje. Habría 5 capas fijas que no se podrían borrar (o quizás 6 para añadir una capa de sombreado), background (bajo el personaje), mid (mismo nivel z que el personaje), top (sobre el personaje), capa de eventos y capa de colisiones, y tú podrías añadir más si las necesitases. La capa de eventos se usaría como la del maker, para crear nuevos eventos para ese mapa y la de colisiones para determinar si un terreno es pasable o no (ya no se haría desde la base de datos de tilesets). Además en cada capa puedes usar cualquier tileset que tengas creado (que serán de 3 tipos, normales, de patrones (autotiles), y animados (autotiles animados)), lo que hace que una misma capa pueda usar más de 1 tileset. Los tilesets tendrán el mismo formato que los de RPG Maker XP.







Ahora bien la pregunta, en las capas que quedan por debajo del personaje o por encima no hay problemas, pero en la capa que tiene la misma prioridad z que el personaje, éste siempre estará encima de todo lo que se dibuje en esa capa, algo así:






yo la única solución que veo es que la capa con la misma prioridad que el personaje se dibujara como muchos sprites en vez de como uno solo, y así se puede controlar cuando el personaje aparece detrás o delante, pero el problema de esto es, y si el mapa fuera de 100x100 por ejemplo y toda la capa esa estuviera rellena habría que dibujar 10000 sprites y el maker ya peta con eso.

¿Se os ocurre algo?


También ya de paso podéis comentar que nuevas funciones (o mejorar algunas existentes) os gustaría que implementara el editor (como por ejemplo más comandos para los eventos)

Yo de momento tengo pensado lo siguiente:

- El editor de mapas propuesto
- Un editor de mensajes mejorado que te permita meter comandos pulsando botones (como la caja de mensajes de este foro por ejemplo :D)
- Un cambio al sistema de batalla (cambiar la lucha por turnos a un sistema como zelda)

y os pongo por aquí la estructura del mapa (en C#)

Código:
public class Map
        {
            public Map(int src_width, int src_height)
            {
                width = src_width;
                height = src_height;
                // Fix Layers
                layers.Add(new Layer("CollisionData", 0));
                layers.Add(new Layer("Bottom Down Layer", 0));
                layers.Add(new Layer("Mid Layer", 100));
                layers.Add(new Layer("Top Most Layer", 1000));
                layers.Add(new Layer("Events"));
              //layers.Add(new Layer("Shadows Layer", 5)); // shadows???? (over background)
            }

            public class Layer
            {
                public Layer(string src_name, int src_z = 0)
                {
                    name = src_name;
                    z = src_z;
                }

                public string name = "";
                public int z = 0;
                public List<Tile> data = new List<Tile>();
            }

            public class Tile
            {
                public int tileset_id = 0;
                public int x = 0;
                public int y = 0;
            }

            public class Encounter
            {
                public int troop_id = 1;
                public int weight = 10;
                public List<int> region_set = new List<int>();
            }

            public class Parallax
            {
                public Parallax(string src_name = "", int src_z = 0, int src_sx = 0, int src_sy = 0,
                    bool src_loop_x = false, bool src_loop_y = false, bool src_show = false)
                {
                    name = src_name;
                    z = src_z;
                    sx = src_sx;
                    sy = src_sy;
                    loop_x = src_loop_x;
                    loop_y = src_loop_y;
                    show = src_show;
                }

                public string name;
                public bool loop_x;
                public bool loop_y;
                public bool show;
                public int sx;
                public int sy;
                public int z;
            }

            public string display_map = "";
            //public int tileset_id = 1;
            public int width = 0;
            public int height = 0;
            //public int scroll_type = 0;
            //public bool specify_battleback = false;
            //public string battleback_floor_name = "";
            //public string battleback_wall_name = "";
            public bool autoplay_bgm = false;
            public BGM bgm = new BGM();
            public bool autoplay_bgs = false;
            public BGS bgs = new BGS("", 80);
            //public bool disable_dashing = false;
            //public List<Encounter> encounter_list = new List<Encounter>();
            //public int encounter_step = 30;
            //public string parallax_name = "";
            //public bool parallax_loop_x = false;
            //public bool parallax_loop_y = false;
            //public int parallax_sx = 0;
            //public int parallax_sy = 0;
            //public bool parallax_show = false;
            public List<Parallax> parallaxs = new List<Parallax>();
            // public int(,,) data = Table.new(width, height, 4)
            public List<Layer> layers = new List<Layer>();
            public List<Event> events = new List<Event>();
            //public Encounter encounter = new Encounter();
            public string note = "";
        }
avatar
newold
Principiante
Principiante

0/3

Créditos 1264

Gracias : 132

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por Dariel Lopez el 2018-04-29, 19:03

Me parece muy bien todo lo que piensas mejorar, y me gusta en particular lo del sistema de batalla tipo Zelda, y entrando en detalle me gustaría saber si piensas implementar también el que el personaje pueda arrojar/disparar/rebotar proyectiles como lo hace en Ocarina of Time en la penúltima batalla contra Ganondorf ya que esa opción le agregaría una gran jugabilidad a los juegos creados con ese sistema.
Y de momento no recuerdo unos comandos extras para los eventos que se me ocurrieron hace tiempo pero si los recuerdo te los comunicaré.
Te agradezco todo el empeño que le estás poniendo al Ace para mejorarlo para que quienes usamos este programa podamos hacer más y mejores juegos en menos tiempo y con más opciones a nuestra disposición.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 714

Gracias : 43

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por Dariel Lopez el 2018-05-08, 02:55

Disculpen el doble post pero estoy metiendo nuevos tiles a mi juego y es una lata estar poniendo la pasabilidad(círculo, x y estrella) a cada tile dependiendo de como lo necesite, y viendo que en tu nuevo proyecto no se hará de esta manera me pregunto, ¿hay alguna forma de seleccionar por ejemplo todos los tiles con pasabilidad de estrella en el Vx Ace? ¿O a fuerzas tengo que estar haciéndolo de uno por uno?
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 714

Gracias : 43

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por orochii el 2018-05-08, 03:40

Hola Newold, estaba leyendo el post (?). Leí la parte de los 10000 tiles xD.

En la reescritura del tilemap del XP hecho por WhiteFlute, lo que hace es tener 16 sprites en pantalla con los que se arman el mapa entero. ¿Porqué 17? Porque en la pantalla caben 15 en vertical, más 1 de gracia para cuando hace scroll.

Cada uno de esos sprites es de 640+32 de ancho (creo, es decir, 1 tile extra también para el scroll). El alto en cambio es variable, de acuerdo a qué posición estará destinado a tomar dicho sprite (el máximo es 8*32).

La idea de esto es estar redibujando los tiles, WhiteFlute lo hace en C/++ igual que el Tilemap XPAce de kk20 et al.

Los tiles en X son fáciles, porque dibujas una región de tiles de acuerdo a la posición del scroll. En Y, en cambio, dependen de la prioridad del tile y la posición Y original. La posición Z de un tile es igual a la posición Y más prioridad*32. Esto efectivamente hace que si un tile tiene prioridad 1, tendrá el mismo Z que el tile que está justo debajo. Por lo que puedes dibujarlo justo encima, en el mismo sprite xD, y reciclar.

Otra opción sino es simple y sencillamente usar hileras de tiles. Así no usarás 10 mil sprites, sino 16 por capa. Y estar reusándolos. Yo implementé algo así en VXAce hace un tiempo para una capa de prioridad extra o algo así no recuerdo qué era xD. Con Ruby va levemente mal, pero si lograras tirar los blt en C/++ iría bien, creo.
La mecánica es simplemente una hilera de 640+64, y entonces dibujar desde el primer tile visible (scrollX/32) hasta el último visible (scrollX/32 + anchoEnTiles) o algo así. Luego vas reusando hileras y reposicionándolas parecido a una lista circular, como la oruga de un tanque (???).

Y ahskdhasdjhk salut!
avatar
orochii
Reportero

0/3

Créditos 7792

Gracias : 461

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por newold el 2018-05-08, 08:03

Ya estuve mirando como lo hacía el maker, básicamente, el personaje y el mapa se dibuja con el mismo viewport, los tiles del mapa tienen 2 "z-index", uno abajo del personaje  y otro por encima del personaje (la estrella).

Así que mi idea es dibujar el mapa usando capas, y a cada capa añadir un z-index/viewport. Así todo lo que se dibuje en una capa con z = 0, estará abajo del personaje, todo lo que se dibuje en una capa con z = 1000 estará encima del personaje, todo lo que se dibuje en una capa con z = 2000 estará por encima de la capa con z = 1000 ... etc.



Lo interesante es que en cada capa puedes usar el tile del chipset que quieras. Cada tile tendrá su propio chipset. El mapa se dibujaría solo lo que se ve en pantalla, si la pantalla se mueve, se dibuja el nuevo trozo de mapa que se vería (habría una variable control para almacenar los trozos que ya han sido pintados para no volverlos a pintar). También he pensado en dejar dibujar el tile libremente en el mapa, en vez de en casillas de 32x32, pero la pasabilidad tendría que seguir siendo de 32x32, por ejemplo pintar un árbol en [1,1], otro en [1.5, 1] y otro en 1.7, 1.2, pero los tres árboles se comprobaría su pasabilidad en [1, 1]



Además se podrán añadir una o varias capas de parallax (planos en movimiento).

También existirá 2 capas extras, una para añadir eventos y editarlos (y por que no, poder añadir comandos nuevos a los eventos) y otra para indicar la pasabilidad de cada tile (en el maker, en el editor de tileset, tu pones la pasabilidad en cada tile usando cuatro flechas que se dibujan en cada tile, en mi editor al crear un mapa sería completamente pasable, y tendrías varios iconos para pintarlos en la capa de pasabilidad, uno sería para bloquear el paso completamente y los otros para indicar las direcciones desde donde se podría pasar a ese tile. Esto es más coñazo porque tendrías que poner la pasabilidad en cada mapa. podría plantearme cambiar eso y ponerlo como el maker, aunque no se, no me atrae mucho xd).

Aún estoy planteando como hacer el editor de mapas, y si hacerlo en windows forms (es lo que he estado usando últimamente y ya estoy más o menos familiarizado) o usar el wpf, aunque éste lo he estado mirando por encima y cambia algunas cosas que más o menos ya sabía hacer en windows forms


Problemas: usar mucho chipset diferente para un mismo mapa puede alargar tiempos de carga. Usar muchas capas podría causar un montón de lag, usar muchos planos/parallax podría también causar lag. Así que un fix provisional es limitar el número de capas a 9 y parallax a 3 o 4.

Y otro problema es que soy bastante nuevo en c# xd pero más o menos consigo sacar lo que quiero hacer a fuerza de prueba y error xd
avatar
newold
Principiante
Principiante

0/3

Créditos 1264

Gracias : 132

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por Dariel Lopez el 2018-06-28, 02:39

Estaba pensando newold en que sería muy útil que agregaras nuevos comandos a la hoja de comandos de eventos, y me refiero a que existan comandos como por ejemplo:
Mostrar HP, MP, Exp. y todas las características que el jugador quiera en pantalla.
Mostrar el dinero en pantalla con un comando.
Mostrar variables en pantalla.
Mostrar items en pantalla.
Tenía otras ideas en mente pero se me escaparon, pero si me acuerdo lo escribiré aquí.
Y de momento eso es todo.
Saludos.
avatar
Dariel Lopez
Veterano
Veterano

0/3

Créditos 714

Gracias : 43

Volver arriba Ir abajo

Re: Nuevo editor para rpg maker ACE, con nuevo editor de mapas

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.