<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-29680596</id><updated>2012-02-16T23:39:14.515-05:00</updated><title type='text'>PyMUD</title><subtitle type='html'>A simple blog detailing the progress of our flexible Python-based MUD engine.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29680596.post-9093048854552169699</id><published>2009-07-26T16:53:00.002-05:00</published><updated>2009-07-26T16:55:35.517-05:00</updated><title type='text'>RIP</title><content type='html'>I'm finally ready to admit that this project has died. Don't despair, though! We're simply starting over.&lt;br /&gt;&lt;br /&gt;Python's freeform nature and rapid development was enticing at first, but it has simply become too hard to maintain. We're migrating to C# and the .NET framework, and embracing a web interface over supporting telnet. Keep up to date at &lt;a href="http://obsidian-sharp.blogspot.com/"&gt;the new site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-9093048854552169699?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://obsidian-sharp.blogspot.com' title='RIP'/><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/9093048854552169699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=9093048854552169699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/9093048854552169699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/9093048854552169699'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2009/07/rip.html' title='RIP'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-3390563202022262401</id><published>2008-01-27T02:29:00.000-05:00</published><updated>2008-01-27T02:31:13.920-05:00</updated><title type='text'>Update</title><content type='html'>James and I took a short (okay, long) break starting in the middle of December, but we're easing ourselves back into work now. We took a peak at the combat system last week, and realized that the Combat class at some point had been completely gutted (most of it was missing, and one function simply &lt;i&gt;stopped&lt;/i&gt; halfway through). So, we rewrote it. Combat theoretically works now, I believe, or at least it's getting there. The problem is that the "fight" command from the old ScriptManager framework no longer exists. Once that's written we can reimplement spawning.&lt;br /&gt;&lt;br /&gt;Hey, and then, maybe we can get started on new content! Hurray!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-3390563202022262401?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/3390563202022262401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=3390563202022262401' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/3390563202022262401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/3390563202022262401'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2008/01/update.html' title='Update'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-2274013840563478821</id><published>2007-12-17T01:33:00.000-05:00</published><updated>2007-12-17T01:46:22.856-05:00</updated><title type='text'>Parsing, redux</title><content type='html'>Currently, the state of complex commands like "get", "put", "drop", and "get" (not yet implemented) are terrifying. &lt;br /&gt;&lt;br /&gt;That's not even to mention something like the old administrative command "bring".&lt;br /&gt;&lt;br /&gt;The reason? Parsing.&lt;br /&gt;&lt;br /&gt;Yes, more parsing.&lt;br /&gt;&lt;br /&gt;The goal of PyMUD commands are to be as intuitive (in terms of English) as possible, while still maintaining ease of use.&lt;br /&gt;&lt;br /&gt;For example, the commands "bring me to the town forum in canticett" is English. It is not easy to use.&lt;br /&gt;&lt;br /&gt;"bring me to forum in canticett", the old implementation, is a little less English, a little easier to use, and infinitely more easy to parse.&lt;br /&gt;&lt;br /&gt;The problem arises, however, when you try to create intuitive alternatives to a given grammar.&lt;br /&gt;&lt;br /&gt;What if, instead of bringing me to a room in a zone, I want to be brought to a player? What then? Why shouldn't "bring me to charlie" work?&lt;br /&gt;&lt;br /&gt;It should, or I'm not a PyMUD developer!&lt;br /&gt;&lt;br /&gt;The issue here is that "bring me to &amp;lt;room&amp;gt; in &amp;lt;zone&amp;gt;" makes a few assumptions. First of all, that "bring" is followed by "me to", and at some point, the word "in", with two phrases flanking it. That latter part is completely ignored by "bring me to &amp;lt;player&amp;gt;".&lt;br /&gt;&lt;br /&gt;Furthermore, what if I want to "bring charlie to forum in canticett".&lt;br /&gt;&lt;br /&gt;And what if I want to bring a specific Item, by its unique ID tag, to the location of a specific Door, by its unique ID tag? "bring 35 to 982"?&lt;br /&gt;&lt;br /&gt;The plot thickens!&lt;br /&gt;&lt;br /&gt;As you can see, this only addresses one command, not even 1/2 of the list up top.&lt;br /&gt;&lt;br /&gt;The solution?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pyparsing.wikispaces.com/"&gt;Pyparsing!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Pyparsing lets me specify grammars, even incredibly loose grammars like the example above, and in a few lines extract the subject, target, whether it's a Room or a Mobile or what-have-you, all without so much as breaking a sweat. At first I wasn't sure if it was suited to our needs, but the swell guy behind the project was able to point me in the right direct.&lt;br /&gt;&lt;br /&gt;This has been a public service announcement.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-2274013840563478821?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/2274013840563478821/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=2274013840563478821' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2274013840563478821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2274013840563478821'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/parsing-redux.html' title='Parsing, redux'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-578795562154974423</id><published>2007-12-17T01:17:00.000-05:00</published><updated>2007-12-17T01:32:32.213-05:00</updated><title type='text'>What a twisted web we weave</title><content type='html'>No, "twisted" is not a pun. Go away.&lt;br /&gt;&lt;br /&gt;As of yesterday, almost all of The Cleaning Fire (tm) has burned its course. We discovered that the "CoinStack" Item in "currency.py" has not yet been visited or scheduled, so it was added to the docket. Aside from that, all that remains is the entirety of "mobiles.py" (cue lightning crash and frightening music).&lt;br /&gt;&lt;br /&gt;The problem? The file is a twisted (again, no pun) mess of code. There is little documentation, circular references probably abound, variables are badly named, and code is hacked together.&lt;br /&gt;&lt;br /&gt;Tuesday, we vow to fix this, and real progress shall begin anew.&lt;br /&gt;&lt;br /&gt;In short:&lt;br /&gt;- Rooms, Zones, Items, Entities (prev. Objects), the World, Bags, Openables, Containers, Exits (merged with Doors) are all clean.&lt;br /&gt;- Mobiles, NPCs, Players, Corpses, EquipmentModels, CoinStacks have yet to meet the flame.&lt;br /&gt;&lt;br /&gt;BY FIRE BE PURGED!&lt;br /&gt;&lt;br /&gt;In completely unrelated news, I have a potential summer job as well as a potential scholarship for next year, so things are looking slightly brighter than they were yesterday. We'll see how those applications turn out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-578795562154974423?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/578795562154974423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=578795562154974423' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/578795562154974423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/578795562154974423'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/what-twisted-web-we-weave.html' title='What a twisted web we weave'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-9129452864458717648</id><published>2007-12-06T02:05:00.000-05:00</published><updated>2007-12-06T02:08:17.936-05:00</updated><title type='text'>From the Fire, Life</title><content type='html'>The great purge has begun. It took about two hours to sweep through two classes.&lt;br /&gt;There are fourteen classes to go.&lt;br /&gt;&lt;br /&gt;Long story short: "World", as well as "Zone", and all of their dependencies, have been examined, literally, line by line. Anything questionable, anything vague, anything confusing was either removed, renamed, rewritten, or clarified.&lt;br /&gt;&lt;br /&gt;It's going to be a long week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-9129452864458717648?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/9129452864458717648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=9129452864458717648' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/9129452864458717648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/9129452864458717648'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/from-fire-life.html' title='From the Fire, Life'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-8194107363821980889</id><published>2007-12-05T00:44:00.000-05:00</published><updated>2007-12-05T01:15:42.259-05:00</updated><title type='text'>One step forward, Two steps backwards.</title><content type='html'>If you've ever written code, you probably are loathing that piece of code you wrote several years back which you forgot about, but someone pops up and asks you to maintain.  Sometimes PyMUD is like that.  It's like a shiny car when you look at it one way, then notice the interior's falling apart.   After making a major breakthrough with the object ID system, starting a new ORM-based persistence layer for our data, and converting a bunch of commands into abilities, we were feeling pretty svelte.  Steven logged onto my machine for some ability testing, and the results were pretty positive.&lt;br /&gt;&lt;br /&gt;But one straw broke the camel's back.&lt;br /&gt;&lt;br /&gt;It was a pretty simple thing, actually. In implementing "yell", we traverse all open doors to any rooms within a certain radius.  So what better to do than to check door.closed ?  Obvious, right.  Why would we make such an obvious property than to put a boolean True if it's closed?&lt;br /&gt;&lt;br /&gt;Of course, it didn't work.   Debugging through the code and printing out nearly everything I could, I finally found the problem.   &lt;span style="font-style: italic;"&gt;door.closed was a string&lt;/span&gt;.  Where was the boolean we knew existed?  &lt;span style="font-style: italic;"&gt;door.opened, of course.&lt;/span&gt; door.closed is what we show to the user when the door has been closed, meant to be customizable per-door if we want to allow for flavor text.    Upon inspecting the Door class, we found several other poorly named properties.&lt;br /&gt;&lt;br /&gt;And so, we begin the Great Cleansing Fire.   Before we tackle the character class system, we will revisit every class, documenting, removing un-needed properties, and trying to rename things to fit.   It's going to cause a good bit of break&amp;amp;fix debug cycles, but it will be worth it in the end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-8194107363821980889?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/8194107363821980889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=8194107363821980889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/8194107363821980889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/8194107363821980889'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/one-step-forward-two-steps-backwards.html' title='One step forward, Two steps backwards.'/><author><name>James</name><uri>http://www.blogger.com/profile/09506039522339752593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-2031041612224721124</id><published>2007-12-04T01:36:00.001-05:00</published><updated>2007-12-04T01:44:17.038-05:00</updated><title type='text'>"Exciting New Stuff": Part 1</title><content type='html'>So, today, we decided it'd be grand if instead of this experience-breaking Object ID garbage:&lt;br /&gt;(ie: "a city guard" &lt;--&gt; "npc#canticett_guard#52"),&lt;br /&gt;that instead, the world itself should maintain a &lt;i&gt;global&lt;/i&gt; instance tally. This effectively "tags" every single object, be it room, NPC, item, door, with a unique indentifier in the form of an integer. This allows for a lot of neatness without forgoing the practicality of tracking each object with a unique code; only in this case, the code is now a digit instead of an esoteric string. Using the idroom commmand will now yield something like:&lt;br /&gt;&lt;br /&gt;A city guard (28)&lt;br /&gt;&lt;br /&gt;Instead of&lt;br /&gt;&lt;br /&gt;a city guard : npc#canticett_guard#28&lt;br /&gt;&lt;br /&gt;And can be targetted precisely with the shortcut "28", as in, "examine 28". Neat, or so we think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-2031041612224721124?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/2031041612224721124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=2031041612224721124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2031041612224721124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2031041612224721124'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/exciting-new-stuff-part-1.html' title='&quot;Exciting New Stuff&quot;: Part 1'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-2644021128093297185</id><published>2007-12-03T00:49:00.000-05:00</published><updated>2007-12-03T00:50:45.485-05:00</updated><title type='text'>The Unspeakable, Agonizing Pain</title><content type='html'>So, I'm almost done porting old-style commands to new-style abilities. At the time of this writing, I just finished "get", "drop", and "put", the most nightmarish of the bunch. There's not really much to say, but this is basically the hump of busy-work being crested. Exciting new stuff is soon to come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-2644021128093297185?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/2644021128093297185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=2644021128093297185' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2644021128093297185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2644021128093297185'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/12/unspeakable-agonizing-pain.html' title='The Unspeakable, Agonizing Pain'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-2097697794223109740</id><published>2007-11-28T23:43:00.001-05:00</published><updated>2007-11-29T00:47:11.200-05:00</updated><title type='text'>Parsing, Schmarsing</title><content type='html'>&lt;span style="FONT-STYLE: italic;font-size:85%;" &gt;(Hi, I'm James, and I'm one of the developers on PyMUD. I had Steven add me to the blog so I could insert my occasional quips about why Python is awesome, Steve Jobs needs to stop wearing blue jeans, and occasionally update on the project's progress)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Who would've thought writing a MUD would involve so much parsing?&lt;br /&gt;&lt;br /&gt;Parsing user input to commands. Parsing world data. Parsing configs. It kind of just exploded, and soon we ended up with a 1000-line parsers module to handle the world and items XML. It got to the point of being so scary neither Steven or I wanted to touch it. Finally, we've begun cleaning it up, and I've already cut off nearly 250 lines. But hey, at least it's Python. I don't even want to think what this amount of parsing would've been like in a non-dynamic language.&lt;br /&gt;&lt;br /&gt;After more than a year of quiet, we're finally advancing towards our Alpha 3 milestone. Items are functional for the most part, but the major stopping point before release is having a character class system. The code cleanup task is helping us get familiar with the code again, fix any bugs we may happen to run into, and prepare for the class / ability system.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-STYLE: italic;font-size:85%;" &gt;Addendum by Steven:&lt;/span&gt;&lt;br /&gt;As James pointed out, the parsers are probably one of the most important parts of the PyMUD system. We have an entire (huge) parsing module dedicated to extracting Object (NPC, Ability, Room, Item) data from the game's XML scripts. This is the one he was referring to. In addition to the sprawling XML parser, we have more parsers for user input and for parsing server configuration files. The latter is easy, more or less. The former is one of the more complex aspects of the system, and actually forms a basis for the entire &lt;a href="http://netchat.reaganpower.us/"&gt;NetChat Py-Client&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Both crucial parsers work fine in their current form, but they're becoming a bit of a mess to manage. Both need to be looked at a little more before we're comfortable plunging onward into the wilderness that is new content.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-2097697794223109740?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/2097697794223109740/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=2097697794223109740' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2097697794223109740'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/2097697794223109740'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/11/parsing-schmarsing.html' title='Parsing, Schmarsing'/><author><name>James</name><uri>http://www.blogger.com/profile/09506039522339752593</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-3528164430368265869</id><published>2007-08-31T13:06:00.000-05:00</published><updated>2007-08-31T13:08:26.251-05:00</updated><title type='text'>Okay, I'm serious this time</title><content type='html'>Honest. I'm installing Ubuntu for the sole reason of providing myself with a comfortable developing environment. James and I have been brainstorming for a week, and are ready to finally tackle the behemoth that is old, bad code, idling away for over a year now. After a weekend of cleaning, development &lt;strong&gt;will&lt;/strong&gt; get back on track.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-3528164430368265869?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/3528164430368265869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=3528164430368265869' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/3528164430368265869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/3528164430368265869'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/08/okay-im-serious-this-time.html' title='Okay, I&apos;m serious this time'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-1834745234287233242</id><published>2007-03-01T00:30:00.000-05:00</published><updated>2007-03-01T00:32:32.076-05:00</updated><title type='text'>Dead? Of course not!</title><content type='html'>How can I be? Still working on that feature!&lt;br /&gt;&lt;br /&gt;Yes, I know I'm not funny.&lt;br /&gt;&lt;br /&gt;This project is by no means dead, it's just hibernating. James and I are going to get right on it as soon as class simmers down a little. Worry not, my loyal readers!&lt;br /&gt;&lt;br /&gt;Not that I have loyal readers, but I do like talking to myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-1834745234287233242?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/1834745234287233242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=1834745234287233242' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/1834745234287233242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/1834745234287233242'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2007/03/dead-of-course-not-im-still-working-on.html' title='Dead? Of course not!'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115310015439473804</id><published>2006-07-16T20:31:00.000-05:00</published><updated>2006-07-16T20:35:56.183-05:00</updated><title type='text'>Changes ftw</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Forgot to update last night.&lt;/p&gt;  &lt;p&gt;Ok, here's the deal. I've fixed a disgusting number of bugs, removed grammatical inconsistencies, added respawning to mobs, added respawning to players, updated command stacking, added command repetition, tweaked item interaction extensively so that it's more intuitive and English, added 'all' and numerical values to the interactions, added (filled) containers to the ItemScript, modularized npcsets and itemsets (previously unique to worlds), and various other cute changes.&lt;/p&gt;  &lt;p&gt;Yay!&lt;br/&gt; &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115310015439473804?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115310015439473804/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115310015439473804' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115310015439473804'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115310015439473804'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/07/changes-ftw.html' title='Changes ftw'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115267393845640796</id><published>2006-07-11T22:08:00.000-05:00</published><updated>2006-07-11T22:12:18.496-05:00</updated><title type='text'>And He's Back</title><content type='html'>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Was just on a one week vacation to the Outer Banks with a good friend of mine. Consequently, I'm now hooked on Lost, but that's neither here nor there. So, hopefully this explains the week-long silence, and I just wanted to announce that I'm back from the beach and ready to rock once more!&lt;/p&gt;  &lt;p&gt;Next on my plate is respawn timers!&lt;br/&gt; &lt;/p&gt;  &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115267393845640796?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115267393845640796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115267393845640796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115267393845640796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115267393845640796'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/07/and-hes-back.html' title='And He&apos;s Back'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115172807916082039</id><published>2006-06-30T23:23:00.000-05:00</published><updated>2006-06-30T23:27:59.166-05:00</updated><title type='text'>Tweaks and Such</title><content type='html'>Well, I didn't make much groundbreaking progress today, but I did make some interesting changes and clean up some code. First and foremost, the 'describe' function of Mobiles is now much more efficient, opting for string formatting instead of concatenation. In theory this is better, heh. Similary I removed all 'bold' formatting from the descriptions, because I found them silly. Furthermore, I added an endurance indicator to the list of things displayed in the primary description. It ranges from being borderline conscious to being perfectly well-rested. That's it for Mobiles.&lt;br /&gt;&lt;br /&gt;In terms of Containers, I did a little tweaking such that an indicator of how 'full' it is is appended to the end of the description. This functions like desc/desc2 in Mobiles, only it's not a separate paragraph. This trend will continue for indicators such as 'size' for other Items.&lt;br /&gt;&lt;br /&gt;Hurray, magical!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115172807916082039?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115172807916082039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115172807916082039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115172807916082039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115172807916082039'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/07/tweaks-and-such.html' title='Tweaks and Such'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115164579704968629</id><published>2006-06-30T00:35:00.000-05:00</published><updated>2006-06-30T00:36:37.056-05:00</updated><title type='text'>Corpses, etc</title><content type='html'>I'm tired, so this will be a rather summative update. Bags now work after much tweaking to internal mechanics, and basic corpse functionality has been added. Dead mobs/players will spawn a corpse that is filled with their equipment and inventory, and it will decay in 30 seconds unless otherwise specified. Trying to log out with a corpse in the inventory will result in it disintegrating.&lt;br /&gt;&lt;br /&gt;The end.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115164579704968629?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115164579704968629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115164579704968629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115164579704968629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115164579704968629'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/corpses-etc.html' title='Corpses, etc'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115136803229046156</id><published>2006-06-26T19:25:00.000-05:00</published><updated>2006-06-30T23:31:22.426-05:00</updated><title type='text'>Containers</title><content type='html'>At long last, I do think I've hammered out all the bugs. They were incredibly stupid bugs too - modifying item IDs after they were assigned, adding items to the inventory twice, the like. Whatever, containers should WORK. I added two new tickets and reopened another one though, because I'm apparently masochistic. Death needs to be implemented (correctly, with corpses and respawning), being able to put and get variable numbers of items should work, and templating needs to work with containers.&lt;br /&gt;&lt;br /&gt;Fin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115136803229046156?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115136803229046156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115136803229046156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115136803229046156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115136803229046156'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/containers.html' title='Containers'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115111457321148796</id><published>2006-06-23T20:58:00.000-05:00</published><updated>2006-06-23T21:04:51.903-05:00</updated><title type='text'>Zomg, change!</title><content type='html'>That's right!&lt;br /&gt;Today, I made several huge changes.&lt;br /&gt;Well, more additions, I guess.&lt;br /&gt;&lt;br /&gt;First and most importantly - bags and other containers now completely work! In theory!&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Containers are correctly stored in the database, theoretically.&lt;/li&gt;&lt;li&gt;Containers are correctly pulled from the database, in theory.&lt;/li&gt;&lt;li&gt;Containers can now have items put in them and retrieved from them, supposedly.&lt;/li&gt;&lt;li&gt;Containers can now be looked inside of, hypothetically.&lt;/li&gt;&lt;li&gt;Bags can be opened and closed, if all's gone well.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The only problem is that all of these changes are &lt;i&gt;completely&lt;/i&gt; untested, as I have yet to make functionality for scripting bags! Zing!&lt;br /&gt;&lt;br /&gt;In addition, from a code standpoint, I added more niceness. The 'player' plugin was split into another 'items' plugin, for code that deals with, well, items. Eventually some commands from 'client' will move there as well. I also added 'put' to the help doc, and cleaned up a little code. In terms of functionality, I moved a lot of code from Door back to Openable, where it was belong, tidied some stuff up, and added a Bag class that extends both Openable and Container (in reverse order). Pity Ruby can't do that. Take &lt;b&gt;that&lt;/b&gt; Barnett, multiple inheritance wins. In addition to all this, I added obj_type filters to Container and EquipmentModel, which Room has had for a long time.&lt;br /&gt;&lt;br /&gt;Finally, I removed all hope from 'open' and 'close' every functioning on other players. No longer can you open or close other peoples' bags with these commands... yet. I intend to add a Subtlety skill called 'target' that will allow for such features. &lt;br /&gt;&lt;br /&gt;Over and out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115111457321148796?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115111457321148796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115111457321148796' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115111457321148796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115111457321148796'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/zomg-change.html' title='Zomg, change!'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115073034898760989</id><published>2006-06-19T10:02:00.000-05:00</published><updated>2006-06-19T10:19:09.003-05:00</updated><title type='text'>A Lull</title><content type='html'>So, there's been a distinctive of updates over the weekend.&lt;br /&gt;&lt;br /&gt;I could make excuses (and I will later), but here's what I accomplished since the last post -&lt;br /&gt;&lt;br /&gt;Item inheritance has been tidied up. That's about it. Templates can now be defined, which pass their traits to items. Additionally, templated items can pass their traits down to subitems. Sadly, my progress stops there.&lt;br /&gt;&lt;br /&gt;Now for my rationalization!&lt;br /&gt;&lt;br /&gt;Friday through Saturday I was busy partitioning my drive and setting up Ubuntu linux. Sunday, I worked all day, just like every week.&lt;br /&gt;&lt;br /&gt;So there we have it!&lt;br /&gt;&lt;br /&gt;Now I just need to work on making my wireless work on linux.&lt;br /&gt;&lt;br /&gt;I mean, making PyMUD work. =]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115073034898760989?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115073034898760989/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115073034898760989' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115073034898760989'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115073034898760989'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/lull.html' title='A Lull'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115052295972952632</id><published>2006-06-17T00:41:00.000-05:00</published><updated>2006-06-17T00:42:39.736-05:00</updated><title type='text'>Item Inheritance</title><content type='html'>As per Andrew's request, I started working on item inheritance today. That is, making item 'templates' that can pass their attributes onto subitems, to save time scripting.&lt;br /&gt;&lt;br /&gt;It didn't work out as well as planned, so I reopened the ticket and tried again.&lt;br /&gt;&lt;br /&gt;Attempt 2 is splendid, but still requires cleaning up. I'll finish it, commit it, and document it here tomorrow. :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115052295972952632?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115052295972952632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115052295972952632' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115052295972952632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115052295972952632'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/item-inheritance.html' title='Item Inheritance'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115041753327844569</id><published>2006-06-15T19:21:00.000-05:00</published><updated>2006-06-15T19:25:33.290-05:00</updated><title type='text'>0.8 Completed!</title><content type='html'>Huzzah! Three cheers!&lt;br /&gt;&lt;br /&gt;Our first milestone has been reached and closed a whole 3 weeks early! The rate of progress is truly getting frightening.&lt;br /&gt;&lt;br /&gt;So, let's take a look at today's accomplishments.&lt;br /&gt;&lt;br /&gt;A new 'users' component was added, with the class UserManager. Now, UserManager is a truly magical entity. It depends on very little other than the existence of the World and Database services, and as such, will be completely reloadable when the time comes to implement... reloadability, heh. Right now it houses all database interactions for logging and logging out, as a web of callbacks. As a coorelary to adding this new component, I tweaked client.py and dialogues.py to use it, in the process abstracting out all database calls.&lt;br /&gt;&lt;br /&gt;Now, here's where things get FUN.&lt;br /&gt;&lt;br /&gt;Since I had little else to do today, I went ahead and implemented storing and retrieving items from the newer database tables. That is to say, when you log in, your inventory and equipment tables are scanned and loaded in as new items based on unique codes that are assigned when you log out. Theoretically, even nesting items into bags works, though this requires extensive testing.&lt;br /&gt;&lt;br /&gt;As another neat aside, I implemented a new 'load' attribute to items on NPCs. The value is a float, which is the percent chance to load an item. Rarer items should always come first in the list, and will close the possibility of other, more common items loading instead.&lt;br /&gt;&lt;br /&gt;Cool, eh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115041753327844569?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115041753327844569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115041753327844569' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115041753327844569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115041753327844569'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/08-completed.html' title='0.8 Completed!'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115033708537693723</id><published>2006-06-14T20:59:00.000-05:00</published><updated>2006-06-14T21:23:47.860-05:00</updated><title type='text'>Wonderful Accomplishments</title><content type='html'>Aha!&lt;br /&gt;&lt;br /&gt;Today, James and I did something absolutely wonderful with the database!&lt;br /&gt;Well, fine, it was mostly James.&lt;br /&gt;&lt;br /&gt;But, the point is that we moved to twisted.enterprise for great asynchronous database power! No more of that convoluted pymud.database stuff.&lt;br /&gt;&lt;br /&gt;However, the new component is still far too fluid for my liking, as we plan on adding many new features, so I'm hestitant to start storing things in my new SQL tables in the database. Instead, this evening I worked on making Items more useful.&lt;br /&gt;&lt;br /&gt;I did! They work!&lt;br /&gt;Now, Items (as well as Races, NPCs, and Modifiers) can directly tweak various things such as attack damage, dodge chance, hit chance, crit chance, hp, mp, ep, etc! This is good!&lt;br /&gt;In addition to this, I added a new Dice class to lib that allows for random numbers applying to stats. Though primarily geared towards attack damage, I foresee many possible uses.&lt;br /&gt;&lt;br /&gt;To make use of the new Item possibilities, I went ahead and added a means of connecting Items to NPCS. With the new equipment and inventory tags, you can directly append Items to them! My future plans include allowing random chances associated with a given Item showing up, for rarity purposes.&lt;br /&gt;&lt;br /&gt;Over and out for tonight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115033708537693723?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115033708537693723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115033708537693723' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115033708537693723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115033708537693723'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/wonderful-accomplishments.html' title='Wonderful Accomplishments'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-29680596.post-115025228625111920</id><published>2006-06-13T21:28:00.000-05:00</published><updated>2006-06-13T21:31:26.256-05:00</updated><title type='text'>Initial Post!</title><content type='html'>Hm, so.&lt;br /&gt;&lt;br /&gt;I really should have made this blog back in November, so that progress could be readily tracked, but eh. We'll just have to start with a well developed pre-release!&lt;br /&gt;&lt;br /&gt;Today, I managed to finish AI (moved it around in the source) for Combat, as well as the ScriptManager and action scripts in general. What this means is that once my content team gets write access to src/pymud/scripts, we can start making spells and abilities! And having them work! FABULOUS!&lt;br /&gt;&lt;br /&gt;In addition, tonight James worked at revamping the current (disgusting) database component to use twisted.enterprise.adbapi, or that is to say, an asynchronous 'real' component as opposed to the hack we have now. This will allow us to easily implement future database changes, such as the upcoming persistence of equipment and inventory into special database tables.&lt;br /&gt;&lt;br /&gt;Good night, and I'll tell you all how much I rocked the database tomorrow!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29680596-115025228625111920?l=pymud.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pymud.blogspot.com/feeds/115025228625111920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29680596&amp;postID=115025228625111920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115025228625111920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29680596/posts/default/115025228625111920'/><link rel='alternate' type='text/html' href='http://pymud.blogspot.com/2006/06/initial-post.html' title='Initial Post!'/><author><name>Viserys</name><uri>http://www.blogger.com/profile/05956641334844540017</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='21' src='http://1.bp.blogspot.com/_kCbNRv3kkiM/SmzJlgQwouI/AAAAAAAAALw/lZNJyLuxhi0/S220/SJ+San+Fran.jpg'/></author><thr:total>0</thr:total></entry></feed>
