Scripting System..

From: Patrick Dughi (dughi@imaxx.net)
Date: 12/01/02


        Sorry about the late response, I fired off a too-long-for-the-list
post right before leaving on a week cruise.  Still, I wanted to chime in
on scripting systems, since they've been troublesome issues for a myriad
of reasons.  Go get a drink or something, this is a long one.

----

        Let me list what I've seen other people claim as their motivation,
since it appears everyone wants to talk about the neat tech details
without first figuring out whether or not those move them close to their
goals. Often times, people seem to forget that nagging thing called
reality while in pursuit of their idealized (idolized?) dream system. I
think a list will help seperate some of the ideas from the details. That,
and I'm easily confused so it helps me to write them out.

1.  Create something that's easy for the non-programmer to use
2.  Create something that will let me use language _X_
3.  Make the system more fault-tolerant (I believe 'modular' was the word
used here).

        Okay.  In order, we'll start with #1.

1)
        Have you ever played zork?  Really, just about any infocom game,
before there were graphics of any sort?  These games were usually set in
what we might think of as a zone in our muds - about 40 rooms, maybe 30-40
items, and perhaps only a dozen different living things.  Of course, the
majority of the game relied on a very substantial scripting system.

        Tiny by our standards, and frankly, they blow away any mud zone
that I've seen.  You know why?  It's because they are well thought out,
integrated, designed, and tested.

        What did it take to do that?  I won't lie, it's mainly a matter of
time.  You can be the greatest area designer ever, but if you are able to
pump out a zone of even 1/3 the quality of zork, it's going to take you a
month.

        What does that have to do with the first goal?

        It validates it.  No matter how capable you are with any given
language, it would take 2-3 years just to rewrite the stock circlemud
areas with quality, non-repetitive areas that can genuinely add color to
your fantasy world.  That means you're going to have to rely on others,
many others, and heavily, to do the majority of the work.

        These people are going to need more creative talent than
programming talent.  They're going to need an easy, intuitive system that
doesn't require that they memorize too many tables, commands, procedures
or the sort.  They're going to need something that fits together like lego
blocks and snaps into place without thought.

        How many of you have had builders burn out just making zones?  Now
you want them to put five times the effort into it to make it alive with
scripting?  You need to make it easy for them so they can finish.

        You also need to make it easy to test.  You'll also need to make
it safe - but we'll cover that in point 3.

        Frankly, I think this is not only a good goal, but it should be
the point of utmost importance.  Who cares how spiffy your system is if no
one even has the patience to finish off a zone - and if you manage to, how
crappy does that make the rest of your world look, when there's only one
zone where people wave and say "hi."

2)

        Selecting any one given language over another is a hard choice -
you need to weigh the advantages each gives for your intended system.
Memory allocation, processor usage are important, flexibility might be
required, and I'm sad to see that people so easily discount the incredible
advantage you can garner from simply using a common/familiar language -
even over one which perhaps suits the situation more exactly.

        These points have been covered well enough though, so I don't have
to go over them for any given language.  Instead, I'll discount them all.
This language is better than that language is better than this other one -
hogwash.

        The 'best' language for the job would be one that's made
specifically for the job.  Screw this external dependancy crap, or the
inclusion of multiple types of interpreters.  That just makes for more
work without any regard to real world usage (like, getting it done in a
timely fashion, making it fast, easy to use, etc).

        The fact is, there isn't any single 'real world' language which is
meant to be used by non programmers directly for the CircleMUD system.
DGScripts, and mobprogs before them were admirable for their focus, though
both still felt like they were just crufted on to the system.

        Which they both were.

        It also feels like they were difficult to learn, error prone, hard
to test, and in most cases, impossible to tell if you had even made a
syntax error.

        So what do we need in a language?

        The most important parts are the debugging bits - we need it to
validate syntax, we need it to never run in a loop, we need to
automatically recoginze divison by zero, etc, etc, etc.  That implies
running it in a circle-specific sandbox, and that would let us safely test
the code as well.  This should be in point 3 ....

        Next we're going to need a block-y structure.  I don't mean object
oriented, though that's what alot of people may be thinking.  Frankly,
the object oriented style is just procedural style tucked inside little
boxes.  This is all too hard for the neophyte programmer/builder.  You
need to make it blocky, like a flow chart - a "while" block, a "if" block,
a "run this command" block.  Go ahead and apply whatever programming style
paridigm you'd like, but the basic functionality - variable access,
external procedure calls, and conditional flow control - all need to be
the most simple thing imaginable.

        You may think that code like:

if(%actor.hits% > 255) {
  do_crazy_dance(%actor%);
}

        Is simple, but really, it's not.  I have to look up the keyword, I
have to remember the syntax for variables, I have to remember how to
compare things which may be numbers, vs. things that might be words.  Most
important, I need to know the syntactic sugar to make my block 'go' -
where the curly braces and parens go.

        You may be a programmer, but the closest experience other users
have had with code was using frontpage to generate html for their crappy
goth poetry page.

        I'm talking something that's compatible with a drag-and-drop
interface.  Something so simple, your mom could do it.

        That doesn't mean you can't have a coexisting, abritrairly complex
system, either seperately or as part of the whole - but look at the real
world use - the majority is going to be by novice-level programmers, and
by-and-large, the actions they are going to want to perform are going to
be the same, even if the results and playthrough are radically different.

        Last, we're going to need saftey - and that will be covered
entirely in the 3'd point.

        Sadly, that will be in the next (continued) message...
<CONT>

--
   +---------------------------------------------------------------+
   | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html |
   | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html |
   | Newbie List:  http://groups.yahoo.com/group/circle-newbies/   |
   +---------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 06/25/03 PDT