We've been kicking around the idea of virtual or instance areas recently over on the SmaugFUSS forum. I figured cross-posting here would be helpful to get some other perspectives on the issue. It all sort of grew out of a bugfix relating to Smaug's virtual room code.
I'm not familiar with WoW, but apparently they have a concept there called "instance areas" which generate for a particular group of players and nobody else can enter them. It sounds like a really cool idea.
As far as instance areas, I wasn't specifically suggesting doing it just like WoW does. I guess I was looking more at what should be called virtual areas. In that they don't exist as area files, but are generated by the code in-game, and can turn out differently each time. That alone would be cool enough. I'd use something like this in my own mud to help populate the overland. Mark several spots where you want some kind of random area to be, then wait for someone to walk in. Generate the area on the fly, and maintain its existence for as long as players are in it. Keep it alive for a certain amount of time after they leave, and once that's passed, drop it from memory. Any items gathered from inside the area would need to be populated from a static vnum or set of vnums so they would not end up vanishing when the area unloads. Combine this concept with a random treasure generator and you've got yourself quite a lot of fuel for dynamic gameplay. If you were industrious enough, it might even be possible to expand this to the point of absurdity and cause the entire world to be generated virtually.
Obviously this would need to be more sophisticated than the usual random generation of rooms in a straight line from an exit flagged with a distance value. There would need to be algorithms and generator routines capable of linking together rooms into a reasonable layout. There would have to be a sufficient pool of descriptive entries to pick from. In order for it to not be boring as hell, obviously it needs to be able to generate creatures and NPCs to populate the area with, preferrably appropriate to the type of area it generated. It would probably then need to be decided if the areas generated were open to everyone, or just to a specific group.
If something like this were well designed and thought out, it would be a great way to spice things up and break the monotony.
I'm not a Smaug guy, but I thought I'd pipe up with my experience.
MudOS libs (MudOS is a kind of LP driver that runs LP muds) have access to this kind of thing. In Dead Souls for example, you can create a virtual area by making a file that contains definitions of the grid layout. In it you can put stuff like if the X coord is between this and that, then there's Y chance to see Z monster, etc.
It's incredibly handy for things like a forest that's 25x25 rooms, where you REALLY don't want to go through the pain of defining each room individually. You can just define hard exceptions (room 12,12 must always have a tent and bottle of bourbon) or relative/random exceptions (room 12,12 will have a sleeping orc if it is night and random(10) is greater than 5).
You can also do 3d grids, for oceans or aircraft. Pretty neat. An example of a virtual "server" (that's the object created by the virtual area definition file) is here:
LPmuds are composed of objects generated from files. When a player walks into a room, there is an individual file that defines that room that gets loaded into memory with a function in the driver called load_object(). If you pass a non-existent file to the load_object(), the driver will interpret this as a request to compile an object on the fly, and will check your lib's master object for the appropriate rules, based on the path given as an argument.
If the path indicates that there is a virtual server that should be consulted, then it's used for the rules in compiling that new object, in this case, a room.
It's pretty sexy imo, and works just great. I can't imagine creating large wilderness areas without it, or something very similar.
samson, thats a random dungeon system, i've seen afew out-there, all you'd have todo is lock-down the so-called 'virtual area' so that people not with the original group, cannot enter it. and ofcourse deal with the what-happens when people die in those area's, and how they retrieve their corpses.
Sstm has a system similar to this called wdungeon, just the area's are pre-built, and are locked down through the wilderness system (as they are randomly placed on the wilderness and once beat, they move to another x/y location) my recommendation is, gank from DragonBallArena (rom distribution version by mike brown) and take a gander at its random-dungeon system, with alittle work it could be re-written for smaug and exactly for this purpose, and with alittle work, have it load/create on-demand with whatever 'free vnums' are available, and then delete itself upon completion. Wouldn't be too hard todo.
Just my two cents.
And yes, it would add a nice bit of diversity to the mix when playing games if you used it on a much wider scale.
In WoW they have not-randomly generated ones, and randomly-generated ones, and they are often done as missions, or ways to bring up your rank status. In Sstm, we give them random treasure and monsters. (which i will go into details about below)
Random monster system: spec_prog : spec_random_monster
addition to mobiles <level range> so on creation, they are at a random level between the ranges set.
on create, if you contain spec_random_monster, it pulls chooses from a series of tables as to what race/class, then based on its level, it gets skills based on it, from there, it loads.
since the dungeons are designed as orc dungeons on sandstorm, the monster is always some version of orc.
In anycase, when the dungeon is entered, it triggers a load sequence to populate the area with mobiles in random places, including the boss monster (this is done with a mudprog) when monsters are generated so are their treasure. the treasure in the area itself (in the rooms) is random if it has any at all.
In anycase, thats the sstm system, its not the greatest, and its far from a random build, but, as i said if you took a similar route, you could create quite the nice little setup.
The Ground Zero mud codebase did something like this. Though their entire mud was based on the random area contained in a X by Y by Z grid layout. The code then went through and placed "Walls" to make a custom maze like map, generated objects and mobs.
It was a pretty interesting system, and could possibly be adapted or added onto the top of a mud using another area system altogether.
the basic design, 1 used, 0 not used, keep track of the usage
and basicaly, write a function like, make_hallway(some_number) the some_number is the amount of rooms it uses, hell, you could even include which direction, and then, it moves along, from the point and makes a hallway, if it comes across a used room, it just links and ends the hall process.
quite simple to make, you just need a large enough grid to work with to stop it from turning into one giant arena :P (learned that by accident)
The Ground Zero mud codebase did something like this. Though their entire mud was based on the random area contained in a X by Y by Z grid layout. The code then went through and placed "Walls" to make a custom maze like map, generated objects and mobs.
It was a pretty interesting system, and could possibly be adapted or added onto the top of a mud using another area system altogether.
GroundZero's map was pretty simple really. 3 levels, top level was 21x21, second level varied, but was initially 25x25, GZII used 15x15. The bottom level was 5x5. They used a 2d array to hold the rooms. I've been working on a little C++ codebase that emulates GZ for the time being (for it's simplicity). It has a matrix object that stores rooms on a coordinate plane and some functions for handling the placement of walls.
Basically you have a certain # of walls to place on the map, and then a mark and sweep is used to ensure each room is reachable.
I'm not big on random generation of areas personally. However it's not hard to create a series of rooms and link them together. Depending on the needs, there are a variety of algorithms that could work. Populating the area with NPC's and objects shouldn't be hard either. If I were to write something like this, I'd break it into a series of instructions.
Build and link x rooms using this theme. Drop in a series of non-random NPC's with equipment (something like my template code would be useful here). Generate any "unique" NPC's and objects, and drop them in.
That being said, I have some builder tools that can clone rooms and link them using a variety of routines. One creates a simple grid, while another randomly links rooms using coordinates to avoid overlaps. A third simply links rooms where-ever. The two random linkers have a few parameters to control how "open" an area is. These were setup for use by builders, so I wouldn't consider them ready for a completely generated area.
I know what you mean on instances, I have played WOW, and everquest alike, however for muds….
My thinking is more dynamic quests/areas. Areas that change, and offer different things based on level, etc. I had made a ship voyage area that was available after completing a series of quests in my Thy Quest mud. I think people get bored of always getting the same thing from areas and quests. It takes a pile of work, but if done, it makes for a real interesting game. If you can get some players that is. :)
It comes down to how much "real life time" are you willing to invest in a game that is free? I had thought to put all my time into a MMORPG game, but it went under, as my coder's wife got sick, and I have since gotten into carpentry for a past time. I have finished my basement, and been improving the house so much no time for gaming. If your planning on making a stay in gaming development though I'd say creating dynamic things is the way to go.
I don't think I realy understand the concept. Why would areas change for each person? I mean, the world doesn't reassimilate itself as I walk into wal-mart.
I think the key should lie in letting players themselves change and build areas rather than making them randomized. Plant trees, grow a forest where was once a field. Mine out a forest and change the landscape. Cut down trees for their houses and destroy the forest.
I think I'd prefer dynamic areas to virtual ones, where the world changed in accordance to the actions of the players. Where the areas built automatically had a plot reason to do so.
Hmm, philosphically speaking.. are you really certain that
Brinson said:
the world doesn't reassimilate itself as I walk into wal-mart.
??? What if all those mobs/NPCs in wal-mart (or would you know them as employees and other customers?) only exist as you see them for the duration of your visit? Maybe they're all instanced too… :tongue:
both are cool, as for the comment on about the dungeon being different for each player, i believe that players would find that intriguing, because the dungeons would be different, so if they wanted to go questing, and they hit a random dungeon, they'd be set.
It would give the mud alittle somethin somethin, if ya know what i mean. Players sure, they'd know where to go todo the quest, but once they hit the random dungeon, they'd actualy have to work, and not instantly know their way to the enemy at the end, or the object they have to find, or whatever the quest may be, which may be something as easy as walking the entire dungeon to map it 100%. or whatever. WHO knows right.
I just think that it would add a great amount of depth to the mud, for either way.
I don't think I realy understand the concept. Why would areas change for each person? I mean, the world doesn't reassimilate itself as I walk into wal-mart.
No, but in the real world, people don't go around fighting orcs and dragons either. Remember we're talking about "fantasy games" here. Fantasy as in… not reality, and games… as in, things we do for enjoyment.
In the real world, if you want to do something that someone else is doing, you wait in line. Waiting isn't very fun, so in favor of gameplay over reality, many games allow "instanced" content.
In the real world, there are trillions of changing variables. If I walk into a forest, every day there will be different things around… why? Because millions of insects and animals move about. People do things that change the world. Now, most people can't afford a few racks of servers to simulate a few trillion components, so instead you do something much simpler. Either you generate a random encounter, or you create a virtual area.
Brinson said:
I think the key should lie in letting players themselves change and build areas rather than making them randomized. Plant trees, grow a forest where was once a field. Mine out a forest and change the landscape. Cut down trees for their houses and destroy the forest.
I think I'd prefer dynamic areas to virtual ones, where the world changed in accordance to the actions of the players. Where the areas built automatically had a plot reason to do so.
Yeah, I've seen this approach before. If you make change too easy you end up with a world that's well… completely destroyed. If you make the change too hard, it's a huge amount of code that simply isn't used. Getting it right? Well lets just say that I've yet to see this approach work in a "real" game. (not saying it can't or hasn't but I've seen several failed attempts and 10's of thousands of wasted lines of code)
What I have seen work however, is to generate new areas as players explore, and reclaim generated areas that aren't visited often enough.
Lets face it, the real world isn't fun… when I play an FPS, and someone shoots me with half a clip of 223 ammo and I don't die… I don't complain about it not being realistic. Realistic would be almost everyone is incapacitated after 1 or 2 hits, and frankly, that's not fun.
I don't think I realy understand the concept. Why would areas change for each person? I mean, the world doesn't reassimilate itself as I walk into wal-mart.
No, but in the real world, people don't go around fighting orcs and dragons either. Remember we're talking about "fantasy games" here. Fantasy as in… not reality, and games… as in, things we do for enjoyment.
In the real world, if you want to do something that someone else is doing, you wait in line. Waiting isn't very fun, so in favor of gameplay over reality, many games allow "instanced" content.
In the real world, there are trillions of changing variables. If I walk into a forest, every day there will be different things around… why? Because millions of insects and animals move about. People do things that change the world. Now, most people can't afford a few racks of servers to simulate a few trillion components, so instead you do something much simpler. Either you generate a random encounter, or you create a virtual area.
Well, to a certain extend the world does 'reassimililate' itself everytime you do anything, it's a persistant instance and constantly evolving, As Justin rightly point out, it's take quite a powerfuly set of servers to approximate it all even on a fairly small scale reproduction that takes every detail into account for the full ecological system including all the human factors (including economy and interpersonal relationships), so we do what we can do instead.
Justice said:
Brinson said:
I think the key should lie in letting players themselves change and build areas rather than making them randomized. Plant trees, grow a forest where was once a field. Mine out a forest and change the landscape. Cut down trees for their houses and destroy the forest.
I think I'd prefer dynamic areas to virtual ones, where the world changed in accordance to the actions of the players. Where the areas built automatically had a plot reason to do so.
Yeah, I've seen this approach before. If you make change too easy you end up with a world that's well… completely destroyed. If you make the change too hard, it's a huge amount of code that simply isn't used. Getting it right? Well lets just say that I've yet to see this approach work in a "real" game. (not saying it can't or hasn't but I've seen several failed attempts and 10's of thousands of wasted lines of code)
What I have seen work however, is to generate new areas as players explore, and reclaim generated areas that aren't visited often enough.
Lets face it, the real world isn't fun… when I play an FPS, and someone shoots me with half a clip of 223 ammo and I don't die… I don't complain about it not being realistic. Realistic would be almost everyone is incapacitated after 1 or 2 hits, and frankly, that's not fun.
I think having yor world persistant and be affectable by players with limitations (so they couldn't clear cut your all of your major forests entirely, for example) would be pretty cool, but instanced sections could be done too, I'd think.
Yeah, getting shot isn't fun, it sucks. Real life just isn't programmed for nearly enough entertainment value… :wink:
One thing about "instanced" areas like WOW is that you'd have a unique sequence number assigned to the instance you're going in. Since you can only be in one instance at a time (after error-checking, of course), that's tied to your player file until you finish or whatnot and unless a player has that number set, they couldn't go in with another group.
I'm not familiar with WoW, but apparently they have a concept there called "instance areas" which generate for a particular group of players and nobody else can enter them. It sounds like a really cool idea.
As far as instance areas, I wasn't specifically suggesting doing it just like WoW does. I guess I was looking more at what should be called virtual areas. In that they don't exist as area files, but are generated by the code in-game, and can turn out differently each time. That alone would be cool enough. I'd use something like this in my own mud to help populate the overland. Mark several spots where you want some kind of random area to be, then wait for someone to walk in. Generate the area on the fly, and maintain its existence for as long as players are in it. Keep it alive for a certain amount of time after they leave, and once that's passed, drop it from memory. Any items gathered from inside the area would need to be populated from a static vnum or set of vnums so they would not end up vanishing when the area unloads. Combine this concept with a random treasure generator and you've got yourself quite a lot of fuel for dynamic gameplay. If you were industrious enough, it might even be possible to expand this to the point of absurdity and cause the entire world to be generated virtually.
Obviously this would need to be more sophisticated than the usual random generation of rooms in a straight line from an exit flagged with a distance value. There would need to be algorithms and generator routines capable of linking together rooms into a reasonable layout. There would have to be a sufficient pool of descriptive entries to pick from. In order for it to not be boring as hell, obviously it needs to be able to generate creatures and NPCs to populate the area with, preferrably appropriate to the type of area it generated. It would probably then need to be decided if the areas generated were open to everyone, or just to a specific group.
If something like this were well designed and thought out, it would be a great way to spice things up and break the monotony.