Noviembre 27, 2017, 09:05:03 PM Ultima modificación: Noviembre 27, 2017, 09:26:04 PM por matiascarpello
Hola comunidad. Tengo una duda con la generación procedural. Investigando bien en foros llegué a la conclución que hay dos formas de implementar la generación procedural.

El 1er metodo es como el juego spelunsky en el que absolutamente todo es es generado de forma procedural.
El 2do método es como el juego Rogue Legacy, en el que se crean previamente roms prefabricadas con alguna aleatoriedad y después esas roms se unen entre sí.

Yo quiero intentar el 2do método y crear varias roms pre fabricadas, pero ¿cómo puedo unir roms una al lado de otras?
¿Hay alguna función en gamemaker para unir roms?

Cuando digo unir roms me refiero a que todas hagan una sola rom grande.

Por lo menos en GM: Studio 1.4, no hay forma de unir ROOMS.

Lo que sí podrías es guardar en archivos de texto ciertos patrones prefabricados de objetos, y leer aleatoriamente varios de ellos y hacer lo que deseas hacer.
alaberga regué el café.

BA:STFW&RTFM

Eso sería genial y podría servirme. Entonces. Yo ya tengo como 20 rooms prefabricadas. Cada room tiene un tamaño de 640x360. ¿Cómo podría guardar esos patrones en un txt?

Cita de: matiascarpello en Noviembre 27, 2017, 11:43:58 PM
Eso sería genial y podría servirme. Entonces. Yo ya tengo como 20 rooms prefabricadas. Cada room tiene un tamaño de 640x360. ¿Cómo podría guardar esos patrones en un txt?
Recorre todos los objetos que necesites guardar, con un with u otro ciclo, y almacena las propiedades que desees (posición, sprite, etc) en un archivo. Algo en plan:
[gml]
var f = file_text_open_write('sala1.txt');

with(objetoMuro) {//por ejemplo
    file_text_write_string( f, string(x) + ',' + string(y) );
    file_text_writeln(f);
}

file_text_close(f);
[/gml]
Y para cargar los objetos, algo así:
[gml]
var f = file_text_open_read('sala1.txt');

while(!file_text_eof(f)) {
    var line = file_text_read_string(f);

    var comma = string_pos(',', line);
    var xx = real( string_copy( line, 1, comma) );
    var yy = real( string_delete( line, 1, comma) );
    instance_create(xx, yy, objetoMuro);

    file_text_readln(f);
}

file_text_close(f);
[/gml]
Es sólo una idea. No he probado el código, así que puede contener errores.
alaberga regué el café.

BA:STFW&RTFM

Tendrás que crear tu propio sistema de: Edición, guardado, y cargado de datos, (Olvídate de las rooms de GMS). Podrías usar cuadrículas como lo hizo Spelumky para que se te haga más fácil crear un editor de tus templates, generar contenido, guardar, cargar, etc:

Cada celda tiene un dato que en el juego se lee y se elije qué cosa se creará en donde encuentre ese dato, eso es todo, tienes que crear tu propio formato de niveles y guardar lo que necesites, no hay formula exacta para esto. Podrías crear un formato basado en caracteres:


O podrías crear un formato en txt del tipo: "nombreOBJETO{x,y}", de ti depende.

PD: Tengo entendido que Spelumky también tiene partes hechas a mano en donde sólo cambian un par de cosas, así como también otras casi-full aleatorias