The Steampunk Empire

The Crossroads of the Aether

Hephzibah Marsh
  • Female
  • Campbell, CA
  • United States
Share on Facebook
Share

Hephzibah Marsh's Friends

  • Terra Rouge
  • Commodore Falcon Kensington
  • Dawn Davis
  • Madame Erzebet Sedwick
  • Misty Joseph
  • Andrei Mihalache
  • Jimmy Diggs
  • Lady. Cog
  • CPT Edward Leviticus
  • Grace Welch
  • Noele Wayne
  • Lady Sophronia Bloodthorne-Clark
  • Latrisha Brown
  • Peter Davis
  • Dr. C Morerless

Profile Information

Hephzibah Marsh's Discussions

Calling for GMs for role playing in Chat

Started this discussion. Last reply by Dr. Mungojerry Grindlebone Jun 23. 7 Replies

Hello!We are looking to do a reboot of role playing in Chat.If you have an idea and is interested in being a GM please pitch your idea in this discussion.Thanks and happy holidays!HContinue

Role playing in chat

Started this discussion. Last reply by Eulalia Grace Hexham Oct 1, 2015. 4 Replies

Happy fall everyone!We are thinking of opening up chat during certain time of the day for role playing.If you are interested and have thoughts on this topic (yes, no, have awesome idea on a story line) please comment below.HContinue

Background missing on the empire

Started this discussion. Last reply by Hephzibah Marsh May 5, 2015. 4 Replies

Hello!Thank you for all of your messages for letting me know something is a miss with the empire! I am current working with our service provide to try to fix the issue.Thanks again!Continue

Show off your Jack-o'-lantern

Started this discussion. Last reply by Hephzibah Marsh Nov 6, 2013. 18 Replies

As we were strolling through the Museum of Country Life in Ireland, we came across this little gem.…Continue

Tags: halloween, Jack-o'-lantern, pumpkin

Blog

The art of sharing nicks and descriptions

In the month or so since the merger of Evennia's development branch and all its web-client updates, we have been in bug-fixing mode as more people use and stress the code.

There have been some new features as well though - I thought it could be interesting to those of you not slavishly following the mailing list.

 

Shared web login

When you are logged into the website you will now also auto-login to your account in the web client - no need to re-enter the login information! The inverse is also true. You still need to connect to game at least once to create the account, but after that you will stay connected while the browser session lasts.

Behind the scenes the shared login uses cookies linked to server-side Django sessions which is a robust and safe way to manage access tokens. Obviously browser sessions are irrelevant to telnet- or ssh connections.

Extended Nicks 

Evennia's nick(name) system is a way to create a personal alias for things in game - both to on-the-fly replacing text you input and for referring to in-game objects. In the old implementation this replacement was simply matched from the beginning of the input - if the string matched, it was replaced with the nick.

In this new implementation, the matching part can be much more elaborate. For example you can catch arguments and put those arguments into the replacement nick in another order.

Let's say we often use the @dig command this limited way:

@dig roomname;alias = exit;alias, backexit;alias
 
Let's say we find this syntax unintuitive. The new nick system allows to change this by catching the arguments in your nick and put it into the "real" command. Here is an example of a syntax putting the aliases in parentheses and separating all components with commas:

> nick newroom $1($2), $3($4), $5($6) = @dig $1;$2 = $3;$4, $5;$6

From here on you can now create your rooms with entries like this: 

> newroom The great castle(castle), to the castle(castle), back to the path(back)

Multidescer contrib

I have added a new "multidescer" to the contrib folder. A multidescer is (I think) a MUSH term for a mechanism managing more than one description. You can then combine any of these various descriptions into your "active" description.

An example of usage:

desc hat = a blue hat.
desc basic = This is a tall man with narrow features.
desc clothing = He is wearing black, flowing robes.

 These commands store the description on the Character and references them as unique keywords. Next we can combine these strings together in any order to build the actual current description: 

> desc/set basic + |/ + clothing + On his head he has + hat
> look self
This is a tall man with narrow features. 
He is wearing black, flowing robes. On his head he has a blue hat.

This allows for both very flexible and easy-to-update descriptions but also a way to handle freeform equipment and clothing. And you can of course use the nick system to pre-format the output

> nick setdesc $1 $2 $3 $4 = $1 + |/ + clothing + On his head he has a $4

This way you can clothe yourself in different outfits easily using the same output format:

> setdesc basic clothing hat 
 
 The multidescer is a single, self-contained command that is easy to import and add to your game as needed.



... There's also plenty of bug fixes, documentation work and other minor things or course.

Anyway, summer is now upon us here in the northern hemisphere so things will calm down for a bit, at least from my end. Have a good 'un!
.
Griatch

Image by ryancr (released under Creative Commons)

Evennia in pictures

Evennia in pictures
by Griatch, September 2015

This article was originally written for Optional Realities
Since it is no longer available to read on OR, I'm reposting it in full here.

The MU* development system Evennia works quite differently from many traditional MU* code bases/servers and we get questions about this from time to time. This article will try to give an overview for outsiders - using pictures!  

Figure 1: The parts of the Evennia library

evennia_infrastructureA.png

Evennia is a game development library. What you see in Figure 1 is the part you download from us. This will not run on its own, we will soon initialize the missing “jigsaw puzzle” piece on the left. But first let’s look at what we’ve got.

Looking at Figure 1 you will notice that Evennia internally has two components, the Portal and the Server. These will run as separate processes.

The Portal tracks all connections to the outside world and understands Telnet protocols, websockets, SSH and so on. It knows nothing about the database or the game state. Data sent between the Portal and the Server is protocol-agnostic, meaning the Server sends/receives the same data regardless of how the user is connected. Hiding behind the Portal also means that the Server can be completely rebooted without anyone getting disconnected.

The Server is the main “mud driver” and handles everything related to the game world and its database. It's asynchronous and uses Twisted. In the same process of the Server is also the Evennia web server component that serves the game’s website. That the Server and webserver are accessing the database in the same process allows for a consistent game state without any concerns for caching or race condition issues.

Now, let’s get a game going. We’ll call it mygame. Original, isn’t it?

Figure 2: The full setup for mygame
evennia_infrastructure.jpg.png

After installing evennia you will have the evennia command available. Using this you create a game directory - the darker grey piece in Figure 2 that was missing previously. This is where you will create your dream game!

During initialization, Evennia will create Python module templates in mygame/ and link up all configurations to make mygame a fully functioning, if empty, game, ready to start extending. Two more commands will create your database and then start the server. From this point on, mygame is up and running and you can connect to your new game with telnet on localhost:4000 or by pointing your browser to http://localhost:8000.

Now, our new mygame world needs Characters, locations, items and more! These we commonly refer to as game entities. Let’s see how Evennia handles those.

Figure 3: The Database Abstraction of Evennia entities

evennia_typeclassesA.png
Evennia is fully persistent and abstracts its database in Python using Django. The database tables are few and generic, each represented by a single Python class. As seen in Figure 3, the example ObjectDB Python class represents one database table. The properties on the class are the columns (fields) of the table. Each row is an instance of the class (one entity in the game).

Among the example columns shown is the key (name) of the ObjectDB entity as well as a Foreign key-relationship for its current “location”. From the above we can see that Trigger is in the Dungeon, carrying his trusty crossbow Old Betsy!

The db_typeclass_path is an important field. This is a python-style path and tells Evennia which subclass of ObjectDB is actually representing this entity.

Figure 4: Inheriting classes to customize entities

evennia_typeclassesB.png

In Figure 4 we see the (somewhat simplified) Python class inheritance tree that you as an Evennia developer will see, along with the three instanced entities.

ObjectDB represents stuff you will actually see in-game and its child classes implement all the handlers, helper code and the hook methods that Evennia makes use of. In your mygame/ folder you just import these and overload the things you want to modify. In this way, the Crossbow is modified to do the stuff only crossbows can do and CastleRoom adds whatever it is that is special about rooms in the castle.

When creating a new entity in-game, a new row will automatically be created in the database table and then “Trigger” will appear in-game! If we, in code, search the database for Trigger, we will get an instance of the Character class back - a Python object we can work with normally.

Looking at this you may think that you will be making a lot of classes for every different object in the game. Your exact layout is up to you but Evennia also offers other ways to customize each individual object, as exemplified by Figure 5.

Figure 5: Adding persistent Attributes to a game entity.

evennia_typeclassesC.png

The Attribute is another class directly tied to the database behind the scenes. Each Attribute basically has a key, a value and a ForeignKey relation to another ObjectDB. An Attribute serializes Python constructs into the database, meaning you can store basically any valid Python, like the dictionary of skills seen in Figure 5. The “strength” and “skills” Attributes will henceforth be reachable directly from the Trigger object. This (and a few other resources) allow you to create individualized entities while only needing to create classes for those that really behave fundamentally different.


Figure 6: Sessions, Players and Objects

evennia_session_player_character.png

Trigger is most likely played by a human. This human connects to the game via one or more Sessions, one for each client they connect with. Their account on mygame is represented by a PlayerDB entity. The PlayerDB holds the password and other account info but has no existence in the game world. Through the PlayerDB entity, Sessions can control (“puppet”) one or more ObjectDB entities in-game.

In Figure 6, a user is connected to the game with three Sessions simultaneously. They are logged in to their Player account Richard. Through these Sessions they are simultaneously puppeting the in-game entities Trigger and Sir Hiss. Evennia can be configured to allow or disallow a range of different gaming styles like this.

Now, for users to be able to control their game entities and actually play the game, they need to be able to send Commands.

Figure 7: Commands are Python classes too

evennia_commandsA.png

Commands represent anything a user can input actively to the game, such as the look command, get, quit, emote and so on.

Each Command handles both argument parsing and execution. Since each Command is described with a normal Python class, it means that you can implement parsing once and then just have the rest of your commands inherit the effect. In Figure 7, the DIKUCommand parent class implements parsing of all the syntax common for all DIKU-style commands so CmdLook and others won’t have to.

Figure 8: Commands are grouped together in sets and always associated with game entities.

evennia_commandsB.png

Commands in Evennia are always joined together in Command Sets. These are containers that can hold many Command instances. A given Command class can contribute Command instances to any number of Command Sets. These sets are always associated with game entities. In Figure 8, Trigger has received a Command Set with a bunch of useful commands that he (and by extension his controlling Player) can now use.

Figure 9: Command Sets can affect those around them

evennia_commandsC.png

Trigger’s Command Set is only available to himself. In Figure 8 we put a Command Set with three commands on the Dungeon room. The room itself has no use for commands but we configure this set to affect those inside it instead. Note that we let these be different versions of these commands (hence the different color)! We’ll explain why below.

Figure 10: The name Command “Set” is not just a name

evennia_commandsD.png

Command Sets can be dynamically (and temporarily) merged together in a similar fashion as Set Theory, except the merge priority can be customized. In Figure 10 we see a Union-type merger where the Commands from Dungeon of the same name temporarily override the commands from Trigger. While in the Dungeon, Trigger will be using this version of those commands. When Trigger leaves, his own Command Set will be restored unharmed.

Why would we want to do this? Consider for example that the dungeon is in darkness. We can then let the Dungeon’s version of the look command only show the contents of the room if Trigger is carrying a light source. You might also not be able to easily get things in the room without light - you might even be fumbling randomly in your inventory!

Any number of Command Sets can be merged on the fly. This allows you to implement multiple overlapping states (like combat in a darkened room while intoxicated) without needing huge if statements for every possible combination. The merger is non-destructive, so you can remove cmdsets to get back previous states as needed.



… And that’s how many illustrations I have the stamina to draw at this time. Hopefully this quick illustrated dive into Evennia helps to clarify some of the basic features of the system!

Evennia 0.6 !


As of today, I merged the development branch to make version 0.6 of the MU* development system and server Evennia.

Evennia 0.6 comes with a lot of updates, mainly in the way Evennia talks to the outside world. All communication is now standardized, so there are no particular treatment of things like text - text is just one of any standardized commands being passed between the server the client (whether over telnet, ssh, websockets or ajax/comet).

For example the user can now easily plug in "inputfuncs" to handle any data coming from the client. If you want your client to offer some particular functionality, you just need to plop in a python function to handle it, server-side. We also now offer a lot of utility functions for things like monitoring change (tell the client whenever your health status changes so it can update a health bar or flash the screen).

The HTML5 webclient has itself updated considerably. Most is happening behind the scenes though. Notably the webclient's javascript component is split into two:

  •  evennia.js, acts as a library for handling all communication with the server part of Evennia. It offers events for a gui library to plug into and send/receive. It will also gracefully degrade from a websocket connection to AJAX/COMET long-polling if the player uses an older browser. 
  • evennia_gui.js is the default front-end and implements a traditional and stable "telnet-like" interface. The html part uses uses Django templating to make it easy to customize and expand. Since this simply makes use of the resources offered by evennia.js, one could pretty easily slip in some other gui library here, or set up calls to get all sorts of interesting information from the server (which talks back using inputfuncs). 
There are a truckload of more updates and features that are covered on the mailing list.
.
Griatch

 

Hephzibah Marsh

Evennia

Latest Activity

Dr. Mungojerry Grindlebone replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"I am the Eggman, We are the Eggman, I am the Wombat, Waddelkatchoo "
Jun 23
P. Aloysius Regnad replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"      Oooh!   How about Giant Wombats (Diprotodons), and Marsupial Lions (Thylacoleos)?  [ Sorry, couldn't resist.  I like ancient marsupials.  I'm currently thinking up a story which features the…"
Jun 23
Dr. Mungojerry Grindlebone replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"So Question:  How has this been run in the past?  Do we do a new discussion for each game?  Is there dancing?  Will wombats be involved?  Inquiring minds want to know. "
Jun 22
John Liam joined Knight Redfeild's group
Thumbnail

Maine Alliance

get people close to Maine and in Maine together for events to promote steampunk idea and play games ( capture the flag, laser tag...ect.). This site will help people around Maine including NH, NY,CT, MA, VT. as a way to plan events in the area.
Jun 21
Dr Trebuchet Hemmingway replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"The Khyber Clockwork For 125 years war has ripped apart the once mighty Vijayanagara Empire plunging all of India into a dark age of horror and ignorance.  The Kharavela Principality is the last bastion of order and light amongst the…"
Jun 14
Dr. Mungojerry Grindlebone replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"Quite interested and am working on a new scenario about which I'm rather excited.  More details shortly, but this is a splendid idea. "
Jun 13
Dr. Mungojerry Grindlebone liked Hephzibah Marsh's video
Apr 7
Robin Seed replied to Hephzibah Marsh's discussion Calling for GMs for role playing in Chat
"This sounds like a great idea, I personally don't have any story lines myself for role play. But id love to be apart of it"
Mar 3

Music

Loading…

Hephzibah Marsh's Photos

Loading…
  • Add Photos
  • View All

Hephzibah Marsh's Videos

  • Add Videos
  • View All

Comment Wall (410 comments)

You need to be a member of The Steampunk Empire to add comments!

Join The Steampunk Empire

At 8:11am on December 8, 2015, Captain said…
At 3:58am on December 8, 2015, Nicci T. said…

A very Happy Birthday to you, Ms. Marsh!

At 8:49pm on August 2, 2015, jenny said…

Good evening Miss Marsh. Lately I've been having problems posting in group discussions. The main group is intact but the companion discussion seem to time stamp my entries but nothing is visible.

I have adobe flash... I suspect there may be an issue with this application and or my browser. If you could shed some light on these issues, it would be greatly appreciated. But don't worry, you site is of great enjoyment.

At 4:22pm on July 17, 2015, Debbie Fearney said…
Thank you so much!
At 10:37am on May 2, 2015, Alice E Keyes said…
I was informed that you might be able to shed some light as to why the main page and the Denizen now has a white background and blue lettering. I have asked around and it does not seem to be only me. Your page looks like what the main page used to look like. Is there some type of maintenance happening.

Thanks for any into and help,

Alice E Keyes
At 1:06am on December 09, 2014, Bourget- gave Hephzibah Marsh a gift
Gift
In lieu Of a cake this year-
At 1:04am on December 9, 2014, Bourget- said…

Bonsoir ! Hephzibah Marsh...

Happy [belated] Birthday !... et I hope that you had an enjoyable day... too !

mlle.deedee bourget gauzot :)

At 4:14am on February 17, 2014, Sky Marshall gave Hephzibah Marsh a gift
Gift
You have given us an Empire... and we Love you for it... Thank You
At 10:07am on December 26, 2013, Capt. Nathan Seekerman said…

Hopefully the Queen Mary event is coming together. Happy New Year!

At 7:09am on December 8, 2013, Nicci T. said…

Hello and Happy Birthday to you!

 
 
 

© 2016   Created by Hephzibah Marsh.   Powered by

Badges  |  Report an Issue  |  Terms of Service