2000Q1/
<!-- MHonArc v2.4.4 -->
<!--X-Subject: [MUD&#45;Dev] Simulated Populations -->
<!--X-From-R13: "cuyGWR" <cuyhvqNzvaqyrff.pbz> -->
<!--X-Date: Wed, 19 Jan 2000 15:03:16 &#45;0800 -->
<!--X-Message-Id: 000501bf62d1$c6289ae0$0201a8c0#syntax2,javanet.com -->
<!--X-Content-Type: text/plain -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>MUD-Dev message, [MUD-Dev] Simulated Populations</title>
<!-- meta name="robots" content="noindex,nofollow" -->
<link rev="made" href="mailto:phluid#mindless,com">
</head>
<body background="/backgrounds/paperback.gif" bgcolor="#ffffff"
      text="#000000" link="#0000FF" alink="#FF0000" vlink="#006000">

  <font size="+4" color="#804040">
    <strong><em>MUD-Dev<br>mailing list archive</em></strong>
  </font>
      
<br>
[&nbsp;<a href="../">Other Periods</a>
&nbsp;|&nbsp;<a href="../../">Other mailing lists</a>
&nbsp;|&nbsp;<a href="/search.php3">Search</a>
&nbsp;]
<br clear=all><hr>
<!--X-Body-Begin-->
<!--X-User-Header-->
<!--X-User-Header-End-->
<!--X-TopPNI-->

Date:&nbsp;
[&nbsp;<a href="msg00164.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00166.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Thread:&nbsp;
[&nbsp;<a href="msg00225.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00180.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Index:&nbsp;
[&nbsp;<A HREF="author.html#00165">Author</A>
&nbsp;|&nbsp;<A HREF="#00165">Date</A>
&nbsp;|&nbsp;<A HREF="thread.html#00165">Thread</A>
&nbsp;]

<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<H1>[MUD-Dev] Simulated Populations</H1>
<HR>
<!--X-Subject-Header-End-->
<!--X-Head-of-Message-->
<UL>
<LI><em>To</em>: "Mud Dev Listserv" &lt;<A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A>&gt;</LI>
<LI><em>Subject</em>: [MUD-Dev] Simulated Populations</LI>
<LI><em>From</em>: "phlUID" &lt;<A HREF="mailto:phluid#mindless,com">phluid#mindless,com</A>&gt;</LI>
<LI><em>Date</em>: Wed, 19 Jan 2000 18:06:10 -0500</LI>
<LI><em>Importance</em>: Normal</LI>
<LI><em>Reply-To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI>
<LI><em>Sender</em>: <A HREF="mailto:mud-dev-admin#kanga,nu">mud-dev-admin#kanga,nu</A></LI>
<LI><em>Sensitivity</em>: Company-Confidential</LI>
</UL>
<!--X-Head-of-Message-End-->
<!--X-Head-Body-Sep-Begin-->
<HR>
<!--X-Head-Body-Sep-End-->
<!--X-Body-of-Message-->
<PRE>

 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



_______________________________________________
MUD-Dev maillist  -  MUD-Dev#kanga,nu
<A  HREF="http://www.kanga.nu/lists/listinfo/mud-dev">http://www.kanga.nu/lists/listinfo/mud-dev</A>

</PRE>

<!--X-Body-of-Message-End-->
<!--X-MsgBody-End-->
<!--X-Follow-Ups-->
<HR>
<ul compact><li><strong>Follow-Ups</strong>:
<ul>
<li><strong><A NAME="00256" HREF="msg00256.html">Re: [MUD-Dev] Simulated Populations</A></strong>
<ul compact><li><em>From:</em> J C Lawrence &lt;claw#kanga,nu&gt;</li></ul>
<li><strong><A NAME="00180" HREF="msg00180.html">Re: [MUD-Dev] Simulated Populations</A></strong>
<ul compact><li><em>From:</em> Vladimir Prelovac &lt;tomcat#galeb,etf.bg.ac.yu&gt;</li></ul>
</UL></LI></UL>
<!--X-Follow-Ups-End-->
<!--X-References-->
<!--X-References-End-->
<!--X-BotPNI-->
<UL>
<LI>Prev by Date:
<STRONG><A HREF="msg00164.html">Re: [MUD-Dev] Community Relations</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg00166.html">Re: [MUD-Dev] Planet/Solar System Generation</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg00225.html">Re: [MUD-Dev] Business Licenses</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg00180.html">Re: [MUD-Dev] Simulated Populations</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#00165"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#00165"><STRONG>Thread</STRONG></A></LI>
</UL>
</LI>
</UL>

<!--X-BotPNI-End-->
<!--X-User-Footer-->
<!--X-User-Footer-End-->
<ul><li>Thread context:
<BLOCKQUOTE><UL>
<LI><STRONG>Re: [MUD-Dev] [adv-mud] What good is a hero when nobody knows? (fwd)</STRONG>, <EM>(continued)</EM>
<ul compact>
<LI><strong><A NAME="00195" HREF="msg00195.html">Re: [MUD-Dev] [adv-mud] What good is a hero when nobody knows? (fwd)</A></strong>, 
Erik Jarvi <a href="mailto:ejarvi#megsinet,net">ejarvi#megsinet,net</a>, Fri 21 Jan 2000, 02:26 GMT
</LI>
</ul>
</LI>
<LI><strong><A NAME="00182" HREF="msg00182.html">[MUD-Dev] Business Licenses</A></strong>, 
CFrancy <a href="mailto:CFrancy#aol,com">CFrancy#aol,com</a>, Thu 20 Jan 2000, 21:38 GMT
<UL>
<LI><strong><A NAME="00184" HREF="msg00184.html">Re: [MUD-Dev] Business Licenses</A></strong>, 
Bruce <a href="mailto:bruce#cubik,org">bruce#cubik,org</a>, Thu 20 Jan 2000, 22:53 GMT
</LI>
<LI><strong><A NAME="00225" HREF="msg00225.html">Re: [MUD-Dev] Business Licenses</A></strong>, 
J C Lawrence <a href="mailto:claw#kanga,nu">claw#kanga,nu</a>, Wed 26 Jan 2000, 05:30 GMT
</LI>
</UL>
</LI>
<LI><strong><A NAME="00165" HREF="msg00165.html">[MUD-Dev] Simulated Populations</A></strong>, 
phlUID <a href="mailto:phluid#mindless,com">phluid#mindless,com</a>, Wed 19 Jan 2000, 23:03 GMT
<UL>
<LI><strong><A NAME="00180" HREF="msg00180.html">Re: [MUD-Dev] Simulated Populations</A></strong>, 
Vladimir Prelovac <a href="mailto:tomcat#galeb,etf.bg.ac.yu">tomcat#galeb,etf.bg.ac.yu</a>, Thu 20 Jan 2000, 16:48 GMT
</LI>
<LI><strong><A NAME="00256" HREF="msg00256.html">Re: [MUD-Dev] Simulated Populations</A></strong>, 
J C Lawrence <a href="mailto:claw#kanga,nu">claw#kanga,nu</a>, Wed 02 Feb 2000, 05:07 GMT
</LI>
</UL>
<UL>
<li>&lt;Possible follow-up(s)&gt;<br>
<LI><strong><A NAME="00168" HREF="msg00168.html">RE: [MUD-Dev] Simulated Populations</A></strong>, 
Charles Hughes <a href="mailto:charles.hughes#bigfoot,com">charles.hughes#bigfoot,com</a>, Thu 20 Jan 2000, 00:47 GMT
</LI>
<LI><strong><A NAME="00183" HREF="msg00183.html">Re: [MUD-Dev] Simulated Populations</A></strong>, 
Nicolai Hansen <a href="mailto:nic#aub,dk">nic#aub,dk</a>, Thu 20 Jan 2000, 22:53 GMT
</LI>
</UL>
</LI>
</UL></BLOCKQUOTE>

</ul>
<hr>
<center>
[&nbsp;<a href="../">Other Periods</a>
&nbsp;|&nbsp;<a href="../../">Other mailing lists</a>
&nbsp;|&nbsp;<a href="/search.php3">Search</a>
&nbsp;]
</center>
<hr>
</body>
</html>