1997Q2/
<!-- MHonArc v2.4.4 -->
<!--X-Subject: Re: [MUD&#45;Dev] common server design -->
<!--X-From-R13: pynjerapNphc.uc.pbz -->
<!--X-Date: from babe.globecomm.net [207.51.48.8] by in3.ibm.net id 867711310.108622&#45;1 Mon Jun 30 22:55:10 1997 CUT -->
<!--X-Message-Id: 199706302252.PAA14461#xsvr3,cup.hp.com -->
<!--X-Content-Type: text/plain -->
<!--X-Reference: 33b4c66d.12168263#relay,mnsinc.com -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>MUD-Dev message, Re: [MUD-Dev] common server design</title>
<!-- meta name="robots" content="noindex,nofollow" -->
<link rev="made" href="mailto:clawrenc#cup,hp.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="msg01615.html">Previous</a>
&nbsp;|&nbsp;<a href="msg01617.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Thread:&nbsp;
[&nbsp;<a href="msg01445.html">Previous</a>
&nbsp;|&nbsp;<a href="msg01472.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Index:&nbsp;
[&nbsp;<A HREF="author.html#01616">Author</A>
&nbsp;|&nbsp;<A HREF="#01616">Date</A>
&nbsp;|&nbsp;<A HREF="thread.html#01616">Thread</A>
&nbsp;]

<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<H1>Re: [MUD-Dev] common server design</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] common server design</LI>
<LI><em>From</em>: <A HREF="mailto:clawrenc#cup,hp.com">clawrenc#cup,hp.com</A></LI>
<LI><em>Date</em>: Mon, 30 Jun 97 14:05:19 -0700</LI>
<LI><em>Reply-to</em>: <A HREF="mailto:claw#null,net">claw#null,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>
In &lt;<A HREF="msg01445.html">33b4c66d.12168263#relay,mnsinc.com</A>&gt;, on 06/22/97 
   at 09:37 PM, caliban#darklock,com (Caliban Tiresias Darklock) said:

&gt;On Sun, 22 Jun 1997 11:14:27 PST8PDT,
&gt;cg#ami-cg,GraySage.Edmonton.AB.CA (Chris Gray) wrote:

&gt;I often see a sentiment expressed on this list (and others) that goes
&gt;something like "I am writing a server for ME to run MY game on, and I
&gt;could give a flying leap if you like the way I do it or not". If you
&gt;take a step back from that, you might wonder why someone with that
&gt;attitude even bothers to discuss their server on a mailing list in
&gt;the first place. 

Err, to test out ideas, to engage others as devil's advocates, to
garner new ideas you'd not thought of, to find possible approaches you
hadn't considered, to gain new and different viewpoints, and hopefully
to the same to the rest of the list.  Seems reasonable to me.

&gt;&gt;&gt;From what I've seen on this list, some folks, as players, *want* 
&gt;&gt;complexity in the game they play. 

&gt;Allow me to clarify that complexity in the game *world* does not
&gt;necessarily imply complexity in the game *system* which does not in
&gt;turn imply complexity in the game *server*. What I'm really saying
&gt;here is that a complex command structure is not really something that
&gt;enhances the game; for example, you can have eight thousand skills,
&gt;but a single command to use skills. You could do thirty thousand
&gt;calculations to determine the efficiency of a sword thrust, but it
&gt;all comes down to 'kill guard with sword' in the end. I don't have
&gt;any problem at all with complex worlds, systems, or servers; I have a
&gt;problem with overly complex interfaces. I would have a problem with
&gt;an interface that required commands like 'Draw sword. Lift sword.
&gt;Swing sword. Parry left. Block up. Lower sword. Thrust high. Lift
&gt;sword...' or something similarly complicated. If all eight thousand
&gt;skills in your game had a separate associated command (or worse,
&gt;several), that would be a problem.

I suspect you'd hate my scripted combats then.  They're anything but
non-complex for the users:

  At any point prior to or during a fight a player can initiate
"combat mode" for himself.  Combat mode does not change his appearance
of utility to any other players.  It does not restrict his avilable
command set or possible activities (none of this "You can't leave a
fight!" idiocy).  Combat mode merely kicks in a set of modules which
attempt to actively suggest beneficial combat moves.  The
implementation is as follows:

  -- player character initiates combat mode.

  -- a local invisible combat object is created.

  -- the combat packages on the player characters involved in that
particular fight suggest combat scripts.

  -- the player approves or edits the combat scripts, whereupon they
are submitted to the combat object.

  -- at the termination of the round, the combat object resolves all
the scripts against each other, and wages the damage as approriate.

  -- repeat from the suggested combat scripts.

The combat scripts here are atomic throw-away pieces of pseudo code
that detail what that player character is going to attempt to do in
that round.  A script is comprised of:

  --  Attacks, where blows are any of magic, physical, mental, or
aggressive defenses.

  --  Defenses, where defenses are any of magic, physical, mental, or
defensive attacks.

  -- Feints, where a feint can be an illusory attack or defense.

  -- Sequences, where a sequence is any ordered set of attacks,
defenses, and feints (including a sequence of one member).

-- Reactions, where a reaction is a defined sequence to be used in
response to a stated sequence or sequence characteristic from a
defined or undefined opponent.

As such a script is a one-off affair tailored for the exact current
situation.  The script language defines particular blows to be
delivered with particular weapons to a specified location on the
opponent, or particular reactions (equally detailed) to make against a
specific attempted blow or defense by an opponent.  This is then all
overlaid with feints which disguise real attacks/defenses.  The Combat
Package presents the user with a script which define what
blows/defences etc he will attempt in that combat round, along with
what reactions (if he does that, then forget about that attack and do
this instead).  The user then has the chance to edit, refuse, or
otherwise alter the script before it is submitted to the controlling
combat object for resolution against everyone elses scripts (the
scripts are repetitively played against each other, some more than
others, with scripts from more able characters getting more
repetitions and so more chances at an intended result).

None of this is long-term predictive.  There's no setting up things
like wimpy factors, default reactions to all XXX attacks for all
combat scripts etc.  To do that sort of thing you need to tailor the
combat package directly.  (Actually I shouldn't say "NO" above, if the
combat package author adds that support, then yes, you could have a
"parry heavy blows" type configuration).

As far as maintainging synch for the fight, that's where the combat
object comes in.  Each combatant submits their actions/reactions etc
for the round based on what they think and/or hope the other
combatants will be submitting.  The combat object then takes all of
these, resolves them against each other atomicly, and effects the
resultant blows/damage/etc.  The pacing may not be hair-raising, but
the result is more:

"Hmm, He's big and strong, but he hasn't tried magic attack yet.  He's
either low on mana, low on spells, or holding out.  His sword does
appear to be enchanted tho.  I'll guess that he's mana low, so I'll
throw a mana eater on him to see if I can't destruct the sword. 
However, he also been doing some serious damage to me with the
cleaver, so lets kick him in the goolies and try and wrestle it away
from him.  Of course, that'll leave my head unprotected, so if he
strikes for my head, forget about kicking him, block with the shield
there and stab him in the gut with the dagger I have in my other hand. 
If I do that I'm not going to have time to do the mana eater, and he
could easily block me there with his buckler, so if he does go for my
head, forget the mana eater and the stomache thrust, and lets cast a
sink hole on the ground beneath him.  Oh yeah, and forget everything
if he attacks my torso, and just block.

"Yeah..that should do it.  Leave me pretty wide open if he attacks my
arms or legs, but I don't have time to actively defend there much
right now, and my guard spells are still in pretty good shape. 

"Okay, lets do it.

"DAMN!  The sod has lots of mana!  Bastard just thew a mana sink on
me, and then reflected my own mana sink back on me to boot!  I lost
over 5,000 mana!  All my spell guards are gone!  Most of my armour is
gone,  My dagger is gone,  My keys are all gone...  Still, it looks
like he's really out of mana now 'cause his sword destructed -- even
if after taking out most of my left leg.  I still have a couple spells
left, so I *could* create some mana, summon a dragon and sic it on
him.  Of course if he has any spells left he could then reflect it on
me... Hmmm  That would hurt.  I think I'll heal myself, hope he
doesn't catch it and divert the heal to himself, and then cast a
sinkhole on the ground beneath him.  That'll use almost all my mana
and all my spells, but it might make him think I'm tougher than I
really am...  If the sinkhole sticks he should be disabled for long
enough for me to finish him off.

"Oops.  He really got me.  I'm almost dead.  I could drop my recall
bug to teleport back to my castle, but he might have a tracer or a
band on me.  That would be deadly.  OTOH he's stuck in my sinkhole and
looks almost dead as well.  I could try and finish him off -- should
be a piece of cake unless he's still got something up his sleeve..."

There are very few points where someone can launch an attack which
does not deliver immediately.  This prevents the old game of "Oh, he
lobbed a grenade, wonder what I'll do?"  The few delayed reaction
attacks are really just preparations, followed by delivery, ala "He
summoned a dragon, red one I think.  He could attack me with it, he
could use it for defense, or he could just use it as a mana producer
for a nasty attack spell on me..."

-- 
J C Lawrence                           Internet: claw#null,net
(Contractor)                           Internet: coder#ibm,net
---------------(*)               Internet: clawrenc#cup,hp.com
...Honorary Member Clan McFUD -- Teamer's Avenging Monolith...


</PRE>

<!--X-Body-of-Message-End-->
<!--X-MsgBody-End-->
<!--X-Follow-Ups-->
<HR>
<!--X-Follow-Ups-End-->
<!--X-References-->
<UL><LI><STRONG>References</STRONG>:
<UL>
<LI><STRONG><A NAME="01445" HREF="msg01445.html">Re: [MUD-Dev] common server design</A></STRONG>
<UL><LI><EM>From:</EM> caliban#darklock,com (Caliban Tiresias Darklock)</LI></UL></LI>
</UL></LI></UL>
<!--X-References-End-->
<!--X-BotPNI-->
<UL>
<LI>Prev by Date:
<STRONG><A HREF="msg01615.html">Nation of shopkeepers</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg01617.html">Re: [MUD-Dev]  Supporting RP+PG</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg01445.html">Re: [MUD-Dev] common server design</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg01472.html">Re: [MUD-Dev] common server design</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#01616"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#01616"><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]  Git out the boar spear, Martha!</STRONG>, <EM>(continued)</EM>
<ul compact>
<ul compact>
<LI><strong><A NAME="01613" HREF="msg01613.html">Re: [MUD-Dev]  Git out the boar spear, Martha!</A></strong>, 
Matt Chatterley <a href="mailto:root#mpc,dyn.ml.org">root#mpc,dyn.ml.org</a>, Tue 01 Jul 1997, 04:13 GMT
</LI>
</ul>
<LI><strong><A NAME="01622" HREF="msg01622.html">Re: [MUD-Dev]  Git out the boar spear, Martha!</A></strong>, 
Jon A. Lambert <a href="mailto:jlsysinc#ix,netcom.com">jlsysinc#ix,netcom.com</a>, Tue 01 Jul 1997, 07:38 GMT
</LI>
</ul>
</LI>
<LI><strong><A NAME="01424" HREF="msg01424.html">Re: [MUD-Dev] common server design</A></strong>, 
Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Mon 23 Jun 1997, 01:02 GMT
<UL>
<LI><strong><A NAME="01445" HREF="msg01445.html">Re: [MUD-Dev] common server design</A></strong>, 
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Mon 23 Jun 1997, 11:32 GMT
<UL>
<LI><strong><A NAME="01616" HREF="msg01616.html">Re: [MUD-Dev] common server design</A></strong>, 
clawrenc <a href="mailto:clawrenc#cup,hp.com">clawrenc#cup,hp.com</a>, Tue 01 Jul 1997, 05:55 GMT
</LI>
</UL>
</LI>
</UL>
<UL>
<li>&lt;Possible follow-up(s)&gt;<br>
<LI><strong><A NAME="01472" HREF="msg01472.html">Re: [MUD-Dev] common server design</A></strong>, 
Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Tue 24 Jun 1997, 13:03 GMT
<UL>
<LI><strong><A NAME="01478" HREF="msg01478.html">Re: [MUD-Dev] common server design</A></strong>, 
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Wed 25 Jun 1997, 03:48 GMT
<UL>
<LI><strong><A NAME="01621" HREF="msg01621.html">Re: [MUD-Dev] common server design</A></strong>, 
clawrenc <a href="mailto:clawrenc#cup,hp.com">clawrenc#cup,hp.com</a>, Tue 01 Jul 1997, 07:38 GMT
</LI>
</UL>
</LI>
</UL>
</LI>
<LI><strong><A NAME="01509" HREF="msg01509.html">Re: [MUD-Dev] common server design</A></strong>, 
Chris Gray <a href="mailto:cg#ami-cg,GraySage.Edmonton.AB.CA">cg#ami-cg,GraySage.Edmonton.AB.CA</a>, Thu 26 Jun 1997, 09:00 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>