jellypox wrote:There's one more thing I'm wondering about, now. I'm interested in coding levels with rooms and hallways that change when you're not looking, so the player could leave a room, and when he comes back, the room he was just in has vanished, and a completely different room is there in its place. The easiest way I can think of to accomplish this effect is to place the "dormant" room in an inaccessible point somewhere out of view (probably below the skybox) and put the "active" room in the playing field, and write a scripted event that makes the two rooms trade places. What I'm wondering is (a) could this method easily be implemented with rooms that are comprised of multiple brush objects, e.g. using selection groups? (b) could this be done with rooms composed of static detail models, or are they immovable, as the name implies? and (c) is there a more elegant way of doing this?
Well, the big question is probably how different the rooms actually are / can be.
If the rooms only differ in the entities that are within them, that is, walls, floors and other brushwork stay the same, the problem can relatively easily be solved. In this case, switching entities on (enable) and off (disable) via a map script can achieve the desired effect (this corresponds to your question (b) above). This is usually how it works in games wherein the player first explores a pristine world, then a catastrophic event happens, and then the player visits the same but now damaged world.
If the rooms are generally allowed to have significantly different
brushwork (question (a) above), things are more complicated. Our preprocessing (PVS, Radiosity lighting) is actually not well prepared for dynamic changes to the world geometry, and at this time, I guess that only tricks (that the player doesn't notice) can be used to implement this. You have already described one such trick, namely to swap pre-made rooms that are within the same map. (I don't think that literal removal or simple hiding doesn't play a role here, as the player wouldn't notice any difference.) Another trick that is probably easier to implement is teleportation, also done in a way such that the player never notices that a teleportation has happened.
I'm sure most of these questions are answered somewhere in the documentation, but I am still learning the basics of this engine, so I thought I'd ask in advanced, just so I could plan ahead. Thanks for your time!
You're welcome to post and ask! This forum exists for getting questions answered (and yours aren't covered in the docs anyway), so please feel free to ask whatever you need help with!