[vworld-tech] Verb/action handling

Bruce Mitchener bruce at cubik.org
Sun Jan 25 23:19:57 PST 2004

Brian Hook wrote:
>>What is your world model?  
> Can you be more specific?

Just being 'room-based' doesn't mean a whole lot.  Are rooms regular in 
size/shape? Are they in Euclidian space?  Are there higher level 
organizational systems (these rooms are the inn, these buildings are 
this street, these streets make up a district, or other organizational 
structures) or does a room exist independently in and of itself?

Depending on this, the way in which you handle events may or may not be 
appropriate to do at a room level or may require the use of mixin 
classes, something datadriven, or something else altogether. (For 
example, if you have something in a bar room, but that 'room' is 
actually 2 rooms underneath everything, how will you go about having 
each have the same responses and share data? Or will you end up making 
each space within the world a single space? Or will you use a higher 
level organizational structure for attaching the code to that level of 

>>While you say rooms, are things going to
>>happen that cross room boundaries?  
> Yes.

So you'll need some way to determine the context, type, strength, etc of 
an event/action and how to go about propagating it through the 
surrounding environment.  You'll also need to determine how much CPU 
power you'll willing to let this take up, how much extra memory for 
rooms that have to be in memory rather than potentially swapped out to 
disk, whether or not you want it to take closed/open doors/windows/etc 
into account, and whether or not you want to use a technique like beam 
tracing for determining the propagation paths for an action.

>>What sort of scalability requirements do you have?
> Ideally I want to be scalable to a very large degree, I'd hate to 
> implement something with a hard cap on users, rooms, mobs, etc.

Well, everyone wants that.  But designing and planning for 10k players 
in a single world is somewhat different from designing and planning for 
200 players.  The hard cap is going to be based on how computationally 
expensive things are, how much interactivity there is in the world, how 
far you propagate events, to what degree you're engaging in strict 
simulation, etc.

>>What is the scope of a single room?
> As in?

Is a room a single contiguous space? Or do multiple rooms make up a 
single space? What is 'a single space' anyway (a 20x20 chunk of street? 
a street block?, part of a bar room or the whole bar room?)

>>How much ability do you need to modify the world for scripters/GM
> A lot.

Then you should really look at something like what my post to MUD-Dev 
described for what we do in TEC.  It excels at this and is one of the 
nicest systems that I've seen around. (I didn't create it, I came on 
board after it was in place.)

If I recall correctly, you have some NextStep experience, so some of it 
may seem familiar.

>>Do you allow user programming at all?
> No.

It is sometimes useful to class staff as users in answering this 
question depending on their level of skill, the amount/type of code that 
they write.  In TEC, we have several staffers that write code, but some 
of them write directly in ColdC (since we run Cold).  Others write in a 
higher level language that that that is fairly domain specific and 
contains a number of primitives related to managing interactions between 
players, NPCs, their environment and the passing of time.  Internally, 
we compile that domain specific language (DSL) down to ColdC which then 
gets executed as normal.  This lets us present smething fairly safe, 
something fairly powerful, yet limited to the staff for getting their 
jobs done.  A lot of it could also be used in another system for 
presenting some very basic world modification to users.

>>Do you trust everyone that has access to writing code?
> Yes (but bugs are bugs, so we're still going to have to solve the 
> out-of-control-script problem with Lua).

I wouldn't trust all of the staff to always do the right thing. :/

They're people. You'll get bad people sometimes, or they'll have an 
error in judgement.  What does this mean?

    * It is always useful to have a security model and framework!
    * Auditability is important.

Both of these can complicate the process of adding actions to the game 
world depending on the extent to which you go with a security framework 
and an auditing system.

>>Will someone doing extension work be actually writing code, filling
>>out a set of rules, or what?
> There are two parts to the editing process (at least, as I envision it 
> right now, but this is all fluid).  The first is data definition, done 
> using standard DB tools.
> So you make a new room, assign it basic properties like name, 
> description, exits, etc.  It has no intrinsic special behaviour, but 
> then again, very few rooms do.
> But, say you want to make a room with special case behaviour, I dunno, 
> like it heals everyone standing in it every 10 seconds.  To do this, 
> I'm thinking that the database author sets the "OnTick" field to 
> "HealingRoom:OnTick".
> At room load time, its OnTick function is redirected to 
> HealingRoom:OnTick (i.e. it's a function pointer).
> Which means that someone, at some time, needs to write 
> HealingRoom:OnTick.  The larger ramification is that it's a hybrid 
> data-driven/procedurally-driven system, and that's a kind of 
> uncomfortable place to be.
> A purely procedural system is going to have a lot of overhead and 
> suffer from all the myriad problems that inheritance/sub-classing have 
> but a data driven system is going to have a lot of bloat and spaghetti 
> code.

I have a lot of comments about issues that I see with this, even as 
pseudocode, but perhaps another night for that.

Personally, I think that it is interesting to approach this whole topic 
at a different level such as Claude Shannon's _A Mathematical Theory of 
Communication_ or one based on semiotics.  But perhaps more about that 
some other day/week/month as well.

  - Bruce

More information about the vworld-tech mailing list