1998Q1/
<!-- MHonArc v2.4.4 -->
<!--X-Subject: Re: [MUD&#45;Dev] Unique items (was: Graphic MUDS/Ultima Online) -->
<!--X-From-R13: pbqreNvoz.arg -->
<!--X-Date: Sun, 15 Feb 1998 04:44:42 +0000 -->
<!--X-Message-Id: 199802150444.EAA91058#out4,ibm.net -->
<!--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:coder#ibm,net">
</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="msg00465.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00467.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Thread:&nbsp;
[&nbsp;<a href="msg00467.html">Previous</a>
&nbsp;|&nbsp;<a href="msg00490.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Index:&nbsp;
[&nbsp;<A HREF="author.html#00466">Author</A>
&nbsp;|&nbsp;<A HREF="#00466">Date</A>
&nbsp;|&nbsp;<A HREF="thread.html#00466">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>: <A HREF="mailto:coder#ibm,net">coder#ibm,net</A></LI>
<LI><em>Date</em>: Fri, 13 Feb 98 16:20:30 -0800</LI>
<LI><em>Reply-to</em>: <A HREF="mailto:coder#ibm,net">coder#ibm,net</A></LI>
</UL>
<!--X-Head-of-Message-End-->
<!--X-Head-Body-Sep-Begin-->
<HR>
<!--X-Head-Body-Sep-End-->
<!--X-Body-of-Message-->
<PRE>

On 28/01/98 at 11:55 PM, "Brandon J. Rickman" &lt;ashes#pc4,zennet.com&gt; said:
&gt;On Sun, 11 Jan 1998 21:43:52, JC Lawrence &lt;claw#under,Eng.Sun.COM&gt; wrote:
&gt;&gt;On Fri, 9 Jan 1998 14:26:09 PST8PDT 
&gt;&gt;Vadim Tkachenko&lt;vadimt#4cs,com&gt; wrote:

&gt;&gt;I have come to a seperate conclusion as suggested by Carter, or was it
&gt;&gt;one of our many Brandons (Cline?).  Essentially it devolves into:
&gt;&gt;
&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;I just noticed the revival of this thread.  

Thread revival is one of my major tools in keeping the list fertile.  

&gt;It is nice to know I have
&gt;scored at least one point in my months of heretical postings. 

&lt;bow&gt;

&gt;It gives me
&gt;new energy to prove that faster computers aren't.

Tautologies are (not).

Apologies for the long quotes that follow.  This is an old thread, with
even older roots.

&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;This is a subtle and interesting problem.  There are some problems with
&gt;your problem:

&gt;If Boffo picks up the key _before_ Bubba disposes of his key, then the
&gt;determinacy of Boffo's key would have already been made and there is no
&gt;chance of it being the key to CK.

This would only seem true if you resolve the determininacy of any and all
keys when they are first seen/picked up.  This in turn requires a fairly
agressive policy for making known objects indeterminate again, which
actually raises the same problem again by allowing an object to
surrepticiously cycle thru determinancy before its state becomes known. 

Another problem here is that this early resolution of identity prevents
other, later, likely more useful resolutions.

Other variations, such as the subject key being possessed and then placed
in a visible but hidden location are also problemic.  I only see the
structure getting interesting if you delay the resolution of determinancy
to the last possible moment -- ie when the key is used on Castle Krak or
some other recognition algorithm is applied and succeeds.

&gt;The problem is in the amount of time between when a unique object becomes
&gt;indeterminate (not in-the-world) and is rediscovered.

In an absolute sense, not true (perception is another matter).  Consider:

  Bubba picks op indeterminate key.
  Bubba puts key into hiding space in back of cave.
  Bubba tosses known-CK tossed into ocean.
  Six years pass.
  Bubba tells Boffo about key at back of cave.
  Boffo opens CK with said key.

Less contrived examples are not difficult to arrange.  The actual source
of the problem in this last example is that the _fact_ and _location_ of
the key are known about while the _fact_ and _lcoation_ of the CK are also
known (simultaenity).  Ergo, logic precludes the first key from ever
resolving to the CK key.  It may of course resolve to some other key which
does not pertain to the same logic trap.  To handle this properly, the
known-about state of every key (known or unknown) must be maintained
time-stamp-wise against all known-keys.  

Not fun.  Expensive.

A good argument can be made that such logical rigour is not necessary. 
Perhaps a fairy swiped the original unknown key at the back of the cave
and replaced it with the CK key when nobody was looking?  Who knows the
logic of fairies?  This is probably a winning argument on the basis that
players just won't care.

My next approach largely agrees with you, but attempts to maintain the
advantages of last-possible-determination:

  There are three types of objects in the world:

    a) objects which have an uncertain state

    b) objects which have a certain state.

    c) objects which don't exist but retain a certain state.

State #b objects which have been actively "lost" (dropped in ocean etc),
exist in state #c.  State #b objects which have been misplaced (eg key at
back of cave) decay into state #a given that they have not been
accessed/recognised within XXX time.  State #c objects are used to enforce
the timing delay you mention, and are destroyed after a suitable period. 
State #a objects may resolve into an object not currently held by a state
#b or state #c object.  State #c merely enforces lost objects remaining
lost for at least a while.

I suspect that I have argued full circle into your original model, but
don't have the interest to track that right now.

&gt;Dropping a key in the ocean is a very specific way to lose something, but
&gt;so is leaving the key in a desert.  The chance that the key will be
&gt;rediscovered should depend on where/how the key was lost and how long it
&gt;has been since last seen (these would somehow seed the future
&gt;probabilities).

ie the duration of the state #c above.

&gt;At t+0 the key is "dropped" into the ocean.

&gt;At t+10 (days/weeks/whatever) the key, having sat unnoticed at the bottom
&gt;of the ocean, is removed by world housekeeping routines.  But since the
&gt;key is flagged as unique (or is otherwise important, like a rabbit
&gt;skeleton :) ) some note is made.  A weight of 10 is assigned to the
&gt;chance that the key will be found in the ocean.

&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;At t+100, the chances might be: ocean 50, seaside 40, arctic 20, plains
&gt;5, mountains 5, desert 2, dragon hoard 2, global 1.

&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.

Exactly.  I like this.

&gt;(I'm just making up the geo stuff, and this doesn't mean that these
&gt;weights are actually stored anywhere except as an algorithm.)

Attributes on the meta-key object.

&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.

The problem is that you need to create methods that actively lose
recovered objects at a near equivalent rate to to their discovery. 
Otherwise your world becomes over-populated.

&gt;Eventually the weapons will get lost again, and found again.

You need to actively encourage that "eventually".  MUD players are very
good at keeping track of their EQ.

&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;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 the
&gt;sand, hidden in a pile of seaweed, or just lying in the middle of a
&gt;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:

Quite.  The domain of possibilities should be very large, with the
individual probabilities for each state being very small.  

&gt;You chat, "Hey, I lost the key to Castle Krak.  Everyone go stumble
&gt;around in the forest until someone finds it."

Bingo.  The possibility domain is too small.

&gt;It would be interesting to know that you might find something if you went
&gt;around digging holes.  Players would probably start making careers out of
&gt;digging up random stuff.  Oh dear, I think I just justified letting
&gt;players have alternative careers (fishing, digging, drinking...).

Die infidel.  The only suitable vocation for MUD players is cleaning up
after bloodthirsty NPC's on player-killing sprees.

&gt;Anyway, now that I've simply reiterated everything JC said in his post,

And I seem to have argued myself into agreeing with you...

&gt;A prototype test case:

&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 not
&gt;talking about one ton rocks or hundred year old oaks, i.e. relative scale
&gt;is assumed to be similar for the moment).  For a forest this might be:

&gt;a clump of leaves
&gt;a small stone
&gt;some dirt
&gt;...

&gt;There is also a set of "lost" (or indeterminate) objects with associated
&gt;quantities and probabilistic weights:

&gt;  511 copper coins, 100
&gt;  4 gold coins, 20
&gt;  1 Key to Castle Krak, 1
&gt;  ...

&gt;Now imagine both lists are hundreds of items long.  

&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 100
&gt;active characters moving around once per minute we will have to make a
&gt;check about 10 times a minute, or every 6 seconds.

&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;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.

The problem is two sided:  The size of tha data field that needs to be
considered each iteration, and the frequency of that consideration. 
Reduce either side of that product and you've made headway.

One possible attack on reducing the product is to ensure that only those
objects that are possible for a given locality are considered for
creation.  A possible approach:

  All objects are indeterminate until identified.  Such objects are
referred to as "ur-objects".

  Non-existant placeholder objects are referred to as "lost".

  The vast majority of objects are not ur-objects because they have no
"hidden" identity.  Instead they are "normal" objects whose apparent
identity is the same as their real identity.  The game's presentation
however makes all objects appear to be ur-objects.  This distinction is
used merely to lighten the tracking load on the server and DB.

  The identification status of an object is true only while the object is
accessed with sufficient frequency (per object, with a typical value being
once per RL fornight).  It then decays back to an ur-object.

  The server maintains a list of all ur-object types.  All such
object-types of course have an associated objectID.

  All localities maintain a list of possible normal and ur objects for
their locations (ie probability non-zero).  This is just a pointer to a
list of tuples of objectID's and probabilities.

  Upon initiation of an event, it generates a probability value. weighted
as appropriate by the probability field of the locale and the creating
objects.  This value is then used to select that set of potential objects
which have a matching or higher probability for potential creation.

  In the event that multiple (N) objects are to potentially be created,
they are selected randomly with a 2*N^(-1) individual probability, with a
side guarantee that at least one object will always be created.

This doesn't really handle the problem, tracking all the potential
objects, updating the fields as the probability changes, and all the rest
is still a hefty load, but its a start.  I suspect a deeper elegance still
remains.

&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 quite
&gt;bizarre stamps example some time back).

I think I'd approach this by weigting their probability fields to
predispose them towards certain discoveries.  This creates a further
problem however as the list of potential objects for the area now has to
be treated as a set of lists each lists as affected by a specific
probability field.  Nasty.

-- 
J C Lawrence                               Internet: claw#null,net
----------(*)                              Internet: coder#ibm,net
...Honourary Member of Clan McFud -- Teamer's Avenging Monolith...


</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="00490" HREF="msg00490.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>
<ul compact><li><em>From:</em> Adam Wiggins &lt;nightfall#user1,inficad.com&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="msg00465.html">Re: [MUD-Dev]  Clients</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg00467.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg00467.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg00490.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#00466"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#00466"><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 (was: Graphic MUDS/Ultima Online)</STRONG>, <EM>(continued)</EM>
<ul compact>
<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
<UL>
<LI><strong><A NAME="00510" HREF="msg00510.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
coder <a href="mailto:coder#ibm,net">coder#ibm,net</a>, Tue 17 Feb 1998, 08:15 GMT
</LI>
</UL>
</LI>
</UL>
</LI>
</UL>
</LI>
<LI><strong><A NAME="00360" HREF="msg00360.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>, Sat 31 Jan 1998, 23:36 GMT
<UL>
<LI><strong><A NAME="00363" HREF="msg00363.html">Re: [MUD-Dev] Unique items (was: Graphic MUDS/Ultima Online)</A></strong>, 
Marian Griffith <a href="mailto:gryphon#iaehv,nl">gryphon#iaehv,nl</a>, Sun 01 Feb 1998, 10:04 GMT
</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>