Since Halls asked me to properly introduce my project

Got a project near completion? Got a project with lots of screens and media? This is the place. This is for nearly finished and Projects with lots of media.
Post Reply
Cayle
Posts: 272
Joined: Fri Jul 03, 2009 4:45 am

Since Halls asked me to properly introduce my project

Post by Cayle »

Actually, it is a pair deeply intertwined projects. The first is Memotica, a design language for virtual worlds, MMOs, MUDS, etc. The second is an interpreter called Angela.

(sorry, no screenies. This is a middleware project. Instead of screenies, there is a link to code in the second post, LOTS of code)

Almost weekly, someone posts an “idea” thread, perhaps here, perhaps on MMORPGMaker, perhaps on devmaster or perhaps on a blog about how PvE AI would be so much better if it behaved more like players do in PvP, or about a crafting system that allowed players to create anything, etc. etc. The problem with these ideas is not that they are bad ideas. The reason why they are almost never actually implemented – especially by indies and hobbyists is that they are mostly very, very hard to implement. The inspiration gets you 0.001% of the way there.

I had these ideas as well; years ago. In 2006, I had long experience as a GM, admin and builder in the NWN persistent world community. I had been planning a NWN2 PW for over a year with a couple of cohorts who were running an unnamed NWN1 world. In the spring of 2006, I read Bartle’s book. Fuelled by this inspiration, the fact that it was looking increasingly like NWN2 would be less suitable for PWs than its predecessor (which turned out to be sadly true) and the fact that my cohorts considered Diku the height of perfection and wanted nothing to do with my ideas; I turned my back on the NWN platform and since there was nothing that could build the world I wanted to build, I set out to build my own platform.

There are a lot of challenges facing the worldbuilder who want to escape Dikudom:

For example, let’s suppose that we try to implement a freeform crafting system. What happens to a sword when the hilt gets replaced? What if I attach a rubber squeaky toy? What if instead of a rubber squeaky toy, I attach a second blade? What if I melt the blade? What if the blade and hilt have different melting points?

How does the AI figure out if move combination ABC is a good solution to situation XYZ, but that combo IJK is probably a bad idea?

What if a character is blinded, but can still hear? Whatever updates the client gets should be restricted to what that character can sense.

What if a demon has created the magical illusion that he is a little girl? One person may see the illusion and that player’s client should see the demon on screen. A character next to him that does not see through the illusion should only see the little girl. Whether a character sees the demon or the little girl, depends on whether the character met the prerequisites for seeing the demon.

Now on to the platform issues…

What if I want to change engines and don’t want to be dependent on the quirks of Torque, Unity, etc.

What if I want to deploy the SAME crafting system on a text MUD as on a graphical world? Or what if I want to share my quest subsystem with others, who may not be using the same engine?

What if I want to let players do things that are grindy, but not dangerous while they are offline? What if I want to let them log in with a web client to check on their characters? What if that web client is not as rich as the non-web client and has to resort to alternative text descriptions for sounds and animations that would otherwise be seen with the normal client?
Cayle
Posts: 272
Joined: Fri Jul 03, 2009 4:45 am

Re: Since Halls asked me to properly introduce my project

Post by Cayle »

For all of those things that I described in my last post, you need a good solid entity system; one that is not tied to a particular engine or display technology. Some of those entities will be actions that can be called; such as swing sword or shoot blaster. Some will be stimuli, such as “display little girl model + texture”. If you really want to have a deep entity system, you need a good way of modeling your entity collections, allowing you to design them extend and enhance them.

An entity system is not enough however. An individual mob – such as an orc in a high fantasy world - is an entity. That orc is probably created from some sort of predefined model of an orc. This model often called a template. In memotica, they are called “memes”, after Richard Dawkins’ term for a unit of information. These memes are not the end of the story as they themselves have models. An orc is a type of mob and when we create the orc, we are just filling in the blanks. Here we are getting into models of memes – the definitions of those blanks that the memes fill in; also called metamemes. These metamemes can be built of composites of other metamemes and extend them as you would extend classes in an object oriented programming language. Memotica is a modeling language for defining virtual worlds. It just happens that those models are executable by a memotica interpreter.

Memes fall into three broad categories; actions, stimuli and agents. Basically agent entities store state, actions change that state and stimuli report what happened. Memotica action memes are created from the (already provided) Action metameme; likewise with stimuli. The interpreter will treat these respective memes differently; basically treating actions almost as callable URLs and stimuli almost metaphorically as html templates. Actions use a flexible <subject> <verb> <object> grammar, where the action is the verb, the subject is performing the action and the object is the target. All other metamemes are agents. Our orc is an agent. He may perform actions by being tagged as the “subject” of an action, or may be the target of the action by being assigned as an “object”.

Memotica is licensed with the MIT license and is available at
https://sourceforge.net/projects/rulesetmodeling/develop

Angela is a server side interpreter for memotica. Somehow, a message comes from the client requesting that character A perform action B with additional parameters X, Y and Z. There is a piece of software for communicating with the client (if angela is the server), or with the server (if angela is part of the zone server) called a platform driver. A platform driver consists if a collection of modules or scripts for The simplest and most generic form of platform driver would be an XML-RPC server. The platform driver will put this message into an interprocess communications queue and Angela would process the action.

Outgoing stimuli are first resolved to an intermediate form and then rendered. Resolving is pure Memotica content; deciding whether player A sees the little girl or demon for example. This resolved stimulus (e.g. players sees little girl) is then rendered by the platform driver into a form that is consumable by the client and forwarded (e.g. sending a reference to model and texture, or generating an entire collada file)

Angela is licensed with the GPL license (I’m mulling over a switch to LGPL) and is available at
https://sourceforge.net/projects/projectangela/develop
User avatar
hallsofvallhalla
Site Admin
Posts: 12031
Joined: Wed Apr 22, 2009 11:29 pm

Re: Since Halls asked me to properly introduce my project

Post by hallsofvallhalla »

Sorry for my delayed response. Wanted to take enough time to truly read the post.

This sounds fantastic. I have read snippets here and there on it but never really understood exactly what the direction and goal was. Now I see and it really does sound awesome. I am anxious to see some projects use this to advance their game designs.
Cayle
Posts: 272
Joined: Fri Jul 03, 2009 4:45 am

Re: Since Halls asked me to properly introduce my project

Post by Cayle »

Thanks Halls.

After the umpteenth redesign, Angela's "action engine" - the component responsible for processing actions - is going to code this week and next. Hopefully, my current concurrency model is as robust in practice as it looks in UML. Next week, I'll create the test data and start working on the module test infrastructure. The AE is going to need a lot of test cases for all sorts of strange corner cases.
Post Reply

Return to “Project Showoff Tier II”