Yearly Archives: 2010

A Pile of Bug Fixes — And Help Needed

I came up with a pretty good pile of fixes over the past day or two. Here’s the list:

* Fixed a crash bug in checking fall chance for mobs.
* Fixed a crash bug with creatures that leave no corpse (undead, elementals).
* Fixed a crash bug with decaying/disintegrating containers.
* Fixed an intermittent crash bug with removing a character from memory after they log out.
* Fixed a nasty bug where a player’s race wasn’t being saved.  This meant you would come back as a Human after logging out.  Ewww.
* Fixed a bug with memorization that prevented displaying which spells were memorized.
* Fixed a bug with memorization that caused classes to receive the wrong number of spell slots.
* Non-mana classes no longer start with mana.
* Fixed the fraglist command.
* Fixed the consent command, making groups possible.
* Fixed a problem with being able to see other players in the same room.
* Fixed message for the follow command.
* Fixed a bug with the ‘look self’ command.
* Fixed the ‘drop all’ command.
* Fixed selection of elementalist classes during character creation.
* Message added to the group all command.
* Change password from menu is working now.
* Delete self from menu is working now.
* Improved logging so we always see what caused a crash.
* Fixed disappearance of room title when brief is turned on.
* Fixed the way max hitpoint values were sent to the client.  This was causing hitpoint meters to be inaccurate for anyone without a race-modified constitution of exactly 100.
* The spells ‘sense spirit’, ‘elemental sight’, and ‘spirit sight’ are working now.

There are still a few major bugs on the table (especially that nasty death bug) and quite a lot of spells to work on, but the MUD engine itself is getting noticeably more stable, going from 1d3 hours average uptime to 2d7 hours. Of course, that is with close to no players and it’s players what finds glitches. Thank you to Potius, Zrun, Tiu, Veytre, and others who have reported issues before.

If you’d like to help a bit with testing and bugfinding, I could use it. Send me an email at my Yahoo address and I’ll set you up with an immortal-pro-tem and you can poke around and find me some more work to do. 🙂

Version 0.15 Client Update

I’ve spent some time on the client. Here are the changes for version 0.15:

* Fixed a bug with alias saving and loading.
* Added hotkey saving and loading to alias save/load.
* Improved room/map window, adding zone name, exits, and better word wrap for room description. It doesn’t show color yet, though.
* Added some fixes to the equipment window and it works now. It doesn’t show color yet, though.

In the process of working on the equipment window in the client, I fixed a bug on the server with the equipment command and one with the wear command.

You can download the new version here.

As always, let me know if and which bugs you find.

Fun With XSL

One of the good things about having data stored in XML files is that you can use XSL stylesheets (templates) to format the data into HTML.

I created two basic templates, one for races and one for classes, and linked them to the data files used by the MUD. They don’t have any fancy formatting, but they do display the data in a Human-able format.

The result is that the class and race webpages link to the data files being used by the MUD. This means that you can view info about each race and class exactly as it’s being loaded. If we change something in the data file, such as adding a new spell or adjusting a race’s dexterity, the web page that is displayed is updated automagically.

This means that the pages for each race/class will essentially maintain themselves. Neat, eh?

Cimmerian Abyss

I’d like to take this opportunity to blatantly advertise Cimmerian Abyss, an Ultima Online server put together by my friend Ed Zed (who some of you may know as Potius).

Check it out here:

http://cimmerianabyss.com

If you like it, don’t forget to click the ‘donations’ link. 🙂

Zones From Dubar

We’ve kind of hit the jackpot here. Dubar, one of the most prolific zone writers in the history of MUDdom, gave permission to use his zones. Here’s what I’ve converted:

Air Plane Load Grid
The Buffalo Tribe (Barbarian HT)
The Granite Spire
Autumnglen (Centaur HT)
The Fields of Elysian
The Goblin Camp
Gagga’Jobo Caves
Malch’hor Ganl (Goblin HT)
The Market of In’Goboda
The Outer Goblin Outpost
The Stables of Malch’hor Ganl
The Tunnels of Goober
Ice Tunnel Shaft
The Mik’Mak Caverns
The Forest of Neeble
Kragthor (Ogre HT)
The Mountains of Tentro

That’s a mighty fine haul, and they all converted without any issues. Now we need to figure out where to connect them. Thanks Dubar. 🙂

Version 0.52 Editor Update

The one we’ve all been waiting for — the editor version with custom action editing.

Changes include:

* Added ‘edit custom actions’ button to objects and mobs that lets you add triggers and scripts.
* Updated help files to include screen shots and more info for some topics, and updated the zone guide section of the help.

You can download it here.

Custom Action Editing

I’ve got custom action editing working in the zone editor now.  Here’s an example:

Custom action editor screen

To create an action, you select items from the drop down list to build a sentence describing the trigger and the resulting action.

After you have an trigger added, you can add additional actions by selecting the item in the list and clicking “add subaction”.  You can see examples of this in the screenshot.

There are also “find” buttons that help you locate the various items you can use as arguments.  Even though you can just type values into the text boxes, this can be handy when you want to make sure you have the right item or have gotten the spelling right on the spell to cast.

This will be available for mobs and objects in the next release of the zone editor.

Custom Actions: Our Version of Scripting

Some MUDs, including Basternae 2 and those derived from the Envy family tree, support MobProgs.

Some MUDs, inlcluding Basternae 2 and those derived from the Diku/Envy family tree, used custom C code (“spec_fun” code) to add special abilities to mobs and objects.

MobProgs are useful, but they can be a pain to edit because they’re pretty “scripty” and most editors don’t have any data validation.

Special functions require the direct attention of a programmer for things that aren’t necessarily complex enough that they should require code.

What I’ve come up with for Basternae 3 is something I call “Custom Actions”. They can be applied to mobs, objects, races files, and class files. It’s sort of an action template definition that will be easy to edit using the Basternae Editor’s GUI (when I finish it). The general idea is that there are triggers with one or more actions that can be associated with them.

Editing will be done using a sort of “Mad Libs” style interface. You’ll build descriptions of triggers and actions using buttons and drop-downs. For instance:

“When the mobile is attacked”:

“Say” “Tough luck, buddy, I brought my posse with me.”
“Wait” “two seconds”
“Create mob” “8192”
“Create mob” “8193”
“Create mob” “8194”
“Wait” “one second”
“Say” “Now you’re gonna get it!”

“When in combat”:

“Cast spell” “fireball” “4% chance”

“When a player tries to leave the room in direction” “north”:

“Prevent action”
“Say” “You’re not invited to this party.”

“When room contains object” “23” (a corpse):

“Destroy object” “23”
“Echo” “The ravenous bugblatter beast devours another corpse.”
“Wait” “3 seconds”
“Interpret command” “burp”

Here’s a list of the triggers and actions I’ve come up with for the first version:

———-

Each trigger has a percent chance of executing.  Each trigger also has a data field that may or may not be used depending on the type.

Trigger Types

Action: When someone uses the command

Value contains the command name.

Combat: When in combat

Value is not used.

Death: When killled or destroyed

Value is not used.

Engage: When combat is initiated

Value is not used.

Entry: When entering a room

Value is not used.

Exit: When exiting a room

Value is not used.

ObjectInRoom: When room contains the object

Value is the index number of the object to react to.

PlayerEntry: When a player enters the room

Value is not used.

PlayerExit: When a player leaves the room

Value is optional and is the direction to pay attention to.  Blank means watch all directions.

Random: A random chance

Value is not used.

ReceiveItem: When receiving an item

Value is optional and is the index number of the object to react to.

ReceiveMoney: When receiving money

Value is optional and is the minimum amount of money needed.

Speech: When someone says

Value is the word or phrase to react to.

Action Types

Each action has a data field that may or may not be used depending on the type.

Attack: Attack the player who caused the trigger to fire.

Value is not used.

CastSpell: Cast the spell

Value is the name of the spell to cast.

CreateMobile: Creates a mobile

Value is the index number of the mobile to create.

CreateObject: Creates an object

Value is the index number of the object to create.

DestroyObject: Destroys the object

Value is the index number of the object to destroy.  First the room is checked, then the mobile’s inventory.

Delay: Wait for this many seconds

Value is the number of seconds to wait.

Echo: Echo text to the room

Value is the message to be printed to the room.

GiveObject: Give player an object

Value is the object index number to give to the player who caused the trigger to fire.

InterpretCommand: Interpret the command

Value is the command line to be interpreted, i.e. “kick troll” or “jump”.

Move: Move in direction

Value is the direction to move in.

PreventAction: Prevent the action (only works with action and player exit triggers).

Value is not used.

Say: Say something.

Value is the phrase to be said.

Teleport: Teleport to another room

Value is the room index number to teleport to.

TeleportPlayer: Teleport the player who activated the trigger to another room

Value is the room index number to teleport the player to.

TeleportAll: Teleport all players in the room to another room

Value is the room index number to teleport the player to.

UseSkill: Use the skill

Value is the skill specified, i.e. “hide” or “kick”.

ZoneEcho: Echo text to the zone

Value is the text to be shown to everyone in the zone.

Destroy: Destroy self

Value is not used.

———-

One of the good things about the way it’s been coded is that triggers and action types can be added very easily.  The actual in-game implementation of it has yet to be done, but that should be easy enough.

If you think of anything that you could imagine doing in a zone that these commands won’t allow you do do, let me know, either as a comment on this post, or email me if you want to chat in more detail.  My name is xangis and I use Yahoo for my email.

Version 0.51 Editor Update

Here’s another editor update:

Object Editing Changes

* Added spell editing to certain types of objects (wands, staves, potions, scrolls, etc.)  The spell can be selected from a drop down list, or typed in manually for custom spells that aren’t in the editor.  That means you can declare spells that don’t exist yet and when they’re added to the game they’ll work.

Object Spell Editor Screenshot

* Default object template is now carryable and usable by anyone.

* Added some text labels to the object edit dialog.

* Changed object item type to a drop down list — no typing nonexistant object types into the box anymore.

* Fixed a crash bug with certain item types (drink container and missile weapon).

* Changed affect edit box to only allow selecting items in the drop down list — no keying in affect types that don’t exist.

* Value edit window now reflects currently selected object type even if the object hasn’t been saved yet.

Area Settings Editing Changes

* Changed justice type to only allow selecting items in the drop down list — no keying in justice types that don’t exist.

Here’s a link to the download.

Zones From Gargauth

Gargauth (also known as Baghtru) was nice enough to grant the use of his zones.  There’s a pretty good collection:

The Village of Stoneward
The Village of Friehold
Mosswood Village
Ixxillian (the Enslaver hometown)
The Training Academy
The Temple of Strife

Most of them converted without issue, but I had to make some minor fixes to the editor to import certain bits (it didn’t translate the Umber Hulk race yet, for instance).

While I was tinkering with the converter I sorted out quest importing, so quests translate and load now.

I also figured out a good way to handle setting spells on scrolls, wands, staves, and potions and modified the converter to perform that translation.  The next version of the editor should have spell editing on objects added.

The last major hurdle remaining with the zone format and editor is the whole equivalent of mobprogs / special functions / custom actions.  I’ve been braining on that for a bit, but haven’t started to put anything into action yet.

More Zones Converted

I made a few changes to the converter because it liked to choke on mismatched ANSI codes, i.e. if you had an &+Y in the description for an exit and didn’t have an &n at the end, it would flip out.

I also made a few modifications that would make it spit out warnings instead of giving up when it couldn’t convert certain parts of a zone — namely the special procs.  This means that zones can be converted without having all the special procs available.  That’s not ideal, but it’s better than nothing.

After these changes, I’ve converted the zones “Sarmiz’Duul” by Zaeru, “The Hostel of Drakkenwood” by Sarim, and “Tower of Darkness” by Lortar.

Incidentally, this is the 300th post on the Basternae blog, so I’ve been averaging about 100 a year.

More Map Progress

I updated the surface map a bit, adding some swamp, jungle, tundra, and arctic terrain.

Surface Map:

Basternae Surface Map

I also created underground levels 1 and 2.  The first level is a fairly large map, while the second is a bit closed in.

Underground 1:

First Underground Level Map

Underground 2:

Second Underground Level Map

The map zones haven’t been generated yet, I’ve just created the layout so far. The next step is to generate them and start attaching zones.

Version 0.50 Editor Update

Here’s another update the the zone editor.  Changes are:

Extra Descriptions

* Extra description editing in objects and rooms is working now.

Area Settings

* Added editing of area-wide flags, such as “no dimension door” or “is worldmap”.
* Added height and width to area settings for use with surface/underground map zones.

Walkthrough Mode

* Walkthrough command entry is now working on MacOS and Linux.
* Selected room in the room editing window changes as you walk into another room in walkthrough mode.

Opening Files

* Added drag-and-drop to open a zone file.
* Added opening a zone file via the command line.

Renumbering

* Added renumber menu command to change zone numbering.

Other

* Made edit windows non-maximize-able since it didn’t make sense to do so.

Here’s a link to the download.

Stories And Lore

Basternae 1 and 2 had a huge number of total hours played.  Lots of players rose to prominence and some became pretty much legendary.  With all that adventure

If anyone wants to write up any fairy tales, legends, or lore of the past based on previous incarnations of Basternae and either characters of their own, past immortals, or others they knew of, it might be a fun thing to  post on the website as backstory or just general world lore (i.e. something along the lines of ‘St. Daeron and the Dragon’.  In fact, if someone feels so inclined to write any sort of back story beyond ‘everyone kills everyone’, they’re certainly welcome (and encouraged) to.

The world of Basternae 3 takes place somewhere between a few hundred and a few thousand years in the future after Basternae 2.  Among other things, the Flind race has faded out and have been overtaken by their more successful Gnoll cousins and the Githyanki have hunted the Githzerai nearly to extinction.  The world has been reformed somewhat, with rising water levels reshaping or destroying many of the land masses of the past (nobody has explained why they rose yet — global warming, superheating from a major war, bombardment by meteors, change in the planet’s orbit, who knows?).  The Artifacts have all been destroyed or reclaimed by the gods.

Nobody has really ever said anything about the major religions of the world, the number of moons, what the climate is like.  I could probably come up with something, but it would be more fun to have your input.

Version 0.49 Editor Update

I started using the editor to build a hometown for the Grey Elves.  This will be the first zone I’ve tried to build from scratch using the new editor.  This update is mainly map view improvements and a few important fixes to mob editing.

Map View

* Rooms on map view now show terrain type as a highlight color.
* Added multi-level zone rendering to map view.  It mostly works but may have a few kinks to work out.  Discontinuous zones still look terrible, but not as bad as they did.
* When closing a zone, the map view clears itself now.
* Map view now updates as exits are changed in room edit screens.
* Map view window now expands and editor controls reposition themselves when dialog is resized.

Walkthrough Mode

* When the “edit room” command is used in walkthrough mode without a room number it brings up the current room in the edit window.
* Added ability to “createedit room <direction>” in walkthrough mode.  It automatically links the exits of the current and new rooms.

Mob Editing

* Added keywords to mob edit screen.  Pretty dumb to have left that one off in the first place.
* Some extended mage classes (chronomancer, enchanter, and necromancer) showed up in the class list as sorcerer.  That’s been fixed.

Here’s a screenshot of the new map view for the Thri-Kreen hometown:

Basternae Editor v0.49 Screenshot

Here’s a link to the download.

Artificial Intelligence Markup Language (AIML)

One of the things I plan to have the MUD engine support is AIML. That’s an XML-based file format that defines conversational data for a “chatterbot”. I’m sure most everyone has heard of the Eliza, Julia, or A.L.I.C.E chat bots.

The idea is that you can create personalities that respond to certain phrases, much like quest messages do/did in previous versions of Basternae, but you can take it even further by having compound triggers, matches, variables, and responses to previous inputs.

There’s really no limit to how simple or complex you can make your ‘bot’, from responding to only a single phrase to an encylopedia of knowledge that might almost pass the Turing test.

Here’s a bit of info about the format:
Overview from Dr. Wallace, creator of AIML

And, of course, here’s the obligatory Wikipedia link:
AIML on Wikipedia

One tool I’ve found that I like so far is the GaitoBot AIML Editor, which you can get here:
GaitoBot AIML Editor Homepage

If you know any German, the bot on the Gaito site is kind of fun to banter with. I know just enough to make it think I’m an idiot. 😛

If you want to start building your own bot personalities — grumpy Trolls, arrogant Elves, Dwarves too busy working to deal with your nonsense, or schizophrenic tinker gnomes — then feel to grab the GaitoBot app and start building personalities. The intent is to be able to load AIML files directly into the MUD and associate them with one or more mobs.

All I’ve done so far is generate some C# classes from the AIML schema, but that went smoothly enough. I’m not sure yet whether I’m going to build my own bot engine or use an existing open source one.

Version 0.48 Editor Update

Here’s what’s changed:

  • Added an ‘edit affect’ button to the object editing screen that lets you edit, add, or remove object modifiers like +1 to hitroll or -3 to dexterity.
  • Fixed a nasty glitch with object editing when the material type had a two-word name.
  • Removed empty entries from the object type list.

The object affect editing screen might be a bit ugly, but at least it seems to work well enough.

You can get the new version HERE.