[DGD] Persistance

Par Winzell zell at skotos.net
Thu Jan 8 02:30:53 CET 2004


>> changes area design completely.  It also makes an
>> economy possible, since it allows for the possibility
>> of scarcity.  Zone resets are the #1 source of runaway
>> inflation since new "valuables" come into the economy
>> constantly, thus destroying any actual value they may
>> otherwise have had.
> 
> What you are describing is the theory of game balance. What does this 
> have to do with persistance? It can still be achieved with a 
> non-persistant MUD can it not?

Anything can be achieved with anything else. DGD's style of persistence 
just means that things naturally stay around forever. Old style MUDs 
reboot so often that everything tends to be built around it.

Modern MMORPGs are a good example of hybrids; most of the world state is 
transient and disappears, but select things are stored in a database. Of 
course, even LPMud does this to some degree with player.o files and 
whatever. Everything has -some- persistence. The word can mean almost 
anything.

>> Imagine that you created an object once, and it
>> stayed.  But imagine you didn't create it as a regular
>> occurrence.  You'd never write any initialization code
>> for it, not once it had its attributes (which could be
>> done in some other way, as Skotos does, or with a data
>> file, as Phantasmal does).
>>
>>   There's no reset, no respawn, no destruction and
>> remaking.  It's just, y'know, there.
> 
> This sounds drastically different from the conventions I've grown 
> accustomed to. What's the point of storing configuration in a datafile? 
> Setting attributes isn't difficult and having a datafile just makes it 
> harder to alter the possible attributes an object may have.

I can't help but feel that you're spending your effort arguing the 
precision of these descriptions rather than trying to harvest the fruit 
of the experience behind them.

In LPMud, if you create a room, you create a hallway.c file that, when 
compiled, sets the description and such of the room. In a persistent 
game, you clone a room object, configure it during runtime (e.g. using 
some kind of editor, or by calling set_description, or whatever). And 
then it is always there, until eternity.

You're right, this is not a shocking "oh my GOD, you can do that with 
persistence!?" thing, but you asked an open-ended question, and you must 
be satisfied with vague answers.

>> So you don't
>> write code for routine destruction, nor code for
>> initialization.  You just set some attributes (some of
>> which may involve code, naturally) and away it goes.
> 
> Hmm. I thought that was how it was always done? *scratches head*

No. If the game reboots from no state, then there must be something that 
recreates the state. This can be instructions in a datafile or an LPC 
object or whatever.

> It sounds like you could get away with just doing state dumps, but that 
> does cause lag, no? I'm thinking of preserving user configuration, etc. 
> with savefiles in case there is a crash (you never know what might happen).

I have no idea what this means.

>> In return, when you change object code, you have to
>> write a little piece of code to update the existing
>> object(s).  That can be nontrivial, sadly.  But it
>> runs to turn the old object into the new object, not
>> to make the new object from scratch.
> 
> Do you mean writing the code to update objects is non-trivial? I thought 
> it was all there in the kernel lib? ;) I never have thought that writing 
> an object manager will be hard.

Good, you'll have no trouble with it then. But Noah was probably talking 
about the problem that when you never have a reboot, you never get to 
start from scratch, and so every time you e.g. change the implementation 
of a datastructure, you have to also write code that transforms the data 
in the existing instances from the old form to the new.

For example, if you decide after 6 years of running the game that 
inventories should be stored using mappings rather than inventories to 
avoid certain laggy situations, you'd have to write a patch function in 
your inventory code to mutate the array to the right mapping format and 
then run that patch function in every one of the possibly millions of 
objects that constitute your world at that point.

In LPMud, you'd just reboot.

>> For one thing, you can make the object and shape it.
>> You can change the attributes dynamically and they
>> stay.
> 
> They stay on a non-persistant MUD also though, except when there is a 
> reboot...

Uh.

Zell

_________________________________________________________________
List config page:  http://list.imaginary.com/mailman/listinfo/dgd



More information about the DGD mailing list