dynamic map generation

Get technical support about the C++ source code and about Lua scripts for maps, entities, GUIs, the console, materials, etc. Also covered are the Cafu libraries and APIs, as well as compiling, linking, and the build system.
Post Reply
diablos821
Posts:4
Joined:2012-08-26, 16:30
dynamic map generation

Post by diablos821 » 2012-08-26, 17:08

Here is a question for all you smart people,
i want to make a dynamic map, that has say a "foyer" which is the same each time you start, but from there every "room" is randomly chosen, rendered, and interactive with random NPC's if the room meets the right conditions

can this be done with this engine or should i be looking into some other engine

or is there another way this can be done

also is there some sort of AI and NPC's

i and not much of a programmer ... well i an teaching myself everything so far and I'm sure like most programmers making it up as i go along
User avatar
Carsten
Site Admin
Posts:2170
Joined:2004-08-19, 13:46
Location:Germany
Contact:

Re: dynamic map generation

Post by Carsten » 2012-08-27, 23:48

Hi diablos821,
welcome to the Cafu forums! :welcome:
diablos821 wrote:Here is a question for all you smart people,
i want to make a dynamic map, that has say a "foyer" which is the same each time you start, but from there every "room" is randomly chosen, rendered, and interactive with random NPC's if the room meets the right conditions

can this be done with this engine or should i be looking into some other engine

or is there another way this can be done
Well... I'd say it depends on what exactly you want, and what is an acceptable solution for you:

Randomly creating monsters/NPC's is easy. For example, you could modify the EntMonsterMakerT entity class for this.

"Random rooms" is more difficult. If your "foyer" can act as a hub, where for example the player walks into a (closed) door or into a portal or into a similar mechanism where you load the "next level", then selecting the next level on random (and having the player return to the "foyer" level after that), is relatively easy to accomplish, too.

It would even be conceivable to have all rooms that are available for random selection in the same map, where the player would teleport from the foyer into a random room, then back into the foyer. This solution is similar to the one above, but without the loading pauses. (If you have really many or really big rooms, overall resources might eventually become a challenge.)

For an even more seamless method, I'm afraid that I can at the moment not think of a convincing solution.
also is there some sort of AI and NPC's
The built-in AI is extremely simple, see the Trinity bot in the TechDemo map. There is no principal obstacle that prevents improving it, though. ;-)
i and not much of a programmer ... well i an teaching myself everything so far and I'm sure like most programmers making it up as i go along
Yes, this is a good way to learn!

:up:
Best regards,
Carsten
diablos821
Posts:4
Joined:2012-08-26, 16:30

Re: dynamic map generation

Post by diablos821 » 2012-08-28, 06:03

Um i'm not to sure what would work the best... Ill try to expand on what i meant,

Okay say you load a map called "hotel assault", which would start as a basic generation of a hotel lobby which includes the lobby with a restaurant and a few conference rooms to the side and is the same every time, now when the player(s) goes to the lift or stairs to go up or down this is where things would get a little difficult.

The map gen decides the layout of the hallways on each floor, most of them at least mimicking the plan of the floor beneath, as you would find in a hotel. Thinking along the lines of most FPS games the level generations are always static, the layout of the levels are the same. I was wanting to create the game levels in a modular fashion. where going from one section to the next flows as seamlessly as it possibly can without the need for teleporters, portals and loading screens. going back to the hotel analogy, say the player walks up the stairs without knowing the layout of the hotel the best way to find it is to open and look through the door. They then step through as they would any other door and go, with the map generator having already decided what rooms are accessible and the randomly chosen layout of said rooms.

So if the portal solution can work in the sense of seamless transition from one doorway to the next then that might work however what sort of limitations would i find with that solution? the only problem that i could think of is that what if the map gen chose 2 "rooms" the same, what would happen to one would happen to the other, due to the portal linking to the same room basically.

this method of map gen could be applied to any "style" of level, eg: warehouse, hospital, school etc etc....

thanks heaps for all your help and ideas. i really think that if we manage to make a game with a truly dynamic map generation, it would make a tactical fps much more interesting and have a lot more replay value
Stoo
Posts:42
Joined:2012-05-11, 00:28

Re: dynamic map generation

Post by Stoo » 2012-08-29, 13:23

I think what you're wanting to do can be accomplished using the script, but I think you'll need to define some new static "room" objects as well, and some kind of marker object to indicate where the randomized rooms should go.

Try this simpler example: Let's say you've got a map consisting of a hotel's hallway, with doors that will lead to randomized individual hotel rooms. You've also got 3 room entities defined; say a single bed room, a double, and closet. In the map, I think you'd need a "random room entity" marker (defined in the EntityClassDefs file?) placed where the rooms should go, and then the associated map script would just spawn one of the 3 room entities anywhere it saw the room entity marker.

This would give you the same hallway every time, but every time the map was loaded, you'd have a different room behind each door. Is this closer to what you're after? You can expand on this with hallways (you'd need a straight hallway mesh, an L-bend, a T-intersection, and a four-way; along with variations with a door in each wall), larger rooms, stairs, etc.; but the basic idea would be the same - static markers in the map file that the script uses to place random room entities.

...now that I think about it - if you let the players change the room types while the game's running, you could have a "dungeon keeper"-esque kind of mod! Just join a series of these markers in a grid, keep most of them closed off, and add/remove walls as they "dig" out a section by interacting with the walls. Not quite what you're asking, though :P
diablos821
Posts:4
Joined:2012-08-26, 16:30

Re: dynamic map generation

Post by diablos821 » 2012-08-29, 15:22

Stoo wrote:Try this simpler example: Let's say you've got a map consisting of a hotel's hallway, with doors that will lead to randomized individual hotel rooms. You've also got 3 room entities defined; say a single bed room, a double, and closet. In the map, I think you'd need a "random room entity" marker (defined in the EntityClassDefs file?) placed where the rooms should go, and then the associated map script would just spawn one of the 3 room entities anywhere it saw the room entity marker.
all i have to say is that's exactly what i was wanting to do, but would these entity markers cause some kind of loading screen or "portal" to another room, or would it still work as walking up to a door and opening it.
Stoo wrote: This would give you the same hallway every time, but every time the map was loaded, you'd have a different room behind each door. Is this closer to what you're after? You can expand on this with hallways (you'd need a straight hallway mesh, an L-bend, a T-intersection, and a four-way; along with variations with a door in each wall), larger rooms, stairs, etc.; but the basic idea would be the same - static markers in the map file that the script uses to place random room entities.
that would be just a natural extension of the basic map gen

if all that works
can you walk me through how to do something like that.
User avatar
Carsten
Site Admin
Posts:2170
Joined:2004-08-19, 13:46
Location:Germany
Contact:

Re: dynamic map generation

Post by Carsten » 2012-08-29, 23:15

While Stoo's description is technically right and very appealing, afaik this has never been tried before, and I fear that the actual results and current implementation may (initially) not meet the expectations.

For example, light from static (lightmapped) light sources will certainly not propagate from the floor through the doors into the rooms (but to be fair, this restriction also applies with the other alternatives that I suggested).

My biggest concern though is if physics (including normal movement) would properly be applied when the player walks in room entities (rather than in the world entity, as usual), and if everything behaves and "scales" as expected, especially if there are very many instances of such rooms, and/or if the geometry of the rooms is large and happens to be very complex. For example, as room entities would be embedded in the containing world entity, the room entities PVS would also be embedded in the worlds PVS. Same for the clipping, physics, etc. It likely works well, but I can think of some facts that I'd prefer to check if I was to implement it like that.

These factors were much less a problem if some teleportation trick was used, ideally implemented in a manner such that the player doesn't notice it. Using teleportation is simple, because the teleportation would be the only unusual element in the implementation of the map, keeping all the other well-established and battle-tested techniques in place. ;-)

Having the player not notice it would require some creativity, for example by modelling small parts of the foyer together with the exit of each room, so that when the player walks from the room back to the door, he sees the fake-part of the foyer, before the teleportation actually takes him there.
Best regards,
Carsten
Stoo
Posts:42
Joined:2012-05-11, 00:28

Re: dynamic map generation

Post by Stoo » 2012-08-30, 01:13

Carsten wrote:While Stoo's description is technically right and very appealing, afaik this has never been tried before, and I fear that the actual results and current implementation may (initially) not meet the expectations.
Quite true! I'm planning to implement something similar to what you described, but not for quite a while yet - I've got a lot of other groundwork to cover before I get to the point of generating new areas! I'd basically satisfied myself that something like this was technically possible, and moved on to more immediate concerns. Certainly, any time you try to use software in an unexpected fashion like this, you can expect to run into unexpected problems - take my advice more as "this is an area you might explore", rather than "this is the way!" (I hadn't even thought about the lighting passthrough... could you get around it by creating a light object at every room position? Not real good for mood, though...)

That said, the best way to start is to get started! If I remember right, the base download should include the mapping software; and most of what we're talking about (aside from new entities) I think is doable entirely from map scripts - which just need a text editor. Have you played with the mapping tutorials at all yet? I think the best way to start would be to create a new map to start testing different methods in - get your starting foyer area (with doors) set up, and let them initially just open into open space (just be sure it's all contained in a "world box" - I have no idea what kind of errors you'll run into if you let it leak! The tutorial covers this.)

Once you've got that set up, go ahead and try something - set up a few "random rooms" and triggers to teleport a player to, to try Carsten's technique (I believe there's a "trap trigger" script you can use for a trigger example, and another map already teleports you, so you have an example of that as well). Or, have the map script set up to just drop some existing static objects behind doors when the map loads (to see if you can drop a static entity without strangeness) to try mine (just hard-code the locations for now - you can worry about making them correspond to map elements once the basic idea works). Or, once you start exploring how everything works, you might find another way to do what you're ultimately after.
HWGuy
Posts:95
Joined:2011-05-31, 07:37

Re: dynamic map generation

Post by HWGuy » 2012-08-30, 01:22

Cafu already supports "elevators" partially... you could mod that into teleporting entire chunks of map in the form of ent groups around the place to rearrange the world.

Teleporting would also be useful because you can make the world seem infinite... until people bumped into each other, that would be trippy.
User avatar
Scorphame
Posts:60
Joined:2010-09-02, 03:39
Location:Chillan Chile
Contact:

Re: dynamic map generation

Post by Scorphame » 2012-08-30, 07:32

HWGuy wrote:Cafu already supports "elevators" partially... you could mod that into teleporting entire chunks of map in the form of ent groups around the place to rearrange the world..
Is right... even you can find a map that has an elevator :p
Simón Carreño AKA Scorphame.
Leader & Game Designer at HeXentic Games
diablos821
Posts:4
Joined:2012-08-26, 16:30

Re: dynamic map generation

Post by diablos821 » 2012-09-10, 16:52

so is there any chance of a working example? or a detailed guide to make this work... or try to make it work
User avatar
Carsten
Site Admin
Posts:2170
Joined:2004-08-19, 13:46
Location:Germany
Contact:

Re: dynamic map generation

Post by Carsten » 2012-09-11, 23:02

diablos821 wrote:so is there any chance of a working example? or a detailed guide to make this work... or try to make it work
I'd like to provide you with a working example, but unfortunately, I don't have sufficient spare time at the moment to create one myself.

However, as has been pointed out above, there is an example map that demonstrates simple teleportation (BpWxBeta), and another one that has trigger brushes (TestPatches).

If you look into those, you'll learn as much (or more) as with a ready-made example, and it will help you with creating your actual game maps.
I'll happily answer any related questions, though!!
:up:
Best regards,
Carsten
Post Reply

Who is online

Users browsing this forum: No registered users and 5 guests