Category Archives: Programming

Building software.

Another Editor Update

In the process or editing roads on the surface map to set each section of road to the right tile (east-west, corner pieces, t-intersections, etc.) I found that the editor needed some updates to accommodate the tile system.

I’ve released version 0.57 of the editor today, with map terrain editing (not useful for regular zone editors), faster room grid drawing, and better coloration for the room grid. The download link is on the right sidebar.

Road editing is about 1/3 done so far and won’t be uploaded to the server until it’s done.

Basternae Client 0.21

The first download, version 0.21 of the new WPF-based Basternae Client is now available for Windows. Check the right sidebar for a download link. I can post a version that will run via Mono on Linux or MacOS if anyone wants it.

It’s still needs a lot of work, but at least it exits properly now.  I expect you’ll find glitches. It’s a work in progress.

First Very Broken Version of the WPF-Based Client

Here’s a screenshot of the Basternae Client, version 0.20:

There are some things missing and in a few ways it’s a step back from the previous C++-based client (version 0.18 — 0.19 was never released).  However, it does work with the new map graphics.  Roads still need a little work, but that’s a server-side change.

There are some very broken things about version 0.20 of the client, and I wouldn’t recommend installing it (which is why there’s no download link).

– Aliases aren’t in yet.
– It leaks memory like a sieve.
– A bunch of ANSI color things need work.
– It doesn’t even exit properly.

It can only get better from here.

New Game: Dragon Wilds

http://dragonwilds.com

I built this oldschool over-the-2400-baud-modem game in my spare time over the past week using Python and Django (it’s about 500 lines of source code, 500 lines of HTML templates). I don’t know whether I’m going to spend more time on it, but it was fun to build and a nice break from the to-complex-to-work-on-with-the-brainpower-I-have-left-after-work state Basternae 3 is in. If people like it I’ll probably make more of them or improve the existing game. First time I’ve done a web-only game.

Let me know if you can break it. As can be expected, there’s really not that much depth to it and you may well get tired of it quickly.

Back to WPF

A while back I made a start on building the client using WPF, the Windows Presentation Foundation. It only made sense to give it a shot since the whole MUD is based on C# and .NET.

That effort stalled due to a roadblock or two, probably because I didn’t know about routed events and partly because I didn’t understand RegEx very well. I have a better handle on regular expressions thanks to spending some time with the Django web framework.

In the process of trying to rework the C++/wxWidgets-based client to support the new tiled map graphics I’ve experienced a lot of pain. The kind of pain that can only be explained by the fact that a string is not a first-class object in C++ and that text parsing can get to be unbearable when you have a complex stream over TCP.

That has prompted me to take a look at the WPF version of the client again. Rather than being based on some ugly recursive character-by-character text processing code, it’s based primarily on regular expressions — one to parse out the ANSI codes, and one to process the XML tags for the various client data (life meter, map info, room description, etc.). The first one was done when I left off, but the second piece hadn’t been started yet. Well, it’s in place now and I can continue building the rest of the newer client.

Getting the WPF version up to and past the usability of the wxWidgets version will probably be faster than untangling the text parsing in the spaghetti code.

Client Work

John Baker has delivered a new set of artwork for the client and I’ve spent some time working on integrating it into the code.

What I’ve discovered is that the client code is rather brittle and prone to explode.  It will need some significant work before a new version is ready to release.  Testing with valgrind has helped a bit, but it still requires some heavy lifting to get right.

I started working on the client 6 years ago, long before I knew C++ very well (I’ve known C a lot longer, but it took a while to get the hang of C++ and the OO world).  The client was originally written to use the Simple DirectMedia Layer (SDL) and has had some bizarre things done to it over the years.

So — there are significant changes coming with it, but no idea when they’re coming.

Minor Data Fixes

I finally got around to taking care of two things that have been bugging me for a bit.

1. Every boot the MUD would reset the time/day/year to the first day of the first month of the first year (time zero).  Now time continues across reboots.  No more Groundhog Day.

2. The current, maximum, and record number of players data was not being kept correctly.  It is now.

They haven’t been deployed to the server yet since I’m in the middle of reworking the map engine on both the client and server for the new graphics, but when that’s done those two fixes will ride along.

Stuff After Death

Lyran mentioned that it’d pretty tough to do anything after dying above level 5 for complete lack of equipment.  I added a toggle that lets players start with newbie equipment every time they die no matter what level they are and turned it on.

Newbie equipment isn’t exactly a huge advantage, so it might be worth leaving that on permanently.  It’s bad enough that you lose your sword +5, no reason you should have to walk around barefoot with no pants on.  A level 6 adventurer shouldn’t find it too hard to scrounge up 2 silver pieces worth of equipment anyhow.

A Dozen More Spells Working

These spells were made to work today:

Water Elementalist

* Blending
* Minor Blending
* Tide of the Seas
* Water Bolt
* Dispel Magic

Air Elementalist

* Coldshield

Earth Elementalist

* Dirt Cloud

Fire Elementalist

* Fireskin
* Fireshield

Paladin

* Judgement

Anti-Paladin

* Apocalypse

Cleric

* Soulshield

C#: Compiling For 32-bit Systems on 64-bit

I recently upgraded from 32-bit Vista to 64-bit Windows 7.  I may be one of the only people who didn’t have anything bad to say about Vista.  For me it was a huge step up from Windows XP, but since I have 6GB of RAM in my system it’s a little silly to run a 32-bit OS.

I understand the differences between 32-bit and 64-bit C++ code behavior quite well, but I really haven’t spent any time digging into the differences between 32-bit and 64-bit .NET IL code.  Apparently it’s all quite a bit simpler in managed code.

Just right-click on a project, click properties, click on the build tab, and then select “x86” under “Platform Target”.

A Bunch of Spells

Nearly three dozen spells were made functional today:

Air Elementalist

* Airy Starshell
* Hypnotic Pattern
* Telekinesis

Cleric

* Create Water
* Detect Poison
* Group Heal
* Know Alignment
* Silence
* Turn Undead

Druid

* Analyze Balance
* Harbor of Balance
* Twilight

Earth Elementalist

* Earthen Starshell
* Earthen Tomb
* Stornogs Spheres

Fire Elementalist

* Fiery Starshell
* Group Globe

Illusionist

* Cowardice
* Demi Shadow Magic
* Dispel Invisible
* Hypnotic Pattern
* Mirage Arcana
* Mass Invisibility
* Misdirection
* Phantasmal Killer

Necromancer

* Cloak of Fear
* Heal Undead
* Protect Undead

Ranger

* Dazzle

Shaman

* Greater Ravenflight
* Greater Sustenance

Sorcerer

* Infravision
* Meteor Swarm

Water Elementalist

* Adaptation
* Watery Starshell

In addition, some immortal commands were improved to make development easier and some “to caster” spell messages that were previously not shown are now shown.

Damage type vulnerability, which had only been partially implemented, is fully functional now.

A Few Spell Fixes

I think I remembered what I was working on — spells.

Ten more spells were made functional today:

Air Elementalist

* Chill of the Windsaber
* Hurricane

Cleric

* Destroy Undead

Druid

* Sunburst
* Sunray

Illusionist

* Shadow Magic

Psionicist

* Detonate
* Neural Fragmentation

Shaman

* Greater Mending

Water Elementalist

* Tidal Wave

Visual Studio 2010

Three months ago I switched from Visual Studio 2008 to Visual Studio 2010 as my main development environment.  Functionally it’s the same as it’s always been, but there are two things about it I consider great improvements.

First, the UI:  It looks so a lot better and cleaner than earlier versions.  It’s not that older versions were ugly, but it has a cleaner look and is much easier on the eye.

Next, C++ Development:  For the last few versions of VS, C++ developers have pretty much been shafted — no real feature improvements for the most part with all the love going to C#.  C++ received a major boost, gaining just-in-time compilation and error-detection intellisense almost exactly like C# has always had.  It doesn’t sound like a big deal, but it is excellent for speeding up the code-compile-fix cycle.

Only a small portion of Basternae code is in C++, just the client and the Basternae 2 to 3 zone converter, but it is a lot more pleasant to write with Visual Studio 2010.

This project started on Visual Studio 2003, so now we’ve been through four versions.

Now Where Was I?

OK, now that I’ve travelled halfway across the planet, built a good bit of software for a startup (not done yet, but it’s settled down to a saner pace), and unpacked a ton of boxes, it might be a good time to start working on Basternae a bit more.

Except…  I can’t remember where I was and what needed to be done (or priority levels for things that need to happen).

So, could someone go ahead and log into the MUD and tell me what the heck I need to work on?

Basternae.org port 4502.

Seriously, I could use a project manager.  Anyone want to volunteer?

Help Entries Improved

When the help file entries were translated from a text file to our fancy help entry format, the line spacing in each entry was converted from single to double.  It was just a quirk of XML serialization, but it made for long, spammy entries when helps were displayed.  I had gone through and cleaned up one or two hundred of them, but there were about four or five hundred more to go.  I spent a while going through the rest and removing the extra newlines where they weren’t wanted.  It would have taken forever if not for the help editor tool, but thanks to that it only took half an afternoon to clean them up.

Another thing that was a nuisance about the help system was that it would match and display every entry that matched the entered keyword.  If you typed “help heal” you’d get the entries for the spells heal, group heal, full heal, and mass heal.  I’m not even going to say how many entries you’d see if you typed “wall” or “fire”.  While it was intentional that a general match would take place, i.e. if you did “help wall” you’d see all of the help entries for wall of fire, wall of stone, etc., the unintended consequences were that you’d see extra entries even if you had an exact title match.

That’s been changed, so now when you type “help wall of fire” or “help heal” you’ll see the exact entry you were looking for, while you’ll still see multiple entries if you were doing a general query like “help fire” or “help wall”.

Go ahead, log in and play around a bit and see what you think of the way help is organized and how it works now.  Let me know if you see anything wacky or see a way to make it more useful.

Editor Version 0.56 Update

Working on a zone always results in editor improvements, so here’s what we get this release:

* Changed the error window shown for “Check Area” to a scrollable list so all errors can be seen.
* When items in the list of errors found by “Check Area” are double-clicked, the object, room, or mob will open in the edit window so you can change whatever the area check complained about.
* The map window is now refreshed when “apply” is clicked in the room editor so we see the room change color when the terrain type changes.
* The map window is now cleared if there was an area loaded when File –> New is used to create a new area.
* Added a “New” button to the exit edit dialog so new empty rooms with reciprocal exits can be created from the exit editor.  This will be easier than creating both rooms and manually creating an exit in each room pointing to the other.
* Added more content to the help file.

Grey Elf Hometown Layout Finished

I have the general layout of the Grey Elf hometown finished now. There’s a lot of work still to do — room descriptions, shops, mobs, objects, etc., but the layout is done and the repopulation points have been set.

Here’s what it looks like:

Editor Version 0.55 Update

I spent a little while working on the Grey Elf hometown today. That sort of thing always results in editor changes. Version 0.55 was released today with these two changes:

* Added the “Check Area” command to the tools menu. Right now it only checks for missing descriptions on rooms, objects, and mobs.
* Added instrument type selection for the edit values screen when editing instrument objects.