[WF-Scripting] Thoughts on a transformation RIM.
Oliver White
ojw at iprimus.com.au
Sun Dec 23 14:58:51 PST 2001
Well I've finally got a day to myself, and I thought I might share some ideas
I have about implementing Mason and future games in Stage. I'm not as active
in mason game design as some, but I understand that a major theme of the game
is to be able to change the world around you. I'd like to focus on this idea
of transformation as a basis for a ruleset module for stage.
Change is the one thing that makes life interesting, and so too will it be
the feature of any game that is interesting in the long term. I guess the
philosophy goes that you never cross the same river twice.
In stage terms, transformation is something that changes entities into one or
more other entities, with properties differing from the original entity.
Let's take one scenario:
=====================================================
THE GEMCUTTER
Vanitus is a gemcutter character played by Ralph. The character entity
representing Vanitus has a bit of data associated with it, including a number
of skills taken from the Circe ruleset. One of these skills, funnily enough,
is a gem-cutting skill. Vanitus has come into contact with a shady character
called Devnion and has aquired an uncut diamond. Devnion has offered Vanitus
a cut (scuse the pun) of the profits, in exchange for an application of his
skill. Vanitus grabs his gem cutting tools and sets to work creating a fine,
faceted stone.
Ralph peforms a series of mouseclicks in Morgate, which sends an atlas
operation to the server like so:
SKILL_APPLICATION("GEMCUTTING", "ENTITY-020349", "LOW");
The server then performs the following actions:
1) Checks that GEMCUTTING is applicable to the entity specified.
2) Checks that Vanitus is in posession of the correct tools.
3) Ties the Vanitus entity to the activity of gemcutting for 3 hours, the
lowest period of time to take to perform this gem cutting (he's a bit wary of
this Devnion and just wants to get his money and be rid of the suspect).
Vanitus will stay cutting the gem until this time is up, or Ralph gets bored
and sends a new action to the server (or possibly until he is attacked and
his server-side reflexes take over).
4) Given the time period and Vanitus' skill level, the rough gem entity is
replaced by a large, low quality gem entity.
A fight then ensues, over the quality of the gem and Vanitus is forced to
flee in fear of the law. Squatters take over the building and bury the corpse
of Devnion in the cellar.
=====================================================
This explains a little of how player interaction can change a world.
Circumstance can also cause transformation - fire can change wood into
charcoal. Natural forces like fire, weathering and so forth can be thought of
as an application of a skill of the world itself. So, when a mage casts a
fireball at a gemcutter, after discovering he stole and damaged a magic stone
of hers, a fire force is applied to a nearby tree. The server then does the
following:
1) Sends an atlas object to the transformation RIM -
FORCE_APPLICATION("FIRE", "ENTITY-004991", "HIGH);
2) The rim checks the tree for the opposing element - water.
3) The tree is dry as tinder, and it's entity is gradually replaced by a pile
of charcoal over the next 2 hours.
Vanitus escapes with singed hair and runs into the forest
=====================================================
Now, not all skills and forces will involve transformation, but we want to
encapsulate transformation and reuse it in other game systems. Obviously we
need to dispatch only certain force and skill application entities to the
transformation RIM, so pegasus needs to make sure they get to the right
destination.
The rim is responsible for taking the application request and determining the
outcome. This may involve determining the material and shape of the entity in
question, the physical environment of the entity, and the qualities of the
applicant character or world embodyment.
That covers the scope of the RIM. There are a couple of design considerations
for pegasus as a whole, though. I'm suggesting that RIMs collaborate by
putting atlas operations on the in-queue of other RIMs. This may not be the
most efficient way to handle internal server communications. If you have any
other ideas about optimising internal communications, let us know. Pegasus'
dispatch mechanism may also need some work.
The transformation RIM will use data extracted from Eidetic as XML/Atlas
files, to describe skills, materials and shapes. Some of this data may need
to be shared with other rims, so there are still future considerations for
our data model. I've done only a little preliminary work in this direction,
as I've discussed with bryce.
Thats about all I've got so far, but it's a good step towards implementing a
full-featured RPG engine. I'd recommend folks think about what other
encapsulations might be useful.
Thanks for listening,
Oliver White
More information about the Scripting
mailing list