Forum

Random level generator

Discuss programming topics for any language, any source base. If it is programming related but doesn't fit in one of the below categories, it goes here.

Moderator: InsideQC Admins

Random level generator

Postby JasonX » Thu Dec 22, 2011 4:10 am

I just finished a small random dungeon generator after reading some articles and getting inspired by bio-algorithms. I have my not-so-useful grid of . for clear areas and # for walls. I wanted to use that information to create brushes but have no idea where to start. I read the MAP format specification and created two little prefabs (clear area and wall) but i can't position the brush correctly in the world. Always getting messed up. I'm also not sure what's the best approach.

Does any of you guys have suggestions on how i should approach this? Thanks in advance! :lol:
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby andrewj » Thu Dec 22, 2011 8:38 am

Prefabs seem like a complication, just write a solid brush for a solid spot and two brushes (floor and ceiling) for a clear spot.

The following code to write a cuboid brush into a file may be helpful:
Code: Select all
void T_WriteBrush(brush_c *B)
{
    fprintf(text_fp, "  {\n");

    int lx = VX(B->x);
    int ly = VY(B->y);
    int lz = B->low;

    int hx = lx + 64;
    int hy = ly + 64;
    int hz = B->high;

    // East
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            hx, ly, lz,  hx, ly, hz,  hx, hy, lz, B->tex_name);

    // South
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            lx, ly, lz,  lx, ly, hz,  hx, ly, lz, B->tex_name);

    // West
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            lx, hy, lz,  lx, hy, hz,  lx, ly, lz, B->tex_name);

    // North
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            hx, hy, lz,  hx, hy, hz,  lx, hy, lz, B->tex_name);

    // Top
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            lx, ly, hz,  lx, hy, hz,  hx, ly, hz, B->tex_name);

    // Bottom
    fprintf(text_fp, "    ( %d %d %d ) ( %d %d %d ) ( %d %d %d ) %s 0 0 0 1 1\n",
            lx, ly, lz,  hx, ly, lz,  lx, hy, lz, B->tex_name);

    fprintf(text_fp, "  }\n");
}
andrewj
 
Posts: 133
Joined: Mon Aug 30, 2010 3:29 pm
Location: Australia

Re: Random level generator

Postby JasonX » Thu Dec 22, 2011 4:44 pm

I see that, but how do i position this cuboids in the world? I'm iterating and printing my . and # sequentially, inside my grid. But brushes are different.
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby qbism » Thu Dec 22, 2011 5:41 pm

Could you change or convert your output to a BMP image?
BMP2MAP http://user.txcyber.com/~si_slick/bmp2map/
User avatar
qbism
 
Posts: 1236
Joined: Thu Nov 04, 2004 5:51 am

Re: Random level generator

Postby JasonX » Thu Dec 22, 2011 5:44 pm

I'm not really looking into getting a problem solved, but actually learning more about the MAP format and creating brushes based on my algorithm output. So, BMP2MAP isn't really useful. Thanks anyway! :D
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby qbism » Fri Dec 23, 2011 2:55 am

Ahh, the old-fashioned way.
User avatar
qbism
 
Posts: 1236
Joined: Thu Nov 04, 2004 5:51 am

Re: Random level generator

Postby andrewj » Sat Dec 24, 2011 1:17 am

JasonX wrote:I see that, but how do i position this cuboids in the world?

In the code I posted, there are six coordinate variables:
lx : low x coordinate
ly : low y
lz : low z coordinate (bottom of cuboid)

hx : high x coordinate
hy : high y
hz : high z (top of cuboid)
andrewj
 
Posts: 133
Joined: Mon Aug 30, 2010 3:29 pm
Location: Australia

Re: Random level generator

Postby JasonX » Sun Jan 08, 2012 1:28 am

I see, so i should increment each cuboid x/y position by it's size (64 units for example)?
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby frag.machine » Sun Jan 08, 2012 3:55 am

I am playing with the idea of random ambients, too, however I took the route of of BSP models:

Image
Image
Image
Image

I am trying to create an hybrid of Minecraft and Diablo dungeons. The idea is to have a single, persistent "world" map with a huge number of interconnected virtual environments. Something that will work in a similar way to TES:O or FO, only random.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
User avatar
frag.machine
 
Posts: 2073
Joined: Sat Nov 25, 2006 1:49 pm

Re: Random level generator

Postby ceriux » Mon Jan 09, 2012 4:44 am

that looks pretty awesome, do you think there will ever be anything playable?
User avatar
ceriux
 
Posts: 2223
Joined: Sat Sep 06, 2008 3:30 pm
Location: Indiana, USA

Re: Random level generator

Postby JasonX » Mon Jan 09, 2012 4:44 pm

It looks great, man. But what do you mean by route of BSP models? Randomly generating a path and positioning BSP models along this path accordingly in real time?
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby frag.machine » Tue Jan 10, 2012 12:20 am

JasonX wrote:It looks great, man. But what do you mean by route of BSP models? Randomly generating a path and positioning BSP models along this path accordingly in real time?


Yup. The mod has only one single map (world.bsp) formed by huge rooms. One have a sky (for outdoor sections), other is partially filed with water (the sewer screenshot), other have lava (for vulcanic caves) and so on. To compose the map itself, I cooked 256x256x512 .bsp "base blocks" (with baked lightmaps, so they look a bit better) and aligning them together in a random but coherent and functional way (at least most of the time, heh - there are bugs everywhere at this stage). The maps you see in the screenshot are hardcoded in the QuakeC (just for testing), but the idea is to have some kind of persistence layer so it can generate a huge random map, every time a new, uncharted section is visited, store it and create a big, persistent and totally random world that can be later revisited. The closer Quake will get of Minecraft, I supose. :D

@ceriux: well, it's not "playable" ATM. You can walk around in four different (and boring) ambients, grab some crates and treasure chests (no loot yet, just the messages), and punch a dummy entity into the cave test area :). I am trying to create a whole new mod almost from scratch, and it will take time.
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
User avatar
frag.machine
 
Posts: 2073
Joined: Sat Nov 25, 2006 1:49 pm

Re: Random level generator

Postby JasonX » Tue Jan 10, 2012 12:36 am

Similar to this maybe? viewtopic.php?t=1621
JasonX
 
Posts: 409
Joined: Tue Apr 21, 2009 2:08 pm

Re: Random level generator

Postby frag.machine » Tue Jan 10, 2012 12:46 am

JasonX wrote:Similar to this maybe? viewtopic.php?t=1621

Yes, albeit a bit more simple in look (at least right now).
I know FrikaC made a cgi-bin version of the quakec interpreter once and wrote part of his website in QuakeC :) (LordHavoc)
User avatar
frag.machine
 
Posts: 2073
Joined: Sat Nov 25, 2006 1:49 pm

Re: Random level generator

Postby qbism » Tue Jan 10, 2012 5:58 pm

Arkage's cube mod "chasm" might be interesting
viewtopic.php?f=2&t=3069
User avatar
qbism
 
Posts: 1236
Joined: Thu Nov 04, 2004 5:51 am

Next

Return to General Programming

Who is online

Users browsing this forum: No registered users and 1 guest