1998Q3/
<!-- MHonArc v2.4.4 -->
<!--X-Subject: [MUD&#45;Dev] Re: let's call it a spellcraft -->
<!--X-From-R13: Fenivf Qnfrl <rsvaqryNcbynevf.arg> -->
<!--X-Date: Sat, 26 Sep 1998 12:01:17 &#45;0700 -->
<!--X-Message-Id: 18623.980926#io,com -->
<!--X-Content-Type: text/plain -->
<!--X-Reference: Pine.SOL.3.96.980925193659.20184A&#45;100000#licia,dtek.chalmers.se -->
<!--X-Head-End-->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title>MUD-Dev message, [MUD-Dev] Re: let's call it a spellcraft</title>
<!-- meta name="robots" content="noindex,nofollow" -->
<link rev="made" href="mailto:efindel#polaris,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="msg01270.html">Previous</a>
&nbsp;|&nbsp;<a href="msg01272.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Thread:&nbsp;
[&nbsp;<a href="msg01333.html">Previous</a>
&nbsp;|&nbsp;<a href="msg01179.html">Next</a>
&nbsp;]
&nbsp;&nbsp;&nbsp;&nbsp;
Index:&nbsp;
[&nbsp;<A HREF="author.html#01271">Author</A>
&nbsp;|&nbsp;<A HREF="#01271">Date</A>
&nbsp;|&nbsp;<A HREF="thread.html#01271">Thread</A>
&nbsp;]

<!--X-TopPNI-End-->
<!--X-MsgBody-->
<!--X-Subject-Header-Begin-->
<H1>[MUD-Dev] Re: let's call it a spellcraft</H1>
<HR>
<!--X-Subject-Header-End-->
<!--X-Head-of-Message-->
<UL>
<LI><em>To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</A></LI>
<LI><em>Subject</em>: [MUD-Dev] Re: let's call it a spellcraft</LI>
<LI><em>From</em>: Travis Casey &lt;<A HREF="mailto:efindel#polaris,net">efindel#polaris,net</A>&gt;</LI>
<LI><em>Date</em>: Sat, 26 Sep 1998 14:57:54 -0400</LI>
<LI><em>Reply-To</em>: <A HREF="mailto:mud-dev#kanga,nu">mud-dev#kanga,nu</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 25 September 1998, Niklas Elmqvist wrote:
&gt; On Fri, 25 Sep 1998, Travis Casey wrote:

&gt;&gt; My own thought is to have a set of simple magical commands which can
&gt;&gt; be used directly:  e.g., you might have the commands:

[list snipped to save space]

&gt;&gt; When used in the spell programming language, these would be equivalent
&gt;&gt; to the pre-defined keywords or library functions of most programming
&gt;&gt; languages.  There would also be control-flow statements, but these
&gt;&gt; would only be usable in a spell/program, not as direct commands.

&gt; So you mean that a mage could just wing it and issue these commands
&gt; directly? But what of the research time mentioned below? If this is an
&gt; option, I immediately see a large number of people entering the spell
&gt; commands as macros into their MUD clients instead of having their
&gt; characters research them. However, this mechanism might be useful when
&gt; trying out new spells.

That's what I mean... however, there are some problems with doing it
that way:

 - You don't have any control structures.  Thus, if you want to do
   something that will loop, or wait, or do a decision, you need to
   write a spell.

 - You don't have variables.  Thus, if you want to cast a spell that
   does several things to one target, you have to give the
   specification for the target each time, instead of being able to do
   it once.

 - There's a limit to how fast you can do this... this isn't something
   specific to spells, really, but it would be global throughout the
   system.  I don't like players using external scripting mechanisms,
   so I like to put in safeguards against them, like a limit on how
   fast you can issue commands (or by queuing up commands and having
   them executed in sequence at a certain tempo).  Thus, to do, say, a
   twenty-line spell command by command might take about ten combat
   rounds, where doing it as a single spell only takes one or two.

&gt; [Spell balancing:]
&gt;&gt; I'd thought of a similar system for netrunning programs in a cyberpunk
&gt;&gt; RPG, the rationale being that the more common a program became, the
&gt;&gt; more likely it was that someone would have developed and distributed a
&gt;&gt; defense against it.  Following the same idea, you could have NPCs
&gt;&gt; having pre-prepared counterspells for the spells that become too
&gt;&gt; common.

&gt; Well, we have a perfectly valid reason for this in a magical world: the
&gt; more people that use a spell, the more "toll" it takes on the specific
&gt; powers required to invoke the spell, and it becomes diluted. Some spells
&gt; could be defined to be able to accommodate quite a few users, the basic
&gt; magic missile or cure light being good examples, while other more powerful
&gt; spells would lose their power if known and used by more than a mere
&gt; handful.

I think I prefer my own idea... that mages will tend to develop
counterspells to well-known spells, and those counterspells will
themselves become well known.  To each their own, though.  :-)

&gt; Of course, this kind of balancing system almost *requires* that we use a
&gt; fixed-spell system (that is, a system where the spells are defined by the
&gt; admins instead of created by the players) -- otherwise, it is very hard
&gt; for the server to determine that two very different spell snippets might
&gt; do the same thing, and thus reduce the efficiency of the spell. (You could
&gt; do some kind of calculation on the required power "types" for spells,
&gt; though... Such as many people using spells requiring Fire, and
&gt; consequently, the efficiency of fire spells are reduced.)

The counterspell version doesn't suffer as much from this problem... you
could develop specific counterspells for various spells, but you could
also create generic counterspells -- e.g., an anti-fire spell.

Of course, you could also combine both ideas, for more fun!

[spell research happening in offline time]

&gt; I like it. However, spell research would almost require that the player
&gt; leaves his character in his study when logging off -- quitting in the
&gt; middle of Mirkwood with a dozen giant spiders stalking around would do
&gt; nothing towards creating a nice research atmosphere...

That depends on the level of realism you like in such things... if
your mud is the type where you don't come back to the same place you
left from when you log off, I wouldn't see this as a problem.

&gt; However, I *still* would like to have a practical research element as part
&gt; of the game... The Unseen University concept appeals to me; lots of
&gt; players working in unison to experiment with different kinds of spells
&gt; ("You are now entering the Unseen University magical testing grounds.
&gt; Proceed at your own risk." *zap* *kaboom*).

I think there would be somewhat of a practical research element...
with the idea that you advanced of treating spell components as
pre-built modules, you could also treat spells themselves that way.
By doing that, it becomes possible for someone to research a new spell
faster by reusing parts of old spells as modules.

This opens the door to "magical research" by means of building small
spells, then reusing parts of them to build larger spells.  Thus,
there's a cycle of:

 - think up an effect
 - implement and test it in a model spell
 - start building more complex spells that use it

With spell components having pre-built modules, there's also another
kind of research -- figuring out those modules and their interfaces!
IMHO, a spell programming system should have some allowances for
reverse engineering -- for taking an existing spell and trying to
decompile it.  This allows figuring out how spell components work, and
taking a captured spellbook and figuring out the spells in it.  (And
this could be a necessary step anyways... since spells can make
decisions via if-then statements, spells can be booby-trapped!)

&gt; I see one problem with this, though: a concept like this would certainly
&gt; work for a fixed-spell system (defined above) where the player can type
&gt; 'research magic missile' and then happily log off, secure in the knowledge
&gt; that he will have another neat spell in his inventory when he returns the
&gt; next day. However, in a spell-creation system where we don't have any
&gt; fixed spells, how will the player be able to test his spells for "bugs" if
&gt; he first has to type 'research magic missile' (where 'magic missile' now
&gt; denotes a spell code snippet) and then wait four *real* hours before he
&gt; can use it? Or is this something we want? (Spellcraft should be a
&gt; time-consuming process.) Maybe the player could be allowed to perform some
&gt; kind of 'dry run' with his spell to ensure that it is working properly?

That could be done partially by using the direct commands, the way I'm
thinking of things above.  That works for simple spells that don't do
much in the way of decisions, etc.  More complicated spells you'll
have to test the old-fashioned programming way... write it, research
it (equivalent to compiling it), then test it.

Go through the archives and look for Mage2Mage... the spell language
in there allows for ways to interrupt spells and modify them while
they're "running", which could be good for testing.

Also, you can use the magical equivalent of debugging with print
statements... imagine a wizard's lab where strange voices tell the
wizard that the spell has reached a certain spot, or where runes
appear in the air to tell the mage what's going on in the spell.

Lastly, with the idea of reusing spells as modules, you can do
bottom-up programming... implement and test your spell in parts, then
put those parts together when you know they're working right.

[spell components containing spell code]

&gt; Seriously, this could be used to great effect, I think. For one thing, one
&gt; major part of spell research will be to find out what different methods or
&gt; calls a specific item supports -- the players would have to write basic
&gt; 'identify' spells for this (in addition to a 'detect magic' spell which
&gt; saved the player some power by doing a simple check if there are is any
&gt; spell code at all in the item).

Of course, in a world like my Tobara, detect magic is useless... the
entire world is magical!  But that's another discussion.  :-)

&gt; Also, depending on the magical potential of an item, the cost of
&gt; identifying it could vary -- try to ferret out the powers of the Holy
&gt; Graal and you might end up drained in the process. Why not let some
&gt; magical items have an active defense which needs to be defeated in order
&gt; for the mage to identify and use it -- this could be methods in the spell
&gt; code associated with the item along the lines of OnWield(), OnIdentify()
&gt; and OnGet() (which trigger when the item is wielded, identified and get,
&gt; respectively). Alternatively, we could use verb-binding for this purpose.
&gt; This way, we can easily have sentient swords, blessed armor, cursed
&gt; weapons, etc, as well as magical traps which trigger on special events.

Yep.  This is one reason why I like treating spells as programming...
it makes these sorts of things possible in a fairly easy-to-understand
way.

&gt; Indeed! The feather in our example could be empty of magical energy and
&gt; you would have to channel some of your own raw power into the feather and
&gt; use it as a conduit/focus for flight. This would be how birds fly: they
&gt; instinctively channel their own magical power into the flight spell of
&gt; their feathers. All magical power that is fed into the feather transforms
&gt; into spell effects (along with some power losses, of course, nothing is
&gt; perfect -- this could be dependant on the caster, as well).

In Tobara, life and death are the powers behind magic.  You activate a
spell by channeling your life (or your death, for some folks) into it.
Thus, a bird flies by using some of its own life to power the spell
built into it... but a mage can take that spell and power it with
his/her life instead.

Of course, if you're feeling nasty, you can power spells with someone
else's life.  :-)

&gt; Some items could have some magical energy stored in them as well, allowing
&gt; people with little or no magical ability to use them (eg wands, rings,
&gt; staves). Some would have permanent effects, some could be recharged
&gt; (automatically over time or artificially by mages), others could be mere
&gt; reservoirs of magical power (cf the Eye of the World, which is a huge
&gt; "lake" of power, in Robert Jordan's first WoT installment). The point is
&gt; that associating spell code with items allow us to handle all of these
&gt; effortlessly and without special cases.

Yep.  This also allows for the old "this item can only be used by
mages" thing in some settings... the item has spell code, but needs a
mage to supply power to it (presuming a world where mages have "the
power" and others don't).

In Tobara, using life and death as the powers behind magic gives
motivation to such things as doing sacrifices in spells... you
sacrifice someone in order to take their life from them and use it to
power a spell.

&gt; (The SDL spell definition language I've heard of, is this a language from
&gt; an outside source or created by someone on this list?)

It's from an outside source... the Mage2Mage magical spell/combat
system.  It's been posted to the list before, so it should be in the
archives.  If you don't feel like digging through them, email me...
I've got a copy on my hard drive somewhere.

--
       |\      _,,,---,,_        Travis S. Casey  &lt;efindel#io,com&gt;
 ZZzz  /,`.-'`'    -.  ;-;;,_   No one agrees with me.  Not even me.
      |,4-  ) )-,_..;\ (  `'-'
     '---''(_/--'  `-'\_)




</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="01237" HREF="msg01237.html">[MUD-Dev] Re: let's call it a spellcraft</A></STRONG>
<UL><LI><EM>From:</EM> Niklas Elmqvist &lt;d97elm#dtek,chalmers.se&gt;</LI></UL></LI>
</UL></LI></UL>
<!--X-References-End-->
<!--X-BotPNI-->
<UL>
<LI>Prev by Date:
<STRONG><A HREF="msg01270.html">[MUD-Dev] Re: let's call it a spellcraft</A></STRONG>
</LI>
<LI>Next by Date:
<STRONG><A HREF="msg01272.html">[MUD-Dev] Re: Ugh, IS Diablo a mud?</A></STRONG>
</LI>
<LI>Prev by thread:
<STRONG><A HREF="msg01333.html">[MUD-Dev] Re: let's call it a spellcraft</A></STRONG>
</LI>
<LI>Next by thread:
<STRONG><A HREF="msg01179.html">No Subject</A></STRONG>
</LI>
<LI>Index(es):
<UL>
<LI><A HREF="index.html#01271"><STRONG>Date</STRONG></A></LI>
<LI><A HREF="thread.html#01271"><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>[MUD-Dev] Re: let's call it a spellcraft</STRONG>, <EM>(continued)</EM>
<ul compact>
<ul compact>
<ul compact>
<ul compact>
<ul compact>
<ul compact>
<ul compact>
<LI><strong><A NAME="01239" HREF="msg01239.html">[MUD-Dev] Re: let's call it a spellcraft</A></strong>, 
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Sat 26 Sep 1998, 00:03 GMT
</LI>
<LI><strong><A NAME="01243" HREF="msg01243.html">[MUD-Dev] Re: let's call it a spellcraft</A></strong>, 
Vadim Tkachenko <a href="mailto:vt#freehold,crocodile.org">vt#freehold,crocodile.org</a>, Sat 26 Sep 1998, 02:32 GMT
<UL>
<LI><strong><A NAME="01245" HREF="msg01245.html">[MUD-Dev] Re: let's call it a spellcraft</A></strong>, 
Caliban Tiresias Darklock <a href="mailto:caliban#darklock,com">caliban#darklock,com</a>, Sat 26 Sep 1998, 02:58 GMT
<UL>
<LI><strong><A NAME="01333" HREF="msg01333.html">[MUD-Dev] Re: let's call it a spellcraft</A></strong>, 
Adam Wiggins <a href="mailto:adam#angel,com">adam#angel,com</a>, Mon 28 Sep 1998, 17:21 GMT
</LI>
</UL>
</LI>
</UL>
</LI>
<LI><strong><A NAME="01271" HREF="msg01271.html">[MUD-Dev] Re: let's call it a spellcraft</A></strong>, 
Travis Casey <a href="mailto:efindel#polaris,net">efindel#polaris,net</a>, Sat 26 Sep 1998, 19:01 GMT
</LI>
</ul>
</ul>
</ul>
</ul>
</ul>
<LI><strong><A NAME="01179" HREF="msg01179.html">No Subject</A></strong>, 
J C Lawrence <a href="mailto:claw#under,engr.sgi.com">claw#under,engr.sgi.com</a>, Thu 24 Sep 1998, 05:42 GMT
</LI>
</ul>
</ul>
</LI>
<LI><strong><A NAME="00405" HREF="msg00405.html">[MUD-Dev] Re: Affordances and social method</A></strong>, 
Leach, Brad BA <a href="mailto:Leach.Brad.BA#bhp,com.au">Leach.Brad.BA#bhp,com.au</a>, Tue 28 Jul 1998, 23:20 GMT
<UL>
<LI><strong><A NAME="00411" HREF="msg00411.html">[MUD-Dev] Re: Affordances and social method</A></strong>, 
s001gmu <a href="mailto:s001gmu#nova,wright.edu">s001gmu#nova,wright.edu</a>, Wed 29 Jul 1998, 04:02 GMT
</LI>
<LI><strong><A NAME="00952" HREF="msg00952.html">[MUD-Dev] Re: Affordances and social method</A></strong>, 
J C Lawrence <a href="mailto:claw#under,engr.sgi.com">claw#under,engr.sgi.com</a>, Sat 05 Sep 1998, 01:07 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>