<!-- MHonArc v2.4.4 --> <!--X-Subject: [MUD-Dev] Simulated Populations --> <!--X-From-R13: "cuyGWR" <cuyhvqNzvaqyrff.pbz> --> <!--X-Date: Wed, 19 Jan 2000 15:03:16 -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> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] <br clear=all><hr> <!--X-Body-Begin--> <!--X-User-Header--> <!--X-User-Header-End--> <!--X-TopPNI--> Date: [ <a href="msg00164.html">Previous</a> | <a href="msg00166.html">Next</a> ] Thread: [ <a href="msg00225.html">Previous</a> | <a href="msg00180.html">Next</a> ] Index: [ <A HREF="author.html#00165">Author</A> | <A HREF="#00165">Date</A> | <A HREF="thread.html#00165">Thread</A> ] <!--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" <<A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A>></LI> <LI><em>Subject</em>: [MUD-Dev] Simulated Populations</LI> <LI><em>From</em>: "phlUID" <<A HREF="mailto:phluid#mindless,com">phluid#mindless,com</A>></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 <claw#kanga,nu></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 <tomcat#galeb,etf.bg.ac.yu></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><Possible follow-up(s)><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> [ <a href="../">Other Periods</a> | <a href="../../">Other mailing lists</a> | <a href="/search.php3">Search</a> ] </center> <hr> </body> </html>