I fixed a few more glitches, and the MUD seems to be a lot more stable. Bang on it, see if you can break it! First one to crash the MUD gets a cookie.
Something went horribly wrong with the communication code, so logging in wasn’t possible for a few days. All is well now.
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.
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.
I made a couple minor text fixes, the most noticeable of which was a map rendering glitch that would cause mobs to show up as P’s and the map to be strangely distorted in the client.
I also released a minor update to the client (now version 0.18), with a map fix and a couple window focus improvements.
I spent a good part of the past week traveling from the midwest to the west coast and back (5 flights total). During airport layovers I took a look at some of Tiu’s psi reports. Since I hadn’t touched psionicist spells/abilities yet it was no surprise that most of them were pretty borked.
I made changes to these spells:
These haven’t been tested thoroughly and may not all work as intended since they were done half-distractedly in various airports (LAX and MSP mostly). No fix for mana use or cast lag yet.
The intent for all psionicist buffs is that they are self-only, don’t stack amount or duration, and you have to wait until they wear off to refresh them. If any of them don’t work that way, let me know.
As always, let me know what’s still broken.
Fixed a problem with object updates that would sometimes cause crashes when an object disintegrates.
* Fixed crash with monk class mobs and barehanded damage skill checks.
* Fixed crash with mob tracking. Track mobs probably don’t work yet, but at least we won’t have crashes because of it.
* Fix for spell learning when players advance levels. This may or may not have caused crashes (was a little unclear from the logs). This means that psionicists and clerics and such should auto-learn spells as they level.
Made a couple fixes for things mentioned by Tiu:
* Enslaver races added to creation screens.
* Printing move point values twice when they’re low has been fixed.
* Will and sing command processing has been fixed.
There’s still a shortage of connected zones with teacher mobs and a bunch of other things still unfixed…
* Fixed a crash bug with automatically combining piles of coins when a corpse containing them decays or when someone drops them.
* Item auto-pricing has been enabled.
* Fixed a bug that would cause forage to always fail.
* Changed messages for a few commands.
* Coins were not saving in player files. This has been fixed.
* Fixed the deposit and withdraw commands. Banks are working now.
* Made the economy command immortal-only.
* Added spellbook and light support to the compare command.
* Changed adding objects to a room so they are added at the beginning instead of the end a room. This fixes an issue that caused the second mob killed in a room to end up as 2.corpse instead of 1.corpse.
* Changed adding mobs to a room so they are added at the beginning instead of the end of the room. This means that the second troll to walk into a room will now be 1.troll instead of 2.troll. This is the behavior everyone should be used to.
One thing that’s nice about the Basternae 3 engine is that a player-issued command is incapable of crashing the MUD directly. The only crashes that can and will happen are when the database gets corrupted or otherwise out of whack. Autonomous mob activity and object/room/weather updates are the only places that contain any danger anymore, and those are getting sorted out pretty quick.
In the past week, average uptime has increased from 2d7 hours to 2d20 hours.
Hurry up, break it while you still can!
By the way, “turbo level” mode is on — which means you gain ten levels for every one level you would normally gain. Should help with testing.
I spent a while doing various fixes. Here’s what it added up to:
* The dice command has been fixed.
* The visible command has been implemented.
* Drag corpse has been fixed.
* Fixed an issue where mobs would sometimes fail to ride mounts they’re supposed to be on according to the zone file.
* Fixed or improved a handful of immortal commands.
* Fixed or improved messages for a bunch of commands, including track, whirlwind, report, sleep, split, practice, disembark, forage, and train.
* Fixed a bug with moon phases that caused the world data file not to save.
* Made some fixes to and enhanced carve corpse.
* Fixed a problem that would cause people to show up on the who list more than once.
* Fixed an issue that would prevent a player from being able to follow a mob.
* The compare command has been fixed.
* Fixed a problem that would sometimes cause renting to fail.
* Fixed a problem that was preventing shops from being associated with their shopkeeper mobs when they load.
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. 🙂
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.
As always, let me know if and which bugs you find.
Handling a skill or spell with multiple modifiers in code has always been a bit of a nuisance. I changed that around a bit so that they work they way I want them to.
So, here’s what adding three effects looked like in code beforehand:
Affect af = new Affect( Affect.AffectType.spell, spell.Name, 12 + level / 4, Affect.Apply.intelligence, 3, Affect.AFFECT_NONE );
af.ApplyType = Affect.Apply.constitution;
af.Amount = 8;
af.ApplyType = Affect.Apply.dexterity;
af.Amount = -5;
You’ll notice that the target has 3 separate affects added just for one spell. That’s because each affect could only handle a single modifier.
After making the modifiers into a list that can have a variable length, here’s what the same code looks like:
Affect af = new Affect( Affect.AffectType.spell, spell.Name, 12 + level / 4, Affect.Apply.intelligence, 3, Affect.AFFECT_NONE );
af.AddModifier( Affect.Apply.constitution, 8 );
af.AddModifier( Affect.Apply.dexterity, -5 );
Now it takes half as many lines of code to do the same thing and looks a lot cleaner. The codebase also shrunk by about 300 lines of code in the process.
This also means that some spells or skills that used to show up multiple times on the score screen will only show up once.
Looks like I sorted out that nasty little affect removal bug, so onto the next…
With this and the previous fix, now would be a great time to sign on and start testing the heck out of things. After all, you don’t want me to run out of work to do, do you? 😛
I had a chance to tinker with the code today. I made a bunch of relatively minor fixes (code-wise). Here’s the list:
– Fixed game menu consistency so same one appears every time.
– Some minor text changes and/or typo fixes.
– Made the help editor a little easier to use and added a ‘delete entry’ button.
– Made the MUD screen editor a little easier to use.
– Fixed the immortal ‘slay’ command.
– Fixed the immortal ‘load object’ command.
– Fixed the ‘history’ and ‘!’ commands, the latter of which would instantly crash the MUD when used.
– Improved the issue system and added the ability for immortals to create issues.
– Some help entry additions and improvements.
There are two major bugs right now that will take some digging to fix properly: Items can’t be picked up, and spell/skill effects never seem to wear off.
Even though there’s still quite a lot of work to do before the codebase conversion could be considered ‘complete’, it’s becoming a bit more fun to work on.
One of the casualties of the codebase rewrite was the disabling of the immortal ‘set’ command, which is pretty useful for administrative tinkering. It’s been repaired, so immortals are godlike once more. It doesn’t improve gameplay any, but it does help development.
The tell command was rather broken. I fixed the broken parts that I knew about, so if there are any broken parts left in it, they’re ones I don’t know about.
Some uses of the “who” command would lock up the MUD. This appears to be fixed now. Report any anomalies.
One of the nagging problems I had been meaning to get to was the non-functional scan command. It’s a recursive command, and the C# way is a bit different from the C++ way. It was easier to fix than I had expected and is working now, so scan away.