From The Fairy Garden MUSH
Jump to navigation Jump to search

Version 1.8.4 patchlevel 4 -- May 05, 2011

Major changes:

  • Q-registers are no longer limited to single characters. setq(name,joe) and r(name) or %q<name>! Limited by max_named_qregs.
  • Ident lookup and associated config options have been removed. Between lack of people running ident servers, NAT, and issues in the code, it rarely got results.


  • global_eval_context has been removed. The BQUE, EVAL_CONTEXT and PE_Info structs have been removed, replaced with MQUE and NEW_PE_INFO. Shouldn't affect players, but will affect hardcode hacks. See HACKING.184 for more info.
  • Q-registers are now kept in a PE_REGS stack. See HACKING.184 for more information. This will be used for other registers.
  • Regexp information ($1, $<foo>) are now kept in the PE_REGS stack.
  • Faster regexps in many cases when there is no markup.
  • Switch, iter, and env (%0-%9) information are now kept in PE_REGS stack. switch, iter, @switch and @dol are no longer limited, but new queue entries only keep the last 50 @switch/@dols.
  • Renamed some variables in COMMAND() definitions for consistency/clarity. See HACKING.184 for more info.
  • Assorted Windows fixes.
  • Clean up code using vsnprintf() to remove #ifdefs.
  • String trees are now fully reference counted with no undeletable entries.

Minor changes:

  • Because switch() and @switch now store capture data, it can change the nesting of $0-$9/$<foo> in rare cases. [GM]
  • All @o* messages are now heard by rooms even when they're empty. Makes room @listens and similar things work right. Suggested by Padraic. [MG]
  • @zemit and zemit() will now show the executor the message, if he's in a a room on the right zone. Suggested by Paige. [MG]


  • objid locks are now turned into =-locks by the lock parser. The clearing of references to deleted objects makes objid locks extraneous.
  • Internal changes to validation of 'name^string' locks to use perfect hash tables to validate the name.
  • Locks worth better with escaped special characters.


  • @switch and @switch/regexp set $0-$9 for glob or pattern captures.
  • @notify/setq can alter Q-registers of a semaphore queue entry before dequeueing it.
  • 'teach' now takes a /list switch, which lets it run an action list instead of a single command.
  • @force, @switch and @hook/override now all take an /inline switch, which can be further modified with /clearregs, /localize and /nobreak to run their actionlists without queueing (replaces /inplace). @include also takes those three switches. See the help for more info.
  • @retry, which causes a queue entry to restart from the beginning. Useful for coding loops without the queue delay.


  • $<name> for accessing regexp substitutions can now have evaluation inside the <>s: $<%qa>.
  • %q<foo> can access named Q-registers. %q<%qa> can work as a q-register dereference.
  • New %= substitution, which evaluates to the dbref/attribute currently being evaluated. Useful for coding things which loop.


  • Branch attributes now show the 'branch' attribute flag in lflags().
  • no_inherit and no_clone weren't propagated down attribute trees as stated in the help, but now are.
  • The debug and no_debug attribute flags now affect attributes which are queued (via $-commands, @trigger, etc) as well as ufun()'d.


  • switch() sets $0-$9 for glob captures.
  • setq(), regmatch(), strmatch() and sql() accept q-register names of more than one character.
  • unsetq() now accepts patterns of q-register names.
  • listq() lists q-registers available to r(), optionally limited to those matching a pattern.
  • elock() now only requires that you can see the lock you're trying to test.
  • Changes to scan(): Returned value now always returns the object which would run the $-command (even if it's actually set on a parent). scan() can also take a 3rd argument, to limit which objects are checked.


  • isword(ansi(r,foo)) would return 0. isword now removes markup before checking. Ditto for isdbref, isnum, isint, isobjid.
  • round() would sometimes return a number with a decimal point but no digits after it, like "5.".
  • sortby() and foreach() now use call_ufun in the hardcode, fixing a number of minor bugs.
  • rand(-X, -Y) where -X > -Y was broken.
  • Fix a couple of minor memory leaks.
  • Possible crashbug in switch(), @switch, iter() and @dolist fixed.
  • Fix crash when reading a database with an invalid lock key.
  • Some fixes to the test suite.
  • Help fixes.
  • warn_interval set to 0 would cause the MUSH to hang.
  • It was sometimes possible for a player to view config options he shouldn't have.
  • Possible crashbug in @name.
  • Object matching (a la locate()) with an exit as the looker didn't work correctly.
  • Panic database dumps weren't always loading correctly.
  • A missing mail or chat database caused failures in mush startup.
  • Various fixes to update-cnf.pl.
  • Setting or clearing the MONITOR flag on rooms caused duplicate messages.
  • @mapsql/notify would sometimes run the "@notify me" before the triggered attributes.
  • Combined channels would generate duplicate connection/disconnection messages to players connected multiple times.