1998Q1/
<!-- MHonArc v2.4.4 -->
<!--X-Subject: Re: [MUD&#45;Dev] Unique items (was: Graphic MUDS/Ultima Online) -->
<!--X-From-R13: Oqnz Ivttvaf <avtugsnyyNhfre2.vasvpnq.pbz> -->
<!--X-Date: Fri, 30 Jan 1998 07:37:21 +0000 -->
<!--X-Message-Id: 199801300740.AAA07834#user2,inficad.com -->
<!--X-Content-Type: text/plain -->
<!--X-Reference: 199801290053.QAA21207#pc4,zennet.com -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>MUD-Dev message, Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</title>
<!-- meta name="robots" content="noindex,nofollow" -->
<link rev="made" href="mailto:nightfall#user2,inficad.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="msg00342.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00344.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Thread:&nbsp;
[&nbsp;<a href="msg00338.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00377.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Index:&nbsp;
[&nbsp;<A HREF="author.html#00343">Author</A>
&nbsp;|&nbsp;<A HREF="#00343">Date</A>
&nbsp;|&nbsp;<A HREF="thread.html#00343">Thread</A>
&nbsp;]

<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<H1>Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</H1>
<HR>
<!--X-Subject-Header-End-->
<!--X-Head-of-Message-->
<UL>
<LI><em>To</em>: <A HREF="mailto:mud-dev#null,net">mud-dev#null,net</A></LI>
<LI><em>Subject</em>: Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</LI>
<LI><em>From</em>: Adam Wiggins &lt;<A HREF="mailto:nightfall#user2,inficad.com">nightfall#user2,inficad.com</A>&gt;</LI>
<LI><em>Date</em>: Fri, 30 Jan 1998 00:40:32 -0700 (MST)</LI>
<LI><em>Reply-To</em>: <A HREF="mailto:nightfall#inficad,com">nightfall#inficad,com</A></LI>
</UL>
<!--X-Head-of-Message-End-->
<!--X-Head-Body-Sep-Begin-->
<HR>
<!--X-Head-Body-Sep-End-->
<!--X-Body-of-Message-->
<PRE>
[Brandon J. Rickman:]
&gt; On Sun, 11 Jan 1998 21:43:52, JC Lawrence &lt;claw#under,Eng.Sun.COM&gt; wrote:
&gt; &gt;  There are two types of objects in the world:
&gt; &gt;
&gt; &gt;    a) objects which have an uncertain state
&gt; &gt;
&gt; &gt;    b) objects which have a certain state.
&gt; 
&gt; &gt;This may seem sort of obvious, but the results can be intrigueing.
&gt; &gt;Consider:
&gt; &gt;
&gt; &gt;  There is a key which can be used to get into Castle Krak.  It is the
&gt; &gt;__only__ key which can do that, and that is the __only__ way to get
&gt; &gt;into castle Krak.
&gt; &gt;
&gt; &gt;  Bubba drops the key into the ocean.
&gt; &gt;
&gt; &gt;  The key now enters an "indeterminate" state.
&gt; &gt;
&gt; &gt;  The result is that every other key in the land which is also in an
&gt; &gt;indeterminate state and is not possessed by a player now has a finite,
&gt; &gt;but definite, chance of proving to be the key to Castle Krak.  
&gt; &gt;
&gt; &gt;The trick is that objects only become determinate when they are asked
&gt; &gt;to.  To take the case of keys, all keys start with an indeterminate
&gt; &gt;state.  If a key is used to try and enter Castle Krak, and if no other
&gt; &gt;key has currently been determined to be the key to CK, then a
&gt; &gt;probability is weighed, and if won, the current key becomes the key to
&gt; &gt;CK.  If that probability is lost, nothing changes -- the key is still
&gt; &gt;indeterminate.
&gt; &gt;
&gt; &gt;There are problems.
&gt; &gt;
&gt; &gt;  Boffo picks up a key.
&gt; &gt;
&gt; &gt;  Bubba drops a different key. which is the key to the CK, in the
&gt; &gt;ocean.
&gt; &gt;
&gt; &gt;  Boffo attempt to open the CK with his key -- it works!
&gt; &gt;
&gt; &gt;The problem become apparent when you make Boffo and Bubba the same
&gt; &gt;person.  Bubba just dropped the key to the CK in the ocean, which is a
&gt; &gt;unique object, yet another key he already has is also a key to the CK?
&gt; 
&gt; This is a subtle and interesting problem.  There are some problems with
&gt; your problem:
&gt; 
&gt; If Boffo picks up the key _before_ Bubba disposes of his key, then
&gt; the determinacy of Boffo's key would have already been made and there
&gt; is no chance of it being the key to CK.
&gt; 
&gt; The problem is in the amount of time between when a unique object becomes
&gt; indeterminate (not in-the-world) and is rediscovered.
&gt; 
&gt; Dropping a key in the ocean is a very specific way to lose something,
&gt; but so is leaving the key in a desert.  The chance that the key will
&gt; be rediscovered should depend on where/how the key was lost and how long
&gt; it has been since last seen (these would somehow seed the future
&gt; probabilities).
&gt; 
&gt; At t+0 the key is "dropped" into the ocean.
&gt; 
&gt; At t+10 (days/weeks/whatever) the key, having sat unnoticed at the
&gt; bottom of the ocean, is removed by world housekeeping routines.  But
&gt; since the key is flagged as unique (or is otherwise important, like
&gt; a rabbit skeleton :) ) some note is made.  A weight of 10 is
&gt; assigned to the chance that the key will be found in the ocean.
&gt; 
&gt; At t+30, through some kind of statistical osmosis, more weights are 
&gt; added to related geographies: ocean 15, seaside 2, arctic 1.
&gt; 
&gt; At t+100, the chances might be: ocean 50, seaside 40, arctic 20, plains 5,
&gt; mountains 5, desert 2, dragon hoard 2, global 1.
&gt; 
&gt; Of course at any time the key might be rediscovered.  The hope is that
&gt; the rediscovery will be at worse an unlikely (but not absurd) event.
&gt; 
&gt; (I'm just making up the geo stuff, and this doesn't mean that these weights
&gt; are actually stored anywhere except as an algorithm.)
&gt; 
&gt; Originally I was thinking about having items lost for extremely long
&gt; periods of time, say hundreds of years.  In building a world you might
&gt; create oodles of magical weapons, make up some legends for the more
&gt; powerful ones, and then conveniently lose all the weapons before allowing
&gt; players into the game.  As time goes by, players start discovering the
&gt; lesser or greater magical weapons and start to think maybe the legends
&gt; are true.
&gt; 
&gt; Eventually the weapons will get lost again, and found again.
&gt; 
&gt; &gt;  One possible address is putting a delay on when newly
&gt; &gt;indetermiante-states can be realised.  Sure, Bubba drops the key in
&gt; &gt;the ocean, but its going to be a month (say) before any key can be a
&gt; &gt;key to the CK.  Note that this doesn't solve the problem, it just
&gt; &gt;hides some of its cases (same scenario as above can still occur).
&gt; &gt;
&gt; &gt;  A more subtle address makes all objects which are possessed or
&gt; &gt;possessed recently as "determinate".  The indeterminancy then enters
&gt; &gt;in the creation of new objects.
&gt; &gt;
&gt; &gt;  Bubba drops the key in the ocean.
&gt; &gt;
&gt; &gt;  Later Boffo catches a fish.  If he guts the fish there is a small
&gt; &gt;but definite chance that a key will be created for him to find, and
&gt; &gt;&gt;that that key will be the key to the CK.
&gt; 
&gt; Ample opportunities for "discovering" lost items have to be built into
&gt; the game.  Fishing is a nice solution, but things could be buried in
&gt; the sand, hidden in a pile of seaweed, or just lying in the middle of
&gt; a forest path.  Some actions act as active attempts to "discover" items,
&gt; but there should be passive checks as well.  This means that the
&gt; probabilities should be quite improbable.  Otherwise:
&gt; 
&gt; You chat, "Hey, I lost the key to Castle Krak.  Everyone go stumble
&gt; around in the forest until someone finds it."
&gt; 
&gt; It would be interesting to know that you might find something if
&gt; you went around digging holes.  Players would probably start making
&gt; careers out of digging up random stuff.  Oh dear, I think I just
&gt; justified letting players have alternative careers (fishing,
&gt; digging, drinking...).
&gt; 
&gt; &gt;  Ditto for Bernie walking the beach and stumbling over just such
&gt; &gt;another ad hoc created key in the sands.
&gt; &gt;
&gt; &gt;Me?  I don't like the concept of unique objects.  I'm going for the
&gt; &gt;determinate/indeterminate state approach where everything not
&gt; &gt;determined is indeterminate.  I'll accept the problem as unlikely to
&gt; &gt;be noticed, and if noticed unlikely of being a big problem.
&gt; 
&gt; Unique objects are fine, there just has to be a way to take them out of
&gt; and put them back into the game.
&gt; 
&gt; Anyway, now that I've simply reiterated everything JC said in his post,
&gt; I've been thinking about how to implement the discovery of objects.
&gt; 
&gt; A prototype test case:
&gt; 
&gt; For any given terrain/location there is a basic set of likely objects to
&gt; be found there, objects being relatively portable constructs (so I'm
&gt; not talking about one ton rocks or hundred year old oaks, i.e. relative
&gt; scale is assumed to be similar for the moment).  For a forest this might
&gt; be:
&gt; 
&gt; a clump of leaves
&gt; a small stone
&gt; some dirt
&gt; ...
&gt; 
&gt; There is also a set of "lost" (or indeterminate) objects with associated
&gt; quantities and probabilistic weights:
&gt; 
&gt; 511 copper coins, 100
&gt; 4 gold coins, 20
&gt; 1 Key to Castle Krak, 1
&gt; ...
&gt; 
&gt; Now imagine both lists are hundreds of items long.  
&gt; 
&gt; If we are going to check for discoveries every time a character moves
&gt; (perhaps a 10% chance of discovering something each time) and we have
&gt; 100 active characters moving around once per minute we will have to
&gt; make a check about 10 times a minute, or every 6 seconds.
&gt; 
&gt; Obviously iterating through a thousand item list and making a weighted
&gt; probability check for each item isn't very efficient, not every six
&gt; seconds.
&gt; 
&gt; How would you construct a list (a hash? a linked list?), keeping in mind
&gt; that the weights and quantities for many items will constantly change,
&gt; with items being removed and added as well.
&gt; 
&gt; Characters should also be able to make an active search for specific
&gt; items.  Someone could spend some time collecting small stones.  Of 
&gt; course, the stones should become harder and harder to find (ref the
&gt; quite bizarre stamps example some time back).

I didn't cut any of this, as I find it all relevant (not to mention quite
interesting).

First of all, the idea that you check for an object being created
every time someone takes a step seems a bit odd to me.  Does this mean
that running back and forth over the same patch of ground 10,000 times
increases your chance of finding the key to castle krak by 10000x?
This doesn't quite seem right, and has the problems of sucking down a
lot of CPU time, as you mention.  Why not have an object population
pulse (similar to what's found in current muds), where the system
runs through the list once, decides which (if any) objects will be
created, and then finds a suitable place to put them?  This has
the object actually placed into the world, just as if someone
had dropped it there.  Then it starts to decay again just as it
did the first time, until finally it disappears to be recreated at
some later time.

This will should cause these items to pop into the world fairly frequently,
but the chance that they will be found on a given run of existance is
pretty low.

This seems to solve every problem - Bubba's key will not suddenly turn into
the key to castle Krak (as the key's properties are determined at
time of creation), and CPU usage is very low, at the slight expense
of extra objects in the world.  I would say that this method would not
be ideal for piles of leaves and other such extra junk, however,
and also the indeterminacy thing as originally conceptualized, above,
seems to have a slightly higher 'neat' factor, for some reason I can't
pin down.

FWIW, Arctic has a similar random creation method for spellbooks and
prayerbooks.  The number of locations are a bit too small, however, for
it to seem very random - longtime players have learned them all, even
though the admin regularly fiddle with the load percentage tables.
Also, the lifetimes of these books are very short - usually they appear
someplace (raning from inside an old tree to the inventory of a tough
NPC) and then disappear within 30 minutes.


</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="00467" HREF="msg00467.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>
<ul compact><li><em>From:</em> coder#ibm,net</li></ul>
<li><strong><A NAME="00377" HREF="msg00377.html">Monthly FAQ posting</A></strong>
<ul compact><li><em>From:</em> Ling &lt;K.L.Lo-94#student,lboro.ac.uk&gt;</li></ul>
</UL></LI></UL>
<!--X-Follow-Ups-End-->
<!--X-References-->
<UL><LI><STRONG>References</STRONG>:
<UL>
<LI><STRONG><A NAME="00338" HREF="msg00338.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></STRONG>
<UL><LI><EM>From:</EM> "Brandon J. Rickman" &lt;ashes#pc4,zennet.com&gt;</LI></UL></LI>
</UL></LI></UL>
<!--X-References-End-->
<!--X-BotPNI-->
<UL>
<LI>Prev by Date:
<STRONG><A HREF="msg00342.html">Re: [MUD-Dev]  CORBA, RMI, threads</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg00344.html">Re: [MUD-Dev]  Java and Javascript</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg00338.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg00377.html">Monthly FAQ posting</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#00343"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#00343"><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] Unique items</STRONG>, <EM>(continued)</EM>
<ul compact>
<ul compact>
<ul compact>
<ul compact>
<LI><strong><A NAME="00226" HREF="msg00226.html">Re: [MUD-Dev] Unique items</A></strong>, 
Jon A. Lambert <a href="mailto:jlsysinc#ix,netcom.com">jlsysinc#ix,netcom.com</a>, Tue 13 Jan 1998, 05:33 GMT
</LI>
</ul>
</ul>
<LI><strong><A NAME="00200" HREF="msg00200.html">Re: [MUD-Dev] Unique items</A></strong>, 
JC Lawrence <a href="mailto:claw#under,Eng.Sun.COM">claw#under,Eng.Sun.COM</a>, Sun 11 Jan 1998, 21:31 GMT
</LI>
</ul>
<LI><strong><A NAME="00197" HREF="msg00197.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
JC Lawrence <a href="mailto:claw#under,Eng.Sun.COM">claw#under,Eng.Sun.COM</a>, Sun 11 Jan 1998, 21:01 GMT
</LI>
<LI><strong><A NAME="00338" HREF="msg00338.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
Brandon J. Rickman <a href="mailto:ashes#pc4,zennet.com">ashes#pc4,zennet.com</a>, Thu 29 Jan 1998, 00:54 GMT
<UL>
<LI><strong><A NAME="00343" HREF="msg00343.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
Adam Wiggins <a href="mailto:nightfall#user2,inficad.com">nightfall#user2,inficad.com</a>, Fri 30 Jan 1998, 07:37 GMT
<UL>
<LI><strong><A NAME="00377" HREF="msg00377.html">Monthly FAQ posting</A></strong>, 
Ling <a href="mailto:K.L.Lo-94#student,lboro.ac.uk">K.L.Lo-94#student,lboro.ac.uk</a>, Tue 03 Feb 1998, 18:10 GMT
</LI>
<LI><strong><A NAME="00467" HREF="msg00467.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
coder <a href="mailto:coder#ibm,net">coder#ibm,net</a>, Sun 15 Feb 1998, 10:24 GMT
</LI>
</UL>
</LI>
<LI><strong><A NAME="00466" HREF="msg00466.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
coder <a href="mailto:coder#ibm,net">coder#ibm,net</a>, Sun 15 Feb 1998, 04:44 GMT
<UL>
<LI><strong><A NAME="00490" HREF="msg00490.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
Adam Wiggins <a href="mailto:nightfall#user1,inficad.com">nightfall#user1,inficad.com</a>, Mon 16 Feb 1998, 13:56 GMT
</LI>
</UL>
</LI>
</UL>
</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>