Simulated Populations in Fantasy MUDS
-------------------------------------
My goal for my current MUD server project (Spellbound) is to
create an environment that uses a mix of population
simulations and intelligent agents to create a game that
is rich and immersive, even when there isn't anyone playing.
It isn't my intent to have a purely automated world, however,
it is my main goal for simulating populations to make the
world feel dynamic and alive for players.
Recently, I started delving into what exactly I wanted to
accomplish and my ideas about how to achieve my goals. I
have decided to post these to this list to see if anyone
has any suggestions or personal experience with designing
simulated populations.
Spellbound has a simple MUSH-like database heirarchy.
Everything in the game is given a database number.
Rooms, Objects, Exits, Characters, Areas, Spells, Races,
Help Files, Worlds all have their own database numbers.
This allows an integrated idea of OLC, in which you
can edit attributes on any object just by using the
database manipulation commands with the number of the
object you are trying to modify.
For population modelling, I will be using the Area
object extensively to define area's that populations
exist within. This idea stems from DIKUmud, where
different themes, cities, or nations might be seperated
by Areas. The only difference is that Spellbound allows
for embedded Areas, where one area may be within another.
A small part of the current world heirarchy is layed
out below:
The Planet Aeryn
|___ The Elven Kingdoms
| |___ Magehaven (Elven, Human City)
| |___ Vespen (Elven City)
| |___ Illustria (Elven City)
|
|___ The Dwarven Nation
| |___ Thorand (Gnome, Dwarf City)
| |___ Mithryn (Dwarf City)
|
|___ The Isle of Daggers
| |___ Darnock (Evil Aligned City)
|
|___ The Crystal Empire
| |___ Krysalis (Good Aligned City)
| |___ The Castle of Tears (Stronghold)
|
|___ The Troll Wastes
| |___ Daruthen (Lizardmen City)
etc. |___ Murkmire (Troll, Gnome City)
The first level Area (The Planet Aeryn) defines the
whole world, and should be inconsequential except
for defining the border's that populations may
extend. For my purposes, I wish to use the general
idea that automated agents from one population should
never need to spread too far away from their own
area.
The second level Areas define container's for
the Cities and Strongholds. Their use is for both
population control as well as organization. This
will be covered later.
The lowest level Areas have the ability to have
populations configured for them. We will use
Mithryn as an example. The Mithryn area is a large
stronghold in the northeastern part of the game
wilderness. The wilderness itself is split up into
the second level Areas. Mithryn and Thorand
are both inside a section of the map referred to
as the Dwarven Nation. Mithryn consists of a large
stronghold filled primarily with dwarves. Mithryn
is an Area object, and it contains all the objects,
exits, rooms, mobs, races, spells, etc, that are
part of the Mithryn area.
Mithyn also has a population of dwarves. How exactly
this population is defined has yet to be designed.
One possibility is the creation of Population object's
that define behavior for populations, and contain
pointer's to different 'social classes' in a population.
Population objects can also contain information on
racism, migration patterns, economic wants, adventuring
patterns, etc. The possibilities for these are endless.
By using a population object it also allows me to have
several population's in one city and allow them to
interact at any level.
A population should have several things:
- A way of growing, resetting, repoping, or procreating.
While we might not mind the possibility of having
a population completely die out, every population
should have a way of regenerating itself against
the constant onslaught of experience runs. Of course,
we also need to implement glass roofs and extinction
level events to control populations that are growing
out of hand.
- Level ranges.
This is mostly to cover balance issues, and it does
not need to be specifically 'levels'. A population
should have certain racial prowesses and special
abilities. Level ranges can be used to make sure
that dwarves are not overly wimpy or overly
strong depending on their place within the framework
of the world.
- Equipment lists and associated 'social classes'.
This is important for dressing up the 'characters'
in our population. Social classes define different
members of our population, such as 'female warrior',
'male baby', 'male merchant', 'female mage'. The
equipment lists allow us to scatter clothing and
items that are appropriate depending on the social
classes of the people we are trying to dress up.
OR
- Character lists
This is the same idea as the 'equipment lists'
and social classes, but instead of building unique
mobiles every time, we just use DIKU's idea about
resetting pre-existing characters into the game.
This is probably an easy route and therefore will
be the one that will be implemented.
- Goals
This is what seperates our populations from simple
resets. By giving an entire population a set of
goals or ideals and distributing them sanely, you
create mobiles that don't just sit around waiting
to be killed. In our example of Mithryn, most
dwarves will be equiped with the 'attack enemies'
goal. A few dwarves will be equipped with the
'adventure' goal, which will drive them to leave
Mithryn and scour the world. Obviously, both goals
makes for a very short lived hero, as the dwarf
will go forth and attack the first evil thing
that it sees. A list of goals and associated code
for those goals, combined with simple dwarven
mobiles, allows for unlimited possibilites. It
also allows for fun. I love the idea that some
weird strain could go through the dwarven gene
pool and they all would suddenly start attacking
the Elven Nation. Inter-race warfare is probably
my favorite part of the Goal system, but there
are many other possibilities. Inter-area trade
is another fun one. The economy can change and
hopefully benefit from dynamic populations that
cause inflation. Obviously, limits will be placed
everywhere to make sure that populations won't
get out of hand, but everything is easily
tweakable.
Okay. Lets see what we have now. We are generating
generic Dwarf mobs that are listed in a population
object, and these mobs pick up Goals. The goals
are probably going to be coded using state machines
that include strategies and actions, such as the
engine from Twilight Minds. These dwarves will
each set out to do their goals, and because dwarves
are constantly dying and being re-born, the world
changes all the time. The dramaticness of this
needs to be tonned down somewhat, as we cannot have
a billion dwarves suddenly take over the world.
One thing that makes this system seriously easier
is the fact that you cannot run out of money or
food in Spellbound. However, this does not mean that
these will not have an impact on the populations.
The actual code that chooses which goals to give to
new dwarves will be based on 'needs'. These needs
are tallied, and each goal is considered to help
repair these 'needs'.
- If a population is becoming too large, the population
system will simply stop spouting little dwarves.
- If the population becomes too rich, more dwarves
will be generated with goals that involve dangerous
quests.
- If a population is low on food, more dwarves will be
generated with goals that involve searching for
food to sell back to the local market.
- If a population is dying out, more warriors will be
made.
Areas are good for defining exploration, trade,
warfare, and adventuring goals. Because I use
a heirarchical Area system, the dwarves can
target other Areas. For example, if a dwarf is born
as an adventurer who wants to kill Elves, it can
set off to an Area with an elf population. This
is used mostly to organize the different populations
into their respective centers. We won't just be
popping dwarves all over the map either. :)
A side effect of populations is that it becomes
possible to allow players to take over or claim
areas of the map and allow the respective population
to react to this. Clans can battle over areas and
taxes that these populations bring in. The possibilities
are endless, and the best part about is that with
a well-designed system, there is no administration
required. Yay. Suddenly the idea of player-run
governments is feasible, as you just need to set up
certain goals that say that dwarves will follow
whoever is elected King of the Dwarven Nation.
I think a lot of these ideas have been covered
previously with the posts discussing MURKLE, but
the difference is that I am trying to apply these
populations to a familiar environment. Imagine
playing a normal DIKU mud where your starting town
is being overrun by trolls. As a result, players
will start getting more interesting in killing more
of the trolls to defend their hometowns. This can
be helped along by allowing populations to hand out
'auto quests'. The dwarven population might give out
quests to kill members of the troll population if
they are becoming too much of a pest. Obviously,
once trolls start dying out, the elves and dwarves
start thriving until they hit their glass ceilings.
This is when a gnome population might show up and
suddenly declare war on the elves. Many possibilies
exist, and the imagination is the limit as to what
can be coded into the population engine.
My question to the MUD community is what a
population engine should include for checks, balances,
and possible algorithms for resets. The end result
is a game where single people can make small impacts
on entire populations, and the world is constantly
moving around you as different races conflict, each
trying to achieve their own private goals.
Immersion is what makes the difference between a living,
breathing mud, and a mere reactive one.
Amos Wetherbee,
The Spellbound Project