<?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-5644717058053134361</id><updated>2012-01-13T06:58:18.395-08:00</updated><category term='articles'/><category term='warriors'/><category term='client'/><category term='google adwords click fraud'/><category term='web'/><category term='trading'/><category term='bugs'/><category term='brewing'/><category term='eq'/><category term='client automapper'/><category term='gold'/><category term='events'/><category term='necromancers'/><category term='who list'/><category term='forum'/><category term='clerics'/><category term='new features'/><category term='system event'/><category term='motivation'/><category term='year in review'/><category term='areas'/><category term='audio'/><category term='composite'/><category term='sound'/><category term='area announcement'/><category term='software engineering'/><category term='wxwidgets sucks'/><category term='classes'/><category term='islands'/><category term='potions'/><category term='future directions'/><category term='new players'/><category term='toolkits'/><category term='bots'/><category term='xml'/><category term='blind support'/><category term='google analytics'/><category term='game balance'/><category term='pr'/><category term='assholes'/><category term='player killing'/><category term='fanfic'/><category term='objects'/><category term='thieves'/><category term='groups'/><category term='pk'/><category term='high levels'/><category term='mapping'/><category term='automatic map generation'/><category term='prng'/><category term='gods'/><category term='seo'/><category term='propaganda'/><category term='building'/><category term='complexity limits'/><category term='automapper'/><category term='anniversary'/><category term='strength'/><category term='logins'/><category term='player guides'/><category term='dexterity'/><category term='stats'/><category term='design'/><category term='statistics'/><category term='randoms'/><category term='jerks'/><title type='text'>The Mob Factory - Alter Aeon MUD</title><subtitle type='html'>Thoughts on MUD development, ideas, and future directions from the creator of the Alter Aeon RPG.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default?start-index=101&amp;max-results=100'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>135</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-780687755930763717</id><published>2012-01-10T10:35:00.000-08:00</published><updated>2012-01-10T10:35:10.919-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='anniversary'/><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='events'/><title type='text'>Alter Aeon 17th Anniversary</title><content type='html'>As of this weekend, it's been 17 years since I started on Alter Aeon.  It all began with:&lt;br&gt;&lt;br&gt;&lt;blockquote&gt;#include "stdio.h"&lt;br&gt;&lt;br&gt;void main() {&lt;br&gt;}&lt;br&gt;&lt;/blockquote&gt;&lt;br&gt;When I started, I remembered so little C that I had to go look up what a structure was and how to use it.  The game server code has since then landed me two good jobs and served as my final project for my engineering degree.&lt;br&gt;&lt;br&gt;We're up to over three hundred thousand lines of source code now, with another twenty or thirty thousand lines of help files, faqs, rules, and other information.  It's sometimes helpful to step back and see how far things have come.&lt;br&gt;&lt;br&gt;This weekend, in celebration, we'll be having one of the rare scripted RP events that I occasionally do.  These events are time consuming, with a lot of prep work and hassle trying to manage and keep everything working well, but they are hugely popular with the players.  This time we have a storyline with a fairly plausible "end of the world as we know it" theme, and with any luck it'll be as successful as our 15th anniversary was a couple years ago.&lt;br&gt;&lt;br&gt;Thanks to all the players who have contributed and help make Alter Aeon great over the years.  See you all there!&lt;br&gt;&lt;br&gt;-dentin&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-780687755930763717?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/780687755930763717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=780687755930763717' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/780687755930763717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/780687755930763717'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2012/01/alter-aeon-17th-anniversary.html' title='Alter Aeon 17th Anniversary'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-4195025711896212263</id><published>2011-12-13T08:30:00.000-08:00</published><updated>2011-12-13T08:30:30.142-08:00</updated><title type='text'>Year End Event at Alter Aeon</title><content type='html'>We'd like to welcome everyone to the year-end celebration at Alter Aeon!&lt;br&gt;&lt;br&gt;Starting on the 21st of December and going through new years eve, weplan to have a number of things going on:&lt;br&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;The release of a new low level area near Indira&lt;br&gt;&lt;br&gt;As part of our ongoing efforts to give level 8-12 players more questsand areas to explore, we'll be opening a brand new area north of theOld Indira Forest on the island of Kordan.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;A major update to the troll caves on Archais&lt;br&gt;&lt;br&gt;Originally created over 15 years ago, the troll caves were recentlytaken offline and given a major makeover.  We'll be officially openingthe updated area, which should now be suitable for levels 24-30.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;The release of a new high level stone giant area west of Finspang&lt;br&gt;&lt;br&gt;This area, created by the original builder of the Undead City of Jo'Kerin,shows a different side of stone giants.  If you're only familiar with  the giants that reside in the Ash Mountains, you'll be surprised.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;An object creation contest, open to everyone (this is currentlyrunning and submissions will close on Dec 23rd)&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Daily gifts will be given out to everyone who logs in!&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Several different minor contests and activities similar to the famousHalloween Pumpkin Cannon&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;We'll also be running sales on various credit purchases in game ifyou're into that sort of thing.&lt;br&gt;&lt;br&gt;I'll post a more detailed schedule closer to the 21st.  We hopeto see you there!&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4195025711896212263?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4195025711896212263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4195025711896212263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4195025711896212263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4195025711896212263'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/12/year-end-event-at-alter-aeon.html' title='Year End Event at Alter Aeon'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1812003429551840862</id><published>2011-11-01T08:43:00.000-07:00</published><updated>2011-11-01T08:47:26.593-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jerks'/><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><title type='text'>Playerbase and Userload</title><content type='html'>When it comes to growing a playerbase, I've become more convinced than ever that it's got to be a staged process unless you have a LOT of money to blow on it.  Having a lot of money is in fact how a lot of big MMOs handle growth - when they officially open, they basically go to full capacity overnight.  This means that they can focus all of their development effort on one specific expected player load, and don't have to worry about nursing a small user base through the various stages to become a large user base.&lt;br /&gt;&lt;br /&gt;This whole staged growth process has become a lot more apparent to me over the last couple of years:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When the player base is very small, it attracts a certain class of isolationist explorer player, one that doesn't need much in terms of a help system, documentation, or maps.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A bit larger and you start to get power levelers that like to compete with each other for in-game prestige.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Larger still and you start to get quasi-social players, players who like to group with others and help out.  They don't show up earlier because explorers don't like to group, but with power levelers there's someone to group with and someone to help.  This stage is an easy place to stall at, because these quasi-social players do not have the thickest hides and are less competitive than the power levelers; if they are abused by the power levelers, they will simply leave.&lt;br /&gt;&lt;br /&gt;Power levelers tend to form small cliques with these quasi-social players, and then drive off all other quasi-social players not in their clique.  This appears to happen because the power levelers in one clique, competing against those in another clique, try to get an advantage by driving off the other clique's support staff.&lt;br /&gt;&lt;br /&gt;If restrictions, rules, and code are not put in place to protect them, the quasi-social players will never reach critical mass and will cycle out as fast as they cycle in.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The next stage brings in true socialites, players that typically gain levels only as a side effect of being in a group that is running experience while they chat.&lt;br /&gt;&lt;br /&gt;True socialites are another huge ratsnest of problems.  They tend to be drama queens or drama magnets, and are as capable of stirring up political *CENSORED*storms as they are of keeping other players interested and happy.  There isn't a lot that can be done about this, other than to shutdown flamewars and ensure that rumors about admin 'unfairness' are killed immediately.&lt;br /&gt;&lt;br /&gt;True socialites are heavily looked down upon by the explorer and power leveler communities, and they must be given substantial protection from abuse.  Unfortunately, socialites can tolerate a lot of abuse - unfortunate because when they take abuse, they dish it back out tenfold in the form of bitching to other players.  One sufficiently pissed off socialite that isn't immediately shut down can crater the happiness and opinions of two dozen other players.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The last stage that I have familiarity with is the 'true newbie' stage.  This is where you get true newbies coming in, and your game has progressed far enough that true newbies are actually able to make some forward progress.&lt;br /&gt;&lt;br /&gt;True newbies are a huge problem.  From a technical standpoint, they are generally completely ignorant of the game style, and the newbie areas must be very well built to retain even a fraction of them.  This category also appears to contain the largest percentage of 'low functioning' individuals - I do not mean that as an insult, rather an observation.  Not everyone has the mental capacity to be an explorer or apower leveler.&lt;br /&gt;&lt;br /&gt;These new players must be afforded additional protections that even the socialites did not require.  I'm still workingout the details of a lot of this, but a good chunk of it amounts to protecting these players from themselves.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;These are just the social problems.  There are also scaling issues, each of which presents a 'critical mass' hurdle that must be passed.  Certain areas may require a minimum number of players to be handled; assembling a group of that many players may be impossible below a certain user load. In the case of Alter Aeon, many of the automatic control systems rely on statistical data to function correctly.  With few players, the lag time on getting statistically relevant data may be literally months.&lt;br /&gt;&lt;br /&gt;This kind of lag time really hinders the ability of a game to make quick andeffective updates to increase retention.  If you have a thousand new character creations per day, you can pretty quickly determine if a change is an improvement or not.  If you have one new character creationper day, it becomes very difficult to determine if you're doing the right thing.  I suspect this is at least part of the reason that MMOs take out funding in order to start big and improve the game quickly.&lt;br /&gt;&lt;br /&gt;I think at Alter Aeon, we're past a lot of these initial hurdles, and could probablyreboot the game from scratch pretty quickly; once you get the various protectionsin place, they remain largely functional even though they fall into disrepair at higher userloads.&lt;br /&gt;&lt;br /&gt;That said, I know there are bigger, nastier hurdles ahead of us.&amp;nbsp; I just don't know what they are (yet.) &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1812003429551840862?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1812003429551840862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1812003429551840862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1812003429551840862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1812003429551840862'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/11/playerbase-and-userload.html' title='Playerbase and Userload'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1646946156984132860</id><published>2011-10-26T08:41:00.001-07:00</published><updated>2011-10-26T08:42:19.045-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='area announcement'/><title type='text'>Halloween 2011 Events!</title><content type='html'>If you like vampires, mummies, demons and other things that go bump in the night...&lt;br /&gt;&lt;br /&gt;Stock up on supplies and get ready for a fight.&lt;br /&gt;&lt;br /&gt;Come see us on October twenty-ninth, it all starts at midnight.&lt;br /&gt;&lt;br /&gt;This friday night/saturday morning at midnight, a new area will be opening in the land of Alter Aeon.&amp;nbsp; This place is known as the nightmare plane - little is known of it as yet, but if the name is any hint it sounds terrifying.&lt;br /&gt;&lt;br /&gt;This new high level area, months in the making, consists of nearly 350 rooms, over 150 beasties and a host of new fame and fortunes waiting to be found.&amp;nbsp; Over a half a dozen new quests lines are available to explore.&lt;br /&gt;&lt;br /&gt;All day sunday, we will be running arena and other events every few hours to give everyone a chance to participate and say hello.&amp;nbsp; We'll have novelty items and prizes for everyone.&lt;br /&gt;&lt;br /&gt;On sunday night/monday morning at midnight, an invasion will begin, with incursions all day on Halloween.&amp;nbsp; There will be prizes for all levels outside of the new player zones.&lt;br /&gt;&lt;br /&gt;New this year is a special quest zone to help stop the invasion and get a permanent deed added to your character.&amp;nbsp; This zone is set up to allow groups to progress at their own pace without interference from other players or groups that may also be trying to stop the invasion.&lt;br /&gt;&lt;br /&gt;We hope to see you there!&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1646946156984132860?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1646946156984132860/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1646946156984132860' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1646946156984132860'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1646946156984132860'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/10/if-you-like-vampires-mummies-demons-and.html' title='Halloween 2011 Events!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1370445266361724668</id><published>2011-09-26T19:25:00.000-07:00</published><updated>2011-09-26T19:25:31.041-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>wxWidgets keyboard handling</title><content type='html'>&lt;i&gt;The cross platform code that isn't.&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;A couple of weeks ago, another piece of wxWidgets infrastructure in the Alter Aeon client was replaced with custom code.&amp;nbsp; This time, it was the bulk of the keyboard handling code that fell in battle.&lt;br /&gt;&lt;br /&gt;In theory, the wxWidgets keyPressEvent is where you should trap out various key combinations; things like 'a', the escape key, and 'control-c' pairs.&amp;nbsp; Certainly under linux, nearly all of these worked correctly, and the ones that didn't were obscure and not really worth hunting down.&amp;nbsp; When I first ported to Win32, all that changed.&lt;br /&gt;&lt;br /&gt;In Win32 builds, a lot of keys were not handled by the key press event.&amp;nbsp; You'd press the key combination, and nothing would happen.&amp;nbsp; It was like the operating system was trapping out the key combination and never bothering to pass it up the stack.&amp;nbsp; As it turns out, that's pretty much exactly what was happening.&lt;br /&gt;&lt;br /&gt;I did eventually get the Win32 builds to work by intercepting a handful of keys at the keyDownEvent and keyUpEvent layers.&amp;nbsp; When I finally found these, it was hugely helpful; in the end, I trapped on the order of 30 key combinations to do away with things like annoying system beeps and idiotic behavior of the default keystrokes, in addition to handling our own special control combinations.&lt;br /&gt;&lt;br /&gt;Enter Mac OSX.&amp;nbsp; Enter a whole new raft of keyboard weirdness.&amp;nbsp; I hacked on this for about an hour, and quickly realized that I was on the path to madness.&amp;nbsp; The code was becoming a rat's nest of ifdefs with key combinations trapped out in multiple different layers in different operating systems.&lt;br /&gt;&lt;br /&gt;About the only thing that could be called consistent between any of the operating systems was that the keyDownEvent and keyUpEvent were always reliable.&amp;nbsp; The solution then seemed obvious:&amp;nbsp; move everything down into the keyDownEvent, and ignore everything else.&amp;nbsp; Intercept the keyboard control -before- wxWidgets could do anything stupid with it.&lt;br /&gt;&lt;br /&gt;Keyboard control now works consistently and reliably on all three platforms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1370445266361724668?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1370445266361724668/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1370445266361724668' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1370445266361724668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1370445266361724668'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/09/wxwidgets-keyboard-handling.html' title='wxWidgets keyboard handling'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2963479212601262025</id><published>2011-09-19T13:43:00.000-07:00</published><updated>2011-09-19T13:45:18.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='clerics'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>2011 Cleric Class Update</title><content type='html'>The 2011 Alter Aeon "Cleric Update" is now live!&amp;nbsp; This update contains a lot of changes to improve traditional cleric spells, add a new mode of casting for mages, and clean up other spells and skills that have traditionally not been as awesome as they could be.&amp;nbsp; Here's a list of the most major changes:&lt;br /&gt;&lt;br /&gt;- Mages now have the ability to 'channelcast' (ccast) certain elemental spells in combat.&amp;nbsp; Channelcasting takes longer than regular casting, but is interruptible and costs substantially less mana.&amp;nbsp; This feature allows mages to become a true 'blaster' class without compromising healing mana.&lt;br /&gt;&lt;br /&gt;The channel casting skills are 'fire focusing', 'ice focusing', 'lightning focusing' and 'crystal focusin'.&amp;nbsp; The fire plane is easiest to reach, and hence it's the lowest level and easiest to channel.&amp;nbsp; The crystal plane is much harder to reach and only high level mages will be able to channel from it.&lt;br /&gt;&lt;br /&gt;- Added a necromancer spell 'bone dragon', which allows you to fly around over the landscape.&lt;br /&gt;&lt;br /&gt;- Ice imprison and crystal prison have been updated.&lt;br /&gt;&lt;br /&gt;- Ward good and ward evil are now more powerful.&lt;br /&gt;&lt;br /&gt;- The charm spell has been updated to make it easier to land and to use control points similar to controlled necromancer minions.&lt;br /&gt;&lt;br /&gt;- The peace spell has been improved.&lt;br /&gt;&lt;br /&gt;- A level 19 curse, 'overconfidence', has been added.&lt;br /&gt;- A level 19 spell, 'hold undead', has been added.&lt;br /&gt;- A level 28 spell, 'sacred touch', has been added.&lt;br /&gt;- A level 29 spell, 'solace', has been added.&lt;br /&gt;&lt;br /&gt;As always, you can use the 'spell find' commands to find the teachers or trainers for new spells and skills.&lt;br /&gt;&lt;br /&gt;For those of you who don't know anything about us, Alter Aeon is a multiplayer text-based game with a lot of features and settings to help make it blind-friendly. Over half our playerbase is blind or visually impaired, and we have blind builders and staff helping to expand and improve the game.&lt;br /&gt;&lt;br /&gt;Everyone is welcome to play, so if you're new to the game feel free to stop by and check us out.&amp;nbsp; For more information and soundpack downloads, see our web site at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/"&gt;http://www.alteraeon.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy hunting!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2963479212601262025?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2963479212601262025/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2963479212601262025' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2963479212601262025'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2963479212601262025'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/09/2011-alter-aeon-cleric-update-is-now.html' title='2011 Cleric Class Update'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3174815842837782620</id><published>2011-09-09T13:06:00.000-07:00</published><updated>2011-09-09T13:06:06.082-07:00</updated><title type='text'></title><content type='html'>I'd like to announce the release of the Alter Aeon client version 1.089, which makes this the first official 'non-beta-numbered' release.&amp;nbsp; An awful lot of updates and effort went into this revision.&amp;nbsp; Here's a short list of the big feature updates:&lt;br /&gt;&lt;br /&gt;- Full, non-beta MacOSX support, including versions of MacOSX from 10.5 forward.&amp;nbsp; Unfortunately, we don't support the older PPC macs, just newer Intel based ones.&lt;br /&gt;&lt;br /&gt;- We've submitted the Mac version of the client to the Mac App Store, and hopefully you'll be able to get it there for free in the next few days!&lt;br /&gt;&lt;br /&gt;- The graphical rendering system has been pretty much completely gutted and rewritten.&amp;nbsp; This makes the client faster and more consistent between different versions of windows.&amp;nbsp; This got rid of a lot of bugs with different service packs.&lt;br /&gt;&lt;br /&gt;- The keyboard handling has been rewritten to use low level keyboard codes for pretty much everything.&amp;nbsp; This also gets rid of a lot of service pack bugs that we could never track down before.&lt;br /&gt;&lt;br /&gt;- Lots of performance and memory optimizations, to make things run faster and more smoothly&lt;br /&gt;&lt;br /&gt;- You can now change the font on buttons and the map&lt;br /&gt;&lt;br /&gt;In a lot of ways, this was a sort of 'maintenance' release, where we weren't trying to add features so much as make the existing features work as smoothly and correctly as we can.&lt;br /&gt;&lt;br /&gt;Of course, this means the next release will probably start adding features again.&amp;nbsp; We have a lot of neat ideas queued up, so expect to start seeing some of them here in the next few months.&amp;nbsp; Until then, you can download the new Alter Aeon 1.089 client version at:&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;a href="http://www.alteraeon.com/AlterAeon.exe"&gt;http://www.alteraeon.com/AlterAeon.exe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Happy hunting! &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3174815842837782620?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3174815842837782620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3174815842837782620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3174815842837782620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3174815842837782620'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/09/id-like-to-announce-release-of-alter.html' title=''/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5884504896305095437</id><published>2011-07-13T08:04:00.000-07:00</published><updated>2011-07-13T09:16:09.109-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>We're famous! (Again!)</title><content type='html'>If you've ever tried to get attention in the gaming world, you know how well-neigh impossible it is.  There are literally tens of thousands of game developers of every budget category, from the smallest single-person outfits to kings like Blizzard and CCP.  Even getting someone to review your game can sometimes be a lost cause.&lt;br /&gt;&lt;br /&gt;With that as a backdrop, Alter Aeon this weekend got a spontaneous review on the GamingHUD web site.  This is a pretty big website that reviews a lot of mainstream games.  For AA to even be seen by fish of this size is pretty amazing.&lt;br /&gt;&lt;br /&gt;The review also isn't some slapdash piece of filler material.  The reviewer spent a lot of time on the game and even emailed me for additional information.  The final article came out very positive and very long.&lt;br /&gt;&lt;br /&gt;The link is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gaminghud.com/articles/alter-aeon-mud-a-world-of-infinite-possibilities"&gt;Alter Aeon MUD - A World of Infinite Possibilities&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Feel free to check it out and maybe drop a thank you to the author for their hard work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5884504896305095437?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5884504896305095437/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5884504896305095437' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5884504896305095437'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5884504896305095437'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/07/were-famous-again.html' title='We&apos;re famous! (Again!)'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-5637066185881024708</id><published>2011-07-09T13:50:00.000-07:00</published><updated>2011-07-11T12:19:03.997-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>wxWidgets GTK font rendering</title><content type='html'>In my &lt;a href="http://mobfactory.blogspot.com/2011/07/wxdc-drawpoint-broken-under-wxmac.html"&gt;previous post&lt;/a&gt;, I managed to fix the bugs in wxDC::DrawPoint() by using my own custom drawing class.  Unfortunately, a lot of the places I where I used DrawPoint were also places where I needed to draw text, and in order to draw text I needed a wxDC.  No problem, I'll just draw the text using a temporary wxMemoryDC on the bitmap, and to make sure there's no clobbering problems I'll make sure that I don't intermingle direct drawing scope with the DC object scope.&lt;br /&gt;&lt;br /&gt;This appeared to work, except for the scrolling/updating windows.  For some reason, even though there was a Clear() call before the font rendering, the windows would never clear.  If I destroyed and recreated the bitmap every time, it worked fine but was very slow.  If I cleared after drawing the text, the clear worked.  If I cleared before drawing the text, the clear did not work.&lt;br /&gt;&lt;br /&gt;Eventually I figured out the reason:&lt;br /&gt;&lt;br /&gt;Under wxGTK, wxDC drawing and rendering are done to a separate bitmap/bitmap layer that is permanently attached to the real bitmap.  When font data is drawn using wxDC::DrawText(), the text is drawn to the hidden layer, then the hidden layer is blitted in its entirety on top of the real bitmap.  The end result is that anything you do prior to constructing the DC and rendering text with that DC is overwritten/deleted when the DC destructs.&lt;br /&gt;&lt;br /&gt;Just how the hell does this make any sense?  Nevermind, forget I asked.  On the plus side, this explains why full screen font rendering is so slow in wxGTK.  I never could figure that part of it out.&lt;br /&gt;&lt;br /&gt;For roughly a day, I was utterly at a loss when faced with this problem.  Switch back to the old code and lose the MacOS X platform; stay with the new code and lose wxGTK (and possibly other platforms, I only ever tested it on GTK.)  I couldn't even think of a way to work around it.&lt;br /&gt;&lt;br /&gt;Eventually, a possible solution presented itself:  add font rendering to my custom bitmap class.  I wasn't real clear on how to do this at first, but the key breakthrough came when I realized I could just use a cheap glyph rendering scheme.  Use wxDC to draw each of the letters I needed (ascii chars 32 through 126) into tiny, clean bitmaps, then use a modified alpha channel copy routine to draw them to my custom bitmaps.&lt;br /&gt;&lt;br /&gt;I'm proud to say that I now have proper text rendering and graphical drawing primitives on all three platforms.  And to think that all I needed to do was rewrite the entire wxDC rendering system to do it!&lt;br /&gt;&lt;br /&gt;I should have just done it in the first place, as I &lt;a href="http://mobfactory.blogspot.com/2009/08/wxwidgets-sucks.html"&gt;recommended to myself in a past life&lt;/a&gt;.  Sometimes our older selves are no wiser than we are in youth.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5637066185881024708?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5637066185881024708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5637066185881024708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5637066185881024708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5637066185881024708'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/07/wxwidgets-gtk-font-rendering.html' title='wxWidgets GTK font rendering'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-736292431522028264</id><published>2011-07-09T13:17:00.000-07:00</published><updated>2011-07-10T06:02:04.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><title type='text'>wxDC DrawPoint broken under wxMAC</title><content type='html'>To follow up on my &lt;a href="http://mobfactory.blogspot.com/2011/07/wxwidgets-has-no-alpha-channel.html"&gt;previous post&lt;/a&gt;, I had written my own routines for handling alpha channel support under wxWidgets, and finally everything seemed to be working properly.  Both Win32 and Linux/GTK builds seemed to work exactly as expected using my alpha channel bitmaps where I needed them.  For most other places, I still used wxDC primitives, as wxDC direct drawing seemed to be a bit faster than going through a bitmap/blit interface, and I still needed to use wxDC to render fonts.&lt;br /&gt;&lt;br /&gt;I figured porting to MacOS X would be a snap, and for the most part it wasn't too bad.  There were some issues with Repaint() not working the same, but adding a few explicit paint calls in the right place fixed that up.&lt;br /&gt;&lt;br /&gt;However, something was wrong with some of the graphics in the various windows.  The sky bar, normally with lots of little stars in it, still had stars in it, but instead of one pixel there were two:  one at offset (0, 0), and one at offset (1, 1).  I also noticed 'fuzz' on the corners of various windows and buttons, and in a handful of other locations.&lt;br /&gt;&lt;br /&gt;Long story short, wxDC::DrawPoint() draws two pixels under wxMAC.  Not one, but two.  I found a couple bug reports regarding this from a few years ago, where it was basically acknowledged as a "verified bug", and the ticket was never closed.  Advice was "these routines are slow and shouldn't be used for high performance drawing".  Thanks guys.&lt;br /&gt;&lt;br /&gt;I have some mighty fine choice words to say to the developers regarding this, but I'll try to keep this post on topic.&lt;br /&gt;&lt;br /&gt;If something as fundamental as DrawPoint() is malfunctioning on a major development platform, I figured it would probably be a good idea to transition away from the classes that implement it in favor of my own drawing routines.  So, I started using my bitmap class, which just happens to have a DrawPixel() function that works properly.&lt;br /&gt;&lt;br /&gt;As expected, this fixed the drawing problems on all three platforms.  But alas, using my bitmap class exposed another set of very nasty wx bugs, which I'll discuss in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-736292431522028264?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/736292431522028264/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=736292431522028264' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/736292431522028264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/736292431522028264'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/07/wxdc-drawpoint-broken-under-wxmac.html' title='wxDC DrawPoint broken under wxMAC'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2924588096260517171</id><published>2011-07-09T12:56:00.000-07:00</published><updated>2011-07-09T13:49:35.996-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>wxwidgets has no alpha channel</title><content type='html'>A few months after I ported the &lt;a href="http://www.alteraeon.com/AlterAeon.exe"&gt;Alter Aeon client&lt;/a&gt; to the wxWidgets toolkit, I decided I wanted to add alpha overlay support to the automap and main window.&lt;br /&gt;&lt;br /&gt;Encouragingly enough, this appeared to be trivially supported: wxColor included an alpha value, bitmaps could be defined as having an alpha channel, etc.  Pretty much everything looked good to go, so I started experimenting with it.&lt;br /&gt;&lt;br /&gt;Alas, it was not to be.  It turns out that there are precisely three places where the alpha channel is used:&lt;br /&gt;&lt;br /&gt;1) loading a PNG from PNG data that has an alpha channel,&lt;br /&gt;2) drawing a bitmap containing alpha channel data using wxDC::DrawBitmap, and&lt;br /&gt;3) wxDC::DrawText, which politely draws text on top of the underlying pixels.&lt;br /&gt;&lt;br /&gt;For all other locations, there simply should have been this assert:&lt;br /&gt;&lt;br /&gt;wxASSERT("Alpha channel is stubbed here and works on precisely zero platforms ever, ha ha, the joke is on you")&lt;br /&gt;&lt;br /&gt;After upgrading to wx 2.9 and a pile of scouting around, I came across wx/rawbmp.h, which has some direct access functions that allow access to the alpha channel.  With this, I managed to get alpha channel working - but there were other problems with 2.9, so I downgraded back to stable, 2.8.12.&lt;br /&gt;&lt;br /&gt;The alpha channel code that worked under 2.9 works properly under wx 2.8.12 in wxMAC and wxGTK, but apparently isn't implemented under Win32, which happens to be my main development platform.&lt;br /&gt;&lt;br /&gt;Rather than bash my skull repeatedly against the wall, I did what any sane developer would do:  &lt;a href="http://mobfactory.blogspot.com/2009/02/sucking-further-wxwidgets.html"&gt;throw out the broken toolkit module, and write one that works&lt;/a&gt;.  In the end, I ended up with a wxBitmap derived class that has drawing functions that actually work properly and support alpha channel drawing when I need them to.&lt;br /&gt;&lt;br /&gt;However, there's a problem with this as well, which I'll detail in a later post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2924588096260517171?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2924588096260517171/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2924588096260517171' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2924588096260517171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2924588096260517171'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/07/wxwidgets-has-no-alpha-channel.html' title='wxwidgets has no alpha channel'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-1881008915538080547</id><published>2011-07-01T08:44:00.000-07:00</published><updated>2011-07-01T09:24:39.911-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='clerics'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Future Plans - Clerics</title><content type='html'>The cleric class has long languished - not because it was useless, but because until recently there wasn't a lot of reason to have a really high cleric level.  Prior to the 2010 christmas expansion, there weren't a lot of cleric spells or skills above level 30; and many cleric spells didn't scale in power as you gained levels, like mage and necromancer spells do.&lt;br /&gt;&lt;br /&gt;As a result, cleric has been a useful, powerful class - but not something you want to be your primary.  Our future update to cleric aims to change that.&lt;br /&gt;&lt;br /&gt;The biggest updates to the class aren't likely to be new spells and skills.  Rather, we want to fix existing spells and skills that aren't up to snuff with the rest of the class.&lt;br /&gt;&lt;br /&gt;Take for example the 'peace' spell.  This could be a very powerful, useful spell - if only it worked differently.  We're currently imagining room effects, duration effects, and a handful of other options to improve this.&lt;br /&gt;&lt;br /&gt;Another spell that's long been on the todo list is charm.  The current version of charm has basically been dented into the ground to prevent charm armies.  With this update, we're planning to switch it to a control point system similar to necromancers.  This should make charm a lot more useful while at the same time limiting "charmy" problems.&lt;br /&gt;&lt;br /&gt;Other things that could use similar kinds of improvement are turn undead, the ward spells, curses, and the monitor skill.&lt;br /&gt;&lt;br /&gt;All this said, we do plan to add more spells and skills.  So far these hit most of the major groups - character buffs and enhancement, a possible brew skill, some new curses, new damage spells, and a new undead spell.&lt;br /&gt;&lt;br /&gt;The schedule for this is some time in august, about a month after the thief updates of the previous post.  After this, we still have a ton of things to work on, including elemental channeling for mages, god code, and a couple of new character classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1881008915538080547?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1881008915538080547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1881008915538080547' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1881008915538080547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1881008915538080547'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/07/future-plans-clerics.html' title='Future Plans - Clerics'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5794336700756508881</id><published>2011-06-23T07:33:00.000-07:00</published><updated>2011-07-01T09:26:33.331-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='thieves'/><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><title type='text'>Future Plans - Thieves</title><content type='html'>Now that level 35 is installed and running in the game, I figure it's probably a good idea to let everyone know about the game's direction and where we're headed.  Things aren't going to be static; there's a lot of really neat stuff planned out for this year.&lt;br /&gt;&lt;br /&gt;The next major update is scheduled for some time around mid to end of July.  The focus of this update will be the Thief class, which is currently the least played class in terms of high levels, and the &lt;a href="http://alteraeon.com:8080/skills/thief"&gt;class with the fewest skills&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;At a minimum, the thief update will include an entire tree for shadow skills.  I'm not a fan of traditional ninja skills though, so don't expect Naruto style effects.  The basis for the shadow skills will be a type of channeling/synergy with the shadow plane, which has already made itself known with the Guildmaster Assassin in Jo'Kerin.&lt;br /&gt;&lt;br /&gt;Also on the high priority list are a couple of miscellaneous skills ('untanking' in group combat, room analysis out of combat), and updates to lock picking to make it more incremental and less hit or miss.&lt;br /&gt;&lt;br /&gt;For medium priority stuff that might get implemented, we have disguise skills, bribe improvements, and haggling (possibly for bulk purchases.)  My guess is that at least some of this will get into the final build.&lt;br /&gt;&lt;br /&gt;For low priority, we've been mulling over the idea of distraction skills, but the effects are pretty ill defined right now.  We also really need to take a look at the way poison damage is done, to try to make poisons function in a reasonable way.  It's pretty unlikely that either of these will be done for the update.&lt;br /&gt;&lt;br /&gt;That concludes things for the proposed thief update.  Again, we hope to have it out prior to August.  I think it will address a lot of the shortcomings of the thief class, without necessarily making thief into another fighter class with differently named skills.&lt;br /&gt;&lt;br /&gt;Coming up next - clerics get some love too.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5794336700756508881?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5794336700756508881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5794336700756508881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5794336700756508881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5794336700756508881'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/06/future-plans.html' title='Future Plans - Thieves'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3852683102551942130</id><published>2011-04-09T16:33:00.000-07:00</published><updated>2011-04-09T16:35:21.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='areas'/><category scheme='http://www.blogger.com/atom/ns#' term='area announcement'/><title type='text'>Alter Aeon Area Openings</title><content type='html'>Draak and Shadowfax have been working for years on the Naginag Combine, and they've just completed another major expansion to it.  Here is the official announcement, copied from board 8 in-game, from Shadowfax.&lt;br /&gt;&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;I am proud to announce the opening of the city of West Naginag and its sister area, the village of Ooahu.  Usually we open areas with little fanfare, but these areas deserve special mention for a number of reasons.&lt;br /&gt;&lt;br /&gt;Just the sheer amount of effort and time that has been put into this project is remarkable.  Ten years ago, Draak and I came up the concept of the Naginag Combine.  The idea was to build a collection of interrelated areas that were all part of the same empire.  We showed Dentin our plans and released the first Combine area in 2002, what is now Draj and Zin.  In response to the positive feedback about that area, we scheduled more Combine areas to build.  I drew a picture of West Naginag during the summer of 2003.  Now, after nearly eight years, it's finally finished.&lt;br /&gt;&lt;br /&gt;West Naginag and Ooahu are a lynchpin that tie all of the mainland Combine areas together.  We left it for last, but it also took so long to make because I wanted it to be perfect.  Whether you want to immerse yourself in the lore, play through engaging quests, or just get some fame, eq or good xp, these areas should have something for everyone.&lt;br /&gt;&lt;br /&gt;Once again we push the code to the limit, introducing consumables with custom spells, rechargable wands, mobs that make full use of necromancer abilities, "wearable" objects for your inventory, epic quests that unlock the secrets of the region, and a host of other fun little goodies for your enjoyment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3852683102551942130?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3852683102551942130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3852683102551942130' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3852683102551942130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3852683102551942130'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/04/alter-aeon-area-openings.html' title='Alter Aeon Area Openings'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-6868714202351384359</id><published>2011-02-25T08:47:00.000-08:00</published><updated>2011-02-25T08:57:56.340-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><title type='text'>If you do it more than once, write a script...</title><content type='html'>There's a saying often used by Unix System Administrators:  if you're going to do it more than once, write code to do it for you.  For the last few days, I've been writing code to handle clan equipment automatically, so I don't have to be involved.&lt;br /&gt;&lt;br /&gt;This has been a very time-consuming process, so much so that you might be tempted to ask, "if it's going to take so long, why not just do it by hand?"  And indeed, that's tempting.&lt;br /&gt;&lt;br /&gt;But one of the things that has occurred to me writing this code is that clan equipment is simply a complex process.  Every single line of code I've written reflects some check, some detail that I would have had to remember and check manually.  Each of these details is important.  And the odds of me remembering them all when I do it by hand are near zero.&lt;br /&gt;&lt;br /&gt;In short, while doing it by hand would definitely be faster in the short term, it's basically guaranteed to be wrong.  And I've got direct proof of this while I'm looking at the existing clan items - they're spread out across the vnum ranges completely at random, built and set up in different ways by different builders, with some of them violating various constraints and some not.  It's a complete mess.&lt;br /&gt;&lt;br /&gt;That is what 15 years of doing it manually looks like, and that's why I'm not going to allow it to be done manually anymore.  I am replacing myself with a (not so short) set of scripts.  I'm ok with that, because those scripts will do a better job than I would have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6868714202351384359?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6868714202351384359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6868714202351384359' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6868714202351384359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6868714202351384359'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/02/if-you-do-it-more-than-once-write.html' title='If you do it more than once, write a script...'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1970269197308443689</id><published>2011-01-09T16:39:00.001-08:00</published><updated>2011-01-09T17:09:08.430-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Scaling</title><content type='html'>When we released the necromancer expansion back in November, I expected a pretty large spike of new players.  I figured we'd get a bunch of new people from the announcement, but also a lot of high levels would want to try out the new class from scratch to see how it worked.&lt;br /&gt;&lt;br /&gt;And new players we got; perhaps four times as many as usual, which again was about what I expected.  What I didn't expect was that we would be nearly incapable of handling them in terms of areas and content.  There wasn't really any fighting over equipment and quests, but from time to time it seemed newbies literally had to queue up to get their turn at a particular quest item.&lt;br /&gt;&lt;br /&gt;This got me thinking about scaling.  If we can't effectively handle four times the standard newbie load, we'll be limited to a player base less than four times the size of our current one.  And it's not just newbie areas; we have to think about it everywhere, from areas to exp thwacking to the who list to the the size of Ralnoth.  We might not have five hundred people logged in right now, but even if we did the game probably couldn't handle them all.&lt;br /&gt;&lt;br /&gt;Here are some things I think could help with that:&lt;br /&gt;&lt;br /&gt;- Instancing.  Instancing allows you to create private copies of areas for players, so that they don't interfere with each other.  This is great for quests, in that each player or group can be on their own private copy of the quest, and don't need to worry about someone else getting through it first and taking the quest item.  Judicious use of instancing can help eliminate quest bottlenecks, and it makes the world seem a lot bigger than it really is.&lt;br /&gt;&lt;br /&gt;- Gold and experience thwacking.  Right now, gold and experience are thwacked globally, so that if a mob is run too much the returns on it drop for everyone.  This is fundamentally dependent on the number of players; a better way would be to put thwacking on individual players, so that the actions of one player don't break the game for someone else.&lt;br /&gt;&lt;br /&gt;- Item maxload.  Having limited load on items is another thing that's fundamentally dependent on the number of players.  Once the player load rises to a certain level, a maxloaded or rarity-based item will simply never load again.  Maxload and rarity effectively need to be removed to fix this.&lt;br /&gt;&lt;br /&gt;- The who listings, and other display systems.  Having a five hundred person who list would be ridiculous.  Beyond a certain point, you pretty much have to switch to a query system instead of a global listing system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some of this stuff is already in transit or is being worked on; in particular, instancing was booted in earlier this evening and is being tested as we speak.  Maxload for the most part was phased out last week.&lt;br /&gt;&lt;br /&gt;It's a decent start.  One bottleneck at a time...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1970269197308443689?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1970269197308443689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1970269197308443689' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1970269197308443689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1970269197308443689'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2011/01/scaling.html' title='Scaling'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3722197345702548809</id><published>2010-12-30T18:58:00.000-08:00</published><updated>2010-12-30T19:12:38.233-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Spells, skills, and class design</title><content type='html'>One of the things that takes a lot of time is tweaking the spell and skill trees to make the classes more fun to play.  The various factors I have to balance are a lot more restrictive than you might expect:&lt;br /&gt;&lt;br /&gt;1) The spells and skills within each group, for example "mage fire spells", should have proper dependencies.  Greater Fireball should probably be dependent at some level on 'basic fire magics'.&lt;br /&gt;&lt;br /&gt;2) The spells and skills within each group, for example "mage fire spells", should be separated by similar level differences, to spread the group out across a level range.  If there's too much clumping, there's dead zones where you don't get a new spell for a long time, then suddenly get a bunch followed by another dead zone.&lt;br /&gt;&lt;br /&gt;3) Spells and skills for the entire class should be evenly distributed across the entire level range, again to limit dead zones and make sure players have something to learn at every level. Necromancer is a good example of how to do this; every three levels, you get 5-6 spells and skills, from level 1 up to about level 28.  Mage is a good example of how not to do this; there's 6 spells between levels 2-4, 12 spells between levels 12-14, and 4 spells between level 26-28.  Mage is currently very clumpy and needs more work.&lt;br /&gt;&lt;br /&gt;4) Low level spells and skills should be useful and interesting.  Having a spell like 'ventriloquate' below level 10 makes no sense at all; newbies will think it's actually useful (it's not) and waste practices on it.  It's ok to put useless stuff at higher levels, because high level players are more likely to do research before wasting scarce practices on something.&lt;br /&gt;&lt;br /&gt;5) Really high level spells have to actually be useful, even if it's a specialized use.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The above generally result in me spending a lot of time staring at various views of the spell lists for each class.  You have to keep an eye on groupings across level ranges, while making sure you haven't done anything dumb to the dependency trees for each group, and making sure you don't move useless things into the low level ranges.&lt;br /&gt;&lt;br /&gt;And even though it may not seem that way, the above are actually really important.  It seems to give you more to do, and you know that you get important, useful stuff even at low levels.  I've certainly noticed a difference with my characters.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3722197345702548809?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3722197345702548809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3722197345702548809' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3722197345702548809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3722197345702548809'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/12/spells-skills-and-class-design.html' title='Spells, skills, and class design'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-3349268313984554116</id><published>2010-12-25T12:32:00.001-08:00</published><updated>2010-12-25T12:48:35.180-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Christmas Expansion - Update</title><content type='html'>We finally got everything done and installed, and it went off pretty easy.  The biggest hitches were minor display bugs in explorer points, with a few minor typos and what not elsewhere.&lt;br /&gt;&lt;br /&gt;One of the things that surprised me was the time breakdown for the various spells and skills.  We only added 12 of them this time; here's a rough time estimate for each.&lt;br /&gt;&lt;br /&gt;Level 25 mage skill 'melt' - approximately 6 hours.  This skill was in multiple pieces, as it can operate on multiple targets.  Not much debugging time required.&lt;br /&gt;&lt;br /&gt;Level 27 mage skill 'spell lore' - approximately 1 hour.  This was a very easy hook into the spellcasting code.&lt;br /&gt;&lt;br /&gt;Level 6 cleric spell 'faith shield' - approximately 4 hours, most of it testing and design, trying to figure out how to not break anything.&lt;br /&gt;&lt;br /&gt;Level 31 cleric spell 'breath of life' - approximately 5 hours.  Required several debug passes to get the math right, largely because I wrote the core of it while I was very tired.&lt;br /&gt;&lt;br /&gt;Level 33 cleric spell 'area heal' - approximately 2 hours, because this reused a lot of well-done code from 'area refresh'.&lt;br /&gt;&lt;br /&gt;Level 34 cleric spell 'astral bridge' - approximately 16 hours.  The spell itself only took about two hours, but before I could implement it I had to completely rework the waypoint code.  Refactoring and updating the old code took the bulk of the time, and it broke waypoints for a lot of players.&lt;br /&gt;&lt;br /&gt;Level 32 cleric spell 'group waypoint' - approximately 2 hours, because the astral bridge and other waypoint code was already in place.&lt;br /&gt;&lt;br /&gt;Level 8 thief skill 'listen' - approximately 4 hours.&lt;br /&gt;&lt;br /&gt;Level 29 thief skill 'fast talking' - approximately 3 hours, had to come back and extend its use into other thief skills that didn't have the facility before.&lt;br /&gt;&lt;br /&gt;Level 26 warrior skill 'cleave' - approximately 5 hours.  Ran into an irritating bug where cleave would cause a death which would cause an autocleave which could cause a death which could cause an autocleave...&lt;br /&gt;&lt;br /&gt;Level 32 warrior skill 'whirlwind' - approximately 3 hours.  The event handler for this was very straightforward.&lt;br /&gt;&lt;br /&gt;Level 8 necromancer spell 'bone blade' - approximately 2 hours.&lt;br /&gt;&lt;br /&gt;Explorer points - about 10 hours.  This had a lot of hooks for display and interfacing, which usually takes a lot of time.  Multiple debug passes.&lt;br /&gt;&lt;br /&gt;Various achievements - about ten minutes each when done in groups.&lt;br /&gt;&lt;br /&gt;There was also a lot of infrastructure and other work that went on to enable all this; between bug fixes, infrastructure, and design, the times above are perhaps a third of the total.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3349268313984554116?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3349268313984554116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3349268313984554116' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3349268313984554116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3349268313984554116'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/12/christmas-expansion-update.html' title='Christmas Expansion - Update'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3034590277411104797</id><published>2010-12-21T10:01:00.000-08:00</published><updated>2010-12-21T10:12:46.836-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><title type='text'>Alter Aeon Christmas Event</title><content type='html'>Every year for Christmas (and for a bunch of other holidays), we do something special.  Usually this amounts to in-game events to open new areas, or for special prizes, things of that nature.  This year, in addition to the usual things, we'll also be adding something else:  a bunch of new code.&lt;br /&gt;&lt;br /&gt;For each of the five classes, we'll be adding a few new spells and/or skills.  A lot of this stuff is high level, but it's also focused more strongly in some classes than others.  Cleric is probably the class that benefits the most, but it's also been the class with the least amount of scaling.  Necromancer doesn't get much new stuff, but it does get a few critical reworks of existing spells and skills that didn't work out as designed.&lt;br /&gt;&lt;br /&gt;Adding new spells and skills like this is always a hassle.  Coming up with new stuff is hard, because it has to be useful, interesting, and above all preserve the physics/theme of the game.  There's no point in just adding a bunch of lookalike damage spells that are successively more powerful.&lt;br /&gt;&lt;br /&gt;There's also the problem of integrating new things into the existing spell and skill trees.  One of the major things about this release is that there's been a lot of reworking of the spell and skill trees for the various classes.  Thief, warrior, and cleric have all seen pretty significant changes to their skill groups, primarily to make space for the new additions.&lt;br /&gt;&lt;br /&gt;There are a few other things I'll mention, such as new achievements, but since we're keeping the actual spells and skills under wraps until Christmas morning, I'll stop here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3034590277411104797?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3034590277411104797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3034590277411104797' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3034590277411104797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3034590277411104797'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/12/alter-aeon-christmas-event.html' title='Alter Aeon Christmas Event'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8238294050026600167</id><published>2010-11-03T08:11:00.000-07:00</published><updated>2010-11-03T08:17:49.649-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='necromancers'/><category scheme='http://www.blogger.com/atom/ns#' term='forum'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Alter Aeon Necromancer Class</title><content type='html'>There's been a lot of talk on this blog and the &lt;a href="http://www.alteraeon.com/forum"&gt;Alter Aeon Forums&lt;/a&gt; about a new Necromancer class.  Official work on it started about a year and a half ago, and up until about three months ago pretty much everything that was done was under-the-covers structural stuff.&lt;br /&gt;&lt;br /&gt;Once all the infrastructure was in place, I started hitting spells and skills really hard.  In the last three months I've implemented about 50 new spells and skills, some with rather exotic (compared to other spells and skills) features.&lt;br /&gt;&lt;br /&gt;And finally, two days ago, the first ever Alter Aeon class expansion was officially unveiled.  Necromancer is now live on AA!&lt;br /&gt;&lt;br /&gt;Some of the available spell and skill groups for necromancers involve:&lt;br /&gt;&lt;br /&gt;- creating animated entities of various sorts&lt;br /&gt;- raising your own undead&lt;br /&gt;- summoning demons for fun and profit&lt;br /&gt;- using dragon teeth as powerful spell components&lt;br /&gt;- blood skills involving your own blood&lt;br /&gt;- controlling undead and demons&lt;br /&gt;- soulsteal and other spirit-based spells&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;As always, a full spell at skill list can be found on the &lt;a href="http://alteraeon.com:8080/spells/necr"&gt;Alter Aeon Spells and Skills&lt;/a&gt; pages.&lt;br /&gt;&lt;br /&gt;One of the crowning features of the new class is the minion system, which allows high level necromancers to create and manage several minions at once.&lt;br /&gt;&lt;br /&gt;The class plays very differently from any of the others, and is looking like a great addition to the game.  There's definitely still some balancing issues remaining, but for now it's looking extremely solid.  Further, it's downright fun for me to play.  I wish I had more time to do so.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8238294050026600167?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8238294050026600167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8238294050026600167' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8238294050026600167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8238294050026600167'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/11/alter-aeon-necromancer-class.html' title='Alter Aeon Necromancer Class'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2677359770612156705</id><published>2010-10-21T07:02:00.000-07:00</published><updated>2010-10-21T07:19:40.013-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='player guides'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>We're Famous!</title><content type='html'>Ok, not entirely famous, but it's a start.  We have our first reviewed and edited article on an external web site:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.brighthub.com/video-games/mmo/articles/91510.aspx"&gt;Mudding Communities Are Alive and Well in Alter Aeon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The site &lt;a href="http://www.brighthub.com"&gt;BrightHub&lt;/a&gt; is a large site with articles about nearly everything, and people who act as dedicated editors to make sure that articles pass a minimum sanity check before being posted.&lt;br /&gt;&lt;br /&gt;This is important because articles like this can be used to bolster notability in Wikipedia, and get AA out there to a much larger audience.  Stop by and take a look, and spread the word if you've got any friends that might be interested!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2677359770612156705?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2677359770612156705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2677359770612156705' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2677359770612156705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2677359770612156705'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/10/were-famous.html' title='We&apos;re Famous!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8777345288291800331</id><published>2010-10-03T17:02:00.000-07:00</published><updated>2010-10-03T17:13:37.921-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Necromancer Class Open Beta</title><content type='html'>The necromancer class is officially in beta test on alteraeon.com, port 4000.  There's basically no rules on this port, other than to respect others, and give testing priority over anything else.  So if someone's trying to run a real test, don't screw with them.  One additional note:  pk balance is completely off, and I have no intention of fixing it until the mob balance is halfway sane.  Don't submit bug reports having to do with pk balance issues.&lt;br /&gt;&lt;br /&gt;Pretty much everything is implemented except for the Demonlore skill tree, and what I'd call four problem spells/skills:&lt;br /&gt;&lt;br /&gt;Lvl 16  consumption&lt;br /&gt;Lvl 16  bone wall - already have wall spells&lt;br /&gt;Lvl 21  flesh wall - already have wall spells&lt;br /&gt;Lvl 27  skeletal dragon - already have craploads of minions&lt;br /&gt;&lt;br /&gt;Consumption was supposed to be some kind of corpse eating thing to recharge your undead, but so far with the way they're working out that doesn't make much sense.  The wall spells are really problematic, as I have to come up with something very different from icewall for them to make sense.  And for skeletal dragon, well, the last thing we need is an even more powerful minion.&lt;br /&gt;&lt;br /&gt;The Demonlore tree is problematic because I can't really see any interesting way to make it different from the 'Raised Undead' skill tree.  The both create various minions, using control and soulstones, and have the same kinds of skills.  I really hesitate to just make a skill tree that's effectively a different mob type copy of some existing tree.&lt;br /&gt;&lt;br /&gt;Beyond that, things appear to be going well.  The class seems to be quite a bit too powerful for now, but at the same time all the testers are five-class level 33, so perhaps I'm seeing a side effect of that.  I think in the long run, the only real way to get legitimate test data is to boot in the code and see what people do with it for real.&lt;br /&gt;&lt;br /&gt;One thing I am really surprised about is just how terrible most people are at testing.  I have one tester that typically sends me 20 messages overnight with comments and questions about the class; the remainder have yet to send me 20 questions total for the entire time the port has been open.&lt;br /&gt;&lt;br /&gt;As a result of this, I probably need to rethink my beta testing strategy.  Maybe the thing to do is to autoupdate everyone on login so that their levels come out in some mangled, pre-determined format; for example 32/27/22/17/12, with the classes picked at random.  I think having everyone be 5x33 just leads to people seeing what it's like to have that many levels.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8777345288291800331?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8777345288291800331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8777345288291800331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8777345288291800331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8777345288291800331'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/10/necromancer-class-open-beta.html' title='Necromancer Class Open Beta'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1398178213440605943</id><published>2010-09-14T06:25:00.000-07:00</published><updated>2010-09-14T10:35:50.650-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='potions'/><category scheme='http://www.blogger.com/atom/ns#' term='brewing'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Potions and Herbs and Spells oh my</title><content type='html'>After what feels like more than a decade, we've finally updated the system for brewing potions.  The old system was pretty hard to deal with from a code standpoint, and didn't give builders a lot of options.  From a player standpoint, the old system didn't really allow for invention or thinking about your potions.&lt;br /&gt;&lt;br /&gt;The new system changes that by adding affinities for ingredients, where different spell components are more likely to brew particular spells or spell groups.  Players get the ability to actually influence what comes out of the brew, as do builders who can set those affinities if they want.&lt;br /&gt;&lt;br /&gt;The new code also uses a staged algorithm for the PRNG such that I can add and remove things chunks of the algorithm without causing major damage.  We can also tweak the probabilities on specific brews and components now if necessary.&lt;br /&gt;&lt;br /&gt;As with any change, there's been some complaining about this, but it's largely been well received.  It helps that there's information about how the new system works; I updated the brewing article on the AA articles page with a bunch of new information.  Here's the link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/articles/the-art-of-alchemy.html"&gt;The Art of Alchemy&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;People have managed to brew quite a few interesting things so far.  You can find the list of public potions brews as the &lt;a href="http://alteraeon.com:8080/potions"&gt;Alter Aeon Potion Recipes&lt;/a&gt; web page.&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1398178213440605943?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1398178213440605943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1398178213440605943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1398178213440605943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1398178213440605943'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/09/potions-and-herbs-and-spells-oh-my.html' title='Potions and Herbs and Spells oh my'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-6026254899031055349</id><published>2010-08-04T08:53:00.001-07:00</published><updated>2010-09-14T06:58:41.737-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fanfic'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>The accidental fanfic</title><content type='html'>I've been working on the next stage of the newbie quests for the island of Kordan, and one of my major stumbling blocks has been explaining exactly why another stage exists.  The general theme with this sort of thing is that there's a continuous storyline as you progress from one quest to another; you work your way deeper into the conspiracy to take over the world (or whatever), and ultimately emerge the hero.&lt;br /&gt;&lt;br /&gt;The problem was, I didn't have any such story or conspiracy constructed, and wasn't feeling particularly inspired.  So, I decided to try something new.  I sat down and wrote some crap.&lt;br /&gt;&lt;br /&gt;It turns out that my crap looks like a pretty decent, if dry, story.  I accidentally created my first piece of fanfic!&lt;br /&gt;&lt;br /&gt;I've posted it on the &lt;a href="http://www.alteraeon.com/fanfic"&gt;Alter Aeon Fan Fiction&lt;/a&gt; page and added a section for myself.  The direct url is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/fanfic/dentin_-_qoorik.html"&gt;Plans and Portents - the Story of Qoorik&lt;/a&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6026254899031055349?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6026254899031055349/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6026254899031055349' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6026254899031055349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6026254899031055349'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/08/accidental-fanfic.html' title='The accidental fanfic'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3803103616974431898</id><published>2010-06-25T11:08:00.000-07:00</published><updated>2010-06-25T11:23:53.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='classes'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Miscellaneous</title><content type='html'>It's been a long time since I updated here; I'd like to say that I've been busy working on things instead, but while I've been busy it seems little of it relates to Alter Aeon.&lt;br /&gt;&lt;br /&gt;The first reason for this post is the mapper.  I've built new area maps for the web pages!  You can find these at the standard &lt;a href="http://www.alteraeon.com/maps"&gt;Alter Aeon Maps&lt;/a&gt; location.  These maps include the level of areas, as well as a number of new areas that have been added in the last six months.&lt;br /&gt;&lt;br /&gt;Speaking of new areas, we've had an awful lot of stuff come online in the last six months.  It would probably have been more if I'd get off my can and worked on the west continent and the demon city of Qoorik.&lt;br /&gt;&lt;br /&gt;Lastly, the necromancer class and skillset continues to make its slow and steady progress.  I've got the spell and skill trees set up in what I think will make a good, solid class.  Honestly, it's far better laid out than any of the other classes are; all the skill trees make sense (to me at least), the level spreads look good, and it's largely new techniques and behaviour.  There's a lot of use of charmies and mob armies.&lt;br /&gt;&lt;br /&gt;I'm stealing a handful of spells and skills from other classes though.  Cleric will lose demon lore and probably undead lore as well as durhams, preservation, and animate corpse.  Mage on the other hand, will lose fear and possession.  Not huge losses, but enough that I'll have to do some grandfathering.&lt;br /&gt;&lt;br /&gt;One thing that does concern me is the upcoming druid class split, scheduled for after necromancer.  My current vision of druid has sky/water/earth skill trees, which may serve to simply gut cleric in regard to offensive capability.  I'll probably have to rework these simultaneously, and it won't be pretty.  It may be possible for me to steal more stuff from mage to compensate.  I don't know yet.&lt;br /&gt;&lt;br /&gt;Farther down the line is paladin, which I'd intended to be a specialized cross between warrior and cleric; basically a fanatic nutjob fighter with a direct line to his god.  I'm not sure I can come up with enough stuff to make this a sane, standalone class.&lt;br /&gt;&lt;br /&gt;My final goal is 8 classes, but there simply may not be enough variation in the game world to support it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3803103616974431898?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3803103616974431898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3803103616974431898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3803103616974431898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3803103616974431898'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/06/miscellaneous.html' title='Miscellaneous'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8446166786095892833</id><published>2010-04-28T20:38:00.000-07:00</published><updated>2010-04-28T21:00:41.345-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eq'/><category scheme='http://www.blogger.com/atom/ns#' term='composite'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>Objects - followup</title><content type='html'>For reasons unrelated to the previous post, I ended up doing a lot of object work in the last couple of days.  I discovered that the linkages between rarity, and the bind/artifact/rare flags were not just overly complex, but in some cases really inappropriate.  It took several hours and multiple tries to work out all the details, and we now have a much better rating system for flags and rarity.&lt;br /&gt;&lt;br /&gt;The general summary is that binding is much weaker, artifact and rare are stronger, you get an extra artifact per rack, and rarity is being deprecated.&lt;br /&gt;&lt;br /&gt;Rarity I was the most surprised about; there were literally thousands of objects with rarity on the game.  I wrote a function to remove it from everything that didn't strictly need it; this cut the number down to under a thousand.  It's still a useful mechanic to have on certain special items, but having it on this many of them really doesn't seem appropriate.  Rarity will also be a major issue with a larger player base, and we need to use a new mechanic for a lot of these things.&lt;br /&gt;&lt;br /&gt;Weakening the bind flag caused issues with a lot of equipment that was built to take advantage of binding.  A good chunk of it was in newbie areas, where I myself used it to get fairly powerful equipment to low levels.  On the other hand, a lot of the other binding objects were problem objects that needed to be adjusted anyway.  We've had a problem with bind flag overuse for a while now, and this helps address that.&lt;br /&gt;&lt;br /&gt;The addition of another artifact flag is a major change, but it comes with a caveat:  one artifact flag has to be bound, while the other must be unbound.  A similar restriction is in place for rare flagged items.&lt;br /&gt;&lt;br /&gt;This seems to be a really interesting idea.  The bound objects are slightly more powerful but cannot be sold; the unbound objects can be sold and will serve to keep the equipment market functional.  The fact that builders must build both bound and unbound equipment should help with equipment diversity and address some of the concerns that players have about "everything becoming bound".&lt;br /&gt;&lt;br /&gt;All in all, I've been getting a lot of positive feedback on it.  I know it's inconvenient for builders to update things (I make a point of it to personally take my share of pain from the older areas), but so far the consensus seems to be that it's worth it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8446166786095892833?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8446166786095892833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8446166786095892833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8446166786095892833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8446166786095892833'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/04/objects-followup.html' title='Objects - followup'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4988935447511280374</id><published>2010-04-19T09:39:00.000-07:00</published><updated>2010-04-19T09:49:16.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='composite'/><category scheme='http://www.blogger.com/atom/ns#' term='objects'/><category scheme='http://www.blogger.com/atom/ns#' term='randoms'/><title type='text'>Objects - rarity and timers - TL/DR</title><content type='html'>There are several different types of 'powerful' objects, with various limitations, that can be built on Alter Aeon:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rarity based&lt;/b&gt;:  Only a certain number of the item can be on the game at once. The limit is a long term (multiple week) average, so there may be none or there may be a lot of them on at any given time.  If the long term average is too high, the item stops loading.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Binding&lt;/b&gt;:  The object binds to whoever picks it up, preventing trading and selling. There are usually a low number of these per zone, between 0 and 3.  The building code warns if there are too many of this in any given zone.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Artifact&lt;/b&gt;:  One artifact is allowed per zone.  Artifacts can be much more powerful than normal equipment.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rare&lt;/b&gt;:  Two rare items are allowed per zone.  Rare items can be a bit more powerful than normal equipment.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Timered&lt;/b&gt;:  The item has a timer and will at some point self destruct.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each of these four classes can be more powerful than normal equipment, and as names like 'artifact' suggest, sometimes they can be very much more powerful.  Some of these different classes interact with each other, making the calculations and code messy; for example, Rarity and Binding contribute to make Artifacts more powerful, but only to an extent.&lt;br /&gt;&lt;br /&gt;This complexity in itself is problematic, but there are two other major issues to consider as well:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Rarity based&lt;/b&gt;:  For any 'good' and useful piece of rarity equipment, it is obtained repeatedly until it is well past its loading limit.  If the item is also Binding, it can't be traded and eventually it begins loading again as players stop playing the game.  If it's not Binding, players trade occasionally (one or two trades per year) for the few pieces that exist, and it never loads again.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Timered&lt;/b&gt;:  Noone will ever use the item.  If it's not permanent, people aren't interested.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Rarity doesn't make any sense if all it does is give a small number of players a monopoly on an item; for them it's not rare, it's just a part of their set that noone else can ever get.  For everyone else, it's so rare as to be impossible to obtain.&lt;br /&gt;&lt;br /&gt;Timers on the other hand are the opposite end of the spectrum.  Regardless of how good it is, people won't use it if it's timered.  There seems to be some small exception for this with timered enchanted equipment, but I suspect this is because the timers are really long and the equipment doesn't self destruct when the enchant wears off.&lt;br /&gt;&lt;br /&gt;Timers are of course, the obvious natural mechanic for controlling rarity based equipment. If something is limited load, simply make its duration in-game finite.  This would guarantee turnover and make the item available to more people.&lt;br /&gt;&lt;br /&gt;One final thing to consider is the way that timers currently work:  they're not based on real time, but rather some amount of game time.  You get an item, and you know it'll time out after you've used it for a while, but you never quite know when without checking it each time.  If you log off for a week, you're likely to forget about it and suddenly find an important item vanishing unexpectedly in the middle of a battle.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;This leads to one possible improvement:  RL timered equipment.  You have something, but you know exactly how long you have it for.  Having something say "This will expire at Mon Apr 19 11:33:15 2010" is very different than having it say "This item will last for two RL days of game time, which could be two months from now if you don't play very often".  It also has a built-in sense of rarity attached to it.&lt;br /&gt;&lt;br /&gt;I like it.&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4988935447511280374?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4988935447511280374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4988935447511280374' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4988935447511280374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4988935447511280374'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/04/objects-rarity-and-timers-tldr.html' title='Objects - rarity and timers - TL/DR'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1078000715661328726</id><published>2010-04-16T15:27:00.000-07:00</published><updated>2010-04-16T15:34:47.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>Myspace</title><content type='html'>Today, I did the unthinkable:  I constructed a myspace page.  I suppose technically, I had already done that with my personal page last year; but in reality it was simply the bare minimum login and I had done nothing at all to it since it was created.&lt;br /&gt;&lt;br /&gt;I really have to hand it to the myspace developers; they've created one of the single most dysfunctional, hard to use, and unconfigurable interfaces I've ever seen that still happens to mostly work.  It reminds me a lot of Gimp.&lt;br /&gt;&lt;br /&gt;Actually, Gimp is worse.  But not by much.&lt;br /&gt;&lt;br /&gt;At any rate, if you still have a MySpace account, feel free to add us!  Our myspace URL is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.myspace.com/alter_aeon"&gt;http://www.myspace.com/alter_aeon&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1078000715661328726?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1078000715661328726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1078000715661328726' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1078000715661328726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1078000715661328726'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/04/myspace.html' title='Myspace'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-922045470803818124</id><published>2010-04-13T12:05:00.000-07:00</published><updated>2010-04-13T12:16:52.767-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='complexity limits'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><title type='text'>Dprocs</title><content type='html'>We have a rather interesting interpreted language in-game that can be used to perform actions on a handful of triggers; an example might be to add an arbitrary 'use' function to an object.  As an example of this, I once built a vacuum cleaner object which could be used to suck up pretty much anything you pointed it at.  Sucked up things ended up inside the vacuum.&lt;br /&gt;&lt;br /&gt;One drawback of this language is that it didn't have any concept of global data.  I added that feature today, using a surprisingly small amount of code.&lt;br /&gt;&lt;br /&gt;A surprisingly small amount of code that took me about three hours to write.&lt;br /&gt;&lt;br /&gt;Once again, software complexity rears its ugly head.  I actually made two false starts on this problem, each of which I had to back out before finally getting a minimal solution to it.  The interpreter isn't really that complicated or large by any real programming standard, but it's still larger and more complicated than I could easily wrap my brain around.&lt;br /&gt;&lt;br /&gt;It took about two hours to really figure out the best way to handle it, then about an hour to implement it.  Most of that time was just trying to understand what was already there and how it all worked.  And this is code I wrote!&lt;br /&gt;&lt;br /&gt;On the plus side, my actual implementation, when I finished, had 2 bugs in it, both trivial.  It's good to know that thorough understanding up front does in fact result in far fewer mistakes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-922045470803818124?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/922045470803818124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=922045470803818124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/922045470803818124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/922045470803818124'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/04/dprocs.html' title='Dprocs'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-7366550747814067759</id><published>2010-04-06T20:24:00.000-07:00</published><updated>2010-04-06T20:37:53.024-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='assholes'/><title type='text'>Leading by Leading</title><content type='html'>If there's one thing I've learned over the years, it's that public debate about radical new game features is seldom a good thing.  It's not the players don't have good ideas; it's that vocal minority groups serve to deadlock and kill otherwise good ideas.&lt;br /&gt;&lt;br /&gt;This reminds me of the Knesset in Israel.  They have so many fanatic fringe groups that it's virtually impossible to get anything done.&lt;br /&gt;&lt;br /&gt;On March 16, I globally removed and disabled permanent player killing.  I didn't post about it, I didn't request for comments; I simply did it, and waited for the fallout.&lt;br /&gt;&lt;br /&gt;There wasn't any.  Or rather, the people who would have made a big deal of it were unable to do so - there was no way to invoke righteous indignation from the population by blowing things out of proportion.  Propaganda doesn't work when people can try it for themselves and say, "no, that's not true".&lt;br /&gt;&lt;br /&gt;The next day, I changed the way magic resistance works for players.  I've been wanting to do this for over a decade, but never felt like it would be appropriate.  Fallout level?  Again, very little.  Again, largely because the bullshit espoused by the vocal minority was quickly killed by players simply trying things for themselves.&lt;br /&gt;&lt;br /&gt;I like this idea of leading by leading instead of leading by consensus.  Decide what to do, make it happen, just be prepared to clean up the mess afterward.  It's not that I'll never mess up, but it's definitely easier to apologize and fix it than to debate it up front.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7366550747814067759?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7366550747814067759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7366550747814067759' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7366550747814067759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7366550747814067759'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/04/leading-by-leading.html' title='Leading by Leading'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-5039837620896467877</id><published>2010-03-16T14:42:00.000-07:00</published><updated>2010-03-16T15:01:05.011-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>More Clienty Goodness</title><content type='html'>Since I've posted last, I've released two versions of the Alter Aeon client, with a host of improvements and new functionality.  A lot of this has been layout and theme changes, but there's also a more substantial newbie mode and other feature updates.  I even managed to get a primitive mouseover compass working in the automap!&lt;br /&gt;&lt;br /&gt;Here's a screenshot of what the new interface can do and looks like:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/screenshots/alter-aeon-100316.png"&gt;&lt;img src="http://www.alteraeon.com/screenshots/alter-aeon-100316-thumb.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;(Note - this is the X/FVWM/GTK version of the client, so the window decorations around the outside will look a bit different from the Windows version.)&lt;br /&gt;&lt;br /&gt;We've got a lot of other improvements coming in later versions, but now it's time to get back to work on game mechanics.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5039837620896467877?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5039837620896467877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5039837620896467877' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5039837620896467877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5039837620896467877'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/03/more-clienty-goodness.html' title='More Clienty Goodness'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5377280489733112112</id><published>2010-01-08T20:17:00.000-08:00</published><updated>2010-01-08T20:34:49.216-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><category scheme='http://www.blogger.com/atom/ns#' term='year in review'/><title type='text'>Welcome to the new year!</title><content type='html'>Alter Aeon has survived yet another year, and while there have been a lot of ups and downs overall things are looking pretty positive.  We've put a lot of work into making the game accessible, more playable, and more fun - and it's really starting to pay off.  I've gone back to playing AA in my spare time for fun; that's something I haven't really done regularly in over a decade.&lt;br /&gt;&lt;br /&gt;I've posted a very large '&lt;a href="http://www.alteraeon.com/articles/2009_year_in_review.html"&gt;2009 year in review&lt;/a&gt;' article on the &lt;a href="http://www.alteraeon.com"&gt;Alter Aeon Website&lt;/a&gt;.  This took me several hours to put together, from both the postings here on this blog as well as going through the entire coding changelog for the last year.&lt;br /&gt;&lt;br /&gt;Naturally, the things I found important and worth talking about come from a very biased, immortal based perspective.  Fortunately, one of our more vocal players, &lt;a href="http://alteraeon.com:8080/players/subtle"&gt;Subtle&lt;/a&gt;, wrote up and posted his own &lt;a href="http://www.alteraeon.com/articles/2009_year_in_review_subtle.html"&gt;player-centric year in review&lt;/a&gt;.  I wish more mortals would do this; I think it's really cool to have a permanent record, even if it's not a feel-good propaganda piece.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5377280489733112112?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5377280489733112112/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5377280489733112112' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5377280489733112112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5377280489733112112'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2010/01/welcome-to-new-year.html' title='Welcome to the new year!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-6423647749777140425</id><published>2009-12-22T18:00:00.000-08:00</published><updated>2009-12-22T18:08:42.625-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><title type='text'>New Maps Available!</title><content type='html'>I finally got the server to generate what I consider an acceptable quality map from the live game data.  These maps show a rough outline of where areas are, with lines for roads, trails, and rivers, and area fill for water.  I'm actually really proud of these - a year ago I wouldn't have really thought this possible.&lt;br /&gt;&lt;br /&gt;This would pretty much have been impossible without all the mapping work that has been going on, but that mapping work couldn't have been done without previous versions of the mapper.  Either way, things are looking pretty good these days.&lt;br /&gt;&lt;br /&gt;You can find the new maps listed as 'trade route' maps on the main maps page:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/maps"&gt;http://www.alteraeon.com/maps&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Or, see these links for individual map pages of &lt;a href="http://www.alteraeon.com/maps/map_sloe_armap.html"&gt;Sloe&lt;/a&gt;, &lt;a href="http://www.alteraeon.com/maps/map_kordan_armap.html"&gt;Kordan&lt;/a&gt;, and &lt;a href="http://www.alteraeon.com/maps/map_archais_armap.html"&gt;Archais&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6423647749777140425?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6423647749777140425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6423647749777140425' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6423647749777140425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6423647749777140425'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/12/new-maps-available.html' title='New Maps Available!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-1252772499935366662</id><published>2009-12-21T12:33:00.001-08:00</published><updated>2009-12-21T12:46:43.732-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='groups'/><category scheme='http://www.blogger.com/atom/ns#' term='prng'/><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='who list'/><title type='text'>Various updates</title><content type='html'>It's been a while since I posted, so I thought I would just drop a general overview of what's been going on in the last couple of weeks.&lt;br /&gt;&lt;br /&gt;The largest major change, at least in terms of useful functionality, has been updates to the grouping code.  I've been playing a lot, and I've noticed that putting together groups is a lot harder than it really should be.  This is a social game, after all.  Getting people together into fun, functional groups is part of the process.&lt;br /&gt;&lt;br /&gt;After that are changes to the who listings.  I quickly prototyped a 'who idle' command on request, but within about five minutes of first using it I was in love.  I ended up adding a bunch of who list configuration switches; see 'set who' for options and status.  You can now change from the default who display to idle time based, list short or long form, and enable or disable microlevels and titles.  I haven't even gotten any complaints about it.&lt;br /&gt;&lt;br /&gt;One big yet unobvious change had to do with the PRNG (pseudo random number generator) upon which the game is based.  For quite some time now, I've been using a pretty fast lagged fibbonacci generator instead of a linear congruential.  On a whim, I downloaded the diehard PRNG tests and tried them out.  As expected, the old random number generator failed a lot of them horribly.&lt;br /&gt;&lt;br /&gt;So, I ripped the old one out and put in a new one that does actually pass the tests.  Other than monster lore sends changing, noone will ever notice - and I can rest slightly more assured that there's not hidden correlations lurking in my generator that are causing weird behavior.&lt;br /&gt;&lt;br /&gt;Last on the list of big ticket things is, of course, mapper updates.  We've got global area maps that are almost ready for general public display.  I'd really like to have oceanography working first, so maybe I'll work on that a bit tonight.&lt;br /&gt;&lt;br /&gt;All in all, a lot more getting done than I expected.  It's been a good week.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1252772499935366662?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1252772499935366662/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1252772499935366662' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1252772499935366662'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1252772499935366662'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/12/various-updates.html' title='Various updates'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3570963008089460456</id><published>2009-12-12T08:29:00.000-08:00</published><updated>2009-12-12T08:34:09.151-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gold'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>New Alter Aeon Article</title><content type='html'>People sometimes send me articles for the web site, and sometimes those articles get lost.  I recently found one in my mailbox from somewhere around April.  Without any further ado, I present:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/articles/how_do_i_get_gold.html"&gt;Morpheus' Guide to Running and Finding Gold&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This newbie-level article talks about the basic ways to get gold in the game, and gives things for new players to do that will help them acquire enough gold in game for the occasional purchase.  It also touches on trading with other players, which is usually where the large transactions take place.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3570963008089460456?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3570963008089460456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3570963008089460456' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3570963008089460456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3570963008089460456'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/12/new-alter-aeon-article.html' title='New Alter Aeon Article'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1959688133792136270</id><published>2009-12-04T11:17:00.001-08:00</published><updated>2009-12-04T11:20:11.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>New DClient release</title><content type='html'>Version 0.983 is out.  This is mostly a bugfix/maintenance release:&lt;br /&gt;&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;The center direction/scan button now does a customized scan/look.&lt;br /&gt;Function key presses now release scroll lock.&lt;br /&gt;The 'you are here' diamond in the automap is now thicker.&lt;br /&gt;Add 'mini status bar' menu option to allow hpbar above input window.&lt;br /&gt;Minor updates to group status bar look.&lt;br /&gt;The vote menu can now be updated from the server.&lt;br /&gt;Added 'check for updates' option under 'help' menu.&lt;br /&gt;Minor improvements to url clicking in the main window.&lt;br /&gt;Improve road and trail display in the automap.&lt;br /&gt;More fixes to 'disappearing text' bug in input window.&lt;br /&gt;&lt;br /&gt;----------------&lt;br /&gt;&lt;br /&gt;As always, it can be downloaded from the &lt;a href="http://www.alteraeon.com"&gt;Official Alter Aeon Website&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1959688133792136270?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1959688133792136270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1959688133792136270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1959688133792136270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1959688133792136270'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/12/new-dclient-release.html' title='New DClient release'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4511051891483666513</id><published>2009-12-01T20:54:00.000-08:00</published><updated>2009-12-01T21:03:58.680-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='sound'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Weeds, heading off into them</title><content type='html'>I've been on a big DClient kick the last few days, with intent to get a new 0.983 release out probably by this weekend, and a 1.0 'official' release by January.  I'd managed to pare down the feature list and clean up a number of niggling bugs.&lt;br /&gt;&lt;br /&gt;This morning when I woke up, I knew I wanted to do DClient work.  But I couldn't quite recall what I was supposed to work on, and before I could look it up my brain spotted a nice looking patch of weeds and headed into them, full steam ahead.&lt;br /&gt;&lt;br /&gt;Instead of working on the newbie 'demo mode' of the client, I somehow ended up working on audio.  I've been avoiding sound and audio for months now, yet for some reason I decided today was a good day to do it.  It took me about four hours, but I've got audio working on my Linux dev machine, and I implemented a full mixing stack as well to allow an arbitrary number of sounds to play simultaneously.&lt;br /&gt;&lt;br /&gt;The only problem is, now that I can play audio, what do I do with it?  The initial implementation pretty much only does one thing:  it plays a short algorithmically generated 'click' whenever a command is sent to the server.  While great for testing, it doesn't really add to the gameplay experience.&lt;br /&gt;&lt;br /&gt;Now I have to find both ambient background music as well as triggered audio samples for various events.  I'll also have to get the audio layer working on Windows, which could take anywhere from a couple of hours to several days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4511051891483666513?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4511051891483666513/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4511051891483666513' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4511051891483666513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4511051891483666513'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/12/weeds-heading-off-into-them.html' title='Weeds, heading off into them'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3278866571541204042</id><published>2009-11-28T08:00:00.000-08:00</published><updated>2009-11-28T08:35:28.414-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='automapper'/><title type='text'>Global mapping - a story of invention</title><content type='html'>When I first started this mapping project, my goals were grandiose.  I had a vision of the dclient showing a very high level map with the location of cities and perhaps roads between them, updating a small amount in real time as you walked from place to place.&lt;br /&gt;&lt;br /&gt;This large vision seemed so close, and yet so far - while easy in principle, the biggest issue was in generating the maps.  Mud areas in general do not have to respect linearity.  You can arbitrarily connect any room to any other room; in short, generating a cartesian, mappable layout becomes a builder constraint, not a tool constraint.&lt;br /&gt;&lt;br /&gt;When faced with 20k rooms of previously built nonlinear content, the task seemed ridiculous and daunting.  Initially, I tried piecemeal mapping:  each area would have an internal, generated layout, and we'd try to move them around like puzzle pieces to get everything to fit.  This didn't really work that well, but some new mapping tools were built and I was able to collect a lot more data.&lt;br /&gt;&lt;br /&gt;The next idea was to try a form of annealing, where rooms would update their x/y/z coordinates based on what rooms they were connected to.  This worked slightly better, in that it tended to smooth out big gaps and it forced areas to fit in places they didn't before.  But it had the drawback of taking a very long time to settle, and it still didn't deal with nonlinearities.&lt;br /&gt;&lt;br /&gt;Around this time, the idea of the big/small room distinction came about.  Cities on maps are generally very small compared to the surrounding landscape; in Alter Aeon, this was definitely not true.  The main city of Ralnoth was easily half as long as the Great Southern Road.  I decided to declare cities, towns, buildings and other terrain as 'much smaller' than outdoor/wilderness/linkage areas.&lt;br /&gt;&lt;br /&gt;This big/small transition appeared to work very well on the few initial areas I tried it on.  Older areas required the most rework, but a lot of 'small' areas had limited linkage to their surroundings anyway, and the transition was easy.  The southeast portion of the continent was hit the hardest, as it was designed on a unified grid.  It had to be extensively retconned, but even that work happened quickly thanks to the dedication of Draak and Shadowfax.&lt;br /&gt;&lt;br /&gt;As part of the big/small experiments, I extended the previously failed area map code to cross all zones, and used that to generate some cheesy room maps showing absolute and relative positions of everything.  After a bit more work, I was able to show nonlinear linkages on the maps as well - and this is when things really started to get done.  Seeing the problem spots, it was surprising how few of them there really were.  We began to aggressively target those.&lt;br /&gt;&lt;br /&gt;Meanwhile, the annealing/smoothing code was running in the background, continuously updating the 'real' positions of rooms, as opposed to where we thought they should be.  The most recent advance was the realization that the 'perfect' and 'real' maps should be as close to each other as possible, and in fact the 'real' map should try to match the 'perfect' map.  I made a few very minor changes to the algorithm, and the global map consistency (not to mention convergence speed) has increased greatly.&lt;br /&gt;&lt;br /&gt;After all of this, I'm almost to the point where I can generate the high-level maps I originally wanted in the first place.&lt;br /&gt;&lt;br /&gt;The lesson to take away is that invention happens in bursts and is often triggered by random things.  Ideas are easy, but implementing them is hard;  further, you never know which experiments are going to fail or succeed until you spend time on them.  There were several dead ends along the way in this project, but each provided tooling or insight into new things to try.&lt;br /&gt;&lt;br /&gt;Overall, if I had known the final form of things at the beginning, all of the code work could probably have been done in a couple of weeks, and all of the area work to follow in another month (with builder help of course).  As it stands now, the mapping saga has been going on since the beginning of the year, with breakthroughs and advances from time to time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3278866571541204042?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3278866571541204042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3278866571541204042' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3278866571541204042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3278866571541204042'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/global-mapping-story-of-invention.html' title='Global mapping - a story of invention'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-7863207111009775950</id><published>2009-11-25T08:41:00.000-08:00</published><updated>2009-11-25T08:49:38.292-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>An Example of Mob IACT Programming</title><content type='html'>[Reposted from the &lt;a href="http://www.alteraeon.com/forums"&gt;Alter Aeon Forums&lt;/a&gt;.]&lt;br /&gt;&lt;br /&gt;An 'iact' is a type of interactive procedure that is used to make mobs perform actions.  You can do some pretty complicated stuff with them, including interactive (hence the name) discussions, intelligent quest triggering, and the like.  As examples, Thantos responds to Dentin's name, and the fire giants in the fire plane will give up quite a bit of history of the area if you just sit down and talk to them about it.&lt;br /&gt;&lt;br /&gt;As common as these are, there's a lot of confusion about how iacts work.  Most of this seems to stem from the fact that iacts are a form of &lt;a href="http://en.wikipedia.org/wiki/Finite-state_machine"&gt;finite state machine&lt;/a&gt;, and most people aren't used to thinking in state machine terms.&lt;br /&gt;&lt;br /&gt;As an example, let's consider a mob that would unpack and wield weapons when fighting, then stop using and put them away when not fighting.  This seems like an ideal example to demonstrate a simple state machine iact, as well as give an introduction to how iacts work.&lt;br /&gt;&lt;br /&gt;The general idea is that the mob in question, let's call him Bob, has a weapon and a backpack.  When Bob is in combat, the weapon should be out of the backpack and wielded, so Bob can defend himself.  When Bob is not fighting, the weapon should be stored in the backpack, which Bob should be wearing.&lt;br /&gt;&lt;br /&gt;The easiest way to do this is via four states in a state machine:&lt;br /&gt;&lt;br /&gt;1) Not fighting.  In this state, you wait for fighting to begin.&lt;br /&gt;2) Start fighting.  In this state, Bob is fighting, and should unpack his weapon and wield it.&lt;br /&gt;3) Fighting.  Bob is fighting for his life, and may need to retrieve his weapon if disarmed.&lt;br /&gt;4) Stop fighting.  Bob is no longer fighting, and should disarm and repack his weapon.&lt;br /&gt;&lt;br /&gt;Here's a diagram of the four states, with the arrows being transitions between the states.  Each block contains the name of an iact procedure, and in smaller text the iact code for that procedure:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.alteraeon.com/misc/rewield_iact_diagram.png"&gt;&lt;img src="http://www.alteraeon.com/misc/rewield_iact_diagram_thumb.png"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click on the image for a larger version.&lt;br /&gt;&lt;br /&gt;As various things happen to Bob, he moves from one state to another.  Most of his time will be spent waiting for fighting to start.  When fighting does start, he'll quickly get out and wield his weapon in the 'start_fighting' procedure, then he'll transition to the 'fighting' procedure.  While 'fighting', he'll continuously try to rewield his weapon if he's disarmed.  When fighting stops, he'll transition to 'stop_fighting', which will unwield the weapon and put it away.  Then he'll go back to 'not_fighting' and wait for another battle to begin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7863207111009775950?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7863207111009775950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7863207111009775950' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7863207111009775950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7863207111009775950'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/example-of-mob-iact-programming.html' title='An Example of Mob IACT Programming'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-7504984478610524152</id><published>2009-11-22T19:02:00.000-08:00</published><updated>2009-11-22T19:23:02.017-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='motivation'/><title type='text'>I'm a deadbeat</title><content type='html'>I was looking at the list of big-ticket/high priority items on my whiteboard, and it occurred to me that a lot of them are half done.&lt;br /&gt;&lt;br /&gt;Not the good kind of half done, where it's a huge project and a lot of pieces are in and functional.&lt;br /&gt;&lt;br /&gt;The bad kind of done where infrastructure is in place and working, but it's not doing anything valid in the game context.&lt;br /&gt;&lt;br /&gt;A good example of this is the recent boat code.  This largely works, and probably only needs a couple of hours to get it in god-level beta test.  Instead, it's sitting there in the code base, largely complete but unconnected.&lt;br /&gt;&lt;br /&gt;How about clan wars?  I spent time adding a lot of infrastructure for this, then never hooked it up.  It also probably doesn't need more than a few hours to get it in beta test.&lt;br /&gt;&lt;br /&gt;Classes are a bigger picture.  I have more structure reworks to do, but I have been avoiding them.  This one is a bit more understandable, because the project is so large - but this isn't exactly a huge piece of the puzzle.&lt;br /&gt;&lt;br /&gt;Part of the reason for this is because I'm constantly 'firefighting' instead of doing new development.  I'm always fixing minor bugs, heading off social/political issues, trying to manage things and people.  I'm starting to think it would perhaps be better for all involved if I simply stayed invisible most of the time.  I used to do that a lot, for exactly this reason, but for some reason fell out of the habit.&lt;br /&gt;&lt;br /&gt;Another part of the reason is that the detail work isn't any fun.  It's painstaking and precise, and there's always negative feedback from players to look forward to.  Nevertheless, leaving a heap of half-finished projects on the queue isn't helping anything either.&lt;br /&gt;&lt;br /&gt;No pain no gain, perhaps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7504984478610524152?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7504984478610524152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7504984478610524152' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7504984478610524152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7504984478610524152'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/im-deadbeat.html' title='I&apos;m a deadbeat'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8964023892989320518</id><published>2009-11-20T09:31:00.000-08:00</published><updated>2009-11-21T06:27:07.460-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='gods'/><title type='text'>Halloween Havoc</title><content type='html'>I finally got the event report up for Halloween Havoc!  You can see the report on the &lt;a href="http://www.alteraeon.com/events"&gt;Alter Aeon System Events&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;This event was special for me in that nearly all of it was run by, well, not me.  I was present for some of it, but I actually got to log in and play a mortal for a while.  For the most dangerous (in terms of administration) part, the pk arena, Morpheus handled it, with some help from the gods Taran and Draak.&lt;br /&gt;&lt;br /&gt;This is a very good thing, and it should teach me a lesson:  delegate.  We have gods that are capable of running, handling, and managing system events.  Let them do it.&lt;br /&gt;&lt;br /&gt;I like this plan.&lt;br /&gt;&lt;br /&gt;There are also plans for thanksgiving and christmas-time events in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8964023892989320518?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8964023892989320518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8964023892989320518' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8964023892989320518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8964023892989320518'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/halloween-havoc.html' title='Halloween Havoc'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2197746872117953475</id><published>2009-11-17T11:06:00.000-08:00</published><updated>2009-11-17T11:11:42.253-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>Web Page Updates</title><content type='html'>Yesterday, I spent far too much time working on changes to the Alter Aeon web site. I spent some time hacking down the menu so that there were fewer items that are better organized; I also managed to switch over the layout to a more standard looking block based design.  Along with this came a number of other minor updates and improvements.&lt;br /&gt;&lt;br /&gt;It never ceases to amaze me that you can work on a web site, get to the point where you've done the best you can, then come back a month later and improve it even  more.  For me, it's like my creativity is tapped out - I have to take a break to let new ideas percolate in.  I think part of it might also be that I have to get used to a new design or layout before I can compare it against something else.&lt;br /&gt;&lt;br /&gt;Regardless, of the half dozen or so people I asked, their opinions were an almost universal 'much better' for the new version.  Here's to hoping that this 'much better' translates into a higher conversion into newbies!&lt;br /&gt;&lt;br /&gt;For a look at the new layout, here's a link to the &lt;a href="http://www.alteraeon.com"&gt;Alter Aeon Web Site&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2197746872117953475?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2197746872117953475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2197746872117953475' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2197746872117953475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2197746872117953475'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/web-page-updates.html' title='Web Page Updates'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1100809727411821132</id><published>2009-11-10T12:05:00.000-08:00</published><updated>2009-11-10T12:07:18.946-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><title type='text'>Software Reuse</title><content type='html'>There is an old saying in the nootropic (mental-performance enhancing drug) community:&lt;br /&gt;&lt;br /&gt;"The guys in the 60's had this truly brilliant idea of using drugs to expand conciousness and improve thinking.  Unfortunately, all they had at the time was LSD."  [Just to ensure proper context, this is said without sarcasm. It really was a good idea, however LSD turned out to be a complete flop in achieving this goal.]&lt;br /&gt;&lt;br /&gt;I've recently been doing some work that involved C++ templates, so allow me to reword this for modern usage:&lt;br /&gt;&lt;br /&gt;"The c++ guys in the 90's had this truly brilliant idea of direct language support for generic code and module reuse.  Unfortunately, all they had at the time was c++ templates."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1100809727411821132?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1100809727411821132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1100809727411821132' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1100809727411821132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1100809727411821132'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/software-reuse.html' title='Software Reuse'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2795598363378406250</id><published>2009-11-07T14:52:00.002-08:00</published><updated>2009-11-07T15:15:38.344-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Sailing the seven seas</title><content type='html'>As a side effect of the ongoing mapping and world linearization project, I had a strange idea:  why can't I hop in a boat and sail from the mainland to the islands?&lt;br /&gt;&lt;br /&gt;The short answer is that in most muds, rooms have no absolute position data. Since this is no longer true for Alter Aeon, having long-distance boats suddenly seemed possible.  So, I set aside a short period of time to do it.&lt;br /&gt;&lt;br /&gt;It was nowhere near enough.&lt;br /&gt;&lt;br /&gt;As a first step, I created boats and allowed some lookup of position to figure out where I could place them.  This worked reasonably well.&lt;br /&gt;&lt;br /&gt;For the second step, built a quick lookup function to go from boat position back to nearest room.  This allows people to disembark.&lt;br /&gt;&lt;br /&gt;Next, I had planned to simply use that lookup function to build maps, so that sailing around would have a functional map display.  We can also use the map generator to construct blind descriptions, so that blind players can still see when land is near.  This is where the problems began.&lt;br /&gt;&lt;br /&gt;While we do in fact have positional data for rooms, the reverse lookup is quite a bit less trivial.  In order to build maps, the lookup has to be quick and efficient.  To complicate matters, the world grid moves around dynamically the rebuild time has to be short as well.  There are also difficulties with a single room appearing in multiple places, and with multiple rooms vying for the same space.&lt;br /&gt;&lt;br /&gt;I initially tried a rather complex space partitioning scheme, but after sleeping on it I realized I should just use a hash table.  I implemented the various hash table routines in about an hour, and with around 3 hours total I have most of the corner cases cleaned up in the map.&lt;br /&gt;&lt;br /&gt;Next, I pull up the anchors and see about doing some exploring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2795598363378406250?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2795598363378406250/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2795598363378406250' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2795598363378406250'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2795598363378406250'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/11/sailing-seven-seas.html' title='Sailing the seven seas'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1781924961142232173</id><published>2009-10-20T13:54:00.000-07:00</published><updated>2009-10-20T14:06:57.022-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='complexity limits'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><title type='text'>Software Complexity Crisis</title><content type='html'>[This rather large post is almost entirely a personal rant.  I complain a lot about wxWidgets in here, because it's fresh in my mind and a very good example of a specific type of software engineering crisis.  Note that I'm still using the WX libraries for the Alter Aeon client project; clearly it has value to me in spite of its faults, and I appreciate the effort the WX team has put it. That said, if I could easily move to any another library that met my constraints, I would do it in a heartbeat.]&lt;br /&gt;&lt;br /&gt;Various recent attempts on my part to use large software libraries have made me re-examine the issue of the general software-engineering crisis.  I've run up against typical software crisis problems many times in the past, so I tend to keep my eyes open when I see material related to the topic.  This is one of the reasons that Vernor Vinge's book "A deepness in the sky" caught my attention.&lt;br /&gt;&lt;br /&gt;One of the basic premises of this book is that complexity failure can be sufficient to bring down entire societies.  This was put very succinctly in a blog posting by Jeremy Bowers on his &lt;a href="http://www.jerf.org/iri/post/2893"&gt;iRi Blog&lt;/a&gt;, part of which I quote here:&lt;br /&gt;&lt;br /&gt;"One of the less well known concepts which informs his sci-fi writings is one possible fate of societies that do not or can not end in a "singularity", which is the eventual unavoidable collapse of the society in a cascading failure state brought on by excessive, uncontrollable complexity in the ever-more-sophisticated systems that drive the society. In this case, take "system" in the broad sense, including not just software, but business practices, government, and societal mores. A failure occurs somewhere, which brings down something else, which brings down two other something elses, and perhaps quite literally in the blink of an eye, you are faced with a growing complex of problems beyond the ability of any one human to understand or contain."&lt;br /&gt;&lt;br /&gt;This relates to software in that I'm beginning to see more and more examples of how this can occur.  Two software platforms in particular come to mind - IBM's WebSphere, which I was peripherally involved with a decade ago, and wxWidgets, which I am involved with today.&lt;br /&gt;&lt;br /&gt;Both of these platforms are very complex.  Both form an abstraction layer which builds on top of other layers - in the case of wxWidgets, there is a huge amount of API reuse from the lower layers of Windows, or GTK, or X, depending on which configuration it's built for.  Each of these layers is built upon other layers, and other layers, sometimes with very deep call trees.&lt;br /&gt;&lt;br /&gt;The most egregrious example of this kind of layering that I can recall was in WebSphere.  A friend had asked me to take a look at a stack trace from a WebSphere crash; somewhere deep in Java land, a 'null object exception' had been thrown. (Thank god it wasn't a NULL pointer, that would have been much worse!)  The exception handler that caught it was basically the main loop, because apparently no other layer could be bothered to check for failure conditions along the way.&lt;br /&gt;&lt;br /&gt;There were over 160 stack frames to walk through.  Not one of them was due to a recursive algorithm or function.  I don't know about you, but that level of stack depth is quite frankly beyond my ability to manage or debug.  I don't care what it does.&lt;br /&gt;&lt;br /&gt;WxWidgets is clearly beginning to show stress of its own, of a different character: it's becoming more and more impossible to guarantee consistency across platforms. The WX guys have made tremendous progress in this regard, so that most of the core features work right, but there are simply too many details to keep track of and too many paths that will never be tested.&lt;br /&gt;&lt;br /&gt;Here's a couple of examples of this, one of which I'm STILL fighting:&lt;br /&gt;&lt;br /&gt;-------------------------------------------&lt;br /&gt;&lt;br /&gt;When I first started switching the Alter Aeon client project over to WX, I initially used the wxTextCtrl class, which is built out of Microsoft system libraries in the Win32 world, or built on the GTK libraries in my development environment.  I had hoped to use the class for both the input window, and for the main display; with a small amount of effort, I got the client running and working, but there were minor, very persistent issues.&lt;br /&gt;&lt;br /&gt;The first of these was the input window.  Various events, such as backspacing when empty, cause a system beep/bell under windows.  They don't cause a bell under Linux.  And further, there's no way to disable this.  I don't know about you, but I'll be damned if I'm going to ship a product that beeps every time someone hits backspace.&lt;br /&gt;&lt;br /&gt;I managed to take care of some of this by trapping out various keystrokes in the CHAR handler.  It seemed like a poor hack at the time, but at least it helped. However it didn't help enough; a number of keystrokes simply don't generate CHAR events, yet they still fucking beep.  I finally ended up writing a raw keyboard event handler, which tracks nearly all of the keyboard state, to trap out events that would generate a beep when passed to the lower layer.  In the time it took me to disable beeping, I could have written and debugged a keyboard handler from scratch, with exactly the desired behaviour.&lt;br /&gt;&lt;br /&gt;While beeping has largely been taken care of, other issues with this so-called standard class have not.  The biggest one is that the color of text displayed in the class returns to black occasionally, and depending on the versions of the system DLLs for the particular Windows installation.  My first attempts at fixing this were effective on all my development environments, but failed on about half of the release environments - text typed in the window would occasionally simply vanish.&lt;br /&gt;&lt;br /&gt;By adding forced color setting in various places where it shouldn't be needed, I eventually managed to fix this problem for about 90% of my users.  Out of sheer disgust at this point, I did some extremely vicious forced color setting in various event handlers, and this appears to have fixed 'most' of the problem. I still am receiving sporadic reports of it happening on current client builds, but at least the problem goes away now and seems to be triggered at random.&lt;br /&gt;&lt;br /&gt;When attempting to use this same class for the main window display, I ran into what seemed to be minor issues regarding the scroll bars and scrolling of text in the window.  No matter what I tried, I never did find a way to get reliable scroll positioning for this class across all platforms.&lt;br /&gt;&lt;br /&gt;After fighting this off and on for several months, I became desperate. I finally wrote my own text display class from the ground up, using nothing more than bitmaps and font drawing routines.  The total from-scratch implementation time was less than the time I had previously wasted trying to get the scrollbars to work properly.  It's also faster, especially for very large data sets.&lt;br /&gt;&lt;br /&gt;-------------------------------------------&lt;br /&gt;&lt;br /&gt;This, my friends, is the software engineering crisis in action. Each layer, while hiding some of the problems of the lower layers, introduces its own; the overall result is a system with fewer catastrophic issues, but exponentially more minor issues.&lt;br /&gt;&lt;br /&gt;Those minor issues are surely tolerable, are they not?  To an extent, yes - but at what point do you die the death of a thousand cuts?&lt;br /&gt;&lt;br /&gt;Catastrophic issues might be catastrophic and obvious failures, but that's one of the best things about them:  they're catastrophic and obvious.  They HAVE to be fixed.  They must be understood, they must be cleaned up and dealt with. The minor problems on the other hand, can just keep accumulating.  They just keep getting worse, they just keep getting more obscure, more complicated, more difficult to find and rectify.  And worse, they compound each other.&lt;br /&gt;&lt;br /&gt;In a good scenario over the long term, they become so prevalent that the system no longer becomes usable.  In a bad scenario, the system becomes critical and unmaintainable.  It's a swiss cheese of buggy modules and misunderstood patches.&lt;br /&gt;&lt;br /&gt;Is that really what you want to build critical infrastructure out of?  Is this where we're headed?  I certainly hope not.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1781924961142232173?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1781924961142232173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1781924961142232173' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1781924961142232173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1781924961142232173'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/10/software-complexity-crisis.html' title='Software Complexity Crisis'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-3131105332689853326</id><published>2009-10-11T11:39:00.000-07:00</published><updated>2009-10-11T11:45:45.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>DClient 0.982 Released!</title><content type='html'>After a lot of hard work, intermediate releases, bug reports and beta testing, the &lt;a href="http://www.dentinmud.org/AlterAeon.exe"&gt;latest version of the Alter Aeon game client&lt;/a&gt; is now available!  It's only been about a month since the last release, but the number of updates and new features is pretty impressive. Here's some of the major things that have been updated:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Grouping status bars added.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new version of 'left hand layout' is now available.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Added basic support for color themes and backgrounds.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Side buttons now use the same color scheme and format as popup and function key buttons.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;(For builders) 'connect' command allows connecting to arbitrary ports.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Redraw flicker reduced in popup windows.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add support for GMUD color scheme.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Smoother scrolling for the automap.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;In addition, there's been a pile of minor bug fixes, as well as a lot of work to clean up and improve the interface.  You might also notice things like removal of scrollbars and word wrap on popup windows that don't need them, fewer buttons to be confusing for newbies, and improvements in the input text bar.  Here are some examples of a couple of possible configurations:&lt;br /&gt;&lt;center&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/screenshots/alter-aeon-091011-lhl.png" title="Alter Aeon Client Screenshot"&gt;&lt;img alt="Alter Aeon Client Screenshot" src="http://www.dentinmud.org/screenshots/alter-aeon-091011-lhl-small.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/screenshots/alter-aeon-091011-undocked.png" title="Alter Aeon Client Screenshot"&gt;&lt;img alt="Alter Aeon Client Screenshot" src="http://www.dentinmud.org/screenshots/alter-aeon-091011-undocked-small.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;/center&gt;&lt;br /&gt;The basic theme support and the overall interface cleanup should help us a lot with new players.  The first 30 seconds of pretty buys you the next 30 seconds, etc.  It seems to take forever, but incremental improvements do really add up over time.&lt;br /&gt;&lt;br /&gt;Again, the download is at &lt;a href="http://www.dentinmud.org/AlterAeon.exe"&gt;http://www.dentinmud.org/AlterAeon.exe&lt;/a&gt;. Snag a copy and check it out!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3131105332689853326?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3131105332689853326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3131105332689853326' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3131105332689853326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3131105332689853326'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/10/dclient-0982-released.html' title='DClient 0.982 Released!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2267755739022415315</id><published>2009-10-07T17:02:00.000-07:00</published><updated>2009-10-07T17:05:13.465-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Yet Another wxWidgets Fail</title><content type='html'>I've been trying off and on for a while to get transparency to work in my Linux/GTK builds, and for whatever reason it's just not working (at all.)  After running some experiments last night, the best I can determine is that there simply is no alpha channel available in the wxBitmap/wxMemoryDC that I'm trying to use.&lt;br /&gt;&lt;br /&gt;It's not that I didn't try to get one.  Supposedly all you need to do is construct bitmaps with a 32 bpp and everything else will take care of itself; however, even simple operations like putting a pixel or drawing onto the DC returns 0xFF for the alpha channel every time.  The alpha simply disappears.  Because the alpha is gone, when I attempt to draw or blit the bitmaps, I get a full overwrite instead of a proper alpha blend.&lt;br /&gt;&lt;br /&gt;Once again, it's beyond me how something so simple can silently fail so catastrophically while giving no indication of error or dysfunction. I'm using the modules according to the published API, and the expected results do not occur.&lt;br /&gt;&lt;br /&gt;Naturally, there is coupled to this another issue:  wxWidgets does not have very good drawing/shading and blending primitives.  I could probably draw what I want using the tools, but it will be costly, both in time and processing power.&lt;br /&gt;&lt;br /&gt;The obvious two solutions present themselves:&lt;br /&gt;&lt;br /&gt;1) Find another library, such as OpenGL, that can I can integrate into the toolkit, or&lt;br /&gt;&lt;br /&gt;2) Write my own graphics subsystem.&lt;br /&gt;&lt;br /&gt;Size is, in my mind, at a premium here, so I would prefer not to bloat out the executable with another five megabytes of drawing and 3D utilities. It also just so happens that I've done a lot of game and graphics programming in the past.  Graphics programming that included various primitive libraries.&lt;br /&gt;&lt;br /&gt;Now, the only issue is how to get direct access to wxBitmap data so that I can do my drawing elsewhere, then copy into the bitmap for blitting.  It just so happens that there's an undocumented 'wxRawBitmap' class that looks like it might do the job.  Hooray for undocumented features.  What the hell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2267755739022415315?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2267755739022415315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2267755739022415315' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2267755739022415315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2267755739022415315'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/10/yet-another-wxwidgets-fail.html' title='Yet Another wxWidgets Fail'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5393306269812197278</id><published>2009-10-03T11:17:00.000-07:00</published><updated>2009-10-03T11:21:10.891-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Client Customization</title><content type='html'>As part of my quest to improve the client, I accidentally embarked on sanitizing the button color scheme and making various colors consistent across the codebase.  When this was done, it occurred to me to fiddle with them, and I ended up with some very interesting results, which you can find in the dentinmud.org screenshots directory. &lt;br /&gt;&lt;br /&gt;Here's some direct links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/screenshots/alter-aeon-091003-red.png"&gt;Red Alter Aeon Screenshot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/screenshots/alter-aeon-091003-blue.png"&gt;Blue Alter Aeon Screenshot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/screenshots/alter-aeon-090923.png"&gt;Default Color Alter Aeon Screenshot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I personally like the blue a lot, but that's just me.  A lot of players expressed concern at the blue layout or found it ugly.  The red one was almost universally disliked, which I found surprising.  Attempts to tweak it were really unproductive; for whatever reason, it seems very difficult to come up with red background color schemes that don't look terrible.&lt;br /&gt;&lt;br /&gt;The current plan for the next day or so is to at least make these run-time selectable, though most players disable all of the buttons when they play anyway.&lt;br /&gt;&lt;br /&gt;Strange as it may seem, I think the blue adds a whole new level of cool factor to the initial impression of the client.  It's definitely eye catching, which is probably a good thing given the stunningly high dropout rates of people who try the client cold.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5393306269812197278?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5393306269812197278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5393306269812197278' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5393306269812197278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5393306269812197278'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/10/client-customization.html' title='Client Customization'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-5138623589072392149</id><published>2009-09-23T18:23:00.000-07:00</published><updated>2009-09-23T18:32:32.619-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pk'/><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='player killing'/><title type='text'>PK, PPK, PK, PPK...</title><content type='html'>Player killing on Alter Aeon has always been limited to registration, and while we have various arenas and temporary PK, we also have permanent registration - known as PPK.&lt;br /&gt;&lt;br /&gt;PK has never bothered me much, but it's never really interested me either.  PPK on the other hand I've tried a couple of times.  I could never get into it, and it also seemed like I could never get away from various instakill issues.&lt;br /&gt;&lt;br /&gt;Instakill reared its ugly head again a few days ago, and after fixing the specific instakill bug, it occurred to me to simply cut all PK damage in half.  That clearly reduces the instakill problem, yes?  However, there are some problems.&lt;br /&gt;&lt;br /&gt;The biggest of these is that the existing PPK population doesn't like it.  There's a few of them that do, but largely the response has been negative.  A number of them say that PPK has gone from a threatening, risky affair to an irritation they can easily and always run from and survive.  Others note that the power to heal has been effectively doubled, giving casters with a lot of mana huge advantages.  Both of these criticisms are good, and sufficient to convince me to revert the change.&lt;br /&gt;&lt;br /&gt;However, the instakill problem still lives.  The current consensus is that judicious limiting of various instakill mechanisms is the best way to go forward.  Barring any major objections, we'll probably go that route.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5138623589072392149?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5138623589072392149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5138623589072392149' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5138623589072392149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5138623589072392149'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/09/pk-ppk-pk-ppk.html' title='PK, PPK, PK, PPK...'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-1774225429893061575</id><published>2009-09-17T08:20:00.000-07:00</published><updated>2009-09-17T08:31:29.462-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='automapper'/><title type='text'>The mapping saga continues</title><content type='html'>While in the dentist's office yesterday, I had a brainstorm regarding mapping:  why not run a real-time simulated annealing algorithm to automatically generate the global coordinate grid?  When I got home, I took a few hours to implement it, and last night I booted an initial version into the game.&lt;br /&gt;&lt;br /&gt;These new position values don't currently do anything, as I'm still working out the bugs and looking for general problems.  One thing that appears to cause quite a bit of trouble are nonlinear 'portal' links that bridge a large distance; another major problem are god/builder rooms that link to unusual locations for plot device reasons.&lt;br /&gt;&lt;br /&gt;Flagging these troublesome exits isn't something we can currently do, but it's become clear that we will need to do so in order to make the grid coherent.&lt;br /&gt;&lt;br /&gt;Finding the problem exits is also difficult, but it's made somewhat easier by an extension to one of our existing mapping routines.  By calculating a 'stress energy' for the linkages in each room in the map, I can get a pretty graph showing where maximum grid distortion occurs.  These points of maximum distortion usually occur near a positional anchor, which are used to set the position of continents or isolated zones.&lt;br /&gt;&lt;br /&gt;However, once the map for a given area has stabilized, the maximum distortion points typically indicate one of the nonlinear links described above.  Once the approximate location is known, finding and marking the link is substantially easier.&lt;br /&gt;&lt;br /&gt;All in all, I think this is working well enough that we may be able to use it globally for all area placement.  Over the next week or two I'll be generating some area and room maps based on this data, and we should be able to refresh the god area and room maps on the web pages soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1774225429893061575?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1774225429893061575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1774225429893061575' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1774225429893061575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1774225429893061575'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/09/mapping-saga-continues.html' title='The mapping saga continues'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-313901907394242015</id><published>2009-09-06T21:10:00.000-07:00</published><updated>2009-09-06T21:26:42.883-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><title type='text'>Class updates</title><content type='html'>As part of the groundwork for getting additional classes into the game, Locane and I have been digging through the code and trying to condense common routines and eliminate dependencies.  He's been working largely on uncontroversial skill changes, to merge together the skill handling routines and make it easier to add skills in the future.  I've been working on player regen and healing.  This is a bit more controversial.&lt;br /&gt;&lt;br /&gt;Quite a bit more controversial, as it turns out.&lt;br /&gt;&lt;br /&gt;The fundamental problem with regen and healing is that the algorithm was put together over a decade ago, and hasn't been fundamentally altered since.  In its simplest form, caster levels are pitted against fighter levels, and regen is heavily tilted in favor of the winner; higher casting level means greater mana regen and less hitpoint regen, while higher fighter level is the reverse.&lt;br /&gt;&lt;br /&gt;This balancing act was a zero-sum game.  Gaining a single level in a class could force you to trade hitpoints for mana; and at higher levels, a caster for example has no choice but to gain levels in fighter classes.  The only thing that made this balancing act of a system usable is cast level equipment, which allowed players to push around the balance point.&lt;br /&gt;&lt;br /&gt;Unfortunately, adding new classes isn't really compatible with this.  We have also received a number of complaints over the years about unusual side effects and problems with the system.  I finally made the decision to try something radical, rather than continuing to tweak the existing code.&lt;br /&gt;&lt;br /&gt;The last couple of days, while hectic, appear to be quite an improvement.  The level/balance dependency is gone, and I've even managed to keep cast level somewhat usable.  Most players have increased net regen, which is probably bad in the long term, but in the short term allows work to progress.&lt;br /&gt;&lt;br /&gt;Something unusual is that the value of mana regen varies wildly based on the player and their playing style.  I have a couple of fighter primaries totally geared out like casters; these players complained loudly about being dented.  This type of player would gladly trade hitpoint regen into mana at a 4:1 ratio, double the standard 2:1 typically found with heal spells.  Most other players are happy with 2:1, as they burn through mana and hitpoints almost equally as they play.&lt;br /&gt;&lt;br /&gt;The plus side is that this work has eliminated yet another choke point for pushing through additional classes.  Unfortunately, there remain quite a few equally controversial areas that will need to be updated.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-313901907394242015?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/313901907394242015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=313901907394242015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/313901907394242015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/313901907394242015'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/09/class-updates.html' title='Class updates'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-7025711013337065478</id><published>2009-09-02T19:35:00.001-07:00</published><updated>2009-09-02T19:43:10.511-07:00</updated><title type='text'>Client release 0.981!</title><content type='html'>After much debugging, version 0.981 of the Alter Aeon Mud Client has been released!  This release has a number of cool new features, including:&lt;br /&gt;&lt;br /&gt;- popup windows for things like your equipment, stats, spells, and who list&lt;br /&gt;&lt;br /&gt;- function key buttons that make sense&lt;br /&gt;&lt;br /&gt;- inlined automap in the main window&lt;br /&gt;&lt;br /&gt;- cleaned up and prettier user interface&lt;br /&gt;&lt;br /&gt;This version of the client is quite a step forward, and we've got a lot of positive feedback from players.  Grab a copy from the main Alter Aeon web site, at:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.dentinmud.org/AlterAeon.exe"&gt; http://www.dentinmud.org/AlterAeon.exe&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is the full changelog of additions and updates in this release.&lt;br /&gt;&lt;br /&gt;Version 0.981 - Sep 02, 09&lt;br /&gt;&lt;hr&gt;The automap is now undockable.&lt;br /&gt;&lt;br /&gt;Minor bug fixes to main window mouse selection and screen clear.&lt;br /&gt;&lt;br /&gt;Disconnect dialogs and quit/program exit will no longer echo commands to the screen, so newbies won't see things like "quit -check".&lt;br /&gt;&lt;br /&gt;Fixed bug so font size changes immediately update the scroll bar.&lt;br /&gt;&lt;br /&gt;The 'you are here' diamond in the center of the map should now pick more contrasting and visible colors based on what room you're in.&lt;br /&gt;&lt;br /&gt;With command pushthrough, pressing the left arrow key after selection will now deselect and put the cursor on the left side of the window.&lt;br /&gt;&lt;br /&gt;A voting reminder option is now available in the voting menu.&lt;br /&gt;&lt;br /&gt;An option to open all voting sites at once has been added.&lt;br /&gt;&lt;br /&gt;Fix bug in status bar hp/mana/mv display when changing window size.&lt;br /&gt;&lt;br /&gt;Minor improvements to url clicking.&lt;br /&gt;&lt;br /&gt;Add support for function key button bar.&lt;br /&gt;&lt;br /&gt;When the automap is docked, it's now resident in the upper right corner of the main window instead of off to the side.&lt;br /&gt;'Left side layout' has been removed.&lt;br /&gt;&lt;br /&gt;Some of the menu items have been moved around.&lt;br /&gt;&lt;br /&gt;The enemy hitpoint bar now floats in the main window when it's active.&lt;br /&gt;&lt;br /&gt;The enemy hitpoint bar can now be disabled from the preferences menu.&lt;br /&gt;&lt;br /&gt;The main window scrollbar can now be disabled from the preferences menu.&lt;br /&gt;&lt;br /&gt;Control 1-9 now enable/disable various features.&lt;br /&gt;&lt;br /&gt;Control-B has been removed to free up keyboard space.&lt;br /&gt;&lt;br /&gt;Hitpoint bar red color is now slightly brighter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7025711013337065478?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7025711013337065478/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7025711013337065478' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7025711013337065478'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7025711013337065478'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/09/client-release-0981.html' title='Client release 0.981!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5324406335630364212</id><published>2009-08-29T21:07:00.001-07:00</published><updated>2009-08-29T21:14:58.770-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Client update</title><content type='html'>I've been working on the DClient code for the last couple of days, and it's coming along nicely.  I had intended to do another interim release on thursday; after discovering that the Windows build of fundamental display primitives is vastly different than the Linux version, I had to go back to the drawing board and come up with a rendering/display system to avoid those issues.&lt;br /&gt;&lt;br /&gt;Conveniently, with the new rendering system, the original problem that forced me to write the rendering system has vanished.  I could probably figure it out if necessary, but at this point, I just want to get my work done.  I'm still keeping the rendering system though; every piece of WX I replace is one step farther away from needing to use it at all.  At some point, all that will be left is the event loop, wxDC functions, and Win32 resource management.&lt;br /&gt;&lt;br /&gt;The improvements in this version of the client are primarily a simpler user interface with a lot less clutter.  We also have popup-style windows for things like score, equipment, inventory and the who list.  I've also prettied up some of the buttons, and have enough infrastructure in place to possibly start doing some window decorations.&lt;br /&gt;&lt;br /&gt;If everything goes stunningly well, I should be able to get a testing release out Sunday night.  More likely however, it'll be monday or later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5324406335630364212?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5324406335630364212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5324406335630364212' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5324406335630364212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5324406335630364212'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/08/client-update.html' title='Client update'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8861492768999048543</id><published>2009-08-20T11:28:00.000-07:00</published><updated>2009-08-20T11:39:51.089-07:00</updated><title type='text'>Periodic Update</title><content type='html'>Over the last month or so, we've been hitting game development really hard.  There's been a lot less focus on web presence and advertising, and a lot more focus on 'what makes the game fun' and how to make the game the best it can be.  Some highlights of this process are:&lt;br /&gt;&lt;br /&gt;- addition of 'credit' code, which allows for in-game microtransactions&lt;br /&gt;&lt;br /&gt;- 'trade' code, which allows secure transactions&lt;br /&gt;&lt;br /&gt;- a 'freak' multiplier for turn undead&lt;br /&gt;&lt;br /&gt;- skill changes and updates, part of a global skill system restructuring&lt;br /&gt;&lt;br /&gt;- initial conversions of class code, to allow for easy addition of more classes in the future&lt;br /&gt;&lt;br /&gt;For a full list of the mortal changes, see the &lt;a href="http://dentinmud.org:8080/changes"&gt;Alter Aeon Changelog&lt;/a&gt;.  Keep in mind that there's at least as many builder and admin level changes as there are visible mortal changes!&lt;br /&gt;&lt;br /&gt;There's also been a great deal of cleanup and reorganization of the immortal building tools, to help us get more areas up and running quicker.  This was brought on in part by a couple of areas which had problems not detected by the automated area checkers.  This should help a lot when we get ready to pull over another round of bport builders to the main port.&lt;br /&gt;&lt;br /&gt;Regarding advertising, I've temporarily turned most of it off, and the newbie/login numbers do appear to reflect that.  One of the reasons I shut it down was to see the net effect; another was difficulty justifying the money for such a low increase in player base.  Advertising works best on a market that would use the dclient; but the dclient isn't good enough yet to convince people to play.  I really need to get another client release out and get it polished up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8861492768999048543?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8861492768999048543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8861492768999048543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8861492768999048543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8861492768999048543'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/08/periodic-update.html' title='Periodic Update'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1296845289387556459</id><published>2009-08-12T19:23:00.000-07:00</published><updated>2009-08-12T19:32:49.464-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wxwidgets sucks'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><title type='text'>wxWidgets sucks</title><content type='html'>This is becoming less of a mud development blog than a 'bitch about wxWidgets sucking' blog.  I've run into yet another piece of wxWidgets wierdness:  wxBitmapButtons don't work.  The documentation claims bitmaps can be used instead of the default graphics; trying this results in a very small bitmap wedged inside a ten pixel thick border of default graphics.  There appears to be no way to turn this behaviour off.&lt;br /&gt;&lt;br /&gt;I'm sure that there's a perfectly good reason why it behaves this way.  It might be intentional; it might be that my development platform (GNU/Linux) is more buggy than other platforms; it might be that I'm simply terrible at operating this toolkit.  Regardless, its unacceptable, and it is only with great reluctance weighing my application requirements that I did not switch to something else this very night.&lt;br /&gt;&lt;br /&gt;Screw this toolkit.  I wrote a text window class for exactly this reason, and quite frankly if I'd have done it to start with I'd have saved myself a lot of time.  I will not make that mistake again, and as of right now I'm creating an image button class.  I might not know what I'm doing, but at least I'll know it works properly, on all the platforms I need it to.&lt;br /&gt;&lt;br /&gt;I get the feeling that by the time I'm done with this, I'll have using only the event handling loop and the font selection dialog.  It seems like those are the only widgets that actually function as documented.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1296845289387556459?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1296845289387556459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1296845289387556459' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1296845289387556459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1296845289387556459'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/08/wxwidgets-sucks.html' title='wxWidgets sucks'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8744191527449791724</id><published>2009-07-12T20:17:00.000-07:00</published><updated>2009-07-13T20:34:34.360-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>wxWidgets - focus problems using multiple top level windows or frames</title><content type='html'>[Updated Jul 14, 2009 - this turned out to be a code bug on my part, at least partially.  Further details in the comment section.]&lt;br /&gt;&lt;br /&gt;As I'm sure you all know, I've been putting together a graphical/GUI client for the MUD &lt;a href="http://www.dentinmud.org"&gt;Alter Aeon&lt;/a&gt; for the last few years.  About 9 months ago, I switched to using the wxWidgets toolkit instead of QT, for reasons of executable size and licensing.&lt;br /&gt;&lt;br /&gt;This switch has cost me on the order of 3 full months of development time trying to work around bugs in the wxWidgets ports on various platforms.  I hit another one of these porting bugs/issues today; fortunately it only cost me about four hours, and amazingly enough, I found a workaround/answer that didn't involve rewriting the component from scratch.&lt;br /&gt;&lt;br /&gt;Long story short:  if you have multiple wxFrames or top-level windows in an MSVC build, the default is that you can't focus on any but the first one.  My exact scenario:&lt;br /&gt;&lt;br /&gt;1) App creates main window frame.&lt;br /&gt;&lt;br /&gt;2) Main window frame later on dynamically creates a handful of new popup-style frames.&lt;br /&gt;&lt;br /&gt;3) All of these new frames are immediately defocused and placed behind the main window frame.  Attempts to raise or focus them are completely and utterly ignored.  The FLOAT_ON_PARENT window style does nothing.&lt;br /&gt;&lt;br /&gt;Oddly enough, minimizing the main window sometimes allowed the children to gain focus or 'disconnect' from the main window so the focus worked properly.  It wasn't reliable, and it was never clear to me exactly why or how, but it never did what I ultimately wanted anyway.&lt;br /&gt;&lt;br /&gt;There's no documentation on why any of this should happen, at least nowhere I could find.  It all worked fine in the Linux port!  After multiple hours of screwing around with it and reading unrelated documentation, I finally tried something I found in an obscure post, and it worked.&lt;br /&gt;&lt;br /&gt;The solution:&lt;br /&gt;&lt;br /&gt;1) Don't bother to hook the focus event.  It doesn't do shit anyway.&lt;br /&gt;&lt;br /&gt;2) Hook the Activate event in your new frame.  You've probably never seen this before.  Neither had I.  I still don't know what exactly it's supposed to do.&lt;br /&gt;&lt;br /&gt;3) In your Activate event handler, SetFocus(), then Skip() and pass the event down.  The SetFocus() brings your new frame to the top and allows it to take focus in the future.&lt;br /&gt;&lt;br /&gt;That's it.  It's all of like three lines of code; I hope it doesn't waste nearly as much of your time as it did of mine.&lt;br /&gt;&lt;br /&gt;[Note - I understand that the wx guys are doing this basically for free, and that they're up against a nasty set of ports to get everything working properly.  Still, it's cost me a lot of time, and if I had known better I would probably have just paid for a proper QT license and found some other way to reduce the file size.]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8744191527449791724?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8744191527449791724/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8744191527449791724' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8744191527449791724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8744191527449791724'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/07/wxwidgets-focus-problems-using-multiple.html' title='wxWidgets - focus problems using multiple top level windows or frames'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-3480508446597682490</id><published>2009-07-11T06:39:00.001-07:00</published><updated>2009-07-11T07:23:40.899-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Where do we go?</title><content type='html'>I've been doing some serious thinking about the game, the market, and the business model I'm trying to work with.  I still think the business model is sound; I've been able to pay most expenses and use the remainder for (admittedly ineffective) advertising for years.  This year will be different, as I'm dumping some of my personal money into it, but even so the numbers have risen and will compensate somewhat for that increased outflow.&lt;br /&gt;&lt;br /&gt;The biggest problem I see with regard to expansion right now is, unfortunately, market based.  If you go out to any gaming news site, it's not just that there's a handful of games being advertised - it's that there are hundreds (if not thousands) of games being advertised.  It's reached the point where you're lucky if you can even find a WoW ad amidst the piles of other crap.&lt;br /&gt;&lt;br /&gt;The gaming market right now is, as near as I can tell, in the middle of a huge investment bubble.  Hundreds of companies have come on line with venture or public funding to be the next 'WoW killer'.  These startup companies are pumping hundreds of millions of dollars into advertising for a limited number of players; several new cookie-cutter MMOs come out every week.&lt;br /&gt;&lt;br /&gt;On the plus side, most of these will fail.  As with all bubbles, this one will collapse, and most games will go under.  There's simply not enough players right now, and once you've seen one cookie cutter game, you've seen them all.  In some ways, being a text based game protects us, as we have a limited niche that isn't facing ridiculous competition.&lt;br /&gt;&lt;br /&gt;So what do we do about it?  In the immediate short term, scale back plans of massive growth, and wait for the bubble to pop.  But we can't just rest on our laurels either; we should be doing something.  What best to do?&lt;br /&gt;&lt;br /&gt;Make the game the best game it can be, that's what.  Most of the games that will fail, will fail precisely because they -are- cookie cutter games.  Do you not think that the players on WoW would pay $5 more for a game that was $5 better than WoW?  The reason that they don't is because there aren't any games $5 better than WoW.&lt;br /&gt;&lt;br /&gt;I currently have two projects in various stages to this end.  The first is the ongoing upgrade to the client, which is coming along slowly but steadily; I probably won't have a new release this weekend, but should have one soon.  I think with that release I'll start looking for a graphic designer or other artistic input to make the interface pretty.&lt;br /&gt;&lt;br /&gt;The other project is only in the planning stages:  add more classes to the game.  I get a lot of comments from newer players that the limited class selection looks strange and seems thin compared to other games.  It also has issues (which some players call features), such as limited room for long term expansion, high level characters all being the same or very similar, a small number of high-end playing styles, and what I would consider bogus skill groupings.&lt;br /&gt;&lt;br /&gt;I think I have a rough model of how to do class expansions now, but it will probably be several weeks before we have enough detail fleshed out to really start implementing it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3480508446597682490?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3480508446597682490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3480508446597682490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3480508446597682490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3480508446597682490'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/07/where-do-we-go.html' title='Where do we go?'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-7501989351861104373</id><published>2009-07-09T12:46:00.001-07:00</published><updated>2009-07-09T12:50:25.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Client innards</title><content type='html'>I've been working on the client recently, to try to build little pop-up windows that contain useful information, for example what you're wearing, your inventory, or your stats.  The basic guts of this are working, and other than the buttons being ugly it seems pretty useful.&lt;br /&gt;&lt;br /&gt;One big problem I have yet to deal with is automatic update of the data in the windows. It's neat having the info there and all, but if it automatically updated when things changed, it would be WAY more useful.  I'll have to do a bit of server side work for that to work properly.&lt;br /&gt;&lt;br /&gt;With any luck, I'll be able to get a new client release out in the next few days, or at the very least a test build for people to experiment with. I think this will be an excellent addition to the client, and it opens up a lot of possibilities to do other things as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7501989351861104373?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7501989351861104373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7501989351861104373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7501989351861104373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7501989351861104373'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/07/client-innards.html' title='Client innards'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8647620157024649640</id><published>2009-07-03T20:43:00.000-07:00</published><updated>2009-07-04T07:05:27.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='gold'/><title type='text'>Gold balancing in MMOs</title><content type='html'>[Update 2009/07/04 - I've posted an &lt;a href="http://www.dentinmud.org/articles/gold-balancing-in-mmos.html"&gt;updated version&lt;/a&gt; of this post as an article on the &lt;a href="http://www.dentinmud.org"&gt;Alter Aeon&lt;/a&gt; web site.]&lt;br /&gt;&lt;br /&gt;All too often, articles talking about gold balance do little more than state simply that 'most MMOs have problems with gold balance'.  Rather than waste your time, I'll describe a successful example of a gold economy, and what it took to get there.&lt;br /&gt;&lt;br /&gt;Alter Aeon handles its gold economy fairly well, after many years of tweaking.  The foundation for this stability is accurate gold tracking:&lt;br /&gt;&lt;br /&gt;- All gold sources and sinks are tracked and understood&lt;br /&gt;&lt;br /&gt;- Real-time gold stats are available&lt;br /&gt;&lt;br /&gt;- Unexpected or 'dangerous' gold changes are logged&lt;br /&gt;&lt;br /&gt;- Large gold changes, even valid transactions, trigger notifies just in case&lt;br /&gt;&lt;br /&gt;- There's a single global value representing all gold in circulation&lt;br /&gt;&lt;br /&gt;Just tracking the flow of gold through the system was useful, but completely ineffective in actually managing the economy. Usually when a game manages to get numbers, they have active immortals adjust things on a continuous basis to keep the economy under control.  We decided that this would be a complete waste of time for an immortal; we have computers to do boring tasks like this.&lt;br /&gt;&lt;br /&gt;Therefore, we don't bring immortals or builders into the picture at all.  Nearly all gold drops are calculated from statistics and game parameters. Adding this helped tremendously, but was still not enough to stabilize the economy on its own. In the long run, we ended up with several layers that each contribute to the whole system:&lt;br /&gt;&lt;br /&gt;- Mobs drop gold based on their death or theft rates; object gold is similarly modified with every looting of a treasure object. The purpose of this dynamic feedback is to prevent one source from dominating or becoming the 'easy gold'.&lt;br /&gt;&lt;br /&gt;- Large quantities of gold are taxed. Characters holding more than a million gold are taxed on the amount above a million gold, to the tune of about 2% per week. The purpose of the tax is to prevent packrats from accumulating unlimited hoards.&lt;br /&gt;&lt;br /&gt;- Clan and guild bank accounts can only hold a limited amount. Since the very existence of the clan indicates that gold is being paid in dues, this limited amount is fairly high (on the order of 50 million gold.)&lt;br /&gt;&lt;br /&gt;- Player shops can hold an unlimited amount, but generally shops have high rent rates, so gold turnover has so far not been a problem there.&lt;br /&gt;&lt;br /&gt;- Dynamic pricing of items alters the price of items for sale in shops based on how often they are shoplifted.  If a particular item is stolen too often, the price is lowered and the theft difficulty is raised to make the price more cost-competitive.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But by far the most critical part of the system is the global offset controller. This control system monitors the total quantity of gold in existence, and subtly tweaks the gold sources based on that value. The short-delay term of the control system looks at local deviations from the long term expectation, and fairly aggressively modifies the global gold sources. This short-delay term can change total gold influx on the order of 50% in a one week period if necessary.&lt;br /&gt;&lt;br /&gt;As the total quantity of gold in existence changes, the long-delay term of the control system slowly adjusts the set point for the short-delay calculations. If a large amount of gold is in circulation, the short-delay set point will be lowered, globally lowering the input of gold into the system.&lt;br /&gt;&lt;br /&gt;The net result of all this is that we have a system that allows for fairly substantial deviations in the short term, but always returns to long term stability. Total gold in circulation has varied by approximately 10% (peak of 528 million to trough of 482 million) over the last two years, and I no longer hear the once-common complaint that gold is worthless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8647620157024649640?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8647620157024649640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8647620157024649640' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8647620157024649640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8647620157024649640'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/07/gold-balancing-in-mmos.html' title='Gold balancing in MMOs'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3617773231573717213</id><published>2009-07-02T13:23:00.001-07:00</published><updated>2009-07-02T13:31:25.643-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>Web pages</title><content type='html'>I've just completed the first pass of an all-CSS layout for the &lt;a href="http://www.dentinmud.org/"&gt;official Alter Aeon MUD site&lt;/a&gt;.  To retheme the site, it should be as simple as picking new colors, and generating two header images for the image banner across the top.  At least that's the hope.&lt;br /&gt;&lt;br /&gt;One of the reasons for doing this is the possibility that the dark, ominous colors are driving people off.  I've heard more than a few comments to the effect that the current color scheme is 'off-putting' and/or looks evil.  (It does after have demon horns in it.)&lt;br /&gt;&lt;br /&gt;I've certainly noticed this in RL in terms of dress.  When wearing my usual fare of all black, people are much, much less likely to approach me than if I'm wearing blue jeans and a light shirt.  If web page viewers are even remotely similar, a difference of 2:1 wouldn't be impossible.&lt;br /&gt;&lt;br /&gt;With all this in mind, I'm perfectly willing to try some lighter color schemes and see if it helps.  Perhaps a nice light blue ice theme to begin with.&lt;br /&gt;&lt;br /&gt;I should probably think a little harder about the image backgrounds.  It should be possible to do image under- and overlays to perhaps pretty things up a bit.&lt;br /&gt;&lt;br /&gt;FYI, this is all hand-written CSS, with the pages generated using GNU M4.  Take a look at the source time time if you're bored.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3617773231573717213?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3617773231573717213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3617773231573717213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3617773231573717213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3617773231573717213'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/07/web-pages.html' title='Web pages'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-7527047709738006237</id><published>2009-06-25T20:34:00.000-07:00</published><updated>2009-06-25T20:51:38.171-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><title type='text'>Skills, spells, and classes</title><content type='html'>Today, a long-pending project finally got turned on for general use in the game:  monster lore, and a few specialized versions for particular mob types.  The current specialized skills are demon lore, elemental creature lore, undead lore, animal lore, and dragon lore.&lt;br /&gt;&lt;br /&gt;In coming up with appropriate class distributions for these, I once again ran into the shortcomings of only having the four basic classes.  There's really just a few things that don't fit nicely into combinations of those four buckets.&lt;br /&gt;&lt;br /&gt;So I've been thinking really hard about just how much effort it would be to add other classes to the game.  The first most obvious one would be a ranger class, which already has a handful of skills and could probably appropriate a bunch of stuff from cleric and mage.&lt;br /&gt;&lt;br /&gt;I wouldn't just want to add one more class; if you're going to change the infrastructure enough to allow easy addition of classes, you might as well make a handful of them and get some really solid groupings going.  I'd feel better about it if I had more than just ranger to work with; I think a lot of other skill sets can simply be specializations of existing classes, and don't justify a separate class.&lt;br /&gt;&lt;br /&gt;Good examples of these would be necromancers (cleric), elemental casters (mage), and barbarians (warrior).  I don't think any of these so much need a separate class as just appropriate spell and skill trees.&lt;br /&gt;&lt;br /&gt;There's also a question of how many classes are ideal.  Keeping with the exponential leveling scheme, a level 30 character should have levels of approximately 30, 25, 20, 15, 10, and 5, with levels in six classes.  I'd actually expect there to be more people in the upper ranges similar to Boa, with something more akin to 33, 32, 31, 27, 22, 17, 12, 7, and 2, for a total of 9 classes.  This indicates to me that even the most hardcore players would have difficulty bringing up to the top more than ten or so classes.&lt;br /&gt;&lt;br /&gt;As far as code modification, there's a handful of specps and some other places where the code would definitely need work, but I'd like to think that once the fifth class is added, a sixth and more would be much, much simpler.&lt;br /&gt;&lt;br /&gt;The final issue is:  does this improve the game enough to justify the effort?  It certainly adds some concept of end-game and more opportunities to advance high level characters, so perhaps the answer is yes.  Then again, perhaps not.  What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-7527047709738006237?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/7527047709738006237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=7527047709738006237' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7527047709738006237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/7527047709738006237'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/06/skills-spells-and-classes.html' title='Skills, spells, and classes'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-3942309649619281841</id><published>2009-06-14T16:17:00.000-07:00</published><updated>2009-06-14T16:59:57.335-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trading'/><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Trading</title><content type='html'>I've been out for almost a week, so when I came back it was time to pull forward code from Locane and get some other minor things out of the way.  As it turns out, he's been working on secure trading between players, and while I was away I read some articles on that same subject.&lt;br /&gt;&lt;br /&gt;There seems to be quite a hubbub going on in the MMO world regarding trading, in particular gold farming.  The general consensus seems to be that gold farming is something that should be utterly squashed wherever it crops up; further, anyone caught selling gold (or other in-game currencies) for real life cash, outside of the game environment, should be penalized as harshly as possible.  Most games delete not only the accounts of the farmers, but the accounts of the purchasers as well, and occasionally the accounts of anyone they trade with.&lt;br /&gt;&lt;br /&gt;This seems ridiculously harsh to me.&lt;br /&gt;&lt;br /&gt;When I first started the game, I didn't really have an opinion on this topic.  I originally didn't think trade would be big enough for it to really be a problem.  Over the years, players began to donate to the game simply because they liked it; we (I and the other admin at the time) decided to give minor perks to those contributors as a way to say thanks.  Many years later, we now offer a wide host of things for purchase from the game store.&lt;br /&gt;&lt;br /&gt;While we were setting all this up, I got a lot of very good advice from some very bright people.  The overwhelming majority of them were very clear on one point:  thou shalt not sell things that unbalance the game.  This includes characters, equipment, gold and a number of other nasties I have seen for sale on (less than successful) games in the past.&lt;br /&gt;&lt;br /&gt;Players don't like the idea that someone without skill can buy their way to the top.  If you take a look at our &lt;a href="http://dentinmud.org:8080/faq/6"&gt;list of purchasables&lt;/a&gt;, you'll notice that everything on that list is either convenience, customization, or a minor boon.  This policy has worked rather well for us over the years.&lt;br /&gt;&lt;br /&gt;But back to the issue at hand, which is trading.  I don't see any reasonable way that it can be completely prevented, and from my standpoint anything that's traded had to be obtained by someone somewhere.  If they're going to be doing it anyway, I'd much rather put in some sort of secure mechanism for it, so people can't be ripped off.&lt;br /&gt;&lt;br /&gt;Locane's code starts this off by handling in-game currency only.  Once that's stable and working well, I'm going to add the ability for people to trade dollars, but only ones that have already been donated.  Once dollars are donated to the game, you can buy donation things with them or trade them to other people.  Eventually, I'll probably set up business accounts that let people withdraw those dollars from the game.&lt;br /&gt;&lt;br /&gt;It will be interesting to see if this model works for any other MMOs.  So far, I'm not aware of any that have tried it.&lt;br /&gt;&lt;br /&gt;One major concern I have is regarding duping and generation bugs.  If someone finds a way to exploit gold or certain items into existence, it may quickly become very difficult to clean up.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3942309649619281841?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3942309649619281841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3942309649619281841' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3942309649619281841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3942309649619281841'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/06/trading.html' title='Trading'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-3568596309991041941</id><published>2009-06-07T18:54:00.001-07:00</published><updated>2009-06-07T19:09:50.404-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><title type='text'>Customization</title><content type='html'>After a week of forcing myself slowly, piece by piece through this code, I finally managed to boot in player customization on character create.  I don't know if it's just me being in a coding funk for a week or not, but it seemed abnormally hard to get this done and installed.&lt;br /&gt;&lt;br /&gt;The upshot is that we now have basic character customization for new players.  They get to pick a handful of obvious traits, from which a generic long description is created.  This will hopefully solve two problems:&lt;br /&gt;&lt;br /&gt;1) The long description problem, which is that most players seem utterly incapable of generating proper long descriptions.  Those who are capable don't want to take the time.  Everyone now has a sane long by default.&lt;br /&gt;&lt;br /&gt;2) Far more important is the issue of player investment.  Specifically, new players are insufficiently invested in their character to return after their initial playing session.  The hope is that customization will pay off in the long run, as the people who do take the time to customize will be more likely to return.  I should be able to verify this over the next few months by tracking stats.&lt;br /&gt;&lt;br /&gt;There's still a lot of work that needs to be done here, including ways (other than long descs) to see your features, and ways to change them.  Changing them is actually going to be more interesting than I expected - as was pointed out to me, age is technically quested for via the fountain of youth, why not quest for most of the other attributes as well?&lt;br /&gt;&lt;br /&gt;Things like changing hair length or style are clearly easy to do (got some scissors?), but other things might be interesting for players.  Changing skin color for example, could be a pretty involved process.&lt;br /&gt;&lt;br /&gt;Now that this is done, there's a whole raft of low level changes on my todo list.  Lack of player investment is only one part of the problem; the remainder is that the game just isn't as fun as it should be for low levels.  I have several more quests to add, as well as a couple more shopkeepers and more utility items.  There are also some structural additions to be made, but those can wait for a while.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3568596309991041941?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3568596309991041941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3568596309991041941' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3568596309991041941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3568596309991041941'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/06/customization.html' title='Customization'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8800494692177748313</id><published>2009-05-25T19:53:00.000-07:00</published><updated>2009-05-25T20:07:26.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><title type='text'>Newbie Statistics</title><content type='html'>I had a brainstorm the other day for how to pull a certain class of statistics from the various logfiles and other data we track in the game.  The idea is that we grab all the new characters created in a one month time period, then see how many of them continued to log in for successive months.  I decided to try this on four month time periods to filter out storage characters and other infrequently used but legitimate pfiles.&lt;br /&gt;&lt;br /&gt;Here's a chunk of sample data, looking at how many of the players we got in January continued to log in for February, March, and April:&lt;br /&gt;&lt;br /&gt;Total created in 2009-01:  230&lt;br /&gt;Total last saved in 2009-04 or earlier:  198&lt;br /&gt;Total last saved in 2009-01:  146   Average Total Levels:  8&lt;br /&gt;Total last saved in 2009-02:   21   Average Total Levels:  22&lt;br /&gt;Total last saved in 2009-03:   16   Average Total Levels:  28&lt;br /&gt;Total last saved in 2009-04:   15   Average Total Levels:  30&lt;br /&gt;&lt;br /&gt;Some quick observations to distill it down:&lt;br /&gt;&lt;br /&gt;- Of the 230 characters created in January, 198 have not yet logged in for May.  Only 32 of 230 (14%) have been active this month.&lt;br /&gt;&lt;br /&gt;- Nearly all of the dropouts are in the first month, with 146/230 logins (63%) never bothering to log in again.&lt;br /&gt;&lt;br /&gt;- Once you get past that critical first month drop out period, we lose people at a relatively steady rate.&lt;br /&gt;&lt;br /&gt;- The first month players actually get more than one level. They get 8 on average. Even having leveled multiple times, they still don't return.&lt;br /&gt;&lt;br /&gt;When I looked more closely at the data, I found some obvious patterns for nearly all of the people that drop out in the first month.  In particular, they play the game for a reasonable period of time (15 minutes to two hours), get a handful of levels, learn a few things, then log off.  About half of these never sign in again.  The remainder sign in a small number of times, generally for only a couple of minutes, then sign back out.&lt;br /&gt;&lt;br /&gt;There's a really obvious reason:  The game isn't fun enough to hook newbies at low levels. They're bored, and don't know what to do when they return.&lt;br /&gt;&lt;br /&gt;Ways to improve this:&lt;br /&gt;&lt;br /&gt;- Add more really low level quests in the encampment. (I already have a couple ideas for this.)&lt;br /&gt;&lt;br /&gt;- Add more quest guides for the Vemarken and other Sloe quests.&lt;br /&gt;&lt;br /&gt;- DClient changes to make quests and other things more obvious and interesting (in progress.)&lt;br /&gt;&lt;br /&gt;- Build the low level generic skills (cooking, skinning, etc) and make them useful.  This may involve some form of low level crafting.&lt;br /&gt;&lt;br /&gt;- Possibly give return bonuses.  I believe I saw a game at one point that gave increased experience if you returned after a long absence.&lt;br /&gt;&lt;br /&gt;This is more than enough stuff in the short term to keep me and probably several other people busy.  Unfortunately, the only things I can offload onto others are the first two, and I'll probably still end up being involved at least incidentally to do cleanup and monitoring.  I generally have a better idea of where the dropout points are for really low level players, because I spend more time watching them.&lt;br /&gt;&lt;br /&gt;If I get all of this done before the end of May, I will be very surprised.  It's a good short term goal though. (The return bonuses are excluded for now, as I don't know if we want to go that route.  I'll have to think about that one a bit more.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8800494692177748313?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8800494692177748313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8800494692177748313' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8800494692177748313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8800494692177748313'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/05/newbie-statistics.html' title='Newbie Statistics'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-2430887494002407817</id><published>2009-05-18T19:35:00.000-07:00</published><updated>2009-05-18T19:56:49.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>Advertising/Public Relations</title><content type='html'>Last night on a whim, I searched for the mud Dragon Realms just before I went to bed.  DR is arguably one of the biggest and most successful muds of all time; they are fully commercial, with accounts going for as much as WOW accounts.  They regularly top 700 concurrent users, and that's just for the one server.  They have at least one additional.&lt;br /&gt;&lt;br /&gt;An hour later, it was way past my bedtime and I must have had over 50 browser tabs open.  This sort of thing is an amazing way to get ideas of where to post and link to Alter Aeon; they've already done most of the hard work, and Google has made it accessible.&lt;br /&gt;&lt;br /&gt;Today, I began trimming tabs.  I'm down to probably only 15 or so, most of which are waiting for some event to occur.  I know I can repeat this process for a handful of other large games easily enough.  I'm about 90% certain that the main AA pages can breach Google Page Rank 5 by the end of the year, possibly sooner.&lt;br /&gt;&lt;br /&gt;While copying isn't a great way to be a leader, it can at least get you into second or third position.  Given that we're in about 30th place right now, I'm totally up for doing some copying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2430887494002407817?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2430887494002407817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2430887494002407817' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2430887494002407817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2430887494002407817'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/05/advertisingpublic-relations.html' title='Advertising/Public Relations'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5673135794035591156</id><published>2009-05-14T10:33:00.000-07:00</published><updated>2009-05-14T10:45:38.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>MishMash</title><content type='html'>A quick note - I built up a Muds and Mudding lens over at Squidoo.  Squidoo is one of those new things which I don't entirely understand, like I don't understand Facebook or Myspace.  But other people do, so perhaps it's not such a bad idea.  The url is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.squidoo.com/mudding"&gt;http://www.squidoo.com/mudding&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been thinking about and doing a bit of work on the client recently.  One of the newer changes was the addition of an enemy hitpoint bar; the current release client has this bar between the automap and the buttons.  I moved it to be in the regular prompt bar, and this serves to make the screen a lot less 'busy'.&lt;br /&gt;&lt;br /&gt;All this has got me thinking about what to do next.  I really should allow for an unhooked/floating automap, so users can position it wherever they want.  I've also been thinking about having a sort of 'list window' where people can perform actions on list items, such as looking in containers, getting things from containers, etc.&lt;br /&gt;&lt;br /&gt;Until recently, the mechanics of how to do this in the code have been somewhat questionable.  As usual, talking to my girlfriend about it generated a solution:  uuid strings for objects and characters, that you can always use to get an exact command reference to that object or character.&lt;br /&gt;&lt;br /&gt;I started on the first stage of this process last night, with infrastructure.  The game has had a really, really bad PRNG for years; I threw something together with basically no experience about ten years ago and we've been using it ever since.  Looking at the code, I'm actually somewhat surprised it didn't cause a lot of visible trouble over the years.&lt;br /&gt;&lt;br /&gt;We now have a brand new, 10-register lagged fibbonacci PRNG driving the game.  Not only is it faster, but it actually produces reasonably high quality random numbers to drive the game mechanics.  Using this, im now generating proper UUIDs that I can have some amount of confidence in.&lt;br /&gt;&lt;br /&gt;The list window however I'm less sure about.  I suspect this needs a proper design.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5673135794035591156?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5673135794035591156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5673135794035591156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5673135794035591156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5673135794035591156'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/05/mishmash.html' title='MishMash'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-9043057941803896703</id><published>2009-05-12T08:47:00.000-07:00</published><updated>2009-05-12T09:08:03.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Articles and Propaganda</title><content type='html'>There's a new article out for thieves.  It's a pretty comprehensive overview of the various stealth skills, such as sneak, hide, stealthy movement, searching, and even how these affect other skills such as backstab.  It's a real treasure trove of information:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dentinmud.org/articles/thieves-creed-stealth-and-hiding.html"&gt;The Thieves Creed - Stealth and Hiding&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With this addition, we've now cleared 30 official articles, not counting things like FAQs, the quest guides, or other related things.  The web site is actually becoming useful to players.&lt;br /&gt;&lt;br /&gt;The articles are continuing to show their value, both in greater and lesser extent than I had expected.  I regularly refer people to the articles when discussions and Q/A happens on public channels.  I really had not expected this, and I'm constantly surprised at the things people ask.  A good example is the article on &lt;a href="http://www.dentinmud.org/articles/time-and-age.html"&gt;Time, Age, and Aging&lt;/a&gt;, which I refer people to regularly.  Other articles, such as the article on attack strategies, are much less active, though much more comprehensive.&lt;br /&gt;&lt;br /&gt;One other area that did not work out as I had expected has to do with the web traffic to the articles.  I was expecting substantially higher numbers in regards to web traffic than what we've been seeing.  I think this might be a critical mass problem however, in that traffic has been picking up recently.&lt;br /&gt;&lt;br /&gt;In other news, the maps and quest guides have been very, very popular on the web pages.  They are now the second and third heaviest hitters on the site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-9043057941803896703?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/9043057941803896703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=9043057941803896703' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/9043057941803896703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/9043057941803896703'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/05/articles-and-propaganda.html' title='Articles and Propaganda'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4453982892165465745</id><published>2009-05-11T07:10:00.000-07:00</published><updated>2009-05-11T08:00:26.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Client release and changelog</title><content type='html'>A new client release, 0.980, is out!  The changelog is at the bottom of this note, with the previous changelog for 0.979 since I didn't post that anywhere else.  At some point, I need to get the changelogs integrated into the server code.&lt;br /&gt;&lt;br /&gt;The biggest two changes from my perspective were automap improvements and the enemy hp bar.  The automap was by far the hardest, as display code has to be nearly perfect, and it has to handle a boatload of corner/edge cases.  There's really not a lot of ways to do it cleanly, and for some scenarios you simply have to special case it.  Here is an example of a particular problem area before the changes:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dentinmud.org/screenshots/bandera-azul-0979.png" alt="The village of Bandera Azul using the old mapper" /&gt;&lt;br /&gt;&lt;br /&gt;Here is the same location with the new mapper:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dentinmud.org/screenshots/bandera-azul-0980.png" alt="The village of Bandera Azul using the new mapper" /&gt;&lt;br /&gt;&lt;br /&gt;For compact areas such as this one, it makes a huge difference.&lt;br /&gt;&lt;br /&gt;The enemy hitpoint bar is another interesting addition, in that it displays the condition of whatever you're fighting, similar to how Diablo II does it.  There's a problem with it however - the current location is off to the side, above the automap.  This turns out to be remarkably hard to see and use while fighting, even though it's close to the scrolling text and the input window.&lt;br /&gt;&lt;br /&gt;I think what's going on is that the left hand side of the client is now simply too 'busy' for the eye to easily handle.  Diablo II handled this by putting the enemy hp bar in a well defined, easy location (top dead center), and you knew that the middle of the screen was the most important place to look.  The hp and mana bubbles were left and right bottom corner respectively.  Each location is very easy to deal with.&lt;br /&gt;&lt;br /&gt;For the client however, we have the big main window, which pretty much needs to be scanned continuously in order to keep up with things, the typing bar at the bottom but sorta off to the side, the hp and mana bars above that but right next to it, and the enemy status bar to the left somewhere in the lower middle of the screen.  It's just not that easy to find things.&lt;br /&gt;&lt;br /&gt;One option I've been kicking around is to make the status bar two levels deep, with the enemy hp directly above your hp.  Not only does this give a good way to directly compare yourself against the target, but it puts both things in a very visible, single location.&lt;br /&gt;&lt;br /&gt;I did some looking around at adding audio, and think I've found some libraries that should do the job.  It's a lot of work though, and it might be best for me to figure out how to do actions and triggers first.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Changes in version 0.980 - May 08, 09&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;Keypad '5' now performs 'scan'.&lt;br /&gt;Keypad '-' now walks 'down'.&lt;br /&gt;Keypad '+' now walks 'up'.&lt;br /&gt;Minor improvement to url clicking.&lt;br /&gt;Don't lock main window unless more than one character is selected.&lt;br /&gt;Diagonal exits now display a bit more cleanly.&lt;br /&gt;Added basic zoom in/zoom out on landscape scale changes.&lt;br /&gt;Left hand layout now puts automap at bottom of screen.&lt;br /&gt;&lt;br /&gt;The automap is now either on all the time or off all the time, it no longer toggles based on login state.&lt;br /&gt;&lt;br /&gt;Allow ctrl-+ and ctrl-- to more reliably change font when using keypad movement mode.&lt;br /&gt;&lt;br /&gt;A display window for a target hp bar is now visible above the left hand side automap.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Changes in version 0.979 - Apr 28, 09&lt;br /&gt;-------------------------------------------------------------&lt;br /&gt;Add walking via number keypad.  Toggleable using 'preferences' menu.&lt;br /&gt;Clear scroll lock when a button is clicked.&lt;br /&gt;Add 'local echo' option under 'preferences' menu.&lt;br /&gt;Help message when you disconnect/are disconnected is now highlighted.&lt;br /&gt;Prevent beeping for additional key combinations.&lt;br /&gt;Add mousewheel support.&lt;br /&gt;The 'quit' dialog buttons have been changed from 'Quit' to 'Exit Program' instead.&lt;br /&gt;&lt;br /&gt;Command queue cleared when you're disconnected, so your next connect attempt doesnt immediately error out at the name prompt.&lt;br /&gt;The '//clear' command now clears scrollback, like the menu.&lt;br /&gt;The 'clear' command in game now works.  It sends two screens full of blank lines, so you don't lose your scrollback.&lt;br /&gt;&lt;br /&gt;Mapping colors tweaked to better show towns and cities.&lt;br /&gt;Default ansi colors tweaked a bit to get more color saturation.&lt;br /&gt;Ansi color palette options added for ZMud style colors and bright colors.&lt;br /&gt;&lt;br /&gt;When you start fighting, the area map will display 'Combat!' instead of the area name.&lt;br /&gt;A new "Left Side Layout" option has been added under preferences.  This moves the buttons and automap to the left side of the screen, whereit's closer to the various text windows.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4453982892165465745?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4453982892165465745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4453982892165465745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4453982892165465745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4453982892165465745'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/05/client-release-and-changelog.html' title='Client release and changelog'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1768569802145229272</id><published>2009-04-30T19:20:00.001-07:00</published><updated>2009-04-30T19:42:30.827-07:00</updated><title type='text'>Warriors and clerics</title><content type='html'>Today, I installed a bunch of changes to the game - the first major skill updates in quite some time.  The overall additions were:&lt;br /&gt;&lt;br /&gt;Potion throwing - mid level thief, increases chance of spells being cast when potions are thrown at mobs.  This whole potions being thrown at mobs thing is pretty new in itself.&lt;br /&gt;&lt;br /&gt;Potion bottling - allow conversion of liquid container brews into potions suitable for later use or throwing.&lt;br /&gt;&lt;br /&gt;Iron claw - mid level warrior skill to lower the chance of disarm.&lt;br /&gt;&lt;br /&gt;Revenge - seriously amped up berserk when one of your group members dies.&lt;br /&gt;&lt;br /&gt;Protector - single target tanking, another group skill.&lt;br /&gt;&lt;br /&gt;These skills took me on average about 4 hours each to build, test, and install.  It's a pretty short period of time all things considered, but a couple of them were pretty simple to do as well.  I've had single skills in the past that were substantially more complicated and time consuming to set up.&lt;br /&gt;&lt;br /&gt;One of the comments I saw after all this was installed was along the lines of "I'm surprised that warriors don't have more attack skills", which is a valid complaint (of sorts.)  Warriors really -don't- have a lot of single attack skills.  One of the main reasons I haven't added more is that I didn't want to create a whole bunch of cookie cutter skills that are basically all the same stupid generic damage thing.&lt;br /&gt;&lt;br /&gt;At the same time, mage has something similar to this:  there are a number of damage spells, often the only difference between them being the damage type or mana/damage throws.  Perhaps having a bunch of similar kinds of skills for warrior isn't really any different, and might make people happier.  I'll have to think about that a bit more.&lt;br /&gt;&lt;br /&gt;I always viewed mage and thief as being the 'standalone' classes, the ones best suited to soloing.  Cleric and warrior have always struck me as being more group oriented.  The available skills seem to reflect that, in that thief has basically no group skills and mage can cast spells on other people.  Cleric and warrior are the glue that hold groups together, and a lot of the skills I've added for warrior reflect that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1768569802145229272?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1768569802145229272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1768569802145229272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1768569802145229272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1768569802145229272'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/04/today-i-installed-bunch-of-changes-to.html' title='Warriors and clerics'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3643961429321601243</id><published>2009-04-23T13:13:00.000-07:00</published><updated>2009-04-23T15:03:23.949-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='automatic map generation'/><category scheme='http://www.blogger.com/atom/ns#' term='mapping'/><category scheme='http://www.blogger.com/atom/ns#' term='automapper'/><title type='text'>Remapping of cities</title><content type='html'>In the quest for linearity and mapping in the game, the answer for towns and cities is clear and obvious:  all rooms are the same size.  I remapped and expanded the main city in Alter Aeon today, which really cleared up a lot of conflicts and has left no rooms on top of each other.  It maps clean, and it wasn't even a lot of work.  Here's an example of the client map for the new version:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.dentinmud.org/screenshots/alter-aeon-map-090423-ralnoth.png" alt="Example map of Ralnoth from the AA Client" /&gt;&lt;br /&gt;&lt;br /&gt;There's lots of roads, lots of places for shops and other stuff, and a few dead spots to allow for expansion.  Most of the player comments have been positive, which is surprising - generally anything that messes up someone's directions causes all kinds of havoc.&lt;br /&gt;&lt;br /&gt;This doesn't address the issue of how to handle large expanses of space though, for example forests and other linkage areas.  You really don't get an idea of how big the world is until you put into perspective the relative size of cities.&lt;br /&gt;&lt;br /&gt;Take for example, my home town.  It's a small town of 5-10k people, and from the recent Google maps it's a little over a mile in diameter.  Meanwhile, the state in which in which it's located is around 250 miles in diameter (except that its squarish.)  Take a penny and tape it to your wall.  That's the size difference, and that's just one state, not an entire continent.  For a continent, tape a quarter to skyscraper.&lt;br /&gt;&lt;br /&gt;I'd like to think Ralnoth in the game is probably about the same size.  The currently expanded Ralnoth is about 12 rooms wide and 25 tall; let's say 15 for the sake of argument.  Meanwhile, the entire game is perhaps 400 rooms across and tall, neglecting portals to islands and the like.  This makes the entire Alter Aeon mainland around 30 miles in diameter.&lt;br /&gt;&lt;br /&gt;We have entire mountain ranges, jungles, swamps, other cities, and the shores of two oceans on the mainland.  All within 15 miles of the central city of Ralnoth.  Starting to see the picture?&lt;br /&gt;&lt;br /&gt;A more reasonable continent size is on the order of 500-1000 miles.  Even for a 500 mile wide continent, the scale of Ralnoth would imply walking through a minimum of 7500 rooms to get from one side to the other.  This is probably not reasonable from a gameplay standpoint, so we need to find a different approach.&lt;br /&gt;&lt;br /&gt;The simplest and easiest is to simply define cities to be much larger than they are.  If we declare Ralnoth to be ten miles across instead of 1, we end up with a much more reasonable room count.  But in that case, even the smallest house represents half a square mile of land area.&lt;br /&gt;&lt;br /&gt;A better approach seems to be to change the size of roads and paths, such that the desired distances can be achieved.  This kills the dull/boring wilderness areas and gets people out into the world to do something interesting.&lt;br /&gt;&lt;br /&gt;I think there's a couple of different ways to handle this.  One is to have different sized rooms and render them as best you can.  Perhaps using terrain or other flags you can automatically decide what rooms are what size.&lt;br /&gt;&lt;br /&gt;But it seems to me that a far better and easier way is to separate large and small sized zones from each other.  When you leave one, you end up in the other with a different set of maps.  For example, leaving a town shows the town zooming to a small size relative to the forest you're walking in.  So many games have done this in the past, that it's a trivially obvious feature.  It also happens to be a very good candidate for my overall mapping problems.&lt;br /&gt;&lt;br /&gt;I'll let you all know if it works out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3643961429321601243?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3643961429321601243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3643961429321601243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3643961429321601243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3643961429321601243'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/04/remapping-of-cities.html' title='Remapping of cities'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2847292305666445806</id><published>2009-04-18T07:54:00.000-07:00</published><updated>2009-04-18T08:08:35.931-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>More PR</title><content type='html'>Over time, you tend to run out of things to say on blogs, and I think I'm hitting that wall.  It's not so much that you run out of stuff entirely, it's that you tend to repeat the same things over and over.&lt;br /&gt;&lt;br /&gt;I'm rapidly finding out that running the game as a business very much falls into this category.  You're never done with PR, web page improvements, enhancements to the newbie experience, game additions, etc, but there's only so many ways you can say "I worked on the web pages today."  I suppose such is the drudgery associated with a business.&lt;br /&gt;&lt;br /&gt;This pretty well explains what I've got to look forward for the next few weeks.  I've found some new avenues to pursue regarding getting traffic to the site, and as usual there are articles to post and other PR work to be done.  This is all slowly paying off, but it's definitely slow - I suppose like guitar, if everyone could learn it in two weeks, it wouldn't be impressive.  The PR:4 thing is a real boost however, in that it shows that it's actually possible to improve things.  I hope to hit PR:5 by the end of the year, but I suspect we're a long way away from that.&lt;br /&gt;&lt;br /&gt;I just got more advertising set up for &lt;a href="http://topmudsites.com"&gt;Alter Aeon on Top Mud Sites&lt;/a&gt;, though I suspect it will drive the same type of people as the Mud Connector.  This market for players is really limited, but in the short term it's going to have to be our bread and butter.&lt;br /&gt;&lt;br /&gt;(Another neat web site I stumbled across is &lt;a href="http://mudstats.com"&gt;Mud Stats&lt;/a&gt;, which collects periodic statistics from games and sorts them.  Stats collection appears to be every few hours, so it's pretty up to date.)&lt;br /&gt;&lt;br /&gt;On a somewhat depressing note, I shut off the Google ads completely and the overall newbie load does not appear to have changed by any noticeable amount.  It's only been a few days so far and the stats may yet be bogus, but if it's really that hard to pull in true newbies the future of the game could be very questionable.  I need to look at this a lot harder I suspect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2847292305666445806?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2847292305666445806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2847292305666445806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2847292305666445806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2847292305666445806'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/04/more-pr.html' title='More PR'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2965151086965873184</id><published>2009-04-08T07:24:00.000-07:00</published><updated>2009-04-08T09:53:51.807-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>Setting Priorities in a Business</title><content type='html'>Something I need to constantly remind myself about is prioritization.  There's only one of me, and there's way more things that need to be done than I have time for.  One has to prioritize.  You're not choosing between things that are right and things that are wrong; you're optimizing to get the most out of your time.&lt;br /&gt;&lt;br /&gt;Here's what I'd consider a rough priority list, not necessarily in any order:&lt;br /&gt;&lt;br /&gt;- Improve the Mud Connector banner ad to drive more traffic&lt;br /&gt;- Improve the main AA pages - add a couple of images, some player quotes&lt;br /&gt;- Release another client version with true non-mudder additions&lt;br /&gt;- Improve level 5-29 experience, especially in groups&lt;br /&gt;&lt;br /&gt;Some of these are easier than others, but of all four of these, I note that none of them are on my board.  Not that the things on my board aren't important, but somehow, these irritating bottlenecks have managed to avoid being written there.&lt;br /&gt;&lt;br /&gt;How exactly do the four most important bottlenecks not get placed on the todo list?  There are multiple reasons; first and foremost, these bottlenecks are continuous, persistent things.  They almost always require improvement, and focusing on them exclusively would mean nothing else gets done.&lt;br /&gt;&lt;br /&gt;It could also be that they are too obvious - of course that needs to be done!  Or it could simply be that I lack the incentive to work on them.  I find incentive to be in short supply these days.&lt;br /&gt;&lt;br /&gt;With the influx of newbies from the &lt;a href="http://mudconnect.com"&gt;Mud Connector&lt;/a&gt; and other sites, things appear to be going reasonably well.  But as I've told others, the Mud Connector is a limited market that will saturate in just a few short years, if not sooner.  We have to work on other things as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2965151086965873184?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2965151086965873184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2965151086965873184' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2965151086965873184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2965151086965873184'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/04/setting-priorities-in-business.html' title='Setting Priorities in a Business'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8801356538723232533</id><published>2009-04-05T21:24:00.000-07:00</published><updated>2009-04-05T21:45:04.101-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Improving Google PageRank</title><content type='html'>In a totally unexpected twist of fate, the main &lt;a href="http://www.dentinmud.org"&gt;Alter Aeon&lt;/a&gt; web pages breached PR:4 over the weekend.  I was actually not expecting this at all; it's only been 3 months since we went from 2 to 3, and I figured we were well below the required popularity for this jump.  If this increase is anything like the last one, our traffic and the quality of our web hits should increase substantially.  In fact I only noticed it because the web hits were abnormally high today.&lt;br /&gt;&lt;br /&gt;This leaves the very open question of how to get to PR:5 though.  I haven't submitted links or done link propaganda in a while, mostly because I was running low on quality sites to hook up to.  I'm pretty sure getting PR:5 is going to be a lot harder than 4.&lt;br /&gt;&lt;br /&gt;Also related to this, I've been setting up ad campaigns at a few other sites.  These should be coming on-line in the next few days.&lt;br /&gt;&lt;br /&gt;All this advertising is actually paying off (though in a limited, short term kind of way.  More on that later.)  The rate of verified, saved unique newbies has doubled since November; the actual number of logins has tripled.  Pretty much all of the stats agree on the relative increases, so I know that I'm seeing something legitimate.  How long it will take for that to push up the average userload is an open question however.&lt;br /&gt;&lt;br /&gt;One unfortunate aspect is that these logins are fairly expensive.  I'm not tremendously over budget with ads, but I'm not breaking even either.  I need the userload (and associated purchases) to increase between 50 and 100% in the next few months for things to work out.&lt;br /&gt;&lt;br /&gt;Now, the short term aspect of things:  nearly all of the new advertising is on mud lists and other mudding related sites.  This is a problem, as the total pool of mudders is small, and the pool size is shrinking.  I saw a statistic somewhere that the total number of mudders is only on the order of a hundred thousand; if things go well this advertising market will saturate quickly.&lt;br /&gt;&lt;br /&gt;The only real answer to this that I've been able to come up with is to focus more on the custom AA client.  To get a million accounts, I'll need to pull from the global pool of ordinary, non-mudding gamers.  In order to do that, I need to get away from text-only interfaces and complex clients.&lt;br /&gt;&lt;br /&gt;There's enough web work to keep me busy for a while, and I have to get the game's taxes done this week, so I won't be improving the client for a while.  But it's becoming clear that the client is very, very high priority.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8801356538723232533?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8801356538723232533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8801356538723232533' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8801356538723232533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8801356538723232533'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/04/improving-google-pagerank.html' title='Improving Google PageRank'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-6870076186885026360</id><published>2009-03-29T09:50:00.000-07:00</published><updated>2009-03-29T10:35:46.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='blind support'/><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><category scheme='http://www.blogger.com/atom/ns#' term='automapper'/><title type='text'>Clients and Newbies</title><content type='html'>I recently released a new client update for Alter Aeon, one that includes (but is not limited to) the following cool changes:&lt;br /&gt;&lt;br /&gt;- vastly upgraded automap&lt;br /&gt;- vote menu&lt;br /&gt;- 'last command select'&lt;br /&gt;- various settings now save&lt;br /&gt;- function key alias mapping&lt;br /&gt;&lt;br /&gt;This really is a big step forward in the evolution of the client, and I've received a lot of compliments on it.  Unfortunately, there is a problem with this client release, and it all goes back to the problem of newbie retention.  But before we go into that, here's some background on the current state of newbies on the game.&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;There appears to be three primary types of new player right now:&lt;br /&gt;&lt;br /&gt;1) Sighted players from mudlists, who generally already have a client.  These players usually don't download the custom client, and if they did they probably would go back to their own client anyway.&lt;br /&gt;&lt;br /&gt;2) Blind players who use blind clients.  They generally don't use the AA client, as it has crap for blind player support.&lt;br /&gt;&lt;br /&gt;3) True new players who probably have never mudded before.  These people are the long-term future, as the number of mudlist players is shrinking and blind players will eventually get their eyes fixed.  This is also by far the largest market to tap.  You don't compete with World of Warcraft unless you're hitting up ordinary sighted people.&lt;br /&gt;&lt;br /&gt;The mudlist players will pretty much do their own thing.  There's a limit to how much you can do with them, as they have their own opinions already.  Many are unrecoverable, as they have been damaged by some other mud.&lt;br /&gt;&lt;br /&gt;Blind players we seem to be doing reasonably well with.  I have no complaints here, other than making the AA client work really well with readers would probably help a good amount.&lt;br /&gt;&lt;br /&gt;The third category, by far the biggest market, is the problem.  Since they have no prior mudding experience, odds are very good they downloaded the client, which shows up easily in my stats.  I can also track logins based on web page hits.  If this class of player is sticking around, I'll see it by looking for newbie players using the client.&lt;br /&gt;&lt;br /&gt;This is exactly what I don't see.  I see the expected players log in with the client, just as they should.  There's a large initial dropout rate, but a good percentage of them level and play for a while.  After that they all disappear.  We're not keeping people entertained.&lt;br /&gt;&lt;br /&gt;I suspect what's going on is they play for a while, run out of stuff to do or don't see the point, and bail.  That pretty much describes my first mudding experiences; I got a low level character and basically just wandered around looking at stuff.  None of the text meant anything in particular to me, and I would wander ridiculous places because I didn't know where to go or what to do.  I didn't even know what the point of the game was.&lt;br /&gt;&lt;br /&gt;I clearly need to add a lot more statistics tracking and try to see where the dropoffs are occuring - what level ranges, number of logins, etc.  With this information in hand we can improve the introductory areas; but so far, my initial numbers indicate that the dropoffs happen for the newbie areas that are well tested and considered in good shape.  So what is really going on?&lt;br /&gt;&lt;br /&gt;-----&lt;br /&gt;&lt;br /&gt;The final piece of the puzzle revolves around the massively improved automap function in the new client.  I tried really hard to play with the mouse for a while, and it worked as well as could be expected.  Unfortunately, when using and concentrating on exploring using the map, the entire text window (which contains everything that's important) disappears.  Not from the client, but from your mind.  It simply isn't as important as the automap.  Looking back at it takes effort.&lt;br /&gt;&lt;br /&gt;So say you're exploring with the map.  You see unexplored spots on the map, you know you can go that way, and you click the button to go there.  Nothing happens.  You click the button again - you just want to go explore that part of the map - and nothing happens again.  How irritating.&lt;br /&gt;&lt;br /&gt;Nothing happens because you're fighting.  But unless you take your eyes off the map and look back to the main window, you don't notice it.  You just get irritated that you didn't move when you clicked the button.  And all the scrolling crap in the main window, highlighted and all, really doesn't mean anything to you.&lt;br /&gt;&lt;br /&gt;I've got a few things in the works to combat this, including audio sounds for fighting, changing the buttons in combat, and changing the area description to list various positions such as "Combat!", sleeping, resting, etc.  That will have to wait until next week though, as I've got a lot of web work to get caught up on as well.&lt;br /&gt;&lt;br /&gt;It's definitely a good problem to chew on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6870076186885026360?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6870076186885026360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6870076186885026360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6870076186885026360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6870076186885026360'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/03/clients-and-newbies.html' title='Clients and Newbies'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-4571747259501030022</id><published>2009-03-22T09:01:00.000-07:00</published><updated>2009-03-22T09:20:39.182-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jerks'/><category scheme='http://www.blogger.com/atom/ns#' term='assholes'/><title type='text'>Statistics can lie</title><content type='html'>Today's topic is the Alter Aeon "asshole" detector.  We've had code in the game for years that tries to do a rough estimation of how big an asshole people are, and after multiple years of tweaks and updates, we have something that produces pretty valid results that correlate spectacularly with bad behavior.&lt;br /&gt;&lt;br /&gt;The problem is that it correlates with the wrong bad behavior.&lt;br /&gt;&lt;br /&gt;Take a look at the following asshole numbers:&lt;br /&gt;&lt;br /&gt; 10.249  Demon&lt;br /&gt; -1.848  Cow&lt;br /&gt; -6.941  Woem&lt;br /&gt;&lt;br /&gt;In this example, Woem is a very well-liked socialite, and is known for being a nice, helpful person.  At the other extreme is Demon, who currently holds the top seven slots on the all-time asshole list.  As of this writing, he has no competitors for top slot.&lt;br /&gt;&lt;br /&gt;However, Cow is the real problem here.  This guy is a real asshole, and is extremely discriminatory toward blind players (and other groups.)  I have considered several times explicitly flagging him as an asshole.  Both fortunately and unfortunately, most of his bad behaviour happens on private or clan channels that I don't or cannot monitor - fortunately it stays away from the general population, unfortunately it festers and breeds hatred in his social circles.&lt;br /&gt;&lt;br /&gt;After thinking about it for a while, the explanation appears to be related to spam.  Demon, and his predecessor Gamlin before him, are both prolific and irritating spammers.  They would both constantly pester people and spam channels with inane and generally low-brow conversation.  Even I have ignored them for periods of time simply to stop the stupidity and prevent them from bothering me.  On the other hand, I cannot recall ever having ignored Cow.&lt;br /&gt;&lt;br /&gt;The overall point is that people feel free to ignore spam because it's meaningless, irritating, and usually undirected.  On the other hand, ignoring the purveyor of a pointed, directed and possibly malicious attack seems like a bad idea.  If I wouldn't do it, why would I expect anyone else to do so?  Cow remains off the asshole list because people don't dare ignore him.  He's too dangerous.&lt;br /&gt;&lt;br /&gt;Somehow, I need to find a way to either counteract this, or allow people to mark or flag assholes.  This is of course the age-old problem of automated board moderation, and I don't expect there to be an easy answer.&lt;br /&gt;&lt;br /&gt;On the plus side, the current algorithm could simply be renamed the 'spammer factor' instead of the 'asshole factor'.  At least then people wouldn't have misconceptions about what it meant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4571747259501030022?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4571747259501030022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4571747259501030022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4571747259501030022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4571747259501030022'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/03/statistics-can-lie.html' title='Statistics can lie'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5262807371340960015</id><published>2009-03-12T19:54:00.000-07:00</published><updated>2009-03-12T20:33:30.655-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='pr'/><title type='text'>Web 2.0</title><content type='html'>Begrudgingly, I am being dragged into the 21st century.  First it was XML formatted output of various pieces of data; now it's XML RSS feeds.&lt;br /&gt;&lt;br /&gt;That's right!  Alter Aeon now has its first RSS feed on the changelog page:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dentinmud.org:8080/changelog"&gt;Alter Aeon Changes and Updates Page&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It just so happens that I have a player that's a web developer for a living, which is really nice - he helps me work through protocol and presentation issues that otherwise would take me quite a while to figure out.  He tells me that I've not quite got the right idea for the descriptions in the current feed, but I should have that fixed in the next day or two.&lt;br /&gt;&lt;br /&gt;I'm also planning on having the player boards in both XML and RSS formats by tomorrow, now that most of the infrastructure is in place.  One of the big showstoppers for doing work on the boards (which are the logical place for an RSS feed anyway) was the lack of unique message IDs.  As of yesterday, this is no longer an issue.&lt;br /&gt;&lt;br /&gt;Honestly though, I'm not sure how much of this is relevant or useful.  How many people will use the feeds?  Will anyone other than my resident web guru bother to use the XML output?&lt;br /&gt;&lt;br /&gt;Either way, Alter Aeon is rapidly heading into the world of new media, and it's really hard to tell where we're going to make the most gain.  An excellent example of this is my recent experiment with Twitter.&lt;br /&gt;&lt;br /&gt;A couple of weeks ago, I set up a Twitter just for the hell of it and linked it up to the main web pages.  I've been using it to just drop periodic status reports about what I'm working on, and hooked up the game to post reboot notifications there.  In virtually no time, I have 8 followers there, while this blog currently has only one, despite being active for months.  Additionally, I've received quite a few web hits from new people through Twitter, also more than from here.&lt;br /&gt;&lt;br /&gt;You never know what's going to work, and just to make things complicated, things work differently for different numbers of users.  As the game grows, I'll have to constantly be adding and reorganizing.  At least it'll be fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5262807371340960015?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5262807371340960015/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5262807371340960015' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5262807371340960015'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5262807371340960015'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/03/web-20.html' title='Web 2.0'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2624063893415912545</id><published>2009-03-01T18:23:00.000-08:00</published><updated>2009-03-01T19:21:31.928-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='complexity limits'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Chaos seems to reign</title><content type='html'>The field of software arguably contains some of the largest and most complex functional systems ever created by man.  Even relatively simple systems can demonstrate incredibly complex behavior, and can hide potentially major flaws through indefinitely long periods of use, only to demonstrate them at inconvenient times.  The Alter Aeon server codebase is no exception.&lt;br /&gt;&lt;br /&gt;Pretty much the most complicated discrete object in the server is the socket stack.  It handles a huge number of protocols and a bunch of different filtering layers, with hooks in various places.  The last major redesign of the socket stack was around 1998; it is a testament to the design of that module that it has required no major modification in that entire time period, though many minor modifications have been made to it.&lt;br /&gt;&lt;br /&gt;Unfortunately, the server is not made of such lovely discrete objects.  Often, obscure bugs lurk in the sea of wild code that makes up the substructure of the system.  This weekend I had the incredible good luck to catch and haul two of these bugs to the surface.&lt;br /&gt;&lt;br /&gt;For years, there have been a handful of issues that occurred seemingly at random.  In the early, old days, some of these would even cause a server crash and reboot the game; but after being unable to find and fix them, the crashes were gradually protected against and ways were found to ignore these spurious events.&lt;br /&gt;&lt;br /&gt;Examples of the two most common of these are deceptively simple:  sometimes, the get_room function would be asked to find a room but be given no instructions on how to do so, and other times a character (a monster or player, it was difficult to tell) would die and simply 'get stuck'.&lt;br /&gt;&lt;br /&gt;In reality, these are monstrously difficult.  The get_room function lacking instruction was mindboggling - it happened perhaps twice a year, the reports were never the same, and there were thousands of places that could be calling the function.  Even as our debug facilities improved, no progress was made - there just seemed to be no rhyme or reason to it.&lt;br /&gt;&lt;br /&gt;The dead character bug was just as bad.  The entire destruct and event handling process was revisited and inspected several times, but no holes were ever found.  Until thursday.&lt;br /&gt;&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;In the course of trying to add some new restrictions to the 'charm' spell, I noticed that the destruct sequences for the charm, possession, and entangling roots spells looked a little goofy.  We didn't check or clear certain important things, but there were comments indicating that we didn't need to because something else over there would take care of it.  Keep in mind that this was entirely my code; I had written this well over a decade ago.&lt;br /&gt;&lt;br /&gt;In the course of looking at this, I suddenly had a realization: there were no 'holes' in the logic for charm or possession, but maybe, just maybe, there was a hole in entangling roots.  Entangling roots did come later, and quite frankly the code for it was a complete hackjob.&lt;br /&gt;&lt;br /&gt;Within ten minutes, I had my answer.  There was indeed a conflict between entangling roots and the 'special' code that made possession and charm work.  The problem then became, how exactly do you fix such a mess?  After about two hours of thinking about it and five more of carefully backing things out and reorganizing, I got what appears to be a stable fix.  There's still some debug logging in it, but this bug appears to be properly killed.  The new code is simpler, the checks are stronger, and we don't rely on obscure handlers to clean up messes.  I hope.&lt;br /&gt;&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;I thought that was the end of my troubles in the short term, but then Glorida shows up with some obscure problem of his own.  He's been working on mob programs, and had built something rather complex that simply was not working.  Not only wasn't it working, but it was doing something weird, and it was doing it reliably.&lt;br /&gt;&lt;br /&gt;This is another one of those 'fairly complex' pieces of the system.  It took me about two hours off and on to get it loaded into my brain so I could really think about it.  It then took me probably another hour to really understand what was going on, and figure out what was happening.  And then it occurred to me:&lt;br /&gt;&lt;br /&gt;This explains a lot of those debug log reports over the years!&lt;br /&gt;&lt;br /&gt;The symptoms he uncovered showed up as a very unusual sort of 'doing things before other things have completed' recursive issue.  One example of it is that a monster would 'say' something to trigger another monster, and the second monster would perform its action before the first monster could fully complete its 'say' command.  In obscure cases, this chaining could be several layers deep.&lt;br /&gt;&lt;br /&gt;For simple things like monsters talking to each other, the worst that can happen is that some things get out of order, and you might not understand why it works sometimes but not others.  But monsters do substantially more than just talk to each other.&lt;br /&gt;&lt;br /&gt;And this is where the problem arose.  In the course of doing more complicated actions, those actions could be interrupted mid-stream by other monsters trying to complete their triggers.  One such set of actions would cause the get_room function to be passed trash.  Another such set of actions would damage one of the monsters so that it could never properly die.  Both of these sets of actions, and a number of others with similar strange effects, were possible and implemented in monsters on the game; and they were sufficiently rare to explain the infrequent bug reports.&lt;br /&gt;&lt;br /&gt;This bug was easier to fix than the first, taking only about three hours to really think about and put together a proper solution.  This fix also appears to work, though it does break a dozen or so special monsters that relied on the old behaviour to function.&lt;br /&gt;&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;There are several morals to this story, which all software engineers worth their salt will immediately recognize:&lt;br /&gt;&lt;br /&gt;1) Never assume you'll remember anything about code you've written.  When you start working on objects so complicated that it takes you an hour every day to load it into your head so you can go to work, what makes you think you'll remember every detail after a year?&lt;br /&gt;&lt;br /&gt;2) Think about the design of any halfway complex system and stick with it.  The charm/entangling roots bug was caused entirely by undesigned/spaghetti code for the character destruct process.  It was never properly designed because I wasn't experienced enough at the time to know how.  It's better now.&lt;br /&gt;&lt;br /&gt;3) Never underestimate the power of race conditions and call trees.  When even simple/obvious actions can invoke arbitrarily complicated effects capable of invoking other effects, you're walking on very, very dangerous ground.&lt;br /&gt;&lt;br /&gt;Software continues to become more complex as time goes on.  It pushes at the limits of our minds, bringing programmers to the limit of what they can understand and then begging them to add one more thing.  It allows arbitrary expression, but with that comes the cost that our comprehension is limited even for structured objects, to say nothing of more arbitrary and abstract ones.&lt;br /&gt;&lt;br /&gt;Where does the future of software lie?  Undoubtedly toward increasing complexity.  But we will need either better tools, or better brains, to be able to manage it.  We are such a young species.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2624063893415912545?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2624063893415912545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2624063893415912545' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2624063893415912545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2624063893415912545'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/03/chaos-seems-to-reign.html' title='Chaos seems to reign'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8989903224705851153</id><published>2009-02-27T21:14:00.001-08:00</published><updated>2009-02-27T21:25:28.264-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='complexity limits'/><title type='text'>Bugs, bugs, and more bugs</title><content type='html'>One nice thing about the (relatively) small userload we have right now is that reboots and the occasional crash aren't so much of a problem.  Which is good, because today has been awful.&lt;br /&gt;&lt;br /&gt;A confluence of factors served to get some really terrible code into the system, but by far the biggest one was my acceptance of pretty well untested code without thoroughly testing or reviewing it myself.  This was the cause of several crashes and an almost-severe memory corruption fault (which was fortunately cleared by a crash in a different, unrelated section of code.)  While my code was definitely not bug-free, it was at least not crash worthy material.&lt;br /&gt;&lt;br /&gt;The only saving grace in this mess is that I found and fixed a bug that has been occasionally plaguing the system for over ten years:  memory structs on players were not being properly cleared in an obscure scenario, resulting in use of mob structures after death.  Were it not for the crash-resistant pooling memory architecture that we've been using since 1996, this would have caused major problems over the years.  As it was, it simply cut warnings and bailed.&lt;br /&gt;&lt;br /&gt;In exchange for this though, I now have a host of other plausible wierdnesses, including a bug that appears to corrupt the destruct timer on dead players.  Again, the design of the codebase is happily tolerating this and simply cutting warnings, but it is disturbing nonetheless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8989903224705851153?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8989903224705851153/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8989903224705851153' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8989903224705851153'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8989903224705851153'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/bugs-bugs-and-more-bugs.html' title='Bugs, bugs, and more bugs'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3718466135959096292</id><published>2009-02-24T12:22:00.000-08:00</published><updated>2009-02-24T13:03:57.557-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>WxWidgets Review</title><content type='html'>Now that I've had a chance to settle down and not work on the client for a couple of weeks, I'm probably in the right frame of mind to write a proper review of wxWidgets.&lt;br /&gt;&lt;br /&gt;First off, &lt;a href="http://wxwidgets.org/"&gt;wxWidgets&lt;/a&gt; is a multi-platform GUI toolkit.  It's been used to build a variety of applications, including the current version of the Alter Aeon Mud client.  It works on a bunch of different platforms, including Linux, Windows, Mac, and a handful of less popular operating systems.  I've used it to build the most recent versions of the &lt;a href="http://dentinmud.org/AlterAeon.exe"&gt;Alter Aeon Mud Client&lt;/a&gt;, a standalone executable designed for the players of Alter Aeon.  It has a graphical automap and basic colored-text console facilities.&lt;br /&gt;&lt;br /&gt;In the case of standard dialogs and standard types of objects, it works quickly and well.  Everything always looks 'as it should' for the platform it's on.  Unfortunately, things work less well for even slightly more complicated objects.&lt;br /&gt;&lt;br /&gt;Take for example the standard wxTextCtrl object.  This uses what's known as a 'native' library - the guts of this object are based on the system libraries where it's built.  On Windows it uses one of the standard text window DLLs, while under Linux it can use GTK or other libraries.  Because of differences between these system libraries, the behavior of the wxTextCtrl on different platforms is vastly different.&lt;br /&gt;&lt;br /&gt;Scrolling may or may not work depending on the platform; URLs, if enabled, may or may not display in Windows depending on the version and service pack level.  Performance varies; disabling certain features may break window formatting, and Append may insert arbitrary line feeds after ever call.  When editing text, attempts to move the cursor past the end of the text triggers a system beep at full volume.  The list goes on, and not all of these are fixable without editing wxWidgets itself.&lt;br /&gt;&lt;br /&gt;One recommended solution for these kinds of problems is to use the wxRichTextEdit class.  This is a ground-up reimplementation of the text window, with an interface similar to the wxTextEdit class but far more comprehensive.  This class actually works pretty well, and it's consistent across platforms as you'd expect.&lt;br /&gt;&lt;br /&gt;The only problem is that it's slow.  Dog slow.  A dog with no legs slow.  Using it as a text console display becomes almost useless beyond a few thousand lines of text.  And that was pretty much the whole point of what I wanted to do.&lt;br /&gt;&lt;br /&gt;Fortunately, there's another solution:  the Scalia wxStyledTextEdit class, which is an add-on module from another open source project.  This class is designed to do fairly complex text formatting and styling, including multiple styles simultaneously and syntax highlighting.  I don't actually need most of that stuff, but I figured I'd give it a try as well.&lt;br /&gt;&lt;br /&gt;The downside of this class is that the interface to make it work is quite complex.  It's a heavyweight class, designed for very complicated types of things.  It's got nearly everything you could possibly need - and some things you don't, including implementation bugs.  Quite frankly, I never got to testing the performance of this class, simply because I could never figure out how to change the background color of the window.  It's not like I didn't try.&lt;br /&gt;&lt;br /&gt;As a last resort, the drawing primitives in wxWidgets are actually pretty good.  In approximately one week, I was able to construct my own text window class with the features and performance that I required for this application.  Remember that if you have a lot of trouble with one particular module, getting out a wxDC and building your own is always a viable option, and if it doesn't work it's no-one's fault but your own.&lt;br /&gt;&lt;br /&gt;Compared with my experience with QT, there is absolutely no comparison:  QT has better documentation, better cross platform support, fewer cross platform bugs, better performance, and a more consistent design.  Unfortunately, QT is LGPL, requiring an installer for binary applications, and the QT libraries are upwards of 50 MB in most builds.  So on that count, wxWidgets wins:  it makes drastically smaller and easy to work with executables.&lt;br /&gt;&lt;br /&gt;Score for wxWidgets:  5/10&lt;br /&gt;&lt;br /&gt;It does most of what it's supposed to do, but don't use it for anything important.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3718466135959096292?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3718466135959096292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3718466135959096292' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3718466135959096292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3718466135959096292'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/wxwidgets-review.html' title='WxWidgets Review'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4431287638956107232</id><published>2009-02-19T10:29:00.000-08:00</published><updated>2009-02-19T10:46:51.724-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='forum'/><title type='text'>New AA forum</title><content type='html'>Hey all, just a quick line to let you know that the new &lt;a href="http://dentinmud.org/forum"&gt;Alter Aeon forum system&lt;/a&gt; is up and running.  This should hopefully provide a place for people to go on the web, instead of to the user boards in the game.  It may also provide a place for new people to search and look for miscellaneous information.&lt;br /&gt;&lt;br /&gt;On other news, I've been sick, but even so there's been a raft of changes.  Most of these are minor little things, but there's a handful of very important ones such as the changing of object lists from singly linked to doubly linked.  That particular change got rid of some fairly nasty lag spikes we were seeing due to very large storage lockers.  As always, see the &lt;a href="http://dentinmud.org:8080/changes"&gt;Alter Aeon changelog&lt;/a&gt; for full details.&lt;br /&gt;&lt;br /&gt;For the rest of the week, I have a handful of web page things to do and clean up, and I need to figure out how to handle moving over a bunch of builders from bport to the main port.  I may also get screwed for a few days next week working for my old job.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4431287638956107232?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4431287638956107232/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4431287638956107232' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4431287638956107232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4431287638956107232'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/new-aa-forum.html' title='New AA forum'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-403687629284405363</id><published>2009-02-14T20:09:00.000-08:00</published><updated>2009-02-14T20:25:18.658-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>New client release</title><content type='html'>Finally, after a week of work, there is a new &lt;a href="http://dentinmud.org/AlterAeon.exe"&gt;Official Alter Aeon Mudding Client&lt;/a&gt; for all to use!  This version fixes a huge number of bugs in the previous code base, and has faster scrolling among other improvements.  Beeping in the input window has been killed and control-c now works again.&lt;br /&gt;&lt;br /&gt;It has been a long, hard five-day-slog to get to this point, but using a custom window class has made so many things better.  Gone are all the hacks I had to put in to make the old libraries work; now they're back to the nice clean code they should have been.  Scrolling works right, select works right, context switches work right - and best of all, it's fast as hell under Windows.  I really wasn't expecting this level of performance.&lt;br /&gt;&lt;br /&gt;The final hitch was getting the input window working reliably.  Through some stroke of luck I found the event handler responsible for intercepting control C and the backspace events.  With some really nasty state-handling code and about two hours of experimentation, I finally have an input window class that traps out all the beeps and handles selection copy without stupidity.&lt;br /&gt;&lt;br /&gt;If I had known this to start, it would have saved me so much time and effort.  Time lost that I could have spent elsewhere; such is life.  But going forward, it's so liberating - no longer am I at the mercy of crap that can't be made to work the way I want it to.&lt;br /&gt;&lt;br /&gt;If it fails, its my own fault.  And I can live with that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-403687629284405363?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/403687629284405363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=403687629284405363' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/403687629284405363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/403687629284405363'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/new-client-release.html' title='New client release'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3206425610356754371</id><published>2009-02-11T20:56:00.000-08:00</published><updated>2009-02-11T21:15:41.811-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Sucking further wxWidgets</title><content type='html'>I've managed to fix and clean up more code in the last two days than in the last four months simply by throwing out these broken toolkit parts and writing my own display class.  Bugs that I never could figure out are gone; workarounds for problems that should never have been there in the first place are no longer needed.  It displays, it's solid, and it works.  I've been mudding with it all day long.&lt;br /&gt;&lt;br /&gt;So far, I have a fairly primitive display class with a scroll bar, display window, and border that changes color when it locks.  The display window has primitive and buggy line wrapping, but it's usable.  There is currently no URL clicky support or select/copy support.  Performance is even pretty good.&lt;br /&gt;&lt;br /&gt;Performance isn't as good as it should be though - when resizing narrow, it takes far too long to recalculate line numbers.  I suspect most of the time doing this is spent in pointless object conversions between various objects.  First thing tomorrow, I'm going to be switching over most of the wxString objects to regular const char *'s.  There's an awful lot of string processing that needs to be done, and doing it in wxString land is problematic.&lt;br /&gt;&lt;br /&gt;After that, I need to rework the way the line data is stored so I can handle select/copy and proper line wrap.  This same code will also help with URL support, so it's possible that all three could be done pretty quickly.  At this point, the display window is fully featured.&lt;br /&gt;&lt;br /&gt;Next up, after the display window, is the typing bar/input window.  This one is more troublesome; it's one of those things I'd really rather not re-implement, but I suppose if I have to I can.  Either way, I have to do something with it:&lt;br /&gt;&lt;br /&gt;1) The input bar beeps if you backspace too far.  This is a show-stopper.  Computers should NOT make noise unless actively requested to, especially for trivially ignored failure cases.  It appears to be impossible to turn off this buggy behavior in the library.&lt;br /&gt;&lt;br /&gt;2) It also appears to be impossible to reliably set and maintain the font and font color for this object.  Backspacing until it's empty often has unpredictable results.  No modifications to the class have been made, and it produces different results on different windows versions more and less frequently.  This smacks of being a library/DLL bug.&lt;br /&gt;&lt;br /&gt;Hopefully I can find some other input window class that is less problematic, and still have multi-line support.  Multi-line paste is mandatory, as I paste a lot of notes and descriptions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3206425610356754371?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3206425610356754371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3206425610356754371' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3206425610356754371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3206425610356754371'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/sucking-further-wxwidgets.html' title='Sucking further wxWidgets'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-2406464649068040046</id><published>2009-02-10T08:22:00.001-08:00</published><updated>2009-02-10T08:45:06.583-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>wxWidgets sucks...</title><content type='html'>... but even though it sucks, I can't really blame it.  I think the problem is endemic when using pretty much any large toolkit, especially younger ones or ones that are built on top of other toolkits.&lt;br /&gt;&lt;br /&gt;First, some background.  wxWidgets is a windowing library to allow people to quickly and easily develop GUI applications.  It's cross platform and in general built on top of other toolkits.  This means that the layers of toolkits upon toolkits is often at least two levels deep, exponentially increasing the likelyhood that bugs in one layer will foul up things elsewhere.&lt;br /&gt;&lt;br /&gt;These sorts of interactions are causing me huge difficulties with the display and input windows in the client.  After much soul searching, I have what appears to be three choices going forward, each with various pros and cons, none of which are ideal.  In short:&lt;br /&gt;&lt;br /&gt;1) Use the native wxTextCtrl class.  Pros - some minimal screen reader support, cut/paste works, already mostly working.  Cons - scrolling doesn't work worth a shit, different performance on different windows versions, urls are unreadable for at least some people, no way to disable beeping on backspace, and easily a third of the style flags and other functions don't work or don't work correctly, often with no workaround.  Further, the god damned thing intercepts certain keystrokes, specifically Control-C, before I can get at them, and there appears to be no workaround for this.&lt;br /&gt;&lt;br /&gt;2) Use the scintilla derived display class.  Pros - someone else maintains it.  Cons - pain in the ass to get working, manual url and cut/paste handling, bigger, vastly more complicated than my application requires, and inability to configure simple, important things like the background color.&lt;br /&gt;&lt;br /&gt;3) Write my own.  Pros - it will do exactly what I want, when I want, with the interface that I want.  Should be fast and small.  Cons - I have to do all the work.&lt;br /&gt;&lt;br /&gt;After all the crap I've been through in the last month trying to get the default text controls to do incredibly simple, obvious things, I'm heavily leaning toward option 3 at this point.  In the time I've spent trying to get existing controls to work, I could have without question written my own custom primitive.  Or rather, I now know enough to write my own.  The road would have been rockier in the beginning.&lt;br /&gt;&lt;br /&gt;I think this is a prime example of why I rail against toolkits in general.  They are very risky; there's no guarantee that what you're using will work, or can be made to work the way you want it to.  In this case, I have lost a huge amount of time trying to work around toolkit limitations.&lt;br /&gt;&lt;br /&gt;Option 3, here I come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2406464649068040046?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2406464649068040046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2406464649068040046' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2406464649068040046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2406464649068040046'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/wxwidgets-sucks.html' title='wxWidgets sucks...'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-4436987440091719944</id><published>2009-02-05T09:02:00.000-08:00</published><updated>2009-02-05T09:08:06.403-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><title type='text'>Somebody Likes Us...</title><content type='html'>I just thought I'd put up a quick note pointing at a post on ehowton's blog:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ehowton.livejournal.com/248251.html"&gt;Eric's perspective of Alter Aeon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's a neat little piece on AA, including screen shots.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4436987440091719944?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4436987440091719944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4436987440091719944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4436987440091719944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4436987440091719944'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/somebody-likes-us.html' title='Somebody Likes Us...'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-5352820554644006563</id><published>2009-02-04T10:37:00.000-08:00</published><updated>2009-02-04T11:30:18.646-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><category scheme='http://www.blogger.com/atom/ns#' term='automapper'/><title type='text'>Graphical automap</title><content type='html'>After a long hiatus, I got a new version of the &lt;a href="http://dentinmud.org/TinyAeon.exe"&gt;Alter Aeon Mudding Client&lt;/a&gt; built and released for Windows.  This version fixes a lot of bugs, but is still subject to the quirks and peculiarities of whatever version of Windows it runs on.  This is really irritating, as the URL linking is black (and hence invisible) on some versions of windows, but not on others.&lt;br /&gt;&lt;br /&gt;The big update is the graphical automapper, which renders squarish blocks based on terrain and some flags.  Auto-generated tiles are what I'm using right now, and all things considered it's not terrible, though it's also not great.  Here is a link to a &lt;a href="http://dentinmud.org/screenshots/alter-aeon-090204.png"&gt;screenshot of the Linux/X version of the client&lt;/a&gt;, to give you a rough idea.  The Windows version looks similar, with slightly different font sizes and different borders/edges.&lt;br /&gt;&lt;br /&gt;As usual, with a new release comes new bugs:  the control keys appear to no longer work, the 'vanishing url' problem is still present, diagonal exits don't work (this requires a server and protocol change), and a number of more minor bugs have been reported.  It's also lacking blind/visually impaired support, though the default support is already much better than for the old client.&lt;br /&gt;&lt;br /&gt;All this (except for blind support, which may be impossible) needs to be fixed before it's suitable to take over the place of the old client.  It's getting a lot closer though.&lt;br /&gt;&lt;br /&gt;One thing I'm grudgingly coming to terms with is the player desire for triggers and variables in the client.  Normal mudders aren't going to use it until it has reasonable features for scripting.  I really don't want to encourage scripting, but it may be a necessary evil to getting people to use it.&lt;br /&gt;&lt;br /&gt;My hope with this project is that low quality graphics and a visual display are better than no display whatsoever.  The game is complex, well balanced, and solid - people who play it tend to stick around and find it entertaining for long periods of time.  Getting people into it seems the hardest part.&lt;br /&gt;&lt;br /&gt;A possible vote in favor of a bad client being better than no client comes from friends of existing players.  I can't even remember how many times I've been told some version of the following:&lt;br /&gt;&lt;br /&gt;"I tried to get my friend into it, but he/she just couldn't understand how a game that's only words could possibly work."&lt;br /&gt;&lt;br /&gt;Even if it's just a cheesy icon indicating where you are, it at least gives non-mudders a reference:  everyone's played old school tile-based games.  I hope.&lt;br /&gt;&lt;br /&gt;Another major concern I have is that I'm now officially encroaching on what I'd call the territory of other, vastly better funded games.  This marks the first real foray into adding graphics to the system; right now that consists of low quality, autogenerated graphics, using a mapping system which doesn't even work reliably (due to area linearity and such.)  What I have is crude, primitive, and unartistic.&lt;br /&gt;&lt;br /&gt;People can get low quality graphics anywhere; and attempting to compete with modern high-quality rendered 3D games is a non-starter, unless you have a reasonably large budget.  Further, the game as it stands is fundamentally not designed to be 3D rendered.  It would take a major rework to add support for that, and likely result in the destruction of most of the interesting game content.&lt;br /&gt;&lt;br /&gt;So the big question becomes:  what is the next step for the client, after it's stable and usable by the default population?&lt;br /&gt;&lt;br /&gt;Right now, the only big hitter I have on my list is another type of automap, one that uses the generated area maps from the &lt;a href="http://dentinmud.org/maps"&gt;Alter Aeon World Maps&lt;/a&gt; page.  The server would send approximate X/Y coordinate pairs, and the client could map them to the appropriate position on the generated maps.  This would give people an idea of which areas they were near, and approximately where they were at.&lt;br /&gt;&lt;br /&gt;Beyond that, I really don't know.  I'm sure something will present itself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5352820554644006563?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5352820554644006563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5352820554644006563' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5352820554644006563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5352820554644006563'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/02/graphical-automap.html' title='Graphical automap'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-5790254351471128664</id><published>2009-01-30T06:06:00.000-08:00</published><updated>2009-01-30T07:53:31.463-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><title type='text'>Gaming Articles Suck!</title><content type='html'>It's been a while, so I figured I should post some observations about the web pages and traffic.  Things work differently than I had expected, though honestly I didn't know what to expect anyway.&lt;br /&gt;&lt;br /&gt;The biggest surprise so far is that all of the articles we've written and put up over at the &lt;a href="http://dentinmud.org/articles"&gt;Mudding and Gaming Articles&lt;/a&gt; page are worthless.&lt;br /&gt;&lt;br /&gt;Ok, not completely worthless; in fact, there's a huge amount of good information in them, ranging from general gaming hints to specific strategies for advanced players.  But in terms of web traffic, they've so far shown to be worth substantially less than I expected.  The obvious impact of the articles on the overall site, from the standpoint of driving external traffic, seems to be minimal.&lt;br /&gt;&lt;br /&gt;Take for example the heaviest hitting articles:&lt;br /&gt;&lt;br /&gt;1) [48] The glossary of mudding terms;&lt;br /&gt;2) [45] The muds and mudding faq;&lt;br /&gt;3) [37] Alternative mudding clients;&lt;br /&gt;4) [30] Equipment optimization;&lt;br /&gt;5) [28] High level attack strategies.&lt;br /&gt;&lt;br /&gt;The number out front is unique pageviews per month.  The heaviest hitter has 1.5 views per day, while the main AA pages have over 100.  Note that even fan fiction, artwork, and the historical archives beat several of these.  Further, an eyeball's estimate places the -total- hits from the articles pages at approximately the same value as the new player mudding guide.  In short, one of the more time consuming aspects of the web pages, article development, has virtually no obvious impact on the overall site quality.&lt;br /&gt;&lt;br /&gt;[Note - 'no obvious impact' is not the same as 'no impact'.  The pages have definitely improved the site in other ways.  It's just not obvious.]&lt;br /&gt;&lt;br /&gt;I can think of a couple of good reasons for this.  One might be that the articles are buried, and having to click through two layers to get to them is a real hindrance. To unbury the articles, it would be simple enough to have an 'article of the day' show up on the main page, if I can find screen real estate for it.&lt;br /&gt;&lt;br /&gt;The other, more obvious reason is that the articles don't have wide appeal.  They are for the most part written for a very narrow audience of Alter Aeon players.  The search engines seem to be reflecting this, in that the most general of the pages, the glossary and mudding FAQ, are the only pages with nonzero page rank.&lt;br /&gt;&lt;br /&gt;Wider scope articles that still sell AA are more problematic.  Adjusting some of the existing articles to have broader gaming scope may help.  Even so, there's a limit to how broad an article on turning the undead can be.&lt;br /&gt;&lt;br /&gt;On the plus side, each article contributes some non-zero amount of traffic to the site, and helps give it breadth and depth.&lt;br /&gt;&lt;br /&gt;As a side note, this blog is equally boring as a source of information for people.  I don't post anything overly controversial or interesting to the general public.  Because the site is so narrow, and because my prose is so mechanical, the Alter Aeon Mob Factory drives virtually no traffic as well.  It probably doesn't help that the layout is still the basic default.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-5790254351471128664?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/5790254351471128664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=5790254351471128664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5790254351471128664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/5790254351471128664'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/its-been-while-so-i-figured-i-should.html' title='Gaming Articles Suck!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4915739638142721312</id><published>2009-01-27T12:32:00.000-08:00</published><updated>2009-01-27T13:01:39.764-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='seo'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='google adwords click fraud'/><title type='text'>Google Adwords - The Content Network</title><content type='html'>In preparation for the advertizing bump due in a little over two weeks, I've started looking at little harder at statistics, and at some of the other options.  One of the easier things I can test out is to turn the Google 'content network' back on, as this is known to bring in a lot of web page hits for not a huge amount of cash.  I've been fiddling with this for the last couple of days.  But it's clear that the content network has some problems:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1) Even after these last couple of days, I still don't have things set up properly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The content network has huge numbers of impressions, and above certain thresholds it's possible to blow your entire advertising budget for the day in a -very- short period of time.  I've finally got it cranked back far enough that I don't run out for the day, but it's still about four times higher than the level I'm shooting for.&lt;br /&gt;&lt;br /&gt;My advice if you're going to use the content network is to start out at $0.01 and raise it up by a penny a day until you figure out the appropriate level for what you're trying to do.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;2) Content network click rates are stupidly low.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Expect at best one tenth the click through rate of regular adwords ads.  Rates like 0.04% (four clicks per ten thousand impressions) so far seem typical.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3) Content network clicks are damn near worthless.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you don't have some way of tracking or testing content clicks for click through, you're fooling yourself.  Keep in mind that there's a fundamental difference between someone searching for information, and someone presented with information incidentally while they're looking for something else.&lt;br /&gt;&lt;br /&gt;Regular adwords suffers much less from this problem than the content network, because of 1) the negative feedback ad system which kills bad ads, and 2) because people searching for something are still looking for something instead of being shoved things they don't care about.&lt;br /&gt;&lt;br /&gt;My own experience and statistics for this show that the content network is 10 times (!) less likely to result in a saved character or a new player than regular adwords search traffic.  Price your content ads to reflect the difference for your own site.&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;4) Content clicks can be gamed, sometimes badly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I have so far had only &lt;a href="http://mobfactory.blogspot.com/2008/10/google-adwords-click-fraud.html"&gt;one serious incident of content network click fraud&lt;/a&gt;, but it can and will happen if you run an extended campaign or one with wide coverage.  Sometimes, Google will refund and clear the damage to your account; in my case, they did nothing, even though it was clearly and obviously fraudulent.&lt;br /&gt;&lt;br /&gt;The only recommendation I can give for this is set your daily limit to the lowest possible value that still serves everything you want to serve.  Then watch carefully for days when the budget is exhausted more quickly than usual.  Assume there will be no recovery for click fraud; your only recourse is to limit the damage.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4915739638142721312?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4915739638142721312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4915739638142721312' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4915739638142721312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4915739638142721312'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/google-adwords-content-network.html' title='Google Adwords - The Content Network'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3546133976417547295</id><published>2009-01-24T09:07:00.001-08:00</published><updated>2009-01-24T09:37:37.347-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='future directions'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='logins'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Where do we go from here?</title><content type='html'>There's been a lot of development and other Alter Aeon activity over the last couple of weeks, but the bigger question is, to what end?  While making ad-hoc changes can improve things, it's not necessarily the best way to get to a particular destination.&lt;br /&gt;&lt;br /&gt;There is a method to the madness here, and a specific end goal.  In February, I'll be approximately tripling the advertising budget, and if I'm going to be spending that kind of money we damn well better be ready for it.  I have no intention of getting traffic to the site only to fail the new arrivals in other ways.&lt;br /&gt;&lt;br /&gt;This still leaves a lot of things to be done:&lt;br /&gt;&lt;br /&gt;- Getting proper ad and propaganda materials ready.&lt;br /&gt;&lt;br /&gt;- Level 33 should be in and available.  Happy high level players advancing to a new goal will help new players feel like there's something interesting going on.&lt;br /&gt;&lt;br /&gt;- A proper new version of the dClient should be available, hopefully with a prettier automap and better blind support.&lt;br /&gt;&lt;br /&gt;On the plus side, the statistics collection on new players is rapidly improving, and we have a much better idea of where people drop out and where problem spots are.  The 'saved character' rate is actually quite high now that false negatives have been properly weeded out; of the new connections that begin the character creation process, approximately half of them get to level 1 and save.  This is excluding multis - it's a pretty close measure of brand new people who have never seen the game before.&lt;br /&gt;&lt;br /&gt;The 50% 'player save' value is also consistent against the dClient numbers, which I had not expected.  I would have thought that the dClient numbers would be higher, and they are after a fashion - but not nearly as high as they should be.  The dClient clearly needs more work and polish.&lt;br /&gt;&lt;br /&gt;In addition to this, I'm in the process of collecting statistics for the islands to see where new players drop out.  This is a longer term collection, which will hopefully tell us how to streamline and improve areas on the islands.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3546133976417547295?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3546133976417547295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3546133976417547295' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3546133976417547295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3546133976417547295'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/where-do-we-go-from-here.html' title='Where do we go from here?'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-6810150393103917208</id><published>2009-01-23T20:27:00.000-08:00</published><updated>2009-01-23T20:42:27.421-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='islands'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='articles'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Status Update</title><content type='html'>Events so far this week on Alter Aeon:&lt;br /&gt;&lt;br /&gt;- The first pass of microleveling is installed.  It's required to get to level 31 and level 32.  We're still thinking about the best way to handle level 33 and higher.  There's also a new mode for showing the who list that can be toggled with the 'set who' command.&lt;br /&gt;&lt;br /&gt;- We got a new article up on the web, courtesy Morpheus:  &lt;a href="http://www.dentinmud.org/articles/the-black-art-of-poison-brewing.html"&gt;The Black Art of Poison Brewing&lt;/a&gt;, which talks about brewing poisons using the 'brew poison' skill.&lt;br /&gt;&lt;br /&gt;- Minor additions and updates to the &lt;a href="http://www.dentinmud.org/articles/mudding_glossary.html"&gt;Mud Terms Glossary&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- Various web page updates, which I've been slacking on recently.  One of the more interesting ones is the &lt;a href="http://dentinmud.org:8080/quests"&gt;Alter Aeon Quests List&lt;/a&gt;, which is now sorted by geographic area.  You can see which quests are on which islands, or on the mainland.&lt;br /&gt;&lt;br /&gt;- A 'resurrect' spell has been added, which is effectively a more powerful summon using the corpse of a dead teammate.  Resurrect ignores distance and various nosummon flags, making it easier to put a group back together after deaths.  You must be grouped and have a corpse to use the spell, so there's not much potential for abuse.&lt;br /&gt;&lt;br /&gt;- A new 'faq' section has been added, detailing how the in-game text editor works.&lt;br /&gt;&lt;br /&gt;- A new version of the &lt;a href="http://dentinmud.org/TinyAeon.exe"&gt;TinyAeon custom Alter Aeon client&lt;/a&gt; has been released, with hopefully improved screen and scroll handling.  Even better, a new version is on its way and should be uploaded in the next couple of days.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;There's also been a boatload of minor fixes, to everything from specp 25 (the shopkeeper reload specp) to channel replay.  This week has seen a lot of cleanup and improvement to various things, though the microleveling additions spiked a lot of controversy.  It's looking fairly good now though, thanks to good comments from lots of players.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6810150393103917208?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6810150393103917208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6810150393103917208' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6810150393103917208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6810150393103917208'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/status-update.html' title='Status Update'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-300977944987548758</id><published>2009-01-17T09:44:00.000-08:00</published><updated>2009-01-17T11:54:58.940-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><title type='text'>High levels</title><content type='html'>As a result of the recent high level observations, I've been making minor changes and cleanup to the player experience.  One of the things I looked at was int/wis requirements on spells.&lt;br /&gt;&lt;br /&gt;The reason for looking at int/wis was mostly newbie based; new players have limited practices available, and have to decide where to spend them on which stats.  If you train stats based on the minimum-cost method, you'll find that stats are naturally separated by two, for example int 18 and wis 16, or int 18 and wis 14.&lt;br /&gt;&lt;br /&gt;Under the old int/wis system, the values were hand picked and mostly but not completely followed an algorithm for this that left the int/wis requirements separated by 3.  This left new players with a subtle but weird choice to make:  should my secondary casting stat be my second highest stat, or third?  3 is between 2 and 4, so keeping the costs even was inefficient.&lt;br /&gt;&lt;br /&gt;With the new system, the separation is always 4, so that's never an issue.  Also, all the values are calculated, with (currently) no exceptions, and all the spells are consistent.  Plus, I got to delete a lot of lines of code.&lt;br /&gt;&lt;br /&gt;Unfortunately, there are some complaints, and this seems to be where it always breaks down.  No matter how small a change you make, someone gets upset, or pissed off, or threatens to leave.  Most of the new players will never even know that there was a change, or the ones that do will adjust their characters within a few days at most.  The real complaints come from the highbies.&lt;br /&gt;&lt;br /&gt;One such player confronted me while I was in the middle of writing this post.  In this particular instance, the change has moved the 'sanctuary' spell from 17/20 int/wis to 18/22, which honestly is a bigger change than I expected (the high mana cost of the spell is bumping up the requirements from what would otherwise be 17/21.)  This player is a high level thief/warrior, and doesn't have the natural int/wis to cast sanc now, though they barely had it to begin with.  After months of arduous effort, the total 105+ in question finally managed to get a 20 natural wisdom, just as the spell requirement changed from 20 to 22.&lt;br /&gt;&lt;br /&gt;I'm not sure how I feel about this.  Part of me wants to say 'WTF, a total 105+ with a 20 wisdom?', and other parts of me think other things.  But an additional point was raised that brings up yet another design related question:&lt;br /&gt;&lt;br /&gt;Why bother to have thief and warrior classes if it's effectively mandatory to have caster classes to do anything interesting?&lt;br /&gt;&lt;br /&gt;I'm not sure how I feel about this one either.  The game has always been multiclass.  I expect people to make full use of whatever skills and spells are available in each class, and to use those spells and skills to compensate for weaknesses in other classes.  To have a level 20 cleric incapable of casting sanctuary or other cleric spells simply isn't something I would have expected; after all, sanc is an EXTREMELY powerful spell used by virtually everyone virtually all the time.  The game is practically built around it.&lt;br /&gt;&lt;br /&gt;In short, I don't know that it's legitimate to have a warrior-only character and expect it to be able to stand on its own and compete with multiclass characters of similar level (or total levels.)  The game just isn't designed that way.  That type of operation is generally reserved for single class games.&lt;br /&gt;&lt;br /&gt;Still, the player is pissed and will likely continue to be so.  I have a shitty set of choices to decide from.  Compromise a subtle change that I know in the long run is what should be done?  Make an exception for particular spells?  Make an exception for bitching players?  Ignore it?&lt;br /&gt;&lt;br /&gt;I'll let you, the readers decide.  And then probably ignore the result.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-300977944987548758?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/300977944987548758/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=300977944987548758' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/300977944987548758'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/300977944987548758'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/high-levels.html' title='High levels'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8428091796040298399</id><published>2009-01-14T19:35:00.000-08:00</published><updated>2009-01-14T20:37:48.150-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='game balance'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='high levels'/><title type='text'>The death (dearth?) of high levels</title><content type='html'>It has finally been made sufficiently clear to me that there is a problem with boredom at high levels.  As near as I can tell, it's not that people actually run out of stuff to do; it's that they run out of -fun- stuff to do.&lt;br /&gt;&lt;br /&gt;Consider the plight of a total 118 or higher.  When it costs you a billion experience per level, you pretty much have three options:&lt;br /&gt;&lt;br /&gt;1) Run experience for weeks straight to get one measly level, ignoring anything dangerous like EQ or quest runs&lt;br /&gt;&lt;br /&gt;2) Do EQ and quest runs and forget about getting a level&lt;br /&gt;&lt;br /&gt;3) End up halfway in the middle without incentive to get more exp and not wanting to do anything else because you'd lose the exp you already have&lt;br /&gt;&lt;br /&gt;Of these, option 3 is the worst case, and unfortunately probably the most likely.  Fortunately, all of the above have an easy solution:  microlevels, also known as level staging.&lt;br /&gt;&lt;br /&gt;In short, it's a way to bank off experience or whatever the level requirement is in the short term, and give people the ability to work on the level at their own pace.  It's even better if you can display that somehow, so that others can see them making progress.  Everyone likes feedback about how they're making progress.&lt;br /&gt;&lt;br /&gt;This brings me to a whole slew of ideas:&lt;br /&gt;&lt;br /&gt;- display of the microlevel on the who list somehow?&lt;br /&gt;- more use of fame for microlevels?&lt;br /&gt;- use of quests for microlevels?&lt;br /&gt;- abandoning exp completely for microlevels?&lt;br /&gt;- going to levels 33-40&lt;br /&gt;- limit rate of acquiring microlevels and levels?&lt;br /&gt;&lt;br /&gt;All of these things are something to think about, but either way we're looking at opening up level 33 this year.  Whatever I set up, I'd like to do it such that we only open at most one level per year - it's far too easy to get massive inflation otherwise.&lt;br /&gt;&lt;br /&gt;For the display thing, the current display model is something like:&lt;br /&gt;&lt;br /&gt;[30 32 23 32]  Jerk doesn't exist&lt;br /&gt;&lt;br /&gt;Suppose Jerk has 16 microlevels on his way to level 33 warrior:&lt;br /&gt;&lt;br /&gt;[30 32 23 32] 16  Jerk doesn't exist&lt;br /&gt;&lt;br /&gt;I like the way this looks; perhaps other formats would be prettier.  Microlevels for each class, with only the highest being displayed sounds like a reasonable way to handle it.&lt;br /&gt;&lt;br /&gt;I also really want to do more with requirements other than experience.  We did some of this with fame, in requiring fame to gain levels, but right now a quad 32 only has to use 700 fame to get there.  The current level requirements for fame right now are:&lt;br /&gt;&lt;br /&gt;30 - 25 fame&lt;br /&gt;31 - 50 fame&lt;br /&gt;32 - 100 fame&lt;br /&gt;33 - 200 fame&lt;br /&gt;&lt;br /&gt;Note that the level 33 setting has never been used, but 200 fame sounds like a good value for it.  For a dual-32 having used 350 fame, another 200 to get to level 33 seems fair.  Pro-rating this per microlevel would help people to know where exactly they stand.&lt;br /&gt;&lt;br /&gt;Other possibilities for level requirements could be as simple as explorer tokens, or some periodic event.  I'm definitely open to more ideas in this area.&lt;br /&gt;&lt;br /&gt;For implementation of this, if I had my way I'd make microleveling required for any level higher than 30.  This still might be doable, so long as the level and other costs associated with it don't go out of bounds.  Microlevels seem kinda stupid and redundant if you can get 15 of them in an hour.  50 million exp spread across 30 microlevels to get to level 31 leaves only 1.6 mil per microlevel; perhaps the real cost for it should be more along the lines of 300 million, or 10 million per microlevel.&lt;br /&gt;&lt;br /&gt;This would be a huge increase in the cost of level 31, but with the idea of giving some bonus for each microlevel it might be well tolerated. Consider a temporary bonus for each microlevel, perhaps hp for each of the 32 microlevels on the way to warrior 33.  When the final level is actually attained, the microlevel bonus goes away and is replaced by whatever the real level gives you.  Players can then start accumulating another set of microlevel bonuses.&lt;br /&gt;&lt;br /&gt;Ok, enough ideas for today.  Feel free to post back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8428091796040298399?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8428091796040298399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8428091796040298399' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8428091796040298399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8428091796040298399'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/death-dearth-of-high-levels.html' title='The death (dearth?) of high levels'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-8128021895691194038</id><published>2009-01-14T13:20:00.000-08:00</published><updated>2009-01-14T13:51:34.882-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='statistics'/><category scheme='http://www.blogger.com/atom/ns#' term='new players'/><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='google analytics'/><title type='text'>Google Page Rank</title><content type='html'>As I posted a while back, the AA website's page rank recently went up; since the site went from 2 to 3, there's been a factor of 1.5 increase in overall traffic to the site.  Newbie logins, and Google Analytics stats all seem to reflect this general increase.&lt;br /&gt;&lt;br /&gt;However, I'm not sure I buy it.  When I look at the competitive analysis trend lines in Analytics, I see a pretty regular pattern leading up into December, then things start to look a little different.  Going into January, it appears that the global amount of traffic in all categories has increased by the exact same factor of 1.5 I'm seeing on AA. I'm not entirely sure what to make of this.  I've seen January increases before, but I never paid much attention to it.  I always figured it was people waiting to go back to school, bored and without much to do.&lt;br /&gt;&lt;br /&gt;One possibility is that the competetive analysis numbers I'm seeing are related to reclassification of the web site.  When a page/site changes page rank, does Google reclassify the site to compare it to the new group?  It's possible that the wierdness I'm seeing is simply the new competition in the new page rank category.  It would be nice to have more information on this.&lt;br /&gt;&lt;br /&gt;Whatever the reason, this influx of newbies is really refreshing.  I can only hope that it's not a temporary blip, and that it continues going forward.  For too many months did I work on the web site to see no gain whatsoever.&lt;br /&gt;&lt;br /&gt;In other news, I found out the reason for the massive drop in players around the October time frame:  competition.  A rather large group of dedicated blind mudders for all intents and purposes got bored and left to go to another (very large) mud.  I've learned several things from finding this out:&lt;br /&gt;&lt;br /&gt;1) I need to pay more attention&lt;br /&gt;2) My mortals are bored&lt;br /&gt;3) It's possible to do what I want to do.  The target mud has on the order of a thousand players on it.  That's the short term goal for AA.&lt;br /&gt;4) I'm slacking.  This is my fault.  See #1 above.&lt;br /&gt;&lt;br /&gt;So I suppose I have a belated new-years resolution:  I will pay more attention to the competition and what they are doing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8128021895691194038?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8128021895691194038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8128021895691194038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8128021895691194038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8128021895691194038'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/google-page-rank.html' title='Google Page Rank'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-4870525641586845830</id><published>2009-01-12T06:24:00.000-08:00</published><updated>2009-01-12T06:32:39.889-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><title type='text'>More xml</title><content type='html'>The ongoing XML saga continues, with updates to the code to properly escape the font color tags and the addition of the wholist at &lt;a href="http://dentinmud.org:8080/xml/wholist"&gt;http://dentinmud.org:8080/xml/wholist&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Beyond that, the main web pages got another facelift, and I think I'm done propaganda blitzing for a while.  That gets old real quick.&lt;br /&gt;&lt;br /&gt;Time to try to get some bug fixes into the server and the client if time permits today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-4870525641586845830?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/4870525641586845830/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=4870525641586845830' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4870525641586845830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/4870525641586845830'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/more-xml.html' title='More xml'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8387924522798061515</id><published>2009-01-09T14:43:00.001-08:00</published><updated>2009-01-09T14:44:20.464-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><title type='text'>Deathlogs</title><content type='html'>One more real quick post before I bail out for tonight:  I got Alter Aeon an entry on &lt;a href="http://deathlogs.com"&gt;deathlogs.com&lt;/a&gt;, which is a repository of PK kill logs for a handful of muds.  While I don't anticipate that this will bring in a huge amount of traffic, it's yet another external link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8387924522798061515?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8387924522798061515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8387924522798061515' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8387924522798061515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8387924522798061515'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/deathlogs.html' title='Deathlogs'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-6260031673808582545</id><published>2009-01-09T13:51:00.001-08:00</published><updated>2009-01-09T14:03:09.778-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client automapper'/><category scheme='http://www.blogger.com/atom/ns#' term='xml'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><title type='text'>xml xml xml</title><content type='html'>I really hate that hitting enter while in the title bar automatically posts, even if the post body is empty.&lt;br /&gt;&lt;br /&gt;Today, I added support for XML dumping of player data via the web interface.  This was at the request of the player &lt;a href="http://dentinmud.org:3004/players/cu"&gt;Cu&lt;/a&gt;, whose XML data can now be seen at &lt;a href="http://dentinmud.org:3004/xml/players/cu"&gt;http://dentinmud.org:3004/xml/players/cu&lt;/a&gt;.  The idea was to export various player statistics so that he could dump it into a database and do databasey things with it; in short, a third party app using AA data.&lt;br /&gt;&lt;br /&gt;I really dislike XML, but I like this plan.  I also hope to export other data, hopefully without compromising the game itself, so that more things can be done with it.&lt;br /&gt;&lt;br /&gt;This reboot also brings in a handful of minor changes to newbie sends and the email command, but more importantly it brings in a major change to area checking.  We now have code to check linkages between areas and figure out how far off in terms of relative position they are.  This should help us line up the world and get things to be a little more grid-like.&lt;br /&gt;&lt;br /&gt;This gridlike preparation is in anticipation of graphical maps in the dclient.&lt;br /&gt;&lt;br /&gt;In other news, there's a bunch of presentation/toolkit bugs in the client, pointed out by various people.  Some of them do not look easy to fix.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-6260031673808582545?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/6260031673808582545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=6260031673808582545' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6260031673808582545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/6260031673808582545'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/xml-xml-xml.html' title='xml xml xml'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5644717058053134361.post-9125783897084410433</id><published>2009-01-07T19:34:00.000-08:00</published><updated>2009-01-07T19:43:18.390-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='propaganda'/><title type='text'>Propaganda</title><content type='html'>I've been reading SEO stuff off and on for a few months and I've been trying to incorporate various principles into the AA pages as I run across them and understand them.  Recently, I got a guide with a whole bunch of short tips in it, and I've been going through it (very slowly.)  This week's tip was deep linking.&lt;br /&gt;&lt;br /&gt;So tonight, I spent several hours submitting various AA pages for deep linking to other web sites.  This was mostly the glossary and article index, but I learned something very unexpected from this adventure:  trying to get sub-pages linked with indexes means that I have to make the sub-pages useful to said indexes.&lt;br /&gt;&lt;br /&gt;In short, by doing this, I'm improving the web page content in the most meaningful possible way:  I'm making it more useful to external parties.  In retrospect it's obvious.  But it's something I could have missed for a very long time if I hadn't bothered to try it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-9125783897084410433?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/9125783897084410433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=9125783897084410433' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/9125783897084410433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/9125783897084410433'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/propaganda.html' title='Propaganda'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-8296079725937735712</id><published>2009-01-07T12:11:00.000-08:00</published><updated>2009-01-07T12:15:56.956-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='system event'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Xmas event log!</title><content type='html'>I finally got the 'will christmas be saved' event log posted on the web.  To see who all participated and in what way, you can find the log here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dentinmud.org/events/081229-will-christmas-be-saved.html"&gt;Alter Aeon 2008 Christmas System Event&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's also linked to off our &lt;a href="http://dentinmud.org/events"&gt;Alter Aeon System Events&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;This looks like it was a pretty fun event, as there were a lot of participants.  There were even several deaths during the final battle, all of which are recorded for posterity in the event log.&lt;br /&gt;&lt;br /&gt;In other news, version 971 of the &lt;a href="http://dentinmud.org/TinyAeon.exe"&gt;Alter Aeon Custom Client&lt;/a&gt; is available.  This version has mostly bug fixes in it, but also moves some of the direction buttons around and in general has a slightly nicer looking interface.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-8296079725937735712?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/8296079725937735712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=8296079725937735712' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8296079725937735712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/8296079725937735712'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/xmas-event-log.html' title='Xmas event log!'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-1374222674327905012</id><published>2009-01-06T19:43:00.001-08:00</published><updated>2009-01-06T19:56:43.753-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><category scheme='http://www.blogger.com/atom/ns#' term='toolkits'/><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>When will we have a real client?</title><content type='html'>Client work continued hard and heavy today, with two major additions going in:  first, the hp/mana/movement status bar is functional.  This is a bunch of progress bars, red for hp, blue for mana, and yellow for movement, that goes between the command-entry window and the main window.  As you get beat up or heal, your stats update in real time, and the bars get redrawn to give a graphical representation of your current status.&lt;br /&gt;&lt;br /&gt;A lot of this code was portable from the old client codebase, but between two different sets of library bugs on two different platforms, I ended up spending several more hours than is reasonable getting it all working.  And in the end, I ended up doing a full client release with a trivially obvious bug in one of the display settings:  the mana bar displays movement numbers if the client window is made wider than a certain amount.&lt;br /&gt;&lt;br /&gt;The second thing I got working was to use the autoexit data to highlight/darken the various direction buttons.  So if you're in a room with 3 exits showing, those three direction buttons will be lit.  You can use the others if you want anyway (eg. to find doors by bumping into them), but if you're running from something or exploring, this should help.&lt;br /&gt;&lt;br /&gt;The surprising thing about the autoexit buttons is how ugly they are.  The display is just plain ugly, and I'm not real sure why.  I'll have to poke around with it a bit more and see what else I can do with it.&lt;br /&gt;&lt;br /&gt;I looked a little at the scrolling issue listed in the previous post, but it's entirely unclear to me how you would hook such an event with this library.  I'm also pretty well stuck on the accessibility functions.  Unfortunately, noone makes howtos for something this specific.&lt;br /&gt;&lt;br /&gt;Tomorrow, other things permitting, I'm going to try to get new style automaps working.  That should be fun, and probably overly ambitious:  I have enough bug fixes and miscellaneous cleanup to probably consume the day already, and web page work is starting to fall behind.&lt;br /&gt;&lt;br /&gt;For web pages, I have a large number of directions for the blind maps project, and an event report from christmas which needs to be put up.&lt;br /&gt;&lt;br /&gt;This would be easier if I could fork copies of myself.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-1374222674327905012?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/1374222674327905012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=1374222674327905012' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1374222674327905012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/1374222674327905012'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/when-will-we-have-real-client.html' title='When will we have a real client?'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-3701415321397142675</id><published>2009-01-05T19:06:00.000-08:00</published><updated>2009-01-05T19:13:00.712-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='client'/><title type='text'>Client updates</title><content type='html'>I'm in the process of getting another client build out.  This version will be almost entirely bug fixes, with a number of wierdnesses with scrolling and the dialog boxes fixed.  It should be available at &lt;a href="http://dentinmud.org/TinyAeon.exe"&gt;http://dentinmud.org/TinyAeon.exe&lt;/a&gt; by the time anyone reads this post.&lt;br /&gt;&lt;br /&gt;I'm still running into problems with the toolkit regularly, but I'm slightly more effective and figuring them out and getting it to work anyway.&lt;br /&gt;&lt;br /&gt;Next up on the client todo list is going to be auto-scroll-lock on mouse scrolling, and autoexit highlighting of the direction buttons.&lt;br /&gt;&lt;br /&gt;In other unexpected news, there's been some serious pk stupidity on the game, and I've made some code changes to try to improve things.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-3701415321397142675?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/3701415321397142675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=3701415321397142675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3701415321397142675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/3701415321397142675'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/client-updates.html' title='Client updates'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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-5644717058053134361.post-2264293269859305390</id><published>2009-01-04T19:15:00.000-08:00</published><updated>2009-01-04T19:24:28.974-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blind support'/><category scheme='http://www.blogger.com/atom/ns#' term='new features'/><title type='text'>Merging merging merging...</title><content type='html'>Keep them dawgies mergin!&lt;br /&gt;&lt;br /&gt;Over the last couple of days, I've been trying to get stuff merged in from one of the other coders, as well as fixing up various issues and trying to get some things caught up.  While doing this, I'm starting to get a better idea of what I really can and cannot do in a certain period of time.&lt;br /&gt;&lt;br /&gt;One thing I should probably do is set aside just one day per week that is going to be dedicated to doing nothing but implementing one single feature.  I can actually get quite a bit done in a 3 hour or 5 hour block, and with another 3 to 5 hours to clean things up, it can be booted into the game and functional.  But in order to get this time, I need to ignore things like minor bug fixes and all the crap detail work that so easily can bog one down.  Not that detail work isn't important, but sometimes big new features are important too.&lt;br /&gt;&lt;br /&gt;In other news, I got a freaking pile of directions and 'blind maps' from one of my blind users.  The only problem is that there's so much of it, it's going to need a database just to make it all accessible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5644717058053134361-2264293269859305390?l=mobfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://mobfactory.blogspot.com/feeds/2264293269859305390/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5644717058053134361&amp;postID=2264293269859305390' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2264293269859305390'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5644717058053134361/posts/default/2264293269859305390'/><link rel='alternate' type='text/html' href='http://mobfactory.blogspot.com/2009/01/merging-merging-merging.html' title='Merging merging merging...'/><author><name>Dennis Towne</name><uri>http://www.blogger.com/profile/06922699653580330541</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></feed>
