February 2015 Changelog

EmpireMUD 2.0 alpha Change Log

February 28, 2015

  • Newbie gear: Redid the data structure for newbie gear slightly, and made newbie gear scale if it’s scalable.

February 27, 2015

  • Item scaling: Fixed a rounding error that caused items to sometimes get way too many points.
  • Crafting: The crafting system can now scale objects based on the levels of the crafter. The old craft mastery system is gone; superior crafted items will now rely on the scaling system to recognize their superior flag and give them more stats.
  • Combat speed: Lowered the speed on all attacks by 1 second to make combat less spammy. Existing weapons will do less damage as a result. The scaling system scales new items based on target DPS, so newly-acquired scalable weapons will have higher per-hit damage than before.

February 26, 2015

  • Two-Handed Weapons: Some weapons can now be two-handed, and require both the wield and hold slot. They require a special ability to use.
  • Dual-Wield: Added an ability that allows a player to hit with both weapons. Restructured fight.c functions to pass weapons through and allow hits with either hand.
  • Skill-to-use: Refactored the can_wear_armor() function to work for any type of item that requires an ability to use.

February 25, 2015

  • Exits: Room exits now store a pointer to the target room to avoid a hash lookup and speed up exit resolution.
  • Objects and Mobs: Got rid of the final two primary arrays by converting these to hash tables. The only thing still using rnums after this is the party system, which I plan to change entirely.
  • Code cleanups: Cleaned up several more code files plus functions that formerly used rnums.

February 24, 2015

  • Bribe: Removed the bribe command. This functionality is now covered by scripting.
  • Code cleanups: Cleaned up several additional act files.
  • Scripting: Added %ch.can_gain_skill% and %obj.material% script options.

February 23, 2015

  • Trade: Fixed a bug where vaults didn’t update the wealth display after a trade.
  • Extra descriptions: Cleaned up a lot of extra desc code and added extra descs to room templates and buildings.

February 22, 2015

  • Code cleanup: More rearranging and indexing of core (act.informative.c, act.item.c), plus a rewrite of the “who” command, which had a lot of repeated logic.
  • Object interactions: Added the interaction system to objects (and their OLC).
  • Light: The light command now uses the interaction system. Carts, catapults, and similar can no longer be burned.

February 21, 2015

  • Chores: Fixed a crash bug presumably caused by territory being removed during an iteration of the territory list for chores.
  • Code cleanup: Massive cleanup of act.immortal.c.
  • Poofin/out: Typing the command by itself now shows your current poofin/out, instead of erasing it.
  • Nightvision: Removed this power from the vampire tree entirely; Claws now has no prerequisite at 25.
  • Nightsight: This ability now just gives infravision as an unlimited affect.
  • Discipline/DSC flags: Removed these entirely. Remaining effects that were marked with discipline flags are now using AFF flags.
  • Vampire powers: Converted several toggle on/off vampire powers to use affects that set flags.
  • Affects: Removed the special list of flags from the “affects” command since they also appear under the list of spells.
  • Alacrity: Renamed “Speed of Undeath” to “Alacrity”; it is now a command that turns haste on/off in exchange for 10 blood up front and 2 blood/hour upkeep; it is still available in the specialty level range. Because it is now a haste effect, it no longer stacks with other haste effects.
  • Vampires: Removed the last text references that called vampires “undead”.

February 20, 2015

  • Code cleanup: Started more organization and table-of-contents for code files, working alphabetically down the list of remaining files, got through act.highsorcery.c.
  • Coin empire lookup: Fixed a crash bug when there’s no empire.
  • AFK: Removed the old afk/messages system since tellhistory covers messages and afk is more similar to a toggle. You can now “toggle afk”.
  • OLC: Added a prompt tag to indicate an open olc editor.

February 19, 2015

  • Peck: New animal attack type.
  • Bring-a-Friend: Added a mob flag that causes a mob to assist other mobs.
  • Code cleanup: Cleaned up fight.c, moved its commands to new act.fight.c.
  • Auto-assist: All auto-assists now come AFTER auto-rescues. Auto-assist now uses engage_combat() so it doesn’t force melee.
  • Damage messages: Updated how damage messages are processed. Also added new levels for damage amounts going up to 70 and changed the how much damage the existing messages trigger at (players will appear to do less damage based on the messaging alone).
  • Spec procs: removed the last remnants of the CircleMUD spec proc system and converted the only object specials still around into scripts.
  • Look self: You can now look at yourself.

February 18, 2015

  • Lag: Combined two several whole-world iterations that happened at the same time to reduce the lag every 30 seconds from 0.6 seconds to 0.2 seconds. Every three minutes, this was also coinciding with the 75-second updates and causing even more lag. This change also reduces how long the mud takes to do whole world saves (and thus also speeds up reboots).
  • Open/Close: Fixed a bug in doorcmd where asymmetrical doors would cause crashes when toggled. This bug was introduced in the world hash table update and triggering in one of the adventure zones.
  • Instances: Added a function to check for orphaned instance entrances on startup and clean them up, e.g. if there was a crash shortly after an instance spawned and the game saved the map location but not the interior.

February 17, 2015

  • Sail: You can now control the ship from any room inside it.
  • Ships: You now see the map before the room description when aboard a ship. Room descriptions for ship rooms were reduced to 1 line. Removed the steering wheel and porthole objects. Capitalized ship names in the short description.
  • Auto-abandon: Fixed a crash bug presumably caused by auto-abandon modifying the territory list in the middle of an unsafe loop.
  • Items: Changed the object affect modifier from a signed byte to a short int.

February 16, 2015

  • Extract mob: Fixed a bug where several functions that used to put a person in room 0 to extract them was now causing a crash.
  • Weapon types: Added several new attack types.
  • Triggers: Moved trigger data from trig_index to the new trigger_table hash, and eliminated trigger rnums.
  • Empires: Moved the empire array data to a hash table and changed how live empire data is stored from rnums to pointers. This eliminates many, many, many empire lookups and should improve speed on some operations.
  • Regen: Standardized regens by current character position (h/m/v regens each had different amounts for sitting, resting, and sleeping).
  • Code cleanup: Cleaned up a lot of limits.c and split some huge loops into smaller functions. Also moved some empire code from empiredata.c to various db, handler, limit, and util files.
  • Optimization: Found several places where the same lists are re-iterated several times on the 5- and 75-second update cycles, including the massive room list and the sometimes-huge character and object lists. This will reduce lag during those cycles. Also combined the iteration for the 5-second updates with the 75-second iteration, when they occur at the same time.
  • Empire merge: Now correctly moving over NPCs (e.g. cityguard loyalty) and objects (e.g. a torch that was dropped, which affects building burning)┬áthat are attached to empires. Also fixed a bug where coins were lost during the merge.
  • Combat: Dead/purged characters no longer get a combat round.
  • Spawning: Mob loyalty now correctly set during spawning regardless of whether or not the mob has its empire in its name (this was a bug primarily affecting cityguards).
  • Cityguards: The auto-assist on cityguards now uses engage_combat() rather than hit() to prevent double-hits in the first round.

February 14, 2015

  • Adventures: Moved adventure data to a hash table and eliminated adventure rnums.
  • Buildings: Moved building data to a hash table and eliminated building rnums.
  • Room templates: Moved room template data to a hash table and eliminated room template rnums.
  • Optimization: Building and room template data is now stored as a pointer rather than a vnum, eliminating many many common and repeated data lookups.

February 13, 2015

  • Crafts: Moved craft data to a hash table and eliminated craft rnums.
  • Crops: The crop data is now all in a hash table, and crop rnums have been removed.
  • Ruins: Fixed a bug where the new closed ruins were not getting an exit.
  • Sectors: The sector (terrain) data is now kept in a hash. Sector rnums have been removed.
  • World Engine: The world is now contained in hash tables instead of a large array. Room rnums have been removed.
  • Efind: Fixed a memory leak.
  • Transfer: This command no longer targets the user’s own room when an invalid room is specified.
  • %adventurecomplete%: Fixed a bug where this script command could fail if the mob was out of its adventure zone.
  • Item scaling: Fixed a bug (hopefully) where better items scaled down instead of up.
  • Code cleanup: Organized and split database code into: db.c, db.lib.c, db.player.c, db.world.c.

February 7, 2015

  • Stat char: Removed junk info on mobs.
  • Stat obj: Cleaned up display.
  • Bonus Physical, Magical, Healing: Added three more e
  • Code cleanup: Rearranged and cleaned up utils.h, db.h. Updated the info/license headers on every code file and standardized the ones that were nonstandard. Renamed a few global variables for consistency.

February 6, 2015

  • Code cleanup: Rearranged structs.h, cleaned up all of its data. Renamed some flag types, e.g. ITEM_x became OBJ_x to avoid confusion with item types.
  • Sheaths: Fixed a bug where weapons were contributing to gear score while sheathed.
  • Code cleanup: Arranged a bunch of data for wear locations into a data structure, much of which was originally in different files and sometimes done as a series of if-blocks (other times as arrays).
  • Equipment: Overhauled equipment slot locations.
  • Bows: Ranged weapons now have their own equipment slot.
  • Arrows: Arrows are now used from inventory, not quiver. Arrows no longer stack. Each arrow object represents a quiver of arrows and has a capacity; once spent, the object vanishes completely (you won’t have an empty quiver).
  • Wear: Removed extra “you’re already wearing” messages when you do a “wear all” or “wear all.thing” command.
  • Objects: Removed old sheath and quiver items.

February 5, 2015

  • Item scaling: Updated the item scaling algorithm significantly.

February 4, 2015

  • Ruins: Closed buildings now have closed ruins.
  • Interactions: Fixed a bug in saving interactions where it called real_object() to get a mob’s rnum, and failed.
  • Adventure OLC: Fixed a bug where creating a new adventure between two others deleted live instances of the wrong one, and corrupted other instance data.

February 3, 2015

  • Scripting: Added %scale% command. Also updated level definitions.
  • Coins: Empire coins no longer drop from other empires’ mobs unless you’re at war with them.

February 2, 2015

  • Loot: Fixed a bug where undead mobs dropped no loot, by having the loot added to the mob’s inventory before it finishes dying.
  • Give: Fixed a crash bug when giving empire coins to a player who doesn’t have any of that type.
  • Combat: Fixed a crash bug where the sanity checks in hit() were after the first use of ch/victim.
  • Scripting: Fixed a bug in some of the scripting variables.

February 1, 2015

  • OLC: Fixed a bug in olc edit setup which was meant to only happen on olc copies.
  • Wat: Fixed a bug with wat targeting.
  • Mteleport: Fixed an entry trigger bug.
  • Instance: Added a “test” option to the immortal “instance” command, which will instantiate an adventure even if the adventure can’t be instanced. Yep.
  • Scripting: Added additional script utilities.
  • Hassle: Added the “hassle” toggle/nohassle flag for immortals, to allow themselves to test scripts, etc.
  • Scripting: Added coins handlers to scripts.
  • Skills: Fixed a bug where it was possible to gain from 0 skill when you shouldn’t be able to, in certain circumstances.