W
White_heart_of_Blood
Guest
I have been trying to make a game with a mini map but all the tutorials out there involve checking for objects when I am using a random world generator with ds-grids. I this from the Beast Heart Tutorials on how to do it, but with using the ds-grids idk how to add a mini-map. Here is my level generator code if u need it:
This is all in the create event of the object if u know how to do this pls help if u can
Code:
/// Create the level
// Resize the room
room_width = (CELL_WIDTH/16) * 720;
room_height = (CELL_HEIGHT/16) * 720;
// set grid width and height
var width = room_width div CELL_WIDTH;
var height = room_height div CELL_HEIGHT;
// Create the grid
grid = ds_grid_create(width, height);
// Fill the grid with the void
ds_grid_set_region(grid, 0, 0, width - 1, height - 1, VOID);
// Load a room
if (show_question("Would you like to load a room")) {
var key = get_string("What is the name of the room?", "default");
ini_open("Save.ini");
var seed = ini_read_real("Rooms", key, 0);
random_set_seed(seed);
} else {
// Randomize the world
randomize();
}
// Create the controller in the center of the grid
var cx = width div 2;
var cy = height div 2;
// Create the player
instance_create(cx*CELL_WIDTH+CELL_WIDTH/2, cy*CELL_HEIGHT+CELL_HEIGHT/2, ob_player);
// Give the controller a random direction
var cdir = irandom(3);
// The odds variable for changing direction
var odds = 1;
// Create the level using 1000 steps
repeat (1000) {
// Place a floor tile at the controller postion
grid[# cx, cy] = FLOOR;
// Randomize the direction of the controllr
if (irandom(odds) == odds) {
cdir = irandom(3);
}
// Move the controller
var xdir = lengthdir_x(1, cdir * 90);
var ydir = lengthdir_y(1, cdir * 90);
cx += xdir;
cy += ydir;
// make sure we dont move outside the grid
cx = clamp(cx, 1, width-2);
cy = clamp(cy, 1, height-2);
}
// Add the walls
for (var yy = 1; yy < height-1; yy++) {
for (xx = 1; xx < width-1; xx++) {
if (grid[# xx, yy] == FLOOR) {
// Check for walls
if (grid[# xx+1, yy] != FLOOR) grid[# xx+1, yy] = WALL;
if (grid[# xx-1, yy] != FLOOR) grid[# xx-1, yy] = WALL;
if (grid[# xx, yy+1] != FLOOR) grid[# xx, yy+1] = WALL;
if (grid[# xx, yy-1] != FLOOR) grid[# xx, yy-1] = WALL;
}
}
}
// Add the walls
for (var yy = 1; yy < height-1; yy++) {
for (xx = 1; xx < width-1; xx++) {
if (grid[# xx, yy] == WALL && grid[# xx+1, yy] == FLOOR && grid[# xx-1, yy] == FLOOR && grid[# xx, yy+1] == FLOOR && grid[# xx, yy-1] == FLOOR) {
grid[# xx, yy] = FLOOR;
}
}
}
// Draw the level using the grid
for (var yy = 0; yy < height; yy++) {
for (xx = 0; xx < width; xx++) {
if (grid[# xx, yy] == FLOOR) {
// Draw the floor
tile_add(bg_floor, 0, 0, CELL_WIDTH, CELL_HEIGHT, xx*CELL_WIDTH, yy*CELL_HEIGHT, 0);
// Add some chests
var odds = 30;
var chx = xx*CELL_WIDTH+CELL_WIDTH/2;
var chy = yy*CELL_HEIGHT+CELL_HEIGHT/2;
if (point_distance(chx, chy, ob_player.x, ob_player.y) > 400 && irandom(odds) == odds) {
instance_create(chx, chy, ob_chest);
}
}
}
}
// Get tile sizes
var tw = CELL_WIDTH/2;
var th = CELL_HEIGHT/2;
// Add the tiles
for (var yy = 0; yy < height*2; yy++) {
for (xx = 0; xx < width*2; xx++) {
if (grid[# xx div 2, yy div 2] == FLOOR) {
// Get the tile's x and y postions
var tx = xx*tw;
var ty = yy*th;
var right = grid[# (xx+1) div 2, yy div 2] != FLOOR;
var left = grid[# (xx-1) div 2, yy div 2] != FLOOR;
var top = grid[# xx div 2, (yy-1) div 2] != FLOOR;
var bottom = grid[# xx div 2, (yy+1) div 2] != FLOOR;
var top_right = grid[# (xx+1) div 2, (yy-1) div 2] != FLOOR;
var top_left = grid[# (xx-1) div 2, (yy-1) div 2] != FLOOR;
var bottom_right = grid[# (xx+1) div 2, (yy+1) div 2] != FLOOR;
var bottom_left = grid[# (xx-1) div 2, (yy+1) div 2] != FLOOR;
if (right) {
if (bottom) {
tile_add(bg_walltiles, tw*4, th*1, tw, th, tx+tw, ty, -ty);
} else if (top) {
if (top_right) {
tile_add(bg_walltiles, tw*4, th*0, tw, th, tx+tw, ty-th, -ty);
} else {
tile_add(bg_walltiles, tw*3, th*0, tw, th, tx, ty-th, -ty);
}
tile_add(bg_walltiles, tw*0, th*1, tw, th, tx+tw, ty, -ty);
} else {
tile_add(bg_walltiles, tw*0, th*1, tw, th, tx+tw, ty, -ty);
}
}
if (left) {
if (bottom) {
tile_add(bg_walltiles, tw*3, th*1, tw, th, tx-tw, ty, -ty);
} else if (top) {
if (top_left) {
tile_add(bg_walltiles, tw*3, th*0, tw, th, tx-tw, ty-th, -ty);
} else {
tile_add(bg_walltiles, tw*4, th*0, tw, th, tx, ty-th, -ty);
}
tile_add(bg_walltiles, tw*2, th*1, tw, th, tx-tw, ty, -ty);
} else {
tile_add(bg_walltiles, tw*2, th*1, tw, th, tx-tw, ty, -ty);
}
}
if (top) {
if (!top_right) {
tile_add(bg_walltiles, tw*2, th*2, tw, th, tx, ty-th, -ty);
} else if (!top_left) {
tile_add(bg_walltiles, tw*0, th*2, tw, th, tx, ty-th, -ty);
} else {
tile_add(bg_walltiles, tw*1, th*2, tw, th, tx, ty-th, -ty);
}
}
if (bottom) {
if (!bottom_right) {
tile_add(bg_walltiles, tw*2, th*0, tw, th, tx, ty, -ty-tw);
} else if (!bottom_left) {
tile_add(bg_walltiles, tw*0, th*0, tw, th, tx, ty, -ty-tw);
} else {
tile_add(bg_walltiles, tw*1, th*0, tw, th, tx, ty, -ty-tw);
}
}
}
}
}