G
GamerGuy941
Guest
I have a weird glitch, in GMS v1.4.9999, where I made a randomized generator for level creation. It works just fine, aside from one small issue. Any time I run it, the generator produces results similar to this:
The top, bottom right, and bottom left areas are all straight lines. When I run it again, it produces similar results(I am using randomize()). I've even tried making it so that if it is a straight line, it picks another one multiple times, however this didnt work, as if they had to be straight lines. Here is the code for choosing each tile:
Having determined the surrounding rooms in code that I'm not posting, it picks a room by using a string and then disabling all of the rooms that it cannot be. It then proceeds to pick one of the remaining rooms at random. This has worked at a smaller scale, but I tried increasing it and then this happened. It's using objects already made and starting in the center, then triggering objects on its openings to pick a tile, etc. until it makes this. I have no idea why this is happening, so I'm wondering if maybe there's some sort of seed limit? It seems to be working just fine at the start, but eventually falling apart.
The top, bottom right, and bottom left areas are all straight lines. When I run it again, it produces similar results(I am using randomize()). I've even tried making it so that if it is a straight line, it picks another one multiple times, however this didnt work, as if they had to be straight lines. Here is the code for choosing each tile:
Code:
//Determine possible rooms
available_tiles="111111111111111";
null = 0;
tile = 0;
switch(north){
case 1: available_tiles=string_set_byte_at(available_tiles,1,48);
available_tiles=string_set_byte_at(available_tiles,4,48);
available_tiles=string_set_byte_at(available_tiles,5,48);
available_tiles=string_set_byte_at(available_tiles,11,48);
available_tiles=string_set_byte_at(available_tiles,13,48);
available_tiles=string_set_byte_at(available_tiles,14,48);
available_tiles=string_set_byte_at(available_tiles,15,48); break;
case 0: available_tiles=string_set_byte_at(available_tiles,2,48);
available_tiles=string_set_byte_at(available_tiles,3,48);
available_tiles=string_set_byte_at(available_tiles,6,48);
available_tiles=string_set_byte_at(available_tiles,7,48);
available_tiles=string_set_byte_at(available_tiles,8,48);
available_tiles=string_set_byte_at(available_tiles,9,48);
available_tiles=string_set_byte_at(available_tiles,10,48);
available_tiles=string_set_byte_at(available_tiles,11,48); break;
}
switch(east) {
case 1: available_tiles=string_set_byte_at(available_tiles,5,48);
available_tiles=string_set_byte_at(available_tiles,6,48);
available_tiles=string_set_byte_at(available_tiles,7,48);
available_tiles=string_set_byte_at(available_tiles,8,48);
available_tiles=string_set_byte_at(available_tiles,12,48);
available_tiles=string_set_byte_at(available_tiles,14,48);
available_tiles=string_set_byte_at(available_tiles,15,48); break;
case 0: available_tiles=string_set_byte_at(available_tiles,1,48);
available_tiles=string_set_byte_at(available_tiles,2,48);
available_tiles=string_set_byte_at(available_tiles,3,48);
available_tiles=string_set_byte_at(available_tiles,4,48);
available_tiles=string_set_byte_at(available_tiles,9,48);
available_tiles=string_set_byte_at(available_tiles,10,48);
available_tiles=string_set_byte_at(available_tiles,11,48);
available_tiles=string_set_byte_at(available_tiles,13,48); break;
}
switch(south) {
case 1: available_tiles=string_set_byte_at(available_tiles,1,48);
available_tiles=string_set_byte_at(available_tiles,2,48);
available_tiles=string_set_byte_at(available_tiles,6,48);
available_tiles=string_set_byte_at(available_tiles,10,48);
available_tiles=string_set_byte_at(available_tiles,12,48);
available_tiles=string_set_byte_at(available_tiles,13,48);
available_tiles=string_set_byte_at(available_tiles,15,48); break;
case 0: available_tiles=string_set_byte_at(available_tiles,3,48);
available_tiles=string_set_byte_at(available_tiles,4,48);
available_tiles=string_set_byte_at(available_tiles,5,48);
available_tiles=string_set_byte_at(available_tiles,7,48);
available_tiles=string_set_byte_at(available_tiles,8,48);
available_tiles=string_set_byte_at(available_tiles,9,48);
available_tiles=string_set_byte_at(available_tiles,11,48);
available_tiles=string_set_byte_at(available_tiles,14,48); break;
}
switch(west) {
case 1: available_tiles=string_set_byte_at(available_tiles,7,48);
available_tiles=string_set_byte_at(available_tiles,9,48);
available_tiles=string_set_byte_at(available_tiles,10,48);
available_tiles=string_set_byte_at(available_tiles,11,48);
available_tiles=string_set_byte_at(available_tiles,12,48);
available_tiles=string_set_byte_at(available_tiles,13,48);
available_tiles=string_set_byte_at(available_tiles,14,48); break;
case 0: available_tiles=string_set_byte_at(available_tiles,1,48);
available_tiles=string_set_byte_at(available_tiles,2,48);
available_tiles=string_set_byte_at(available_tiles,3,48);
available_tiles=string_set_byte_at(available_tiles,4,48);
available_tiles=string_set_byte_at(available_tiles,5,48);
available_tiles=string_set_byte_at(available_tiles,6,48);
available_tiles=string_set_byte_at(available_tiles,8,48);
available_tiles=string_set_byte_at(available_tiles,15,48); break;
}
//Pick room
switch(string_count("1",available_tiles)) {
case 0: null = 1; break;
case 1: tile = string_pos("1",available_tiles)-1; break;
default:
available_tiles = string_copy(available_tiles,0,11);
tile = irandom(string_count("1",available_tiles)-1);
for(i=0; i<tile; i++) {
available_tiles=string_set_byte_at(available_tiles,string_pos("1",available_tiles),48);
}
tile = string_pos("1",available_tiles)-1; break;
}
if(null == 0) {
switch(tile) {
case 0: currentroom = oGenerateData.r0; break;
case 1: currentroom = oGenerateData.r1; break;
case 2: currentroom = oGenerateData.r2; break;
case 3: currentroom = oGenerateData.r3; break;
case 4: currentroom = oGenerateData.r4; break;
case 5: currentroom = oGenerateData.r5; break;
case 6: currentroom = oGenerateData.r6; break;
case 7: currentroom = oGenerateData.r7; break;
case 8: currentroom = oGenerateData.r8; break;
case 9: currentroom = oGenerateData.r9; break;
case 10: currentroom = oGenerateData.r10; break;
case 11: currentroom = oGenerateData.r11; break;
case 12: currentroom = oGenerateData.r12; break;
case 13: currentroom = oGenerateData.r13; break;
case 14: currentroom = oGenerateData.r14; break;
}
} else {
currentroom = oGenerateData.null;
}