diff --git a/.gitignore b/.gitignore index 0533ea6d..3378b0d9 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ # Ignore build directory from FluffOS -/build/ -# Ignore these mudlib folders and any changes there +/build/# Ignore these mudlib folders and any changes there /lib/data/ lib/data/daemons/ /lib/help/ /lib/log/ /lib/wiz/ +/lib/trans/tmp/ /lib/.vscode/ /lib/tmp/ /open/ diff --git a/.gitmodules b/.gitmodules index 7168b2b7..a7510088 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,3 +1,3 @@ -[submodule "driver"] - path = driver - url = https://github.com/fluffos/fluffos +[submodule "adm/dist/fluffos"] + path = adm/dist/fluffos + url = https://github.com/fluffos/fluffos.git diff --git a/README.md b/README.md index 16b4b746..20654195 100644 --- a/README.md +++ b/README.md @@ -5,14 +5,19 @@ Lima Mudlib that work with latest FluffOS - #LIMA Channel on LPC Discord - https://discord.gg/wzUbBgs3AQ # Documentation -Please see https://limamudlib.readthedocs.io/en/latest/ +Please see https://limamudlib.readthedocs.io/ # How to test and contribute ``` -git clone --recurse-submodules https://github.com/fluffos/lima -cd lima -./build.sh -./run.sh +#Somewhat old and outdated +#git clone --recurse-submodules https://github.com/fluffos/lima + +#For a more stable experience, try: +git clone --recurse-submodules https://github.com/tsathoqqua/lima + +cd lima/adm/dist +./rebuild +./run ``` # License diff --git a/adm/dist/.gitignore b/adm/dist/.gitignore new file mode 100644 index 00000000..b25fbf15 --- /dev/null +++ b/adm/dist/.gitignore @@ -0,0 +1,2 @@ +run.log +config.mud diff --git a/adm/dist/bin/.gitignore b/adm/dist/bin/.gitignore new file mode 100644 index 00000000..36dd63f6 --- /dev/null +++ b/adm/dist/bin/.gitignore @@ -0,0 +1 @@ +**/** diff --git a/adm/dist/config.mud b/adm/dist/config.mud new file mode 100644 index 00000000..3f2581cc --- /dev/null +++ b/adm/dist/config.mud @@ -0,0 +1,352 @@ +############################################################################### +# LIMA Mudlib Runtime Configuation File # +############################################################################### +# NOTE: All paths specified here are relative to the mudlib directory except # +# for mudlib directory and the log directory. # +# Lines beginning with a # or a newline are ignored. # +# # +# Original file contributed by Gesslar, adapted by Tsath 2024 # +############################################################################### + +# name of this mud +name : My LIMA MUD + +# port number to accept users on +external_port_1: telnet 7878 + +# Restrict IP binding, if omitted, bind to all addresses. +#mud ip : 0.0.0.0 + +# absolute pathname of mudlib +mudlib directory : /home/lima/git/lima/lib + +# debug.log and author/domain stats are stored here +log directory : /home/lima/git/lima/lib/log + +# the directories which are searched by #include <...> +# for multiple dirs, separate each path with a ':' +include directories : /include + +# the file which defines the master object +master file : /secure/master + +# the file where all global simulated efuns are defined. +simulated efun file : /secure/simul_efun + +# alternate debug.log file name (assumed to be in specified 'log directory') +debug log file : debug.log + +# This is an include file which is automatically #include'd in all objects +global include file : + +# if an object is left alone for a certain time, then the +# function clean_up will be called. This function can do anything, +# like destructing the object. If the function isn't defined by the +# object, then nothing will happen. +# This time should be substantially longer than the swapping time. +time to clean up : 120000 + +# How long time until an unused object is swapped out. +# Machine with too many players and too little memory: 900 (15 minutes) +# Machine with few players and lot of memory: 10000 +# Machine with infinite memory: 0 (never swap). +time to swap : 0 + +# How many seconds until an object is reset again. +time to reset : 1800 + +# Maximum number of bits in a bit field. They are stored in printable +# strings, 6 bits per byte. +maximum bits in a bitfield : 1200 + +# Max number of local variables in a function. +maximum local variables : 100 + +# Maximum amount of 'eval cost' per thread - execution is halted when +# it is exceeded. +maximum evaluation cost : 500000 + +# This is the maximum array size allowed for one single array. +maximum array size : 15000 + +# This is the maximum allowed size of a variable of type 'buffer'. +maximum buffer size : 400000 + +# Max size for a mapping +maximum mapping size : 1500000 + +# Max inherit chain size +inherit chain size : 30 + +# maximum length of a string variable +maximum string length : 200000 + +# Max size of a file allowed to be read by 'read_file()'. +maximum read file size : 200000 + +# max number of bytes you allow to be read and written with read_bytes +# and write_bytes +maximum byte transfer : 10000 + +# Define the size of the shared string hash table. This number should +# a prime, probably between 1000 and 30000; if you set it to about 1/5 +# of the number of distinct strings you have, you will get a hit ratio +# (number of comparisons to find a string) very close to 1, as found strings +# are automatically moved to the head of a hash chain. You will never +# need more, and you will still get good results with a smaller table. +hash table size : 7001 + +# Object hash table size. +# Define this like you did with the strings; probably set to about 1/4 of +# the number of objects in a game, as the distribution of accesses to +# objects is somewhat more uniform than that of strings. +object table size : 1501 + +# default no-matching-action message +default fail message : What? + +# default message when error() occurs (optional) +default error message : Something went wrong. + +# Number of milliseconds between game ticks, affects call_out() granularity +gametick msec : 100 + +# Number of milliseconds between heartbeats +heartbeat interval msec : 2000 + +# explode(): +# +# The old behavior (#undef both of the below) strips any number of +# delimiters at the start of the string, and one at the end. So +# explode("..x.y..z..", ".") gives ({ "x", "y", "", "z", "" }) +# +# SANE_EXPLODE_STRING strips off at most one leading delimiter, and +# still strips off one at the end, so the example above gives +# ({ "", "x", "y", "", "z", "" }). +# +# REVERSIBLE_EXPLODE_STRING overrides SANE_EXPLODE_STRING, and makes +# it so that implode(explode(x, y), y) is always x; i.e. no delimiters +# are ever stripped. So the example above gives +# ({ "", "", "x", "y", "", "z", "", "" }). +# +sane explode string : 1 +reversible explode string : 0 + +# SANE_SORTING: Use system provided fastest sorting routine for various +# sorting, including sort_array EFUN. +# +# This replace the old internal version qsort which only sorts to one +# direction repetitively. so following LPC code: +# +# sort_array(({4,3,2,1}), (: -($1<$2) :)); +# +# can still return ({1,2,3,4}), even though it only returns -1 and 0. +# +# It is recommended to fix your LPC code to not rely on this behavior. +# +# Your LPC code should return 1, 0, -1 for situation where first argument +# is less than, equal to, or greater than the second argument. This will +# will work with both implementation. +# +# Old code should work fine with this added, easy to inspect by searching +# for sort_array. +# +sane sorting : 1 + +# WARN_TAB: Some versions of the editor built in indent function use +# tabs for indenting. This options turns on a warning message for +# files indented with tabs instead of spaces. +# +warn tab : 0 + +# WOMBLES: don't allow spaces between start/end of array/mapping/functional +# token chars so ({1,2,3}) still works, but ( { 1 , 2 , 3 } ) doesn't +# and ({ 1 , 2 , 3 }) does. +wombles : 0 + +# CALL_OTHER_TYPE_CHECK: enable type checking for call_other() +# (-> operator on objects) +# +# Notice: LIMA does not currently support this due to using the parser +# for verbs. All the verbs would complain at every parsed verb. +# +call other type check : 0 + +# CALL_OTHER_WARN, make it warning instead of errors +call other warn : 1 + +# MUDLIB_ERROR_HANDLER: If you define this, the driver doesn't do any +# handling of runtime errors, other than to turn the heartbeats of +# objects off. Information about the error is passed in a mapping +# to the error_handler() function in the master object. Whatever is +# returned is put in the debug.log. +# +mudlib error handler : 1 + +# NO_RESETS: completely disable the periodic calling of reset() +no resets : 0 + +# LAZY_RESETS: if this is defined, an object will only have reset() +# called in it when it is touched via call_other() or move_object() +# (assuming enough time has passed since the last reset). If LAZY_RESETS +# is #undef'd, then reset() will be called as always (which guaranteed that +# reset would always be called at least once). The advantage of lazy +# resets is that reset doesn't get called in an object that is touched +# once and never again (which can save memory since some objects won't get +# reloaded that otherwise would). +# +lazy resets : 1 + +# RANDOMIZED_RESETS: if this is defined, then reset() will be called in +# a randomized time interval, varying from between TIME_TO_RESET/2 to +# TIME_TO_RESET-1. If RANDOMIZED_RESETS is undefined, then reset() +# will be called upon all objects at the same time using the interval +# TIME_TO_RESET. +# +randomized resets : 1 + +# NO_ANSI: define if you wish to disallow users from typing in commands that +# contain ANSI escape sequences. Defining NO_ANSI causes all escapes +# (ASCII 27) to be replaced with a space ' ' before the string is passed +# to the action routines added with add_action. +# +# STRIP_BEFORE_PROCESS_INPUT allows the location where the stripping is +# done to be controlled. If it is defined, then process_input() doesn't +# see ANSI characters either; if it is undefined ESC chars can be processed +# by process_input(), but are stripped before add_actions are called. +# Note that if NO_ADD_ACTION is defined, then #define NO_ANSI without +# #define STRIP_BEFORE_PROCESS_INPUT is the same as #undef NO_ANSI. +# +# If you anticipate problems with users intentionally typing in ANSI codes +# to make your terminal flash, etc define this. +# +no ansi : 1 +strip before process input: 1 + +# THIS_PLAYER_IN_CALL_OUT: define this if you wish this_player() to be +# usable from within call_out() callbacks. +# +this_player in call_out : 1 + +# TRACE: define this to enable the trace() and traceprefix() efuns. +# (keeping this undefined will cause the driver to run faster). +# +trace : 1 + +# TRACE_CODE: define this to enable code tracing (the driver will print +# out the previous lines of code to an error) eval_instruction() runs about +# twice as fast when this is not defined (for the most common eoperators). +# +trace code : 0 + +# TRACE: set this to 1 to collect context information during LPC traces. +trace lpc execution context : 0 +g +# TRACE: set this to 1 to collect LPC instruction information during LPC traces. +trace lpc instructions : 0 + +# INTERACTIVE_CATCH_TELL: define this if you want catch_tell called on +# interactives as well as NPCs. If this is defined, user.c will need a +# catch_tell(msg) method that calls receive(msg); +# +interactive catch tell : 0 + +# RECEIVE_SNOOP: define this if you want snoop text to be sent to +# the receive_snoop() function in the snooper object (instead of being +# sent directly via add_message()). This is useful if you want to +# build a smart client that does something different with snoop messages. +# +receive snoop : 1 + +# SNOOP_SHADOWED: define this if you want snoop to report what is +# sent to the player even in the event that the player's catch_tell() is +# shadowed and the player may not be seeing what is being sent. Messages +# of this sort will be prefixed with $$. +# +snoop shadowed : 0 + +# REVERSE_DEFER: +# +# If not defined executes defer functions in LIFO mode. +# +# If defined executes defer functions in FIFO mode. +# +reverse defer : 1 + +# OLD_TYPE_BEHAVIOR: reintroduces a bug in type-checking that effectively +# renders compile time type checking useless. For backwards compatibility. +# +# Compat status: dealing with all the resulting compile errors can be +# a huge pain even if they are correct, and the impact on the code is +# small. +# +old type behavior : 0 + +# OLD_RANGE_BEHAVIOR: define this if you want negative indexes in string +# or buffer range values (not lvalue, i.e. x[-2..-1]; for e.g. not +# x[-2..-1] = foo, the latter is always illegal) to mean counting from the +# end +# +# Compat status: Not horribly difficult to replace reliance on this, but not +# trivial, and cannot be simulated. +# +old range behavior : 0 + +# define to get a warning for code that might use the old range behavior +# when you're not actually using the old range behavior +warn old range behavior : 1 + +# NONINTERACTIVE_STDERR_WRITE: if defined, all writes/tells/etc to +# noninteractive objects will be written to stderr prefixed with a ']' +# (old behavior). +# +# Compat status: Easy to support, and also on the "It's a bug! No, it's +# a feature!" religious war list. +# +noninteractive stderr write : 1 + +# supress warnings about unused arguments; only warn about unused local +# variables. Makes older code (where argument names were required) compile +# more quietly. +# +suppress argument warnings : 0 + +# call_out(0) loop prevention: +# +# This is the number of call_out(.., 0) call can be scheduled on the same +# gametick. +# +call_out(0) nest level : 10 + +# HAS_CONSOLE: If defined, the driver can take the argument -C +# which will give the driver an interactive console (you can type +# commands at the terminal.) Backgrounding the driver will turn off +# the console, but sending signal SIGTTIN (kill -21) to the driver can +# turn it back on. Typing 'help' will display commands available. +# The intent is to allow the inspection of things that are difficult +# to inspect from inside the mud. +# +has console : 1 + +# sprintf: Make format like "%10s" ignore ANSI escape code length, as they +# are not visible in the client. +# +sprintf add_justified ignore ANSI colors : 1 + +# add_action: Make enable_commands() always re-call init(). same as +# calling enable_commands(1). +# +enable_commands call init : 0 + +# TRAP_CRASHES: define this if you want MudOS to call crash() in master.c +# and then shutdown when signals are received that would normally crash the +# driver. +# +trap crashes : 1 + +# telnet extensions support +enable mxp : 0 +enable gmcp : 1 +enable zmp : 0 +enable mssp : 1 +enable msp : 0 diff --git a/adm/dist/fluffos b/adm/dist/fluffos new file mode 160000 index 00000000..4a6fafb5 --- /dev/null +++ b/adm/dist/fluffos @@ -0,0 +1 @@ +Subproject commit 4a6fafb554548da860fe4fd15130a53a71d5dbd0 diff --git a/local_options b/adm/dist/local_options similarity index 100% rename from local_options rename to adm/dist/local_options diff --git a/adm/dist/rebuild b/adm/dist/rebuild new file mode 100755 index 00000000..9f087bc6 --- /dev/null +++ b/adm/dist/rebuild @@ -0,0 +1,85 @@ +#!/bin/bash + +# Original file contributed by Gesslar, adapted by Tsath 2024 for LIMA + +# Exit immediately if a command exits with a non-zero status +set -e + +# Set up some colors for use in the script +reset='\e[0m' +green='\e[38;5;78m' +gold='\e[38;5;214m' +red='\e[38;5;124m' + +# Change to the directory containing the script +cd "$(dirname "$0")" + +# Check if config.mud exists +config_file="$(pwd)/config.mud" +if [[ ! -f "$config_file" ]]; then + echo -e "${red}[ERROR]${reset} ${config_file} does not exist." + exit 1 +fi + +# Record the top of the repository directory +repo_root=$(cd ../.. && pwd) + +# Absolute path to the driver executable +driver="${repo_root}/adm/dist/bin/driver" + +# Ensure the FluffOS driver submodule is up to date +git submodule update --init --recursive > /dev/null +cd fluffos +git checkout master > /dev/null 2>&1 +git pull origin master > /dev/null + +# Copy our custom local_options to the driver for compilation +cp -v ../local_options src/local_options + +# Compile the driver +rm -rf build +mkdir build +cd build + cmake .. \ + -DPACKAGE_UIDS=OFF \ + -DPACKAGE_MUDLIB_STATS=OFF + +make -j "$(nproc)" install + +# Copy the compiled binaries to the target directory +cp -vf bin/driver ${repo_root}/adm/dist/bin/ +cp -vf bin/lpcc ${repo_root}/adm/dist/bin/ +cp -vf bin/o2json ${repo_root}/adm/dist/bin/ +cp -vf bin/json2o ${repo_root}/adm/dist/bin/ + +# Copy the driver headers to the target include directory +cp -avf bin/include/*.h ${repo_root}/lib/include/driver/ + +# Restore the original source back to the original state +cd .. +git reset --hard HEAD > /dev/null + +# Update config.mud with the correct absolute paths +mudlib_path="${repo_root}/lib" +log_path="${repo_root}/lib/log" + +# Copy driver documentation +rm -rf ${mudlib_path}/help/fluffos +mkdir ${mudlib_path}/help/fluffos +echo -e "Installing driver documentation into lib" +cd docs +cp -r apply efun concepts driver lpc ${mudlib_path}/help/fluffos/ +find ${mudlib_path}/help/fluffos -name 'index.md' -exec rm {} \; + +# Escape slashes for sed +escaped_mudlib_path=$(echo $mudlib_path | sed 's/\//\\\//g') +escaped_log_path=$(echo $log_path | sed 's/\//\\\//g') + +# Update the config.mud file +sed -i "s|^mudlib directory.*|mudlib directory : $escaped_mudlib_path|" $config_file +sed -i "s|^log directory.*|log directory : $escaped_log_path|" $config_file + +echo -e "" +echo -e "${green}[SUCCESS]${reset} FluffOS Driver has been compiled and is ready." +echo -e "" +echo -e "${green}[SUCCESS]${reset} You can execute ${green}${repo_root}/adm/dist/run${reset} to start the driver and game." diff --git a/adm/dist/run b/adm/dist/run new file mode 100755 index 00000000..910bf11c --- /dev/null +++ b/adm/dist/run @@ -0,0 +1,67 @@ +#!/bin/bash + +# Original file contributed by Gesslar, adapted by Tsath 2024 for LIMA + +# Change to the directory containing the script +cd "$(dirname "$0")" + +# Get the full OS path to the driver executable +driver="$(pwd)/bin/driver" +config="$(pwd)/config.mud" + +# Function to run the driver and check its exit status +run_driver() { + echo "Running driver..." + $driver $config + local exit_status=$? + echo "Driver finished running with exit status: $exit_status" + return $exit_status +} + +# Function to stop any existing driver processes +stop_driver() { + echo "Stopping all running driver instances..." + pids=$(pgrep -f "$driver") + if [[ -n "$pids" ]]; then + echo "Found driver processes with PIDs: $pids" + kill $pids + echo "Driver processes stopped." + else + echo "No running driver processes found." + fi +} + +# Handle script arguments +case "$1" in + "") + # Loop to restart the driver if it exits with status 0 + while true; do + run_driver + exit_status=$? + + echo "Exit status: $exit_status" + + if [[ $exit_status -eq 0 ]]; then + echo "Driver exited with reboot status code. Restarting." + sleep 1 # Optional: Add a small delay before restarting + else + echo "Driver exited with status $exit_status. Stopping." + break + fi + done + ;; + bg) + echo "Starting driver in the background..." + nohup bash -c "$0" > run.log 2>&1 & + echo "Driver started in the background with PID $!" + exit 0 + ;; + stop) + stop_driver + exit 0 + ;; + *) + echo "Usage: $0 [bg|stop]" + exit 1 + ;; +esac \ No newline at end of file diff --git a/bin/README.md b/bin/README.md new file mode 100644 index 00000000..a15a1fa9 --- /dev/null +++ b/bin/README.md @@ -0,0 +1,4 @@ +# Bin directory +This folder contains binaries for Ubuntu/Linux, and they may or may not work +for you, so we recommend rebuilding them using ``adm/dist/rebuild`` as soon +as possible. \ No newline at end of file diff --git a/bin/driver b/bin/driver new file mode 100755 index 00000000..a211d665 Binary files /dev/null and b/bin/driver differ diff --git a/bin/json2o b/bin/json2o new file mode 100755 index 00000000..4c09feea Binary files /dev/null and b/bin/json2o differ diff --git a/bin/lpcc b/bin/lpcc new file mode 100755 index 00000000..c23b0576 Binary files /dev/null and b/bin/lpcc differ diff --git a/bin/o2json b/bin/o2json new file mode 100755 index 00000000..4a3da9de Binary files /dev/null and b/bin/o2json differ diff --git a/build.sh b/build.sh deleted file mode 100755 index 08ee1897..00000000 --- a/build.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash -set -euo pipefail - -rm -rf build -mkdir -p build - -# fix me, should use cmake variables -cp -f local_options ./driver/src/ - -cd build -cmake ../driver -DPACKAGE_UIDS=OFF - -make install -cd .. diff --git a/driver b/driver deleted file mode 160000 index 518fcbdc..00000000 --- a/driver +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 518fcbdc7f250dbb23fb7d8891288ee4c3fcb643 diff --git a/lib/FAQ b/lib/FAQ index f978c703..96cac105 100644 --- a/lib/FAQ +++ b/lib/FAQ @@ -3,13 +3,12 @@ FREQUENTLY ASKED QUESTIONS Q Does Lima work on Windows ? -A No - MudOS does not support Windows. - However, it does compile satisfactorily on Cygwin, a Linux emulator - which runs on Windows. +A Yes, if you use Windows Subsystem for Liux (WSL) + See https://limamudlib.readthedocs.io/Installation.html. Q Does Lima work with other drivers ? -A No - it was written specifically for MudOS. +A No - it was written specifically for FlussOS. It could be converted for other drivers (eg LDMUD or DGD), but that would involve a lot of work. @@ -17,7 +16,7 @@ Q Does Lima work on OS X? (or other versions of *nix) A It should do. However we don't test on all versions. Report any problems compiling the driver on Lima Bean - (lima.mudlib.org:7878) and by email to marius@mudos.org (with full details) + (limalib.dev:7878) Q Why doesn't the mud work - says it can't find the mudlib directory ? @@ -90,9 +89,6 @@ Q How do I get my new verb to work properly ? A Best way to find what is wrong is to use the "parse" command in front of the verb - eg "parse smash apple" to see why "smash apple" isn't working. - You need to have debugging enabled in the driver, which can be done be - recompiling the driver starting with "./build.MudOS debug", then "make", - "make install" etc. Q How do I find/fix errors in my code ? diff --git a/lib/USAGE b/lib/USAGE index 6db803ad..eb411275 100644 --- a/lib/USAGE +++ b/lib/USAGE @@ -12,4 +12,6 @@ The authors of this software are: - John Viega (rust@virginia.edu) - Greg Stein (gstein@svpal.org) -- Tim Hollebeek (tim@wfn-shop.princeton.edu) \ No newline at end of file +- Tim Hollebeek (tim@wfn-shop.princeton.edu) + +.. TAGS: RST diff --git a/lib/WWW/cgi/who.c b/lib/WWW/cgi/who.c index 55e21c1f..1d39cf44 100644 --- a/lib/WWW/cgi/who.c +++ b/lib/WWW/cgi/who.c @@ -109,8 +109,8 @@ string main(mixed data) "%s", info.visname, MUD_NAME, info.visname, MUD_NAME, stripped(first_line), info.nickname, info.level, info.real_name, info.position, info.idle == -1 ? "Left at" : "On since", - info.last_login ? ctime(info.last_login) : "", idle, info.connect_from, mailstring, - info.email, info.home_page); + info.last_login ? ctime(info.last_login) : "", idle, info.connect_from, mailstring, info.email, + info.home_page); if (info.plan) s += "Plan:\n" + info.plan + "\n"; diff --git a/lib/cmds/create/Cmd_rules b/lib/cmds/create/Cmd_rules deleted file mode 100644 index 4282151c..00000000 --- a/lib/cmds/create/Cmd_rules +++ /dev/null @@ -1,4 +0,0 @@ -newroom fname -setbrief str* -addobject file -addexit str fname diff --git a/lib/cmds/create/READ_ME b/lib/cmds/create/READ_ME deleted file mode 100644 index 93fcb96d..00000000 --- a/lib/cmds/create/READ_ME +++ /dev/null @@ -1,6 +0,0 @@ -This dir contains LPScript based commands, that will likely: - * Not create the rooms you want - * Not work - * Not use all the features the mudlib has to offer. - -We recommend looking at other rooms and example code under /domains/std/ diff --git a/lib/cmds/create/addexit.c b/lib/cmds/create/addexit.c deleted file mode 100644 index a0852d96..00000000 --- a/lib/cmds/create/addexit.c +++ /dev/null @@ -1,71 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -inherit __DIR__ "scr_command"; - -private -string reverse(string dir) -{ - switch (dir) - { - case "north": - return "south"; - case "northeast": - return "southwest"; - case "east": - return "west"; - case "southeast": - return "northwest"; - case "south": - return "north"; - case "southwest": - return "northeast"; - case "west": - return "east"; - case "northwest": - return "southeast"; - case "up": - return "down"; - case "down": - return "up"; - } -} - -private -void main(string *args) -{ - string dir = args[0]; - string where = args[1]; - string fname; - - if (!(fname = get_file_name())) - return; - if (file_size(where + ".c") >= 0) - where += ".c"; - if (file_size(where + ".scr") >= 0) - where += ".scr"; - if (file_size(where) < 0) - { - write("Could not find file '" + where + "'.\n"); - return; - } - if (add_exit(fname, dir, where)) - write("Done.\n"); - update(fname); - if (where[ < 4..] == ".scr") - { - string dir2 = reverse(dir); - if (!dir2) - { - write("No return path added; inverse of '" + dir + "' unknown.\n"); - return; - } - write("Adding return path ...\n"); - if (add_exit(where, dir2, fname)) - write("Done.\n"); - update(where); - } - else - { - write("No return path added; destination not written in LPscript.\n"); - } -} diff --git a/lib/cmds/create/describeroom.c b/lib/cmds/create/describeroom.c deleted file mode 100644 index 9a3c63f1..00000000 --- a/lib/cmds/create/describeroom.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -#include - -inherit __DIR__ "scr_command"; -inherit M_INPUT; - -string fname; - -void finish_editing(string *alltext) -{ - string fname = get_file_name(); - if (!alltext) - { - write("Description unchanged.\n"); - return; - } - - if (change_attribute(fname, "long", implode(alltext, "\n"))) - { - write("Description changed.\n"); - update(fname); - } -} - -private -void main() -{ - string fname; - - if (!(fname = get_file_name())) - return; - - write("Begin typing description.\n"); - new (EDIT_OB, EDIT_TEXT, 0, ( : finish_editing:)); -} diff --git a/lib/cmds/create/newroom.c b/lib/cmds/create/newroom.c deleted file mode 100644 index 4cb3f225..00000000 --- a/lib/cmds/create/newroom.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -inherit CMD; - -private -void main(string *args) -{ - string fname = args[0]; - - if (fname[4..] != ".scr") - fname += ".scr"; - if (file_size(fname) != -1) - { - write("File exists!\n"); - return; - } - write_file(fname, -@END -is = room -brief = A new room(change with 'setbrief') -long = There is nothing here. - Describe this room using 'describeroom'. - Add objects with 'addobject'. - Add exits with 'addexit'. -END); - write("Done (moving you there).\n"); - this_body()->move(fname); -} diff --git a/lib/cmds/create/scr_command.c b/lib/cmds/create/scr_command.c deleted file mode 100644 index 18449bb2..00000000 --- a/lib/cmds/create/scr_command.c +++ /dev/null @@ -1,196 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -// Utility functions for operating on .scr files. - -inherit CMD; - -/* So we don't get interpreted as a command. If we were to return 1, then - * our children would not be commands either. Instead, we return our filename - * which won't match for children. - */ -mixed not_a_cmd() -{ - return __FILE__[0.. < 3]; // no .c -} - -string get_file_name() -{ - object env = environment(this_body()); - mixed fn; - - if (!env) - { - write("You're nowhere!\n"); - return 0; - } - fn = file_name(env); - if (fn[ < 4..] != ".scr") - { - write("You are not standing in an LPscript room.\n"); - return 0; - } - return fn; -} - -int add_exit(string fname, string dir, string value) -{ - string text = read_file(fname); - string before, values, after; - string *parts; - int i, found; - - if (!text) - { - write("Failed (could not read file).\n"); - return 0; - } - parts = explode(text, "\nexits="); - switch (sizeof(parts)) - { - case 1: - before = parts[0]; - values = ""; - after = ""; - break; - case 2: - before = parts[0]; - after = parts[1]; - i = 0; - while (after[i] == ' ') - i++; - after = after[i..]; - if (after[0] == '\n') - { - i = strsrch(after, "\nend\n"); - if (i == -1) - { - write("Failed (could not find end of 'exits').\n"); - return 0; - } - values = after[0..i - 1]; - after = after[i + 5..]; - } - else - { - i = member_array('\n', after); - if (i == -1) - { - write("Failed (could not find end of 'exits').\n"); - return 0; - } - values = after[0..i - 1]; - after = after[i + 1..]; - } - break; - default: - write("Failed (found >1 instance of 'exits').\n"); - return 0; - } - parts = explode(values, "\n"); - for (i = 0; i < sizeof(parts); i++) - { - string item = parts[i]; - int ind = 0, p; - - while (item[ind] == ' ') - ind++; - p = member_array(':', item); - if (item[ind..p - 1] == dir) - { - parts[i] = item[0..p+1] + value; - found = 1; - } - } - if (!found) - { - int ind = 0; - if (sizeof(parts)) - { - while (parts[0][ind] == ' ') - ind++; - } - else - ind = 2; - parts += ({repeat_string(" ", ind) + dir + ": " + value}); - } - write_file(fname, before + "\nexits=\n" + implode(parts, "\n") + "\nend\n" + after, 1); - return 1; -} - -int change_attribute(string fname, string attr, string what) -{ - string text = read_file(fname); - string before, after; - string *parts; - int i; - - if (!text) - { - write("Failed (could not read file).\n"); - return 0; - } - parts = explode(text, "\n" + attr + "="); - switch (sizeof(parts)) - { - case 1: - before = ""; - after = parts[0]; - break; - case 2: - before = parts[0]; - after = parts[1]; - i = 0; - while (after[i] == ' ') - i++; - after = after[i..]; - if (after[0] == '\n') - { - i = strsrch(after, "\nend\n"); - if (i == -1) - { - write("Failed (could not find end of '" + attr + "').\n"); - return 0; - } - after = after[i + 5..]; - } - else - { - i = member_array('\n', after); - if (i == -1) - { - write("Failed (could not find end of '" + attr + "').\n"); - return 0; - } - after = after[i + 1..]; - } - break; - default: - write("Failed (found >1 instance of '" + attr + "').\n"); - return 0; - } - if (member_array('\n', what) == -1) - write_file(fname, before + "\n" + attr + "=" + what + "\n" + after, 1); - else - write_file(fname, before + "\n" + attr + "=\n " + replace_string(what, "\n", "\n ") + "\nend\n" + after, 1); - return 1; -} - -void update(string fname) -{ - object ob; - object *tosave; - - if (ob = find_object(fname)) - { - tosave = filter( - all_inventory(ob), function(object ob) { - if (ob->query_link() && interactive(ob->query_link())) - { - ob->move(VOID_ROOM); - return 1; - } - }); - destruct(ob); - tosave->move(load_object(fname)); - } -} diff --git a/lib/cmds/create/setbrief.c b/lib/cmds/create/setbrief.c deleted file mode 100644 index e8e9fa72..00000000 --- a/lib/cmds/create/setbrief.c +++ /dev/null @@ -1,16 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -inherit __DIR__ "scr_command"; - -private -void main(string *args) -{ - string brief = implode(args, " "); - string fname; - - if (!(fname = get_file_name())) - return; - if (change_attribute(fname, "brief", brief)) - write("Done.\n"); - update(fname); -} diff --git a/lib/cmds/guild/lfe/SPECIALS_HELP.rst b/lib/cmds/guild/lfe/SPECIALS_HELP.rst new file mode 100644 index 00000000..92b36066 --- /dev/null +++ b/lib/cmds/guild/lfe/SPECIALS_HELP.rst @@ -0,0 +1,17 @@ + +ASSOCIATION SPECIALS IN LF ELECTRONICS +************************************** + +override +======== + + Override basic electronics to bypass their normal function or make them work + for you. + + REQUIREMENTS: None + REFLEX COST: 2 + +NOTE: The damage and effectiveness improves with your skill rank in the +specials. Specials may also behave differently as your rank improves and become +more reliable. + diff --git a/lib/cmds/guild/lfe/override.c b/lib/cmds/guild/lfe/override.c new file mode 100644 index 00000000..e7a2c730 --- /dev/null +++ b/lib/cmds/guild/lfe/override.c @@ -0,0 +1,83 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: PLAYERCOMMAND +// USAGE override +// override +// +// Override basic electronics to bypass their normal function or make them work +// for you. +// +// .. TAGS: RST + +inherit SPECIAL; + +string override_msg = "$N $voverride the security system of the $o."; +string override_fail = "$N $vtry to override the $o, but $vfail with a buzz and a bit of smoke."; +private +void setup() +{ + set_reflex_cost(2); + set_obj_required(1); + set_name("override"); +} + +void special(object attacker, object ob) +{ + // int check = skill_check(attacker, target); + + // It's a lock! + if (ob->is_lockable()) + { + if (!ob->query_locked()) + { + write("That is no longer locked, so would be a shame to try to override it.\n"); + return; + } + + // This object is locked, we'll try to override it. + if (ob->override_unlock()) + { + this_body()->simple_action(override_msg, ob); + ob->override_successful(); + } + else + { + this_body()->simple_action(override_fail, ob); + ob->override_failed(); + } + + return; + } + + // It's a turret! + if (ob->is_turret()) + { + object battery; + if (!present("battery", ob)) + { + write("The " + ob->short() + " seems to be missing a battery inside it before it can be overriden.\n"); + return; + } + + battery = present("battery", ob); + if (!ob->is_powered()) + { + write("The " + ob->short() + " is out of power and needs a new battery.\n"); + return; + } + + if (ob->override_turret()) + { + this_body()->simple_action(override_msg, ob); + ob->override_successful(); + } + else + { + this_body()->simple_action(override_fail, ob); + ob->override_failed(); + } + return; + } + + write("You're not quite sure how to override that?\n"); +} diff --git a/lib/cmds/guild/yakitori/SPECIALS_HELP.rst b/lib/cmds/guild/yakitori/SPECIALS_HELP.rst new file mode 100644 index 00000000..b7004dad --- /dev/null +++ b/lib/cmds/guild/yakitori/SPECIALS_HELP.rst @@ -0,0 +1,43 @@ + +ASSOCIATION SPECIALS IN YAKITORI +******************************** + +sweep +===== + + When standing it is a technique used to take an opponent to the ground by + knocking their legs out from under them. The force of the sweep either runs + perpendicular to the opponent's leg or rises as it strikes the leg, lifting + the foot from the ground. + + REQUIREMENTS: None + REFLEX COST: 2 + +trip +==== + + Kuzushi Waza (or backwards trip) is a technique that consists of throwing a + cross as if you want to reach the opponent jaw but instead you go with your + hand to the side of his neck and then you step forward with your leg putting + it right behind the opponent, tripping your opponent if successful. Trips + become easier as you rank up. + + REQUIREMENTS: ``Combat/Special/Sweep [1]`` + Dexterity 10 or higher + REFLEX COST : 3 + +roundhouse +========== + + This Karate technique consists of throwing a Mawashi geri (Roundhouse) to the + midsection of the opponent as a distraction then following with a Choku-zuki + (Jab) with the lead hand to the chin. + + REQUIREMENTS: ``Combat/Special/Trip [2]`` + Dexterity 20 or higher + REFLEX COST : 5 + +NOTE: The damage and effectiveness improves with your skill rank in the +specials. Specials may also behave differently as your rank improves and become +more reliable. + diff --git a/lib/cmds/guild/yakitori/roundhouse.c b/lib/cmds/guild/yakitori/roundhouse.c new file mode 100644 index 00000000..8da75d5a --- /dev/null +++ b/lib/cmds/guild/yakitori/roundhouse.c @@ -0,0 +1,70 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: PLAYERCOMMAND USAGE roundhouse roundhose +// +// This Karate technique consists of throwing a Mawashi geri (Roundhouse) to the +// midsection of the opponent as a distraction then following with a Choku-zuki +//(Jab) with the lead hand to the chin. +// +// .. TAGS: RST + +inherit SPECIAL; + +private +void setup() +{ + set_reflex_cost(5); + set_name("roundhouse"); + set_target_required(1); + set_starts_fight(1); + set_other_skill("combat/special/trip", 2); +} + +int special_check(object attacker, object target) +{ + if (attacker->query_agility_stat() < 20) + { + write("You need a Dexterity score of at least 20.\n"); + return 0; + } + return 1; +} + +void jab(object attacker, object target) +{ + int rank = skill_rank(attacker); + attacker->targetted_action("$N $vfollow up $p roundhouse kick with a jab to the $p1 chin.", target); + target->hurt_us((rank * 10) + random(5), "head"); + target->stun("head", 5 + random(15)); +} + +void special(object attacker, object target) +{ + int check = skill_check(attacker, target); + int rank = skill_rank(attacker); + string limb; + + limb = target->query_random_limb(); + + if (!check) + { + attacker->targetted_action("$N $vattempt a roundhouse kick to $p1 $o, but it's just a strafe.", target, limb); + target->hurt_us(5 + random(5), limb); + return; + } + + if (limb) + { + if (limb != "head") + { + attacker->targetted_action("$N roundhouse $vkick $p1 $o, failing to follow up.", target, limb); + target->hurt_us((rank * 5) + random(5), limb); + } + else + { + attacker->targetted_action("$N roundhouse $vkick $p1 $o. Whap!", target, limb); + target->hurt_us((rank * 7) + random(5), limb); + call_out("jab", 2, attacker, target); + } + } +} diff --git a/lib/cmds/guild/yakitori/sweep.c b/lib/cmds/guild/yakitori/sweep.c new file mode 100644 index 00000000..93b4da55 --- /dev/null +++ b/lib/cmds/guild/yakitori/sweep.c @@ -0,0 +1,77 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: PLAYERCOMMAND +// USAGE sweep +// sweep +// +// Sweep someones feet or limbs they use to move around with. +// +// .. TAGS: RST + +/* +** Sweep version 1.1 +** * Added more damage and made the messages better. +*/ + +inherit SPECIAL; + +private +void setup() +{ + set_reflex_cost(2); + set_name("sweep"); + set_target_required(1); + set_starts_fight(1); +} + +// https://en.wikipedia.org/wiki/Foot_sweep + +void special(object attacker, object target) +{ + int check = skill_check(attacker, target); + int rank = skill_rank(attacker); + string limb; + + if (!check) + { + attacker->targetted_action("$N $vattempt to do a foot sweep, but $t $v1are too quick.", target); + return; + } + + switch (rank) + { + case 0: + limb = choice(target->query_mobile_limbs()); + if (limb) + { + attacker->targetted_action("$N $vperform a simple single-leg sweep on $p1 $o.", target, limb); + target->stun(limb, 1 + random(5)); + target->hurt_us(5 + random(2), limb); + } + break; + case 1: + limb = choice(target->query_mobile_limbs()); + if (limb) + { + attacker->targetted_action("$N $vperform a drop sweep on $p1 $o.", target, limb); + target->stun(limb, 5 + random(5)); + target->hurt_us(10 + random(5), limb); + } + break; + default: + limb = choice(target->query_mobile_limbs()); + if (limb) + { + attacker->targetted_action("$N $vperform a trap sweep on $p1 $o.", target, limb); + target->stun(limb, 5 + random(5)); + target->hurt_us(15 + random(5), limb); + } + limb = choice(target->query_mobile_limbs() - ({limb})); + if (limb) + { + target->stun(limb, 5 + random(5)); + target->hurt_us(10 + random(5), limb); + } + break; + } +} diff --git a/lib/cmds/guild/yakitori/trip.c b/lib/cmds/guild/yakitori/trip.c new file mode 100644 index 00000000..71903533 --- /dev/null +++ b/lib/cmds/guild/yakitori/trip.c @@ -0,0 +1,94 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: PLAYERCOMMAND +// USAGE trip +// trip +// +// Kuzushi Waza is a Karate technique not very known in MMA and other martial +// arts, it’s primarily exclusive to Karate. Kuzushi Waza consists of throwing a +// cross as if you want to reach the opponent jaw but instead you go with your +// hand to the side of his neck and then you step forward with your leg putting +// it right behind the opponent, this way, your opponent becomes trapped between +// your arm in front and your leg behind. After that all you have to do is drive +// through your opponent and he will automatically lose his balance and you will +// take him down effortlessly. +// +// .. TAGS: RST + +inherit SPECIAL; + +private +void setup() +{ + set_reflex_cost(3); + set_name("trip"); + set_target_required(1); + set_starts_fight(1); + set_other_skill("combat/special/sweep", 1); +} + +int special_check(object attacker, object target) +{ + if (attacker->query_dex() < 10) + { + write("You need a Dexterity score of at least 10.\n"); + return 0; + } + return 1; +} + +void special(object attacker, object target) +{ + int check = skill_check(attacker, target); + int rank = skill_rank(attacker); + string limb; + + if (!check) + { + if (target->is_limb("head")) + { + attacker->targetted_action("$N $vattempt a backward trip on $t, but only $vmanage a punch to the face.", + target, limb); + target->hurt_us(1 + random(5), "head"); + } + else + attacker->targetted_action( + "$N $vattempt to perform a backward trip, but $t $v1prevent $n from getting into the right position.", + target); + return; + } + + switch (rank) + { + case 0: + limb = choice(target->query_mobile_limbs()); + if (limb) + { + if (random(2)) + { + attacker->targetted_action("$N $vattempt a backward trip on $t, but only $vmanage a kick to $p1 $o.", + target, limb); + target->hurt_us(15 + random(5), limb); + target->stun(limb, 10 + random(5)); + } + else + { + attacker->targetted_action("$N $vperform a backward trip on $t, sending $t on $p1 butt.", target, limb); + target->stun(limb, 5 + random(5)); + target->hurt_us(5 + random(5), limb); + target->lie_down(); + } + } + break; + default: + limb = choice(target->query_mobile_limbs()); + if (limb) + { + attacker->targetted_action("$N $vperform a backward trip on $t, sending $t HARD on $p1 butt.", target, limb); + target->stun(limb, 5 + random(5)); + target->hurt_us(15 + random(5), limb); + target->lie_down(); + } + break; + } +} diff --git a/lib/cmds/player/Cmd_rules b/lib/cmds/player/Cmd_rules index 5206567f..4a2d827d 100644 --- a/lib/cmds/player/Cmd_rules +++ b/lib/cmds/player/Cmd_rules @@ -1 +1,2 @@ mudlist -dats: [str] +score -t [str] str \ No newline at end of file diff --git a/lib/cmds/player/adverbs.c b/lib/cmds/player/adverbs.c index 3da16760..7d6812b3 100644 --- a/lib/cmds/player/adverbs.c +++ b/lib/cmds/player/adverbs.c @@ -3,25 +3,29 @@ //: PLAYERCOMMAND //$$see: feelings, random, semote // -// USAGE adverbs [pattern] +// USAGE +// +// ``adverbs [pattern]`` // // Without an argument, shows all adverbs that you can use in soul commands. // With an argument, shows all adverbs matching the given pattern. // // Example: -// adverbs f*ly +// ``adverbs f*ly`` // // will show you all adverbs that start w/ 'f' and end in 'ly' // // To use an adverb in a soul command, use as much of the adverb as necessary -// to uniquely identify it, followed by a *. +// to uniquely identify it, followed by a \*. // // For example: -// smile fla* +// ``smile fla*`` +// +// will translate to: *smile flatly*. // -// will translate to: 'smile flatly'. +// But: ``smile fl*`` will not, because *flirtingly* also starts with 'fl'. // -// But: 'smile fl*' will not, because 'flirtingly' also starts with fl. +// .. TAGS: RST inherit CMD; inherit M_GLOB; diff --git a/lib/cmds/player/attic/say.c b/lib/cmds/player/attic/say.c deleted file mode 100644 index 13bb207a..00000000 --- a/lib/cmds/player/attic/say.c +++ /dev/null @@ -1,102 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -//: COMMAND -// -// Syntax: -// -// -// This command is used to talk with others in the same room as you. -// It is done in a common language that everybody can understand. -// The /last and /history syntaxes will display your say history. - -#include - -inherit CMD; -inherit M_GRAMMAR; - -#define MAX_HISTORY 20 -#undef PER_BODY_sAY_HISTORY - -void query_history(object o); -void add_history(object o, string msg); - -private -mapping history = ([]); - -void create() -{ - ::create(); - no_redirection(); -} - -private -void main(string s) -{ - if (!s || s == "") - { - out("Say what?\n"); - return; - } - - if (s == "/last") -#ifdef PER_BODY_SAY_HISTORY - return query_history(this_body()); -#else - return query_history(environment(this_body())); -#endif /* PER_BODY_SAY_HISTORY */ - -#ifdef ZORKMUD - this_body()->simple_action("$N $vsay, \"$O\"", punctuate(s)); -#ifdef PER_BODY_SAY_HISTORY - add_history(this_body(), sprintf("You say, \"%s\"", punctuate(s))); - foreach (object ob in filter(all_inventory(environment(this_body())) - ({this_body()}), ( : $1->query_link() :))) - add_history(ob, -#else - add_history(environment(this_body()), -#endif /* PER_BODY_SAY_HISTORY */ - sprintf("%s says, \"%s\"", this_body()->query_name(), punctuate(s))); -#else - this_body()->simple_action("%^SAY%^$N $vsay:%^RESET%^ $o", punctuate(s)); -#ifdef PER_BODY_SAY_HISTORY - add_history(this_body(), sprintf("%%^SAY%%^You say:%%^RESET%%^ %s", punctuate(s))); - foreach (object ob in filter(all_inventory(environment(this_body())) - ({this_body()}), ( : $1->query_link() :))) - add_history(ob, -#else - add_history(environment(this_body()), - sprintf("%%^SAY%%^%s says:%%^RESET%%^ %s", this_body()->query_name(), punctuate(s))); -#endif /* PER_BODY_SAY_HISTORY */ - -#endif /* ZORKMUD */ -} - -private -void add_history(object o, string msg) -{ - if (!history[o]) - history[o] = ({msg}); - else - history[o] += ({msg}); - - if (sizeof(history[o]) > MAX_HISTORY) - history[o] = history[o][1.. < 1]; -} - -private -void query_history(string o) -{ - string hist; - - if (!history[o]) - return out("No say history.\n"); - hist = implode(history[o], "\n"); - - if (hist == "") - hist = "\n"; - - more(sprintf("History of 'says':\n%s\n", hist)); -} - -nomask int valid_resend(string ob) -{ - return ob == "/cmds/player/converse"; -} diff --git a/lib/cmds/player/attic/tell.c b/lib/cmds/player/attic/tell.c deleted file mode 100644 index b0ac4efa..00000000 --- a/lib/cmds/player/attic/tell.c +++ /dev/null @@ -1,234 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -// /* Do not remove the headers from this file! see /USAGE for more info. */ - -//: COMMAND -// -// USAGE: tell -// tell @ -// tell /last -// tell /clear -// -// This command is used to tell others private messages. The second format -// can be used to tell to people on other muds. The /last syntax will -// display your tell history and the /clear syntax will clear it. - -#include -#include - -inherit CMD; -inherit M_GRAMMAR; -inherit M_COMPLETE; -inherit M_COLOURS; - -#define MAX_HISTORY 20 - -void query_history(string name); -void add_history(string name, string msg); -void clear_history(string name); - -private -mapping history = ([]); - -void create() -{ - ::create(); - no_redirection(); -} - -private -void main(string arg) -{ - string user; - string host; - mixed tmp; - string *words; - string muds; - string *previous_matches; - string *matches; - int i, j; - string mystring; - string deststring; - object who; - - if (!arg) - { - out("Usage: tell \n"); - return; - } - - if (arg == "/last") - return query_history(this_user()->query_userid()); - - if (arg == "/clear") - return clear_history(this_user()->query_userid()); - - if (sscanf(arg, "%s@%s", user, tmp) == 2) - { - muds = IMUD_D->query_up_muds(); - words = explode(tmp, " "); - j = sizeof(words); - tmp = ""; - for (i = 0; i < j; i++) - { - tmp += " " + words[i]; - if (tmp[0] == ' ') - tmp = tmp[1..]; - matches = find_best_match_or_complete(tmp, muds); - if (!sizeof(matches)) - { - break; - } - previous_matches = matches; - } - if (previous_matches) - { - if (sizeof(previous_matches) > 1) - { - out("Vague mud name. could be: " + implode(previous_matches, ", ") + "\n"); - return; - } - - host = previous_matches[0]; - arg = implode(words[i..], " "); - if (host == mud_name()) - { - main(user + " " + arg); - return; - } - - if (arg[0] == ';' || arg[0] == ':') - { - mixed *soul_ret; - - arg = arg[1..]; - soul_ret = SOUL_D->parse_imud_soul(arg); - - if (!soul_ret) - { - IMUD_D->do_emoteto(host, user, sprintf("%s@%s %s", capitalize(user), host, arg)); - outf("%%^TELL%%^You emote to %s@%s:%%^RESET%%^ %s %s\n", capitalize(user), host, - this_body()->query_name(), arg); - add_history(this_user()->query_userid(), - sprintf("%%^TELL%%^You emote to %s@%s:%%^RESET%%^ %s %s\n", capitalize(user), host, - this_body()->query_name(), arg)); - return; - } - IMUD_D->do_emoteto(host, user, soul_ret[1][ < 1]); - outf("%%^TELL%%^(tell)%%^RESET%%^ %s", soul_ret[1][0]); - add_history(this_user()->query_userid(), sprintf("%%^TELL%%^(tell)%%^RESET%%^ %s", soul_ret[1][0])); - return; - } - IMUD_D->do_tell(host, user, arg); - outf("%%^TELL%%^You tell %s@%s: %%^RESET%%^%s\n", capitalize(user), host, arg); - add_history(this_user()->query_userid(), - sprintf("%%^TELL%%^You tell %s@%s: %%^RESET%%^%s\n", capitalize(user), host, arg)); - return; - } - } - if (sscanf(arg, "%s %s", user, arg) != 2) - { - out("Usage: tell \n"); - return; - } - who = find_body(lower_case(user)); - if (!who) - { - outf("Couldn't find %s.\n", user); - return; - } - - if (who->query_invis() && !adminp(this_user())) - { - outf("Couldn't find %s.\n", user); - return; - } - if (!who->query_link() || !interactive(who->query_link())) - { - outf("%s is linkdead.\n", who->query_name()); - return; - } - - if (arg[0] == ':' || arg[0] == ';') - { - mixed *soul_ret; - int tindex; - - arg = arg[1..]; - - soul_ret = SOUL_D->parse_soul(arg); - if (!soul_ret) - { - mystring = sprintf("%%^TELL%%^You emote to %s: %%^RESET%%^%s %s\n", - who == this_body() ? "yourself" : who->query_name(), this_body()->query_name(), arg); - deststring = sprintf("*%s %s\n", this_body()->query_name(), arg); - } - else - { - mystring = sprintf("%%^TELL%%^(tell)%%^RESET%%^ %s", soul_ret[1][0]); - - if ((tindex = member_array(who, soul_ret[0])) == -1) - { - deststring = sprintf("%%^TELL%%^(tell)%%^RESET%%^ %s", soul_ret[1][ < 1]); - } - else - { - deststring = sprintf("%%^TELL%%^(tell)%%^RESET%%^ %s", soul_ret[1][tindex]); - } - } - } - else - { - mystring = - sprintf("%%^TELL%%^You tell %s:%%^RESET%%^ %s\n", who == this_body() ? "yourself" : who->query_name(), arg); - deststring = "%^TELL%^" + this_body()->query_name() + " tells you: %^RESET%^" + arg + "\n"; - } - - out(mystring); - add_history(this_user()->query_userid(), mystring); - if (who != this_body()) - { - who->receive_private_msg(deststring, MSG_INDENT); - add_history(who->query_userid(), deststring); - who->set_reply(this_user()->query_userid()); - } -} - -void add_history(string name, string msg) -{ - if (!this_user()) - { - if (find_object(IMUD_D) != previous_object()) - error("Illegal attempt to modify 'tell' history."); - } - - if (!history[name]) - history[name] = ({msg}); - else - history[name] += ({msg}); - - if (sizeof(history[name]) > MAX_HISTORY) - history[name] = history[name][1.. < 1]; -} - -private -void query_history(string name) -{ - string hist = history[name] ? implode(history[name], "") : ""; - - if (hist == "") - hist = "\n"; - - more(sprintf("History of 'tells':\n%s\n", hist)); -} - -private -void clear_history(string name) -{ - map_delete(history, name); -} - -nomask int valid_resend(string ob) -{ - return ob == "/cmds/player/reply"; -} diff --git a/lib/cmds/player/biff.c b/lib/cmds/player/biff.c index 6607a0d3..70c65323 100644 --- a/lib/cmds/player/biff.c +++ b/lib/cmds/player/biff.c @@ -11,12 +11,16 @@ //: PLAYERCOMMAND //$$see: mail // -// USAGE biff -// biff on -// biff off +// USAGE +// +// | ``biff`` +// | ``biff on`` +// | ``biff off`` // // Setting biff on or off will determine whether you receive mail notifications from the in-game // mail system or not. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/brief.c b/lib/cmds/player/brief.c index b8f04463..5ec6abf6 100644 --- a/lib/cmds/player/brief.c +++ b/lib/cmds/player/brief.c @@ -7,15 +7,18 @@ //: PLAYERCOMMAND //$$see: verbose -// USAGE brief -// brief on -// brief off +// USAGE +// | ``brief`` +// | ``brief on`` +// | ``brief off`` // // Shows or sets whether you are using "brief" mode, // which ignores the room descriptions. // Use "brief" mode at your own risk - it greatly increases the chance // of missing important clues in the room descriptions, // and of upsetting creators whose masterpieces of text you are now ignoring. +// +// .. TAGS: RST #include #define USAGE "Usage: brief [on|off]\n" diff --git a/lib/cmds/player/bug.c b/lib/cmds/player/bug.c index 318d1bc4..d5d0ef89 100644 --- a/lib/cmds/player/bug.c +++ b/lib/cmds/player/bug.c @@ -9,9 +9,12 @@ //: PLAYERCOMMAND //$$see: idea, typo, feedback, question -// USAGE bug +// USAGE +// ``bug`` // // This command directs a report of a game bug to the proper place. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/chan.c b/lib/cmds/player/chan.c index ef821b03..84a914f2 100644 --- a/lib/cmds/player/chan.c +++ b/lib/cmds/player/chan.c @@ -11,19 +11,19 @@ //: PLAYERCOMMAND //$$see: channels, gossip, newbie // The chan command is the central command for all channel -// communication. Below are the various forms the command takes:: +// communication. Below are the various forms the command takes: // -// chan - list channels being listened to -// chan gossip - find out whether the 'gossip' channel is being listened to -// chan gossip /on - turn listening on for the 'gossip' channel -// chan gossip /off - stop listening to 'gossip' -// chan gossip /list - find out who is listening to 'gossip' -// chan gossip /who - same as /list -// chan gossip /last - show the last 20 messages on the channel -// chan gossip - send to all listeners -// chan gossip ; - perform over the channel (e.g. chan gossip ;grin) -// chan gossip : - send to all listeners (e.g. chan gossip :wants a big sword!) -// chan mine /new - create the "mine" channel +// | ``chan`` - list channels being listened to +// | ``chan gossip`` - find out whether the 'gossip' channel is being listened to +// | ``chan gossip /on`` - turn listening on for the 'gossip' channel +// | ``chan gossip /off`` - stop listening to 'gossip' +// | ``chan gossip /list`` - find out who is listening to 'gossip' +// | ``chan gossip /who`` - same as /list +// | ``chan gossip /last`` - show the last 20 messages on the channel +// | ``chan gossip `` - send to all listeners +// | ``chan gossip ;`` - perform over the channel (e.g. chan gossip ;grin) +// | ``chan gossip :`` - send to all listeners (e.g. chan gossip :wants a big sword!) +// | ``chan mine /new`` - create the "mine" channel // // Of course, the 'gossip' may be replaced with any channel name you // might want to use. @@ -35,22 +35,24 @@ // // Two player channels are standard: gossip and newbie // -// Some examples:: +// Some examples: // -// > chan -// You are listening to: gossip, newbie, mychannel -// > chan gossip /off -// You are no longer listening to 'gossip'. -// > mychannel /list -// Users listening to 'mychannel': Johndoe, Smurfhead, Tarzan -// > mychannel hello! -// [mychannel] Smurfhead: hello! -// > mychannel :turns a bright shade of blue -// [mychannel] Smurfhead turns a bright shade of blue. -// > mychannel ;laugh tarzan -// [mychannel] You laugh at Tarzan. -// > -// > [mychannel] Tarzan bops you on the nose. +// | > ``chan`` +// | You are listening to: gossip, newbie, mychannel +// | > ``chan gossip /off`` +// | You are no longer listening to 'gossip'. +// | > ``mychannel /list`` +// | Users listening to 'mychannel': Johndoe, Smurfhead, Tarzan +// | > ``mychannel hello!`` +// | [mychannel] Smurfhead: hello! +// | > ``mychannel :turns a bright shade of blue`` +// | [mychannel] Smurfhead turns a bright shade of blue. +// | > ``mychannel :laugh tarzan`` +// | [mychannel] You laugh at Tarzan. +// | > +// | > [mychannel] Tarzan bops you on the nose. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/chanlist.c b/lib/cmds/player/chanlist.c index 31286ae8..6a3ecad1 100644 --- a/lib/cmds/player/chanlist.c +++ b/lib/cmds/player/chanlist.c @@ -12,10 +12,13 @@ */ //: PLAYERCOMMAND -//$$see: channels, gossip, newbie, chan -// USAGE: chanlist +//$$see: gossip, newbie, chan +// USAGE +// ``chanlist`` // // Shows currently existing channels available to you. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/colours.c b/lib/cmds/player/colours.c index e2f15518..fe722019 100644 --- a/lib/cmds/player/colours.c +++ b/lib/cmds/player/colours.c @@ -2,23 +2,31 @@ //: PLAYERCOMMAND //$$see: mode, palette -// USAGE colours -// colours -// colours remove +// USAGE +// | ``colours`` +// | ``colours `` +// | ``colours remove `` // // This command handles customising the colours displayed in the mud - // ie changing them to suit your tastes // Some of types items displayed in the mud are allocated a "colour name", // which is then given a default "colour value" // eg "say" could be given a value "blue", in which case all "says" would -// appear in blue. If you wish to have them appear in red, you would use:: -// colours say red +// appear in blue. If you wish to have them appear in red, you would use: +// +// | ``colours say red`` +// | ``colours say <021>`` +// // You can also use "bold" as a colour, with comma if necessary - eg:: -// colour say bold,red +// ``colour say bold,red`` +// // You can clear your personalised setting, and revert to the mud default, with:: -// colours remove say -// Instead of colour names, check the 'palette' command and use numbers from there, +// ``colours remove say`` +// +// Instead of colour names, check the ``palette`` command and use numbers from there, // from 001 to 255. +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; diff --git a/lib/cmds/player/converse.c b/lib/cmds/player/converse.c index af2b9cd2..60e9111d 100644 --- a/lib/cmds/player/converse.c +++ b/lib/cmds/player/converse.c @@ -1,14 +1,17 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: converse +// USAGE +// ``converse`` // // Puts you into conversation mode, which means that anything you type -// will act as if you are placing the "say" command before it. Once in +// will act as if you are placing the ``say`` command before it. Once in // conversation mode, you exit the same way you do from the mail or // bulletin board editor, that is, by typing a '.' alone on a line. You // may also issue commands while in conversation mode by putting a ! // before whatever you type. +// +// .. TAGS: RST inherit CMD; inherit M_INPUT; diff --git a/lib/cmds/player/describe.c b/lib/cmds/player/describe.c index c4381c05..226c6550 100644 --- a/lib/cmds/player/describe.c +++ b/lib/cmds/player/describe.c @@ -1,10 +1,15 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: describe -// describe - sets your description to new description -// Takes you into a simple editor to enter your description -// This command lets you enter the description people see when they look at you. +// USAGE +// +// | ``describe`` +// | ``describe `` - sets your description to new description +// +// Takes you into a simple editor to enter your description. This command lets you enter the description people see when +// they look at you. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/emoji.c b/lib/cmds/player/emoji.c index 2a10b4c6..5502a03e 100644 --- a/lib/cmds/player/emoji.c +++ b/lib/cmds/player/emoji.c @@ -1,18 +1,23 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -//$$ see: color, colours, mode, frames -// USAGE emoji -// emoji on -// emoji off -// emoji list +//$$ see: color, colours, mode, frames, simplify +// USAGE // -// Typing "emoji" will show if your character is set to ascii like graphics +// | ``emoji`` +// | ``emoji on`` +// | ``emoji off`` +// | ``emoji list`` +// +// Typing ``emoji`` will show if your character is set to ascii like graphics // from the mud (used for small charts etc). These can be hard to use on // screen readers, so if you are using a screen reader it can be recommended -// to be 'emoji off'. +// to be ``emoji off`` - ``simplify on`` will set alot of these settings +// correct for your screen reader. +// +// Use ``emoji list`` for a list of supported emojis. // -// Use 'emoji list' for a list of supported emojis. +// .. TAGS: RST inherit CMD; inherit M_WIDGETS; @@ -56,7 +61,7 @@ void main(string arg) printf("%%^BOLD%%^%-30s %10|s %-10s%%^RESET%%^", "Emoji", "Unicode", "Replacement\n"); foreach (string key, string * arr in emojis) { - printf("%-30s %10|s %-10s\n", key, arr[0], implode(explode(arr[1],""),"")); + printf("%-30s %10|s %-10s\n", key, arr[0], implode(explode(arr[1], ""), "")); } printf("\n"); } diff --git a/lib/cmds/player/emote.c b/lib/cmds/player/emote.c index eec5a913..fc776d2c 100644 --- a/lib/cmds/player/emote.c +++ b/lib/cmds/player/emote.c @@ -1,10 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: emote message +// USAGE +// ``emote message`` // // Places any message you specify directly after your name. For example, -//"emote smiles." would have others see "Rust smiles.". +//``emote smiles.`` would have others see "Rust smiles.". +// +// .. TAGS: RST inherit CMD; inherit M_GRAMMAR; diff --git a/lib/cmds/player/emoteapropos.c b/lib/cmds/player/emoteapropos.c index d1086f4e..635ec1e9 100644 --- a/lib/cmds/player/emoteapropos.c +++ b/lib/cmds/player/emoteapropos.c @@ -1,11 +1,14 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: emoteapropos string +// USAGE +// ``emoteapropos `` // // Finds all emotes/souls who's action contains the specified string. // For example, "emoteapropos smile" would match every emote/soul that includes //"smile" in the messages it sends. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/equip.c b/lib/cmds/player/equip.c index 8f8470b5..6c4f517b 100644 --- a/lib/cmds/player/equip.c +++ b/lib/cmds/player/equip.c @@ -5,8 +5,9 @@ */ //: PLAYERCOMMAND -//$$ see: skills, hp, stats, score, pouch -// USAGE equip +//$$ see: skills, hp, stats, score, materials +// USAGE +// ``equip`` // // Shows your wielded and worn weapons and armours, their durability // and some primary stats. The command also shows your spell failure chance @@ -14,21 +15,22 @@ // having a greater impact. // // Reparing and salvaging -//--- -// You can repair your gear using the 'repair' verb using components from -//'salvage' if you are next to a crafting bench. The components can be -// seen in your 'pouch'. +// ---------------------- // -// You can easily salvage by using 'salvage all' which will salvage all +// You can repair your gear using the ``repair`` verb using components from +// ``salvage`` if you are next to a crafting bench. The components can be +// seen by using the ``materials`` command. +// +// You can easily salvage by using ``salvage all`` which will salvage all // your damaged equipment. You can salvage other things by salvaging -// them one by one, i.e. 'salvage mace' to salvage your non-damaged mace. +// them one by one, i.e. ``salvage mace`` to salvage your non-damaged mace. // -// Use 'repair all' to repair all your equipment. The command will give you +// Use ``repair all`` to repair all your equipment. The command will give you // an estimate of the cost in materials and coins (if needed) before you // decide to repair or not. Be careful not to repair things you do not want // to keep. It does not pay to repair things you want to sell. - -#include +// +// .. TAGS: RST inherit CMD; inherit M_FRAME; @@ -49,7 +51,7 @@ int item_length(string *shorts) if (smallest < width) width = smallest; - return CLAMP(width - l, 0, 100); + return clamp(width - l, 0, 100); } string ellipsis_name(string name, string *names) diff --git a/lib/cmds/player/exits.c b/lib/cmds/player/exits.c index 0d752122..bd9e7762 100644 --- a/lib/cmds/player/exits.c +++ b/lib/cmds/player/exits.c @@ -1,9 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// Usage: exits +// USAGE +// ``exits`` +// // Used with no arguments, this command shows you the possible exits for // the particular room you are in. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/feedback.c b/lib/cmds/player/feedback.c index 6c4174ee..02e2db00 100644 --- a/lib/cmds/player/feedback.c +++ b/lib/cmds/player/feedback.c @@ -9,9 +9,12 @@ //: PLAYERCOMMAND //$$ see: idea, typo, bug, question -// USAGE: feedback +// USAGE +// ``feedback`` // // Allows you to give feedback on general or specific topics of relevance to the Mud. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/feelings.c b/lib/cmds/player/feelings.c index 84caf9c4..5b5be973 100644 --- a/lib/cmds/player/feelings.c +++ b/lib/cmds/player/feelings.c @@ -3,18 +3,20 @@ //: PLAYERCOMMAND //$$ see: adverbs, random, semote // -// USAGE: feelings +// USAGE +// ``feelings `` // // With a pattern, feelings will show you all souls matching the given pattern. // Without an argument, feelings will list all available soul commands. // // Examples: // -// feelings -- show all souls -// feelings s -- show all souls beginning with an s -// feelings s*e -- show all souls beginning with an s, -// having anything in the middle, and -// ending with an e. +// | ``feelings`` -- show all souls +// | ``feelings s`` -- show all souls beginning with an s +// | ``feelings s*e`` -- show all souls beginning with an s, having anything in the middle, and ending with an +//e. +// +// .. TAGS: RST inherit CMD; inherit M_GLOB; diff --git a/lib/cmds/player/finger.c b/lib/cmds/player/finger.c index 20267763..39f01eb9 100644 --- a/lib/cmds/player/finger.c +++ b/lib/cmds/player/finger.c @@ -3,10 +3,12 @@ // Rust //: PLAYERCOMMAND -// USAGE: finger or -// finger player or -// finger @mudname or -// finger player@mudname +// USAGE +// +// | ``finger`` +// | ``finger player`` +// | ``finger @mudname`` +// | ``finger player@mudname`` // // Gives you information about a player named. If you do not mention a // particular mud, it searches for that player info here. If you do not @@ -17,6 +19,8 @@ // The mud name doesn't have to be the complete name, and can be a // partial match, as long as you provide enough information so that the // game can figure out which mud you're talking about. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/frames.c b/lib/cmds/player/frames.c index 0af7c973..b6dcd7e3 100644 --- a/lib/cmds/player/frames.c +++ b/lib/cmds/player/frames.c @@ -2,12 +2,19 @@ //: PLAYERCOMMAND //$$ see: color, colours, ansi, emoji -// USAGE frames -// frames list -// frames +// USAGE // -// Use 'frames list' to show which frame themes are supported. -// Use 'frames single' to set your frame theme to 'single'. +// | ``frames`` +// | ``frames styles`` +// | ``frames style `` +// | ``frames themes`` +// | ``frames theme `` +// +// Use ``frames styles`` to show which frame styles are supported. +// Use ``frames style single`` to set your frame style to 'single'. +// Use ``frames theme dusk`` to set your frame theme to 'dusk'. +// +// .. TAGS: RST inherit CMD; inherit M_WIDGETS; @@ -22,10 +29,10 @@ string frames_help() private void main(string arg) { - string *themes = query_frame_themes(); + string *styles = query_frame_styles(); string *colours = query_frame_colour_themes(); string col; - string usertheme = this_user()->frames_theme(); + string usertheme = this_user()->frames_style(); string usercoltheme = this_user()->frames_colour(); frame_init_user(); @@ -33,20 +40,19 @@ void main(string arg) { string simplestate; set_frame_title("Frame settings"); - set_frame_header("Frame style is: " + (usertheme || "ascii") + ".\n" + - "Frame theme is: " + (usercoltheme || "none") + ".\n" + - (i_simplify() ? "Frames are off, since you have simplify on.\n" : "")); + set_frame_header("Frame style is: " + (usertheme || "ascii") + ".\n" + "Frame theme is: " + + (usercoltheme || "none") + ".\n" + + (i_simplify() ? "Frames are off, since you have simplify on.\n" : "")); set_frame_content(frames_help()); - set_frame_footer("These settings will change most UI on " + mud_name() + - " to this style."); + set_frame_footer("These settings will change most UI on " + mud_name() + " to this style."); out(frame_render()); return; } else if (sscanf(arg, "style %s", col) == 1) { - if (member_array(col, themes) != -1) + if (member_array(col, styles) != -1) { this_user()->query_shell_ob()->set_variable("frames", col); out("Frame style set to '" + col + "'.\n"); @@ -88,9 +94,9 @@ void main(string arg) printf("The following frame styles are supported:\n\n"); printf("\t%-15.15s %s", "Name", "Example"); - foreach (string t in themes) + foreach (string t in styles) { - printf("\t%-15.15s %s\n", t, frame_demo_string(t,20)); + printf("\t%-15.15s %s\n", t, frame_demo_string(t, 20)); } printf("\n\n"); } diff --git a/lib/cmds/player/groups.c b/lib/cmds/player/groups.c index a5991259..e3571af9 100644 --- a/lib/cmds/player/groups.c +++ b/lib/cmds/player/groups.c @@ -3,60 +3,66 @@ // More Crypic #@$t from Belboz // -//: PLAYERCOMMAND -// USAGE: groups [-a | -d] [groupname] [name 1] [name 2] ... +// : PLAYERCOMMAND +// USAGE +// ``groups [-a | -d] [groupname] [name 1] [name 2] ...`` // // The groups command allows you to add personal groups that may // be used to alias a group of people, generally for sending mail. // // No flag: Shows the mud's standard groups and your private groups. // -// -a : Adds a group to your groups info, along with a list of -// at least 1 name, all separated by spaces. -// -d : Deletes a group, or if you give a list of names, deletes -// that list from the specified personal group. +// | -a : Adds a group to your groups info, along with a list of +// | at least 1 name, all separated by spaces. +// | -d : Deletes a group, or if you give a list of names, deletes +// | that list from the specified personal group. +// +// .. TAGS: RST inherit CMD; +inherit M_FRAME; #define SYNTAX "Usage: groups [-a | -d] [groupname] [name 1] [name 2] ... \n" private -string banner = "==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==\n"; - -private -nomask void print_groups(mapping groups); +nomask string *print_groups(mapping groups); private void main(string arg) { mapping groups; string this_group; + string output = " \n"; + string header; mixed valid; mixed not ; string *arglist; + frame_init_user(); + set_frame_title("Mail Groups"); + set_frame_left_header(); + header = title(mud_name()) + "\n"; groups = this_body()->query_perm("groups"); if (!groups) groups = ([]); - if (!arg || arg == "") { - out(banner); - outf("Groups of %s, and their members:\n\n", mud_name()); - print_groups(GROUP_D->get_group_data()); - out(banner); + string *sarg = print_groups(GROUP_D->get_group_data()); + header += sarg[0]; + output += sarg[1]; + header += "\n" + title(this_body()->query_name()) + "\n"; if (!mapp(groups) || !sizeof(groups)) - { - out("You have no groups defined.\n"); - return; - } - - outf("%s, your personal groups are:\n\n", this_body()->query_name()); - - print_groups(groups); - - out(banner); + output += "\nYou have no groups defined.\n"; + else + output += " \n\n"; + + sarg = print_groups(groups); + header += sarg[0]; + output += sarg[1]; + set_frame_header(header); + set_frame_content(output); + out(frame_render()); return; } @@ -69,7 +75,6 @@ void main(string arg) } this_group = arglist[1]; - if (arglist[0] == "-a") { if (sizeof(arglist) < 3) @@ -94,7 +99,7 @@ void main(string arg) arglist = clean_array(arglist); this_body()->set_perm("groups", - groups + ([this_group:arglist ? (mixed)arglist : (mixed)(([]) + groups[this_group])])); + groups + ([this_group:arglist ? (mixed)arglist : (mixed)(([]) + groups[this_group]), ])); return; } @@ -110,8 +115,12 @@ void main(string arg) return; } arglist = arglist[2..]; - valid = filter_array(arglist, ( : member_array($(groups[this_group]), $1) != -1 :)); - + if (!groups[this_group]) + { + outf("Group %s does not exist.\n", this_group); + return; + } + valid = filter_array(arglist, ( : member_array($1, $(groups[this_group])) != -1 :)); not = clean_array(arglist - valid); valid = clean_array(valid); @@ -120,26 +129,26 @@ void main(string arg) if (sizeof(valid)) { - out(sprintf("Removed: %s.\n", implode(valid, ", "))); + out(sprintf("Removed: %s from %s.\n", implode(valid, ", "), this_group)); groups[this_group] -= valid; if (!sizeof(groups[this_group])) map_delete(groups, this_group); this_body()->set_perm("groups", groups); + return; } - return; + out(frame_render()); } private -nomask void print_groups(mapping groups) +nomask string *print_groups(mapping groups) { - map_array(sort_array(keys(groups), 1), - ( - : out(sprintf("%s: %s\n", $1, - implode(map_array(sort_array($2[$1], 1), ( - : capitalize:)), - ", "))) - :), - groups); - - out("\n"); -} \ No newline at end of file + string header = ""; + string content = ""; + foreach (string k, string * members in groups) + { + header += sprintf("%s\n", k); + content += sprintf("%s\n", implode(map_array(sort_array(members, 1), ( : capitalize:)), ", ")); + } + + return ({header, content}); +} diff --git a/lib/cmds/player/help.c b/lib/cmds/player/help.c index 16b7504e..c3114710 100644 --- a/lib/cmds/player/help.c +++ b/lib/cmds/player/help.c @@ -1,18 +1,26 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: help or help +// USAGE +// +// | ``help`` +// | ``help `` // // With no arguments, you are sent into the general help menu. You may instead, pass a topic as an argument. // -// Within the help system, when you are at the %^BOLD%^Help topic? [?]:%^RESET%^ prompt, you can enter another topic for -// //help on that. Do not enter 'help' as you do from the commandline. Just the topic name. +// Within the help system, when you are at the +// ``Help topic? [?]`` +// +// prompt, you can enter another topic for help on that. Do not enter 'help' as you do from the command line. Just the +// topic name. // // If there are more than one topic with the same name that you select, you will be given the option of selecting which // //match you wish to read. // // Help files are paged through the MUD's standard 'more' pager. For help on that please refer to the help page for -// more, //or type ? or h at the more prompt. +// more, or type ? or h at the more prompt. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/hint.c b/lib/cmds/player/hint.c index b0e26ee6..913647fe 100644 --- a/lib/cmds/player/hint.c +++ b/lib/cmds/player/hint.c @@ -1,12 +1,16 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE hint +//$$see: hints +// USAGE +// ``hint`` // // This brings up a menu-driven selection of hints for the quests. // If you persevere searching through them, you might even find a useful one. // But it's probably quicker and easier just to get on with the quest, // unless you are really, really stuck .... +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/hints.c b/lib/cmds/player/hints.c index 55274625..0f181f2c 100644 --- a/lib/cmds/player/hints.c +++ b/lib/cmds/player/hints.c @@ -1,12 +1,20 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -//$$ see: color, colours, ansi, simplify, emoji -// USAGE hints -// hints on -// hints off -// hints +//$$ see: color, colours, ansi, simplify, emoji, hint +// USAGE // +// | ``hints`` +// | ``hints on`` +// | ``hints off`` +// | ``hints `` +// +// ``hints on`` turns on hints for the MUD while you move around. It's highly recommended +// for new or inexperienced players. Some hints may pop up from the rooms you enter, whereas +// others may be from items your have in your inventory - ``hints `` can be used to +// check if there are any hints for a specific items usage. +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; diff --git a/lib/cmds/player/hp.c b/lib/cmds/player/hp.c index 90e20c21..3bcaac0b 100644 --- a/lib/cmds/player/hp.c +++ b/lib/cmds/player/hp.c @@ -2,13 +2,16 @@ /* Tsath 2022 */ //: PLAYERCOMMAND -//$$ see: skills, stats, score, spells -// USAGE hp +//$$ see: skills, score, equip +// USAGE +// +// ``hp`` // // Prints your current HP on all your limbs with AC stats and types. +// +// .. TAGS: RST #include -#include #include inherit CMD; diff --git a/lib/cmds/player/idea.c b/lib/cmds/player/idea.c index 650fa1bc..2e8b29f0 100644 --- a/lib/cmds/player/idea.c +++ b/lib/cmds/player/idea.c @@ -1,7 +1,7 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ /* -** _idea.c +** idea.c ** ** Converted to new /std/reporter usage (Deathblade 4-Sep-94). ** Original by Rust (?) @@ -9,9 +9,12 @@ //: PLAYERCOMMAND //$$ see: bug, typo, feedback, question -// USAGE: idea +// USAGE +// ``idea`` // // Allows you to document an idea for the administration to see. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/inactive.c b/lib/cmds/player/inactive.c index 6f96a1e5..4578413e 100644 --- a/lib/cmds/player/inactive.c +++ b/lib/cmds/player/inactive.c @@ -1,14 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -// Jan 10, 94 by Rust -// No longer works -// Megaboz@ZorkMUD added help - //: PLAYERCOMMAND -// USAGE: inactive +// USAGE +// ``inactive`` // // Puts you into inactive mode. This lets people know that you are // idling. Hitting return takes you out of it when you are in it. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/inventory.c b/lib/cmds/player/inventory.c index 679630d4..4d57c584 100644 --- a/lib/cmds/player/inventory.c +++ b/lib/cmds/player/inventory.c @@ -6,10 +6,14 @@ // inventory commands. *boggle* //: PLAYERCOMMAND -// USAGE: i -// inventory +// USAGE +// +// | ``i`` +// | ``inventory`` // // Shows you what you have in your inventory. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/mail.c b/lib/cmds/player/mail.c index f9642888..50d2c886 100644 --- a/lib/cmds/player/mail.c +++ b/lib/cmds/player/mail.c @@ -11,13 +11,17 @@ */ //: PLAYERCOMMAND -// USAGE: mail -// mail -// mail () +// USAGE +// | ``mail`` +// | ``mail `` +// | ``mail ()`` // // Just type "mail" from anywhere in the mud, or type "mail foo" to send -// mail to someone named 'foo'. To send mail to a group, type "mail (foo)", where 'foo' is the name of the group you -// want //to send to. +// mail to someone named 'foo'. To send mail to a group, type "mail (foo)", +// where 'foo' is the name of the group you +// want to send to. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/materials.c b/lib/cmds/player/materials.c index ae28d51f..27e9cc5b 100644 --- a/lib/cmds/player/materials.c +++ b/lib/cmds/player/materials.c @@ -7,12 +7,14 @@ //: PLAYERCOMMAND //$$ see: skills, hp, stats,score -// USAGE materials -// materials all - show all materials on the MUD +// USAGE +// +// | ``materials`` +// | ``materials all`` - show all materials on the MUD // // Shows your materials and all the materials in it. - -#include +// +// .. TAGS: RST inherit CMD; inherit M_FRAME; diff --git a/lib/cmds/player/menu.c b/lib/cmds/player/menu.c index c2a0fdc7..18582215 100644 --- a/lib/cmds/player/menu.c +++ b/lib/cmds/player/menu.c @@ -1,11 +1,14 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: menu +// USAGE +// ``menu`` // -// Just type "menu" to get a menu of common commands. Some things like +// Just type ``menu`` to get a menu of common commands. Some things like // changing your title, real name information, and finger information, // can only be done through the menu. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/metric.c b/lib/cmds/player/metric.c index f3ad02f9..aae782bb 100644 --- a/lib/cmds/player/metric.c +++ b/lib/cmds/player/metric.c @@ -2,12 +2,16 @@ //: PLAYERCOMMAND //$$ see: colours, mode, simplify, emoji -// USAGE metric -// metric on -// metric off +// USAGE // -// Typing "metric" will show if you are seeing metric system or imperical. -// Typing "metric on" or "metric off" will turn on/off metric system. +// | ``metric`` +// | ``metric on`` +// | ``metric off`` +// +// Typing ``metric`` will show if you are seeing metric system or imperical. +// Typing ``metric on`` or ``metric off`` will turn on/off metric system - not in the real world. Nice try. +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; diff --git a/lib/cmds/player/mode.c b/lib/cmds/player/mode.c index f8733ae2..de801851 100644 --- a/lib/cmds/player/mode.c +++ b/lib/cmds/player/mode.c @@ -4,14 +4,18 @@ //: PLAYERCOMMAND //$$see: color, colours, simplify -// USAGE mode -// mode plain -// mode vt100 -// mode xterm -// mode ansi +// USAGE // -// Typing "mode" will show if your character is set to receive ansi codes -// from the mud(used to display colours). +// | ``mode`` +// | ``mode plain`` +// | ``mode vt100`` +// | ``mode xterm`` +// | ``mode ansi`` +// +// Typing ``mode`` will show if your character is set to receive ansi codes +// from the MUD (used to display colours). +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; diff --git a/lib/cmds/player/money.c b/lib/cmds/player/money.c index 1d302dab..503cd46b 100644 --- a/lib/cmds/player/money.c +++ b/lib/cmds/player/money.c @@ -1,35 +1,19 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -/* $Id: money.c,v 1.4 1998/02/11 02:08:47 monica Exp $ */ //: PLAYERCOMMAND -//$$ see: inventory -// USAGE money +//$$ see: inventory, score, equip +// USAGE +// ``money`` // -// Displays how much money you are carrying +// Displays how much money you are carrying. Short form of the ``score`` command. +// +// .. TAGS: RST inherit CMD; private void main() { - string *currencies = ({}); - mapping money = this_body()->query_money(); - - if (sizeof(money) == 0) - { - write("You dig around in your pockets and find only lint!\n"); - } - else - { - write("You have the following types of money:\n"); - foreach (string type in keys(money)) - { - if (MONEY_D->is_denomination(type)) - currencies |= ({MONEY_D->query_currency(type)}); - else - this_body()->subtract_money(type, money[type]); - } - foreach (string currency in currencies) - printf(" %-12s%s\n", capitalize(currency) + ":", MONEY_D->currency_to_string(money, currency)); - } + write("You have the following types of money:\n\t" + + implode(explode(MONEY_D->money_string(this_body()), "\n"), "\n\t")); } \ No newline at end of file diff --git a/lib/cmds/player/mudlist.c b/lib/cmds/player/mudlist.c index 4d0c4504..991e04df 100644 --- a/lib/cmds/player/mudlist.c +++ b/lib/cmds/player/mudlist.c @@ -1,19 +1,23 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: mudlist or mudlist +// USAGE +// +// | ``mudlist`` +// | ``mudlist `` // // This command gives a full list of all muds and their addresses that // this mud knows about. If you supply a pattern, the command only tells // you what muds match the pattern. // -// // Examples: // -// mudlist -- get all muds -// mudlist mud -- get all muds that contain "mud" somewhere -// in their name -// mudlist ^foo -- get all muds whose name starts with "foo" +// | ``mudlist`` - get all muds +// | ``mudlist mud`` - get all muds that contain "mud" somewhere +// | in their name +// | ``mudlist ^foo`` -- get all muds whose name starts with "foo" +// +// .. TAGS: RST inherit CMD; inherit M_GLOB; diff --git a/lib/cmds/player/news.broke b/lib/cmds/player/news.broke deleted file mode 100644 index 3ff960e8..00000000 --- a/lib/cmds/player/news.broke +++ /dev/null @@ -1,16 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -#include -inherit CMD; - -private void main(string arg) -{ - new(NEWSREADER)->begin_reading(arg); -} - -void player_menu_entry() -{ - bare_init(); - main(""); - done_outputing(); -} diff --git a/lib/cmds/player/news.c b/lib/cmds/player/news.c index 4e3ced33..895bb10b 100644 --- a/lib/cmds/player/news.c +++ b/lib/cmds/player/news.c @@ -1,10 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: news +// USAGE +// ``news`` // // news starts up the newsreader. Just type it, it has it's own internal // help available, if you type a ? from any prompt. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/nickname.c b/lib/cmds/player/nickname.c index 07138c09..043d2ab0 100644 --- a/lib/cmds/player/nickname.c +++ b/lib/cmds/player/nickname.c @@ -3,10 +3,13 @@ // Beek, End of July //: PLAYERCOMMAND -// USAGE: nickname +// USAGE +// ``nickname `` // // The nickname command is used to give yourself a nickname. // Other players can then use that nickname in referring to you. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/palette.c b/lib/cmds/player/palette.c index 4b0ef21e..37b09b51 100644 --- a/lib/cmds/player/palette.c +++ b/lib/cmds/player/palette.c @@ -1,9 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -//$$see: colours"," ansi -// USAGE palette +//$$see: colours, mode, frames +// USAGE +// ``palette`` +// // Show even more possible colours you can use. +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; @@ -53,3 +57,10 @@ nomask private void main(string str) { do_print(0); } + +void player_menu_entry(string str) +{ + bare_init(); + main(str); + done_outputing(); +} \ No newline at end of file diff --git a/lib/cmds/player/party.c b/lib/cmds/player/party.c index 10ddeb0c..8bfd2606 100644 --- a/lib/cmds/player/party.c +++ b/lib/cmds/player/party.c @@ -7,20 +7,24 @@ // creating a menu object. // March 1, 1997: Iizuka@Lima Bean created. // August 15, 1999: Iizuka@Lima Bean ripped out all of the modal code -// and moved it to TEAM_MENU. +// and moved it to PARTY_MENU. // October, 2020: Tsath changed all references to 'team' to 'party' since // this is now the common lanaguage used for this functionality // in other online games. //: PLAYERCOMMAND -// USAGE party +// USAGE +// ``party`` +// ``party accept`` - if you got an invite // -// Starts up the "party" menu system +// Starts up the "party" menu system. +// +// .. TAGS: RST inherit M_INPUT; inherit CMD; -void main() +void main(string arg) { - new (PARTY_MENU)->join_party(); + new (PARTY_MENU)->join_party(arg); } \ No newline at end of file diff --git a/lib/cmds/player/passwd.c b/lib/cmds/player/passwd.c index 8b6d83b7..0676715b 100644 --- a/lib/cmds/player/passwd.c +++ b/lib/cmds/player/passwd.c @@ -3,9 +3,12 @@ // Rust wrote this and was a bad boy and didn't attach a header - Beek //: PLAYERCOMMAND -// USAGE: passwd +// USAGE +// ``passwd`` // // Changes your password. Just type it, and follow the directions. +// +// .. TAGS: RST inherit CMD; inherit M_INPUT; @@ -60,11 +63,11 @@ private void main() { string name = lower_case(this_body()->query_name()); - if (strlen(name)>5 && name[0..4]=="guest") - { - write("Guests cannot change password."); - return; - } + if (strlen(name) > 5 && name[0..4] == "guest") + { + write("Guests cannot change password."); + return; + } modal_simple(( : confirm_current_password:), "Enter your current password: ", 1); } diff --git a/lib/cmds/player/plan.c b/lib/cmds/player/plan.c index cc917616..3bb8fd5d 100644 --- a/lib/cmds/player/plan.c +++ b/lib/cmds/player/plan.c @@ -2,10 +2,13 @@ //: PLAYERCOMMAND //$$ see: finger -// USAGE plan +// USAGE +// ``plan`` // // Takes you to an editor where you can enter or change your plan, -// which everybody can see when they "finger" you. +// which everybody can see when they ``finger`` you. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/question.c b/lib/cmds/player/question.c index 9a230a3c..f055b35c 100644 --- a/lib/cmds/player/question.c +++ b/lib/cmds/player/question.c @@ -8,9 +8,12 @@ //: PLAYERCOMMAND //$$ see: bug, typo, feedback, idea -// USAGE: question +// USAGE +// ``question`` // // Allows you to send a question to the relevant place. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/quests.c b/lib/cmds/player/quests.c index 1bf8824d..f68a3317 100644 --- a/lib/cmds/player/quests.c +++ b/lib/cmds/player/quests.c @@ -9,9 +9,12 @@ */ //: PLAYERCOMMAND -// USAGE quests +// USAGE +// ``quests`` // // Shows you all the quests for the area you are in. +// +// .. TAGS: RST inherit CMD; inherit M_FRAME; @@ -70,7 +73,6 @@ nomask private void main() capitalize(domain), sizeof(quests) == 1 ? "is only" : "are", sizeof(quests), sizeof(quests) == 1 ? "" : "s", )); - foreach (string quest in keys(quests)) { c += sprintf(" %31-s %6d %s\n", capitalize(quests[quest]["name"]), sizeof(quests[quest]["parts"]), diff --git a/lib/cmds/player/quit.c b/lib/cmds/player/quit.c index 823ce102..0bbe4756 100644 --- a/lib/cmds/player/quit.c +++ b/lib/cmds/player/quit.c @@ -3,7 +3,12 @@ // Adapted to new user menu system, Tsath 2022 //: PLAYERCOMMAND -// Quit to the user menu. +// USAGE +// ``quit`` +// +// Quit the game. See you later, perhaps? +// +// .. TAGS: RST #include @@ -12,7 +17,7 @@ inherit CMD; private void main() { - string name=this_body()->query_name(); + string name = this_body()->query_name(); this_body()->quit(); if (name && strlen(name) > 5 && name[0..4] == "Guest") @@ -22,6 +27,7 @@ void main() return; } #ifdef USE_USER_MENU + this_user()->exit_all_channels(); new (USER_MENU)->start_menu(); #else this_user()->save_me(); diff --git a/lib/cmds/player/random.c b/lib/cmds/player/random.c index d34176a1..c9e678db 100644 --- a/lib/cmds/player/random.c +++ b/lib/cmds/player/random.c @@ -9,11 +9,13 @@ //: PLAYERCOMMAND //$$ see: feelings, adverbs, semote // -// USAGE:: -// random -// random +// USAGE +// | ``random`` +// | ``random `` // // This command will randomly select a feeling to execute. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/random2.c b/lib/cmds/player/random2.c index 8093570b..cf9642a4 100644 --- a/lib/cmds/player/random2.c +++ b/lib/cmds/player/random2.c @@ -3,6 +3,17 @@ #include inherit CMD; +//: PLAYERCOMMAND +//$$ see: feelings, adverbs, semote +// +// USAGE +// | ``random2`` +// | ``random2 `` +// +// This command will randomly select a feeling to execute. This one might be slightly broke. +// +// .. TAGS: RST + mapping data = ([]); mapping reverse = ([]); diff --git a/lib/cmds/player/reply.c b/lib/cmds/player/reply.c index 8dcdb66c..c8ec5d6f 100644 --- a/lib/cmds/player/reply.c +++ b/lib/cmds/player/reply.c @@ -4,10 +4,13 @@ // Megaboz@ZorkMUD attached header and help //: PLAYERCOMMAND -// USAGE: reply +// USAGE +// ``reply `` // // When you are given a message via tells, it is much easier to -// type 'reply ' than 'tell '. +// type ``reply `` than ``tell ``. +// +// .. TAGS: RST #include inherit CMD; diff --git a/lib/cmds/player/rows.c b/lib/cmds/player/rows.c index af04a1c7..ee489d6a 100644 --- a/lib/cmds/player/rows.c +++ b/lib/cmds/player/rows.c @@ -1,8 +1,12 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// Usage : rows (to set the number of rows before pause in display) -// rows (to see current setting) +// USAGE +// +// | ``rows `` (to set the number of rows before pause in display) +// | ``rows`` (to see current setting) +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/save.c b/lib/cmds/player/save.c index e4ce711a..751e6452 100644 --- a/lib/cmds/player/save.c +++ b/lib/cmds/player/save.c @@ -7,20 +7,23 @@ */ //: PLAYERCOMMAND -// USAGE: save +// USAGE +// ``save`` // // This command saves the present status of your character. // You are not saved automatically until you log off // If something happens to you, like finishing a quest, and you want to // make sure it saves, this command will guarantee it. +// +// .. TAGS: RST inherit CMD; private void main(string arg) { - string name=this_body()->query_name(); - if (name && strlen(name)>5 && name[0..4]=="Guest") + string name = this_body()->query_name(); + if (name && strlen(name) > 5 && name[0..4] == "Guest") { out("Not saving guest, sorry."); return; diff --git a/lib/cmds/player/say.c b/lib/cmds/player/say.old similarity index 95% rename from lib/cmds/player/say.c rename to lib/cmds/player/say.old index 3653278c..a77be251 100644 --- a/lib/cmds/player/say.c +++ b/lib/cmds/player/say.old @@ -2,12 +2,16 @@ //: PLAYERCOMMAND // -// Syntax: -// +// USAGE +// +// | ``say `` +// | ``say /last`` // // This command is used to talk with others in the same room as you. // It is done in a common language that everybody can understand. // The /last and /history syntaxes will display your say history. +// +// .. TAGS: RST inherit CMD; inherit M_GRAMMAR; diff --git a/lib/cmds/player/score.c b/lib/cmds/player/score.c index d8c70a9e..e52156f9 100644 --- a/lib/cmds/player/score.c +++ b/lib/cmds/player/score.c @@ -8,11 +8,16 @@ //: PLAYERCOMMAND //$$ see: stats -// USAGE score +// USAGE +// +// | ``score`` +// | ``score -t theme`` // // Shows you various details about yourself. +// Themes can be seem using the frames command, i.e. ``frames themes``. +// +// .. TAGS: RST -#include #include inherit CMD; @@ -21,89 +26,28 @@ inherit M_FRAME; #define FC "%-10.10s" -// Always returns a strlen 6. -string pretty_bonus(int b) -{ - string out = " "; - if (b > 0) - out = "(<002>+" + b + ")"; - else if (b < 0) - out = "(<001>" + b + ")"; - - if (colour_strlen(out) < 6) - out += repeat_string(" ", 6 - colour_strlen(out)); - - return out; -} - private string stats_string(object body, int width) { - string content; - content = sprintf("BASE SCORES: Str %-4d%s Agi %-4d%s Int %-4d%s Wil %-4d%s\n" + - "DERIVED : Con %-4d%s Wis %-4d%s Cha %-4d%s Mana %-4d%s\n", - body->query_str(), (pretty_bonus(body->query_str() - body->query_str_pure())), body->query_agi(), - (pretty_bonus(body->query_agi() - body->query_agi_pure())), body->query_int(), - (pretty_bonus(body->query_int() - body->query_int_pure())), body->query_wil(), - (pretty_bonus(body->query_wil() - body->query_wil_pure())), body->query_con(), - (pretty_bonus(body->query_con() - body->query_con_pure())), body->query_wis(), - (pretty_bonus(body->query_wis() - body->query_wis_pure())), body->query_cha(), - (pretty_bonus(body->query_cha() - body->query_cha_pure())), body->query_man(), - (pretty_bonus(body->query_man() - body->query_man_pure()))) + - "\n"; - + string content = ""; + content = body->show_stats(); content += "Spare stat points: " + body->spare_points() + "\n\n"; - content += sprintf("XP Buff: %s\n\n", - (body->query_guild_xp_buff() ? "Guild buff " + body->query_guild_xp_buff() + "%" : "None")); + content += sprintf("XP Buff: %-10.10s Party: %s\n\n", + (body->query_guild_xp_buff() ? body->query_guild_xp_buff() + "%" : "None"), + (PARTY_D->locate_user(body->short()) || "None")); return content; } -private -string money_string(object body, int width) -{ - string money_info = ""; - string *curr; - int i; - curr = body->query_currencies(); - if (!sizeof(curr)) - { - money_info += "You are carrying no money.\n"; - } - else - { - for (i = 0; i < sizeof(curr); i++) - { - mapping money = MONEY_D->calculate_denominations(body->query_amt_money(curr[i]), curr[i]); - string *denom_order = MONEY_D->query_denominations(curr[i]); - string *money_str = ({}); - int j = 0; - while (j < sizeof(denom_order)) - { - string denom = denom_order[j]; - int count = money[denom]; - if (count) - money_str += ({count + " " + denom + (count == 1 ? "" : "s")}); - j++; - } - if (sizeof(curr) > 1) - money_info += sprintf("%s: %s", accent(capitalize(curr[i])), format_list(money_str) + "\n"); - else - money_info += sprintf("%s", format_list(money_str) + "\n"); - } - } - return money_info; -} - private string capacity_string(object body, int width) { - string content; - int capa = body->query_capacity(); - int enc_capa = body->query_encumbered_capacity(); - int enc_heavy_capa = body->query_heavy_capacity(); - int no_move = body->query_no_move_capacity(); - int max = body->query_max_capacity(); + string content = ""; + float capa = body->query_capacity(); + float enc_capa = body->query_encumbered_capacity(); + float enc_heavy_capa = body->query_heavy_capacity(); + float no_move = body->query_no_move_capacity(); + float max = body->query_max_capacity(); string capa_string; mapping colours = ([0.0 + enc_capa:"113", 0.0 + ((enc_heavy_capa * 0.8)):"119", 0.0 + ((enc_heavy_capa * 0.9)):"155", 0.0 + @@ -121,14 +65,14 @@ string capacity_string(object body, int width) //"058","064","070","076","076","082","190","226","220","214","208","202","196", content = slider_colours_sum(0.0 + capa, colours, width - 2) + "\n"; content += "Carrying " + weight_to_string(capa, get_user_variable("metric") != 1) + " / " + - weight_to_string(enc_capa, get_user_variable("metric") != 1) + " - " + capa_string + "."; + weight_to_string(max, get_user_variable("metric") != 1) + " - " + capa_string + "."; return content; } private string karma_string(object body, int width) { - string content; + string content = ""; int karma = body->query_karma(); string status = ""; int marker = 65 * ((karma + 1000) / 2000.0); @@ -181,7 +125,7 @@ string karma_string(object body, int width) private string score_cmd(object body, int width) { - string content; + string content = ""; string name; // mapping accounts; int xp = 1; @@ -196,36 +140,15 @@ string score_cmd(object body, int width) sprintf("%s (%s) - Level %d\n", name, wizardp(body->query_link()) ? "Wizard" : "Mortal", body->query_level()); content += green_bar(xp - body->query_xp_for_level(body->query_level()), - body->query_next_xp() - body->query_xp_for_level(body->query_level()), width - 2) + + body->query_next_xp() - body->query_xp_for_level(body->query_level()), width - 3) + "\n"; if (body->query_next_xp() - body->query_experience() > 0) content += sprintf("%d XP - Level %d in %d more points.\n", body->query_experience(), (body->query_level() + 1), (body->query_next_xp() - body->query_experience())); else content += sprintf("%d XP - You could be level %d.\n", body->query_experience(), body->query_could_be_level()); - /* - money_info = ""; - accounts = ACCOUNT_D->query_accounts(body); - if (!sizeof(accounts)) - { - money_info += ""; - } - else - { - i = 0; - foreach (string bank, float val in accounts) - { - money_info += sprintf("%d (in %s Bank)\n", - to_int(val), - capitalize(bank)); - i++; - } - } - if (strlen(money_info)) - content += money_info; -*/ content += "\n"; - content += money_string(body, width) + "\n"; + content += MONEY_D->money_string(body) + "\n"; content += stats_string(body, width) + #ifdef USE_KARMA karma_string(body, width) + @@ -235,39 +158,69 @@ string score_cmd(object body, int width) } private -void main(string arg) +void main(mixed *args) { object body; string content; + string arg; int num_cur; int width = default_user_width() - 11; // Size of left header and space between. body = this_body(); - // Frame initializations frame_init_user(); set_frame_left_header(); // This frame will use left header + if (args && arrayp(args)) + args -= ({0}); - if (strlen(arg) > 0 && wizardp(this_user())) + if (sizeof(args) == 2 && wizardp(this_user())) + { + if (valid_theme(args[0])) + set_theme(args[0]); + body = present(args[1], environment(this_body())); + if (body && body->is_living()) + set_frame_title("Score for " + body->short()); // Title of frame for other people + else + { + out("Score: Cannot find '" + args[1] + "'.\n"); // Sorry ... + return; + } + } + else if (sizeof(args) == 1 && wizardp(this_user())) { - body = find_body(arg); - if (!body) + if (valid_theme(args[0])) + set_theme(args[0]); + else { - body = present(arg, environment(this_body())); - if (!body || !body->is_living()) + body = present(args[0], environment(this_body())); + if (body && body->is_living()) + set_frame_title("Score for " + body->short()); // Title of frame for other people + else { - out("Score: Cannot find '" + arg + "'.\n"); // Sorry ... + out("Score: Cannot find '" + args[0] + "'.\n"); // Sorry ... return; } } - set_frame_title("Score for " + body->short()); // Title of frame for other people } else set_frame_title("Score"); // Title of frame + if (!body->is_adversary()) + { + out("Not an adversary, no score available."); + return; + } + + if (!wizardp(this_body()) && sizeof(args) == 1 && valid_theme(args[0])) + set_theme(args[0]); + content = score_cmd(body, width); - num_cur = sizeof(body->query_currencies()); - set_frame_header(" \nExp\n\n\nMoney" + repeat_string("\n", num_cur || 1) + "\nStats\n\n\n\n\nOther\n\n" + + num_cur = sizeof(keys(body->query_money() || ([]))); + set_frame_header(" \nExp\n\n\nMoney" + repeat_string("\n", num_cur || 1) + + /* This line dynamically figures out height of stats section */ + "\nStats" + repeat_string("\n", sizeof(explode(this_body()->show_stats(), "\n"))) + + /* ... */ + "\n\nOther\n\n" + #ifdef USE_KARMA "Karma\n\n" + #endif diff --git a/lib/cmds/player/semote.c b/lib/cmds/player/semote.c index 35a39daa..4ebd331d 100644 --- a/lib/cmds/player/semote.c +++ b/lib/cmds/player/semote.c @@ -1,10 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE semote +// USAGE +// ``semote `` // // Shows you how a "soul" or "feeling" will look, both to you and to target // and onlookers, if you use it. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/shout.c b/lib/cmds/player/shout.c index 26894ee1..c4363e18 100644 --- a/lib/cmds/player/shout.c +++ b/lib/cmds/player/shout.c @@ -7,11 +7,14 @@ // the header. :-) Go Mars! //: PLAYERCOMMAND -// USAGE: shout +// USAGE +// ``shout `` // // Allows you to 'shout' a message to the entire mud. // -//[ Warning: this is here during the development of the mud. Do not abuse it. ] +//*Warning: this is here during the development of the mud. Do not abuse it.* +// +// .. TAGS: RST inherit CMD; inherit M_GRAMMAR; diff --git a/lib/cmds/player/simplify.c b/lib/cmds/player/simplify.c index 6c61ab33..37806315 100644 --- a/lib/cmds/player/simplify.c +++ b/lib/cmds/player/simplify.c @@ -3,14 +3,18 @@ //: PLAYERCOMMAND //$$ see: color, colours, mode -// USAGE simplify -// simplify on -// simplify off +// USAGE // -// Typing "simplify" will show if your character is set to ascii like graphics +// | ``simplify`` +// | ``simplify on`` +// | ``simplify off`` +// +// Typing ``simplify`` will show if your character is set to ascii like graphics // from the mud (used for small charts etc). These can be hard to use on // screen readers, so if you are using a screen reader it can be recommended -// to be 'simplify off'. +// to be ``simplify off``. +// +// .. TAGS: RST inherit CMD; inherit M_WIDGETS; diff --git a/lib/cmds/player/skills.c b/lib/cmds/player/skills.c index b295d1a3..c929eb7a 100644 --- a/lib/cmds/player/skills.c +++ b/lib/cmds/player/skills.c @@ -4,17 +4,20 @@ //: PLAYERCOMMAND //$$ see: hp, stats, score, spells -// USAGE: skills +// USAGE +// ``skills`` // // Prints out a list of your skills and skill ranks. +// // - Skill ranks are shown at the end of the skills (the higher the better from 0-20) // - Training points, if used, are shown at the end of the skill bars (in yellow) // // The more you use your skills, the better you get. So things get better all // the time! Talk to a trainer to learn more about skills. +// +// .. TAGS: RST #include -#include #include inherit CMD; @@ -32,7 +35,7 @@ void main(string arg) string nobarchar = uses_unicode() ? "▅" : "."; string bend = uses_unicode() ? "└" : " "; string contbend = uses_unicode() ? "├" : " "; - string content; + string content = ""; string *names; object target; int self_view; @@ -90,13 +93,14 @@ void main(string arg) : SKILL_D->monster_percent_for_next_rank(target, name); int green = skill_bar * percentage / 100; int red = skill_bar - green; + frame_init_user(); if (strlen(arg) && strsrch(name, arg) != 0) continue; if (level == 1) { - if (content) + if (content!="") { set_frame_content(content); out(frame_render()); @@ -104,7 +108,8 @@ void main(string arg) content = ""; set_frame_title(pretty_name); } - else if (percentage || target->is_body()) + // Screen width > 50 + else if ((percentage || target->is_body()) && width > 50) content += sprintf("%-25s " + (bonus > 0 ? "<010>+" : (bonus < 0 ? "<009>-" : " ")) + "%4s [<040>%s<238>%s] %-7s\n", repeat_string(" " + (level == next_level ? contbend : bend), level - 2) + pretty_name, @@ -113,6 +118,17 @@ void main(string arg) target->is_body() ? accent(skill.training_points) : "" #else "" +#endif + ); + // Screen width < 50 + else if ((percentage || target->is_body()) && width <= 50) + content += sprintf( + "%-25s " + (bonus > 0 ? "<010>+" : (bonus < 0 ? "<009>-" : " ")) + "%4s(%-3s)\n", + repeat_string(" " + (level == next_level ? contbend : bend), level - 2) + pretty_name, percentage + "%", +#ifdef SKILL_CONFIG_USES_TRAINING_PTS + target->is_body() ? accent(skill.training_points) : "" +#else + "" #endif ); i++; diff --git a/lib/cmds/player/snoopable.c b/lib/cmds/player/snoopable.c index 90f5860f..bcda2c21 100644 --- a/lib/cmds/player/snoopable.c +++ b/lib/cmds/player/snoopable.c @@ -1,14 +1,16 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -// _snoopable.c +// snoopable.c // this space intentionally left blank // Megaboz@ZorkMUD added header and help //: PLAYERCOMMAND -//$$ see: privacy -// USAGE: snoopable [on|off] +// USAGE +// ``snoopable [on|off]`` // -// This does exactly what the name imples -- it sets whether you are snoopable. +// This does exactly what the name imples - it sets whether you are snoopable. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/su.c b/lib/cmds/player/su.c index 4994de4f..943f7fe7 100644 --- a/lib/cmds/player/su.c +++ b/lib/cmds/player/su.c @@ -7,14 +7,18 @@ // LsD fixed race support to not have a security hole. //: PLAYERCOMMAND -// USAGE: su -// su name -// su (race)name +// USAGE +// +// | ``su`` +// | ``su name`` +// | ``su (race)name`` // // This is the command to switch users. su with no arguments will update // your character. su with a name will polymorph you into that character, // assuming you have the password. Instead of a name, if you supply a race in (), you will polymorph // into that race. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/suicide.c b/lib/cmds/player/suicide.c index b7e98d39..e04fd820 100644 --- a/lib/cmds/player/suicide.c +++ b/lib/cmds/player/suicide.c @@ -4,7 +4,8 @@ // --OH. //: PLAYERCOMMAND -// USAGE suicide +// USAGE +// ``suicide`` // // This would allow you to completely obliterate your character from the game, // leaving no trace. @@ -12,6 +13,8 @@ // so we've disabled it. // If you really really do want to be removed completely and irrevocably, // then mail the request to one of the admins. +// +// .. TAGS: RST inherit M_INPUT; inherit CMD; diff --git a/lib/cmds/player/tell.c b/lib/cmds/player/tell.c index 5d245514..908b3c29 100644 --- a/lib/cmds/player/tell.c +++ b/lib/cmds/player/tell.c @@ -2,14 +2,18 @@ //: PLAYERCOMMAND // -// USAGE: tell -// tell @ -// tell /last -// tell /clear +// USAGE +// +// | ``tell `` +// | ``tell @ `` +// | ``tell /last`` +// | ``tell /clear`` // // This command is used to tell others private messages. The second format // can be used to tell to people on other muds. The /last syntax will // display your tell history and the /clear syntax will clear it. +// +// .. TAGS: RST #include #include diff --git a/lib/cmds/player/time.c b/lib/cmds/player/time.c index 701b8ede..9b0f7e3f 100644 --- a/lib/cmds/player/time.c +++ b/lib/cmds/player/time.c @@ -1,98 +1,88 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -/******************************************************** - * * - * uptime - reports how long the mud has been up. * - - ** * copied from ideaexchange where it was originally* - * created by beek@nightmare * - - * copied by zifnab@zorkmud * - * - *********************************************************/ +/* + * time - reports how long the mud has been up. + * copied from ideaexchange where it was originally + * created by beek@nightmare + * copied by zifnab@zorkmud + */ //: PLAYERCOMMAND //$$ see: timezone -// USAGE time +// USAGE +// ``time`` // // Displays the current local time (where the mud server is located), // and the GMT conversion of that, and player's local time (if the -// GMT offset has been entered using the "timezone" command) +// GMT offset has been entered using the ``timezone`` command) // together with time the mud was last rebooted (on mud local time), // and how long it has been up. +// +// .. TAGS: RST +#include #include inherit CMD; +inherit M_FRAME; + +private +string week_view() +{ + string day = EVENT_D->time_to_weekday(); + string out = ""; -#define MIN 60 -#define HOUR (60 * MIN) -#define DAY (24 * HOUR) -#define WEEK (7 * DAY) + foreach (string d in EVENT_D->week_days()) + { + out += "[" + (d == day ? "<190>" : "") + d + "] "; + } + return out + "\n"; +} private void main(string notused) { - int tm = uptime(); - int tm1 = time(); - string tm2 = ctime(tm1); - int tm3 = tm1 - uptime(); - string tm4 = ctime(tm3); - int tm5; - string str; - mixed local = localtime(tm1); - int offset = local[LT_GMTOFF]; - string gmt; - int x; + int time = time(); + string restarted_at = ctime(time - uptime()); + string str = ""; + mixed local = localtime(time); mixed my_offset; my_offset = this_body()->query_tz(); if (intp(my_offset) || floatp(my_offset)) - { my_offset = to_int(3600.0 * my_offset); - tm5 = tm1 + my_offset; - } - gmt = ctime(tm1 - offset); - outf("Local MUD time %s. \n", tm2); - outf("GMT %s.\n", gmt); + +#ifdef USE_GAME_TIME + str += sprintf("<190>%s - %d game days / real day\n", EVENT_D->time_to_str(), EVENT_D->game_days_per_day()); + str += week_view() + "\n"; +#endif + str += sprintf("%s.\n", ctime(time)); + str += sprintf("%s.\n", ctime(time - local[LT_GMTOFF])); my_offset = this_body()->query_tz(); if (intp(my_offset) || floatp(my_offset)) { my_offset = to_int(3600.0 * my_offset); - tm5 = tm1 + my_offset; - outf("Player time %s.\n", ctime(tm1 + my_offset)); - } - out(mud_name() + " restarted on " + tm4 + ". \n \n"); - str = mud_name() + " has been up for "; - if (x = (tm / WEEK)) - { - str += x + "w "; - tm -= x * WEEK; - } - - if (x = (tm / DAY)) - { - str += x + "d "; - tm -= x * DAY; + str += sprintf("\n%s.\n", ctime(time + my_offset)); } + str += sprintf("\n" + mud_name() + " restarted on " + restarted_at + ". \n"); + str += mud_name() + " has been up for " + time_to_string(uptime()); - if (x = (tm / HOUR)) - { - str += x + "h "; - tm -= x * HOUR; - } + str = str[0.. < 2] + ".\n"; - if (x = (tm / MIN)) - { - str += x + "m "; - tm -= x * MIN; - } + // Create the frame + frame_init_user(); + set_frame_left_header(); - if (tm) - str += tm + "s "; +#ifdef USE_GAME_TIME + set_frame_title("Game Time & Real Time"); + set_frame_header("Game Time\n\n\nLocal MUD\nGMT\n\nTimezone\n\nUptime"); +#else + set_frame_title("Time"); + set_frame_header("Local MUD\nGMT\n\nTimezone\n\nUptime"); +#endif - str = str[0.. < 2] + ".\n"; - out(str); + set_frame_content(str); + out(frame_render()); } void player_menu_entry(string str) diff --git a/lib/cmds/player/timezone.c b/lib/cmds/player/timezone.c index 145d8f63..e082e435 100644 --- a/lib/cmds/player/timezone.c +++ b/lib/cmds/player/timezone.c @@ -1,13 +1,16 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -//$$see :time -// USAGE timezone +//$$ see: time +// USAGE +// ``timezone `` // // Sets the player's time difference (relative to GMT). // This lets the mud display your local time as part of the time command. // It's probably easier to look at a clock, but this does allow you to see // at a glance if the mud's clock is wrong. +// +// .. TAGS: RST inherit CMD; @@ -18,14 +21,14 @@ void main(string val) if (!strlen(val)) { actual = to_float(this_body()->query_tz()); - outf("Your timezone setting is %f\n", actual); + outf("Your timezone setting is %s\n", pround(actual, 1)); return; } - if (actual) + if (actual >= -12 || actual <= 12) { this_body()->set_tz(actual); actual = to_float(this_body()->query_tz()); - outf("Your new timezone setting is %f\n", actual); + outf("Your new timezone setting is %s\n", pround(actual, 1)); return; } // Add handling for strings - eg "EST" -> -5.0 diff --git a/lib/cmds/player/title.c b/lib/cmds/player/title.c index c0cb0626..63ac20ae 100644 --- a/lib/cmds/player/title.c +++ b/lib/cmds/player/title.c @@ -1,16 +1,19 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: title [new title] +// USAGE +// ``title [new title]`` // // without giving it a new title, shows you what your title is. // When you give it a new title, use $N for where you want your name to be. // // For example: -// title $N rocks! +// ``title $N rocks!`` // // And then when I type 'title' I see: -// Rust rocks! +// ``Rust rocks!`` +// +// .. TAGS: RST inherit CMD; inherit M_COLOURS; diff --git a/lib/cmds/player/typo.c b/lib/cmds/player/typo.c index 5c690bbf..a2062bb9 100644 --- a/lib/cmds/player/typo.c +++ b/lib/cmds/player/typo.c @@ -10,9 +10,12 @@ //: PLAYERCOMMAND //$$ see: bug, idea, feedback, question -// USAGE: typo +// USAGE +// ``typo`` // // This command directs a typo report to the proper place. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/verbose.c b/lib/cmds/player/verbose.c index 9383fc9e..07c9b714 100644 --- a/lib/cmds/player/verbose.c +++ b/lib/cmds/player/verbose.c @@ -7,14 +7,18 @@ //: PLAYERCOMMAND //$$ see: brief -// USAGE verbose -// verbose on|off +// USAGE +// +// | ``verbose`` +// | ``verbose on|off`` // // This shows whether you are using verbose or brief mode, and allows you to // switch between them. // // Room descriptions are suppressed in "brief" mode, so beware of unexpected // encounters if you choose to use it... +// +// .. TAGS: RST #include #define USAGE "Usage: verbose [on|off]\n" diff --git a/lib/cmds/player/version.c b/lib/cmds/player/version.c index c91144b7..e0a9c418 100644 --- a/lib/cmds/player/version.c +++ b/lib/cmds/player/version.c @@ -9,12 +9,15 @@ */ //: PLAYERCOMMAND -// USAGE version +// USAGE +// ``version`` // // Shows you which version of the Lima mudlib and MudOS driver are being used, // together with IP address and port number, and the admin email address. // But you knew all of that already, didn't you ... ? -// And it even tells you which mud you are on, in case you are completely lost +// And it even tells you which mud you are on, in case you are completely lost. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/player/who.c b/lib/cmds/player/who.c index dccdfb9d..162790c7 100644 --- a/lib/cmds/player/who.c +++ b/lib/cmds/player/who.c @@ -3,18 +3,21 @@ // Rust 2-6-94 //: PLAYERCOMMAND -// USAGE who [ -w -p ] +// USAGE +// ``who [ -w -p ]`` // // The who command will give you a list of all user's presently logged // onto the MUD, and whether or not they are idle. // // Used with the given arguments you can alter the way who works: // -// who -w +// ``who -w`` // Will show wizards only. // -// who -p +// ``who -p`` // Will show players only. +// +// .. TAGS: RST #include diff --git a/lib/cmds/player/width.c b/lib/cmds/player/width.c index 0f1c51ea..0ffffcf5 100644 --- a/lib/cmds/player/width.c +++ b/lib/cmds/player/width.c @@ -1,15 +1,22 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE width -// width -// width auto +// USAGE +// +// | ``width`` +// | ``width +// | ``width auto +// | ``width nowrap // // Allows you to see (or set) what the mud will use as your screen width when // formatting information. Some clients send the width of the terminal window, -// and if yours do that, you can use 'width auto' to set your width automatically. -// It's probably a good idea to set it to the same as your client' setting, +// and if yours do that, you can use ``width auto`` to set your width automatically. +// It is probably a good idea to set it to the same as your client' setting, // so they don't get confused when talking to each other. +// +// .. TAGS: RST + +#define MIN_WIDTH 30 inherit CMD; @@ -22,6 +29,13 @@ void main(mixed width) "Set your client to not wrap or wrap at 5000 or more chars - " + mud_name() + " will take it from here.\n\n"); return; } + if (width == "nowrap") + { + this_user()->set_screen_width(-1); + out("Wrapping disabled entirely. This can be useful for screen readers that do not like wrapped " + + "text or read it weirdly.\n\n"); + return; + } width = to_int(width); if (!intp(width)) @@ -37,9 +51,9 @@ void main(mixed width) return; } - if (width < 10) + if (width < MIN_WIDTH) { - out("Screen width must be 10 or greater.\n"); + out("Screen width must be " + MIN_WIDTH + " or greater.\n"); return; } this_user()->set_screen_width(width); diff --git a/lib/cmds/player/wizcall.c b/lib/cmds/player/wizcall.c index 7a46cc3d..345c8140 100644 --- a/lib/cmds/player/wizcall.c +++ b/lib/cmds/player/wizcall.c @@ -1,14 +1,17 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: PLAYERCOMMAND -// USAGE: wizcall +// USAGE +// ``wizcall `` // // The wizcall command will let you send a message to all logged-in // wizards. This command is to be used ONLY for reporting dead-end // traps, or other bugs that require immediate wizard assistance. Bugs // not requiring the immediate attention of a wizard should be reported -// via "bug" instead. The excessive use of this command is grounds for +// via ``bug`` instead. The excessive use of this command is grounds for // removal of your character. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/verbs/activate.c b/lib/cmds/verbs/activate.c index 499ff5c2..24f33d49 100644 --- a/lib/cmds/verbs/activate.c +++ b/lib/cmds/verbs/activate.c @@ -1,5 +1,14 @@ inherit VERB_OB; +//: COMMAND +// USAGE +// +// | ``activate `` +// +// Active or start something that can be activated. +// +// .. TAGS: RST + void do_activate_obj(object ob) { if (!try_to_acquire(ob)) diff --git a/lib/cmds/verbs/apply.c b/lib/cmds/verbs/apply.c index dab96261..dabbb889 100644 --- a/lib/cmds/verbs/apply.c +++ b/lib/cmds/verbs/apply.c @@ -5,6 +5,17 @@ ** Tsath 2020-02-05 */ +//: COMMAND +// USAGE +// +// | ``apply to `` +// | ``apply bandage to left arm`` +// | ``apply for drivers license`` +// +// For applying things to things or for things. +// +// .. TAGS: RST + #include #include #include diff --git a/lib/cmds/verbs/ascend.c b/lib/cmds/verbs/ascend.c index 552e1595..ba051228 100644 --- a/lib/cmds/verbs/ascend.c +++ b/lib/cmds/verbs/ascend.c @@ -4,6 +4,16 @@ * Written by Tigran, September 7, 2000 */ +//: COMMAND +// USAGE +// +// | ``ascend`` - if there's only one thing to ascend +// | ``ascend the grand staircase`` +// +// Go down something that can be ascended. +// +// .. TAGS: RST + inherit VERB_OB; void do_ascend_obj(object ob) diff --git a/lib/cmds/verbs/ask.c b/lib/cmds/verbs/ask.c index 4d86da13..ca5bab1a 100644 --- a/lib/cmds/verbs/ask.c +++ b/lib/cmds/verbs/ask.c @@ -1,24 +1,60 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ +//: COMMAND +// USAGE +// +// | ``ask about `` +// | ``ask about `` +// | ``ask biff about sword`` +// +// For asking vendors about their goods. +// +// .. TAGS: RST + inherit VERB_OB; mixed do_ask_liv_about_wrd(object liv, string item) { - if (liv->query_items(item, 1)) - return 1; + string items = liv->ask_about_items(item); + if (items) + { + write(liv->short() + " says: " + items); + } else - return 0; + write(liv->short() + " has no opinion on that."); } mixed do_ask_liv_about_str(object liv, string item) { - if (liv->query_items(item, 1)) - return 1; + string items = liv->ask_about_items(item); + if (items) + { + write(liv->short() + " says: " + items); + } else - return 0; + write(liv->short() + " has no opinion on that."); +} + +mixed do_ask_about_str(string item) +{ + object *respondents = filter_array(all_inventory(environment(this_body())), ( : $1->direct_ask_liv_about_str() :)); + + switch (sizeof(respondents)) + { + case 0: + write("Nobody seems to want to be asked about " + item + " here?"); + break; + case 1: + write("(Asking " + respondents[0]->short() + ")"); + do_ask_liv_about_str(respondents[0], item); + break; + default: + write("Ask " + format_list(map(respondents, ( : $1->short() :)), "or") + "?"); + break; + } } void create() { - add_rules(({"LIV about WRD", "LIV about STR"}), ({})); + add_rules(({"LIV about WRD", "LIV about STR", "about STR"}), ({})); } diff --git a/lib/cmds/verbs/drop.c b/lib/cmds/verbs/drop.c index f504b15e..51303879 100644 --- a/lib/cmds/verbs/drop.c +++ b/lib/cmds/verbs/drop.c @@ -19,6 +19,10 @@ nomask void drop_one(object ob) { mixed tmp = ob->drop(); + // Ob might disappear after drop() getting called, and we do not want any error messages in that case. + if (!ob) + return; + if (!tmp) tmp = "You aren't able to drop it.\n"; if (stringp(tmp)) diff --git a/lib/cmds/verbs/dualwield.c b/lib/cmds/verbs/dualwield.c index 0e94403b..dd2d2d5c 100644 --- a/lib/cmds/verbs/dualwield.c +++ b/lib/cmds/verbs/dualwield.c @@ -1,6 +1,7 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ #include +#include inherit VERB_OB; @@ -17,7 +18,7 @@ void do_dualwield_obs(object *obs) { int force_dual_wield = 0; string limb; - if (typeof(ob) == "string") + if (typeof(ob) == T_STRING) continue; if (ob->is_living() || environment(ob) != this_body()) continue; diff --git a/lib/cmds/verbs/go.c b/lib/cmds/verbs/go.c index 5b1ed245..9c0736d1 100644 --- a/lib/cmds/verbs/go.c +++ b/lib/cmds/verbs/go.c @@ -49,14 +49,19 @@ mixed can_go_str(string str) if (this_body()->query_driving_vehicle()) env = environment(env); - //If we have no move capacity, it means we're a non-combatant, and should be allowed to move. + // If we have no move capacity, it means we're a non-combatant, and should be allowed to move. if (this_body()->query_no_move_capacity() && this_body()->query_capacity() >= this_body()->query_no_move_capacity()) { this_body()->simple_action("$N $vfail to move due to the load $n0 $vare carrying."); return "You cannot move! What ARE you carrying?\n"; } - //If we have no move capacity we ignore that we cannot move. + if (this_body()->query_prone()) + { + return "You are prone. Stand up first."; + } + + // If we have no move capacity we ignore that we cannot move. if (this_body()->query_no_move_capacity() && !can_move()) { this_body()->simple_action("$N $vwiggle on the ground trying to move."); diff --git a/lib/cmds/verbs/list.c b/lib/cmds/verbs/list.c index c674c453..3a97aa20 100644 --- a/lib/cmds/verbs/list.c +++ b/lib/cmds/verbs/list.c @@ -48,15 +48,16 @@ mixed can_list_str() return test_vendor(); } -private show_frame(string *parts) +private +show_frame(string *parts) { - if (!parts) + if (!parts) { - write(find_vendor()->short()+" has nothing for sale right now."); + write(find_vendor()->short() + " has nothing for sale right now."); return; } frame_init_user(); - set_frame_title(find_vendor()->query_named_possessive()+" shop"); + set_frame_title(find_vendor()->query_named_possessive() + " shop"); set_frame_header(parts[0]); set_frame_content(parts[1]); set_frame_footer(parts[2]); diff --git a/lib/cmds/verbs/post.c b/lib/cmds/verbs/post.c index d2c3b49b..fd250891 100644 --- a/lib/cmds/verbs/post.c +++ b/lib/cmds/verbs/post.c @@ -7,8 +7,9 @@ // //: COMMAND -// Used mainly to post a message to a board -// See also: boards +// Used mainly to post a message to a board. +// +// .. TAGS: RST inherit VERB_OB; diff --git a/lib/cmds/verbs/put.c b/lib/cmds/verbs/put.c index 8743c8a7..fe678e0c 100644 --- a/lib/cmds/verbs/put.c +++ b/lib/cmds/verbs/put.c @@ -40,13 +40,102 @@ void do_put_obs_wrd_obj(object *info, string p, object ob2) handle_obs(info, ( : do_put_obj_wrd_obj:), p, ob2); } +void do_put_wrd_str_in_obj(string amount, string str, object ob) +{ + string s; + int number; + + if (MONEY_D->is_currency(str)) + { + sscanf(str, "%s %s", str, s); + str = MONEY_D->singular_name(str); + if (amount == "all") + number = this_body()->query_amt_money(str); + else + number = to_int(amount); + if (number < 0) + { + write("Nice try.\n"); + return; + } + if (this_body()->query_amt_money(str) < number) + { + write("You don't have " + MONEY_D->denomination_to_string(number, str) + ".\n"); + return; + } + else + { + if (ob->can_hold_money()) + { + ob->add_money(str, number); + this_body()->subtract_money(str, number); + this_body()->other_action("$N $vput some money in $o.", ob->the_short()); + this_body()->my_action("$N $vput " + MONEY_D->denomination_to_string(number, str) + " in $o.", + ob->the_short()); + } + else + write("You cannot put " + str + "s into " + ob->the_short() + ".\n"); + } + } + else + { + // See if this is a crafting component + if (strlen(str) > 3 && CRAFTING_D->valid_material(amount + " " + str[0.. < 2])) + { + if (str[ < 1.. < 1] == "s") + str = str[0.. < 2]; + } + if (CRAFTING_D->valid_material(amount + " " + str)) + { + str = amount + " " + str; + amount = "1"; + } + if (strlen(str) > 3 && CRAFTING_D->valid_material(str[0.. < 2])) + { + if (str[ < 1.. < 1] == "s") + str = str[0.. < 2]; + } + if (CRAFTING_D->valid_material(str)) + { + TBUG("amount: " + amount + " str: " + str); + number = to_int(amount); + if (number < 0) + { + write("Nice try.\n"); + return; + } + + if (ob->can_hold_materials()) + { + ob->add_materials(str, number); + this_body()->remove_material(str, number); + this_body()->other_action("$N $vput some materials in $o.", ob->the_short()); + this_body()->my_action("$N $vput " + number + " " + str + " in $o.", ob->the_short()); + } + else + write("You cannot put " + str + "s into " + ob->the_short() + ".\n"); + } + else + { + write("Sorry, put how many of what where?\n"); + return; + } + } +} + +void do_put_wrd_str_into_obj(string amount, string str, object ob) +{ + return do_put_wrd_str_in_obj(amount, str, ob); +} + void create() { - add_rules(({"OBS WRD OBJ"}), ({"insert", "place", "stuff", "hide"})); + add_rules(({"OBS WRD OBJ", "WRD STR in OBJ", "WRD STR into OBJ"}), ({"insert", "place", "stuff", "hide"})); + // add_rules(({"OBS WRD OBJ",}), ({"insert", "place", "stuff", "hide"})); /* - ** "hide OBS next to OBJ" -> "put OBS next to OBJ" - ** "hide OBS beside OBJ" -> "put OBS beside OBJ" - ** "hide OBS with OBJ" -> "put OBS with OBJ" - */ + ** "hide OBS next to OBJ" -> "put OBS next to OBJ" + ** "hide OBS beside OBJ" -> "put OBS beside OBJ" + ** "hide OBS with OBJ" -> "put OBS with OBJ" + */ } diff --git a/lib/cmds/verbs/remove.c b/lib/cmds/verbs/remove.c index 276b1997..42520616 100644 --- a/lib/cmds/verbs/remove.c +++ b/lib/cmds/verbs/remove.c @@ -7,13 +7,17 @@ // //: COMMAND -// Remove a post from a bulletin board -// Remove equipment -// Remove other things -// See also: boards +// Remove a post from a bulletin board, remove equipment, remove other things. +// +// | ``remove helmet`` +// | ``remove all`` +// +// .. TAGS: RST inherit VERB_OB; +#include + mixed can_remove_wrd(string wrd) { object brd = 0; @@ -54,7 +58,7 @@ void do_remove_obs(object *obs) foreach (object ob in obs) { // TBUG("Remove: "+ob); - if (typeof(ob) == "string") + if (typeof(ob) == T_STRING) continue; // Do not attempt to remove things not in inventory. if (environment(ob) != this_body()) diff --git a/lib/cmds/verbs/repair.c b/lib/cmds/verbs/repair.c index 0a3a1748..7363c3e0 100644 --- a/lib/cmds/verbs/repair.c +++ b/lib/cmds/verbs/repair.c @@ -75,8 +75,8 @@ void do_repair_obj(object ob) if (estimate[0]) { write("\t%^MENU_CHOICE%^r%^RESET%^: Use materials to Repair " + ob->short() + "?\n" + - "\t%^MENU_CHOICE%^m%^RESET%^: Use only money, " + CRAFTING_D->repair_cost_string(ob) + - ", instead?\n" + "\t%^MENU_CHOICE%^Q%^RESET%^: Quit (default)"); + "\t%^MENU_CHOICE%^m%^RESET%^: Use only money, " + CRAFTING_D->repair_cost_string(ob) + ", instead?\n" + + "\t%^MENU_CHOICE%^Q%^RESET%^: Quit (default)"); modal_simple(( : repair_with_what, ob:)); } else @@ -127,10 +127,10 @@ void do_repair_obs(object *obs) if (estimate[0]) { write("\t%^MENU_CHOICE%^r%^RESET%^: Use materials to Repair?\n" - "\t%^MENU_CHOICE%^m%^RESET%^: Use only Money, " + - to_int(only_money) + - ", instead?\n" - "\t%^MENU_CHOICE%^Q%^RESET%^: Quit (default)"); + "\t%^MENU_CHOICE%^m%^RESET%^: Use only Money, " + + to_int(only_money) + + ", instead?\n" + "\t%^MENU_CHOICE%^Q%^RESET%^: Quit (default)"); modal_simple(( : repair_with_what, filtered_obs:)); } else diff --git a/lib/cmds/verbs/say.c b/lib/cmds/verbs/say.c index 8194cd62..554bca53 100644 --- a/lib/cmds/verbs/say.c +++ b/lib/cmds/verbs/say.c @@ -36,7 +36,7 @@ mixed do_say_str(string str) string *out = ({}); case "/last": case "/history": - out = ({"History of says:\n"}); + out = ({"History of says:"}); msgs = this_body()->list_say_history(); if (sizeof(msgs)) out += msgs; @@ -45,7 +45,7 @@ mixed do_say_str(string str) more(out); break; default: - msgs = this_body()->action(({this_body()}), "%^SAY%^$N $vsay:%^RESET%^ $o", punctuate(str)); + msgs = this_body()->action(({this_body()}), "%^SAY%^$N $vsay:%^RESET%^ $o", punctuate(str)); this_body()->inform(({this_body()}), msgs, others); this_body()->add_say_history(msgs[0]); others->add_say_history(msgs[1]); diff --git a/lib/cmds/verbs/stand.c b/lib/cmds/verbs/stand.c index 8dbc13cf..439a1274 100644 --- a/lib/cmds/verbs/stand.c +++ b/lib/cmds/verbs/stand.c @@ -21,12 +21,30 @@ mixed can_verb_rule(string verb, string rule) void do_stand() { - environment(this_body())->do_verb_rule("stand"); + if (!this_body()->query_prone()) + { + write("You're already standing."); + return; + } + this_body()->simple_action("$N $vstand up."); + this_body()->stand_up(); } void do_stand_wrd(string prep) { - environment(this_body())->do_verb_rule("stand", "WRD", prep); + if (prep != "up") + { + write("Stand what?"); + return; + } + + if (!this_body()->query_prone()) + { + write("You're already standing."); + return; + } + this_body()->simple_action("$N $vstand up."); + this_body()->stand_up(); } void do_stand_wrd_obj(string prep, object ob) diff --git a/lib/cmds/verbs/switch.c b/lib/cmds/verbs/switch.c index f3454f35..2361c52d 100644 --- a/lib/cmds/verbs/switch.c +++ b/lib/cmds/verbs/switch.c @@ -9,7 +9,8 @@ //: COMMAND // Mainly used to switch which group a board is set to -// See also: boards +// +// .. TAGS: RST inherit VERB_OB; diff --git a/lib/cmds/verbs/unwield.c b/lib/cmds/verbs/unwield.c index 6b97ab28..ac7199e6 100644 --- a/lib/cmds/verbs/unwield.c +++ b/lib/cmds/verbs/unwield.c @@ -1,10 +1,17 @@ /* Do not unwield the headers from this file! see /USAGE for more info. */ //: COMMAND -// Unwield equipment +// Unwield equipment that you are wielding. +// +// | ``unwield sword`` +// | ``unwield all`` +// +// .. TAGS: RST inherit VERB_OB; +#include + void do_unwield_obj(object ob) { if (ob->is_weapon()) @@ -15,7 +22,7 @@ void do_unwield_obs(object *obs) { foreach (object ob in obs) { - if (typeof(ob) == "string") + if (typeof(ob) == T_STRING) continue; // Do not attempt to unwield things not in inventory. if (environment(ob) != this_body()) diff --git a/lib/cmds/verbs/wear.c b/lib/cmds/verbs/wear.c index 2882e965..513b108d 100644 --- a/lib/cmds/verbs/wear.c +++ b/lib/cmds/verbs/wear.c @@ -2,6 +2,8 @@ inherit VERB_OB; +#include + void do_wear_obj(object ob) { if (!try_to_acquire(ob)) @@ -15,7 +17,7 @@ void do_wear_obs(object *obs) foreach (object ob in obs) { // TBUG("Wear: "+ob); - if (typeof(ob) == "string") + if (typeof(ob) == T_STRING) continue; // Do not try to wear living things or things not in inventory. diff --git a/lib/cmds/verbs/whisper.c b/lib/cmds/verbs/whisper.c index f54fbdbb..2e306b3b 100644 --- a/lib/cmds/verbs/whisper.c +++ b/lib/cmds/verbs/whisper.c @@ -1,12 +1,16 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -//: PLAYERCOMMAND -// USAGE: whisper -// whisper to -// whisper to +//: COMMAND +// USAGE +// +// | ``whisper `` +// | ``whisper to `` +// | ``whisper to `` // // This command is used to whisper a message to another player who is in the same // room as you without other players being able to hear what you are saying. +// +// .. TAGS: RST inherit VERB_OB; inherit M_MESSAGES; diff --git a/lib/cmds/verbs/wield.c b/lib/cmds/verbs/wield.c index a0eea3f7..f4051176 100644 --- a/lib/cmds/verbs/wield.c +++ b/lib/cmds/verbs/wield.c @@ -1,6 +1,7 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ #include +#include inherit VERB_OB; @@ -17,7 +18,7 @@ void do_wield_obs(object *obs) { int force_dual_wield = 0; string limb; - if (typeof(ob) == "string") + if (typeof(ob) == T_STRING) continue; if (ob->is_living() || environment(ob) != this_body()) continue; diff --git a/lib/cmds/wiz/Cmd_rules b/lib/cmds/wiz/Cmd_rules index 21d36dc3..bb033b97 100644 --- a/lib/cmds/wiz/Cmd_rules +++ b/lib/cmds/wiz/Cmd_rules @@ -14,6 +14,7 @@ lightme num Move obj obj cmd obj str* objcount [num] +quiet obj review -cd [user] scan -d [obj] showtree [str|obfile] obfile diff --git a/lib/cmds/wiz/I.c b/lib/cmds/wiz/I.c index ca7b373b..2b855eb9 100644 --- a/lib/cmds/wiz/I.c +++ b/lib/cmds/wiz/I.c @@ -2,18 +2,20 @@ //: COMMAND //$$ see: didlog -// USAGE: I +// USAGE +// ``I `` // // This command produces the "did" log when you first log on. -// The use of thes command allows you to let other wizards +// The use of this command allows you to let other wizards // know about any changes or additions that you made to the mud. // -// I started adding help files for some wiz cmds +// ``I started adding help files for some wiz cmds`` // // When logging in next time you (and other wizards) will see: // -// Wed Aug 23 17:48:49 1995: Zifnab started adding help files for some wiz -// cmds +// Wed Apr 3 17:48:49 2024: Asmerian started adding help files for some wiz cmds +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/Move.c b/lib/cmds/wiz/Move.c index 68b9e349..f16e1ad3 100644 --- a/lib/cmds/wiz/Move.c +++ b/lib/cmds/wiz/Move.c @@ -3,14 +3,16 @@ // Megaboz@ZorkMUD //: COMMAND -// USAGE: Move +// USAGE: ``Move `` // // This command will move the first object into the second one, // both objects must be present in your environment. // -// Move barney safe +// ``Move barney safe`` // // This will put barney into the safe. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/addemote.c b/lib/cmds/wiz/addemote.c index da70ecfa..a4dadb54 100644 --- a/lib/cmds/wiz/addemote.c +++ b/lib/cmds/wiz/addemote.c @@ -2,8 +2,9 @@ // out(f) isn't very appropriate here... //: COMMAND -//$$ see: feelings, m_messages, rmemote, showemote, stupidemote, targetemote -// USAGE: addemote (verb) +//$$see: feelings, m_messages, rmemote, showemote, stupidemote, targetemote +// USAGE: +// ``addemote `` // // This command allows you to add new souls. (verb) being the soul. // @@ -11,9 +12,9 @@ // The rule consists of one of the following; OBJ, LIV, STR etc. // Then you will be asked for the message. // -// addemote kick -// rule OBJ -// message: $N $vkick $T +// | addemote kick +// | rule OBJ +// | message: $N $vkick $T // // To add a new rule treat it as if the whole emote was new, just // follow the same steps as for adding a brand new emote. @@ -24,21 +25,23 @@ // // e.g. $N $vkick $t hard. && $N $vkick $t hard (how mean). // -// gives: -// me: You kick Rust hard. -// rust: Beek kicks you hard. -// room: Beek kicks Rust hard (how mean). +// | gives: +// | me: You kick Rust hard. +// | rust: Beek kicks you hard. +// | room: Beek kicks Rust hard (how mean). // //(when there is no message for the target, they see the first one) // // also: $N $vkick $t hard. && $N $vkick $t hard (how mean). && $N $vkick $t hard (ouch!). // -// gives: -// me: You kick Rust hard. -// rust: Beek kicks you hard (ouch!). -// room: Beek kicks Rust hard (how mean). +// | gives: +// | me: You kick Rust hard. +// | rust: Beek kicks you hard (ouch!). +// | room: Beek kicks Rust hard (how mean). // -// Extensive details of the messaging syntax are available in /contrib/emotehelp.txt +// Extensive details of the messaging syntax are available in */contrib/emotehelp.txt* +// +// .. TAGS: RST #include #include diff --git a/lib/cmds/wiz/admtool.c b/lib/cmds/wiz/admtool.c index 01136a5f..63d16043 100644 --- a/lib/cmds/wiz/admtool.c +++ b/lib/cmds/wiz/admtool.c @@ -1,9 +1,12 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE admtool +// USAGE +// ``admtool`` // // Invokes the menu-driven admtool, for code admin tasks. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/apropos.c b/lib/cmds/wiz/apropos.c index e7901734..59021795 100644 --- a/lib/cmds/wiz/apropos.c +++ b/lib/cmds/wiz/apropos.c @@ -6,15 +6,26 @@ inherit CMD; #define MIN_LEN 3 //: COMMAND +// Usage +// ``apropos `` +// // Returns information on which mudlib functions contain the // keyword passed, including a short description. +// +// .. TAGS: RST + +// Generate a category for a given file. +string generate_category(string file) +{ + string *st = explode(file, "/"); + return implode(st[1..sizeof(st)-2], "/"); +} mixed apropos(string s) { mapping filer = ([]); mapping topics; string output = ""; - string *st; string pwd; topics = HELP_D->query_topics(); @@ -28,8 +39,7 @@ mixed apropos(string s) if (strsrch(key, s) != -1) foreach (string f in files) { - st = explode(f[6..], "/"); - pwd = implode(st[0..sizeof(st)-2], "/"); + pwd = generate_category(f); if (!arrayp(filer[pwd])) filer[pwd] = ({}); filer[pwd] += ({key}); diff --git a/lib/cmds/wiz/calls.c b/lib/cmds/wiz/calls.c index 48a8d1be..0b582a57 100644 --- a/lib/cmds/wiz/calls.c +++ b/lib/cmds/wiz/calls.c @@ -4,27 +4,27 @@ // Improved by Tsath 2020 to show time better, plus better documentation. // : COMMAND -// USAGE: calls +// USAGE: ``calls`` // // This command shows you the number of call_outs that are active. If a lot // of calls exist on same object to same function they will be abbreviated. // // Produces display like : -// calls +// ``calls`` // -// object Function Delay -// ----------------------------------------------------------------------------- -// /secure/master 17m 13s -// /domains/std/harry#474 19h 23m 53s -// /domains/std/harry 3s -// /daemons/imud_d (107 calls) +// | object Function Delay +// | ----------------------------------------------------------------------------- +// | /secure/master 17m 13s +// | /domains/std/monster/harry#474 19h 23m 53s +// | /domains/std/monster/harry 3s +// | /daemons/imud_d (107 calls) // // There are 3 call_outs active. +// +// .. TAGS: RST inherit CMD; -#define CHOMP(x) replace_string(x, "/domains/", "^") - private void main() { @@ -38,9 +38,9 @@ void main() // We do not have any ANSI here, but also don't want emojis. set_output_flags(NO_ANSI); - outf("%-45s%-25s%-10s\n", "Object", "Function", "Delay"); + outf("%-55s%-25s%-10s\n", "Object", "Function", "Delay"); if (!simplify()) - outf("%82'-'s\n", ""); + outf("%92'-'s\n", ""); foreach (data in call_out_stuff) { @@ -76,12 +76,13 @@ void main() { if (sizeof(t) == 1) { - outf("%-45s%-25s%-10s\n", CHOMP(ob), f, t[0]); + outf("%-55s%-25s%-10s\n", shorten_filename(ob), f, t[0]); } else - outf("%-45s%-25s%-10s\n", CHOMP(ob), f, "(" + sizeof(t) + " calls)"); + outf("%-55s%-25s%-10s\n", shorten_filename(ob), f, "(" + sizeof(t) + " calls)"); } } outf("\nThere are %d call_outs active.\n", sizeof(call_out_stuff)); + outf("\nActive states:\n%s", STATE_D->stat_me()); } \ No newline at end of file diff --git a/lib/cmds/wiz/cd.dune b/lib/cmds/wiz/cd.dune deleted file mode 100644 index 842c2c90..00000000 --- a/lib/cmds/wiz/cd.dune +++ /dev/null @@ -1,18 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -inherit CMD; - -private void main(mixed *arg) -{ - string fname = arg[0]; - - if ( !fname ) - { - fname = wiz_dir(this_user()); - if(!is_directory(fname)) - fname = "/help"; - } - - this_user()->query_shell_ob()->set_pwd(fname); - outf("new cwd: %s\n", fname); -} diff --git a/lib/cmds/wiz/clean.c b/lib/cmds/wiz/clean.c index e419f3d2..17f029e4 100644 --- a/lib/cmds/wiz/clean.c +++ b/lib/cmds/wiz/clean.c @@ -2,8 +2,9 @@ //: COMMAND //$$ see: dest, clone -// USAGE: clean -// clean +// USAGE: +// | ``clean`` +// | ``clean `` // // This command will destroy everything in your environment if // executed with no args. If given an argument it will destroy all @@ -11,6 +12,8 @@ // clone 20 barney's in your workroom. // It ignores add_items and living objects, so perhaps it's not so helpful // with those barneys after all ... +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/clone.c b/lib/cmds/wiz/clone.c index 84ac2fc2..3f1bae5f 100644 --- a/lib/cmds/wiz/clone.c +++ b/lib/cmds/wiz/clone.c @@ -2,10 +2,12 @@ //: COMMAND //$$ see: dest, clean -// USAGE: clone +// USAGE: ``clone `` // // This command clones an object into your inventory if it is // gettable, and into your environment if it isn't gettable. +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/cmd.c b/lib/cmds/wiz/cmd.c index 03e08232..939d2f0b 100644 --- a/lib/cmds/wiz/cmd.c +++ b/lib/cmds/wiz/cmd.c @@ -3,14 +3,17 @@ // Tsath@Lima, 2023 //: COMMAND -// USAGE: cmd +//$$ see: force +// USAGE: ``cmd `` // // This command will tell a monster to do something. // It requires that the monster has do_game_command() inherited. // Cannot be used on players/wizards. // -// > cmd troll say Hello! +// > ``cmd troll say Hello!`` // Bill the Troll says: Hello! +// +// .. TAGS: RST inherit CMD; @@ -19,7 +22,7 @@ void main(mixed *arg) { if (arg[0]->is_body()) { - tell(arg[0],this_body()->short()+ " tried to make you '"+implode(arg[1]," ")+"' via 'cmd' command."); + tell(arg[0], this_body()->short() + " tried to make you '" + implode(arg[1], " ") + "' via 'cmd' command."); write("Cannot be used on players, use 'force' cmd."); return; } diff --git a/lib/cmds/wiz/codesay.c b/lib/cmds/wiz/codesay.c index b0a4013e..bf8bccdf 100644 --- a/lib/cmds/wiz/codesay.c +++ b/lib/cmds/wiz/codesay.c @@ -6,17 +6,19 @@ inherit CMD; inherit M_GRAMMAR; //: COMMAND -// USAGE codesay +// USAGE ``codesay `` // // Displays the string formatted as LPC code. // Useful when discussing/explaining snippets of code. // -//>codesay void create() { ::create(); } +// > ``codesay void create() { ::create(); }`` // -// You say: -// void create(){ -// ::create(); -// } +// | You say: +// | void create(){ +// | ::create(); +// | } +// +// .. TAGS: RST void create() { diff --git a/lib/cmds/wiz/cpu.c b/lib/cmds/wiz/cpu.c index 02d558b0..1bf7649d 100644 --- a/lib/cmds/wiz/cpu.c +++ b/lib/cmds/wiz/cpu.c @@ -3,9 +3,11 @@ // Yaynu @ red dragon Nov. 1995 //: COMMAND -// USAGE cpu +// USAGE ``cpu`` // // Shows cpu load generated by the mud (as a %) +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/date.c b/lib/cmds/wiz/date.c index f931db1c..8d18356a 100644 --- a/lib/cmds/wiz/date.c +++ b/lib/cmds/wiz/date.c @@ -1,12 +1,14 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: date +// USAGE: ``date`` // // Displays the current date and time. To display the date with your // current time, use the 'timezone' command. // //[ note: The timezone command is not currently available. ] +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/dest.c b/lib/cmds/wiz/dest.c index a31eb3f7..3906b153 100644 --- a/lib/cmds/wiz/dest.c +++ b/lib/cmds/wiz/dest.c @@ -4,9 +4,11 @@ //: COMMAND //$$ see: clone, clean, scan -// USAGE: dest +// USAGE: ``dest `` // // This command destroys an object in your inventory or in your environment. +// +// .. TAGS: RST inherit CMD; @@ -17,10 +19,10 @@ void main(mixed *arg) ob = arg[0]; - //Give objects a chance before dested. + // Give objects a chance before dested. ob->do_remove(); - //Message about the dest. + // Message about the dest. if (ob->short()) { this_body()->do_player_message("destruct", ob); diff --git a/lib/cmds/wiz/didlog.c b/lib/cmds/wiz/didlog.c index 62ceeee1..ebbf9a71 100644 --- a/lib/cmds/wiz/didlog.c +++ b/lib/cmds/wiz/didlog.c @@ -3,60 +3,154 @@ /* ** didlog.c -- print out a portion of the DID_D log ** -** 950821, Deathblade: created +** Aug 1995, Deathblade: created +** Feb 2024, rewritten by Tsath to support versions and both a LIMA log and MUD log. */ //: COMMAND -//$$ see: I -// USAGE: didlog -// didlog -// didlog /on -// didlog /off +//$$ see: I, lima +// USAGE: +// +// | ``didlog`` +// | ``didlog -a|-all`` - Show entire didlog. +// | ``didlog `` - Show didlog for last days. +// | ``didlog -on|-off`` - Turn didlog on login on/off. +// | ``didlog -vs|-versions`` - Show the versions stored. +// | ``didlog -h|-help`` - This help text. +// | ``didlog -newversion [param]`` - Set a new version (admin only). +// | ``didlog -v|-ver|-version [param]`` - Select this version>. +// | ``didlog -p|-pattern [param]`` - Match pattern. +// +// Examples:\n" +// | ``didlog 100`` - Find all changes in current version 100 days back. +// | ``didlog -v 1.0 -a`` - Show entire version 1.0 didlog. +// | ``didlog -v 1.0 -a -p limb`` - Find all places in version 1.0 with 'limb'. +// | ``didlog -v 1.0 200 -p limb`` - Find places in version 1.0 days 200 back with 'limb'. // // Shows you the "did" log (ie log of changes recorded by wizards). // With no arguments it shows the log for the past day. // With an integer argument it will show the log for that many days back. -// didlog /off turns didlog notification on login off. -// didlog /on turns it back on again. +// didlog -off turns didlog notification on login off. +// didlog -on turns it back on again. +// +// .. TAGS: RST #include inherit CMD; +private +void print_help() +{ + out("didlog:\n" + " didlog -a|-all - Show entire didlog.\n" + " didlog - Show didlog for last days.\n" + " didlog -on|-off - Turn didlog on login on/off.\n" + " didlog -vs|-versions - Show the versions stored.\n" + " didlog -h|-help - This help text.\n\n" + " didlog -newversion [param] - Set a new version (admin only).\n" + " didlog -v|-ver|-version [param] - Select this version>.\n" + " didlog -p|-pattern [param] - Match pattern.\n\n" + "Examples:\n" + " didlog 100 - Find all changes in current version 100 days back.\n" + " didlog -v 1.0 -a - Show entire version 1.0 didlog.\n" + " didlog -v 1.0 -a -p limb - Find all places in version 1.0 with 'limb'.\n" + " didlog -v 1.0 200 -p limb - Find places in version 1.0 days 200 back with 'limb'.\n\n" + "Arguments can be given in any order.\n"); +} + private void main(string str) { - int ndays; + int ndays = 1; + string days; string header; string pattern; + string version; + string newversion; + string *args = explode(str || "", " "); - if (!str) - ndays = 1; - else if (str == "/off" && this_body()) + for (int location = 0; location < sizeof(args); location++) { - this_user()->set_didlog_off(1); - out("You will no longer receive didlog notifications.\n"); - return; - } - else if (str == "/on" && this_body()) - { - this_user()->set_didlog_off(0); - out("You will now receive didlog notifications.\n"); - return; - } - else if (!(ndays = to_int(str))) - { - if (sscanf(str, "%s %d", pattern, ndays) != 2) + string a = args[location]; + string parameter; + string next_param = (location + 1) < sizeof(args) ? args[location + 1] : 0; + if (strlen(a) > 1 && a[0] == '-') + parameter = a[1..]; + switch (parameter) { - pattern = str; - ndays = 1; + // Dirty returning statements up here. + case "versions": + case "vs": + out("The following versions are known: \n\t" + implode(sort_array(DID_D->versions(), 1), "\n\t") + "\n"); + return; + case "newversion": + case "nw": + newversion = next_param; + if (mud_name() == "LIMA") + { + out("Error: Set version in secure/simul_efun/misc.c for LIMA library."); + DID_D->set_version(0); + return; + } + DID_D->set_version(newversion); + out("Version set to '" + newversion + "'."); + return; + case "on": + this_user()->set_didlog_off(0); + out("You will now receive didlog notifications.\n"); + return; + case "off": + this_user()->set_didlog_off(1); + out("You will no longer receive didlog notifications.\n"); + return; + case "help": + case "h": + print_help(); + return; + // End of dirt + case "version": + case "v": + case "ver": + version = next_param; + if (member_array(version, DID_D->versions()) == -1) + { + out("Unknown version '" + version + "'."); + version = 0; + return; + } + location++; + break; + case "all": + case "a": + ndays = -1; + break; + case "pattern": + case "p": + pattern = next_param; + location++; + break; + default: + if (to_int(a) > 0) + ndays = to_int(a); + break; } + + parameter = 0; } if (ndays == 1) - header = "DID_D report for the past day"; + header = "DID_D report for the past day" + (version ? " for " + version : ""); + if (ndays == -1) + { + header = "Complete DID_D report" + (version ? " for " + version : ""); + } else - header = sprintf("DID_D report for the past %d days", ndays); + header = sprintf("DID_D report for the past %d days" + (version ? " for " + version : ""), ndays); + + if (strlen(pattern) > 0) + header += " matching '" + pattern + "'"; - out(DID_D->get_did_info(time() - ndays * 24 * 60 * 60, ({header, repeat_string("-", sizeof(header)), ""}), pattern)); + out(DID_D->get_did_info(time() - ndays * 24 * 60 * 60, ({header, repeat_string("-", sizeof(header)), ""}), pattern, + 0, version)); } diff --git a/lib/cmds/wiz/discuss.c b/lib/cmds/wiz/discuss.c index 62800516..083f6f39 100644 --- a/lib/cmds/wiz/discuss.c +++ b/lib/cmds/wiz/discuss.c @@ -1,10 +1,12 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE discuss +// USAGE ``discuss `` // // Invokes the annotation menu, allowing annotations to be added to objects, // and subsequently viewed and deleted. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/echo.c b/lib/cmds/wiz/echo.c index adfea210..f417b48e 100644 --- a/lib/cmds/wiz/echo.c +++ b/lib/cmds/wiz/echo.c @@ -4,11 +4,11 @@ //: COMMAND //$$ see: echoto, echoall, echom -// USAGE: echo +// USAGE: ``echo `` // // This command will echo a message to the room exactly as you typed the string. // -// echo You suddenly have a strange urge to kill something. +// ``echo You suddenly have a strange urge to kill something.`` // // All users in the room will see the following message on their screens; // You suddenly have a strange urge to kill something. @@ -20,6 +20,8 @@ // with players. (i.e. no faked deaths or any other messages of that nature). // Doing this is a direct violation of the mud policy and is grounds for // disciplinary action. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/echoall.c b/lib/cmds/wiz/echoall.c index 95cd2d60..190fbd12 100644 --- a/lib/cmds/wiz/echoall.c +++ b/lib/cmds/wiz/echoall.c @@ -4,13 +4,13 @@ //: COMMAND //$$ see: echo, echoto. echom -// USAGE: echoall +// USAGE: ``echoall `` // // This command will echo a message to the entire mud exactly as you // entered it. // // -// echoall You suddenly have a strange urge to kill something. +// ``echoall You suddenly have a strange urge to kill something.`` // // All the users on the mud will see on their screen; // You suddenly have this urge to kill something. @@ -22,6 +22,8 @@ // with players. (i.e. no faked deaths, or messages of that nature). // Doing this is a direct violation of the mud policy and is grounds for // disciplinary action. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/echom.c b/lib/cmds/wiz/echom.c index 4eae047d..db47d431 100644 --- a/lib/cmds/wiz/echom.c +++ b/lib/cmds/wiz/echom.c @@ -2,17 +2,19 @@ //: COMMAND //$$ see: echo, echoall, m_messages -// USAGE echo @ +// USAGE ``echo @ `` // // Provides a targetted echo facility, which uses the "message" syntax. // If the target cannot be found, it is ignored - ie the message is treated // as a "simple_action" - so presence of $t in the message would cause error. // // -//>echom @fred $N $vtest the echom command on $t +// >``echom @fred $N $vtest the echom command on $t`` // -//>You test the echom command on Fred +// > You test the echom command on Fred // and Fred and onlookers would see suitably adjusted versions. +// +// .. TAGS: RST inherit CMD; inherit M_GRAMMAR; diff --git a/lib/cmds/wiz/echoto.c b/lib/cmds/wiz/echoto.c index c3e5f8fd..56abb0fc 100644 --- a/lib/cmds/wiz/echoto.c +++ b/lib/cmds/wiz/echoto.c @@ -2,17 +2,19 @@ //: COMMAND //$$ see: echo, echoall, echom -// USAGE: echoto +// USAGE: ``echoto `` // // Provides a simple targetted echo facility, // -//>echoto fred This is a message from echoto. +// >``echoto fred This is a message from echoto.`` // // Fred sees: // This is a message from echoto. // Nobody else in the room sees anything // except you see: // You echo to Fred: This is a message from echoto. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/emotem.c b/lib/cmds/wiz/emotem.c index 2a51f320..144b2e55 100644 --- a/lib/cmds/wiz/emotem.c +++ b/lib/cmds/wiz/emotem.c @@ -2,7 +2,7 @@ //: COMMAND //$$ see: emote, echom -// USAGE: emotem @ +// USAGE: ``emotem @ `` // // Sends a targetted message, using the M_MESSAGE syntax (as for souls). // As with other emotes, the senders name is prepended as part of the message. @@ -10,10 +10,12 @@ // as a "simple_action" - so presence of $t in the message would cause error. // // -//>echom @fred $vtest the emotem command on $t +// >``echom @fred $vtest the emotem command on $t`` // -//>You test the echom command on Fred +// >You test the echom command on Fred // and Fred and onlookers would see suitably adjusted versions. +// +// .. TAGS: RST inherit CMD; inherit M_GRAMMAR; diff --git a/lib/cmds/wiz/flist.c b/lib/cmds/wiz/flist.c index e387f364..2afabb97 100644 --- a/lib/cmds/wiz/flist.c +++ b/lib/cmds/wiz/flist.c @@ -1,11 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: flist [-i] +// USAGE: ``flist [-i] `` // // Shows you a list of the functions in an object. // The -i option will show you the function and // where it is found. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/goto.c b/lib/cmds/wiz/goto.c index 03eb90b7..23b5d9bc 100644 --- a/lib/cmds/wiz/goto.c +++ b/lib/cmds/wiz/goto.c @@ -4,20 +4,24 @@ //: COMMAND //$$ see: wizz, trans -// USAGE: goto -// goto +// USAGE: +// +// |``goto `` +// | ``goto // The goto command is a simple method of teleportation which can move you // either to a specific room or to whatever room a certain player is in. // // If the room is in your current directory, // the filename indicates the destination. // -// eg goto workroom.c +// eg ``goto workroom.c`` // // If the room is not in your current directory, // the full path (/directory/filename) format should be used. // -// eg goto /wiz/azy/workroom.c +// eg ``goto /wiz/azy/workroom.c`` +// +// .. TAGS: RST #include #include diff --git a/lib/cmds/wiz/governance.c b/lib/cmds/wiz/governance.c new file mode 100644 index 00000000..67b88c84 --- /dev/null +++ b/lib/cmds/wiz/governance.c @@ -0,0 +1,141 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +// Tsath 2024 + +//: COMMAND +// USAGE ``governance`` +// +// Shows leaders and manager for all guilds on the MUD. +// Can also set managers and leaders. Use: +// +// governance +// +// and follow the prompts. +// +// .. TAGS: RST + +inherit CMD; +inherit M_INPUT; + +#define PROMPT "[larpq]>" + +private +mapping leaders; +private +mapping managers; +private +string *guilds; + +private +int valid_entry(string s) +{ + return member_array(s, ({"l", "r", "a", "q", "p"})) != -1; +} + +private +void print_prompt() +{ + out("Options:\n\tl - change leader a - add manager r - remove manager\n\tp - print all guilds q - quit"); +} + +private +string print_guild(string g) +{ + string output = ""; + output += "<154>[" + upper_case(g) + "] - members online: " + sizeof(GUILD_D->belongs_to(g)) + "\n"; + output += "\t<226>Leader: " + (leaders[g] ? capitalize(leaders[g]) : "None") + "\n"; + output += "\t<226>Managers: " + + (managers[g] ? implode(map(managers[g], ( + : capitalize($1) + :)), + ", ") + : "None") + + "\n"; + output += "\n"; + return output; +} + +private +cache_governance() +{ + leaders = GOVERNANCE_D->copy_leaders(); + managers = GOVERNANCE_D->copy_managers(); + guilds = clean_array(keys(leaders) + keys(managers) + GUILD_D->query_guilds()); +} + +private +void print_guilds() +{ + foreach (string g in guilds) + write(print_guild(g)); +} + +private +varargs void gather_info(string g, int step, string last, string s) +{ + // TBUG("Guild: "+g + " Step: " + step + " Last: " + last + " String: " + s); + switch (step) + { + case 0: + write(print_guild(g)); + print_prompt(); + break; + case 1: + if (!valid_entry(s)) + { + if (strlen(s)) + write("** Invalid option '" + s + "', 'q' to quit.\n"); + modal_simple(( : gather_info, g, 1, "" :), PROMPT); + return; + } + if (s == "p") + { + print_guilds(); + modal_simple(( : gather_info, g, 1, "" :), PROMPT); + return; + } + if (s == "q") + return; + modal_simple(( : gather_info, g, 2, s:), "Enter name >"); + break; + case 2: + if (last == "l") + { + GOVERNANCE_D->set_leader(g, s); + write("Leader for " + g + " set to " + s + "."); + } + else if (last == "a") + { + GOVERNANCE_D->add_manager(g, s); + write("Manager " + s + " added to " + g + "."); + } + else if (last == "r") + { + if (GOVERNANCE_D->remove_manager(g, s)) + write("Manager " + s + " removed from " + g + "."); + else + write("** Failed to remove manager " + s + " from " + g + "."); + } + + cache_governance(); + gather_info(g, 0, ""); + modal_simple(( : gather_info, g, 1, "" :), PROMPT); + break; + } +} + +void main(string arg) +{ + + // ### Ew, globals + cache_governance(); + + if (strlen(arg) && member_array(arg, guilds) != -1) + { + gather_info(arg, 0, ""); + modal_simple(( : gather_info, arg, 1, "" :), PROMPT); + return; + } + + print_guilds(); +} diff --git a/lib/cmds/wiz/halt.c b/lib/cmds/wiz/halt.c index 5a26690c..1f5b402a 100644 --- a/lib/cmds/wiz/halt.c +++ b/lib/cmds/wiz/halt.c @@ -1,9 +1,11 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: halt +// USAGE: ``halt`` // // Stops all combat in the room +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/heal.c b/lib/cmds/wiz/heal.c index e8992e85..0ae322f3 100644 --- a/lib/cmds/wiz/heal.c +++ b/lib/cmds/wiz/heal.c @@ -1,9 +1,11 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: heal +// USAGE: ``heal `` // // Completely heals the targetted player. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/here.c b/lib/cmds/wiz/here.c index f7ac8770..4fcca9b0 100644 --- a/lib/cmds/wiz/here.c +++ b/lib/cmds/wiz/here.c @@ -16,14 +16,16 @@ // 2 years later) //: COMMAND -// USAGE: here +// USAGE: ``here`` // // This command shows you the pathname to the file of the object // you are currently in. // -// here +// ``here`` // // Grand Hall: [/domains/std/wizroom +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/home.c b/lib/cmds/wiz/home.c index 084c9b1d..8d5ec454 100644 --- a/lib/cmds/wiz/home.c +++ b/lib/cmds/wiz/home.c @@ -3,14 +3,18 @@ /* Megaboz's attempt at a home cmd 4-23-94 */ //: COMMAND -// USAGE: home -// home +// USAGE: +// +// | ``home`` +// | ``home `` // // This command will take you to your workroom assuming that there is // a file called workroom.c in your home directory. // If you do not have a workroom you will be placed in a "virtual" // temporary workroom. // You can also go to another wizards workroom by home , +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/idfind.c b/lib/cmds/wiz/idfind.c index 0ecda3a7..b160821b 100644 --- a/lib/cmds/wiz/idfind.c +++ b/lib/cmds/wiz/idfind.c @@ -9,10 +9,13 @@ */ //: COMMAND -// USAGE idfind +// USAGE +// ``idfind `` // // Lists all objects in the mud with the specified id, // together with their location. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/iftp.c b/lib/cmds/wiz/iftp.c index 6f23d42d..9e96ac5d 100644 --- a/lib/cmds/wiz/iftp.c +++ b/lib/cmds/wiz/iftp.c @@ -7,9 +7,11 @@ */ //: COMMAND -// USAGE iftp +// USAGE ``iftp `` // // Invokes the intermud ftp client. +// +// .. TAGS: RST inherit CMD; inherit M_COMPLETE; diff --git a/lib/cmds/wiz/ilocate.c b/lib/cmds/wiz/ilocate.c index ad5b6e42..5e5dfd46 100644 --- a/lib/cmds/wiz/ilocate.c +++ b/lib/cmds/wiz/ilocate.c @@ -1,11 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: ilocate +// USAGE: ``ilocate `` // // Sends out a "locate query" over intermud. // If the player is present another mud currently connected to intermud, // a reply is sent (subject to that mud's treatment of invisibility etc). +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/invis.c b/lib/cmds/wiz/invis.c index 2e3f646a..c423c56e 100644 --- a/lib/cmds/wiz/invis.c +++ b/lib/cmds/wiz/invis.c @@ -4,12 +4,14 @@ //: COMMAND //$$ see: vis -// USAGE: invis +// USAGE: ``invis`` // // This command will let you turn invisible to players // This is not intended as a "foolproof" way to be invisible. // If you want to make sure players can't interrupt you while you work, // either work offline or enforce a strict "do not disturb" policy. +// +// .. TAGS: RST #include #include diff --git a/lib/cmds/wiz/killmobs.c b/lib/cmds/wiz/killmobs.c index a225861e..812fe158 100644 --- a/lib/cmds/wiz/killmobs.c +++ b/lib/cmds/wiz/killmobs.c @@ -3,9 +3,11 @@ // Tsath @ Nuke 2, 2020 //: COMMAND -// USAGE killmobs +// USAGE ``killmobs`` // // Kill mobs by name +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/last.c b/lib/cmds/wiz/last.c index f3d12692..147877a4 100644 --- a/lib/cmds/wiz/last.c +++ b/lib/cmds/wiz/last.c @@ -9,14 +9,14 @@ */ //: COMMAND -// USAGE: last [-s] [-n count] [-d days] [-D days] [user1 user2 ...] +// USAGE: ``last [-s] [-n count] [-d days] [-D days] [user1 user2 ...]`` // -// -s : be "silent" -- trim headers, displaying just the data -// -n count : only display this many users (the most recent) -// -d days : display users logged in WITHIN this many days -// -D days : display users logged in OLDER than this many days +// | -s : be "silent" -- trim headers, displaying just the data +// | -n count : only display this many users (the most recent) +// | -d days : display users logged in WITHIN this many days +// | -D days : display users logged in OLDER than this many days // -// user... : display login information for these users +// | user... : display login information for these users // // Note that the options can be combined, but you'll get an error if you // use -d and -D to, say, ask for all users logged in during the past 30 @@ -25,6 +25,8 @@ // For each user found, their name is displayed, when they // logged in, if they are still on or when they logged out, and where they // connected from. +// +// .. TAGS: RST inherit CMD; inherit M_WIDGETS; @@ -79,7 +81,8 @@ void main(mixed *arg, mapping flags) times = filter(LAST_LOGIN_D->query_times(), ( : $1[0] >= $(minimum) && $1[0] <= $(maximum) :)); if (!flags["s"]) - outf("%d users. %s to %s.\n%s", sizeof(times), ctime(minimum), ctime(maximum), simple_divider()); + outf("%d users. %s to %s.\n%s", sizeof(times), minimum == 0 ? "From the beginning of time" : ctime(minimum), + ctime(maximum), simple_divider()); if (!flags["s"] && count && sizeof(times) > count) outf("... skipping %d users.\n", sizeof(times) - count); diff --git a/lib/cmds/wiz/lightme.c b/lib/cmds/wiz/lightme.c index 6d0f3d4b..d867aa84 100644 --- a/lib/cmds/wiz/lightme.c +++ b/lib/cmds/wiz/lightme.c @@ -1,7 +1,7 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: lightme +// USAGE: ``lightme `` // // This command will allow any wizard to turn himself into a light source, // thus illuminating any dark room he is in. @@ -11,6 +11,8 @@ // The number 1 should suffice to illuminate dark rooms, and -1 to darken // lit ones (unless another wizard is present, trying the same thing). // To clear the effect, use "lightme 0". +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/lima.c b/lib/cmds/wiz/lima.c new file mode 100644 index 00000000..023441ca --- /dev/null +++ b/lib/cmds/wiz/lima.c @@ -0,0 +1,62 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: COMMAND +//$$ see: I, didlog +// USAGE: +// +// | ``lima`` +// | ``lima /versions`` +// | ``lima `` +// | ``lima `` +// +// Shows you the versions of the LIMA mudlib that you have change +// information about. Use the /versions to see a version list, and +// add a version number to get a dump of all the changes in that +// verison. +// +// .. TAGS: RST + +#include + +inherit CMD; + +private +void main(string str) +{ + string header; + string pattern; + string version; + + if (str == "help" || str == "/help" && this_body()) + { + out("lima:\n" + "\tlima - Show the versions stored.\n" + + "\tlima - Show all changes in that matches .\n" + + "\tlima - Show all changes in .\n"); + return; + } + else if (str && sscanf(str, "%s", version) == 1) + { + sscanf(str, "%s %s", version, pattern); + + if (member_array(version, LIMA_D->versions()) == -1) + { + out("Unknown LIMA version '" + version + "'."); + return; + } + } + else if (!version) + { + out("The following LIMA versions are known: \n\t" + implode(sort_array(LIMA_D->versions(), 1), "\n\t") + "\n"); + return; + } + else + { + out("Please specify version."); + return; + } + + header = "LIMA changes " + (version ? " for " + version : ""); + + out(LIMA_D->get_did_info(time() + 10000, ({header, repeat_string("-", sizeof(header)), ""}), pattern, 0, version)); +} diff --git a/lib/cmds/wiz/livings.c b/lib/cmds/wiz/livings.c index 01e0ad28..e021682c 100644 --- a/lib/cmds/wiz/livings.c +++ b/lib/cmds/wiz/livings.c @@ -3,9 +3,11 @@ // Tsath @ Nuke 2, 2020 //: COMMAND -// USAGE livings +// USAGE ``livings`` // // Give a count of living things (not players) on the MUD grouped by filename. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/msg.c b/lib/cmds/wiz/msg.c index a52775f8..a63f5b1a 100644 --- a/lib/cmds/wiz/msg.c +++ b/lib/cmds/wiz/msg.c @@ -2,8 +2,10 @@ //: COMMAND //$$ see: m_messages, review -// USAGE: msg clear -// msg +// USAGE: +// +// |``msg clear`` +// | ``msg // // This command allows you to change your default messages. You can // add more than one message for each message type. When you use the @@ -14,14 +16,16 @@ // option. You will not be able to remove a particular message from a group // of messages. // -// msg clone clear +// ``msg clone clear`` // // This will remove all messages from the type clone. // -// msg clone $N $vreach back to $p workroom and $vgrab $o. +// ``msg clone $N $vreach back to $p workroom and $vgrab $o.`` // // Next time you use clone, you will see the above message. // If you do the above again you will add another message. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/mudinfo.c b/lib/cmds/wiz/mudinfo.c index c3934ca1..aeff2f44 100644 --- a/lib/cmds/wiz/mudinfo.c +++ b/lib/cmds/wiz/mudinfo.c @@ -2,25 +2,25 @@ //: COMMAND //$$see: mudlist -// USAGE: mudinfo +// USAGE: ``mudinfo `` // // This command will give you specific information about a mud. // -// mudinfo ideaexchange +// ``mudinfo ideaexchange`` // -// I d e a E x c h a n g e -//___________________________________ -// Type: LPMud -// Address: 199.199.122.10 7890 -// Current Mudlib: Foundation IIr1 -// Base Mudlib: Foundation IIr1 -// Status: Up -// Open Status: open for public -// TCP Imud port: 7895 -// UDP Imud port: 7898 -// Services available: tell, who, rcp, http, locate, ftp, channel, finger +// | I d e a E x c h a n g e +// | ___________________________________ +// | Type: LPMud +// | Address: 199.199.122.10 7890 +// | Current Mudlib: Foundation IIr1 +// | Base Mudlib: Foundation IIr1 +// | Status: Up +// | Open Status: open for public +// | TCP Imud port: 7895 +// | UDP Imud port: 7898 +// | Services available: tell, who, rcp, http, locate, ftp, channel, finger // -// Driver: MudOS v21.6a10 +// | Driver: MudOS v21.6a10 // // This command can also be accessed through the menu. // @@ -29,6 +29,8 @@ // The information is saved, so it is not necessary for either mud to be // currently connected, but the information could be out-of-date in such // circumstances. +// +// .. TAGS: RST inherit CMD; inherit M_REGEX; diff --git a/lib/cmds/wiz/mvemote.c b/lib/cmds/wiz/mvemote.c index 786b89a0..c8a5b410 100644 --- a/lib/cmds/wiz/mvemote.c +++ b/lib/cmds/wiz/mvemote.c @@ -1,11 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: mvemote +// USAGE: ``mvemote `` // // Moves (ie renames) the specified soul to the specified destination. // // NOTE This is admin-only. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/netstat.c b/lib/cmds/wiz/netstat.c index 7ca00843..ac823ccd 100644 --- a/lib/cmds/wiz/netstat.c +++ b/lib/cmds/wiz/netstat.c @@ -1,9 +1,12 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: netstat +//$$ see: socketinfo +// USAGE: ``netstat`` // // Displays a list of sockets with (stat) info on each one. +// +// .. TAGS: RST inherit CMD; @@ -11,7 +14,7 @@ private void main() { object *sockets; - //Do not return output with emojis and ANSI + // Do not return output with emojis and ANSI set_output_flags(NO_ANSI); sockets = children(SOCKET); @@ -22,6 +25,6 @@ void main() else { for (int i = 0; i < sizeof(sockets); i++) - out(""+sockets[i]->stat_me()); + out("" + sockets[i]->stat_me()); } } diff --git a/lib/cmds/wiz/null.c b/lib/cmds/wiz/null.c index 46cf2124..5088e9c0 100644 --- a/lib/cmds/wiz/null.c +++ b/lib/cmds/wiz/null.c @@ -1,9 +1,11 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE null +// USAGE ``null`` // // Does nothing at all ..... +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/objcount.c b/lib/cmds/wiz/objcount.c index 1a71465f..4edea8b1 100644 --- a/lib/cmds/wiz/objcount.c +++ b/lib/cmds/wiz/objcount.c @@ -10,8 +10,10 @@ //: COMMAND //$$ see: objdump, objfind -// USAGE: objcount -// objcount +// USAGE: +// +// | ``objcount +// | ``objcount // // This command is used to find objects that have more than one instance. // The number of instances (including blueprint) for each qualifying item @@ -22,7 +24,9 @@ // // When the optional "minimum" parameter is used, this ignores any items // where the number of instances (excluding blueprint) is less than the number -// Thus "objcounts 2" lists items with 3 or more non-blueprint instances, +// Thus "``objcounts 2``" lists items with 3 or more non-blueprint instances, +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/objfind.c b/lib/cmds/wiz/objfind.c index 2c959cb9..278d4d06 100644 --- a/lib/cmds/wiz/objfind.c +++ b/lib/cmds/wiz/objfind.c @@ -10,7 +10,7 @@ //: COMMAND //$$ see: objdump, objcount, idfind -// USAGE: objfind +// USAGE: ``objfind `` // // This command is used to find all the instances of objects with a given filename. // This is very handy in tracking down where certain items are, @@ -18,7 +18,9 @@ // // Example: // -//> objfind /gue/zork1/trophy_case +//> ``objfind /gue/zork1/trophy_case`` +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/parse.c b/lib/cmds/wiz/parse.c index e079b419..432abc52 100644 --- a/lib/cmds/wiz/parse.c +++ b/lib/cmds/wiz/parse.c @@ -5,16 +5,18 @@ // Interface to the parse_sentence() debug info //: COMMAND -// USAGE: parse +// USAGE: ``parse `` // // Interface to the parse_sentence() debug info. // Requires the debugging options to be compiled into the driver -//(eg by "./build.MudOS debug"). +//(eg by "*./build.MudOS debug*"). // // Displays results of all the parser checks on the verb - which // rule(s) it matches, and results of the can_, direct_ and indirect_ // checks as appropriate, which helps determine where it fails and // hence why "You can't do that (with that)" +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/people.c b/lib/cmds/wiz/people.c index 6e97091f..99a49310 100644 --- a/lib/cmds/wiz/people.c +++ b/lib/cmds/wiz/people.c @@ -6,52 +6,55 @@ */ //: COMMAND -// syntax: people [flags] +// syntax: ``people [flags]`` // // Shows a list of players and associated info, with the flags determining // which players and info are included // // Instead of calling the cmd with flags you can do: -//'set people_flags [flags]' the flags that you appoint will be automatically +//``set people_flags [flags]`` the flags that you appoint will be automatically // used as your default arguments when the command is called. // // ex: -//'set people_flags hpnI' +//``set people_flags hpnI`` // or -//'people hpnI' +//``people hpnI`` // // The available flags are as follows. -//-------------------------------------------------------------------------- -// W -This flag will show wizards only. It will not print anything, it just -// filters the users and removes anyone without wizard status. -// P -This flag shows players only. Another filter, this command just removes -// any wizards from the who list. -// A -This flag shows admins (demigods or Gods) only. -// D -This flag adds an informative line of info triggered by other flags, fex. -// if your command supports the 'W' flag the info line would print: -// 'Wizards only' -// -----------------------------------------~ -// -// -----------------------------------------~ +// | -------------------------------------------------------------------------- +// | W -This flag will show wizards only. It will not print anything, it just +// | filters the users and removes anyone without wizard status. +// | P -This flag shows players only. Another filter, this command just removes +// | any wizards from the who list. +// | A -This flag shows admins (demigods or Gods) only. +// | D -This flag adds an informative line of info triggered by other flags, fex. +// | if your command supports the 'W' flag the info line would print: +// | 'Wizards only' +// | -----------------------------------------~ +// | +// | -----------------------------------------~ // -// above the list of all the wizards logged on. -// h -Huge header. Lists mudname and time on a header 3 lines wide. Automatically -// appended at the top of the list. -// H -Small header. List mudname and time on a header 1 line wide. Automatically -// appended to the top of the list. -// l -level of player -// n -Prints the users login name without titles. -// t -Prints the users name and title. -// p -Prints positions, God, Avatar, Demigod, player, ect. +// | above the list of all the wizards logged on. +// | h -Huge header. Lists mudname and time on a header 3 lines wide. Automatically +// | appended at the top of the list. +// | H -Small header. List mudname and time on a header 1 line wide. Automatically +// | appended to the top of the list. +// | l -level of player +// | n -Prints the users login name without titles. +// | t -Prints the users name and title. +// | p -Prints positions, God, Avatar, Demigod, player, ect. // -//-WIZARD ONLY FLAGS- -// w -Prints brief description of the users enviroment. -// f -Prints filename of the users environment. -// a -Prints either player, wizard or admin titles only. -// u -Prints username of body. -// i -Prints idle times of people logged on. -// I -Prints IP/hostnames of people logged on. -// F -Prints an 'I' if a person is idle, and an 'E' if the person is editing. +// | -WIZARD ONLY FLAGS- +// | ------------------------------------------------------------------------- +// | w -Prints brief description of the users enviroment. +// | f -Prints filename of the users environment. +// | a -Prints either player, wizard or admin titles only. +// | u -Prints username of body. +// | i -Prints idle times of people logged on. +// | I -Prints IP/hostnames of people logged on. +// | F -Prints an 'I' if a person is idle, and an 'E' if the person is editing. +// +// .. TAGS: RST #include #include @@ -73,6 +76,8 @@ string get_who_string(string arg) string header = ""; int first_run = 1; int debug; + int path_mod = 20; + int env_mod = 25; object *b = bodies() - ({0}); string bad_flags = ""; string *args = ({}); @@ -157,20 +162,26 @@ string get_who_string(string arg) break; if (first_run) header += sprintf("%-25.25s", "Environment"); - content += sprintf("%-25.25s ", environment(body) ? environment(body)->get_brief() : "(Nowhere)"); + if (env_mod == 25 && strlen(header) + 30 < this_user()->query_screen_width()) + { + header = replace_string(header, "Environment", sprintf("%-31s", "Environment")); + env_mod = 45; + } + content += sprintf("%-" + env_mod + "." + env_mod + "s ", + environment(body) ? environment(body)->get_brief() : "(Nowhere)"); break; case "f": if (!wizardp(this_user())) break; if (first_run) header += sprintf("%-20s ", "Path"); - content += sprintf( - "%-20s ", - environment(body) - ? filepath_ellipsis( - replace_string(replace_string(file_name(environment(body)), "/domains/", "^"), "/wiz/", "~"), - 20) - : "(lost?)"); + if (path_mod == 20 && strlen(header) + 30 < this_user()->query_screen_width()) + { + header = replace_string(header, "Path", sprintf("%-24s", "Path")); + path_mod = 40; + } + content += sprintf("%-" + path_mod + "s ", + environment(body) ? filename_ellipsis((environment(body)), path_mod) : "(lost?)"); break; case "t": DEBUG("Titles"); @@ -180,7 +191,7 @@ string get_who_string(string arg) if (first_run) header += sprintf("%-14.14s ", "Position"); DEBUG("Position"); - content += sprintf("%-14.14s ", body->query_wiz_position() ? body->query_wiz_position() : "(None)"); + content += sprintf(" %-14.14s ", body->query_wiz_position() ? body->query_wiz_position() : "(None)"); break; case "u": #ifdef USE_USER_MENU @@ -208,7 +219,7 @@ string get_who_string(string arg) break; DEBUG("Idle times"); if (first_run) - header += sprintf("%-8.8s", "Idle"); + header += sprintf("%-8.8s ", "Idle"); content += sprintf("%-8.8s ", query_idle(body->query_link()) ? convert_time(query_idle(body->query_link()), 2) : ""); break; diff --git a/lib/cmds/wiz/print.c b/lib/cmds/wiz/print.c index 4ba0e346..5800c5bd 100644 --- a/lib/cmds/wiz/print.c +++ b/lib/cmds/wiz/print.c @@ -1,14 +1,16 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE print +// USAGE ``print `` // // Rarely used as "print", but extremely useful in the aliased form @ //(or eval) for print `$*` which evaluates the string and displays the result. // -//>@ANSI_D +//>``@ANSI_D`` // -// would return /daemons/ansi_d.c +// would return */daemons/ansi_d.c* +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/privs.c b/lib/cmds/wiz/privs.c index 20698192..1d7718cb 100644 --- a/lib/cmds/wiz/privs.c +++ b/lib/cmds/wiz/privs.c @@ -1,15 +1,17 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: privs +// USAGE: ``privs `` // // Used to display privs (which for the basis of the Lima security system)- ie // the privs needed by a wizard to read/write the specified directory. // -//>privs /cmds/verbs +// >``privs /cmds/verbs`` // // Read: 0 // Write: "Mudlib:verbs" +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/profile.c b/lib/cmds/wiz/profile.c index b51a2f1c..a491ba8f 100644 --- a/lib/cmds/wiz/profile.c +++ b/lib/cmds/wiz/profile.c @@ -1,28 +1,32 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE profile -// profile -// profile -total -// profile all +// USAGE +// +// |``profile`` +// | ``profile `` +// | ``profile -total `` +// | ``profile all`` // // This displays time taken processing specified functions. // To use this, the driver must be compiled with the PROFILE_FUNCTIONS option // defined (in local_options). // -// Using profile without any argument displays the "top 10" objects, +// Using ``profile`` without any argument displays the "top 10" objects, // together with the total time taken executing functions within them. // -// Using profile displays the time taken in each individual function +// Using ``profile `` displays the time taken in each individual function // within the specified object, split betwen "self" and "children", together // with the number of calls involved. // -// Using profile -total produces a similar display, but sorted on the +// Using ``profile -total `` produces a similar display, but sorted on the //"Total" column rather than "Self" // -// The "profile all" option is likely to produce a "Too long evaluation" error, +// The "``profile all``" option is likely to produce a "Too long evaluation" error, // unless you increase the max eval cost, but it should provide details of // time taken by functions in the 20 "worst" objects. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/pwd.c b/lib/cmds/wiz/pwd.c index 975ba4ab..1367d603 100644 --- a/lib/cmds/wiz/pwd.c +++ b/lib/cmds/wiz/pwd.c @@ -3,13 +3,15 @@ // Rust/Belboz //: COMMAND -// USAGE: pwd +// USAGE: ``pwd`` // // Shows you what directory you are currently "in". // -// pwd +// ``pwd`` // -// /wiz/zifnab/obj +// */wiz/zifnab/obj* +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/quiet.c b/lib/cmds/wiz/quiet.c new file mode 100644 index 00000000..897c86bb --- /dev/null +++ b/lib/cmds/wiz/quiet.c @@ -0,0 +1,41 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +// Davmar/Nevyn + +//: COMMAND +// USAGE: ``quiet `` +// +// This command silences an NPC in the room you are in if they use M_ACTIONS for +// all their chatter. +// +// .. TAGS: RST + +inherit CMD; + +private +void main(mixed *arg) +{ + object ob; + + ob = arg[0]; + + //Doesn't work on people + if (ob->is_body()) + { + outf("Making %s quiet is beyond your powers.", ob->short()); + return; + } + + //May not have actions. + if (!arrayp(ob->query_actions())) + { + outf("%s is already quiet.", ob->short()); + return; + + } + ob->stop_actions(); + ob->set_actions(100, 0); + outf("%s has been quieted.", ob->short()); + + return; +} diff --git a/lib/cmds/wiz/resurrect.c b/lib/cmds/wiz/resurrect.c index 36c23061..c003734a 100644 --- a/lib/cmds/wiz/resurrect.c +++ b/lib/cmds/wiz/resurrect.c @@ -1,10 +1,14 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE resurrect -// resurrect me!myself +// USAGE +// +// | ``resurrect `` +// | ``resurrect me!myself`` // // Brings a dead player back to life +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/review.c b/lib/cmds/wiz/review.c index 52e6eed5..a6d36522 100644 --- a/lib/cmds/wiz/review.c +++ b/lib/cmds/wiz/review.c @@ -5,12 +5,14 @@ //: COMMAND //$$ see: m_messages, msg -// USAGE: review -// review < playername > +// USAGE: +// +// | ``review`` +// | ``review < playername >`` // // This command with no arguments will show you all your messages. // It can also be used to display the messages of another player, -// by using "review " where is that player's name (lower case). +// by using ``review `` where is that player's name (lower case). // // review // @@ -24,6 +26,8 @@ // vis: [$N $vfade into view.] You fade into view. // invis: [$N $vfade from view.] You fade from view. // menter: [$N $vappear in a puff of smoke.] You appear in a puff of smoke. +// +// .. TAGS: RST inherit CMD; inherit M_MESSAGES; diff --git a/lib/cmds/wiz/rmemote.c b/lib/cmds/wiz/rmemote.c index 5c3a6802..658f9111 100644 --- a/lib/cmds/wiz/rmemote.c +++ b/lib/cmds/wiz/rmemote.c @@ -2,20 +2,24 @@ //: COMMAND //$$ see: feelings, m_messages, addemote, showemote, stupidemote, targetemote -// USAGE: rmemote -// rmemote +// USAGE: +// +// | ``rmemote `` +// | ``rmemote `` // // This command allows you to remove an emote entirely, or in part // by removing just a particular rule. // -// rmemote kick +// ``rmemote kick`` // // this will remove the entire emote kick and all its rules. // -// rmemote kick LIV +// ``rmemote kick LIV`` // // this will remove only the rule and message for the LIV part of kick // It will leave all other rules as is. +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/scan.c b/lib/cmds/wiz/scan.c index 6f44c99b..9ea4b272 100644 --- a/lib/cmds/wiz/scan.c +++ b/lib/cmds/wiz/scan.c @@ -2,10 +2,15 @@ //: COMMAND // Wizard command "scan" -// list the filenames of objects in an inventory. -// optional flag -d for "deep" scan (ie recursive) -// usage : "scan [-d]" to scan environment -// "scan [-d] ob" to scan object "ob" +// USAGE: +// +// | ``"scan [-d]" to scan environment`` +// | ``"scan [-d] ob" to scan object "ob"`` +// +// List the filenames of objects in an inventory. +// optional flag -d for "deep" scan (ie recrusive) +// +// .. TAGS: RST // Peregrin@ZorkMUD // Updated 1995/10/9 by Ohara, @@ -16,11 +21,6 @@ inherit CMD; #define PAD " " -string better_filename(string s) -{ - return replace_string(replace_string(s, "/domains/", "^"), "/wiz/", "~"); -} - // scan the inventory of an object. string scan_object(object ob, int depth, int deep_scan) { @@ -40,7 +40,7 @@ string scan_object(object ob, int depth, int deep_scan) l = sizeof(inv); while (l--) { - retstr += pad + better_filename(file_name(inv[l])) + " -> " + + retstr += pad + shorten_filename(file_name(inv[l])) + " -> " + ((tempstr = inv[l]->short()) ? "\"" + tempstr + "\" " : "[no short]") + "\n" + (deep_scan ? scan_object(inv[l], depth + 1, deep_scan) : ""); } diff --git a/lib/cmds/wiz/scripts.c b/lib/cmds/wiz/scripts.c new file mode 100644 index 00000000..59811918 --- /dev/null +++ b/lib/cmds/wiz/scripts.c @@ -0,0 +1,43 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +//: COMMAND +// USAGE: ``scripts`` +// +// Shows status of scripted NPCs. +// +// .. TAGS: RST + +inherit CMD; +inherit M_WIDGETS; + +private +void main(string str) +{ + + object *scripted = filter(objects(), ( : $1->query_running_script() && clonep($1) :)); + + if (!sizeof(scripted)) + { + printf("Currently, there are no scripts running."); + return; + } + + printf("%-20.20s %-30.30s %-14.14s %-8.8s %s", "Who", "Env", "Script", "Type", "Status"); + foreach (object s in scripted) + { + string name = s->short(); + string env = environment(s) ? environment(s)->short() : "Nowhere"; + string bar = repeat_string(" ", 30); + string script = ""; + string type; + int *status = s->status(); + if (status) + { + script = s->query_running_script(); + type = s->current_step(); + bar = green_bar(status[0], status[1], 30); + printf("%-20.20s %-30.30s %-14.14s %-8.8s %s %s", name, env, script, type, bar, + "[" + status[0] + "/" + status[1] + "]"); + } + } +} diff --git a/lib/cmds/wiz/showemote.c b/lib/cmds/wiz/showemote.c index 1e77fbbf..c2477cd0 100644 --- a/lib/cmds/wiz/showemote.c +++ b/lib/cmds/wiz/showemote.c @@ -2,16 +2,18 @@ //: COMMAND //$$ see: feelings, m_messages, addemote, rmemote, stupidemote, targetemote -// USAGE: showemote +// USAGE: ``showemote `` // // This will show all the rules and messages for the given soul // -//>showemote kick +// >``showemote kick`` // -//"OBJ" -> $N $vkick the $o. -//"LIV" -> $N $vkick $t. -//"LIV LIV" -> "$N $vjump up in the air and $vkick $n1 and $n2 //simultaneously. -//"LIV STR" -> $N $vkick $t $o. +// | "OBJ" -> $N $vkick the $o. +// | "LIV" -> $N $vkick $t. +// | "LIV LIV" -> "$N $vjump up in the air and $vkick $n1 and $n2 //simultaneously. +// | "LIV STR" -> $N $vkick $t $o. +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/showexits.c b/lib/cmds/wiz/showexits.c index f280d4c4..a05646c6 100644 --- a/lib/cmds/wiz/showexits.c +++ b/lib/cmds/wiz/showexits.c @@ -1,17 +1,19 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: showexits +// USAGE: ``showexits`` // // Used with no arguments, this command shows you the possible // exits from the room you are currently in, with the path name of the // room. // -//> showexits +// > ``showexits // Current exits: -// south: Monster Room (/domains/std/monster_room.c) -// west: Quiet Room (/domains/std/quiet_room.c) -// east: Example Room (/domains/std/example_room1.c) +// south: Monster Room (*/domains/std/monster_room.c*) +// west: Quiet Room (*/domains/std/quiet_room.c*) +// east: Example Room (*/domains/std/example_room1.c*) +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/showtree.c b/lib/cmds/wiz/showtree.c index 68480d90..6a0d89e5 100644 --- a/lib/cmds/wiz/showtree.c +++ b/lib/cmds/wiz/showtree.c @@ -5,27 +5,31 @@ inherit CMD; //: COMMAND -// USAGE: showtree -// showtree +// USAGE: +// +// | ``showtree `` +// | ``showtree `` // // Displays the location(s) of the specified function in the specified // object, together with any intermediate inheritance. // // If used without function nams, it displays the full inheritance tree. // -//>showtree long here +// >``showtree long here`` // -// Tracing definitions of long in /domains/std/Wizroom.c -/// domains/std/Wizroom.c -// /std/indoor_room.c -// /std/base_room.c +// Tracing definitions of long in */domains/std/Wizroom.c* +// */domains/std/Wizroom.c* +// */std/indoor_room.c* +// */std/base_room.c* // [defined] -// /std/container.c +// */std/container.c* // [defined] -// /std/object.c -// /std/base_obj.c -// /std/object/description.c +// */std/object.c* +// */std/base_obj.c* +// */std/object/description.c* // [defined] +// +// .. TAGS: RST varargs string print_tree(string file, string func, int indent) { diff --git a/lib/cmds/wiz/smartmobs.c b/lib/cmds/wiz/smartmobs.c index 09baa22c..04d154b8 100644 --- a/lib/cmds/wiz/smartmobs.c +++ b/lib/cmds/wiz/smartmobs.c @@ -1,5 +1,13 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ +//: COMMAND +// USAGE: ``smartmobs`` +// +// Shows what the mob is thinking about and where they are +// located. +// +// .. TAGS: RST + inherit CMD; private diff --git a/lib/cmds/wiz/socketinfo.c b/lib/cmds/wiz/socketinfo.c index 5afb38f7..81158c06 100644 --- a/lib/cmds/wiz/socketinfo.c +++ b/lib/cmds/wiz/socketinfo.c @@ -2,21 +2,22 @@ //: COMMAND //$$ see: netstat -// USAGE socketinfo +// USAGE: ``socketinfo`` // // Displays details of sockets +// +// .. TAGS: RST inherit CMD; private void main(string str) { - string *lines = explode(dump_socket_status(), "\n"); - string line; - - foreach (line in lines) + string ret = "Fd State Mode Local Address Remote Address\n" + "-- --------- -------- --------------------- ---------------------\n"; + foreach (mixed *item in socket_status()) { - if (line[0..1] != "-1") - out(line + "\n"); + ret += sprintf("%2d %|9s %|8s %-21s %-21s\n", item[0], item[1], item[2], item[3], item[4]); } + write(ret); } diff --git a/lib/cmds/wiz/start.c b/lib/cmds/wiz/start.c index 36c41d42..5f81c796 100644 --- a/lib/cmds/wiz/start.c +++ b/lib/cmds/wiz/start.c @@ -3,17 +3,21 @@ // Rust //: COMMAND -// USAGE: start -// start +// USAGE: +// +// | ``start`` +// | ``start `` // // This command will show you where you are currently starting // or allow you to change your start location if you supply it with a path. // -// start +// ``start`` // You start at: /wiz/zifnab/workroom // -// start /domains/std/wizroom +// ``start /domains/std/wizroom`` // OK, you now start at: /domains/std/wizroom +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/status.c b/lib/cmds/wiz/status.c index 936b5199..c1a78858 100644 --- a/lib/cmds/wiz/status.c +++ b/lib/cmds/wiz/status.c @@ -1,9 +1,11 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: status +// USAGE: ``status`` // // Displays detailed info on system resources used. +// +// .. TAGS: RST #define DELIM write(repeat_string("-", 70) + "\n") diff --git a/lib/cmds/wiz/stupidemote.c b/lib/cmds/wiz/stupidemote.c index 020d8cf1..f9f69aa6 100644 --- a/lib/cmds/wiz/stupidemote.c +++ b/lib/cmds/wiz/stupidemote.c @@ -2,16 +2,18 @@ //: COMMAND //$$ see: feelings, m_messages, addemote, showemote, rmemote, targetemote -// USAGE: stupidemote +// USAGE: ``stupidemote `` // // This command will add an emote with default rules of "" and "SR". // -// stupidemote cry +// ``stupidemote cry`` // -// If you then do a showemote cry +// If you then do a ``showemote cry`` // -// "" -> $N $vcry. -// "STR" -> $N $vcry $o. +// | "" -> $N $vcry. +// | "STR" -> $N $vcry $o. +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/targetemote.c b/lib/cmds/wiz/targetemote.c index a26ab6d3..688bb054 100644 --- a/lib/cmds/wiz/targetemote.c +++ b/lib/cmds/wiz/targetemote.c @@ -2,20 +2,22 @@ //: COMMAND //$$ see: feelings, m_messages, addemote, rmemote, showemote, stupidemote -// USAGE: targetemote +// USAGE: ``targetemote`` // // This command will create a default emote with the following rules; // LIV, OBJ, STR, "" // -//>targetemote swim +// >``targetemote swim`` // Added. // // Lets look at what was created by that command -//>showemote swim -//"LIV" -> $N $vswim at $t. -//"OBJ" -> $N $vswim at $o. -//"STR" -> $N $vswim $o. -//"" -> $N $vswim. +// >``showemote swim`` +// | "LIV" -> $N $vswim at $t. +// | "OBJ" -> $N $vswim at $o. +// | "STR" -> $N $vswim $o. +// | "" -> $N $vswim. +// +// .. TAGS: RST #include diff --git a/lib/cmds/wiz/tasktool.c b/lib/cmds/wiz/tasktool.c index e99c3418..9e41c566 100644 --- a/lib/cmds/wiz/tasktool.c +++ b/lib/cmds/wiz/tasktool.c @@ -1,10 +1,12 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE tasktool +// USAGE ``tasktool`` // // Invokes the menu-driven tasktool system, // which is intended as a "todo" handler. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/timer.c b/lib/cmds/wiz/timer.c index 0c6a429e..e871fdd9 100644 --- a/lib/cmds/wiz/timer.c +++ b/lib/cmds/wiz/timer.c @@ -10,7 +10,7 @@ //: COMMAND //$$ see: channels, chan -// USAGE: timer [-r] number [string number] +// USAGE: ``timer [-r] number [string number]`` // // Starts a timer for some number of seconds (given by the first number). // Only one timer is allowed per person (at the moment, simply due to @@ -27,12 +27,14 @@ // The timer may be stopped by passing 0 for the timer (e.g. "timer 0"). // // Examples: -//> timer 600 clock 60 -- 10 minute timer, notify on "clock" channel +//> ``timer 600 clock 60`` -- 10 minute timer, notify on "clock" channel // every minute -//> timer -r 300 -- repeating 5 minute timer; notifies you +//> ``timer -r 300`` -- repeating 5 minute timer; notifies you // directly. -//> timer 30 wiz_wiz 5 -- 30 second timer, notifying every 5 seconds +//> ``timer 30 wiz_wiz 5`` -- 30 second timer, notifying every 5 seconds // on the wizard channel +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/todo.c b/lib/cmds/wiz/todo.c index 240a299c..0e5de233 100644 --- a/lib/cmds/wiz/todo.c +++ b/lib/cmds/wiz/todo.c @@ -3,10 +3,12 @@ /* todo.c -- log todos */ // COMMAND -// USAGE todo +// USAGE ``todo`` // // Invokes the reporting system for "todos" - enters an editor allowing you // to post to the todo newsgroup (or file, depending on configuration). +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/trans.c b/lib/cmds/wiz/trans.c index 0aabca58..02779de5 100644 --- a/lib/cmds/wiz/trans.c +++ b/lib/cmds/wiz/trans.c @@ -2,13 +2,15 @@ //: COMMAND //$$ see: goto, wizz -// USAGE: trans +// USAGE: ``trans `` // // This command will transfer a player from their location to yours. // -// trans ohara +// ``trans ohara`` // // Will bring ohara to the room you are in. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/treefor.c b/lib/cmds/wiz/treefor.c index 8b303db3..fc4a63b3 100644 --- a/lib/cmds/wiz/treefor.c +++ b/lib/cmds/wiz/treefor.c @@ -4,13 +4,15 @@ // By Beek - derived from codefor, which was derived from eval //: COMMAND -// USAGE: treefor +// USAGE: ``treefor `` // // Shows the driver's internal representation of the expression. // -//>treefor int x; int y; return x+y; +// >``treefor int x; int y; return x+y;`` // //(return ("binary op" "+" ("opcode_1" "local" 0)("opcode_1" "local" 1))) +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/uncd.c b/lib/cmds/wiz/uncd.c index 853e2e32..36a2765a 100644 --- a/lib/cmds/wiz/uncd.c +++ b/lib/cmds/wiz/uncd.c @@ -3,9 +3,11 @@ /* Beek: Nov 2 96 */ //: COMMAND -// USAGE: uncd +// USAGE: ``uncd`` // // Switch to previous working directory. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/unittest.c b/lib/cmds/wiz/unittest.c new file mode 100644 index 00000000..f875bd0c --- /dev/null +++ b/lib/cmds/wiz/unittest.c @@ -0,0 +1,59 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +// Tsath, 2023 + +#define TEST_DIR "/std/tests/" + +//: COMMAND +// USAGE: ``unittest [debug]`` +// +// This command runs unit tests and reports back. +// Examples: +// | ``unittest all`` - run all tests +// | ``unittest all debug`` - run all tests in debug mode +// | ``unittest items`` - run just the 'items' suite +// | ``unittest items debug`` - run 'items' suite in debug +// | ``unittest list`` - shows all the test suites +// +// .. TAGS: RST + +inherit CMD; + +private +void main(string arg) +{ + int debug = 0; + string *args; + + if (!arg) + { + out("Usage:\n" + " unittest all - to run all suites\n" + " unittest all quiet - all suites and only final results\n" + " unittest all debug - to run all suites in debug mode\n" + " unittest items - to run only 'items' suite\n" + " unittest items debug - to run 'items' suite in debug\n" + " unittest list - list all suites\n"); + return; + } + args = explode(arg, " "); + + if (sizeof(args) == 2 && args[1] == "debug") + debug = 1; + + if (args[0] == "list") + { + string *suites = get_dir(TEST_DIR + "*.c"); + out("The following suites are defined in " + TEST_DIR + ":\n\t" + + replace_string(implode(suites, "\n\t"), ".c", "")); + return; + } + + if (sizeof(args) == 2 && args[0] == "all" && args[1] == "quiet") + debug = -1; + + if (args[0] == "all") + TEST_D->test_all(debug); + else + TEST_D->test_suite(args[0], debug); +} diff --git a/lib/cmds/wiz/users.c b/lib/cmds/wiz/users.c index 544c3f63..143d859f 100644 --- a/lib/cmds/wiz/users.c +++ b/lib/cmds/wiz/users.c @@ -6,11 +6,13 @@ */ //: COMMAND -// USAGE: users +// USAGE: ``users`` // // This command lists the names of all users currently connected. // It is convenient for those who don't wish to clutter their screen with excess -// information such as what comes with the "who" command. +// information such as what comes with the "``who``" command. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/verbs.c b/lib/cmds/wiz/verbs.c index 8dade399..14ec0532 100644 --- a/lib/cmds/wiz/verbs.c +++ b/lib/cmds/wiz/verbs.c @@ -1,34 +1,37 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: verbs or verbs +// USAGE: +// +// | ``verbs`` +// | ``verbs `` // // This command will show you the rules that a certain verbs has, // or a list of all the verbs and their rules // -// verbs +// ``verbs`` // -// ffear: STR -// move: OBJ -// look: OBJ with OBJ, STR, at OBJ with OBJ, STR OBJ, for OBJ, for LIV, at OBJ, OBJ -//, -// open: OBJ with OBJ, up OBJ, OBJ -// pour: OBJ in OBJ -// get: OBJ with OBJ, OBJ out of OBJ, OBJ from OBJ, OBJ -// wind: OBJ with OBJ, OBJ -// put: OBJ in OBJ -// give: OBJ to LIV -// wait: -// whisper: to LIV STR, STR to LIV, LIV STR -// close: OBJ -// fill: OBJ with OBJ, OBJ -// exit: OBJ -// go: in OBJ, into OBJ, on OBJ, over OBJ, to OBJ, around OBJ, up OBJ, down OBJ, STR +// | ffear: STR +// | move: OBJ +// | look: OBJ with OBJ, STR, at OBJ with OBJ, STR OBJ, for OBJ, for LIV, at OBJ, OBJ +// | open: OBJ with OBJ, up OBJ, OBJ +// | pour: OBJ in OBJ +// | get: OBJ with OBJ, OBJ out of OBJ, OBJ from OBJ, OBJ +// | wind: OBJ with OBJ, OBJ +// | put: OBJ in OBJ +// | give: OBJ to LIV +// | wait: +// | whisper: to LIV STR, STR to LIV, LIV STR +// | close: OBJ +// | fill: OBJ with OBJ, OBJ +// | exit: OBJ +// | go: in OBJ, into OBJ, on OBJ, over OBJ, to OBJ, around OBJ, up OBJ, down OBJ, STR // +// ``verbs go`` // -// verbs go +// | go: in OBJ, into OBJ, on OBJ, over OBJ, to OBJ, around OBJ, up OBJ, down OBJ, STR // -// go: in OBJ, into OBJ, on OBJ, over OBJ, to OBJ, around OBJ, up OBJ, down OBJ, STR +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/vis.c b/lib/cmds/wiz/vis.c index 0f4db33c..ecd5995c 100644 --- a/lib/cmds/wiz/vis.c +++ b/lib/cmds/wiz/vis.c @@ -4,9 +4,11 @@ //: COMMAND //$$ see: invis -// USAGE: vis +// USAGE: ``vis`` // // This command will let you turn visible to players +// +// .. TAGS: RST #include #include diff --git a/lib/cmds/wiz/wc.c b/lib/cmds/wiz/wc.c index b3577d5d..9ad3a70f 100644 --- a/lib/cmds/wiz/wc.c +++ b/lib/cmds/wiz/wc.c @@ -1,12 +1,14 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// usage: wc [-lw] +// usage: ``wc [-lw] `` // // Gives wordcount (and linecount) of the file specified. // The 2 flags specify what to count : //-l = linecount only //-w = wordcount only +// +// .. TAGS: RST inherit CMD; inherit M_REGEX; diff --git a/lib/cmds/wiz/where.c b/lib/cmds/wiz/where.c index b7c77e1e..23fe7ebd 100644 --- a/lib/cmds/wiz/where.c +++ b/lib/cmds/wiz/where.c @@ -2,10 +2,14 @@ //: COMMAND //$$ see: who, people -// USAGE where -// where , etc +// USAGE +// +// | ``where`` +// | ``where , etc`` // // Displays where the targets are - filenames and short names of their environment. +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/wheremobs.c b/lib/cmds/wiz/wheremobs.c index 27981fa3..03f213d6 100644 --- a/lib/cmds/wiz/wheremobs.c +++ b/lib/cmds/wiz/wheremobs.c @@ -3,9 +3,11 @@ // Tsath @ Nuke 2, 2020 //: COMMAND -// USAGE wheremobs +// USAGE ``wheremobs`` // // Where are the mobs? +// +// .. TAGS: RST inherit CMD; diff --git a/lib/cmds/wiz/which.c b/lib/cmds/wiz/which.c index 4378372b..50d47a75 100644 --- a/lib/cmds/wiz/which.c +++ b/lib/cmds/wiz/which.c @@ -1,16 +1,18 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ //: COMMAND -// USAGE: which +// USAGE: ``which `` // // This command will show you the path to the command you supply. // // Useful to see if you are executing a command out of your // directory or the real command. // -// which ls +// ``which ls`` // // ls found in: /trans/cmds/ +// +// .. TAGS: RST inherit CMD; @@ -32,6 +34,6 @@ void main(string *argv) out("No such command found in your path.\n"); return; } - outf("%s is found in: %s\n", argv[0], result[1]); + outf("%s%s\n", result[1], argv[0]); return; } diff --git a/lib/cmds/wiz/whoip.c b/lib/cmds/wiz/whoip.c index 27bedf27..c5ba8210 100644 --- a/lib/cmds/wiz/whoip.c +++ b/lib/cmds/wiz/whoip.c @@ -7,10 +7,12 @@ // - Reports out players ip name and number. //: COMMAND -// USAGE: whoip -// whoip -// whoip -// whoip +// USAGE: +// +// | ``whoip`` +// | ``whoip `` +// | ``whoip `` +// | ``whoip `` // // This command is very similar to who, however it shows // the ip name and number from which each player connected, @@ -20,21 +22,21 @@ // a given ip given as an argument, or alternatively a list of IPs that // the player logged in from. // -// whoip +// ``whoip`` // -// Lima Bean: (Local Time is: Tue Sep 19 07:09:15 1995) -//------------------------------------------------------------------------- -// Name IP number IP name -//------------------------------------------------------------------------- -// Ohara 137.92.12.102 student.canberra.edu.au -// Wegster 204.57.174.131 wegster.telebyte.com -// Valodin 204.254.197.7 exinos.ms.com -// Zifnab 129.188.154.108 maniac1t.mot.com -//------------------------------------------------------------------------- -// Currently there are 4 players. +// | Lima Bean: (Local Time is: Tue Sep 19 07:09:15 1995) +// | ------------------------------------------------------------------------- +// | Name IP number IP name +// | ------------------------------------------------------------------------- +// | Ohara 137.92.12.102 student.canberra.edu.au +// | Wegster 204.57.174.131 wegster.telebyte.com +// | Valodin 204.254.197.7 exinos.ms.com +// | Zifnab 129.188.154.108 maniac1t.mot.com +// | ------------------------------------------------------------------------- +// | Currently there are 4 players. // // -// whoip 129.188.154.108 +// | whoip 129.188.154.108 // // There is 1 user from maniac1t.mot.com (129.188.154.108): // Zifnab @@ -43,6 +45,8 @@ // Zifnab // Beek // Tsath +// +// .. TAGS: RST #include #define DIVIDER "-------------------------------------------------------------------------\n" diff --git a/lib/cmds/wiz/wizz.c b/lib/cmds/wiz/wizz.c index b087cabb..fec986c0 100644 --- a/lib/cmds/wiz/wizz.c +++ b/lib/cmds/wiz/wizz.c @@ -4,9 +4,11 @@ //: COMMAND //$$ see: goto, trans -// USAGE wizz +// USAGE ``wizz`` // // This command returns you to the "wiz room" from anywhere on the mud. +// +// .. TAGS: RST #include diff --git a/lib/contrib/bboard/bboard.c b/lib/contrib/bboard/bboard.c index 14656a35..dc7275c8 100644 --- a/lib/contrib/bboard/bboard.c +++ b/lib/contrib/bboard/bboard.c @@ -79,8 +79,7 @@ string format_subj(int id) return sprintf("%d *** REMOVED ***", id); else subject = msg.subject; - return sprintf("%d %s (%s, %s)", id, subject[0..34], msg.poster, - intp(msg.time) ? ctime(msg.time)[4..9] : msg.time); + return sprintf("%d %s (%s, %s)", id, subject[0..34], msg.poster, intp(msg.time) ? ctime(msg.time)[4..9] : msg.time); } string show_msg(int id) diff --git a/lib/contrib/marriage/finger.c b/lib/contrib/marriage/finger.c index 3576df20..6fc01d8a 100644 --- a/lib/contrib/marriage/finger.c +++ b/lib/contrib/marriage/finger.c @@ -140,8 +140,8 @@ void main(string who) "Email Address: %s\n" "%s", first_line, info.nickname, info.level, info.real_name, info.position, info.spouse, - info.idle == -1 ? "Left at" : "On since", info.last_login ? ctime(info.last_login) : "", - idle, info.connect_from, mailstring, info.email, info.home_page); + info.idle == -1 ? "Left at" : "On since", info.last_login ? ctime(info.last_login) : "", idle, + info.connect_from, mailstring, info.email, info.home_page); if (info.plan) s += "Plan:\n" + info.plan + "\n"; diff --git a/lib/contrib/roommaker/buildmenu.c b/lib/contrib/roommaker/buildmenu.c index 1b525912..cac5f29e 100644 --- a/lib/contrib/roommaker/buildmenu.c +++ b/lib/contrib/roommaker/buildmenu.c @@ -6,7 +6,6 @@ // Roommaker for Lima muds. #include #include -#include #include #include #include /* ### for now */ @@ -39,22 +38,22 @@ string *clude = ({}); #define RM_VER "v0.9.1" -MENU toplevel; +class menu toplevel; // submenus of the toplevel (build) menu -MENU roommenu; +class menu roommenu; // sub menus of the roommenu -MENU itemmenu; -MENU objectmenu; -MENU exitmenu; -MENU filemenu; -MENU descmenu; - -MENU_ITEM N_QUIT; -MENU_ITEM goto_main_menu_item; -MENU_ITEM goto_room_menu_item; -MENU_ITEM main_seperator; +class menu itemmenu; +class menu objectmenu; +class menu exitmenu; +class menu filemenu; +class menu descmenu; + +class menu_item N_QUIT; +class menu_item goto_main_menu_item; +class menu_item goto_room_menu_item; +class menu_item main_seperator; // Right now, I'm too lazy to code in a help command, and this menu // should be pretty self-explanatory anyway. diff --git a/lib/daemons/ansi_d.c b/lib/daemons/ansi_d.c index a0904066..bb8c1a8c 100644 --- a/lib/daemons/ansi_d.c +++ b/lib/daemons/ansi_d.c @@ -82,8 +82,7 @@ void create() translations = translations + defaults; - null_translations = map( - translations, function() { return ""; }); + null_translations = map(translations, function() { return ""; }); identity_translations = map(translations, ( : "%^" + $1 + "%^" :)); } @@ -91,8 +90,7 @@ void resync() { translations = translations + defaults; - null_translations = map( - translations, function() { return ""; }); + null_translations = map(translations, function() { return ""; }); identity_translations = map(translations, ( : "%^" + $1 + "%^" :)); save_me(); diff --git a/lib/daemons/banish_d.c b/lib/daemons/banish_d.c index b2269dea..cf0a67db 100644 --- a/lib/daemons/banish_d.c +++ b/lib/daemons/banish_d.c @@ -100,7 +100,7 @@ int check_name(string name) return sizeof(filter(bad_names, ( : regexp($(name), ((class banish_data)$1)->item) :))); } -int check_site(string *check) +varargs int check_site(string *check) { /* allow check to be passed in for debugging purposes */ if (!check) diff --git a/lib/daemons/channel_d.c b/lib/daemons/channel_d.c index 8ebf1456..5cd9c0a0 100644 --- a/lib/daemons/channel_d.c +++ b/lib/daemons/channel_d.c @@ -251,7 +251,7 @@ nomask string user_channel_name(string channel_name) ** ** Register previous_object() with a specific set of channels. */ -nomask void register_channels(string *names) +varargs nomask void register_channels(string *names) { /* First filter out the channels that don't exist, otherwise the channel * will be created. If the channel's not created, we don't want it to be @@ -266,7 +266,7 @@ nomask void register_channels(string *names) ** Un-register previous_object() from a specific set of channels. If ** the list is 0, then unregister from all channels. */ -nomask void unregister_channels(string *names) +varargs nomask void unregister_channels(string *names) { if (!names) names = keys(info); diff --git a/lib/daemons/crafting_d.c b/lib/daemons/crafting_d.c index 8247c950..096f4339 100644 --- a/lib/daemons/crafting_d.c +++ b/lib/daemons/crafting_d.c @@ -450,7 +450,7 @@ mapping estimate_objects(object player, object *obs) if (repair_values[i] < needed) { int picked; - picked = CLAMP(needed / repair_values[i], 0, pouch[materials[mat][i]]); + picked = clamp(needed / repair_values[i], 0, pouch[materials[mat][i]]); picked_mats[mat][i] += picked; needed -= picked * repair_values[i]; TBUG("Now picked " + picked + " of " + materials[mat][i] + ". Needed now: " + needed); diff --git a/lib/daemons/damage_d.c b/lib/daemons/damage_d.c index 9f72fbdf..64dd883c 100644 --- a/lib/daemons/damage_d.c +++ b/lib/daemons/damage_d.c @@ -1,10 +1,18 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ +//: MODULE // Damage daemon +// // To store list of valid damage types, // so weapons and armours check against the list // (from M_DAMAGE_SOURCE and M_DAMAGE_SINK) +// +// Currently, this daemon reads the config file ``/data/config/damage-types`` at +// start up, so modify this file to add/remove data from this daemon permanently. +// +// This daemon handles special attacks from weapons as well. It needs more documentation. // +// .. TAGS: RST inherit M_DAEMON_DATA; @@ -31,6 +39,8 @@ mixed *query_special_attk() return ({special_attk, special_sums}); } +//: FUNCTION add_damage_type +// Add a damage type to the known damage types. void add_damage_type(string t) { if (member_array(t, damage) == -1) @@ -40,6 +50,9 @@ void add_damage_type(string t) } } +//: FUNCTION add_damage_type +// Add a short name for a damage type to the known damage types. +// This is used in the ``equip`` command e.g. void add_short_name(string type, string s) { if (member_array(type, damage) != -1) @@ -51,21 +64,29 @@ void add_short_name(string type, string s) write("Failed to find damage type " + type + "\n"); } +//: FUNCTION remove_short_name +// Removed a short name. void remove_short_name(string type) { map_delete(short_names, type); } +//: FUNCTION query_short_names +// Returns a mapping of all known short names. mapping query_short_names() { return short_names; } +//: FUNCTION query_special_damage_types +// Returns a string array of special damage types string *query_special_damage_types() { return keys(query_special_attk()[0]); } +//: FUNCTION remove_damage_type +// Removes a damage type. void remove_damage_type(string t) { if (member_array(t, damage) != -1) @@ -76,6 +97,8 @@ void remove_damage_type(string t) } } +//: FUNCTION clear_damage_types +// Removed all damage types from the daemon. void clear_damage_types() { damage = ({}); @@ -83,11 +106,15 @@ void clear_damage_types() write("Damage types cleared\n"); } +//: FUNCTION query_damage_types +// Returns a string array copy of all known damage types. string *query_damage_types() { return copy(damage); } +//: FUNCTION query_valid_damage_type +// Returns 1 if the type is a valid damage type. int query_valid_damage_type(string str) { if (member_array(str, damage) == -1) @@ -95,6 +122,8 @@ int query_valid_damage_type(string str) return 1; } +//: FUNCTION add_special_attks +// Add special attacks of type t with a string array specs. void add_special_attks(string t, string *specs) { int *values = ({128, 64, 32, 4, 1}); @@ -113,6 +142,9 @@ void add_special_attks(string t, string *specs) write("Failed to find damage type " + t + "\n"); } +//: FUNCTION load_config_from_file +// Loads the config from ``/data/config/damage-types``. +// Saves the daemon after load. void load_config_from_file() { string *input; diff --git a/lib/daemons/did_d.c b/lib/daemons/did_d.c index 56662ce4..cc2e07ba 100644 --- a/lib/daemons/did_d.c +++ b/lib/daemons/did_d.c @@ -10,7 +10,29 @@ inherit M_DAEMON_DATA; inherit M_GLOB; -mixed *did = ({}); +mapping did = ([]); +string version; + +// Current version +string curver() +{ + if (mud_name() == "LIMA") + return lima_version()[5..]; + return version; +} + +void set_version(string s) +{ + version = s; + did[s] = ({}); +} + +private +string *help_me() +{ + return ({"No active mudlib version. Set your first version with:", " didlog -newversion 0.0.1", + " didlog -help (for more)"}); +} int someone_did(string str) { @@ -21,8 +43,14 @@ int someone_did(string str) write("Sorry, but only full wizards may use the didlog.\n"); return 0; } + if (!curver()) + { + write(implode(help_me(), "\n")); + return; + } + str = capitalize(this_user()->query_userid()) + " " + str; - did += ({({time(), str})}); + did[curver()] += ({({time(), str})}); save_me(); who = filter_array(users(), ( : wizardp($1) :)) - ({this_user()}); @@ -37,28 +65,36 @@ void someone_didnt() if (!check_privilege("Mudlib:daemons")) error("Only Admins may remove didlogs.\n"); if (sizeof(did)) - did = did[0.. < 2]; + did[curver()] = did[curver()][0.. < 2]; save_me(); } private -nomask int start_index(int after) +nomask int start_index(string version, int after) { - int index = sizeof(did); + int index = sizeof(did[version]); + if (after > time()) + return 0; - while (index > 0 && did[index - 1][0] > after) + while (index > 0 && did[version][index - 1][0] > after) index--; return index; } private -nomask string *get_entries(int after, string *header, string pattern) +nomask string *get_entries(int after, string *header, string pattern, string v) { - int index = start_index(after); + int index; string *output = header; + if (!v) + v = curver(); + index = start_index(v, after); - if (index >= sizeof(did)) + if (!did[v]) + did[v] = ({}); + + if (index >= sizeof(did[v])) return 0; if (!header) @@ -67,10 +103,10 @@ nomask string *get_entries(int after, string *header, string pattern) if (pattern) pattern = translate(pattern, 1); - for (; index < sizeof(did); index++) + for (; index < sizeof(did[v]); index++) { - if (!pattern || regexp(did[index][1], pattern)) - output += explode(sprintf("%s: %s", ctime(did[index][0]), did[index][1]), "\n") + ({""}); + if (!pattern || regexp(did[v][index][1], pattern)) + output += explode(sprintf("%s: %s", ctime(did[v][index][0]), did[v][index][1]), "\n") + ({""}); } return output; @@ -78,12 +114,24 @@ nomask string *get_entries(int after, string *header, string pattern) string *dump_entries() { - return did; + return did[curver()]; +} + +string *versions() +{ + return keys(did); } varargs void dump_did_info(int after, string *header, string pattern, function continuation) { - string *output = get_entries(after, header, pattern); + string *output; + + if (!curver()) + { + output = help_me(); + } + else + output = get_entries(after, header, pattern, curver()); if (!output) { @@ -96,9 +144,16 @@ varargs void dump_did_info(int after, string *header, string pattern, function c } } -varargs string get_did_info(int after, string *header, string pattern, function continuation) +varargs string get_did_info(int after, string *header, string pattern, function continuation, string version) { - string *output = get_entries(after, header, pattern); + string *output; + + if (!curver()) + { + output = help_me(); + } + else + output = get_entries(after, header, pattern, version || curver()); if (!output) { @@ -112,7 +167,7 @@ varargs string get_did_info(int after, string *header, string pattern, function varargs void print_changelog_to_file(string file, int after, int show_date) { - int index = start_index(after); + int index = start_index(curver(), after); string output = ""; if (show_date) @@ -138,7 +193,7 @@ string who_link(string name) return sprintf("%s", __HOST__, PORT_HTTP, lower_case(name), name); } -string get_changelog_for_web(int dont_link_names) +string get_changelog_for_web(string version, int dont_link_names) { int index = 0; string output = "======\nDidlog\n======\n\n"; @@ -146,18 +201,24 @@ string get_changelog_for_web(int dont_link_names) string entry; string name; - for (; index < sizeof(did); index++) + for (; index < sizeof(did[version]); index++) { - entry = did[index][1]; + entry = did[version][index][1]; space = strsrch(entry, " "); name = entry[0..space-1]; - output += sprintf("- **%s**: *%s* %s\n", ctime(did[index][0]), dont_link_names ? name : who_link(name), + output += sprintf("- **%s**: *%s* %s\n", ctime(did[version][index][0]), dont_link_names ? name : who_link(name), capitalize(entry[space..])); } return output + "\n"; } -void print_weblog_to_file(string fname) +void print_weblog_to_file(string version, string fname) { - write_file(fname, get_changelog_for_web(1), 1); + write_file(fname, get_changelog_for_web(version, 1), 1); } + +void create() +{ + set_lima_save(); + ::create(); +} \ No newline at end of file diff --git a/lib/daemons/doc_d.c b/lib/daemons/doc_d.deprecated similarity index 95% rename from lib/daemons/doc_d.c rename to lib/daemons/doc_d.deprecated index c55a467f..c24cd3d0 100644 --- a/lib/daemons/doc_d.c +++ b/lib/daemons/doc_d.deprecated @@ -101,7 +101,7 @@ int make_directories() if (file_size("/help/autodoc") == -1) mkdir("/help/autodoc"); - //Still no success? Then abort here. + // Still no success? Then abort here. if (file_size("/help/autodoc") == -1) return 0; @@ -115,8 +115,9 @@ int make_directories() mkdir("/help/admin/command"); if (file_size("/help/autodoc/examples") == -1) mkdir("/help/autodoc/examples"); - if (file_size("/help/autodoc/functions") == -1) - mkdir("/help/autodoc/functions"); + /* if (file_size("/help/autodoc/functions") == -1) + mkdir("/help/autodoc/functions"); + */ if (file_size("/help/autodoc/hook") == -1) mkdir("/help/autodoc/hook"); if (file_size("/help/autodoc/modules") == -1) @@ -209,7 +210,8 @@ void process_file(string fname) rm("/help/admin/command/" + mod_name(fname)); rm("/help/autodoc/hook/" + mod_name(fname)); rm("/help/autodoc/" + MUD_AUTODOC_DIR + "/" + mod_name(fname)); - delete_directory("/help/autodoc/functions/" + mod_name(fname)); + + // delete_directory("/help/autodoc/functions/" + mod_name(fname)); if (!file) return; @@ -246,6 +248,11 @@ void process_file(string fname) } } else if (line == "MODULE") + { + continue; // Covered by RST_D + } + /* + else if (line == "MODULE") { outfile = "/help/autodoc/modules/" + mod_name(fname); write_file(outfile, "Module " + mod_name(fname) + " (file: " + fname + "):\n\n"); @@ -255,6 +262,7 @@ void process_file(string fname) i++; } } + */ else if (line == "COMMAND") { outfile = "/help/autodoc/command/" + mod_name(fname); @@ -295,6 +303,11 @@ void process_file(string fname) } } else if (sscanf(line, "FUNCTION %s", line) == 1) + { + continue; // Covered by RST_D + } + /* + else if (sscanf(line, "FUNCTION %s", line) == 1) { if (func_name(line) != line) LOG_D->log(LOG_AUTODOC, "Bad function name: " + fname + " line " + i + ": " + line + "\n"); @@ -328,6 +341,7 @@ void process_file(string fname) } } } + */ else if (line == AUTODOC_MUDNAME) { outfile = "/help/autodoc/" + MUD_AUTODOC_DIR + "/" + mod_name(fname); @@ -342,7 +356,8 @@ void process_file(string fname) { LOG_D->log(LOG_AUTODOC, "Bad header tag: " + fname + " line " + i + ": " + line + "\n"); } - printf("Writing to: %O\n", outfile); + if (outfile) + printf("Writing to: %O\n", outfile); } else i++; diff --git a/lib/daemons/domain_d.c b/lib/daemons/domain_d.c index 5b27b501..bb324082 100644 --- a/lib/daemons/domain_d.c +++ b/lib/daemons/domain_d.c @@ -46,7 +46,7 @@ void remove_currency(string domain) save_me(); } -string query_currency(string domain) +varargs string query_currency(string domain) { string body_d = this_body() ? file_domain(environment(this_body())) : "std"; if (domain) diff --git a/lib/daemons/emoji_d.c b/lib/daemons/emoji_d.c index 49a70733..6346f128 100644 --- a/lib/daemons/emoji_d.c +++ b/lib/daemons/emoji_d.c @@ -68,10 +68,6 @@ mapping emoji_map = (["beaming face with smiling eyes":({ "🙁", ":(", }), - "slightly smiling face 2":({ - "🙂", - ":)", - }), "middle finger":({ "🖕", ":middle finger:", @@ -189,9 +185,6 @@ string emoji_replace(string input, int msg_type) { int replacements = -1; - if (msg_type & NO_WRAP || msg_type & NO_ANSI || msg_type & TREAT_AS_BLOB || msg_type & MSG_PROMPT) - return input; - if (keys(emoji_map) == 0) return input; @@ -208,4 +201,12 @@ string emoji_replace(string input, int msg_type) } } return input; -} \ No newline at end of file +} + +string *emoji_replace_array(string *input, int msg_type) +{ + string *out = ({}); + foreach (string i in input) + out += ({emoji_replace(i, msg_type)}); + return out; +} diff --git a/lib/daemons/event_d.c b/lib/daemons/event_d.c new file mode 100644 index 00000000..0dec695a --- /dev/null +++ b/lib/daemons/event_d.c @@ -0,0 +1,241 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** event_d.c -- Events on the MUD. Can run both game and back-end events (more classic CRON like event). +** Tsath 2024-05-10 (Created) +*/ + +//: MODULE +// The event_d handles events on the MUD, and can schedule things either in "real world time" or on MUD time. How time +// is defined on the mud is defined in and should be configured there via admtool. +// +// ``admtool`` -> Game configuration -> Settings +// +// The event_d only handles day names, hours, minutes and seconds and disregards day count, day in a month, month names +// and years. This is left up to you to extend should you want to. +// +// This daemon on purpose does not handle event like the yearly filling of the Xmas stockings or things that happen +// rarely - they are left for the wizards to kick off. This daemon handles things that happen often enough that players +// should experience them a few times per week depending on the settings in the */include/config/time.h* file. +// +// Thus the main focus is on weekly scheduled events, i.e. John goes to the bank at 16 with money suitcase Wednesdays +// and Saturdays ("00 16 2,5"), Bob goes to the cafe to buy a sandwich for lunch everyday (except Sunday) at 11:45 +// ("45 11 0-6"). +// +// .. TAGS: RST + +#include + +#define SECS_PER_DAY 86400 + +inherit M_DAEMON_DATA; + +private +mapping events = ([]); + +// Nothing saved below here. +private +nosave string *day_names; + +//: FUNCTION week_day +// If given an integer argument, returns the name of the day. +// If given a string name, returns the day number (0-X) - see *config/time.h*. +// If not not found, returns -1. +mixed week_day(mixed d) +{ + return intp(d) ? day_names[d] : member_array(d, day_names); +} + +//: FUNCTION week_days +// Returns an array of the week days as defined in *config/time.h*. +string *week_days() +{ + return day_names; +} + +//: FUNCTION game_days_per_day +// Returns the number of game days we have per real days as defined in *config/time.h*. +int game_days_per_day() +{ + return GAME_DAYS_PER_DAY; +} + +int adjusted_time() +{ + return time() + (3600 * ADJUST_HOURS); +} + +//: FUNCTION time_to_weekday +// Returns the week day name given time or uses time(). +varargs string time_to_weekday(int time) +{ + int t = time || adjusted_time(); + int real_day = to_int(strftime("%w", time || adjusted_time())) + +#ifdef WEEK_BEGINS_MONDAY + + DAYS_PER_WEEK - 1; +#else + ; +#endif + int day_number = ((time || adjusted_time()) % SECS_PER_DAY) / (SECS_PER_DAY / GAME_DAYS_PER_DAY); + int game_day = ((GAME_DAYS_PER_DAY * real_day) + day_number) % DAYS_PER_WEEK; + return day_names[game_day]; +} + +//: FUNCTION time_to_str +// Translates the integer time into a string with weekday, hour, minute and seconds. +// The string returned will be in game time as defined in *config/time.h*. +varargs string time_to_str(int time) +{ + int t = + (((time ? time + (ADJUST_HOURS * 3600) : adjusted_time()) % SECS_PER_DAY) * GAME_DAYS_PER_DAY) % SECS_PER_DAY; + int hours = t / 3600; + int minutes = (t % 3600) / 60; + int seconds = (t % 60); + return sprintf("%s %2.2d:%2.2d:%2.2d", time_to_weekday(time), hours, minutes, seconds); +} + +//: FUNCTION str_to_time +// Translates a string time into an integer that matches the *next* timestamp that matches +// the string. This will be from maximum one week away from the time given. +varargs int str_to_time(string date) +{ + int hours, minutes, seconds; + string day; + int delta; + int real_day = (to_int(strftime("%w", adjusted_time())) +#ifdef WEEK_BEGINS_MONDAY + + DAYS_PER_WEEK - 1) % + DAYS_PER_WEEK; +#else + ); +#endif + + int day_number = (adjusted_time() % SECS_PER_DAY) / (SECS_PER_DAY / GAME_DAYS_PER_DAY); + int game_day = ((GAME_DAYS_PER_DAY * real_day) + day_number) % DAYS_PER_WEEK; + int total; + int skip_days; + + sscanf(date, "%s %d:%d:%d", day, hours, minutes, seconds); + delta = ((hours * 3600) + (minutes * 60) + seconds) / GAME_DAYS_PER_DAY; + + // Might end up negative, but that's handled below. + skip_days = member_array(day, day_names) - game_day; + + // Calculate the total + total = (adjusted_time() - (adjusted_time() % (SECS_PER_DAY / GAME_DAYS_PER_DAY))) + delta + + ((SECS_PER_DAY / GAME_DAYS_PER_DAY) * skip_days); + + // TBUG("skip_days: " + skip_days + " game_day: " + game_day + " real_day: " + real_day); + + // This part adds a week if we're planning for things in the past. + if (total - adjusted_time() < 0) + total += DAYS_PER_WEEK * (SECS_PER_DAY / GAME_DAYS_PER_DAY); + + // Subtract adjustment to total before returning real timestamp. + return total - (ADJUST_HOURS * 3600); +} + +int *range(string s, string type) +{ + int *r = ({}); + int max; + if (strsrch(s, "-") != -1) + { + int *range = map(explode(s, "-"), ( : to_int($1) :)); + for (int i = range[0]; i <= range[1]; i++) + r += ({i}); + } + else if (strsrch(s, ",") != -1) + r = map(explode(s, ","), ( : to_int($1) :)); + else if (s == "*") + { + switch (type) + { + case "minute": + max = 60; + break; + case "hour": + max = 24; + break; + default: + max = DAYS_PER_WEEK; + break; + } + for (int i = 0; i < max; i++) + r += ({i}); + } + else + r = ({to_int(s)}); + return r; +} + +varargs void schedule_event(string timing, mixed ob, string extra) +{ + string *entries = ({}); + string minutes, hours, days; + int *m_ar, *h_ar, *d_ar; + sscanf(timing, "%s %s %s", minutes, hours, days); + + if (!ob) + return; + + m_ar = range(minutes, "minute"); + h_ar = range(hours, "hour"); + d_ar = range(days, "day"); + + foreach (int d in d_ar) + foreach (int h in h_ar) + foreach (int m in m_ar) + STATE_D->add_to_queue_at_time(ob, str_to_time(sprintf("%s %2.2d:%2.2d:00", week_day(d), h, m)), + extra); // - (3600 * ADJUST_HOURS), extra); +} + +void register_event(string timing, string file, string extra) +{ + if (!extra) + extra = "scheduled"; + if (!events[file]) + events[file] = ([]); + events[file][extra] = timing; + save_me(); +} + +void unregister_event(string file, string extra) +{ + map_delete(events[file], extra); + if (!sizeof(keys(events[file]))) + map_delete(events, file); + save_me(); +} + +void run_scheduler() +{ + foreach (string file, mapping m in events) + foreach (string extra, string timing in m) + { + if (file_length(file) > 0 || file_length(file + ".c") > 0) + schedule_event(timing, file, extra); + else + write("** Not scheduling jobs for file '" + file + "' since it does not exist."); + } + if (find_call_out("run_scheduler") == -1) + call_out("run_scheduler", 86400 / 24); +} + +mapping query_events() +{ + return events; +} + +void create() +{ + day_names = explode(DAY_NAMES, ","); + ::create(); + run_scheduler(); +} + +/* +@EVENT_D->schedule_event("0,20,40 6,12,18 0,2,4") + +*/ \ No newline at end of file diff --git a/lib/daemons/governance_d.c b/lib/daemons/governance_d.c new file mode 100644 index 00000000..d5556d45 --- /dev/null +++ b/lib/daemons/governance_d.c @@ -0,0 +1,79 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** Governance daemon for controlling elections and governance +** for many different things. +** Tsath 2020 (another Covid-19 lock-up creation) +*/ + +inherit M_DAEMON_DATA; +inherit M_WIDGETS; + +private +mapping leaders = ([]); +private +mapping managers = ([]); + +mapping copy_leaders() +{ + return copy(leaders); +} + +mapping copy_managers() +{ + return copy(managers); +} + +void set_leader(string what, string leader) +{ + leaders[what] = leader; + save_me(); +} + +string query_leader(string what) +{ + return leaders[what]; +} + +void add_manager(string what, string manager) +{ + if (!managers[what]) + managers[what] = ({}); + managers[what] += ({manager}); + save_me(); +} + +int remove_manager(string what, string manager) +{ + int s = sizeof(managers[what]); + if (!managers[what]) + return; + managers[what] -= ({manager}); + save_me(); + return sizeof(managers)<> s; +} + +string *query_managers(string what) +{ + return managers[what] || ({}); +} + +string leader_board() +{ + string out = ""; + out += sprintf(" %-16s %-20s %-s\n", "Association", "Leader", "Managers"); + out += simple_divider(); + foreach (string assoc, string leader in leaders) + { + string *mngrs = map(query_managers(assoc), ( : capitalize($1) :)); + + out += sprintf(" %-16s %-20s %-s\n", capitalize(assoc), capitalize(leader), implode(mngrs, " ")); + } + + return out; +} + +void create() +{ + ::create(); +} diff --git a/lib/daemons/guild_d.c b/lib/daemons/guild_d.c index 95d7279d..95a3cc21 100644 --- a/lib/daemons/guild_d.c +++ b/lib/daemons/guild_d.c @@ -11,9 +11,8 @@ inherit M_DAEMON_DATA; inherit M_STATEFUL; -#define GUILD_DIR "/domains/common/" -#define MISSION_DIR GUILD_DIR "mission/" -#define FAVOR_DIR GUILD_DIR "favor/" +#define MISSION_DIR "mission/" +#define FAVOUR_DIR "favour/" #define GUILD_LOG_HISTORY_SIZE 50 class guild_defn @@ -41,17 +40,19 @@ mapping materials = ([]); private mapping guild_contribution = ([]); private -mapping guild_favor_score = ([]); +mapping guild_favour_score = ([]); private mapping guild_log = ([]); private mapping buff_list = ([]); private -mapping guild_favors = ([]); +mapping guild_favours = ([]); private mapping guild_skills = ([]); private mapping guild_abbrevs = ([]); +private +string *guild_dirs = ({"/domains/std/guild/"}); /* No saves */ private @@ -65,9 +66,9 @@ nosave mapping guild_missions = ([]); private nosave mapping guild_mission_obs = ([]); private -nosave mapping guild_favors = ([]); +nosave mapping guild_favours = ([]); private -nosave mapping guild_favor_obs = ([]); +nosave mapping guild_favour_obs = ([]); #define DEFN(name) ((class guild_defn)guilds[name]) @@ -104,8 +105,8 @@ int query_guild_tier(string name); void add_log(string guild, string log); void load_missions(); -void load_favors(); -varargs int start_favor(int tier, string name, string guild, int end_at); +void load_favours(); +varargs int start_favour(int tier, string name, string guild, int end_at); void create() { @@ -113,7 +114,7 @@ void create() restore_me(); call_out("internal_add_to_queue", 1); load_missions(); - load_favors(); + load_favours(); foreach (int tier, mapping guilds in buff_list) foreach (string guild, mapping buffs in guilds) @@ -123,8 +124,8 @@ void create() TBUG("buff: " + buff + " end_at: " + end_at); if (time() < end_at - 30) { - if (guild_favor_obs[tier] && guild_favor_obs[tier][buff]) - start_favor(tier, buff, guild, end_at); + if (guild_favour_obs[tier] && guild_favour_obs[tier][buff]) + start_favour(tier, buff, guild, end_at); else { map_delete(buff_list[tier][guild], buff); @@ -139,6 +140,23 @@ void create() save_me(); } +string *query_guild_dirs() +{ + return guild_dirs; +} + +void remove_guild_dir(string d) +{ + guild_dirs -= ({d}); + save_me(); +} + +void add_guild_dir(string d) +{ + guild_dirs += ({d}); + save_me(); +} + void set_guild_abbrev(string guild, string abbrev) { guild_abbrevs[guild] = abbrev; @@ -158,6 +176,17 @@ void clear_buff_list() save_me(); } +string find_guild_dir(string g) +{ + foreach (string gdir in guild_dirs) + { + string *gs = get_dir(gdir); + if (gs && member_array(g, gs) != -1) + return gdir; + } + return 0; +} + object *belongs_to(string guild) { return filter_array(bodies(), ( : member_array($(guild), $1->guilds_belong()) != -1 :)); @@ -656,8 +685,8 @@ int state_update() active_buffs -= ({0}); foreach (object buff in active_buffs) { - if (buff && !buff->apply_favor()) - buff->end_favor(); + if (buff && !buff->apply_favour()) + buff->end_favour(); } foreach (int tier, mapping guilds in buff_list) { @@ -680,55 +709,56 @@ int state_update() return 1; } -void add_favor(object body, string guild, int favor) +void add_favour(object body, string guild, int favour) { string who; if (!body) return; who = body->query_name(); + guild = lower_case(guild); - if (!guild_favor_score[guild]) - guild_favor_score[guild] = 0; + if (!guild_favour_score[guild]) + guild_favour_score[guild] = 0; - guild_favor_score[guild] += favor; + guild_favour_score[guild] += favour; if (!guild_contribution[guild]) guild_contribution[guild] = ([]); if (!guild_contribution[guild][who]) guild_contribution[guild][who] = 0; - guild_contribution[guild][who] += favor; + guild_contribution[guild][who] += favour; save_me(); } /* -void set_favor_score(mapping m) +void set_favour_score(mapping m) { - guild_favor_score =m; + guild_favour_score =m; save_me(); } */ -int query_favor_score(string guild) +int query_favour_score(string guild) { - if (!guild_favor_score[guild]) + if (!guild_favour_score[guild]) return 0; - return guild_favor_score[guild]; + return guild_favour_score[guild]; } -int spend_favor(string guild, int f) +int spend_favour(string guild, int f) { - if (!guild_favor_score[guild]) + if (!guild_favour_score[guild]) return 0; - if (guild_favor_score[guild] >= f) + if (guild_favour_score[guild] >= f) { - guild_favor_score[guild] -= f; + guild_favour_score[guild] -= f; return 1; } return 0; } -mapping query_favor_contribution(string guild) +mapping query_favour_contribution(string guild) { if (!guild_contribution[guild]) return ([]); @@ -737,51 +767,63 @@ mapping query_favor_contribution(string guild) void load_missions() { - string *files = get_dir(MISSION_DIR "*.c"); + string *files = ({}); string contents; string *ar_contents; string err; + foreach (string gdir in guild_dirs) + { + TBUG(gdir + MISSION_DIR + "*.c"); + files += map(get_dir(gdir + MISSION_DIR + "*.c"), ( : $(gdir) + MISSION_DIR + $1:)); + } + + if (!files) + { + write("No missions defined for GUILD_D."); + return; + } + foreach (string item in files) { - int tier, favor; + int tier, favour; string description, name, materials; object obj; - if (item == "std_mission.c") + if (item[ < 14..] == "/std_mission.c") continue; - if (err = catch (obj = load_object(MISSION_DIR + item))) + if (err = catch (obj = load_object(item))) { write("Error while loading mission:\n" + err + "\n"); continue; } tier = obj->query_tier(); - favor = obj->query_favor(); + favour = obj->query_favour(); description = obj->query_description(); materials = obj->query_materials(); - contents = read_file(MISSION_DIR + item); + contents = read_file(item); if (strlen(contents)) { int found = 0; ar_contents = explode(contents, "\n"); foreach (string line in ar_contents) { - if (line[0..9] == "//MISSION:") + if (line[0..10] == "// MISSION:") { - name = trim(line[10..]); + name = trim(line[11..]); } } } if (!name) { - write("Missing //MISSION: string for '" + item + "'.\n"); + write("Missing // MISSION: string for '" + item + "'.\n"); continue; } - // guild_favors[name] = item; + // guild_favours[name] = item; if (!guild_mission_obs[tier]) { guild_mission_obs[tier] = ([]); @@ -796,88 +838,99 @@ void load_missions() guild_missions[tier][name] = ([]); guild_missions[tier][name]["description"] = description; guild_missions[tier][name]["materials"] = materials; - guild_missions[tier][name]["favor"] = favor; + guild_missions[tier][name]["favour"] = favour; } } -void load_favors() +void load_favours() { - string *files = get_dir(FAVOR_DIR "*.c"); + string *files = ({}); string contents; string *ar_contents; string err; + foreach (string gdir in guild_dirs) + { + files += map(get_dir(gdir + FAVOUR_DIR + "*.c"), ( : $(gdir) + FAVOUR_DIR + $1:)); + } + + if (!files) + { + write("No favours defined for GUILD_D."); + return; + } + foreach (string item in files) { - int tier, favor, length; + int tier, favour, length; string description, name; object obj; - if (item == "std_favor.c") + if (item[ < 13..] == "/std_favour.c") continue; - if (err = catch (obj = load_object(FAVOR_DIR + item))) + if (err = catch (obj = load_object(item))) { - write("Error while favor object:\n" + err + "\n"); + write("Error while favour object:\n" + err + "\n"); continue; } tier = obj->query_tier(); - favor = obj->query_favor(); + favour = obj->query_favour(); description = obj->query_description(); length = obj->query_length(); - contents = read_file(FAVOR_DIR + item); + contents = read_file(item); if (strlen(contents)) { int found = 0; ar_contents = explode(contents, "\n"); foreach (string line in ar_contents) { - if (line[0..7] == "//FAVOR:") + if (line[0..9] == "// FAVOUR:") { - name = trim(line[8..]); + name = trim(line[10..]); } } } if (!name) { - write("Missing //FAVOR: string for '" + item + "'.\n"); + write("Missing '// FAVOUR:' string for '" + item + "'.\n"); continue; } - // guild_favors[name] = item; - if (!guild_favor_obs[tier]) + // guild_favours[name] = item; + if (!guild_favour_obs[tier]) { - guild_favor_obs[tier] = ([]); + guild_favour_obs[tier] = ([]); } - guild_favor_obs[tier][name] = obj; + guild_favour_obs[tier][name] = obj; - if (!guild_favors[tier]) + if (!guild_favours[tier]) { - guild_favors[tier] = ([]); + guild_favours[tier] = ([]); } - guild_favors[tier][name] = ([]); - guild_favors[tier][name]["description"] = description; - guild_favors[tier][name]["length"] = length; - guild_favors[tier][name]["favor"] = favor; + guild_favours[tier][name] = ([]); + guild_favours[tier][name]["description"] = description; + guild_favours[tier][name]["length"] = length; + guild_favours[tier][name]["favour"] = favour; } } -mapping query_guild_favor_obs() +mapping query_guild_favour_obs() { - return guild_favor_obs; + return guild_favour_obs; } -mapping query_favors(int tier) +mapping query_favours(int tier) { - return guild_favors[tier || 1]; + return guild_favours[tier || 1]; } -mapping query_favor(int tier, string name) +mapping query_favour(int tier, string name) { - return guild_favors[tier][name]; + return guild_favours[tier][name]; } mapping query_missions(int tier) @@ -895,8 +948,9 @@ mapping query_mission(int tier, string name) object mission_ctrl_npc(string guild) { - object room_mis = load_object(GUILD_DIR + guild + "/room/mission"); - object room_lead = load_object(GUILD_DIR + guild + "/room/lead"); + string gdir = find_guild_dir(guild); + object room_mis = load_object(gdir + guild + "/room/mission"); + object room_lead = load_object(gdir + guild + "/room/lead"); object npc = present("mission_ctrl_npc_guild", room_mis); // Give it another try @@ -905,7 +959,7 @@ object mission_ctrl_npc(string guild) object *a = all_inventory(room_mis); a->move(room_lead); destruct(room_mis); - room_mis = load_object(GUILD_DIR + guild + "/room/mission"); + room_mis = load_object(gdir + guild + "/room/mission"); npc = present("mission_ctrl_npc_guild", room_mis); } @@ -914,9 +968,10 @@ object mission_ctrl_npc(string guild) void load_guild_area(string guild) { - TBUG(GUILD_DIR + guild + "/backroom"); - load_object(GUILD_DIR + guild + "/room/lead"); - load_object(GUILD_DIR + guild + "/room/mission"); + string gdir = find_guild_dir(guild); + TBUG(gdir + guild + "/backroom"); + load_object(gdir + guild + "/room/lead"); + load_object(gdir + guild + "/room/mission"); } mapping query_buff_list() @@ -936,20 +991,20 @@ int run_mission(int tier, string name, string guild) } } -varargs int start_favor(int tier, string name, string guild, int end_time) +varargs int start_favour(int tier, string name, string guild, int end_time) { - int favor_cost; - object favor_ob; + int favour_cost; + object favour_ob; TBUG("Starting buff: " + name + " tier: " + tier + " for " + guild); - if (guild_favor_obs[tier] && guild_favor_obs[tier][name]) + if (guild_favour_obs[tier] && guild_favour_obs[tier][name]) { string filename; - int favor_length; + int favour_length; object buff_ob; - favor_ob = guild_favor_obs[tier][name]; - favor_cost = favor_ob->query_favor(); - filename = base_name(favor_ob); - favor_length = favor_ob->query_length(); + favour_ob = guild_favour_obs[tier][name]; + favour_cost = favour_ob->query_favour(); + filename = base_name(favour_ob); + favour_length = favour_ob->query_length(); buff_ob = new (filename, guild); if (end_time) buff_ob->set_ends_at(end_time); @@ -961,6 +1016,8 @@ varargs int start_favor(int tier, string name, string guild, int end_time) active_buffs += ({buff_ob}); save_me(); } + else + TBUG("Failed"); } object *query_active_missions() @@ -980,7 +1037,7 @@ mapping query_mission_ctrl() mapping query_materials(string guild) { - return materials[guild]; + return materials[guild] || ([]); } void empty_materials(string guild) @@ -1102,8 +1159,8 @@ int clear_guild_log(string guild) Testing calls: @GUILD_D->query_missions() @GUILD_D->run_mission(1,"Wood gathering","yakitori") -@GUILD_D->start_favor(1,"XP Buff Small","yakitori") -@filter_array(objects(),(: base_name($1)=="/domains/gangs/missions/wood_gathering" && clonep($1) :))->remove() +@GUILD_D->start_favour(1,"XP Buff Small","yakitori") +@filter_array(objects(),(: base_name($1)=="/domains/std/guild/missions/wood_gathering" && clonep($1) :))->remove() @GUILD_D->add_guild_skill("yakitori","combat/special/roundhouse") */ diff --git a/lib/daemons/help_d.c b/lib/daemons/help_d.c index d9b04d14..f46e8c11 100644 --- a/lib/daemons/help_d.c +++ b/lib/daemons/help_d.c @@ -15,6 +15,10 @@ inherit M_DAEMON_DATA; +// count total functions found in rst files for completion check. +private +nosave int fun_total; + // mapping topic_refs, to record directories and topic names // which should be used as additional topic references for all files // within those dirs - eg all files within /help/player/bin as to be @@ -26,6 +30,10 @@ nosave mapping topic_refs = "/help/player/command/":"player_commands", "/help/player/quests/":"quests", "/help/player/":"topics", "/help/wizard/bin/":"wizard_commands", "/help/admin/command/":"admin_commands", ]); +// mapping tags holds tags for each of the documentation files. +private +mapping tags; + /* ** This mapping contains all the topics in the system. It ** maps topic names to an array of pathnames. The level- @@ -68,6 +76,46 @@ int f_restrict(string s) restrict[trim(r[0])] = to_int(r[1]); } +private +parse_rst(string path, string file) +{ + string *contents = filter_array(explode(read_file(path + file), "\n"), + ( + : strsrch($1, ".. c:function::") != -1 || strsrch($1, "TAGS: ") != -1 + :)); + + if (!sizeof(contents)) + return; + + fun_total += sizeof(contents); + + foreach (string f in contents) + { + string fun, tmp; + fun = explode(explode(f, "(")[0], " ")[ < 1]; + if (fun[0] == '*') + fun = fun[1..]; + + if (strlen(f) > 7 && f[0..7] == ".. TAGS:") + { + string *taglist = explode(f[8..], " "); + foreach (string t in taglist) + { + if (tags[t]) + tags[t] += ({path + file}); + else + tags[t] = ({path + file}); + } + continue; + } + + if (topics[fun]) + topics[fun] += ({path + file}); + else + topics[fun] = ({path + file}); + } +} + private void process_file(string path, string file) { @@ -78,7 +126,7 @@ void process_file(string path, string file) if (file == "." || file == "..") return; - if (file[0] == '_' || (strlen(file) > 5 && file[ < 4..] == ".rst") || file == ".gitignore") + if (file[0] == '_' || file == ".gitignore") return; pathname = path + file; @@ -96,7 +144,22 @@ void process_file(string path, string file) ++pending_count; } + if (strlen(file) > 4 && file[ < 4..] == ".rst") + { + parse_rst(path, file); + file = file[0.. < 5]; + } + + if (strlen(file) > 4 && file[ < 3..] == ".md") + { + file = file[0.. < 4]; + } + + if (strsrch(file, "-") != -1) + file = implode(explode(file, "-")[1..], ""); + file = lower_case(file); + if (topics[file]) topics[file] += ({pathname}); else @@ -123,7 +186,11 @@ nomask void process_dir(string path) if (initiator) { - tell(initiator, "HELP_D has finished the rebuild.\n"); + tell(initiator, + "HELP_D has finished the rebuild.\n" + // + sprintf(" %5.5s", "" + fun_total) + " functions added to index.\n" + + sprintf(" %5.5s", "" + sizeof(clean_array(flatten_array(values(topics))))) + " help files known.\n" + + sprintf(" %5.5s", "" + sizeof(keys(topics))) + " topics found in index.\n"); initiator = 0; } } @@ -144,7 +211,9 @@ nomask void rebuild_data() initiator = this_user(); topics = ([]); + tags = ([]); restrict = ([]); + fun_total = 0; lines = explode(read_file(DIR_HELP "/_restrict"), "\n"); map_array(lines, ( : f_restrict:)); @@ -190,7 +259,7 @@ nomask string *find_topic(string name) mixed *parts = explode(file, "/"); if (sizeof(parts) < 3) return 1; - return (lvl >= restrict[parts[1]]); + return (lvl >= restrict[parts[1]] || lvl >= restrict[parts[1] + "/" + parts[2]]); }, lvl); } @@ -219,6 +288,11 @@ mapping query_topics() return topics; } +mapping query_tags() +{ + return tags; +} + mapping query_restrict() { return restrict; diff --git a/lib/daemons/imud_d.c b/lib/daemons/imud_d.c index 401fdcc3..1db21619 100644 --- a/lib/daemons/imud_d.c +++ b/lib/daemons/imud_d.c @@ -228,7 +228,8 @@ nomask void reconnect() ({ password, query_mudlist_id(), query_chanlist_id(), __PORT__, PORT_I3_TCP_OOB, 0, /* DO NOT change this; see comments in /secure/user/login.c */ - lima_version(), "Lima", driver_version(), "LP", lib_status(), ADMIN_EMAIL, + lima_version(), "Lima", driver_version(), "LP", lib_status(), + mud_name() == "LIMA" ? "developers@limalib.dev" : ADMIN_EMAIL, (["tell":1, "emoteto":1, "who":1, "finger":1, "locate":1, "channel":1, "auth":1, "ucache":1, "file":1, "http":80, "ftp":21, "mail":1]), @@ -249,11 +250,11 @@ void create() destruct(this_object()); return; } - if (ADMIN_EMAIL == "billg@microsoft.com") + if (mud_name() != "LIMA" && ADMIN_EMAIL == "billg@microsoft.com") { write("ERROR:\n" - " The I3 daemon will not load until you set a proper ADMIN_EMAIL\n" - " value in /include/config.h\n"); + " The IMUD daemon will not load until you set a proper ADMIN_EMAIL\n" + " value in /include/config.h. Set this value and do: update `IMUD_D`\n"); destruct(this_object()); return; } @@ -262,7 +263,7 @@ void create() mudlist_reset_entries(); - reconn_func = (: reconnect :); + reconn_func = ( : reconnect:); oob_startup(); chan_startup(); @@ -271,14 +272,15 @@ void create() trigger_reconnect("router"); set_privilege("Mudlib:daemons"); - + call_out("imud_socket_keepalive", 120); } -private void imud_socket_keepalive() +private +void imud_socket_keepalive() { - router_socket->send_telnet_nop(); - call_out("imud_socket_keepalive", 120); + router_socket->send_telnet_nop(); + call_out("imud_socket_keepalive", 120); } void remove(int coming_back_soon) diff --git a/lib/daemons/last_login_d.c b/lib/daemons/last_login_d.c index be368083..679b6af7 100644 --- a/lib/daemons/last_login_d.c +++ b/lib/daemons/last_login_d.c @@ -11,6 +11,7 @@ ** ** 950930, Ranma@Koko Wa: log players entering and quitting the game ** 950608, Deathblade: created +** 2023, Tsath: Extended to carry more information about previous IPs. */ #include @@ -54,7 +55,7 @@ nomask void register_last(string userid, string addr) s = sprintf("%s created from %s [%s]\n", userid, addr, ctime(time())); LOG_D->log(LOG_NEW_PLAYERS, s); } - + ips_for_login[userid] -= ({0}); lastdata[userid] = ({time(), addr}); } save_me(); diff --git a/lib/daemons/lima_d.c b/lib/daemons/lima_d.c new file mode 100644 index 00000000..dae96541 --- /dev/null +++ b/lib/daemons/lima_d.c @@ -0,0 +1,140 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* Daemon to keep track of what people have been doing. + * -Beek + */ + +#include +#include + +inherit M_GLOB; +inherit M_ACCESS; + +mapping did; + +private +nomask int start_index(string version, int after) +{ + int index = sizeof(did[version]); + if (after > time()) + return 0; + + while (index > 0 && did[version][index - 1][0] > after) + index--; + + return index; +} + +// private +nomask string *get_entries(int after, string *header, string pattern, string version) +{ + int index = start_index(version, after); + string *output = header; + + if (!did[version]) + did[version] = ({}); + + if (index >= sizeof(did[version])) + return 0; + + if (!header) + output = ({"Change Log", "**********", ""}); + + if (pattern) + pattern = translate(pattern, 1); + + for (; index < sizeof(did[version]); index++) + { + if (!pattern || regexp(did[version][index][1], pattern)) + output += explode(sprintf("%s: %s", ctime(did[version][index][0]), did[version][index][1]), "\n") + ({""}); + } + + return output; +} + +string *dump_entries(string version) +{ + return did[version]; +} + +string *versions() +{ + return keys(did) - ({0}); +} + +varargs void dump_did_info(int after, string *header, string pattern, function continuation, string version) +{ + string *output = get_entries(after, header, pattern, version); + + if (!output) + { + if (continuation) + evaluate(continuation); + } + else + { + more(output, 0, continuation, NO_ANSI); + } +} + +varargs string get_did_info(int after, string *header, string pattern, function continuation, string version) +{ + string *output = get_entries(after, header, pattern, version); + + if (!output) + { + if (continuation) + evaluate(continuation); + return "No recent changes.\n"; + } + + return implode(output, "\n"); +} + +varargs void print_changelog_to_file(string file, int after, int show_date, string version) +{ + int index = start_index(version, after); + string output = ""; + + if (show_date) + { + for (; index < sizeof(did); index++) + { + output += sprintf("%s: %s\n", ctime(did[index][0]), did[index][1]) + "\n"; + } + } + else + { + for (; index < sizeof(did); index++) + { + output += sprintf("%s\n", did[index][1]) + "\n"; + } + } + write_file(file, output); +} + +nomask string create_file_name() +{ + return "/data/lima/daemons/did"; +} + +//: FUNCTION restore_me +// Restore the data from the save file. Automatically called by create(). +protected +nomask void restore_me() +{ + string fn = create_file_name(); + if (unguarded(1, ( : file_size, fn + __SAVE_EXTENSION__:)) > 0) + unguarded(1, ( : restore_object, fn, 1 :)); +} + +void save_me() +{ + write("LIMA_D does not save."); +} + +create() +{ + set_privilege(1); + restore_me(); +} diff --git a/lib/daemons/method_d.c b/lib/daemons/method_d.c index 6ec60151..4891e719 100644 --- a/lib/daemons/method_d.c +++ b/lib/daemons/method_d.c @@ -13,112 +13,115 @@ void save_me(); mapping methods = (["dismount":({"dismount","get off",}),"descend":({"descend","climb down","go down",} ),"ascend":({"ascend","climb up","go up",}),"crawl under":({"crawl under","get under",}),"lie on":({"lie on",}),"sit in":({"enter","sit in","get in",}),"leave":({"exit","leave","get out" -,}),"go":({"go",}),"wade in":({"wade in",}),"stand on":({"get on","stand on",}),"enter":({"en -ter",}),"stand":({"stand","stand up",}),"mount":({"mount","sit on","get on",}),"sit on":({"ge -t on","sit on",})]); +, +}),"go":({"go",}),"wade in":({"wade in",}),"stand on":({"get on","stand on",}),"enter":({ + "en + ter ",})," stand ":({" stand "," stand up ",})," mount ":({" mount "," sit on "," get on ",})," sit on + ":({" ge t on "," sit on ",})]); -//: FUNCTION add_method -// Add a method and a set of equivalents -// Any arguments after the first are equivalents to the method. -void add_method(string method, string *equivs...) -{ - string *add = ({}); - string verb, prep; - if (!check_privilege("Mudlib:daemons")) - error("Insufficient privileges to add_method()"); - if (sscanf(method, "%s %s", verb, prep) == 2) + //: FUNCTION add_method + // Add a method and a set of equivalents + // Any arguments after the first are equivalents to the method. + void + add_method(string method, string * equivs...) { - /* There is a preposition */ - prep = PREPOSITION_D->translate_preposition(prep); - if (member_array(prep, PREPOSITION_D->consolidated_preps()) == -1) - error("Illegal preposition in method"); - method = sprintf("%s %s", verb, prep); - } - equivs = clean_array(({method}) + equivs); - foreach (string test in equivs) - { - if (sscanf(test, "%s %s", verb, prep) == 2) + string *add = ({}); + string verb, prep; + if (!check_privilege("Mudlib:daemons")) + error("Insufficient privileges to add_method()"); + if (sscanf(method, "%s %s", verb, prep) == 2) { /* There is a preposition */ prep = PREPOSITION_D->translate_preposition(prep); if (member_array(prep, PREPOSITION_D->consolidated_preps()) == -1) error("Illegal preposition in method"); - add += ({sprintf("%s %s", verb, prep)}); + method = sprintf("%s %s", verb, prep); } - add += ({test}); + equivs = clean_array(({method}) + equivs); + foreach (string test in equivs) + { + if (sscanf(test, "%s %s", verb, prep) == 2) + { + /* There is a preposition */ + prep = PREPOSITION_D->translate_preposition(prep); + if (member_array(prep, PREPOSITION_D->consolidated_preps()) == -1) + error("Illegal preposition in method"); + add += ({sprintf("%s %s", verb, prep)}); + } + add += ({test}); + } + methods[method] = clean_array(add); + save_me(); } - methods[method] = clean_array(add); - save_me(); -} -//: FUNCTION remove_method -// Remove a method and it's equivalents -void remove_method(string method) -{ - if (!check_privilege("Mudlib:daemons")) - error("Insufficient privileges to remove_method"); - map_delete(methods, method); - save_me(); -} + //: FUNCTION remove_method + // Remove a method and it's equivalents + void remove_method(string method) + { + if (!check_privilege("Mudlib:daemons")) + error("Insufficient privileges to remove_method"); + map_delete(methods, method); + save_me(); + } -//: FUNCTION list_methods -// Return an array of all methods which have equivalents -string *list_methods() -{ - return keys(methods); -} + //: FUNCTION list_methods + // Return an array of all methods which have equivalents + string *list_methods() + { + return keys(methods); + } -//: FUNCTION add_method_equivalants -// Add an additional equivalents to a given method. -void add_method_equivalents(string method, string *equivs...) -{ - string *add = ({}); - if (!check_privilege("Mudlib:daemons")) - error("Insufficient privileges to add_method_equivalents"); - if (member_array(method, keys(methods)) == -1) - error("Attempted to add equivalents to a nonexistant method"); - foreach (string test in equivs) + //: FUNCTION add_method_equivalants + // Add an additional equivalents to a given method. + void add_method_equivalents(string method, string * equivs...) { - string verb, prep; - if (sscanf(test, "%s %s", verb, prep) == 2) + string *add = ({}); + if (!check_privilege("Mudlib:daemons")) + error("Insufficient privileges to add_method_equivalents"); + if (member_array(method, keys(methods)) == -1) + error("Attempted to add equivalents to a nonexistant method"); + foreach (string test in equivs) { - /* There is a preposition */ - prep = PREPOSITION_D->translate_preposition(prep); - if (member_array(prep, PREPOSITION_D->consolidated_preps()) == -1) - error("Illegal preposition in method"); - add += ({sprintf("%s %s", verb, prep)}); + string verb, prep; + if (sscanf(test, "%s %s", verb, prep) == 2) + { + /* There is a preposition */ + prep = PREPOSITION_D->translate_preposition(prep); + if (member_array(prep, PREPOSITION_D->consolidated_preps()) == -1) + error("Illegal preposition in method"); + add += ({sprintf("%s %s", verb, prep)}); + } + add += ({test}); } - add += ({test}); - } - methods[method] = clean_array(add + methods[method]); - save_me(); -} + methods[method] = clean_array(add + methods[method]); + save_me(); + } -//: FUNCTION remove_method_equivalents -// Remove equivalents from a given method -void remove_method_equivalents(string method, string *equivs...) -{ - if (!check_privilege("Mudlib:daemons")) - error("Insufficient privileges to remove_method_equivalents"); - if (member_array(method, keys(methods)) == -1) - error("Attempted to remove equivalents from a nonexistant method"); - methods[method] -= equivs; - if (!sizeof(methods[method])) - remove_method(method); - save_me(); -} + //: FUNCTION remove_method_equivalents + // Remove equivalents from a given method + void remove_method_equivalents(string method, string * equivs...) + { + if (!check_privilege("Mudlib:daemons")) + error("Insufficient privileges to remove_method_equivalents"); + if (member_array(method, keys(methods)) == -1) + error("Attempted to remove equivalents from a nonexistant method"); + methods[method] -= equivs; + if (!sizeof(methods[method])) + remove_method(method); + save_me(); + } -//: FUNCTION list_method_equivalents -// Return an array of equivalents to a given method -string *list_method_equivalents(string method) -{ - if (member_array(method, keys(methods)) == -1) - return 0; - return methods[method]; -} + //: FUNCTION list_method_equivalents + // Return an array of equivalents to a given method + string *list_method_equivalents(string method) + { + if (member_array(method, keys(methods)) == -1) + return 0; + return methods[method]; + } -mapping debug() -{ - return methods; -} + mapping debug() + { + return methods; + } diff --git a/lib/daemons/moderation.c b/lib/daemons/moderation.c deleted file mode 100644 index e645c914..00000000 --- a/lib/daemons/moderation.c +++ /dev/null @@ -1,186 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -/* -** moderation.c -- channel moderation facilities -** -** 960115, Deathblade: created -*/ - -#include - -// ### this file is currently included into the channel daemon (rather than -// ### inherited cuz we can't do this inherit (driver) -inherit CLASS_CHANNEL_INFO; - -class channel_info query_channel_info(string channel_name); -string user_channel_name(string channel_name); -void deliver_notice(string channel_name, string message); -nomask string make_name_list(mixed *list); - -/* -** print_mod_info() -** -** Print moderator/speak infor for a moderated channel. -*/ -protected -nomask void print_mod_info(string channel_name) -{ - class channel_info ci = query_channel_info(channel_name); - - if (!ci.moderator) - return; - - printf("It is being moderated by %s.\n", ci->moderator->query_name()); - - if (ci.speaker) - printf("The current speaker is %s.\n", ci->speaker->query_name()); - else - printf("There is no current speaker.\n"); - - if (ci.moderator == this_body()) - { - if (!ci.requestors || !sizeof(ci.requestors)) - printf("There are no requestors.\n"); - else - tell(this_user(), sprintf("Requestors are: %s.\n", make_name_list(ci.requestors)), MSG_INDENT); - } - else if (member_array(this_body(), ci.requestors) != -1) - { - printf("Your hand is raised to speak.\n"); - } -} - -/* this is used when signing off from a channel... */ -protected -nomask void moderation_signoff(string channel_name) -{ - class channel_info ci = query_channel_info(channel_name); - - if (!ci) - return; - - if (this_body() == ci.moderator) - { - ci.moderator = ci.speaker = ci.requestors = 0; - - deliver_notice(channel_name, "This channel is now unmoderated"); - } - else if (this_body() == ci.speaker) - { - ci.speaker = 0; - deliver_notice(channel_name, sprintf("%s is no longer speaking", this_body()->query_name())); - } -} - -protected -nomask int cmd_moderation(string channel_name, string arg) -{ - class channel_info ci = query_channel_info(channel_name); - string user_channel_name = user_channel_name(channel_name); - object tb = this_body(); - string sender_name = tb->query_name(); - - if (arg == "/raise") - { - if (!ci.moderator) - { - printf("'%s' is not moderated.\n", user_channel_name); - } - else if (tb == ci.speaker) - { - printf("You are already speaking on '%s'.\n", user_channel_name); - } - else if (member_array(tb, ci.requestors) == -1) - { - printf("Your raise your hand to speak on '%s'.\n", user_channel_name); - ci.requestors += ({tb}); - ci->moderator->channel_rcv_string( - channel_name, sprintf("[%s] (%s raises a hand to speak)\n", user_channel_name, sender_name)); - } - else - { - printf("You already have your hand raised to speak on '%s'.\n", user_channel_name); - } - } - else if (arg == "/lower") - { - if (!ci.moderator) - { - printf("'%s' is not moderated.\n", user_channel_name); - } - else if (member_array(tb, ci.requestors) != -1) - { - printf("Your lower your hand to avoid speaking on '%s'.\n", user_channel_name); - ci.requestors -= ({tb}); - ci->moderator->channel_rcv_string(channel_name, - sprintf("[%s] (%s lowers a hand)\n", user_channel_name, sender_name)); - } - else - { - printf("Your hand is not raised to speak on '%s'.\n", user_channel_name); - } - } - else if (arg[0..4] == "/call") - { - arg = lower_case(trim(arg[5..])); - if (!ci.moderator) - { - printf("'%s' is not moderated.\n", user_channel_name); - } - else if (ci.moderator != tb) - { - printf("You are not the moderator of '%s'.\n", user_channel_name); - } - else if (arg == "") - { - if (sizeof(ci.requestors) == 0) - { - printf("Nobody has their hand raised.\n"); - } - else - { - ci.speaker = ci.requestors[0]; - ci.requestors = ci.requestors[1..]; - deliver_notice(channel_name, sprintf("%s will now speak", ci->speaker->query_name())); - } - } - else - { - object *spkr; - - spkr = filter_array(ci.requestors, ( : $(arg) == lower_case($1->query_name()) :)); - if (sizeof(spkr) == 0) - { - printf("'%s' was not found (or did not have their hand raised.\n", capitalize(arg)); - } - else - { - ci.speaker = spkr[0]; - ci.requestors -= ({spkr[0]}); - deliver_notice(channel_name, sprintf("%s will now speak", ci->speaker->query_name())); - } - } - } - else if (arg == "/moderate") - { - if (adminp(this_user()) || GROUP_D->member_group(this_user()->query_userid(), "moderators")) - { - ci.moderator = tb; - if (!ci.requestors) - ci.requestors = ({}); - deliver_notice(channel_name, sprintf("%s is now moderating", sender_name)); - } - else - { - printf("You are not allowed to moderate this channel.\n"); - } - } - else - { - /* not handled */ - return 0; - } - - /* handled */ - return 1; -} diff --git a/lib/daemons/money_d.c b/lib/daemons/money_d.c index 83ca9d01..acccdaf6 100644 --- a/lib/daemons/money_d.c +++ b/lib/daemons/money_d.c @@ -55,7 +55,8 @@ nosave mapping singulars = ([]); // e.g. lover case, without spaces and singular. string singular_name(string name) { - if (!name) return; + if (!name) + return; name = lower_case(trim(name)); if (singulars[name]) name = singulars[name]; @@ -363,7 +364,7 @@ mapping *handle_subtract_money(object player, float f_amount, string type) if (is_currency(type)) { - mapping money = player->query_money(); + mapping money = player->query_money() || ([]); string *types = denominations[type]; string currency = type; for (int i = sizeof(types) - 1; i >= 0; i--) @@ -420,6 +421,41 @@ mapping *handle_subtract_money(object player, float f_amount, string type) return ({substract, change}); } +string money_string(object body) +{ + string money_info = ""; + mapping curr; + int i; + curr = body->query_money() || ([]); + if (!sizeof(keys(curr))) + { + money_info += "You are carrying no money.\n"; + } + else + { + foreach (string key, int amount in curr) + { + mapping money = MONEY_D->calculate_denominations(amount, key); + string *denom_order = MONEY_D->query_denominations(key); + string *money_str = ({}); + int j = 0; + while (j < sizeof(denom_order)) + { + string denom = denom_order[j]; + int count = money[denom]; + if (count) + money_str += ({count + " " + denom + (count == 1 ? "" : "s")}); + j++; + } + if (sizeof(curr) > 1) + money_info += sprintf("%s: %s", capitalize(key), format_list(money_str) + "\n"); + else + money_info += sprintf("%s", format_list(money_str) + "\n"); + } + } + return money_info; +} + create() { ::create(); diff --git a/lib/daemons/news_d.c b/lib/daemons/news_d.c index c9d4bf82..f4bdb8ee 100644 --- a/lib/daemons/news_d.c +++ b/lib/daemons/news_d.c @@ -347,7 +347,7 @@ nomask int is_write_restricted(string group) return 0; /* If the domains doesn't exist that is in the restriction, we might * as well stop here because the rest of the calls will fail, */ - if (member_array(restrict[0], SECURE_D -> query_domains()) == -1) + if (member_array(restrict[0], SECURE_D->query_domains()) == -1) return 0; /* If the first character of the restriction is a capital letter the * user must be a lord of the domain */ @@ -359,7 +359,7 @@ nomask int is_write_restricted(string group) else return 1; } - if (member_array(restrict[0], SECURE_D -> query_domains(whoami)) > -1) + if (member_array(restrict[0], SECURE_D->query_domains(whoami)) > -1) return 0; return 1; } @@ -416,7 +416,7 @@ nomask int is_read_restricted(string group) return 0; /* If the domains doesn't exist that is in the restriction, we might * as well stop here because the rest of the calls will fail, */ - if (member_array(restrict[1], SECURE_D -> query_domains()) == -1) + if (member_array(restrict[1], SECURE_D->query_domains()) == -1) return 1; /* If the first character of the restriction is a capital letter the * user must be a lord of the domain */ @@ -428,7 +428,7 @@ nomask int is_read_restricted(string group) else return 1; } - if (member_array(restrict[1], SECURE_D -> query_domains(whoami)) > -1) + if (member_array(restrict[1], SECURE_D->query_domains(whoami)) > -1) return 0; return 1; } diff --git a/lib/daemons/party_d.c b/lib/daemons/party_d.c index f5b5fc5e..db6efc5d 100644 --- a/lib/daemons/party_d.c +++ b/lib/daemons/party_d.c @@ -1,33 +1,25 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ +//: MODULE // party_D - Daemon for storing groups of players on the mud and // awarding experience proportionally to those players // if experience is used. // March 1, 1997: Iizuka@Lima Bean created. +// ## Change access system to use leaders, and members marked in different way. + #define PARTIES_SAVE #ifdef PARTIES_SAVE inherit M_DAEMON_DATA; +inherit CLASS_PARTY; #else #define save_me() #define restore_me() #endif -class party -{ - string name; - mapping members; - mapping kills; - string title; - string password; - int min_level; - int max_level; - int max_active; - int total_kills; -} - -private int DIFF = 5; +private +int DIFF = 5; private mapping parties = ([]); @@ -46,9 +38,9 @@ nomask int register_party(string name, string owner, string password) new_party.members[owner] = 1; new_party.kills = ([]); new_party.kills[owner] = 0; - new_party.password = password; + new_party.password = crypt(password, 0); new_party.total_kills = 0; - parties += ([lower_case(name):new_party]); + parties[name] = new_party; save_me(); return 1; } @@ -63,14 +55,21 @@ mixed test(string name) class party t = parties[name]; } +// Either the password matches the crypt or the entire crypt is input +nomask int check_password(string pname, string passwd) +{ + return crypt(passwd, ((class party)parties[pname]).password) == ((class party)parties[pname]).password || + passwd == ((class party)parties[pname]).password; +} + nomask int award_experience(object slayer, string name, object *viable, int level) { - class party tmp = parties[lower_case(name)]; + class party tmp = parties[name]; string *party_members = keys(tmp.members); int x = 0; float total = 0.0; - parties[lower_case(name)].total_kills++; + parties[name].total_kills++; foreach (string member_name in party_members) { @@ -78,7 +77,7 @@ nomask int award_experience(object slayer, string name, object *viable, int leve if (b && member_array(b, viable) != -1) { if (slayer && slayer == b) - parties[lower_case(name)].kills[member_name]++; + parties[name].kills[member_name]++; total += b->query_level(); } @@ -97,6 +96,12 @@ nomask int award_experience(object slayer, string name, object *viable, int leve } } + if (!tmp.kill_list) + tmp.kill_list = ({}); + tmp.kill_list += ({previous_object()->query_in_room_desc()}); + if (sizeof(tmp.kill_list) > 10) + tmp.kill_list = tmp.kill_list[1..]; + save_me(); return 1; } @@ -104,7 +109,7 @@ nomask int award_experience(object slayer, string name, object *viable, int leve #ifdef USE_KARMA nomask void modify_karma(string name, object *viable, int karma_impact) { - class party tmp = parties[lower_case(name)]; + class party tmp = parties[name]; string *party_members = keys(tmp.members); int x = 0; @@ -117,9 +122,26 @@ nomask void modify_karma(string name, object *viable, int karma_impact) } #endif +//: FUNCTION flip_mapping +// Reverses the keys and values in a mapping if +// the values are compatible as keys. +mapping flip_mapping(mapping map) +{ + mapping new_map = ([]); + map_mapping(map, ( : $(new_map)[$2] = $1:)); + return new_map; +} + +nomask string query_owner(string pname) +{ + mapping members = ((class party)parties[pname]).members; + int min = min(values(members)); + return flip_mapping(members)[min]; +} + nomask string *query_party_members(string pname) { - return keys(((class party)parties[lower_case(pname)])->members); + return keys(((class party)parties[pname]).members); } nomask int add_member(string new_member, string pname, string password) @@ -128,47 +150,75 @@ nomask int add_member(string new_member, string pname, string password) int access; string *members = query_party_members(pname); - pname = lower_case(pname); - if (password != ((class party)parties[pname])->password) + if (!check_password(pname, password)) return 0; - // If the difference in levels between the new member - // and any existing member of the party is greater - // than DIFF, do not add the new member. - if (body->query_level() > ((class party)parties[pname])->min_level + DIFF || - body->query_level() < ((class party)parties[pname])->max_level - DIFF) - return 0; + /* + //Broken right now + + // If the difference in levels between the new member + // and any existing member of the party is greater + // than DIFF, do not add the new member. + if (body->query_level() > ((class party)parties[pname]).min_level + DIFF || + body->query_level() < ((class party)parties[pname]).max_level - DIFF) + return 0; + */ // Update the new minimum and maximum levels for the party if needed. - if (body->query_level() > ((class party)parties[pname])->max_level) - ((class party)parties[pname])->max_level = body->query_level(); - if (body->query_level() < ((class party)parties[pname])->min_level) - ((class party)parties[pname])->min_level = body->query_level(); + if (body->query_level() > ((class party)parties[pname]).max_level) + ((class party)parties[pname]).max_level = body->query_level(); + if (body->query_level() < ((class party)parties[pname]).min_level) + ((class party)parties[pname]).min_level = body->query_level(); - access = sizeof(((class party)parties[pname])->members) + 1; + access = sizeof(((class party)parties[pname]).members) + 1; - ((class party)parties[pname])->members[new_member] = access; - ((class party)parties[pname])->kills[new_member] = 0; + ((class party)parties[pname]).members[new_member] = access; + ((class party)parties[pname]).kills[new_member] = 0; foreach (string m in members) { object b = find_body(lower_case(m)); - tell(b, new_member + " has joined the party.\n"); + if (b) + tell(b, new_member + " has joined the party.\n"); } save_me(); return 1; // Member has been added } -nomask int remove_member(string member, string pname) +mapping move_access(mapping members, int access) { - pname = lower_case(pname); - if (!((class party)parties[pname])->members[member]) + foreach (string m, int a in members) { - return 0; // no such member + if (a > access) + members[m] = --a; } + return members; +} + +void swap_access(string member, string member2, string pname) +{ + class party party = ((class party)parties[pname]); + int a1, a2; + a1 = party.members[member]; + a2 = party.members[member2]; + + // Swap the access levels. + party.members[member] = a2; + party.members[member2] = a1; + + save_me(); +} + +nomask int remove_member(string member, string pname) +{ + + if (!((class party)parties[pname]).members[member]) + return 0; // no such member else { - map_delete(((class party)parties[pname])->members, member); + map_delete(((class party)parties[pname]).members, member); + ((class party)parties[pname]).members = + move_access(((class party)parties[pname]).members, ((class party)parties[pname]).members[member]); } save_me(); @@ -179,11 +229,10 @@ nomask string locate_access_member(string pname, int access) { string *members; - pname = lower_case(pname); - members = keys(((class party)parties[pname])->members); + members = keys(((class party)parties[pname]).members); foreach (string name in members) { - if (((class party)parties[pname])->members[name] == access) + if (((class party)parties[pname]).members[name] == access) return name; } return 0; @@ -200,47 +249,72 @@ int change_access(string pname, string member, int access) string current_member; int old_access; - pname = lower_case(pname); current_member = locate_access_member(pname, access); - old_access = ((((class party)parties[pname])->members[member])); - ((((class party)parties[pname])->members[current_member])) = old_access; - ((((class party)parties[pname])->members[member])) = access; + old_access = ((((class party)parties[pname]).members[member])); + ((((class party)parties[pname]).members[current_member])) = old_access; + ((((class party)parties[pname]).members[member])) = access; save_me(); return 1; } +string query_theme(string pname) +{ + class party party = (class party)parties[pname]; + + return party.theme || "none"; +} + +void set_theme(string t, string pname) +{ + class party party = (class party)parties[pname]; + + party.theme = t; + save_me(); +} + nomask string locate_user(string name) { string *p = keys(parties); foreach (string s in p) { - if (member_array(name, keys(((class party)parties[s])->members)) != -1) + if (member_array(name, keys(((class party)parties[s]).members)) != -1) return s; } // return filter(keys(parties), (: member_array(name, - // keys(((class party)parties[$1])->members)) :)); + // keys(((class party)parties[$1]).members)) :)); } -nomask string *list_all_parties() +nomask mapping list_all_parties() { - return keys(parties); + mapping p = ([]); + foreach (string name, class party party in parties) + { + p[name] = ({party.total_kills, sizeof(party.members),party.theme}); + } + + return p; } nomask int query_party_kills(string pname) { - return ((class party)parties[lower_case(pname)])->total_kills; + return ((class party)parties[pname]).total_kills; +} + +nomask string *query_kill_list(string pname) +{ + return ((class party)parties[pname]).kill_list; } nomask int query_member_access(string pname, string member) { - return ((((class party)parties[lower_case(pname)])->members[member])); + return ((((class party)parties[pname]).members[member])); } nomask int query_member_kills(string pname, string member) { - return ((((class party)parties[lower_case(pname)])->kills[member])); + return ((((class party)parties[pname]).kills[member])); } // Find a user in the party 'pname' with a given access level. @@ -248,11 +322,10 @@ nomask string locate_member_by_access(string pname, int access) { string *m; - pname = lower_case(pname); - m = keys(((class party)parties[pname])->members); + m = keys(((class party)parties[pname]).members); foreach (string s in m) { - if (((((class party)parties[pname])->members[s])) == access) + if (((((class party)parties[pname]).members[s])) == access) return s; } return 0; @@ -261,12 +334,12 @@ nomask string locate_member_by_access(string pname, int access) // The maximum number of members that can be active in one login. nomask int query_max_active(string pname) { - return ((class party)parties[lower_case(pname)])->max_active; + return ((class party)parties[pname]).max_active; } nomask void set_max_active(string pname, int n) { - ((class party)parties[lower_case(pname)])->max_active = n; + ((class party)parties[pname]).max_active = n; save_me(); } @@ -275,8 +348,7 @@ nomask string *query_active_members(string pname) int max; string *all; - pname = lower_case(pname); - max = ((class party)parties[pname])->max_active; + max = ((class party)parties[pname]).max_active; all = ({}); // If there is no limit, list all users. Default is no limit. if (max == 0) @@ -290,35 +362,35 @@ nomask string *query_active_members(string pname) nomask void set_title(string pname, string title) { - ((class party)parties[lower_case(pname)])->title = title; + ((class party)parties[pname]).title = title; save_me(); } nomask string query_title(string pname) { - return ((class party)parties[lower_case(pname)])->title; + return ((class party)parties[pname]).title; } nomask void set_password(string pname, string password) { - ((class party)parties[lower_case(pname)])->password = password; + ((class party)parties[pname]).password = crypt(password, 0); save_me(); } nomask string query_password(string pname) { - return ((class party)parties[lower_case(pname)])->password; + return ((class party)parties[pname]).password; } nomask void remove_party(string pname) { - map_delete(parties, lower_case(pname)); + map_delete(parties, pname); save_me(); } nomask int party_exists(string pname) { - return pname ? (parties[lower_case(pname)] ? 1 : 0) : 0; + return pname ? (parties[pname] ? 1 : 0) : 0; } void create() diff --git a/lib/daemons/quest_d.c b/lib/daemons/quest_d.c index e7d0bdab..5152ebcb 100644 --- a/lib/daemons/quest_d.c +++ b/lib/daemons/quest_d.c @@ -11,23 +11,23 @@ inherit M_DAEMON_DATA; mapping quests = (["std":(["pirate:secretPsg":({ - "/domains/std/objects/dock_wall", + "/domains/std/object/dock_wall", 5, 0, 0, }), - "pirate:treasure":({ - "/domains/std/objects/sand_with_treasure", - 10, - 0, - "Congratulations! You completed the sample Pirate quest.", - }), - " pirate : foundCave ":({ - "/domains/std/rooms/beach/Sandy_Beach ", - 10, - 0, - 0, - }), + "pirate:treasure":({ + "/domains/std/object/sand_with_treasure", + 10, + 0, + "Congratulations! You completed the sample Pirate quest.", + }), + " pirate:foundCave ":({ + "/domains/std/room/beach/Sandy_Beach ", + 10, + 0, + 0, + }), ]), ]); mapping quest_names = ([]); diff --git a/lib/daemons/reporter_d.c b/lib/daemons/reporter_d.c index 75ca2967..8197a0b0 100644 --- a/lib/daemons/reporter_d.c +++ b/lib/daemons/reporter_d.c @@ -9,7 +9,6 @@ ** Created: 4-Sep-94 Deathblade */ -#include #include #include #include diff --git a/lib/daemons/rst_d.c b/lib/daemons/rst_d.c index 5766eed9..898a618a 100644 --- a/lib/daemons/rst_d.c +++ b/lib/daemons/rst_d.c @@ -9,7 +9,7 @@ inherit M_REGEX; inherit M_DAEMON_DATA; -#define RST_DIR "/help/rst" +#define RST_DIR "/help/autodoc" #define FILE_NAME 0 #define FILE_TYPE 1 #define FILE_PRETTY 2 @@ -24,15 +24,11 @@ inherit M_DAEMON_DATA; private void continue_scan(); private -void prepare_ingame_pages(); -private int last_time; private mixed *files_to_do; private mixed *dirs_to_do; -private -string *ingame_files; private void delete_directory(string directory) @@ -51,23 +47,29 @@ void delete_directory(string directory) } private -void make_directories() +int make_directories() { + string *directories = ({"api", "daemon", "command", "player_command", "module", "mudlib", "verb"}); + /* Assume that if the filesize is -1 that a directory needs to be created */ - string *directories = ({"api", "daemon", "command", "player_command", "module", "mudlib", "verb", "ingame"}); + if (file_size(RST_DIR) == -1) + unguarded(1, (: mkdir, RST_DIR :)); + // Still no success? Then abort here. if (file_size(RST_DIR) == -1) - mkdir(RST_DIR); + return 0; + foreach (string d in directories) { if (file_size(RST_DIR + "/" + d) == -1) - mkdir(RST_DIR + "/" + d); + unguarded(1, (: mkdir, RST_DIR+"/"+d :)); } + + return 1; } //: FUNCTION scan_mudlib -// // Recursively searches the mudlib for files which have been changed // since the last time the docs were updated, and recreates the documentation // for those files. @@ -78,19 +80,24 @@ void scan_mudlib() dirs_to_do = ({"/"}); if (!last_time) { + delete_directory(RST_DIR); + if (!make_directories()) + { + printf("*** Run '@RST_D->complete_rebuild()' as an ADMIN to initiate the autodoc system.\n" + " Your help system will be disabled until then.\n"); + return; + } + make_directories(); } - prepare_ingame_pages(); continue_scan(); } //: FUNCTION complete_rebuild -// // Rebuild all the data, regardless of modification time void complete_rebuild() { last_time = 0; - prepare_ingame_pages(); scan_mudlib(); } @@ -99,10 +106,13 @@ void complete_rebuild() // --------------------------------------------------------------------- nosave private string *filtered_dirs = - ({"/data/", "/ftp/", "/help/", "/include/", "/log/", "/open/", "/tmp/", "/user/", "/wiz/", "/contrib/"}); + ({"/data/", "/ftp/", "/help/", "/include/", "/log/", "/open/", "/tmp/", "/user/", WIZ_DIR+"/", "/contrib/"}); string *mod_name(string file) { + string *file_info; + string clean_file; + string subdir = 0; if (strlen(file) > 9 && file[0..8] == "/daemons/") subdir = "daemon"; @@ -124,7 +134,42 @@ string *mod_name(string file) subdir = "api"; sscanf(file, "%s.c", file); - return ({file[strsrch(file, "/", -1) + 1..], subdir}); + if (subdir == "player command" || subdir == "command" || subdir == "verb") + file_info = ({explode(file, "/")[ < 1], subdir}); + else + file_info = ({implode(explode(file, "/")[ < 2..], "-"), subdir}); + clean_file = explode(file, "/")[ < 1]; + + // This sets FILE_PRETTY + switch (file_info[FILE_TYPE]) + { + case "daemon": + file_info += ({"Daemon " + clean_file + "\n"}); + break; + case "player command": + file_info += ({"Player Command *" + clean_file + "*\n"}); + break; + case "verb": + file_info += ({"Verb *" + clean_file + "*\n"}); + break; + case "command": + file_info += ({"Command *" + clean_file + "*\n"}); + break; + case "module": + file_info += ({"Module *" + clean_file + "*\n"}); + break; + case "mudlib": + file_info += ({"Mudlib *" + clean_file + "*\n"}); + break; + case "api": + file_info += ({clean_file + "\n"}); + break; + default: + file_info += ({clean_file + "\n"}); + break; + } + + return file_info; } string func_name(string bar) @@ -135,22 +180,27 @@ string func_name(string bar) string command_link(string cmd, string type, int same_level) { + string name; + // For API's, do "simul_efun: misc" and "user: misc". + if (type == "api" || type == "mudlib") + return "`" + replace_string(cmd, "-", ": ") + " <" + (same_level ? "" : type + "/") + cmd + ".html>`_"; + + // Prettier names for daemons, e.g. Daemon: foo_d + if (type == "daemon") + return "`Daemon: " + replace_string(cmd, "daemons-", "") + " <" + (same_level ? "" : "daemon/") + cmd + + ".html>`_"; + + // For all others use just the last part of the filename + name = implode(explode(cmd, "-")[1..], ""); + if (type == "player command") return "`" + cmd + " <" + (same_level ? "" : "player_command/") + cmd + ".html>`_"; if (type == "verb") return "`" + cmd + " <" + (same_level ? "" : "verb/") + cmd + ".html>`_"; if (type == "command") return "`Command: " + cmd + " <" + (same_level ? "" : "command/") + cmd + ".html>`_"; - if (type == "daemon") - return "`Daemon: " + cmd + " <" + (same_level ? "" : "daemon/") + cmd + ".html>`_"; if (type == "module") - return "`Module: " + cmd + " <" + (same_level ? "" : "module/") + cmd + ".html>`_"; - if (type == "mudlib") - return "`" + cmd + " <" + (same_level ? "" : "mudlib/") + cmd + ".html>`_"; - if (type == "api") - return "`" + cmd + " <" + (same_level ? "" : "api/") + cmd + ".html>`_"; - if (type == "ingame") - return "`" + cmd + " <" + (same_level ? "../ingame/" : "ingame/") + cmd + ".html>`_"; + return "`Module: " + name + " <" + (same_level ? "" : "module/") + cmd + ".html>`_"; } void process_file(string fname) @@ -165,7 +215,9 @@ void process_file(string fname) string *cmd_info = ({}); string *module_info = ({}); string *c_functions = ({}); - string rstfile, rstout, description = ""; + string *tags = ({}); + string rstfile, rstout = "", description = ""; + mixed *assoc; int i, len; int write_file = 0; @@ -179,40 +231,16 @@ void process_file(string fname) rstfile = RST_DIR + "/" + replace_string(file_info[FILE_TYPE], " ", "_") + "/" + file_info[FILE_NAME] + ".rst"; - // This sets FILE_PRETTY - switch (file_info[FILE_TYPE]) + if (file_info[FILE_TYPE] != "player command") { - case "daemon": - file_info += ({"Daemon " + file_info[FILE_NAME] + "\n"}); - break; - case "player command": - file_info += ({"Player Command *" + file_info[FILE_NAME] + "*\n"}); - break; - case "verb": - file_info += ({"Verb *" + file_info[FILE_NAME] + "*\n"}); - break; - case "command": - file_info += ({"Command *" + file_info[FILE_NAME] + "*\n"}); - break; - case "module": - file_info += ({"Module *" + file_info[FILE_NAME] + "*\n"}); - break; - case "mudlib": - file_info += ({"Mudlib *" + file_info[FILE_NAME] + "*\n"}); - break; - case "api": - file_info += ({file_info[FILE_NAME] + "\n"}); - break; - default: - file_info += ({file_info[FILE_NAME] + "\n"}); - break; + string type = file_info[FILE_TYPE]; + if (type == "mudlib") + type = "functions for the mudlib"; + rstout = file_info[FILE_PRETTY]; + rstout += repeat_string("*", strlen(file_info[FILE_PRETTY])) + "\n\n"; + rstout += "Documentation for the " + file_info[FILE_NAME] + " " + type + " in *" + fname + "*.\n\n"; } - rstout = repeat_string("*", strlen(file_info[FILE_PRETTY])) + "\n"; - rstout += file_info[FILE_PRETTY]; - rstout += repeat_string("*", strlen(file_info[FILE_PRETTY])) + "\n\n"; - rstout += "Documentation for the " + file_info[FILE_NAME] + " " + file_info[FILE_TYPE] + " in *" + fname + "*.\n\n"; - len = sizeof(lines); while (i < len) { @@ -235,7 +263,10 @@ void process_file(string fname) string t = ""; while (lines[i][0..1] == "//") { - t += lines[i][2..]; + if (lines[i][2] == ' ') + t += lines[i][3..]; + else + t += lines[i][2..]; i++; } todo += ({t}); @@ -245,7 +276,11 @@ void process_file(string fname) { while (lines[i][0..1] == "//") { - module_info += ({lines[i][2..] + "\n"}); + if (lines[i][2] == ' ') + module_info += ({lines[i][3..] + "\n"}); + else + module_info += ({lines[i][2..] + "\n"}); + i++; } write_file = 1; @@ -254,7 +289,10 @@ void process_file(string fname) { while (lines[i][0..1] == "//") { - cmd_info += ({lines[i][2..] + "\n"}); + if (lines[i][2] == ' ') + cmd_info += ({lines[i][3..] + "\n"}); + else + cmd_info += ({lines[i][2..] + "\n"}); i++; } write_file = 1; @@ -263,7 +301,10 @@ void process_file(string fname) { while (lines[i][0..1] == "//") { - hook += ({lines[i][2..]}); + if (lines[i][2] == ' ') + hook += ({lines[i][3..]}); + else + hook += ({lines[i][2..]}); i++; } write_file = 1; @@ -291,7 +332,7 @@ void process_file(string fname) "\\>[ \t\n]*\\([ \t\na-zA-Z_0-9*,.]*(\\)|))", prototype)) { - c_functions += ({"\n\n.. c:function:: " + prototype + "\n" + description + "\n\n"}); + c_functions += ({".. c:function:: " + prototype + "\n" + description + "\n\n\n"}); write_file = 1; } } @@ -302,6 +343,11 @@ void process_file(string fname) LOG_D->log(LOG_AUTODOC, "Bad header tag: " + fname + " line " + i + ": " + line + "\n"); } } + else if (lines[i][0..10] == "// .. TAGS:") + { + tags += ({lines[i][12..]}); + i++; + } else i++; } @@ -318,13 +364,21 @@ void process_file(string fname) rstout += "\n"; } + // If we have lose tags floating around, dump them at the top of the file. + if (sizeof(tags) > 0) + { + foreach (string t in tags) + rstout += ".. TAGS: " + t + "\n"; + rstout += "\n"; + } + if (sizeof(cmd_info) > 0) { - string cfunch = file_info[FILE_TYPE] == "player command" ? "Player Command" : "Command"; + string cfun = file_info[FILE_TYPE] == "player command" ? "Player Command" : "Command"; int todoi = 1; int usage = 0; - rstout += cfunch + "\n" + repeat_string("=", strlen(cfunch)) + "\n\n"; + rstout += cfun + "\n" + repeat_string("=", strlen(cfun)) + "\n\n"; foreach (string cinf in cmd_info) { if (strlen(cinf) > 2 && (cinf[0..6] == "$$ see:" || cinf[0..5] == "$$see:")) @@ -335,15 +389,13 @@ void process_file(string fname) { s = trim(s); // Might be a link to a help page - if (member_array(s, ingame_files) != -1) - rstout += command_link(s, "ingame", 1) + " "; - else - rstout += command_link(s, file_info[FILE_TYPE], 1) + " "; + rstout += command_link(s, file_info[FILE_TYPE], 1) + " "; } rstout += "\n\n"; } else { + /* if (strsrch(cinf, "USAGE") != -1) { // Ugly, but seems to cover most situations. @@ -353,6 +405,7 @@ void process_file(string fname) rstout += trim(cinf) + "\n"; continue; } + */ if (trim(cinf) == "") usage = 0; @@ -378,9 +431,9 @@ void process_file(string fname) if (sizeof(c_functions) > 0) { - string cfunch = "Functions"; + string cfun = "Functions"; - rstout += cfunch + "\n" + repeat_string("=", strlen(cfunch)) + "\n\n"; + rstout += cfun + "\n" + repeat_string("=", strlen(cfun)) + "\n"; foreach (string cfunc in c_functions) { rstout += cfunc; @@ -410,25 +463,17 @@ void process_file(string fname) } } - rstout += "\n*File generated by LIMA reStructured Text daemon.*\n"; + // Add extra padding around code-block:: c + rstout = replace_string(rstout, ".. code-block:: c", "\n.. code-block:: c\n"); + + // Add footer. + rstout += "\n*File generated by " + lima_version() + " reStructured Text daemon.*\n"; if (write_file) { rm(rstfile); write_file(rstfile, rstout); - printf("RST for %s written to %s ...\n", fname, rstfile); - } -} - -void prepare_ingame_pages() -{ - string *files = filter_array(get_dir("/help/player/*", -1), ( : $1[1] != -2 :)); - ingame_files = ({}); - - foreach (mixed *file in files) - { - cp("/help/player/" + file[0], RST_DIR + "/ingame/" + file[0] + ".rst"); - ingame_files += ({file[0]}); + //printf("%s written to %s ...\n", fname, rstfile); } } @@ -437,7 +482,7 @@ void make_index(string header, string type, string *files, string filename) string output; output = repeat_string("*", strlen(header)) + "\n"; output += header + "\n"; - output += repeat_string("*", strlen(header)) + "\n\n"; + output += repeat_string("*", strlen(header)) + "\n\n.. TAGS: RST\n"; if (sizeof(files)) foreach (string file in files) @@ -484,10 +529,6 @@ void write_indices() files = get_dir(RST_DIR + "/mudlib/*.rst"); make_index("Mudlib", "mudlib", files, RST_DIR + "/Mudlib.rst"); - /* API index */ - files = get_dir(RST_DIR + "/ingame/*.rst"); - make_index("In game help files", "ingame", files, RST_DIR + "/Ingame.rst"); - cp("/USAGE", RST_DIR + "/Usage.rst"); } @@ -500,7 +541,7 @@ void continue_scan() { if (sizeof(dirs_to_do)) { - printf("Scanning %s ...\n", dirs_to_do[0]); + //printf("RST_D: Scanning %s ...\n", dirs_to_do[0]); files = get_dir(dirs_to_do[0], -1); foreach (item in files) { @@ -532,11 +573,12 @@ void continue_scan() } else { - printf("Done with sub pages.\nWriting indices.\n"); - write_indices(); - printf("Done.\n"); + printf("RST_D: Done with sub pages.\nWriting indices.\n"); + unguarded(1,(: write_indices:)); + printf("RST_D: Done.\n"); last_time = time(); save_me(); + HELP_D->rebuild_data(); return; } } diff --git a/lib/daemons/skill_d.c b/lib/daemons/skill_d.c index c16a0ea2..0cb3e2bd 100644 --- a/lib/daemons/skill_d.c +++ b/lib/daemons/skill_d.c @@ -4,9 +4,26 @@ #include #include +//: MODULE +// This daemon keeps track of valid skills, registers new skills, and removes unwanted +// skills. It also creates percentages for skills, calculates skill ranks for players +// and monsters (Wait, skill ranks for monsters? Yes, you can use the ``skills`` command +// to see which skills your monsters have.) +// +// A couple of useful commands: +// +// - Dump current skills to config file: ``@SKILL_D->dump_skills_to_file()`` +// - Load skills from config file: ``@SKILL_D->init_skills()`` +// +// This might eventually get an admtool interface. +// +// .. TAGS: RST + inherit M_DAEMON_DATA; inherit CLASS_SKILL; +#define SKILL_FLAT_FILE "/data/config/skill-tree" + /* ** Keep the list of the available skills. ** @@ -34,6 +51,12 @@ nosave mixed skill_titles = ({"", "1", "2", "3", "4", "5", "6", "7", "8 #define PRIV_REQUIRED "Mudlib:daemons" +//:FUNCTION register_skill +// Register a new skill with the daemon. This function needs +// the Mudlib:daemons privilege. +// Example: +// +// register_skill("combat/melee/grenade"); string *register_skill(string skill) { string *parts; @@ -64,6 +87,12 @@ string *register_skill(string skill) return filter(result, ( : $1:)); } +//:FUNCTION remove_skill +// Removes a skill from the daemon. This function needs +// the Mudlib:daemons privilege. +// Example: +// +// remove_skill("combat/melee/grenade"); string *remove_skill(string skill) { string *result = ({skill}); @@ -91,16 +120,23 @@ string *remove_skill(string skill) return result; } +//:FUNCTION query_skills +// Returns a string array of all the skills in the daemon. string *query_skills() { return sort_array(keys(skills), 1); } +//:FUNCTION valid_skill +// Check if argument is a valid skill or not. int valid_skill(string s) { return member_array(s, query_skills()) != -1; } +//:FUNCTION pts_for_rank +// Returns the skill points needed to achieve a specific rank. This is the reverse of the +// ``skill_title_from_pts(int skill_pts)`` method. int pts_for_rank(int rank) { rank--; @@ -109,6 +145,10 @@ int pts_for_rank(int rank) return skill_ranks[rank]; } +//:FUNCTION skill_title_from_pts +// Returns which skill rank you should have if you have ``skill_pts`` +// number of points in your skill. This is the reverse of the +// ``pts_for_rank(int rank)`` method. int skill_title_from_pts(int skill_pts) { int rank = 0; @@ -120,6 +160,9 @@ int skill_title_from_pts(int skill_pts) return skill_titles[rank]; } +//:FUNCTION rank_name_from_pts +// Returns the rank from a given set of ``skill_pts``. +// This function is similar to the ``skill_title_from_pts`` method. int rank_name_from_pts(int skill_pts) { int rank = 0; @@ -131,6 +174,9 @@ int rank_name_from_pts(int skill_pts) return rank; } +//:FUNCTION skill_rank +// Returns the skill rank for a player of a specific +// skill. int skill_rank(object player, string skill_name) { class skill skill; @@ -146,6 +192,10 @@ int skill_rank(object player, string skill_name) return rank; } +//:FUNCTION skill_rank +// Returns the skill rank for a monster of a specific +// skill. Monsters have a simpler skill structure, so +// they are handled separately. int monster_skill_rank(object player, string skill_name) { int skill_pts; @@ -161,22 +211,41 @@ int monster_skill_rank(object player, string skill_name) return rank; } +//:FUNCTION titles +// Returns the titles of all the ranks. mixed titles() { return skill_titles; } +//:FUNCTION ranks +// Returns the ranks (thresholds) of skill points you have +// to hit to gain a new skill rank. mixed ranks() { return skill_ranks; } +//:FUNCTION skill_req_pretty +// Returns a string that clearly communicates a skill name +// and a rank in the current rank scheme defined in ````. +// +// @SKILL_D->skill_req_pretty("/combat/sword",12) --> "Sword [XII]" +// +// This is used in M_DAMAGE_SOURCE to tell players about skill restrictions +// to weapons. string skill_req_pretty(string skill_name, int rank) { string name = explode(skill_name, "/")[ < 1]; return capitalize(name) + (rank > 0 ? " [" + skill_titles[rank] + "]" : ""); } +//:FUNCTION skill_rank_pretty +// Returns a string that clearly communicates a skill name +// and a rank in the current rank scheme defined in . +// +// @SKILL_D->skill_rank_pretty(.me,"combat/melee/blade")--> "Blade [2]" +// string skill_rank_pretty(object player, string skill_name) { int level = sizeof(explode(skill_name, "/")); @@ -185,6 +254,8 @@ string skill_rank_pretty(object player, string skill_name) return capitalize(name) + (rank > 0 ? " [" + skill_titles[rank] + "]" : ""); } +//:FUNCTION monster_skill_rank_pretty +// Same as ``skill_rank_pretty()`` but for monsters. string monster_skill_rank_pretty(object mob, string skill_name) { int level = sizeof(explode(skill_name, "/")); @@ -193,6 +264,9 @@ string monster_skill_rank_pretty(object mob, string skill_name) return capitalize(name) + (rank > 0 ? " [" + skill_titles[rank] + "]" : ""); } +//:FUNCTION skill_rank_simple +// Returns a simplestring that clearly communicates a skill name +// and a rank. This is default output for screen readers. string skill_rank_simple(object player, string skill_name) { int rank = skill_rank(player, skill_name); @@ -201,6 +275,49 @@ string skill_rank_simple(object player, string skill_name) return name; } +//:FUNCTION init_skills +// Load /data/config/skill-tree as new skill configuration. +void init_skills() +{ + string *config = explode(read_file(SKILL_FLAT_FILE), "\n"); + skills = ([]); + + foreach (string line in config) + { + if (line[0] == '#') + continue; + register_skill(line); + } + write(SKILL_FLAT_FILE + " loaded."); +} + +//:FUNCTION init_skills +// Dump all skills to /data/config/skill-tree. +void dump_skills_to_file() +{ + string section; + string out = + "# Skill tree for the SKILL_D\n" + "# Use @SKILL_D->dump_skills_to_file() to write skills to this file\n" + "# Use @SKILL_D->init_skills() to read skills from this file - this will remove all old skills.\n" + "# The values after the skill names are currently unused, but may be used later. Keep them at 1 for now.\n"; + foreach (string skill in sort_array(keys(skills), 1)) + { + string root = explode(skill, "/")[0]; + if (root != section) + { + section = root; + out += "\n# " + capitalize(root) + " section\n"; + } + out += skill + ":" + (skills[skill] ? "1 " : "0") + "\n"; + } + + unguarded(1, ( : write_file, SKILL_FLAT_FILE, out, 1 :)); + write("Skills dumped to " + SKILL_FLAT_FILE + "."); +} + +//:FUNCTION percent_for_next_rank +// Returns the percent until the player hits the next skill rank. int percent_for_next_rank(object player, string skill_name) { class skill skill; @@ -213,6 +330,8 @@ int percent_for_next_rank(object player, string skill_name) return (skill->skill_points - (rank == 0 ? 0 : skill_ranks[rank - 1])) * 100 / next_rank; } +//:FUNCTION monster_percent_for_next_rank +// Returns the percent until the monster hits the next skill rank. int monster_percent_for_next_rank(object mob, string skill_name) { int skill_pts; @@ -229,7 +348,8 @@ int monster_percent_for_next_rank(object mob, string skill_name) void create() { - ::create(); //Restore values from .o file + ::create(); // Restore values from .o file + set_privilege(PRIV_REQUIRED); if (MAX_SKILL_VALUE != 10000) { float factor = (MAX_SKILL_VALUE * 1.0) / 10000; diff --git a/lib/daemons/state_d.c b/lib/daemons/state_d.c index 4c0790c5..295d1e4f 100644 --- a/lib/daemons/state_d.c +++ b/lib/daemons/state_d.c @@ -1,68 +1,170 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + /* ** state_d.c -- Changes states for objects on the MUD -** -** This daemon periodically calls objects on the MUD to allow them to change state. This can -** be used to grow crops, make food rot, make critically wounded things die. -** ** Tsath 2020-07-10 (Created) */ +//: MODULE +// This daemon periodically calls objects on the MUD to allow them to change state. This can +// be used to grow crops, make food rot, make critically wounded things die. +// +// This daemon runs on a heartbeat, so is as granular as the heartbeat settings. +// See M_STATEFUL, M_DECAY, LIGHT_OBJECT and ^std/consumable/hamburger.c for some examples of usage. + #define MAX_PROCESSED 10 -#define INITIAL_SPREAD 20 +#define INITIAL_SPREAD 5 int last_time; mapping queue = ([]); -varargs void add_to_queue(object ob, int add_to_time) +//: MODULE in_queue +// Checks if ob is in the queue (anywhere in queue). +int in_queue(object ob) +{ + return member_array(ob, flatten_array(values(queue))) != -1; +} + +//: FUNCTION add_to_queue +// Adds ob to queue, to be scheduled at NOW + add_to_time in minutes. +// If force=1, the object is added even if already in queue. +varargs void add_to_queue(object ob, int add_to_time, int force, mixed extra) { int update_time; - if (ob && ob->query_call_interval()) + if (!extra) + extra = "scheduled"; + + if (ob && ob->query_call_interval() && (force || !in_queue(ob))) { - // If the object is already in here, don't add it. - /* if (member_array(ob, flatten_array(values(queue))) != -1) - return; - */ update_time = (ob->query_call_interval() * 60 + time()) + add_to_time; if (!queue[update_time]) queue[update_time] = ({}); - queue[update_time] += ({ob}); + queue[update_time] += ({({ob, extra})}); + } +} + +//: FUNCTION add_to_queue_secs +// Useful for faster testing, should probably not be used in the real mudlib. +// If it's this brief, then use a call_out(). See add_to_queue for documentation. +// This function adds seconds, and not minutes. +varargs void add_to_queue_secs(object ob, int add_to_time, int force, mixed extra) +{ + int update_time; + if (!extra) + extra = "scheduled"; + if (ob && ob->query_call_interval() && (force || !in_queue(ob))) + { + update_time = (time()) + add_to_time; + + if (!queue[update_time]) + queue[update_time] = ({}); + + queue[update_time] += ({({ob, extra})}); + } +} + +//: FUNCTION add_to_queue_at_time +// Add to queue at a specific time. No checks, no requirements. +varargs void add_to_queue_at_time(mixed ob, int update_time, mixed extra) +{ + if (!extra) + extra = "scheduled"; + + if (!queue[update_time]) + queue[update_time] = ({}); + + foreach (mixed *ar in queue[update_time]) + { + if (base_name(ar[0]) == base_name(ob) && ar[1] == extra) + return; } + + queue[update_time] += ({({ob, extra})}); +} + +//: FUNCTION remove_from_queue +// Removes ob from the queue nomatter when scheduled. +varargs void remove_from_queue(object ob, mixed extra) +{ + foreach (int update_time, object * targets in queue) + { + foreach (mixed *target in targets) + { + if (target[0] == ob) + { + if (extra && target[1] != extra) + continue; + queue[update_time] -= ({target}); + } + } + } +} + +private +object *find_targets(string t) +{ + object *t_ar = ({}); + t_ar = filter(objects(), ( : base_name($1) == $(t) :)); + if (sizeof(t_ar) > 1) + t_ar = filter(t_ar, ( : clonep($1) :)); + return t_ar; } +private void process_queue() { int processed; int t = time(); foreach (int update_time, object * targets in queue) { - foreach (object target in targets) + // If targets array is empty, just delete the entire entry - and on we go. + if (!sizeof(targets)) { - if (target && update_time < time() && target->state_update()) + map_delete(queue, update_time); + continue; + } + // Walk through each target in targets and check if they are still stateful and return true on state_update(). + foreach (mixed *target in targets) + { + if (stringp(target[0])) + { + object *t_ar = find_targets(target[0]); + if (sizeof(t_ar) > 1) + { + foreach (object o in t_ar) + queue[update_time] += ({({o, target[1]})}); + continue; + } + // If we only have one, handle it now. + target[0] = t_ar[0]; + } + + // Strip away any objects from the queue that are now 0 (destroyed/removed). + if (!target[0]) { - add_to_queue(target); + queue[update_time] -= ({target}); + continue; } + if (target[0] && !target[0]->is_stateful(target[1])) + continue; + if (target[0] && update_time < time() && target[0]->state_update(target[1])) + add_to_queue(target[0], 0, 1, target[1]); } + + // Remove old timestamps from the queue if (update_time < time()) map_delete(queue, update_time); - processed++; + + // We'll be back later for more processing. if (processed == MAX_PROCESSED) return; } } -mapping queue() -{ - return queue; -} - -void heart_beat() -{ - process_queue(); -} - +private void capture_all_statefuls() { object *statefuls = filter_array(objects(), ( : clonep($1) && $1->is_stateful() :)); @@ -71,6 +173,11 @@ void capture_all_statefuls() add_to_queue(ob, random(INITIAL_SPREAD)); } +void heart_beat() +{ + process_queue(); +} + void create() { if (clonep()) @@ -79,12 +186,48 @@ void create() return; } capture_all_statefuls(); + EVENT_D->run_scheduler(); set_heart_beat(1); } +mapping queue() +{ + return queue; +} + string stat_me() { - return "STAT_D:\n-------\n" + "Queue Length: " + sizeof(keys(queue)) + - "\n" - "\n"; + string squeue = ""; + mapping q_out = ([]), q_args = ([]); + + // Need to use some muscle first to get the mappings into a shape where we can print them. + // Fairly simple transformations thanksfully. + foreach (int update_time in sort_array(keys(queue), 1)) + { + object *targets = queue[update_time]; + foreach (mixed *t in targets) + { + if (!arrayp(q_out[t[0]])) + q_out[t[0]] = ({}); + if (!arrayp(q_args[t[0]])) + q_args[t[0]] = ({}); + q_out[t[0]] += ({update_time}); + q_args[t[0]] += ({t[1]}); + } + } + + // Now we're ready to iterate over objects instead of timestamps. + foreach (object ob, int *times in q_out) + { + if (sizeof(times) == 1) + squeue += + sprintf("%-55s%-25s%-10s\n", shorten_filename(ob), q_args[ob][0], time_to_string(times[0] - time(), 1)); + else + squeue += sprintf("%-55s%-25s%-10s\n", shorten_filename(ob), + implode(clean_array(q_args[ob]), "/") + " (" + sizeof(times) + ")", + time_to_string(times[0] - time(), 1)); + } + + return sprintf("%-55s%-25s%-10s\n", "Object", "Arguments", "Next") + sprintf("%92'-'s\n", "") + squeue + + "\nThere are " + sizeof(flatten_array(values(STATE_D->queue()))) / 2 + " items in queue."; } \ No newline at end of file diff --git a/lib/daemons/test_d.c b/lib/daemons/test_d.c new file mode 100644 index 00000000..4f38c4a9 --- /dev/null +++ b/lib/daemons/test_d.c @@ -0,0 +1,46 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +#define TEST_DIR "/std/tests/" + +int fail; +int success; + +//: FUNCTION test_suite +// Calls test suite in /std/tests/. +// Call with test_suite(1) to get debug output. +void test_suite(string suite_file, int debug) +{ + object suite; + suite_file = TEST_DIR + suite_file; + if (debug != -1) + write("Loading fresh suite " + suite_file + " ..."); + suite = find_object(suite_file); + destruct(suite); // Dest once, then load again to make sure we have a new one. + suite = load_object(suite_file); + if (debug != -1) + write("Running suite " + suite_file + " ..."); + suite->do_debug(debug); + suite->run_tests(); + if (debug != -1) + suite->stat_me(); + fail += suite->query_fail(); + success += suite->query_success(); + if (debug != -1) + write("\n\n"); +} + +//: FUNCTION test_all +// Calls all test suites in /std/tests/ and run them all. +// Call with test_all(1) to get debug output. +void test_all(int debug) +{ + string *suites = get_dir(TEST_DIR + "*.c"); + fail = 0; + success = 0; + + foreach (string suite_file in suites) + { + test_suite(suite_file, debug); + } + write("\nTotal Suceeded " + success + "\nTotal Failed " + fail); +} diff --git a/lib/daemons/xterm256_d.c b/lib/daemons/xterm256_d.c index 237d8822..bfbba44d 100644 --- a/lib/daemons/xterm256_d.c +++ b/lib/daemons/xterm256_d.c @@ -1,10 +1,10 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + //: MODULE -// This daemon handles the 256 Colours of XTERM codes +// This daemon handles the 256 Colours of XTERM code. // Created: 2022/04/08: Gesslar -// Last Change: 2022/04/08: Gesslar -// -// 2022/04/08: Gesslar - Created +// Integrated into LIMA by Tsath (2022 at some point) #include @@ -105,6 +105,7 @@ void load_all_colours() // If you add more codes, remember to update XTERM256_COLOURS // in xterm256.h alt_codes = (["res":sprintf("%c[0m", 27), // reset + "RES":sprintf("%c[0m", 27), // reset "rev":sprintf("%c[7m", 27), // reverse video "it0":sprintf("%c[23m", 27), // italics off "it1":sprintf("%c[3m", 27), // italics on @@ -113,6 +114,7 @@ void load_all_colours() "fl0":sprintf("%c[25m", 27), // flash off "fl1":sprintf("%c[5m", 27), // flash on "bld":sprintf("%c[1m", 27), // bold on + "BLD":sprintf("%c[1m", 27), // bold on ]); lines = explode(read_file("/data/xterm256/256_to_16_fallback.txt"), "\n"); diff --git a/lib/data/config/WELCOME b/lib/data/config/WELCOME index 96a828f1..d4400508 100644 --- a/lib/data/config/WELCOME +++ b/lib/data/config/WELCOME @@ -11,6 +11,6 @@ Source code: * https://github.com/tsathoqqua/lima (active development) Documentation: - * https://limamudlib.readthedocs.io/en/latest/ + * https://limamudlib.readthedocs.io/ (this file is /data/config/WELCOME when you want to change it.) \ No newline at end of file diff --git a/lib/data/config/preload b/lib/data/config/preload index 5a147dd6..95742b56 100644 --- a/lib/data/config/preload +++ b/lib/data/config/preload @@ -12,7 +12,7 @@ /daemons/verb_d /daemons/soul_d /daemons/imud_d -/daemons/doc_d +/daemons/rst_d /daemons/chanlog_d /daemons/memcheck_d /secure/daemons/imail_d diff --git a/lib/data/config/skill-tree b/lib/data/config/skill-tree new file mode 100644 index 00000000..e9a355e5 --- /dev/null +++ b/lib/data/config/skill-tree @@ -0,0 +1,53 @@ +# Skill tree for the SKILL_D +# Use @SKILL_D->dump_skills_to_file() to write skills to this file +# Use @SKILL_D->init_skills() to read skills from this file - this will remove all old skills. +# The values after the skill names are currently unused, but may be used later. Keep them at 1 for now. + +# Combat section +combat:1 +combat/defense:1 +combat/defense/disarm:1 +combat/defense/dodge:1 +combat/defense/stance:1 +combat/melee:1 +combat/melee/blade:1 +combat/melee/club:1 +combat/melee/improv:1 +combat/melee/mace:1 +combat/melee/spear:1 +combat/melee/unarmed:1 +combat/melee/whip:1 +combat/ranged:1 +combat/ranged/pistol:1 +combat/ranged/shotgun:1 +combat/special:1 +combat/special/roundhouse:1 +combat/special/sweep:1 +combat/special/trip:1 +combat/thrown:1 +combat/thrown/grenade:1 + +# Magic section +magic:1 +magic/arcane:1 +magic/arcane/knowledge:1 +magic/spell:1 +magic/spell/disease:1 + +# Misc section +misc:1 +misc/crafting:1 +misc/crafting/chemistry:1 +misc/crafting/cooking:1 +misc/crafting/electronics:1 +misc/crafting/salvage:1 +misc/life:1 +misc/life/boozing:1 +misc/life/climbing:1 +misc/life/converse:1 +misc/life/endocrines:1 +misc/life/haggle:1 +misc/life/lockpicking:1 +misc/life/taming:1 +misc/special:1 +misc/special/override:1 diff --git a/lib/data/daemons/body.o b/lib/data/daemons/body.o index 927de72d..69e89e10 100644 --- a/lib/data/daemons/body.o +++ b/lib/data/daemons/body.o @@ -1,2 +1,2 @@ #/daemons/body_d.c -body_types (["griffin":(["right front leg":(/15,15,"torso",4,/),"torso":(/15,15,"",1,/),"left hind leg":(/15,15,"torso",4,/),"head":(/15,15,"torso",1,/),"right wing":(/5,5,"torso",4,/),"right hind leg":(/15,15,"torso",4,/),"left wing":(/5,5,"torso",4,/),"left front leg":(/15,15,"torso",4,/),]),"2headquadruped":(["right front leg":(/14,14,"torso",4,/),"torso":(/20,20,"",1,/),"left hind leg":(/14,14,"torso",4,/),"left head":(/12,12,"torso",1,/),"right hind leg":(/14,14,"torso",4,/),"left front leg":(/14,14,"torso",4,/),"right head":(/12,12,"torso",0,/),]),"quadruped":(["right front leg":(/15,15,"torso",4,/),"torso":(/20,20,"",1,/),"left hind leg":(/15,15,"torso",4,/),"head":(/20,20,"torso",1,/),"right hind leg":(/15,15,"torso",4,/),"left front leg":(/15,15,"torso",4,/),]),"humanoid":(["head":(/20,20,"torso",1,/),"right leg":(/15,15,"torso",4,/),"right foot":(/-1,-1,"right leg",0,/),"neck":(/-1,-1,"torso",0,/),"back":(/-1,-1,"torso",0,/),"left arm":(/15,15,"torso",2,/),"left foot":(/-1,-1,"left leg",0,/),"left leg":(/15,15,"torso",4,/),"torso":(/20,20,"",1,/),"right hand":(/-1,-1,"right arm",0,/),"right arm":(/15,15,"torso",2,/),"left hand":(/-1,-1,"left arm",0,/),]),"centaur":(["right front leg":(/25,25,"torso",4,/),"head":(/20,20,"torso",1,/),"left arm":(/20,20,"torso",0,/),"torso":(/50,50,"",1,/),"right hand":(/5,5,"right arm",2,/),"right back leg":(/25,25,"torso",4,/),"right arm":(/20,20,"torso",0,/),"left hand":(/5,5,"left arm",2,/),"left back leg":(/25,25,"torso",4,/),"left front leg":(/25,25,"torso",4,/),]),]) +body_types (["2headquadruped":(["right front leg":(/14,14,"torso",4,/),"right hind leg":(/14,14,"torso",4,/),"right head":(/12,12,"torso",0,/),"torso":(/20,20,"",1,/),"left hind leg":(/14,14,"torso",4,/),"left head":(/12,12,"torso",1,/),"left front leg":(/14,14,"torso",4,/),]),"quadruped":(["right front leg":(/15,15,"torso",4,/),"head":(/20,20,"torso",1,/),"right hind leg":(/15,15,"torso",4,/),"torso":(/20,20,"",1,/),"left hind leg":(/15,15,"torso",4,/),"left front leg":(/15,15,"torso",4,/),]),"centaur":(["right front leg":(/25,25,"torso",4,/),"head":(/20,20,"torso",1,/),"left arm":(/20,20,"torso",0,/),"torso":(/50,50,"",1,/),"right hand":(/5,5,"right arm",2,/),"right back leg":(/25,25,"torso",4,/),"right arm":(/20,20,"torso",0,/),"left hand":(/5,5,"left arm",2,/),"left back leg":(/25,25,"torso",4,/),"left front leg":(/25,25,"torso",4,/),]),"humanoid":(["head":(/20,20,"torso",1,/),"right leg":(/15,15,"torso",4,/),"right foot":(/-1,-1,"right leg",0,/),"neck":(/-1,-1,"torso",0,/),"back":(/-1,-1,"torso",0,/),"left arm":(/15,15,"torso",2,/),"left foot":(/-1,-1,"left leg",0,/),"left wrist":(/-1,-1,"left arm",0,/),"left leg":(/15,15,"torso",4,/),"torso":(/20,20,"",1,/),"right wrist":(/-1,-1,"right arm",0,/),"right hand":(/-1,-1,"right wrist",0,/),"right arm":(/15,15,"torso",2,/),"left hand":(/-1,-1,"left wrist",0,/),]),"insect":(["right front leg":(/5,5,"torso",4,/),"head":(/20,20,"torso",1,/),"right hind leg":(/5,5,"torso",4,/),"torso":(/50,50,"",1,/),"left hind leg":(/5,5,"torso",4,/),"left midle leg":(/5,5,"torso",4,/),"right midle leg":(/5,5,"torso",4,/),"left front leg":(/5,5,"torso",4,/),]),"griffin":(["right front leg":(/15,15,"torso",4,/),"head":(/15,15,"torso",1,/),"right hind leg":(/15,15,"torso",4,/),"torso":(/15,15,"",1,/),"left hind leg":(/15,15,"torso",4,/),"right wing":(/5,5,"torso",4,/),"left wing":(/5,5,"torso",4,/),"left front leg":(/15,15,"torso",4,/),]),]) diff --git a/lib/data/daemons/did.o b/lib/data/daemons/did.o deleted file mode 100644 index 3eb748c9..00000000 --- a/lib/data/daemons/did.o +++ /dev/null @@ -1,2 +0,0 @@ -#/daemons/did_d.c -did ({({1648634797,"Tsath made 'scan' more copy/paste friendly.",}),({1648639417,"Tsath added domain_file() and author_file() in master to support new driver feature",}),({1648639430,"Tsath set wizard shell and player shell to have ANSI on by default.",}),({1648982546,"Tsath added a user menu on login.",}),({1648987183,"Tsath updated people with 'u' flag to show not just body name but userid.",}),({1649196504,"Tsath added remove and MAX chars functionality to user menu.",}),({1649272667,"Tsath made sure admtool is aware of user menu functionality, and now cleans properly",}),({1650393871,"Tsath updated the 'skills' command and SKILL_D.",}),({1650393897,"Tsath added a 'simplify' command for people not wanting ASCII graphics but a more simple UI. Useful for visually impaired.",}),({1650393921,"Tsath added M_WIDGETS for some useful ASCII graphics tools.",}),({1650395653,"Tsath updated ADVERSARY to have working body limbs, and added an 'hp' command to show limb hp.",}),({1666380298,"Tsath added a dedicated daemon for reStructured Text (RST_D). Losely based on Rajo's contribution.",}),({1666530985,"Tsath fixed DOC_D to correctly clear admin commands before appending to them.",}),({1666531020,"Tsath added files to /help/rst/ for the RST documentation.",}),({1666531552,"Tsath made HELP_D ignore .rst files.",}),({1666532090,"Tsath moved 'locate' to 'ilocate' and 'findfile' to 'locate' and updated Cmd_rules.",}),({1666532347,"Tsath added RST daemon control to admtool.",}),({1666538021,"Tsath updated ANSI_D with new codes.",}),({1666639268,"Tsath moved TEAM_D to PARTY_D and 'team' cmd to 'party'.",}),({1666699452,"Tsath added metric/imperial to config.h and changed std/object/mass.c to use selected system.",}),({1666699487,"Tsath added 3 new simul_efun functions to string.c",}),({1667160328,"Tsath moved punctuate() function to string sefuns.",}),({1667161479,"Tsath removed trim_spaces() as a sefun, and replaced it with the efun trim() in entire mudlib.",}),({1667411065,"Tsath updated USER switch_body() function to actually work with user menu.",}),({1667860315,"Tsath updated mudlib documentation with latest FluffOS documentation instead of ancient MudOS docs.",}),({1668018421,"Tsath added a shortcut for /domains/ (^) like /wiz/ (~)",}),({1668020937,"Tsath fixed M_VENDOR, armour and wield base in adversary to take relative file paths",}),({1668021410,"Tsath added 'wheremobs' and 'killmobs' commands for mob management.",}),({1668022478,"Tsath added 'livings' for a mob overview.",}),({1668022500,"Tsath fixed inconsistent use of MESSAGES_D->query_messages() and get_messages() in the mudlib.",}),({1668086121,"Tsath patched a bug in report_context() in master that Stanach found.",}),({1668111359,"Tsath fixed some modal stack issues with user menu and the shell.",}),({1668203915,"Tsath added a fix for an item duplication bug for items added at setup() but restored when saved to the body.",}),({1668275063,"Tsath added EMOJI_D, 'emoji' cmd for player control and admtool for maintaining emoji list.",}),({1668279864,"Tsath installed LOOT_D along with GEM, art_artifact and M_DICE updates.",}),({1668428428,"Tsath changed mudlib version to 1.1 alpha 1. Changes are coming.",}),({1668428570,"Tsath added new shortcut for \"/domains\", '^'. Works in prompts, cd, and all file references. E.g. \"^std/monsters/troll\".",}),({1668428652,"Tsath did a lot of work on 'equip' 'score' 'hp' and added new verbs 'salvage' and 'craft'.",}),({1668428763,"Tsath updated BODY and ADVERSARY with fixes for conflicting options from combat_config.h",}),({1668428796,"Tsath implemented working XP, levels, advancement, karma system.",}),({1668428813,"Tsath made sure wounds system works with limbs system and normal classic HP (and it does now).",}),({1668428938,"Tsath did updates to DAMAGE_D.",}),({1668428954,"Tsath added a CRAFTING_D that works with M_SALVAGEABLE.",}),({1668446415,"Tsath extended the admtool to be able to reset passwords for users.",}),({1668455615,"Tsath changed didlog to output RST instead of old style HTML",}),({1668464624,"Tsath fixed the elevator in Wizhall and added ELEVATOR. Now also allows relative paths.",}),({1668636469,"Tsath added M_ASSISTANCE, M_COMPANION, M_DURABILITY and updated the modules, actions, aggressive, vendor, wearable and wieldable.",}),({1668680689,"Tsath added an auto created panel for the elevators with a button overview.",}),({1668686987,"Tsath fixed do_look_at_str() falling through to BASE_ROOM.",}),({1668703736,"Tsath extended set_room_chats() in BASE_ROOM to have a base chance to chat.",}),({1668861114,"Tsath added auto login in USER_MENU that can be interrupted by interactions.",}),({1668870469,"Tsath added durability to weapons and armours, and updated standard armours and weapons.",}),({1668870486,"Tsath updated combat to be more interesting with stuns and prone.",}),({1668870512,"Tsath moved some objects in ^std to subfolders.",}),({1668870570,"Tsath updated BODY_D to give an idea of limb sizes.",}),({1668961164,"Tsath updated the load verb",}),({1668970046,"Tsath updated RANGED_WEAPON and AMMUNITION with new features. Examples under ^std/ammo/ ^std/weapon/.",}),({1668970056,"Tsath says: We have guns. Lots of guns.",}),({1668970074,"Tsath updated the remove and wield verbs.",}),({1668970101,"Tsath updated ADVERSARY with better support for guns, reloading and fixes for lots of old defunct code.",}),({1669242082,"Tsath moved 'ansi' cmd to 'mode'.",}),({1669657247,"Tsath removed define from ^std/shopkeeper.c and changed to relative path.",}),({1669756346,"Tsath added further capabilities to set_objects() in CONTAINER.",}),({1670348831,"Tsath added option in config.h to have players drop their equipment when they die.",}),({1670348839,"Tsath fixed LOOT_D corpse connection.",}),({1670348846,"Tsath added 'get all from corpse' functionality.",}),({1670349581,"Tsath changed 'locate' to give correct syntax information.",}),({1670351719,"Tsath made NEWS_D create default newsgroups so it does not rely on a .o file being there.",}),({1671043994,"Tsath removed M_ANSI and replaced with M_COLOURS. This new module relies only on XTERM256_D and not on ANSI_D.",}),({1671741425,"Tsath changed default MORE lines from 20 to 30.",}),({1672313418,"Tsath fixed individual colours in XTERM256_D.",}),({1672313442,"Tsath thanks Gesslar for fixing prompt issues with line breaks and a multitude of other issues regarding input and wrapping.",}),({1672313456,"Tsath fixed first time account login issue.",}),({1672313491,"Tsath added /obj/mudlib/frame for creating appealing frames for interfaces. Integrates with 'frames' command.",}),({1672314394,"Tsath added a new user interface submenu to the player menu 'menu'.",}),({1672414031,"Tsath made 'say' work with emojis.",}),({1672414175,"Tsath fixed XTERM256_D to not error on codes outside 0 < x < 255 range.",}),({1672420071,"Tsath extended frames with colour themes.",}),({1673563621,"Tsath updated exit and enter with sane actions for 'enter' 'leave' and 'exit'.",}),({1673791465,"Tsath updated 'who' and 'score' with frames support.",}),({1673791711,"Tsath update 'hp' command.",}),({1673892888,"Tsath updated 'people' command.",}),({1673893189,"Tsath moved functionality from FRAME to M_COLOURS.",}),({1673905372,"Tsath fixed 'random' to handle no args given.",}),({1673907221,"Tsath updated the driver include files, which fixed 'random2'.",}),({1674341396,"Tsath changed money to be calculated as a float.",}),({1674381587,"Tsath added currency awareness in DOMAIN_D and extended ADMTOOL to handle it.",}),({1674403048,"Tsath recreated the 'equip' cmd.",}),({1674403072,"Tsath made LOOT_D pick dynamic coins depending on area and settings in DOMAIN_D.",}),({1674683151,"Tsath updated 'score' to handle multiple currencies carried at the same time.",}),({1674683172,"Tsath updated ACCOUNT_D to handle multiple currencies and multiple bank accounts.",}),({1674683195,"Tsath updated BODY to check if currency picked up as an existing currency.",}),({1674736740,"Tsath added 'apply' and 'repair' verb.",}),({1674740665,"Tsath added 'metric' control to the player menu.",}),({1675026269,"Tsath added client detection and colour suggestions to 'mode' cmd.",}),({1675026389,"Tsath modified the player shell to pick mode, emoji, and frame defaults based on client detection.",}),({1675026510,"Tsath added default style and theme for frames in config.h.",}),({1675075669,"Tsath extended XTERM256_D with client compability data.",}),({1675112121,"Tsath added referral question on account creation, saves to /data/referrals.",}),({1675333222,"Tsath added a stack of drink, heal, slow heal, drugs and food under ^std/consumable.",}),({1675333302,"Tsath added TRANSIENT for poison and other effects in /std/transient/",}),({1675333378,"Tsath updated M_DRINKABLE, M_EDIBLE and added M_HEALING.",}),({1675333439,"Tsath added DRINK, FOOD and BANDAGE to /std/",}),({1675343968,"Tsath added a 'smoke' verb to smoke things, like salmon.",}),({1675345026,"Tsath added 'activate' and 'unwield' as verbs.",}),({1675359128,"Tsath fixed M_HEALING to work for living, but just players.",}),({1675363046,"Tsath made bandages work for mobs and get applied to critical spots.",}),({1675851271,"Tsath fixed BIRTHDAY_D to not just refresh every 50 years but every day.",}),({1675859018,"Tsath added targetted_other_action() to M_MESSAGES.",}),({1676465826,"Tsath fixed who when uptime < 1 hour.",}),({1676490094,"Tsath added 'width auto' as a way to use flexible terminal width.",}),({1678264411,"Tsath added a basic implementation of behavior trees for NPCs under /std/behaviour/ and started gradually hollowing out behaviours from adversary.",}),({1678264465,"Tsath added Plutchik emotion wheel to the behaviour trees and a 'smartmobs' cmd to view active smart NPCs on the MUD.",}),({1678293746,"Tsath reformatted the entire mudlib according to /help/wizard/coding/vs_code.",}),({1679235611,"Tsath removed 'sline' and status_line functionality as deprecated. This should be reimplemented using GMCP or other things used today.",}),({1679236342,"Tsath merged body/help (2 simple functions) into body/cmd for reduce inheritance chain.",}),({1679236686,"Tsath merged wiz_positions into wizfuncs for same reason.",}),({1681637583,"Tsath moved 3 variables in M_WIDGETS to nosave.",}),({1681757903,"Tsath updated ACCOUNT_D with coverage() and fixed a few bugs.",}),({1681828505,"Tsath added save_things_to_string() to M_SAVE to avoid deep recursive saves of players and monsters.",}),({1683213529,"Tsath fixed dual login fails in USER_OB. You can now log in more times as a wizard again.",}),({1684681918,"Tsath fixed enter messages for PORTAL.",}),({1685044434,"Tsath fixed IMUD tells that could not find the right user colour codes to use due to missing this_user().",}),({1685045537,"Tsath fixed 'colours' cmd to accept pinkfish names as well as 'palette' numbers.",}),({1685137037,"Tsath introduced small bad header fix to HTTP_D.",}),({1685561027,"Tsath added functionality in 'calls' to shorten the list in case of many calls to same function from same object.",}),({1685628033,"Tsath added fixed for GUILD_D, ACCOUNT_D, MONEY_D and M_GUILD_MEMBER (new file).",}),({1686234113,"Tsath added meaningful warnings for adding exit/enter messages to non-existing exits.",}),({1686746915,"Tsath fixed DC's while auto login was enabled to not err.",}),({1686776936,"Tsath fixed a header overflow bug in 'people' cmd.",}),({1686832407,"Tsath extended M_VENDOR and M_VALUABLE with generic object support. Added ^std/weapon/stick as example - see ^std/shopkeeper as well.",}),({1686990564,"Tsath added 'hints' command and hints system.",}),({1687016511,"Tsath cleaned some unused config.h options out of there, and added 4 new ones for XP and leveling control.",}),({1687016645,"Tsath handled a lot of lose ends on FRAMEs.",}),({1687106145,"Tsath updated QUEST_D and admtool quest part.",}),({1687111715,"Tsath updated VERB_OB to handle wrapping better.",}),({1687252797,"Tsath fixed room_chat to not start multiple call_out()",}),({1687441072,"Tsath fixed object/vsupport to support smarter get from containers. It's an experiment, we'll see if it stays.",}),({1687714667,"Tsath added fixed for hints system",}),({1687722276,"Tsath fixed 'ls' to show loaded files again.",}),({1687728303,"Tsath fixed bug in secure/socket and update netstat cmd.",}),({1687881136,"Tsath fixed BOOK M_READABLE and ^std/lima_guide to work. Also added automatic index in books.",}),({1688053960,"Tsath added 'hints ' as a way to ask an item in inventory for a hint.",}),({1688243529,"Jezu added telnet socket keepalive to help prevent telnet socket disconnects under some conditions.",}),({1688316123,"Tsath extended LAST_LOGIN_D to capture IPs for logins, and logins from IPs.",}),({1688319561,"Tsath extended 'whoip' to use new LAST_LOGIN_D functionality.",}),({1688459450,"Jezu fixed a typo in the 'who' command.",}),({1688471783,"Tsath fixed output issue in 'inactive' cmd.",}),({1688534808,"Tsath added USER_D to /data/config/preload to make it load on boot.",}),({1688595774,"Jezu replaced all instances of the '->' class identifier with '.' across all .c files in the library.",}),({1688926905,"Tsath framed 'quests' cmd.",}),({1689284412,"Tsath noticed M_WANDER depends on M_SMARTMOVE if used with livings (non-adversaries). Fixed it so it works, but not happy with the dependency.",}),({1689884200,"Tsath fixed CORPSE to correctly use STATE_D.",}),({1690276093,"Tsath changed 'skills' to work for mobs as well.",}),({1690276106,"Tsath noticed another dependency between M_WANDER and M_ACTIONS. Nice.",}),({1690473148,"Tsath fixed an accent() issue in M_FRAME.",}),({1690493639,"Tsath cleaned up old code and added documentation for M_WIDGETS.",}),({1690733438,"Tsath changed DOC_D to check if directory creation was successful, and instruct an admin how to initiate it if they wanted to use it. Printed at driver start up as well.",}),({1690734305,"Tsath moved the domain_file() and author_file() from sefuns to master.",}),({1690738472,"Tsath fixed another bug in 'whoip'.",}),({1690834017,"Tsath removed recursive call from do_receive() in USER_OB.",}),({1692907740,"Tsath rewrote MESSAGES_D.",}),({1693773032,"Tsath extended M_CONVERSATION to check for ability scores and skill ranks.",}),({1694033733,"Tsath fixed leftover usermenu hanging after auto login.",}),({1694375027,"Tsath updated the greeter in /domains/std/ to reflect current info for where to get the lib (ie 'help release') and where to report FluffOS bugs.",}),({1694719450,"Tsath added targetted emote for M_CONVERSATION.",}),({1695289746,"Tsath extended admtool with 'messages' daemon support.",}),({1695289756,"Tsath extended admtool with info about 'races'.",}),({1695292013,"Tsath reorg'ed the admtool 'daemons' menu into 'game' configuration things and 'daemons' of other kinds.",}),({1695829467,"Tsath updated SKILL_D to scale ranks with config settings in /include/config/skills.h",}),({1695829582,"Tsath added CONFIG_EDITOR for reading/writing structured include files.",}),({1695829829,"Tsath added a 'settings' menu in 'admtool' 'g' 'S' for editing include files under /include/config/*.h.",}),({1696170623,"Tsath extended SKILL_D to support different rank types.",}),({1696172930,"Tsath fixed a bug in player shell var defaults.",}),({1697291112,"Tsath fixed a bug in referral code.",}),({1697489639,"Tsath stripped out all lpscript. There are smarter ways of creating code in 2023.",}),({1698065840,"Tsath added config/user_menu.h and updated USER_OB and USER_MENU to use these features.",}),({1698065942,"Tsath added timeout for people idling in the USER_MENU.",}),({1698482556,"Tsath fixed a bug on same user hanging in login sequence without body causing errors on take-overs.",}),({1698482895,"Tsath externalized config of CRAFTING_D, DAMAGE_D and MESSAGES_D for easier configuration so admtool is not the only way. Along the lines of GUILD_D.",}),({1698589108,"Tsath added new config/equipment.h file.",}),({1698594142,"Tsath added support for showing damaged items in their names as durability drops.",}),({1698594252,"Tsath added new configurable colour DMGED_EQUIP for player defined colours.",}),({1698597853,"Tsath changed repair verb to support items with ANSI colours.",}),({1699185790,"Tsath fixed 'emoji' cmd to show replacements correctly.",}),({1699185823,"Tsath updated EMOJI_D to hold a mapping of default emojis.",}),({1699186038,"Tsath added default methods to METHOD_D.",}),({1699191135,"Tsath added a lot of default data to a lot of daemons, so .o files do not need to be versioned anymore.",}),({1699205382,"Tsath fixed format of showemote after \"->\" to \".\" fix for classes.",}),({1699656292,"Tsath introduced M_NPCSCRIPT for long script tasks for NPCs.",}),({1699656374,"Tsath fixed various issues with M_ACTIONS and M_TRIGGERS.",}),({1699784885,"Tsath implemented multiple SCRIPT_ACTION to shorted the scripts, somewhat.",}),({1699873740,"Tsath fixed wrong width of messages when logging on at first.",}),({1699880644,"Tsath made guests skip the USER_MENU on login/logout.",}),({1699880653,"Tsath made guests not save anymore.",}),({1699883070,"Tsath made sure guests cannot change password either.",}),({1699907200,"Tsath made sure M_CONVERSATION exited whenever M_NPCSCRIPT runs scripts.",}),({1700742378,"Tsath added support for M_WIELDABLE and M_WEARABLE can easily introduce temporary skill increases/decreases when things are wielded or worn.",}),({1700742468,"Tsath fixed max frame width to be 1000 chars. Thanks to Renras for spotting this one.",}),({1700745443,"Tsath removed the centered header from help pages to avoid screen reader issues.",}),({1700749863,"Tsath removed ascii graphics from 'set' command.",}),({1700770718,"Tsath updated 'skills' and 'equip' to show extra info on skill bonuses from items.",}),({1700829525,"Tsath created CLASS_WEAR_INFO and used that across the lib, and got rid of local definitions.",}),({1700943312,"Tsath cleaned up worn_attributes() in M_WEARABLE and 'equip' command.",}),({1701020539,"Tsath removed ascii art from M_ACCOUNTANT.",}),({1701022483,"Tsath made 'time' command callable from menus.",}),({1701024843,"Tsath made a few more fixes more 'equip' 'materials' and added a 'pull OBJ STR' rule to the pull verb, e.g. \"pull visor down\", \"pull hood up\".",}),({1701278447,"Tsath fixed multiple messages in combat not showing right.",}),({1701278491,"Tsath moved all 'blow' damage types to 'bludgeon'.",}),({1701278554,"Tsath did a vsupport fix for environment checks for get.",}),({1701278592,"Tsath changed M_DAMAGE_SINK to properly check resistances and weaknesses.",}),({1701278685,"Tsath added CLIMB_CHALLENGE for doing climb checks. Basically an exit that only works on a successful skill check.",}),}) diff --git a/lib/data/daemons/soul.o b/lib/data/daemons/soul.o index a6e7511d..ffeea005 100644 --- a/lib/data/daemons/soul.o +++ b/lib/data/daemons/soul.o @@ -1,4 +1,4 @@ #/daemons/soul_d.c messages ([]) -emotes (["tombstone":(["LIV":"$N $vscream in $p1 face, \"What do you want on your Tombstone?!?!?!\"",]),"yeah":(["":"$N $vgo, \"Yeah! Yeah! Heh! Heh!\"",]),"sleepleg":(["STR":"$N $vsleepleg $o.","":"$N $vsleepleg.",]),"lag":(["":"$N $vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG.",]),"laf":(["LIV":"$N $vlaf at $t.","OBJ":"$N $vlaf at $o.","STR":"$N $vlaf $o.","":"$N $vlaf.",]),"calon":(["":"Calon reminds $N that before you code an entire module, check to see if it already exists.",]),"recursive":(["":"$N $vnote that this emote may not be recursive, but $vrefer everyone to the 'recursive' emote, anyway.",]),"lala":(["":"$N $vturn blue and starts to hum: La LA la la la ...",]),"hehleg":(["LIV":"$N $vhehleg at $t.","":"$N $vhehleg.",]),"straightjacket":(["LIV":"$N $vcall the state hospital on $t, A shrink arrives and evaluates $p1 mental state. $N1p $vis given a straightjacket to wear for life.",]),"bugfree":(["STR":"$N $vwonder if $o will ever truly be bug free.","":"$N $vwonder if the LIMA mudlib will ever truly be bug free.",]),"sex2":(["STR":"$N $vgo, 'Yah, i'm just in it for the $o...'","":"$N $vgo, 'Yah, I'm just in it for the sex...'",]),"bogspam":(["LIV":".",]),"faq":(["LIV":"$N $vtell $t, \"Look at http://lima.imaginary.com for the FAQ.\"","":"$N really should look at http://lima.imaginary.com for the FAQ.",]),"grumple":(["STR":"$N $vgrumple $o.","":"$N $vgrumple.",]),"xxxpelt":(["":({"Oh come on. Even we aren't going to get this crude.","$N $vare disappointed by the xxxpelt emote.",}),]),"car":(["":"$N $vgo to move $p car.",]),"ddsob":(["":"$N $vgo, \"Damnit, damnit, son-of-a-bitch!!\"",]),"agree":(["LIV":"$N $vagree with $t.","STR":"$N $vagree $o.","LIV STR":"$N $vagree with $t $o.","":"$N $vagree.",]),"omigod":(["":"Not to be mistaken for a valley girl, $n $vgo, \"Oh - my - gaaaaawwwwwd! That's so - totally - gnarly!\"",]),"lastclue":(["LIV":"$N $vtell $t, \"You better pick up that clue you just dropped... it is your last one...\"",]),"toast":(["LIV":"$N $vtoast to $p1 health and prosperity!","":"$N $vlift $p glass and $vsay, \"Here, here!\"",]),"goaway":(["LIV":"$N $vsing, \"$tp, don't go away mad! $tp, just go away!\"","STR":"$N $vsing, \"$O, don't go away mad! $O, just go away!\"",]),"swing":(["OBJ LIV":"$N $vswing a $o at $t.",]),"ialone":(["LIV":"$N $vsing to $t, \"I alone love you! I alone tempt you!\"","LIV LIV":"$T1s $v1sing to $t2, \"I alone love you! I alone tempt you!\"","STR LIV":"$O sings to $t, \"I alone love you! I alone tempt you!\"",]),"lugnit":(["STR":"$N $vthink $o is a lugnut.",]),"keycaps":(["":"$N $vsay: All wiyht. Rho sritched mg kegtops awound?",]),"chickle":(["":"$N $vchickle.",]),"spammed":(["":"$N $vare officially SPAMMED.",]),"blaster":(["":"$N $vnote, \"Hokey religions and ancient weapons are no match for a good blaster at your side.\"",]),"teapot":(["LIV":"$T $v1have fooled the teapot. It thinks $ts $v1are its friend.","":"$N $vhave fooled the teapot. It thinks $n $vare its friend.",]),"tanstaafl":(["":"$N $vsay 'There Ain't No Such Thing As A Free Lunch.\"",]),"jk":(["LIV":"$N $vtell $t, \"Just kidding!\"","":"$N $vsay, \"Just kidding!\"",]),"snugglefar":(["LIV":"$N $vsnuggle up far from $t.",]),"operate":(["LIV":"$N $vprepare $t for surgery.",]),"gohome":(["LIV":"$N $vgo, \"Damnit, $ts! Don't you have your own mud?\"",]),"children":(["":"$N $vcode an emote complaining about all the children hanging around Lima Bean.",]),"erkle":(["":"Wearing suspenders and big glasses, $n $vsay, \"Did I do that?\" >=)",]),"ramdisk":(["":"$N $vsay you mean RAM Disk isn't the installation procedure ?",]),"badbog":(["LIV":"$N $vlaugh at $t for using an inappropriate bog emote.","LIV STR":"$N $vlaugh at $t for using an inappropriate bog emote and suggest he use $o instead.","":"$N $vget arrested by the FDA for using an inappropriate bog emote and $vproceed to add one.",]),"mobydick":(["":"$N $vsuggest doing a mobydick with the vast majority of dumb emotes in the Lima Mudlib.",]),"afaik":(["":"$N $vgo, \"As Far As I Know.\"",]),"chew":(["":"$N $vchew on a stringy bit of obfuscation.",]),"gnome":(["":"G.N.O.M.E - Megs and megs of fun. Explorer just thought it was a shell.",]),"parity":(["LIV":"$N $vnote that $t $v1have a one-bit brain and $v1are suffering a parity error.","":"$N $vhave a one-bit brain and $vare suffering a parity error.",]),"frown":(["LIV":"$N $vfrown at $t.","STR":"$N $vfrown $o.","":"$N $vfrown.",]),"mleg":(["LIV":"$N $vshow off $p middle leg to $t.","":"$N $vshow off $p middle leg.",]),"hellwind":(["LIV":"$N $vaim $p ass at $t, $vgrunt hard, and $vconjure a hellish wind at $t.",]),"emacs6":(["":"$N $vgo, \"EMACS: Eventually `malloc()'s All Computer Storage\"",]),"emacs5":(["":"$N $vgo, \"Escape Meta Alt Control Shift\"",]),"emacs4":(["":"$N $vgo, \"Emacs - LISP with a built-in editor\"",]),"emacs3":(["":"$N $vgo, \"Emacs Makes All Computers Slow\"",]),"lpccoder":(["":"$N $vnote that being the best LPC coder is like being the healthiest AIDS victim, or the sexiest Trekkie.",]),"emacs2":(["":"$N $vgo, \"EMACS - Eight Megs And Constantly Swapping\"",]),"iq":(["LIV":"According to the iq_d, $p1 IQ is negative.",]),"bugs":(["":"$N $vgo, \"OOooooohhh...Lookit all the BUGS...\"",]),"quitleg":(["":"$N $vquitleg.",]),"high6":(["LIV":"$N $vjump in the air, $vgrow an extra finger and $vgive $t a high-six!",]),"high5":(["LIV":".",]),"vein":(["":"$N $vsmile sweetly till you think $n'll burst a vein.",]),"recoil":(["":"$N $vrecoil in shock.",]),"flail":(["LIV":"$N $vflail $p arms about nearly striking $t!","":"$N $vflail $p arms about.",]),"weresmooth":(["LIV":"$N $vgo to $t, \"Damn, we're smooth!\"","":"$N $vgo, \"Damn, we're smooth!\"",]),"ic":(["":"$N $vsay: I see...",]),"arrogance":(["LIV":"$N $vobserve how $p1 arrogance is supreme.","":"$P arrogance is supreme.",]),"getwhappedby":(["LIV":"$N1 $v1whap $t10.",]),"jewish":(["LIV":"$N $vexclaim, \"He's come to kill you because you're jewish, $tp\"","":"$N $vexclaim, \"He's come to kill you because you're jewish, Kyle!\"",]),"bandage":([]),"emotenight":(["STR":"$N $vdeclare that tonight is \"$o\" emote night.",]),"pussy":(["LIV":"$N $vshout at $t, \"You fuckin' pussy!\"",]),"beggars":(["":"$N $vreply, \"It'll be just like beggars canyon back home.\"",]),"hungwell":(["":"$N $vannounce, \"Guard Number 1 is a senior on Klahn's mountain, and aspires to be a research chemist, welcome please, Hung Well!\" ",]),"sdance":(["LIV":"$N $vput $p arms around $p1 waist and $vshare a slow dance with $t.",]),"pizza":(["":"$N $vsuggest that the next time you call out for pizza, you don't use a military channel.",]),"xemacs":(["STR":"$N $vtry to start up xemacs, the king of all editors, but $vfail miserably.","":"$N $vtry to start up xemacs, the king of all editors, but $vfail miserably.",]),"angeftp":(["":"$N $vrefuse to code w/o ange-ftp.",]),"bufu":(["LIV":"$N $voffer to be $p1 bufu buddy.",]),"dwarf":(["LIV":"$N $vmake $t feel like a dwarf standing beside $n90o.","":({"You feel like a dwarf. ","$N $vlook like a dwarf. ",}),]),"mission":(["LIV":"$N $vtell $t, \"We're on a mission from GOD!\"","":"$N $vsay, \"We're on a mission from GOD!\"",]),"lovemore":(["OBJ":"$N $vloves $T more than anything else in the world.",]),"testfoo":(["LIV STR":"$N $vtestfoo to $T, \"$o\"",]),"invite":(["LIV":"$N $vinvite $t to touch $p privates.","LIV STR":"$N $vinvite $t to touch $p $o.","":"$N $vinvite everyone to touch $p privates.",]),"helpfile":(["":"Mudlib tells $n, \"Help file?! No way! Hey, it was difficult to write. It should be difficult to understand!\"",]),"hi":(["LIV":"$N $vwave Hi! to $t.","LIV LIV":"$N $vwave Hi! to $t1 and $t2","":"$N $vwave Hi!",]),"bigboned":(["":"$N $vgo, \"I'm not fat, I'm big boned!\"",]),"sfbogleg":(["":"$N super-fucking-$vbogleg!",]),"rubeyes":(["LIV":"$N $vrub $p1 eyes.","":"$N $vrub $p eyes.",]),"mock":(["LIV":"$N $vmock $t.",]),"appear":(["STR":"$N $vlook $o.",]),"ha":(["STR":"$N $vgo, \"HA! $O!\"","":"$N $vgo, \"HA!\"",]),"huggle":(["LIV":"$N $vhuggle $t.","LIV STR":"$N $vhuggle $t $o.","":"$N $vhuggle $p Snuggles(tm) bear.",]),"drugaddict":(["LIV":"$N $vknow that $ts $v1are a drug addict, since $n $vhave shared needles with $t.","":"$N $vsuspect that $n might be a drug addict.",]),"bfgs":(["":"$N $vgo, \"Bog Fucking Giga-Super!\"",]),"hookup":(["LIV LIV":"$N $vnote that $n1 and $n2 seem to be hitting it off well, and should consider hooking up!",]),"strut":(["LIV":"$N $vstrut around $t.","STR":"$N $vstrut $p $o.","":"$N $vstrut $p stuff!",]),"stupid":(["LIV":"$N $vnote that $ts $v1are an experiment in Artificial Stupidity.",]),"beefcake":(["":"$N $vscream, \"BEEFCAKE!\"",]),"mwank":(["LIV":"$Ts $v1wank all over the mashed potatoes, moaning and sighing.",]),"laugh":(["LIV":"$N $vlaugh at $t.","OBJ":"$N $vlaugh at $o.","STR":"$N $vlaugh $o.","LIV STR":"$N $vlaugh at $t $o.","":"$N $vlaugh.",]),"nsdevelop":(["":"$N would not be caught dead being called a \"Netscape Developer\".",]),"ifiygd":(["LIV":"$N $vlook straight at $T and $vdeclare, \"I fart in your general direction!\"","":"$N $vexclaim, \"I fart in your general direction!\"",]),"jump":(["LIV":"$N $vjump up and down on $t.","STR":"$N $vjump $o.","":"$N $vjump up and down.",]),"i2":(["":"$N $vremember I2; it would have been nice if it weren't stuck in ping -flood mode.",]),"hshrugleg":(["LIV":"$N $vshrugleg so hard at $t, $p foot comes out $p ear.","":"$N $vshrugleg so hard, $p foot comes out $p ear.",]),"tigran":(["":"$N $vsalute Tigran and $vsay, \"Mein Fuhrer!\"",]),"eskimo":(["LIV":"$N $vgive $t a big eskimo-kiss.",]),"itworks":(["":"$N $vgasp, \"My GAWD! It WORKS!\"",]),"dordon":(["LIV":"$N calmly $vdraw $p katana and $vsever $p1 head from $p1 body. Nothing personal, you know.",]),"chocolates":(["LIV":"$N $vsay to $t, \"Life is like a box of chocolates...\"","":"$N $vsay in a shy voice, \"Life is like a box of chocolates...\"",]),"volunteer":(["LIV":"$N $vvolunteer $t.",]),"gt":(["LIV":"$N $vsay to $t, \"That would be a GoodThing(tm).\"","STR":"$N $vsay, \"$o is a GoodThing(tm).\"","":"$N $vsay, \"That would be a GoodThing(tm).\"",]),"noclue":(["LIV":"$N $vadmit to $t that $n $vare clueless.","":"$N $vadmit that $n $vare clueless.",]),"wiener":(["":"$p fingers have the consistancy of frozen Oscar-Mayer wieners.",]),"8675309":(["":"$N $vsing, \"Jenny... Eight, Six, Seven, Five, Three, O, Ni-e'ine!\"",]),"brandon":(["":"$N $vbegin to @IGNORE Brandon. $P blood pressure drops 30 points.",]),"morepeople":(["":"$N $vnote that Lima Bean regularly has more people logged on than many MUDs have PLAYERS ...",]),"giyf":(["":"$N $vintone, \"Grep is your friend!\"",]),"asif":(["":"$N $vexclaim \"As if!\"",]),"trecurse":(["":"$N $voptimize the \"recurse\" emote via tail-recursion, and $vend up in an infinite loop. Oops!",]),"2sexy":(["LIV LIV STR":"$N $vnote that $t $v1are too sexy for $p2 $o!","LIV":"$N $vare too sexy for $t!","LIV LIV":"$N $vnote that $t is too sexy for $t2!","STR":"$N $vare too sexy for $o!","LIV STR":"$N $vare too sexy for $p1 $o!","":"$N $vare too sexy for this mud!",]),"ga":(["":"$N $vgo, \"Ga ga!\"",]),"engmajors":(["":"$N $vremember why English majors don't like LIMA: \"Repeat after me. 'laf' is NOT a verb! 'laf' is NOT a verb!\"",]),"riddance":(["LIV":"$N $vnote $p1 passing and $vexclaim, \"Good Riddance!\"","WRD":"$N $vnote $o's passing and $vexclaim, \"Good Riddance!\"","":"$N $vexclaim, \"Good Riddance!\"",]),"whack":(["LIV":"$N $vwhack $p1 knees with a metal baton.",]),"animal":(["":"$N $vdo $p impression of Animal the Muppet: WO-MAN WO-MAN WO-MAN WO-MAN *pant* *pant* AH-OOOOOO!",]),"balogna":(["LIV":"$N $vsing, \"$P1 balogna has a first name, it's O-S-C-A-R!\"","":"$P balogna has a first name, it's O-S-C-A-R!",]),"h0":(["":"$N $vgo, \"H0 H0 H0 Baby!\"",]),"muah":(["":"$N $vgo, \"Muahahahahahaaaa!\"",]),"gothere":(["STR":"$N $vsay, \"I've got your $O RIGHT HERE!\"","LIV STR":"$N $vtell $T, \"I've got your $O RIGHT HERE!\"",]),"defygravity":(["":"$N $vdefy gravity.",]),"3am":(["":"$N $vnote that it is after 3am, when most of the best emotes (well, at least most of the emotes) were added.",]),"lambda":(["":"$N $vdo a wild lambda (The forbidden syntax)!",]),"dolphins":(["":"According to $n, dolphins are intelligent and friendly--intelligent and friendly on rye bread with some mayonnaise!",]),"jolt":(["":"$N $vdrink another can of \"Jolt\", and $p head explodes.",]),"otherteam":(["LIV":"$N quietly $vhint that $t $v1are playing for the other team.",]),"bleh":(["LIV":"$N $vgo: \"Bleh.\" (unlike $t, this is cool)","STR":"$N $vgo: \"Bleh.\" (unlike $o, this is cool)","":"$N $vgo: \"Bleh.\" (unlike Beek, this is cool)",]),"snafu":(["":"$N $vgo, \"Situation Normal, All Fucked Up.\"",]),"fg":(["":"$N $vtry to go to the 'fg' process, but $vfail miserably.",]),"dizzying":(["LIV":"$N $vtell $t, \"Truly you have a dizzying intellect.\"",]),"ff":(["LIV":"$N $vadvise $t, 'Feel Free.'","STR":"$N $vsay: 'Feel Free to $o.'","LIV STR":"$N $vadvise $t, 'Feel Free to $o.'","":"$N $vsay: 'Feel Free.'",]),"tingle":(["":"$N $vsay, \"Feel that tingle? That means it's working!\"",]),"moan":(["LIV":"$N $vmoan, \"$Tp\"","STR":"$N $vmoan $o.","LIV STR":"$N $vmoan, \"$t\" $o.","":"$N $vmoan.",]),"swoo":(["":"$N $vgo, \"Sarcastic woo!\"",]),"laff":(["LIV":"$N $vlaff at $t.","STR":"$N $vlaff $o.","":"$N $vlaff.",]),"calin":(["":"$N $vthink of something dumb.",]),"lfrockleg":(["":"$N $vgo, \"Little fucking rockleg!\"",]),"cliff":(["LIV":"You wouldn't catch any woman of $P1 leading $n1o by the nose; but you might catch her sunning herself on a rock!",]),"thinkso8":(["":"$N $vgo, \"Well, I think so Brain.. but how can we get the gummy worms to live in peace with the marshmallow chimps?\"",]),"thinkso7":(["":"$N $vstop and $vthink a moment. \"I -think- so Brain, but how do they get the sheep out of your bed after you count them?\"",]),"thinkso6":(["":"$N $vthinks a moment and replies, \"I think so Brain, but do you think she'd really leave Mickey for me?\"",]),"swirly":(["LIV":"$N $vgive $t a swirly.",]),"ex":(["STR":"$N $vtry to start up ex, but $vfail miserably.","":"$N $vtry to start up ex, but $vfail miserably.",]),"thinkso5":(["":"$N $vgo, \"Narf! I think so Brain, but where in the world are we going to get rubber pants our size at this time of night?\"",]),"ew":(["":"$N $vgo \"EEeewwwww.... GROSS!\"",]),"thinkso4":(["":"$N $vgo, \"I think so Brain, but we'd need an awfully large number of marshmallows for that wouldn't we?\"",]),"thinkso3":(["":"$N $vgo, \"Well, I think so Brain.. but just where does all that cheesewhiz come into the picture?\"",]),"mountain":(["":"$N $vsay, \"I have seen the top of the mountain. And it is good.\"",]),"thinkso2":(["":"$N $vthink hard for a moment and $vsay, \"I -think- so Brain, but once the time machine is built, won't we need to make new verb tenses?\"",]),"peace":(["LIV":"$N $vflash the peace sign at $t.","":"$N $vflash the peace sign.",]),"thinkso1":(["":"$N $vgo, \"I think so Brain, but how can we afford all the pantyhose?\"",]),"parrot":(["":"$N $vsay, \"This parrot is NO MORE!\"",]),"er":(["":"$N $vgo, \"Er...\"",]),"snow":(["LIV":"$N $vare disgusted by the fact that every time $t $v1scratch $p1 head, it snows.","":"$N $vscratch $p0 head and it snows.",]),"orbust":(["STR":"$N $vexclaim, \"$O or bust!\"",]),"snot":(["":"$N $vdrool diseased snot from $p runny nose.",]),"wabe":(["LIV":"$N $vwabe to $t. Looks like $n missed the v.","":"$N $vgyre and $vgimble and $vmiss the 'v'.",]),"tame":(["LIV":"$N $vwant $n1 to be $p tame coder.","STR":"$N $vwant a tame $o.","LIV STR":"$N $vwant $n1 to be $p tame $o.","":"$N $vwant a tame coder.",]),"eh":(["LIV":"$N $vlook at $t and $vgo, \"Eh?\"","OBJ":"$N $vlook at the $o and $vgo, \"Eh?\"","STR":"$N $veh $o.","":"$N $vgo, \"Eh?\"",]),"brain":(["LIV":"$N $vgo, \"Check out the big brain on $tp!\"","":"$N $vexclaim, \"The same thing we do EVERY night Pinky, TRY TO TAKE OVER THE WORLD!\"",]),"bounce":(["LIV":"$N $vroll $t up into a ball and $vbounce $t around.","STR":"$N $vbounce $o.","":({"B O I N G ! ","$N $vbounce around happily. ",}),]),"wantus":(["LIV":"$N $vsuggest, \"Maybe that's what $tp WANTS us to think.\"","":"$N $vsuggest, \"Maybe that's what they WANT us to think.\"",]),"ea":(["LIV":"$N $vgive $t an emoteapropos.","":"$N $vhaul out 'emoteapropos'.",]),"dopey":(["":".",]),"snog":(["LIV":"$N $vgrab $t and $vgive $t a good snog.","STR":".","":"$N $vsnog.",]),"joke":(["":"$N $vpoint out that that was obviously a joke.",]),"snod":(["LIV":"$N $vsmile and $vnod at $t.","":"$N $vsmile and $vnod.",]),"chuckleleg":(["LIV":"$N $vchuckleleg at $t.","":"$N $vchuckleleg.",]),"noclass":(["LIV":"$N $vsay, \"$Tp, you're just like school in summer: NO CLASS!\"","STR":"$N $vsay, \"$O, you're just like school in summer: NO CLASS!\"",]),"ow3b":(["LIV":"$N $vthink $t worships OpenWindows",]),"bitch":(["LIV":"$N $vsing \"Well, $n1p is a bitch, $n1p's a big fat bitch, $n1p's the biggest bitch in the whole wide word. $N1p's a stupid bitch if there ever was a bitch, $n1p's a bitch to all the boys and girls!\"","":"$N $vbitch and $vmoan.",]),"show":(["LIV STR":"$N $vshow $t $p $o.",]),"magnify":(["LIV":"$N $vpass $t a magnifying glass.",]),"bigspam":(["":"$N $vspam brutally... ========================================== | ,dP''8a '888888b, d8b '888b ,888' | | 88b ' 888 d88 dPY8b 88Y8b,8888 | | `'Y8888a 888ad8P'dPaaY8b 88 Y88P888 | | a, Y88 888 dP Y8b 88 YP 888 | | `'8ad8P'a888a a88a;*a888aa88a a888a | | ;*;;;;*;;;*;;;*,, | | _,---''6ooc,*;;;*;;;*;;*d;, | | .-' 666o6o6o6oc,*;;*;dHH; | | .' nhhn,. 6666o66oo6o6o6cMMMMMM`. | | / nhhhhhhhn,66666666666o6oo6MMMMMW,\\ | | .,nhhhhhhhhnhY666666666666666MMMMWHP', | | |nhhhhhhhnhMFjj,boY6666666666MMMWWHP | | | ``hhhhhnhWFjjjjjbbbbbboY6666MMMWWHPf ' | | \\ `mYHMFjjjjjjjjbbbbbbbbbboYHHPP'` / | | `. ''ijjjjjjjjjmbbbbbbbbbbbbbo, ,' | | `-._`iijjjjmMF`'bbbbb<=========. | | `---..._______...|<[Hormel | | | `=========' | ========================================== ",]),"goggle":(["LIV":"$N $vgoggle at $t.","STR":"$N $vgoggle $o.","":"$N $vgoggle.",]),"risc":(["":"$N $vsay, \"Risc architecture is going to change the world!\"",]),"urge":(["LIV STR":"$N $vurge $t to: $o.",]),"anvil":(["LIV":"$N $vthreaten $t with an anvil.",]),"storm":(["LIV":"$N $vstorm about, gesturing wildly, and throwing things at $t.","STR":"$N $vstorm around angrily cursing and gesturing wildly about $o.",]),"nobog":(["LIV":"$N $vintone to $t, \"You have not yet achieved the Zen of Bog, and so your karma has failed.\"",]),"emotecommand":(["":"$N $venvision a LIMA where you never have to use the emote command.",]),"dbrox":(["LIV":"$N $vtry to prove that Deathblade rocks $t, but $vfail miserably.","":"$N $vare compelled to note how little Deathblade rocks.",]),"boast":(["STR":"$N $vboast, \"$o\".",]),"notmi":(["":"$N $vgrumble about yet another missing TMI command...poorly substituted by an emote.",]),"learn4food":(["":"$N $vwave around a sign, \"Willing to Learn for Food\"",]),"nfclue":(["LIV":"$N $vtell $t that $n $vhave no fucking clue.","":"$N $vadmit that $n $vhave no fucking clue.",]),"nodbog":(["LIV":"$N $vnodbog at $t.","OBJ":"$N $vnodbog at $o.","STR":"$N $vnodbog $o.","":"$N $vnodbog.",]),"cringe":(["LIV":"$N $vcringe in pain at the very thought of what $ts $v1are saying.","STR":"$N $vcringe $o.","":"$N $vcringe.",]),"notme":(["LIV":"$N $vshake $p head at $t and $vdeclare, \"Not me!\"","":"$N $vdeclare, \"Not me!\"",]),"dc":(["":"$N $vnote that DC is a thrid world country.",]),"cluck":(["":"$N $vcluck like a chicken.",]),"reality":(["":"$N $vnote that we will be restoring normality when we are sure what is normal anyway.",]),"sheepish":(["":"$N $vlook sheepish. $N $vlook around nervously for people from Montana.",]),"sbog":(["":"$N $vgo, \"Super-Bog!!!!\"",]),"sickfucker":(["LIV":"$T $v1know $nt $vare a gimp pervert.",]),"wavehead":(["LIV":"$N $vwavehead to $t.","STR":"$N $vwavehead $o.","":"$N $vwavehead.",]),"subtle":(["LIV":"$N $vwhap $t over the head with a subtle point.",]),"misery3":(["":"Misery enters Lima Bean.",]),"bogtoe":(["STR":"$N $vbogtoe $o.","":"$N $vbogtoe.",]),"chase":(["LIV":"$N $vchase $t.",]),"misery2":(["":"%^CHANNEL%^[announce]%^RESET%^ Misery enters Lima Bean.",]),"i3test":(["LIV":"$N $vtest something ($t $ts $t)",]),"join":(["LIV":"$N $vroll $t up into a joint and $vsmoke $t.",]),"camel2":(["":"$N $vspark up a %^B_ORANGE%^ %^RESET%^%^B_WHITE%^%^BLUE%^ CAMEL %^RESET%^%^B_RED%^ %^RESET%^",]),"bunghole":(["LIV":"$N $vlook at $t and $vgo, \"Bunghole.\"","":"$N $vask, \"Would you like to see my bunghole?\"",]),"confused":(["":({"You display a look of confusion in hope for some help. ","$N $vlook very confused. ",}),]),"ffstfu":(["LIV":"$N $vadvise $t, \"Feel free to shut the fuck up.\"",]),"100sign":(["":"$N $vpresent archeological evidence suggesting early LIMA mudlib writers carried signs reading \"100 by 100 A.D.\"",]),"salma":(["":"$N $vdecide to drop out of life and become a Salma Hayek groupie.",]),"thinkso":(["":"$N $vgo, \"I think so Brain, but where are we going to get all the chickens?\"",]),"skank":(["":"$N $vsay, \"I'm not Skank... Skank's over there... Skank's dead.\"",]),"snack":(["":({"In need of a snack, you type \"AFK (Away From the Keyboard)\" and dash off! ","$N $vare AFK (Away From the Keyboard) for a sec, in search of a snack. ",}),]),"blubber":(["LIV":"$N $vblubber at $t.","OBJ":"$N $vblubber at $o.","STR":"$N $vblubber $o.","":"$N $vblubber.",]),"catfight":(["":"$N $vscream, \"Catfight!!!!!!!!!\"",]),"amen":(["":"$N $vgo, \"Amen brother!\"",]),"nutsack":(["STR":"$N $vdo $p best crypt-keeper: \"Here's a little take from my nutsack: $O\"","":"$N $vdo $p best crypt-keeper: \"Here's a little tale from my nutsack!\"",]),"boredboredboredboredbored":(["":"$N $vare Super Fucking Bored to type it out 5 times.",]),"pbye":(["":"$N $vwaves to you and $vsay, \"Good bye!\"",]),"karate":(["LIV LIV":"$N $vjump up into the air, and $vkick $t and $t2 simultaneously!",]),"lunch":(["":"$N $vstate hungrily, \"I'm off to get me some lunch...\"",]),"gottago":(["":"$N $vsay, 'Gotta go!'",]),"knee":(["LIV":"$N $vknee $t where it hurts.",]),"blam":(["":"BLAM!",]),"thrash":(["LIV":"$N repeatedly $vbeat $p1 head against the nearest brick wall.","":"$N repeatedly $vbeat $p head against the nearest brick wall.",]),"propose":(["":"$N $vpropose a toast.",]),"blah":(["":"$N $vblah.",]),"simple":(["LIV":"$N $vlook at $t and $vsay, \"Simple pleasures for simple minds, I guess.\"","":"$N $vsay, \"Simple pleasures for simple minds, I guess.\"",]),"asdf":(["":"$N obviously $vhave nothing to do, since $n $vare typing \"asdf\".",]),"addsalt":(["LIV":"$N $vsalt $t liberally.",]),"verbs2":(["":"$N $vgo through the Merriam-Webster New Collegiate Dictionary, making LIV rules for all the transitive verbs.",]),"bc":(["":"$n goes, \"ON WITH THE BODY COUNT!\"",]),"onehand":(["LIV":"$N $vnotice that $ts $v1are an expert at one handed typing...",]),"3270":(["":"$N $vgrowl, \"If you value your life, you won't send me escape sequences!\"",]),"marines":(["LIV":"$N $vwavie $p marines at $t.","":"$N $vwavie $p marines.",]),"missionary":(["LIV":"$N $vscream, \"Missionary!\" at $t.",]),"beekfix":(["":"$N $vnote that this is soooooo easy that even Beek could fix it.",]),"bslap":(["LIV":"$N $vslap $t as if $ts were a bitch.","":"$N $vlook around for a bitch to slap.",]),"wibble":(["LIV":"$N $vwibble contentedly in $p1 general direction.","STR":"$N $vwibble $o.","":"$N $vwibble contentedly.",]),"tgif":(["":"$N $vsay, \"Thank goodness it's Friday.\"",]),"calin2":(["":"$N $vgo, \"Shuddup before I nuke you!\"",]),"bluescreen":(["":"$N $vdisappear and $vare replaced by a blue screen covered with cryptic information.",]),"ligament":(["":"$N $vgo, \"Ligament.\"",]),"sweater":(["LIV":"$N $vtell $t, \"HEY! MISSY! GO KNIT ME A SWEATER, BEFORE I SLAP YOUR FACE!\"","":"$N $vsay, \"If some sissy chick tried to kick my ass, I'd say, 'HEY! MISSY! GO KNIT ME A SWEATER, BEFORE I SLAP YOUR FACE!'\"",]),"kickleg":(["LIV":"$N $vkickleg $t.",]),"shuffle":(["":"$N $vshuffle off and $vshoot $r.",]),"bogemotes":(["":"$N $vnote that all the bogemotes could have been handled with a bog STR rule.",]),"handkerchief":(["LIV":"$N $vwave $p handkerchief at $t and $vyell, 'Yoohoo! Come here, you big boy!'",]),"cards":(["LIV":"If $n1 $v1play $p1 cards right, $n0 will make $t1 $p0 bitch.",]),"frood":(["LIV":"$N $vadmit that $t is a hoopy frood.","":"$N $vsay, \"It's a hoopy frood.\"",]),"upyernose":(["LIV":"$N $vtell $t, \"Up your nose with a rubber hose!\"","":"$N $vgo, \"Up your nose with a rubber hose!\"",]),"alone":(["":"$N $vscream, \"You're connected to a whole planet! What the hell do you think?!! Get a real brain!\"",]),"snigger":(["STR":"$N $vsnigger $o.","":"$N $vsnigger.",]),"ah":(["LIV":"$N $vgo to $t, \"Ah...\"","":"$N $vgo 'AH...'",]),"glorph":(["STR":"$N $vglorph $o.","":"$N $vglorph.",]),"veal":(["":"$N $vsay, \"Ah... Veal. The meat of love. How romantic.\"",]),"thinks.":(["STR":"$N $vthinks. $o.","":"$N $vthinks..",]),"idle":(["LIV":({"$N $vdecide that $ts $v1have idled enough, so $n calmly $vinform $t that $ts $v1need to come back to the mud. ","$N $vscream in $p1 face: STOP IDLING!!! ALL YOU EVER DO IS IDLE!!!! ",}),"":({"You might actually get something done if you didn't idle so much. *hint, hint* ","$N $vidle, AGAIN, does $N ever do anything BUT idle?!? ",}),]),"riot":(["LIV":"$N $vstart a riot. $Ts $v1get $p1 head beaten with a lead pipe.","":"$N $vbegin rioting.",]),"tmi2":(["":"$N $vwonder if TMI-2 wasn't doomed from the point it named itself after a nuclear meltdown.",]),"ab":(["":"After that nice round of ass lovin', $n $vexperience a bit of bloody anal seepage.",]),"aa":(["STR":"$N $vsay, \"Hi, I'm $n0p and I'm a $o.\"","LIV STR":"$N1 $v1say, \"Hi, I'm $n1p and I'm a $o.\"",]),"bpoke":(["LIV":"$N $vpoke $t in the tummy with a bonecrushing sound!",]),"bhide":(["LIV":"$N $vhide from $p1 wrath.","STR":"$N $vhide from Beek's wrath, mumbling \"$o...\"","":"$N $vhide from Beek's wrath.",]),"princeton":(["":"$N $vquirk \"Whats princeton?\"",]),"cufflinks":(["LIV":"$N1 had best unfuck $r1 and start shitting $t0 Tiffany cufflinks or $n will definitely fuck $t up.",]),"rawhide":(["":"$N $vsing, \"Head 'em up, move 'em out, RAWHIDE!\"",]),"b5":(["":"Babylon 5 is on! Stand up and rejoice!",]),"sunke":(["":({"You snuke. ","$N $vsunke. (How the hell do you sunke?) ",}),]),"notkicking":(["LIV LIV":"$N $vnote that $t $v1are doing something to $p2 ass, but $n1 $v1are definitely not kicking it.",]),"wedgy":(["LIV":"$N $vpull $p1 underwear up over $p1 head, then $vstapple it there","OBJ":"$N $vwedgy $T",]),"zuul":(["STR":"$N $vgo, \"There is no $o. There is only Zuul.\"",]),"girn":(["STR":"$N $vgirn $o because $n couldn't spell \"Grin\".","":"$N $vgirn like an idiot because $n couldn't spell \"grin\".",]),"girl":(["LIV":"$N $vask $t, \"How much for the little girl? I wanna buy the little girl.\"","":"$N $vask, \"How much for the little girl? I wanna buy the little girl.\"",]),"physicist":(["LIV":"$N $vnote that $t $v1are a physicist, and therefore cannot get any.",]),"jackass":(["LIV LIV":"$N $vguess $t found out $n2 $v2are a jackass.",]),"squick":(["LIV":"$N $vsquick $t","STR":"$N $vsquick $o",]),"flashlight":(["LIV":"$N $vshine a flashlight in $p1 ear; light shines out $p1 other ear.",]),"wigglestick":(["":"$N $vsing, \"I've got a wiggle stick, MAMA!\"",]),"mudlib":(["":"$N $vwave around a sign, \"Will write mudlib for food.\"",]),"willis":(["LIV":"$N $vask $t, \"What you talkin' 'bout, Willis?\"",]),"bumpersticker":(["STR":"$N $vsmack a bumper sticker reading '$O' on his butt.","LIV STR":"$N $vsmack a bumper sticker reading '$O' on $p1 butt.",]),"tyep":(["LIV":"$N $vnote that $t should learn to tyep.","":"$N cna't tyep.",]),"muchmore":(["LIV STR":"$N $vare clearly _much_ more $o than $n1.",]),"swig":(["":"SWIG: It's not your mother's wrapper generator.",]),"stink":(["LIV":"$N politely $vinform $t that $n1s $v1stink and that $n1s should go take a shower.","":"Boy, $N sure $vdo stink today.",]),"ring":(["LIV":"$N $vring $n1.",]),"flipoff":(["LIV":"$N $vflip $t off.","STR":"$N $vflip everyone off while screaming, \"$o\".","":"$N $vflip everyone off.",]),"smilepenis":(["STR":"$N $vsmilepenis $o.","":"$N $vsmilepenis.",]),"impeach":(["LIV":"$N $vimpeach $t quasi-judicially.",]),"sprintlink":(["":"$N $vwave a banner in the air proclaiming the death of sprintlink.",]),"stomp":(["LIV":"$N $vstomp on $p1 head.","STR":"$N $vstomp $p feet $o.","":"$N $vstomp $p feet.",]),"asap":(["":"$N $vgo, \"As soon as possible.\"",]),"excuse":(["LIV":"$N $vexcuse $t.",]),"prozac":(["":"$N $vsay: Wheres that PEZ dispenser that's filled with prozac?",]),"launch":(["LIV STR":"$N $launch into a long, boring monologue until someone does or says something...",]),"terror":(["LIV":"$N $vsay to $t, \"Don't be too proud of this technological terror you've constructed.\"","":"$N $vsay, \"Don't be too proud of this technological terror you've constructed.\"",]),"jungle":(["LIV":"$N $vscream in $p1 face, \"WELCOME TO THE JUNGLE BABY! YOU'RE GONNA DIE!\"","":"$N $vscream, \"WELCOME TO THE JUNGLE BABY! YOU'RE GONNA DIE!\"",]),"fdohleg":(["":"$N fucking $vd'ohleg.",]),"angel":(["":"$N $vsprout wings and a halo, then $vsmile angelically. (It's not $p fault! Really!)",]),"target":(["LIV":"$N $vsay to $t, \"Stay on target!\"","":"$N $vsay, \"Stay on target!\"",]),"bbhead":(["":"$N $vtake $p head off $p shoulders and aimlessly $vbounce it around like a basketball.",]),"skip":(["STR":"$N $vskip $o.","":"$N $vskip.",]),"whinge":(["STR":"$N $vwhinge $o.","":"$N $vwhinge.",]),"skin":(["":"$N sing, \"Must be your skin, I'm sinking in. Must be for real, because now I can feel.\"",]),"ijig":(["LIV":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig around $t.","OBJ":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig around the $o.","STR":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig $o.","":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig.",]),"ambig":(["LIV":"$N $vpoint out an ambiguity to $t, and $vbop $t on the nose.",]),"limaleg":(["":"(L)ets (I)ncinerate (M)ore (A)sinine Leggers.",]),"chant":(["STR":"$N $vchant: \"$O! $O! $O!\"",]),"sunday":(["":"$N $vscream: Sunday Sunday Sunday! LIVE on pay-per-view!...",]),"enormousgenitals":(["":"$N $vannounce, \"Traveling comes naturally to Guard Number 3, as he's a licensed airplane pilot, welcome please, Enormous Genitals!\"",]),"roll":(["LIV":"$N $vroll $p1 eyes.","STR":"$N $vroll $o.","":"$N $vroll $p eyes.",]),"guano":(["LIV":"$N $vwarn $t not to try any of $p1 preversions.",]),"fixitp":(["LIV":"$N $vplead to $t, \"Fix my bug? Pleeaaseee?\"",]),"grok":(["STR":"$N $vgrok $o.","":"$N $vgrok.",]),"mumble":(["LIV":"$N $vmumble something about $t being a dork.","STR":"$N $vmumble something about $o.","":"$N $vmumble.",]),"imho":(["STR":"$N $vgo, \"In my humble opinion, $o\"",]),"punkass":(["LIV":"$N $vsay to $t, \"You ain't nothing but a punk-ass bitch!\"",]),"lassie":(["LIV":"$N $vsay, 'Whats that Lassie? You say $t fell down a mineshaft?!'","STR":"$N $vsay, 'Whats that Lassie? You say $o fell down a mineshaft?!'","":"$N $vsay, 'Whats that Lassie? You say Timmy fell down a mineshaft?!'",]),"punkrock3":(["LIV":"$N $vthrow a spiked leather jacket around $p1 shoulders. Scrawled on the back of it are the words \"VERY PUNK\"",]),"mmission":(["LIV":"$N $vnote that $ts $v1are a man with a mission!","":"$N $vsay, \"I'm a man with a mission!\"",]),"eye":(["LIV":"$N $veye $t suspiciously.","":"$N $veye everyone suspiciously.",]),"punkrock2":(["LIV":"$N $vshave some words in the side of $p1 head. They read \"I AM PUNK ROCK\"",]),"panic":(["STR":"$N $vpanic $o.","":"$N $vpanic.",]),"nosefuck":(["LIV":"$N $vfuck $t in the nose, and $ts smelt $n10o coming.",]),"submerge":(["LIV":"$N $vsubmerge $p face in $p1 crotch enthusiastically and with a flurry of tongue, saliva, technique and passion, $vbring $n1o to a loud climax.",]),"disclaim":(["":"$N $vnote, \"All emotes in this mudlib, even those based on real people--are entirely fictional. All celebrity quotes are impersonated....poorly. The LIMA mudlib contains coarse language and due to its content it should not be used by anyone.\"",]),"cartoon":(["STR":"$N $vsay, \"Warning: The LIMA mudlib contains cartoon violence, and may not be suitable for younger viewers\" as $n $vare flattened by a falling $o.","":"$N $vsay, \"Warning: The LIMA mudlib contains cartoon violence, and may not be suitable for younger viewers\" as $n $vare flattened by a falling piano.",]),"envy":(["LIV":"$N $venvy $t.",]),"ejectcore":(["":"$N $vshout, \"The anti-matter containment field is destabilizing...eject the warp core, NOW!\"",]),"bye":(["STR":"$N $vwave to $O and $vsay, \"Good Bye!\"","":"$N $vwave, \"Goodbye!\"",]),"stickit":(["LIV":"$N $vtell $t, \"Why don't you try sticking your head up your ass... see if it fits.\"",]),"peta":(["":"$N $vnote that no animals were harmed during the making of this mudlib.",]),"beware":(["":"$N $vwarn: Beware of programmers who carry screwdrivers.",]),"good":(["LIV":"$N $vtell $t: \"That's a good thing (tm).\"","":({"You tell everyone: \"That's a good thing (tm).\" ","$N $vstate: \"That's a good thing (tm).\" ",}),]),"helpme":(["":"$N $vcall the operator asking for help....\"Yeah, I'm at the corner of WALK and DON'T WALK!\"",]),"scooby":(["LIV":"$N $vsay, \"Now let's find out who $Tp really is!\" $N then $vproceed to remove $p1 mask, revealing James, the museum curator!",]),"hell":(["":"$N $vwonder where we are going.... and why are we in this handbasket?",]),"sesame":(["WRD WRD WRD":"$N $vnote that today's episode was brought to you by the letter '$O0', the number '$o1', and the emote '$o2'.",]),"googly":(["":"$N $vexclaim, \"That was a wicked googly!\"",]),"suxsomuch":([]),"zorkers":(["":"$N $vnote, \"Zorkers do it under the rug!\"",]),"sosmooth":(["":"$N $vgo, \"I'm so smooth, I even have a beard on my hands.\"",]),"toomanylegs":(["LIV":"$N $vhand $t a flower, and $vask for a donation for the Society for the Prevention of New Leg Emotes.",]),"believe":(["LIV":"$N $vbelieve $t.",]),"phaser":(["STR":"$N $vset $p phaser to '$o'.",]),"zort":(["":"$N $vgo \"Narf! Zort!\"",]),"netradio":(["":"$N $vspawn the NETRADIO and $vget down with DA GROOVE!",]),"xpelt":(["LIV":"$N $vtie $t to the bed and $vpelt $t with lacy underwear.","LIV STR":"$N $vtie $t to the bed and $vpelt $t with $o.",]),"glutton":(["LIV":"$N $vnotice that $t is a glutton for punishment. Any S&M freaks here?",]),"promdress":(["LIV":"$N $vare off like $p1 date's prom dress.","":"$N $vare off like a prom dress.",]),"yawn":(["LIV":"$N $vyawn at $t.","STR":"$N $vyawn $o.","":"$N $vyawn.",]),"wva":(["STR":"$N $vsay, \"$O: where the men are men, and the sheep are frightened.\"","":"$N $vsay, \"West Virginia: where the men are men, and the sheep are frightened.\"",]),"stfu":(["LIV":"$N $vtell $t to shut the fuck up.","STR":"$N $vtell $O to shut the fuck up.","":"$N $vshut the fuck up.",]),"zork":(["STR":"$N $vzork $o.","":({"At your service."," ",}),]),"kingme":(["":"$N $vgo, \"King me!\"",]),"etaine":(["":"$N $vstomp and $vchomp!",]),"kosh2":(["":"$N $vmutter: \"And so it begins...\"",]),"whinefor":(["LIV":"$N $vwhine for $t.",]),"notes":(["":"$N $vremark that Lotus notes doesn't come with an email client, it comes with an example email application running on Notes.",]),"wuv":(["LIV":"$N $vwuv $t. Aww, how cute.",]),"chalk":(["LIV":"$N $vchalk $t up a point.","":"$N $vchalk $r a point.",]),"nmvlm":(["":"$N $vinsist that Nightmare tastes better than Lima.",]),"fart":(["LIV":"$N $vpin $t down and $vfart on $t!","STR":"$N $vfart out a noise that sounds eerily like \"$o\".","":({"You let out a nasty stench. ","There is a strange sound and suddenly the room smells gross. ",}),]),"flollop":(["":({"You flollop around like a mattress. ","$N $vflollop around, what does $n think $n is? A mattress? ",}),]),"idspispopd":(["":"$N $vtype, 'idspispopd'. \"No Clipping Mode On.\"",]),"perl":(["":"$N $vnote that Perl is probably the only interpreted language with a complexity level approaching C++.",]),"borken":(["LIV":"$N $vsee that $t $v1are borken.","":"$N $vare borken.",]),"fark":(["":"$N $vpretend $n $vare Cletus on '3 Kingdoms' and $vgo 'Fark'.",]),"chainsaw":(["":"$N got the chainsaw. \"Find some meat!\"",]),"master":(["":"$N $vcry out: Wanted: Master ... willing to participate in bondage and S&M acts.",]),"strip":(["":"$N $vremove $p clothes seductively.",]),"lesbian":(["LIV":"No one knows that $t $v1are a lesbian!","":"No one knows that $n $vare a lesbian!",]),"gulp":(["LIV":"$N $vgulp down $p1 Kool-Aid.","":"$N $vgulp down the Kool-Aid.",]),"dreams":(["":"$N $vknow that Dreams is really a loser, but is nice enough not to say anything.",]),"monkamillion":(["":"$N $vsay, \"monkey, monkey2, monkey3....monkamillion.\"",]),"vader":(["":"$N $vsay, \"When I left you, I was but the learner. Now I am the master.\"",]),"gravy":(["LIV":"Gamedriver asks $t, \"How about some gravy for those fries?\"",]),"makebabies":(["LIV":"$N $vsay to $t, \"Hey, Woman! Shut your mouth! And make babies!\"",]),"gimp":(["":"$N $vgo, \"Bring out the gimp.\"",]),"sorryjesus":(["":"$N $vexclaim, \"Oh, fuck! I'm sorry Jesus! Please don't kill me!\"",]),"rliv":(["":"$N $vexpress the opinion that \"random LIV\" should be the Official [tm] LIMA greeting.",]),"texas":(["":"$N $vgo, \"Texas. The only place in the world where farting is a competative sport.\"",]),"esteem":([]),"jerky2":(["":"$N $vwhine \"My anal warts are kill'n me!\"",]),"texan":(["":"$N $vdon $p ten-gallon hat and spurs and $vride into the sunset.",]),"homechicken":(["LIV":"$N $vsay to $t, \"Damnit, go spank your own monkey, and stay away from mine, homechicken!\"",]),"wtf":(["STR":"$N $vsay, \"What the fuck $o??\"","":"$N $vgo, \"What the fuck?\"",]),"silly":(["LIV":"$N $vsilly $t. You're so silly :)",]),"iknowbut":(["LIV":"$N $vsing to $t, \"I know, I should say no, but it's kinda hard when $tp is ready to go.\"","":"$N $vsing, \"I know, I should say no, but it's kinda hard when she's ready to go.\"",]),"bodyslam":(["LIV":"$N $vbodyslam $t into the wall.","LIV STR":"$N $vbodyslam $t $o.",]),"ymtc":(["LIV":"$N $vtell $t, \"You make the call!\"","":"$N $vsay, \"You make the call!\"",]),"chortle":(["LIV":"$N $vchortle at $t.","STR":"$N $vchortle $o.","":"$N $vchortle.",]),"nopropos":(["LIV":"$N $vdare $t to find that without emoteapropos! >=)","":"$N didn't have to break out emoteapropos!",]),"fstick":(["LIV":"$N $vpunch $t in the stomach and $vgo, \"You're not going anywhere you evil-hosting fuck stick!\"","":"$N $vgo, \"You're not going anywhere you evil-hosting fuck stick!\"",]),"cluephone":(["LIV":"$N $vgo, \"Ring, Ring, it's the Clue Phone for you, $tp!\"","":"$N $vgo, \"Ring, Ring, it's the Clue Phone!\"",]),"hum":(["":"$N $vhum a little ditty.",]),"learn":(["LIV":"$N $vsay, \"You will go to the Lima Bean system, $tp, and there you will learn from Beek, the MudOS master who taught me.\"",]),"frobnicate":(["":"$N $vpause for a minute to sharpen $p frobnicating skills.",]),"whazzat":(["":"$N $vask, \"Whazzat?\"",]),"huh":(["":"$N $vgo: huh?!?",]),"hug":(["LIV":"$N $vhug $t.","OBJ":"$N $vhug $o.","STR":"$N $vhug $o.","":"$N $vhug $r.",]),"agreeleg":(["LIV":"$N $vagreeleg with $t.","OBJ":"$N $vagreeleg with the $o.","STR":"$N $vagreeleg $o.","LIV STR":"$N $vagreeleg with $t $o.","":"$N $vagreeleg.",]),"megaboob":(["":"$N $vsay, \"It's Megaboz, not Megaboob!\"",]),"suspect":(["LIV":"$N $vsuspect it's a problem with $p1 code.","":"$N $vsuspect it's a problem with $p code.",]),"peacep":(["":"$N $vflash you the peace sign.",]),"desttool":(["LIV":"$P hand wavers over $p dest tool as $n $vwatch $t carefully.","":"$P hand wavers over $p dest tool.",]),"rhide":(["LIV":"$N $vrun and $vhide from $t.","STR":"$N $vrun and $vhide from $o.","":"$N $vrun and $vhide.",]),"breastfeed":(["LIV":"$N $vbreastfeed off of $t.","LIV LIV":"$N $vwatch in horror as $n1 $v1feed at $p2 breast.","":"$N $vare ready to breast feed anyone who is hungry.",]),"but":(["":"$N $vsay: But...",]),"beered":(["LIV":"$N $vforce $t to consume a can of beer, and then $vgo, \"Beered!\"","":"$N $vgo, \"Beered. (hic)\"",]),"mashed":(["":"$N $vsay, \"Shit, if this is gonna be that kinda party, I'm gonna stick my dick in the mashed potatoes.\"",]),"vulcan":(["LIV":"$N $vlook at $t, $vdo that thing with $p hand, and $vsay, \"Live long and prosper.\"","":"$N $vdo that thing with $p hand and $vsay, \"Live long and prosper.\"",]),"gnuwin32":(["":"$N $vwonder if Gnu-Win32 will ever make Windows NT into a a real OS... NOT!",]),"whistle":(["LIV":"$N $vwhistle at $t.","STR":"$N $vwhistle $o.","LIV STR":"$N $vwhistle $o at $t.","":"$N $vwhistle.",]),"sgfwaveleg":(["":"$N $vsupergigafuckingwaveleg.",]),"monkey":(["LIV":"$N $vsay to $t, \"Go spank your monkey, dillweed!\"","":"$N $vsay, \"Monkey monkey monkey HEE-HEE-HUA-OHOO-OOHOO-HUA HOOO HOO!!\"",]),"meatsmack":(["LIV":"$N $vsmack $t with $p meat.",]),"zoot":(["LIV":"$N $vzoot $t against the wall.",]),"zakkstealsalloflimascoolemotes":(["":"$N $vnote how Zakk steals all of Lima's cool emotes and $vwonder if he's even stolen this one!",]),"truth2":(["LIV":"$N $vlook at $t with an air of drama and $vtell $n1o: I want the truth!","":"$N $vsay dramtically: I want the truth!",]),"lameemote":(["STR":"$N $vcreate this to urge $T to help make more souls.",]),"advantage":(["":"$N $vpoint out the advantages of being an admin on almost every MUD in existence.",]),"huhuh":(["STR":"$N $vgo: Huhuh-hu-hu huh-huh hu-hu-huh... $o","":"$N $vgo: Huhuh-hu-hu huh-huh hu-hu-huh...",]),"zoom":(["STR":"$N $vzoom $o.","":"$N $vzoom.",]),"puffofsmoke":(["LIV":"$N $venjoy $p1 puff of smoke.","":"$N $venjoy a puff of smoke.",]),"iizukaissodumb":(["LIV":"Iizuka is so dumb that he didn't even find \"This Is Spinal Tap\" to be one of the best movies of all time; just ask $tp!","":"Izzuka is so dumb, he can't even find Spinal Tap an enjoying movie!",]),"tsk":(["LIV":"$N $vtsk at $t.","STR":"$N $vtsk $o.","":"$N $vtsk.",]),"qwertyuiop":(["":"$N $varen't kidding anyone $n $vare interested by doing \"qwertyuiop\".",]),"aalsfbogleg":(["LIV":"$N above average little super fucking $vbogleg at the concept of $t.","STR":"$N above average little super fucking $vbogleg at the concept of $o.","":"$N above average little super fucking $vbogleg at the concept of it.",]),"made2suffer":(["":"$N $vexclaim, \"We seem to have been made to suffer. It's our lot in life.\"",]),"battle":(["LIV":"$N $vdecide not to challenge $t to a battle of wits. It's not fair to attack the unarmed.",]),"blowsgoats":(["LIV":"$N $vhold up a sign, reading: '$N1p blows goats. I have proof.'",]),"111":(["":"$N $vscream, \"Don't give me none of that!\"",]),"faq2":(["LIV":"$T $v1give up on the FAQ and $v1decide to log in at Lima Bean and pester someone there for the answer instead.","":"$N $vgive up on the FAQ and $vdecide to log in at Lima Bean and pester someone there for the answer instead.",]),"shiver":(["":"$N $vshiver.",]),"caress":(["LIV":"$N $vcaress $p1 face.",]),"fdoh":(["LIV":"$N $vlook at $t and $vgo, 'Fucking d'oh!'","":"$N $vgo, 'Fucking d'oh!'",]),"movierights":(["":"$N $vretire rich after selling the LIMA mudlib movie rights.",]),"etc":(["":"$N $vgo 'etc ...'",]),"pinky":(["":"$N $vask, \"So Brain, What are we going to do tonight?\"",]),"ksl":(["STR":"$N $vksl $o.","":"$N $vksl.",]),"giltest":(["OBJ":"$N $vtest $T",]),"harry":(["":"$N $vnote that every mudlib needs a Harry.",]),"holdhand":(["LIV":"$N $vhold $p1 hand.",]),"404":(["LIV":"$N $vscream in $p1 face, \"404 File Not Found!\"","LIV STR":"$N $vscream in $p1 face, \"404 File Not Found! The requested URL $o was not found on this server!\"",]),"gipper":(["LIV":"$N $vimplore $t to win one for the gipper!","":"$N $vsay, \"That's another one for the gipper!\"",]),"nestle":(["LIV":"$N $vnestle close to $t.",]),"headcrush":(["LIV":"$N $vframe $t with $p thumb and forefinger, and $vcrush $p1 head!",]),"zone":(["":"$N $vzone out.",]),"plead":(["LIV":"$N $vplead with $t.",]),"productive":(["LIV":"$N $vtry to think of something productive for $t to do.","":"$N $vtry to think of something productive to do.",]),"overhead2":(["":"$P hair moves as something passes over $p head.",]),"rofl":(["LIV":"$N $vpoint at $t and $vstart laughing hysterically.","STR":"$N $vroll on the floor whimpering, \"$O... oh jeezus $o..\" and laughing uncontrollably.","":"$N $vroll on the floor laughing.",]),"pudmachine":(["LIV":"$T $v1are a pud pounding machine!","":"$N $vare a pud pounding machine!",]),"pinhead":(["LIV":"$N $vthink that $t $v1are too pointless to even be called a pinhead.",]),"grasp":(["LIV":"$N $vgrasp $t.",]),"grin":(["LIV":"$N $vgrin at $t.","at LIV":"$N $vgrin at $t.","STR":"$N $vgrin $o.","LIV STR":"$N $vgrin $o at $t.","STR LIV":"$N $vgrin $o at $t.","":"$N $vgrin.",]),"nototlw":(["":"$N $vnote that that is NOT the One True Lima Way (*Tm)",]),"release":(["LIV":"$N $vask $n1 what _$p1_ release schedule is.",]),"monster":(["":"$N $vsay: Well, I tamed the boner monster!!! Who wants to pet it?",]),"crappucino":(["":"$N $vgo, \"I need more CRAPPUCINO for my BUNGHOLE!!! AaaaAaaAaAAaAAaahhhh!\"",]),"sheets":(["":"$N $vmumble, \"Look at what you did to my sheets...\"",]),"kinkybog":(["":"$N $vgo, \"Little super fucking kinky sex with heavy machinery bog.\"",]),"bzzt":(["":"$N $vshout, \"Bzzzt, wrong! Try again, dumbass!\"",]),"limabean":(["":"$N $vnote that Lima Bean is the only mud using the Lima lib that is open to the public.",]),"blarg":(["":"$N $vgo blarg.",]),"fondle":(["LIV":"$N $vfondle $t.","LIV STR":"$N $vfondle $p1 $o.","":({"$N $vfondle $r. ","$N $vfondle $r, moaning with pleasure. ",}),]),"dopefish":(["":"$N $vnote that, \"The Dopefish lives!\"",]),"billym":(["LIV":"$N $vsay, \"$tp called the shit 'POOP'!\"","":"$N $vsay, \"He called the shit 'POOP'!\"",]),"dust":(["":"$N $vsay, \"You can't really dust for vomit.\"",]),"remember":(["STR":"$N $vremember when $o.",]),"salute":(["LIV":"$N $vsalute $t, \"Aye Aye, Keptin!\"","STR":"$N $vsalute $o.","":"$N $vsalute.",]),"choparm":(["":"$N $vsay, \"It's just....you should be punished. I'm going to chop off your arm, are you ready?\"",]),"ratbert":(["":"$N the consultant $vproclaim, \"We must identify and eliminate the deviant users of Macintosh, DOS and... God help us... OS/2 Warp.\"",]),"2600":(["":"$N $vsay, \"2600 or bust!\"",]),"hrm":(["LIV":"$N $vhrm at $t.","STR":"$N $vhrm $o.","":"$N $vhrm.",]),"oops":(["":"$N $vgo, \"Oops!\"",]),"carpenter":(["LIV":"$N $vsuggest that $n1 $vgo on the Karen Carpenter diet plan.",]),"nibble":(["LIV":"$N $vnibble $p1 earlobe.","LIV STR":"$N $vnibble $p1 earlobe $o.","":"$N $vnibble the air around $no. How odd!",]),"unstable":(["LIV":"$N $vnote that $p1 connection is looking a tad unstable.",]),"properties":(["STR":"$N $vprove $o are a bad thing, by showing that if you look at them the right way they look like properties.",]),"fries":(["LIV":"$N $vthink $t $v1are a few fries short of a Happy Meal.",]),"2001":(["LIV":"$N $vexclaim, \"My God! $Ts $v1are full of stars!\"","STR":"$N $vexclaim, \"My God! $O is full of stars!\"","":"My god, $n $vare full of stars.",]),"2000":(["":"$N $vsay, \"2000 or bust!!!\"",]),"snap":(["STR":"$N $vsnap $p fingers $o.","":"$N $vsnap $p fingers.",]),"etoh":(["":"$N $vexpound at length about the virtues of EtOH.",]),"klingon":(["LIV":"$N $vwave a blinky, whirly thing over $T and $vsay, \"Heartbeat is all wrong, his body temperature is..Jim, this man is a Klingon!\"",]),"lookforsomething":(["":"$N $vlook around for something to code.",]),"wowo":(["":({"$N go wowowowowowowo","$N goes wowowowowowowowowo",}),]),"dose":(["LIV":"$N $vhit $t with a dose.",]),"hideeho":(["":"$N $vwave 'Hi-dee-ho!'",]),"brb":(["STR":"$N $vhold up one finger and $vsay \"be right back ($o)\"","":"$N $vhold up one finger and $vsay \"be right back\"",]),"hold2":(["LIV":"$N $vhold $p1 hand.",]),"highschool":(["":"$N $vsay, \"That's what I like about high school girls... every year I get older, every year they stay the same age!\"",]),"shame":(["":"$N $vhang $p head in shame.",]),"kapow":(["":"KAPOW!",]),"zot":(["LIV":"$N $vzot $t.","LIV STR":"$N $vzot $t $o.","":"$N $vzot a fly.",]),"myeyes":(["":"$N $vgo, \"My eyes! My eyes!\"",]),"likelima":(["LIV":"$N $vthink $ts would like Lima more and more every day, when it starts turning from a very nice emote based chat system into a game base.","":"$N would like Lima more and more every day, when it starts turning from a very nice, emote based chat system, into a game base.",]),"ffiddle":(["":"$N $vgo, \"Feel Free to fiddle with it.\"",]),"frolick":(["LIV":"$N $vfrolick about with $t.","STR":"$N $vfrolick $o.","":"$N $vfrolick about.",]),"elbow":(["LIV":"$N $velbow $t.","":".",]),"zoo":(["LIV":"$N $vsay, \"Take $tp to the zoo. I hear retards like the zoo.\"","LIV LIV":"$N $vtell $n1, \"Take $n2p to the zoo. I hear retards like the zoo.\"","":"$N $vsay, \"Take her to the zoo. I hear retards like the zoo.\"",]),"sgfhrmleg":(["":"$N $vsupergigafuckinghrmleg.",]),"bejust":(["":"$N $vquote, \"Be Just and Fear not! Be on pot and fear nothing! Be on acid and fear everything! Be on crack and kill everything! Be on XTC and fuck everything! Be on peyote and BE everything!\"",]),"turing":(["LIV":"$N $vdeclare, \"Of course $n1 can! $N1 $v1are a Turing Machine!\"","":"$N $vdeclare, \"Of course it can! It's a Turing Machine!\"",]),"wow":(["":"$N $vgo, \"WOWSERS!\" You hear the Inspector Gadget theme song in the background.",]),"toomanylongemotes":(["":"There are too many long emote names in the Lima Lib's distribution, and $n $vare Not Happy about it.",]),"sfhehleg":(["":"$N $vgo, \"Super-fucking hehleg!\"",]),"sfagreeleg":(["LIV":"$N super-fucking-$vagreeleg with $t!","STR":"$N super-fucking-$vagreeleg $o!","LIV STR":"$N $vsuper-fucking-agreeleg with $t $o!","":"$N super-fucking-$vagreeleg!",]),"butthead":(["STR":"$N $vbutthead: $o",]),"pelt":(["LIV":"$N $vtie $t to a tree and $vpelt $t with small pebbles.",]),"2weiners":(["":"$N $vsay, \"If you had 2 weiners, how many nads would you have?\"",]),"shag":(["LIV":"$N $vshag $t good and rotten, baybee! (yeah!)","":"$N $vgo, \"Shagadelic, baby!\"",]),"coolio":(["":"$N $vgo, \"Coolio!\"",]),"1000000":(["":"$N $vsay \"1,000,000 or bust!!!\"",]),"woo":(["LIV":"$N $vlook at $t and $vgo, \"Woo woo!\"","":"$N $vgo: \"Woo woo!\"",]),"toy":(["":"$N $vtrade in all of LIMA's emotes for toys.",]),"beanhead":(["":"$N $vsay, \"Oh, look! It's Beanhead! AGAIN!\"",]),"wom":(["LIV":"$N $vtell $t \"Damn! Thats great! What's next, Write-Only Memory?!?!\"","":"$N $vdecide to get back to working on $p0 new project: Write Only Memory.",]),"tow":(["LIV":"$N $vtow $t around the room by $p1 ear.",]),"massage":(["LIV":"$N $vmassage $t sensuously.",]),"gogo":(["STR":"$N $vshout, 'Go Go Gadget $O!'",]),"kneel":(["LIV":"$N $vkneel before $t.","":"$N $vkneel on one knee.",]),"tor":(["OBJ":"Tor","STR":"Tor TESTS","":"Tor pats Lazyr on the ass",]),"woe":(["":"$N $vcry, \"Woe is me! Woe!\"",]),"fall":(["":"$N $vobserve it's not the fall that kills you, its that sudden stop at the end..",]),"fakeforce":(["LIV STR":"$N $vforce $t to: \"$O\".",]),"pentagonal":(["":"$N $vnote that it is hip to be pentagonal.",]),"lfboardleg":(["":"$N $vgo, \"Little fucking boardleg...\"",]),"oioi":(["":"$N $vchant OI! OI! OI! OI! !IO (oops) OI! OI! OI! OI!",]),"toe":(["LIV":"$N $vtoe $p1 corpse... \"He's dead, Jim!\"","":"$N $vgo, \"Toe.\"",]),"zakkrox":(["LIV":"$N $vtry to prove that Zakk's rocks are visible to $t, but $vfail miserably.","":"$N $vare compelled to note how little Zakk's rocks are.",]),"not":(["":"$N $vgo, \"Not!!\"",]),"rock":(["LIV":"$N $vsay, \"$Tp, you ROCK!\"","STR":"$N $vexpress $p opinion that $o rocks the mud.","":"$N $vsay 'ROCK and ROLL!'",]),"handspring":(["":"$N $vbounce around and $vdo handsprings to stay awake.",]),"router":(["STR":"$N $vblame $o's router for $p shitty link.","":"$N $vwonder whose router died this time.",]),"overshareon":(["":"The overshare light is: [ON] off.",]),"spasm":(["":"$N $vspasm spasmodically.",]),"creed":(["":"$N $vrecite the creed: MUD before all else!",]),"belch":(["LIV":"$N $vbelch in $p1 face!","STR":"$N $vbelch $o.","":"$N $vbelch.",]),"ftpbye":(["":"221 Goodbye.",]),"brainfart":(["":"$N brain $vfart.",]),"polygon":(["LIV":"$N $vnote that $t $v1are a few points short of a polygon.","":"$N $vare a few points short of a polygon.",]),"mvemote":(["":"$N $vjust tried to 'move' an emote... Heh.",]),"nog":(["LIV":"$N $vgive $t a good hard nog.","STR":"$N $vnod nog nog $o $o.","":"$N $vnod nog nog nog nog.",]),"nof":(["LIV":"$N $vnof at $t, just like Bobbo would.","":"$N $vnof just like Bobbo.",]),"nipplesuck":([]),"nod":(["LIV":"$N $vnod at $t.","at LIV":"=LIV","STR":"$N $vnod $o.","LIV STR":"$N $vnod at $t $o.","":"$N $vnod.",]),"how":(["":"Gamedriver $vtell $n, \"How you do it is up to you...just so long as it works.\"",]),"ucool":(["":"$N $vdecide that that is unsurpassedly cool.",]),"iddqd":(["":"$N $vtype, 'iddqd'. \"Degreelessness Mode On.\"",]),"lapdance":(["LIV":"$N $vsit on $t's lap and $vdo a little dance on it! (woo!)",]),"nottmi":(["":"$N $vapologize for $p lack of understanding, and $vblame it on overexposure to TMI.",]),"oink":(["":"$N $voink.",]),"hop":(["LIV":"$N $vhop around $t.","STR":"$N $vhop $o.","":"$N $vhop.",]),"forgive":(["LIV":"$N $vforgive $t graciously.",]),"hoo":(["":"$N $vgo: \"Hoo hoo!\"",]),"alibi":(["LIV":"$N $vsing to $t, \"U-G-L-Y, you ain't got no alibi, you UGLY! Your mama said you're ugly, huh!\"",]),"shake":(["LIV":"$N $vshake $p head at $t.","OBJ":"$N $vshake $o.","STR at LIV":"=STR LIV","STR":"$N $vshake $p $o.","STR LIV":"$N $vshake $p $o at $t.","":"$N $vshake $p head.",]),"kingkong":(["LIV":"$N $vbeat $p chest and $vmoan like an animal, trying to impress $t.","":({"You beat your chest and moan like the animal you are!","$N beats $p chest and moans like an animal.",}),]),"drool":(["LIV":"$N $vdrool all over $t. What a drooling geek!","STR":"$N $vdrool $o.","":"$N $vdrool, trailing tendrils of spit in $p wake.",]),"fgrep":(["":"$N $vgo, \"Fucking Grep.\"",]),"newbiealert":(["":"$N $vcry, \"Newbie! Newbie! Run for your lives! Idle if you must!\"",]),"5th":(["":"$N $vtake the 5th.",]),"worshipbuddha":(["":"$N $vgrovel at the feet of Buddha.",]),"lfcrashleg":(["":"$N $vboggle at the little fucking crashleg.",]),"chanfake":(["WRD WRD STR":"%^CHANNEL%^[$o0]%^RESET%^ $O1: $o2",]),"box":(["":"$N $vthink $n $vneed a bigger box.",]),"bow":(["STR to LIV":"=STR LIV","LIV":"$N $vbow to $t.","STR":"$N $vbow $o.","STR LIV":"$N $vbow $o to $t.","":"$N $vbow.",]),"frownleg":(["LIV":"$N $vflash a pitiful frownleg to $t.","":"$N $vfrownleg.",]),"toepenis":(["LIV":"$N $vtoe $p1 penis... \"It's limp, Jim!\"","LIV LIV":"$t $v1toe $p2 penis... \"It's limp, Jim!\"",]),"daddy":(["LIV":"$N $vgo to $t, \"Awww! Daddy doesn't understand me... Awww!!\"","":"$N $vgo, \"Awww! Daddy doesn't understand me... Aww!!\"",]),"cobol":(["":"COBOL: The language that can be replaced by a good CASE program.",]),"sarcasm":(["":"$N $vdrip with sarcasm.",]),"bop":(["LIV":"$N $vbop $t on the nose.","STR":"$N $vbop $o.","LIV STR":"$N $vbop $t $o.","":"$N $vbop.",]),"boo":(["LIV":"$N $vboo $t.","LIV STR":"$N $vboo $t $o.","":"$N $vhiss and $vboo!",]),"drunk":(["LIV":"$N $vtell $t, \"I'm not as think as you drunk I am.\"","":"$N $vgo, \"I'm not as think as you drunk I am...\"",]),"zoit":(["":"$N $vzoit.",]),"bok":(["":"$N $vflap $p arms and $vgo, \"Bok bok!\"",]),"blank":(["":"This emote intentionally left blank.",]),"wanker":(["LIV":"$N $vcall $t a bloody wanker.","":"$N $vfeel like a bloody wanker.",]),"shriek":(["LIV":"$N $vshriek \"Eeeeeeeeekk!\" excitedly at $t.","STR":"$N $vshriek $o.","":"$N $vshriek.",]),"bog":(["LIV":"$N $vbog at $t.","":"$N $vgo, \"Bog.\"",]),"genuflect":(["LIV":"$N $vgenuflects towards $O.",]),"gwiiis":(["":"$N $vgo 'Ach du Lieber! Mein GWIIIS ist geveckgeschprungen! Hilfe Hilfe! Rufen sie bitte den Luftwaffe an!'",]),"tackle":(["LIV":"$N $vtackle $t!",]),"tmi":(["":"$N $vsay, \"I did my time @TMI-2.\"",]),"way2go":(["LIV":"$N $vsay to $t, \"Way to go, Idaho!\"","":"$N $vsay, \"Way to go, Idaho!\"",]),"beavis3":(["":"$N $vproclaim, \"The streets will flow with the blood of nonbelievers!\"",]),"beavis2":(["STR":"$N $vdo $p best Beavis impression: $o","":"$N $vgo, \"I am the great Cornholio! I need TP for my bunghole!\"",]),"roar":(["":"$N $vgive out a mighty ROAR.",]),"silence":(["":"$N $vsay, \"Could we please have a moment of silence for my boner?\"",]),"truth":(["LIV":"$N $vgrab $t by the collar, $vlook $n1o in the eye and $vsay: You can't handle the truth!","":"$N $vrun around the room and $vscream in $p0 best Jack Nicholson voice: You can't handle the truth!",]),"tigranisdense":(["":"$N $vnote that Tigran is even more dense than the real numbers.",]),"nodlegxx":(["LIV":"$N $vdo a super dupper joint rupturing nodleg at $t.","STR":"$N $vdo a super dupper joint rupturing nodleg $o.","":"$N $vdo a super dupper joint rupturing $vnodleg.",]),"miracle":(["LIV":"$N $vfear that God couldn't miracle $p1 ass over that obstacle.",]),"consider":(["STR":"$N $vconsider $o.",]),"sfoow":(["":"$N $vgo, \"!ooW gnikcuf-repuS\"",]),"hrmaleg":(["":"$N hrm-a-$vleg.",]),"testplurals":(["":"$N $vpenis $vclitoris $voctopus $vplatypus $vemily.",]),"heaven":(["":"$N $vclaim that it is better to reign in hell than to serve Heaven 7.",]),"nmf":(["":"$N $vmutter \"It's not my fault . .\" In a Han Solo-like way . . .",]),"meth":(["LIV":"$N $vmeth $t.",]),"fail":(["STR":"$N $vtry to $o, but $vfail miserably.",]),"revision":(["LIV":"$N $vindicate that $t $v1are a few revisions behind.",]),"snicker":(["LIV":"$N $vsnicker at $t.","STR":"$N $vsnicker $o.","LIV STR":"$N $vsnicker at $t $o.","":"$N $vsnicker.",]),"blame":(["LIV":"$N $vblame $t.","STR":"$N $vblame $o.","":"$N $vspread the blame around like a fine French cheese.",]),"aeiouyeaoeaa":(["OBJ":"Wowels",]),"hmm":(["LIV":"$N $vhmm at $t.","":"$N $vhmm. ",]),"usetheforce":(["LIV":"$N $vurge, \"Use the force, $tp!\"",]),"jesus":(["":"$N $vsay, \"Stop me if you've heard this one... Jesus walks into an inn... He hands the innkeeper three nails... and asks, 'Can you put me up for the night?'\"",]),"shields":(["":"*BOOM!!* $N $vshout, \"We're hit! We're HIT! Shields are down! They're coming around....NNNOOOOOOooooooo.....\"",]),"justified":(["":"$N $vintone: \"Arrogance is justified.\"",]),"eatme":(["LIV":"$N $vcomplain to $n1 about the bloody soul and its phantom reflexivity.",]),"canhead":(["LIV":"$N $vcrush a beer can on $p1 forehead.","":"$N $vcrush a beer can on $p forehead.",]),"stackshit":(["LIV":"$N $vask $t, \"How tall are you, private?\" and $n1 $v1respond, \"Sir, five-foot-nine, sir!\". $N $vscream at $t, \"Five-foot-nine? I didn't know they stacked shit that high!\"",]),"mouth":(["LIV":"$N $vannounce, \"There's a party in $Tp's mouth; everybody's coming!\"",]),"laughleg":(["STR":"$N $vlaughleg $o.","":"$N $vlaughleg.",]),"mess":(["LIV LIV":"$N $vwarn $t1 not to mess with $t12 or $n will whip $p1 sorry ho ass back to last year.",]),"geekhumor":(["":"$N $vspot signs of a pending eruption of geek humor, and $vinch towards the door.",]),"burp2":(["STR":"$N $o $vburp.",]),"guilty":(["":"$N $vlook guilty.",]),"love":(["LIV":"$N $vlove $t.",]),"dont":(["LIV":"$N $vtell $t, \"Don't make me kick your ass!\"","":"$N $vpretend $n didn't hear that and $vturn with a decidely \"Don't look at me!\" attitude.",]),"francis":(["LIV":"If $n1 $v1call $n0 \"Francis\", $n0 will kill $t.","":"If any homos here calls $n \"Francis\", $n will kill them.",]),"badfuck":(["LIV":"$N $vfuck $t hard from behind. It wasn't worth $p0 time.",]),"tittyfuck":(["LIV":"$N $vdeclare to $t, \"3y3 4/\\/\\ g01ng 2 +1++y phuc|< j00, b1+ch!\"",]),"limahshake":(["LIV":"$N $vgreet $t with the secret LIMA handshake.",]),"scared":(["":"$N $vare scared o' THAT!",]),"musashileg":(["STR":"$N $vmusashileg $o.","":"$N $vmusashileg.",]),"bmf":(["LIV":"$N $vshow $p wallet to $t. $Ts $v1gasp as $ts $v1notice it says, \"Bad Mother Fucker\" on it!","":"$N $vhave a wallet that says, \"Bad Mother Fucker\" on it.",]),"emotesong":(["STR":"$N $vsing, \"$O silly emotes in the soul, $o silly emotes. Add one more, use it just once ...\"",]),"mapping":(["":"$N $vhold up a sign that says, \"pointerp(mapping) should be true, too!\"",]),"hls":(["":"$N $vnote: \"Rod, Reel, Arm, Boat. That's further than most people go when taking bait.\"",]),"whirl":(["STR":"$N $vwhirl $o.","":"$N $vwhirl.",]),"clinton":(["":"$N $vlie under oath, under the Oval Office desk, under the intern, under 65% approval (but only just)...",]),"word":(["":"$N $vtry to start up Word for Windoze, and $vsucceed miserably.",]),"cheech1":(["":"$N $vgo, \"da da dah dah da dah... my scaaarodem...\"",]),"aspirin":(["LIV":({"$N $vgive $t an aspirin.","$N solemnly $vpush an aspirin to $t with $p0 toy ambulance.","$N kindly $vpass $t an aspirin with $p0 toy ambulance.",}),]),"bingle":(["LIV":"$N $vbingle at $t.","STR":"$N $vbingle $o.","":"$N $vbingle.",]),"elm":(["":"$N $vtry to start up elm, but $vfail miserably.",]),"fork2":(["":"$N $vnote that if you come to a fork in the road, take it.",]),"water":(["":"$N $vdo a little dance and then $n $vdrink a little water.",]),"mouse":(["LIV":"$N $vwonder if even a two button mouse gives $t too many options.",]),"sfidle":(["LIV":"$N $vdeclare that $n1 $v1are super fucking idle!",]),"lmvnm":(["":"$N $vinsist that Lima is less filling than Nightmare.",]),"rubberglue":(["LIV":"$N $vpoint out that $n $vare rubber, and $t1s $v1are glue ...",]),"weenie":(["LIV":"$N $vaccuse $t of being a weenie.","":"$N $vadmit to being a weenie.",]),"novice":(["LIV":"$N $vthink that $t is a total fucking novice.","":"$N is a total novice.",]),"bounceleg":(["LIV":"$N $vbounceleg $t on $p knee.",]),"schmuck":(["LIV":"$N $vgo \"$T, you schmuck!!!\"","":"$N $vgo \"You schmuck!!!\"",]),"pantscrap":(["":"Ooops, $n crapped $p pants.",]),"bla":(["":"$N $vgo, \"Bla bla blub!\"",]),"moose":(["LIV":"$N $vwhack $t over the head with a stuffed animal, yelling 'MOOSE!'",]),"pinch":(["LIV":"$N $vpinch $p1 butt.",]),"pollute":(["LIV":"$N $vtell $t to \"give a hoot, don't pollute!\"","":"$N $vpollute Lima with yet another lame emote.",]),"zip":(["LIV":"$N $vzip around $t.","":"$N $vzip around the room.",]),"mourn":(["LIV":"$N $vexpress $p grief at $p1 loss.","STR":"$N $vmourn for $o.","":"$N $vmourn.",]),"refer":(["STR":"$N $vrefer to the \"$o\" emote.","LIV STR":"$N $vrefer $t to the \"$o\" emote.",]),"beavis":(["LIV":"$N $vsay to $t, \"Settle down Beavis!\"",]),"spank":(["LIV":"$N $vgive $t a good spanking!","":"$N $vneed a good spanking.",]),"dolt":(["LIV":"$N $vthink it's quite obvious that $t $v1are a dolt.","":"$N $vfeel like a dolt.",]),"win":(["":({"If only it were that easy ...","$N $vtry to win the game the easy way.",}),]),"gibb":(["LIV":"$T $v1ride $p rocket.",]),"flush":(["STR":"$N $vflush $o down the nearest toilet.",]),"grab":(["LIV":"$N $vgrab $t.",]),"tip":(["LIV":"$N $vgive a stylish tip of $p hat to $t.","":"$N $vgive a stylish tip of $p hat.",]),"scowl":(["LIV":"$N $vscowl at $t.",]),"lower":(["LIV":"$N $vlower $p1 eyebrow.","":"$N $vlower an eyebrow.",]),"phew":(["":"$N $vgo, \"PHEW!!\"",]),"tie":(["LIV":"$N $vtie $t up.",]),"ignoreme":(["":"$N $vwhisper, \"Ignore me...I'm just being silly.\"",]),"piece":(["LIV":"$N $vshout at $t, \"You want a piece o' this?!\"","":"$N $vshout, \"You want a piece o' this?!\"",]),"headfuck":(["LIV":"$N $vfuck $t in the head, and $ts thought $ts saw $n10o coming.",]),"unclefucka2":([]),"whoop":(["LIV":"$N $vshout: WHOOP!! ( $Ts $v1have got it goin' on! )","STR":"$N $vshout: WHOOP!! ( $o )",]),"why":(["":"Gamedriver $vtell $n, \"Why the hell not?! Let's shutdown...\"",]),"python":(["":"$N $vwhip out $p python! Guido would be ashamed!",]),"beta":(["":"$N $vshout, \"BETA or BUST!!!\"",]),"peer":(["LIV":"$N $vpeer at $t.","STR":"$N $vpeer around the room $o.","LIV STR":"$N $vpeer at $t $o.","":"$N $vpeer around the room.",]),"woot":(["":"$N $vgo 'Woot! Woot!'",]),"orgy":(["LIV LIV WRD WRD STR":"$N $vput $p1 $o0 into $p2 $o1 while performing $o2.",]),"vibrators":(["":"Vibrators - the best thing to happen to women since other women.",]),"watch":(["STR":"$N $vglance at $p watch, and $vsay, \"$o\"","":"$N $vglance at $p watch.",]),"woop":(["":"$N $vyell, \"Woop!\"",]),"descartes":(["":"$N $vwonder if ANYONE learned ANYTHING from the infamous \"Descartes\" emote...",]),"hit":(["LIV OBJ":"$N $vhit $t over the head with a $o.",]),"earfuck":(["LIV":"$N $vfuck $t in the ear, and $ts heard $n10o coming.",]),"wha":(["":"$N $vask, \"Wha??\"",]),"mgrin":(["LIV":"$N $vgrin mischeviously at $t.","":"$N $vgrin mischievously.",]),"fsck":(["LIV":"$N $vscream, \"fsck you!\" to $t.",]),"naming":(["":"$N $vfear a naming scheme for emotes.",]),"snort":(["LIV":"$N $vsnort at $t.","STR":"$N $vsnort $o.","":"$N $vsnort.",]),"meow":(["STR":"$N $vmeow $o.","":"$N $vmeow.",]),"hic":(["":"$N $vgo, \"HIC!\"",]),"debug":(["LIV":"$N $vlean over and $vsquash a bug in $p1 code.","":"$N $vsquash a pesky bug in $p code.",]),"punchmeat":(["":"$N $vget arrested by the FDA for using slabs of beef as punching bags.",]),"zakkfix":(["":"$N $vnote that this is so easy Zakk might learn how to fix it soon.",]),"idlemud":(["":"$N $vproclaim, \"Welcome to IdleMUD[TM]: A Multi-Player Idling Simulation.\"",]),"lord":(["STR":"$N $vgo, \"Oh, dear lord! $O.\"","":"$N $vgo, \"Oh, dear lord!\"",]),"flirt":(["LIV":"$N $vflirt with $t.","STR LIV":"$N $vflirt $o $t.",]),"gaydog":(["LIV":"$N $vnote that $p1 dog is a gay homosexual.","":"$N $vtell $p dog, \"Sit, Sparky! Good boy. Now, shake! Good boy. Now, don't be gay! Don't be gay, Spark! Don't be gay!\"",]),"bip":(["":"$N $vgo, 'bip'.",]),"snore":(["LIV":"$Ts $v1go on and on and on about something, and soon $n $vare snoring.","LIV LIV":"Both $t1 and $t2 go on and on and on and on about something, and soon $n $vare snoring.","OBJ":"$N $vsnore at $o.","STR":"$N $vsnore $o.","STR LIV":"$Ts $v1go on and on and on about $o, and soon $n $vare snoring.","":"$N $vfall asleep at the keyboard.",]),"monologue2":(["LIV":"$N $vlaunch into a long, boring monologue until someone does or says something...",]),"emacs":(["LIV":"$N $vthink $ts should learn emacs.","STR":"$N $vtry to start up emacs, but $vfail miserably.","":"$N $vtry to start up emacs, but $vfail miserably.",]),"etfc":(["":"$N $vscream, \"ET FUCKING CETERA!!!\"",]),"upyerear":(["LIV":"$N $vtell $t, \"Up your ear with a can of beer!\"",]),"spam3":(["":"$N $vdeclare that spam is an acronym, standing for spiced pork and ham.",]),"phuck":(["LIV":"$N $vgo, \"Phuck $t!\"","STR":"$N $vgo, \"Phuck $o!\"","LIV STR":"$N $vgo, \"Phuck $t, $o!\"","":"$N $vgo, \"Phuck Phish!\"",]),"spam2":(["LIV":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with $t.","STR":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with $o.","":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with it.",]),"recycle":(["":"$N $vrefuse to pollute the mud with original thoughts when $n $vhave thousands of emotes to recycle.",]),"lkiss":(["LIV":"$N $vpress $p lips to $p1 in a gentle, lingering kiss.",]),"mbog":(["":"$N $vgo, \"Minor Bog.\"",]),"bigbottom2":(["":"$N $vnote, \"The looser the waist-band, the deeper the quicksand, or so I have read!\"",]),"nudge":(["LIV":"$N $vnudge $t.","STR":"$N $vnudge $o.","LIV STR":"$N $vnudge $t $o.","":"$N $vnudge.",]),"whine":(["LIV":"$N $vwhine annoyingly at $t.","STR":"$N $vwhine $o.","":"$N $vwhine.",]),"tself":(["":"Talking to yourself is a sign of impending mental collapse.",]),"flutter":(["LIV":"$N $vflutter $p eyelashes at $t.","":"$N $vflutter $p eyelashes.",]),"sfeared":(["":"$N $vgo, \"Sorta feared.\"",]),"boardchange":(["LIV STR":"Board changes $t to group <$o>.",]),"sgfibfbog":(["":"$N $vgo, \"Super Giga Fucking 'I've been forced' Bog!\"",]),"wfw":(["":"$N $vgo, \"Woo Fucking Woo!\"",]),"nodlegx":(["LIV":"$N $vdo a extreme $vnodleg at $t.","STR":"$N $vdo an extreme $vnodleg at $t.",]),"woo2":(["LIV":"$N $vwoo $n1 with roses, wine, music and moonlight.",]),"english":(["LIV":"$N $vsay to $t, \"English, motherfucker... do you speak it?\"",]),"wink":(["LIV":"$N $vwink at $t.","STR":"$N $vwink $o.","":"$N $vwink.",]),"whome":(["":"$N $vgo, \"Who... me??\"",]),"inside":(["":"$N $vnote that the soul database is at 2243 inside jokes, and growing.",]),"relax":(["":"$N $vrelax in $p easy chair.",]),"mnms":(["":"$N $vsay, \"I think I'm gonna get me some M&Ms and spank my monkey.\"",]),"moron":(["LIV":"$Ts $v1show $p1 certificate proving that $ts $v1are a certified Moron [tm].","":"$N $vshow $p certificate proving that $n $vare a certified Moron [tm].",]),"morons":(["":"$N $vshout, \"I'M SURROUNDED BY MORONS!\"",]),"hi5":(["LIV":"$N $vjump in the air and $vgive $t a high-five!",]),"peck":(["LIV":"$N $vpeck $t on the head, crying out: \"Ha hahaha ha!\".",]),"handshake":(["LIV":"$N $vshake $p1 hand.",]),"eyefuck":(["LIV":"$N $vfuck $t in the eye, and $ts saw $n10o coming.",]),"console":(["LIV":"$N $vconsole $T.",]),"disco":(["":"$N $vdo the disco duck!",]),"laddemote":(["":"$N $vlove addemote.",]),"spleen":(["":"$N $vgo, \"Spleen.\"",]),"wavefn":(["LIV":"$N $vwavefingernail to $t.",]),"cane":(["LIV":"$N $vhand $p1 cane to $t.","":"$N $vfetch $p cane.",]),"face":(["LIV":"$N $vsay to $t, \"Sit on my interface, bitch!!!\"","":"$N $vgo, \"Sit on my interface!!\"",]),"doors":(["":"$N $vsing: Before I sink...into the big sleep...I want to hear...I want to hear...the scream....of the butterfly...",]),"scruffylooking":(["":"$N $vexclaim, \"Who's scruffy looking!?\"",]),"brains":(["LIV":"$T $v1need brains badly. $Ts $v1are about to die!",]),"nfw":(["LIV":"$N $vtell $t, \"No fucking way, fartknocker!\"","":"$N $vgo, \"No fucking way, fartknocker!\"",]),"madlib":(["LIV LIV WRD WRD WRD WRD":"$N1s $v1relate a long $o about the beginnings of the $o1 mudlib, and $v1conclude by showing all the $o2 language in the $o3 was $p2 fault.",]),"blah2":(["":"$N $vgo, \"Blah, blah, bog, blah, blah!\"",]),"faith":(["LIV":"$N $vfind $p1 lack of faith disturbing.","":"$N $vsay, \"I find your lack of faith disturbing.\"",]),"cower":(["LIV":"$N $vcower before $t.","STR":"$N $vcower $o.","":"$N $vcower in fear.",]),"hgb":([]),"wet":(["LIV":"$N $vtry to discretely pour some water down $p1 leg, to make it look like $ts wet $p1 pants.","":({"You wet your pants. ","$N $vlook around hoping that noone notices $n wet $p pants. ",}),]),"nfm":(["LIV":"$N $vshout at $t, \"NO FUCKING MORE!!!\"","":"$N $vgo, \"NO FUCKING MORE!!!\"",]),"affront":(["LIV":"$N says 'That is an affront to my sensibilities!'","":"$N $vsay 'That is an affront to my sensibilities!'",]),"egg":(["LIV":"$N $vlaugh wickedly, while lobbing raw eggs at $t! Bwahahahahah!","LIV STR":"$N $vlaugh $o, while lobbing raw eggs at $t! Bwahahahahaha!",]),"nfi":(["":"$N $vmutter \"No Fucking Idea!\"",]),"tex":(["":"$N $vnote that TeX is turing complete.",]),"kamel":(["":"$N $vspark up a %^B_ORANGE%^ %^RESET%^%^B_WHITE%^ %^RED%^KAMEL %^RESET%^%^B_RED%^ %^RESET%^",]),"lips":(["LIV":"$N $vsay to $tp, \"Your lips are like two sweet twizzlers coated with penis-butter.\"","":"As $n $vtalk, $p lips form different words from those you hear. You realize $p lines have been dubbed!",]),"soulcopying":(["":"$N $vnote that the LIMA mudlib may be the first mudlib which has had more emotes borrowed from it than code.",]),"nfc":(["LIV":"$N $vinform $t, \"No Fucking Clue.\"","":"$N $vsay, \"No Fucking Clue\"",]),"teh":(["":"$N $vgo: \"Teh.\" (kinda like \"Feh\" but more interesting)",]),"ramsey":(["LIV":"$N $vpoint out that of ALL the people on Lima Bean, $n1 $v1have neither three mutual friends nor three mutual strangers!",]),"mygod":(["LIV":"$N $vexclaim, \"My God, $tp, what have you done??\"","":"$N $vexclaim, \"My God, what have I done??\"",]),"katt":(["":"$N $vsing: 'And the Katt came back...'",]),"nail":(["LIV":"$N $vnail $p1 head to the floor.",]),"yourmom":(["LIV":"$N $vtell $t, \"Your mom was good last night!\"","STR":"$N $vtell $o, \"Your mom was good last night!\"",]),"melt":(["LIV":"$N $vmelt into $p1 arms.","":"$N $vmelt in a puddle of water.",]),"key":(["STR":"$N $vgo, \"Ahh... yes. The $o is key.\"",]),"drift":(["STR":"$N $vdrift away $o.","":"$N $vdrift away.",]),"ket":(["LIV":"$N $vnote that $t $v1are hot upstairs and cold downstairs, just like Ket.","":"$N $vnote that it's hot upstairs and cold downstairs. Just like Ket.",]),"troll":(["":"$N $vwait under $p bridge for billy goats gruff to cross.",]),"hey":(["":"$N $vgo, \"HEY, HEY, HEY!!\"",]),"calm":(["LIV":"$N $vtry to get $t to calm down.","":({"You feel like you are in the eye of a hurricane. ","$N $vlook reasonably calm for a change. ",}),]),"bfg":(["":"You hear the sick, spine-tingling sound of a BFG-9000 being fired at your back...",]),"trousers":(["LIV":"$N $vsay to $t, \"We have Armadillos in our trousers.\"","":"$N $vnote, \"We have Armadillos in our trousers.\"",]),"ouch":(["":"$N $vexclaim, 'Ouch!'",]),"bfd":(["LIV":"$N $vscream at $t, \"Big fuckin' deal!\"","":"$N $vgo, \"Big fuckin' deal!\"",]),"sensitive":(["LIV":"$N $vtell $t, \"Fuck you, I'm sensitive!\"",]),"usedonce":(["":"$N $vwonder what fraction of the Lima emotes have only ever been used once.",]),"nadgrab":(["LIV":"$N $vgrab $p1 balls and $vsay, \"Live long and prosper.\"",]),"tdc":(["":"$N $vnote that that is Too Damn Cool [tm].",]),"fence":(["LIV":"$N $vadvise $t not to wiz on the electric fence.","":"$N $vtake a wiz on the electric fence. Zzzzzzzzap!",]),"heh":(["LIV":"$N $vlook at $t and $vgo, \"Heh.\"","STR":"$N $vgo: \"Heh, $o.\"","":"$N $vgo, \"Heh.\"",]),"eep":(["":"$N $vgo Eep!",]),"hee":(["":"$N $vgo: \"Hee hee!\"",]),"doh2":(["":" __&__ / \\ | | | (o)(o) C .---_) | |.___| DOH!! | \\__/ /_____\\ /_____/ \\ / \\ ",]),"ckiss":(["LIV":"$N $vkiss $t on the cheek.",]),"fwaveleg":(["LIV":"$N fucking $vwaveleg to $t.","":"$N fucking $vwaveleg.",]),"different":(["LIV":"Today, just to be different, $t $v1are a King Kamaya Maya bitch!",]),"eek":(["":"$N $vgo, \"Eek!!\"",]),"shwing":(["":"$N $vgo, \"Shhhhwing!!!\"",]),"heaven7":(["":"$N $vask innocently \"what's wrong with the Heaven 7 mudlib, anyway?\"",]),"trying":(["":"$N $vnote that trying is the first step to failure.",]),"replaced":(["":"$N $vscream, \"Ah! Everything here has been replaced with an EXACT REPLICA!\"",]),"montoya":(["LIV":"$N $vgrowl to $t, \"I am Inigo Montoya. You killed my father. Prepare to die.\"","":"$N $vrecite, \"I am Inigo Montoya. You killed my father. Prepare to die.\"",]),"lint":(["LIV":"$N $vsort through $p pockets and $vfind nothing but lint.","":"$N $vsort through $p pockets and $vfind nothing but lint.",]),"chuckle":(["LIV":"$N $vchuckle at $t.","STR":"$N $vchuckle $o.","LIV STR":"$N $vchuckle at $t $o.","":"$N $vchuckle.",]),"puzzle":(["STR":"$N $vpuzzle $o.","":"$N $vpuzzle.",]),"perl3":(["":"For a moment, $n confused some perl code with line noise.",]),"beg":(["LIV":"$N $vbeg $t.","LIV STR":"$N $vbeg $t $o.","":"$N $vbeg like a smack addict who's gone a week without a fix.",]),"perl2":(["":"$N $vnote that Perl is such an obnoxious odious language compared to Python.",]),"caffeine":(["":"$N $vdeclare that caffeine is a poor substitute for cocaine.",]),"acro":(["":"$N $vgo to play Acro. Three weeks later, $n $vemerge rubbing $p eyes and saying, \"What Day Is.it?\"",]),"bee":(["":"$N $vturn into a bee and $vbuzz off.",]),"blade":(["":"$N $vsay, \"There's worse things out tonight than vampires... There's me!!!\"",]),"legandleg":(["LIV":"$N $vleg and $vleg at $t.","":"$N $vleg and $vleg and $vleg until $n can leg no more.",]),"countable":(["LIV":"$N $vnote that not only is the cardinality of the set of $p1 brain cells countable, you only need to be able to count up to 0!",]),"iiyf":(["":"$N $vgo, \"Inheritance is your friend.\"",]),"shrugarm":(["STR":"$N $vshrugarm $o.","":"$N $vshrugarm.",]),"kennysnotdead":(["":"$N $vexclaim, \"Oh my god! They DIDN'T kill Kenny! The Bastards!!\"",]),"zipper":(["LIV":"$N discreetly $vinform $t that $p1 zipper is down.",]),"pea3":(["LIV":"$N deftly $vcatch the peas, flash $vfreeze them, and $vslingshot them back off $p1 forehead!",]),"pea2":(["LIV":"$N $vthrow peas at $p1 face since $n can't get them into $p1 mouth.",]),"coke2":(["LIV":"$N advise $t, \"Have a coke and a smile and shut the fuck up!\"","":"$N $vdecide to have a Coke and a smile.",]),"thisparticularemotewasaddedjusttopissoharaoff":(["":"$N $vnote that this particular emote was added just to piss Ohara off.",]),"bend":(["LIV":"$N $vbend over and $vwait to take it up the ass from $t.","LIV LIV":"$N1 $v1bend over and eagerly $v1await to take it up the ass from $n2.","STR":"$N $vbend over and eagerly $vawait to take it up the ass from $o.","LIV STR":"$N1 $v1bend over and eagerly $vawait to take it up the ass from $o.","":"$N $vbend over and $vwait to take it up the ass.",]),"smirkpwd":(["":"$N $vsmirkpwd (It tells you where you are when you smirkls)",]),"amachine":(["":"$N $vare not at $p keyboard right now; please leave a message at the sound of the tone. ... BEEP",]),"particle":(["":"$N $vparticle.",]),"toty":(["LIV":"And the typo of the year award goes to ... $T!",]),"godrest":(["LIV":"$N $vwonder, \"On which day did God create $tp, and couldn't he have rested on that day too?\"",]),"totw":(["":"$N $vnote that Hiccups is not a follower of the One True Way [tm].",]),"grade":(["":"$N $vthink $n might be related to the energizer bunny because $n $vare still grading, and grading, and grading...",]),"dicksoap":(["":"$N $vgo, \"It's MY dick and MY soap, I'll wash it as hard and as fast as I want to!\"",]),"black":(["LIV":"$N $vask $t, \"The question is, how much more black can it get?\"",]),"pepper":(["LIV":"$N $vask $T, \"Wouldn't you like to be a Pepper too?\"","":"$N $vask, \"Wouldn't you like to be a Pepper too?\"",]),"linux":(["":"$N $vgo, \"Linux: The Choice of a GNU Generation.\"",]),"hfive":(["LIV":"$N $vjump up in the air and $vgive $t a high-five!","":"$N $vjump up in the air and $vswish a high-five! $N $vfall flat on $p face.",]),"limacrash":(["LIV":"$N $vgive $t an \"I Crashed Lima Bean\" t-shirt.","":"$N proudly $vwear $p \"I Crashed Lima Bean\" t-shirt.",]),"dumbemote":(["STR":"$N $vnote how dumb the \"$o\" emote is.",]),"confess":(["":".",]),"borland":(["LIV":"$N $vaccuse $t of working at Borland and causing all the bugs...","":"$N $vblame Borland for all the bugs...",]),"sfleg":(["LIV":"$N $vgo to $t, \"Super Fucking Leg!!!\"","STR":"$N $vgo, \"Super Fucking Leg!!! $O!!!\"","":"$N $vgo, \"Super Fucking Leg!!!\"",]),"mirthmobile":(["LIV":"$N $vjump in the Mirth Mobile with $t and $vdrive away!","":"$N $vjump in the Mirth Mobile and $vdrive away!",]),"wat":(["LIV":"$N $vpoint at $t and $vsay, \"What a twit!\"","":"$N $vsay, \"What a twit!\"",]),"war":(["":"$N $vexpound on all the Rules and Regulations of the Deathblade vs Zakk Eternal War.",]),"sgvlbog":(["":"$N $vgo, \"Super Giga Very Little Bog!\" (the ultimate in oxymorons)",]),"iowe":(["":"$N $vsing, \"I owe! I owe! It's off to work I go!\"",]),"wap":(["LIV":"$N $vWAP $t.",]),"according":(["STR":"According to the soul_d, $o.","":"According to the soul_d, there are Too Many Damn Emotes.",]),"smother":(["LIV":"$N $vsmother $t with passionate kisses.","OBJ":"$N smother $t with passionate kisses.",]),"rfeared":(["":"$N $vgo, \"Rather feared.\"",]),"bbiam":(["":"$N will be back in a minute.",]),"normality":(["":"$N $vnote, \"We have normality, anything you still can't deal with is your problem.\"",]),"wah":(["LIV":"$N $vcry at $t like a big baby 'WAAAAAAAAAAAAAAAAAAAAAAAAAAAAH!!!!!'.","":"$N $vcry like a big baby 'WAAAAAAAAAAAAAAAAAAAAAAAAAAAAH!!!!!'.",]),"qc3":(["":"$N $vnote that there was a qc, a qc2, and this qc3 social, but no qc1 social, and $vwonder if it was deliberate or not.",]),"qc2":(["":"$N $vremember that there _is_ no quality control.....",]),"tap":(["LIV":"$N $vtap $p foot, waiting for $t.","STR":"$N $vtap $p foot $o.","":"$N $vtap $p foot.",]),"luke":(["":"$N $vwhine, \"But I was gonna go to the Tashi station to pick up some power converters!\"",]),"zoomer":(["LIV":"$N $vindicate that $ts $v1are a complete zoomer.",]),"alcohol2":(["":"$N $vnote that alcohol doesn't give you caffiene headaches.",]),"bbiab":(["":"$N $vmutter something about how $n'll be \"be back in a bit.\" Nobody cares.",]),"snuke":(["LIV":({"$N $vsnuke $t. ","$N $vsnuke $t. $Ts $v1wonder what 'snuking' is. ",}),"STR":"$N $vsnuke $o.","":"$N $vsnuke.",]),"goatsblow":(["LIV":"$N $vhold up a sign, reading: 'Goats blow $tp. I have proof.'",]),"pquest":([]),"noggle":(["LIV":"$N $vnoggle hard at $t.","STR":"$N $vnoggle $o.","":"$N $vnoggle.",]),"tag":(["LIV":"$T $v1are IT!",]),"suckswallow":([]),"nonews":(["":"$N $vsigh deeply and $vwhine : 'Somebody write some new news!'.",]),"duck":(["LIV":"$N $vpush $p1 head down screaming \"Quick duck!\" then $vdirect $p1 face into a pile of cow patties.","STR":"$N $vduck $o.","":"$N $vduck.",]),"lovechild":(["LIV":"$N $vwant to have $p1 love child.","LIV LIV":"$T1s $v1want to have $p2 love child.",]),"legger":(["LIV":"$N $vthink $t looks like a Legger.",]),"plunder":(["":"$N $vare in constant search of quality emotes to plunder.",]),"tmisecure":(["":"$N $vnote that the primary TMI security tool is tar.",]),"nap":(["LIV":"$N $vthink $ts ought to take a nap.","":"$N $vtake a nap.",]),"snuggle":(["LIV":"$N $vsnuggle up close to $t.","":({"You look around for someone to snuggle. ","$N $vlook around for someone to snuggle. C'mon, have some compassion, snuggle with $No. ",}),]),"stilladoofus":(["LIV":"$N $vpoint out that $n1 $v1are still a doofus.",]),"transvestite":(["LIV":"$N $vaccuse $t of being a \"Sweet Transvestite from Transsexual, Transylvania!\"",]),"turd":(["STR":"$N $vturd $o.","":"$N $vturd.",]),"teeth":(["":"$N $vsay, \"Don't stop until you hit the back of his teeth!\"",]),"brainpower":(["LIV":"$N $vwonder if $t $vhave the brain power to toast a crouton.",]),"nah":(["":"$N $vgo, \"Nahhh!\"",]),"alcohol":(["LIV":"$N $vmeasure $p1 blood-alcohol level, and $vfind that the alcohol in $p1 veins contains 0.4% blood.",]),"nag":(["LIV":"$N $vnag $t.","":"$N $vgo, \"Nag, nag, nag, nag, nag, nag, NAG!\"",]),"readnews":(["STR":"$N says, \"Bing Crosby's horse hasn't come in yet? -- Smell-o-vision replaces television. My stars!\".",]),"bbl":(["":"$N $vgrumble and $vmutter \"Be Back Later\".",]),"didfake":(["STR":"*** $Np $o",]),"nad":(["LIV":"$N $vaccuse $t of being a nad!","":"$N $vfeel like a nad. Yeah, nads... Heh, heh!",]),"shampoo":(["":"$N $vproclaim, \"Shampoo is better! I go on first, and clean the hair!\"",]),"haw":(["":"$N $vgo: \"Hee haw!\"",]),"nametag":(["LIV":"Check out the name tag, grandma, $n1 $v1are in $p0 world now!",]),"hat":(["LIV":"$N $vgive a stylish tip of $p hat to $t, then violently $vrip it off and $vthrow it at $t.","":"$N $vgive a stylish tip of $p hat, and then gruesomely $vrip it off and $vstomp on it.",]),"reboot":(["LIV":"$N $vreboot $t in an attempt to improve $p1 stability.",]),"partypants":(["LIV":"$N $vannounce, \"There's a party in $tp's pants; everybody's coming!\"","":"$N $vstate, \"There's a party in my pants; Everyone's coming!\"",]),"wince":(["LIV":"$N $vwince away from $t.","STR":"$N $vwince $o.","":"$N $vwince.",]),"faint":(["LIV":"$N $vfaint into $p1 arms.","":({"-=THUD=- You wake up quite groggy, realizing you have just fainted. ","$N faints. ",}),]),"uhoh":(["LIV":"$N $vgo, \"Uhoh! It's $n1o!\"","STR":"$N $vgo, \"Uhoh! $O\"","":"$N $vgo, \"Uhoh!\"",]),"hal":(["LIV":({"$N $vdo the HAL 9000 thing with $t.","HAL 9000 says, \"I'm sorry, $tp, I can't do that.\"","HAL 9000 says, \"I'm sorry, $tp, I can't do that.\"",}),]),"useful":(["LIV":"$N $vsuggest that $ts $v1make $r1 useful.",]),"curtsey":(["LIV":"$N $vcurtsey gracefully to $t.","STR":"$N $vcurtsey $o.","":"$N $vcurtsey.",]),"nads":(["":"$N $vgo, \"Nads! Nads!! Mm... Yeah! Heh! Heh!\"",]),"declare":(["STR":"$N $vdeclare, \"$o!\"",]),"arms":(["LIV":"$N $vyell, \"Check out the arms on $tp!!\"",]),"muzzle":(["LIV":"$N $vmuzzle $t.",]),"incest":(["":"$N $vnote that the relationship between the Lima Mudlib and the MudOS driver is more than a little incestuous.",]),"goodbog":(["LIV":"$N $vnote that $t $v1give good bog.","":"$N $vnote that $n $vgive good bog.",]),"bat":(["LIV":"$N $vbat $p eyelashes at $t.","":"$N $vbat $p eyelashes.",]),"bar":(["LIV":"$N $vbar $t.","":"$N $vbar.",]),"freeze":(["STR":"$N $vfreeze $o.","":"$N $vfreeze.",]),"yodel":(["STR":"$N $vyodel $o.","":"$N $vyodel.",]),"bottle":(["LIV":"$N $vbottles $T and sells $m at the fair.",]),"bah":(["LIV":"$N $vgo \"Bah!\" at $t","":"$N $vgo, \"Bah!\"",]),"bag":(["LIV":"$N $vthink $ts $v1are a complete bag of holding.",]),"bad":(["LIV":"$N $vhit $p1 nose with a newspaper, \"Bad $Tp!! Bad!!\"","":({"You tell everyone: \"That's a bad thing(tm).\" ","$N states: \"That's a bad thing(tm).\" ",}),]),"roflmao":(["":"$N $vroll on the floor laughing $p0 ass off.",]),"ttlogic":(["":"$N $vrefuse to speak with the 'toetape' emote available to $t10.",]),"problem":(["":"$N $vannounce, \"Houston, we have a problem.\"",]),"friendsdont":(["LIV STR":"$N $vtell $t, \"Friends don't let friends $o.\"",]),"smirkle":(["LIV":"$N $vsmirkle at $t.","STR":"$N $vsmirkle $o.","":"$N $vsmirkle.",]),"2000sign":(["":"$N $vmarch around the room carrying a sign, reading \"2000 by 2000!\"",]),"crazy":(["":"$N $vare going crazy!!!",]),"cashvalue":(["":"$N $vnote that an adminship at Lima Bean carries a cash value of roughly 3 dollars and 24 cents.",]),"oggblat":(["":"$N $vdon't know the verb 'oggblat'.",]),"noblowemote2":(["":"$N $vnote that the addition of the 'fuck LIV' and 'lewinsky LIV' emotes have rendered the 'noblowemote' emote obsolete. Will it be removed in a future release?",]),"nack":(["":"$N $vgo: ----/| \\ o,O| =(-)= NACK!!!!! U THPTH!!!!!!!",]),"tzone":(["":"The Twilight Zone theme song can be heard in the background.",]),"congradulate":(["LIV":"$N $vcongradulate $t.",]),"suffer":(["":"$N $vsuffer horribly.",]),"college":(["":"$N $vsay, \"This is all I'm going to say about drugs: Stay away from them! There is a time and a place for everything, and it's called college!\"",]),"semen":(["":"$N $vproclaim, \"Semen is better! I spurt distinctively, and contain DNA!\"",]),"space":(["STR":"$N $vspace out, somewhere around $o.","":"$N $vspace out, somewhere around Planet Zirgon.",]),"fermez":(["LIV":"$N $vtell $n1, \"Fermez la bouche!\"",]),"dewit":(["LIV":"$N \"$vdew it\" with $t!","":"$N \"$Vdew it\"!",]),"pickaxe":(["LIV":"$N $vattack $t with a pickaxe! In the right ear, out the left eye! $Ts $v1gurgle.","":"$N $vwave a pickaxe theateningly",]),"gurble":(["STR":"$N $vgurble $o.","":"$N $vgurble.",]),"admire":(["LIV":"$N $vadmire $t.",]),"scold":(["LIV":"$N $vscold $t.","OBJ":"$N $vscold at $o.","STR":"$N $vscold $o.","":"$N $vscold.",]),"wslap":(["LIV":"$N $vslap $t on $p1 wrists with $p0 hands.",]),"cavity":(["LIV":"$N $vsay, \"Give $tp a full cavity search!\"","":"$N $vsay, \"Full cavity searches all around!\"",]),"support":(["":"The sticker on the side of the box said \"Supported Platforms: Windows 95, Windows NT 4.0, or better,\" so clearly Linux was a supported platform.",]),"poser":(["":".",]),"eyefuck2":(["LIV":"$N $vfuck $t in the eye, then eats the bloodied pulp that was once the eyeball.",]),"adhom":(["":"$N $vrepeat the previous argument (NOT!).",]),"icecream":(["":"$N $vgo on at length about the evils of strawberry icecream.",]),"comment":(["":"$N $vcomment on begin and end comment markers, then $vlead into a discussion on transformation rules and set theory, eventually ending up on a discussion of preprocessing tokens and contrived examples. When $n $vappear to be finished with that, $n $vstart a discussion on the C++ specification and how it happens to be lacking in precision regarding the interaction of arbitrary tokens in a scheme that nobody would ever... BANG! $N $vare hit by lightning. The Powers that Be want $t10 to shut the fuck up.",]),"talk2much":(["LIV":"$N $vtell $t, \"You talk too much. Homeboy, you never shut up!\"",]),"meep":(["LIV":"$N $vmeep at $t.","STR":"$N $vmeep $o.","":"$N $vmeep.",]),"warning":(["LIV":"$N $vread $p1 warning label: \"Warning! Do Not Eat!\"","STR":"$N $vchant, \"Warning!!! $o\"","LIV STR":"$N $vread $p1 warning label: \"$o\"","":"$N $vchant, \"Warning!!! Do Not Eat Me!!!\"",]),"toot":(["LIV":"$N $vgo 'TOOT TOOT' dancing the cool train-dance with $t.","":"$N $vgo 'TOOT TOOT' dancing the cool train-dance.",]),"shruggle":(["LIV":"$N $vshruggle at $t.","STR":"$N $vshruggle $o.","":"$N $vshruggle.",]),"skiss":(["LIV":"$N $vgive $t a soft, sexy kiss.","":"Excuse $n while $n0s $vkiss the sky.",]),"tool":(["LIV":"$N $vnote that $ts $v1are a total tool.",]),"smileleg":(["STR":"$N $vsmileleg $o.","":"$N $vsmileleg.",]),"semicolon":(["":"$N $vexpound at length on the correct usage of semicolons.",]),"gotbeer":(["":"Got Beer?",]),"gfheh":(["":"$N $vgo, \"Giga-fucking Heh!\"",]),"disaster":(["LIV":"$N $vdeclare $t a Federal Disaster Area.",]),"bogwave":(["":"$N $vbogwave.",]),"oharafix":(["":"$N $vnote that this is so easy even Ohara could fix it!",]),"fullmonty":(["":"$N $vnote, \"No one ever said anything to me about the full monty. Ah, fuck it!\". $N $vrip off all $p clothes. The full monty is full indeed!",]),"beekfix3":(["":"$N $vnote that this probably wouldn't have broken IF Beek had fixed it.",]),"aol5":(["":"$N $vshout \"ME TOO\"",]),"beekfix2":(["":"$N $vnote that this is soooooo easy that _only_ Beek can fix it.",]),"aol2":(["":"$N $vsay, \"ME TOO!\"",]),"aol1":(["":"$N $vopt for the frontal lobotomy.",]),"broke":(["":"$N $vmumble, \"I think we broke her.\"",]),"ownuncle":(["LIV":"$N $vnote that $t $v1are $p1 own uncle.",]),"voice":(["STR":"A hollow voice says: $o!",]),"doidle":(["LIV":"$N $vdo unspeakable things to $p1 idle body.",]),"hitler":(["":"$N $vsay, \"One good thing about Hitler: without him, there'd be 11 million more people on the subway.\"",]),"tooyoung":(["LIV":"$N $vtell $t, \"You're too young, and I'm too well hung.\"",]),"embrace":(["LIV":"$N $vembrace $t.","LIV STR":"$N $vembrace $t $o.",]),"plemma":(["LIV":"$N $vinvite $t back to $p apartment for a demonstration of $p proof of the 'pumping lemma'.",]),"stupids":(["LIV":"$N $vsing an entry from $p1 diary: \"Many many years ago when I was 23 I was married to a widow who was purdy as could be This widow had a grown up daughter who had hair of red My father fell in love with her and soon they too were wed This made my dad my son-in-law which changed my very life My daughter was my mother cause she was my fathers wife To complicate the matter even though it brought me joy I soon became the father of a bouncing baby boy My little baby then became a brother-in-law to dad And so became my uncle though it made me very sad For if he was my uncle then it also made him brother To the widows grown up daughter who of course was my step mother My fathers wife then had a son who kept them on the run He became my grandchild cause he was my daughters son My wife is now my mothers mother and it makes me blue Because although she is my wife, she's my grandmother too If my wife is my grandmother then I am her grandchild Every time I think of it it nearly drives me wild This has got to be the strangest thing I ever saw As husband of my grandmother I am my own grandpa I'm my own grandpa I'm my own grandpa It's a-funny I know But it really is so! I'm my own grandpa!\"",]),"biggs":(["LIV":"$N $vsay, \"$Tp, at that speed, will you be able to pull out in time?\"","":"$N $vsay, \"Luke, at that speed, will you be able to pull out in time?\"",]),"snuff":(["":"$N $vpoint out that $n $vhave to hang Snuffalupagus. (Be right back)",]),"tip3":(["LIV":"$N $vgive a stylish hat to $T.",]),"tip2":(["LIV":"$N $vtip $t generously.","":"You tip generously.",]),"vt220":(["":"$N $vnote, \"If it's not a vt220, its not a terminal.\"",]),"woodward":(["LIV":"$N $vwoodward $n1 violently back and forth until $p1 head falls off.",]),"pulse":(["LIV":"$N $vcheck $p1 pulse.",]),"nipple":(["":"$N $vask, \"Did you know that there are 71.9 acres of nipple tissue in the U.S.?\"",]),"glass":(["LIV":"$N $vtell $t, \"You wanna play broken glass against the head game!?!\"",]),"fffucker":(["LIV":"$N $vtell $t, \"Feel free, fucker!\"",]),"noarg":(["STR":"$N $vdo an emote with no argument!",]),"holdsec":(["":"$N $vsing 'Hold on a second darling...'",]),"smakk":(["LIV":"$N $vsmakk $t.",]),"rookie":(["LIV":"$N $vindicate that $ts $v1are a complete rookie.","":"$N $vare a complete rookie.",]),"wannabe":(["":"$N $vsing \"I wanna wanna wannabe a Spice Girl!!\"",]),"trock":(["OBJ":"$N $t hrm",]),"marry":(["LIV":"$N $vmarry $t till death do us part and all that.",]),"statsystem":(["":"$N $vstate: \"Lima's stat system is just too advanced...\"",]),"megaboz":(["LIV":"$N $vmegaboz $t.","":"$N $vsay, \"It's Megaho, not Megaboz!\"",]),"jones":(["":"$N $vslap $p arm a few times, saying, \"I need it bad!\"",]),"smooth":(["LIV":"$N $vgo, \"Damn, you're smooth, $T!\"","":"$N $vgo, \"Damn, I'm smooth!\"",]),"longwang":(["":"$N $vannounce, \"Guard number 2 is a real skating buff, a warm welcome for Long Wang!\"",]),"sniff":(["LIV":"$N $vsniff $t.","STR":"$N $vsniff $o.","":"$N $vsniff.",]),"strangle":(["LIV":"$N $vstrangle $t.",]),"vpet":(["LIV":"$N $vwhip $p1 ass and $vfreshen $p1 porn.",]),"ohara":(["LIV":"$N $vwish $t a nice life.","":({"$N $vwish everyone a nice life.","$N $vwish you a nice life.",}),]),"scream":(["LIV":"$N $vscream at $t.","STR":"$N $vscream $o!","LIV STR":"$N $vscream at $t $o!","":"$N $vscream.",]),"mallet":(["LIV":"$N $vflatten $t with a giant mallet.",]),"btdt":(["":"$N $vsay, \"Been there, done that.\"",]),"holdhands":(["LIV":"$N $vhold $t hand.",]),"ack2":(["":"$N $vack.",]),"swandive":(["LIV":"$N $vsuggest $n1 $vtry a swan dive into the pavement below.","":"$N $vdo a stunning swan dive into the pavement below.",]),"notmybag":(["":"$N $vgo, \"That's not my bag, baby!\"",]),"thwap":(["LIV":"$N $vthwap $t soundly making $t wince.","OBJ":"$N $vthwap the $o.",]),"moronhs":(["LIV":"$N $vtell $t, \"Shut up! You're a moron!\"",]),"admins":(["":"$N $vnote that we only need 27 more admins to beat TMI-2.",]),"glare":(["LIV":"$N $vglare at $t.","at LIV":"=LIV","STR":"$N $vglare $o.","":"$N $vglare.",]),"rape2":(["LIV":"$N $vrape $t.",]),"lleg":(["":"$N $vgo, \"Little Leg.\"",]),"4chickens":(["":"$N $vorder four fried chickens and a Coke.",]),"scratch":(["LIV":"$N mischeviously $vscratch $p1 head.","STR":"$N $vscratch $o.","":"$N $vscratch $p head.",]),"reddwarf":(["":"$N $vsing: It's cold outside, there's no kind of atmosphere, I'm all alone, more or less. Let me fly far away from here, Fun, fun, fun ... in the sun, sun, sun. I want to lie shipwrecked and comatose, Drinking fresh mango juice. Goldfish shoals nibbling at my toes, Fun, fun, fun ... in the sun, sun, sun, Fun, fun, fun ... in the sun, sun, sun.",]),"beer":(["LIV":"$N $vcrack open a can of beer and $vforce $t to guzzle it down.","":"$N $vcrack open a can of beer and $vguzzle it down.",]),"beep":(["STR":"$N $vbeep $o.","":"$N $vbeep.",]),"macaccel2":(["":"$N $vnote that the best way to accelerate a Macintrash is at 9.8 m/sec^2.",]),"woah":(["":"$N $vgo, \"Woah!\"",]),"beek":(["LIV":"$N $vwish $ts were a bit more like Beek.","":"$N reverently $vuse Beek's personal emote (the best imported emote around).",]),"acid":(["LIV":"$N $vchase $t around the room with a bottle of acid, in an attempt to neutralize $t.",]),"myfirstemote":(["STR":".","":"$N $vfall over in amazement as $p first emote works!",]),"lfshrugleg":(["":"$N $vgo, \"Little Fucking Shrugleg!\"",]),"bozsux":([]),"beef":(["LIV":"$N $vgo: $t, it's what's for dinner!","":"$N $vgo: Beef, it's what's for dinner!",]),"tilt":(["":"$N $vtilt $p head.",]),"spoo":(["STR":"$N $vspoo $o.","":"$N $vspoo.",]),"plane":(["LIV":"$N $vextend $p arms and $vfly around $t making airplane noises.",]),"meat":(["LIV":"$T $v1stroke $p1 meat and $v1go, \"Ahh...\"","":"$N $vstroke $p meat, and $vgo, \"Ahh...\"",]),"analsmack":(["":"$N $vbend over, saying, \"I need it bad!\"",]),"hate":(["LIV":"$N $vhate $n1.",]),"argh":(["STR":"$N $vargh $o.","":"$N $vargh.",]),"innocent":(["STR":"$N $vsay innocently, \"$o\".","":"$N $vlook innocent.",]),"addemotee":(["":"$N $vrefuse to speak and will simply addemote anything that needs to be said.",]),"megabo2":(["":"It's Megabo, not Megaboz!",]),"noodle":(["LIV":"$N $vnoodle at $t.","OBJ":"$N $vnoodle at $o.","STR":"$N $vnoodle $o.","":"$N $vnoodle.",]),"fshrugleg":(["":"$N fucking $vshrugleg.",]),"makenewbie":(["LIV":"DOH!!! $N $vdemote $t to \"newbie\" level.",]),"toke":(["":"$N $vtoke a fatty bowl.",]),"enquire":(["LIV STR":"$N $venquire of $n1, \"$O?\"",]),"harry2":(["":"$N $vthreaten to clone Harry.",]),"bogarm":(["STR":"$N $vbogarm $o.","":"$N $vbogarm.",]),"threaten":(["LIV":"$N $vthreaten $t.",]),"snickerleg":(["LIV":"$N $vsnickerleg at $T.","STR":"$N $vsnickerleg $o.","":"$N $vsnickerleg.",]),"quarter2":(["LIV":"$N $vgo to $T, \"Yeah that and a quarter might buy you a gumball, too.\"",]),"shovecock":(["LIV":"$N $vshove $p big giant cock into $p1 bloody mouth.",]),"medieval":(["LIV":"$N $vget medieval on $p1 ass!",]),"firetruck":(["STR":"$N $vmake \"$o\" noises.","":"$N $vhum to $r as $n $vplay with $p firetruck.",]),"hash":(["LIV":"$N $vhash $t into $p1 own bucket.",]),"wweenie":(["":"$N $vpull out $p white weenie.",]),"ketslap":(["LIV":"$N $vketslap $t!",]),"pjesus":(["":"$N $vshout, \"Praise Jesus!\"",]),"i3police":(["LIV":"$N $vcall in the I3 Police to beat the living shit out of $t for sending a bad packet.","":"$N $vcall in the I3 Police to watch for people sending bad packets.",]),"damnit":(["LIV":"$N $vexclaim, \"Damnit, $tp!\"","STR":"$N $vexclaim, \"Damnit! $O!\"","LIV STR":"$N $vexclaim, \"Damnit, $tp! $O!\"","":"$N $vexclaim, \"Damnit!\"",]),"racecar":(["":"$N $vsay, \"Oh, you're a racecar in the red? Well, I'm a mushroom cloud layin' motherfucker, motherfucker! Every time my fingers touch brain, I'm super-fly TNT. I'm the guns of the Navarone!\"",]),"flick":(["LIV":"$N $vflick $p1 ear.","":"You dig into your nose and discover gold or is it snot....",]),"limawin":(["":"$N $vnote that Lima is the Windows of mudlibs. Nothing is ever removed until it crashes and you reinstall from backups.",]),"master2":(["":"$N $vsay S&M? You mean like the candy? Anyone seen the blue kind yet?",]),"lick":(["LIV":"$N $vlick $t!","STR":"$N $vlick $o.","LIV STR":"$N $vlick $t $o.","":"$N $vlick $p lips.",]),"scoff":(["LIV":"$N $vscoff at $t.","STR":"$N $vscoff $o.","":"$N $vscoff.",]),"elephantman":(["":"$N $vsay, \"I am not an animal! I am a human being! I am a man!\"",]),"hallpass":(["":"$N $vexclaim, \"I do not need 'hall pass'! I need TP for my bunghole!\"",]),"viagra":(["LIV":"$N $vpick up a piece of paper that fell from $p1 pocket. It's $p1 viagra prescription.",]),"screw":(["LIV":"$N $vscrew $t!",]),"beatings":(["LIV":"$N $vdecide to keep beating $t until morale improves.","LIV STR":"$N $vdecide to keep beating $t until $o.","":"$N $vdecide that the beatings shall continue until morale improves.",]),"hungry":(["":"$N $vare hungry, $p stomach growls from neglect.",]),"sfuckleg":(["":"$N shrugging $vfuckleg.",]),"invisbug":(["":"Invisible has been bugged for so long!!!, and $n $vare not happy about it.",]),"trip":(["LIV":"$N $vgrin evilly as $n $vtrip $t, who of course falls flat on $p1 face.","":({"You trip and fall flat on your face. What a klutz! Don't you feel like a fool?! ","$N trips and falls flat on $p face. What a klutz! What a fool! ",}),]),"scifi":(["":"$N $vpoint out that third-rate sci-fi is superior to romance.",]),"newcombe":([]),"hard":(["":"$N $vsay, \"It's a hard job, but then again, I'm a hard man.\"",]),"crash":(["LIV":"$N patiently $vwait for $t to crash.","":"$N $vpoint out that that wasn't a crash; it was a temporary loss of stability.",]),"stretch":(["STR":"$N $vstretch $o.","":"$N $varch $p back, $vstretch, then $vmutter \"what next ...\" under $p breath.",]),"eyestomp":(["LIV":"$N $vstomp on $p1 eyes.",]),"boitano":(["":"$N $vwonder would Brian Boitano would do in this situation.",]),"doofus":(["LIV":"$N $vpoint out that $ts $v1are such a doofus.","":"$N $vare such a doofus.",]),"violin2":(["LIV":"$N $vwalk in carrying a violin case, carefully $vopen it, $vremove $p thermonuclear sniper rifle, and calmly $vpull the trigger on $t, obliterating $t.",]),"twirl":(["":"$N $vtwirl.",]),"unidle":(["":"$N $vunidle.",]),"coredump":(["LIV":"$N $vdump core on $t.","":"$N $vdump core.",]),"solong":(["":"$N $vsay, \"So long, and thanks for all the fish!\"",]),"tlbbog":(["":"$N $vgo, \"Three Little Bears Bog!\" (and this little bog is JUST right!)",]),"win95salute":(["":"$N $vgive Windows 95 the three fingered salute!",]),"cabbage":(["LIV":"$N $vthrow cabbages at $t.",]),"beenchosen":(["":"$N $vsay, \"I have been chosen! Farewell my friends, I go on to a better place!\"",]),"aleg":(["WRD STR":"$N $o-a-$vleg $o1","WRD LIV STR":"$N $o-a-$vleg $t $o1","WRD":"$N $o-a-$vleg.","WRD LIV":"$N $o-a-$vleg $t.","STR":"$N $o-a-$vleg.",]),"giggle":(["LIV":"$N $vgiggle at $t.","STR":"$N $vgiggle $o.","":"$N $vgiggle.",]),"wowser":(["":"$N $vgo, \"WOWSERS!\", as the Inspector Gadget theme song plays in the background.",]),"macos":(["":"$N $vcomment on the many shortcoming of the Macintrash OS.",]),"akiss":(["LIV":"$N $vkiss $p1 ass.",]),"icmp":(["":"$N $vpass a law to make ICMP a federally controlled substance.",]),"whiteass":([]),"wheeze":(["STR":"$N $vwheeze $o.","":"$N $vwheeze.",]),"noogie":(["LIV":"$N $vgive $t a good noogie.",]),"sgfbog":(["":"$N $vgo, \"Super Giga Fucking Bog!\" (10^9 times larger than .. oh, never mind)",]),"followme":(["LIV":"$N $vmotion for $t to follow $t0o.","":"$N $vmotion for you to follow $no.",]),"prefer":(["STR to STR":"$N $vprefer $o0 to $o1.",]),"beat":(["LIV":"$N $vbeat $p1 ass to a bloody pulp.",]),"bonnety":(["LIV":"$N $vare the only bee in $p1 bonnet.",]),"beam":(["LIV":"$N $vbeam at $t.","STR":"$N $vbeam $o.","":"$N $vbeam.",]),"worship":(["LIV":({"$N $vworship $t. ","$N $vworship $t. (what a brown-noser) ",}),"STR":"$N $vworship $o.","":"$N $vworship.",]),"defenestrate":(["LIV":"$N $vchuck $t out a window!",]),"exitstageleft":(["":"$N $vsay, \"Exit, stage left!\"",]),"flinch":(["STR":"$N $vflinch $o.","":"$N $vflinch.",]),"bogattack":(["LIV":"$N $vponder a bog attack, but $vthink twice, and $vslap $t silly until the urge is gone!","":"$N $vponder a bog attack, but $vthink twice, and $vslap $r silly until the urge is gone.",]),"sweep":(["LIV":"$N $vsweep the dance floor with $t.",]),"piddle":(["LIV":"$N $vlift $p leg and $vpiddle all over $t.","STR":"$N $vpiddle $o.","":"$N $vpiddle.",]),"sinatra":(["":"$N $vsing like a mafia pretty boy.",]),"inappropriate":(["":"$N $vpoint out *fucksnugglehug* that this emote *bouncebouncefondlewhee* is hopelessly inappropriate.",]),"changelog":(["":"$N changed that, read the changelog.",]),"noddle":(["LIV":"$N $vnoddle at $t.","STR":"$N $vnoddle $o.","":"$N $vnoddle.",]),"candy":(["LIV":({"$N $vgive $t a candy for $p1 stunning answer.","$N $vlaud $p1 efforts by giving $t a candy.","$N $vthink $t are wonderful and $vgive $t a candy for your troubles.",}),"":"$N $vgive $r a piece of candy.",]),"banner":(["STR":"$N $vwave a huge banner saying '$O'.","LIV STR":"$N $vwave a huge banner saying '$O' up $p1 face.",]),"diarrhea":(["LIV":"$N $vare going to diarrhea all over $p1 face if $n1 $v1do not shut the fuck up.",]),"shove":(["LIV":"$N $vshove $t.","STR":"$N $vshove $o.","":"$N $vshove.",]),"disagree":(["LIV":"$N $vdisagree with $t.","":"$N $vdisagree.",]),"emotathon":(["":"$N $vcower in fear at the memory of the last time someone started an emote-a-thon!",]),"canuck":(["":"$N $vmake like a Canadian and $vsay, \"Eh?\" while opening a can of \"moosehead\" beer, and turning on the TV to Hockey Night in Canada.",]),"zorkmud":(["":"$N $vnote that the more $n $vuse Lima, the less featured it gets.",]),"daydream":(["LIV":"$N $vdaydream about $t.",]),"fixit":(["LIV":"$N $vprod $t, \"Fix it, damnit!\"","":"$N $vgo, \"Fix it, damnit!\"",]),"weigh":(["":"$N $vgo, \"Weigh, dude!\"",]),"goodnight":(["":"$N would like to wish everyone a %^MAGENTA%^good night%^RESET%^!",]),"five":(["LIV":"$N high-$vfive $t and $vwatch $p1 hand turn bright red!","":({"You count to five, \"One, Two, Three, Four, Five...\" ","$N $vare -=SUCH=- a genius. $N $vcan count to five! ",}),]),"rbow":(["":"$N $vreturn the bow.",]),"shrug":(["LIV":"$N $vshrug at $t.","STR at LIV":"=STR LIV","STR":"$N $vshrug $o.","STR LIV":"$N $vshrug $o at $t.","":"$N $vshrug.",]),"outthere":(["LIV":"$N secretly $vwhisper to $t, 'The truth is out there!'","":"$N secretly $vwhisper, 'The truth is out there!'",]),"route":(["LIV to STR":"$N $vroute $t to $o.",]),"vacuum":(["":"$N $vwonder . o O ( If sound doesn't travel in a vacuum, why do vacuums make so much noise? )",]),"6pack":(["":"$N $vgo, \"Didn't you know I come in six packs?\"",]),"plaid":(["":"$N $vhave gone plaid!",]),"curses":(["":"$N $vgo: \"Curses! Foiled again!\"",]),"submit":(["LIV":"$N $vtell $n1, \"Submit, you dog! Submit to me! Submit to the Usenix conf. on object tech!\"",]),"breath":(["":"$N $vhold $p breath ...",]),"unroll":(["LIV":"$N $vunroll $p1 eyes.",]),"oraise":(["":"$N $vraise the other eyebrow.",]),"behead":(["LIV":"$N $vchop off $p1 head declaring, \"There can be only one!\"",]),"boink":(["LIV":"$N $vboink $t.","STR":"$N $vboink $o.","":"$N $vboink.",]),"syn":(["":"$N $vgo: ----/| \\ o,O| =(-)= SYN!!!!! U THPTH!!!!!!!",]),"boing":(["":"$N $vgo, \"B O I N G !\"",]),"implant":(["LIV":"$N $vshout, \"My tricorder shows that $T has no implants at the moment, but previous penetrations causing some minor tissue damage to the lower intestine is evident.\"",]),"techsupport":(["":"The Lima admins hire a crew of people who have never mudded before to provide $n with industry standard tech support for the Lima mudlib.",]),"complain":(["STR":"$N $vcomplain $o.","":"$N $vcomplain.",]),"vlleg":(["":"$N $vgo, \"Very Little Leg.\"",]),"damned":(["":"$N $vgo, \"I'll be damned.\"",]),"spit":(["LIV":"$N $vspit on $t.","OBJ":"$N $vspit on the $o.","STR":"$N $vspit $o.","":"$N $vspit.",]),"upyerass":(["LIV":"$N $vtell $t, \"Up your ass with a piece of glass!\"","":"$N $vgo, \"Up your ass with a piece of glass!\"",]),"azy":(["":"$N $vbecome furry, soft, lovable, and extraordinarily mean, experiencing a moment of Azy-like grandeur.",]),"spin":(["LIV":"$N $vspin $t.","OBJ":"$N $vspin a $o on $p finger.","":"$N $vspin.",]),"smack":(["LIV":"$N $vsmack $t.","":"$N $vslap $p arm a few times, saying, \"I need it bad!\"",]),"rabbitears":(["LIV":"$N $vflap $p ears like a rabbit at $t.",]),"hand":(["":"$N $vgo, \"Hand.\"",]),"appreciate":(["LIV":"$N $vappreciate $n1.",]),"666":(["LIV":"$N $vlift up $p1 hair to reveal a tattoo: 666","":"$N $vscrawl a small 666 on $p forehead.",]),"snapout":(["LIV":"$N $vturn to $t and $vscream, \"God damn it! Snap out of it!\"","":"$N $vscream, \"God damn it Jesus! Snap out of it!\"",]),"debate":(["STR":"$N $vdebate $o.","":"$N $vdebate.",]),"smil":(["LIV":"$N $vsmil at $t.",]),"boggle":(["LIV":"$N $vboggle at $t.","OBJ":"$N $vboggle at $o.","STR":"$N $vboggle $o.","":"$N $vboggle.",]),"twink":(["LIV":"$N $vthunk $t in the head and you hear a hollow 'TWINK' sound.",]),"moment":(["LIV":"$N $vsit quietly, observing a moment of silence in honor of $t.","STR":"$N $vsit quietly, observing a moment of silence in honor of $o.","LIV STR":"$N $vsit quietly, observing a moment of silence in honor of $t $o.","":"$N $vsit quietly, observing a moment of silence in honor of the 891st emote.",]),"stroke":(["LIV":"$N $vstroke $t playfully.","OBJ":"$N $vstroke the $o.","STR":"$N $vstroke $o.","":"$N $vstroke.",]),"shush":(["LIV":"$N $vgo to $t, \"Shhhh!!!!!\"","":"$N $vgo, \"Shhhh!!!!!\"",]),"fith":(["":"$N $vgo, \"Fire in the hole!\"",]),"yawnpenis":(["":"$N $vyawnpenis.",]),"jellies":(["":"$N $vintone, \"Bow down before the 'King of Jellies'\"",]),"apathy":(["":"$N $vexplain, 'Why yes, that is a large camel growing out of my left buttock.'",]),"toomanybogs":(["":"$N $vexclaim, \"Bog, there are too many 'bog' emotes!\"",]),"bogall":(["":"$N $vhave a sudden bog attack. $N $vgo, \"Very Little Bog.\" $N $vgo, \"Super Giga Fucking Bog!\" (10^9 times larger than .. oh, never mind) $N $vgo, \"Super-Bog!!!!\" $N $vgo, \"Fucking Bog.\" $N $vgo, \"Three Little Bears Bog!\" (and this little bog is JUST right!) $N $vgo, \"Minor Bog.\" $N $vgo, \"Bog.\" $N $vgo, \"Super Fucking Bog!!!!!!!!!\" $N $vgo, \"Little fucking bog!\" $N $vgo, \"LIttle Bog.\" $N $vgo, \"Little Super fucking bog!\" (larger than a fucking bog, smaller than a super fucking bog) $N $vgo, \"Above average little super fucking bog!\" (slightly larger than a little super fucking bog, which is larger than a fucking bog, but smaller than a super fucking bog)",]),"curse2":(["":"$N $vlet out a string of curses that would make $p grandmother (a Harley-mama who wears combat boots) blush with shame.",]),"lsfbog":(["STR":"$N $vgo, \"Little super fucking $o bog.\"","":"$N $vgo, \"Little Super fucking bog!\" (larger than a fucking bog, smaller than a super fucking bog)",]),"fsmirkleg":(["LIV":"$N fucking $vsmirkleg at $t.","STR":"$N fucking $vsmirkleg $o.","":"$N fucking $vsmirkleg.",]),"maxim":(["":"Maxim - The best thing to happen to men since women.",]),"ayt":(["LIV":"$N $vwave $p hand in front of $p1 face, $v1are $n1 there?",]),"gagme":(["LIV":"$T $vsay \"Gag me with a chainsaw!\"","":"$N $vsay \"Gag me with a spoon!\"",]),"wordperfect":(["":"$N $vtry to start up WordPerfect, but $vrun out of memory.",]),"crank":(["LIV":"$N $vgo, \"Hey $t! Crank it up, fucker!\"","":"$N $vgo, \"Crank it up, fuckers!\"",]),"sleep":(["LIV":"$N $vtry to sleep with $t, but $vfail miserably.","":"$N $vdeclare that sleep is a poor substitute for caffeine.",]),"hmm2":(["":"$N $vscratch $p chin and thoughtfully $vsay, \"Hmmm...\"",]),"hamster":(["LIV":"$N $vtaunt $t, \"Your mother was a hamster, and your father smelt of elderberries!\"",]),"squeal":(["LIV":"$N $vsqueal, \"$t!! Hi!! How are you?!\"","STR":"$N $vsqueal $o.","LIV STR":"$N $vsqueal, \"$t!! $o\"","":"$N $vsqueal.",]),"alanis2":(["":"$N $vhope to get a date with Alanis to go to the theatre.",]),"hiccup":(["LIV":"$N $vbeg $t for a glass of water to cure $p hiccups.","":"$N $vgo, \"Hic!\"",]),"orbit":(["LIV":"$N $vsay, \"We should take off and nuke $Tp from orbit. It's the only way to be sure.\"","STR":"$N $vsay we should just take off and nuke $o from orbit... it's the only way to be sure.","":"$N $vsay we should take off and nuke the site from orbit... it's the only way to be sure.",]),"kiickass":(["":"$N $vgo, \"Kiiiick Ass!\"",]),"growl":(["LIV":"$N $vgrowl at $t.","STR":"$N $vgrowl $o.","LIV STR":"$N $vgrowl at $t $o.","":"$N $vgrowl.",]),"fish":(["":"$N $vgo, \"Holy Zarquon, singing fish!\"",]),"linen":(["LIV":"$N $vsay \"Quit yer grinnin and drop yer linens, I found $t.\"",]),"basemudlib":(["LIV":"$N $vchange ADMIN_EMAIL in $p mud and $vask $T for permission to rename the base_mudlib(). \"But I changed a lot!\"","":"$N $vchange ADMIN_EMAIL in $p mud and $vask for permission to rename the base_mudlib(). \"But I changed a lot!\"",]),"sweat":(["STR":"$N $vsweat $o.","":"$N $vsweat.",]),"swear":(["STR":"$N $vswear $o.","":"$N $vswear.",]),"said":(["":"$N $vfeel that needed to be said.",]),"fubar":(["":"$N $vgo, \"Fucked Up Beyond All Recognition.\"",]),"funboy":(["LIV":"$N $vsay, \"C'mon $N1... You got me dead bang.\"","":"$N $vsay, \"C'mon Funboy... You got me dead bang.\"",]),"hplanet":(["":"$N $vscream, \"Hack the planet!!!!\"",]),"tuck":(["LIV":"$N $vtuck $t into bed and $vwave \"Goodnight\".",]),"fork":(["LIV":"$N $vtell $t, \"Make like a process, and FORK OFF!\"","":"$N $vcheck $p holster to see if $p fork is safely tucked away.",]),"guilt":(["LIV":"$N $vtell $t, \"Fasten your seatbelt, we're going on a guilt trip!\"","":"$N $vsay, \"Fasten your seatbelt, we're going on a guilt trip!\"",]),"fore":(["":"$N $vshout FORE. Everyone had better duck.",]),"chill":(["LIV":"$N $vgive $t a bone chilling look of hatred.","":"$N $vGQ against the wall, and $vchill, suggesting everyone else do the same.",]),"whapleg":(["LIV":"$N $vwhapleg $t.","OBJ":"$N $vwhapleg at $o.","STR":"$N $vwhapleg $o.","":"$N $vwhapleg.",]),"sfcopeleg":(["":"$N $vgo, \"Super fucking copeleg!\"",]),"supremacy":(["":"You $vstomp around and $vsay, angrily, \"Where is that damn Supremacy? I had an appointment to get my ass cleaned thirty minutes ago and he's nowhere to be found!\"",]),"monkey12":(["":"$N $vstagger drunkenly around and $vsay, \"Twelve monkeys is too much...\"",]),"thirstymonkey":(["LIV":"$N $vwatch in horror as $n1 $v1are stoned to death by a group of thirsty monkeys.",]),"boredbored":(["":"$N $vare bored enough to add some more emotes ... maybe.",]),"gravy2":(["LIV":"$N $vsay, \"Woah, $tp, you making gravy in there?\"",]),"beekp":(["LIV":"$N $vnote that beekp(\"$Tp\") returns 1.",]),"malic":(["LIV":"$N $vmalic $t.",]),"lagmon":(["LIV":"You hear the sound of splitering bones as $t $v1get crushed by the lag monster with earth shattering dimensions.","":"You hear the sound of splintering bones as $n $vget crushed by the lag monster with earth shattering dimensions.",]),"googlbog":(["LIV":"$N super fucking-a googl-$vbog at $t fucking mightily!","":"$N super duper fucking-a google fucking $vbog!",]),"ponder":(["LIV":"$N $vponder $p1 inner being.","STR":"$N $vponder $o.","LIV STR":"$N $vponder $p1 $o.","":"$N $vponder the situation.",]),"risc2":(["":"$N $vsay, \"Yeah... Risc is good...\"",]),"cabal":(["":"$N $vshow you $p USENET Cabal membership card.",]),"repressed":(["":"$N $vscream, \"Help! Help! I'm being repressed!\"",]),"lunchbox":(["":"$N $vhave $p lunchbox and $n's armed real well.",]),"fire":(["":"$N say$v: \"FIRE! FIRE! FIRE! heh.. yeah!\"",]),"choke":(["LIV":"$N $vchoke $t!","":"$N $vlaugh so hard $n $vchoke.",]),"rival":(["LIV":"$N $vconsider $t to be an intellect rivalled only by garden tools.",]),"yum":(["":"$N $vpat $p tummy, and $vgo, \"Yum, Yum.\"",]),"switch":(["LIV":"$N $vbroadside $t with a context switch into $p1 lane.","":"$N $vget broadsided by a context switching into $p lane.",]),"boglover":(["LIV":"$N $vaccuse $t of being a Bog-Lover.","":"$N $vare a Bog-Lover.",]),"aww":(["LIV":"$N $vgo to $t, \"Aww....\"","":"$N $vgo, \"Aww....\"",]),"upyerbutt":(["LIV":"$N $vtell $t, \"Up your butt with a coconut!\"","":"$N $vgo, \"Up your butt with a coconut!\"",]),"limaleg3":(["":"(L)eg-emote (I)diots = (M)ud (A)sshole.",]),"limaleg2":(["":"(L)eg-emotes (I)ndicate (M)ental (A)gility.",]),"crackslap":(["LIV":"$N $vdeliver a perfect CrackSlap! alongside $p1 head","":"$N $vprepare for a CrackSlap!",]),"pummel":(["LIV":"$N $vpummel the hell out of $t.",]),"conforte":(["LIV":"$N $vconforte $t.",]),"awk":(["LIV":"$N $vtype: awk ' BEGIN { strip $n1p; } ; ( length($1) < 0 ) { print insert($1, user, FORCE) + $2 ); } ; ( length($1) > 0 ) { print substr($1, 1, 2) \"...\" } ; END { print NR \" items inserted/truncated\" ; } ' FS=\"joint\" user=$USER $n1p",]),"avoid":(["LIV":"$N $vseem to avoid $t like the plaque.","":"$N $vseem to avoid everyone.",]),"laggod":(["":"$N $vcomplain and $vwhine about $p lag to the Lag God. $P connection immediately drops.",]),"sup":(["LIV":"$N $vask $t: 'Wazzup?'","":"$N $vsay: Wazzup?",]),"gene":(["LIV":"$N $vblow $p whistle and $vyell, \"$Tp, out of the gene pool, now!\"",]),"awe":(["LIV":"$N $vexclaim, \"That's AWESOME $T!\"","":"$N $vexclaim 'Thats AWESOME!'",]),"STR":(["STR":"$N $vwhip out $p pocket dictionary, $vlook up '$o', but $vgive up and $vshrug.",]),"kewel":(["":"$N $vgo, \"Kewel!\"",]),"333":(["LIV":"$N $vlift up $p1 hair, revealing a tattoo, '333', proving $t to be the Semi-Christ.","":"$N $vlift up $p hair, revealing a tattoo, '333', proving $n $vare the Semi-Christ.",]),"fired":(["LIV":"$N $vrecall how $t $v1were fired from McDonald's for having a short attention span.",]),"sue":(["LIV":"$N $vaccuse $n1 of being a boy named Sue!",]),"alt2600":(["":"$N $vnote that alt.2600 is NOT a newsgroup about the Lima soul daemon.",]),"microsoft":(["":"$N $vblame Microsoft for all the GPFs!!!",]),"oharafix3":(["LIV":"$N $vnote that if certain people, namely $t, were to actually DO something for a change, $n would attempt to be more than underwhelmed by $p1 comment.",]),"oharafix2":(["":"$N $vnote that this is so easy it probably won't break until Ohara fixes it.",]),"blackhole":(["LIV":"$N $vblackhole $t.",]),"mur":(["STR":"$N $vmur $o.","":"$N $vmur.",]),"etcleg":(["":"$N $vetcleg ...",]),"lfbog":(["":"$N $vgo, \"Little fucking bog!\"",]),"fgrumble":(["LIV":"$N fucking $vgrumble at $t.","":"$N fucking $vgrumble.",]),"lpdeath":(["":"$N $vdie and $vsee $p dead body from above and all that shit.",]),"muh":(["":"$N $vgo 'Muhahahahha!'",]),"nurse":(["LIV":"$N $vnurse at $p1 supple bosom.",]),"dordon2":(["":"$N $vwonder why the dordon emote severs someones head with a katana.",]),"thighleg":(["STR":"$N $vthighleg $o.","":"$N $vthighleg.",]),"blush":(["LIV":"$N $vblush furiously, glaring at $t.","":({"You feel the heat begin to rise as your face turns a deep red. ","$N $vblush furiously. ",}),]),"woman":(["":"Lib $vtell $n, \"Why yes, we DO have a \"woman\" command here. This is a progressive 90's kind of mudlib!\"",]),"tincan":(["":"$N $vcompare $p link to two tin cans and a piece of string.",]),"smeg":(["LIV":({"$N $vcall $t a smeghead.","$N $vcall $t a smeghead. \"Smeghead!\"",}),]),"78":(["":"$N $vsing '7, 8, stay up late ...'",]),"youreright":(["LIV":"$N $vtell $t, \"I'm stupid, you're smart. I was wrong, you were right. You're the best, I'm the worst. You're very good looking, and I'm not attractive.\"",]),"cozy":(["LIV":"$N $vare cozy and content with $p1 company.",]),"paper":(["LIV":"$N $vgash $t with a paper cut!","":"$N $vwield a sheet of paper.",]),"sexz0r":(["LIV":"$N $vsexz0r $t.",]),"fhair":(["LIV":"$N $vrun $p fingers through $p1 hair and $vsmile warmly.",]),"inbred":(["LIV":"$N $vreveal that $p1 mother is also $p1 sister!",]),"foot":(["":"$N $vgo, \"Foot.\"",]),"std":(["":"This emote was added at Descartes' request. You don't want to know why.",]),"frog":(["LIV":"$N $vcast a spell on $t and $vturn $t into a FROG!","":"With a flick of $p tongue, $n $vsnatch a fly out of the air. \"Ri-deep, ri-deep!\" ",]),"gui":(["LIV":"$N $vcheck $t for a \"GUI Interface\".",]),"slingblade":(["LIV":"$N $vnod at $t, \"Some folk dem call it a kopesh. I call dem a slingblade. I knocked a man offa muh momma wit one of deese. Upside his head I did.\"","":"$N $vsing, \"I luv muh myrah, muh muh muh myrah, sum dey youll bee muh wifu!\"",]),"prealpha":(["LIV":"$N $vlabel $t 'pre-alpha'. Half the MUD community has a heart-attack and dies.",]),"burgler":(["":"$N $vgo, \"Check it out, Butthead! He's the turd burgler!\"",]),"killwhitey":(["":"$N $vsing, \"I'm gonna get me a shotgun, and kill all the whiteys I see!\"",]),"fool":(["":"$N $vask, \"Who's more foolish, the fool or the fool who follows him?\"",]),"hail":(["LIV":"$N $vhail $t, Leader of the World!","":"$N $vhail the nearest taxi.",]),"impression":(["STR":"$N $vdo $p best $o impression.",]),"dropanchor":(["":"$N $vdrop anchor and $vleave everyone wishing for rubber boots.",]),"911":(["LIV":"$N $vcall 911 for $t.","STR":"$N $vcall 911, and $vsay, \"$o\"","":"$N $vcall 911.",]),"beekgeek":(["":"$N $vdoubt that it is a coincidence that \"Beek\" rhymes with \"Geek\".",]),"910":(["":"$N $vsing '9, 10, never sleep again ...'",]),"flop":(["LIV":"$N $vflop at $p1 feet","STR":"$N $vflop $o","":"$N $vflop.",]),"duh":(["LIV":"$N $vsay, \"$tp, you are such an induhvidual!\"","":({"$N $vgo: *Duh!* ","$N $vgo: *Duh!* and $vlook around sheepishly. ",}),]),"tentacle":(["":"$N $vgo, \"Tentacle.\"",]),"tmianon":(["LIV":"$N $vinvite $t to join TMI anonymous.",]),"noddy":(["LIV":"$N $vnod at $t, and the bell on $p little hat goes \"Jingle Jingle\".","":"$N $vnod, and the bell on $p little hat goes \"Jingle Jingle\".",]),"funk":(["":"$N $vgo, \"Funk Dat!!\"",]),"flog":(["":"$N $vflog off.",]),"wwys":(["":"$N $vsing, \"What would you say?... I'd say Dave Matthews sounds like Peewee Herman!\"",]),"gelf":(["":"$N $vgo, \".geL gnikcuF\"",]),"novell":(["":"$N $vcomplain that Novell is a shitty, fucked-up, lamer, bug-ridden, festering pool of wanna-be-a-real-networking-OS disk dump of code.",]),"pst":(["LIV":"$N $vask '$N1 wana buy some drugs?'","":"$n $vgo, \"Psst...\"",]),"isaproblem":(["LIV":"$N $vpoint out that $ts $v1are a problem.",]),"turdboss":(["LIV":"$N $vtell $t to show that turd who's the boss.",]),"ribbit":(["STR":"$N $vribbit $o.","":"$N $vribbit.",]),"hatekenny":(["LIV":"$N $vsigh, \"God, I hate you $tp.\"","":"$N $vsigh, \"God, I hate you Kenny.\"",]),"msw":(["":"$N $vmutter swear words under $p breath.",]),"nounverb3":(["WRD WRD":"$N $vsuggest that this discussion would be more appropriate in alt.$o.$o1.$o1.$o1!",]),"taunt":(["LIV":"$N $vtaunt $t.","":"$N $vsneer, \"Go ahwahy ohr ah will tauhnt you ah secohnd tihme!\"",]),"waveleg":(["LIV":"$N $vwaveleg to $t.","STR":"$N $vwaveleg $o.","":"$N $vwaveleg.",]),"byford":(["":"$N $vwere born Son of Byford, Brother of Al.",]),"900":(["LIV":"$N $vask, \"I'm bored. $Tp, what was your 900 number again?\"",]),"att":(["STR":"$N $vsay, \"Ever $o? You will. And the company that will bring it to you? AT&T.\"","":"\"AT&T,\" $N $vsay, \"You will.\"",]),"booga":(["LIV":({"$N $vleap out from behind a bush and yells, \"BOOGA!!\" at $t. ","$N $vleap out from behind a bush and yells, \"BOOGA!!\" at $t, scaring $t half to death! ",}),"":({"You scratch your armpits, hump your back and go OoGah BooGah! ","$N $vare -=SUCH+- a Neanderthal!! OoGah BooGah! ",}),]),"dtd":(["":"$N $vdare to dream.",]),"rtfm":(["LIV":"$N $vtell $t, \"RTFM, bonehead.\"","":"$N $vscream, \"RTFM!\"",]),"exclaim":(["STR":"$N $vexclaim, \"$O!\"",]),"stagger":(["STR":"$N $vstagger $o.","":"$N $vstagger drunkenly.",]),"grovel":(["LIV":"$N $vgrovel before $t.","STR":"$N $vgrovel $o.","":"$N $vgrovel shamelessly.",]),"hallucinate":(["LIV":"$N $vhallucinate that $ts $v1are a purple frog.","OBJ":"$N $vhallucinate that $o is a purple frog.","STR":"$N $vhallucinate $o.","":"$N $vhallucinate about purple frogs.",]),"fume":(["LIV":"$N $vfume at $t.","":"$N $vpuff up like a bullfrog, fuming with anger.",]),"56":(["":"$N $vsing '5, 6, grab your crucifix ...'",]),"rtfc":(["LIV":"$N $vtell $t, \"RTFC, bonehead.\"","":"$N $vscream, \"RTFC!\"",]),"nuts":(["LIV":"$N $vsay, \"$tp, I would kick you in the nuts!\"","":"$N $vsay, \"Kyle, I would kick you in the nuts!\"",]),"guffaw":(["STR":"$N $vguffaw $o.","":"$N $vguffaw.",]),"judge":(["":"$N $vsay in a yoda-like voice: Judge me by size, will you?",]),"mrt":(["LIV":"$N $vsay, \"Hey $tp, you look mighty fine there in them jeans!\"",]),"orgyemote":(["":"$N $vrefer to the \"orgy LIV LIV WRD WRD LIV STR\" emote.",]),"kentucky":(["STR":"$N $vrespond, \"What? No, of course I'm not my own uncle. Where do I look like I'm from? $O?\"","":"$N $vrespond, \"What? No, of course I'm not my own uncle. Where do I look like I'm from? Kentucky?\"",]),"roolz":(["LIV":"$N $vthink that $t roolz.","STR":"$N $vgo, \"$o fuckin' roolz!\"","":"$N $vgo, \"That fuckin' roolz!\"",]),"hmfe":(["STR":"Having nothing better to do, $N $vdecide to see how many LIMA emotes $n can find with the word \"$o\" in them.","":"Having nothing better to do, $N $vdecide to see how many LIMA emotes $n can find with the word \"FUCK\" in them.",]),"c++":(["":"$N $vnote that in 100 years, C++ will be remembered as one of humanity's biggest mistakes.",]),"ass":(["":"$N $vwiggle $p ass.",]),"recurse2":(["":"$N $vrefer to the \"recurse\" emote",]),"kablooie":(["":"KABLOOIE!",]),"halluncinate":(["STR":"$N $vhallucinate $T",]),"dntn":(["":"$N $vgo, \"I think that falls under the category of Didn't Need To Know(tm)\"",]),"pant":(["STR":"$N $vpant $o.","":"$N $vpant.",]),"bitwise":(["":"$N $vgo, \"Bit wise, byte foolish!\"",]),"cheerleg":(["LIV":"$N $vcheerleg $t.","":"$N $vcheerleg.",]),"ask":(["LIV":"$N $vsay to $t, \"Just ask the damn question!\"","":"$N $vsay, \"Just ask the damn question!\"",]),"ash":(["":"$N $vdemand a list of LPmuds that save inventory.",]),"dress":(["":"$N $vare off like a prom dress!",]),"acknowledge":(["LIV":"$N $vacknowledge $p1 existence.",]),"sql":(["LIV":({"Beastie $Ts $v1sing, \"SQL! All I really want is SQL!\"","Beastie $Ts $v1sing, \"SQL! All I really want is SQL!\"","$Ts $v1sing, \"SQL! All I really want is SQL!\"",}),"":({"$N $vsing, \"SQL! All I really want is SQL!\"","Beastie $N $vsing, \"SQL! All I really want is SQL!\"",}),]),"writhe":(["LIV":"$N $vwrithe all over $t.","OBJ":"$N $vwrithe all over $o.","STR":"$N $vwrithe $o.","":"$N $vwrithe in agony!",]),"grr":(["STR":"$N $vgrr $o.","":"$N $vgrr.",]),"sack":(["LIV":"$N unceremoniously $vgive $t the sack.",]),"dry":(["LIV":"$N $vdry $T's face.",]),"dbug":(["LIV":"$N $vaccuse $t of being a driver bug.",]),"smonkey":(["LIV":"$N $vgive $t a hug and $vsay, \"Who's my stinky monkey?\"",]),"zena":(["":"$N $vscream: Zena, save us!",]),"42":(["":"$N $vpoint out that 6*9=42.",]),"note":(["STR":"$N $vnote that $o.",]),"cows":(["LIV LIV":"$N $vnote: (___) (o o) <===== $n1p /------\\ / (__) / ____O (oo) <===== $n2p | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ","WRD STR":"$N $vnote: (___) (o o) <===== $O /------\\ / (__) / ____O (oo) <===== $O1 | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ","LIV STR":"$N $vnote: (___) (o o) <===== $n1p /------\\ / (__) / ____O (oo) <===== $O | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ",]),"bored":(["":"$N $vare bored...anyone want yet another emote?",]),"drunken":(["":"$N $vrelate a long story about the beginnings of the Lima Mudlib and $vconclude by showing all the stupid souls were added by a drunken Deathblade.",]),"schlong":(["":"$N $vschlong.",]),"cowl":(["":"$N $vnote that this emote was added simply because Cowl wasn't mentioned anywhere in the SOUL_D database.",]),"boogle":(["STR":"$N $vboogle $o.","":"$N $vboogle.",]),"massacre":(["LIV":"$N $vmassacre $t to small fragments!",]),"discoslap":(["STR":"$N $vslap $p buttocks, $vshake $p head, $vhop about, and $vsay, \"$o! $o!\"","":"$N $vslap $p buttocks, $vshake $p head and $vhop about.",]),"spam":(["LIV":({"$N force $vfeed $t a can of spam. $Tp $v1turn a sickly shade of green.","$N force $vfeed $t a can of spam. $Tp $v1turn a sickly shade of green.","$N force $vfeed $t a can of spam. $T $v1feel VERY ill now.",}),"":"$N $vproclaim, \"SPAM SPAM SPAM! I love SPAM with green eggs and ham!!\"",]),"emergency":(["":"$Np: This is a test of the emergency emote system. This is only a test. If this had been an actual emote, '$Np:' would have been followed by something worth reading which in all likelyhood would have included a few offensive words. This concludes this test of the emergency emote system.",]),"ineedit":(["":"$N $vgo, \"Yeah, I need it!\"",]),"arm":(["":"$N $vgo, \"Arm.\"",]),"assmagic":(["LIV":"$N $vpull a rabbit out of $p1 ass.","LIV STR":"$N $vpull $o out of $p1 ass.",]),"dropload":(["":"$N $vdrop $p load straight down the exhaust port.",]),"cuddle":(["LIV":"$N $vcuddle with $t.","":"$N $vare so cute and cuddly!",]),"goinghome":(["":"$N $vare going home. Talking poo is where $n $vdraw the line.",]),"sketchanus":(["":"$N $vreport, \"Samples recovered from the scene led to this composite sketch of the perpetrator's anus.\"",]),"notetitle":(["LIV":"$N $vpoint out $p1 title.",]),"eggnog":(["LIV":"$N $vgive $t a hard boiled egg nog.",]),"ffly":(["":"$N $vgo, \"Finafuckingly!\"",]),"bart2":(["":"$N $vsay \"Kewl Beans, man!\"",]),"arc":(["LIV":"$N $varc an eyebrow at $t.","STR":"$N $varc an eyebrow $o.","":"$N $varc an eyebrow.",]),"lwave":(["LIV":"$N $vwave at $t lamely... too late.","":"$N $vwave lamely... too late.",]),"yow":(["STR":"$N $vexclaim, \"Yow! $O!\"","":"$N $vexclaim, \"Yow!\"",]),"34":(["":"$N $vsing '3, 4, better lock the door ...'",]),"why2":(["":"Gamedriver $vtell $n, \"Ours is not to reason why, ours is but to do or die!\"",]),"disclaimer":(["":"$N $vwant everyone to know that the '245' emote is not accurate.",]),"grope":(["LIV":"$N $vgrope $t.",]),"swegrin":(["":"$N $vget that Swedish-looking grin on $p face again! Oh no! This can't be good!! RUN AWAY, RUN AWAY!!!",]),"donateleg":(["LIV":"$N $vsteal $p1 wallet, and $vdonate all the cash to the Society for the Prevention of New Leg Emotes.",]),"sugar":(["":"$N $vsing, 'I'm a little teapot short and stout ... here is my handle, here is my ... _Other_Handle_??? SHIT. I'm a sugar bowl.'",]),"chastity":(["LIV":"$N $voffer a chastity belt to $t.",]),"dest":(["LIV":"$N $vdest $n1, running the risk of retaliation from the Board of Administration. However, the retaliation seems tied up in some amount of bureaucracy.",]),"prime":(["LIV":"$Ts $v1moo pathetically as $n $vstamp 'USDA approved' on $p1 tummy.",]),"roll2":(["LIV":"$P eyes roll at $t.","":"$P eyes roll around the room, looking for someone who is being stupid.",]),"yob":(["LIV":"$N $vaccuse $t of being a yob.","":"$N $vfeel like a yob.",]),"hunger":(["":"Hunger strikes. $N $vgo idle.",]),"designate":(["LIV STR":"$N $vdesignate $t the official Lima [tm] $o.",]),"7up":(["LIV":"$N $vask $t, \"Don't you feel good about 7-up? Hah, hah, ha!\"","":"$N $vask, \"Don't you feel good about 7-up? Hah, hah, ha!\"",]),"sol":(["":"$N $vreply, \"Sorry...I guess you're SOL.\"",]),"gsnort":(["":"$N $vgigglesnort.",]),"spork":(["LIV":"$N $vspork $tp ass.",]),"smooch":(["LIV":"$N $vsmooch $t on the nose.",]),"eiffel":(["":"$N $vexpound upon the benefits of OOP in Eiffel.",]),"pop":(["":"$N $vgo, \"Pop!\"",]),"poo":(["STR":"$N $vpoo $o.","":"$N $vpoo.",]),"sob":(["LIV":"$N $vsob on $p1 shoulder.","STR":"$N $vsob $o.","":"$N $vsob.",]),"grunt":(["LIV":"$N $vgrunt at $t.","STR":"$N $vgrunt $o.","":"$N $vgrunt.",]),"mow":(["LIV":"$N $vmow $t.",]),"humph":(["":"$N $vgo \"Humph\"",]),"gpf":(["LIV":"$N $vfind a General Protection Fault in $p1 butt!!","":"Windows found a General Protection Fault in $p butt!",]),"booch":(["LIV":"$N $vtell $n1, \"Fermez la Booch!\"",]),"rockout":(["LIV":"$N $vgo to $t, \"Rock out with your cock out!\"","":"$N $vgo, \"Rock out with your cock out!\"",]),"10000":(["":"$N $vgo, \"10,000 or bust!\"",]),"coffee":(["LIV":"$N merrilly $vdance about $t, sprinkling coffee liberally on $t.","":"$N gleefully $vsip coffee from an insanely huge travel mug.",]),"moo":(["LIV":"$N $vmoo like a cow at $t.","STR":"$N $vmoo $o.","":"$N $vmoo.",]),"gtfa":(["LIV":"$N $vtell $t to go the fuck away.","":"$N $vgo the fuck away.",]),"joy":(["":"$N $vgo, \"Oh, Joy! I can hardly contain myself!\"",]),"mom":(["LIV":"$N $vsay to $t, \"Thanks, Mom.\"","":"$N $vcry for $p mommy!!",]),"wavie":(["LIV":"$N $vwavie $p armies at $t.","":"$N $vwavie $p armies.",]),"checkpants":(["LIV":"$N $vcheck $p1 pants.",]),"lpenis":(["":"LIMA: The mudlib that discovered that pluralize(\"penis\") was wrong",]),"jot":(["STR":"$N $vtry to start up jot, but $vfail miserably.","":"$N $vtry to start up jot, but $vfail miserably.",]),"myth":(["":"$N $vprove that the algorithm to get Myth to understand the halting problem's solution is indeed a myth.",]),"french":(["LIV":"$N $vpull $t in close and $vkiss $t passionately.","":"$N $vpoot ohn $p vehry behste Frehnche acsente!",]),"bogpenis":(["STR":"$N $vbogpenis $o.","":"$N $vbogpenis.",]),"clue":(["LIV":"$N $vhand $t a clue, but $n1 $v1have no idea what to do with it.","":"$N $vsay: Why doesn't he have a fucking clue?",]),"walkwind":(["":"$N $vsay, \"Man... I hate that walking-into-the-wind crap.\"",]),"blink":(["LIV":"$N $vblink at $t.","STR":"$N $vblink $o.","LIV STR":"$N $vblink at $t $o.","":"$N $vblink.",]),"snm":(["LIV":"$N $voffer to show $t $p proof of the s-n-m theorem.",]),"cute":(["":"$N $vsay, \"Cute Marie. Real cute.\"",]),"ruinplot":(["":"$N $vreveal that DARTH VADER is Luke's FATHER.",]),"freebsd":(["":"$N $vreference market research that shows choosey hackers choose FreeBSD.",]),"joe":(["STR":"$N $vtry to start up Joe, but $vget slapped in the face.","":"$N $vtry to start up Joe, but $vget slapped in the face.",]),"python3":(["":"$N $vnote how even $p goldfish can read Python.",]),"goo":(["":"$N $vgo, \"Goo goo!\"",]),"youre":(["LIV":"$N $vyell at $n1, \"Your not going too make me talk you're English!\"",]),"python2":(["":"$N $vnote how hard Guido's Python rocks $p world.",]),"12":(["":"$N $vsing '1, 2, Freddy's coming for you ...'",]),"11":(["":"$N $vsay, \"These go to eleven.\"",]),"comfort":(["LIV":"$N $vcomfort $t.","":"$N $vgo, \"I've got compassion running out of my nose, pal. I'm the sultan of sentiment!\"",]),"shrig":(["LIV":"$N $vshrig at $t.","STR at LIV":"STR LIV","STR":"$N $vshrig $o.","STR LIV":"$N $vshrig $o at $t.","":"$N $vshrig.",]),"whut":(["":"$N $vgo, \"Whut?\"",]),"flowerpower":(["":"$N $vput on $p0 t-shirt \"Flower Power\".",]),"yawnleg":(["":"$N $vyawnleg.",]),"grump":(["LIV":"$N $vgrump at $O.","STR":"$N $vgrump $o.","":"$N $vgrump.",]),"poopkid":(["":"$N $vsay, \"I just had a brown baby boy!\"",]),"boogie":(["":"$N $vget down to the jungle boogie!",]),"fidleleg":(["":"$N fucking $vidleleg.",]),"gob":(["":"$N $vgo, \"!goB\"",]),"hack":(["LIV":"$N $vconsider $t a hack in progress.","":"$N $vyell: Just hack it up!",]),"sulkleg":(["LIV":"$N $vsit in the corner and $vsulkleg, glareleging up at $t every now and then.","STR":"$N $vsulkleg $o.","":"$N $vsulkleg.",]),"rock1":(["LIV":"$N says, \"$t, you're a ROCK!\"",]),"doh":(["":"$N $vgo: d'oh!",]),"flip":(["LIV":"$N $vflip $t high up in the air. Whee!","WRD":"$N $vflip $o.","":"$N $vflip.",]),"nafaik":(["":"$N $vsay, \"Not As Far As I Know.\"",]),"cuss":(["LIV":"$N $vcuss at $t.","STR":"$N $vcuss $o.","":"$N $vcuss.",]),"kickstart":(["":"$N $vkickstart $p heavy machinery.",]),"aol":(["":"$N $vsay, \"ME TOO\"",]),"idiot":(["LIV":"$N $vpoint at $t stating, \"$Tp is our local village idiot.\"","":"$N $vare depriving a village somewhere of an idiot.",]),"quarter":(["LIV":"$N $vhand $t a quarter, and $vsuggest $t1s $v1call someone who cares.",]),"grind":(["":"$N $vemit a grinding noise as $n $vdrop the clutch while mentally shifting gears.",]),"sfwoo":(["":"$N $vgo, \"Super fucking WOO!\"",]),"yagr2e":(["":"$N $vyearn for yet another great random2 emote.",]),"gnu":(["LIV":"$N $vwonder if $n1 $v1are distributed under the GNU Public License.","STR":"$N $vwonder if $o is distributed under the GNU Public License.","":"$N $vare distributed under the GNU Public License.",]),"gnr":(["LIV":"$N used to love $t, but had to kill $t.",]),"headinj":(["LIV":"$N $vexamine $t for head injuries.",]),"fatality":(["LIV":"$N $vperform the super secret joystick movements, and $vremove $p1 nads via the eye socket!","":"$N $vboom, \"FATALITY!\"",]),"borednow":(["":"$N $vsay, \"Okay, $Np bored now.\"",]),"needfood":(["":"Gamedriver intones, \"$Np needs food badly!\"",]),"newsoulrox":(["":"$N $vnote how much newsouls rocks.",]),"police":(["LIV":"$N $vcall the police and $vask them to arrest $t. 10 police officers storm into the room and beat the living shit out of $t, and haul $t off to jail.",]),"lovin":(["LIV":"$N $vwhisper to $t, \"Give papa the lovin!\"",]),"nipkiss":(["LIV":"$N $vnipkiss $t.",]),"1000":(["":"$N $vgo, \"1000 or bust!\"",]),"shudder":(["LIV":"$N $vshudder in revulsion at $t.","STR":"$N $vshudder $o.","":"$N $vshudder.",]),"wander":(["STR":"$N $vwander $o.","":"$N $vwander.",]),"dontmove":(["":"$N $vscream, \"Any of you fucking pigs move, and I'll execute every mother-fucking last one of you!\"",]),"toofewemotes":(["STR":"$N $vcomplain about the small number of emotes that come with the LIMA lib. There isn't even an emote for '$o'!!!","":"$N $vcomplain about the small number of emotes that come with the LIMA lib.",]),"gheh":(["":"$N $vgrin, \"Heh heh heh...\"",]),"accuse":(["LIV STR":"$N $vaccuse $t of being a $o.",]),"crack":(["LIV":"$N $vcrack $t.","STR":"$N $vdeclare that $o is a poor substitute for a good rock of crack.","":"$N $vdeclare that cocaine is a poor substitute for a good rock of crack.",]),"offer":(["LIV STR":"$N $voffer $t $o.",]),"useless":(["":"$N $vexclaim 'Waving Legs is Futile, Emotes are irrelevant'",]),"nmuch":(["":"$N $vgo, \"Not much.\"",]),"taunt2":(["LIV":"$N $vtell $t, \"Go ahwahy ohr ah will tauhnt you ah secohnd tihme!\"",]),"dbsuxnum":([]),"pain":(["":"$N $vsing, 'Some get their kicks out of pain ... I know I do ... and I swear that it's true ... Yes, I get a ... kick ... out of you.'",]),"buttfuck":(["LIV":"$N $vinvade $p1 anus with $p tube of balogna!",]),"spoon":(["LIV":"$N $vspoon with $t.",]),"encourage":(["LIV":"$N $vencourage $t.",]),"dmz":(["":"$N $vnote that having to deal with a DMZ is like being stationed in Korea's DMZ.",]),"nunu":(["LIV":"$N $vgo, 'You're a nu-nu, $tp!'","":"$N $vgo: 'You're a nu-nu!'",]),"math":(["":"$N $vnote, \"If 2+2 is 4, and 2x2 is 4, what's the big deal about multiplication, anyway?\"",]),"freak":(["STR":"$N $vfreak $o.","":"$N $vfreak.",]),"rubhands":(["":"$N $vrub $p hands together mischeviously.",]),"misfirek":(["LIV":"$N $vcrown $t \"King of Misfires\"",]),"elvis":(["":"$N $vtry to start up elvis, but apparently the King has left the building.",]),"quake":(["STR":"$N $vquake $o.","":"$N $vquake.",]),"sighleg":(["":"$N $vsighleg.",]),"bawl":(["LIV":"$N $vbawl $p eyes out on $p1 shoulder.","STR":"$N $vbawl $o.","":"$N $vbawl.",]),"christmas":(["":"$N $vjump into the air and screams 'A very Merry Fucking Christmas to ya!'",]),"headbutt":(["LIV":"$N $vheadbutt $t.",]),"navie":(["LIV":"$N $vwavie $p navies at $t.","":"$N $vwavie $p navies.",]),"misery":(["":"$N $vwhine, \"Just Fix It!\"",]),"unhip":(["":"$N $vsay, \"Man, you're so unhip it's a wonder your bum don't fall off!\"",]),"dumbass":(["LIV":"$N $vgo to $t, \"You dumbass!\"","STR":"$N $vthink $o is a dumbass.","":"$N $vare a dumbass.",]),"gobble":(["":"$N $vgobble at the concept.",]),"logic":(["":"$N $vrefuse to speak with so many emotes available to $t10.",]),"dbog":(["":"$N $vgo, \"Double bog.\"",]),"piefuck":(["LIV":"$N $vtell $t to go fuck a pie.",]),"closed":(["":"[Connection Closed by Foreign Host]",]),"sheshot":(["":" @@@@ @@@@@@@ - @@@@ '_ @@@ __\\@ \\@ _\\\\ (/ ) @\\_/) |(__/ / /| \\___/ \"\"\"\"\"_| ,x *( |x \\ |x ) |/\\_____| | / / | / ( | /\\__\\ (__\\| | | |[* | [* |, \\ , \\ /|/ ,__ /|/ ",]),"sfbog":(["":"$N $vgo, \"Super Fucking Bog!!!!!!!!\"",]),"byte":(["LIV":"$N $vtell $t, \"Byte me!!!\"","":"$N $vgo, \"Byte me!\"",]),"wavep":(["":"$N $vwave at you.",]),"tweezer":(["LIV":"$N $vplease $t with a tweezer...",]),"evil":(["":"$N $vsprout little horns and a tail and $vturn into a cute little devil.",]),"deny":(["":"$N vigorously $vdeny it.",]),"notaste":(["LIV":"$N $vnote that $n1 $v1have no taste.",]),"daemonize":(["LIV":"$N $vturn $t into a daemon.",]),"squeeze":(["LIV":"$N $vsqueeze $t.","STR":"$N $vsqueeze $o.",]),"foff":(["LIV":"$N1 $v1say: Fuck off, im busy.",]),"declaw":(["LIV":"$N $vdeclaw $t.","STR":"$N $vdeclaw $o.","":"$N $vdeclaw.",]),"aalsfbog":(["":"$N $vgo, \"Above average little super fucking bog!\" (slightly larger than a little super fucking bog, which is larger than a fucking bog, but smaller than a super fucking bog)",]),"campfire":(["":"$N $vscream, \"What are we gonna do now, man? Sit around a campfire and sing songs?\"",]),"sitbitch":(["LIV":"$N $vtell $t to sit like the bitch that $n1s $v1are.",]),"foobar":(["":"$N $vthink $ns really fucked up this time.",]),"ignorant":(["":"A tiny wizard pops up and screams in $p face, \"YOU ARE THE MOST IGNORANT PERSON I HAVE EVER SEEN!!!\"",]),"booger":(["LIV":"$N $vsneeze, blowing a booger onto $t.","":"$N $vsneeze, blowing a booger onto the wall.",]),"ged9":(["LIV":"$N $vscream in $p1 face, \"HEY, STUPID, DIDN'T YOU KNOW THAT THERE IS NO SUCH THING AS A GREY ELEPHANT IN DENMARK ???\"",]),"fucken":(["LIV":"$N $vwhine, \"Stop fucken wit me, $N1, I swear I'm innocent!\"","":"$N $vwhine, \"Stop fucken wit me! I swear I'm innocent!\"",]),"ged8":(["":"$N $vsay, \"Finally, think of the color of that animal.\"",]),"sewage3":(["":"$N $vsay, \"It comes out of your ass, dumbass!\"",]),"ged7":(["":"$N $vsay, \"Take the second letter in the name of the country, and think of an animal that starts with that letter.\"",]),"ged6":(["":"$N $vsay, \"Now think of a country that starts with that letter.\"",]),"sewage2":(["":"$N $vsay, \"It comes out of your weed, dillweed!\"",]),"ged5":(["":"$N $vsay, \"Take the letter of the alphabet that corresponds to that number (a=1, b=2, etc).\"",]),"ged4":(["":"$N $vsay, \"Now take that number and subtract 5 from it.\"",]),"ged3":(["":"$N $vsay, \"You should have a two digit number. Add the two digits together.\"",]),"shoes":(["LIV":"$N $vtry to interest $t in a pair of concrete shoes.",]),"ged2":(["":"$N $vsay, \"Now take that number and multiply by 9.\"",]),"free":(["LIV":"$N $vhand $t a 'Get out of discussion FREE' card.",]),"ged1":(["":"$N $vsay, \"Pick a number between 2 and 9.\"",]),"shakeleg":(["LIV":"$N $vshakeleg $p head at $t.","":"$N $vshakeleg $p head.",]),"squeeshy":(["LIV":"$N $vsqueeze on $t and $vsay, \"Squeeshy!\"","":"$N $vlook somewhat squeeshy.",]),"tmicoder":(["LIV":"$N $vnote that $t $v1code just like a TMI'er.",]),"flex":(["LIV":"$N $vflex $p muscles in front of $t.","STR":"$N $vflex $o.","":"$N $vflex $p muscles.",]),"null":(["LIV":"$N $vram $t into /dev/null.",]),"peerm":(["LIV":"$N $vpeer into $p1 mouth.",]),"pounce":(["LIV":"$N $vpounce on $t.",]),"vim":(["":"$N $vtry to start up vim, but $vfail miserably.",]),"vote":(["STR":"$N desparately $vwant to vote \"$O\" ... but what the hell does $ns think this is? A fucking democracy?!",]),"ffinger":(["LIV":"$N $vimply with $p middle finger that $n $vwant $t to fuck off.",]),"sscratch":(["":"$N $vscratch $r secretly.",]),"35007":(["LIV":"$N $vnote how 35007 $t $v1are.",]),"downsize":(["LIV":"$N $vdownsize $n1 viciously, clearing $p1 desk into a trash bag and casting $n1o out on the street.",]),"balls":(["":"$N $vgo, \"I want to dip my BALLS in it!!\"",]),"fleg":(["":"$N $vgo, \"Fucking Leg.\"",]),"okie":(["LIV":"$N $vtell $t, \"Okie!\"","":"$N $vgo, \"Okie!\"",]),"flee":(["STR":"$N $vflee $o.","":"$N $vflee.",]),"shoelace":(["LIV":"$N $vtie $p1 shoelaces together.","LIV LIV":"$N $vtie $p1 shoelaces to $p2 shoes.",]),"wiggle":(["LIV":"$N $vwiggle $p bottom at $t.","STR":"$N $vwiggle $o.","":"$N $vwiggle $p bottom.",]),"raise":(["LIV":"$N $vraise an eyebrow at $t.","STR":"$N $vraise $o.","":"$N $vraise an eyebrow.",]),"death2":(["LIV":"$N $vshout, \"Die, $tp, DIE!!\"","STR":"$N $vshout, \"Die, $o, DIE!!\"",]),"handsup":(["LIV":"$N $vcommand $t, \"Reach for the skyyy...\"",]),"donut":(["":"$N $vdrool, \"Mmmmmm, forbidden donut...\"",]),"optimize":(["LIV":"$N $vdetermine $t $v1have no side effects, and $voptimize $t away.",]),"roids":(["LIV":"$Ts $v1drop $p1 pants. $N $vexclaim, \"Look, sir, roids!\"",]),"fcool":(["":"$N $vgo, 'Fucking COOL, man!'",]),"cowtip":(["LIV":"$N $vsneak up next to $t as $n1 $v1idle and $vtip $t over with one hard shove. THUD!!!",]),"snickerpenis":(["":"$N $vsnickerpenis.",]),"bcough":(["LIV":"$N $vgrab $p1 balls and $vsay, \"Cough.\"",]),"finger":(["":"$N $vgo, \"Finger.\"",]),"cool":(["LIV":"$N $vgo to $t, \"Cool!\"","":"$N $vgo, \"Cool!\"",]),"loser":(["LIV":"$N $vgo, \"You're a loser, $tp!!\"","":"$N $vgo, \"I'm a loser baby...\"",]),"cook":(["STR":"$N $vcook $o.","":"$N $vcook.",]),"nuke":(["":"$N $vstate, \"I say we nuke the site from orbit. Its the only way to be sure.\"",]),"meat2":(["STR":"$N $vmeat $o.",]),"thespian":(["":"$N $vannounce, \"I'm a thespian! That means I like women!\"",]),"prodigy":(["LIV":"$N $vnominate $t for a geek-luser spot in the next Prodigy ISP ad.",]),"fuck":(["LIV":"$N $vfuck $t hard from behind. God it feels good.","LIV STR":"$N $vlook $o confused.",]),"gypsy":(["LIV":"$N $vsell $t to the gypsies.",]),"ourmilk":(["LIV":"$N $vtell $t, \"No milk will ever be OUR milk.\"",]),"git":(["LIV":"$N $vaccuse $t of being a stupid git.","":"$N $vfeel like a stupid git.",]),"jig":(["":"$N $vdance a jig.",]),"sfboardleg":(["":"$N $vgo, \"Super fucking boardleg!\"",]),"pavlov":(["":"$N $vsay, \"Does Pavlov ring a bell?\"",]),"shh":(["LIV":"$N $vgo, \"Shhhh!\" at $t.","":"$N $vgo, \"Shhhh!\"",]),"candygram":(["":"$N $vknock on the door, \"Candygram!\"",]),"flesh":(["":"$N $vsay \"Bah! Merely a flesh wound! I've had worse!\"",]),"fearleg":(["LIV":"$N $vfearleg $t.","":"$N $vfearleg.",]),"koolaid":(["LIV":"$N $vshare $p Kool-Aid with $t.","":"$N $vhave drank the Kool-Aid.",]),"conn":(["":"Connection closed by foreign host.",]),"conditioner":(["":"$N $vproclaim, \"Conditioner is better! I make the hair silky and smooth!\"",]),"slobber":(["LIV":"$N $vslobber on $p1 face, just like Dino would.","":"$N $vslobber messily, like a big dog.",]),"pshaw":(["":"$N $vgo, \"Pshaw!\"",]),"mutter":(["LIV":"$N $vmutter at $t.","STR":"$N $vmutter \"$o.\"","":"$N $vmutter under $p breath.",]),"yogi":(["":"$N $vgo, \"Have no fear, Yogi's here!\"",]),"batman":(["LIV":"$N $vgroan, \"Must.... reach.... utility.... belt...\" to $t.","STR":"$N $vgroan, \"Must.... reach.... $o....\"","LIV STR":"$N $vgroan, \"Must.... reach.... $o....\" to $t.","":"$N $vgroan, \"Must.... reach.... utility.... belt...\"",]),"anus":(["":"$N $vexclaim, \"HOT ANUS!\"",]),"highfive":(["LIV":"$N $vhighfive $t.",]),"die":(["LIV":"$N $vscream at $t, \"DON'T YOU EVER FUCKIN' DIE!?!!?\"","STR":"$N $vdie $o.","":"$N $vdie.",]),"nike":(["":"$N just $vdo it.",]),"eyes":(["":"$N $vsay softly, \"I like the pretty eyes.\"",]),"dinner":(["":"$N $vsense a rumbling in $p tummy, and $vhead off for dinner.",]),"beexcellent":(["LIV LIV":"$N $vtell $t and $n2 to \"Be excellent to each other.\"","":"$N $vtell you to \"Be excellent to each other.\"",]),"bonnet":(["LIV":"$N $vare the only be in $p1 bonnet.",]),"sgi":(["":"$N $vsay \"SGI: Silly Gangreen Isotobes!!!\".",]),"hitler7":(["":"$N $vsay, \"And another good thing about Hitler: All the documentaries about the Holocaust show TONS of naked chicks!\"",]),"pigsqueal":(["LIV":"$N $vorder $t to squeal like a pig.","":"$N $vsqueal like a pig.",]),"fcomm":(["":"$N $vsay, \"What we have here is a failure to communicate.\"",]),"hitler6":(["":"$N $vsay, \"And another good thing about Hitler: The Holocaust museum in DC is just RAKING in the dough.\"",]),"nthreaten":(["LIV":"$N $vthreaten $t with a small tactical nuclear weapon.",]),"motor":(["LIV":"$T $v1bite your groin!",]),"bart":(["":"$N $vgo, \"I'm Bart Simpson, who the hell are you?\"",]),"lern":(["LIV":"$N $vthink thar $t shoyld lern totype.","":"$N $vlern totype.",]),"hitler5":(["":"$N $vsay, \"And another good thing about Hitler: Without him, there'd be no 'Diary of Anne Frank'. You can't have your cake and eat it too.\"",]),"explode":(["":"$N $vexplode! What a mess!",]),"hitler4":(["":"$N $vsay, \"And another good thing about Hitler: He only had one testicle, paving the way for people with only one testicle to exterminate races.\"",]),"hitler3":(["":"$N $vsay, \"And another good thing about Hitler: Without his crack medical staff, we never would have discovered that pregnant women can't give birth with their thighs sewn together.\"",]),"hitler2":(["":"$N $vsay, \"And another good thing about Hitler: He made the Jews wear that star. It looked like those chinese stars ninja use. Whether it's 1938 or 1985, chinese stars are cool.\"",]),"hanghead":(["":"$N $vhang $p head in shame!",]),"class":(["":"$N $vlook at $p watch and $vACK-$vwave-$vrun off to class.",]),"sfwaveleg":(["LIV":"$N super fucking $vwaveleg to $t.","STR":"$N super fucking $vwaveleg $o.","":"$N super fucking $vwaveleg.",]),"bark":(["LIV":"$N $vbark like a dog at $t.","STR":"$N $vbark $o.","":"$N $vbark.",]),"littlebitch":([]),"pride":(["LIV":"$N $vwonder if $t $v1have marched in a Gay Pride parade lately.","STR":"$N $vwonder if $o has marched in a Gay Pride parade lately.",]),"hughgrant":(["":"$N $vnote, \"I haven't seen an englishman take a blow like that since Hugh Grant!\"",]),"barf":(["LIV":"$N $vbarf all over $t.","STR":"$N $vbarf $o.","":"$N $vbarf.",]),"sister":(["LIV":"$N $vlike $t. $N1 can come over to $p house and fuck $p sister.","STR":"$N $vsay: $O tells you: Do you have a younger sister? Around 10-12 years old maybe?",]),"dontcallmefat":(["LIV":"$N $vsay to $t, \"God, damnit, don't call me fat, you buttfuckin' son of a bitch!\"","":"$N $vsay. \"God, damnit! Don't call me fat, you buttfuckin' son of a bitch!\"",]),"cowshit":(["LIV LIV":"$N $vnote: (__) <== $N1p /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $N2p ^^ ^^ ","WRD STR":"$N $vnote: (__) <== $O /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $O1 ^^ ^^ ","LIV STR":"$N $vnote: (__) <== $N1p /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $O ^^ ^^ ",]),"sticksandstones":(["":"$N $vnote that sticks and stones might break $p bones, but bullets tend to kill $t10.",]),"swave":(["":"$N $vwave stupidly... too early.",]),"impact":(["":"$N $vbrace for impact.",]),"lightbulb":(["":({"You're about as smart as a burnt out lightbulb. ","A lightbulb hesitantly flickers and comes on in $p head. ",}),]),"sfrmleg":(["STR":"$N super fucking $vremoveleg $o!",]),"nogleg2":(["":"$N $vnogleg.",]),"point":(["LIV":"$N $vpoint at $t.","OBJ":"$N $vpoint at the $o.","STR":"$N $vpoint at $o.","LIV STR":"$N $vpoint at $t and says, \"$o\".","":"$N $vpoint at $r, \"Me?\"",]),"pace":(["STR":"$N $vpace $o.","":"$N $vpace.",]),"yes":(["":"$N $vexclaim, \"YES!\"",]),"smack2":(["LIV":"$N $vsmack $t upside the head with $p 2x4!",]),"carpet":(["LIV":"$N $vwhistle innocently as $n $vsweep $t under the carpet.",]),"foam":(["":"$N $vfoam at the mouth.",]),"tongue":(["LIV":"$N $vstick out $p tongue at $t.","":"$N $vstick out $p tongue.",]),"lwoo":(["":"$N $vgo, \"Little woo.\"",]),"whml":(["LIV":"$N $vwhml $t.",]),"mfm":(["":"$N $vgo, 'Moo Fucking Moo!'",]),"flap":(["":"$N $vflap $p wings. Flap flap flap flap!!",]),"smrevolve":(["":"$N $vsmile, and the world revolves around $n90o.",]),"dielaff":(["":"$N $vfall on the floor and slowly $vchoke to death laughing....",]),"skidmarks":(["":"$N $vfart, accidently leaving behind skidmarks, and some leaked fluid.",]),"fedex":(["":"$N $vget $r fedexed",]),"sex":(["LIV":"$N $vtake $t away for wild, passionate sex. $Ts $v1wish it could last forever!!",]),"dgd":(["":"$N $vwave around a sign, reading \"Castrated LP driver for sale\"",]),"sunblock":(["LIV":"$N $vtell $t to put on 2000 sunblock, or $ts $v1are going to have a REALLY BAD day.","":"$N $vpoint out that if you aren't wearing 2000 sunblock, you're going to have a REALLY BAD day.",]),"trynot":(["":"$N wisely $vspeak, \"Try not! Do.. or do not! There is no try.\"",]),"att2":(["":"$N $vsay, \"Ever been sodomised by a vaseline smeared chainsaw on full throttle? You will. And the company that will bring it to you? AT&T.\"",]),"thank":(["LIV":"$N $vthank $t.","OBJ":"$N $vthank $o.","STR":"$N $vthank $o.","LIV STR":"$N $vthank $t $o.","":"$N $vthank someone, $n $vare just not sure exactly whom to thank.",]),"trend":(["STR":"$N $vgo, \"$O\", in an attempt to start yet another series of emotes.",]),"flaf":(["LIV":"$N fucking $vlaf at $t.","":"$N fucking $vlaf.",]),"netgods":(["LIV":"The gods of the net have deemed that $t will maintain a connection for no more than 10 minutes at a time.","":"The gods of the net have deemed that $n will maintain a connection for no more than 10 minutes at a time.",]),"sep":(["":"$N $vshout, \"IT'S SOMEBODY ELSE'S PROBLEM!!\"",]),"pet":(["LIV":"$N $vpet $t like the monkey that $ts $v1are.","":"$N $vpet an imaginary animal and $vholler, \"We don't need no stinkin standard pet!\"",]),"kosh":(["":"$N $vphilosophize, \"Truth is a three edged sword.\"",]),"amiga2":(["":"$n $vmourn the death throes of the Amiga.",]),"poiuytrewq":(["":"$N must really be bored to have typed \"qwertyuiop\" backwards.",]),"mudsluts":(["LIV":"$N $vnote that if one could get STDs through a modem, $t1 would $v1have died years ago.",]),"eden":(["":"$N $vremark that if ignorance is bliss, then this place must be Eden.",]),"jfc":(["":"$N $vpromise to run on any platform except Windows, MacOS and Unix, but $vexecute at the speed of molasses in January.",]),"commentcode":(["":"$N $vsay, \"Why should I comment my code? If it was hard to program then it should be hard to understand.\"",]),"robocoder":(["":"$N $vswitch to robocoding mode.",]),"emoteaproposisareallylongnameforsuchausefulcommand":(["":"$N $vwonder out loud if anyone actually types out 'emoteapropos' instead of aliasing it, while trying to make it appear as if $n $vare not one of those idiots.",]),"kiss":(["LIV":"$N $vkiss $t.","LIV STR":"$N $vkiss $t $o.","":"$N $vgo, \"Keep It Simple, Stupid!\"",]),"lkwow":(["":"$N $vwow at it all. (tm Seminexus Lakitu, all rights reserved.)",]),"coke":(["":"$N $vare a Coke addict.",]),"man2":(["LIV":".",]),"pea":(["LIV":"$N $vthrow peas into $p1 mouth.",]),"poontang":(["":"If $n $vare gonna get $p balls blown off for a word, $p word is poontang.",]),"option":(["":"$N $vthink sleep would be a good option right about now.",]),"afp":(["STR":"$N $vhold up one finger, \"Away From the Palm for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the Palm for a sec...\"",]),"afo":(["STR":"$N $vhold up one finger, \"Away From the OmniSky for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the OmniSky for a sec...\"",]),"meh":(["":"$N $vgo: \"Meh.\" (somewhere in between \"Feh\" and \"Teh\")",]),"apologize":(["LIV":"$N $vapologize to $t.","STR":"$N $vapologize, '$o'","LIV STR":"$N $vapologize to $t $o.","":"$N $vapologize.",]),"beards":(["":"$N $vsay, \"We're so smooth, we've even got beards on our hands!\"",]),"welcomeback":(["LIV":"$N $vsing to $t, \"Welcome back, the dreams were your ticket out. Welcome back, to that same old place that we laughed about.\"","":"$N $vsing, \"Welcome back, the dreams were your ticket out. Welcome back, to that same old place that we laughed about.\"",]),"aforce":(["LIV":"$N $vwavie $p air forces at $t.","":"$N $vwavie $p air forces.",]),"deputy":(["LIV":"$N $vtell $t, \"You're my favorite deputy!\"",]),"afk":(["STR":"$N $vhold up one finger, \"Away From the Keyboard for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the Keyboard for a sec...\"",]),"yoda":(["LIV":"$N $vadvise $t, \"Yoda, you seek Yoda!\"","":"$N $vstate, \"Yoda, you seek Yoda!\"",]),"megaho":(["":"$N $vsay, \"It's Megaboz, not Megaho!\"",]),"rsfearedk":(["":"$n $vgo, \"Rather sorta feared, but just kinda.\"",]),"crackneck":(["":"$N $vtwist $p stiff neck awkwardly to the sound of a bone wrenching CRACK!",]),"yuck":(["LIV":"$N $vgo, \"Yuck!!!! It's $t!!!\"","STR":"$N $vgo, \"Yuck!!!! $o!!!\"","":"$N $vgo, \"Yuck!!!!\"",]),"curse":(["LIV":"$N $vplace a thousand curses on the house of the Dread Pirate $tp.","":"$N $vlet out a string of curses that would make a drunken sailor blush in shame.",]),"weld":(["LIV":"$N $vweld $p1 butt-cheeks shut!",]),"jed":(["STR":"$N $vtry to start up jed, but $vfail miserably.","":"$N $vtry to start up jed, but $vfail miserably.",]),"overshareoff":(["":"The overshare light is: on [OFF].",]),"quack":(["LIV":"$N $vquack like a duck at $t.","STR":"$N $vquack $o.","STR LIV":"$N $vquack $o at $t.","":"$N $vquack.",]),"gel":(["":"$N $vgo, \".geL\"",]),"dew":(["LIV":"$N $vhand $t a Mountain Dew.","":"$N $vgo to get another Mountain Dew.",]),"hrmph":(["LIV":"$N $vhrmph at $t.","STR":"$N $vhrmph $o.","":"$N $vhrmph.",]),"objtest":(["OBJ":"$N $vfoo $o.","OBS":"$N $vfoo $o.",]),"eyebrow":(["LIV":"$N $vlook $t and does the eyebrow thingy :)","":"$N $vraise an eyebrow curiously.",]),"beeksux":(["":"$N $vshout \"BEEK ROCKS!\" at the top of $p lungs, then quickly $vrealize what $n $vhave said, and promptly $vshut the fuck up.",]),"knuckleheads":(["LIV LIV":"$N $vmake like Moe from the Three Stooges, and $vsmack the heads of $t and $t2 together, shouting \"You knuckleheads!\".",]),"heartandsoul":(["LIV":"$N $vtell $t, \"Everybody knows you're the heart and soul of Lima\"",]),"pdb":(["LIV":"$N $vguess $n1 would rather be alive than free. Poor dumb bastard.","":"$N would rather be alive than free. Poor dumb bastard.",]),"kirk":(["":"Overacting, $n dramatically $vflip open $p communicator and $vcry, \"Beam me up, Scotty!\"",]),"pda":(["":"$N $vgive a public service announcement: Marriage is a wonderful thing. You gotta be faithful. If you can't be faithful try to limit it to say... 2 or 3 hookers a week. If you can't limit it to 2 or 3 hookers a week at least try to not bring them home and have sex with them on the kitchen table. If you can't not bring them home and.... (N B C)",]),"rename":(["":"$N $vthink it's about time to rename all the files in the mudlib again.",]),"smirk":(["LIV":"$N $vsmirk at $t.","STR":"$N $vsmirk $o.","":"$N $vsmirk.",]),"smirj":(["":"$N $vsmirj koppely.",]),"lbog":(["":"$N $vgo, \"Little Bog.\"",]),"molest2":(["":"$N $vnote that Tigran's justification for having a second child is twice the sex.",]),"kickass":(["LIV":"$N $vyell, \"Shut up, $tp! I'm gonna have to kick your ass!\"","":"$N $vgo, \"Kick ass!\"",]),"r2hunt":(["":"$N $vhunt for all the good random2 emotes.",]),"omaha":(["":"$N $vare drawn to the lure of ordering ohmaha steaks from Onsale!",]),"blick":(["LIV":"$N $vlick $t all over.",]),"yawnfast":(["LIV":"$N $vyawn and quickly $vclose $p mouth before $t can throw peas...","":"$N $vyawn and quickly $vclose $p mouth before anyone can throw peas...",]),"blahtest":(["STR":"$O: $N $vblah",]),"mbetter":(["":"$N $vfeel much better now.",]),"forcefuck":(["LIV LIV":"$T1s $v1fuck $t12 hard from behind. God, it feels good.",]),"squark":(["":"$N $vsquark.",]),"make":(["":"$N $vtry to do a 'make', but $vfail miserably.",]),"chickenfucker":(["":"Tomorrow night another chicken gets it.",]),"slave":(["LIV LIV STR":"$N $vsell $n1 to $n2 for $o.","LIV":"$N $vbeg $t: I wanna be your love slave!",]),"kirk2":(["":"$N $vcommand Ensign Rodriguez to go explore that perilous cave. Seconds later you hear Ensign Rodriguez's dying scream. $N $vsay, \"Dammit bones...what...have I done...\".",]),"java":(["":"$N $vnote that Java would be okay if it weren't so damn SLOW!",]),"magician":(["":"$N $vgo, \"Magician kicks assssssssssssss!\"",]),"sexslave":(["LIV":"$N $vput a note on $p1 back: \"$Np's Sex Slave.\"","LIV LIV":"$N $vput a note on $p1 back: \"$N2p's Sex Slave.\"",]),"otay":(["":"$N $vmake an 'O' with $p thumb and index finger and $vsay, \"O Tay!\"",]),"kicka":(["LIV":"$N $vkick $p1 ass.",]),"offmycase":(["LIV":"$N $vtell $t, \"Off my case, toilet face!\"","":"$N $vsay, \"Off my case, toilet face!\"",]),"bang":(["LIV":"$N $vbang $p1 head against the nearest wall.","":"$N $vbang $p head against the nearest wall.",]),"error":(["LIV":"$N $vmake fun of $t for causing a runtime error. What a doofus.",]),"thatkicks":(["":"$N $vsay, \"Dude, that kicks ass!\"",]),"mci":(["":"$N $vput on $p \"MCI is fucking up the Internet\" T-shirt and $voffer them around.",]),"brazil":(["LIV":"$N $vpromote $t to Information Retrieval.",]),"elevator":(["LIV":"$N $vwatch $t push the Down button in an elevator that's on the ground floor.",]),"vbf":(["":"$N $vsquat down in a most undignified pose. A painful look invades $p face and the next thing you know the area is covered in $p vaginal blood fart.",]),"cultured":(["":"$N $vwant to meet stimulating and interesting people of an ancient culture, and kill them.",]),"add":(["":"$N $vnote there isn't a '$n' emote and proceeds to add one.",]),"horror":(["":"$N $vhuddle in a corner whimpering \"The Horror .. the Horror.\"",]),"mentos":(["LIV":"$N $vpop a Mentos into $p mouth, and $vgive $t a smiling thumbs up!","":"$N $vpop a Mentos into $p mouth, and $vgive a smiling thumbs up!",]),"bloat":(["LIV":({"$N $vwonder if $t is bloated.","$N $vwonder if $t is bloated.","$N $vwonder if $t are bloated.",}),"STR":"$P0 $o bloats horribly.","":"$N $vbloat and $vswell like a balloon.",]),"jerky":(["LIV":"$N $vhit $T with a ratchet and $vshout \"Hey jerky! Open your fuck'n ears!\"",]),"pbr":(["":"$n $vsay, \"Heineken? Fuck that shit! Pabst Blue Ribbon!!\"",]),"copyright":(["LIV":"$N $vaccuse $t of being copyrighted software.","":"$N $vare copyrighted software.",]),"wouldfather":(["LIV":"$N would have fathered $n1, but $p1 mother is dead.",]),"crack2":(["":"$N $vsay, \"My uncle says that smoking crack is kinda cool\"",]),"attack":(["LIV":"With brutal force, $n $vattack $t.",]),"whip":(["LIV":"Dressed in crotchless leather, $n $vcrack $p whip on $p1 exposed back.","LIV STR":"Dressed in $o, $n $vcrack $p whip on $p1 exposed back.","":"You hear the sound of a whip snapping in the background.",]),"penis":(["":"$N $vgo, \"Penis.\"",]),"night":(["LIV":"$N $vwave at $T and $vsay, \"Goodnight!\"",]),"yah":(["":"$N $vgo, 'Oh yah?'",]),"whim":(["LIV":"On a whim, $n $vbeat the living shit out of $t.",]),"dheh":(["":"$N $vgo, \"Double Heh.\"",]),"handraise":(["LIV":"$Ts $v1raise $p1 hand.","":"$N $vraise $p hand.",]),"dogbert":(["LIV":"$N $vwave $p wand at $t and $vgo, \"Out out!! You demons of stupidity!!\"","":"$N $vwave $p wand and $vgo, \"Out out!! You demons of stupidity!!\"",]),"reconleg":(["":"$N $vhave reconnectleged.",]),"smirkl":(["":"$N $vsmirkl (smirk, smirkle, and smirkleg exist, so why not?).",]),"nodu":(["":"$N $vnod understandingly.",]),"ack":(["":"$N $vgo: ----/| \\ o,O| =(-)= ACK!!!!! U THPTH!!!!!!!",]),"tooold":(["LIV":"$N $vinform $t that $n $vare not young enough to know everything.","":"$N $vgo, \"I'm too old for this s@#t!\"",]),"kool":(["":"$N $vsay, \"That's kool and the gang.\"",]),"paw":(["LIV":"$N $vpaw meekly at $t.",]),"sal":(["":"$N $vsay, \"And San Diego Bob, if you're watching, stop hanging around Johnny's house, you're scarring his ma!\"",]),"groan":(["LIV":"$N $vgroan at $t.","STR":"$N $vgroan $o.","":"$N $vgroan.",]),"pat":(["LIV":"$N $vpat $t on the head.","LIV STR":"$N $vpat $t on the $o.","":"$N $vpat $p head and $vrub $p tummy.",]),"nuzzle":(["LIV":"$N $vnuzzle $t warmly.",]),"legleg":(["STR":"$N $vlegleg $o.","":"$N $vlegleg.",]),"fplump":(["":"$N $vexclaim, \"I'm not fat! I'm festively plump!\"",]),"recurse":(["":"$N $vrefer to the \"recurse2\" emote.",]),"sad":(["":"$N $vlook sad.",]),"ad&d":(["":"$N $vnote that $n should add AD&D combat rules to Lima so it will have complex combat rules, but annoying enough that most people will have to rewrite it in order to open their mud to players.",]),"pah":(["":"$N $vgo 'Pah!'",]),"gutter":(["LIV":"$N $vfind $p1 mind floating around in a gutter. $Ns $vgive it a solid kick!","":"$N $vadmit that $p mind is in the gutter.",]),"ball":(["LIV":"$N $vnotice a ball and chain around $p1 ankle.",]),"map":(["LIV STR":"$N $vmap $t through the '$o' function.",]),"man":(["LIV":"$N $vsay, \"$t isn't much of a man, is he?\"","OBJ":"$N $vsay, \"$t isn't much of a man, is he?\"","STR":"Lib tells $n, \"We don't have a \"man\" command here, you UNIX weenie!\"","":"Lib coyingly tells $n, 'What do you want me to \"man\", big boy?'",]),"afkgod":(["":".",]),"vlsfbog":(["":"$N $vgo, \"Very little super fucking bog!\" (see the naming schemeleg if confused)",]),"grenade":(["LIV":"$N $vlob a laughing-gas grenade at $t.","":"$N $vroll on the floor laughing due to a laughing-gas grenade misfire.",]),"test2":(["":"$_$_$_TESTING$_$_$_A$_$_$_HUNCH$_$_$_...",]),"test":(["LIV":"$N $vbop $t on the head and $vsay test THIS! test testing ","OBJ":"$N $vtest $p new emote on $o","STR":"$N $vtest $o","":"Gamedriver bops $N on the head and says test THIS! test testing ",]),"vlfschemeleg":(["":"$N $vboggle at the very little fucking naming schemeleg.",]),"runover":(["LIV":"$N $vdrive $p tank right over $t! *SPLAT*!",]),"jam":(["STR":"$N $vjam to \"$O\"","":"$N $vjam.",]),"offduty":(["":"$N $vpoint to the 'off duty' sign above $p head.",]),"4letter":(["":"$N $vnote that two of the original Lima mudlib writers chose 4 letter words as names, and $vwonder if this somehow explains the frequency with which such words occur in the souls.",]),"gar":(["LIV":"$N $vgar at $t.","STR":"$N $vgar $o.","":"$N $vgar.",]),"abc":(["":"$N $vstand and $sing: A B C D E F G H I J K LMNOP Q R S T U V W X Y and Z Now I know my A B C Won't you come and play with me?",]),"jag":(["":"$N $vsay, \"Just a Guess.\"",]),"spock":(["LIV":"$N $vraise one eyebrow at $t.","LIV LIV":"$N $vraise one eyebrow at $t1, and $vraise the other at $t2.","":"$N $vraise one eyebrow.",]),"sayto":(["LIV STR":({" $N $vsay to $t: $o."," $N $vsay to $t: $o."," -> $N $vsay to $t: $o. <--",}),]),"wtfu":(["LIV":"$N $vscream in $p1 face, \"WAKE THE FUCK UP!\"","":"$N $vscream, \"WAKE THE FUCK UP!!!\"",]),"soggy":(["":"$N $vlook around and $vsay, \"Damn, I HAVE A SOGGY WEENER!\"",]),"razz":(["LIV":"$N $vgive $t the bronx cheer!",]),"pancake":(["LIV":"$N $vflip a pancake on $p1 head.","LIV STR":"$N $vflip a pancake on $p1 $o.","":"$N $vflip a pancake into the air.",]),"getalife":(["LIV":"$N $vclone /std/life.c and $vgive it to $t. Somehow, $ts $v1were missing one.",]),"illin":(["LIV":"$N $vsay to $t, \"You be illin'!\"",]),"zifnabrox":(["LIV":"$N $vare compelled to note that Zifnab rocks $t so much it hurts.","":"$N $vfind $r compelled to note how much Zifnab ROX!",]),"gag":(["LIV":"$N $vstuff an old sock into $p1 mouth to gag $t. $N1s $v1chew and $v1swallow with delight.","STR":"$N $vgag $o.","":"$N $vgag.",]),"nozone":(["STR":"$N $vdeclare this to be a No-$O zone.",]),"repeat":(["":"$N $vsing, \"We must repeat!\"",]),"nod3":(["LIV":"$N $vnod at $t nod nod.","":"$N $vnod nod nod.",]),"aav":(["LIV":"$N $vthink of $n1 as the Anal Avenger.","":"$N $vdisappear into a telephone both. After a few moments, $n $vemerge as the Anal Avenger!",]),"nod2":(["":"$N $vnod. $N $vnod knowingly.",]),"slut":(["LIV":"$N $vgo, \"Shut up, $tp! Your mother's a slut!\"","STR":"$N $vgo, \"Shut up, $o! Your mother's a slut!\"",]),"king":(["LIV":"$N $vdeclare $t to be the King of Rock (there is none higher).","":"$N $vdeclare $r to be the King of Rock (there is none higher).",]),"gr2e":(["":"$N $vnote that that was a \"Great Random2 Emote [tm]\"",]),"spice":(["LIV":"$N $vwelcome the newest member of the Spice Girls' crew: $Ts Spice!","STR":"$N $vwelcome the newest member of the Spice Girls' crew: $o Spice!",]),"tshake":(["LIV":"$N $vshake $p1 tentacle.",]),"tease":(["LIV":"$N $vtease $t.","":"$N $vare -=SUCH=- a tease.",]),"idclip":(["":"$N $vtype, 'idclip'. \"No Clipping Mode On.\"",]),"lothar":(["LIV":"$N $vnote that $ts $v1do not walk with other men. $Ts $v1are $Tp, of the Hill People!","STR":"$N $vdo not walk with other men. $N $vare $O, of the Hill People!","":"$N $vdo not walk with other men. $N $vare Lothar, of the Hill People!",]),"lpcman":(["LIV":"$N $vbeg $t \"Please write a LPC Programming Manual, please....\" ","":"$N $vintone , \"I Need a Super Mega Fucking LPC Programming Guide !!!!!\"",]),"forgot":(["":"$N $vgo, \"Mm.. Heh heh, Oh yeah, I forgot.\"",]),"lips2":(["LIV":"$N $vsay to $tp, \"Your lips are like two sweet twizzlers coated with penis-butter.\"",]),"gurgle":(["STR":"$N $vgurgle $o.","":"$N $vgurgle.",]),"ja3":(["":"$N $vsay something stupid and $vargue it to death.",]),"juggle":(["STR":"$N $vjuggle $o.","":"$N $vjuggle.",]),"tciyf":(["":"THE COMPUTER IS YOUR FRIEND.",]),"zifnab":(["LIV":"$N1 $v1say: Morning.","":"Zifnab says: Morning.",]),"pantsdown":(["LIV":"$N $vtell $t, \"Come out with your pants down!!\"","":"$N $vgo, \"Come out with your pants down!!\"",]),"grumble":(["LIV":"$N $vgrumble at $t.","STR":"$N $vgrumble $o.","LIV STR":"$N $vgrumble at $t about $o.","":"$N $vgrumble.",]),"annoy":(["LIV":"$N $vannoy $t. What a pest!","":({"You annoying little twit. Why don't you get a life? ","$N $vare annoying. ",}),]),"idlefest":(["":"$N $vdeclare this mud is an IdleFest!",]),"black2":(["LIV":"$N $vtell $t, \"None, none more black.\"",]),"beekalone":(["LIV":"Beek sings to $t, \"I alone love you! I alone tempt you!\"",]),"iqupgrade":(["LIV":"$N $vnote that $t $v1need to upgrade $p1 I.Q. a few points, and $vsuggest $tr $v1listen to more classical music.",]),"sniffline":(["":"$N $vsniff a line of coke.",]),"gaffaw":(["STR":"$N $vgaffaw $o.","":"$N $vgaffaw.",]),"megabo":(["LIV":"$N $vsay to $n1, \"I don't see a 'z'! Do you see a 'z'? No 'z' here!\"","":"It's Megaboz, not Megabo!",]),"violin":(["":"$N $vplay the world's smallest violin.",]),"exploreui":(["LIV":"$N $vteach $t how the fine art of exploring UI.","":"$N $vnote that double clicking, shift & select, right clicking, and exploring menus are good ways of finding things in a UI.",]),"howl":(["STR":"$N $vhowl $o.","":"$N $vhowl.",]),"erection":(["":"$N $vsay, \"I'd like to say a few words about the presidential erection.\"",]),"twoo":(["":"$N $vgo, \"Tiny woo.\"",]),"alanis":(["":"$N $vwant to have that baby with Alanis.",]),"tmiadmin":(["":"$N $vnote that being a TMI admin is like being the captain of the Titanic.",]),"bigfart":(["":"$N $vshoot three feet upward, as a horrible stench wafts your way.",]),"petunia":(["":"$N $vfeel, for just a moment, like a pot of petunias, and $vthink \"Oh no, not again.\"",]),"wtdu":(["STR":"$N $vnote that $o is way too damn useful.",]),"groovy":(["":"$N $vgo, \"Groovy!\"",]),"thisisafuckingloongemote":(["":({"$n go: This is a ****** long emote.","$n goes: This is a ****** long emote.",}),]),"fmgwacs":(["":"$N $vsay, \"Fuck me gently with a chain saw!\"",]),"bait":(["":"$N $vwait with baited breath. A fish swims by.",]),"whew":(["":"$N $vgo, \"Whew!\"",]),"fluids":(["LIV":"$N $vwarn $t about $p1 precious bodily fluids.","":"$N $vsay something semi-coherent about preserving $p0 precious bodily fluids.",]),"wheel":(["LIV":"$N $vthink $t $v1like reinventing the wheel.",]),"whet":(["":"$N $vwhet a razorblade.",]),"dickhead":(["":"$N $vadmit to being a dickhead.",]),"mobydick2":(["":"$N $vwonder if the \"mobydick2\" emote should be mobydicked since it contains two rude words.",]),"mobydick1":(["":"$N really $vthink that given the quality of that last emote, we need to do a mobydick.",]),"fugly":(["LIV":"$N $vcall $t a \"Fugly, skanky ho!!\"","":"$N $vgrumble under $p breath, \"Fugly, skanky...\"",]),"when":(["":"Gamedriver tells $n, \"When? Real soon now, I hope.\"",]),"linux9":(["":"$N $vtry to install Linux 2.1.23893 but Visual C++ keeps giving the strangest errors.",]),"milesdavis":(["":"$N $vexclaim, \"If peeing your pants is cool, consider me Miles Davis!\"",]),"fireball":(["LIV":"$N $vcast a fireball at $t!",]),"yourmomsfat2":(["LIV":"$N $vtell $t, \"Your mom's so fat, her nickname is 'DAAAAMN!'\".",]),"swamp":(["":"$N $vgo, \"Swamp.\"",]),"linux8":(["":"$N $vgo, \"Linux: faster than a speeding window.\"",]),"leia":(["":"$N $vsay \"You came in that thing? You're braver than I thought!\"",]),"code":(["":"$N $vsay, \"If it were meant to be read, it wouldn't be called CODE.\"",]),"fwhee":(["STR":"$N $vfwhee $o.","":"$N $vgo, \"Fucking whee.\"",]),"linux7":(["":"$N $vgo, \"Linux: twelve distributions, twelve times the fun!\"",]),"linux6":(["":"kernel panic - linux6 emote halted",]),"ugly":(["LIV":"$N $vtell $t, \"Boy, you sure are ugly.\"","":"$N $vgo, \"Boy, you sure are ugly.\"",]),"linux5":(["":"$N $vgo, \"Linux - the operating system for people so unsuccessful they can't afford a $120 licence.\"",]),"linux4":(["":"Linux4 is an extended emote; please see the logical emotes linux5-12.",]),"apologise":(["LIV":"$N $vapologise to $n1.",]),"beekson":(["":"$N $vwonder, \"Beek's on at this time? What drugs is that boy on now?\"",]),"linux3":(["":"$N $vgo, \"Linux, the OS for people with IQs higher than 95.\"",]),"groove":(["":"$N $vgroove to the smooth tunes.",]),"linux2":(["":"$N goes: Linux, the OS for people who have a fucking clue.",]),"wooleg":(["":"$N $vwooleg!",]),"weep":(["STR":"$N $vweep $o.","":"$N $vweep.",]),"whee":(["LIV":"$N $vgo, 'WHEE', and $vtwirl around $t.","STR":"$N $vgo, 'WHEE', and $vtwirl around $o.","":"$N $vgo, 'WHEE!'",]),"blargh":(["":"$N $vblargh.",]),"smile":(["LIV":"$N $vsmile at $t.","LIV LIV":"$N $vsmile at $t and $t2.","at LIV STR":"=LIV STR","at LIV":"=LIV","STR at LIV":"$N $vsmile $o at $t.","STR":"$N $vsmile $o.","LIV STR":"$N $vsmile at $t $o.","STR LIV":"$N $vsmile $o at $t.","":"$N $vsmile.",]),"dead":(["LIV WRD":"$N1 $v1have gone $o-dead.","":"$N $vsay, \"And I say, I'm dead... and I MOVE.\"",]),"sister2":(["STR":"$N $vsay: $O tells you: Could you send me pictures? Or is she yours already?",]),"vlbog":(["":"$N $vgo, \"Very Little Bog.\"",]),"wrapleg":(["LIV":"$N $vwrap $p leg around $t very sensually.",]),"crown":(["LIV":"$N $vcrown $p0 last checker and $vkick $p1 ass.",]),"ultrabog":(["":"$N $vgo, \"Ultra-Bog!\" (For those who can.)",]),"sure":(["LIV":"$N $vtell $t, \"SUUUUUUUUUURE....\"","":"$N $vgo, \"SUUUUUUUURE....\"",]),"lngt":(["LIV":"$N $vturn to $t and $vsay, \"Let's not go there.\"","":"$N $vsay, \"Let's not go there.\"",]),"smoke":(["LIV":"$N $voffer $t a smoke.","STR":"$N $vsmoke $o.","":"$N $vlight up a smoke.",]),"scottish":(["LIV":"$N $vdeclare $t to be, \"not Scottish.\"","STR":"$N $vsay, \"$O is definitely not Scottish.\"","":"$N $vexclaim, \"If it's not Scottish, it's CRAP!\"",]),"rtuit":(["LIV":"$N $vgive $t a Round TUIT.","":"$N $vget a Round TUIT.",]),"poland1938":(["":"$N $vnote, \"I haven't seen a jew run like that since Poland, 1938!\"",]),"crotches":(["":"$N $vgo, \"Women have crotches? I'll be damned.\"",]),"whack2":(["LIV":"$N $vwhack $t.",]),"linux12":(["":"$N $vnote that Linux renders ships, while NT renders ships useless.",]),"linux11":(["":"$N $vgo, \"Linux: Okay if you just want to use it for a web server, a file server, a print server, a router, a firewall, a database server, a DNS server, a mailserver, a news server or something of _that_ kind.\"",]),"linux10":(["":"$N $vgo, \"Linux: At least it has Java support. That's _something_.\"",]),"byep":(["":"$N $vwave to you and $vsay, \"Goodbye!\"",]),"nudeph":(["LIV":"$Vare $n1 challenging $p0 constitutional right to make nude phone calls?",]),"socool":(["":({"You are SOOOOOOOO.....k00l!","$N thinks $n is so....cool, but $n is so....WRONG!",}),]),"worms":(["":"$N $vopen another can of worms and $voffer them around.",]),"artmuseum":(["":"$N $vrun up the steps of the Philadelphia Art Museum and $vjump up and down, looking like a complete moron.",]),"womble":(["LIV":"$N $vwomble at $t.","STR":"$N $vwomble $o.","":"$N $vwomble.",]),"lisp2":(["":"$N $vnote that a Lambda-mu Driver running LPLisp would rule!!!",]),"cool24":(["":"$N $vgo, \"When you's cool, you's cool twenty-four hours a day!\"",]),"gaze":(["LIV":"$N $vgaze lovingly into $p1 eyes.","":"$N $vgaze at the blue sky above.",]),"award":(["LIV":"$N $vgive $t the \"Award for Least Amount of Coding.\"",]),"bitchsqueal":(["LIV":"$N $vmake $t squeal like a bitch.",]),"mcfly":(["LIV":"$N $vtap $t on the head and $vyell, \"Hello?! McFly?! Anyone Home?!\" ",]),"darkstaff":(["":"$N wants to be like darkstaff and order omaha steaks from onsale right now, damnit.",]),"toomanysouls":(["":"$N $vsay: According to the soul_d, we have too many bloody souls.",]),"abuse":(["LIV":"$N $vabuse $t horribly, and $vknow it's deserved.",]),"psychobilly":(["":"$N $vscreech, \"It's a PSYCHOBILLY FREAK-OUT!\"",]),"sfboogle":(["":"$N super fucking $vboogle at the super fucking concept!",]),"retort":(["":"$N $vsay, \"Well, allow me to retort!\"",]),"cornholio":(["":"$N $vgo, \"I AM CORNHOLIO!\"",]),"assfuck":(["LIV":"$N $vbet $n1 $v1are the kind of person that would fuck someone in the ass and not even have the god damned common courtesy to give him a reach around.",]),"crap":(["LIV":"$N $vtake a big ol' crap on $t!","STR":"$N $vcrap $o.","":"$N $vcrap.",]),"knuth":(["":"$N $vsay: \"I think that Deathblade would be able to answer.\" ... This, of course, is the Lima version of \"I think you can find that in Knuth.\"",]),"7up2":(["":"$N $vgo, \"Heads up, 7up.\"",]),"tinkle":(["LIV":"$N $vtinkle on $t.","":"$N $vgo, \"Tinkle, tinkle, tinkle!\"",]),"would":(["":"$N would if $n could, you son of a bitch!",]),"jane":(["LIV":"$N $vsay, \"$tp, you ignorant slut!\"","":"$N $vsay, \"Jane, you ignorant slut!\"",]),"4am":(["":"$N $vnote that it is after 4am, when most of the most puerile emotes (well, at least most of the emotes) were added.",]),"boggle1":(["":"$N $vbug $p eyes out, just like the time $n discovered $n'd made a 100 error, not in $p favor, at rent time!",]),"encore":(["LIV":"$N $vshout \"Encore, Encore!\" and $vclap $t on the back.","":"$N $vshout \"Encore, Encore!\"",]),"sewage":(["":"$N $vsay, \"Sewage doesn't come out of the ground. It comes out of your butt, buttmunch!\"",]),"claw":(["":"$N $vgo, \"THE CLAAAW!\"... \"The claw is our master!\"",]),"suckle":([]),"h7a":(["":"$N $vnote that Heaven 7 is at 3.0 alpha, and is *still* a piece of crap...",]),"nogleg":(["LIV":"$N $vdo a backwards behind the ear nogleg at $t.","STR":"$N $vdo a backwards behind the ear nogleg $o.","":"$N $vdo a backwards behind the ear nogleg.",]),"rockon":(["LIV":"$N $vscream, \"$tp, ROCK ON!!!\"","":"$N $vscream, \"ROCK ON!!!\"",]),"world":(["":"The world revolves around $n.",]),"clap":(["LIV":"$N $vclap for $t.","STR":"$N $vshout: WHOOP!! ( $o )","":"$N $vclap.",]),"bye3":(["":"$N $vsay, \"Don't let the disconnect screen hit your ass on the way off!!\"",]),"idlein":(["":"$N $vstate 'You have to be idle, to be in'.",]),"blahleg":(["LIV":"$N $vblahleg at $t","":"$N $vblahleg",]),"tmisucks":(["":"$N $vthink that TMI is an accronysm for Too Many Idiots.",]),"ciao":(["":"$N $vclaim \"I didn't do it! it's not my fault! I didn't _mean_ to crash the mud!!!!",]),"okleg":(["":"$N $vokleg!",]),"becool2":(["LIV":"$N $vsay to $t, \"Tell that bitch to be cool!\"",]),"leer":(["LIV":"$N $vleer at $t.",]),"hurt":(["LIV":"$N $vscream at $t, \"Ow! That hurts, you buttlicker!\"",]),"fwhap":(["LIV":"$N fucking $vwhap $t!",]),"win95":(["LIV":"$N $vthink $n1 $v1are as reliable as an alpha copy of Win95.","STR":"$N $vthink $o is as reliable as a alpha copy of Win95.","":"$N $vsay, \"Windows 95 < MacOS '87!\"",]),"pigfucker":(["LIV":"$N $vsay, \"Don't say pigfucker in front of $tp!\"","":"$N $vsay, \"Don't say pigfucker in front of Jesus!\"",]),"what":(["STR":"$N $vgo, \"What $o?\"","":"Gamedriver $vtell $n, \"I don't know what's going on. Nobody talks to me anymore.\"",]),"cackle":(["LIV":"$N $vthrow $p head back and $vcackle with glee at $t.","STR":"$N $vthrow $p head back and $vcackle $o!","":"$N $vthrow $p head back and $vcackle with glee!",]),"hiss":(["LIV":"$N $vhiss at $t.","STR":"$N $vhiss $o.","":"$N $vhiss.",]),"ten4":(["":"$N $vgo, \"10-4, good buddy!\"",]),"lamer":(["LIV":"$N $vdeclare $t to be a total lamer.","":"$N $vare such a lamer!",]),"whap":(["LIV":"$N $vwhap $t.","LIV with OBJ":"$N $vwhap $t with $p $o.","STR":"$N $vwhap $p $o.","LIV STR":"$N $vwhap $t $o.",]),"glips":(["":"$N $vsay, \"Sure, God's all powerful, but does he have lips?\"",]),"notidle":(["LIV":"$N $vdecide that $ts $v1are not idle, so $n calmly $vinform $t that $ts $v1need to go get a snack.",]),"crush":(["LIV":"$N $vcrush $t.",]),"wlove":(["LIV":"$N $vwhisper to $t sweet words of love.",]),"wonder":(["LIV":"$N $vwonder about $p1 sanity.","STR":"$N $vwonder $o.","LIV STR":"$N $vwonder about $p1 $o.","":"$N $vwonder.",]),"cross":(["LIV":"$N $vcross $p1 fingers.","":"$N $vcross $p fingers.",]),"gawk":(["LIV":"$N $vgawk at $t.",]),"boring":(["LIV":"$N $vaccuse $t of being boring.","":"$N $vgo 'Boooorrrinnngggg!!!!!'",]),"egrin":(["OBJ":"$N $vgrin evilly",]),"deftarget":(["LIV":"$N $vsuggest that all emotes be targetted at $t by default.","":"$N $vsuggest that all emotes be targetted at $t10 by default.",]),"wobble":(["LIV":"$N $vwobble $t until $ts $v1fall over.","STR":"$N $vwobble $o.","":"$N $vwobble.",]),"sniffle":(["LIV":"$N $vsniffle at $t.","at LIV":"$N $vsniffle at $t.","STR":"$N $vsniffle $o.","":"$N $vsniffle.",]),"alarm":(["STR":"$N $vturn on the alarm. \"AROOGA! AROOGA! $O! $O! AROOGA! AROOGA!\"",]),"admit":(["STR":"$N $vadmit that it was, in fact, $n who added the $o emote.",]),"buttspeak":(["":"$N $vexclaim, \"My bunghole will speak now!\"",]),"rumble":(["LIV LIV":"$N $vpunch $t, but then $vduck out of the way. $N1 $v1try to hit $t10, but $v1miss, hitting $t12 square in the face. $N2 $v2are caught off guard, and $v2are sent sprawling!",]),"crism":(["LIV":"$n $vgo, \"%^RED%^Muhahahahahaaaaaa!!!!!%^RESET%^\" at $t.","":"$n $vgo, \"%^RED%^Muhahahahahaaaaaa!!!!!%^RESET%^\"",]),"ibog":(["LIV":"$N $vbog at $p1 ignorance.",]),"thbeek":(["LIV":"$N $vmake funny hip thbeeking motions at $t.","":"$N $vmake funny hip thbeeking motions.",]),"guess":(["STR":"Somebody in the audience yells out '$1'",]),"twit":(["LIV":"$N $vnominate $t for \"Twit of the Year.\"",]),"simul":(["LIV":"$N $vaccuse $t of having a simul fixation.",]),"stumble":(["":"$N $vstumble.",]),"feature":(["LIV":"$N $vinform $t that that isn't a bug, it's a feature.","":"$N $vpoint out that that is not a bug, it's a feature.",]),"fatass":(["LIV":"$N saw $t on Geraldo: \"$tp: Fat ass\"",]),"meister":(["LIV":"$N $vsay: Listen to the $T Meister(tm)!",]),"docsearch":(["STR":"$N $vsearch for documentation.",]),"buttplug":(["LIV":"$N $voffer a buttplug to $t.","":"$N $vreinsert $p buttplug.",]),"bitchslap":(["LIV":"$N $vbitchslap $t!",]),"sink":(["":"$N $veval the kitchen_sink() func, which returns 1.",]),"picard":(["LIV":"$N $vcommand $t, \"Make it so.\"","":"$N $vcommand, \"Make it so.\"",]),"dkiss":(["LIV":"$N $vpull $t close and $vkiss $t for what seems an eternity, deeply and passionately.",]),"sing":(["STR":"$N $vsing, '$o'","":"$N $vsing a Neil Young song.",]),"grinleg":(["LIV":"$N $vgrinleg at $t.","":"$N $vgrinleg.",]),"2infinity":(["":"$N $vextend $p arms and $vshout, \"To infinity, and beyond!\"",]),"idleleg":(["STR":"$N $vidleleg $o.","":"$N $vidleleg.",]),"back":(["":"$N $vmumble, \"There ain't no comin' back... there ain't no comin' back...\"",]),"applaud":(["LIV":"$N $vapplaud $t.","LIV STR":"$N $vapplaud $t $o.","":"$N $vapplaud.",]),"infinite":(["":"$N $vgo, \"Infinite or bust!\"",]),"puddin":(["":"$N $vgo, \"You may ask yourself, where did they get the money for 236 dollars worth of puddin? Shhhhhhh!!! Don't you worry your pretty little head!\"",]),"tickle":(["LIV":"$N $vtickle $t.","LIV STR":"$N $vtickle $t $o.","":({"You love to be tickled, don't you! Muhahahaha!! ","$N loves to be tickled...why don't you oblige $no? ",}),]),"opium":(["LIV":"$N $vopium $t.","":"$N $vdecide, \"You know what we need? We need some opium!\"",]),"wiggle2":(["LIV":"$N $vwiggle $p1 bottom.",]),"midrow":(["":"$N $vsay: \"Sit in the middle and get the best of both worlds!\"",]),"aboot":(["LIV":"$N $vgive $t a boot to the ass!",]),"upgrade":(["LIV":"$N $vshout at $t, \"Upgrade or DIE!\"","":"$N $vshout, \"Upgrade or DIE!\"",]),"stare":(["LIV":"$N $vstare at $t.","OBJ":"$N $vstare at $o.","STR at LIV":"=STR LIV","STR":"$N $vstare $o.","STR LIV":"$N $vstare $o at $t.","":"$N $vstare.",]),"goodisdumb":(["":"$N $vstate, \"Evil will always triumph over good, because good is dumb!\"",]),"phthph":(["":"$N $vgo phthph!",]),"sulk":(["LIV":"$N $vsit in the corner and $vsulk, glaring up at $t every now and then.","STR":"$N $vsulk $o.","":"$N $vsulk.",]),"threaded":(["":"$N $vgasp when $n $vnotice that $n $vare multi-threaded!",]),"toetape":(["LIV LIV STR":"$N $vtape $p1 toe to $p2 $o.","LIV":"$N $vtape $p1 toe to $p1 nose.","LIV LIV":"$N $vtape $p1 toe to $p2 nose.","LIV WRD LIV WRD":"$N $vtape $p1 $o to $p2 $o1.","STR":"$N $vtape $p toe to $p $o.","LIV STR":"$N $vtape $p1 toe to $p1 $o.","":"$N $vtape $p toe to $p nose.",]),"baby":(["":"$N $vgo, \"Yeah, baby!\"",]),"shrugleg":(["LIV":"$N $vshrugleg at $t.","STR":"$N $vshrugleg $o.","":"$N $vshrugleg.",]),"humpty":(["":"$P0 name is Humpty, pronounced with an 'umpty'.",]),"h3h":(["":"$N $vgo, \"h3h.\"",]),"nogpenis":(["":"$N $vnog a little penis.",]),"attention":(["":"$N $vwhimper, \"I just want attention...\".",]),"cletus":(["LIV":"$N $vsing, \"Some folk'll never lost a thumb and then, some folk'll. Like $tp the slack-jawed yokel.\"","":"$N $vexclaim, \"I'm Cletus the slack-jawed yokel!\"",]),"windows":(["STR":".","":"$N $vexclaim, \"I don't do Windows!\"",]),"caper":(["":"$N $vcaper about the room.",]),"smirkpenis":(["STR":"$N $vsmirkpenis $o.","":"$N $vsmirkpenis.",]),"bogbert":(["":"$N $vwave $p wand and go, \"Bog Bog!! You demons of stupidity!!\"",]),"n2o":(["":"When $N $vare offered drugs, $n just $vsay, \"N2O!\"",]),"whimper":(["LIV":"$N $vwhimper at $t.","STR":"$N $vwhimper $o.","":"$N $vwhimper.",]),"snickerdoodle":(["LIV":"$N $vsnickerdoodle at $T.","STR":"$N $vsnickerdoodle $o.","":"$N $vsnickerdoodle.",]),"bigfatfuck":(["LIV":" $N $vsay to $t, \"You're such a fat fuck, $tp, when you walk down the street, people go, 'God DAMNIT! That kid is a BIG FAT FUCK!'\"","STR":"$N $vsay to $O, \"You're such a fat fuck, $O, when you walk down the street, people go, 'God DAMNIT! That kid is a BIG FAT FUCK!'\"",]),"mudos":(["":"Gamedriver $vask $n, \"What? WHAT?!\"",]),"chokeit":(["LIV":"$N $vtell $t, \"Choke your own chicken, dude! What's wrong with you?\"",]),"needsex":(["LIV":"$T $v1need sex badly. $Ts $v1are about to die!",]),"camel":(["":"$N $vpet $p pet-camel. You feel a tear in the corner of your eye.",]),"aber":(["":"$N $vnote that abers are Funnnnn.",]),"braindead":(["LIV":"%^CHANNEL%^[announce]%^RESET%^ $Ts $v1have gone brain-dead.",]),"hoom":(["":"$N $vdo $p best GK Chesterton/Gidion Fell/Gilbert (Fiddler's Green) impression, and $vHOOM mightily.",]),"jackets":(["":"The guys in white jackets come and take $n away.",]),"netbsd":(["":"$N $vnote that the rumors of NetBSD's difficulty of installation are highly exaggerated.",]),"h2o":(["":"Now that is what $n $vcall high quality H2O!",]),"codemachine":(["LIV":"$N $vnote how $t $v1are a code-pounding machine!","":"$N $vare a code-pounding machine!",]),"grandeur":(["":"$N $vbegin to get delusions of Grandeur.",]),"rtfdl":(["LIV":"$N $vtell $t, \"RTFDL, bonehead.\"","":"$N $vscream, \"RTFDL!\"",]),"kids":(["":"$N $vexclaim, \"And it would have worked, too, if it weren't for those dastardly kids!\"",]),"advdnd":(["":"$N $vnote that $n should add AD&D combat rules to Lima so it will have something complex, but annoying enogh that most people will hate enough to make them rewrite a good chunk of it anyway. Fumble rules will be sufficiently annoying and tough to take out $n $vthink.",]),"monologue":(["LIV STR":"$N $vlaunch into a long, boring monologue on the topic of $o and $vrefuse to stop till $t $v1say something.","":"$N $vlaunch into a long, boring monologue until someone does or says something.",]),"measure":(["LIV":"$N $vmeasure $p1 thickness.","LIV STR":"$N $vmeasure $p1 $o.","":"$N $vmeasure $p1 thickness.",]),"rape":(["":"$N $vholler, \"RAPE! RAPE!\"",]),"0cool":(["":"$N $vwish $n were Zero Cool...",]),"gasp":(["LIV":"$N $vgasp at $t.","STR":"$N $vgasp $o.","LIV STR":"$N $vgasp at $t $o.","":"$N $vgasp.",]),"dance2":(["LIV":"$N $vsweep $t across the dance floor.","":"$N $vsweep $r across the dance floor.",]),"hello":(["LIV LIV":"$N $vsay to $n1, \"Oh? So THAT'S how it is, IS IT? Say hello to $n2p but not to me?? Bastard.\"",]),"fragile":(["LIV":"$N $vmark $t, \"Extremly fragile, handle with care.\"",]),"congrat":(["LIV":"$N $vcongratulate $t.",]),"rtfcl":(["":"$N $vgo, \"Read The Fucking ChangeLog\"",]),"hump":(["LIV":"$N $vhump $p1 leg furiously.","OBJ":"$N $vhump $o's leg furiously.",]),"pout":(["LIV":"$N $vpout at $t.","STR":"$N $vpout $o.","":"$N $vpout.",]),"forget":(["LIV":"$N $vforget about $t.","STR":"$N $vforget $o.","LIV STR":"$N $vforget about $t $o.","":"$N $vforget.",]),"fkick":(["LIV":"$N fucking $vkick $t.",]),"biggot":(["":"$N $vdo not look down on niggers, kikes, wops, or greasers. They are all equally worthless in $p eyes.",]),"molest":(["LIV":"$N $vmolest $t. It brings back shocking images of Tigran molesting his baby boy.",]),"cracker":(["":"$N $vscream \"A cracker is not a hacker (d00d)\"",]),"kick":(["LIV":"$N $vkick at $t.","LIV LIV":"$N $vjump up in the air and $vkick $n1 and $n2 simultaneously.","OBJ":"$N $vkick at $o.","STR":"$N $vkick $o.","LIV STR":"$N $vkick $t $o.","":"$N $vkick.",]),"suit":(["LIV":"$N $vdon $p asbestos suit in preparation for $p1 assault.","":"$N $vdon $p asbestos suit in preparation for Beek's assault.",]),"shakes":(["":"At the height of withdrawal, $N $vstart to get the shakes.",]),"sneeze":(["LIV":"$N $vsneeze all over $t.","STR":"$N $vsneeze $o.","":"$N $vsneeze.",]),"movealong":(["LIV":"$N $vmotion to $t, \"Move along.\"",]),"wishbone":(["LIV LIV":"$N and $n1 both grab one of $p2 legs and $vpull till you hear a sickening *SNAP!* (Wishbone Baby!!)",]),"crono":(["":"Crono needs the win95 driver",]),"babble":(["LIV":"$N babble at $t spraying $t with drool.","LIV STR":"$N $vcommence a long, boring monologue on the subject of $o, and $refuse to stop till $T $v1say something.","":"$N $vbabble like an idiot.",]),"ruffles":(["":"$N $vsay, \"r-r-rrruffles have r-r-rrridges!\"",]),"chodaboy":(["LIV":"$N declares, \"I am Orgazmo. $T $v1are my side-kick, Choda Boy!\"",]),"w00":(["":"$N $vgo, \"W00 W00!\"",]),"happyfunball":(["LIV":"$N $vcall upon the MUD gods to destroy $t for taunting HappyFunBall(tm).","":"$N $vshout, \"Do not taunt HappyFunBall(tm)!\"",]),"bonecrush":(["LIV":"$N $vhit $t with a bonecrushing sound!",]),"shebitch":(["LIV":"$N $vmumble to $t: Yo, she-bitch... come get some.","":"$N $vmumble: Yo, she-bitch... come get some.",]),"spooky":(["":"$N $vgo, \"Damn, that's spooky!\"",]),"hell8":(["":"$N $vwonder if the sequel to Heaven 7 will be named Hell 8.",]),"extol":(["STR":"$N $v extol the virtues of $o.",]),"feud":(["":"$N $vshout, \"SURVEY SAYS!\" BZZZZZZZZZZZZZZZZZZT....",]),"slimemold":(["":"$N $vsay, \"It wasn't an accident, it was an attack!\"",]),"torture":(["LIV":"$N $vtorture $t.",]),"addict":(["LIV":"$N $vare addicted to $t.",]),"slogan":(["":"$N $vnote that the official Lima slogan is, \"It isn't bad, but it isn't doc'd\".",]),"nodpenis":(["":"$N $vnodpenis.",]),"netscape":(["":"$N $vtry to start Netscape, the king of newsreaders (*cough* *cough* *cough*), but $vfail.",]),"pity":(["LIV":"$N $vthrow $t a pity party. 'Awwwwwwwww...'","OBJ":"$N $vtake extreme pity on the $o.",]),"sausage":(["LIV":"$N $vgive $t a sausage.",]),"towel":(["LIV":"$N $vnote that $ts $v1aren't the sort of person who knows where $p1 towel is.","LIV LIV":"$N $vnote that $ts $v1are the sort of person who knows where $p2 towel is.",]),"software":(["LIV":"$N $vsay to $t, \"Nice software!\"",]),"reddragon":(["":"$N $vwait patiently for Red Dragon to go up again.",]),"thousandemotes":(["":"Not only $vdo $n know over a thousand emotes, $n can even use them in conversation!",]),"hold":(["LIV":"$N $vhold $t tightly, never wanting to let go.",]),"throttle":(["LIV":"$N $vthrottle $t!",]),"woody":(["":"$N $vhave been sportin' wood since the bicentennial.",]),"happyg":(["LIV":"$N $vyell at $t, \"The Price is WRONG, bitch!\"","":"$N $vyell, \"The Price is WRONG, bitch!\"",]),"fyi":(["STR":"$N $vgo \"for your information: $o\"","":"$N $vgo \"For your information:\"",]),"cluebus":(["LIV":"$N $vgo, \"$T, here's a token; take a ride on the Clue Bus!\"",]),"asleep":(["LIV":"$N $vrealize that $t $v1are not just idle, but $v1are really fast asleep at $p1 keyboard.",]),"sfshrugleg":(["":"$N $vgo, \"Super fucking shrugleg!\"",]),"rodneyking":(["":"$N $vnote, \"I haven't seen a beating like that since Rodney King!\"",]),"win2001":(["":"$N $vgo, \"Windows 2001: A Blue Screen Odyssey.\"",]),"leglegleg":(["LIV LIV":"$N $vleg at $t1 and $t2",]),"shake2":(["LIV":"$N $vshake $t vigorously back and forth.",]),"antispam":(["STR":"$O: Take note. You are spamming. Spamming is the repetition of the same phraase. This has been an automatic anti-net abuse feature provided by those turing hackers @Lima Bean.",]),"ditto":(["LIV":"$N $vditto what $ts said.","":"$N $vditto.",]),"cleveland":(["":"$N $vshout, \"HELLO, CLEVELAND!\"",]),"theh":(["":"$N $vgo, \"Triple Heh.\"",]),"pose":(["STR":"$N $vpose $o.","":"$N $vpose.",]),"cya":(["LIV":"$N $vgo to $t, \"See ya... Wouldn't want to be ya!\"","":"$N $vsay, \"See ya... Wouldn't want to be ya!\"",]),"macaccel":(["":"$N $vnote the best way to accelerate a Macintrash is 9.8 m/sec^2.",]),"purr":(["LIV":"$N $vcrawl up into $p1 lap and $vpurr like a cat.","STR":"$N $vpurr $o.","":"$N $vpurr.",]),"tricorder":(["":"$N $vwhip out $p tricorder, but $vare disappointed to find no signs of intelligent life in the area.",]),"testemoteblah":(["LIV LIV":"$N $vraise one eyebrow at $t1, and $vraise the other at $t2.",]),"crime":(["LIV":"$N $vgo, \"$p1 so bad, it's a crime.\"","":"$N $vgo, \"I'm so bad, it's a crime.\"",]),"piss":(["LIV":"$N $vpiss on $p1 leg.","OBJ":"$N $vpiss on the $o.","":"$N $vpiss on $r.",]),"boomstick":(["":"As if this were \"Army of Darkness\", $n $vstate, \"Yeah. Alright you primitive screwheads, listen up. See this? THIS... is my *BOOM*STICK.\"",]),"fontfix":(["":"$N just $vreport bugs, $vdo not fix them.",]),"twitch":(["":"$N $vtwitch briefly.",]),"oggle":(["LIV":"$N $voggle at $p1 body.","":"$N $voggle at the concept. Shapely!",]),"lfagreeleg":(["":"$N $vgo, \"Little fucking agreeleg.\"",]),"mudsex":(["STR":"$N $vsay: Get a load of this: $O tells you: where's the gratuitous sex and violence?",]),"meritbadge":(["STR":"$N $vare still working on $p merit badge in '$o'.","LIV STR":"$N $vsuggest $ts $v1spend more time working on $p1 merit badge in '$o'.",]),"amiga":(["":"$N $vcelebrate the rebirth of the Amiga.",]),"pork":(["LIV":"$N $vgo: $t, the other white meat!",]),"lwi":(["LIV":"$N $vinform $t, \"Live With It.\"","":"$N $vintone, \"Live With It.\"",]),"badlag":(["":"$N $vexclaim, \"Holy mother of lag, batman!\"",]),"emotemachine":(["LIV":"$N $vnotice that $ts $v1are an emote-adding machine!","":"$N $vare an emote-adding machine!",]),"tkiss":(["LIV":"$N $vkiss $t tenderly on the lips.",]),"pore":(["":"$N $vsay, \"Pore.\" WTF?",]),"becool":(["LIV":"$N $vtell $t, \"Bitch, be cool!\"","STR":"$N $vtell $O, \"Bitch, be cool!\"","":"$N $vgo, \"That would be cool! Huh-huh.\"",]),"quote":(["WRD STR":"$N $vquote $O: \"$O1\"","STR":"$N $vquote, \"$O\"",]),"fagreeleg":(["LIV":"$N fucking $vagreeleg with $t.","":"$N fucking $vagreeleg.",]),"qwerty":(["":"$N $vare too lazy to type all of \"qwertyuiop\".",]),"subjective":(["":"$N $vmutter something about people who don't understand subjective case.",]),"xpoke":(["LIV":"$N $vpoke $t in the tummy with force!",]),"245":(["":"$N $vrelate the interesting fact that the LIMA soul takes up more disk space than the 2.4.5 mudlib.",]),"sign":(["STR":"$N $vhold up a sign, reading \"$o.\"","":"$N $vhold up a sign, reading \"This space intentionally left blank.\"",]),"grimace":(["LIV":"$N $vgrimace at the very thought of life with $t.","STR":"$N $vgrimace $o.","":"$N $vgrimace.",]),"diku2":(["":"$N $vexpound on the incredible lameness of Dikus.",]),"sigh":(["LIV":"$N $vlook at $t and $vsigh.","STR":"$N $vsigh $o.","":"$N $vsigh.",]),"assume":(["":"$N $vmake that lame ASS-U-ME joke. You wish $n would just fall dead.",]),"junkie":(["":"$N $vare a chrome junkie.",]),"signs":(["":"$N $vshake $p magic eight ball, and $vcome up with \"Signs Point To No.\"",]),"scamper":(["LIV":"$N $vscamper about, taunting $t.","":"$N $vscamper about.",]),"dressup":(["LIV":"If $n were dressed in clothes like $p1, $n would have to kick $p0 own ass.",]),"freeload":(["":"$N $vfreeload shamelessly.",]),"spock2":(["":"$N $vraise the other eyebrow.",]),"wornout":(["":"$N $vare as worn out as a cucumber in a convent.",]),"smirkleg":(["LIV":"$N $vsmirkleg at $t.","STR":"$N $vsmirkleg $o.","":"$N $vsmirkleg.",]),"gigleg":(["LIV":"$N $vgigleg at $t.","STR":"$N $vgigleg $o.","":"$N $vgigleg.",]),"ow3":(["LIV":"$N $vtry to replace $p1 window manager with OpenWindows","STR":"$N $vtry to start up OpenWindows on a $o.","LIV STR":"$N $vtry to start up OpenWindows on $p1 $o.","":"$N $vtry to start up OpenWindows, on a 'dumb terminal' ???.",]),"elite":(["LIV":"$N $vsay, \"d00D, $tp, U R 3133+3!\"","STR":"$N $vsay, \"d00D, $o, U R 3133+3!\"","":"$N $vsay, \"d00D 3y3'|\\/| 3133+3!\"",]),"special":(["":"$N $vgo, \"Well, isn't that special?\"",]),"freewoman":(["LIV":"$N $vadvise $t to enjoy the moment. $T got a date with a beautiful woman without paying for it.",]),"pocketkiss":(["LIV":"$N $vsneak $p0 hands into $p1 back pockets and $vdraw $t close for a long, passionate kiss.",]),"jack":(["":"$N $vgo, \"I *AM* the PUMPKIN KING!!!\"",]),"rsia":(["LIV":"$N $vask $t if $p1 release schedule is affected.",]),"september":(["":"$N $vnote that September 1 comes twelve times a year since AOL came online.",]),"snowball":(["LIV":"$N $vpelt $t with a snowball! *SPLAT*",]),"overhead":(["LIV":"$N $vwatch $p joke sail over $p1 head.","":"$N $vwatch $p joke sail over the head of $p audience.",]),"slack":(["":"$N $vare Slack Slack Slack Slack, and $n $vdon't give a fuck.",]),"eotd":(["STR":"$N $vvote for '$o' as the Emote of the Day [tm].","":"$N $vvote fot that as the Emote of the Day [tm].",]),"smokin":(["":"$N $vsay, \"SSSSSMMMMOKIN'!!\"",]),"rub":(["LIV":"$N $vrub $p1 anus.","STR":"$N $vrub $o.","":"$N $vrub $p tummy.",]),"math2":(["":"$N $vnote, \"There isn't its just addition in base 2.\"",]),"plick":(["LIV":({"$N $vgive $t a passionate licking. $N $vfeel like $n could $vdo this forever.","$N $vgive $t a passionate licking.","$N $vgive $t a passionate licking. $T $v1wish it would go on forever.",}),]),"nodleg":(["LIV":"$N $vnodleg at $t.","STR":"$N $vnodleg $o.","":"$N $vnodleg.",]),"weepsilent":(["STR":"$N $vcrawl into the corner and $vweep silently, muttering '$o.... $o...' over and over under $p breath.","":"$N $vcrawl into the corner and $vweep silently, muttering 'rape.... rape...' over and over under $p breath.",]),"tripon":(["LIV":"$N $vtrip on $n.",]),"elisp":(["":"$N $vsays: Elisp, the macro language from hell.",]),"noblowemote":(["":"$N $vnote while the soul is quite racy in places, at least there is no 'blow LIV' emote.",]),"next":(["":"$N $vshout, \"NEXT!\"",]),"babble2":(["":"$N $vbabble incoherently about macarel and rainclouds.",]),"3000":(["":"$N $vsay, \"3000 or bust!\"",]),"huzzah":(["":"$N $vgo HUZZAH! (which is Bumpkin's word, he says)",]),"gdmf":(["LIV":"$N $vscream in $p1 face, \"YOU STUPID DUMB-SHIT GOD-DAMN MOTHERFUCKER!!\"","":"$N $vscream, \"YOU STUPID DUMB-SHIT GOD-DAMN MOTHERFUCKER!\"",]),"destone":(["WRD WRD":"$N $vsing, \"$O users logged into the MUD, $o users logged in! Dest the most idle, kicking him off, $o1 users logged in!\"",]),"ultima":(["LIV":"$N $vsay to $o, \"Thou hast lost an eighth.\"","":"$N hast lost an eighth.",]),"blackheli":(["":"$N $vare abducted by the men in the black helicopters.",]),"mudlibname":(["":"$N $vnote that Lima MUDs aren't allowed to change their mudlib name until at _least_ 1500 of their emotes are original.",]),"cup":(["":"$N $vgo, \"CUP!\"",]),"poop":(["LIV":"$N $vsay, \"Yeah, we call $tp 'Sir Poops-a-lot'!\"","":"$N $vgo, \"Poop!\"",]),"prod":(["LIV":"$N $vprod $t into action.",]),"tatoo":(["STR":"$N $vshow you $p \"$o\" tatoo.","LIV STR":"$N $vshow $t $p \"$o\" tatoo.",]),"sue2":(["LIV":"$N $vsue $n1 for $35 million.",]),"yawnpussy":(["":"$N $vyawnpussy.",]),"rain":(["":"$N $vsay, \"It can't rain all the time.\"",]),"fnog":(["":"$N fucking $vnog, nog, nog, nog, nog!",]),"outline":(["LIV":"$N $vdraw a chalk outline around $p1 raped and bloodied body.",]),"stain":(["LIV":"It looks to $t0 like the best part of $t ran down the crack of $p1 mama's ass and ended up as a brown stain on the mattress.",]),"pooh":(["":"$N $vpooh.",]),"order":(["LIV":"Gamedriver asks $t, \"Would you like fries with that?\"","":"Gamedriver asks $n, \"Would you like fries with that?\"",]),"tear":(["":"A tear $vdrop from $p eye",]),"plop":(["LIV":"$N $vplop down on the comfy sofa next to $t and $vscoot really close... (heh, heh)","OBJ":"$N says the addemote docs STILL are WRONG!!!! Only bug reported it 10 times...",]),"punt":(["LIV":"$N drop $vkick $p1 ass all the way to Kansas.","STR":"$N $vpunt $o.","":"$N $vdrop back 10 and $vpunt.",]),"rst":(["":"$N $vgo: ----/| \\ o,O| =(-)= RST!!!!! U THPTH!!!!!!!",]),"raid":(["":"$N $vput on $p best raiding gear and $vbegin to connect to MUDs looking for emotes to steal.",]),"cplusplus":(["":"$N $vsay, \"C++ == OOP--\"",]),"smirkpsswd":(["":".",]),"disguise":(["LIV":"$N $vhand $t a Sherlock Holmes costume to disguise the fact that $tr has no clue.",]),"punk":(["":"$N $vsay, \"Fucking punk!\"",]),"mutterover":(["":"$N $vmutter over $p breath.",]),"drakhar":(["":"$N $vhave another question ....",]),"homer":(["":"$N $vsay, \"Oh Lisa, everyone knows vampires are make believe. Just like Elves, Gremlins, and Eskimos.",]),"ftp":(["STR":"$N $vattempt to 'ftp' to $O (or was that ftp.x-rated.pics.com)?","":"$N $vattempt to invoke the 'ftp' command, but $vfail miserably.",]),"pascal":(["":"$N $vnote that Pascal isn't a language, it's a creative way of writing book reports.",]),"flickoff":(["STR":"$N $vgo: _____ |_ _| n (O O) n H _|\\_/|. . H . . o O ( $O ) nHnn/ \\___/ \\nnHn \\__\\/| |\\/__/ ","":"$N $vgo _____ |_ _| n (O O) n H _|\\_/|_ H nHnn/ \\___/ \\nnHn \\__\\/| |\\/__/ ",]),"whitecoats":(["":"Two men in white coats enter the room. They promptly grab $n and drag $n90o off.",]),"letitdie":(["":"$N $vsay, \"Let it die...\"",]),"inch":(["LIV":"$N slowly $vinch away from $t.",]),"social":(["":"$N $vthink that all people who refer to emotes as socials should be rounded up and forced to play Dikus.",]),"sfwhee":(["":"$N $vgo, 'Super fucking WHEE!'",]),"fbogleg":(["":"$N $vgo, \"Fucking Bogleg!\"",]),"nodick":(["LIV":"$N $vlook at $ts and $vsay, \"Yes, it's true, this man has no dick.\"",]),"fbog":(["":"$N $vgo, \"Fucking Bog.\"",]),"urk":(["":"$N $vgo, \"Urk!\"",]),"lsf":(["":"$N $vgo, \"Little Shrugin' FuckLeg!\"",]),"tictac":(["LIV":"$N $vsay: \"Hey $T, is that a tic-tac in your pocket, or are you just happy to see me?\"",]),"edlin":(["":"$N $vrummage though $p diskettes looking for that copy of Turbo Edlin for Windows.",]),"enolagay":(["LIV LIV":"$N $vsuggest $t1 board the 'Enola Gay', and fly towards $t2.",]),"lsd":(["":"$N $vnote that Beek added this emote just because there weren't any other ones about LSD.",]),"blowme":(["LIV":"$N $vtell $t, \"Blow me!\"","":"$N $vgo, \"Blow me!\"",]),"pint":(["":"$N $vdown a pint of muscle relaxant.",]),"punkrock":(["LIV":"$N $vshave $p1 head and $vslap a label on $p1 back that says, \"PUNK ROCK\"",]),"sick":(["":"$N $vlook sick.",]),"technical_difficulties":(["":"$N $vrecite: \"We are experiencing technical difficulties, please stand by...\"",]),"bogleg":(["LIV":"$N $vbogleg at the concept of $t.","STR":"$N $vbogleg at the concept of $o.","":"$N $vbogleg at the concept of it.",]),"qtip":(["LIV":"$N $vstick a Q-tip in $p1 ear, $vpull it out, and $vstare intently at the gob of earwax covering it. After a moment of thought, $n $vstick it in $p mouth and $vexclaim, \"Yum!\"","":"$N $vtake the Q-tip from $p ear and $vstare intently at the gob of earwax covering it. After a moment of thought, $n $vstick it in $p mouth and $vexclaim, \"Yum!\"",]),"ping":(["LIV":"$N $vtake $p1 head and $vping it to the wall and back.",]),"hurry":(["LIV":"$N $vbeg $t to hurry.","":"$N $vare in a hurry.",]),"pine":(["STR":"$N $vpine $o.","":"$N $vpine.",]),"fearme":(["":"$N $vgo, \"Boo! Um, fear me, or something.\"",]),"incoming":(["":"$N $vduck for cover, screaming \"Incoming!!!!\" ",]),"norelease":(["":"$N $vmumble something about a release, but $n $vregret $n ever mentioned it.",]),"bbare":(["":"$N $vsing, \"Go as bare as you dare, with bikini bare!\"",]),"lima8":(["":"$N got Laid In Mobile, Alabama.",]),"orb":(["":"$N $vgo, \"Nice orbs!\"",]),"lima7":(["":"$N $vnote, \"Lima: We do nuclear testing.\"",]),"lima6":(["":"$N $vwonder why there is a 'lima6' emote but no 'lima1' or 'lima' emotes.",]),"lima5":(["":"$N $vnote that Lima stands for, \"Lima Is Modern Art\"",]),"lima4":(["":"$N $vnote that Lima stands for, \"Lima Is Multi Acronymed\".",]),"lima3":(["":"$N $vgo: LIMA: The only MUDLIB rated NC-17",]),"lima2":(["LIV":".","":"$N $vnote that LIMA stands for, \"Let's Ignore Mud Admins\".",]),"fpull":(["LIV":"$N $vtell $t: Here, pull my finger...",]),"punch":(["LIV":"$N $vpunch $t.",]),"buzz":(["":"$N $vpush a button on $p chest. \"Buzz Lightyear to the rescue!\"",]),"toomanypeople":(["":"$N $vdecide there are too many people logged on, and $vponder a desting spree.",]),"bones":(["WRD STR":"$N $vexclaim, \"Dammit Jim. I'm a $o, not a $o1.\"","STR":"$N $vexclaim, \"Dammit Jim. I'm a doctor, not a $o.\"","LIV STR":"$N $vexclaim, \"Dammit $tp. I'm a doctor, not a $o.\"","":"$N solemnly $vexclaim, \"He's dead Jim.\"",]),"sploob":(["LIV":"$N $vsploob all over $t.","":"$N $vsploob all over $r.",]),"irc":(["":"$N $venter 'IRC' cause $n $vdo _NOT_ socialize with mudders...",]),"cry":(["LIV":"$N $vcry on $p1 shoulder.","STR":"$N $vcry $o.","":"$N $vcry.",]),"final":(["LIV":"$N $vask $T, \"Is that your final answer?\"",]),"girn2":(["":"$N $vgrin evilly.",]),"knife":(["":"$N $vexplain, \"You use the knife to stop your enemy from pressing the button.\"",]),"bingleg":(["":"$N $vbingleg.",]),"laundry":(["LIV":"$N $vtell $t, \"HEY! YOU GO DO MY LAUNDRY!\"","":"$N $vsay, \"If a woman ever game me crap, I'd say, 'HEY! GO DO MY LAUNDRY!'\"",]),"makedrunk":(["LIV":"$N $vmake $t drunk.",]),"reject":(["":"$N $vnote that you'd have to be a reject or something to add an emote like this one.",]),"raiseleg":(["LIV":"$N $vraiseleg an eyebrow at $t.","":"$N $vraiseleg an eyebrow.",]),"nightmare":(["":"$N $vmutter about this lib being more of a nightmare to patch than the last one.",]),"ludicrous":(["":"$N $vprepare for ludicrous speed.",]),"southpark":(["":"WARNING: $P brain is off. $N $vare watching South Park.",]),"sellcrazy":(["LIV":"$N $vtell $t, \"Sell crazy somewhere else. We're all stocked up here.\"","":"$N $vsay, \"Sell crazy somewhere else. We're all stocked up here.\"",]),"pole":(["":"$N $vsay, \"I'm not touching that one with a 20' pole.\"",]),"slap":(["LIV":"$N $vslap $t across the face.","LIV STR":"$N $vslap $n1 $o!","":"$N $vslap $p forehead and $vgo, \"D'oh!\"",]),"valueofshit":(["":"$N $vgo, \"If shit were worth something, poor people would have been born without assholes.\"",]),"lambada":(["LIV":"$N $vdo a wild lambada (The forbidden dance) with $t!","":"$N $vdo a wild lambada (The forbidden dance)!",]),"slam":(["LIV":"$N $vslam $t into the wall.",]),"tooslow":(["LIV":"$N $vpoint out that $ts $v1are too damn slow.","":"$N $vpoint out that $n $vare too damn slow.",]),"gloat":(["STR":"$N $vgloat $o.","":"$N $vgloat.",]),"howcome":(["":"$N $vwonder why $s doesn't read more about this lib in alt.sex.beastiality.",]),"happy":(["":"$N $vare happy.",]),"goemotes":(["":"$N $vnote that half the souls could be replaced with either 'go STR' or 'note STR'",]),"kitchen":(["LIV":"$N $vsay to $t, \"You get your bitch ass back in the kitchen, and cook me some pie!\"","":"$N $vsay, \"I would never let a woman kick my ass. If she tried anything, I'd be like, 'HEY! YOU GET YOUR BITCH ASS BACK IN THE KITCHEN! AND MAKE ME SOME PIE!'\"",]),"avgbog":(["":"$N $vbog in an average way.",]),"puke":(["LIV":"$N $vpuke in $p1 lap.","":"$N $vdo the technicolor yawn.",]),"bkiss":(["LIV":"$N $vblow a flying kiss at $t.",]),"ohhell":(["":"$N $vgo, \"Oh hell.\"",]),"coolbeans":(["":"$N $vgo, \"Cool beans.\"",]),"35007mom":(["LIV":"$N $vnote how 35007 $p1 mom is!",]),"penultimate":(["LIV":"$N $vask $t, \"Is that your penultimate answer, the second last one before you change it to the one that might have a chance of being right?\"",]),"kickit":(["":"$N $vgo, \"Kick it! Kick it! Yah yah! Kick it!\"",]),"language":(["LIV":"$N $vrelate a long story about the beginnings of the LIMA mudlib, and $vconclude by showing all the foul language in the souls was $p1 fault.","":"$N $vrelate a long story about the beginnings of the LIMA mudlib, and $vconclude by showing all the foul language in the souls was Deathblade's fault.",]),"cheer":(["LIV":"$N $vcheer for $t.","STR":"$N $vcheer $o.","":"$N $vlet out a resounding cheer!",]),"poke":(["LIV":"$N $vpoke $t in the tummy.","LIV STR":"$N $vpoke $p1 $o.",]),"goober":(["LIV":"$N $vsay, \"Excuse me for pointing out the obvious, but, damn, $Tp, you're such a goober!\"",]),"hide":(["LIV":"$N $vhide behind $t.","STR":"$N $vhide $o.","":"$N $vhide.",]),"lpa":(["LIV":"$N $vaccuse $t of making a LPA (Lame Personal Attack).","":"$N $vmake a LPA (Lame Personal Attack).",]),"roo":(["LIV":"$N $vquote, \"Still time to get that little dick head $tp before he wakes up.\"","":"$N $vquote, \"Still time to get that little dick head Roo before he wakes up.\"",]),"kennysdead":(["":"$N $vexclaim, \"Oh my god! They killed Kenny! You Bastards!!\"",]),"oow":(["":"$N $vgo, \"!ooW !ooW\"",]),"zu":(["LIV":"$N $vzuwisky at $t.",]),"lfwaveleg":(["LIV":"$N $vgive $t a little fucking waveleg.","":"$N $vgive a little fucking waveleg.",]),"ooo":(["":"$N $vooo",]),"lazy":(["LIV":"$N $vsay to $t, \"You fail to comprehend exactly how lazy I am.\"","":"$N $vare not incapable, $n $vare damn bone lazy.",]),"nothanks":(["LIV":"$N $vsay to $t, \"No thanks to you, bitch!\"","":"$N $vsay, \"No Thanks!\"",]),"boredom":(["":"Boredom strikes. $N $vgo idle.",]),"transmeta":(["":"$N $vsay, \"Transmeta: We Do Stuff.\"",]),"snoop1":(["LIV":"$N $vthink $t should come to the FinnCon '99 held in Finland. (The last and first mudcon before 21st century)",]),"lol":(["LIV":"$N $vlaugh out loud at $t.","":"$N $vlaugh out loud.",]),"shrugpenis":(["":"$N $vshrugpenis.",]),"batzing":(["STR":"$N $vbatzing $o.","":"$N $vbatzing.",]),"dilith":(["LIV":"$N secretly $vreplace $p1 dilithium with Folger's crystals.","":"$N secretly $vreplace the dilithium with Folger's crystals.",]),"everaskedyourselfwhatthisparticularlongemotesmessagewouldconsistof":(["":"As $n $vare about to find out, this particular long emote's message consists of nothing much. However it is notable that $n $vhave gone through all the trouble of typing it, unless copy-and-pasting was used. On the other hand, $n could also have been making the world a better place or doing something vaguely interesting with $p time. On a final note, the author of this emote would like to thank Beek for his assistance in debugging it and keeping it grammatically correct.",]),"pondering":(["":"$N $vgo, \"Are you pondering what I'm pondering, Pinky?\"",]),"midnightcoder":(["":"$N $vnote that $n $vdo $p best coding after midnight.",]),"sigh2":(["":"$N $vsigh profoundly heavily. Twice. And still The World, or Tiamat if you've lost all contact with the world, has yet to become a better place, or mud if you no longer have a 3D-life.",]),"foo":(["LIV":"$N $vfoo $t.","STR":"$N $vfoo $o.","LIV STR":"$N $vfoo $t $o.","":"$N $vfoo.",]),"mute":(["":"$N $vhit the mute button.",]),"masochist":(["LIV":"$N $vdiagnose $t as having masochistic tendencies--may $tp be cursed with using only \"ed\" for the rest of eternity.",]),"cow":(["LIV":"$N $vtell $t, \"Don't have a cow, man!\"","":"$N $vhave a cow.",]),"zakk":(["LIV":"$N $vflip $t off and $vshout, \"Zakk you!\"","":"$N $vgo, \"Zakk you!\"",]),"sfidleme":(["":"$N $vcontemplate the profound ironies involved in typing 'sfidle me'.",]),"cos":(["LIV":"$N $vshake $p head sadly at $t. \"Classic oversqueeze,\" $n $vsay.","":"$N $vshake $p head sadly. \"Classic oversqueeze,\" $n $vsay.",]),"fog":(["":"The fog lifts from $p0 eyes... $n $vare back.",]),"wave":(["LIV":"$N $vwave at $t.","LIV LIV":"$N $vwave at $n1 and $n2.","WRD":"$N $vwave $o.","at LIV":"=LIV","to LIV":"$N $vwave to $t.","STR":"$N $vwave $o.","LIV STR":"$N $vwave at $t $o.","":"$N $vwave.",]),"pascal3":(["":"$N $vnote that the only Pascal remotely worth using is Turbo Pascal.",]),"pascal2":(["":"$N $vsay: Pascal, isn't that a measure of air pressure?",]),"xml":(["":"It's clear that $n $vare fucked in the head if $n $vthink XML makes a good emote.",]),"nolife":(["LIV":"Game Driver tells $t: You have no life !",]),"dbpython":(["LIV":"$N $vsit back while $t $v1preach the Python gospel. Amen.",]),"fob":(["LIV":"$N $vaccuse $t of being a fob.","":"$N $vfeel like a fob.",]),"jimcarrey":(["LIV":"$N $vthink they should call $n1 Jim Carrey since all $n1 $v1seem to do is talk out of $p1 ass.",]),"one":(["LIV":"$N $vbrainwash $t with the One True Lima Way.","":"$N $vare brainwashed with the One True Lima Way.",]),"ufbelieve":(["":"$N $vsay, \"UnFUCKINGbelievable!\"",]),"umm":(["":"$N $vgo, \"Uummmmmmmmmmmm..........\"",]),"streak":(["":"$N $vstreak across the room, completely naked. (Loses something on a text-only interface, no?)",]),"potty":(["LIV":"$N $vthink $t $v1have a potty mouth.","":"$N $vhave a potty mouth.",]),"contemplate":(["LIV":"$N $vcontemplate $p1 navel.","":"$N $vcontemplate $p navel.",]),"dance":(["LIV":"$N $vdance the waltz with $t.","STR":"$N $vdance $o.","":"$N $vdance.",]),"gqemote":(["":"$N $vannounce that that is another Gutter Quality Emote (*TM Lima Dev Team 1995)",]),"security":(["LIV":"$N $vgive $t a red shirt, and $vsay, \"Join the security detail, and follow the captain down to the surface\"","":"$N $vsound the sirens...security is on its way!",]),"gpf4":(["":"$N $vremember the elapsed time between first using Windows 95 and getting his first GPF: 3 hours.",]),"mush":(["STR":"$N $vmush $o.","":"$N $vmush.",]),"gpf3":(["LIV":"$N $vpoint to the front of $p1 t-shirt that reads: \"Microsoft Access - General Protection Fault\"","":"$N $vpoint to the front of the t-shirt that reads, \"Microsoft Access - General Protection Fault\"",]),"gpf2":(["LIV":"$N $vhand $t a t-shirt that reads: \"Microsoft - Totally Visual\" on the back.","":"$N $vhand out t-shirts that read \"Microsoft - Totally Visual\" on the back.",]),"interface":(["LIV":"$N $vtell $t, \"Sit on my interface, Bitch!\"",]),"jezus":(["":"$N $vexclaim, \"JEZUS!\"",]),"pokestick":(["LIV":"$N $vpoke $t with a stick.",]),"coastg":(["LIV":"$N $vwavie $p coast guards at $t.","":"$N $vwavie $p coast guards.",]),"worthy":(["":"$N $vintone \"I am not WORTHY. I am not WORTHY\".",]),"droids":(["":"$N $vhold up a trinket and $vsay: Look sir, droids!",]),"ignore":(["LIV":"$N $vscream at $t, \"Hell no I'm not lagged, I'm just IGNORING YOU!\"",]),"readthesource":(["LIV":"$N $vtell $t, \"Read the source, Luke!\"","":"$N $vgo, \"Read the source, Luke!\"",]),"noweigh":(["":"$N $vgo \"No weigh!\"",]),"limafu":(["LIV":"$N $vare impressed by $p1 abilities in the art of Lima-Fu... that of sitting in one place for long periods of time.","":"$N $vpractice the art of Lima-Fu... that of sitting in one place for long periods of time.",]),"mosh":(["LIV":"$N $vmosh around the room violently... Oops! $T just took an elbow!","STR":"$N $vmosh around the room $o.","":"$N $vmosh around the room.",]),"nevermind":(["":"$N $vmutter Never Mind.",]),"future":(["":"$N $vgo, \"It's the wave of the future!\"",]),"lambda2":(["":"$N $vsay, ({ #'love, this_user(), #'you })",]),"orgyemote2":(["":"$N $vrefer to the \"orgy LIV LIV WRD WRD STR\" emote, because three objects aren't allowed in an emote.",]),"scrooge":(["":"$N $vexclaim: IT'S MINE! ALL MINE! MINE MINE MINE! Mwuahahahaha!!!!!",]),"clueless":(["":"$N $vlook clueless.",]),"miss":(["LIV":"In great emotional distress, $n $vtell $t just how much $n0 missed $t1.",]),"wachu":(["":"$N asks, \"Whachu talking 'bout Willis?\"",]),"sorry":(["LIV":"$N $vlook sheepish and mumble \"Sorry, $t.\"","STR":"$N $vlook sheepish and $vmumble \"Sorry, $o\"","":"$N $vlook sheepish and $vmumble \"Sorry\"",]),"elks":(["":"$N $vpronounce DOS as dead, and $vsuggest that everyone just install Linux-8086 on all their old machines.",]),"lagleg":(["LIV":"$N $vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGGGGGGGGGGG from all $t leg emotes.","":"$N $vLLLLLLAAAGGGGGGGGGGGGGGG from all the LEG emotes.",]),"rotfl":(["":"$N $vroll on the floor laughing.",]),"maclover":(["LIV":"$N $vaccuse $n1 of being a Mac lover.",]),"fmh":(["":"$N goes, \"Well .. fuck me harder.\"",]),"unclefucka":(["LIV":"$N $vtell $t, \"Shut your fucking face, uncle fucka! You're the one that fucked your uncle, uncle fucka! You don't eat or sleep or mow the lawn; you just fuck your uncle all day long!\"",]),"screenrulz":(["":"$N $vare compelled to note just how much screen rulz.",]),"bogthigh":(["STR":"$N $vbogthigh $o.","":"$N $vbogthigh.",]),"paddle":(["":"$N $vsay, \"I _said_: well, I guess we're up shit creek without a paddle\" and $vare immediately smacked by The Penguin.",]),"yell":(["LIV":"$N $vyell at $O.","LIV STR":"$N $vyell at $t $o.",]),"we":(["LIV":"$N $vsay to $t, \"What's this 'WE' shit, Kimosave?\"","":"$N $vsay, \"What's this 'WE' shit, Kimosabe?\"",]),"llk":(["":"$N $vclaim not to be LL(k) for any k.",]),"cluebie":(["LIV":"$N $vaccuse $t of being a newless cluebie!",]),"cmd":(["":"$N $vopen a new command prompt. $ _",]),"gofigure":(["":"$N $vexclaim, \"Go figure!\"",]),"foosmile":(["LIV STR":"$N $vsmile at blah $T $o.",]),"sfgob":(["":"$N $vgo, \"Super fucking gob!\"",]),"kentucky2":(["STR":"$N $vwonder, \"If a $o couple gets divorced, are they still brother and sister?\"","":"$N $vwonder, \"If a Kentucky couple gets divorced, are they still brother and sister?\"",]),"fly":(["":"$N $vthrow $r at the ground, and $vmiss.",]),"lugnut":(["LIV":"$N $vthink $t $v1are a lugnut.","":"$N $vare a lugnut.",]),"tmifriends":(["LIV":"$N $vtell $t, \"Friends don't let friends use TMI.\"",]),"puff":(["LIV":"$N $vencourage $t to sing \"Puff the Magic Dragon ...\"","":"$N $vfrolick around in circles, singing \"Puff the Magic Dragon ...\"",]),"destleg":(["LIV":"$N $vdestleg $t.",]),"butt":(["LIV":"$N $vtell $t, \"Check out my butt!!!\"","":"$N $vgo, \"Check out my butt!!!!\"",]),"hrmleg":(["STR":"$N $vhrmleg $o.","":"$N $vhrmleg.",]),"win952":(["":"$N $vsay, \"Windows 95 <= MacOS '87 <= Workbench 3.0!\"",]),"tweak":(["LIV":"$N $vtweak $p1 nose.",]),"oharaslaw":(["":"$N $vnote that the time till alpha follows a negative exponential curve.",]),"cls":(["":({"Poof, your mind has been cleared.","$N $vtry to use the 'cls' command, doesn't the doofus know this isn't DOS?",}),]),"ywiw":(["":"$N $vask in disbelief, \"You want it WHEN?\"",]),"vi":(["STR":"$N $vtry to start up vi, but $vfail miserably.","":"$N $vtry to start up vi, but $vfail miserably.",]),"blue":(["":"$N $vwhisper, \"Beware the untapped blue...\"",]),"blub":(["LIV":"$N $vbrighten up like a lightbulb, finally getting the idea $t has been trying to get through.","":"$N $vbrighten up like a lightbulb, finally gettiing the idea.",]),"ignoring":(["LIV":"$N $vscream in $p1 ear, \"I'm not DEAF, I'm IGNORING YOU!\"",]),"fnff":(["":"$N $vstate, \"Fuckin' feel free!\"",]),"vb":(["":"VB: The language that Dick and Jane built while reading about their adventures.",]),"beable":(["STR":"$N $vbeable $o.","":"$N $vbeable.",]),"9pm":(["":"$N $vnote that it is only 9pm, long before most of the souls were added.",]),"inhale":(["LIV":"$T tried Windows once, but $ts didn't inhale.","LIV STR":"$T tried $o once, but $ts didn't inhale.","":"$N tried Windows once, but $n didn't inhale.",]),"threat":(["LIV":"$N $vask $t, \"Are you threatening me??!!\"","":"$N $vgo, \"Are you threatening me??!!\"",]),"historical":(["":"$N $vencounter fierce opposition from the Society for the Preservation of Historical Emotes.",]),"sfnogleg":(["":"$N super-fucking $vnogleg.",]),"tinyfudge":(["":"For some strange reason, $n $vfeel compelled to upgrade to TinyFudge 3.2 beta 1.",]),"uv":(["":"$N $vsay, \"Ultra-vilot rays, bad! Lotion good!\"",]),"gack":(["":"$N $vgack.",]),"warn":(["LIV":"$N $vare gonna give $t1 three seconds... exactly three fucking seconds to wipe that stupid looking grin off $p1 face or $n will gouge out $p1 eyeballs and skull fuck $t.","":"$N $vwarn Warning playing too much mud can cause: Failure in real life, constipation, feet falling asleep syndrome, refrigerator opening, eye staleness, q-tip collecting, chicken overcooking, toenail picking, combing pubic hair syndrome, inward pinky toe problems, three letter acyronynm talking in public, smiling sideways in real life, finger exhaustion, blindness, falling-asleep-on-your-keyboard, walking backwards, sneezing inversely, chocolate eating, listening to bad music, losing girlfriend/boyfriend, the desire to pick on AOLers constantly, oven overheating, garage door failures, air conditioning breakdown, expensive electrical and phone bills, failure in school, and generally just a basic failure in life.",]),"bust":(["":"$N $vsing \"I must, I must, I must increase my bust!\"",]),"gauntlet2":(["LIV":"$N $vsay, \"$Tp now has reflective shots!\"","":"$N say, \"Green Valkyrie now has reflective shots!\"",]),"ll1":(["":"$N $vclaim to be LL(1).",]),"ramble":(["STR":"$N $vramble on and on about $o.","":"$N $vramble on and on about something.",]),"um":(["":"$N $vgo: \"Ummm....\"",]),"ward":(["":"$N frantically $vweave signs of warding.",]),"ug":(["":"$N $vgo, \"Ug!!\"",]),"feared":(["":"$N $vgo, \"Feared.\"",]),"bush":(["":"In $P best George Bush voice, $N $Vpromise, \"Read my lips...NO NEW MUDLIB BUGS!\"",]),"limacs":(["":"LIMACS: Lets Invest in Memory and CPU soon.",]),"christ":(["":"$N $vexclaim, \"CHRIST!!!\"",]),"bite":(["LIV":"$N $vbite $t.",]),"rip":(["":"$N $vrip $p hair out",]),"damn":(["LIV":"$N $vdamn $n1!",]),"bury":(["":"$N $vbury your armies.",]),"feet":(["":"$N could use a foot massage.",]),"prodstick":(["LIV":"$N $vprod $t with a stick.",]),"feep":(["":"$N $vfear the influx of 'feeping creaturism'.",]),"tp":(["LIV":"$N $vask $t, \"Do you have TP for my bunghole? Do not make my bunghole angry!\"","STR":"$N $vgo, \"I do not need '$O'! I need TP for my bunghole!\"","":"$N $vgo, \"I need TP for my bunghole!\"",]),"tm":(["STR":"($O is *TM Lima Dev Team 1996)","":"(*TM Lima Dev Team 1995)",]),"burp":(["LIV":"$N $vburp in $p1 face.","STR":"$N $vburp $o.","":"$N $vburp rudely.",]),"rib":(["LIV":"$N $velbow $t in the ribs.",]),"nobeekp":(["LIV":"$N $vnote that beekp(\"$Tp\") returns 0.",]),"feel":(["LIV":"$N $vfeel $t.",]),"amylaar":(["":"Amylaar: A MudDriver you loathe always and revile.",]),"oik":(["LIV":"$N $vnote that $t $v1are such an oik, it's shocking they even let $t off the farm!",]),"burn":(["LIV":"$N $vcackle at $t and $vset fire to $p1 hair.",]),"chaching":(["":"$N $vgo, \"CHA CHING!\"",]),"golfapplause":(["LIV":"$N $vtap a bit of polite golf applause in $p1 honor.",]),"tf":(["":"$N $vuse TinyFugue, the Client of Champions.",]),"moon":(["LIV":"$N $vbend over, $vpull $p pants down, exposing $p heiny, and $vshoot $t the moon!","":"$N $vbend over and $vpull $p pants down, exposing $p heiny!",]),"feed":(["LIV":"$N $vtell $t, \"It's your turn to feed the alien, $tp.\"","":"$N $vsay, \"It's your turn to feed the alien, Pinback.\"",]),"oic":(["":({"$N $vsay, \"Oh, I see.\"","$N $vsay, \"Oh, I see.\"",}),]),"feeb":(["LIV":"$N $vaccuse $t of being a feeb.","":"$N $vfeel like a feeb.",]),"heyguys":(["":"$N $vshout, \"HEY, YOU GUYS!!!\", at the top of $p lungs!",]),"flawless":(["":"$N $vboom, \"FLAWLESS VICTORY!\"",]),"moof":(["":"$N $vgo, \"Moof!\"",]),"spelt":(["":"$N spelt that real gud.",]),"hickey":(["LIV":"$N $vgive $t a hickey, right in the middle of $p1 forehead.",]),"kewl":(["LIV":"$N $vlook at $t and $vgo, \"Kewl!\"","":"$N $vgo, \"Kewl!\"",]),"fix":(["LIV":"$N \"$vfix\" $t.",]),"spell":(["LIV":"$N $vremind $t to check $p1 spelling!!!",]),"yoursormine":(["":"$N $vwink seductively: \"Your workroom or mine?\"",]),"nerves":(["LIV":"$N $vnote that $t is getting on $p nerves...","STR":"$N $vnote that $o is getting on $p nerves...","":"$N $vnote that something is getting on $p nerves...",]),"droids2":(["":"$N $vwave $p hand and $vsay \"These aren't the droids you're looking for.\"",]),"channels":(["":({"Try IRC!","$N $vscan for more mud chat channels. Hasn't $n heard of IRC?!",}),]),"gaspleg":(["STR":"$N $vgaspleg $o.","":"$N $vgaspleg.",]),"borg":(["":"Monotonically, $n $vsay, \"Resisistance is futile. You will be assimilated.\"",]),"fin":(["":"$N $vgo: ----/| \\ o,O| =(-)= FIN!!!!! U THPTH!!!!!!!",]),"xspecial":(["":"$N $vgo, \"Well, isn't that EXTRa special??\"",]),"bore":(["LIV":"$N $vbore $t into a pile of green goo on the floor.","":"$N $vbore you all to tears.",]),"rhf":(["":"$N $vyearn for the days when rec.humor.funny actually was.",]),"sp":(["":"$N $vthink The Smashing Pumpkins RULE!",]),"lsfmapbog":(["":"$N $vgo, \"Little super fucking Miss America Pageant bog.\"",]),"gameover":(["":"$N $vscream, \"Game over, man! Game over!\"",]),"so":(["":"$N $vgo, \"So???\"",]),"cheesethreaten":(["LIV":"$N $vturn $p head at $t and $vscream, \"You make me sick, you know that? Wanna know what I'm gonna do about it, why, I'm gonna shove my entire arm into your gaping maw down through your torso till I reach your heart, then with a mighty rip I shall tear it free and yank it loose with a sickening *SNAP*. Then, I'll hold your heart aloft and stuff it with cheese. Real cheese. None of this part skim shit. And I'll shove your now cheese-laden heart back into your throat and laugh. Laugh hard. I'll laugh as your arteries clog from cheesy goo. And you know why I'm doing all this? Because dairy foods are bad for you and I care. I really do.",]),"fuckcode":(["LIV":"$N $vgo, \"Fuck $Tp's code! I'm gonna rewrite it!\"","STR":"$N $vgo, \"Fuck the $o code! I'm gonna rewrite it!\"","":"$N $vgo, \"Fuck this code! I'm gonna rewrite it!\"",]),"fig":(["":"$N $vsay, \"It'd be the marriage made in heaven. A frog and a pig. We'd have bouncing baby figs.\"",]),"whyme":(["":"$N $vgrab $p leg and $vcry, \"Why?! Why me? Why? Why? Why?\"",]),"sf":(["LIV":"$N phucking $vsmurfleg to $t.","":"$N phucking $vsmurfleg.",]),"brawl":(["LIV":"$N $vgrab the nearest chair, and $vsmash it into $p1 back.",]),"flash":(["LIV":"$N $vflash $t. $T1s $v1are impressed.","LIV STR":"$N $vflash $t. $T1s $v1are $o.","":"$N $vflash you. You are impressed.",]),"cough":(["LIV":"$N $vcough all over $t.","STR":"$N $vcough softly, \"$o\".","":"$N $vcough.",]),"yourmomsfat":(["LIV":"$N $vtell $t, \"Your mom's so fat, when she lies down, she gets taller!\"","STR":"$N $vtell $o, \"Your mom's so fat, when she lies down, she gets taller!\"",]),"preen":(["STR":"$N $vpreen $o.","":"$N $vpreen.",]),"tshirt":(["STR":"$N $vdon $p \"$o\" T-shirt.",]),"gaybog":(["":"$N $vgaybog.",]),"competition":(["":"$N $vstate, \"Commercial competition evolves from a warrior ethic and is about blood lust. It's a slightly more refined stand-in for the primitive and nearly ubiquitous urge to conquer one's enemies, abscond with their property, and destroy their future. I say \"blood lust\" because competition involves creating a richer environment for one's own offspring at the expense of the enemy's offspring: the spilled blood of an enemy vividly expresses the end of his or her procreation, making more of the world available to my own progeny.\"",]),"ugh":(["":"$N $vgo, \"UGH :P\"",]),"cornhole":(["LIV":"$N $vcornhole $t with $p stalk.",]),"qemote":(["LIV":"$N $vindicate that $ts only $v1add Quality Emotes.","":"$N $vindicate that that is a Quality Emote.",]),"faintleg":(["":"$N $vfaintleg.",]),"toosilly":(["":"$N $vgo, \"This is getting _too_ silly.\"",]),"pico":(["STR":"$N $vtry to start up pico, but $vfail miserably.","":"$N $vtry to start up pico, but $vfail miserably.",]),"whyleg":(["":"$N $vexpose a shaven leg and $vcry, \"Why?! Why me? Why? Why?\"",]),"rp":(["LIV":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.","OBJ":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.","STR":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.",]),"monkeys":(["":"$N $vgo, \"If I had monkeys, I would feed some garbage to them.\"",]),"chu":(["":"$N $vfear the \"Chu Complex.\"",]),"rl":(["LIV":"$N $vthreaten $t with Real Life.",]),"compile":(["STR":"$N $vattempt to compile $o, but $vfail miserably.","":"$N $vattempt to compile something, but $vfail miserably.",]),"soundtrack":(["":"$N $vwonder if the soundtrack to the LIMA mudlib is available on CD.",]),"frontrow":(["":"$N $vsays: \"Front row swallows!\"",]),"re":(["":"$N $vforget $n $vare on a MUD and $vsay \"re\". What a dumbshit.",]),"hell8a":(["":"$N $vcringe and $vpoint out that Heaven 7 is at 3.0 alpha.",]),"rd":(["LIV":"$N $vpoke $t in the tummy and $vwait for Red Dragon to go up again.",]),"whatever":(["":"$N $vgo, \"Whatever!\"",]),"cobol2":(["":"$N $vadmit to being a COBOL programmer.",]),"robobabe":(["LIV":"$N $vgo, \"$Tp is a Robo-Babe!!\"",]),"snarl":(["LIV":"$N $vsnarl at $t.","":"$N $vsnarl.",]),"tricycle":(["":"$P0 tricycle of thought tipped over again.",]),"mome":(["LIV":"$N $vmome at $t.","OBJ":"$N $vmome around the $o.","STR":"$N $vmome $o.","":"$N $vmome around the room.",]),"cha":(["":"$N $vgo, \"Cha, right!\"",]),"snarf":(["LIV":"$N $vsnarf at $t.","STR":"$N $vsnarf $o","":"$N $vsnarf up some more cool code from Lima Bean.",]),"think":(["STR":"$N . o O ( $o )","":"$N . o O ( hmm ... )",]),"wedgie":(["":"$N $vlook around with an evil glint in $p eye.",]),"thumb":(["":"$N $vgo, \"Thumb.\"",]),"splode":(["":"$N '$vsplode. (How messy)",]),"hmmbop":(["LIV":"$N $vhmm and $vbop $t on the head.",]),"copying":(["":"$N $vwonder why $n $vhave so many copies of a file named COPYING on $p hard drive.",]),"postalpha":(["":"$N $vmutter about postalpha",]),"impatient":(["":"$N $vare getting impatient!",]),"qq":(["":"$N intentionally used this emote. What a genius!",]),"backleg":(["":"$N $vare backleg.",]),"wank":(["LIV":"$Ts $v1wank all over the floor, moaning and sighing.","LIV LIV":"$Ts $v1wank all over $t2, moaning and sighing.","":"$N $vwank all over the floor, moaning and sighing.",]),"wombleleg":(["":"$N $vwombleleg.",]),"mglint":(["LIV":"$N $vlook at $t with a mischevious glint in $p eyes.",]),"lfu":(["":"$N $vnote that 'Lime Fucking Rules!'.",]),"aragorn":(["":"$N $vattempt, but $vfail, to idle as well as Aragorn.",]),"lament":(["STR":"$N $vlament that there are no new emotes $o.","":"$N $vlament: \"No New Emotes(TM)\"",]),"lumberjack":(["":"$N $vstart to sing \"I'm a Lumberjack and I'm OK ...\"",]),"qc":(["":"$N $vwonder how yet another bug managed to escape QC.....",]),"seethe":(["LIV":"$N $vstare at $t, seething.","":"$N $vseethe and $vfume, all the while giving everyone a baleful glare... (stand back!)",]),"ifw":(["LIV":"$N $vpin the tag \"Idle Fuckwit\" on $n1.",]),"boot":(["LIV":"$N $vgive $t a boot to the head!",]),"ponderleg":(["":"$N $vponderleg.",]),"monkey6":(["":"$N $vtwitch a little and ask, \"yadda yadda yadda how many more monkeys? HOW MANY?!\"",]),"monkey5":(["":"$N $vpick bugs from $p hair and $veat them.",]),"monkey4":(["":"$N $vshout, \"There were monkeys, I tell ya! MONKEYS!!\"",]),"lynx":(["":"$N kindly $vrequest that the world become Lynx-friendly.",]),"monkey3":(["":"$N $vshave $p ass and $vclimb a tree.",]),"diarrhea2":(["":"$N $vsay, \"I've got the green-apple splatters!\"",]),"monkey2":(["":"$N $vdemonstrate the manner in which a monkey would eat a banana in the jungles of Madagascar.",]),"rem":(["LIV":"$N $vstart talking in BASIC and $vcomment $t out.","":"$N $vstart talking in BASIC.",]),"ffear":(["":"$N $vgo, \"Fucking fear.\"",]),"blow":([]),"pw":(["LIV":"$N $vtell $t, \"Boy, don't let that pussy whip ya! You gotta whip that pussy!\"",]),"ps":(["":"Postscript, yet another RPN language.",]),"fear":(["LIV":"$N $vfear $t.","STR":"$N $vfear $o.","":({"FEAR! ","$N lives in fear. ",}),]),"milk":(["LIV":"$N $vstroke $p1 left breast and $vdraw milk.","STR LIV":"$N $vstroke $p1 $o and $vdraw milk.","":"$N $vlactate.",]),"gobgel":(["STR LIV":"$N $vgobgel $o at $t.",]),"earwax":(["":"$N $vare an earwax conoisseur.",]),"pp":(["LIV":"$N $vattempt to subvert $T with peer pressure.",]),"leghim":(["LIV":"$N $vexpose a shaven leg and $vwave it to $t.",]),"lrmemote":(["":"$N $vlove rmemote.",]),"roleplay":(["":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.",]),"fff":(["LIV":"$N $vadvise $t, 'Feel Free to Fix it.'","STR":"$N $vsay, \"Feel Free to Fix $O.\"","":"$N $vsay: 'Feel Free to Fix it.'",]),"pi":(["":"$N $vpoint out how Mathematics is really very sensible, \"Let's pretend that you can take the square root of -1, you can take the natural log of -1, and the ratio of the second thing you can't do over the first thing you can't do is the same as the ratio of a circle's circumference to it's diameter ...'",]),"universe":(["LIV":"$N $vnote that there are 10^40 objects in the known universe, and $t would sleep with well over half of them.",]),"bleed":(["LIV":"$N $vbleed on $t.","":"$N $vbleed.",]),"bunk":(["LIV":"$N $vinform $t, \"That's bunk!\"","":"$N $vgo, \"That's bunk!\"",]),"yeehaw":(["":"$N $vput on $p Cowboy hat and $vyell, \"Yeee HAW!!!\"",]),"gladidontworkinanoffice":(["":"$N $vgo, \"Heh, anyone see today's Dilbert cartoon? It was funny.\"",]),"ffb":(["LIV":"$N $vadvise $t, 'Feel Free to Break it.'","":"$N $vsay: 'Feel Free to Break it.'",]),"ffa":(["LIV":"$N $vadvise $t, 'Feel Free to Add it.'",]),"barney":(["":"Fearless, $N $vsing, \"I love you, you love me, ...\" over and over and over again...",]),"flurble":(["STR":"$N $vflurble $o.","":"$N $vflurble.",]),"detonator":(["":"$N politely $vpoint out the detonator is missing.",]),"leg":(["":"$N $vgo, \"Leg.\"",]),"sfhellohowareyouleg":(["":"$N super $vfucking hello-how-are-you-leg.",]),"honeycomb":(["LIV":"$N $vstart screaming at $t, \"Honeycomb honeycomb! ME WANT HONEYCOMB!!!\" $N then $vproceed to chew $p1 forearm off at the joint.","":"$N $vscream, \"Honeycomb honeycomb! ME WANT HONEYCOMB!!!\"",]),"jove":(["STR":"$N $vtry to start up jove, but $vfail miserably.","":"$N $vtry to start up jove, but $vfail miserably.",]),"greet":(["LIV":"$N $vgreet $t.","":"$N $vsay, \"Greets!\"",]),"flapear":(["LIV":"$N $vflapear to $t","STR":"$N $vflapear $o","":"$N $vflapear",]),"lewinsky":(["LIV":"$N $vopen $p mouth and $vlewinsky $t. $P tongue action is wicked.",]),"ruffle":(["LIV":"$N $vruffle $p1 hair.","STR":"$N $vruffle $p $o.","LIV STR":"$N $vruffle $t $o.","":"$N $vruffle $p feathers.",]),"totofuck":(["":"$N $vfuck Toto and $vmake the little dog wail.",]),"bonk":(["LIV":"$N $vbonk $t on the head.","LIV STR":"$N $vbonk $t $o.",]),"dancingqueen":(["":"$N $vare the dancing queen!",]),"idkfa":(["":"$N $vtype, 'idkfa'. \"Very Happy Ammo Added.\"",]),"bong":(["":"$N $vbong.",]),"moebius":(["":"$N $vfold $r into a one-sided surface, making nearby Moebius strips jealous.",]),"y":(["":"$N $vask, \"Y?\"",]),"dikuget":(["":"$N $vget 3.dagger 2.pouch 5.packhorse. $N $vlove dikus.",]),"squirm":(["STR":"$N $vsquirm $o.","":"$N $vsquirm.",]),"x":(["":"$N $vslap an \"X\" sticker on \"Lima Bean: The Director's But.\"",]),"joint":(["LIV":"$N $vroll $t up into a joint and $vsmoke $t.",]),"bump":(["LIV":"$N $vbump $t.","STR":"$N $vbump $o.","":"$N $vbump.",]),"feh":(["LIV":"$N $vlook at $t and $vgo, \"Feh.\"","":"$N $vgo: \"Feh.\"",]),"ok":(["LIV":"$N $vgive $t $p ok on that.","LIV STR":"$N $vgive $t $p ok on $o.","":"$N $vok.",]),"mike":(["":"$N $vtap $p microphone, \"Is this thing on?\"",]),"oi":(["STR":"$N $vgo, \"Oi! $O!\"","":"$N $vgo, \"Oi!\"",]),"nogbog":(["":"$N $vnogbog.",]),"oh":(["":"$N $vgo, \"Ohhh..... That makes a lot of sense.\"",]),"folger":(["STR":"$N secretly $vreplace $o with Folger's crystals.",]),"r":(["STR":"$N $vslap an \"R\" sticker on \"$o: The Director's Cut.\"","":"$N $vslap an \"R\" sticker on \"Lima Bean: The Director's Cut.\"",]),"ket2":(["":"$N $vsing: 'And the Ket came back...' no...wait that's Katt sorry",]),"vomit":(["LIV":"$N $vvomit on $t shoes.","":"$N $vvomit.",]),"smackdown":(["LIV":"$N $vsay to $t, \"Shut up! You keep that up, and I'm gonna put the smack down on yo' ass, beeyatch!\"","":"$N $vsay, \"Shut up! You keep that up, and I'm gonna put the smack down on yo' ass, beeyatch!\"",]),"bachomp":(["":"$N sez: Me $np, bachomp, bachewchomp!",]),"slorph":(["STR":"$N $vslorph $o.","":"$N $vslorph.",]),"bing":(["LIV":"$N $vbing at $t.","STR":"$N $vbing $o.","":"$N $vbing.",]),"getfucked":(["LIV":"$T1s $v1fuck $no hard from behind. God, it feels good.",]),"slavery":(["":"Santanico Pandemonium says: Welcome to slavery... $N $vsay: Where do I sign?!?!",]),"p6":(["":"$N $vsay, \"It's not just that it's 3 times faster than the pentium -- it's also got a PCI bus!\"",]),"hamburgers":(["":"$N $vexclaim, \"Hamburgers! The cornerstone of any nutritious breakfast!\"",]),"upyours":(["":"$N just said, \"Up yours, baby!\"",]),"confuse":(["LIV":"$N $vexplain quantum mechanics and $t $v1are confused. For that matter, $np $vexplain car mechanics and $tp $v1are confused.","":"$N $vlook confused.",]),"rustalone":([]),"american":(["":"$N $vproclaim, \"I am not one of those weak-spirited, sappy Americans who want to be liked by all the people around them. I don't care if people hate my guts; I assume most of them do. The important question is: 'What are they in a position to do about it?' \"",]),"np":(["LIV":"$N $vaccuse $t of being NP-complete.",]),"fdl":(["LIV":"$N $vfall down laughing at $t.","":"$N $vfall down laughing.",]),"upsidedown":(["":"$N $vturn the room upside-down and $vcollect the change as it falls out of everyone's pockets.",]),"bomb":(["LIV":"$N $vbomb all of $p1 damn wavie military branches.",]),"wigleg":(["":"$N $vwigleg $p bottom.",]),"wake":(["LIV":"$N $vgrab $t by $p1 shoulders and $vshake $to violently, screaming, \"WAKE UP!\"",]),"bowleg":(["":"$N $vbowleg.",]),"bigbottom":(["":"$N $vnote, \"The bigger the cushion, the sweeter the pushin', that's what I Said!\"",]),"ni":(["":"$N $vgo, \"Ni! Ni!\"",]),"wired":(["LIV":"$N1 had better get $p1 head and $p1 ass wired together, or $n0 will take a giant shit on $t.","":"$N $vsing \"I'm drinking coffee so I won't get tired. I'm buzzing, I'm jumping, my engines are fired. My brain is boiling, my brain is fried. I see things in the shadows and my sanity's died. I've one thing to say and that's '..I .. am ... wired'.",]),"dogplanet":(["LIV":"$N $vsay, \"$Tp, quit sniffing my butt!\"","":"$N $vsay, \"Dr. Zaius, quit sniffing my butt!\"",]),"nc":(["":"$N $vgo, \"No Comment.\"",]),"duoshrug":(["":"$N $vnotice that a duoshrug just took place.",]),"working":(["STR":"$N $vput up a 'Working on $o' sign and $vgo idle.","":"$N $vput up a 'Working...' sign and $vgo idle.",]),"pissed":(["LIV":"$N $vtell $t \"Yo, you best back off, I'm getting a little pissed here.\"",]),"heavensux":(["":"$N $vpreach, \"In the beginning God created Heaven 7 and the earth. Heaven 7 was without form and void, and darkness and ineptitude were upon the faces of the admin. And God said let there be Lima!, and there was Lima. And God saw that Lima was good.\"",]),"pcurtsey":(["LIV":"$N $vattempt to curtsey to $t but $vend up sitting on the floor Indian style!",]),"neurotic":(["":"$N $vpoint out $n $vare only neurotic, so there is nothing to worry about.",]),"lang":(["":"$N $vexclaim, \"Such language in a high class establishment like this!\"",]),"qualitylag":(["":"$N $vlag like only $n can.",]),"friend":(["STR LIV":"$N $vremind $t, \"'$o' is your friend.\"",]),"chin":(["LIV":"$N $vstroke $p1 chin, and $vgo, \"Fuck it.\" $N then $vproceed to smack $t across the chin with a right swing.","STR":"$N $vstroke $p chin, and $vgo, \"$O\"","":"$N $vstroke $p chin, and $vgo, \"hmm...\"",]),"happybday":(["LIV":"$N $vsing, \"Happy birthday to you, happy birthday to you, happy birthday dear $T, happy birthday to you.\"",]),"sexy":(["":"$N $vask, \"What's wrong with being sexy?\"",]),"ms":(["":"Who can make a program that could work in 500k and take up little hard drive space? Well it sure the hell isn't Microsoft(tm), is it?",]),"ld2":(["":"%^CHANNEL%^[announce]%^RESET%^ $N $vhave gone link-dead.",]),"canyon":(["LIV":"$N $vnote that $t $v1have a canyon where there should be a mountain.",]),"tasteless":(["":"$N $vdemand the creation of alt.mud.emotes.tasteless.lima",]),"tremble":(["STR":"$N $vtremble $o.","":"$N $vtremble.",]),"getfuckedbymegaboz":(["":"Megaboz fucks $no hard from behind. $N $vare unimpressed.",]),"bearhug":(["LIV":"$N $vgive $t a bone-crushing bearhug.",]),"shrugtoe":(["STR":"$N $vshrugtoe $o.","":"$N $vshrugtoe.",]),"suxmore":([]),"nsleep":(["LIV":"$N $vnotice that $ts $v1need sleep badly, and $vsuggest $ts go to bed.","":"$N $vneed sleep.",]),"tmidown":(["STR":"$N $vgive $o a Robo-rating of \"Two thumbs and one TMI-site down\"!","":"$N $vgive it a Robo-rating of \"Two thumbs and one TMI-site down\"!",]),"obi":(["LIV":"$N $vlook at $t and $vplead, \"Help me Obi Wan Kenobi, you're my only hope.\"",]),"monty1":(["LIV":"$N $vdeclare to $t, \"Your mother was a hamster, and your father smelt of elderberrys!\"","":"$N $vdeclare, \"Your mother was a hamster, and your father smelt of elderberrys!\"",]),"reeses":(["":"$N $veat Reese's pieces.",]),"mf":(["LIV":"$N $vgo to $t, \"I'm a mushroom cloud layin' motherfucker, motherfucker!\"","":"$N $vgo, \"I'm a mushroom cloud layin' motherfucker, motherfucker!\"",]),"me":(["":"$N $vpoint to $r and $vask, 'Me?'",]),"icrfu":(["":"$N $vgo, \"It's coming right for us!\"",]),"odbc":(["":"$N $vnote ODBC is not a network protocol!",]),"better":(["":"$N $vmutter, \"That's Better\".",]),"slut2":(["LIV":"$N $vsay, \"$Tp is what we call, 'Bear with wide canyon'.\"",]),"justforthehellofit":(["":"$N $vnote that this emote was added just for the hell of it.",]),"flame":(["LIV":"$N $vdecide to start a flame war, and $vstart chasing $t around with a flame-thrower.","":"$N $vdecide to start a flame war, and $vstart chasing everyone around with $p0 flame-thrower.",]),"shaolin":(["":"$N $vsay \"If what you say is true, the Shaolin and the Wu-Tang could be dangerous!!\"",]),"snickerdoodles":(["LIV":"$N $voffer snickerdoodles to $t, hoping to avoid $p1 wrath.","":"$N $vmake up a batch of snickerdoodles and $vshare them with everybody. Boy, $p snickerdoodles are good!",]),"bile":(["":"$N $vspit up some bile.",]),"lame":(["":"$N $vmutter, \"LAME LAME LAME LAME LAME!!!!!\"",]),"wookie":(["STR LIV":"$N $vadvise $t: \"$o doesn't pull your arms off when it loses.\"",]),"lamb":(["":"$N $vrelate a thought: Mary had a little lamb. Isn't genetic engineering a wonderful thing?",]),"ibm":(["":"$N $vwish $n had an Amiga 4000 with all the trimmings, instead of that undesigned mess they call an IBM PC Compatible.",]),"binky":(["":"$N $vwant to be more like Binky!!!",]),"wait":(["":"$N $vgo: ----/| \\ o,O| =(-)= WAIT!!!!! U THPTH!!!!!!!",]),"speel":(["STR":"$N $vattempt to speel \"$o\", but $vfail miserably.","":"$N $vattempt to speel, but $vfail miserbably.",]),"bleat":(["":"$N $vgo, \"BAHAHAHAHAHAAAA!\"",]),"jukebox":(["STR":"$N $vput a quarter into the jukebox and $vpress the button for \"$o\".",]),"unnice":(["LIV":"$N $vunnice $t.",]),"swoon":(["LIV":"$N $vswoon over $T.","":"$N $vswoon.",]),"wail":(["STR":"$N $vwail $o.","":"$N $vwail.",]),"sleep2":(["LIV":"$N $vtry to sleep with $t, and $vsucceed spectacularly!",]),"twiddle":(["LIV":"$N $vtwiddle $p1 thumbs.","STR":"$N $vtwiddle $p $o.","LIV STR":"$N $vtwiddle $p1 $o.","":"$N $vtwiddle $p thumbs.",]),"ksfeared":(["":"$N $vgo, \"Kinda sorta feared.\"",]),"fbi":(["LIV":"$N $vreport $t to the FBI's crack Anti-Pinging Unit.",]),"gauntlet":(["LIV":"$N $vsay, \"$Tp needs food badly. $Tp is about to die!\"","":"$N $vsay, \"Red warrior is about to die!\"",]),"lalr":(["":"$N $vclaim to be LALR(1).",]),"ld":(["LIV WRD":"$N1 $v1have gone $o-dead.","":"$N $vhave gone link-dead.",]),"excellent":(["":"$N $vgo, \"Excellent, Smithers!\"",]),]) +emotes (["yeah":(["":"$N $vgo, \"Yeah! Yeah! Heh! Heh!\"",]),"tombstone":(["LIV":"$N $vscream in $p1 face, \"What do you want on your Tombstone?!?!?!\"",]),"sleepleg":(["STR":"$N $vsleepleg $o.","":"$N $vsleepleg.",]),"lag":(["":"$N $vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG.",]),"laf":(["LIV":"$N $vlaf at $t.","OBJ":"$N $vlaf at $o.","STR":"$N $vlaf $o.","":"$N $vlaf.",]),"calon":(["":"Calon reminds $N that before you code an entire module, check to see if it already exists.",]),"recursive":(["":"$N $vnote that this emote may not be recursive, but $vrefer everyone to the 'recursive' emote, anyway.",]),"lala":(["":"$N $vturn blue and starts to hum: La LA la la la ...",]),"hehleg":(["LIV":"$N $vhehleg at $t.","":"$N $vhehleg.",]),"bugfree":(["STR":"$N $vwonder if $o will ever truly be bug free.","":"$N $vwonder if the LIMA mudlib will ever truly be bug free.",]),"straightjacket":(["LIV":"$N $vcall the state hospital on $t, A shrink arrives and evaluates $p1 mental state. $N1p $vis given a straightjacket to wear for life.",]),"sex2":(["STR":"$N $vgo, 'Yah, i'm just in it for the $o...'","":"$N $vgo, 'Yah, I'm just in it for the sex...'",]),"bogspam":(["LIV":".",]),"faq":(["LIV":"$N $vtell $t, \"Look at http://lima.imaginary.com for the FAQ.\"","":"$N really should look at http://lima.imaginary.com for the FAQ.",]),"grumple":(["STR":"$N $vgrumple $o.","":"$N $vgrumple.",]),"xxxpelt":(["":({"Oh come on. Even we aren't going to get this crude.","$N $vare disappointed by the xxxpelt emote.",}),]),"car":(["":"$N $vgo to move $p car.",]),"ddsob":(["":"$N $vgo, \"Damnit, damnit, son-of-a-bitch!!\"",]),"agree":(["LIV":"$N $vagree with $t.","STR":"$N $vagree $o.","":"$N $vagree.","LIV STR":"$N $vagree with $t $o.",]),"omigod":(["":"Not to be mistaken for a valley girl, $n $vgo, \"Oh - my - gaaaaawwwwwd! That's so - totally - gnarly!\"",]),"lastclue":(["LIV":"$N $vtell $t, \"You better pick up that clue you just dropped... it is your last one...\"",]),"toast":(["LIV":"$N $vtoast to $p1 health and prosperity!","":"$N $vlift $p glass and $vsay, \"Here, here!\"",]),"ialone":(["LIV":"$N $vsing to $t, \"I alone love you! I alone tempt you!\"","LIV LIV":"$T1s $v1sing to $t2, \"I alone love you! I alone tempt you!\"","STR LIV":"$O sings to $t, \"I alone love you! I alone tempt you!\"",]),"swing":(["OBJ LIV":"$N $vswing a $o at $t.",]),"goaway":(["LIV":"$N $vsing, \"$tp, don't go away mad! $tp, just go away!\"","STR":"$N $vsing, \"$O, don't go away mad! $O, just go away!\"",]),"lugnit":(["STR":"$N $vthink $o is a lugnut.",]),"keycaps":(["":"$N $vsay: All wiyht. Rho sritched mg kegtops awound?",]),"spammed":(["":"$N $vare officially SPAMMED.",]),"chickle":(["":"$N $vchickle.",]),"teapot":(["LIV":"$T $v1have fooled the teapot. It thinks $ts $v1are its friend.","":"$N $vhave fooled the teapot. It thinks $n $vare its friend.",]),"blaster":(["":"$N $vnote, \"Hokey religions and ancient weapons are no match for a good blaster at your side.\"",]),"tanstaafl":(["":"$N $vsay 'There Ain't No Such Thing As A Free Lunch.\"",]),"jk":(["LIV":"$N $vtell $t, \"Just kidding!\"","":"$N $vsay, \"Just kidding!\"",]),"snugglefar":(["LIV":"$N $vsnuggle up far from $t.",]),"operate":(["LIV":"$N $vprepare $t for surgery.",]),"gohome":(["LIV":"$N $vgo, \"Damnit, $ts! Don't you have your own mud?\"",]),"children":(["":"$N $vcode an emote complaining about all the children hanging around Lima Bean.",]),"badbog":(["LIV":"$N $vlaugh at $t for using an inappropriate bog emote.","":"$N $vget arrested by the FDA for using an inappropriate bog emote and $vproceed to add one.","LIV STR":"$N $vlaugh at $t for using an inappropriate bog emote and suggest he use $o instead.",]),"ramdisk":(["":"$N $vsay you mean RAM Disk isn't the installation procedure ?",]),"erkle":(["":"Wearing suspenders and big glasses, $n $vsay, \"Did I do that?\" >=)",]),"mobydick":(["":"$N $vsuggest doing a mobydick with the vast majority of dumb emotes in the Lima Mudlib.",]),"afaik":(["":"$N $vgo, \"As Far As I Know.\"",]),"chew":(["":"$N $vchew on a stringy bit of obfuscation.",]),"gnome":(["":"G.N.O.M.E - Megs and megs of fun. Explorer just thought it was a shell.",]),"parity":(["LIV":"$N $vnote that $t $v1have a one-bit brain and $v1are suffering a parity error.","":"$N $vhave a one-bit brain and $vare suffering a parity error.",]),"frown":(["LIV":"$N $vfrown at $t.","STR":"$N $vfrown $o.","":"$N $vfrown.",]),"mleg":(["LIV":"$N $vshow off $p middle leg to $t.","":"$N $vshow off $p middle leg.",]),"emacs6":(["":"$N $vgo, \"EMACS: Eventually `malloc()'s All Computer Storage\"",]),"hellwind":(["LIV":"$N $vaim $p ass at $t, $vgrunt hard, and $vconjure a hellish wind at $t.",]),"emacs5":(["":"$N $vgo, \"Escape Meta Alt Control Shift\"",]),"emacs4":(["":"$N $vgo, \"Emacs - LISP with a built-in editor\"",]),"lpccoder":(["":"$N $vnote that being the best LPC coder is like being the healthiest AIDS victim, or the sexiest Trekkie.",]),"emacs3":(["":"$N $vgo, \"Emacs Makes All Computers Slow\"",]),"emacs2":(["":"$N $vgo, \"EMACS - Eight Megs And Constantly Swapping\"",]),"iq":(["LIV":"According to the iq_d, $p1 IQ is negative.",]),"bugs":(["":"$N $vgo, \"OOooooohhh...Lookit all the BUGS...\"",]),"quitleg":(["":"$N $vquitleg.",]),"high6":(["LIV":"$N $vjump in the air, $vgrow an extra finger and $vgive $t a high-six!",]),"high5":(["LIV":".",]),"recoil":(["":"$N $vrecoil in shock.",]),"vein":(["":"$N $vsmile sweetly till you think $n'll burst a vein.",]),"flail":(["LIV":"$N $vflail $p arms about nearly striking $t!","":"$N $vflail $p arms about.",]),"weresmooth":(["LIV":"$N $vgo to $t, \"Damn, we're smooth!\"","":"$N $vgo, \"Damn, we're smooth!\"",]),"ic":(["":"$N $vsay: I see...",]),"arrogance":(["LIV":"$N $vobserve how $p1 arrogance is supreme.","":"$P arrogance is supreme.",]),"getwhappedby":(["LIV":"$N1 $v1whap $t10.",]),"bandage":([]),"jewish":(["LIV":"$N $vexclaim, \"He's come to kill you because you're jewish, $tp\"","":"$N $vexclaim, \"He's come to kill you because you're jewish, Kyle!\"",]),"pussy":(["LIV":"$N $vshout at $t, \"You fuckin' pussy!\"",]),"emotenight":(["STR":"$N $vdeclare that tonight is \"$o\" emote night.",]),"beggars":(["":"$N $vreply, \"It'll be just like beggars canyon back home.\"",]),"pizza":(["":"$N $vsuggest that the next time you call out for pizza, you don't use a military channel.",]),"sdance":(["LIV":"$N $vput $p arms around $p1 waist and $vshare a slow dance with $t.",]),"hungwell":(["":"$N $vannounce, \"Guard Number 1 is a senior on Klahn's mountain, and aspires to be a research chemist, welcome please, Hung Well!\" ",]),"angeftp":(["":"$N $vrefuse to code w/o ange-ftp.",]),"xemacs":(["STR":"$N $vtry to start up xemacs, the king of all editors, but $vfail miserably.","":"$N $vtry to start up xemacs, the king of all editors, but $vfail miserably.",]),"bufu":(["LIV":"$N $voffer to be $p1 bufu buddy.",]),"dwarf":(["LIV":"$N $vmake $t feel like a dwarf standing beside $n90o.","":({"You feel like a dwarf. ","$N $vlook like a dwarf. ",}),]),"mission":(["LIV":"$N $vtell $t, \"We're on a mission from GOD!\"","":"$N $vsay, \"We're on a mission from GOD!\"",]),"lovemore":(["OBJ":"$N $vloves $T more than anything else in the world.",]),"testfoo":(["LIV STR":"$N $vtestfoo to $T, \"$o\"",]),"invite":(["LIV":"$N $vinvite $t to touch $p privates.","":"$N $vinvite everyone to touch $p privates.","LIV STR":"$N $vinvite $t to touch $p $o.",]),"hi":(["LIV":"$N $vwave Hi! to $t.","LIV LIV":"$N $vwave Hi! to $t1 and $t2","":"$N $vwave Hi!",]),"helpfile":(["":"Mudlib tells $n, \"Help file?! No way! Hey, it was difficult to write. It should be difficult to understand!\"",]),"bigboned":(["":"$N $vgo, \"I'm not fat, I'm big boned!\"",]),"sfbogleg":(["":"$N super-fucking-$vbogleg!",]),"rubeyes":(["LIV":"$N $vrub $p1 eyes.","":"$N $vrub $p eyes.",]),"mock":(["LIV":"$N $vmock $t.",]),"ha":(["STR":"$N $vgo, \"HA! $O!\"","":"$N $vgo, \"HA!\"",]),"appear":(["STR":"$N $vlook $o.",]),"huggle":(["LIV":"$N $vhuggle $t.","":"$N $vhuggle $p Snuggles(tm) bear.","LIV STR":"$N $vhuggle $t $o.",]),"drugaddict":(["LIV":"$N $vknow that $ts $v1are a drug addict, since $n $vhave shared needles with $t.","":"$N $vsuspect that $n might be a drug addict.",]),"strut":(["LIV":"$N $vstrut around $t.","STR":"$N $vstrut $p $o.","":"$N $vstrut $p stuff!",]),"hookup":(["LIV LIV":"$N $vnote that $n1 and $n2 seem to be hitting it off well, and should consider hooking up!",]),"bfgs":(["":"$N $vgo, \"Bog Fucking Giga-Super!\"",]),"stupid":(["LIV":"$N $vnote that $ts $v1are an experiment in Artificial Stupidity.",]),"mwank":(["LIV":"$Ts $v1wank all over the mashed potatoes, moaning and sighing.",]),"beefcake":(["":"$N $vscream, \"BEEFCAKE!\"",]),"laugh":(["LIV":"$N $vlaugh at $t.","OBJ":"$N $vlaugh at $o.","STR":"$N $vlaugh $o.","":"$N $vlaugh.","LIV STR":"$N $vlaugh at $t $o.",]),"jump":(["LIV":"$N $vjump up and down on $t.","STR":"$N $vjump $o.","":"$N $vjump up and down.",]),"ifiygd":(["LIV":"$N $vlook straight at $T and $vdeclare, \"I fart in your general direction!\"","":"$N $vexclaim, \"I fart in your general direction!\"",]),"nsdevelop":(["":"$N would not be caught dead being called a \"Netscape Developer\".",]),"i2":(["":"$N $vremember I2; it would have been nice if it weren't stuck in ping -flood mode.",]),"tigran":(["":"$N $vsalute Tigran and $vsay, \"Mein Fuhrer!\"",]),"hshrugleg":(["LIV":"$N $vshrugleg so hard at $t, $p foot comes out $p ear.","":"$N $vshrugleg so hard, $p foot comes out $p ear.",]),"eskimo":(["LIV":"$N $vgive $t a big eskimo-kiss.",]),"itworks":(["":"$N $vgasp, \"My GAWD! It WORKS!\"",]),"dordon":(["LIV":"$N calmly $vdraw $p katana and $vsever $p1 head from $p1 body. Nothing personal, you know.",]),"chocolates":(["LIV":"$N $vsay to $t, \"Life is like a box of chocolates...\"","":"$N $vsay in a shy voice, \"Life is like a box of chocolates...\"",]),"volunteer":(["LIV":"$N $vvolunteer $t.",]),"gt":(["LIV":"$N $vsay to $t, \"That would be a GoodThing(tm).\"","STR":"$N $vsay, \"$o is a GoodThing(tm).\"","":"$N $vsay, \"That would be a GoodThing(tm).\"",]),"wiener":(["":"$p fingers have the consistancy of frozen Oscar-Mayer wieners.",]),"noclue":(["LIV":"$N $vadmit to $t that $n $vare clueless.","":"$N $vadmit that $n $vare clueless.",]),"8675309":(["":"$N $vsing, \"Jenny... Eight, Six, Seven, Five, Three, O, Ni-e'ine!\"",]),"morepeople":(["":"$N $vnote that Lima Bean regularly has more people logged on than many MUDs have PLAYERS ...",]),"brandon":(["":"$N $vbegin to @IGNORE Brandon. $P blood pressure drops 30 points.",]),"giyf":(["":"$N $vintone, \"Grep is your friend!\"",]),"asif":(["":"$N $vexclaim \"As if!\"",]),"trecurse":(["":"$N $voptimize the \"recurse\" emote via tail-recursion, and $vend up in an infinite loop. Oops!",]),"2sexy":(["LIV":"$N $vare too sexy for $t!","LIV LIV STR":"$N $vnote that $t $v1are too sexy for $p2 $o!","LIV LIV":"$N $vnote that $t is too sexy for $t2!","STR":"$N $vare too sexy for $o!","":"$N $vare too sexy for this mud!","LIV STR":"$N $vare too sexy for $p1 $o!",]),"ga":(["":"$N $vgo, \"Ga ga!\"",]),"whack":(["LIV":"$N $vwhack $p1 knees with a metal baton.",]),"riddance":(["LIV":"$N $vnote $p1 passing and $vexclaim, \"Good Riddance!\"","WRD":"$N $vnote $o's passing and $vexclaim, \"Good Riddance!\"","":"$N $vexclaim, \"Good Riddance!\"",]),"engmajors":(["":"$N $vremember why English majors don't like LIMA: \"Repeat after me. 'laf' is NOT a verb! 'laf' is NOT a verb!\"",]),"animal":(["":"$N $vdo $p impression of Animal the Muppet: WO-MAN WO-MAN WO-MAN WO-MAN *pant* *pant* AH-OOOOOO!",]),"balogna":(["LIV":"$N $vsing, \"$P1 balogna has a first name, it's O-S-C-A-R!\"","":"$P balogna has a first name, it's O-S-C-A-R!",]),"h0":(["":"$N $vgo, \"H0 H0 H0 Baby!\"",]),"muah":(["":"$N $vgo, \"Muahahahahahaaaa!\"",]),"gothere":(["STR":"$N $vsay, \"I've got your $O RIGHT HERE!\"","LIV STR":"$N $vtell $T, \"I've got your $O RIGHT HERE!\"",]),"defygravity":(["":"$N $vdefy gravity.",]),"lambda":(["":"$N $vdo a wild lambda (The forbidden syntax)!",]),"3am":(["":"$N $vnote that it is after 3am, when most of the best emotes (well, at least most of the emotes) were added.",]),"otherteam":(["LIV":"$N quietly $vhint that $t $v1are playing for the other team.",]),"jolt":(["":"$N $vdrink another can of \"Jolt\", and $p head explodes.",]),"dolphins":(["":"According to $n, dolphins are intelligent and friendly--intelligent and friendly on rye bread with some mayonnaise!",]),"bleh":(["LIV":"$N $vgo: \"Bleh.\" (unlike $t, this is cool)","STR":"$N $vgo: \"Bleh.\" (unlike $o, this is cool)","":"$N $vgo: \"Bleh.\" (unlike Beek, this is cool)",]),"fg":(["":"$N $vtry to go to the 'fg' process, but $vfail miserably.",]),"snafu":(["":"$N $vgo, \"Situation Normal, All Fucked Up.\"",]),"ff":(["LIV":"$N $vadvise $t, 'Feel Free.'","STR":"$N $vsay: 'Feel Free to $o.'","":"$N $vsay: 'Feel Free.'","LIV STR":"$N $vadvise $t, 'Feel Free to $o.'",]),"dizzying":(["LIV":"$N $vtell $t, \"Truly you have a dizzying intellect.\"",]),"moan":(["LIV":"$N $vmoan, \"$Tp\"","STR":"$N $vmoan $o.","":"$N $vmoan.","LIV STR":"$N $vmoan, \"$t\" $o.",]),"tingle":(["":"$N $vsay, \"Feel that tingle? That means it's working!\"",]),"swoo":(["":"$N $vgo, \"Sarcastic woo!\"",]),"laff":(["LIV":"$N $vlaff at $t.","STR":"$N $vlaff $o.","":"$N $vlaff.",]),"calin":(["":"$N $vthink of something dumb.",]),"lfrockleg":(["":"$N $vgo, \"Little fucking rockleg!\"",]),"thinkso8":(["":"$N $vgo, \"Well, I think so Brain.. but how can we get the gummy worms to live in peace with the marshmallow chimps?\"",]),"cliff":(["LIV":"You wouldn't catch any woman of $P1 leading $n1o by the nose; but you might catch her sunning herself on a rock!",]),"thinkso7":(["":"$N $vstop and $vthink a moment. \"I -think- so Brain, but how do they get the sheep out of your bed after you count them?\"",]),"swirly":(["LIV":"$N $vgive $t a swirly.",]),"thinkso6":(["":"$N $vthinks a moment and replies, \"I think so Brain, but do you think she'd really leave Mickey for me?\"",]),"thinkso5":(["":"$N $vgo, \"Narf! I think so Brain, but where in the world are we going to get rubber pants our size at this time of night?\"",]),"ex":(["STR":"$N $vtry to start up ex, but $vfail miserably.","":"$N $vtry to start up ex, but $vfail miserably.",]),"thinkso4":(["":"$N $vgo, \"I think so Brain, but we'd need an awfully large number of marshmallows for that wouldn't we?\"",]),"ew":(["":"$N $vgo \"EEeewwwww.... GROSS!\"",]),"mountain":(["":"$N $vsay, \"I have seen the top of the mountain. And it is good.\"",]),"thinkso3":(["":"$N $vgo, \"Well, I think so Brain.. but just where does all that cheesewhiz come into the picture?\"",]),"peace":(["LIV":"$N $vflash the peace sign at $t.","":"$N $vflash the peace sign.",]),"thinkso2":(["":"$N $vthink hard for a moment and $vsay, \"I -think- so Brain, but once the time machine is built, won't we need to make new verb tenses?\"",]),"thinkso1":(["":"$N $vgo, \"I think so Brain, but how can we afford all the pantyhose?\"",]),"parrot":(["":"$N $vsay, \"This parrot is NO MORE!\"",]),"er":(["":"$N $vgo, \"Er...\"",]),"orbust":(["STR":"$N $vexclaim, \"$O or bust!\"",]),"snow":(["LIV":"$N $vare disgusted by the fact that every time $t $v1scratch $p1 head, it snows.","":"$N $vscratch $p0 head and it snows.",]),"snot":(["":"$N $vdrool diseased snot from $p runny nose.",]),"tame":(["LIV":"$N $vwant $n1 to be $p tame coder.","STR":"$N $vwant a tame $o.","":"$N $vwant a tame coder.","LIV STR":"$N $vwant $n1 to be $p tame $o.",]),"wabe":(["LIV":"$N $vwabe to $t. Looks like $n missed the v.","":"$N $vgyre and $vgimble and $vmiss the 'v'.",]),"eh":(["LIV":"$N $vlook at $t and $vgo, \"Eh?\"","OBJ":"$N $vlook at the $o and $vgo, \"Eh?\"","STR":"$N $veh $o.","":"$N $vgo, \"Eh?\"",]),"brain":(["LIV":"$N $vgo, \"Check out the big brain on $tp!\"","":"$N $vexclaim, \"The same thing we do EVERY night Pinky, TRY TO TAKE OVER THE WORLD!\"",]),"bounce":(["LIV":"$N $vroll $t up into a ball and $vbounce $t around.","STR":"$N $vbounce $o.","":({"B O I N G ! ","$N $vbounce around happily. ",}),]),"ea":(["LIV":"$N $vgive $t an emoteapropos.","":"$N $vhaul out 'emoteapropos'.",]),"wantus":(["LIV":"$N $vsuggest, \"Maybe that's what $tp WANTS us to think.\"","":"$N $vsuggest, \"Maybe that's what they WANT us to think.\"",]),"dopey":(["":".",]),"snog":(["LIV":"$N $vgrab $t and $vgive $t a good snog.","STR":".","":"$N $vsnog.",]),"joke":(["":"$N $vpoint out that that was obviously a joke.",]),"snod":(["LIV":"$N $vsmile and $vnod at $t.","":"$N $vsmile and $vnod.",]),"ow3b":(["LIV":"$N $vthink $t worships OpenWindows",]),"noclass":(["LIV":"$N $vsay, \"$Tp, you're just like school in summer: NO CLASS!\"","STR":"$N $vsay, \"$O, you're just like school in summer: NO CLASS!\"",]),"chuckleleg":(["LIV":"$N $vchuckleleg at $t.","":"$N $vchuckleleg.",]),"bitch":(["LIV":"$N $vsing \"Well, $n1p is a bitch, $n1p's a big fat bitch, $n1p's the biggest bitch in the whole wide word. $N1p's a stupid bitch if there ever was a bitch, $n1p's a bitch to all the boys and girls!\"","":"$N $vbitch and $vmoan.",]),"show":(["LIV STR":"$N $vshow $t $p $o.",]),"bigspam":(["":"$N $vspam brutally... ========================================== | ,dP''8a '888888b, d8b '888b ,888' | | 88b ' 888 d88 dPY8b 88Y8b,8888 | | `'Y8888a 888ad8P'dPaaY8b 88 Y88P888 | | a, Y88 888 dP Y8b 88 YP 888 | | `'8ad8P'a888a a88a;*a888aa88a a888a | | ;*;;;;*;;;*;;;*,, | | _,---''6ooc,*;;;*;;;*;;*d;, | | .-' 666o6o6o6oc,*;;*;dHH; | | .' nhhn,. 6666o66oo6o6o6cMMMMMM`. | | / nhhhhhhhn,66666666666o6oo6MMMMMW,\\ | | .,nhhhhhhhhnhY666666666666666MMMMWHP', | | |nhhhhhhhnhMFjj,boY6666666666MMMWWHP | | | ``hhhhhnhWFjjjjjbbbbbboY6666MMMWWHPf ' | | \\ `mYHMFjjjjjjjjbbbbbbbbbboYHHPP'` / | | `. ''ijjjjjjjjjmbbbbbbbbbbbbbo, ,' | | `-._`iijjjjmMF`'bbbbb<=========. | | `---..._______...|<[Hormel | | | `=========' | ========================================== ",]),"magnify":(["LIV":"$N $vpass $t a magnifying glass.",]),"risc":(["":"$N $vsay, \"Risc architecture is going to change the world!\"",]),"goggle":(["LIV":"$N $vgoggle at $t.","STR":"$N $vgoggle $o.","":"$N $vgoggle.",]),"urge":(["LIV STR":"$N $vurge $t to: $o.",]),"anvil":(["LIV":"$N $vthreaten $t with an anvil.",]),"emotecommand":(["":"$N $venvision a LIMA where you never have to use the emote command.",]),"nobog":(["LIV":"$N $vintone to $t, \"You have not yet achieved the Zen of Bog, and so your karma has failed.\"",]),"storm":(["LIV":"$N $vstorm about, gesturing wildly, and throwing things at $t.","STR":"$N $vstorm around angrily cursing and gesturing wildly about $o.",]),"dbrox":(["LIV":"$N $vtry to prove that Deathblade rocks $t, but $vfail miserably.","":"$N $vare compelled to note how little Deathblade rocks.",]),"boast":(["STR":"$N $vboast, \"$o\".",]),"notmi":(["":"$N $vgrumble about yet another missing TMI command...poorly substituted by an emote.",]),"learn4food":(["":"$N $vwave around a sign, \"Willing to Learn for Food\"",]),"nodbog":(["LIV":"$N $vnodbog at $t.","OBJ":"$N $vnodbog at $o.","STR":"$N $vnodbog $o.","":"$N $vnodbog.",]),"nfclue":(["LIV":"$N $vtell $t that $n $vhave no fucking clue.","":"$N $vadmit that $n $vhave no fucking clue.",]),"cringe":(["LIV":"$N $vcringe in pain at the very thought of what $ts $v1are saying.","STR":"$N $vcringe $o.","":"$N $vcringe.",]),"notme":(["LIV":"$N $vshake $p head at $t and $vdeclare, \"Not me!\"","":"$N $vdeclare, \"Not me!\"",]),"dc":(["":"$N $vnote that DC is a thrid world country.",]),"reality":(["":"$N $vnote that we will be restoring normality when we are sure what is normal anyway.",]),"cluck":(["":"$N $vcluck like a chicken.",]),"sheepish":(["":"$N $vlook sheepish. $N $vlook around nervously for people from Montana.",]),"sbog":(["":"$N $vgo, \"Super-Bog!!!!\"",]),"sickfucker":(["LIV":"$T $v1know $nt $vare a gimp pervert.",]),"wavehead":(["LIV":"$N $vwavehead to $t.","STR":"$N $vwavehead $o.","":"$N $vwavehead.",]),"subtle":(["LIV":"$N $vwhap $t over the head with a subtle point.",]),"chase":(["LIV":"$N $vchase $t.",]),"bogtoe":(["STR":"$N $vbogtoe $o.","":"$N $vbogtoe.",]),"misery3":(["":"Misery enters Lima Bean.",]),"misery2":(["":"%^CHANNEL%^[announce]%^RESET%^ Misery enters Lima Bean.",]),"bunghole":(["LIV":"$N $vlook at $t and $vgo, \"Bunghole.\"","":"$N $vask, \"Would you like to see my bunghole?\"",]),"camel2":(["":"$N $vspark up a %^B_ORANGE%^ %^RESET%^%^B_WHITE%^%^BLUE%^ CAMEL %^RESET%^%^B_RED%^ %^RESET%^",]),"join":(["LIV":"$N $vroll $t up into a joint and $vsmoke $t.",]),"i3test":(["LIV":"$N $vtest something ($t $ts $t)",]),"confused":(["":({"You display a look of confusion in hope for some help. ","$N $vlook very confused. ",}),]),"100sign":(["":"$N $vpresent archeological evidence suggesting early LIMA mudlib writers carried signs reading \"100 by 100 A.D.\"",]),"ffstfu":(["LIV":"$N $vadvise $t, \"Feel free to shut the fuck up.\"",]),"salma":(["":"$N $vdecide to drop out of life and become a Salma Hayek groupie.",]),"snack":(["":({"In need of a snack, you type \"AFK (Away From the Keyboard)\" and dash off! ","$N $vare AFK (Away From the Keyboard) for a sec, in search of a snack. ",}),]),"skank":(["":"$N $vsay, \"I'm not Skank... Skank's over there... Skank's dead.\"",]),"thinkso":(["":"$N $vgo, \"I think so Brain, but where are we going to get all the chickens?\"",]),"catfight":(["":"$N $vscream, \"Catfight!!!!!!!!!\"",]),"blubber":(["LIV":"$N $vblubber at $t.","OBJ":"$N $vblubber at $o.","STR":"$N $vblubber $o.","":"$N $vblubber.",]),"amen":(["":"$N $vgo, \"Amen brother!\"",]),"nutsack":(["STR":"$N $vdo $p best crypt-keeper: \"Here's a little take from my nutsack: $O\"","":"$N $vdo $p best crypt-keeper: \"Here's a little tale from my nutsack!\"",]),"karate":(["LIV LIV":"$N $vjump up into the air, and $vkick $t and $t2 simultaneously!",]),"pbye":(["":"$N $vwaves to you and $vsay, \"Good bye!\"",]),"boredboredboredboredbored":(["":"$N $vare Super Fucking Bored to type it out 5 times.",]),"lunch":(["":"$N $vstate hungrily, \"I'm off to get me some lunch...\"",]),"gottago":(["":"$N $vsay, 'Gotta go!'",]),"knee":(["LIV":"$N $vknee $t where it hurts.",]),"blam":(["":"BLAM!",]),"thrash":(["LIV":"$N repeatedly $vbeat $p1 head against the nearest brick wall.","":"$N repeatedly $vbeat $p head against the nearest brick wall.",]),"propose":(["":"$N $vpropose a toast.",]),"blah":(["":"$N $vblah.",]),"asdf":(["":"$N obviously $vhave nothing to do, since $n $vare typing \"asdf\".",]),"simple":(["LIV":"$N $vlook at $t and $vsay, \"Simple pleasures for simple minds, I guess.\"","":"$N $vsay, \"Simple pleasures for simple minds, I guess.\"",]),"addsalt":(["LIV":"$N $vsalt $t liberally.",]),"verbs2":(["":"$N $vgo through the Merriam-Webster New Collegiate Dictionary, making LIV rules for all the transitive verbs.",]),"onehand":(["LIV":"$N $vnotice that $ts $v1are an expert at one handed typing...",]),"bc":(["":"$n goes, \"ON WITH THE BODY COUNT!\"",]),"3270":(["":"$N $vgrowl, \"If you value your life, you won't send me escape sequences!\"",]),"marines":(["LIV":"$N $vwavie $p marines at $t.","":"$N $vwavie $p marines.",]),"bslap":(["LIV":"$N $vslap $t as if $ts were a bitch.","":"$N $vlook around for a bitch to slap.",]),"beekfix":(["":"$N $vnote that this is soooooo easy that even Beek could fix it.",]),"missionary":(["LIV":"$N $vscream, \"Missionary!\" at $t.",]),"wibble":(["LIV":"$N $vwibble contentedly in $p1 general direction.","STR":"$N $vwibble $o.","":"$N $vwibble contentedly.",]),"tgif":(["":"$N $vsay, \"Thank goodness it's Friday.\"",]),"calin2":(["":"$N $vgo, \"Shuddup before I nuke you!\"",]),"bluescreen":(["":"$N $vdisappear and $vare replaced by a blue screen covered with cryptic information.",]),"ligament":(["":"$N $vgo, \"Ligament.\"",]),"sweater":(["LIV":"$N $vtell $t, \"HEY! MISSY! GO KNIT ME A SWEATER, BEFORE I SLAP YOUR FACE!\"","":"$N $vsay, \"If some sissy chick tried to kick my ass, I'd say, 'HEY! MISSY! GO KNIT ME A SWEATER, BEFORE I SLAP YOUR FACE!'\"",]),"kickleg":(["LIV":"$N $vkickleg $t.",]),"bogemotes":(["":"$N $vnote that all the bogemotes could have been handled with a bog STR rule.",]),"shuffle":(["":"$N $vshuffle off and $vshoot $r.",]),"handkerchief":(["LIV":"$N $vwave $p handkerchief at $t and $vyell, 'Yoohoo! Come here, you big boy!'",]),"cards":(["LIV":"If $n1 $v1play $p1 cards right, $n0 will make $t1 $p0 bitch.",]),"frood":(["LIV":"$N $vadmit that $t is a hoopy frood.","":"$N $vsay, \"It's a hoopy frood.\"",]),"upyernose":(["LIV":"$N $vtell $t, \"Up your nose with a rubber hose!\"","":"$N $vgo, \"Up your nose with a rubber hose!\"",]),"disturbance":(["LIV":"$N $vsay, \"I felt a great disturbance in $t, as if millions of voices suddenly cried out in terror and were suddenly silenced. I fear something terrible has happened.\"","STR":"$N $vsay, \"I felt a great disturbance in the $o, as if millions of voices suddenly cried out in terror and were suddenly silenced. I fear something terrible has happened.\"","":"$N $vsay, \"I felt a great disturbance in the Force, as if millions of voices suddenly cried out in terror and were suddenly silenced. I fear something terrible has happened.\"",]),"snigger":(["STR":"$N $vsnigger $o.","":"$N $vsnigger.",]),"alone":(["":"$N $vscream, \"You're connected to a whole planet! What the hell do you think?!! Get a real brain!\"",]),"ah":(["LIV":"$N $vgo to $t, \"Ah...\"","":"$N $vgo 'AH...'",]),"veal":(["":"$N $vsay, \"Ah... Veal. The meat of love. How romantic.\"",]),"glorph":(["STR":"$N $vglorph $o.","":"$N $vglorph.",]),"thinks.":(["STR":"$N $vthinks. $o.","":"$N $vthinks..",]),"riot":(["LIV":"$N $vstart a riot. $Ts $v1get $p1 head beaten with a lead pipe.","":"$N $vbegin rioting.",]),"idle":(["LIV":({"$N $vdecide that $ts $v1have idled enough, so $n calmly $vinform $t that $ts $v1need to come back to the mud. ","$N $vscream in $p1 face: STOP IDLING!!! ALL YOU EVER DO IS IDLE!!!! ",}),"":({"You might actually get something done if you didn't idle so much. *hint, hint* ","$N $vidle, AGAIN, does $N ever do anything BUT idle?!? ",}),]),"tmi2":(["":"$N $vwonder if TMI-2 wasn't doomed from the point it named itself after a nuclear meltdown.",]),"ab":(["":"After that nice round of ass lovin', $n $vexperience a bit of bloody anal seepage.",]),"aa":(["STR":"$N $vsay, \"Hi, I'm $n0p and I'm a $o.\"","LIV STR":"$N1 $v1say, \"Hi, I'm $n1p and I'm a $o.\"",]),"bpoke":(["LIV":"$N $vpoke $t in the tummy with a bonecrushing sound!",]),"bhide":(["LIV":"$N $vhide from $p1 wrath.","STR":"$N $vhide from Beek's wrath, mumbling \"$o...\"","":"$N $vhide from Beek's wrath.",]),"princeton":(["":"$N $vquirk \"Whats princeton?\"",]),"cufflinks":(["LIV":"$N1 had best unfuck $r1 and start shitting $t0 Tiffany cufflinks or $n will definitely fuck $t up.",]),"rawhide":(["":"$N $vsing, \"Head 'em up, move 'em out, RAWHIDE!\"",]),"b5":(["":"Babylon 5 is on! Stand up and rejoice!",]),"sunke":(["":({"You snuke. ","$N $vsunke. (How the hell do you sunke?) ",}),]),"notkicking":(["LIV LIV":"$N $vnote that $t $v1are doing something to $p2 ass, but $n1 $v1are definitely not kicking it.",]),"wedgy":(["LIV":"$N $vpull $p1 underwear up over $p1 head, then $vstapple it there","OBJ":"$N $vwedgy $T",]),"girn":(["STR":"$N $vgirn $o because $n couldn't spell \"Grin\".","":"$N $vgirn like an idiot because $n couldn't spell \"grin\".",]),"zuul":(["STR":"$N $vgo, \"There is no $o. There is only Zuul.\"",]),"girl":(["LIV":"$N $vask $t, \"How much for the little girl? I wanna buy the little girl.\"","":"$N $vask, \"How much for the little girl? I wanna buy the little girl.\"",]),"squick":(["LIV":"$N $vsquick $t","STR":"$N $vsquick $o",]),"jackass":(["LIV LIV":"$N $vguess $t found out $n2 $v2are a jackass.",]),"physicist":(["LIV":"$N $vnote that $t $v1are a physicist, and therefore cannot get any.",]),"flashlight":(["LIV":"$N $vshine a flashlight in $p1 ear; light shines out $p1 other ear.",]),"mudlib":(["":"$N $vwave around a sign, \"Will write mudlib for food.\"",]),"wigglestick":(["":"$N $vsing, \"I've got a wiggle stick, MAMA!\"",]),"bumpersticker":(["STR":"$N $vsmack a bumper sticker reading '$O' on his butt.","LIV STR":"$N $vsmack a bumper sticker reading '$O' on $p1 butt.",]),"willis":(["LIV":"$N $vask $t, \"What you talkin' 'bout, Willis?\"",]),"tyep":(["LIV":"$N $vnote that $t should learn to tyep.","":"$N cna't tyep.",]),"muchmore":(["LIV STR":"$N $vare clearly _much_ more $o than $n1.",]),"swig":(["":"SWIG: It's not your mother's wrapper generator.",]),"stink":(["LIV":"$N politely $vinform $t that $n1s $v1stink and that $n1s should go take a shower.","":"Boy, $N sure $vdo stink today.",]),"ring":(["LIV":"$N $vring $n1.",]),"flipoff":(["LIV":"$N $vflip $t off.","STR":"$N $vflip everyone off while screaming, \"$o\".","":"$N $vflip everyone off.",]),"smilepenis":(["STR":"$N $vsmilepenis $o.","":"$N $vsmilepenis.",]),"impeach":(["LIV":"$N $vimpeach $t quasi-judicially.",]),"sprintlink":(["":"$N $vwave a banner in the air proclaiming the death of sprintlink.",]),"stomp":(["LIV":"$N $vstomp on $p1 head.","STR":"$N $vstomp $p feet $o.","":"$N $vstomp $p feet.",]),"asap":(["":"$N $vgo, \"As soon as possible.\"",]),"excuse":(["LIV":"$N $vexcuse $t.",]),"prozac":(["":"$N $vsay: Wheres that PEZ dispenser that's filled with prozac?",]),"launch":(["LIV STR":"$N $launch into a long, boring monologue until someone does or says something...",]),"terror":(["LIV":"$N $vsay to $t, \"Don't be too proud of this technological terror you've constructed.\"","":"$N $vsay, \"Don't be too proud of this technological terror you've constructed.\"",]),"fdohleg":(["":"$N fucking $vd'ohleg.",]),"jungle":(["LIV":"$N $vscream in $p1 face, \"WELCOME TO THE JUNGLE BABY! YOU'RE GONNA DIE!\"","":"$N $vscream, \"WELCOME TO THE JUNGLE BABY! YOU'RE GONNA DIE!\"",]),"target":(["LIV":"$N $vsay to $t, \"Stay on target!\"","":"$N $vsay, \"Stay on target!\"",]),"angel":(["":"$N $vsprout wings and a halo, then $vsmile angelically. (It's not $p fault! Really!)",]),"bbhead":(["":"$N $vtake $p head off $p shoulders and aimlessly $vbounce it around like a basketball.",]),"skip":(["STR":"$N $vskip $o.","":"$N $vskip.",]),"whinge":(["STR":"$N $vwhinge $o.","":"$N $vwhinge.",]),"skin":(["":"$N sing, \"Must be your skin, I'm sinking in. Must be for real, because now I can feel.\"",]),"ijig":(["LIV":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig around $t.","OBJ":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig around the $o.","STR":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig $o.","":"$N $vlace on $p black leather shoes and $vdo a fine Irish jig.",]),"ambig":(["LIV":"$N $vpoint out an ambiguity to $t, and $vbop $t on the nose.",]),"limaleg":(["":"(L)ets (I)ncinerate (M)ore (A)sinine Leggers.",]),"chant":(["STR":"$N $vchant: \"$O! $O! $O!\"",]),"sunday":(["":"$N $vscream: Sunday Sunday Sunday! LIVE on pay-per-view!...",]),"enormousgenitals":(["":"$N $vannounce, \"Traveling comes naturally to Guard Number 3, as he's a licensed airplane pilot, welcome please, Enormous Genitals!\"",]),"roll":(["LIV":"$N $vroll $p1 eyes.","STR":"$N $vroll $o.","":"$N $vroll $p eyes.",]),"guano":(["LIV":"$N $vwarn $t not to try any of $p1 preversions.",]),"fixitp":(["LIV":"$N $vplead to $t, \"Fix my bug? Pleeaaseee?\"",]),"grok":(["STR":"$N $vgrok $o.","":"$N $vgrok.",]),"mumble":(["LIV":"$N $vmumble something about $t being a dork.","STR":"$N $vmumble something about $o.","":"$N $vmumble.",]),"lassie":(["LIV":"$N $vsay, 'Whats that Lassie? You say $t fell down a mineshaft?!'","STR":"$N $vsay, 'Whats that Lassie? You say $o fell down a mineshaft?!'","":"$N $vsay, 'Whats that Lassie? You say Timmy fell down a mineshaft?!'",]),"punkass":(["LIV":"$N $vsay to $t, \"You ain't nothing but a punk-ass bitch!\"",]),"imho":(["STR":"$N $vgo, \"In my humble opinion, $o\"",]),"punkrock3":(["LIV":"$N $vthrow a spiked leather jacket around $p1 shoulders. Scrawled on the back of it are the words \"VERY PUNK\"",]),"punkrock2":(["LIV":"$N $vshave some words in the side of $p1 head. They read \"I AM PUNK ROCK\"",]),"eye":(["LIV":"$N $veye $t suspiciously.","":"$N $veye everyone suspiciously.",]),"mmission":(["LIV":"$N $vnote that $ts $v1are a man with a mission!","":"$N $vsay, \"I'm a man with a mission!\"",]),"panic":(["STR":"$N $vpanic $o.","":"$N $vpanic.",]),"envy":(["LIV":"$N $venvy $t.",]),"cartoon":(["STR":"$N $vsay, \"Warning: The LIMA mudlib contains cartoon violence, and may not be suitable for younger viewers\" as $n $vare flattened by a falling $o.","":"$N $vsay, \"Warning: The LIMA mudlib contains cartoon violence, and may not be suitable for younger viewers\" as $n $vare flattened by a falling piano.",]),"disclaim":(["":"$N $vnote, \"All emotes in this mudlib, even those based on real people--are entirely fictional. All celebrity quotes are impersonated....poorly. The LIMA mudlib contains coarse language and due to its content it should not be used by anyone.\"",]),"submerge":(["LIV":"$N $vsubmerge $p face in $p1 crotch enthusiastically and with a flurry of tongue, saliva, technique and passion, $vbring $n1o to a loud climax.",]),"nosefuck":(["LIV":"$N $vfuck $t in the nose, and $ts smelt $n10o coming.",]),"bye":(["STR":"$N $vwave to $O and $vsay, \"Good Bye!\"","":"$N $vwave, \"Goodbye!\"",]),"ejectcore":(["":"$N $vshout, \"The anti-matter containment field is destabilizing...eject the warp core, NOW!\"",]),"stickit":(["LIV":"$N $vtell $t, \"Why don't you try sticking your head up your ass... see if it fits.\"",]),"beware":(["":"$N $vwarn: Beware of programmers who carry screwdrivers.",]),"peta":(["":"$N $vnote that no animals were harmed during the making of this mudlib.",]),"good":(["LIV":"$N $vtell $t: \"That's a good thing (tm).\"","":({"You tell everyone: \"That's a good thing (tm).\" ","$N $vstate: \"That's a good thing (tm).\" ",}),]),"scooby":(["LIV":"$N $vsay, \"Now let's find out who $Tp really is!\" $N then $vproceed to remove $p1 mask, revealing James, the museum curator!",]),"helpme":(["":"$N $vcall the operator asking for help....\"Yeah, I'm at the corner of WALK and DON'T WALK!\"",]),"hell":(["":"$N $vwonder where we are going.... and why are we in this handbasket?",]),"sesame":(["WRD WRD WRD":"$N $vnote that today's episode was brought to you by the letter '$O0', the number '$o1', and the emote '$o2'.",]),"googly":(["":"$N $vexclaim, \"That was a wicked googly!\"",]),"suxsomuch":([]),"sosmooth":(["":"$N $vgo, \"I'm so smooth, I even have a beard on my hands.\"",]),"zorkers":(["":"$N $vnote, \"Zorkers do it under the rug!\"",]),"toomanylegs":(["LIV":"$N $vhand $t a flower, and $vask for a donation for the Society for the Prevention of New Leg Emotes.",]),"believe":(["LIV":"$N $vbelieve $t.",]),"phaser":(["STR":"$N $vset $p phaser to '$o'.",]),"zort":(["":"$N $vgo \"Narf! Zort!\"",]),"netradio":(["":"$N $vspawn the NETRADIO and $vget down with DA GROOVE!",]),"xpelt":(["LIV":"$N $vtie $t to the bed and $vpelt $t with lacy underwear.","LIV STR":"$N $vtie $t to the bed and $vpelt $t with $o.",]),"glutton":(["LIV":"$N $vnotice that $t is a glutton for punishment. Any S&M freaks here?",]),"yawn":(["LIV":"$N $vyawn at $t.","STR":"$N $vyawn $o.","":"$N $vyawn.",]),"promdress":(["LIV":"$N $vare off like $p1 date's prom dress.","":"$N $vare off like a prom dress.",]),"zork":(["STR":"$N $vzork $o.","":({"At your service."," ",}),]),"stfu":(["LIV":"$N $vtell $t to shut the fuck up.","STR":"$N $vtell $O to shut the fuck up.","":"$N $vshut the fuck up.",]),"wva":(["STR":"$N $vsay, \"$O: where the men are men, and the sheep are frightened.\"","":"$N $vsay, \"West Virginia: where the men are men, and the sheep are frightened.\"",]),"kingme":(["":"$N $vgo, \"King me!\"",]),"etaine":(["":"$N $vstomp and $vchomp!",]),"kosh2":(["":"$N $vmutter: \"And so it begins...\"",]),"whinefor":(["LIV":"$N $vwhine for $t.",]),"notes":(["":"$N $vremark that Lotus notes doesn't come with an email client, it comes with an example email application running on Notes.",]),"wuv":(["LIV":"$N $vwuv $t. Aww, how cute.",]),"chalk":(["LIV":"$N $vchalk $t up a point.","":"$N $vchalk $r a point.",]),"nmvlm":(["":"$N $vinsist that Nightmare tastes better than Lima.",]),"fart":(["LIV":"$N $vpin $t down and $vfart on $t!","STR":"$N $vfart out a noise that sounds eerily like \"$o\".","":({"You let out a nasty stench. ","There is a strange sound and suddenly the room smells gross. ",}),]),"flollop":(["":({"You flollop around like a mattress. ","$N $vflollop around, what does $n think $n is? A mattress? ",}),]),"perl":(["":"$N $vnote that Perl is probably the only interpreted language with a complexity level approaching C++.",]),"idspispopd":(["":"$N $vtype, 'idspispopd'. \"No Clipping Mode On.\"",]),"borken":(["LIV":"$N $vsee that $t $v1are borken.","":"$N $vare borken.",]),"fark":(["":"$N $vpretend $n $vare Cletus on '3 Kingdoms' and $vgo 'Fark'.",]),"chainsaw":(["":"$N got the chainsaw. \"Find some meat!\"",]),"master":(["":"$N $vcry out: Wanted: Master ... willing to participate in bondage and S&M acts.",]),"lesbian":(["LIV":"No one knows that $t $v1are a lesbian!","":"No one knows that $n $vare a lesbian!",]),"strip":(["":"$N $vremove $p clothes seductively.",]),"dreams":(["":"$N $vknow that Dreams is really a loser, but is nice enough not to say anything.",]),"gulp":(["LIV":"$N $vgulp down $p1 Kool-Aid.","":"$N $vgulp down the Kool-Aid.",]),"vader":(["":"$N $vsay, \"When I left you, I was but the learner. Now I am the master.\"",]),"monkamillion":(["":"$N $vsay, \"monkey, monkey2, monkey3....monkamillion.\"",]),"gravy":(["LIV":"Gamedriver asks $t, \"How about some gravy for those fries?\"",]),"makebabies":(["LIV":"$N $vsay to $t, \"Hey, Woman! Shut your mouth! And make babies!\"",]),"gimp":(["":"$N $vgo, \"Bring out the gimp.\"",]),"rliv":(["":"$N $vexpress the opinion that \"random LIV\" should be the Official [tm] LIMA greeting.",]),"sorryjesus":(["":"$N $vexclaim, \"Oh, fuck! I'm sorry Jesus! Please don't kill me!\"",]),"texas":(["":"$N $vgo, \"Texas. The only place in the world where farting is a competative sport.\"",]),"jerky2":(["":"$N $vwhine \"My anal warts are kill'n me!\"",]),"esteem":([]),"texan":(["":"$N $vdon $p ten-gallon hat and spurs and $vride into the sunset.",]),"homechicken":(["LIV":"$N $vsay to $t, \"Damnit, go spank your own monkey, and stay away from mine, homechicken!\"",]),"silly":(["LIV":"$N $vsilly $t. You're so silly :-)",]),"wtf":(["STR":"$N $vsay, \"What the fuck $o??\"","":"$N $vgo, \"What the fuck?\"",]),"iknowbut":(["LIV":"$N $vsing to $t, \"I know, I should say no, but it's kinda hard when $tp is ready to go.\"","":"$N $vsing, \"I know, I should say no, but it's kinda hard when she's ready to go.\"",]),"bodyslam":(["LIV":"$N $vbodyslam $t into the wall.","LIV STR":"$N $vbodyslam $t $o.",]),"chortle":(["LIV":"$N $vchortle at $t.","STR":"$N $vchortle $o.","":"$N $vchortle.",]),"ymtc":(["LIV":"$N $vtell $t, \"You make the call!\"","":"$N $vsay, \"You make the call!\"",]),"fstick":(["LIV":"$N $vpunch $t in the stomach and $vgo, \"You're not going anywhere you evil-hosting fuck stick!\"","":"$N $vgo, \"You're not going anywhere you evil-hosting fuck stick!\"",]),"nopropos":(["LIV":"$N $vdare $t to find that without emoteapropos! >=)","":"$N didn't have to break out emoteapropos!",]),"cluephone":(["LIV":"$N $vgo, \"Ring, Ring, it's the Clue Phone for you, $tp!\"","":"$N $vgo, \"Ring, Ring, it's the Clue Phone!\"",]),"learn":(["LIV":"$N $vsay, \"You will go to the Lima Bean system, $tp, and there you will learn from Beek, the MudOS master who taught me.\"",]),"hum":(["":"$N $vhum a little ditty.",]),"whazzat":(["":"$N $vask, \"Whazzat?\"",]),"frobnicate":(["":"$N $vpause for a minute to sharpen $p frobnicating skills.",]),"huh":(["":"$N $vgo: huh?!?",]),"megaboob":(["":"$N $vsay, \"It's Megaboz, not Megaboob!\"",]),"agreeleg":(["LIV":"$N $vagreeleg with $t.","OBJ":"$N $vagreeleg with the $o.","STR":"$N $vagreeleg $o.","":"$N $vagreeleg.","LIV STR":"$N $vagreeleg with $t $o.",]),"hug":(["LIV":"$N $vhug $t.","OBJ":"$N $vhug $o.","STR":"$N $vhug $o.","":"$N $vhug $r.",]),"suspect":(["LIV":"$N $vsuspect it's a problem with $p1 code.","":"$N $vsuspect it's a problem with $p code.",]),"desttool":(["LIV":"$P hand wavers over $p dest tool as $n $vwatch $t carefully.","":"$P hand wavers over $p dest tool.",]),"peacep":(["":"$N $vflash you the peace sign.",]),"rhide":(["LIV":"$N $vrun and $vhide from $t.","STR":"$N $vrun and $vhide from $o.","":"$N $vrun and $vhide.",]),"breastfeed":(["LIV":"$N $vbreastfeed off of $t.","LIV LIV":"$N $vwatch in horror as $n1 $v1feed at $p2 breast.","":"$N $vare ready to breast feed anyone who is hungry.",]),"beered":(["LIV":"$N $vforce $t to consume a can of beer, and then $vgo, \"Beered!\"","":"$N $vgo, \"Beered. (hic)\"",]),"but":(["":"$N $vsay: But...",]),"mashed":(["":"$N $vsay, \"Shit, if this is gonna be that kinda party, I'm gonna stick my dick in the mashed potatoes.\"",]),"gnuwin32":(["":"$N $vwonder if Gnu-Win32 will ever make Windows NT into a a real OS... NOT!",]),"vulcan":(["LIV":"$N $vlook at $t, $vdo that thing with $p hand, and $vsay, \"Live long and prosper.\"","":"$N $vdo that thing with $p hand and $vsay, \"Live long and prosper.\"",]),"whistle":(["LIV":"$N $vwhistle at $t.","STR":"$N $vwhistle $o.","":"$N $vwhistle.","LIV STR":"$N $vwhistle $o at $t.",]),"monkey":(["LIV":"$N $vsay to $t, \"Go spank your monkey, dillweed!\"","":"$N $vsay, \"Monkey monkey monkey HEE-HEE-HUA-OHOO-OOHOO-HUA HOOO HOO!!\"",]),"sgfwaveleg":(["":"$N $vsupergigafuckingwaveleg.",]),"meatsmack":(["LIV":"$N $vsmack $t with $p meat.",]),"zoot":(["LIV":"$N $vzoot $t against the wall.",]),"zakkstealsalloflimascoolemotes":(["":"$N $vnote how Zakk steals all of Lima's cool emotes and $vwonder if he's even stolen this one!",]),"lameemote":(["STR":"$N $vcreate this to urge $T to help make more souls.",]),"truth2":(["LIV":"$N $vlook at $t with an air of drama and $vtell $n1o: I want the truth!","":"$N $vsay dramtically: I want the truth!",]),"advantage":(["":"$N $vpoint out the advantages of being an admin on almost every MUD in existence.",]),"huhuh":(["STR":"$N $vgo: Huhuh-hu-hu huh-huh hu-hu-huh... $o","":"$N $vgo: Huhuh-hu-hu huh-huh hu-hu-huh...",]),"puffofsmoke":(["LIV":"$N $venjoy $p1 puff of smoke.","":"$N $venjoy a puff of smoke.",]),"zoom":(["STR":"$N $vzoom $o.","":"$N $vzoom.",]),"iizukaissodumb":(["LIV":"Iizuka is so dumb that he didn't even find \"This Is Spinal Tap\" to be one of the best movies of all time; just ask $tp!","":"Izzuka is so dumb, he can't even find Spinal Tap an enjoying movie!",]),"tsk":(["LIV":"$N $vtsk at $t.","STR":"$N $vtsk $o.","":"$N $vtsk.",]),"qwertyuiop":(["":"$N $varen't kidding anyone $n $vare interested by doing \"qwertyuiop\".",]),"aalsfbogleg":(["LIV":"$N above average little super fucking $vbogleg at the concept of $t.","STR":"$N above average little super fucking $vbogleg at the concept of $o.","":"$N above average little super fucking $vbogleg at the concept of it.",]),"battle":(["LIV":"$N $vdecide not to challenge $t to a battle of wits. It's not fair to attack the unarmed.",]),"made2suffer":(["":"$N $vexclaim, \"We seem to have been made to suffer. It's our lot in life.\"",]),"blowsgoats":(["LIV":"$N $vhold up a sign, reading: '$N1p blows goats. I have proof.'",]),"111":(["":"$N $vscream, \"Don't give me none of that!\"",]),"faq2":(["LIV":"$T $v1give up on the FAQ and $v1decide to log in at Lima Bean and pester someone there for the answer instead.","":"$N $vgive up on the FAQ and $vdecide to log in at Lima Bean and pester someone there for the answer instead.",]),"shiver":(["":"$N $vshiver.",]),"caress":(["LIV":"$N $vcaress $p1 face.",]),"movierights":(["":"$N $vretire rich after selling the LIMA mudlib movie rights.",]),"fdoh":(["LIV":"$N $vlook at $t and $vgo, 'Fucking d'oh!'","":"$N $vgo, 'Fucking d'oh!'",]),"etc":(["":"$N $vgo 'etc ...'",]),"pinky":(["":"$N $vask, \"So Brain, What are we going to do tonight?\"",]),"ksl":(["STR":"$N $vksl $o.","":"$N $vksl.",]),"giltest":(["OBJ":"$N $vtest $T",]),"holdhand":(["LIV":"$N $vhold $p1 hand.",]),"harry":(["":"$N $vnote that every mudlib needs a Harry.",]),"404":(["LIV":"$N $vscream in $p1 face, \"404 File Not Found!\"","LIV STR":"$N $vscream in $p1 face, \"404 File Not Found! The requested URL $o was not found on this server!\"",]),"headcrush":(["LIV":"$N $vframe $t with $p thumb and forefinger, and $vcrush $p1 head!",]),"nestle":(["LIV":"$N $vnestle close to $t.",]),"gipper":(["LIV":"$N $vimplore $t to win one for the gipper!","":"$N $vsay, \"That's another one for the gipper!\"",]),"zone":(["":"$N $vzone out.",]),"plead":(["LIV":"$N $vplead with $t.",]),"productive":(["LIV":"$N $vtry to think of something productive for $t to do.","":"$N $vtry to think of something productive to do.",]),"overhead2":(["":"$P hair moves as something passes over $p head.",]),"rofl":(["LIV":"$N $vpoint at $t and $vstart laughing hysterically.","STR":"$N $vroll on the floor whimpering, \"$O... oh jeezus $o..\" and laughing uncontrollably.","":"$N $vroll on the floor laughing.",]),"pudmachine":(["LIV":"$T $v1are a pud pounding machine!","":"$N $vare a pud pounding machine!",]),"grasp":(["LIV":"$N $vgrasp $t.",]),"pinhead":(["LIV":"$N $vthink that $t $v1are too pointless to even be called a pinhead.",]),"grin":(["LIV":"$N $vgrin at $t.","at LIV":"$N $vgrin at $t.","STR":"$N $vgrin $o.","":"$N $vgrin.","STR LIV":"$N $vgrin $o at $t.","LIV STR":"$N $vgrin $o at $t.",]),"nototlw":(["":"$N $vnote that that is NOT the One True Lima Way (*Tm)",]),"release":(["LIV":"$N $vask $n1 what _$p1_ release schedule is.",]),"monster":(["":"$N $vsay: Well, I tamed the boner monster!!! Who wants to pet it?",]),"crappucino":(["":"$N $vgo, \"I need more CRAPPUCINO for my BUNGHOLE!!! AaaaAaaAaAAaAAaahhhh!\"",]),"sheets":(["":"$N $vmumble, \"Look at what you did to my sheets...\"",]),"bzzt":(["":"$N $vshout, \"Bzzzt, wrong! Try again, dumbass!\"",]),"kinkybog":(["":"$N $vgo, \"Little super fucking kinky sex with heavy machinery bog.\"",]),"limabean":(["":"$N $vnote that Lima Bean is the only mud using the Lima lib that is open to the public.",]),"fondle":(["LIV":"$N $vfondle $t.","":({"$N $vfondle $r. ","$N $vfondle $r, moaning with pleasure. ",}),"LIV STR":"$N $vfondle $p1 $o.",]),"blarg":(["":"$N $vgo blarg.",]),"dopefish":(["":"$N $vnote that, \"The Dopefish lives!\"",]),"billym":(["LIV":"$N $vsay, \"$tp called the shit 'POOP'!\"","":"$N $vsay, \"He called the shit 'POOP'!\"",]),"dust":(["":"$N $vsay, \"You can't really dust for vomit.\"",]),"remember":(["STR":"$N $vremember when $o.",]),"choparm":(["":"$N $vsay, \"It's just....you should be punished. I'm going to chop off your arm, are you ready?\"",]),"salute":(["LIV":"$N $vsalute $t, \"Aye Aye, Keptin!\"","STR":"$N $vsalute $o.","":"$N $vsalute.",]),"2600":(["":"$N $vsay, \"2600 or bust!\"",]),"ratbert":(["":"$N the consultant $vproclaim, \"We must identify and eliminate the deviant users of Macintosh, DOS and... God help us... OS/2 Warp.\"",]),"hrm":(["LIV":"$N $vhrm at $t.","STR":"$N $vhrm $o.","":"$N $vhrm.",]),"oops":(["":"$N $vgo, \"Oops!\"",]),"nibble":(["LIV":"$N $vnibble $p1 earlobe.","":"$N $vnibble the air around $no. How odd!","LIV STR":"$N $vnibble $p1 earlobe $o.",]),"carpenter":(["LIV":"$N $vsuggest that $n1 $vgo on the Karen Carpenter diet plan.",]),"unstable":(["LIV":"$N $vnote that $p1 connection is looking a tad unstable.",]),"properties":(["STR":"$N $vprove $o are a bad thing, by showing that if you look at them the right way they look like properties.",]),"fries":(["LIV":"$N $vthink $t $v1are a few fries short of a Happy Meal.",]),"2001":(["LIV":"$N $vexclaim, \"My God! $Ts $v1are full of stars!\"","STR":"$N $vexclaim, \"My God! $O is full of stars!\"","":"My god, $n $vare full of stars.",]),"snap":(["STR":"$N $vsnap $p fingers $o.","":"$N $vsnap $p fingers.",]),"2000":(["":"$N $vsay, \"2000 or bust!!!\"",]),"etoh":(["":"$N $vexpound at length about the virtues of EtOH.",]),"lookforsomething":(["":"$N $vlook around for something to code.",]),"klingon":(["LIV":"$N $vwave a blinky, whirly thing over $T and $vsay, \"Heartbeat is all wrong, his body temperature is..Jim, this man is a Klingon!\"",]),"wowo":(["":({"$N go wowowowowowowo","$N goes wowowowowowowowowo",}),]),"dose":(["LIV":"$N $vhit $t with a dose.",]),"brb":(["STR":"$N $vhold up one finger and $vsay \"be right back ($o)\"","":"$N $vhold up one finger and $vsay \"be right back\"",]),"hideeho":(["":"$N $vwave 'Hi-dee-ho!'",]),"hold2":(["LIV":"$N $vhold $p1 hand.",]),"highschool":(["":"$N $vsay, \"That's what I like about high school girls... every year I get older, every year they stay the same age!\"",]),"kapow":(["":"KAPOW!",]),"shame":(["":"$N $vhang $p head in shame.",]),"zot":(["LIV":"$N $vzot $t.","":"$N $vzot a fly.","LIV STR":"$N $vzot $t $o.",]),"likelima":(["LIV":"$N $vthink $ts would like Lima more and more every day, when it starts turning from a very nice emote based chat system into a game base.","":"$N would like Lima more and more every day, when it starts turning from a very nice, emote based chat system, into a game base.",]),"myeyes":(["":"$N $vgo, \"My eyes! My eyes!\"",]),"frolick":(["LIV":"$N $vfrolick about with $t.","STR":"$N $vfrolick $o.","":"$N $vfrolick about.",]),"ffiddle":(["":"$N $vgo, \"Feel Free to fiddle with it.\"",]),"elbow":(["LIV":"$N $velbow $t.","":".",]),"zoo":(["LIV":"$N $vsay, \"Take $tp to the zoo. I hear retards like the zoo.\"","LIV LIV":"$N $vtell $n1, \"Take $n2p to the zoo. I hear retards like the zoo.\"","":"$N $vsay, \"Take her to the zoo. I hear retards like the zoo.\"",]),"sgfhrmleg":(["":"$N $vsupergigafuckinghrmleg.",]),"wow":(["":"$N $vgo, \"WOWSERS!\" You hear the Inspector Gadget theme song in the background.",]),"turing":(["LIV":"$N $vdeclare, \"Of course $n1 can! $N1 $v1are a Turing Machine!\"","":"$N $vdeclare, \"Of course it can! It's a Turing Machine!\"",]),"bejust":(["":"$N $vquote, \"Be Just and Fear not! Be on pot and fear nothing! Be on acid and fear everything! Be on crack and kill everything! Be on XTC and fuck everything! Be on peyote and BE everything!\"",]),"toomanylongemotes":(["":"There are too many long emote names in the Lima Lib's distribution, and $n $vare Not Happy about it.",]),"sfhehleg":(["":"$N $vgo, \"Super-fucking hehleg!\"",]),"pelt":(["LIV":"$N $vtie $t to a tree and $vpelt $t with small pebbles.",]),"butthead":(["STR":"$N $vbutthead: $o",]),"sfagreeleg":(["LIV":"$N super-fucking-$vagreeleg with $t!","STR":"$N super-fucking-$vagreeleg $o!","":"$N super-fucking-$vagreeleg!","LIV STR":"$N $vsuper-fucking-agreeleg with $t $o!",]),"shag":(["LIV":"$N $vshag $t good and rotten, baybee! (yeah!)","":"$N $vgo, \"Shagadelic, baby!\"",]),"2weiners":(["":"$N $vsay, \"If you had 2 weiners, how many nads would you have?\"",]),"woo":(["LIV":"$N $vlook at $t and $vgo, \"Woo woo!\"","":"$N $vgo: \"Woo woo!\"",]),"1000000":(["":"$N $vsay \"1,000,000 or bust!!!\"",]),"coolio":(["":"$N $vgo, \"Coolio!\"",]),"beanhead":(["":"$N $vsay, \"Oh, look! It's Beanhead! AGAIN!\"",]),"toy":(["":"$N $vtrade in all of LIMA's emotes for toys.",]),"wom":(["LIV":"$N $vtell $t \"Damn! Thats great! What's next, Write-Only Memory?!?!\"","":"$N $vdecide to get back to working on $p0 new project: Write Only Memory.",]),"tow":(["LIV":"$N $vtow $t around the room by $p1 ear.",]),"massage":(["LIV":"$N $vmassage $t sensuously.",]),"gogo":(["STR":"$N $vshout, 'Go Go Gadget $O!'",]),"kneel":(["LIV":"$N $vkneel before $t.","":"$N $vkneel on one knee.",]),"tor":(["OBJ":"Tor","STR":"Tor TESTS","":"Tor pats Lazyr on the ass",]),"fall":(["":"$N $vobserve it's not the fall that kills you, its that sudden stop at the end..",]),"woe":(["":"$N $vcry, \"Woe is me! Woe!\"",]),"fakeforce":(["LIV STR":"$N $vforce $t to: \"$O\".",]),"pentagonal":(["":"$N $vnote that it is hip to be pentagonal.",]),"lfboardleg":(["":"$N $vgo, \"Little fucking boardleg...\"",]),"oioi":(["":"$N $vchant OI! OI! OI! OI! !IO (oops) OI! OI! OI! OI!",]),"toe":(["LIV":"$N $vtoe $p1 corpse... \"He's dead, Jim!\"","":"$N $vgo, \"Toe.\"",]),"zakkrox":(["LIV":"$N $vtry to prove that Zakk's rocks are visible to $t, but $vfail miserably.","":"$N $vare compelled to note how little Zakk's rocks are.",]),"not":(["":"$N $vgo, \"Not!!\"",]),"rock":(["LIV":"$N $vsay, \"$Tp, you ROCK!\"","STR":"$N $vexpress $p opinion that $o rocks the mud.","":"$N $vsay 'ROCK and ROLL!'",]),"handspring":(["":"$N $vbounce around and $vdo handsprings to stay awake.",]),"router":(["STR":"$N $vblame $o's router for $p shitty link.","":"$N $vwonder whose router died this time.",]),"spasm":(["":"$N $vspasm spasmodically.",]),"overshareon":(["":"The overshare light is: [ON] off.",]),"creed":(["":"$N $vrecite the creed: MUD before all else!",]),"ftpbye":(["":"221 Goodbye.",]),"belch":(["LIV":"$N $vbelch in $p1 face!","STR":"$N $vbelch $o.","":"$N $vbelch.",]),"brainfart":(["":"$N brain $vfart.",]),"polygon":(["LIV":"$N $vnote that $t $v1are a few points short of a polygon.","":"$N $vare a few points short of a polygon.",]),"mvemote":(["":"$N $vjust tried to 'move' an emote... Heh.",]),"nog":(["LIV":"$N $vgive $t a good hard nog.","STR":"$N $vnod nog nog $o $o.","":"$N $vnod nog nog nog nog.",]),"nof":(["LIV":"$N $vnof at $t, just like Bobbo would.","":"$N $vnof just like Bobbo.",]),"nipplesuck":([]),"nod":(["LIV":"$N $vnod at $t.","at LIV":"=LIV","STR":"$N $vnod $o.","":"$N $vnod.","LIV STR":"$N $vnod at $t $o.",]),"iddqd":(["":"$N $vtype, 'iddqd'. \"Degreelessness Mode On.\"",]),"ucool":(["":"$N $vdecide that that is unsurpassedly cool.",]),"how":(["":"Gamedriver $vtell $n, \"How you do it is up to you...just so long as it works.\"",]),"lapdance":(["LIV":"$N $vsit on $t's lap and $vdo a little dance on it! (woo!)",]),"nottmi":(["":"$N $vapologize for $p lack of understanding, and $vblame it on overexposure to TMI.",]),"oink":(["":"$N $voink.",]),"hop":(["LIV":"$N $vhop around $t.","STR":"$N $vhop $o.","":"$N $vhop.",]),"hoo":(["":"$N $vgo: \"Hoo hoo!\"",]),"forgive":(["LIV":"$N $vforgive $t graciously.",]),"alibi":(["LIV":"$N $vsing to $t, \"U-G-L-Y, you ain't got no alibi, you UGLY! Your mama said you're ugly, huh!\"",]),"kingkong":(["LIV":"$N $vbeat $p chest and $vmoan like an animal, trying to impress $t.","":({"You beat your chest and moan like the animal you are!","$N beats $p chest and moans like an animal.",}),]),"shake":(["LIV":"$N $vshake $p head at $t.","OBJ":"$N $vshake $o.","STR at LIV":"=STR LIV","STR":"$N $vshake $p $o.","":"$N $vshake $p head.","STR LIV":"$N $vshake $p $o at $t.",]),"fgrep":(["":"$N $vgo, \"Fucking Grep.\"",]),"drool":(["LIV":"$N $vdrool all over $t. What a drooling geek!","STR":"$N $vdrool $o.","":"$N $vdrool, trailing tendrils of spit in $p wake.",]),"newbiealert":(["":"$N $vcry, \"Newbie! Newbie! Run for your lives! Idle if you must!\"",]),"5th":(["":"$N $vtake the 5th.",]),"worshipbuddha":(["":"$N $vgrovel at the feet of Buddha.",]),"lfcrashleg":(["":"$N $vboggle at the little fucking crashleg.",]),"box":(["":"$N $vthink $n $vneed a bigger box.",]),"chanfake":(["WRD WRD STR":"%^CHANNEL%^[$o0]%^RESET%^ $O1: $o2",]),"frownleg":(["LIV":"$N $vflash a pitiful frownleg to $t.","":"$N $vfrownleg.",]),"bow":(["LIV":"$N $vbow to $t.","STR to LIV":"=STR LIV","STR":"$N $vbow $o.","":"$N $vbow.","STR LIV":"$N $vbow $o to $t.",]),"toepenis":(["LIV":"$N $vtoe $p1 penis... \"It's limp, Jim!\"","LIV LIV":"$t $v1toe $p2 penis... \"It's limp, Jim!\"",]),"daddy":(["LIV":"$N $vgo to $t, \"Awww! Daddy doesn't understand me... Awww!!\"","":"$N $vgo, \"Awww! Daddy doesn't understand me... Aww!!\"",]),"cobol":(["":"COBOL: The language that can be replaced by a good CASE program.",]),"sarcasm":(["":"$N $vdrip with sarcasm.",]),"bop":(["LIV":"$N $vbop $t on the nose.","STR":"$N $vbop $o.","":"$N $vbop.","LIV STR":"$N $vbop $t $o.",]),"drunk":(["LIV":"$N $vtell $t, \"I'm not as think as you drunk I am.\"","":"$N $vgo, \"I'm not as think as you drunk I am...\"",]),"boo":(["LIV":"$N $vboo $t.","":"$N $vhiss and $vboo!","LIV STR":"$N $vboo $t $o.",]),"zoit":(["":"$N $vzoit.",]),"wanker":(["LIV":"$N $vcall $t a bloody wanker.","":"$N $vfeel like a bloody wanker.",]),"blank":(["":"This emote intentionally left blank.",]),"bok":(["":"$N $vflap $p arms and $vgo, \"Bok bok!\"",]),"shriek":(["LIV":"$N $vshriek \"Eeeeeeeeekk!\" excitedly at $t.","STR":"$N $vshriek $o.","":"$N $vshriek.",]),"bog":(["LIV":"$N $vbog at $t.","":"$N $vgo, \"Bog.\"",]),"genuflect":(["LIV":"$N $vgenuflects towards $O.",]),"tackle":(["LIV":"$N $vtackle $t!",]),"gwiiis":(["":"$N $vgo 'Ach du Lieber! Mein GWIIIS ist geveckgeschprungen! Hilfe Hilfe! Rufen sie bitte den Luftwaffe an!'",]),"tmi":(["":"$N $vsay, \"I did my time @TMI-2.\"",]),"beavis3":(["":"$N $vproclaim, \"The streets will flow with the blood of nonbelievers!\"",]),"way2go":(["LIV":"$N $vsay to $t, \"Way to go, Idaho!\"","":"$N $vsay, \"Way to go, Idaho!\"",]),"beavis2":(["STR":"$N $vdo $p best Beavis impression: $o","":"$N $vgo, \"I am the great Cornholio! I need TP for my bunghole!\"",]),"roar":(["":"$N $vgive out a mighty ROAR.",]),"truth":(["LIV":"$N $vgrab $t by the collar, $vlook $n1o in the eye and $vsay: You can't handle the truth!","":"$N $vrun around the room and $vscream in $p0 best Jack Nicholson voice: You can't handle the truth!",]),"silence":(["":"$N $vsay, \"Could we please have a moment of silence for my boner?\"",]),"tigranisdense":(["":"$N $vnote that Tigran is even more dense than the real numbers.",]),"miracle":(["LIV":"$N $vfear that God couldn't miracle $p1 ass over that obstacle.",]),"nodlegxx":(["LIV":"$N $vdo a super dupper joint rupturing nodleg at $t.","STR":"$N $vdo a super dupper joint rupturing nodleg $o.","":"$N $vdo a super dupper joint rupturing $vnodleg.",]),"consider":(["STR":"$N $vconsider $o.",]),"sfoow":(["":"$N $vgo, \"!ooW gnikcuf-repuS\"",]),"hrmaleg":(["":"$N hrm-a-$vleg.",]),"heaven":(["":"$N $vclaim that it is better to reign in hell than to serve Heaven 7.",]),"testplurals":(["":"$N $vpenis $vclitoris $voctopus $vplatypus $vemily.",]),"nmf":(["":"$N $vmutter \"It's not my fault . .\" In a Han Solo-like way . . .",]),"meth":(["LIV":"$N $vmeth $t.",]),"fail":(["STR":"$N $vtry to $o, but $vfail miserably.",]),"snicker":(["LIV":"$N $vsnicker at $t.","STR":"$N $vsnicker $o.","":"$N $vsnicker.","LIV STR":"$N $vsnicker at $t $o.",]),"revision":(["LIV":"$N $vindicate that $t $v1are a few revisions behind.",]),"blame":(["LIV":"$N $vblame $t.","STR":"$N $vblame $o.","":"$N $vspread the blame around like a fine French cheese.",]),"aeiouyeaoeaa":(["OBJ":"Wowels",]),"hmm":(["LIV":"$N $vhmm at $t.","":"$N $vhmm. ",]),"usetheforce":(["LIV":"$N $vurge, \"Use the force, $tp!\"",]),"jesus":(["":"$N $vsay, \"Stop me if you've heard this one... Jesus walks into an inn... He hands the innkeeper three nails... and asks, 'Can you put me up for the night?'\"",]),"shields":(["":"*BOOM!!* $N $vshout, \"We're hit! We're HIT! Shields are down! They're coming around....NNNOOOOOOooooooo.....\"",]),"justified":(["":"$N $vintone: \"Arrogance is justified.\"",]),"canhead":(["LIV":"$N $vcrush a beer can on $p1 forehead.","":"$N $vcrush a beer can on $p forehead.",]),"eatme":(["LIV":"$N $vcomplain to $n1 about the bloody soul and its phantom reflexivity.",]),"stackshit":(["LIV":"$N $vask $t, \"How tall are you, private?\" and $n1 $v1respond, \"Sir, five-foot-nine, sir!\". $N $vscream at $t, \"Five-foot-nine? I didn't know they stacked shit that high!\"",]),"laughleg":(["STR":"$N $vlaughleg $o.","":"$N $vlaughleg.",]),"mouth":(["LIV":"$N $vannounce, \"There's a party in $Tp's mouth; everybody's coming!\"",]),"mess":(["LIV LIV":"$N $vwarn $t1 not to mess with $t12 or $n will whip $p1 sorry ho ass back to last year.",]),"burp2":(["STR":"$N $o $vburp.",]),"geekhumor":(["":"$N $vspot signs of a pending eruption of geek humor, and $vinch towards the door.",]),"love":(["LIV":"$N $vlove $t.",]),"guilty":(["":"$N $vlook guilty.",]),"dont":(["LIV":"$N $vtell $t, \"Don't make me kick your ass!\"","":"$N $vpretend $n didn't hear that and $vturn with a decidely \"Don't look at me!\" attitude.",]),"francis":(["LIV":"If $n1 $v1call $n0 \"Francis\", $n0 will kill $t.","":"If any homos here calls $n \"Francis\", $n will kill them.",]),"badfuck":(["LIV":"$N $vfuck $t hard from behind. It wasn't worth $p0 time.",]),"limahshake":(["LIV":"$N $vgreet $t with the secret LIMA handshake.",]),"tittyfuck":(["LIV":"$N $vdeclare to $t, \"3y3 4/\\/\\ g01ng 2 +1++y phuc|< j00, b1+ch!\"",]),"musashileg":(["STR":"$N $vmusashileg $o.","":"$N $vmusashileg.",]),"scared":(["":"$N $vare scared o' THAT!",]),"emotesong":(["STR":"$N $vsing, \"$O silly emotes in the soul, $o silly emotes. Add one more, use it just once ...\"",]),"bmf":(["LIV":"$N $vshow $p wallet to $t. $Ts $v1gasp as $ts $v1notice it says, \"Bad Mother Fucker\" on it!","":"$N $vhave a wallet that says, \"Bad Mother Fucker\" on it.",]),"mapping":(["":"$N $vhold up a sign that says, \"pointerp(mapping) should be true, too!\"",]),"hls":(["":"$N $vnote: \"Rod, Reel, Arm, Boat. That's further than most people go when taking bait.\"",]),"whirl":(["STR":"$N $vwhirl $o.","":"$N $vwhirl.",]),"clinton":(["":"$N $vlie under oath, under the Oval Office desk, under the intern, under 65% approval (but only just)...",]),"word":(["":"$N $vtry to start up Word for Windoze, and $vsucceed miserably.",]),"cheech1":(["":"$N $vgo, \"da da dah dah da dah... my scaaarodem...\"",]),"aspirin":(["LIV":({"$N $vgive $t an aspirin.","$N solemnly $vpush an aspirin to $t with $p0 toy ambulance.","$N kindly $vpass $t an aspirin with $p0 toy ambulance.",}),]),"bingle":(["LIV":"$N $vbingle at $t.","STR":"$N $vbingle $o.","":"$N $vbingle.",]),"elm":(["":"$N $vtry to start up elm, but $vfail miserably.",]),"fork2":(["":"$N $vnote that if you come to a fork in the road, take it.",]),"water":(["":"$N $vdo a little dance and then $n $vdrink a little water.",]),"mouse":(["LIV":"$N $vwonder if even a two button mouse gives $t too many options.",]),"sfidle":(["LIV":"$N $vdeclare that $n1 $v1are super fucking idle!",]),"lmvnm":(["":"$N $vinsist that Lima is less filling than Nightmare.",]),"rubberglue":(["LIV":"$N $vpoint out that $n $vare rubber, and $t1s $v1are glue ...",]),"weenie":(["LIV":"$N $vaccuse $t of being a weenie.","":"$N $vadmit to being a weenie.",]),"bounceleg":(["LIV":"$N $vbounceleg $t on $p knee.",]),"novice":(["LIV":"$N $vthink that $t is a total fucking novice.","":"$N is a total novice.",]),"schmuck":(["LIV":"$N $vgo \"$T, you schmuck!!!\"","":"$N $vgo \"You schmuck!!!\"",]),"pantscrap":(["":"Ooops, $n crapped $p pants.",]),"bla":(["":"$N $vgo, \"Bla bla blub!\"",]),"moose":(["LIV":"$N $vwhack $t over the head with a stuffed animal, yelling 'MOOSE!'",]),"pinch":(["LIV":"$N $vpinch $p1 butt.",]),"pollute":(["LIV":"$N $vtell $t to \"give a hoot, don't pollute!\"","":"$N $vpollute Lima with yet another lame emote.",]),"zip":(["LIV":"$N $vzip around $t.","":"$N $vzip around the room.",]),"mourn":(["LIV":"$N $vexpress $p grief at $p1 loss.","STR":"$N $vmourn for $o.","":"$N $vmourn.",]),"refer":(["STR":"$N $vrefer to the \"$o\" emote.","LIV STR":"$N $vrefer $t to the \"$o\" emote.",]),"beavis":(["LIV":"$N $vsay to $t, \"Settle down Beavis!\"",]),"spank":(["LIV":"$N $vgive $t a good spanking!","":"$N $vneed a good spanking.",]),"dolt":(["LIV":"$N $vthink it's quite obvious that $t $v1are a dolt.","":"$N $vfeel like a dolt.",]),"win":(["":({"If only it were that easy ...","$N $vtry to win the game the easy way.",}),]),"gibb":(["LIV":"$T $v1ride $p rocket.",]),"flush":(["STR":"$N $vflush $o down the nearest toilet.",]),"grab":(["LIV":"$N $vgrab $t.",]),"tip":(["LIV":"$N $vgive a stylish tip of $p hat to $t.","":"$N $vgive a stylish tip of $p hat.",]),"scowl":(["LIV":"$N $vscowl at $t.",]),"lower":(["LIV":"$N $vlower $p1 eyebrow.","":"$N $vlower an eyebrow.",]),"phew":(["":"$N $vgo, \"PHEW!!\"",]),"piece":(["LIV":"$N $vshout at $t, \"You want a piece o' this?!\"","":"$N $vshout, \"You want a piece o' this?!\"",]),"ignoreme":(["":"$N $vwhisper, \"Ignore me...I'm just being silly.\"",]),"tie":(["LIV":"$N $vtie $t up.",]),"unclefucka2":([]),"headfuck":(["LIV":"$N $vfuck $t in the head, and $ts thought $ts saw $n10o coming.",]),"whoop":(["LIV":"$N $vshout: WHOOP!! ( $Ts $v1have got it goin' on! )","STR":"$N $vshout: WHOOP!! ( $o )",]),"why":(["":"Gamedriver $vtell $n, \"Why the hell not?! Let's shutdown...\"",]),"python":(["":"$N $vwhip out $p python! Guido would be ashamed!",]),"beta":(["":"$N $vshout, \"BETA or BUST!!!\"",]),"peer":(["LIV":"$N $vpeer at $t.","STR":"$N $vpeer around the room $o.","":"$N $vpeer around the room.","LIV STR":"$N $vpeer at $t $o.",]),"orgy":(["LIV LIV WRD WRD STR":"$N $vput $p1 $o0 into $p2 $o1 while performing $o2.",]),"woot":(["":"$N $vgo 'Woot! Woot!'",]),"vibrators":(["":"Vibrators - the best thing to happen to women since other women.",]),"watch":(["STR":"$N $vglance at $p watch, and $vsay, \"$o\"","":"$N $vglance at $p watch.",]),"woop":(["":"$N $vyell, \"Woop!\"",]),"descartes":(["":"$N $vwonder if ANYONE learned ANYTHING from the infamous \"Descartes\" emote...",]),"earfuck":(["LIV":"$N $vfuck $t in the ear, and $ts heard $n10o coming.",]),"hit":(["LIV OBJ":"$N $vhit $t over the head with a $o.",]),"wha":(["":"$N $vask, \"Wha??\"",]),"mgrin":(["LIV":"$N $vgrin mischeviously at $t.","":"$N $vgrin mischievously.",]),"fsck":(["LIV":"$N $vscream, \"fsck you!\" to $t.",]),"snort":(["LIV":"$N $vsnort at $t.","STR":"$N $vsnort $o.","":"$N $vsnort.",]),"naming":(["":"$N $vfear a naming scheme for emotes.",]),"hic":(["":"$N $vgo, \"HIC!\"",]),"meow":(["STR":"$N $vmeow $o.","":"$N $vmeow.",]),"debug":(["LIV":"$N $vlean over and $vsquash a bug in $p1 code.","":"$N $vsquash a pesky bug in $p code.",]),"punchmeat":(["":"$N $vget arrested by the FDA for using slabs of beef as punching bags.",]),"idlemud":(["":"$N $vproclaim, \"Welcome to IdleMUD[TM]: A Multi-Player Idling Simulation.\"",]),"zakkfix":(["":"$N $vnote that this is so easy Zakk might learn how to fix it soon.",]),"flirt":(["LIV":"$N $vflirt with $t.","STR LIV":"$N $vflirt $o $t.",]),"lord":(["STR":"$N $vgo, \"Oh, dear lord! $O.\"","":"$N $vgo, \"Oh, dear lord!\"",]),"snore":(["LIV":"$Ts $v1go on and on and on about something, and soon $n $vare snoring.","LIV LIV":"Both $t1 and $t2 go on and on and on and on about something, and soon $n $vare snoring.","OBJ":"$N $vsnore at $o.","STR":"$N $vsnore $o.","":"$N $vfall asleep at the keyboard.","STR LIV":"$Ts $v1go on and on and on about $o, and soon $n $vare snoring.",]),"bip":(["":"$N $vgo, 'bip'.",]),"gaydog":(["LIV":"$N $vnote that $p1 dog is a gay homosexual.","":"$N $vtell $p dog, \"Sit, Sparky! Good boy. Now, shake! Good boy. Now, don't be gay! Don't be gay, Spark! Don't be gay!\"",]),"monologue2":(["LIV":"$N $vlaunch into a long, boring monologue until someone does or says something...",]),"emacs":(["LIV":"$N $vthink $ts should learn emacs.","STR":"$N $vtry to start up emacs, but $vfail miserably.","":"$N $vtry to start up emacs, but $vfail miserably.",]),"etfc":(["":"$N $vscream, \"ET FUCKING CETERA!!!\"",]),"upyerear":(["LIV":"$N $vtell $t, \"Up your ear with a can of beer!\"",]),"spam3":(["":"$N $vdeclare that spam is an acronym, standing for spiced pork and ham.",]),"recycle":(["":"$N $vrefuse to pollute the mud with original thoughts when $n $vhave thousands of emotes to recycle.",]),"spam2":(["LIV":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with $t.","STR":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with $o.","":"$N $vdecide there's too much spamming going on, and $vfire up grep to deal with it.",]),"phuck":(["LIV":"$N $vgo, \"Phuck $t!\"","STR":"$N $vgo, \"Phuck $o!\"","":"$N $vgo, \"Phuck Phish!\"","LIV STR":"$N $vgo, \"Phuck $t, $o!\"",]),"lkiss":(["LIV":"$N $vpress $p lips to $p1 in a gentle, lingering kiss.",]),"bigbottom2":(["":"$N $vnote, \"The looser the waist-band, the deeper the quicksand, or so I have read!\"",]),"mbog":(["":"$N $vgo, \"Minor Bog.\"",]),"whine":(["LIV":"$N $vwhine annoyingly at $t.","STR":"$N $vwhine $o.","":"$N $vwhine.",]),"nudge":(["LIV":"$N $vnudge $t.","STR":"$N $vnudge $o.","":"$N $vnudge.","LIV STR":"$N $vnudge $t $o.",]),"sfeared":(["":"$N $vgo, \"Sorta feared.\"",]),"flutter":(["LIV":"$N $vflutter $p eyelashes at $t.","":"$N $vflutter $p eyelashes.",]),"tself":(["":"Talking to yourself is a sign of impending mental collapse.",]),"boardchange":(["LIV STR":"Board changes $t to group <$o>.",]),"sgfibfbog":(["":"$N $vgo, \"Super Giga Fucking 'I've been forced' Bog!\"",]),"wfw":(["":"$N $vgo, \"Woo Fucking Woo!\"",]),"nodlegx":(["LIV":"$N $vdo a extreme $vnodleg at $t.","STR":"$N $vdo an extreme $vnodleg at $t.",]),"woo2":(["LIV":"$N $vwoo $n1 with roses, wine, music and moonlight.",]),"english":(["LIV":"$N $vsay to $t, \"English, motherfucker... do you speak it?\"",]),"wink":(["LIV":"$N $vwink at $t.","STR":"$N $vwink $o.","":"$N $vwink.",]),"relax":(["":"$N $vrelax in $p easy chair.",]),"inside":(["":"$N $vnote that the soul database is at 2243 inside jokes, and growing.",]),"whome":(["":"$N $vgo, \"Who... me??\"",]),"moron":(["LIV":"$Ts $v1show $p1 certificate proving that $ts $v1are a certified Moron [tm].","":"$N $vshow $p certificate proving that $n $vare a certified Moron [tm].",]),"mnms":(["":"$N $vsay, \"I think I'm gonna get me some M&Ms and spank my monkey.\"",]),"hi5":(["LIV":"$N $vjump in the air and $vgive $t a high-five!",]),"morons":(["":"$N $vshout, \"I'M SURROUNDED BY MORONS!\"",]),"handshake":(["LIV":"$N $vshake $p1 hand.",]),"peck":(["LIV":"$N $vpeck $t on the head, crying out: \"Ha hahaha ha!\".",]),"eyefuck":(["LIV":"$N $vfuck $t in the eye, and $ts saw $n10o coming.",]),"console":(["LIV":"$N $vconsole $T.",]),"disco":(["":"$N $vdo the disco duck!",]),"spleen":(["":"$N $vgo, \"Spleen.\"",]),"laddemote":(["":"$N $vlove addemote.",]),"doors":(["":"$N $vsing: Before I sink...into the big sleep...I want to hear...I want to hear...the scream....of the butterfly...",]),"face":(["LIV":"$N $vsay to $t, \"Sit on my interface, bitch!!!\"","":"$N $vgo, \"Sit on my interface!!\"",]),"cane":(["LIV":"$N $vhand $p1 cane to $t.","":"$N $vfetch $p cane.",]),"wavefn":(["LIV":"$N $vwavefingernail to $t.",]),"scruffylooking":(["":"$N $vexclaim, \"Who's scruffy looking!?\"",]),"nfw":(["LIV":"$N $vtell $t, \"No fucking way, fartknocker!\"","":"$N $vgo, \"No fucking way, fartknocker!\"",]),"brains":(["LIV":"$T $v1need brains badly. $Ts $v1are about to die!",]),"blah2":(["":"$N $vgo, \"Blah, blah, bog, blah, blah!\"",]),"madlib":(["LIV LIV WRD WRD WRD WRD":"$N1s $v1relate a long $o about the beginnings of the $o1 mudlib, and $v1conclude by showing all the $o2 language in the $o3 was $p2 fault.",]),"cower":(["LIV":"$N $vcower before $t.","STR":"$N $vcower $o.","":"$N $vcower in fear.",]),"faith":(["LIV":"$N $vfind $p1 lack of faith disturbing.","":"$N $vsay, \"I find your lack of faith disturbing.\"",]),"hgb":([]),"wet":(["LIV":"$N $vtry to discretely pour some water down $p1 leg, to make it look like $ts wet $p1 pants.","":({"You wet your pants. ","$N $vlook around hoping that noone notices $n wet $p pants. ",}),]),"nfm":(["LIV":"$N $vshout at $t, \"NO FUCKING MORE!!!\"","":"$N $vgo, \"NO FUCKING MORE!!!\"",]),"affront":(["LIV":"$N says 'That is an affront to my sensibilities!'","":"$N $vsay 'That is an affront to my sensibilities!'",]),"egg":(["LIV":"$N $vlaugh wickedly, while lobbing raw eggs at $t! Bwahahahahah!","LIV STR":"$N $vlaugh $o, while lobbing raw eggs at $t! Bwahahahahaha!",]),"tex":(["":"$N $vnote that TeX is turing complete.",]),"nfi":(["":"$N $vmutter \"No Fucking Idea!\"",]),"kamel":(["":"$N $vspark up a %^B_ORANGE%^ %^RESET%^%^B_WHITE%^ %^RED%^KAMEL %^RESET%^%^B_RED%^ %^RESET%^",]),"soulcopying":(["":"$N $vnote that the LIMA mudlib may be the first mudlib which has had more emotes borrowed from it than code.",]),"lips":(["LIV":"$N $vsay to $tp, \"Your lips are like two sweet twizzlers coated with penis-butter.\"","":"As $n $vtalk, $p lips form different words from those you hear. You realize $p lines have been dubbed!",]),"nfc":(["LIV":"$N $vinform $t, \"No Fucking Clue.\"","":"$N $vsay, \"No Fucking Clue\"",]),"teh":(["":"$N $vgo: \"Teh.\" (kinda like \"Feh\" but more interesting)",]),"ramsey":(["LIV":"$N $vpoint out that of ALL the people on Lima Bean, $n1 $v1have neither three mutual friends nor three mutual strangers!",]),"katt":(["":"$N $vsing: 'And the Katt came back...'",]),"mygod":(["LIV":"$N $vexclaim, \"My God, $tp, what have you done??\"","":"$N $vexclaim, \"My God, what have I done??\"",]),"yourmom":(["LIV":"$N $vtell $t, \"Your mom was good last night!\"","STR":"$N $vtell $o, \"Your mom was good last night!\"",]),"nail":(["LIV":"$N $vnail $p1 head to the floor.",]),"melt":(["LIV":"$N $vmelt into $p1 arms.","":"$N $vmelt in a puddle of water.",]),"key":(["STR":"$N $vgo, \"Ahh... yes. The $o is key.\"",]),"drift":(["STR":"$N $vdrift away $o.","":"$N $vdrift away.",]),"ket":(["LIV":"$N $vnote that $t $v1are hot upstairs and cold downstairs, just like Ket.","":"$N $vnote that it's hot upstairs and cold downstairs. Just like Ket.",]),"troll":(["":"$N $vwait under $p bridge for billy goats gruff to cross.",]),"hey":(["":"$N $vgo, \"HEY, HEY, HEY!!\"",]),"calm":(["LIV":"$N $vtry to get $t to calm down.","":({"You feel like you are in the eye of a hurricane. ","$N $vlook reasonably calm for a change. ",}),]),"ouch":(["":"$N $vexclaim, 'Ouch!'",]),"trousers":(["LIV":"$N $vsay to $t, \"We have Armadillos in our trousers.\"","":"$N $vnote, \"We have Armadillos in our trousers.\"",]),"bfg":(["":"You hear the sick, spine-tingling sound of a BFG-9000 being fired at your back...",]),"bfd":(["LIV":"$N $vscream at $t, \"Big fuckin' deal!\"","":"$N $vgo, \"Big fuckin' deal!\"",]),"sensitive":(["LIV":"$N $vtell $t, \"Fuck you, I'm sensitive!\"",]),"usedonce":(["":"$N $vwonder what fraction of the Lima emotes have only ever been used once.",]),"tdc":(["":"$N $vnote that that is Too Damn Cool [tm].",]),"nadgrab":(["LIV":"$N $vgrab $p1 balls and $vsay, \"Live long and prosper.\"",]),"heh":(["LIV":"$N $vlook at $t and $vgo, \"Heh.\"","STR":"$N $vgo: \"Heh, $o.\"","":"$N $vgo, \"Heh.\"",]),"fence":(["LIV":"$N $vadvise $t not to wiz on the electric fence.","":"$N $vtake a wiz on the electric fence. Zzzzzzzzap!",]),"hee":(["":"$N $vgo: \"Hee hee!\"",]),"eep":(["":"$N $vgo Eep!",]),"fwaveleg":(["LIV":"$N fucking $vwaveleg to $t.","":"$N fucking $vwaveleg.",]),"ckiss":(["LIV":"$N $vkiss $t on the cheek.",]),"doh2":(["":" __&__ / \\ | | | (o)(o) C .---_) | |.___| DOH!! | \\__/ /_____\\ /_____/ \\ / \\ ",]),"different":(["LIV":"Today, just to be different, $t $v1are a King Kamaya Maya bitch!",]),"eek":(["":"$N $vgo, \"Eek!!\"",]),"shwing":(["":"$N $vgo, \"Shhhhwing!!!\"",]),"heaven7":(["":"$N $vask innocently \"what's wrong with the Heaven 7 mudlib, anyway?\"",]),"trying":(["":"$N $vnote that trying is the first step to failure.",]),"replaced":(["":"$N $vscream, \"Ah! Everything here has been replaced with an EXACT REPLICA!\"",]),"lint":(["LIV":"$N $vsort through $p pockets and $vfind nothing but lint.","":"$N $vsort through $p pockets and $vfind nothing but lint.",]),"montoya":(["LIV":"$N $vgrowl to $t, \"I am Inigo Montoya. You killed my father. Prepare to die.\"","":"$N $vrecite, \"I am Inigo Montoya. You killed my father. Prepare to die.\"",]),"chuckle":(["LIV":"$N $vchuckle at $t.","STR":"$N $vchuckle $o.","":"$N $vchuckle.","LIV STR":"$N $vchuckle at $t $o.",]),"beg":(["LIV":"$N $vbeg $t.","":"$N $vbeg like a smack addict who's gone a week without a fix.","LIV STR":"$N $vbeg $t $o.",]),"perl3":(["":"For a moment, $n confused some perl code with line noise.",]),"puzzle":(["STR":"$N $vpuzzle $o.","":"$N $vpuzzle.",]),"acro":(["":"$N $vgo to play Acro. Three weeks later, $n $vemerge rubbing $p eyes and saying, \"What Day Is.it?\"",]),"caffeine":(["":"$N $vdeclare that caffeine is a poor substitute for cocaine.",]),"perl2":(["":"$N $vnote that Perl is such an obnoxious odious language compared to Python.",]),"blade":(["":"$N $vsay, \"There's worse things out tonight than vampires... There's me!!!\"",]),"bee":(["":"$N $vturn into a bee and $vbuzz off.",]),"legandleg":(["LIV":"$N $vleg and $vleg at $t.","":"$N $vleg and $vleg and $vleg until $n can leg no more.",]),"countable":(["LIV":"$N $vnote that not only is the cardinality of the set of $p1 brain cells countable, you only need to be able to count up to 0!",]),"shrugarm":(["STR":"$N $vshrugarm $o.","":"$N $vshrugarm.",]),"iiyf":(["":"$N $vgo, \"Inheritance is your friend.\"",]),"kennysnotdead":(["":"$N $vexclaim, \"Oh my god! They DIDN'T kill Kenny! The Bastards!!\"",]),"zipper":(["LIV":"$N discreetly $vinform $t that $p1 zipper is down.",]),"pea3":(["LIV":"$N deftly $vcatch the peas, flash $vfreeze them, and $vslingshot them back off $p1 forehead!",]),"thisparticularemotewasaddedjusttopissoharaoff":(["":"$N $vnote that this particular emote was added just to piss Ohara off.",]),"coke2":(["LIV":"$N advise $t, \"Have a coke and a smile and shut the fuck up!\"","":"$N $vdecide to have a Coke and a smile.",]),"pea2":(["LIV":"$N $vthrow peas at $p1 face since $n can't get them into $p1 mouth.",]),"smirkpwd":(["":"$N $vsmirkpwd (It tells you where you are when you smirkls)",]),"bend":(["LIV":"$N $vbend over and $vwait to take it up the ass from $t.","LIV LIV":"$N1 $v1bend over and eagerly $v1await to take it up the ass from $n2.","STR":"$N $vbend over and eagerly $vawait to take it up the ass from $o.","":"$N $vbend over and $vwait to take it up the ass.","LIV STR":"$N1 $v1bend over and eagerly $vawait to take it up the ass from $o.",]),"amachine":(["":"$N $vare not at $p keyboard right now; please leave a message at the sound of the tone. ... BEEP",]),"godrest":(["LIV":"$N $vwonder, \"On which day did God create $tp, and couldn't he have rested on that day too?\"",]),"toty":(["LIV":"And the typo of the year award goes to ... $T!",]),"particle":(["":"$N $vparticle.",]),"totw":(["":"$N $vnote that Hiccups is not a follower of the One True Way [tm].",]),"grade":(["":"$N $vthink $n might be related to the energizer bunny because $n $vare still grading, and grading, and grading...",]),"dicksoap":(["":"$N $vgo, \"It's MY dick and MY soap, I'll wash it as hard and as fast as I want to!\"",]),"black":(["LIV":"$N $vask $t, \"The question is, how much more black can it get?\"",]),"linux":(["":"$N $vgo, \"Linux: The Choice of a GNU Generation.\"",]),"pepper":(["LIV":"$N $vask $T, \"Wouldn't you like to be a Pepper too?\"","":"$N $vask, \"Wouldn't you like to be a Pepper too?\"",]),"hfive":(["LIV":"$N $vjump up in the air and $vgive $t a high-five!","":"$N $vjump up in the air and $vswish a high-five! $N $vfall flat on $p face.",]),"limacrash":(["LIV":"$N $vgive $t an \"I Crashed Lima Bean\" t-shirt.","":"$N proudly $vwear $p \"I Crashed Lima Bean\" t-shirt.",]),"dumbemote":(["STR":"$N $vnote how dumb the \"$o\" emote is.",]),"confess":(["":".",]),"borland":(["LIV":"$N $vaccuse $t of working at Borland and causing all the bugs...","":"$N $vblame Borland for all the bugs...",]),"sfleg":(["LIV":"$N $vgo to $t, \"Super Fucking Leg!!!\"","STR":"$N $vgo, \"Super Fucking Leg!!! $O!!!\"","":"$N $vgo, \"Super Fucking Leg!!!\"",]),"mirthmobile":(["LIV":"$N $vjump in the Mirth Mobile with $t and $vdrive away!","":"$N $vjump in the Mirth Mobile and $vdrive away!",]),"wat":(["LIV":"$N $vpoint at $t and $vsay, \"What a twit!\"","":"$N $vsay, \"What a twit!\"",]),"war":(["":"$N $vexpound on all the Rules and Regulations of the Deathblade vs Zakk Eternal War.",]),"wap":(["LIV":"$N $vWAP $t.",]),"iowe":(["":"$N $vsing, \"I owe! I owe! It's off to work I go!\"",]),"sgvlbog":(["":"$N $vgo, \"Super Giga Very Little Bog!\" (the ultimate in oxymorons)",]),"smother":(["LIV":"$N $vsmother $t with passionate kisses.","OBJ":"$N smother $t with passionate kisses.",]),"according":(["STR":"According to the soul_d, $o.","":"According to the soul_d, there are Too Many Damn Emotes.",]),"rfeared":(["":"$N $vgo, \"Rather feared.\"",]),"normality":(["":"$N $vnote, \"We have normality, anything you still can't deal with is your problem.\"",]),"bbiam":(["":"$N will be back in a minute.",]),"wah":(["LIV":"$N $vcry at $t like a big baby 'WAAAAAAAAAAAAAAAAAAAAAAAAAAAAH!!!!!'.","":"$N $vcry like a big baby 'WAAAAAAAAAAAAAAAAAAAAAAAAAAAAH!!!!!'.",]),"qc3":(["":"$N $vnote that there was a qc, a qc2, and this qc3 social, but no qc1 social, and $vwonder if it was deliberate or not.",]),"qc2":(["":"$N $vremember that there _is_ no quality control.....",]),"tap":(["LIV":"$N $vtap $p foot, waiting for $t.","STR":"$N $vtap $p foot $o.","":"$N $vtap $p foot.",]),"luke":(["":"$N $vwhine, \"But I was gonna go to the Tashi station to pick up some power converters!\"",]),"bbiab":(["":"$N $vmutter something about how $n'll be \"be back in a bit.\" Nobody cares.",]),"alcohol2":(["":"$N $vnote that alcohol doesn't give you caffiene headaches.",]),"zoomer":(["LIV":"$N $vindicate that $ts $v1are a complete zoomer.",]),"pquest":([]),"goatsblow":(["LIV":"$N $vhold up a sign, reading: 'Goats blow $tp. I have proof.'",]),"snuke":(["LIV":({"$N $vsnuke $t. ","$N $vsnuke $t. $Ts $v1wonder what 'snuking' is. ",}),"STR":"$N $vsnuke $o.","":"$N $vsnuke.",]),"tag":(["LIV":"$T $v1are IT!",]),"noggle":(["LIV":"$N $vnoggle hard at $t.","STR":"$N $vnoggle $o.","":"$N $vnoggle.",]),"suckswallow":([]),"nonews":(["":"$N $vsigh deeply and $vwhine : 'Somebody write some new news!'.",]),"duck":(["LIV":"$N $vpush $p1 head down screaming \"Quick duck!\" then $vdirect $p1 face into a pile of cow patties.","STR":"$N $vduck $o.","":"$N $vduck.",]),"lovechild":(["LIV":"$N $vwant to have $p1 love child.","LIV LIV":"$T1s $v1want to have $p2 love child.",]),"plunder":(["":"$N $vare in constant search of quality emotes to plunder.",]),"legger":(["LIV":"$N $vthink $t looks like a Legger.",]),"tmisecure":(["":"$N $vnote that the primary TMI security tool is tar.",]),"nap":(["LIV":"$N $vthink $ts ought to take a nap.","":"$N $vtake a nap.",]),"stilladoofus":(["LIV":"$N $vpoint out that $n1 $v1are still a doofus.",]),"snuggle":(["LIV":"$N $vsnuggle up close to $t.","":({"You look around for someone to snuggle. ","$N $vlook around for someone to snuggle. C'mon, have some compassion, snuggle with $No. ",}),]),"transvestite":(["LIV":"$N $vaccuse $t of being a \"Sweet Transvestite from Transsexual, Transylvania!\"",]),"turd":(["STR":"$N $vturd $o.","":"$N $vturd.",]),"teeth":(["":"$N $vsay, \"Don't stop until you hit the back of his teeth!\"",]),"brainpower":(["LIV":"$N $vwonder if $t $vhave the brain power to toast a crouton.",]),"nah":(["":"$N $vgo, \"Nahhh!\"",]),"nag":(["LIV":"$N $vnag $t.","":"$N $vgo, \"Nag, nag, nag, nag, nag, nag, NAG!\"",]),"alcohol":(["LIV":"$N $vmeasure $p1 blood-alcohol level, and $vfind that the alcohol in $p1 veins contains 0.4% blood.",]),"readnews":(["STR":"$N says, \"Bing Crosby's horse hasn't come in yet? -- Smell-o-vision replaces television. My stars!\".",]),"didfake":(["STR":"*** $Np $o",]),"bbl":(["":"$N $vgrumble and $vmutter \"Be Back Later\".",]),"shampoo":(["":"$N $vproclaim, \"Shampoo is better! I go on first, and clean the hair!\"",]),"nad":(["LIV":"$N $vaccuse $t of being a nad!","":"$N $vfeel like a nad. Yeah, nads... Heh, heh!",]),"haw":(["":"$N $vgo: \"Hee haw!\"",]),"hat":(["LIV":"$N $vgive a stylish tip of $p hat to $t, then violently $vrip it off and $vthrow it at $t.","":"$N $vgive a stylish tip of $p hat, and then gruesomely $vrip it off and $vstomp on it.",]),"nametag":(["LIV":"Check out the name tag, grandma, $n1 $v1are in $p0 world now!",]),"reboot":(["LIV":"$N $vreboot $t in an attempt to improve $p1 stability.",]),"faint":(["LIV":"$N $vfaint into $p1 arms.","":({"-=THUD=- You wake up quite groggy, realizing you have just fainted. ","$N faints. ",}),]),"wince":(["LIV":"$N $vwince away from $t.","STR":"$N $vwince $o.","":"$N $vwince.",]),"partypants":(["LIV":"$N $vannounce, \"There's a party in $tp's pants; everybody's coming!\"","":"$N $vstate, \"There's a party in my pants; Everyone's coming!\"",]),"uhoh":(["LIV":"$N $vgo, \"Uhoh! It's $n1o!\"","STR":"$N $vgo, \"Uhoh! $O\"","":"$N $vgo, \"Uhoh!\"",]),"hal":(["LIV":({"$N $vdo the HAL 9000 thing with $t.","HAL 9000 says, \"I'm sorry, $tp, I can't do that.\"","HAL 9000 says, \"I'm sorry, $tp, I can't do that.\"",}),]),"useful":(["LIV":"$N $vsuggest that $ts $v1make $r1 useful.",]),"curtsey":(["LIV":"$N $vcurtsey gracefully to $t.","STR":"$N $vcurtsey $o.","":"$N $vcurtsey.",]),"nads":(["":"$N $vgo, \"Nads! Nads!! Mm... Yeah! Heh! Heh!\"",]),"declare":(["STR":"$N $vdeclare, \"$o!\"",]),"muzzle":(["LIV":"$N $vmuzzle $t.",]),"arms":(["LIV":"$N $vyell, \"Check out the arms on $tp!!\"",]),"incest":(["":"$N $vnote that the relationship between the Lima Mudlib and the MudOS driver is more than a little incestuous.",]),"goodbog":(["LIV":"$N $vnote that $t $v1give good bog.","":"$N $vnote that $n $vgive good bog.",]),"bat":(["LIV":"$N $vbat $p eyelashes at $t.","":"$N $vbat $p eyelashes.",]),"bar":(["LIV":"$N $vbar $t.","":"$N $vbar.",]),"yodel":(["STR":"$N $vyodel $o.","":"$N $vyodel.",]),"freeze":(["STR":"$N $vfreeze $o.","":"$N $vfreeze.",]),"bottle":(["LIV":"$N $vbottles $T and sells $m at the fair.",]),"bah":(["LIV":"$N $vgo \"Bah!\" at $t","":"$N $vgo, \"Bah!\"",]),"bag":(["LIV":"$N $vthink $ts $v1are a complete bag of holding.",]),"bad":(["LIV":"$N $vhit $p1 nose with a newspaper, \"Bad $Tp!! Bad!!\"","":({"You tell everyone: \"That's a bad thing(tm).\" ","$N states: \"That's a bad thing(tm).\" ",}),]),"roflmao":(["":"$N $vroll on the floor laughing $p0 ass off.",]),"ttlogic":(["":"$N $vrefuse to speak with the 'toetape' emote available to $t10.",]),"problem":(["":"$N $vannounce, \"Houston, we have a problem.\"",]),"friendsdont":(["LIV STR":"$N $vtell $t, \"Friends don't let friends $o.\"",]),"2000sign":(["":"$N $vmarch around the room carrying a sign, reading \"2000 by 2000!\"",]),"smirkle":(["LIV":"$N $vsmirkle at $t.","STR":"$N $vsmirkle $o.","":"$N $vsmirkle.",]),"crazy":(["":"$N $vare going crazy!!!",]),"oggblat":(["":"$N $vdon't know the verb 'oggblat'.",]),"cashvalue":(["":"$N $vnote that an adminship at Lima Bean carries a cash value of roughly 3 dollars and 24 cents.",]),"noblowemote2":(["":"$N $vnote that the addition of the 'fuck LIV' and 'lewinsky LIV' emotes have rendered the 'noblowemote' emote obsolete. Will it be removed in a future release?",]),"nack":(["":"$N $vgo: ----/| \\ o,O| =(-)= NACK!!!!! U THPTH!!!!!!!",]),"tzone":(["":"The Twilight Zone theme song can be heard in the background.",]),"congradulate":(["LIV":"$N $vcongradulate $t.",]),"college":(["":"$N $vsay, \"This is all I'm going to say about drugs: Stay away from them! There is a time and a place for everything, and it's called college!\"",]),"suffer":(["":"$N $vsuffer horribly.",]),"space":(["STR":"$N $vspace out, somewhere around $o.","":"$N $vspace out, somewhere around Planet Zirgon.",]),"semen":(["":"$N $vproclaim, \"Semen is better! I spurt distinctively, and contain DNA!\"",]),"gurble":(["STR":"$N $vgurble $o.","":"$N $vgurble.",]),"pickaxe":(["LIV":"$N $vattack $t with a pickaxe! In the right ear, out the left eye! $Ts $v1gurgle.","":"$N $vwave a pickaxe theateningly",]),"dewit":(["LIV":"$N \"$vdew it\" with $t!","":"$N \"$Vdew it\"!",]),"fermez":(["LIV":"$N $vtell $n1, \"Fermez la bouche!\"",]),"admire":(["LIV":"$N $vadmire $t.",]),"scold":(["LIV":"$N $vscold $t.","OBJ":"$N $vscold at $o.","STR":"$N $vscold $o.","":"$N $vscold.",]),"wslap":(["LIV":"$N $vslap $t on $p1 wrists with $p0 hands.",]),"cavity":(["LIV":"$N $vsay, \"Give $tp a full cavity search!\"","":"$N $vsay, \"Full cavity searches all around!\"",]),"poser":(["":".",]),"support":(["":"The sticker on the side of the box said \"Supported Platforms: Windows 95, Windows NT 4.0, or better,\" so clearly Linux was a supported platform.",]),"eyefuck2":(["LIV":"$N $vfuck $t in the eye, then eats the bloodied pulp that was once the eyeball.",]),"icecream":(["":"$N $vgo on at length about the evils of strawberry icecream.",]),"adhom":(["":"$N $vrepeat the previous argument (NOT!).",]),"talk2much":(["LIV":"$N $vtell $t, \"You talk too much. Homeboy, you never shut up!\"",]),"comment":(["":"$N $vcomment on begin and end comment markers, then $vlead into a discussion on transformation rules and set theory, eventually ending up on a discussion of preprocessing tokens and contrived examples. When $n $vappear to be finished with that, $n $vstart a discussion on the C++ specification and how it happens to be lacking in precision regarding the interaction of arbitrary tokens in a scheme that nobody would ever... BANG! $N $vare hit by lightning. The Powers that Be want $t10 to shut the fuck up.",]),"meep":(["LIV":"$N $vmeep at $t.","STR":"$N $vmeep $o.","":"$N $vmeep.",]),"toot":(["LIV":"$N $vgo 'TOOT TOOT' dancing the cool train-dance with $t.","":"$N $vgo 'TOOT TOOT' dancing the cool train-dance.",]),"warning":(["LIV":"$N $vread $p1 warning label: \"Warning! Do Not Eat!\"","STR":"$N $vchant, \"Warning!!! $o\"","":"$N $vchant, \"Warning!!! Do Not Eat Me!!!\"","LIV STR":"$N $vread $p1 warning label: \"$o\"",]),"shruggle":(["LIV":"$N $vshruggle at $t.","STR":"$N $vshruggle $o.","":"$N $vshruggle.",]),"skiss":(["LIV":"$N $vgive $t a soft, sexy kiss.","":"Excuse $n while $n0s $vkiss the sky.",]),"smileleg":(["STR":"$N $vsmileleg $o.","":"$N $vsmileleg.",]),"tool":(["LIV":"$N $vnote that $ts $v1are a total tool.",]),"semicolon":(["":"$N $vexpound at length on the correct usage of semicolons.",]),"gotbeer":(["":"Got Beer?",]),"gfheh":(["":"$N $vgo, \"Giga-fucking Heh!\"",]),"bogwave":(["":"$N $vbogwave.",]),"disaster":(["LIV":"$N $vdeclare $t a Federal Disaster Area.",]),"fullmonty":(["":"$N $vnote, \"No one ever said anything to me about the full monty. Ah, fuck it!\". $N $vrip off all $p clothes. The full monty is full indeed!",]),"oharafix":(["":"$N $vnote that this is so easy even Ohara could fix it!",]),"aol5":(["":"$N $vshout \"ME TOO\"",]),"beekfix3":(["":"$N $vnote that this probably wouldn't have broken IF Beek had fixed it.",]),"beekfix2":(["":"$N $vnote that this is soooooo easy that _only_ Beek can fix it.",]),"aol2":(["":"$N $vsay, \"ME TOO!\"",]),"aol1":(["":"$N $vopt for the frontal lobotomy.",]),"ownuncle":(["LIV":"$N $vnote that $t $v1are $p1 own uncle.",]),"broke":(["":"$N $vmumble, \"I think we broke her.\"",]),"voice":(["STR":"A hollow voice says: $o!",]),"doidle":(["LIV":"$N $vdo unspeakable things to $p1 idle body.",]),"tooyoung":(["LIV":"$N $vtell $t, \"You're too young, and I'm too well hung.\"",]),"hitler":(["":"$N $vsay, \"One good thing about Hitler: without him, there'd be 11 million more people on the subway.\"",]),"embrace":(["LIV":"$N $vembrace $t.","LIV STR":"$N $vembrace $t $o.",]),"plemma":(["LIV":"$N $vinvite $t back to $p apartment for a demonstration of $p proof of the 'pumping lemma'.",]),"biggs":(["LIV":"$N $vsay, \"$Tp, at that speed, will you be able to pull out in time?\"","":"$N $vsay, \"Luke, at that speed, will you be able to pull out in time?\"",]),"stupids":(["LIV":"$N $vsing an entry from $p1 diary: \"Many many years ago when I was 23 I was married to a widow who was purdy as could be This widow had a grown up daughter who had hair of red My father fell in love with her and soon they too were wed This made my dad my son-in-law which changed my very life My daughter was my mother cause she was my fathers wife To complicate the matter even though it brought me joy I soon became the father of a bouncing baby boy My little baby then became a brother-in-law to dad And so became my uncle though it made me very sad For if he was my uncle then it also made him brother To the widows grown up daughter who of course was my step mother My fathers wife then had a son who kept them on the run He became my grandchild cause he was my daughters son My wife is now my mothers mother and it makes me blue Because although she is my wife, she's my grandmother too If my wife is my grandmother then I am her grandchild Every time I think of it it nearly drives me wild This has got to be the strangest thing I ever saw As husband of my grandmother I am my own grandpa I'm my own grandpa I'm my own grandpa It's a-funny I know But it really is so! I'm my own grandpa!\"",]),"snuff":(["":"$N $vpoint out that $n $vhave to hang Snuffalupagus. (Be right back)",]),"tip3":(["LIV":"$N $vgive a stylish hat to $T.",]),"tip2":(["LIV":"$N $vtip $t generously.","":"You tip generously.",]),"vt220":(["":"$N $vnote, \"If it's not a vt220, its not a terminal.\"",]),"woodward":(["LIV":"$N $vwoodward $n1 violently back and forth until $p1 head falls off.",]),"pulse":(["LIV":"$N $vcheck $p1 pulse.",]),"nipple":(["":"$N $vask, \"Did you know that there are 71.9 acres of nipple tissue in the U.S.?\"",]),"glass":(["LIV":"$N $vtell $t, \"You wanna play broken glass against the head game!?!\"",]),"fffucker":(["LIV":"$N $vtell $t, \"Feel free, fucker!\"",]),"noarg":(["STR":"$N $vdo an emote with no argument!",]),"holdsec":(["":"$N $vsing 'Hold on a second darling...'",]),"smakk":(["LIV":"$N $vsmakk $t.",]),"rookie":(["LIV":"$N $vindicate that $ts $v1are a complete rookie.","":"$N $vare a complete rookie.",]),"wannabe":(["":"$N $vsing \"I wanna wanna wannabe a Spice Girl!!\"",]),"marry":(["LIV":"$N $vmarry $t till death do us part and all that.",]),"trock":(["OBJ":"$N $t hrm",]),"statsystem":(["":"$N $vstate: \"Lima's stat system is just too advanced...\"",]),"megaboz":(["LIV":"$N $vmegaboz $t.","":"$N $vsay, \"It's Megaho, not Megaboz!\"",]),"jones":(["":"$N $vslap $p arm a few times, saying, \"I need it bad!\"",]),"smooth":(["LIV":"$N $vgo, \"Damn, you're smooth, $T!\"","":"$N $vgo, \"Damn, I'm smooth!\"",]),"longwang":(["":"$N $vannounce, \"Guard number 2 is a real skating buff, a warm welcome for Long Wang!\"",]),"sniff":(["LIV":"$N $vsniff $t.","STR":"$N $vsniff $o.","":"$N $vsniff.",]),"strangle":(["LIV":"$N $vstrangle $t.",]),"scream":(["LIV":"$N $vscream at $t.","STR":"$N $vscream $o!","":"$N $vscream.","LIV STR":"$N $vscream at $t $o!",]),"ohara":(["LIV":"$N $vwish $t a nice life.","":({"$N $vwish everyone a nice life.","$N $vwish you a nice life.",}),]),"vpet":(["LIV":"$N $vwhip $p1 ass and $vfreshen $p1 porn.",]),"mallet":(["LIV":"$N $vflatten $t with a giant mallet.",]),"btdt":(["":"$N $vsay, \"Been there, done that.\"",]),"holdhands":(["LIV":"$N $vhold $t hand.",]),"notmybag":(["":"$N $vgo, \"That's not my bag, baby!\"",]),"swandive":(["LIV":"$N $vsuggest $n1 $vtry a swan dive into the pavement below.","":"$N $vdo a stunning swan dive into the pavement below.",]),"ack2":(["":"$N $vack.",]),"thwap":(["LIV":"$N $vthwap $t soundly making $t wince.","OBJ":"$N $vthwap the $o.",]),"moronhs":(["LIV":"$N $vtell $t, \"Shut up! You're a moron!\"",]),"admins":(["":"$N $vnote that we only need 27 more admins to beat TMI-2.",]),"glare":(["LIV":"$N $vglare at $t.","at LIV":"=LIV","STR":"$N $vglare $o.","":"$N $vglare.",]),"rape2":(["LIV":"$N $vrape $t.",]),"4chickens":(["":"$N $vorder four fried chickens and a Coke.",]),"lleg":(["":"$N $vgo, \"Little Leg.\"",]),"scratch":(["LIV":"$N mischeviously $vscratch $p1 head.","STR":"$N $vscratch $o.","":"$N $vscratch $p head.",]),"reddwarf":(["":"$N $vsing: It's cold outside, there's no kind of atmosphere, I'm all alone, more or less. Let me fly far away from here, Fun, fun, fun ... in the sun, sun, sun. I want to lie shipwrecked and comatose, Drinking fresh mango juice. Goldfish shoals nibbling at my toes, Fun, fun, fun ... in the sun, sun, sun, Fun, fun, fun ... in the sun, sun, sun.",]),"beer":(["LIV":"$N $vcrack open a can of beer and $vforce $t to guzzle it down.","":"$N $vcrack open a can of beer and $vguzzle it down.",]),"beep":(["STR":"$N $vbeep $o.","":"$N $vbeep.",]),"woah":(["":"$N $vgo, \"Woah!\"",]),"macaccel2":(["":"$N $vnote that the best way to accelerate a Macintrash is at 9.8 m/sec^2.",]),"beek":(["LIV":"$N $vwish $ts were a bit more like Beek.","":"$N reverently $vuse Beek's personal emote (the best imported emote around).",]),"acid":(["LIV":"$N $vchase $t around the room with a bottle of acid, in an attempt to neutralize $t.",]),"myfirstemote":(["STR":".","":"$N $vfall over in amazement as $p first emote works!",]),"bozsux":([]),"lfshrugleg":(["":"$N $vgo, \"Little Fucking Shrugleg!\"",]),"beef":(["LIV":"$N $vgo: $t, it's what's for dinner!","":"$N $vgo: Beef, it's what's for dinner!",]),"tilt":(["":"$N $vtilt $p head.",]),"spoo":(["STR":"$N $vspoo $o.","":"$N $vspoo.",]),"plane":(["LIV":"$N $vextend $p arms and $vfly around $t making airplane noises.",]),"meat":(["LIV":"$T $v1stroke $p1 meat and $v1go, \"Ahh...\"","":"$N $vstroke $p meat, and $vgo, \"Ahh...\"",]),"analsmack":(["":"$N $vbend over, saying, \"I need it bad!\"",]),"argh":(["STR":"$N $vargh $o.","":"$N $vargh.",]),"hate":(["LIV":"$N $vhate $n1.",]),"innocent":(["STR":"$N $vsay innocently, \"$o\".","":"$N $vlook innocent.",]),"addemotee":(["":"$N $vrefuse to speak and will simply addemote anything that needs to be said.",]),"megabo2":(["":"It's Megabo, not Megaboz!",]),"noodle":(["LIV":"$N $vnoodle at $t.","OBJ":"$N $vnoodle at $o.","STR":"$N $vnoodle $o.","":"$N $vnoodle.",]),"fshrugleg":(["":"$N fucking $vshrugleg.",]),"makenewbie":(["LIV":"DOH!!! $N $vdemote $t to \"newbie\" level.",]),"toke":(["":"$N $vtoke a fatty bowl.",]),"enquire":(["LIV STR":"$N $venquire of $n1, \"$O?\"",]),"bogarm":(["STR":"$N $vbogarm $o.","":"$N $vbogarm.",]),"harry2":(["":"$N $vthreaten to clone Harry.",]),"threaten":(["LIV":"$N $vthreaten $t.",]),"snickerleg":(["LIV":"$N $vsnickerleg at $T.","STR":"$N $vsnickerleg $o.","":"$N $vsnickerleg.",]),"quarter2":(["LIV":"$N $vgo to $T, \"Yeah that and a quarter might buy you a gumball, too.\"",]),"shovecock":(["LIV":"$N $vshove $p big giant cock into $p1 bloody mouth.",]),"firetruck":(["STR":"$N $vmake \"$o\" noises.","":"$N $vhum to $r as $n $vplay with $p firetruck.",]),"medieval":(["LIV":"$N $vget medieval on $p1 ass!",]),"ketslap":(["LIV":"$N $vketslap $t!",]),"wweenie":(["":"$N $vpull out $p white weenie.",]),"hash":(["LIV":"$N $vhash $t into $p1 own bucket.",]),"pjesus":(["":"$N $vshout, \"Praise Jesus!\"",]),"i3police":(["LIV":"$N $vcall in the I3 Police to beat the living shit out of $t for sending a bad packet.","":"$N $vcall in the I3 Police to watch for people sending bad packets.",]),"limawin":(["":"$N $vnote that Lima is the Windows of mudlibs. Nothing is ever removed until it crashes and you reinstall from backups.",]),"flick":(["LIV":"$N $vflick $p1 ear.","":"You dig into your nose and discover gold or is it snot....",]),"racecar":(["":"$N $vsay, \"Oh, you're a racecar in the red? Well, I'm a mushroom cloud layin' motherfucker, motherfucker! Every time my fingers touch brain, I'm super-fly TNT. I'm the guns of the Navarone!\"",]),"damnit":(["LIV":"$N $vexclaim, \"Damnit, $tp!\"","STR":"$N $vexclaim, \"Damnit! $O!\"","":"$N $vexclaim, \"Damnit!\"","LIV STR":"$N $vexclaim, \"Damnit, $tp! $O!\"",]),"master2":(["":"$N $vsay S&M? You mean like the candy? Anyone seen the blue kind yet?",]),"lick":(["LIV":"$N $vlick $t!","STR":"$N $vlick $o.","":"$N $vlick $p lips.","LIV STR":"$N $vlick $t $o.",]),"elephantman":(["":"$N $vsay, \"I am not an animal! I am a human being! I am a man!\"",]),"scoff":(["LIV":"$N $vscoff at $t.","STR":"$N $vscoff $o.","":"$N $vscoff.",]),"hallpass":(["":"$N $vexclaim, \"I do not need 'hall pass'! I need TP for my bunghole!\"",]),"viagra":(["LIV":"$N $vpick up a piece of paper that fell from $p1 pocket. It's $p1 viagra prescription.",]),"screw":(["LIV":"$N $vscrew $t!",]),"beatings":(["LIV":"$N $vdecide to keep beating $t until morale improves.","":"$N $vdecide that the beatings shall continue until morale improves.","LIV STR":"$N $vdecide to keep beating $t until $o.",]),"hungry":(["":"$N $vare hungry, $p stomach growls from neglect.",]),"sfuckleg":(["":"$N shrugging $vfuckleg.",]),"trip":(["LIV":"$N $vgrin evilly as $n $vtrip $t, who of course falls flat on $p1 face.","":({"You trip and fall flat on your face. What a klutz! Don't you feel like a fool?! ","$N trips and falls flat on $p face. What a klutz! What a fool! ",}),]),"invisbug":(["":"Invisible has been bugged for so long!!!, and $n $vare not happy about it.",]),"scifi":(["":"$N $vpoint out that third-rate sci-fi is superior to romance.",]),"newcombe":([]),"hard":(["":"$N $vsay, \"It's a hard job, but then again, I'm a hard man.\"",]),"stretch":(["STR":"$N $vstretch $o.","":"$N $varch $p back, $vstretch, then $vmutter \"what next ...\" under $p breath.",]),"crash":(["LIV":"$N patiently $vwait for $t to crash.","":"$N $vpoint out that that wasn't a crash; it was a temporary loss of stability.",]),"eyestomp":(["LIV":"$N $vstomp on $p1 eyes.",]),"doofus":(["LIV":"$N $vpoint out that $ts $v1are such a doofus.","":"$N $vare such a doofus.",]),"boitano":(["":"$N $vwonder would Brian Boitano would do in this situation.",]),"violin2":(["LIV":"$N $vwalk in carrying a violin case, carefully $vopen it, $vremove $p thermonuclear sniper rifle, and calmly $vpull the trigger on $t, obliterating $t.",]),"twirl":(["":"$N $vtwirl.",]),"unidle":(["":"$N $vunidle.",]),"coredump":(["LIV":"$N $vdump core on $t.","":"$N $vdump core.",]),"win95salute":(["":"$N $vgive Windows 95 the three fingered salute!",]),"tlbbog":(["":"$N $vgo, \"Three Little Bears Bog!\" (and this little bog is JUST right!)",]),"solong":(["":"$N $vsay, \"So long, and thanks for all the fish!\"",]),"cabbage":(["LIV":"$N $vthrow cabbages at $t.",]),"beenchosen":(["":"$N $vsay, \"I have been chosen! Farewell my friends, I go on to a better place!\"",]),"aleg":(["WRD STR":"$N $o-a-$vleg $o1","WRD":"$N $o-a-$vleg.","WRD LIV STR":"$N $o-a-$vleg $t $o1","WRD LIV":"$N $o-a-$vleg $t.","STR":"$N $o-a-$vleg.",]),"giggle":(["LIV":"$N $vgiggle at $t.","STR":"$N $vgiggle $o.","":"$N $vgiggle.",]),"akiss":(["LIV":"$N $vkiss $p1 ass.",]),"macos":(["":"$N $vcomment on the many shortcoming of the Macintrash OS.",]),"wowser":(["":"$N $vgo, \"WOWSERS!\", as the Inspector Gadget theme song plays in the background.",]),"icmp":(["":"$N $vpass a law to make ICMP a federally controlled substance.",]),"wheeze":(["STR":"$N $vwheeze $o.","":"$N $vwheeze.",]),"whiteass":([]),"noogie":(["LIV":"$N $vgive $t a good noogie.",]),"sgfbog":(["":"$N $vgo, \"Super Giga Fucking Bog!\" (10^9 times larger than .. oh, never mind)",]),"followme":(["LIV":"$N $vmotion for $t to follow $t0o.","":"$N $vmotion for you to follow $no.",]),"prefer":(["STR to STR":"$N $vprefer $o0 to $o1.",]),"beat":(["LIV":"$N $vbeat $p1 ass to a bloody pulp.",]),"bonnety":(["LIV":"$N $vare the only bee in $p1 bonnet.",]),"beam":(["LIV":"$N $vbeam at $t.","STR":"$N $vbeam $o.","":"$N $vbeam.",]),"worship":(["LIV":({"$N $vworship $t. ","$N $vworship $t. (what a brown-noser) ",}),"STR":"$N $vworship $o.","":"$N $vworship.",]),"defenestrate":(["LIV":"$N $vchuck $t out a window!",]),"exitstageleft":(["":"$N $vsay, \"Exit, stage left!\"",]),"sweep":(["LIV":"$N $vsweep the dance floor with $t.",]),"bogattack":(["LIV":"$N $vponder a bog attack, but $vthink twice, and $vslap $t silly until the urge is gone!","":"$N $vponder a bog attack, but $vthink twice, and $vslap $r silly until the urge is gone.",]),"flinch":(["STR":"$N $vflinch $o.","":"$N $vflinch.",]),"inappropriate":(["":"$N $vpoint out *fucksnugglehug* that this emote *bouncebouncefondlewhee* is hopelessly inappropriate.",]),"sinatra":(["":"$N $vsing like a mafia pretty boy.",]),"piddle":(["LIV":"$N $vlift $p leg and $vpiddle all over $t.","STR":"$N $vpiddle $o.","":"$N $vpiddle.",]),"changelog":(["":"$N changed that, read the changelog.",]),"noddle":(["LIV":"$N $vnoddle at $t.","STR":"$N $vnoddle $o.","":"$N $vnoddle.",]),"candy":(["LIV":({"$N $vgive $t a candy for $p1 stunning answer.","$N $vlaud $p1 efforts by giving $t a candy.","$N $vthink $t are wonderful and $vgive $t a candy for your troubles.",}),"":"$N $vgive $r a piece of candy.",]),"banner":(["STR":"$N $vwave a huge banner saying '$O'.","LIV STR":"$N $vwave a huge banner saying '$O' up $p1 face.",]),"diarrhea":(["LIV":"$N $vare going to diarrhea all over $p1 face if $n1 $v1do not shut the fuck up.",]),"shove":(["LIV":"$N $vshove $t.","STR":"$N $vshove $o.","":"$N $vshove.",]),"disagree":(["LIV":"$N $vdisagree with $t.","":"$N $vdisagree.",]),"emotathon":(["":"$N $vcower in fear at the memory of the last time someone started an emote-a-thon!",]),"canuck":(["":"$N $vmake like a Canadian and $vsay, \"Eh?\" while opening a can of \"moosehead\" beer, and turning on the TV to Hockey Night in Canada.",]),"zorkmud":(["":"$N $vnote that the more $n $vuse Lima, the less featured it gets.",]),"daydream":(["LIV":"$N $vdaydream about $t.",]),"weigh":(["":"$N $vgo, \"Weigh, dude!\"",]),"fixit":(["LIV":"$N $vprod $t, \"Fix it, damnit!\"","":"$N $vgo, \"Fix it, damnit!\"",]),"goodnight":(["":"$N would like to wish everyone a %^MAGENTA%^good night%^RESET%^!",]),"five":(["LIV":"$N high-$vfive $t and $vwatch $p1 hand turn bright red!","":({"You count to five, \"One, Two, Three, Four, Five...\" ","$N $vare -=SUCH=- a genius. $N $vcan count to five! ",}),]),"rbow":(["":"$N $vreturn the bow.",]),"shrug":(["LIV":"$N $vshrug at $t.","STR at LIV":"=STR LIV","STR":"$N $vshrug $o.","":"$N $vshrug.","STR LIV":"$N $vshrug $o at $t.",]),"outthere":(["LIV":"$N secretly $vwhisper to $t, 'The truth is out there!'","":"$N secretly $vwhisper, 'The truth is out there!'",]),"route":(["LIV to STR":"$N $vroute $t to $o.",]),"6pack":(["":"$N $vgo, \"Didn't you know I come in six packs?\"",]),"vacuum":(["":"$N $vwonder . o O ( If sound doesn't travel in a vacuum, why do vacuums make so much noise? )",]),"plaid":(["":"$N $vhave gone plaid!",]),"curses":(["":"$N $vgo: \"Curses! Foiled again!\"",]),"submit":(["LIV":"$N $vtell $n1, \"Submit, you dog! Submit to me! Submit to the Usenix conf. on object tech!\"",]),"breath":(["":"$N $vhold $p breath ...",]),"unroll":(["LIV":"$N $vunroll $p1 eyes.",]),"oraise":(["":"$N $vraise the other eyebrow.",]),"behead":(["LIV":"$N $vchop off $p1 head declaring, \"There can be only one!\"",]),"boink":(["LIV":"$N $vboink $t.","STR":"$N $vboink $o.","":"$N $vboink.",]),"syn":(["":"$N $vgo: ----/| \\ o,O| =(-)= SYN!!!!! U THPTH!!!!!!!",]),"boing":(["":"$N $vgo, \"B O I N G !\"",]),"techsupport":(["":"The Lima admins hire a crew of people who have never mudded before to provide $n with industry standard tech support for the Lima mudlib.",]),"implant":(["LIV":"$N $vshout, \"My tricorder shows that $T has no implants at the moment, but previous penetrations causing some minor tissue damage to the lower intestine is evident.\"",]),"complain":(["STR":"$N $vcomplain $o.","":"$N $vcomplain.",]),"vlleg":(["":"$N $vgo, \"Very Little Leg.\"",]),"damned":(["":"$N $vgo, \"I'll be damned.\"",]),"upyerass":(["LIV":"$N $vtell $t, \"Up your ass with a piece of glass!\"","":"$N $vgo, \"Up your ass with a piece of glass!\"",]),"spit":(["LIV":"$N $vspit on $t.","OBJ":"$N $vspit on the $o.","STR":"$N $vspit $o.","":"$N $vspit.",]),"azy":(["":"$N $vbecome furry, soft, lovable, and extraordinarily mean, experiencing a moment of Azy-like grandeur.",]),"spin":(["LIV":"$N $vspin $t.","OBJ":"$N $vspin a $o on $p finger.","":"$N $vspin.",]),"rabbitears":(["LIV":"$N $vflap $p ears like a rabbit at $t.",]),"smack":(["LIV":"$N $vsmack $t.","":"$N $vslap $p arm a few times, saying, \"I need it bad!\"",]),"hand":(["":"$N $vgo, \"Hand.\"",]),"666":(["LIV":"$N $vlift up $p1 hair to reveal a tattoo: 666","":"$N $vscrawl a small 666 on $p forehead.",]),"appreciate":(["LIV":"$N $vappreciate $n1.",]),"snapout":(["LIV":"$N $vturn to $t and $vscream, \"God damn it! Snap out of it!\"","":"$N $vscream, \"God damn it Jesus! Snap out of it!\"",]),"smil":(["LIV":"$N $vsmil at $t.",]),"debate":(["STR":"$N $vdebate $o.","":"$N $vdebate.",]),"boggle":(["LIV":"$N $vboggle at $t.","OBJ":"$N $vboggle at $o.","STR":"$N $vboggle $o.","":"$N $vboggle.",]),"twink":(["LIV":"$N $vthunk $t in the head and you hear a hollow 'TWINK' sound.",]),"stroke":(["LIV":"$N $vstroke $t playfully.","OBJ":"$N $vstroke the $o.","STR":"$N $vstroke $o.","":"$N $vstroke.",]),"moment":(["LIV":"$N $vsit quietly, observing a moment of silence in honor of $t.","STR":"$N $vsit quietly, observing a moment of silence in honor of $o.","":"$N $vsit quietly, observing a moment of silence in honor of the 891st emote.","LIV STR":"$N $vsit quietly, observing a moment of silence in honor of $t $o.",]),"shush":(["LIV":"$N $vgo to $t, \"Shhhh!!!!!\"","":"$N $vgo, \"Shhhh!!!!!\"",]),"fith":(["":"$N $vgo, \"Fire in the hole!\"",]),"yawnpenis":(["":"$N $vyawnpenis.",]),"jellies":(["":"$N $vintone, \"Bow down before the 'King of Jellies'\"",]),"apathy":(["":"$N $vexplain, 'Why yes, that is a large camel growing out of my left buttock.'",]),"toomanybogs":(["":"$N $vexclaim, \"Bog, there are too many 'bog' emotes!\"",]),"bogall":(["":"$N $vhave a sudden bog attack. $N $vgo, \"Very Little Bog.\" $N $vgo, \"Super Giga Fucking Bog!\" (10^9 times larger than .. oh, never mind) $N $vgo, \"Super-Bog!!!!\" $N $vgo, \"Fucking Bog.\" $N $vgo, \"Three Little Bears Bog!\" (and this little bog is JUST right!) $N $vgo, \"Minor Bog.\" $N $vgo, \"Bog.\" $N $vgo, \"Super Fucking Bog!!!!!!!!!\" $N $vgo, \"Little fucking bog!\" $N $vgo, \"LIttle Bog.\" $N $vgo, \"Little Super fucking bog!\" (larger than a fucking bog, smaller than a super fucking bog) $N $vgo, \"Above average little super fucking bog!\" (slightly larger than a little super fucking bog, which is larger than a fucking bog, but smaller than a super fucking bog)",]),"curse2":(["":"$N $vlet out a string of curses that would make $p grandmother (a Harley-mama who wears combat boots) blush with shame.",]),"lsfbog":(["STR":"$N $vgo, \"Little super fucking $o bog.\"","":"$N $vgo, \"Little Super fucking bog!\" (larger than a fucking bog, smaller than a super fucking bog)",]),"maxim":(["":"Maxim - The best thing to happen to men since women.",]),"fsmirkleg":(["LIV":"$N fucking $vsmirkleg at $t.","STR":"$N fucking $vsmirkleg $o.","":"$N fucking $vsmirkleg.",]),"ayt":(["LIV":"$N $vwave $p hand in front of $p1 face, $v1are $n1 there?",]),"wordperfect":(["":"$N $vtry to start up WordPerfect, but $vrun out of memory.",]),"gagme":(["LIV":"$T $vsay \"Gag me with a chainsaw!\"","":"$N $vsay \"Gag me with a spoon!\"",]),"crank":(["LIV":"$N $vgo, \"Hey $t! Crank it up, fucker!\"","":"$N $vgo, \"Crank it up, fuckers!\"",]),"sleep":(["LIV":"$N $vtry to sleep with $t, but $vfail miserably.","":"$N $vdeclare that sleep is a poor substitute for caffeine.",]),"hamster":(["LIV":"$N $vtaunt $t, \"Your mother was a hamster, and your father smelt of elderberries!\"",]),"hmm2":(["":"$N $vscratch $p chin and thoughtfully $vsay, \"Hmmm...\"",]),"squeal":(["LIV":"$N $vsqueal, \"$t!! Hi!! How are you?!\"","STR":"$N $vsqueal $o.","":"$N $vsqueal.","LIV STR":"$N $vsqueal, \"$t!! $o\"",]),"alanis2":(["":"$N $vhope to get a date with Alanis to go to the theatre.",]),"orbit":(["LIV":"$N $vsay, \"We should take off and nuke $Tp from orbit. It's the only way to be sure.\"","STR":"$N $vsay we should just take off and nuke $o from orbit... it's the only way to be sure.","":"$N $vsay we should take off and nuke the site from orbit... it's the only way to be sure.",]),"hiccup":(["LIV":"$N $vbeg $t for a glass of water to cure $p hiccups.","":"$N $vgo, \"Hic!\"",]),"kiickass":(["":"$N $vgo, \"Kiiiick Ass!\"",]),"growl":(["LIV":"$N $vgrowl at $t.","STR":"$N $vgrowl $o.","":"$N $vgrowl.","LIV STR":"$N $vgrowl at $t $o.",]),"linen":(["LIV":"$N $vsay \"Quit yer grinnin and drop yer linens, I found $t.\"",]),"fish":(["":"$N $vgo, \"Holy Zarquon, singing fish!\"",]),"sweat":(["STR":"$N $vsweat $o.","":"$N $vsweat.",]),"basemudlib":(["LIV":"$N $vchange ADMIN_EMAIL in $p mud and $vask $T for permission to rename the base_mudlib(). \"But I changed a lot!\"","":"$N $vchange ADMIN_EMAIL in $p mud and $vask for permission to rename the base_mudlib(). \"But I changed a lot!\"",]),"swear":(["STR":"$N $vswear $o.","":"$N $vswear.",]),"said":(["":"$N $vfeel that needed to be said.",]),"fubar":(["":"$N $vgo, \"Fucked Up Beyond All Recognition.\"",]),"funboy":(["LIV":"$N $vsay, \"C'mon $N1... You got me dead bang.\"","":"$N $vsay, \"C'mon Funboy... You got me dead bang.\"",]),"hplanet":(["":"$N $vscream, \"Hack the planet!!!!\"",]),"tuck":(["LIV":"$N $vtuck $t into bed and $vwave \"Goodnight\".",]),"fork":(["LIV":"$N $vtell $t, \"Make like a process, and FORK OFF!\"","":"$N $vcheck $p holster to see if $p fork is safely tucked away.",]),"guilt":(["LIV":"$N $vtell $t, \"Fasten your seatbelt, we're going on a guilt trip!\"","":"$N $vsay, \"Fasten your seatbelt, we're going on a guilt trip!\"",]),"sfcopeleg":(["":"$N $vgo, \"Super fucking copeleg!\"",]),"whapleg":(["LIV":"$N $vwhapleg $t.","OBJ":"$N $vwhapleg at $o.","STR":"$N $vwhapleg $o.","":"$N $vwhapleg.",]),"chill":(["LIV":"$N $vgive $t a bone chilling look of hatred.","":"$N $vGQ against the wall, and $vchill, suggesting everyone else do the same.",]),"fore":(["":"$N $vshout FORE. Everyone had better duck.",]),"supremacy":(["":"You $vstomp around and $vsay, angrily, \"Where is that damn Supremacy? I had an appointment to get my ass cleaned thirty minutes ago and he's nowhere to be found!\"",]),"thirstymonkey":(["LIV":"$N $vwatch in horror as $n1 $v1are stoned to death by a group of thirsty monkeys.",]),"monkey12":(["":"$N $vstagger drunkenly around and $vsay, \"Twelve monkeys is too much...\"",]),"boredbored":(["":"$N $vare bored enough to add some more emotes ... maybe.",]),"beekp":(["LIV":"$N $vnote that beekp(\"$Tp\") returns 1.",]),"gravy2":(["LIV":"$N $vsay, \"Woah, $tp, you making gravy in there?\"",]),"lagmon":(["LIV":"You hear the sound of splitering bones as $t $v1get crushed by the lag monster with earth shattering dimensions.","":"You hear the sound of splintering bones as $n $vget crushed by the lag monster with earth shattering dimensions.",]),"malic":(["LIV":"$N $vmalic $t.",]),"ponder":(["LIV":"$N $vponder $p1 inner being.","STR":"$N $vponder $o.","":"$N $vponder the situation.","LIV STR":"$N $vponder $p1 $o.",]),"googlbog":(["LIV":"$N super fucking-a googl-$vbog at $t fucking mightily!","":"$N super duper fucking-a google fucking $vbog!",]),"cabal":(["":"$N $vshow you $p USENET Cabal membership card.",]),"risc2":(["":"$N $vsay, \"Yeah... Risc is good...\"",]),"repressed":(["":"$N $vscream, \"Help! Help! I'm being repressed!\"",]),"lunchbox":(["":"$N $vhave $p lunchbox and $n's armed real well.",]),"rival":(["LIV":"$N $vconsider $t to be an intellect rivalled only by garden tools.",]),"choke":(["LIV":"$N $vchoke $t!","":"$N $vlaugh so hard $n $vchoke.",]),"fire":(["":"$N say$v: \"FIRE! FIRE! FIRE! heh.. yeah!\"",]),"yum":(["":"$N $vpat $p tummy, and $vgo, \"Yum, Yum.\"",]),"switch":(["LIV":"$N $vbroadside $t with a context switch into $p1 lane.","":"$N $vget broadsided by a context switching into $p lane.",]),"boglover":(["LIV":"$N $vaccuse $t of being a Bog-Lover.","":"$N $vare a Bog-Lover.",]),"aww":(["LIV":"$N $vgo to $t, \"Aww....\"","":"$N $vgo, \"Aww....\"",]),"upyerbutt":(["LIV":"$N $vtell $t, \"Up your butt with a coconut!\"","":"$N $vgo, \"Up your butt with a coconut!\"",]),"limaleg3":(["":"(L)eg-emote (I)diots = (M)ud (A)sshole.",]),"limaleg2":(["":"(L)eg-emotes (I)ndicate (M)ental (A)gility.",]),"conforte":(["LIV":"$N $vconforte $t.",]),"pummel":(["LIV":"$N $vpummel the hell out of $t.",]),"crackslap":(["LIV":"$N $vdeliver a perfect CrackSlap! alongside $p1 head","":"$N $vprepare for a CrackSlap!",]),"avoid":(["LIV":"$N $vseem to avoid $t like the plaque.","":"$N $vseem to avoid everyone.",]),"awk":(["LIV":"$N $vtype: awk ' BEGIN { strip $n1p; } ; ( length($1) < 0 ) { print insert($1, user, FORCE) + $2 ); } ; ( length($1) > 0 ) { print substr($1, 1, 2) \"...\" } ; END { print NR \" items inserted/truncated\" ; } ' FS=\"joint\" user=$USER $n1p",]),"laggod":(["":"$N $vcomplain and $vwhine about $p lag to the Lag God. $P connection immediately drops.",]),"sup":(["LIV":"$N $vask $t: 'Wazzup?'","":"$N $vsay: Wazzup?",]),"gene":(["LIV":"$N $vblow $p whistle and $vyell, \"$Tp, out of the gene pool, now!\"",]),"STR":(["STR":"$N $vwhip out $p pocket dictionary, $vlook up '$o', but $vgive up and $vshrug.",]),"awe":(["LIV":"$N $vexclaim, \"That's AWESOME $T!\"","":"$N $vexclaim 'Thats AWESOME!'",]),"kewel":(["":"$N $vgo, \"Kewel!\"",]),"333":(["LIV":"$N $vlift up $p1 hair, revealing a tattoo, '333', proving $t to be the Semi-Christ.","":"$N $vlift up $p hair, revealing a tattoo, '333', proving $n $vare the Semi-Christ.",]),"fired":(["LIV":"$N $vrecall how $t $v1were fired from McDonald's for having a short attention span.",]),"alt2600":(["":"$N $vnote that alt.2600 is NOT a newsgroup about the Lima soul daemon.",]),"sue":(["LIV":"$N $vaccuse $n1 of being a boy named Sue!",]),"microsoft":(["":"$N $vblame Microsoft for all the GPFs!!!",]),"oharafix3":(["LIV":"$N $vnote that if certain people, namely $t, were to actually DO something for a change, $n would attempt to be more than underwhelmed by $p1 comment.",]),"oharafix2":(["":"$N $vnote that this is so easy it probably won't break until Ohara fixes it.",]),"blackhole":(["LIV":"$N $vblackhole $t.",]),"etcleg":(["":"$N $vetcleg ...",]),"mur":(["STR":"$N $vmur $o.","":"$N $vmur.",]),"lfbog":(["":"$N $vgo, \"Little fucking bog!\"",]),"fgrumble":(["LIV":"$N fucking $vgrumble at $t.","":"$N fucking $vgrumble.",]),"muh":(["":"$N $vgo 'Muhahahahha!'",]),"lpdeath":(["":"$N $vdie and $vsee $p dead body from above and all that shit.",]),"nurse":(["LIV":"$N $vnurse at $p1 supple bosom.",]),"thighleg":(["STR":"$N $vthighleg $o.","":"$N $vthighleg.",]),"dordon2":(["":"$N $vwonder why the dordon emote severs someones head with a katana.",]),"woman":(["":"Lib $vtell $n, \"Why yes, we DO have a \"woman\" command here. This is a progressive 90's kind of mudlib!\"",]),"blush":(["LIV":"$N $vblush furiously, glaring at $t.","":({"You feel the heat begin to rise as your face turns a deep red. ","$N $vblush furiously. ",}),]),"tincan":(["":"$N $vcompare $p link to two tin cans and a piece of string.",]),"smeg":(["LIV":({"$N $vcall $t a smeghead.","$N $vcall $t a smeghead. \"Smeghead!\"",}),]),"78":(["":"$N $vsing '7, 8, stay up late ...'",]),"youreright":(["LIV":"$N $vtell $t, \"I'm stupid, you're smart. I was wrong, you were right. You're the best, I'm the worst. You're very good looking, and I'm not attractive.\"",]),"cozy":(["LIV":"$N $vare cozy and content with $p1 company.",]),"sexz0r":(["LIV":"$N $vsexz0r $t.",]),"paper":(["LIV":"$N $vgash $t with a paper cut!","":"$N $vwield a sheet of paper.",]),"fhair":(["LIV":"$N $vrun $p fingers through $p1 hair and $vsmile warmly.",]),"foot":(["":"$N $vgo, \"Foot.\"",]),"inbred":(["LIV":"$N $vreveal that $p1 mother is also $p1 sister!",]),"std":(["":"This emote was added at Descartes' request. You don't want to know why.",]),"frog":(["LIV":"$N $vcast a spell on $t and $vturn $t into a FROG!","":"With a flick of $p tongue, $n $vsnatch a fly out of the air. \"Ri-deep, ri-deep!\" ",]),"prealpha":(["LIV":"$N $vlabel $t 'pre-alpha'. Half the MUD community has a heart-attack and dies.",]),"slingblade":(["LIV":"$N $vnod at $t, \"Some folk dem call it a kopesh. I call dem a slingblade. I knocked a man offa muh momma wit one of deese. Upside his head I did.\"","":"$N $vsing, \"I luv muh myrah, muh muh muh myrah, sum dey youll bee muh wifu!\"",]),"gui":(["LIV":"$N $vcheck $t for a \"GUI Interface\".",]),"burgler":(["":"$N $vgo, \"Check it out, Butthead! He's the turd burgler!\"",]),"killwhitey":(["":"$N $vsing, \"I'm gonna get me a shotgun, and kill all the whiteys I see!\"",]),"fool":(["":"$N $vask, \"Who's more foolish, the fool or the fool who follows him?\"",]),"hail":(["LIV":"$N $vhail $t, Leader of the World!","":"$N $vhail the nearest taxi.",]),"impression":(["STR":"$N $vdo $p best $o impression.",]),"dropanchor":(["":"$N $vdrop anchor and $vleave everyone wishing for rubber boots.",]),"beekgeek":(["":"$N $vdoubt that it is a coincidence that \"Beek\" rhymes with \"Geek\".",]),"911":(["LIV":"$N $vcall 911 for $t.","STR":"$N $vcall 911, and $vsay, \"$o\"","":"$N $vcall 911.",]),"910":(["":"$N $vsing '9, 10, never sleep again ...'",]),"duh":(["LIV":"$N $vsay, \"$tp, you are such an induhvidual!\"","":({"$N $vgo: *Duh!* ","$N $vgo: *Duh!* and $vlook around sheepishly. ",}),]),"flop":(["LIV":"$N $vflop at $p1 feet","STR":"$N $vflop $o","":"$N $vflop.",]),"tentacle":(["":"$N $vgo, \"Tentacle.\"",]),"noddy":(["LIV":"$N $vnod at $t, and the bell on $p little hat goes \"Jingle Jingle\".","":"$N $vnod, and the bell on $p little hat goes \"Jingle Jingle\".",]),"tmianon":(["LIV":"$N $vinvite $t to join TMI anonymous.",]),"flog":(["":"$N $vflog off.",]),"funk":(["":"$N $vgo, \"Funk Dat!!\"",]),"gelf":(["":"$N $vgo, \".geL gnikcuF\"",]),"wwys":(["":"$N $vsing, \"What would you say?... I'd say Dave Matthews sounds like Peewee Herman!\"",]),"novell":(["":"$N $vcomplain that Novell is a shitty, fucked-up, lamer, bug-ridden, festering pool of wanna-be-a-real-networking-OS disk dump of code.",]),"pst":(["LIV":"$N $vask '$N1 wana buy some drugs?'","":"$n $vgo, \"Psst...\"",]),"turdboss":(["LIV":"$N $vtell $t to show that turd who's the boss.",]),"isaproblem":(["LIV":"$N $vpoint out that $ts $v1are a problem.",]),"ribbit":(["STR":"$N $vribbit $o.","":"$N $vribbit.",]),"msw":(["":"$N $vmutter swear words under $p breath.",]),"hatekenny":(["LIV":"$N $vsigh, \"God, I hate you $tp.\"","":"$N $vsigh, \"God, I hate you Kenny.\"",]),"nounverb3":(["WRD WRD":"$N $vsuggest that this discussion would be more appropriate in alt.$o.$o1.$o1.$o1!",]),"taunt":(["LIV":"$N $vtaunt $t.","":"$N $vsneer, \"Go ahwahy ohr ah will tauhnt you ah secohnd tihme!\"",]),"waveleg":(["LIV":"$N $vwaveleg to $t.","STR":"$N $vwaveleg $o.","":"$N $vwaveleg.",]),"byford":(["":"$N $vwere born Son of Byford, Brother of Al.",]),"att":(["STR":"$N $vsay, \"Ever $o? You will. And the company that will bring it to you? AT&T.\"","":"\"AT&T,\" $N $vsay, \"You will.\"",]),"900":(["LIV":"$N $vask, \"I'm bored. $Tp, what was your 900 number again?\"",]),"booga":(["LIV":({"$N $vleap out from behind a bush and yells, \"BOOGA!!\" at $t. ","$N $vleap out from behind a bush and yells, \"BOOGA!!\" at $t, scaring $t half to death! ",}),"":({"You scratch your armpits, hump your back and go OoGah BooGah! ","$N $vare -=SUCH+- a Neanderthal!! OoGah BooGah! ",}),]),"dtd":(["":"$N $vdare to dream.",]),"rtfm":(["LIV":"$N $vtell $t, \"RTFM, bonehead.\"","":"$N $vscream, \"RTFM!\"",]),"exclaim":(["STR":"$N $vexclaim, \"$O!\"",]),"stagger":(["STR":"$N $vstagger $o.","":"$N $vstagger drunkenly.",]),"grovel":(["LIV":"$N $vgrovel before $t.","STR":"$N $vgrovel $o.","":"$N $vgrovel shamelessly.",]),"hallucinate":(["LIV":"$N $vhallucinate that $ts $v1are a purple frog.","OBJ":"$N $vhallucinate that $o is a purple frog.","STR":"$N $vhallucinate $o.","":"$N $vhallucinate about purple frogs.",]),"fume":(["LIV":"$N $vfume at $t.","":"$N $vpuff up like a bullfrog, fuming with anger.",]),"rtfc":(["LIV":"$N $vtell $t, \"RTFC, bonehead.\"","":"$N $vscream, \"RTFC!\"",]),"56":(["":"$N $vsing '5, 6, grab your crucifix ...'",]),"nuts":(["LIV":"$N $vsay, \"$tp, I would kick you in the nuts!\"","":"$N $vsay, \"Kyle, I would kick you in the nuts!\"",]),"guffaw":(["STR":"$N $vguffaw $o.","":"$N $vguffaw.",]),"judge":(["":"$N $vsay in a yoda-like voice: Judge me by size, will you?",]),"orgyemote":(["":"$N $vrefer to the \"orgy LIV LIV WRD WRD LIV STR\" emote.",]),"mrt":(["LIV":"$N $vsay, \"Hey $tp, you look mighty fine there in them jeans!\"",]),"roolz":(["LIV":"$N $vthink that $t roolz.","STR":"$N $vgo, \"$o fuckin' roolz!\"","":"$N $vgo, \"That fuckin' roolz!\"",]),"kentucky":(["STR":"$N $vrespond, \"What? No, of course I'm not my own uncle. Where do I look like I'm from? $O?\"","":"$N $vrespond, \"What? No, of course I'm not my own uncle. Where do I look like I'm from? Kentucky?\"",]),"hmfe":(["STR":"Having nothing better to do, $N $vdecide to see how many LIMA emotes $n can find with the word \"$o\" in them.","":"Having nothing better to do, $N $vdecide to see how many LIMA emotes $n can find with the word \"FUCK\" in them.",]),"c++":(["":"$N $vnote that in 100 years, C++ will be remembered as one of humanity's biggest mistakes.",]),"recurse2":(["":"$N $vrefer to the \"recurse\" emote",]),"ass":(["":"$N $vwiggle $p ass.",]),"kablooie":(["":"KABLOOIE!",]),"halluncinate":(["STR":"$N $vhallucinate $T",]),"dntn":(["":"$N $vgo, \"I think that falls under the category of Didn't Need To Know(tm)\"",]),"ask":(["LIV":"$N $vsay to $t, \"Just ask the damn question!\"","":"$N $vsay, \"Just ask the damn question!\"",]),"cheerleg":(["LIV":"$N $vcheerleg $t.","":"$N $vcheerleg.",]),"bitwise":(["":"$N $vgo, \"Bit wise, byte foolish!\"",]),"pant":(["STR":"$N $vpant $o.","":"$N $vpant.",]),"ash":(["":"$N $vdemand a list of LPmuds that save inventory.",]),"dress":(["":"$N $vare off like a prom dress!",]),"sql":(["LIV":({"Beastie $Ts $v1sing, \"SQL! All I really want is SQL!\"","Beastie $Ts $v1sing, \"SQL! All I really want is SQL!\"","$Ts $v1sing, \"SQL! All I really want is SQL!\"",}),"":({"$N $vsing, \"SQL! All I really want is SQL!\"","Beastie $N $vsing, \"SQL! All I really want is SQL!\"",}),]),"acknowledge":(["LIV":"$N $vacknowledge $p1 existence.",]),"grr":(["STR":"$N $vgrr $o.","":"$N $vgrr.",]),"writhe":(["LIV":"$N $vwrithe all over $t.","OBJ":"$N $vwrithe all over $o.","STR":"$N $vwrithe $o.","":"$N $vwrithe in agony!",]),"sack":(["LIV":"$N unceremoniously $vgive $t the sack.",]),"dry":(["LIV":"$N $vdry $T's face.",]),"note":(["STR":"$N $vnote that $o.",]),"42":(["":"$N $vpoint out that 6*9=42.",]),"zena":(["":"$N $vscream: Zena, save us!",]),"smonkey":(["LIV":"$N $vgive $t a hug and $vsay, \"Who's my stinky monkey?\"",]),"dbug":(["LIV":"$N $vaccuse $t of being a driver bug.",]),"bored":(["":"$N $vare bored...anyone want yet another emote?",]),"cows":(["WRD STR":"$N $vnote: (___) (o o) <===== $O /------\\ / (__) / ____O (oo) <===== $O1 | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ","LIV LIV":"$N $vnote: (___) (o o) <===== $n1p /------\\ / (__) / ____O (oo) <===== $n2p | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ","LIV STR":"$N $vnote: (___) (o o) <===== $n1p /------\\ / (__) / ____O (oo) <===== $O | / /----\\----\\/ /\\oo===| / || | || *||^-----|| * ^^ ^^ ^^ ",]),"drunken":(["":"$N $vrelate a long story about the beginnings of the Lima Mudlib and $vconclude by showing all the stupid souls were added by a drunken Deathblade.",]),"schlong":(["":"$N $vschlong.",]),"cowl":(["":"$N $vnote that this emote was added simply because Cowl wasn't mentioned anywhere in the SOUL_D database.",]),"boogle":(["STR":"$N $vboogle $o.","":"$N $vboogle.",]),"massacre":(["LIV":"$N $vmassacre $t to small fragments!",]),"discoslap":(["STR":"$N $vslap $p buttocks, $vshake $p head, $vhop about, and $vsay, \"$o! $o!\"","":"$N $vslap $p buttocks, $vshake $p head and $vhop about.",]),"spam":(["LIV":({"$N force $vfeed $t a can of spam. $Tp $v1turn a sickly shade of green.","$N force $vfeed $t a can of spam. $Tp $v1turn a sickly shade of green.","$N force $vfeed $t a can of spam. $T $v1feel VERY ill now.",}),"":"$N $vproclaim, \"SPAM SPAM SPAM! I love SPAM with green eggs and ham!!\"",]),"emergency":(["":"$Np: This is a test of the emergency emote system. This is only a test. If this had been an actual emote, '$Np:' would have been followed by something worth reading which in all likelyhood would have included a few offensive words. This concludes this test of the emergency emote system.",]),"ineedit":(["":"$N $vgo, \"Yeah, I need it!\"",]),"assmagic":(["LIV":"$N $vpull a rabbit out of $p1 ass.","LIV STR":"$N $vpull $o out of $p1 ass.",]),"arm":(["":"$N $vgo, \"Arm.\"",]),"sketchanus":(["":"$N $vreport, \"Samples recovered from the scene led to this composite sketch of the perpetrator's anus.\"",]),"goinghome":(["":"$N $vare going home. Talking poo is where $n $vdraw the line.",]),"cuddle":(["LIV":"$N $vcuddle with $t.","":"$N $vare so cute and cuddly!",]),"dropload":(["":"$N $vdrop $p load straight down the exhaust port.",]),"notetitle":(["LIV":"$N $vpoint out $p1 title.",]),"eggnog":(["LIV":"$N $vgive $t a hard boiled egg nog.",]),"ffly":(["":"$N $vgo, \"Finafuckingly!\"",]),"bart2":(["":"$N $vsay \"Kewl Beans, man!\"",]),"arc":(["LIV":"$N $varc an eyebrow at $t.","STR":"$N $varc an eyebrow $o.","":"$N $varc an eyebrow.",]),"34":(["":"$N $vsing '3, 4, better lock the door ...'",]),"yow":(["STR":"$N $vexclaim, \"Yow! $O!\"","":"$N $vexclaim, \"Yow!\"",]),"lwave":(["LIV":"$N $vwave at $t lamely... too late.","":"$N $vwave lamely... too late.",]),"why2":(["":"Gamedriver $vtell $n, \"Ours is not to reason why, ours is but to do or die!\"",]),"disclaimer":(["":"$N $vwant everyone to know that the '245' emote is not accurate.",]),"grope":(["LIV":"$N $vgrope $t.",]),"donateleg":(["LIV":"$N $vsteal $p1 wallet, and $vdonate all the cash to the Society for the Prevention of New Leg Emotes.",]),"swegrin":(["":"$N $vget that Swedish-looking grin on $p face again! Oh no! This can't be good!! RUN AWAY, RUN AWAY!!!",]),"sugar":(["":"$N $vsing, 'I'm a little teapot short and stout ... here is my handle, here is my ... _Other_Handle_??? SHIT. I'm a sugar bowl.'",]),"chastity":(["LIV":"$N $voffer a chastity belt to $t.",]),"dest":(["LIV":"$N $vdest $n1, running the risk of retaliation from the Board of Administration. However, the retaliation seems tied up in some amount of bureaucracy.",]),"prime":(["LIV":"$Ts $v1moo pathetically as $n $vstamp 'USDA approved' on $p1 tummy.",]),"roll2":(["LIV":"$P eyes roll at $t.","":"$P eyes roll around the room, looking for someone who is being stupid.",]),"yob":(["LIV":"$N $vaccuse $t of being a yob.","":"$N $vfeel like a yob.",]),"hunger":(["":"Hunger strikes. $N $vgo idle.",]),"designate":(["LIV STR":"$N $vdesignate $t the official Lima [tm] $o.",]),"7up":(["LIV":"$N $vask $t, \"Don't you feel good about 7-up? Hah, hah, ha!\"","":"$N $vask, \"Don't you feel good about 7-up? Hah, hah, ha!\"",]),"sol":(["":"$N $vreply, \"Sorry...I guess you're SOL.\"",]),"gsnort":(["":"$N $vgigglesnort.",]),"spork":(["LIV":"$N $vspork $tp ass.",]),"smooch":(["LIV":"$N $vsmooch $t on the nose.",]),"pop":(["":"$N $vgo, \"Pop!\"",]),"eiffel":(["":"$N $vexpound upon the benefits of OOP in Eiffel.",]),"poo":(["STR":"$N $vpoo $o.","":"$N $vpoo.",]),"grunt":(["LIV":"$N $vgrunt at $t.","STR":"$N $vgrunt $o.","":"$N $vgrunt.",]),"sob":(["LIV":"$N $vsob on $p1 shoulder.","STR":"$N $vsob $o.","":"$N $vsob.",]),"mow":(["LIV":"$N $vmow $t.",]),"humph":(["":"$N $vgo \"Humph\"",]),"gpf":(["LIV":"$N $vfind a General Protection Fault in $p1 butt!!","":"Windows found a General Protection Fault in $p butt!",]),"rockout":(["LIV":"$N $vgo to $t, \"Rock out with your cock out!\"","":"$N $vgo, \"Rock out with your cock out!\"",]),"booch":(["LIV":"$N $vtell $n1, \"Fermez la Booch!\"",]),"10000":(["":"$N $vgo, \"10,000 or bust!\"",]),"coffee":(["LIV":"$N merrilly $vdance about $t, sprinkling coffee liberally on $t.","":"$N gleefully $vsip coffee from an insanely huge travel mug.",]),"moo":(["LIV":"$N $vmoo like a cow at $t.","STR":"$N $vmoo $o.","":"$N $vmoo.",]),"joy":(["":"$N $vgo, \"Oh, Joy! I can hardly contain myself!\"",]),"gtfa":(["LIV":"$N $vtell $t to go the fuck away.","":"$N $vgo the fuck away.",]),"mom":(["LIV":"$N $vsay to $t, \"Thanks, Mom.\"","":"$N $vcry for $p mommy!!",]),"checkpants":(["LIV":"$N $vcheck $p1 pants.",]),"wavie":(["LIV":"$N $vwavie $p armies at $t.","":"$N $vwavie $p armies.",]),"lpenis":(["":"LIMA: The mudlib that discovered that pluralize(\"penis\") was wrong",]),"jot":(["STR":"$N $vtry to start up jot, but $vfail miserably.","":"$N $vtry to start up jot, but $vfail miserably.",]),"french":(["LIV":"$N $vpull $t in close and $vkiss $t passionately.","":"$N $vpoot ohn $p vehry behste Frehnche acsente!",]),"myth":(["":"$N $vprove that the algorithm to get Myth to understand the halting problem's solution is indeed a myth.",]),"bogpenis":(["STR":"$N $vbogpenis $o.","":"$N $vbogpenis.",]),"walkwind":(["":"$N $vsay, \"Man... I hate that walking-into-the-wind crap.\"",]),"clue":(["LIV":"$N $vhand $t a clue, but $n1 $v1have no idea what to do with it.","":"$N $vsay: Why doesn't he have a fucking clue?",]),"blink":(["LIV":"$N $vblink at $t.","STR":"$N $vblink $o.","":"$N $vblink.","LIV STR":"$N $vblink at $t $o.",]),"snm":(["LIV":"$N $voffer to show $t $p proof of the s-n-m theorem.",]),"ruinplot":(["":"$N $vreveal that DARTH VADER is Luke's FATHER.",]),"cute":(["":"$N $vsay, \"Cute Marie. Real cute.\"",]),"freebsd":(["":"$N $vreference market research that shows choosey hackers choose FreeBSD.",]),"joe":(["STR":"$N $vtry to start up Joe, but $vget slapped in the face.","":"$N $vtry to start up Joe, but $vget slapped in the face.",]),"goo":(["":"$N $vgo, \"Goo goo!\"",]),"python3":(["":"$N $vnote how even $p goldfish can read Python.",]),"python2":(["":"$N $vnote how hard Guido's Python rocks $p world.",]),"youre":(["LIV":"$N $vyell at $n1, \"Your not going too make me talk you're English!\"",]),"12":(["":"$N $vsing '1, 2, Freddy's coming for you ...'",]),"comfort":(["LIV":"$N $vcomfort $t.","":"$N $vgo, \"I've got compassion running out of my nose, pal. I'm the sultan of sentiment!\"",]),"11":(["":"$N $vsay, \"These go to eleven.\"",]),"shrig":(["LIV":"$N $vshrig at $t.","STR at LIV":"STR LIV","STR":"$N $vshrig $o.","":"$N $vshrig.","STR LIV":"$N $vshrig $o at $t.",]),"flowerpower":(["":"$N $vput on $p0 t-shirt \"Flower Power\".",]),"whut":(["":"$N $vgo, \"Whut?\"",]),"grump":(["LIV":"$N $vgrump at $O.","STR":"$N $vgrump $o.","":"$N $vgrump.",]),"yawnleg":(["":"$N $vyawnleg.",]),"poopkid":(["":"$N $vsay, \"I just had a brown baby boy!\"",]),"boogie":(["":"$N $vget down to the jungle boogie!",]),"gob":(["":"$N $vgo, \"!goB\"",]),"fidleleg":(["":"$N fucking $vidleleg.",]),"sulkleg":(["LIV":"$N $vsit in the corner and $vsulkleg, glareleging up at $t every now and then.","STR":"$N $vsulkleg $o.","":"$N $vsulkleg.",]),"hack":(["LIV":"$N $vconsider $t a hack in progress.","":"$N $vyell: Just hack it up!",]),"rock1":(["LIV":"$N says, \"$t, you're a ROCK!\"",]),"flip":(["LIV":"$N $vflip $t high up in the air. Whee!","WRD":"$N $vflip $o.","":"$N $vflip.",]),"doh":(["":"$N $vgo: d'oh!",]),"cuss":(["LIV":"$N $vcuss at $t.","STR":"$N $vcuss $o.","":"$N $vcuss.",]),"nafaik":(["":"$N $vsay, \"Not As Far As I Know.\"",]),"aol":(["":"$N $vsay, \"ME TOO\"",]),"kickstart":(["":"$N $vkickstart $p heavy machinery.",]),"idiot":(["LIV":"$N $vpoint at $t stating, \"$Tp is our local village idiot.\"","":"$N $vare depriving a village somewhere of an idiot.",]),"grind":(["":"$N $vemit a grinding noise as $n $vdrop the clutch while mentally shifting gears.",]),"quarter":(["LIV":"$N $vhand $t a quarter, and $vsuggest $t1s $v1call someone who cares.",]),"gnu":(["LIV":"$N $vwonder if $n1 $v1are distributed under the GNU Public License.","STR":"$N $vwonder if $o is distributed under the GNU Public License.","":"$N $vare distributed under the GNU Public License.",]),"yagr2e":(["":"$N $vyearn for yet another great random2 emote.",]),"sfwoo":(["":"$N $vgo, \"Super fucking WOO!\"",]),"headinj":(["LIV":"$N $vexamine $t for head injuries.",]),"gnr":(["LIV":"$N used to love $t, but had to kill $t.",]),"fatality":(["LIV":"$N $vperform the super secret joystick movements, and $vremove $p1 nads via the eye socket!","":"$N $vboom, \"FATALITY!\"",]),"needfood":(["":"Gamedriver intones, \"$Np needs food badly!\"",]),"borednow":(["":"$N $vsay, \"Okay, $Np bored now.\"",]),"newsoulrox":(["":"$N $vnote how much newsouls rocks.",]),"lovin":(["LIV":"$N $vwhisper to $t, \"Give papa the lovin!\"",]),"police":(["LIV":"$N $vcall the police and $vask them to arrest $t. 10 police officers storm into the room and beat the living shit out of $t, and haul $t off to jail.",]),"1000":(["":"$N $vgo, \"1000 or bust!\"",]),"nipkiss":(["LIV":"$N $vnipkiss $t.",]),"shudder":(["LIV":"$N $vshudder in revulsion at $t.","STR":"$N $vshudder $o.","":"$N $vshudder.",]),"wander":(["STR":"$N $vwander $o.","":"$N $vwander.",]),"dontmove":(["":"$N $vscream, \"Any of you fucking pigs move, and I'll execute every mother-fucking last one of you!\"",]),"toofewemotes":(["STR":"$N $vcomplain about the small number of emotes that come with the LIMA lib. There isn't even an emote for '$o'!!!","":"$N $vcomplain about the small number of emotes that come with the LIMA lib.",]),"gheh":(["":"$N $vgrin, \"Heh heh heh...\"",]),"crack":(["LIV":"$N $vcrack $t.","STR":"$N $vdeclare that $o is a poor substitute for a good rock of crack.","":"$N $vdeclare that cocaine is a poor substitute for a good rock of crack.",]),"accuse":(["LIV STR":"$N $vaccuse $t of being a $o.",]),"offer":(["LIV STR":"$N $voffer $t $o.",]),"useless":(["":"$N $vexclaim 'Waving Legs is Futile, Emotes are irrelevant'",]),"nmuch":(["":"$N $vgo, \"Not much.\"",]),"taunt2":(["LIV":"$N $vtell $t, \"Go ahwahy ohr ah will tauhnt you ah secohnd tihme!\"",]),"dbsuxnum":([]),"buttfuck":(["LIV":"$N $vinvade $p1 anus with $p tube of balogna!",]),"pain":(["":"$N $vsing, 'Some get their kicks out of pain ... I know I do ... and I swear that it's true ... Yes, I get a ... kick ... out of you.'",]),"spoon":(["LIV":"$N $vspoon with $t.",]),"encourage":(["LIV":"$N $vencourage $t.",]),"dmz":(["":"$N $vnote that having to deal with a DMZ is like being stationed in Korea's DMZ.",]),"math":(["":"$N $vnote, \"If 2+2 is 4, and 2x2 is 4, what's the big deal about multiplication, anyway?\"",]),"nunu":(["LIV":"$N $vgo, 'You're a nu-nu, $tp!'","":"$N $vgo: 'You're a nu-nu!'",]),"freak":(["STR":"$N $vfreak $o.","":"$N $vfreak.",]),"rubhands":(["":"$N $vrub $p hands together mischeviously.",]),"misfirek":(["LIV":"$N $vcrown $t \"King of Misfires\"",]),"quake":(["STR":"$N $vquake $o.","":"$N $vquake.",]),"elvis":(["":"$N $vtry to start up elvis, but apparently the King has left the building.",]),"sighleg":(["":"$N $vsighleg.",]),"bawl":(["LIV":"$N $vbawl $p eyes out on $p1 shoulder.","STR":"$N $vbawl $o.","":"$N $vbawl.",]),"christmas":(["":"$N $vjump into the air and screams 'A very Merry Fucking Christmas to ya!'",]),"headbutt":(["LIV":"$N $vheadbutt $t.",]),"navie":(["LIV":"$N $vwavie $p navies at $t.","":"$N $vwavie $p navies.",]),"misery":(["":"$N $vwhine, \"Just Fix It!\"",]),"unhip":(["":"$N $vsay, \"Man, you're so unhip it's a wonder your bum don't fall off!\"",]),"gobble":(["":"$N $vgobble at the concept.",]),"dumbass":(["LIV":"$N $vgo to $t, \"You dumbass!\"","STR":"$N $vthink $o is a dumbass.","":"$N $vare a dumbass.",]),"logic":(["":"$N $vrefuse to speak with so many emotes available to $t10.",]),"dbog":(["":"$N $vgo, \"Double bog.\"",]),"piefuck":(["LIV":"$N $vtell $t to go fuck a pie.",]),"sheshot":(["":" @@@@ @@@@@@@ - @@@@ '_ @@@ __\\@ \\@ _\\\\ (/ ) @\\_/) |(__/ / /| \\___/ \"\"\"\"\"_| ,x *( |x \\ |x ) |/\\_____| | / / | / ( | /\\__\\ (__\\| | | |[* | [* |, \\ , \\ /|/ ,__ /|/ ",]),"closed":(["":"[Connection Closed by Foreign Host]",]),"sfbog":(["":"$N $vgo, \"Super Fucking Bog!!!!!!!!\"",]),"byte":(["LIV":"$N $vtell $t, \"Byte me!!!\"","":"$N $vgo, \"Byte me!\"",]),"wavep":(["":"$N $vwave at you.",]),"tweezer":(["LIV":"$N $vplease $t with a tweezer...",]),"deny":(["":"$N vigorously $vdeny it.",]),"evil":(["":"$N $vsprout little horns and a tail and $vturn into a cute little devil.",]),"notaste":(["LIV":"$N $vnote that $n1 $v1have no taste.",]),"daemonize":(["LIV":"$N $vturn $t into a daemon.",]),"squeeze":(["LIV":"$N $vsqueeze $t.","STR":"$N $vsqueeze $o.",]),"foff":(["LIV":"$N1 $v1say: Fuck off, im busy.",]),"declaw":(["LIV":"$N $vdeclaw $t.","STR":"$N $vdeclaw $o.","":"$N $vdeclaw.",]),"aalsfbog":(["":"$N $vgo, \"Above average little super fucking bog!\" (slightly larger than a little super fucking bog, which is larger than a fucking bog, but smaller than a super fucking bog)",]),"campfire":(["":"$N $vscream, \"What are we gonna do now, man? Sit around a campfire and sing songs?\"",]),"sitbitch":(["LIV":"$N $vtell $t to sit like the bitch that $n1s $v1are.",]),"foobar":(["":"$N $vthink $ns really fucked up this time.",]),"booger":(["LIV":"$N $vsneeze, blowing a booger onto $t.","":"$N $vsneeze, blowing a booger onto the wall.",]),"ignorant":(["":"A tiny wizard pops up and screams in $p face, \"YOU ARE THE MOST IGNORANT PERSON I HAVE EVER SEEN!!!\"",]),"ged9":(["LIV":"$N $vscream in $p1 face, \"HEY, STUPID, DIDN'T YOU KNOW THAT THERE IS NO SUCH THING AS A GREY ELEPHANT IN DENMARK ???\"",]),"ged8":(["":"$N $vsay, \"Finally, think of the color of that animal.\"",]),"fucken":(["LIV":"$N $vwhine, \"Stop fucken wit me, $N1, I swear I'm innocent!\"","":"$N $vwhine, \"Stop fucken wit me! I swear I'm innocent!\"",]),"ged7":(["":"$N $vsay, \"Take the second letter in the name of the country, and think of an animal that starts with that letter.\"",]),"sewage3":(["":"$N $vsay, \"It comes out of your ass, dumbass!\"",]),"sewage2":(["":"$N $vsay, \"It comes out of your weed, dillweed!\"",]),"ged6":(["":"$N $vsay, \"Now think of a country that starts with that letter.\"",]),"ged5":(["":"$N $vsay, \"Take the letter of the alphabet that corresponds to that number (a=1, b=2, etc).\"",]),"ged4":(["":"$N $vsay, \"Now take that number and subtract 5 from it.\"",]),"ged3":(["":"$N $vsay, \"You should have a two digit number. Add the two digits together.\"",]),"free":(["LIV":"$N $vhand $t a 'Get out of discussion FREE' card.",]),"ged2":(["":"$N $vsay, \"Now take that number and multiply by 9.\"",]),"shoes":(["LIV":"$N $vtry to interest $t in a pair of concrete shoes.",]),"ged1":(["":"$N $vsay, \"Pick a number between 2 and 9.\"",]),"shakeleg":(["LIV":"$N $vshakeleg $p head at $t.","":"$N $vshakeleg $p head.",]),"null":(["LIV":"$N $vram $t into /dev/null.",]),"flex":(["LIV":"$N $vflex $p muscles in front of $t.","STR":"$N $vflex $o.","":"$N $vflex $p muscles.",]),"tmicoder":(["LIV":"$N $vnote that $t $v1code just like a TMI'er.",]),"squeeshy":(["LIV":"$N $vsqueeze on $t and $vsay, \"Squeeshy!\"","":"$N $vlook somewhat squeeshy.",]),"peerm":(["LIV":"$N $vpeer into $p1 mouth.",]),"pounce":(["LIV":"$N $vpounce on $t.",]),"vim":(["":"$N $vtry to start up vim, but $vfail miserably.",]),"vote":(["STR":"$N desparately $vwant to vote \"$O\" ... but what the hell does $ns think this is? A fucking democracy?!",]),"ffinger":(["LIV":"$N $vimply with $p middle finger that $n $vwant $t to fuck off.",]),"downsize":(["LIV":"$N $vdownsize $n1 viciously, clearing $p1 desk into a trash bag and casting $n1o out on the street.",]),"35007":(["LIV":"$N $vnote how 35007 $t $v1are.",]),"sscratch":(["":"$N $vscratch $r secretly.",]),"fleg":(["":"$N $vgo, \"Fucking Leg.\"",]),"balls":(["":"$N $vgo, \"I want to dip my BALLS in it!!\"",]),"shoelace":(["LIV":"$N $vtie $p1 shoelaces together.","LIV LIV":"$N $vtie $p1 shoelaces to $p2 shoes.",]),"flee":(["STR":"$N $vflee $o.","":"$N $vflee.",]),"okie":(["LIV":"$N $vtell $t, \"Okie!\"","":"$N $vgo, \"Okie!\"",]),"wiggle":(["LIV":"$N $vwiggle $p bottom at $t.","STR":"$N $vwiggle $o.","":"$N $vwiggle $p bottom.",]),"death2":(["LIV":"$N $vshout, \"Die, $tp, DIE!!\"","STR":"$N $vshout, \"Die, $o, DIE!!\"",]),"raise":(["LIV":"$N $vraise an eyebrow at $t.","STR":"$N $vraise $o.","":"$N $vraise an eyebrow.",]),"handsup":(["LIV":"$N $vcommand $t, \"Reach for the skyyy...\"",]),"donut":(["":"$N $vdrool, \"Mmmmmm, forbidden donut...\"",]),"optimize":(["LIV":"$N $vdetermine $t $v1have no side effects, and $voptimize $t away.",]),"roids":(["LIV":"$Ts $v1drop $p1 pants. $N $vexclaim, \"Look, sir, roids!\"",]),"fcool":(["":"$N $vgo, 'Fucking COOL, man!'",]),"snickerpenis":(["":"$N $vsnickerpenis.",]),"cowtip":(["LIV":"$N $vsneak up next to $t as $n1 $v1idle and $vtip $t over with one hard shove. THUD!!!",]),"bcough":(["LIV":"$N $vgrab $p1 balls and $vsay, \"Cough.\"",]),"finger":(["":"$N $vgo, \"Finger.\"",]),"loser":(["LIV":"$N $vgo, \"You're a loser, $tp!!\"","":"$N $vgo, \"I'm a loser baby...\"",]),"cool":(["LIV":"$N $vgo to $t, \"Cool!\"","":"$N $vgo, \"Cool!\"",]),"cook":(["STR":"$N $vcook $o.","":"$N $vcook.",]),"nuke":(["":"$N $vstate, \"I say we nuke the site from orbit. Its the only way to be sure.\"",]),"meat2":(["STR":"$N $vmeat $o.",]),"thespian":(["":"$N $vannounce, \"I'm a thespian! That means I like women!\"",]),"prodigy":(["LIV":"$N $vnominate $t for a geek-luser spot in the next Prodigy ISP ad.",]),"fuck":(["LIV":"$N $vfuck $t hard from behind. God it feels good.","LIV STR":"$N $vlook $o confused.",]),"gypsy":(["LIV":"$N $vsell $t to the gypsies.",]),"ourmilk":(["LIV":"$N $vtell $t, \"No milk will ever be OUR milk.\"",]),"git":(["LIV":"$N $vaccuse $t of being a stupid git.","":"$N $vfeel like a stupid git.",]),"jig":(["":"$N $vdance a jig.",]),"sfboardleg":(["":"$N $vgo, \"Super fucking boardleg!\"",]),"pavlov":(["":"$N $vsay, \"Does Pavlov ring a bell?\"",]),"shh":(["LIV":"$N $vgo, \"Shhhh!\" at $t.","":"$N $vgo, \"Shhhh!\"",]),"candygram":(["":"$N $vknock on the door, \"Candygram!\"",]),"fearleg":(["LIV":"$N $vfearleg $t.","":"$N $vfearleg.",]),"flesh":(["":"$N $vsay \"Bah! Merely a flesh wound! I've had worse!\"",]),"koolaid":(["LIV":"$N $vshare $p Kool-Aid with $t.","":"$N $vhave drank the Kool-Aid.",]),"conditioner":(["":"$N $vproclaim, \"Conditioner is better! I make the hair silky and smooth!\"",]),"conn":(["":"Connection closed by foreign host.",]),"slobber":(["LIV":"$N $vslobber on $p1 face, just like Dino would.","":"$N $vslobber messily, like a big dog.",]),"pshaw":(["":"$N $vgo, \"Pshaw!\"",]),"mutter":(["LIV":"$N $vmutter at $t.","STR":"$N $vmutter \"$o.\"","":"$N $vmutter under $p breath.",]),"yogi":(["":"$N $vgo, \"Have no fear, Yogi's here!\"",]),"anus":(["":"$N $vexclaim, \"HOT ANUS!\"",]),"batman":(["LIV":"$N $vgroan, \"Must.... reach.... utility.... belt...\" to $t.","STR":"$N $vgroan, \"Must.... reach.... $o....\"","":"$N $vgroan, \"Must.... reach.... utility.... belt...\"","LIV STR":"$N $vgroan, \"Must.... reach.... $o....\" to $t.",]),"die":(["LIV":"$N $vscream at $t, \"DON'T YOU EVER FUCKIN' DIE!?!!?\"","STR":"$N $vdie $o.","":"$N $vdie.",]),"highfive":(["LIV":"$N $vhighfive $t.",]),"nike":(["":"$N just $vdo it.",]),"eyes":(["":"$N $vsay softly, \"I like the pretty eyes.\"",]),"dinner":(["":"$N $vsense a rumbling in $p tummy, and $vhead off for dinner.",]),"beexcellent":(["LIV LIV":"$N $vtell $t and $n2 to \"Be excellent to each other.\"","":"$N $vtell you to \"Be excellent to each other.\"",]),"bonnet":(["LIV":"$N $vare the only be in $p1 bonnet.",]),"sgi":(["":"$N $vsay \"SGI: Silly Gangreen Isotobes!!!\".",]),"pigsqueal":(["LIV":"$N $vorder $t to squeal like a pig.","":"$N $vsqueal like a pig.",]),"hitler7":(["":"$N $vsay, \"And another good thing about Hitler: All the documentaries about the Holocaust show TONS of naked chicks!\"",]),"hitler6":(["":"$N $vsay, \"And another good thing about Hitler: The Holocaust museum in DC is just RAKING in the dough.\"",]),"fcomm":(["":"$N $vsay, \"What we have here is a failure to communicate.\"",]),"explode":(["":"$N $vexplode! What a mess!",]),"hitler5":(["":"$N $vsay, \"And another good thing about Hitler: Without him, there'd be no 'Diary of Anne Frank'. You can't have your cake and eat it too.\"",]),"lern":(["LIV":"$N $vthink thar $t shoyld lern totype.","":"$N $vlern totype.",]),"bart":(["":"$N $vgo, \"I'm Bart Simpson, who the hell are you?\"",]),"motor":(["LIV":"$T $v1bite your groin!",]),"nthreaten":(["LIV":"$N $vthreaten $t with a small tactical nuclear weapon.",]),"hitler4":(["":"$N $vsay, \"And another good thing about Hitler: He only had one testicle, paving the way for people with only one testicle to exterminate races.\"",]),"hitler3":(["":"$N $vsay, \"And another good thing about Hitler: Without his crack medical staff, we never would have discovered that pregnant women can't give birth with their thighs sewn together.\"",]),"hitler2":(["":"$N $vsay, \"And another good thing about Hitler: He made the Jews wear that star. It looked like those chinese stars ninja use. Whether it's 1938 or 1985, chinese stars are cool.\"",]),"hanghead":(["":"$N $vhang $p head in shame!",]),"class":(["":"$N $vlook at $p watch and $vACK-$vwave-$vrun off to class.",]),"littlebitch":([]),"bark":(["LIV":"$N $vbark like a dog at $t.","STR":"$N $vbark $o.","":"$N $vbark.",]),"sfwaveleg":(["LIV":"$N super fucking $vwaveleg to $t.","STR":"$N super fucking $vwaveleg $o.","":"$N super fucking $vwaveleg.",]),"hughgrant":(["":"$N $vnote, \"I haven't seen an englishman take a blow like that since Hugh Grant!\"",]),"pride":(["LIV":"$N $vwonder if $t $v1have marched in a Gay Pride parade lately.","STR":"$N $vwonder if $o has marched in a Gay Pride parade lately.",]),"barf":(["LIV":"$N $vbarf all over $t.","STR":"$N $vbarf $o.","":"$N $vbarf.",]),"dontcallmefat":(["LIV":"$N $vsay to $t, \"God, damnit, don't call me fat, you buttfuckin' son of a bitch!\"","":"$N $vsay. \"God, damnit! Don't call me fat, you buttfuckin' son of a bitch!\"",]),"sister":(["LIV":"$N $vlike $t. $N1 can come over to $p house and fuck $p sister.","STR":"$N $vsay: $O tells you: Do you have a younger sister? Around 10-12 years old maybe?",]),"cowshit":(["WRD STR":"$N $vnote: (__) <== $O /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $O1 ^^ ^^ ","LIV LIV":"$N $vnote: (__) <== $N1p /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $N2p ^^ ^^ ","LIV STR":"$N $vnote: (__) <== $N1p /oo\\________ \\ / \\ \\/ / \\ \\_|___\\_|/.\\ || YY| o ' || || O <== $O ^^ ^^ ",]),"sticksandstones":(["":"$N $vnote that sticks and stones might break $p bones, but bullets tend to kill $t10.",]),"swave":(["":"$N $vwave stupidly... too early.",]),"impact":(["":"$N $vbrace for impact.",]),"lightbulb":(["":({"You're about as smart as a burnt out lightbulb. ","A lightbulb hesitantly flickers and comes on in $p head. ",}),]),"sfrmleg":(["STR":"$N super fucking $vremoveleg $o!",]),"point":(["LIV":"$N $vpoint at $t.","OBJ":"$N $vpoint at the $o.","STR":"$N $vpoint at $o.","":"$N $vpoint at $r, \"Me?\"","LIV STR":"$N $vpoint at $t and says, \"$o\".",]),"nogleg2":(["":"$N $vnogleg.",]),"smack2":(["LIV":"$N $vsmack $t upside the head with $p 2x4!",]),"yes":(["":"$N $vexclaim, \"YES!\"",]),"pace":(["STR":"$N $vpace $o.","":"$N $vpace.",]),"foam":(["":"$N $vfoam at the mouth.",]),"carpet":(["LIV":"$N $vwhistle innocently as $n $vsweep $t under the carpet.",]),"tongue":(["LIV":"$N $vstick out $p tongue at $t.","":"$N $vstick out $p tongue.",]),"lwoo":(["":"$N $vgo, \"Little woo.\"",]),"mfm":(["":"$N $vgo, 'Moo Fucking Moo!'",]),"whml":(["LIV":"$N $vwhml $t.",]),"dielaff":(["":"$N $vfall on the floor and slowly $vchoke to death laughing....",]),"smrevolve":(["":"$N $vsmile, and the world revolves around $n90o.",]),"flap":(["":"$N $vflap $p wings. Flap flap flap flap!!",]),"skidmarks":(["":"$N $vfart, accidently leaving behind skidmarks, and some leaked fluid.",]),"sex":(["LIV":"$N $vtake $t away for wild, passionate sex. $Ts $v1wish it could last forever!!",]),"fedex":(["":"$N $vget $r fedexed",]),"dgd":(["":"$N $vwave around a sign, reading \"Castrated LP driver for sale\"",]),"sunblock":(["LIV":"$N $vtell $t to put on 2000 sunblock, or $ts $v1are going to have a REALLY BAD day.","":"$N $vpoint out that if you aren't wearing 2000 sunblock, you're going to have a REALLY BAD day.",]),"trynot":(["":"$N wisely $vspeak, \"Try not! Do.. or do not! There is no try.\"",]),"att2":(["":"$N $vsay, \"Ever been sodomised by a vaseline smeared chainsaw on full throttle? You will. And the company that will bring it to you? AT&T.\"",]),"thank":(["LIV":"$N $vthank $t.","OBJ":"$N $vthank $o.","STR":"$N $vthank $o.","":"$N $vthank someone, $n $vare just not sure exactly whom to thank.","LIV STR":"$N $vthank $t $o.",]),"flaf":(["LIV":"$N fucking $vlaf at $t.","":"$N fucking $vlaf.",]),"trend":(["STR":"$N $vgo, \"$O\", in an attempt to start yet another series of emotes.",]),"sep":(["":"$N $vshout, \"IT'S SOMEBODY ELSE'S PROBLEM!!\"",]),"netgods":(["LIV":"The gods of the net have deemed that $t will maintain a connection for no more than 10 minutes at a time.","":"The gods of the net have deemed that $n will maintain a connection for no more than 10 minutes at a time.",]),"mudsluts":(["LIV":"$N $vnote that if one could get STDs through a modem, $t1 would $v1have died years ago.",]),"poiuytrewq":(["":"$N must really be bored to have typed \"qwertyuiop\" backwards.",]),"amiga2":(["":"$n $vmourn the death throes of the Amiga.",]),"kosh":(["":"$N $vphilosophize, \"Truth is a three edged sword.\"",]),"pet":(["LIV":"$N $vpet $t like the monkey that $ts $v1are.","":"$N $vpet an imaginary animal and $vholler, \"We don't need no stinkin standard pet!\"",]),"eden":(["":"$N $vremark that if ignorance is bliss, then this place must be Eden.",]),"jfc":(["":"$N $vpromise to run on any platform except Windows, MacOS and Unix, but $vexecute at the speed of molasses in January.",]),"commentcode":(["":"$N $vsay, \"Why should I comment my code? If it was hard to program then it should be hard to understand.\"",]),"robocoder":(["":"$N $vswitch to robocoding mode.",]),"emoteaproposisareallylongnameforsuchausefulcommand":(["":"$N $vwonder out loud if anyone actually types out 'emoteapropos' instead of aliasing it, while trying to make it appear as if $n $vare not one of those idiots.",]),"kiss":(["LIV":"$N $vkiss $t.","":"$N $vgo, \"Keep It Simple, Stupid!\"","LIV STR":"$N $vkiss $t $o.",]),"lkwow":(["":"$N $vwow at it all. (tm Seminexus Lakitu, all rights reserved.)",]),"poontang":(["":"If $n $vare gonna get $p balls blown off for a word, $p word is poontang.",]),"pea":(["LIV":"$N $vthrow peas into $p1 mouth.",]),"man2":(["LIV":".",]),"coke":(["":"$N $vare a Coke addict.",]),"option":(["":"$N $vthink sleep would be a good option right about now.",]),"afp":(["STR":"$N $vhold up one finger, \"Away From the Palm for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the Palm for a sec...\"",]),"apologize":(["LIV":"$N $vapologize to $t.","STR":"$N $vapologize, '$o'","":"$N $vapologize.","LIV STR":"$N $vapologize to $t $o.",]),"meh":(["":"$N $vgo: \"Meh.\" (somewhere in between \"Feh\" and \"Teh\")",]),"afo":(["STR":"$N $vhold up one finger, \"Away From the OmniSky for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the OmniSky for a sec...\"",]),"welcomeback":(["LIV":"$N $vsing to $t, \"Welcome back, the dreams were your ticket out. Welcome back, to that same old place that we laughed about.\"","":"$N $vsing, \"Welcome back, the dreams were your ticket out. Welcome back, to that same old place that we laughed about.\"",]),"beards":(["":"$N $vsay, \"We're so smooth, we've even got beards on our hands!\"",]),"aforce":(["LIV":"$N $vwavie $p air forces at $t.","":"$N $vwavie $p air forces.",]),"deputy":(["LIV":"$N $vtell $t, \"You're my favorite deputy!\"",]),"afk":(["STR":"$N $vhold up one finger, \"Away From the Keyboard for a sec... ($o)\"","":"$N $vhold up one finger, \"Away From the Keyboard for a sec...\"",]),"megaho":(["":"$N $vsay, \"It's Megaboz, not Megaho!\"",]),"yoda":(["LIV":"$N $vadvise $t, \"Yoda, you seek Yoda!\"","":"$N $vstate, \"Yoda, you seek Yoda!\"",]),"rsfearedk":(["":"$n $vgo, \"Rather sorta feared, but just kinda.\"",]),"crackneck":(["":"$N $vtwist $p stiff neck awkwardly to the sound of a bone wrenching CRACK!",]),"yuck":(["LIV":"$N $vgo, \"Yuck!!!! It's $t!!!\"","STR":"$N $vgo, \"Yuck!!!! $o!!!\"","":"$N $vgo, \"Yuck!!!!\"",]),"curse":(["LIV":"$N $vplace a thousand curses on the house of the Dread Pirate $tp.","":"$N $vlet out a string of curses that would make a drunken sailor blush in shame.",]),"weld":(["LIV":"$N $vweld $p1 butt-cheeks shut!",]),"jed":(["STR":"$N $vtry to start up jed, but $vfail miserably.","":"$N $vtry to start up jed, but $vfail miserably.",]),"overshareoff":(["":"The overshare light is: on [OFF].",]),"quack":(["LIV":"$N $vquack like a duck at $t.","STR":"$N $vquack $o.","":"$N $vquack.","STR LIV":"$N $vquack $o at $t.",]),"dew":(["LIV":"$N $vhand $t a Mountain Dew.","":"$N $vgo to get another Mountain Dew.",]),"gel":(["":"$N $vgo, \".geL\"",]),"objtest":(["OBJ":"$N $vfoo $o.","OBS":"$N $vfoo $o.",]),"hrmph":(["LIV":"$N $vhrmph at $t.","STR":"$N $vhrmph $o.","":"$N $vhrmph.",]),"eyebrow":(["LIV":"$N $vlook $t and does the eyebrow thingy :)","":"$N $vraise an eyebrow curiously.",]),"beeksux":(["":"$N $vshout \"BEEK ROCKS!\" at the top of $p lungs, then quickly $vrealize what $n $vhave said, and promptly $vshut the fuck up.",]),"pdb":(["LIV":"$N $vguess $n1 would rather be alive than free. Poor dumb bastard.","":"$N would rather be alive than free. Poor dumb bastard.",]),"heartandsoul":(["LIV":"$N $vtell $t, \"Everybody knows you're the heart and soul of Lima\"",]),"knuckleheads":(["LIV LIV":"$N $vmake like Moe from the Three Stooges, and $vsmack the heads of $t and $t2 together, shouting \"You knuckleheads!\".",]),"pda":(["":"$N $vgive a public service announcement: Marriage is a wonderful thing. You gotta be faithful. If you can't be faithful try to limit it to say... 2 or 3 hookers a week. If you can't limit it to 2 or 3 hookers a week at least try to not bring them home and have sex with them on the kitchen table. If you can't not bring them home and.... (N B C)",]),"kirk":(["":"Overacting, $n dramatically $vflip open $p communicator and $vcry, \"Beam me up, Scotty!\"",]),"rename":(["":"$N $vthink it's about time to rename all the files in the mudlib again.",]),"smirk":(["LIV":"$N $vsmirk at $t.","STR":"$N $vsmirk $o.","":"$N $vsmirk.",]),"smirj":(["":"$N $vsmirj koppely.",]),"lbog":(["":"$N $vgo, \"Little Bog.\"",]),"molest2":(["":"$N $vnote that Tigran's justification for having a second child is twice the sex.",]),"kickass":(["LIV":"$N $vyell, \"Shut up, $tp! I'm gonna have to kick your ass!\"","":"$N $vgo, \"Kick ass!\"",]),"r2hunt":(["":"$N $vhunt for all the good random2 emotes.",]),"omaha":(["":"$N $vare drawn to the lure of ordering ohmaha steaks from Onsale!",]),"yawnfast":(["LIV":"$N $vyawn and quickly $vclose $p mouth before $t can throw peas...","":"$N $vyawn and quickly $vclose $p mouth before anyone can throw peas...",]),"blick":(["LIV":"$N $vlick $t all over.",]),"mbetter":(["":"$N $vfeel much better now.",]),"blahtest":(["STR":"$O: $N $vblah",]),"forcefuck":(["LIV LIV":"$T1s $v1fuck $t12 hard from behind. God, it feels good.",]),"squark":(["":"$N $vsquark.",]),"make":(["":"$N $vtry to do a 'make', but $vfail miserably.",]),"chickenfucker":(["":"Tomorrow night another chicken gets it.",]),"kirk2":(["":"$N $vcommand Ensign Rodriguez to go explore that perilous cave. Seconds later you hear Ensign Rodriguez's dying scream. $N $vsay, \"Dammit bones...what...have I done...\".",]),"slave":(["LIV":"$N $vbeg $t: I wanna be your love slave!","LIV LIV STR":"$N $vsell $n1 to $n2 for $o.",]),"java":(["":"$N $vnote that Java would be okay if it weren't so damn SLOW!",]),"magician":(["":"$N $vgo, \"Magician kicks assssssssssssss!\"",]),"sexslave":(["LIV":"$N $vput a note on $p1 back: \"$Np's Sex Slave.\"","LIV LIV":"$N $vput a note on $p1 back: \"$N2p's Sex Slave.\"",]),"otay":(["":"$N $vmake an 'O' with $p thumb and index finger and $vsay, \"O Tay!\"",]),"kicka":(["LIV":"$N $vkick $p1 ass.",]),"offmycase":(["LIV":"$N $vtell $t, \"Off my case, toilet face!\"","":"$N $vsay, \"Off my case, toilet face!\"",]),"bang":(["LIV":"$N $vbang $p1 head against the nearest wall.","":"$N $vbang $p head against the nearest wall.",]),"thatkicks":(["":"$N $vsay, \"Dude, that kicks ass!\"",]),"error":(["LIV":"$N $vmake fun of $t for causing a runtime error. What a doofus.",]),"mci":(["":"$N $vput on $p \"MCI is fucking up the Internet\" T-shirt and $voffer them around.",]),"brazil":(["LIV":"$N $vpromote $t to Information Retrieval.",]),"elevator":(["LIV":"$N $vwatch $t push the Down button in an elevator that's on the ground floor.",]),"vbf":(["":"$N $vsquat down in a most undignified pose. A painful look invades $p face and the next thing you know the area is covered in $p vaginal blood fart.",]),"cultured":(["":"$N $vwant to meet stimulating and interesting people of an ancient culture, and kill them.",]),"add":(["":"$N $vnote there isn't a '$n' emote and proceeds to add one.",]),"horror":(["":"$N $vhuddle in a corner whimpering \"The Horror .. the Horror.\"",]),"bloat":(["LIV":({"$N $vwonder if $t is bloated.","$N $vwonder if $t is bloated.","$N $vwonder if $t are bloated.",}),"STR":"$P0 $o bloats horribly.","":"$N $vbloat and $vswell like a balloon.",]),"mentos":(["LIV":"$N $vpop a Mentos into $p mouth, and $vgive $t a smiling thumbs up!","":"$N $vpop a Mentos into $p mouth, and $vgive a smiling thumbs up!",]),"jerky":(["LIV":"$N $vhit $T with a ratchet and $vshout \"Hey jerky! Open your fuck'n ears!\"",]),"pbr":(["":"$n $vsay, \"Heineken? Fuck that shit! Pabst Blue Ribbon!!\"",]),"wouldfather":(["LIV":"$N would have fathered $n1, but $p1 mother is dead.",]),"copyright":(["LIV":"$N $vaccuse $t of being copyrighted software.","":"$N $vare copyrighted software.",]),"crack2":(["":"$N $vsay, \"My uncle says that smoking crack is kinda cool\"",]),"whip":(["LIV":"Dressed in crotchless leather, $n $vcrack $p whip on $p1 exposed back.","":"You hear the sound of a whip snapping in the background.","LIV STR":"Dressed in $o, $n $vcrack $p whip on $p1 exposed back.",]),"attack":(["LIV":"With brutal force, $n $vattack $t.",]),"penis":(["":"$N $vgo, \"Penis.\"",]),"yah":(["":"$N $vgo, 'Oh yah?'",]),"night":(["LIV":"$N $vwave at $T and $vsay, \"Goodnight!\"",]),"dheh":(["":"$N $vgo, \"Double Heh.\"",]),"whim":(["LIV":"On a whim, $n $vbeat the living shit out of $t.",]),"dogbert":(["LIV":"$N $vwave $p wand at $t and $vgo, \"Out out!! You demons of stupidity!!\"","":"$N $vwave $p wand and $vgo, \"Out out!! You demons of stupidity!!\"",]),"handraise":(["LIV":"$Ts $v1raise $p1 hand.","":"$N $vraise $p hand.",]),"reconleg":(["":"$N $vhave reconnectleged.",]),"nodu":(["":"$N $vnod understandingly.",]),"smirkl":(["":"$N $vsmirkl (smirk, smirkle, and smirkleg exist, so why not?).",]),"ack":(["":"$N $vgo: ----/| \\ o,O| =(-)= ACK!!!!! U THPTH!!!!!!!",]),"kool":(["":"$N $vsay, \"That's kool and the gang.\"",]),"tooold":(["LIV":"$N $vinform $t that $n $vare not young enough to know everything.","":"$N $vgo, \"I'm too old for this s@#t!\"",]),"sal":(["":"$N $vsay, \"And San Diego Bob, if you're watching, stop hanging around Johnny's house, you're scarring his ma!\"",]),"paw":(["LIV":"$N $vpaw meekly at $t.",]),"groan":(["LIV":"$N $vgroan at $t.","STR":"$N $vgroan $o.","":"$N $vgroan.",]),"pat":(["LIV":"$N $vpat $t on the head.","":"$N $vpat $p head and $vrub $p tummy.","LIV STR":"$N $vpat $t on the $o.",]),"fplump":(["":"$N $vexclaim, \"I'm not fat! I'm festively plump!\"",]),"legleg":(["STR":"$N $vlegleg $o.","":"$N $vlegleg.",]),"nuzzle":(["LIV":"$N $vnuzzle $t warmly.",]),"recurse":(["":"$N $vrefer to the \"recurse2\" emote.",]),"sad":(["":"$N $vlook sad.",]),"ad&d":(["":"$N $vnote that $n should add AD&D combat rules to Lima so it will have complex combat rules, but annoying enough that most people will have to rewrite it in order to open their mud to players.",]),"pah":(["":"$N $vgo 'Pah!'",]),"ball":(["LIV":"$N $vnotice a ball and chain around $p1 ankle.",]),"gutter":(["LIV":"$N $vfind $p1 mind floating around in a gutter. $Ns $vgive it a solid kick!","":"$N $vadmit that $p mind is in the gutter.",]),"map":(["LIV STR":"$N $vmap $t through the '$o' function.",]),"afkgod":(["":".",]),"man":(["LIV":"$N $vsay, \"$t isn't much of a man, is he?\"","OBJ":"$N $vsay, \"$t isn't much of a man, is he?\"","STR":"Lib tells $n, \"We don't have a \"man\" command here, you UNIX weenie!\"","":"Lib coyingly tells $n, 'What do you want me to \"man\", big boy?'",]),"vlsfbog":(["":"$N $vgo, \"Very little super fucking bog!\" (see the naming schemeleg if confused)",]),"test2":(["":"$_$_$_TESTING$_$_$_A$_$_$_HUNCH$_$_$_...",]),"grenade":(["LIV":"$N $vlob a laughing-gas grenade at $t.","":"$N $vroll on the floor laughing due to a laughing-gas grenade misfire.",]),"test":(["LIV":"$N $vbop $t on the head and $vsay test THIS! test testing ","OBJ":"$N $vtest $p new emote on $o","STR":"$N $vtest $o","":"Gamedriver bops $N on the head and says test THIS! test testing ",]),"runover":(["LIV":"$N $vdrive $p tank right over $t! *SPLAT*!",]),"vlfschemeleg":(["":"$N $vboggle at the very little fucking naming schemeleg.",]),"jam":(["STR":"$N $vjam to \"$O\"","":"$N $vjam.",]),"offduty":(["":"$N $vpoint to the 'off duty' sign above $p head.",]),"4letter":(["":"$N $vnote that two of the original Lima mudlib writers chose 4 letter words as names, and $vwonder if this somehow explains the frequency with which such words occur in the souls.",]),"jag":(["":"$N $vsay, \"Just a Guess.\"",]),"abc":(["":"$N $vstand and $sing: A B C D E F G H I J K LMNOP Q R S T U V W X Y and Z Now I know my A B C Won't you come and play with me?",]),"gar":(["LIV":"$N $vgar at $t.","STR":"$N $vgar $o.","":"$N $vgar.",]),"sayto":(["LIV STR":({" $N $vsay to $t: $o."," $N $vsay to $t: $o."," -> $N $vsay to $t: $o. <--",}),]),"spock":(["LIV":"$N $vraise one eyebrow at $t.","LIV LIV":"$N $vraise one eyebrow at $t1, and $vraise the other at $t2.","":"$N $vraise one eyebrow.",]),"wtfu":(["LIV":"$N $vscream in $p1 face, \"WAKE THE FUCK UP!\"","":"$N $vscream, \"WAKE THE FUCK UP!!!\"",]),"soggy":(["":"$N $vlook around and $vsay, \"Damn, I HAVE A SOGGY WEENER!\"",]),"pancake":(["LIV":"$N $vflip a pancake on $p1 head.","":"$N $vflip a pancake into the air.","LIV STR":"$N $vflip a pancake on $p1 $o.",]),"razz":(["LIV":"$N $vgive $t the bronx cheer!",]),"getalife":(["LIV":"$N $vclone /std/life.c and $vgive it to $t. Somehow, $ts $v1were missing one.",]),"illin":(["LIV":"$N $vsay to $t, \"You be illin'!\"",]),"gag":(["LIV":"$N $vstuff an old sock into $p1 mouth to gag $t. $N1s $v1chew and $v1swallow with delight.","STR":"$N $vgag $o.","":"$N $vgag.",]),"zifnabrox":(["LIV":"$N $vare compelled to note that Zifnab rocks $t so much it hurts.","":"$N $vfind $r compelled to note how much Zifnab ROX!",]),"nozone":(["STR":"$N $vdeclare this to be a No-$O zone.",]),"repeat":(["":"$N $vsing, \"We must repeat!\"",]),"aav":(["LIV":"$N $vthink of $n1 as the Anal Avenger.","":"$N $vdisappear into a telephone both. After a few moments, $n $vemerge as the Anal Avenger!",]),"nod3":(["LIV":"$N $vnod at $t nod nod.","":"$N $vnod nod nod.",]),"nod2":(["":"$N $vnod. $N $vnod knowingly.",]),"slut":(["LIV":"$N $vgo, \"Shut up, $tp! Your mother's a slut!\"","STR":"$N $vgo, \"Shut up, $o! Your mother's a slut!\"",]),"king":(["LIV":"$N $vdeclare $t to be the King of Rock (there is none higher).","":"$N $vdeclare $r to be the King of Rock (there is none higher).",]),"gr2e":(["":"$N $vnote that that was a \"Great Random2 Emote [tm]\"",]),"spice":(["LIV":"$N $vwelcome the newest member of the Spice Girls' crew: $Ts Spice!","STR":"$N $vwelcome the newest member of the Spice Girls' crew: $o Spice!",]),"tshake":(["LIV":"$N $vshake $p1 tentacle.",]),"tease":(["LIV":"$N $vtease $t.","":"$N $vare -=SUCH=- a tease.",]),"idclip":(["":"$N $vtype, 'idclip'. \"No Clipping Mode On.\"",]),"lothar":(["LIV":"$N $vnote that $ts $v1do not walk with other men. $Ts $v1are $Tp, of the Hill People!","STR":"$N $vdo not walk with other men. $N $vare $O, of the Hill People!","":"$N $vdo not walk with other men. $N $vare Lothar, of the Hill People!",]),"lpcman":(["LIV":"$N $vbeg $t \"Please write a LPC Programming Manual, please....\" ","":"$N $vintone , \"I Need a Super Mega Fucking LPC Programming Guide !!!!!\"",]),"forgot":(["":"$N $vgo, \"Mm.. Heh heh, Oh yeah, I forgot.\"",]),"juggle":(["STR":"$N $vjuggle $o.","":"$N $vjuggle.",]),"ja3":(["":"$N $vsay something stupid and $vargue it to death.",]),"gurgle":(["STR":"$N $vgurgle $o.","":"$N $vgurgle.",]),"lips2":(["LIV":"$N $vsay to $tp, \"Your lips are like two sweet twizzlers coated with penis-butter.\"",]),"tciyf":(["":"THE COMPUTER IS YOUR FRIEND.",]),"pantsdown":(["LIV":"$N $vtell $t, \"Come out with your pants down!!\"","":"$N $vgo, \"Come out with your pants down!!\"",]),"zifnab":(["LIV":"$N1 $v1say: Morning.","":"Zifnab says: Morning.",]),"grumble":(["LIV":"$N $vgrumble at $t.","STR":"$N $vgrumble $o.","":"$N $vgrumble.","LIV STR":"$N $vgrumble at $t about $o.",]),"annoy":(["LIV":"$N $vannoy $t. What a pest!","":({"You annoying little twit. Why don't you get a life? ","$N $vare annoying. ",}),]),"idlefest":(["":"$N $vdeclare this mud is an IdleFest!",]),"black2":(["LIV":"$N $vtell $t, \"None, none more black.\"",]),"sniffline":(["":"$N $vsniff a line of coke.",]),"iqupgrade":(["LIV":"$N $vnote that $t $v1need to upgrade $p1 I.Q. a few points, and $vsuggest $tr $v1listen to more classical music.",]),"beekalone":(["LIV":"Beek sings to $t, \"I alone love you! I alone tempt you!\"",]),"gaffaw":(["STR":"$N $vgaffaw $o.","":"$N $vgaffaw.",]),"megabo":(["LIV":"$N $vsay to $n1, \"I don't see a 'z'! Do you see a 'z'? No 'z' here!\"","":"It's Megaboz, not Megabo!",]),"exploreui":(["LIV":"$N $vteach $t how the fine art of exploring UI.","":"$N $vnote that double clicking, shift & select, right clicking, and exploring menus are good ways of finding things in a UI.",]),"violin":(["":"$N $vplay the world's smallest violin.",]),"howl":(["STR":"$N $vhowl $o.","":"$N $vhowl.",]),"twoo":(["":"$N $vgo, \"Tiny woo.\"",]),"erection":(["":"$N $vsay, \"I'd like to say a few words about the presidential erection.\"",]),"alanis":(["":"$N $vwant to have that baby with Alanis.",]),"bigfart":(["":"$N $vshoot three feet upward, as a horrible stench wafts your way.",]),"tmiadmin":(["":"$N $vnote that being a TMI admin is like being the captain of the Titanic.",]),"petunia":(["":"$N $vfeel, for just a moment, like a pot of petunias, and $vthink \"Oh no, not again.\"",]),"wtdu":(["STR":"$N $vnote that $o is way too damn useful.",]),"groovy":(["":"$N $vgo, \"Groovy!\"",]),"thisisafuckingloongemote":(["":({"$n go: This is a ****** long emote.","$n goes: This is a ****** long emote.",}),]),"bait":(["":"$N $vwait with baited breath. A fish swims by.",]),"fmgwacs":(["":"$N $vsay, \"Fuck me gently with a chain saw!\"",]),"fluids":(["LIV":"$N $vwarn $t about $p1 precious bodily fluids.","":"$N $vsay something semi-coherent about preserving $p0 precious bodily fluids.",]),"whew":(["":"$N $vgo, \"Whew!\"",]),"wheel":(["LIV":"$N $vthink $t $v1like reinventing the wheel.",]),"whet":(["":"$N $vwhet a razorblade.",]),"dickhead":(["":"$N $vadmit to being a dickhead.",]),"mobydick2":(["":"$N $vwonder if the \"mobydick2\" emote should be mobydicked since it contains two rude words.",]),"fugly":(["LIV":"$N $vcall $t a \"Fugly, skanky ho!!\"","":"$N $vgrumble under $p breath, \"Fugly, skanky...\"",]),"mobydick1":(["":"$N really $vthink that given the quality of that last emote, we need to do a mobydick.",]),"when":(["":"Gamedriver tells $n, \"When? Real soon now, I hope.\"",]),"fireball":(["LIV":"$N $vcast a fireball at $t!",]),"milesdavis":(["":"$N $vexclaim, \"If peeing your pants is cool, consider me Miles Davis!\"",]),"linux9":(["":"$N $vtry to install Linux 2.1.23893 but Visual C++ keeps giving the strangest errors.",]),"linux8":(["":"$N $vgo, \"Linux: faster than a speeding window.\"",]),"swamp":(["":"$N $vgo, \"Swamp.\"",]),"yourmomsfat2":(["LIV":"$N $vtell $t, \"Your mom's so fat, her nickname is 'DAAAAMN!'\".",]),"linux7":(["":"$N $vgo, \"Linux: twelve distributions, twelve times the fun!\"",]),"fwhee":(["STR":"$N $vfwhee $o.","":"$N $vgo, \"Fucking whee.\"",]),"code":(["":"$N $vsay, \"If it were meant to be read, it wouldn't be called CODE.\"",]),"leia":(["":"$N $vsay \"You came in that thing? You're braver than I thought!\"",]),"linux6":(["":"kernel panic - linux6 emote halted",]),"linux5":(["":"$N $vgo, \"Linux - the operating system for people so unsuccessful they can't afford a $120 licence.\"",]),"ugly":(["LIV":"$N $vtell $t, \"Boy, you sure are ugly.\"","":"$N $vgo, \"Boy, you sure are ugly.\"",]),"linux4":(["":"Linux4 is an extended emote; please see the logical emotes linux5-12.",]),"linux3":(["":"$N $vgo, \"Linux, the OS for people with IQs higher than 95.\"",]),"beekson":(["":"$N $vwonder, \"Beek's on at this time? What drugs is that boy on now?\"",]),"apologise":(["LIV":"$N $vapologise to $n1.",]),"linux2":(["":"$N goes: Linux, the OS for people who have a fucking clue.",]),"groove":(["":"$N $vgroove to the smooth tunes.",]),"whee":(["LIV":"$N $vgo, 'WHEE', and $vtwirl around $t.","STR":"$N $vgo, 'WHEE', and $vtwirl around $o.","":"$N $vgo, 'WHEE!'",]),"weep":(["STR":"$N $vweep $o.","":"$N $vweep.",]),"wooleg":(["":"$N $vwooleg!",]),"blargh":(["":"$N $vblargh.",]),"smile":(["LIV":"$N $vsmile at $t.","LIV LIV":"$N $vsmile at $t and $t2.","at LIV STR":"=LIV STR","at LIV":"=LIV","STR at LIV":"$N $vsmile $o at $t.","STR":"$N $vsmile $o.","":"$N $vsmile.","STR LIV":"$N $vsmile $o at $t.","LIV STR":"$N $vsmile at $t $o.",]),"dead":(["LIV WRD":"$N1 $v1have gone $o-dead.","":"$N $vsay, \"And I say, I'm dead... and I MOVE.\"",]),"sister2":(["STR":"$N $vsay: $O tells you: Could you send me pictures? Or is she yours already?",]),"wrapleg":(["LIV":"$N $vwrap $p leg around $t very sensually.",]),"vlbog":(["":"$N $vgo, \"Very Little Bog.\"",]),"crown":(["LIV":"$N $vcrown $p0 last checker and $vkick $p1 ass.",]),"ultrabog":(["":"$N $vgo, \"Ultra-Bog!\" (For those who can.)",]),"sure":(["LIV":"$N $vtell $t, \"SUUUUUUUUUURE....\"","":"$N $vgo, \"SUUUUUUUURE....\"",]),"lngt":(["LIV":"$N $vturn to $t and $vsay, \"Let's not go there.\"","":"$N $vsay, \"Let's not go there.\"",]),"smoke":(["LIV":"$N $voffer $t a smoke.","STR":"$N $vsmoke $o.","":"$N $vlight up a smoke.",]),"scottish":(["LIV":"$N $vdeclare $t to be, \"not Scottish.\"","STR":"$N $vsay, \"$O is definitely not Scottish.\"","":"$N $vexclaim, \"If it's not Scottish, it's CRAP!\"",]),"rtuit":(["LIV":"$N $vgive $t a Round TUIT.","":"$N $vget a Round TUIT.",]),"crotches":(["":"$N $vgo, \"Women have crotches? I'll be damned.\"",]),"poland1938":(["":"$N $vnote, \"I haven't seen a jew run like that since Poland, 1938!\"",]),"whack2":(["LIV":"$N $vwhack $t.",]),"linux12":(["":"$N $vnote that Linux renders ships, while NT renders ships useless.",]),"linux11":(["":"$N $vgo, \"Linux: Okay if you just want to use it for a web server, a file server, a print server, a router, a firewall, a database server, a DNS server, a mailserver, a news server or something of _that_ kind.\"",]),"linux10":(["":"$N $vgo, \"Linux: At least it has Java support. That's _something_.\"",]),"nudeph":(["LIV":"$Vare $n1 challenging $p0 constitutional right to make nude phone calls?",]),"byep":(["":"$N $vwave to you and $vsay, \"Goodbye!\"",]),"socool":(["":({"You are SOOOOOOOO.....k00l!","$N thinks $n is so....cool, but $n is so....WRONG!",}),]),"worms":(["":"$N $vopen another can of worms and $voffer them around.",]),"artmuseum":(["":"$N $vrun up the steps of the Philadelphia Art Museum and $vjump up and down, looking like a complete moron.",]),"lisp2":(["":"$N $vnote that a Lambda-mu Driver running LPLisp would rule!!!",]),"womble":(["LIV":"$N $vwomble at $t.","STR":"$N $vwomble $o.","":"$N $vwomble.",]),"gaze":(["LIV":"$N $vgaze lovingly into $p1 eyes.","":"$N $vgaze at the blue sky above.",]),"cool24":(["":"$N $vgo, \"When you's cool, you's cool twenty-four hours a day!\"",]),"award":(["LIV":"$N $vgive $t the \"Award for Least Amount of Coding.\"",]),"bitchsqueal":(["LIV":"$N $vmake $t squeal like a bitch.",]),"mcfly":(["LIV":"$N $vtap $t on the head and $vyell, \"Hello?! McFly?! Anyone Home?!\" ",]),"darkstaff":(["":"$N wants to be like darkstaff and order omaha steaks from onsale right now, damnit.",]),"toomanysouls":(["":"$N $vsay: According to the soul_d, we have too many bloody souls.",]),"abuse":(["LIV":"$N $vabuse $t horribly, and $vknow it's deserved.",]),"psychobilly":(["":"$N $vscreech, \"It's a PSYCHOBILLY FREAK-OUT!\"",]),"sfboogle":(["":"$N super fucking $vboogle at the super fucking concept!",]),"retort":(["":"$N $vsay, \"Well, allow me to retort!\"",]),"cornholio":(["":"$N $vgo, \"I AM CORNHOLIO!\"",]),"assfuck":(["LIV":"$N $vbet $n1 $v1are the kind of person that would fuck someone in the ass and not even have the god damned common courtesy to give him a reach around.",]),"crap":(["LIV":"$N $vtake a big ol' crap on $t!","STR":"$N $vcrap $o.","":"$N $vcrap.",]),"7up2":(["":"$N $vgo, \"Heads up, 7up.\"",]),"knuth":(["":"$N $vsay: \"I think that Deathblade would be able to answer.\" ... This, of course, is the Lima version of \"I think you can find that in Knuth.\"",]),"would":(["":"$N would if $n could, you son of a bitch!",]),"tinkle":(["LIV":"$N $vtinkle on $t.","":"$N $vgo, \"Tinkle, tinkle, tinkle!\"",]),"4am":(["":"$N $vnote that it is after 4am, when most of the most puerile emotes (well, at least most of the emotes) were added.",]),"jane":(["LIV":"$N $vsay, \"$tp, you ignorant slut!\"","":"$N $vsay, \"Jane, you ignorant slut!\"",]),"boggle1":(["":"$N $vbug $p eyes out, just like the time $n discovered $n'd made a 100 error, not in $p favor, at rent time!",]),"encore":(["LIV":"$N $vshout \"Encore, Encore!\" and $vclap $t on the back.","":"$N $vshout \"Encore, Encore!\"",]),"sewage":(["":"$N $vsay, \"Sewage doesn't come out of the ground. It comes out of your butt, buttmunch!\"",]),"suckle":([]),"claw":(["":"$N $vgo, \"THE CLAAAW!\"... \"The claw is our master!\"",]),"world":(["":"The world revolves around $n.",]),"rockon":(["LIV":"$N $vscream, \"$tp, ROCK ON!!!\"","":"$N $vscream, \"ROCK ON!!!\"",]),"nogleg":(["LIV":"$N $vdo a backwards behind the ear nogleg at $t.","STR":"$N $vdo a backwards behind the ear nogleg $o.","":"$N $vdo a backwards behind the ear nogleg.",]),"h7a":(["":"$N $vnote that Heaven 7 is at 3.0 alpha, and is *still* a piece of crap...",]),"clap":(["LIV":"$N $vclap for $t.","STR":"$N $vshout: WHOOP!! ( $o )","":"$N $vclap.",]),"bye3":(["":"$N $vsay, \"Don't let the disconnect screen hit your ass on the way off!!\"",]),"idlein":(["":"$N $vstate 'You have to be idle, to be in'.",]),"blahleg":(["LIV":"$N $vblahleg at $t","":"$N $vblahleg",]),"tmisucks":(["":"$N $vthink that TMI is an accronysm for Too Many Idiots.",]),"ciao":(["":"$N $vclaim \"I didn't do it! it's not my fault! I didn't _mean_ to crash the mud!!!!",]),"okleg":(["":"$N $vokleg!",]),"becool2":(["LIV":"$N $vsay to $t, \"Tell that bitch to be cool!\"",]),"leer":(["LIV":"$N $vleer at $t.",]),"hurt":(["LIV":"$N $vscream at $t, \"Ow! That hurts, you buttlicker!\"",]),"fwhap":(["LIV":"$N fucking $vwhap $t!",]),"what":(["STR":"$N $vgo, \"What $o?\"","":"Gamedriver $vtell $n, \"I don't know what's going on. Nobody talks to me anymore.\"",]),"pigfucker":(["LIV":"$N $vsay, \"Don't say pigfucker in front of $tp!\"","":"$N $vsay, \"Don't say pigfucker in front of Jesus!\"",]),"win95":(["LIV":"$N $vthink $n1 $v1are as reliable as an alpha copy of Win95.","STR":"$N $vthink $o is as reliable as a alpha copy of Win95.","":"$N $vsay, \"Windows 95 < MacOS '87!\"",]),"ten4":(["":"$N $vgo, \"10-4, good buddy!\"",]),"hiss":(["LIV":"$N $vhiss at $t.","STR":"$N $vhiss $o.","":"$N $vhiss.",]),"cackle":(["LIV":"$N $vthrow $p head back and $vcackle with glee at $t.","STR":"$N $vthrow $p head back and $vcackle $o!","":"$N $vthrow $p head back and $vcackle with glee!",]),"lamer":(["LIV":"$N $vdeclare $t to be a total lamer.","":"$N $vare such a lamer!",]),"whap":(["LIV":"$N $vwhap $t.","LIV with OBJ":"$N $vwhap $t with $p $o.","STR":"$N $vwhap $p $o.","LIV STR":"$N $vwhap $t $o.",]),"notidle":(["LIV":"$N $vdecide that $ts $v1are not idle, so $n calmly $vinform $t that $ts $v1need to go get a snack.",]),"glips":(["":"$N $vsay, \"Sure, God's all powerful, but does he have lips?\"",]),"crush":(["LIV":"$N $vcrush $t.",]),"wlove":(["LIV":"$N $vwhisper to $t sweet words of love.",]),"wonder":(["LIV":"$N $vwonder about $p1 sanity.","STR":"$N $vwonder $o.","":"$N $vwonder.","LIV STR":"$N $vwonder about $p1 $o.",]),"cross":(["LIV":"$N $vcross $p1 fingers.","":"$N $vcross $p fingers.",]),"gawk":(["LIV":"$N $vgawk at $t.",]),"boring":(["LIV":"$N $vaccuse $t of being boring.","":"$N $vgo 'Boooorrrinnngggg!!!!!'",]),"egrin":(["OBJ":"$N $vgrin evilly",]),"deftarget":(["LIV":"$N $vsuggest that all emotes be targetted at $t by default.","":"$N $vsuggest that all emotes be targetted at $t10 by default.",]),"sniffle":(["LIV":"$N $vsniffle at $t.","at LIV":"$N $vsniffle at $t.","STR":"$N $vsniffle $o.","":"$N $vsniffle.",]),"wobble":(["LIV":"$N $vwobble $t until $ts $v1fall over.","STR":"$N $vwobble $o.","":"$N $vwobble.",]),"alarm":(["STR":"$N $vturn on the alarm. \"AROOGA! AROOGA! $O! $O! AROOGA! AROOGA!\"",]),"rumble":(["LIV LIV":"$N $vpunch $t, but then $vduck out of the way. $N1 $v1try to hit $t10, but $v1miss, hitting $t12 square in the face. $N2 $v2are caught off guard, and $v2are sent sprawling!",]),"buttspeak":(["":"$N $vexclaim, \"My bunghole will speak now!\"",]),"admit":(["STR":"$N $vadmit that it was, in fact, $n who added the $o emote.",]),"crism":(["LIV":"$n $vgo, \"%^RED%^Muhahahahahaaaaaa!!!!!%^RESET%^\" at $t.","":"$n $vgo, \"%^RED%^Muhahahahahaaaaaa!!!!!%^RESET%^\"",]),"ibog":(["LIV":"$N $vbog at $p1 ignorance.",]),"guess":(["STR":"Somebody in the audience yells out '$1'",]),"thbeek":(["LIV":"$N $vmake funny hip thbeeking motions at $t.","":"$N $vmake funny hip thbeeking motions.",]),"twit":(["LIV":"$N $vnominate $t for \"Twit of the Year.\"",]),"simul":(["LIV":"$N $vaccuse $t of having a simul fixation.",]),"feature":(["LIV":"$N $vinform $t that that isn't a bug, it's a feature.","":"$N $vpoint out that that is not a bug, it's a feature.",]),"stumble":(["":"$N $vstumble.",]),"fatass":(["LIV":"$N saw $t on Geraldo: \"$tp: Fat ass\"",]),"meister":(["LIV":"$N $vsay: Listen to the $T Meister(tm)!",]),"docsearch":(["STR":"$N $vsearch for documentation.",]),"buttplug":(["LIV":"$N $voffer a buttplug to $t.","":"$N $vreinsert $p buttplug.",]),"bitchslap":(["LIV":"$N $vbitchslap $t!",]),"sink":(["":"$N $veval the kitchen_sink() func, which returns 1.",]),"picard":(["LIV":"$N $vcommand $t, \"Make it so.\"","":"$N $vcommand, \"Make it so.\"",]),"dkiss":(["LIV":"$N $vpull $t close and $vkiss $t for what seems an eternity, deeply and passionately.",]),"sing":(["STR":"$N $vsing, '$o'","":"$N $vsing a Neil Young song.",]),"grinleg":(["LIV":"$N $vgrinleg at $t.","":"$N $vgrinleg.",]),"2infinity":(["":"$N $vextend $p arms and $vshout, \"To infinity, and beyond!\"",]),"idleleg":(["STR":"$N $vidleleg $o.","":"$N $vidleleg.",]),"back":(["":"$N $vmumble, \"There ain't no comin' back... there ain't no comin' back...\"",]),"applaud":(["LIV":"$N $vapplaud $t.","":"$N $vapplaud.","LIV STR":"$N $vapplaud $t $o.",]),"infinite":(["":"$N $vgo, \"Infinite or bust!\"",]),"tickle":(["LIV":"$N $vtickle $t.","":({"You love to be tickled, don't you! Muhahahaha!! ","$N loves to be tickled...why don't you oblige $no? ",}),"LIV STR":"$N $vtickle $t $o.",]),"puddin":(["":"$N $vgo, \"You may ask yourself, where did they get the money for 236 dollars worth of puddin? Shhhhhhh!!! Don't you worry your pretty little head!\"",]),"opium":(["LIV":"$N $vopium $t.","":"$N $vdecide, \"You know what we need? We need some opium!\"",]),"wiggle2":(["LIV":"$N $vwiggle $p1 bottom.",]),"midrow":(["":"$N $vsay: \"Sit in the middle and get the best of both worlds!\"",]),"aboot":(["LIV":"$N $vgive $t a boot to the ass!",]),"upgrade":(["LIV":"$N $vshout at $t, \"Upgrade or DIE!\"","":"$N $vshout, \"Upgrade or DIE!\"",]),"stare":(["LIV":"$N $vstare at $t.","OBJ":"$N $vstare at $o.","STR at LIV":"=STR LIV","STR":"$N $vstare $o.","":"$N $vstare.","STR LIV":"$N $vstare $o at $t.",]),"goodisdumb":(["":"$N $vstate, \"Evil will always triumph over good, because good is dumb!\"",]),"phthph":(["":"$N $vgo phthph!",]),"sulk":(["LIV":"$N $vsit in the corner and $vsulk, glaring up at $t every now and then.","STR":"$N $vsulk $o.","":"$N $vsulk.",]),"threaded":(["":"$N $vgasp when $n $vnotice that $n $vare multi-threaded!",]),"baby":(["":"$N $vgo, \"Yeah, baby!\"",]),"toetape":(["LIV":"$N $vtape $p1 toe to $p1 nose.","LIV LIV STR":"$N $vtape $p1 toe to $p2 $o.","LIV LIV":"$N $vtape $p1 toe to $p2 nose.","LIV WRD LIV WRD":"$N $vtape $p1 $o to $p2 $o1.","STR":"$N $vtape $p toe to $p $o.","":"$N $vtape $p toe to $p nose.","LIV STR":"$N $vtape $p1 toe to $p1 $o.",]),"shrugleg":(["LIV":"$N $vshrugleg at $t.","STR":"$N $vshrugleg $o.","":"$N $vshrugleg.",]),"humpty":(["":"$P0 name is Humpty, pronounced with an 'umpty'.",]),"nogpenis":(["":"$N $vnog a little penis.",]),"h3h":(["":"$N $vgo, \"h3h.\"",]),"attention":(["":"$N $vwhimper, \"I just want attention...\".",]),"cletus":(["LIV":"$N $vsing, \"Some folk'll never lost a thumb and then, some folk'll. Like $tp the slack-jawed yokel.\"","":"$N $vexclaim, \"I'm Cletus the slack-jawed yokel!\"",]),"caper":(["":"$N $vcaper about the room.",]),"windows":(["STR":".","":"$N $vexclaim, \"I don't do Windows!\"",]),"bogbert":(["":"$N $vwave $p wand and go, \"Bog Bog!! You demons of stupidity!!\"",]),"smirkpenis":(["STR":"$N $vsmirkpenis $o.","":"$N $vsmirkpenis.",]),"n2o":(["":"When $N $vare offered drugs, $n just $vsay, \"N2O!\"",]),"whimper":(["LIV":"$N $vwhimper at $t.","STR":"$N $vwhimper $o.","":"$N $vwhimper.",]),"bigfatfuck":(["LIV":" $N $vsay to $t, \"You're such a fat fuck, $tp, when you walk down the street, people go, 'God DAMNIT! That kid is a BIG FAT FUCK!'\"","STR":"$N $vsay to $O, \"You're such a fat fuck, $O, when you walk down the street, people go, 'God DAMNIT! That kid is a BIG FAT FUCK!'\"",]),"snickerdoodle":(["LIV":"$N $vsnickerdoodle at $T.","STR":"$N $vsnickerdoodle $o.","":"$N $vsnickerdoodle.",]),"mudos":(["":"Gamedriver $vask $n, \"What? WHAT?!\"",]),"chokeit":(["LIV":"$N $vtell $t, \"Choke your own chicken, dude! What's wrong with you?\"",]),"needsex":(["LIV":"$T $v1need sex badly. $Ts $v1are about to die!",]),"braindead":(["LIV":"%^CHANNEL%^[announce]%^RESET%^ $Ts $v1have gone brain-dead.",]),"aber":(["":"$N $vnote that abers are Funnnnn.",]),"camel":(["":"$N $vpet $p pet-camel. You feel a tear in the corner of your eye.",]),"hoom":(["":"$N $vdo $p best GK Chesterton/Gidion Fell/Gilbert (Fiddler's Green) impression, and $vHOOM mightily.",]),"jackets":(["":"The guys in white jackets come and take $n away.",]),"netbsd":(["":"$N $vnote that the rumors of NetBSD's difficulty of installation are highly exaggerated.",]),"h2o":(["":"Now that is what $n $vcall high quality H2O!",]),"rtfdl":(["LIV":"$N $vtell $t, \"RTFDL, bonehead.\"","":"$N $vscream, \"RTFDL!\"",]),"grandeur":(["":"$N $vbegin to get delusions of Grandeur.",]),"codemachine":(["LIV":"$N $vnote how $t $v1are a code-pounding machine!","":"$N $vare a code-pounding machine!",]),"kids":(["":"$N $vexclaim, \"And it would have worked, too, if it weren't for those dastardly kids!\"",]),"monologue":(["":"$N $vlaunch into a long, boring monologue until someone does or says something.","LIV STR":"$N $vlaunch into a long, boring monologue on the topic of $o and $vrefuse to stop till $t $v1say something.",]),"advdnd":(["":"$N $vnote that $n should add AD&D combat rules to Lima so it will have something complex, but annoying enogh that most people will hate enough to make them rewrite a good chunk of it anyway. Fumble rules will be sufficiently annoying and tough to take out $n $vthink.",]),"measure":(["LIV":"$N $vmeasure $p1 thickness.","":"$N $vmeasure $p1 thickness.","LIV STR":"$N $vmeasure $p1 $o.",]),"rape":(["":"$N $vholler, \"RAPE! RAPE!\"",]),"0cool":(["":"$N $vwish $n were Zero Cool...",]),"gasp":(["LIV":"$N $vgasp at $t.","STR":"$N $vgasp $o.","":"$N $vgasp.","LIV STR":"$N $vgasp at $t $o.",]),"dance2":(["LIV":"$N $vsweep $t across the dance floor.","":"$N $vsweep $r across the dance floor.",]),"hello":(["LIV LIV":"$N $vsay to $n1, \"Oh? So THAT'S how it is, IS IT? Say hello to $n2p but not to me?? Bastard.\"",]),"fragile":(["LIV":"$N $vmark $t, \"Extremly fragile, handle with care.\"",]),"congrat":(["LIV":"$N $vcongratulate $t.",]),"rtfcl":(["":"$N $vgo, \"Read The Fucking ChangeLog\"",]),"hump":(["LIV":"$N $vhump $p1 leg furiously.","OBJ":"$N $vhump $o's leg furiously.",]),"pout":(["LIV":"$N $vpout at $t.","STR":"$N $vpout $o.","":"$N $vpout.",]),"forget":(["LIV":"$N $vforget about $t.","STR":"$N $vforget $o.","":"$N $vforget.","LIV STR":"$N $vforget about $t $o.",]),"fkick":(["LIV":"$N fucking $vkick $t.",]),"molest":(["LIV":"$N $vmolest $t. It brings back shocking images of Tigran molesting his baby boy.",]),"biggot":(["":"$N $vdo not look down on niggers, kikes, wops, or greasers. They are all equally worthless in $p eyes.",]),"cracker":(["":"$N $vscream \"A cracker is not a hacker (d00d)\"",]),"kick":(["LIV":"$N $vkick at $t.","LIV LIV":"$N $vjump up in the air and $vkick $n1 and $n2 simultaneously.","OBJ":"$N $vkick at $o.","STR":"$N $vkick $o.","":"$N $vkick.","LIV STR":"$N $vkick $t $o.",]),"suit":(["LIV":"$N $vdon $p asbestos suit in preparation for $p1 assault.","":"$N $vdon $p asbestos suit in preparation for Beek's assault.",]),"shakes":(["":"At the height of withdrawal, $N $vstart to get the shakes.",]),"sneeze":(["LIV":"$N $vsneeze all over $t.","STR":"$N $vsneeze $o.","":"$N $vsneeze.",]),"movealong":(["LIV":"$N $vmotion to $t, \"Move along.\"",]),"wishbone":(["LIV LIV":"$N and $n1 both grab one of $p2 legs and $vpull till you hear a sickening *SNAP!* (Wishbone Baby!!)",]),"crono":(["":"Crono needs the win95 driver",]),"babble":(["LIV":"$N babble at $t spraying $t with drool.","":"$N $vbabble like an idiot.","LIV STR":"$N $vcommence a long, boring monologue on the subject of $o, and $refuse to stop till $T $v1say something.",]),"ruffles":(["":"$N $vsay, \"r-r-rrruffles have r-r-rrridges!\"",]),"chodaboy":(["LIV":"$N declares, \"I am Orgazmo. $T $v1are my side-kick, Choda Boy!\"",]),"w00":(["":"$N $vgo, \"W00 W00!\"",]),"happyfunball":(["LIV":"$N $vcall upon the MUD gods to destroy $t for taunting HappyFunBall(tm).","":"$N $vshout, \"Do not taunt HappyFunBall(tm)!\"",]),"bonecrush":(["LIV":"$N $vhit $t with a bonecrushing sound!",]),"shebitch":(["LIV":"$N $vmumble to $t: Yo, she-bitch... come get some.","":"$N $vmumble: Yo, she-bitch... come get some.",]),"hell8":(["":"$N $vwonder if the sequel to Heaven 7 will be named Hell 8.",]),"spooky":(["":"$N $vgo, \"Damn, that's spooky!\"",]),"feud":(["":"$N $vshout, \"SURVEY SAYS!\" BZZZZZZZZZZZZZZZZZZT....",]),"extol":(["STR":"$N $v extol the virtues of $o.",]),"slimemold":(["":"$N $vsay, \"It wasn't an accident, it was an attack!\"",]),"addict":(["LIV":"$N $vare addicted to $t.",]),"torture":(["LIV":"$N $vtorture $t.",]),"nodpenis":(["":"$N $vnodpenis.",]),"slogan":(["":"$N $vnote that the official Lima slogan is, \"It isn't bad, but it isn't doc'd\".",]),"netscape":(["":"$N $vtry to start Netscape, the king of newsreaders (*cough* *cough* *cough*), but $vfail.",]),"pity":(["LIV":"$N $vthrow $t a pity party. 'Awwwwwwwww...'","OBJ":"$N $vtake extreme pity on the $o.",]),"sausage":(["LIV":"$N $vgive $t a sausage.",]),"towel":(["LIV":"$N $vnote that $ts $v1aren't the sort of person who knows where $p1 towel is.","LIV LIV":"$N $vnote that $ts $v1are the sort of person who knows where $p2 towel is.",]),"software":(["LIV":"$N $vsay to $t, \"Nice software!\"",]),"reddragon":(["":"$N $vwait patiently for Red Dragon to go up again.",]),"hold":(["LIV":"$N $vhold $t tightly, never wanting to let go.",]),"thousandemotes":(["":"Not only $vdo $n know over a thousand emotes, $n can even use them in conversation!",]),"woody":(["":"$N $vhave been sportin' wood since the bicentennial.",]),"throttle":(["LIV":"$N $vthrottle $t!",]),"happyg":(["LIV":"$N $vyell at $t, \"The Price is WRONG, bitch!\"","":"$N $vyell, \"The Price is WRONG, bitch!\"",]),"fyi":(["STR":"$N $vgo \"for your information: $o\"","":"$N $vgo \"For your information:\"",]),"cluebus":(["LIV":"$N $vgo, \"$T, here's a token; take a ride on the Clue Bus!\"",]),"rodneyking":(["":"$N $vnote, \"I haven't seen a beating like that since Rodney King!\"",]),"sfshrugleg":(["":"$N $vgo, \"Super fucking shrugleg!\"",]),"asleep":(["LIV":"$N $vrealize that $t $v1are not just idle, but $v1are really fast asleep at $p1 keyboard.",]),"win2001":(["":"$N $vgo, \"Windows 2001: A Blue Screen Odyssey.\"",]),"leglegleg":(["LIV LIV":"$N $vleg at $t1 and $t2",]),"shake2":(["LIV":"$N $vshake $t vigorously back and forth.",]),"antispam":(["STR":"$O: Take note. You are spamming. Spamming is the repetition of the same phraase. This has been an automatic anti-net abuse feature provided by those turing hackers @Lima Bean.",]),"ditto":(["LIV":"$N $vditto what $ts said.","":"$N $vditto.",]),"cleveland":(["":"$N $vshout, \"HELLO, CLEVELAND!\"",]),"theh":(["":"$N $vgo, \"Triple Heh.\"",]),"pose":(["STR":"$N $vpose $o.","":"$N $vpose.",]),"purr":(["LIV":"$N $vcrawl up into $p1 lap and $vpurr like a cat.","STR":"$N $vpurr $o.","":"$N $vpurr.",]),"macaccel":(["":"$N $vnote the best way to accelerate a Macintrash is 9.8 m/sec^2.",]),"cya":(["LIV":"$N $vgo to $t, \"See ya... Wouldn't want to be ya!\"","":"$N $vsay, \"See ya... Wouldn't want to be ya!\"",]),"tricorder":(["":"$N $vwhip out $p tricorder, but $vare disappointed to find no signs of intelligent life in the area.",]),"testemoteblah":(["LIV LIV":"$N $vraise one eyebrow at $t1, and $vraise the other at $t2.",]),"crime":(["LIV":"$N $vgo, \"$p1 so bad, it's a crime.\"","":"$N $vgo, \"I'm so bad, it's a crime.\"",]),"piss":(["LIV":"$N $vpiss on $p1 leg.","OBJ":"$N $vpiss on the $o.","":"$N $vpiss on $r.",]),"boomstick":(["":"As if this were \"Army of Darkness\", $n $vstate, \"Yeah. Alright you primitive screwheads, listen up. See this? THIS... is my *BOOM*STICK.\"",]),"fontfix":(["":"$N just $vreport bugs, $vdo not fix them.",]),"twitch":(["":"$N $vtwitch briefly.",]),"lfagreeleg":(["":"$N $vgo, \"Little fucking agreeleg.\"",]),"oggle":(["LIV":"$N $voggle at $p1 body.","":"$N $voggle at the concept. Shapely!",]),"mudsex":(["STR":"$N $vsay: Get a load of this: $O tells you: where's the gratuitous sex and violence?",]),"meritbadge":(["STR":"$N $vare still working on $p merit badge in '$o'.","LIV STR":"$N $vsuggest $ts $v1spend more time working on $p1 merit badge in '$o'.",]),"amiga":(["":"$N $vcelebrate the rebirth of the Amiga.",]),"pork":(["LIV":"$N $vgo: $t, the other white meat!",]),"lwi":(["LIV":"$N $vinform $t, \"Live With It.\"","":"$N $vintone, \"Live With It.\"",]),"emotemachine":(["LIV":"$N $vnotice that $ts $v1are an emote-adding machine!","":"$N $vare an emote-adding machine!",]),"badlag":(["":"$N $vexclaim, \"Holy mother of lag, batman!\"",]),"pore":(["":"$N $vsay, \"Pore.\" WTF?",]),"tkiss":(["LIV":"$N $vkiss $t tenderly on the lips.",]),"becool":(["LIV":"$N $vtell $t, \"Bitch, be cool!\"","STR":"$N $vtell $O, \"Bitch, be cool!\"","":"$N $vgo, \"That would be cool! Huh-huh.\"",]),"quote":(["WRD STR":"$N $vquote $O: \"$O1\"","STR":"$N $vquote, \"$O\"",]),"fagreeleg":(["LIV":"$N fucking $vagreeleg with $t.","":"$N fucking $vagreeleg.",]),"subjective":(["":"$N $vmutter something about people who don't understand subjective case.",]),"qwerty":(["":"$N $vare too lazy to type all of \"qwertyuiop\".",]),"245":(["":"$N $vrelate the interesting fact that the LIMA soul takes up more disk space than the 2.4.5 mudlib.",]),"xpoke":(["LIV":"$N $vpoke $t in the tummy with force!",]),"sign":(["STR":"$N $vhold up a sign, reading \"$o.\"","":"$N $vhold up a sign, reading \"This space intentionally left blank.\"",]),"grimace":(["LIV":"$N $vgrimace at the very thought of life with $t.","STR":"$N $vgrimace $o.","":"$N $vgrimace.",]),"diku2":(["":"$N $vexpound on the incredible lameness of Dikus.",]),"sigh":(["LIV":"$N $vlook at $t and $vsigh.","STR":"$N $vsigh $o.","":"$N $vsigh.",]),"junkie":(["":"$N $vare a chrome junkie.",]),"assume":(["":"$N $vmake that lame ASS-U-ME joke. You wish $n would just fall dead.",]),"signs":(["":"$N $vshake $p magic eight ball, and $vcome up with \"Signs Point To No.\"",]),"scamper":(["LIV":"$N $vscamper about, taunting $t.","":"$N $vscamper about.",]),"dressup":(["LIV":"If $n were dressed in clothes like $p1, $n would have to kick $p0 own ass.",]),"freeload":(["":"$N $vfreeload shamelessly.",]),"smirkleg":(["LIV":"$N $vsmirkleg at $t.","STR":"$N $vsmirkleg $o.","":"$N $vsmirkleg.",]),"wornout":(["":"$N $vare as worn out as a cucumber in a convent.",]),"spock2":(["":"$N $vraise the other eyebrow.",]),"gigleg":(["LIV":"$N $vgigleg at $t.","STR":"$N $vgigleg $o.","":"$N $vgigleg.",]),"ow3":(["LIV":"$N $vtry to replace $p1 window manager with OpenWindows","STR":"$N $vtry to start up OpenWindows on a $o.","":"$N $vtry to start up OpenWindows, on a 'dumb terminal' ???.","LIV STR":"$N $vtry to start up OpenWindows on $p1 $o.",]),"elite":(["LIV":"$N $vsay, \"d00D, $tp, U R 3133+3!\"","STR":"$N $vsay, \"d00D, $o, U R 3133+3!\"","":"$N $vsay, \"d00D 3y3'|\\/| 3133+3!\"",]),"special":(["":"$N $vgo, \"Well, isn't that special?\"",]),"pocketkiss":(["LIV":"$N $vsneak $p0 hands into $p1 back pockets and $vdraw $t close for a long, passionate kiss.",]),"freewoman":(["LIV":"$N $vadvise $t to enjoy the moment. $T got a date with a beautiful woman without paying for it.",]),"jack":(["":"$N $vgo, \"I *AM* the PUMPKIN KING!!!\"",]),"september":(["":"$N $vnote that September 1 comes twelve times a year since AOL came online.",]),"rsia":(["LIV":"$N $vask $t if $p1 release schedule is affected.",]),"slack":(["":"$N $vare Slack Slack Slack Slack, and $n $vdon't give a fuck.",]),"overhead":(["LIV":"$N $vwatch $p joke sail over $p1 head.","":"$N $vwatch $p joke sail over the head of $p audience.",]),"snowball":(["LIV":"$N $vpelt $t with a snowball! *SPLAT*",]),"eotd":(["STR":"$N $vvote for '$o' as the Emote of the Day [tm].","":"$N $vvote fot that as the Emote of the Day [tm].",]),"rub":(["LIV":"$N $vrub $p1 anus.","STR":"$N $vrub $o.","":"$N $vrub $p tummy.",]),"smokin":(["":"$N $vsay, \"SSSSSMMMMOKIN'!!\"",]),"math2":(["":"$N $vnote, \"There isn't its just addition in base 2.\"",]),"plick":(["LIV":({"$N $vgive $t a passionate licking. $N $vfeel like $n could $vdo this forever.","$N $vgive $t a passionate licking.","$N $vgive $t a passionate licking. $T $v1wish it would go on forever.",}),]),"nodleg":(["LIV":"$N $vnodleg at $t.","STR":"$N $vnodleg $o.","":"$N $vnodleg.",]),"tripon":(["LIV":"$N $vtrip on $n.",]),"weepsilent":(["STR":"$N $vcrawl into the corner and $vweep silently, muttering '$o.... $o...' over and over under $p breath.","":"$N $vcrawl into the corner and $vweep silently, muttering 'rape.... rape...' over and over under $p breath.",]),"elisp":(["":"$N $vsays: Elisp, the macro language from hell.",]),"next":(["":"$N $vshout, \"NEXT!\"",]),"noblowemote":(["":"$N $vnote while the soul is quite racy in places, at least there is no 'blow LIV' emote.",]),"babble2":(["":"$N $vbabble incoherently about macarel and rainclouds.",]),"3000":(["":"$N $vsay, \"3000 or bust!\"",]),"destone":(["WRD WRD":"$N $vsing, \"$O users logged into the MUD, $o users logged in! Dest the most idle, kicking him off, $o1 users logged in!\"",]),"gdmf":(["LIV":"$N $vscream in $p1 face, \"YOU STUPID DUMB-SHIT GOD-DAMN MOTHERFUCKER!!\"","":"$N $vscream, \"YOU STUPID DUMB-SHIT GOD-DAMN MOTHERFUCKER!\"",]),"huzzah":(["":"$N $vgo HUZZAH! (which is Bumpkin's word, he says)",]),"ultima":(["LIV":"$N $vsay to $o, \"Thou hast lost an eighth.\"","":"$N hast lost an eighth.",]),"blackheli":(["":"$N $vare abducted by the men in the black helicopters.",]),"mudlibname":(["":"$N $vnote that Lima MUDs aren't allowed to change their mudlib name until at _least_ 1500 of their emotes are original.",]),"cup":(["":"$N $vgo, \"CUP!\"",]),"poop":(["LIV":"$N $vsay, \"Yeah, we call $tp 'Sir Poops-a-lot'!\"","":"$N $vgo, \"Poop!\"",]),"prod":(["LIV":"$N $vprod $t into action.",]),"yawnpussy":(["":"$N $vyawnpussy.",]),"sue2":(["LIV":"$N $vsue $n1 for $35 million.",]),"tatoo":(["STR":"$N $vshow you $p \"$o\" tatoo.","LIV STR":"$N $vshow $t $p \"$o\" tatoo.",]),"fnog":(["":"$N fucking $vnog, nog, nog, nog, nog!",]),"rain":(["":"$N $vsay, \"It can't rain all the time.\"",]),"outline":(["LIV":"$N $vdraw a chalk outline around $p1 raped and bloodied body.",]),"stain":(["LIV":"It looks to $t0 like the best part of $t ran down the crack of $p1 mama's ass and ended up as a brown stain on the mattress.",]),"pooh":(["":"$N $vpooh.",]),"tear":(["":"A tear $vdrop from $p eye",]),"order":(["LIV":"Gamedriver asks $t, \"Would you like fries with that?\"","":"Gamedriver asks $n, \"Would you like fries with that?\"",]),"punt":(["LIV":"$N drop $vkick $p1 ass all the way to Kansas.","STR":"$N $vpunt $o.","":"$N $vdrop back 10 and $vpunt.",]),"plop":(["LIV":"$N $vplop down on the comfy sofa next to $t and $vscoot really close... (heh, heh)","OBJ":"$N says the addemote docs STILL are WRONG!!!! Only bug reported it 10 times...",]),"rst":(["":"$N $vgo: ----/| \\ o,O| =(-)= RST!!!!! U THPTH!!!!!!!",]),"raid":(["":"$N $vput on $p best raiding gear and $vbegin to connect to MUDs looking for emotes to steal.",]),"smirkpsswd":(["":".",]),"cplusplus":(["":"$N $vsay, \"C++ == OOP--\"",]),"disguise":(["LIV":"$N $vhand $t a Sherlock Holmes costume to disguise the fact that $tr has no clue.",]),"punk":(["":"$N $vsay, \"Fucking punk!\"",]),"drakhar":(["":"$N $vhave another question ....",]),"mutterover":(["":"$N $vmutter over $p breath.",]),"homer":(["":"$N $vsay, \"Oh Lisa, everyone knows vampires are make believe. Just like Elves, Gremlins, and Eskimos.",]),"ftp":(["STR":"$N $vattempt to 'ftp' to $O (or was that ftp.x-rated.pics.com)?","":"$N $vattempt to invoke the 'ftp' command, but $vfail miserably.",]),"flickoff":(["STR":"$N $vgo: _____ |_ _| n (O O) n H _|\\_/|. . H . . o O ( $O ) nHnn/ \\___/ \\nnHn \\__\\/| |\\/__/ ","":"$N $vgo _____ |_ _| n (O O) n H _|\\_/|_ H nHnn/ \\___/ \\nnHn \\__\\/| |\\/__/ ",]),"pascal":(["":"$N $vnote that Pascal isn't a language, it's a creative way of writing book reports.",]),"whitecoats":(["":"Two men in white coats enter the room. They promptly grab $n and drag $n90o off.",]),"letitdie":(["":"$N $vsay, \"Let it die...\"",]),"inch":(["LIV":"$N slowly $vinch away from $t.",]),"social":(["":"$N $vthink that all people who refer to emotes as socials should be rounded up and forced to play Dikus.",]),"fbogleg":(["":"$N $vgo, \"Fucking Bogleg!\"",]),"sfwhee":(["":"$N $vgo, 'Super fucking WHEE!'",]),"nodick":(["LIV":"$N $vlook at $ts and $vsay, \"Yes, it's true, this man has no dick.\"",]),"urk":(["":"$N $vgo, \"Urk!\"",]),"fbog":(["":"$N $vgo, \"Fucking Bog.\"",]),"lsf":(["":"$N $vgo, \"Little Shrugin' FuckLeg!\"",]),"enolagay":(["LIV LIV":"$N $vsuggest $t1 board the 'Enola Gay', and fly towards $t2.",]),"edlin":(["":"$N $vrummage though $p diskettes looking for that copy of Turbo Edlin for Windows.",]),"tictac":(["LIV":"$N $vsay: \"Hey $T, is that a tic-tac in your pocket, or are you just happy to see me?\"",]),"lsd":(["":"$N $vnote that Beek added this emote just because there weren't any other ones about LSD.",]),"blowme":(["LIV":"$N $vtell $t, \"Blow me!\"","":"$N $vgo, \"Blow me!\"",]),"pint":(["":"$N $vdown a pint of muscle relaxant.",]),"punkrock":(["LIV":"$N $vshave $p1 head and $vslap a label on $p1 back that says, \"PUNK ROCK\"",]),"sick":(["":"$N $vlook sick.",]),"technical_difficulties":(["":"$N $vrecite: \"We are experiencing technical difficulties, please stand by...\"",]),"bogleg":(["LIV":"$N $vbogleg at the concept of $t.","STR":"$N $vbogleg at the concept of $o.","":"$N $vbogleg at the concept of it.",]),"hurry":(["LIV":"$N $vbeg $t to hurry.","":"$N $vare in a hurry.",]),"ping":(["LIV":"$N $vtake $p1 head and $vping it to the wall and back.",]),"qtip":(["LIV":"$N $vstick a Q-tip in $p1 ear, $vpull it out, and $vstare intently at the gob of earwax covering it. After a moment of thought, $n $vstick it in $p mouth and $vexclaim, \"Yum!\"","":"$N $vtake the Q-tip from $p ear and $vstare intently at the gob of earwax covering it. After a moment of thought, $n $vstick it in $p mouth and $vexclaim, \"Yum!\"",]),"pine":(["STR":"$N $vpine $o.","":"$N $vpine.",]),"incoming":(["":"$N $vduck for cover, screaming \"Incoming!!!!\" ",]),"fearme":(["":"$N $vgo, \"Boo! Um, fear me, or something.\"",]),"norelease":(["":"$N $vmumble something about a release, but $n $vregret $n ever mentioned it.",]),"bbare":(["":"$N $vsing, \"Go as bare as you dare, with bikini bare!\"",]),"orb":(["":"$N $vgo, \"Nice orbs!\"",]),"lima8":(["":"$N got Laid In Mobile, Alabama.",]),"lima7":(["":"$N $vnote, \"Lima: We do nuclear testing.\"",]),"lima6":(["":"$N $vwonder why there is a 'lima6' emote but no 'lima1' or 'lima' emotes.",]),"lima5":(["":"$N $vnote that Lima stands for, \"Lima Is Modern Art\"",]),"lima4":(["":"$N $vnote that Lima stands for, \"Lima Is Multi Acronymed\".",]),"lima3":(["":"$N $vgo: LIMA: The only MUDLIB rated NC-17",]),"lima2":(["LIV":".","":"$N $vnote that LIMA stands for, \"Let's Ignore Mud Admins\".",]),"fpull":(["LIV":"$N $vtell $t: Here, pull my finger...",]),"punch":(["LIV":"$N $vpunch $t.",]),"buzz":(["":"$N $vpush a button on $p chest. \"Buzz Lightyear to the rescue!\"",]),"toomanypeople":(["":"$N $vdecide there are too many people logged on, and $vponder a desting spree.",]),"sploob":(["LIV":"$N $vsploob all over $t.","":"$N $vsploob all over $r.",]),"bones":(["WRD STR":"$N $vexclaim, \"Dammit Jim. I'm a $o, not a $o1.\"","STR":"$N $vexclaim, \"Dammit Jim. I'm a doctor, not a $o.\"","":"$N solemnly $vexclaim, \"He's dead Jim.\"","LIV STR":"$N $vexclaim, \"Dammit $tp. I'm a doctor, not a $o.\"",]),"cry":(["LIV":"$N $vcry on $p1 shoulder.","STR":"$N $vcry $o.","":"$N $vcry.",]),"irc":(["":"$N $venter 'IRC' cause $n $vdo _NOT_ socialize with mudders...",]),"final":(["LIV":"$N $vask $T, \"Is that your final answer?\"",]),"girn2":(["":"$N $vgrin evilly.",]),"knife":(["":"$N $vexplain, \"You use the knife to stop your enemy from pressing the button.\"",]),"bingleg":(["":"$N $vbingleg.",]),"laundry":(["LIV":"$N $vtell $t, \"HEY! YOU GO DO MY LAUNDRY!\"","":"$N $vsay, \"If a woman ever game me crap, I'd say, 'HEY! GO DO MY LAUNDRY!'\"",]),"makedrunk":(["LIV":"$N $vmake $t drunk.",]),"reject":(["":"$N $vnote that you'd have to be a reject or something to add an emote like this one.",]),"raiseleg":(["LIV":"$N $vraiseleg an eyebrow at $t.","":"$N $vraiseleg an eyebrow.",]),"nightmare":(["":"$N $vmutter about this lib being more of a nightmare to patch than the last one.",]),"ludicrous":(["":"$N $vprepare for ludicrous speed.",]),"sellcrazy":(["LIV":"$N $vtell $t, \"Sell crazy somewhere else. We're all stocked up here.\"","":"$N $vsay, \"Sell crazy somewhere else. We're all stocked up here.\"",]),"southpark":(["":"WARNING: $P brain is off. $N $vare watching South Park.",]),"slap":(["LIV":"$N $vslap $t across the face.","":"$N $vslap $p forehead and $vgo, \"D'oh!\"","LIV STR":"$N $vslap $n1 $o!",]),"pole":(["":"$N $vsay, \"I'm not touching that one with a 20' pole.\"",]),"lambada":(["LIV":"$N $vdo a wild lambada (The forbidden dance) with $t!","":"$N $vdo a wild lambada (The forbidden dance)!",]),"valueofshit":(["":"$N $vgo, \"If shit were worth something, poor people would have been born without assholes.\"",]),"slam":(["LIV":"$N $vslam $t into the wall.",]),"gloat":(["STR":"$N $vgloat $o.","":"$N $vgloat.",]),"tooslow":(["LIV":"$N $vpoint out that $ts $v1are too damn slow.","":"$N $vpoint out that $n $vare too damn slow.",]),"happy":(["":"$N $vare happy.",]),"howcome":(["":"$N $vwonder why $s doesn't read more about this lib in alt.sex.beastiality.",]),"goemotes":(["":"$N $vnote that half the souls could be replaced with either 'go STR' or 'note STR'",]),"avgbog":(["":"$N $vbog in an average way.",]),"kitchen":(["LIV":"$N $vsay to $t, \"You get your bitch ass back in the kitchen, and cook me some pie!\"","":"$N $vsay, \"I would never let a woman kick my ass. If she tried anything, I'd be like, 'HEY! YOU GET YOUR BITCH ASS BACK IN THE KITCHEN! AND MAKE ME SOME PIE!'\"",]),"puke":(["LIV":"$N $vpuke in $p1 lap.","":"$N $vdo the technicolor yawn.",]),"bkiss":(["LIV":"$N $vblow a flying kiss at $t.",]),"ohhell":(["":"$N $vgo, \"Oh hell.\"",]),"coolbeans":(["":"$N $vgo, \"Cool beans.\"",]),"penultimate":(["LIV":"$N $vask $t, \"Is that your penultimate answer, the second last one before you change it to the one that might have a chance of being right?\"",]),"35007mom":(["LIV":"$N $vnote how 35007 $p1 mom is!",]),"kickit":(["":"$N $vgo, \"Kick it! Kick it! Yah yah! Kick it!\"",]),"language":(["LIV":"$N $vrelate a long story about the beginnings of the LIMA mudlib, and $vconclude by showing all the foul language in the souls was $p1 fault.","":"$N $vrelate a long story about the beginnings of the LIMA mudlib, and $vconclude by showing all the foul language in the souls was Deathblade's fault.",]),"poke":(["LIV":"$N $vpoke $t in the tummy.","LIV STR":"$N $vpoke $p1 $o.",]),"cheer":(["LIV":"$N $vcheer for $t.","STR":"$N $vcheer $o.","":"$N $vlet out a resounding cheer!",]),"hide":(["LIV":"$N $vhide behind $t.","STR":"$N $vhide $o.","":"$N $vhide.",]),"goober":(["LIV":"$N $vsay, \"Excuse me for pointing out the obvious, but, damn, $Tp, you're such a goober!\"",]),"lpa":(["LIV":"$N $vaccuse $t of making a LPA (Lame Personal Attack).","":"$N $vmake a LPA (Lame Personal Attack).",]),"roo":(["LIV":"$N $vquote, \"Still time to get that little dick head $tp before he wakes up.\"","":"$N $vquote, \"Still time to get that little dick head Roo before he wakes up.\"",]),"kennysdead":(["":"$N $vexclaim, \"Oh my god! They killed Kenny! You Bastards!!\"",]),"oow":(["":"$N $vgo, \"!ooW !ooW\"",]),"zu":(["LIV":"$N $vzuwisky at $t.",]),"ooo":(["":"$N $vooo",]),"lfwaveleg":(["LIV":"$N $vgive $t a little fucking waveleg.","":"$N $vgive a little fucking waveleg.",]),"lazy":(["LIV":"$N $vsay to $t, \"You fail to comprehend exactly how lazy I am.\"","":"$N $vare not incapable, $n $vare damn bone lazy.",]),"nothanks":(["LIV":"$N $vsay to $t, \"No thanks to you, bitch!\"","":"$N $vsay, \"No Thanks!\"",]),"boredom":(["":"Boredom strikes. $N $vgo idle.",]),"transmeta":(["":"$N $vsay, \"Transmeta: We Do Stuff.\"",]),"snoop1":(["LIV":"$N $vthink $t should come to the FinnCon '99 held in Finland. (The last and first mudcon before 21st century)",]),"lol":(["LIV":"$N $vlaugh out loud at $t.","":"$N $vlaugh out loud.",]),"shrugpenis":(["":"$N $vshrugpenis.",]),"batzing":(["STR":"$N $vbatzing $o.","":"$N $vbatzing.",]),"dilith":(["LIV":"$N secretly $vreplace $p1 dilithium with Folger's crystals.","":"$N secretly $vreplace the dilithium with Folger's crystals.",]),"everaskedyourselfwhatthisparticularlongemotesmessagewouldconsistof":(["":"As $n $vare about to find out, this particular long emote's message consists of nothing much. However it is notable that $n $vhave gone through all the trouble of typing it, unless copy-and-pasting was used. On the other hand, $n could also have been making the world a better place or doing something vaguely interesting with $p time. On a final note, the author of this emote would like to thank Beek for his assistance in debugging it and keeping it grammatically correct.",]),"pondering":(["":"$N $vgo, \"Are you pondering what I'm pondering, Pinky?\"",]),"sigh2":(["":"$N $vsigh profoundly heavily. Twice. And still The World, or Tiamat if you've lost all contact with the world, has yet to become a better place, or mud if you no longer have a 3D-life.",]),"midnightcoder":(["":"$N $vnote that $n $vdo $p best coding after midnight.",]),"foo":(["LIV":"$N $vfoo $t.","STR":"$N $vfoo $o.","":"$N $vfoo.","LIV STR":"$N $vfoo $t $o.",]),"masochist":(["LIV":"$N $vdiagnose $t as having masochistic tendencies--may $tp be cursed with using only \"ed\" for the rest of eternity.",]),"mute":(["":"$N $vhit the mute button.",]),"sfidleme":(["":"$N $vcontemplate the profound ironies involved in typing 'sfidle me'.",]),"zakk":(["LIV":"$N $vflip $t off and $vshout, \"Zakk you!\"","":"$N $vgo, \"Zakk you!\"",]),"cow":(["LIV":"$N $vtell $t, \"Don't have a cow, man!\"","":"$N $vhave a cow.",]),"cos":(["LIV":"$N $vshake $p head sadly at $t. \"Classic oversqueeze,\" $n $vsay.","":"$N $vshake $p head sadly. \"Classic oversqueeze,\" $n $vsay.",]),"fog":(["":"The fog lifts from $p0 eyes... $n $vare back.",]),"pascal3":(["":"$N $vnote that the only Pascal remotely worth using is Turbo Pascal.",]),"wave":(["LIV":"$N $vwave at $t.","LIV LIV":"$N $vwave at $n1 and $n2.","WRD":"$N $vwave $o.","at LIV":"=LIV","to LIV":"$N $vwave to $t.","STR":"$N $vwave $o.","":"$N $vwave.","LIV STR":"$N $vwave at $t $o.",]),"pascal2":(["":"$N $vsay: Pascal, isn't that a measure of air pressure?",]),"nolife":(["LIV":"Game Driver tells $t: You have no life !",]),"xml":(["":"It's clear that $n $vare fucked in the head if $n $vthink XML makes a good emote.",]),"dbpython":(["LIV":"$N $vsit back while $t $v1preach the Python gospel. Amen.",]),"fob":(["LIV":"$N $vaccuse $t of being a fob.","":"$N $vfeel like a fob.",]),"one":(["LIV":"$N $vbrainwash $t with the One True Lima Way.","":"$N $vare brainwashed with the One True Lima Way.",]),"jimcarrey":(["LIV":"$N $vthink they should call $n1 Jim Carrey since all $n1 $v1seem to do is talk out of $p1 ass.",]),"ufbelieve":(["":"$N $vsay, \"UnFUCKINGbelievable!\"",]),"umm":(["":"$N $vgo, \"Uummmmmmmmmmmm..........\"",]),"streak":(["":"$N $vstreak across the room, completely naked. (Loses something on a text-only interface, no?)",]),"contemplate":(["LIV":"$N $vcontemplate $p1 navel.","":"$N $vcontemplate $p navel.",]),"potty":(["LIV":"$N $vthink $t $v1have a potty mouth.","":"$N $vhave a potty mouth.",]),"dance":(["LIV":"$N $vdance the waltz with $t.","STR":"$N $vdance $o.","":"$N $vdance.",]),"gqemote":(["":"$N $vannounce that that is another Gutter Quality Emote (*TM Lima Dev Team 1995)",]),"security":(["LIV":"$N $vgive $t a red shirt, and $vsay, \"Join the security detail, and follow the captain down to the surface\"","":"$N $vsound the sirens...security is on its way!",]),"mush":(["STR":"$N $vmush $o.","":"$N $vmush.",]),"gpf4":(["":"$N $vremember the elapsed time between first using Windows 95 and getting his first GPF: 3 hours.",]),"gpf3":(["LIV":"$N $vpoint to the front of $p1 t-shirt that reads: \"Microsoft Access - General Protection Fault\"","":"$N $vpoint to the front of the t-shirt that reads, \"Microsoft Access - General Protection Fault\"",]),"gpf2":(["LIV":"$N $vhand $t a t-shirt that reads: \"Microsoft - Totally Visual\" on the back.","":"$N $vhand out t-shirts that read \"Microsoft - Totally Visual\" on the back.",]),"interface":(["LIV":"$N $vtell $t, \"Sit on my interface, Bitch!\"",]),"droids":(["":"$N $vhold up a trinket and $vsay: Look sir, droids!",]),"worthy":(["":"$N $vintone \"I am not WORTHY. I am not WORTHY\".",]),"coastg":(["LIV":"$N $vwavie $p coast guards at $t.","":"$N $vwavie $p coast guards.",]),"pokestick":(["LIV":"$N $vpoke $t with a stick.",]),"jezus":(["":"$N $vexclaim, \"JEZUS!\"",]),"ignore":(["LIV":"$N $vscream at $t, \"Hell no I'm not lagged, I'm just IGNORING YOU!\"",]),"readthesource":(["LIV":"$N $vtell $t, \"Read the source, Luke!\"","":"$N $vgo, \"Read the source, Luke!\"",]),"noweigh":(["":"$N $vgo \"No weigh!\"",]),"limafu":(["LIV":"$N $vare impressed by $p1 abilities in the art of Lima-Fu... that of sitting in one place for long periods of time.","":"$N $vpractice the art of Lima-Fu... that of sitting in one place for long periods of time.",]),"mosh":(["LIV":"$N $vmosh around the room violently... Oops! $T just took an elbow!","STR":"$N $vmosh around the room $o.","":"$N $vmosh around the room.",]),"nevermind":(["":"$N $vmutter Never Mind.",]),"lambda2":(["":"$N $vsay, ({ #'love, this_user(), #'you })",]),"future":(["":"$N $vgo, \"It's the wave of the future!\"",]),"orgyemote2":(["":"$N $vrefer to the \"orgy LIV LIV WRD WRD STR\" emote, because three objects aren't allowed in an emote.",]),"scrooge":(["":"$N $vexclaim: IT'S MINE! ALL MINE! MINE MINE MINE! Mwuahahahaha!!!!!",]),"wachu":(["":"$N asks, \"Whachu talking 'bout Willis?\"",]),"miss":(["LIV":"In great emotional distress, $n $vtell $t just how much $n0 missed $t1.",]),"clueless":(["":"$N $vlook clueless.",]),"sorry":(["LIV":"$N $vlook sheepish and mumble \"Sorry, $t.\"","STR":"$N $vlook sheepish and $vmumble \"Sorry, $o\"","":"$N $vlook sheepish and $vmumble \"Sorry\"",]),"elks":(["":"$N $vpronounce DOS as dead, and $vsuggest that everyone just install Linux-8086 on all their old machines.",]),"lagleg":(["LIV":"$N $vLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGGGGGGGGGGGG from all $t leg emotes.","":"$N $vLLLLLLAAAGGGGGGGGGGGGGGG from all the LEG emotes.",]),"rotfl":(["":"$N $vroll on the floor laughing.",]),"maclover":(["LIV":"$N $vaccuse $n1 of being a Mac lover.",]),"fmh":(["":"$N goes, \"Well .. fuck me harder.\"",]),"screenrulz":(["":"$N $vare compelled to note just how much screen rulz.",]),"unclefucka":(["LIV":"$N $vtell $t, \"Shut your fucking face, uncle fucka! You're the one that fucked your uncle, uncle fucka! You don't eat or sleep or mow the lawn; you just fuck your uncle all day long!\"",]),"bogthigh":(["STR":"$N $vbogthigh $o.","":"$N $vbogthigh.",]),"yell":(["LIV":"$N $vyell at $O.","LIV STR":"$N $vyell at $t $o.",]),"paddle":(["":"$N $vsay, \"I _said_: well, I guess we're up shit creek without a paddle\" and $vare immediately smacked by The Penguin.",]),"we":(["LIV":"$N $vsay to $t, \"What's this 'WE' shit, Kimosave?\"","":"$N $vsay, \"What's this 'WE' shit, Kimosabe?\"",]),"llk":(["":"$N $vclaim not to be LL(k) for any k.",]),"cluebie":(["LIV":"$N $vaccuse $t of being a newless cluebie!",]),"gofigure":(["":"$N $vexclaim, \"Go figure!\"",]),"cmd":(["":"$N $vopen a new command prompt. $ _",]),"foosmile":(["LIV STR":"$N $vsmile at blah $T $o.",]),"sfgob":(["":"$N $vgo, \"Super fucking gob!\"",]),"kentucky2":(["STR":"$N $vwonder, \"If a $o couple gets divorced, are they still brother and sister?\"","":"$N $vwonder, \"If a Kentucky couple gets divorced, are they still brother and sister?\"",]),"fly":(["":"$N $vthrow $r at the ground, and $vmiss.",]),"lugnut":(["LIV":"$N $vthink $t $v1are a lugnut.","":"$N $vare a lugnut.",]),"tmifriends":(["LIV":"$N $vtell $t, \"Friends don't let friends use TMI.\"",]),"puff":(["LIV":"$N $vencourage $t to sing \"Puff the Magic Dragon ...\"","":"$N $vfrolick around in circles, singing \"Puff the Magic Dragon ...\"",]),"destleg":(["LIV":"$N $vdestleg $t.",]),"hrmleg":(["STR":"$N $vhrmleg $o.","":"$N $vhrmleg.",]),"butt":(["LIV":"$N $vtell $t, \"Check out my butt!!!\"","":"$N $vgo, \"Check out my butt!!!!\"",]),"win952":(["":"$N $vsay, \"Windows 95 <= MacOS '87 <= Workbench 3.0!\"",]),"tweak":(["LIV":"$N $vtweak $p1 nose.",]),"cls":(["":({"Poof, your mind has been cleared.","$N $vtry to use the 'cls' command, doesn't the doofus know this isn't DOS?",}),]),"oharaslaw":(["":"$N $vnote that the time till alpha follows a negative exponential curve.",]),"ywiw":(["":"$N $vask in disbelief, \"You want it WHEN?\"",]),"vi":(["STR":"$N $vtry to start up vi, but $vfail miserably.","":"$N $vtry to start up vi, but $vfail miserably.",]),"blue":(["":"$N $vwhisper, \"Beware the untapped blue...\"",]),"ignoring":(["LIV":"$N $vscream in $p1 ear, \"I'm not DEAF, I'm IGNORING YOU!\"",]),"blub":(["LIV":"$N $vbrighten up like a lightbulb, finally getting the idea $t has been trying to get through.","":"$N $vbrighten up like a lightbulb, finally gettiing the idea.",]),"vb":(["":"VB: The language that Dick and Jane built while reading about their adventures.",]),"fnff":(["":"$N $vstate, \"Fuckin' feel free!\"",]),"beable":(["STR":"$N $vbeable $o.","":"$N $vbeable.",]),"9pm":(["":"$N $vnote that it is only 9pm, long before most of the souls were added.",]),"inhale":(["LIV":"$T tried Windows once, but $ts didn't inhale.","":"$N tried Windows once, but $n didn't inhale.","LIV STR":"$T tried $o once, but $ts didn't inhale.",]),"threat":(["LIV":"$N $vask $t, \"Are you threatening me??!!\"","":"$N $vgo, \"Are you threatening me??!!\"",]),"historical":(["":"$N $vencounter fierce opposition from the Society for the Preservation of Historical Emotes.",]),"sfnogleg":(["":"$N super-fucking $vnogleg.",]),"tinyfudge":(["":"For some strange reason, $n $vfeel compelled to upgrade to TinyFudge 3.2 beta 1.",]),"uv":(["":"$N $vsay, \"Ultra-vilot rays, bad! Lotion good!\"",]),"gack":(["":"$N $vgack.",]),"warn":(["LIV":"$N $vare gonna give $t1 three seconds... exactly three fucking seconds to wipe that stupid looking grin off $p1 face or $n will gouge out $p1 eyeballs and skull fuck $t.","":"$N $vwarn Warning playing too much mud can cause: Failure in real life, constipation, feet falling asleep syndrome, refrigerator opening, eye staleness, q-tip collecting, chicken overcooking, toenail picking, combing pubic hair syndrome, inward pinky toe problems, three letter acyronynm talking in public, smiling sideways in real life, finger exhaustion, blindness, falling-asleep-on-your-keyboard, walking backwards, sneezing inversely, chocolate eating, listening to bad music, losing girlfriend/boyfriend, the desire to pick on AOLers constantly, oven overheating, garage door failures, air conditioning breakdown, expensive electrical and phone bills, failure in school, and generally just a basic failure in life.",]),"gauntlet2":(["LIV":"$N $vsay, \"$Tp now has reflective shots!\"","":"$N say, \"Green Valkyrie now has reflective shots!\"",]),"bust":(["":"$N $vsing \"I must, I must, I must increase my bust!\"",]),"ll1":(["":"$N $vclaim to be LL(1).",]),"ramble":(["STR":"$N $vramble on and on about $o.","":"$N $vramble on and on about something.",]),"um":(["":"$N $vgo: \"Ummm....\"",]),"ward":(["":"$N frantically $vweave signs of warding.",]),"ug":(["":"$N $vgo, \"Ug!!\"",]),"feared":(["":"$N $vgo, \"Feared.\"",]),"bush":(["":"In $P best George Bush voice, $N $Vpromise, \"Read my lips...NO NEW MUDLIB BUGS!\"",]),"limacs":(["":"LIMACS: Lets Invest in Memory and CPU soon.",]),"christ":(["":"$N $vexclaim, \"CHRIST!!!\"",]),"bite":(["LIV":"$N $vbite $t.",]),"rip":(["":"$N $vrip $p hair out",]),"damn":(["LIV":"$N $vdamn $n1!",]),"bury":(["":"$N $vbury your armies.",]),"feet":(["":"$N could use a foot massage.",]),"prodstick":(["LIV":"$N $vprod $t with a stick.",]),"tp":(["LIV":"$N $vask $t, \"Do you have TP for my bunghole? Do not make my bunghole angry!\"","STR":"$N $vgo, \"I do not need '$O'! I need TP for my bunghole!\"","":"$N $vgo, \"I need TP for my bunghole!\"",]),"feep":(["":"$N $vfear the influx of 'feeping creaturism'.",]),"rib":(["LIV":"$N $velbow $t in the ribs.",]),"burp":(["LIV":"$N $vburp in $p1 face.","STR":"$N $vburp $o.","":"$N $vburp rudely.",]),"tm":(["STR":"($O is *TM Lima Dev Team 1996)","":"(*TM Lima Dev Team 1995)",]),"feel":(["LIV":"$N $vfeel $t.",]),"nobeekp":(["LIV":"$N $vnote that beekp(\"$Tp\") returns 0.",]),"burn":(["LIV":"$N $vcackle at $t and $vset fire to $p1 hair.",]),"oik":(["LIV":"$N $vnote that $t $v1are such an oik, it's shocking they even let $t off the farm!",]),"amylaar":(["":"Amylaar: A MudDriver you loathe always and revile.",]),"chaching":(["":"$N $vgo, \"CHA CHING!\"",]),"golfapplause":(["LIV":"$N $vtap a bit of polite golf applause in $p1 honor.",]),"tf":(["":"$N $vuse TinyFugue, the Client of Champions.",]),"moon":(["LIV":"$N $vbend over, $vpull $p pants down, exposing $p heiny, and $vshoot $t the moon!","":"$N $vbend over and $vpull $p pants down, exposing $p heiny!",]),"feed":(["LIV":"$N $vtell $t, \"It's your turn to feed the alien, $tp.\"","":"$N $vsay, \"It's your turn to feed the alien, Pinback.\"",]),"oic":(["":({"$N $vsay, \"Oh, I see.\"","$N $vsay, \"Oh, I see.\"",}),]),"feeb":(["LIV":"$N $vaccuse $t of being a feeb.","":"$N $vfeel like a feeb.",]),"heyguys":(["":"$N $vshout, \"HEY, YOU GUYS!!!\", at the top of $p lungs!",]),"moof":(["":"$N $vgo, \"Moof!\"",]),"flawless":(["":"$N $vboom, \"FLAWLESS VICTORY!\"",]),"spelt":(["":"$N spelt that real gud.",]),"hickey":(["LIV":"$N $vgive $t a hickey, right in the middle of $p1 forehead.",]),"fix":(["LIV":"$N \"$vfix\" $t.",]),"kewl":(["LIV":"$N $vlook at $t and $vgo, \"Kewl!\"","":"$N $vgo, \"Kewl!\"",]),"yoursormine":(["":"$N $vwink seductively: \"Your workroom or mine?\"",]),"spell":(["LIV":"$N $vremind $t to check $p1 spelling!!!",]),"droids2":(["":"$N $vwave $p hand and $vsay \"These aren't the droids you're looking for.\"",]),"nerves":(["LIV":"$N $vnote that $t is getting on $p nerves...","STR":"$N $vnote that $o is getting on $p nerves...","":"$N $vnote that something is getting on $p nerves...",]),"channels":(["":({"Try IRC!","$N $vscan for more mud chat channels. Hasn't $n heard of IRC?!",}),]),"gaspleg":(["STR":"$N $vgaspleg $o.","":"$N $vgaspleg.",]),"borg":(["":"Monotonically, $n $vsay, \"Resisistance is futile. You will be assimilated.\"",]),"xspecial":(["":"$N $vgo, \"Well, isn't that EXTRa special??\"",]),"fin":(["":"$N $vgo: ----/| \\ o,O| =(-)= FIN!!!!! U THPTH!!!!!!!",]),"rhf":(["":"$N $vyearn for the days when rec.humor.funny actually was.",]),"bore":(["LIV":"$N $vbore $t into a pile of green goo on the floor.","":"$N $vbore you all to tears.",]),"lsfmapbog":(["":"$N $vgo, \"Little super fucking Miss America Pageant bog.\"",]),"sp":(["":"$N $vthink The Smashing Pumpkins RULE!",]),"so":(["":"$N $vgo, \"So???\"",]),"gameover":(["":"$N $vscream, \"Game over, man! Game over!\"",]),"fuckcode":(["LIV":"$N $vgo, \"Fuck $Tp's code! I'm gonna rewrite it!\"","STR":"$N $vgo, \"Fuck the $o code! I'm gonna rewrite it!\"","":"$N $vgo, \"Fuck this code! I'm gonna rewrite it!\"",]),"cheesethreaten":(["LIV":"$N $vturn $p head at $t and $vscream, \"You make me sick, you know that? Wanna know what I'm gonna do about it, why, I'm gonna shove my entire arm into your gaping maw down through your torso till I reach your heart, then with a mighty rip I shall tear it free and yank it loose with a sickening *SNAP*. Then, I'll hold your heart aloft and stuff it with cheese. Real cheese. None of this part skim shit. And I'll shove your now cheese-laden heart back into your throat and laugh. Laugh hard. I'll laugh as your arteries clog from cheesy goo. And you know why I'm doing all this? Because dairy foods are bad for you and I care. I really do.",]),"fig":(["":"$N $vsay, \"It'd be the marriage made in heaven. A frog and a pig. We'd have bouncing baby figs.\"",]),"whyme":(["":"$N $vgrab $p leg and $vcry, \"Why?! Why me? Why? Why? Why?\"",]),"sf":(["LIV":"$N phucking $vsmurfleg to $t.","":"$N phucking $vsmurfleg.",]),"brawl":(["LIV":"$N $vgrab the nearest chair, and $vsmash it into $p1 back.",]),"flash":(["LIV":"$N $vflash $t. $T1s $v1are impressed.","":"$N $vflash you. You are impressed.","LIV STR":"$N $vflash $t. $T1s $v1are $o.",]),"tshirt":(["STR":"$N $vdon $p \"$o\" T-shirt.",]),"preen":(["STR":"$N $vpreen $o.","":"$N $vpreen.",]),"yourmomsfat":(["LIV":"$N $vtell $t, \"Your mom's so fat, when she lies down, she gets taller!\"","STR":"$N $vtell $o, \"Your mom's so fat, when she lies down, she gets taller!\"",]),"cough":(["LIV":"$N $vcough all over $t.","STR":"$N $vcough softly, \"$o\".","":"$N $vcough.",]),"gaybog":(["":"$N $vgaybog.",]),"competition":(["":"$N $vstate, \"Commercial competition evolves from a warrior ethic and is about blood lust. It's a slightly more refined stand-in for the primitive and nearly ubiquitous urge to conquer one's enemies, abscond with their property, and destroy their future. I say \"blood lust\" because competition involves creating a richer environment for one's own offspring at the expense of the enemy's offspring: the spilled blood of an enemy vividly expresses the end of his or her procreation, making more of the world available to my own progeny.\"",]),"ugh":(["":"$N $vgo, \"UGH :P\"",]),"cornhole":(["LIV":"$N $vcornhole $t with $p stalk.",]),"qemote":(["LIV":"$N $vindicate that $ts only $v1add Quality Emotes.","":"$N $vindicate that that is a Quality Emote.",]),"faintleg":(["":"$N $vfaintleg.",]),"pico":(["STR":"$N $vtry to start up pico, but $vfail miserably.","":"$N $vtry to start up pico, but $vfail miserably.",]),"toosilly":(["":"$N $vgo, \"This is getting _too_ silly.\"",]),"whyleg":(["":"$N $vexpose a shaven leg and $vcry, \"Why?! Why me? Why? Why?\"",]),"monkeys":(["":"$N $vgo, \"If I had monkeys, I would feed some garbage to them.\"",]),"rp":(["LIV":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.","OBJ":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.","STR":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.",]),"chu":(["":"$N $vfear the \"Chu Complex.\"",]),"rl":(["LIV":"$N $vthreaten $t with Real Life.",]),"compile":(["STR":"$N $vattempt to compile $o, but $vfail miserably.","":"$N $vattempt to compile something, but $vfail miserably.",]),"soundtrack":(["":"$N $vwonder if the soundtrack to the LIMA mudlib is available on CD.",]),"frontrow":(["":"$N $vsays: \"Front row swallows!\"",]),"re":(["":"$N $vforget $n $vare on a MUD and $vsay \"re\". What a dumbshit.",]),"whatever":(["":"$N $vgo, \"Whatever!\"",]),"rd":(["LIV":"$N $vpoke $t in the tummy and $vwait for Red Dragon to go up again.",]),"hell8a":(["":"$N $vcringe and $vpoint out that Heaven 7 is at 3.0 alpha.",]),"cobol2":(["":"$N $vadmit to being a COBOL programmer.",]),"robobabe":(["LIV":"$N $vgo, \"$Tp is a Robo-Babe!!\"",]),"snarl":(["LIV":"$N $vsnarl at $t.","":"$N $vsnarl.",]),"tricycle":(["":"$P0 tricycle of thought tipped over again.",]),"mome":(["LIV":"$N $vmome at $t.","OBJ":"$N $vmome around the $o.","STR":"$N $vmome $o.","":"$N $vmome around the room.",]),"cha":(["":"$N $vgo, \"Cha, right!\"",]),"snarf":(["LIV":"$N $vsnarf at $t.","STR":"$N $vsnarf $o","":"$N $vsnarf up some more cool code from Lima Bean.",]),"think":(["STR":"$N . o O ( $o )","":"$N . o O ( hmm ... )",]),"wedgie":(["":"$N $vlook around with an evil glint in $p eye.",]),"thumb":(["":"$N $vgo, \"Thumb.\"",]),"hmmbop":(["LIV":"$N $vhmm and $vbop $t on the head.",]),"splode":(["":"$N '$vsplode. (How messy)",]),"copying":(["":"$N $vwonder why $n $vhave so many copies of a file named COPYING on $p hard drive.",]),"postalpha":(["":"$N $vmutter about postalpha",]),"impatient":(["":"$N $vare getting impatient!",]),"qq":(["":"$N intentionally used this emote. What a genius!",]),"wank":(["LIV":"$Ts $v1wank all over the floor, moaning and sighing.","LIV LIV":"$Ts $v1wank all over $t2, moaning and sighing.","":"$N $vwank all over the floor, moaning and sighing.",]),"backleg":(["":"$N $vare backleg.",]),"wombleleg":(["":"$N $vwombleleg.",]),"lfu":(["":"$N $vnote that 'Lime Fucking Rules!'.",]),"mglint":(["LIV":"$N $vlook at $t with a mischevious glint in $p eyes.",]),"aragorn":(["":"$N $vattempt, but $vfail, to idle as well as Aragorn.",]),"lament":(["STR":"$N $vlament that there are no new emotes $o.","":"$N $vlament: \"No New Emotes(TM)\"",]),"lumberjack":(["":"$N $vstart to sing \"I'm a Lumberjack and I'm OK ...\"",]),"qc":(["":"$N $vwonder how yet another bug managed to escape QC.....",]),"ifw":(["LIV":"$N $vpin the tag \"Idle Fuckwit\" on $n1.",]),"seethe":(["LIV":"$N $vstare at $t, seething.","":"$N $vseethe and $vfume, all the while giving everyone a baleful glare... (stand back!)",]),"ponderleg":(["":"$N $vponderleg.",]),"boot":(["LIV":"$N $vgive $t a boot to the head!",]),"monkey6":(["":"$N $vtwitch a little and ask, \"yadda yadda yadda how many more monkeys? HOW MANY?!\"",]),"monkey5":(["":"$N $vpick bugs from $p hair and $veat them.",]),"lynx":(["":"$N kindly $vrequest that the world become Lynx-friendly.",]),"monkey4":(["":"$N $vshout, \"There were monkeys, I tell ya! MONKEYS!!\"",]),"diarrhea2":(["":"$N $vsay, \"I've got the green-apple splatters!\"",]),"monkey3":(["":"$N $vshave $p ass and $vclimb a tree.",]),"monkey2":(["":"$N $vdemonstrate the manner in which a monkey would eat a banana in the jungles of Madagascar.",]),"blow":([]),"ffear":(["":"$N $vgo, \"Fucking fear.\"",]),"rem":(["LIV":"$N $vstart talking in BASIC and $vcomment $t out.","":"$N $vstart talking in BASIC.",]),"pw":(["LIV":"$N $vtell $t, \"Boy, don't let that pussy whip ya! You gotta whip that pussy!\"",]),"ps":(["":"Postscript, yet another RPN language.",]),"fear":(["LIV":"$N $vfear $t.","STR":"$N $vfear $o.","":({"FEAR! ","$N lives in fear. ",}),]),"milk":(["LIV":"$N $vstroke $p1 left breast and $vdraw milk.","":"$N $vlactate.","STR LIV":"$N $vstroke $p1 $o and $vdraw milk.",]),"pp":(["LIV":"$N $vattempt to subvert $T with peer pressure.",]),"earwax":(["":"$N $vare an earwax conoisseur.",]),"gobgel":(["STR LIV":"$N $vgobgel $o at $t.",]),"leghim":(["LIV":"$N $vexpose a shaven leg and $vwave it to $t.",]),"lrmemote":(["":"$N $vlove rmemote.",]),"roleplay":(["":"$N $vbegin acting in a peculiar way for seemingly no apparent reason.",]),"fff":(["LIV":"$N $vadvise $t, 'Feel Free to Fix it.'","STR":"$N $vsay, \"Feel Free to Fix $O.\"","":"$N $vsay: 'Feel Free to Fix it.'",]),"universe":(["LIV":"$N $vnote that there are 10^40 objects in the known universe, and $t would sleep with well over half of them.",]),"pi":(["":"$N $vpoint out how Mathematics is really very sensible, \"Let's pretend that you can take the square root of -1, you can take the natural log of -1, and the ratio of the second thing you can't do over the first thing you can't do is the same as the ratio of a circle's circumference to it's diameter ...'",]),"bunk":(["LIV":"$N $vinform $t, \"That's bunk!\"","":"$N $vgo, \"That's bunk!\"",]),"bleed":(["LIV":"$N $vbleed on $t.","":"$N $vbleed.",]),"gladidontworkinanoffice":(["":"$N $vgo, \"Heh, anyone see today's Dilbert cartoon? It was funny.\"",]),"yeehaw":(["":"$N $vput on $p Cowboy hat and $vyell, \"Yeee HAW!!!\"",]),"ffb":(["LIV":"$N $vadvise $t, 'Feel Free to Break it.'","":"$N $vsay: 'Feel Free to Break it.'",]),"barney":(["":"Fearless, $N $vsing, \"I love you, you love me, ...\" over and over and over again...",]),"ffa":(["LIV":"$N $vadvise $t, 'Feel Free to Add it.'",]),"flurble":(["STR":"$N $vflurble $o.","":"$N $vflurble.",]),"detonator":(["":"$N politely $vpoint out the detonator is missing.",]),"jove":(["STR":"$N $vtry to start up jove, but $vfail miserably.","":"$N $vtry to start up jove, but $vfail miserably.",]),"honeycomb":(["LIV":"$N $vstart screaming at $t, \"Honeycomb honeycomb! ME WANT HONEYCOMB!!!\" $N then $vproceed to chew $p1 forearm off at the joint.","":"$N $vscream, \"Honeycomb honeycomb! ME WANT HONEYCOMB!!!\"",]),"sfhellohowareyouleg":(["":"$N super $vfucking hello-how-are-you-leg.",]),"leg":(["":"$N $vgo, \"Leg.\"",]),"greet":(["LIV":"$N $vgreet $t.","":"$N $vsay, \"Greets!\"",]),"flapear":(["LIV":"$N $vflapear to $t","STR":"$N $vflapear $o","":"$N $vflapear",]),"lewinsky":(["LIV":"$N $vopen $p mouth and $vlewinsky $t. $P tongue action is wicked.",]),"ruffle":(["LIV":"$N $vruffle $p1 hair.","STR":"$N $vruffle $p $o.","":"$N $vruffle $p feathers.","LIV STR":"$N $vruffle $t $o.",]),"totofuck":(["":"$N $vfuck Toto and $vmake the little dog wail.",]),"dancingqueen":(["":"$N $vare the dancing queen!",]),"bonk":(["LIV":"$N $vbonk $t on the head.","LIV STR":"$N $vbonk $t $o.",]),"idkfa":(["":"$N $vtype, 'idkfa'. \"Very Happy Ammo Added.\"",]),"bong":(["":"$N $vbong.",]),"moebius":(["":"$N $vfold $r into a one-sided surface, making nearby Moebius strips jealous.",]),"squirm":(["STR":"$N $vsquirm $o.","":"$N $vsquirm.",]),"dikuget":(["":"$N $vget 3.dagger 2.pouch 5.packhorse. $N $vlove dikus.",]),"y":(["":"$N $vask, \"Y?\"",]),"bump":(["LIV":"$N $vbump $t.","STR":"$N $vbump $o.","":"$N $vbump.",]),"joint":(["LIV":"$N $vroll $t up into a joint and $vsmoke $t.",]),"x":(["":"$N $vslap an \"X\" sticker on \"Lima Bean: The Director's But.\"",]),"feh":(["LIV":"$N $vlook at $t and $vgo, \"Feh.\"","":"$N $vgo: \"Feh.\"",]),"mike":(["":"$N $vtap $p microphone, \"Is this thing on?\"",]),"ok":(["LIV":"$N $vgive $t $p ok on that.","":"$N $vok.","LIV STR":"$N $vgive $t $p ok on $o.",]),"nogbog":(["":"$N $vnogbog.",]),"oi":(["STR":"$N $vgo, \"Oi! $O!\"","":"$N $vgo, \"Oi!\"",]),"folger":(["STR":"$N secretly $vreplace $o with Folger's crystals.",]),"oh":(["":"$N $vgo, \"Ohhh..... That makes a lot of sense.\"",]),"ket2":(["":"$N $vsing: 'And the Ket came back...' no...wait that's Katt sorry",]),"r":(["STR":"$N $vslap an \"R\" sticker on \"$o: The Director's Cut.\"","":"$N $vslap an \"R\" sticker on \"Lima Bean: The Director's Cut.\"",]),"vomit":(["LIV":"$N $vvomit on $t shoes.","":"$N $vvomit.",]),"smackdown":(["LIV":"$N $vsay to $t, \"Shut up! You keep that up, and I'm gonna put the smack down on yo' ass, beeyatch!\"","":"$N $vsay, \"Shut up! You keep that up, and I'm gonna put the smack down on yo' ass, beeyatch!\"",]),"bachomp":(["":"$N sez: Me $np, bachomp, bachewchomp!",]),"bing":(["LIV":"$N $vbing at $t.","STR":"$N $vbing $o.","":"$N $vbing.",]),"slorph":(["STR":"$N $vslorph $o.","":"$N $vslorph.",]),"p6":(["":"$N $vsay, \"It's not just that it's 3 times faster than the pentium -- it's also got a PCI bus!\"",]),"slavery":(["":"Santanico Pandemonium says: Welcome to slavery... $N $vsay: Where do I sign?!?!",]),"getfucked":(["LIV":"$T1s $v1fuck $no hard from behind. God, it feels good.",]),"hamburgers":(["":"$N $vexclaim, \"Hamburgers! The cornerstone of any nutritious breakfast!\"",]),"confuse":(["LIV":"$N $vexplain quantum mechanics and $t $v1are confused. For that matter, $np $vexplain car mechanics and $tp $v1are confused.","":"$N $vlook confused.",]),"upyours":(["":"$N just said, \"Up yours, baby!\"",]),"rustalone":([]),"american":(["":"$N $vproclaim, \"I am not one of those weak-spirited, sappy Americans who want to be liked by all the people around them. I don't care if people hate my guts; I assume most of them do. The important question is: 'What are they in a position to do about it?' \"",]),"upsidedown":(["":"$N $vturn the room upside-down and $vcollect the change as it falls out of everyone's pockets.",]),"fdl":(["LIV":"$N $vfall down laughing at $t.","":"$N $vfall down laughing.",]),"np":(["LIV":"$N $vaccuse $t of being NP-complete.",]),"bomb":(["LIV":"$N $vbomb all of $p1 damn wavie military branches.",]),"wigleg":(["":"$N $vwigleg $p bottom.",]),"bowleg":(["":"$N $vbowleg.",]),"wake":(["LIV":"$N $vgrab $t by $p1 shoulders and $vshake $to violently, screaming, \"WAKE UP!\"",]),"ni":(["":"$N $vgo, \"Ni! Ni!\"",]),"bigbottom":(["":"$N $vnote, \"The bigger the cushion, the sweeter the pushin', that's what I Said!\"",]),"wired":(["LIV":"$N1 had better get $p1 head and $p1 ass wired together, or $n0 will take a giant shit on $t.","":"$N $vsing \"I'm drinking coffee so I won't get tired. I'm buzzing, I'm jumping, my engines are fired. My brain is boiling, my brain is fried. I see things in the shadows and my sanity's died. I've one thing to say and that's '..I .. am ... wired'.",]),"dogplanet":(["LIV":"$N $vsay, \"$Tp, quit sniffing my butt!\"","":"$N $vsay, \"Dr. Zaius, quit sniffing my butt!\"",]),"working":(["STR":"$N $vput up a 'Working on $o' sign and $vgo idle.","":"$N $vput up a 'Working...' sign and $vgo idle.",]),"duoshrug":(["":"$N $vnotice that a duoshrug just took place.",]),"nc":(["":"$N $vgo, \"No Comment.\"",]),"pissed":(["LIV":"$N $vtell $t \"Yo, you best back off, I'm getting a little pissed here.\"",]),"pcurtsey":(["LIV":"$N $vattempt to curtsey to $t but $vend up sitting on the floor Indian style!",]),"heavensux":(["":"$N $vpreach, \"In the beginning God created Heaven 7 and the earth. Heaven 7 was without form and void, and darkness and ineptitude were upon the faces of the admin. And God said let there be Lima!, and there was Lima. And God saw that Lima was good.\"",]),"neurotic":(["":"$N $vpoint out $n $vare only neurotic, so there is nothing to worry about.",]),"lang":(["":"$N $vexclaim, \"Such language in a high class establishment like this!\"",]),"qualitylag":(["":"$N $vlag like only $n can.",]),"friend":(["STR LIV":"$N $vremind $t, \"'$o' is your friend.\"",]),"happybday":(["LIV":"$N $vsing, \"Happy birthday to you, happy birthday to you, happy birthday dear $T, happy birthday to you.\"",]),"chin":(["LIV":"$N $vstroke $p1 chin, and $vgo, \"Fuck it.\" $N then $vproceed to smack $t across the chin with a right swing.","STR":"$N $vstroke $p chin, and $vgo, \"$O\"","":"$N $vstroke $p chin, and $vgo, \"hmm...\"",]),"sexy":(["":"$N $vask, \"What's wrong with being sexy?\"",]),"ms":(["":"Who can make a program that could work in 500k and take up little hard drive space? Well it sure the hell isn't Microsoft(tm), is it?",]),"ld2":(["":"%^CHANNEL%^[announce]%^RESET%^ $N $vhave gone link-dead.",]),"tasteless":(["":"$N $vdemand the creation of alt.mud.emotes.tasteless.lima",]),"canyon":(["LIV":"$N $vnote that $t $v1have a canyon where there should be a mountain.",]),"tremble":(["STR":"$N $vtremble $o.","":"$N $vtremble.",]),"bearhug":(["LIV":"$N $vgive $t a bone-crushing bearhug.",]),"getfuckedbymegaboz":(["":"Megaboz fucks $no hard from behind. $N $vare unimpressed.",]),"shrugtoe":(["STR":"$N $vshrugtoe $o.","":"$N $vshrugtoe.",]),"nsleep":(["LIV":"$N $vnotice that $ts $v1need sleep badly, and $vsuggest $ts go to bed.","":"$N $vneed sleep.",]),"suxmore":([]),"obi":(["LIV":"$N $vlook at $t and $vplead, \"Help me Obi Wan Kenobi, you're my only hope.\"",]),"tmidown":(["STR":"$N $vgive $o a Robo-rating of \"Two thumbs and one TMI-site down\"!","":"$N $vgive it a Robo-rating of \"Two thumbs and one TMI-site down\"!",]),"monty1":(["LIV":"$N $vdeclare to $t, \"Your mother was a hamster, and your father smelt of elderberrys!\"","":"$N $vdeclare, \"Your mother was a hamster, and your father smelt of elderberrys!\"",]),"mf":(["LIV":"$N $vgo to $t, \"I'm a mushroom cloud layin' motherfucker, motherfucker!\"","":"$N $vgo, \"I'm a mushroom cloud layin' motherfucker, motherfucker!\"",]),"reeses":(["":"$N $veat Reese's pieces.",]),"me":(["":"$N $vpoint to $r and $vask, 'Me?'",]),"icrfu":(["":"$N $vgo, \"It's coming right for us!\"",]),"odbc":(["":"$N $vnote ODBC is not a network protocol!",]),"slut2":(["LIV":"$N $vsay, \"$Tp is what we call, 'Bear with wide canyon'.\"",]),"better":(["":"$N $vmutter, \"That's Better\".",]),"flame":(["LIV":"$N $vdecide to start a flame war, and $vstart chasing $t around with a flame-thrower.","":"$N $vdecide to start a flame war, and $vstart chasing everyone around with $p0 flame-thrower.",]),"justforthehellofit":(["":"$N $vnote that this emote was added just for the hell of it.",]),"shaolin":(["":"$N $vsay \"If what you say is true, the Shaolin and the Wu-Tang could be dangerous!!\"",]),"snickerdoodles":(["LIV":"$N $voffer snickerdoodles to $t, hoping to avoid $p1 wrath.","":"$N $vmake up a batch of snickerdoodles and $vshare them with everybody. Boy, $p snickerdoodles are good!",]),"bile":(["":"$N $vspit up some bile.",]),"lame":(["":"$N $vmutter, \"LAME LAME LAME LAME LAME!!!!!\"",]),"wookie":(["STR LIV":"$N $vadvise $t: \"$o doesn't pull your arms off when it loses.\"",]),"ibm":(["":"$N $vwish $n had an Amiga 4000 with all the trimmings, instead of that undesigned mess they call an IBM PC Compatible.",]),"lamb":(["":"$N $vrelate a thought: Mary had a little lamb. Isn't genetic engineering a wonderful thing?",]),"speel":(["STR":"$N $vattempt to speel \"$o\", but $vfail miserably.","":"$N $vattempt to speel, but $vfail miserbably.",]),"wait":(["":"$N $vgo: ----/| \\ o,O| =(-)= WAIT!!!!! U THPTH!!!!!!!",]),"binky":(["":"$N $vwant to be more like Binky!!!",]),"jukebox":(["STR":"$N $vput a quarter into the jukebox and $vpress the button for \"$o\".",]),"bleat":(["":"$N $vgo, \"BAHAHAHAHAHAAAA!\"",]),"unnice":(["LIV":"$N $vunnice $t.",]),"swoon":(["LIV":"$N $vswoon over $T.","":"$N $vswoon.",]),"wail":(["STR":"$N $vwail $o.","":"$N $vwail.",]),"sleep2":(["LIV":"$N $vtry to sleep with $t, and $vsucceed spectacularly!",]),"fbi":(["LIV":"$N $vreport $t to the FBI's crack Anti-Pinging Unit.",]),"ksfeared":(["":"$N $vgo, \"Kinda sorta feared.\"",]),"twiddle":(["LIV":"$N $vtwiddle $p1 thumbs.","STR":"$N $vtwiddle $p $o.","":"$N $vtwiddle $p thumbs.","LIV STR":"$N $vtwiddle $p1 $o.",]),"gauntlet":(["LIV":"$N $vsay, \"$Tp needs food badly. $Tp is about to die!\"","":"$N $vsay, \"Red warrior is about to die!\"",]),"lalr":(["":"$N $vclaim to be LALR(1).",]),"excellent":(["":"$N $vgo, \"Excellent, Smithers!\"",]),"ld":(["LIV WRD":"$N1 $v1have gone $o-dead.","":"$N $vhave gone link-dead.",]),]) adverbs ({"absently","absentmindedly","accidentally","adamantly","adeptly","adorably","agreeably","aggravatedly","aggressively","aimlessly","amazedly","amusedly","angelically","angrily","annoyingly","annoyedly","anxiously","appreciatively","arousedly","astonishedly","audibly","automatically","autonomically","awfully","awkwardly","badly","bashfully","beautifully","belligerently","bemusedly","benignly","bitterly","blandly","bluntly","boldly","boredly","bravely","briefly","brightly","briskly","broadly","brotherly","brutally","busily","calmly","carefully","carelessly","cautiously","charmingly","cheerfully","childishly","clumsily","coldly","comprehensively","confidently","confirmingly","confusedly","contemptuously","contentedly","convincingly","coolly","courageously","cowardly","crazily","creatively","criminally","critically","cunningly","curiously","cutely","cynically","dangerously","darkly","deadly","decliningly","deeply","defiantly","definitely","degradingly","demonically","depressively","desperately","devilishly","devotedly","dirtily","disappointedly","disgustedly","disgustingly","disrespectfully","doubtfully","doubtlessly","dreadfully","dreamily","drily","drunkenly","dumbly","eagerly","educationally","egocentrically","egoistically","embarrassedly","emphatically","endearingly","endlessly","enduringly","energetically","enormously","enthusiastically","enviously","erotically","evilly","excellently","exhaustedly","expectantly","facinatedly","faintly","faithfully","fanatically","fatherly","fervently","fiendishly","fiercefully","firmly","fitfully","flatly","flirtingly","fondly","foolishly","frankly","frantically","frenetically","frequently","friendly","fundamentally","funnily","furiously","generously","gently","ghastly","gleefully","gloomily","goofily","gracefully","grandfatherly","grandmotherly","gravely","greedily","grimly","groowily","guidingly","handsomely","happily","hard","harmonically","hastedly","heartbrokenly","heavenly","heavily","hellishly","helpfully","helplessly","heroically","hesitantly","honestly","hopefully","hopelessly","hornily","horribly","hotly","humbly","humourlessly","hungrily","hurriedly","hysterically","idiotically","idly","ignorantly","immediately","impatiently","impishly","impotently","inanely","innocently","insanely","instantly","intelligently","intendly","interestedly","introspectively","intuitively","invincibly","invisibly","invulnerably","inwardly","ironically","irresistably","jealously","jeeringly","jokingly","jovially","joyfully","knowingly","kindly","laconically","lazily","levelly","lewdly","lightly","loftily","loosely","lonely","longingly","loudly","lovingly","lustfully","madly","manfully","maniacally","masochistically","meaningfully","melancholically","mercifully","mercilessly","merrily","mildly","mischievously","misguidingly","mockingly","moodily","motherly","mournfully","musically","mysteriously","nastily","naturally","naughtily","nervously","nicely","nobly","noisily","noticeably","notoriously","oddly","officially","officiously","omniously","omnipotently","openly","painfully","passionately","patiently","patronizingly","peacefully","perfectly","personally","physically","playfully","pleasantly","pointedly","politely","poorly","potently","powerfully","powerlessly","professionally","profoundly","protectively","proudly","puzzledly","questioningly","quickly","quietly","quizzically","radiantly","randomly","rampantly","rapidly","rebelliously","recklessly","recursively","regretfully","reluctantly","remotely","reproachfully","respectfully","reverently","rigoriously","royally","rudely","sadistically","sadly","sagely","sarcastically","satanically","savagely","sceptically","scornfully","searchingly","secretly","seductively","sensually","seriously","sexily","shamefully","shamelessly","shapelessly","sharply","sheepishly","shrewdly","shrilly","shyly","sickly","silently","simultaneously","skillfully","sleepily","slightly","slowly","slyly","smartly","smilingly","smoothly","sneakily","sniffingly","softly","solemnly","sort of","sothingly","sourly","spontaneously","sternly","strangely","strictly","stubbornly","stupidly","suddenly","sufferingly","suggestively","surprisingly","sweetly","swiftly","tearfully","teasingly","temporarely","tenderly","terribly","thankfully","theoretically","thoughtfully","tightly","tiredly","tragically","triumphantly","trustfully","unbearably","understandably","understandingly","undeterminedly","uneasily","unexpectedly","unhappily","unknowingly","unlikely","unpolitely","unwillingly","urgently","utterly","vaguely","viciously","vigorously","violently","virtually","voluptuously","vulnerably","warmly","weakly","wearily","whimsically","wholeheartedly","wibbly","wickedly","wildly","willingly","wimpily","wisely","wishfully","wistfully","wobbly","wonderingly","wonderfully","yellowishly","zanily","approvingly","uncontrollably","affectionately","suavely","stoically",}) diff --git a/lib/data/lima/daemons/did.o b/lib/data/lima/daemons/did.o new file mode 100644 index 00000000..4dcf8bdf --- /dev/null +++ b/lib/data/lima/daemons/did.o @@ -0,0 +1,3 @@ +#/daemons/did_d.c +lima_save 1 +did (["1.1a3":({({1701644059,"Tsath started work on 1.1a3.",}),({1701644062,"Tsath fixed vendors listing one price, and selling for another for items with random values.",}),({1701710040,"Tsath fixed missing modal_pop() when running a game without USER_MENU.",}),({1701987990,"Tsath fixed a failed hook remove in ADVERSARY.",}),({1701988023,"Tsath made sure M_AGRESSIVE works when the mob is first encountered.",}),({1702136606,"Tsath removed include in a ton of places since it's automatically included already.",}),({1702985169,"Tsath added LIMA_D to show changes for the LIMA mudlib on MUDs built on LIMA.",}),({1702985200,"Tsath changed 'didlog' and 'DID_D' to support logging to LIMA when on LIMA, but to local mudlib .o file when on other MUD.",}),({1705860973,"Tsath added 'width nowrap' to turn off wrapping entirely. Can be useful for screen readers.",}),({1707688688,"Tsath added /std/tests/, TEST_D and TEST_SUITE for automated testing.",}),({1707688747,"Tsath cleaned up some .h files in /include and removed an unused one.",}),({1708032878,"Tsath fixed LIGHT_OBJECT to work with STATE_D.",}),({1708032943,"Tsath fixed \"burned message\" in PAPER.",}),({1708295323,"Tsath added ^std/objects/candle as a LIGHT_OBJECT example.",}),({1708295360,"Tsath updated to reflect changes to M_LIGHTABLE.",}),({1708467729,"Tsath removed error() call in OBJ remove_hook() as some hooks might not be set when remove is called.",}),({1708552897,"Tsath made M_DECAY based objects save to disk upon quit.",}),({1708725905,"Tsath moved ^std/objects to ^std/object and ^std/rooms to ^std/room.",}),({1709055694,"Tsath made decay messages more flexible in M_DECAY and can handle messages and sends them from the holder of the item decaying.",}),({1709071125,"Tsath fixed memory shortcut in admtool. Thanks to Asmerian for finding this one.",}),({1709072028,"Tsath moved 'showpath' to 'printpath' to avoid Mudlet overlap with 'showpath' command from mapper.",}),({1709245509,"Asmerian updated carrying capacity line to reflect current carry/max carry",}),({1709255332,"Asmerian adjusted the width for the Experience bar in score",}),({1709312210,"Asmerian removed platemail and replaced it with fullplate that covers the entire body",}),({1709332182,"Tsath fixed a series of bugs in didlog and DID_D to retrieve didlogs from other versions than the current one. Probably only 5 left now. If we're lucky.",}),({1709383084,"Tsath rewrote the 'didlog' command to make it more powerful, easier to read and with less bugs.",}),({1709505496,"Tsath fixed uncaught exception in CMD_D that caused input to be lost after 2 consecutive errors.",}),({1709539429,"Asmerian fixed imperial weight rounding issue. Now shows to 2 decimal places",}),({1709542749,"Tsath fixed a bug in SHELL that caused wizard shells to not save if username was longer than 5. Lovely bug.",}),({1709585458,"Tsath removed /cmds/create since none of them worked.",}),({1709666838,"Asmerian updated sword to no longer use size and mass; Removed proper name from pac_longsword allowing it to load. Need to track down the cause",}),({1709675781,"Asmerian removed bodyslots, adjusted school rooms to all load",}),({1709716522,"Tsath moved files into folders under ^std. Still a few remaining ...",}),({1709725223,"Tsath fixed another input crasher in CMD_D.",}),({1709726973,"Tsath updated 'which' cmd so it now allows things like: \"which people | xargs update\".",}),({1709726976,"Tsath fixed input system error catch in USER_OB.",}),({1709816822,"Tsath moved tracking of player/users to USER_D.",}),({1709851430,"Tsath made 'finger' FINGER_D and USER_D USER_MENU aware.",}),({1710107793,"Tsath updated ADVERSARY to have is_adversary() return 1, and 'score' cmd to use it.",}),({1710188381,"Tsath turned the CLAMP define into a sefun (clamp()).",}),({1710191536,"Tsath created empty file for BODY in /std/body/custom.c for mudlib expansions.",}),({1710365850,"Tsath fixed goodbye_action issue in M_CONVERSATION.",}),({1710522529,"Tsath fixed emoji replacement to work again.",}),({1710635672,"Asmerian moved quarrel from std/weapon to std/ammo",}),({1710637648,"Asmerian updated equipment_test to handle dual wielding, updated base sword to reflect the ability to be dual wielded by default",}),({1710662570,"Tsath fixed user creation when USE_USER_MENU is not defined.",}),({1710695346,"Tsath hardened code in 'skills' so it works even with fewer skills learned.",}),({1710709155,"Asmerian updated scarf to inherit from armour instead of obj. Deleted duplicate scarf onbject from main directory of /domains/std",}),({1710711645,"Asmerian fixed the dead adventurer who loads in the portal area",}),({1710716929,"Asmerian updated backpack to be worn on the back, renamed equipment_tests to items for the test suite",}),({1710751364,"Tsath fixed LAST_LOGIN_D to not register \"0\" as an IP and clean up previous entries.",}),({1710756070,"Tsath added 'unittest' command to easily run test suites.",}),({1710854093,"Tsath added a few more fixes for 'score'.",}),({1710924282,"Tsath fixed M_WANDER so mobs do not trigger each other to continually move, but only players can reset the move count. Also set a default limit for number of moves (to 4).",}),({1711428087,"Asmerian added header to items.c",}),({1711487822,"Asmerian updated a line on the greeter, and fixed a spelling error",}),({1711540611,"Tsath added a few more defensive code statements to MOVING_ROOM.",}),({1711970741,"Tsath added 'docs' command to aid in seeing status of RST conversation of autodocs.",}),({1712009258,"Tsath added markdown parsing to HELPSYS, and added M_MDVIEW.",}),({1712137558,"Tsath updated HELP_D to give a bit better reporting after finished rebuild.",}),({1712140619,"Tsath fixed various issues in M_RSTVIEW and M_MDVIEW that Asmerian encountered.",}),({1712171524,"Asmerian completed RST docs for /cmds/wiz",}),({1712172981,"Asmerian finished RST for /trans/admincmds and removed handwritten helps",}),({1712263830,"Tsath fixed 'ask' verb to actually work with M_VENDOR.",}),({1712264177,"Tsath attempted yet again to fix emoji replacements.",}),({1712340872,"Tsath added smart verb parsing to 'ask', e.g. 'ask about ale' and shopkeeper is found auto.",}),({1712341431,"Tsath tests smileys in the didlog :) 8)",}),({1712349740,"Tsath added 'docs player_command' and 'docs ' to see next files missing RST conversion.",}),({1712576355,"Tsath added 'liquids' unit test.",}),({1712608030,"Tsath expanded unittest cmd.",}),({1712683939,"Tsath removed /cmds/player/say.c",}),({1712706692,"Asmerian finished converting the /trans/cmds to RST",}),({1712768673,"Tsath fixed italic escape in M_RSTVIEW",}),({1713212329,"Tsath added message() override to sefun.",}),({1713301112,"Tsath extended admtool for domain standard folder creation.",}),({1713301127,"Tsath made 'mkdir' more like Linux.",}),({1713373920,"Tsath made RSTVIEW \"See: references\" show non-existing commands in red (try 'help skills' 2) for an example.",}),({1713434834,"Tsath modified 'say' verb to stop colour bleed at the end.",}),({1713434901,"Tsath changed say history to save in plain text and removed option for saving say history in body .o files.",}),({1713472456,"Tsath added frame to 'groups' command (for mail groups).",}),({1713473819,"Tsath modernized 'hint' quite a bit.",}),({1714167454,"Tsath added massive improvements for guilds under ^std/guild/ including GOVERNANCE_D and GUILD_D changes. Rough code, will be worked on for the next weeks.",}),({1714394022,"Tsath added guild special moves under /cmds/guild/.",}),({1714394256,"Tsath made Guild XP bonuses work (part of favours), and guild missions.",}),({1714396668,"Tsath renamed the 'pager' to 'artefact' and made it configurable in admtool via .",}),({1714771691,"Tsath added 'governance' cmd.",}),({1714771730,"Tsath added fixes to RST_D and HELP_D to better handle same filenames in different directories.",}),({1715163871,"Tsath moved 'docs' to /trans/cmds and added interface to create auto generated documentation.",}),({1715164388,"Tsath changed M_RSTVIEW to better handle unknown blocks.",}),({1715336731,"Tsath cleaned up 'docs' cmd.",}),({1715443044,"Tsath framed 'time' cmd, and added game time from new EVENT_D to the command.",}),({1715443089,"Tsath added EVENT_D to keep track of in-game time. It allows configuration via to set number of days per week, day names, number of game days per 24 hours etc.",}),({1715633289,"Tsath simplified 'time' and fixed some bugs in 'timezone' cmd.",}),({1715674675,"Tsath documented and cleaned up M_SIBLING.",}),({1715937123,"Tsath rewrote 'tail' to use new sefun tail().",}),({1716368886,"Tsath finished scheduler part of EVENT_D and it now routinely schedules jobs with STATE_D.",}),({1717333198,"Tsath added 'quiet' command to shut up chatty M_ACTIONS based NPCs.",}),({1718138337,"Tsath added option for filename to auto-expand in people.",}),({1718824051,"Tsath extended the 'quiet' cmd a bit.",}),({1718893626,"Tsath fixed a bug in BASE_ROOM preventing room_chat from working.",}),({1718898572,"Tsath improved STATE_D output for \"calls\" command to better handle many scheduled events for same object/file.",}),({1719262705,"Tsath added 'scripts' command for checking running scripts, and how far they've come.",}),({1719305315,"Tsath documented M_NPCSCRIPT and extended it further.",}),({1719404909,"Tsath extended M_NPCSCRIPT to support file based configuration.",}),({1719406721,"Tsath added M_NPCSCRIPT example under ^std/monster/robert.",}),({1720108203,"Tsath optimized performance on 'locate -u' command to update the locate DB.",}),({1720865040,"Tsath fixed a small issue with M_CONVERSATION on exit_conversations().",}),({1721037786,"Tsath added 'cd -' as a feature.",}),({1721040527,"Tsath fixed missing cmd reference in M_RSTVIEW.",}),({1721735420,"Tsath changed drop verb to expect objects to disappear when drop()'ped.",}),({1721744291,"Tsath made sure users do not receive channels in the user menu.",}),({1721766294,"Tsath added code in OBJ to clean up hooks that disappeared.",}),({1722283034,"Tsath added clone_class() sefun.",}),({1722372068,"Tsath added some party fixes, added party to score. Allow better party names in PARTY_D.",}),({1723441338,"Tsath had USER_MENU load the shell object to get the right colour/frame settings early.",}),({1723584442,"Tsath implemented kick and change password in PARTY_MENU.",}),({1723805212,"Tsath added frame themes administration to admtool, which includes saving themes in .",}),({1723914864,"Tsath finished invite functionality in party menu.",}),({1724013199,"Tsath fixed party access upon members leaving parties - new lead assigned automatically.",}),({1724080995,"Tsath fixed bug in user_menu due to renamed function.",}),({1724081033,"Tsath fixed menu layout for shorter first columns than the following.",}),({1724081049,"Tsath added functionality to give lead away in parties.",}),({1724274181,"Tsath introduced themes for parties.",}),({1725648788,"Tsath rewrote and modularized M_BODYSTATS. New config options in config.h to select stat scheme.",}),({1725656733,"Tsath added a D&D M_BODYSTATS module for D&D like stats.",}),({1725691612,"Tsath added a D&D M_BODYSTATS module for Rifts like abilities.",}),({1725724998,"Tsath externalized SKILL_D data to /data/config/skill-tree, and documented it.",}),({1725727758,"Tsath updated 'docs' command to make the purpose of it clearer.",}),}),"1.1a2":({({1648634797,"Tsath made 'scan' more copy/paste friendly.",}),({1648639417,"Tsath added domain_file() and author_file() in master to support new driver feature",}),({1648639430,"Tsath set wizard shell and player shell to have ANSI on by default.",}),({1648982546,"Tsath added a user menu on login.",}),({1648987183,"Tsath updated people with 'u' flag to show not just body name but userid.",}),({1649196504,"Tsath added remove and MAX chars functionality to user menu.",}),({1649272667,"Tsath made sure admtool is aware of user menu functionality, and now cleans properly",}),({1650393871,"Tsath updated the 'skills' command and SKILL_D.",}),({1650393897,"Tsath added a 'simplify' command for people not wanting ASCII graphics but a more simple UI. Useful for visually impaired.",}),({1650393921,"Tsath added M_WIDGETS for some useful ASCII graphics tools.",}),({1650395653,"Tsath updated ADVERSARY to have working body limbs, and added an 'hp' command to show limb hp.",}),({1666380298,"Tsath added a dedicated daemon for reStructured Text (RST_D). Losely based on Rajo's contribution.",}),({1666530985,"Tsath fixed DOC_D to correctly clear admin commands before appending to them.",}),({1666531020,"Tsath added files to /help/rst/ for the RST documentation.",}),({1666531552,"Tsath made HELP_D ignore .rst files.",}),({1666532090,"Tsath moved 'locate' to 'ilocate' and 'findfile' to 'locate' and updated Cmd_rules.",}),({1666532347,"Tsath added RST daemon control to admtool.",}),({1666538021,"Tsath updated ANSI_D with new codes.",}),({1666639268,"Tsath moved TEAM_D to PARTY_D and 'team' cmd to 'party'.",}),({1666699452,"Tsath added metric/imperial to config.h and changed std/object/mass.c to use selected system.",}),({1666699487,"Tsath added 3 new simul_efun functions to string.c",}),({1667160328,"Tsath moved punctuate() function to string sefuns.",}),({1667161479,"Tsath removed trim_spaces() as a sefun, and replaced it with the efun trim() in entire mudlib.",}),({1667411065,"Tsath updated USER switch_body() function to actually work with user menu.",}),({1667860315,"Tsath updated mudlib documentation with latest FluffOS documentation instead of ancient MudOS docs.",}),({1668018421,"Tsath added a shortcut for /domains/ (^) like /wiz/ (~)",}),({1668020937,"Tsath fixed M_VENDOR, armour and wield base in adversary to take relative file paths",}),({1668021410,"Tsath added 'wheremobs' and 'killmobs' commands for mob management.",}),({1668022478,"Tsath added 'livings' for a mob overview.",}),({1668022500,"Tsath fixed inconsistent use of MESSAGES_D->query_messages() and get_messages() in the mudlib.",}),({1668086121,"Tsath patched a bug in report_context() in master that Stanach found.",}),({1668111359,"Tsath fixed some modal stack issues with user menu and the shell.",}),({1668203915,"Tsath added a fix for an item duplication bug for items added at setup() but restored when saved to the body.",}),({1668275063,"Tsath added EMOJI_D, 'emoji' cmd for player control and admtool for maintaining emoji list.",}),({1668279864,"Tsath installed LOOT_D along with GEM, art_artifact and M_DICE updates.",}),({1668428428,"Tsath changed mudlib version to 1.1 alpha 1. Changes are coming.",}),({1668428570,"Tsath added new shortcut for \"/domains\", '^'. Works in prompts, cd, and all file references. E.g. \"^std/monsters/troll\".",}),({1668428652,"Tsath did a lot of work on 'equip' 'score' 'hp' and added new verbs 'salvage' and 'craft'.",}),({1668428763,"Tsath updated BODY and ADVERSARY with fixes for conflicting options from combat_config.h",}),({1668428796,"Tsath implemented working XP, levels, advancement, karma system.",}),({1668428813,"Tsath made sure wounds system works with limbs system and normal classic HP (and it does now).",}),({1668428938,"Tsath did updates to DAMAGE_D.",}),({1668428954,"Tsath added a CRAFTING_D that works with M_SALVAGEABLE.",}),({1668446415,"Tsath extended the admtool to be able to reset passwords for users.",}),({1668455615,"Tsath changed didlog to output RST instead of old style HTML",}),({1668464624,"Tsath fixed the elevator in Wizhall and added ELEVATOR. Now also allows relative paths.",}),({1668636469,"Tsath added M_ASSISTANCE, M_COMPANION, M_DURABILITY and updated the modules, actions, aggressive, vendor, wearable and wieldable.",}),({1668680689,"Tsath added an auto created panel for the elevators with a button overview.",}),({1668686987,"Tsath fixed do_look_at_str() falling through to BASE_ROOM.",}),({1668703736,"Tsath extended set_room_chats() in BASE_ROOM to have a base chance to chat.",}),({1668861114,"Tsath added auto login in USER_MENU that can be interrupted by interactions.",}),({1668870469,"Tsath added durability to weapons and armours, and updated standard armours and weapons.",}),({1668870486,"Tsath updated combat to be more interesting with stuns and prone.",}),({1668870512,"Tsath moved some objects in ^std to subfolders.",}),({1668870570,"Tsath updated BODY_D to give an idea of limb sizes.",}),({1668961164,"Tsath updated the load verb",}),({1668970046,"Tsath updated RANGED_WEAPON and AMMUNITION with new features. Examples under ^std/ammo/ ^std/weapon/.",}),({1668970056,"Tsath says: We have guns. Lots of guns.",}),({1668970074,"Tsath updated the remove and wield verbs.",}),({1668970101,"Tsath updated ADVERSARY with better support for guns, reloading and fixes for lots of old defunct code.",}),({1669242082,"Tsath moved 'ansi' cmd to 'mode'.",}),({1669657247,"Tsath removed define from ^std/shopkeeper.c and changed to relative path.",}),({1669756346,"Tsath added further capabilities to set_objects() in CONTAINER.",}),({1670348831,"Tsath added option in config.h to have players drop their equipment when they die.",}),({1670348839,"Tsath fixed LOOT_D corpse connection.",}),({1670348846,"Tsath added 'get all from corpse' functionality.",}),({1670349581,"Tsath changed 'locate' to give correct syntax information.",}),({1670351719,"Tsath made NEWS_D create default newsgroups so it does not rely on a .o file being there.",}),({1671043994,"Tsath removed M_ANSI and replaced with M_COLOURS. This new module relies only on XTERM256_D and not on ANSI_D.",}),({1671741425,"Tsath changed default MORE lines from 20 to 30.",}),({1672313418,"Tsath fixed individual colours in XTERM256_D.",}),({1672313442,"Tsath thanks Gesslar for fixing prompt issues with line breaks and a multitude of other issues regarding input and wrapping.",}),({1672313456,"Tsath fixed first time account login issue.",}),({1672313491,"Tsath added /obj/mudlib/frame for creating appealing frames for interfaces. Integrates with 'frames' command.",}),({1672314394,"Tsath added a new user interface submenu to the player menu 'menu'.",}),({1672414031,"Tsath made 'say' work with emojis.",}),({1672414175,"Tsath fixed XTERM256_D to not error on codes outside 0 < x < 255 range.",}),({1672420071,"Tsath extended frames with colour themes.",}),({1673563621,"Tsath updated exit and enter with sane actions for 'enter' 'leave' and 'exit'.",}),({1673791465,"Tsath updated 'who' and 'score' with frames support.",}),({1673791711,"Tsath update 'hp' command.",}),({1673892888,"Tsath updated 'people' command.",}),({1673893189,"Tsath moved functionality from FRAME to M_COLOURS.",}),({1673905372,"Tsath fixed 'random' to handle no args given.",}),({1673907221,"Tsath updated the driver include files, which fixed 'random2'.",}),({1674341396,"Tsath changed money to be calculated as a float.",}),({1674381587,"Tsath added currency awareness in DOMAIN_D and extended ADMTOOL to handle it.",}),({1674403048,"Tsath recreated the 'equip' cmd.",}),({1674403072,"Tsath made LOOT_D pick dynamic coins depending on area and settings in DOMAIN_D.",}),({1674683151,"Tsath updated 'score' to handle multiple currencies carried at the same time.",}),({1674683172,"Tsath updated ACCOUNT_D to handle multiple currencies and multiple bank accounts.",}),({1674683195,"Tsath updated BODY to check if currency picked up as an existing currency.",}),({1674736740,"Tsath added 'apply' and 'repair' verb.",}),({1674740665,"Tsath added 'metric' control to the player menu.",}),({1675026269,"Tsath added client detection and colour suggestions to 'mode' cmd.",}),({1675026389,"Tsath modified the player shell to pick mode, emoji, and frame defaults based on client detection.",}),({1675026510,"Tsath added default style and theme for frames in config.h.",}),({1675075669,"Tsath extended XTERM256_D with client compability data.",}),({1675112121,"Tsath added referral question on account creation, saves to /data/referrals.",}),({1675333222,"Tsath added a stack of drink, heal, slow heal, drugs and food under ^std/consumable.",}),({1675333302,"Tsath added TRANSIENT for poison and other effects in /std/transient/",}),({1675333378,"Tsath updated M_DRINKABLE, M_EDIBLE and added M_HEALING.",}),({1675333439,"Tsath added DRINK, FOOD and BANDAGE to /std/",}),({1675343968,"Tsath added a 'smoke' verb to smoke things, like salmon.",}),({1675345026,"Tsath added 'activate' and 'unwield' as verbs.",}),({1675359128,"Tsath fixed M_HEALING to work for living, but just players.",}),({1675363046,"Tsath made bandages work for mobs and get applied to critical spots.",}),({1675851271,"Tsath fixed BIRTHDAY_D to not just refresh every 50 years but every day.",}),({1675859018,"Tsath added targetted_other_action() to M_MESSAGES.",}),({1676465826,"Tsath fixed who when uptime < 1 hour.",}),({1676490094,"Tsath added 'width auto' as a way to use flexible terminal width.",}),({1678264411,"Tsath added a basic implementation of behavior trees for NPCs under /std/behaviour/ and started gradually hollowing out behaviours from adversary.",}),({1678264465,"Tsath added Plutchik emotion wheel to the behaviour trees and a 'smartmobs' cmd to view active smart NPCs on the MUD.",}),({1678293746,"Tsath reformatted the entire mudlib according to /help/wizard/coding/vs_code.",}),({1679235611,"Tsath removed 'sline' and status_line functionality as deprecated. This should be reimplemented using GMCP or other things used today.",}),({1679236342,"Tsath merged body/help (2 simple functions) into body/cmd for reduce inheritance chain.",}),({1679236686,"Tsath merged wiz_positions into wizfuncs for same reason.",}),({1681637583,"Tsath moved 3 variables in M_WIDGETS to nosave.",}),({1681757903,"Tsath updated ACCOUNT_D with coverage() and fixed a few bugs.",}),({1681828505,"Tsath added save_things_to_string() to M_SAVE to avoid deep recursive saves of players and monsters.",}),({1683213529,"Tsath fixed dual login fails in USER_OB. You can now log in more times as a wizard again.",}),({1684681918,"Tsath fixed enter messages for PORTAL.",}),({1685044434,"Tsath fixed IMUD tells that could not find the right user colour codes to use due to missing this_user().",}),({1685045537,"Tsath fixed 'colours' cmd to accept pinkfish names as well as 'palette' numbers.",}),({1685137037,"Tsath introduced small bad header fix to HTTP_D.",}),({1685561027,"Tsath added functionality in 'calls' to shorten the list in case of many calls to same function from same object.",}),({1685628033,"Tsath added fixed for GUILD_D, ACCOUNT_D, MONEY_D and M_GUILD_MEMBER (new file).",}),({1686234113,"Tsath added meaningful warnings for adding exit/enter messages to non-existing exits.",}),({1686746915,"Tsath fixed DC's while auto login was enabled to not err.",}),({1686776936,"Tsath fixed a header overflow bug in 'people' cmd.",}),({1686832407,"Tsath extended M_VENDOR and M_VALUABLE with generic object support. Added ^std/weapon/stick as example - see ^std/shopkeeper as well.",}),({1686990564,"Tsath added 'hints' command and hints system.",}),({1687016511,"Tsath cleaned some unused config.h options out of there, and added 4 new ones for XP and leveling control.",}),({1687016645,"Tsath handled a lot of lose ends on FRAMEs.",}),({1687106145,"Tsath updated QUEST_D and admtool quest part.",}),({1687111715,"Tsath updated VERB_OB to handle wrapping better.",}),({1687252797,"Tsath fixed room_chat to not start multiple call_out()",}),({1687441072,"Tsath fixed object/vsupport to support smarter get from containers. It's an experiment, we'll see if it stays.",}),({1687714667,"Tsath added fixed for hints system",}),({1687722276,"Tsath fixed 'ls' to show loaded files again.",}),({1687728303,"Tsath fixed bug in secure/socket and update netstat cmd.",}),({1687881136,"Tsath fixed BOOK M_READABLE and ^std/lima_guide to work. Also added automatic index in books.",}),({1688053960,"Tsath added 'hints ' as a way to ask an item in inventory for a hint.",}),({1688243529,"Jezu added telnet socket keepalive to help prevent telnet socket disconnects under some conditions.",}),({1688316123,"Tsath extended LAST_LOGIN_D to capture IPs for logins, and logins from IPs.",}),({1688319561,"Tsath extended 'whoip' to use new LAST_LOGIN_D functionality.",}),({1688459450,"Jezu fixed a typo in the 'who' command.",}),({1688471783,"Tsath fixed output issue in 'inactive' cmd.",}),({1688534808,"Tsath added USER_D to /data/config/preload to make it load on boot.",}),({1688595774,"Jezu replaced all instances of the '->' class identifier with '.' across all .c files in the library.",}),({1688926905,"Tsath framed 'quests' cmd.",}),({1689284412,"Tsath noticed M_WANDER depends on M_SMARTMOVE if used with livings (non-adversaries). Fixed it so it works, but not happy with the dependency.",}),({1689884200,"Tsath fixed CORPSE to correctly use STATE_D.",}),({1690276093,"Tsath changed 'skills' to work for mobs as well.",}),({1690276106,"Tsath noticed another dependency between M_WANDER and M_ACTIONS. Nice.",}),({1690473148,"Tsath fixed an accent() issue in M_FRAME.",}),({1690493639,"Tsath cleaned up old code and added documentation for M_WIDGETS.",}),({1690733438,"Tsath changed DOC_D to check if directory creation was successful, and instruct an admin how to initiate it if they wanted to use it. Printed at driver start up as well.",}),({1690734305,"Tsath moved the domain_file() and author_file() from sefuns to master.",}),({1690738472,"Tsath fixed another bug in 'whoip'.",}),({1690834017,"Tsath removed recursive call from do_receive() in USER_OB.",}),({1692907740,"Tsath rewrote MESSAGES_D.",}),({1693773032,"Tsath extended M_CONVERSATION to check for ability scores and skill ranks.",}),({1694033733,"Tsath fixed leftover usermenu hanging after auto login.",}),({1694375027,"Tsath updated the greeter in /domains/std/ to reflect current info for where to get the lib (ie 'help release') and where to report FluffOS bugs.",}),({1694719450,"Tsath added targetted emote for M_CONVERSATION.",}),({1695289746,"Tsath extended admtool with 'messages' daemon support.",}),({1695289756,"Tsath extended admtool with info about 'races'.",}),({1695292013,"Tsath reorg'ed the admtool 'daemons' menu into 'game' configuration things and 'daemons' of other kinds.",}),({1695829467,"Tsath updated SKILL_D to scale ranks with config settings in /include/config/skills.h",}),({1695829582,"Tsath added CONFIG_EDITOR for reading/writing structured include files.",}),({1695829829,"Tsath added a 'settings' menu in 'admtool' 'g' 'S' for editing include files under /include/config/*.h.",}),({1696170623,"Tsath extended SKILL_D to support different rank types.",}),({1696172930,"Tsath fixed a bug in player shell var defaults.",}),({1697291112,"Tsath fixed a bug in referral code.",}),({1697489639,"Tsath stripped out all lpscript. There are smarter ways of creating code in 2023.",}),({1698065840,"Tsath added config/user_menu.h and updated USER_OB and USER_MENU to use these features.",}),({1698065942,"Tsath added timeout for people idling in the USER_MENU.",}),({1698482556,"Tsath fixed a bug on same user hanging in login sequence without body causing errors on take-overs.",}),({1698482895,"Tsath externalized config of CRAFTING_D, DAMAGE_D and MESSAGES_D for easier configuration so admtool is not the only way. Along the lines of GUILD_D.",}),({1698589108,"Tsath added new config/equipment.h file.",}),({1698594142,"Tsath added support for showing damaged items in their names as durability drops.",}),({1698594252,"Tsath added new configurable colour DMGED_EQUIP for player defined colours.",}),({1698597853,"Tsath changed repair verb to support items with ANSI colours.",}),({1699185790,"Tsath fixed 'emoji' cmd to show replacements correctly.",}),({1699185823,"Tsath updated EMOJI_D to hold a mapping of default emojis.",}),({1699186038,"Tsath added default methods to METHOD_D.",}),({1699191135,"Tsath added a lot of default data to a lot of daemons, so .o files do not need to be versioned anymore.",}),({1699205382,"Tsath fixed format of showemote after \"->\" to \".\" fix for classes.",}),({1699656292,"Tsath introduced M_NPCSCRIPT for long script tasks for NPCs.",}),({1699656374,"Tsath fixed various issues with M_ACTIONS and M_TRIGGERS.",}),({1699784885,"Tsath implemented multiple SCRIPT_ACTION to shorted the scripts, somewhat.",}),({1699873740,"Tsath fixed wrong width of messages when logging on at first.",}),({1699880644,"Tsath made guests skip the USER_MENU on login/logout.",}),({1699880653,"Tsath made guests not save anymore.",}),({1699883070,"Tsath made sure guests cannot change password either.",}),({1699907200,"Tsath made sure M_CONVERSATION exited whenever M_NPCSCRIPT runs scripts.",}),({1700742378,"Tsath added support for M_WIELDABLE and M_WEARABLE can easily introduce temporary skill increases/decreases when things are wielded or worn.",}),({1700742468,"Tsath fixed max frame width to be 1000 chars. Thanks to Renras for spotting this one.",}),({1700745443,"Tsath removed the centered header from help pages to avoid screen reader issues.",}),({1700749863,"Tsath removed ascii graphics from 'set' command.",}),({1700770718,"Tsath updated 'skills' and 'equip' to show extra info on skill bonuses from items.",}),({1700829525,"Tsath created CLASS_WEAR_INFO and used that across the lib, and got rid of local definitions.",}),({1700943312,"Tsath cleaned up worn_attributes() in M_WEARABLE and 'equip' command.",}),({1701020539,"Tsath removed ascii art from M_ACCOUNTANT.",}),({1701022483,"Tsath made 'time' command callable from menus.",}),({1701024843,"Tsath made a few more fixes more 'equip' 'materials' and added a 'pull OBJ STR' rule to the pull verb, e.g. \"pull visor down\", \"pull hood up\".",}),({1701278447,"Tsath fixed multiple messages in combat not showing right.",}),({1701278491,"Tsath moved all 'blow' damage types to 'bludgeon'.",}),({1701278554,"Tsath did a vsupport fix for environment checks for get.",}),({1701278592,"Tsath changed M_DAMAGE_SINK to properly check resistances and weaknesses.",}),({1701278685,"Tsath added CLIMB_CHALLENGE for doing climb checks. Basically an exit that only works on a successful skill check.",}),({1701340268,"Tsath released Alpha 1.1a2.",}),}),0:({}),]) diff --git a/lib/domains/README b/lib/domains/README index fb342144..90ccba04 100644 --- a/lib/domains/README +++ b/lib/domains/README @@ -1,3 +1,12 @@ This directory is for mud domains. Although domain security has been written, there is not currently a working interface to it. There will be one by the alpha release. + +- std : Standard examples demonstrating features and functions of the mudlib. + +- common: Your shared objects that will be used throughout all the domains. + Consider which objects not to reinvent for each mudlib and put them here. + These folders are provided here as an example. + +- other : Name your own domains and assign Wizards to each domain using the + admtool. Copy the file structure from common for a good start. diff --git a/lib/domains/std/quarrel.c b/lib/domains/std/ammo/quarrel.c similarity index 100% rename from lib/domains/std/quarrel.c rename to lib/domains/std/ammo/quarrel.c diff --git a/lib/domains/std/armour/bracelet.c b/lib/domains/std/armour/bracelet.c index c954cc69..3736d7e8 100644 --- a/lib/domains/std/armour/bracelet.c +++ b/lib/domains/std/armour/bracelet.c @@ -5,6 +5,6 @@ void setup() set_adj("shiny"); set_id("bracelet"); set_long("A shiny bracelet that can be worn on either hand."); - set_slot("hand"); //Any hand will do, we're not picky. + set_slot("hand"); // Any hand will do, we're not picky. set_worn_under(1); } diff --git a/lib/domains/std/armour/chainmail.c b/lib/domains/std/armour/chainmail.c index e1792bf6..cf9af391 100644 --- a/lib/domains/std/armour/chainmail.c +++ b/lib/domains/std/armour/chainmail.c @@ -1,9 +1,5 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -#ifdef USE_BODYSLOTS -#include -#endif - inherit ARMOUR; void setup() diff --git a/lib/domains/std/armour/fullplate.c b/lib/domains/std/armour/fullplate.c new file mode 100644 index 00000000..c1074f69 --- /dev/null +++ b/lib/domains/std/armour/fullplate.c @@ -0,0 +1,17 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit ARMOUR; + +void setup() +{ + set_id("fullplate"); + set_adj("adamantine"); + set_proper_name("adamantine fullplate"); + set_armour_class(random(15) + 2); + set_wearmsg("$N $vstrap on $p adamantine fullplate on."); + set_slot("torso"); + set_resistances((["slashing":10, "bludgeon":10])); + set_salvageable((["metal":100])); + set_also_covers("left arm", "right arm", "left leg", "right leg"); + set_mass(25); +} diff --git a/lib/domains/std/armour/leather_jacket.c b/lib/domains/std/armour/leather_jacket.c index c48f68e9..15c78d9a 100644 --- a/lib/domains/std/armour/leather_jacket.c +++ b/lib/domains/std/armour/leather_jacket.c @@ -10,4 +10,5 @@ void setup() set_resistances((["slashing":10, "bludgeon":10])); set_salvageable((["textile":100])); set_also_covers("left arm", "right arm"); + set_mass(0.5); } diff --git a/lib/domains/std/armour/platemail.c b/lib/domains/std/armour/platemail.c deleted file mode 100644 index 6e151053..00000000 --- a/lib/domains/std/armour/platemail.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -#include - -inherit ARMOUR; - -void set_slot(string); - -void setup() -{ - set_adj("admantine"); - set_id("platemail"); - // platemail acts as if it were plural - set_proper_name("admantine platemail"); -#ifdef USE_SIZE - set_size(LARGE); -#endif -#ifdef USE_MASS - set_mass(LARGE); -#endif - set_slot("torso"); - set_armour_class(15); -} diff --git a/lib/domains/std/armour/scarf.c b/lib/domains/std/armour/scarf.c new file mode 100644 index 00000000..28d9bf0a --- /dev/null +++ b/lib/domains/std/armour/scarf.c @@ -0,0 +1,12 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit ARMOUR; + +void setup() +{ + set_adj("red"); + set_id("scarf"); + set_slot("head"); + set_value(1); + set_weight(0.1); +} \ No newline at end of file diff --git a/lib/domains/std/barney.c b/lib/domains/std/barney.c index 3adc2776..67f60179 100644 --- a/lib/domains/std/barney.c +++ b/lib/domains/std/barney.c @@ -58,7 +58,7 @@ void setup() set_gender(1); set_proper_name("Barney the Dinosaur"); set_in_room_desc("Barney the dinosaur"); - set_long("It's everyone's favorite purple dinosaur!"); + set_long("It's everyone's favourite purple dinosaur!"); emotes = SOUL_D->list_emotes(); adverbs = SOUL_D->get_adverbs(); call_out(( : do_my_thing:), 5); diff --git a/lib/domains/std/bottle.c b/lib/domains/std/bottle.c index 6dde146a..1c8cdf44 100644 --- a/lib/domains/std/bottle.c +++ b/lib/domains/std/bottle.c @@ -1,8 +1,8 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -inherit OBJ; +inherit CONTAINER; inherit M_GETTABLE; -inherit M_DRINK_CONTAINER; +inherit M_FLUID_CONTAINER; inherit M_DRINKABLE; void setup() @@ -13,4 +13,7 @@ void setup() set_num_drinks(5); set_drink_action("$N $vtake a drink from the bottle."); set_last_drink_action("$N $vtake a drink from the bottle, finishing it off."); + set_relations("in", "within"); + set_default_relation("in"); + set_max_capacity(5); } diff --git a/lib/domains/std/apple.c b/lib/domains/std/consumable/apple.c similarity index 100% rename from lib/domains/std/apple.c rename to lib/domains/std/consumable/apple.c diff --git a/lib/domains/std/crafting/advanced_electric_lock_pick.c b/lib/domains/std/crafting/advanced_electric_lock_pick.c index 387fa12b..8e08aa1b 100644 --- a/lib/domains/std/crafting/advanced_electric_lock_pick.c +++ b/lib/domains/std/crafting/advanced_electric_lock_pick.c @@ -1,7 +1,6 @@ inherit MATERIAL; inherit M_LOCKPICK; - // CRAFTING:advanced lock pick void setup() diff --git a/lib/domains/std/crafting/baseball_grenade.c b/lib/domains/std/crafting/baseball_grenade.c index 8d41f0bc..08c4ff46 100644 --- a/lib/domains/std/crafting/baseball_grenade.c +++ b/lib/domains/std/crafting/baseball_grenade.c @@ -2,53 +2,53 @@ inherit MATERIAL; inherit M_THROWABLE; inherit M_DAMAGE_SOURCE; -//CRAFTING:baseball grenade +// CRAFTING:baseball grenade void setup() { - set_id("baseball grenade", "grenade", "baseball"); - set_long("Baseball grenades are hollowed out baseballs filled " - "with oil and fertilizer, which act as an improvised explosive mix.\n" - "Throw it or throw it at someone."); - set_skill_used("combat/thrown/grenade"); - set_combat_messages("combat-firearm"); - set_damage_type("bludgeon"); - set_weapon_class(10); - set_value(40); - set_weight(1); + set_id("baseball grenade", "grenade", "baseball"); + set_long("Baseball grenades are hollowed out baseballs filled " + "with oil and fertilizer, which act as an improvised explosive mix.\n" + "Throw it or throw it at someone."); + set_skill_used("combat/thrown/grenade"); + set_combat_messages("combat-firearm"); + set_damage_type("bludgeon"); + set_weapon_class(10); + set_value(40); + set_weight(1); } mapping query_recipe() { - return (["excess adhesive":2, "baseball":1, "raw fertilizer":2, "waste oil":1, "steel scrap":2]); + return (["excess adhesive":2, "baseball":1, "raw fertilizer":2, "waste oil":1, "steel scrap":2]); } string query_station() { - return "chemistry"; + return "chemistry"; } int calc_damage(int targets) { - return 10+random(10) / targets; + return 10 + random(10) / targets; } void has_been_thrown(object target) { - if (target) - { - set_damage_type("force"); - do_thrown_vital_damage(target, (: calc_damage, 1 :)); - tell_from_inside(environment(),"The baseball grenade detonates near the target in a BANG!\n"); - } - else - { - object targets = filter_array(all_inventory(environment()), (: $1->attackable() && !$1->is_body() :)); - foreach(object t in targets) - { - do_thrown_damage(t, (: calc_damage, sizeof(targets) :)); - tell_from_inside(environment(),"The baseball grenade detonates in the middle of the room with a BANG!\n"); - } - } - remove(); + if (target) + { + set_damage_type("force"); + do_thrown_vital_damage(target, ( : calc_damage, 1 :)); + tell_from_inside(environment(), "The baseball grenade detonates near the target in a BANG!\n"); + } + else + { + object targets = filter_array(all_inventory(environment()), ( : $1->attackable() && !$1->is_body() :)); + foreach (object t in targets) + { + do_thrown_damage(t, ( : calc_damage, sizeof(targets) :)); + tell_from_inside(environment(), "The baseball grenade detonates in the middle of the room with a BANG!\n"); + } + } + remove(); } diff --git a/lib/domains/std/crafting/blackberry_cider.c b/lib/domains/std/crafting/blackberry_cider.c index b57e3bfa..37b7b88c 100644 --- a/lib/domains/std/crafting/blackberry_cider.c +++ b/lib/domains/std/crafting/blackberry_cider.c @@ -1,29 +1,29 @@ inherit DRINK; -//CRAFTING:blackberry cider +// CRAFTING:blackberry cider void setup() { - set_id("blackberry cider", "cider"); - set_long("A bottle of blackberry cider - lightly fermented. Smells quite good!."); - set_num_drinks(4); - set_heal_value(3); - set_weight(1); - set_drink_action("$N $vtake a swig of blackberry cider."); - set_last_drink_action("$N $vtake a drink of blackberry cider, finishing the bottle off."); + set_id("blackberry cider", "cider"); + set_long("A bottle of blackberry cider - lightly fermented. Smells quite good!."); + set_num_drinks(4); + set_heal_value(3); + set_weight(1); + set_drink_action("$N $vtake a swig of blackberry cider."); + set_last_drink_action("$N $vtake a drink of blackberry cider, finishing the bottle off."); } mapping query_recipe() { - return (["boiled water":1, "wild blackberry":1, "wood scrap":1]); + return (["boiled water":1, "wild blackberry":1, "wood scrap":1]); } string query_station() { - return "cooking"; + return "cooking"; } string get_extra_long() { - return ::get_extra_long(); + return ::get_extra_long(); } diff --git a/lib/domains/std/crafting/boiled_water.c b/lib/domains/std/crafting/boiled_water.c index 89fc677b..12828d7f 100644 --- a/lib/domains/std/crafting/boiled_water.c +++ b/lib/domains/std/crafting/boiled_water.c @@ -1,27 +1,27 @@ inherit DRINK; -//CRAFTING:boiled water +// CRAFTING:boiled water void setup() { - set_id("boiled water","water"); - set_long("This is a bottle of boiled. There are little pieces in here, but it should be safe to drink."); - set_num_drinks(4); - set_heal_value(1); - set_weight(1); + set_id("boiled water", "water"); + set_long("This is a bottle of boiled. There are little pieces in here, but it should be safe to drink."); + set_num_drinks(4); + set_heal_value(1); + set_weight(1); } mapping query_recipe() { - return (["wood scrap":1, "dirty water":2]); + return (["wood scrap":1, "dirty water":2]); } int is_material() { - return 1; + return 1; } string query_station() { - return "cooking"; + return "cooking"; } \ No newline at end of file diff --git a/lib/domains/std/crafting/electric_lock_pick.c b/lib/domains/std/crafting/electric_lock_pick.c index 49bc2cd6..70b67bfa 100644 --- a/lib/domains/std/crafting/electric_lock_pick.c +++ b/lib/domains/std/crafting/electric_lock_pick.c @@ -1,32 +1,31 @@ inherit MATERIAL; inherit M_LOCKPICK; - -//CRAFTING:simple lock pick +// CRAFTING:simple lock pick void setup() { - set_id("lock pick", "lock pick", "lockpick", "pick"); - set_adj("simple", "electric"); - set_long("A snap pick, also known as lock pick, or electric lock pick, " - "is a tool that can be used to open a locks " - "without using the key."); - set_lockpick_strength(50); - set_break_chance(30); - set_value(50); + set_id("lock pick", "lock pick", "lockpick", "pick"); + set_adj("simple", "electric"); + set_long("A snap pick, also known as lock pick, or electric lock pick, " + "is a tool that can be used to open a locks " + "without using the key."); + set_lockpick_strength(50); + set_break_chance(30); + set_value(50); } int nobody_will_buy() { - return 1; + return 1; } mapping query_recipe() { - return (["soft pvc":4, "molded plastic":2, "circuit":5, "waste acid":1]); + return (["soft pvc":4, "molded plastic":2, "circuit":5, "waste acid":1]); } string query_station() { - return "electronics"; + return "electronics"; } diff --git a/lib/domains/std/crafting/electronics_kit_simple.c b/lib/domains/std/crafting/electronics_kit_simple.c index c06566a0..bc18e736 100644 --- a/lib/domains/std/crafting/electronics_kit_simple.c +++ b/lib/domains/std/crafting/electronics_kit_simple.c @@ -1,25 +1,25 @@ inherit MATERIAL; -//CRAFTING:simple electronics kit +// CRAFTING:simple electronics kit void setup() { - set_id("electronics kit","kit"); - set_adj("simple"); - set_long("This small electronics kit can be used to upgrade simple electronics."); + set_id("electronics kit", "kit"); + set_adj("simple"); + set_long("This small electronics kit can be used to upgrade simple electronics."); } mapping query_recipe() { - return (["molded plastic":1, "circuit":5,"waste acid":1]); + return (["molded plastic":1, "circuit":5, "waste acid":1]); } int nobody_will_buy() { - return 1; + return 1; } string query_station() { - return "workshop"; + return "workshop"; } \ No newline at end of file diff --git a/lib/domains/std/crafting/mediocre_electric_lock_pick.c b/lib/domains/std/crafting/mediocre_electric_lock_pick.c index cdf49e6a..fdd2f108 100644 --- a/lib/domains/std/crafting/mediocre_electric_lock_pick.c +++ b/lib/domains/std/crafting/mediocre_electric_lock_pick.c @@ -1,32 +1,31 @@ inherit MATERIAL; inherit M_LOCKPICK; - -//CRAFTING:mediocre lock pick +// CRAFTING:mediocre lock pick void setup() { - set_id("lock pick", "lock pick", "lockpick", "pick"); - set_adj("mediocre", "electric"); - set_long("A snap pick, also known as lock pick, or electric lock pick, " - "is a tool that can be used to open a locks " - "without using the key."); - set_lockpick_strength(200); - set_break_chance(20); - set_value(200); + set_id("lock pick", "lock pick", "lockpick", "pick"); + set_adj("mediocre", "electric"); + set_long("A snap pick, also known as lock pick, or electric lock pick, " + "is a tool that can be used to open a locks " + "without using the key."); + set_lockpick_strength(200); + set_break_chance(20); + set_value(200); } int nobody_will_buy() { - return 1; + return 1; } mapping query_recipe() { - return (["soft pvc":6, "molded plastic":4, "circuit":7, "waste acid":2]); + return (["soft pvc":6, "molded plastic":4, "circuit":7, "waste acid":2]); } string query_station() { - return "electronics"; + return "electronics"; } diff --git a/lib/domains/std/crafting/medium_battery.c b/lib/domains/std/crafting/medium_battery.c index b3dbb207..aadcf903 100644 --- a/lib/domains/std/crafting/medium_battery.c +++ b/lib/domains/std/crafting/medium_battery.c @@ -1,24 +1,25 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -//CRAFTING:medium battery +// CRAFTING:medium battery inherit BATTERY; void setup() { - set_id("battery"); - add_adj("medium","6-volt"); - set_long("This is a medium-sized improvised 6-volt battery for an electronic device or other low volt equipment. The typical capacity would be between 2000-3000 mAh when it was made."); - set_max_mah(3000); - set_random_mah(); + set_id("battery"); + add_adj("medium", "6-volt"); + set_long("This is a medium-sized improvised 6-volt battery for an electronic device or other low volt equipment. " + "The typical capacity would be between 2000-3000 mAh when it was made."); + set_max_mah(3000); + set_random_mah(); } mapping query_recipe() { - return (["molded plastic":3, "waste acid":2, "lead scrap":2, "copper scrap":2, "steel scrap":4]); + return (["molded plastic":3, "waste acid":2, "lead scrap":2, "copper scrap":2, "steel scrap":4]); } string query_station() { - return "chemistry"; + return "chemistry"; } diff --git a/lib/domains/std/crafting/mongoose_cobbler.c b/lib/domains/std/crafting/mongoose_cobbler.c index 7bae9a93..544579ec 100644 --- a/lib/domains/std/crafting/mongoose_cobbler.c +++ b/lib/domains/std/crafting/mongoose_cobbler.c @@ -1,24 +1,25 @@ inherit FOOD; -//CRAFTING:mongoose cobbler +// CRAFTING:mongoose cobbler void setup() { - set_id("mongoose cobbler","cobbler"); - set_long("A thick-crusted pie that uses mongoose berries. The lite yellow mongoose berries gives the cobbler a beuatiful yellow shine."); - set_adj("fresh"); - set_num_eats(5); - set_heal_value(3); - set_weight(1); - set_last_eat_action("$N $vgrab a quick piece of mongoose cobbler, and $vchuck it into $p mouth."); + set_id("mongoose cobbler", "cobbler"); + set_long("A thick-crusted pie that uses mongoose berries. The lite yellow mongoose berries gives the cobbler a " + "beuatiful yellow shine."); + set_adj("fresh"); + set_num_eats(5); + set_heal_value(3); + set_weight(1); + set_last_eat_action("$N $vgrab a quick piece of mongoose cobbler, and $vchuck it into $p mouth."); } mapping query_recipe() { - return (["wood scrap":1, "mongoose berry":5]); + return (["wood scrap":1, "mongoose berry":5]); } string query_station() { - return "cooking"; + return "cooking"; } \ No newline at end of file diff --git a/lib/domains/std/crafting/pigeon_spit.c b/lib/domains/std/crafting/pigeon_spit.c index 828d9285..9d76e58e 100644 --- a/lib/domains/std/crafting/pigeon_spit.c +++ b/lib/domains/std/crafting/pigeon_spit.c @@ -1,28 +1,28 @@ inherit FOOD; -//CRAFTING:pigeon on a spit +// CRAFTING:pigeon on a spit void setup() { - set_id("pigeon on a spit","spit","pigeon"); - set_adj("roasted"); - set_long("Two small pieces of pigeon breast, spit roasted to perfection. Not a large meal, but looks delicious."); - set_num_eats(1+random(2)); - set_heal_value(2); - set_weight(0.4); + set_id("pigeon on a spit", "spit", "pigeon"); + set_adj("roasted"); + set_long("Two small pieces of pigeon breast, spit roasted to perfection. Not a large meal, but looks delicious."); + set_num_eats(1 + random(2)); + set_heal_value(2); + set_weight(0.4); } mapping query_recipe() { - return (["wood scrap":1, "piece of pigeon meat":2]); + return (["wood scrap":1, "piece of pigeon meat":2]); } int is_material() { - return 1; + return 1; } string query_station() { - return "cooking"; + return "cooking"; } \ No newline at end of file diff --git a/lib/domains/std/crafting/small_battery.c b/lib/domains/std/crafting/small_battery.c index 89870ec9..8fe92fc5 100644 --- a/lib/domains/std/crafting/small_battery.c +++ b/lib/domains/std/crafting/small_battery.c @@ -1,24 +1,25 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -//CRAFTING:small battery +// CRAFTING:small battery inherit BATTERY; void setup() { - set_id("battery"); - add_adj("small","6-volt"); - set_long("This is a small improvised 6-volt battery for an electronic device or other low volt equipment. The typical capacity would be between 500-1000 mAh when it was made."); - set_max_mah(1000); - set_random_mah(); + set_id("battery"); + add_adj("small", "6-volt"); + set_long("This is a small improvised 6-volt battery for an electronic device or other low volt equipment. The " + "typical capacity would be between 500-1000 mAh when it was made."); + set_max_mah(1000); + set_random_mah(); } mapping query_recipe() { - return (["molded plastic":2, "waste acid":1, "lead scrap":1, "copper scrap":1, "steel scrap":2]); + return (["molded plastic":2, "waste acid":1, "lead scrap":1, "copper scrap":1, "steel scrap":2]); } string query_station() { - return "chemistry"; + return "chemistry"; } diff --git a/lib/domains/std/crafting/syringe_small.c b/lib/domains/std/crafting/syringe_small.c index 5f132178..ffc666a8 100644 --- a/lib/domains/std/crafting/syringe_small.c +++ b/lib/domains/std/crafting/syringe_small.c @@ -1,22 +1,22 @@ inherit MATERIAL; -//CRAFTING:small syringe +// CRAFTING:small syringe void setup() { - set_id("syringe"); - set_adj("small"); - set_long("This is a pump consisting of a sliding plunger that fits tightly in a tube. " - "The plunger can be pulled and pushed inside the precise cylindrical tube, or " - "barrel, letting the syringe draw in or expel a liquid."); + set_id("syringe"); + set_adj("small"); + set_long("This is a pump consisting of a sliding plunger that fits tightly in a tube. " + "The plunger can be pulled and pushed inside the precise cylindrical tube, or " + "barrel, letting the syringe draw in or expel a liquid."); } mapping query_recipe() { - return (["soft pvc":2, "molded plastic":1, "raw fertilizer":1]); + return (["soft pvc":2, "molded plastic":1, "raw fertilizer":1]); } string query_station() { - return "chemistry"; + return "chemistry"; } \ No newline at end of file diff --git a/lib/domains/std/crafting_station.c b/lib/domains/std/crafting_station.c deleted file mode 100644 index 0e3ad0d2..00000000 --- a/lib/domains/std/crafting_station.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -/* A basic piece of furniture. This one happens to be a bed (go figure). - * It also has an example of a use of add_method, as this really is a complex - * exit. */ -inherit FURNITURE; -inherit M_CRAFTING; - -void mudlib_setup() -{ - ::mudlib_setup(); - set_id("crafting bench", "bench"); - set_in_room_desc("A crafting bench is positioned against the wall"); - add_relation("under", LARGE); - set_default_relation("under"); - set_long("This is " + a_short() + - " that allows you to create or break " - "down materials. Materials are all in your " - "component 'pouch', and can be gained by salvaging items you " - "find (salvaging items do not require " + - a_short() + - "):\n\n" - "%^YELLOW%^Upgrade components in your pouch by:%^RESET%^\n" - "\tcraft 2 skin patch\n" - "\tcraft metal fragment\n" - "%^YELLOW%^Salvage components in your pouch by:%^RESET%^\n" - "\tsalvage metal bar\n" - "\tsalvage 4 metal splinters\n" - "\tsalvage damaged dagger (does not require a bench)\n" - "\tsalvage all (see 'help equip')\n" - "\n"); - set_max_capacity(LARGE, "under"); - /* This probably isn't a very good capacity for under */ - add_method("crawl under", this_object(), ( : enter_check:), ({"$N $vcrawl under the crafting bench."})); -} diff --git a/lib/domains/std/effects/base_disease.c b/lib/domains/std/effect/base_disease.c similarity index 100% rename from lib/domains/std/effects/base_disease.c rename to lib/domains/std/effect/base_disease.c diff --git a/lib/domains/std/effects/cold.c b/lib/domains/std/effect/cold.c similarity index 100% rename from lib/domains/std/effects/cold.c rename to lib/domains/std/effect/cold.c diff --git a/lib/domains/std/furniture/chemistry_station.c b/lib/domains/std/furniture/chemistry_station.c index f74d9892..dfa2df7b 100644 --- a/lib/domains/std/furniture/chemistry_station.c +++ b/lib/domains/std/furniture/chemistry_station.c @@ -4,17 +4,18 @@ inherit CRAFTING_STATION; void setup() { - set_id("chemistry station"); - set_in_room_desc("A chemistry crafting station is positioned against the wall."); - setup_recipes("chemistry"); + set_id("chemistry station"); + set_in_room_desc("A chemistry crafting station is positioned against the wall."); + setup_recipes("chemistry"); } string get_station_description() { - return "The chemistry crafting station is complete with glass bulbs, Bunzen burners, glass vessels and a sink and various analysis equipment."; + return "The chemistry crafting station is complete with glass bulbs, Bunzen burners, glass vessels and a sink and " + "various analysis equipment."; } string query_hint() { - return "Look at the station."; + return "Look at the station."; } \ No newline at end of file diff --git a/lib/domains/std/furniture/cooking_station.c b/lib/domains/std/furniture/cooking_station.c index 29e41a1f..f1e6a548 100644 --- a/lib/domains/std/furniture/cooking_station.c +++ b/lib/domains/std/furniture/cooking_station.c @@ -4,17 +4,17 @@ inherit CRAFTING_STATION; void setup() { - set_id("cooking station"); - set_in_room_desc("A cooking station is positioned against the wall."); - setup_recipes("cooking"); + set_id("cooking station"); + set_in_room_desc("A cooking station is positioned against the wall."); + setup_recipes("cooking"); } string get_station_description() { - return "The cooking station is well, a kitchen."; + return "The cooking station is well, a kitchen."; } string query_hint() { - return "Look at the station."; + return "Look at the station."; } \ No newline at end of file diff --git a/lib/domains/std/furniture/electronics_station.c b/lib/domains/std/furniture/electronics_station.c index d914a7cb..9d5e9db0 100644 --- a/lib/domains/std/furniture/electronics_station.c +++ b/lib/domains/std/furniture/electronics_station.c @@ -4,17 +4,18 @@ inherit CRAFTING_STATION; void setup() { - set_id("electronics station"); - set_in_room_desc("An electronics crafting station is positioned against the wall."); - setup_recipes("electronics"); + set_id("electronics station"); + set_in_room_desc("An electronics crafting station is positioned against the wall."); + setup_recipes("electronics"); } string get_station_description() { - return "The electronics crafting station is complete with acid baths and 3D printers for developing new circuit boards as well as electronics testign devices."; + return "The electronics crafting station is complete with acid baths and 3D printers for developing new circuit " + "boards as well as electronics testign devices."; } string query_hint() { - return "Look at the station."; + return "Look at the station."; } \ No newline at end of file diff --git a/lib/domains/std/furniture/weapon_station.c b/lib/domains/std/furniture/weapon_station.c index 4dad8871..93e9e108 100644 --- a/lib/domains/std/furniture/weapon_station.c +++ b/lib/domains/std/furniture/weapon_station.c @@ -4,17 +4,17 @@ inherit CRAFTING_STATION; void setup() { -set_id("Weapon workbench"); -set_in_room_desc("A weapon workbench is positioned against the wall."); -setup_recipes("weapon"); + set_id("Weapon workbench"); + set_in_room_desc("A weapon workbench is positioned against the wall."); + setup_recipes("weapon"); } string get_station_description() { -return "On this workbench you can craft weapons and weapon mods."; + return "On this workbench you can craft weapons and weapon mods."; } string query_hint() { - return "Look at the station."; + return "Look at the station."; } diff --git a/lib/domains/std/guild/favour/std_favour.c b/lib/domains/std/guild/favour/std_favour.c new file mode 100644 index 00000000..10272bba --- /dev/null +++ b/lib/domains/std/guild/favour/std_favour.c @@ -0,0 +1,149 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** Tsath 2020 +** Favour +*/ + +#include + +private +string name; +private +int tier; +private +string guild; +private +object mission_ctrl; +private +int favour; +private +int length; +private +string description; +private +int ends_at = time(); + +void set_favour(int f) +{ + favour = f; +} + +int query_favour() +{ + return favour; +} + +int query_tier() +{ + return tier; +} + +void set_length(int l) +{ + length = l; +} + +int query_length() +{ + return length; +} + +void set_description(string d) +{ + description = d; +} + +string query_description() +{ + return description; +} + +void set_mission_data(int t, string n) +{ + tier = t; + name = n; +} + +string query_guild() +{ + return guild; +} + +void remove() +{ + destruct(); +} + +int apply_favour() +{ + return 1; +} + +void end_favour() +{ + remove(); +} + +void set_ends_at(int ea) +{ + TBUG("Ends at set to: " + ea); + ends_at = ea; +} + +int query_ends_at() +{ + return ends_at; +} + +int ends_in() +{ + int left = ends_at - time(); + return left > 0 ? left : 0; +} + +object query_mission_ctrl() +{ + if (!mission_ctrl) + mission_ctrl = GUILD_D->mission_ctrl_npc(guild); + mission_ctrl->set_active_mission(this_object()); + + return mission_ctrl; +} + +void channel_msg(string s) +{ + if (!guild) + return; + CHANNEL_D->deliver_channel(guild, query_mission_ctrl()->query_name() + ": " + s); +} + +void notify_guild_members(string s) +{ + object *members = filter_array(bodies(), ( : member_array(guild, $1->guilds_belong()) != -1 :)); + members = filter_array(members, ( + : present("guild_artefact_ob", $1) && + member_array(guild, present("guild_artefact_ob", $1)->query_guilds()) != -1 + :)); + tell(members, s); +} + +void artefact_message(string m) +{ + notify_guild_members("Your " + GUILD_ARTEFACT + " twirples, \"%^GREEN%^" + upper_case(m) + ".%^RESET%^\".\n"); +} + +void setup(string g) +{ +} + +void create(string g) +{ + guild = g; + setup(g); + + if (!clonep()) + return; + query_mission_ctrl(); + call_out("artefact_message", 2, guild + " new buff \"" + name + "\""); +} \ No newline at end of file diff --git a/lib/domains/std/guild/favour/xp_buff_low.c b/lib/domains/std/guild/favour/xp_buff_low.c new file mode 100644 index 00000000..bf35ef28 --- /dev/null +++ b/lib/domains/std/guild/favour/xp_buff_low.c @@ -0,0 +1,27 @@ +inherit "/domains/std/guild/favour/std_favour"; + +// FAVOUR: XP Buff Small + +void setup() +{ + set_mission_data(1, "XP Buff Small"); + set_length(30); + set_description("30 minutes of 20% XP buff for ."); + set_favour(500); +} + +int apply_favour() +{ + object *people = GUILD_D->belongs_to(query_guild()); + people->set_guild_xp_buff(20); + TBUG("setting 20% on " + sizeof(people) + " people."); + TBUG("Ends in:" + ends_in()); + return ends_in(); +} + +void end_favour() +{ + object *people = GUILD_D->belongs_to(query_guild()); + people->clear_guild_xp_buff(); + ::end_favour(); +} diff --git a/lib/domains/std/guild/item/artefact.c b/lib/domains/std/guild/item/artefact.c new file mode 100644 index 00000000..bd4f2f84 --- /dev/null +++ b/lib/domains/std/guild/item/artefact.c @@ -0,0 +1,121 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +#include + +inherit CONTAINER; +inherit M_GETTABLE; + +int level = 1; +string *guild_modules = ({}); + +void module_received(); +void artefact_moved(); + +void setup() +{ + set_id(GUILD_ARTEFACT, "guild_artefact_ob"); + add_adj("L" + level); + set_long("A simple " + GUILD_ARTEFACT + + ". It looks like it is working and usable. " + "This simple L1 model comes with one module built in, and " + + level + " slot for expansion modules."); + add_relation("in"); + set_default_relation("in"); + set_max_capacity(10); + set_mass(0.1); + add_hook("object_arrived", ( : module_received:)); + add_hook("move", ( : artefact_moved:)); + set_value(120); +} + +string *query_guilds() +{ + if (!sizeof(guild_modules) && sizeof(all_inventory())) + { + foreach (object m in all_inventory()) + { + guild_modules += ({m->query_module_name()}); + } + guild_modules -= ({0}); + } + + return guild_modules; +} + +string get_extra_long() +{ + string el = "The following modules are installed:\n"; + object *modules = all_inventory(); + if (!sizeof(modules)) + return ""; + foreach (object m in modules) + { + el += "\t" + m->query_module_name() + "\n"; + } + return el; +} + +int inventory_visible() +{ + return 0; +} + +void module_received() +{ + this_body()->simple_action("$N $vinsert a " + GUILD_ARTEFACT_PLUGIN + " into a small hatch on $p " + GUILD_ARTEFACT + + ". It disappears with a snap."); +} + +void owner_killed(object ob) +{ + TBUG("Mob killed: " + ob); +} + +void artefact_moved() +{ + TBUG("Environment: " + environment()); + if (environment() && environment()->is_body()) + environment()->add_hook("i_killed", ( : owner_killed:)); + else + environment()->remove_hook("i_killed", ( : owner_killed:)); +} + +string add_article(string s) +{ + return "an " + s; +} + +mixed direct_use_obj() +{ + return 1; +} + +void do_use() +{ + object artefact_menu = new (ARTEFACT_MENU, level); + object *modules = all_inventory(); + if (sizeof(modules)) + artefact_menu->init_guild_modules(modules); + artefact_menu->start_menu(); +} + +mixed indirect_put_obj_wrd_obj(object ob1, string wrd, object ob2) +{ + if (ob1 && ob1->is_artefact_module()) + { + object *modules = all_inventory(); + if (!ob1->query_module_name()) + { + return "#The module is not programmed, so inserting it now would be a waste."; + } + if (sizeof(modules) < level) + return 1; + } + return "#That doesn't seem to fit into the " + GUILD_ARTEFACT + "."; +} + +// Can be put into things. +mixed indirect_get_obj_from_obj(object ob1, string wrd, object ob2) +{ + return "#Things inserted into the " + GUILD_ARTEFACT + " seems to be permanently installed."; +} \ No newline at end of file diff --git a/lib/domains/std/guild/item/artefact_module.c b/lib/domains/std/guild/item/artefact_module.c new file mode 100644 index 00000000..c45c27fa --- /dev/null +++ b/lib/domains/std/guild/item/artefact_module.c @@ -0,0 +1,58 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +#include + +inherit OBJ; +inherit M_GETTABLE; + +string guild; +string letter; + +void setup(string g) +{ + if (g) + guild = g; + set_id(GUILD_ARTEFACT_PLUGIN, "module"); + set_adj(guild); + add_save(({"guild", "letter"})); + set_value(50); +} + +string long() +{ + return "A " + GUILD_ARTEFACT_PLUGIN + ". Insert it into a " + GUILD_ARTEFACT + " for it to work." + + (guild ? " This one has a label on it saying '" + capitalize(guild) + "'." + : " This " + GUILD_ARTEFACT_PLUGIN + " is empty, ready to be filled."); +} + +int is_artefact_module() +{ + return 1; +} + +void set_module_name(string n) +{ + guild = n; + set_adj(guild); +} + +void set_letter(string l) +{ + letter = l; +} + +string query_letter() +{ + return letter || guild[0..0]; +} + +string query_module_name() +{ + return guild; +} + +// Can be put into things. +mixed direct_put_obj_wrd_obj(object ob1, string wrd, object ob2) +{ + return 1; +} diff --git a/lib/domains/std/guild/item/favour_board.c b/lib/domains/std/guild/item/favour_board.c new file mode 100644 index 00000000..a4188d8e --- /dev/null +++ b/lib/domains/std/guild/item/favour_board.c @@ -0,0 +1,72 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit OBJ; +inherit M_WIDGETS; + +string guild; +mapping contrib; + +#define MAX_ON_BOARD 20 + +void setup(string g) +{ + set_id("favour board", "board"); + set_attached(1); + guild = g; +} + +int sort_contrib(string id1, string id2) +{ + if (contrib[id1] > contrib[id2]) + return -1; + if (contrib[id1] < contrib[id2]) + return 1; + return 0; +} + +string *contributors() +{ + if (!contrib) + return ({}); + return sort_array(keys(contrib), ( : sort_contrib:))[0..MAX_ON_BOARD]; +} + +string long() +{ + string long_desc = ""; + int total = GUILD_D->query_favour_score(guild); + mapping buff_list = GUILD_D->query_buff_list(); + + contrib = GUILD_D->query_favour_contribution(guild); + long_desc += simple_divider(); + long_desc += " %^YELLOW%^" + upper_case(guild) + " - Favour Board Top " + MAX_ON_BOARD + "%^RESET%^.\n\n"; + + foreach (string p in contributors()) + { + long_desc += sprintf("%20s %d\n", p, contrib[p]); + } + long_desc += "\n Available favour " + total + "\n"; + + foreach (int tier in sort_array(keys(buff_list), 1)) + { + mapping guilds = buff_list[tier]; + if (guilds[guild]) + { + long_desc += "\n %^YELLOW%^ACTIVE TIER " + tier + " BUFFS:%^RESET%^\n"; + foreach (string name, int expire in guilds[guild]) + { + long_desc += sprintf("%20s for %20s more.\n", name, time_to_string(expire - time())); + } + long_desc += "\n"; + } + } + long_desc += simple_divider(); + long_desc += "Leader: " + capitalize(GOVERNANCE_D->query_leader(guild)) + " Managers: " + + implode(map(GOVERNANCE_D->query_managers(guild), ( + : capitalize($1) + :)), + " ") + + "\n"; + + return long_desc; +} \ No newline at end of file diff --git a/lib/domains/std/guild/item/ledger.c b/lib/domains/std/guild/item/ledger.c new file mode 100644 index 00000000..0356501b --- /dev/null +++ b/lib/domains/std/guild/item/ledger.c @@ -0,0 +1,47 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit OBJ; +inherit M_WIDGETS; + +string guild; +mapping contrib; + +void setup(string g) +{ + set_id("open ledger", "ledger"); + set_attached(1); + set_long("It's the ledger of " + capitalize(g) + ", try reading it?"); + guild = g; +} + +void read_entry(string s) +{ + string long_desc = ""; + string *logs = GUILD_D->guild_log(guild); + + if (!sizeof(logs)) + { + write("The ledger is blank.\n"); + return; + } + long_desc += simple_divider(); + long_desc += "%^YELLOW%^" + implode(explode(upper_case(guild), ""), " ") + "%^RESET%^ - Ledger.\n\n"; + + foreach (string l in logs) + { + long_desc += l + "\n"; + } + long_desc += simple_divider(); + + more(long_desc); +} + +void read() +{ + read_entry(0); +} + +mixed direct_read_obj() +{ + return 1; +} \ No newline at end of file diff --git a/lib/domains/std/guild/item/storage_box.c b/lib/domains/std/guild/item/storage_box.c new file mode 100644 index 00000000..a4f4a637 --- /dev/null +++ b/lib/domains/std/guild/item/storage_box.c @@ -0,0 +1,123 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit OBJ; +inherit M_WIDGETS; + +string guild; +mapping contrib; + +void setup(string g) +{ + set_id("storage box", "storage", "box"); + add_adj("large", "black"); + set_in_room_desc("A large black storage box."); + guild = g; +} + +void add_money(string m, int number) +{ + TBUG("Adding " + number + " " + m); + GUILD_D->add_material(guild, "dollars", number); +} + +void add_materials(string m, int number) +{ + TBUG("Adding " + number + " " + m); + GUILD_D->add_material(guild, m, number); + GUILD_D->add_favour(this_body(), guild, number); +} + +int can_hold_money() +{ + return 1; +} + +int can_hold_materials() +{ + return 1; +} + +string long() +{ + string long_desc = "The " + capitalize(guild) + " storage box contains:\n"; + mapping p_materials = GUILD_D->query_materials(guild); + string *mat_cats = CRAFTING_D->query_material_categories(); + int width = this_user()->query_screen_width() - 7; + int per_row = width / 20; + int total = 0; + int total_types = 0; + int total_cats = 0; + int content = 0; + string divider = simple_divider(); + + if (!sizeof(mat_cats)) + { + return "No materials defined, yet.\n"; + } + if (!p_materials) + return "The box is sadly empty right now.\n"; + + foreach (string cat in mat_cats) + { + total_types += sizeof(CRAFTING_D->query_materials(cat)); + } + + foreach (int c in values(p_materials)) + { + total += c; + if (c > 0) + total_cats++; + } + total -= p_materials["dollars"]; + + long_desc += divider; + long_desc += sprintf("%%^CYAN%%^%s%%^RESET%%^ - %d materials in %d out of %d types\n", + upper_case(guild) + " STORAGE", total, total_cats, total_types); + long_desc += divider; + foreach (string category in mat_cats) + { + mapping mats = CRAFTING_D->query_materials(category); + int line = 0; + int count = 0; + string mat_line = ""; + foreach (string mat in mats) + { + if (member_array(mat, keys(p_materials)) != -1) + count++; + if (p_materials[mat] > 0) + { + mat_line += sprintf("%15s: %-4d ", capitalize(mat), p_materials[mat]); + line++; + } + + if (line == per_row) + { + mat_line += "\n"; + line = 0; + } + } + if (line != 0) + mat_line += "\n"; + if (count) + { + // printf("%%^CYAN%%^%-7s%%^RESET%%^ [%d/%d]\n", capitalize(category), count, sizeof(mats)); + long_desc += sprintf("%%^CYAN%%^%s%%^RESET%%^\n", capitalize(pluralize(category))); + long_desc += sprintf(mat_line + "\n"); + content = 1; + } + } + long_desc += divider; + long_desc += "Money in storage: $" + p_materials["dollars"] + "\n\n"; + + return long_desc; +} + +mixed direct_put_wrd_str_in_obj(string wrd, string str, object ob) +{ + return 1; +} + +mixed direct_put_wrd_str_into_obj(string wrd, string str, object ob) +{ + return 1; +} \ No newline at end of file diff --git a/lib/domains/std/guild/mission/making_bullets.c b/lib/domains/std/guild/mission/making_bullets.c new file mode 100644 index 00000000..d35c6153 --- /dev/null +++ b/lib/domains/std/guild/mission/making_bullets.c @@ -0,0 +1,133 @@ +inherit "/domains/std/guild/missions/std_mission"; + +// MISSION: Making Bullets +int steel_total = 0; +int lead_total = 0; +int minimum_steel = 30; +int minimum_lead = 20; +int minimum_contrib = 10; + +string hiscore_who; +int hiscore; +mapping scraps_received = ([]); + +void setup() +{ + set_length(15); + set_mission_data(1, "Making Bullets"); + set_receive_items(1); + set_favour(500); + set_description( + "Help gather steel and lead for bullet casings. We need to produce ammunition for " + "our weapons! We need ITEMS to salvage into at least " + + minimum_steel + " steel scraps and " + minimum_lead + " lead scraps " + "to produce the bullets we need.\n\n" + + "REWARD: Ammunition will be rewarded to people who contribute over " + minimum_contrib + " scraps of any kind." + + "\n\nNOTICE: Adding metal scraps to our storage will *not* help for this mission."); + set_materials("steel scrap:10,wood scrap:30,waste oil:5"); +} + +void begin_mission() +{ + channel_msg("New mission has begun: " + replace_string(query_description(), "", query_guild())); +} + +int run_mission() +{ + string hi_str; + if (hiscore_who) + hi_str = "Current leading contributor is " + hiscore_who + " with " + hiscore + " metal scraps."; + + if (complete()) + channel_msg(query_name() + " mission is COMPLETED with " + query_length() + " of " + query_original_length() + + " minutes left. " + "You can still contribute to earn favour. Our total is now at " + steel_total + + " steel and " + lead_total + " lead scraps. " + (hi_str ? hi_str : "")); + else + { + channel_msg(query_name() + " mission is ongoing with " + query_length() + " of " + query_original_length() + + " minutes left. " + "Find items that can be salvaged to steel and lead scraps and give them to me. "); + channel_msg(steel_total + " steel and " + lead_total + " lead scraps received of minimum " + minimum_steel + + " steel and " + minimum_lead + " lead. " + (hi_str ? hi_str : "")); + } + return ::run_mission(); +} + +void receive_item(object ob) +{ + object *salvage; + object *steel, *lead; + + if (ob->is_salvageable()) + { + salvage = CRAFTING_D->salvage_parts(ob); + if (!sizeof(salvage)) + { + query_mission_ctrl()->simple_action("$N $vtell $t, \"Sorry, but that item gave me nothing.\".", this_body()); + return; + } + steel = filter_array(salvage, ( : $1->id("steel scrap") :)); + lead = filter_array(salvage, ( : $1->id("lead scrap") :)); + salvage -= steel; + salvage -= lead; + steel_total += sizeof(steel); + lead_total += sizeof(lead); + if (!scraps_received[this_body()->query_name()]) + scraps_received[this_body()->query_name()] = sizeof(steel) + sizeof(lead); + else + scraps_received[this_body()->query_name()] += sizeof(steel) + sizeof(lead); + + if (scraps_received[this_body()->query_name()] > hiscore) + { + hiscore = scraps_received[this_body()->query_name()]; + hiscore_who = this_body()->query_name(); + } + + if (steel_total >= minimum_steel && lead_total >= minimum_lead && !complete()) + { + set_complete(); + channel_msg("Our " + query_name() + " mission is successful, " + query_favour() + " favour gained!"); + } + + foreach (object s in salvage) + { + GUILD_D->add_material(query_guild(), s); + } + + if (sizeof(steel)) + GUILD_D->add_material(query_guild(), "steel scrap", sizeof(steel)); + if (sizeof(lead)) + GUILD_D->add_material(query_guild(), "lead scrap", sizeof(lead)); + } + else + { + query_mission_ctrl()->targetted_action("$N $vgive the item back to $t, \"Sorry, I cannot salvage that item?\".", + this_body()); + ob->move(this_body()); + return; + } +} + +void end_mission() +{ + int f = query_favour(); + float favour_pr_scrap = 1.0 * f / (lead_total + steel_total || 1); + + foreach (string player, int num in scraps_received) + { + object body = find_body(lower_case(player)); + if (body) + { + int fave = to_int(num * favour_pr_scrap); + if (complete()) + { + GUILD_D->add_favour(body, query_guild(), fave); + tell(body, "You received " + fave + " favour points with " + capitalize(query_guild()) + ".\n"); + } + else + { + tell(body, "You contribution is noted, bad sadly we did not meet the target for the mission.\n"); + } + } + } + + ::end_mission(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/mission/std_mission.c b/lib/domains/std/guild/mission/std_mission.c new file mode 100644 index 00000000..d4deda7a --- /dev/null +++ b/lib/domains/std/guild/mission/std_mission.c @@ -0,0 +1,198 @@ +/* + * Tsath, 2020 + * Standard Mission object. + */ + +#include + +private +string name; +private +int tier; +private +int length = 10; +private +int favour; +private +string description; +private +string materials; +int left = 10; +string guild = " "; +int receive_items = 0; +int complete; + +object mission_ctrl; + +void set_receive_items(int i) +{ + receive_items = i; +} + +int set_complete() +{ + complete = 1; +} + +string query_guild() +{ + return guild; +} + +void set_favour(int f) +{ + favour = f; +} + +int query_favour() +{ + return favour; +} + +int complete() +{ + return complete; +} + +int query_receive_items() +{ + return receive_items; +} + +void set_length(int i) +{ + length = i; + left = i; +} + +void set_description(string d) +{ + description = d; +} + +string query_description() +{ + return description; +} + +void set_materials(string d) +{ + materials = d; +} + +string query_materials() +{ + return materials; +} + +int query_length() +{ + return left; +} + +int query_original_length() +{ + return length; +} + +object query_mission_ctrl() +{ + if (!mission_ctrl) + mission_ctrl = GUILD_D->mission_ctrl_npc(guild); + mission_ctrl->set_active_mission(this_object()); + + return mission_ctrl; +} + +int run_mission() +{ + left--; + return left; +} + +int is_mission() +{ + return 1; +} + +void channel_msg(string s) +{ + if (!guild) + return; + CHANNEL_D->deliver_channel(guild, query_mission_ctrl()->query_name() + ": " + s); +} + +void notify_guild_members(string s) +{ + object *members = filter_array(bodies(), ( : member_array(guild, $1->guilds_belong()) != -1 :)); + members = filter_array(members, ( + : present("guild_artefact_ob", $1) && + member_array(guild, present("guild_artefact_ob", $1)->query_guilds()) != -1 + :)); + tell(members, s); +} + +void artefact_message(string m) +{ + notify_guild_members("Your " + GUILD_ARTEFACT + " ba-bweeps, \"%^GREEN%^" + upper_case(m) + ".%^RESET%^\".\n"); +} + +void setup(string g) +{ +} + +void real_remove() +{ + destruct(); +} + +void remove() +{ + if (!clonep()) + return; + if (complete()) + GUILD_D->add_log(guild, "Tier " + tier + " mission '" + name + "' completed."); + else + GUILD_D->add_log(guild, "Tier " + tier + " mission '" + name + "' failed."); + artefact_message(guild + " mission ended. Thank you for your assistance"); + query_mission_ctrl()->end_mission(); + call_out("real_remove", 5); +} + +string query_name() +{ + return name; +} + +int query_tier() +{ + return tier; +} + +void set_mission_data(int t, string n) +{ + tier = t; + name = n; +} + +void begin_mission() +{ +} + +void end_mission() +{ + call_out("remove", 10); +} + +void create(string g) +{ + guild = g; + setup(g); + + if (!clonep()) + return; + query_mission_ctrl(); + + call_out("artefact_message", 2, guild + " mission just started. Tune into our channel"); + begin_mission(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/mission/wood_gathering.c b/lib/domains/std/guild/mission/wood_gathering.c new file mode 100644 index 00000000..8c881d31 --- /dev/null +++ b/lib/domains/std/guild/mission/wood_gathering.c @@ -0,0 +1,123 @@ +inherit "/domains/std/guild/missions/std_mission"; + +// MISSION: Wood gathering (Small) +int wood_total = 0; +int minimum_wood = 20; +string hiscore_who; +int hiscore; +mapping wood_received = ([]); + +void setup() +{ + set_length(15); + set_mission_data(1, "Wood gathering (Small)"); + set_receive_items(1); + set_favour(500); + set_description("Help gather wood for heating up their offices. You need to find " + "and hand in items within 15 minutes that can be salvaged to " + + minimum_wood + + " wood scraps. " + "\n\nNOTICE: Adding wood scraps to our storage will *not* " + "help for this mission."); + set_materials("steel scrap:20,wood scrap:10"); +} + +void begin_mission() +{ + channel_msg("New mission has begun: " + replace_string(query_description(), "", query_guild())); +} + +int run_mission() +{ + string hi_str; + if (hiscore_who) + hi_str = "Current leading contributor is " + hiscore_who + " with " + hiscore + " wood scraps."; + + if (complete()) + channel_msg(query_name() + " mission is COMPLETED with " + query_length() + " of " + query_original_length() + + " minutes left. " + "You can still contribute to earn favour. Our total is now at " + wood_total + + ". " + (hi_str ? hi_str : "")); + else + { + channel_msg(query_name() + " mission is ongoing with " + query_length() + " of " + query_original_length() + + " minutes left. " + "Find items that can be salvaged to wood scraps and give them to me. "); + channel_msg(wood_total + " wood scraps received of minimum " + minimum_wood + ". " + (hi_str ? hi_str : "")); + } + return ::run_mission(); +} + +void receive_item(object ob) +{ + object *salvage; + object *wood; + + if (ob->is_salvageable()) + { + salvage = CRAFTING_D->salvage_parts(ob); + if (!sizeof(salvage)) + { + query_mission_ctrl()->simple_action("$N $vtell $t, \"Sorry, but that item gave me nothing.\".", this_body()); + return; + } + wood = filter_array(salvage, ( : $1->id("wood scrap") :)); + salvage -= wood; + wood_total += sizeof(wood); + if (!wood_received[this_body()->query_name()]) + wood_received[this_body()->query_name()] = sizeof(wood); + else + wood_received[this_body()->query_name()] += sizeof(wood); + + if (wood_received[this_body()->query_name()] > hiscore) + { + hiscore = wood_received[this_body()->query_name()]; + hiscore_who = this_body()->query_name(); + } + + if (wood_total >= minimum_wood && !complete()) + { + set_complete(); + channel_msg("Our " + query_name() + " mission is successful, " + query_favour() + " favour gained!"); + } + + foreach (object s in salvage) + { + GUILD_D->add_material(query_guild(), s); + } + + if (sizeof(wood)) + GUILD_D->add_material(query_guild(), "wood scrap", sizeof(wood)); + } + else + { + query_mission_ctrl()->targetted_action("$N $vgive the item back to $t, \"Sorry, I cannot salvage that item?\".", + this_body()); + ob->move(this_body()); + return; + } +} + +void end_mission() +{ + int f = query_favour(); + float favour_pr_wood = 1.0 * f / (wood_total || 1); + + foreach (string player, int num in wood_received) + { + object body = find_body(lower_case(player)); + if (body) + { + int fave = to_int(num * favour_pr_wood); + if (complete()) + { + GUILD_D->add_favour(body, query_guild(), fave); + tell(body, "You received " + fave + " favour points with " + capitalize(query_guild()) + ".\n"); + } + else + { + tell(body, "You contribution is noted, bad sadly we did not meet the target for the mission.\n"); + } + } + } + + ::end_mission(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/mission/wood_gathering_large.c b/lib/domains/std/guild/mission/wood_gathering_large.c new file mode 100644 index 00000000..e2dbd3ba --- /dev/null +++ b/lib/domains/std/guild/mission/wood_gathering_large.c @@ -0,0 +1,124 @@ +inherit "/domains/std/guild/missions/std_mission"; + +// MISSION: Wood gathering (Large) +int wood_total = 0; +int minimum_wood = 100; +string hiscore_who; +int hiscore; +mapping wood_received = ([]); + +void setup() +{ + set_length(60); + set_mission_data(2, "Wood gathering (Large)"); + set_receive_items(1); + set_favour(1500); + set_description("Help gather wood for heating up their offices. You need to find " + "and hand in items within 15 minutes that can be salvaged to " + + minimum_wood + + " wood scraps. " + "\n\nNOTICE: Adding wood scraps to our storage will *not* " + "help for this mission."); + + set_materials("steel scrap:40,wood scrap:25"); +} + +void begin_mission() +{ + channel_msg("New mission has begun: " + replace_string(query_description(), "", query_guild())); +} + +int run_mission() +{ + string hi_str; + if (hiscore_who) + hi_str = "Current leading contributor is " + hiscore_who + " with " + hiscore + " wood scraps."; + + if (complete()) + channel_msg(query_name() + " mission is COMPLETED with " + query_length() + " of " + query_original_length() + + " minutes left. " + "You can still contribute to earn favour. Our total is now at " + wood_total + + ". " + (hi_str ? hi_str : "")); + else + { + channel_msg(query_name() + " mission is ongoing with " + query_length() + " of " + query_original_length() + + " minutes left. " + "Find items that can be salvaged to wood scraps and give them to me. "); + channel_msg(wood_total + " wood scraps received of minimum " + minimum_wood + ". " + (hi_str ? hi_str : "")); + } + return ::run_mission(); +} + +void receive_item(object ob) +{ + object *salvage; + object *wood; + + if (ob->is_salvageable()) + { + salvage = CRAFTING_D->salvage_parts(ob); + if (!sizeof(salvage)) + { + query_mission_ctrl()->simple_action("$N $vtell $t, \"Sorry, but that item gave me nothing.\".", this_body()); + return; + } + wood = filter_array(salvage, ( : $1->id("wood scrap") :)); + salvage -= wood; + wood_total += sizeof(wood); + if (!wood_received[this_body()->query_name()]) + wood_received[this_body()->query_name()] = sizeof(wood); + else + wood_received[this_body()->query_name()] += sizeof(wood); + + if (wood_received[this_body()->query_name()] > hiscore) + { + hiscore = wood_received[this_body()->query_name()]; + hiscore_who = this_body()->query_name(); + } + + if (wood_total >= minimum_wood && !complete()) + { + set_complete(); + channel_msg("Our " + query_name() + " mission is successful, " + query_favour() + " favour gained!"); + } + + foreach (object s in salvage) + { + GUILD_D->add_material(query_guild(), s); + } + + if (sizeof(wood)) + GUILD_D->add_material(query_guild(), "wood scrap", sizeof(wood)); + } + else + { + query_mission_ctrl()->targetted_action("$N $vgive the item back to $t, \"Sorry, I cannot salvage that item?\".", + this_body()); + ob->move(this_body()); + return; + } +} + +void end_mission() +{ + int f = query_favour(); + float favour_pr_wood = 1.0 * f / (wood_total || 1); + + foreach (string player, int num in wood_received) + { + object body = find_body(lower_case(player)); + if (body) + { + int fave = to_int(num * favour_pr_wood); + if (complete()) + { + GUILD_D->add_favour(body, query_guild(), fave); + tell(body, "You received " + fave + " favour points with " + capitalize(query_guild()) + ".\n"); + } + else + { + tell(body, "You contribution is noted, bad sadly we did not meet the target for the mission.\n"); + } + } + } + + ::end_mission(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/mission/wood_gathering_medium.c b/lib/domains/std/guild/mission/wood_gathering_medium.c new file mode 100644 index 00000000..ac853bcd --- /dev/null +++ b/lib/domains/std/guild/mission/wood_gathering_medium.c @@ -0,0 +1,123 @@ +inherit "/domains/std/guild/missions/std_mission"; + +// MISSION: Wood gathering (Medium) +int wood_total = 0; +int minimum_wood = 50; +string hiscore_who; +int hiscore; +mapping wood_received = ([]); + +void setup() +{ + set_length(30); + set_mission_data(1, "Wood gathering (Medium)"); + set_receive_items(1); + set_favour(1000); + set_description("Help gather MORE wood for heating up their offices. You need to find " + "and hand in items within 30 minutes that can be salvaged to " + + minimum_wood + + " wood scraps. " + "\n\nNOTICE: Adding wood scraps to our storage will *not* " + "help for this mission."); + set_materials("steel scrap:30,wood scrap:15"); +} + +void begin_mission() +{ + channel_msg("New mission has begun: " + replace_string(query_description(), "", query_guild())); +} + +int run_mission() +{ + string hi_str; + if (hiscore_who) + hi_str = "Current leading contributor is " + hiscore_who + " with " + hiscore + " wood scraps."; + + if (complete()) + channel_msg(query_name() + " mission is COMPLETED with " + query_length() + " of " + query_original_length() + + " minutes left. " + "You can still contribute to earn favour. Our total is now at " + wood_total + + ". " + (hi_str ? hi_str : "")); + else + { + channel_msg(query_name() + " mission is ongoing with " + query_length() + " of " + query_original_length() + + " minutes left. " + "Find items that can be salvaged to wood scraps and give them to me. "); + channel_msg(wood_total + " wood scraps received of minimum " + minimum_wood + ". " + (hi_str ? hi_str : "")); + } + return ::run_mission(); +} + +void receive_item(object ob) +{ + object *salvage; + object *wood; + + if (ob->is_salvageable()) + { + salvage = CRAFTING_D->salvage_parts(ob); + if (!sizeof(salvage)) + { + query_mission_ctrl()->simple_action("$N $vtell $t, \"Sorry, but that item gave me nothing.\".", this_body()); + return; + } + wood = filter_array(salvage, ( : $1->id("wood scrap") :)); + salvage -= wood; + wood_total += sizeof(wood); + if (!wood_received[this_body()->query_name()]) + wood_received[this_body()->query_name()] = sizeof(wood); + else + wood_received[this_body()->query_name()] += sizeof(wood); + + if (wood_received[this_body()->query_name()] > hiscore) + { + hiscore = wood_received[this_body()->query_name()]; + hiscore_who = this_body()->query_name(); + } + + if (wood_total >= minimum_wood && !complete()) + { + set_complete(); + channel_msg("Our " + query_name() + " mission is successful, " + query_favour() + " favour gained!"); + } + + foreach (object s in salvage) + { + GUILD_D->add_material(query_guild(), s); + } + + if (sizeof(wood)) + GUILD_D->add_material(query_guild(), "wood scrap", sizeof(wood)); + } + else + { + query_mission_ctrl()->targetted_action("$N $vgive the item back to $t, \"Sorry, I cannot salvage that item?\".", + this_body()); + ob->move(this_body()); + return; + } +} + +void end_mission() +{ + int f = query_favour(); + float favour_pr_wood = 1.0 * f / (wood_total || 1); + + foreach (string player, int num in wood_received) + { + object body = find_body(lower_case(player)); + if (body) + { + int fave = to_int(num * favour_pr_wood); + if (complete()) + { + GUILD_D->add_favour(body, query_guild(), fave); + tell(body, "You received " + fave + " favour points with " + capitalize(query_guild()) + ".\n"); + } + else + { + tell(body, "You contribution is noted, bad sadly we did not meet the target for the mission.\n"); + } + } + } + + ::end_mission(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/yakitori/armor/uniform.c b/lib/domains/std/guild/yakitori/armor/uniform.c new file mode 100644 index 00000000..28e4f22b --- /dev/null +++ b/lib/domains/std/guild/yakitori/armor/uniform.c @@ -0,0 +1,16 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit ARMOR; + +void setup() +{ + set_id("uniform"); + set_adj("yakitori", "smudged"); + set_armor_class(10); + set_slot("torso"); + set_resistances((["blade":10, "electricity":5])); + set_weaknesses((["acid":5])); + set_salvageable((["chemical":10, "textile":40, "plastic":50])); + set_also_covers("left arm", "right arm"); + set_long("A standard-issue Yakitori red/white uniform used by delivery boys. It's a bit smudged."); +} diff --git a/lib/domains/std/guild/yakitori/consumable/skewer_large.c b/lib/domains/std/guild/yakitori/consumable/skewer_large.c new file mode 100644 index 00000000..14e10c70 --- /dev/null +++ b/lib/domains/std/guild/yakitori/consumable/skewer_large.c @@ -0,0 +1,55 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit FOOD; +inherit M_DECAY; + +int state_cnt = 0; + +void setup() +{ + set_id("chicken skewer", "skewer", "chicken"); + set_adj("large"); + set_long("A freshly made chicken skewer with hot and sweet spicy saucy."); + set_num_eats(7); + set_heal_value(10); + set_weight(0.8); + set_eat_action("$N $vtake a bite out of $p large chicken skewer."); + set_last_eat_action("$N $veat the final piece of $p chicken skewer."); + set_num_decays(5); + set_decay_action("Your chicken skewer looks less appetizing."); + set_last_decay_action("Mold grows on your chicken skewer."); + set_decay_time(10); +} + +int state_update() +{ + switch (state_cnt) + { + case 0: + break; + case 1: + set_adj("sad"); + set_long("A chicken skewer that is starting to look a bit old. Better eat it soon?"); + break; + case 2: + set_adj("nasty"); + set_long("A chicken skewer that is starting to look a cold and nasty?"); + break; + case 3..4: + set_adj("suspicious"); + set_long("A suspicious looking chicken skewer that is starting to look like trash."); + set_poisonous(2); + break; + case 5: + set_adj("moldy"); + set_long("A suspicious chicken skewer with mold on it. This may not be safe to eat anymore."); + set_poisonous(5); + break; + case 10: + this_object()->remove(); + break; + } + state_cnt++; + + return ::state_update(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/yakitori/consumable/skewer_medium.c b/lib/domains/std/guild/yakitori/consumable/skewer_medium.c new file mode 100644 index 00000000..52958861 --- /dev/null +++ b/lib/domains/std/guild/yakitori/consumable/skewer_medium.c @@ -0,0 +1,55 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit FOOD; +inherit M_DECAY; + +int state_cnt = 0; + +void setup() +{ + set_id("chicken skewer", "skewer", "chicken"); + set_adj("medium"); + set_long("A freshly made chicken skewer with hot and sweet spicy saucy."); + set_num_eats(5); + set_heal_value(8); + set_weight(0.8); + set_eat_action("$N $vtake a bite out of $p medium chicken skewer."); + set_last_eat_action("$N $veat the final piece of $p chicken skewer."); + set_num_decays(5); + set_decay_action("Your chicken skewer looks less appetizing."); + set_last_decay_action("Mold grows on your chicken skewer."); + set_decay_time(10); +} + +int state_update() +{ + switch (state_cnt) + { + case 0: + break; + case 1: + set_adj("sad"); + set_long("A chicken skewer that is starting to look a bit old. Better eat it soon?"); + break; + case 2: + set_adj("nasty"); + set_long("A chicken skewer that is starting to look a cold and nasty?"); + break; + case 3..4: + set_adj("suspicious"); + set_long("A suspicious looking chicken skewer that is starting to look like trash."); + set_poisonous(2); + break; + case 5: + set_adj("moldy"); + set_long("A suspicious chicken skewer with mold on it. This may not be safe to eat anymore."); + set_poisonous(5); + break; + case 10: + this_object()->remove(); + break; + } + state_cnt++; + + return ::state_update(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/yakitori/consumable/skewer_small.c b/lib/domains/std/guild/yakitori/consumable/skewer_small.c new file mode 100644 index 00000000..93826787 --- /dev/null +++ b/lib/domains/std/guild/yakitori/consumable/skewer_small.c @@ -0,0 +1,55 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit FOOD; +inherit M_DECAY; + +int state_cnt = 0; + +void setup() +{ + set_id("chicken skewer", "skewer", "chicken"); + set_adj("small"); + set_long("A freshly made chicken skewer with hot and sweet spicy saucy."); + set_num_eats(3); + set_heal_value(8); + set_weight(0.8); + set_eat_action("$N $vtake a bite out of $p small chicken skewer."); + set_last_eat_action("$N $veat the final piece of $p chicken skewer."); + set_num_decays(5); + set_decay_action("Your chicken skewer looks less appetizing."); + set_last_decay_action("Mold grows on your chicken skewer."); + set_decay_time(10); +} + +int state_update() +{ + switch (state_cnt) + { + case 0: + break; + case 1: + set_adj("sad"); + set_long("A chicken skewer that is starting to look a bit old. Better eat it soon?"); + break; + case 2: + set_adj("nasty"); + set_long("A chicken skewer that is starting to look a cold and nasty?"); + break; + case 3..4: + set_adj("suspicious"); + set_long("A suspicious looking chicken skewer that is starting to look like trash."); + set_poisonous(2); + break; + case 5: + set_adj("moldy"); + set_long("A suspicious chicken skewer with mold on it. This may not be safe to eat anymore."); + set_poisonous(5); + break; + case 10: + this_object()->remove(); + break; + } + state_cnt++; + + return ::state_update(); +} \ No newline at end of file diff --git a/lib/domains/std/guild/yakitori/mob/cashier.c b/lib/domains/std/guild/yakitori/mob/cashier.c new file mode 100644 index 00000000..783f4559 --- /dev/null +++ b/lib/domains/std/guild/yakitori/mob/cashier.c @@ -0,0 +1,127 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit LIVING; +inherit M_VENDOR; +inherit M_CONVERSATION; +inherit M_BLOCKEXITS; + +object *people = ({}); +object *solvers = ({}); + +string *member_actions = + ({"$N $vnod at $t, \"Just put the warez out in the back.\"", + "$N $vstep aside for $t, who $v1walk into the kitchen.", "$N $vsmile at $t and $vlet $t pass."}); + +void ignore_person() +{ + object body = this_body(); + people += ({body}); + continue_conversation(body, "q"); + TBUG(people); +} + +void allow_person() +{ + solvers += ({this_body()}); +} + +object *solvers() +{ + return solvers; +} + +void begin_conversation() +{ + TBUG("Begin convo"); + if (member_array(this_body(), people) != -1 && random(5)) + { + this_object()->targetted_action("$N $vraise $p palm towards $p1 face. $N $vseem busy.", this_body()); + return; + } + if (sizeof(people) > 0) + people -= ({choice(people)}); + if (member_array(this_body(), people) == -1) + ::begin_conversation(); + else + this_object()->targetted_action("$N $vseem too busy to talk to $t.", this_body()); +} + +object *ignored() +{ + return people; +} + +private +mixed handle_blocks(string dir) +{ + /* is the player above the level restriction? */ + if (this_body()->query_member_guild("yakitori")) + { + this_object()->targetted_action(choice(member_actions), this_body()); + return 0; + } + if (member_array(this_body(), solvers) != -1) + { + this_object()->targetted_action("$N $vsmile and $vsay, \"Oh, you can see kitchen now!\"", this_body()); + return 0; + } + + return ::handle_blocks(dir); +} + +void setup() +{ + set_name("Fuyuko"); + add_id("cashier"); + set_gender(2); + set_proper_name("Fuyuko"); + set_in_room_desc("Fuyuko, a Yakitori Chicken employee."); + set_long("Fuyuko is in a red and white dress smiling at you. She points to a 'list' on the wall."); + set_currency_type("dollar"); + set_for_sale(1); + + set_sell((["/domains/std/guild/yakitori/consumable/skewer_small":-1, + "/domains/std/guild/yakitori/consumable/skewer_medium":-1, + "/domains/std/guild/yakitori/consumable/skewer_large":-1, ])); + set_will_buy(1); + set_options((["good":"Hi? What's good?", + "manager":"Can I see your manager?", "manager2":"Uh, I had a bad chicken skewer ... ?", + "manager2c":"あなたは鶏に見えます?", "manager2b":"あなたは鶏肉が好きです?", + "japanese":"Was my Japanese okay ...?", + "manager3":"So, can I talk to your manager now? It's not about the chicken.", + "riddle1":"Riddle? What? No?", "riddle2":"Okay, I'll do my best?", "riddle2a":"フライパン (A frying pan)", + "riddle2b":"クッキー (A cookie)", "riddle2c":"ムーン (The moon)", ])); + + set_responses((["good":"Everything, sir. See the menu.", + "manager":"Manager, why?@@manager2,manager2b,manager2c", + "manager2":({"You lie! Not possible.", ( + : ignore_person() + :)}), + "manager2b":"Bangō@@japanese", "manager2c":({"Oh I do, do I?", ( + : ignore_person() + :)}), + "japanese":"A bit simple in your tonality, but I understood your question.@@manager3", + "manager3":"If you can answer a riddle?@@riddle1,riddle2", + "riddle1":({"Then go away.", ( + : ignore_person() + :)}), + "riddle2":"Okay then. Bread ( パン) is like bread, but what bread is not edible? " + "@@riddle2a,riddle2b,riddle2c@@manager2,riddle1", + "riddle2a":({"Wow, you do understand our culture! You can go see him.@@@@riddle2b,riddle2c,manager2c", + ( + : allow_person() + :)}), + "riddle2b":({"You were pretending. Leave.", ( + : ignore_person() + :)}), + "riddle2b":({"You were pretending. Leave.", ( + : ignore_person() + :)}), + "riddle2c":({"You were pretending. Leave.", ( + : ignore_person() + :)}), + ])); + set_start(({"good", "manager"})); + add_block("west"); + set_block_action("$N $vstep out infront of $t.\n\"No visitors in kitchen!\", $n $vsnarl."); +} diff --git a/lib/domains/std/guild/yakitori/mob/chef.c b/lib/domains/std/guild/yakitori/mob/chef.c new file mode 100644 index 00000000..63c06baa --- /dev/null +++ b/lib/domains/std/guild/yakitori/mob/chef.c @@ -0,0 +1,22 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit LIVING; +inherit M_ACTIONS; + +void setup() +{ + set_name("Daitan"); + add_id("chef", "employee"); + set_gender(2); + set_proper_name("Daitan"); + set_in_room_desc("Daitan, the Yakitori Chef."); + set_long("Daitan is wearing a white outfit which is a bit dirty on the front."); + set_actions(50, ({ + "say ココナッツにライムを入れます", + "say ブラザーはココナッツを買いました", + "say 彼はそれをダイムで買った", + "say 彼女はそれらを両方とも酒に酔わせる", + "say 今、私はこれをまっすぐにしましょう", + "sing Docta, ainder nodding ican taik?", + })); +} diff --git a/lib/domains/std/guild/yakitori/mob/delivery_boy.c b/lib/domains/std/guild/yakitori/mob/delivery_boy.c new file mode 100644 index 00000000..3e8139cc --- /dev/null +++ b/lib/domains/std/guild/yakitori/mob/delivery_boy.c @@ -0,0 +1,35 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** Tsath, 2020 +*/ + +inherit ADVERSARY; +inherit M_GUILD_MEMBER; +inherit M_ASSISTANCE; +inherit M_ASSISTANCE; + +void setup() +{ + string length = choice(({"long", "short", "very long", "very short"})); + string color = choice(({"black", "dark brown", "white", "grey", "brown"})); + + set_name("Yakitory Delivery boy"); + set_in_room_desc("A delivery boy in a Yakitori uniform with " + length + " " + color + " hair."); + add_id("boy", "delivery boy", "yakitori delivery boy", "yakitory_member"); + set_gender(1); + set_special_chance(20); // 20% chance to fire off specials per swing + set_level(10); + set_long("A young mang with " + length + " " + color + " hair in a white and red Yakitori " + + "uniform, although a bit smudged. He's got an intense stare and a " + "combat ready stance."); + set_which_guild("yakitori"); + set_wearing("../armor/uniform"); + add_helper("yakitory_member"); + set_objects((["^nuke/consumable/sake":1])); +} + +void under_attack_by(object who) +{ + targetted_action("$N $vpoint to $t, \"Get him!\"", who); + get_help(); +} diff --git a/lib/domains/std/guild/yakitori/mob/guild_lead.c b/lib/domains/std/guild/yakitori/mob/guild_lead.c new file mode 100644 index 00000000..de1f5cd0 --- /dev/null +++ b/lib/domains/std/guild/yakitori/mob/guild_lead.c @@ -0,0 +1,36 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** Tsath, 2020 +*/ + +inherit ADVERSARY; +inherit M_GUILD_MASTER; + +void setup() +{ + set_name("Mr Nakamura"); + set_in_room_desc("Mr Nakamura, a nicely dressed tall asian man stands here."); + add_id("lead", "nakamura", "boss", "guild lead", "man", "asian", "tall man"); + set_gender(1); + set_level(100); + set_proper_name("Mr Nakamura"); + set_long("A nicely dressed man, perhaps Japanese of origin. It would be wise to avoid pissing him off. Try to talk " + "to him."); + set_max_health(10000); + set_options((["who":"Hi ... who are you?", ])); + + set_responses((["who":"I'm Mr Nakamura, pleased to meet you.", ])); + set_start(({"who"})); + set_which_guild("yakitori"); +} + +mixed receive_object(object target, string relation) +{ + if (!this_body()) + return ::receive_object(target, relation); + + if (guild_master_receive(target)) + ::receive_object(target, relation); + return ""; +} \ No newline at end of file diff --git a/lib/domains/std/guild/yakitori/mob/mission_ctrl.c b/lib/domains/std/guild/yakitori/mob/mission_ctrl.c new file mode 100644 index 00000000..c8a871e7 --- /dev/null +++ b/lib/domains/std/guild/yakitori/mob/mission_ctrl.c @@ -0,0 +1,21 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +/* +** Tsath, 2020 +*/ + +inherit ADVERSARY; +inherit M_MISSION_CTRL; + +void setup() +{ + set_name("Ms Tanaka"); + set_in_room_desc("Ms Tanaka is standing here, leaning on the large table."); + add_id("miss", "tanaka", "woman"); + set_gender(2); + set_level(100); + set_proper_name("Ms Tanaka"); + set_long("A nicely dressed woman, perhaps Japanese of origin. She looks stern but friendly."); + set_max_health(10000); + set_which_guild("yakitori"); +} diff --git a/lib/domains/std/guild/yakitori/room/kitchen.c b/lib/domains/std/guild/yakitori/room/kitchen.c new file mode 100644 index 00000000..91532126 --- /dev/null +++ b/lib/domains/std/guild/yakitori/room/kitchen.c @@ -0,0 +1,36 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit INDOOR_ROOM; + +void combat_forbidden() +{ + all_inventory(this_object())->stop_fight(); + if (present(this_body(), this_object())) + { + this_body()->simple_action("A tall skinny man in a suit appears from behind a curtain and tells $n to leave."); + this_body()->move(load_object("/domains/abacus/room/adam_str03")); + this_body()->simple_action("$N $venter into the street again."); + } +} + +void setup() +{ + set_brief("The Yakitori Kitchen"); + set_long("A white-tiled fairly clean and very orderly kitchen. Stainless steel tabletops " + "everywhere and various cooking utencils are in use."); + set_exits((["east":"^std/guild/yakitori/room/shop", "west":"^std/guild/yakitori/room/lead", ])); + set_objects((["^std/guild/yakitori/mob/chef":1, "^std/furniture/cooking_station":1])); + set_combat_forbidden(1); +} + +int do_smell() +{ + write("A strong smell of garlic, soy and grilled chicken permeates the air.\n"); + return 1; +} + +int do_listen() +{ + write("You hear oil sizzling from the friers.\n"); + return 1; +} diff --git a/lib/domains/std/guild/yakitori/room/lead.c b/lib/domains/std/guild/yakitori/room/lead.c new file mode 100644 index 00000000..5af4dfce --- /dev/null +++ b/lib/domains/std/guild/yakitori/room/lead.c @@ -0,0 +1,49 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit INDOOR_ROOM; + +void combat_forbidden() +{ + all_inventory(this_object())->stop_fight(); + if (present(this_body(), this_object())) + { + this_body()->simple_action("Mr Nakamura tells $n to leave."); + this_body()->move(load_object("/domains/abacus/room/adam_str03")); + this_body()->simple_action("$N $venter into the street again."); + } +} + +void setup() +{ + set_brief("Yakitori back room"); + set_long("A dimly light office with a single lit lamp standing on the desk. " + + "An open ledger lies on the desk. " + "The office has several cabinets near the walls with a \"Favour Board\"" + " hanging above them, and stacks of Yakitori " + "delivery boxes and bags. A small window high up on the wall faces the back alley."); + set_exits((["east":"kitchen", "south":"mission", ])); + set_objects((["../mob/guild_lead":1, + "^std/guild/item/favour_board":({"yakitori"}), "^std/guild/item/ledger":({"yakitori"})])); + add_item("electric fan", "fan", "It's a very nice fan, keeps the smell of oils almost out of this room."); + add_item("window", "small window", "It's a small window with iron bars infrot of it. It's open slightly."); + add_item("walls", "wall", "White walls, seems painted recently?"); + add_item("cabinets", "Filing cabinets, probably holding papers."); + add_item("lit lamp", "lamp", "It's a desk lamp."); + add_item("office", "You're standing in it."); + add_item("paint", "The walls are recently painted white, but you notice a darker spot on the north wall attempted " + "to be covered up."); + add_item("spot", "Could look like someone got the back of the head painted unto the wall and then painted over?"); + set_combat_forbidden(1); +} + +int do_smell() +{ + write("A smell of garlic, fresh paint, soy and grilled chicken permeates the air.\n"); + return 1; +} + +int do_listen() +{ + write("You hear oil sizzling from the kitchen, and a hum of an electric fan running in the corner of this room.\n"); + return 1; +} diff --git a/lib/domains/std/guild/yakitori/room/mission.c b/lib/domains/std/guild/yakitori/room/mission.c new file mode 100644 index 00000000..bc144cd6 --- /dev/null +++ b/lib/domains/std/guild/yakitori/room/mission.c @@ -0,0 +1,37 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit INDOOR_ROOM; + +void combat_forbidden() +{ + all_inventory(this_object())->stop_fight(); + if (present(this_body(), this_object())) + { + this_body()->simple_action("Mr Nakamura tells $n to leave."); + this_body()->move(load_object("/domains/abacus/room/adam_str03")); + this_body()->simple_action("$N $venter into the street again."); + } +} + +void setup() +{ + set_brief("Yakitori operations room"); + set_long("Another dimly light office a big table with various papers and a mission " + "board on wheels standing next to it. The table has various maps of the city and surrounding " + "areas on it criss-crossed by symbols and lines."); + set_exits((["north":"lead", ])); + set_objects((["../mob/mission_ctrl":1, "^std/guild/item/storage_box":({"yakitori"})])); + set_combat_forbidden(1); +} + +int do_smell() +{ + write("A faint smell of garlic, fresh paint, soy and grilled chicken is in the air.\n"); + return 1; +} + +int do_listen() +{ + write("Pretty quiet in here.\n"); + return 1; +} diff --git a/lib/domains/std/guild/yakitori/room/shop.c b/lib/domains/std/guild/yakitori/room/shop.c new file mode 100644 index 00000000..0c0a5e63 --- /dev/null +++ b/lib/domains/std/guild/yakitori/room/shop.c @@ -0,0 +1,40 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit INDOOR_ROOM; + +void combat_forbidden() +{ + all_inventory(this_object())->stop_fight(); + if (present(this_body(), this_object())) + { + this_body()->simple_action("A tall skinny man in a suit appears from behind a curtain and tells $n to leave."); + this_body()->move(load_object("/domains/std/room/Wizroom")); + this_body()->simple_action("$N $venter into the street again."); + } +} + +void setup() +{ + set_brief("Yakitori Chicken"); + set_long("A small city store has been converted to an eatery serving chicken " + "skewers in spicy sauces. The smell in here is fantastic! The walls " + "are painted white, and menus with prices along with painted " + "images of the spits can be seen on the walls. The place is squeaky " + "clean and well-kept."); + set_exits((["east":"^std/room/Wizroom", "west":"^std/guild/yakitori/room/kitchen"])); + set_objects((["^std/guild/yakitori/mob/cashier":1])); + set_combat_forbidden(1); +} + +int do_smell() +{ + write("A smell of garlic, soy and grilled chicken permeates the air.\n"); + return 1; +} + +int do_listen() +{ + write("You hear oil sizzling in a back room, somewhere out of sight and the chopping " + "of vegetables on cutting boards.\n"); + return 1; +} diff --git a/lib/domains/std/item/hint_token.c b/lib/domains/std/item/hint_token.c index 3d106606..53a57c15 100644 --- a/lib/domains/std/item/hint_token.c +++ b/lib/domains/std/item/hint_token.c @@ -57,15 +57,10 @@ void hook_func() call_out("show_hints", 0, hints); } -void dropped() +mixed drop() { if (!this_body()) - return; - if (environment(this_object())->is_living()) - return; - // Clean up the hooks - remove_hook("move", ( : dropped:)); - this_body()->remove_hook("move", ( : hook_func:)); + return 1; this_body()->simple_action("$N $vdrop " + short() + " which disappears in a puff of smoke."); this_object()->remove(); @@ -88,7 +83,6 @@ void mudlib_setup() "carry for hints.\n\n" "You can use 'hints on' to get a new one should you lose this one."); this_body()->add_hook("move", ( : hook_func:)); - add_hook("move", ( : dropped:)); } string query_hint() diff --git a/lib/domains/std/junk/aluminum_can.c b/lib/domains/std/junk/aluminum_can.c index 031b5162..0d42cf39 100644 --- a/lib/domains/std/junk/aluminum_can.c +++ b/lib/domains/std/junk/aluminum_can.c @@ -4,8 +4,8 @@ inherit JUNK; void setup() { - set_id("aluminum can","can"); - set_direct_salvage((["aluminum scrap":2])); - set_long("A dented aluminum can from waaaay before you were born."); - set_weight(1); + set_id("aluminum can", "can"); + set_direct_salvage((["aluminum scrap":2])); + set_long("A dented aluminum can from waaaay before you were born."); + set_weight(1); } \ No newline at end of file diff --git a/lib/domains/std/lima_guide.c b/lib/domains/std/lima_guide.c index 769a27f1..89fee374 100644 --- a/lib/domains/std/lima_guide.c +++ b/lib/domains/std/lima_guide.c @@ -12,8 +12,8 @@ void setup() "single word, that appears to be pulsing with a life of its own, LIMA."); set_text("This book will at some point contain some interesting bits of information about the LIMA mudlib. However " "at this time, much like the documentation of the lib itself, it is unfinished."); - set_entries((["1":"Do read https://limamudlib.readthedocs.io/en/latest/", + set_entries((["1":"Do read https://limamudlib.readthedocs.io/", "2":"See https://github.com/fluffos/lima or use https://github.com/tsathoqqua/lima for " "active development branch."])); - set_synonyms((["docs" : "1", "source" : "2"])); + set_synonyms((["docs":"1", "source":"2"])); } diff --git a/lib/domains/std/magic_torch.c b/lib/domains/std/magic_torch.c index 5c5642e6..60db3f98 100644 --- a/lib/domains/std/magic_torch.c +++ b/lib/domains/std/magic_torch.c @@ -2,7 +2,6 @@ inherit TORCH; - void setup() { set_adj("magic"); diff --git a/lib/domains/std/dragon.c b/lib/domains/std/monster/dragon.c similarity index 100% rename from lib/domains/std/dragon.c rename to lib/domains/std/monster/dragon.c diff --git a/lib/domains/std/monster/fighter_master2.c b/lib/domains/std/monster/fighter_master2.c index 53627adf..19f28d95 100644 --- a/lib/domains/std/monster/fighter_master2.c +++ b/lib/domains/std/monster/fighter_master2.c @@ -24,7 +24,7 @@ void setup() set_which_guild("fighter"); set_wielding("/domains/std/weapon/sword"); - set_wearing("/domains/std/armour/platemail"); + set_wearing("/domains/std/armour/fullplate"); } void receive_outside_msg(string str) diff --git a/lib/domains/std/monster/flea.c b/lib/domains/std/monster/flea.c new file mode 100644 index 00000000..b0062ca6 --- /dev/null +++ b/lib/domains/std/monster/flea.c @@ -0,0 +1,16 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit ADVERSARY; + +void setup() +{ + ::setup(); + set_name("flea"); + set_id("flea"); + set_in_room_desc("A small flea"); + set_combat_messages("combat-claws-bites"); + set_long("A small flea sits on the floor. It looks easy to kill"); + update_body_style("insect"); + set_level(1); + set_max_health(1); +} diff --git a/lib/domains/std/genius.c b/lib/domains/std/monster/genius.c similarity index 83% rename from lib/domains/std/genius.c rename to lib/domains/std/monster/genius.c index 13f62439..d8da1bc5 100644 --- a/lib/domains/std/genius.c +++ b/lib/domains/std/monster/genius.c @@ -52,22 +52,13 @@ void pattern_setup() "simple_pred", "and_pred"); add_sub_pattern("and_pred", "%s", ( : $1:), "simple_pred"); - add_sub_pattern( - "simple_pred", "is not %s", function(string name) { - return ( : $1 != $(name) :); - }); - add_sub_pattern( - "simple_pred", "is %s", function(string name) { - return ( : $1 == $(name) :); - }); + add_sub_pattern("simple_pred", "is not %s", function(string name) { return ( : $1 != $(name) :); }); + add_sub_pattern("simple_pred", "is %s", function(string name) { return ( : $1 == $(name) :); }); add_sub_pattern( "simple_pred", "starts with %s", function(string prefix) { return ( : starts_with($1, $(prefix)) :); }); - add_sub_pattern( - "simple_pred", "ends with %s", function(string suffix) { - return ( : ends_with($1, $(suffix)) :); - }); + add_sub_pattern("simple_pred", "ends with %s", function(string suffix) { return ( : ends_with($1, $(suffix)) :); }); add_sub_pattern("simple_pred", 0, 1); } diff --git a/lib/domains/std/greeter.c b/lib/domains/std/monster/greeter.c similarity index 97% rename from lib/domains/std/greeter.c rename to lib/domains/std/monster/greeter.c index a6fb6eb9..0ae53ba4 100644 --- a/lib/domains/std/greeter.c +++ b/lib/domains/std/monster/greeter.c @@ -19,7 +19,7 @@ void setup() "compilation":"Where should I report FluffOS compilation problems?", "intermud":"How do I get on intermud (I3)?", "str_check":"I'm pretty strong, want a lift?[str>30]", "cha_check":"Can I ask you a personal question?[cha>20]", - "int_check":"I sense an alterior motive?[int>20]", + "int_check":"I sense an ulterior motive?[int>20]", "skill_check":"Can you check my skills in chats?[combat/defense>1]", "skill_check2":"Can you check my skills in chats?[combat/defense=0]"])); @@ -53,5 +53,5 @@ void setup() "skill_check2":"I can see you have combat/defense rank at 0."])); set_start(({"hello", "greeter", "where", "problems", "str_check", "cha_check", "skill_check", "skill_check2"})); - set_goodbye("!wave $t"); + set_goodbye("!wave to $t"); } diff --git a/lib/domains/std/guild_guard.c b/lib/domains/std/monster/guild_guard.c similarity index 100% rename from lib/domains/std/guild_guard.c rename to lib/domains/std/monster/guild_guard.c diff --git a/lib/domains/std/harry.c b/lib/domains/std/monster/harry.c similarity index 100% rename from lib/domains/std/harry.c rename to lib/domains/std/monster/harry.c diff --git a/lib/domains/std/monster/robert.c b/lib/domains/std/monster/robert.c new file mode 100644 index 00000000..9a7f7c8f --- /dev/null +++ b/lib/domains/std/monster/robert.c @@ -0,0 +1,33 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +#include + +inherit LIVING; +inherit M_TRIGGERS; +inherit M_SMARTMOVE; +inherit M_NPCSCRIPT; + +void setup() +{ + set_gender(1); + set_name("Robert"); + add_id("bob"); + set_proper_name("Robert"); + set_in_room_desc("Robert (Example NPC Script - look at me)"); + set_long("An example of an NPC using NPC script. To start a demo script " + "use:\n<011>@.here:bob->execute_script(\"demo\")\nin your cmd shell." + + "The demo script can be found and edited under ^std/monster/scripts/demo.npcs"); + create_script_from_file("demo", "scripts/demo.npcs"); + set_recovery_time(10); +} + +void recover() +{ + object example_room = load_object("/domains/std/room/Example_Room1"); + if (environment(this_object()) == example_room) + return; + tell_from_outside(environment(this_object()), "Robert hurries back to the example room."); + this_object()->move(example_room); + tell_from_outside(environment(this_object()), "Robert hurries into the room."); + do_game_command("say Sorry, I got lost."); +} \ No newline at end of file diff --git a/lib/domains/std/monster/scripts/demo.npcs b/lib/domains/std/monster/scripts/demo.npcs new file mode 100644 index 00000000..b80d02e8 --- /dev/null +++ b/lib/domains/std/monster/scripts/demo.npcs @@ -0,0 +1,10 @@ +# This is an example NPC script +ACTION:smile@@go west@@open door@@go northeast +WAIT:10 +DESC:Robert sits on the floor here. +ACTION:emote sits on the floor. +ACTION:close door@@open door@@go southwest@@laugh +DESC:Robert is standing here. +ACTION:emote stands up.@@push button@@close door +ACTION:wave@@go east +DESC:Robert (Example NPC Script - look at me) \ No newline at end of file diff --git a/lib/domains/std/monster/troll.c b/lib/domains/std/monster/troll.c index fd978d80..5a2009ad 100644 --- a/lib/domains/std/monster/troll.c +++ b/lib/domains/std/monster/troll.c @@ -15,6 +15,7 @@ void setup() set_proper_name("Bill the Troll"); set_in_room_desc("Bill the Troll"); set_long("Looking closely at a troll is something people usually try to avoid doing."); + set_combat_messages("combat-claws-bites"); set_max_health(30); set_wielding("/domains/std/weapon/sword"); } diff --git a/lib/domains/std/wolf.c b/lib/domains/std/monster/wolf.c similarity index 100% rename from lib/domains/std/wolf.c rename to lib/domains/std/monster/wolf.c diff --git a/lib/domains/std/objects/backpack.c b/lib/domains/std/object/backpack.c similarity index 75% rename from lib/domains/std/objects/backpack.c rename to lib/domains/std/object/backpack.c index 6716c1a3..4648f3b7 100644 --- a/lib/domains/std/objects/backpack.c +++ b/lib/domains/std/object/backpack.c @@ -1,9 +1,5 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -#ifdef USE_BODYSLOTS -#include -#endif - inherit CONTAINER; inherit M_OPENABLE; inherit M_WEARABLE; @@ -17,15 +13,8 @@ void setup() set_default_relation("in"); set_objects(([])); set_max_capacity(3 * MEDIUM); -#ifdef USE_SIZE - set_size(SMALL); -#endif -#ifdef USE_MASS - set_mass(SMALL); -#endif -#ifdef USE_BODYSLOTS - set_slot(TORSO); -#endif + set_weight(2); + set_slot("back"); } mixed ob_state() diff --git a/lib/domains/std/object/candle.c b/lib/domains/std/object/candle.c new file mode 100644 index 00000000..b53b1b14 --- /dev/null +++ b/lib/domains/std/object/candle.c @@ -0,0 +1,24 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit OBJ; +inherit LIGHT_OBJECT; +inherit M_GETTABLE; + +void setup() +{ + set_id("candle"); + set_adj("wax", "red"); + set_long("A red wax candle."); + // Use fuel every 2 minutes + set_call_interval(2); + // Fuel for 10 decays, so 20 minutes all in all. + set_fuel(10); + set_die_msg("The $o burns up and a small pillar of smoke rises from the wick."); + set_decay_action("$P $o flickers and sputters a little."); +} + +string get_extra_long() +{ + int time_left = this_object()->query_num_decays() * this_object()->query_call_interval(); + return "The candle will probably burn another " + time_left + " minutes or so."; +} \ No newline at end of file diff --git a/lib/domains/std/object/dead_adventurer.c b/lib/domains/std/object/dead_adventurer.c new file mode 100644 index 00000000..ddabced0 --- /dev/null +++ b/lib/domains/std/object/dead_adventurer.c @@ -0,0 +1,20 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +inherit CORPSE; + +void setup() +{ + ::mudlib_setup("adventurer"); // Sets the ID in the corpse. + set_proper_name(0); + set_adj("adventurer's", "brave"); + set_objects( + (["/domains/std/weapon/pac_sword":1, + "/domains/std/armour/fullplate":1, "/domains/std/object/lantern":1, "/domains/std/object/backpack":1, ])); + set_unique(1); +} + +// Do not decay. STATE_D will ignore it for returning 0 here. +int state_update() +{ + return 0; +} \ No newline at end of file diff --git a/lib/domains/std/objects/debris.c b/lib/domains/std/object/debris.c similarity index 100% rename from lib/domains/std/objects/debris.c rename to lib/domains/std/object/debris.c diff --git a/lib/domains/std/objects/dock.c b/lib/domains/std/object/dock.c similarity index 100% rename from lib/domains/std/objects/dock.c rename to lib/domains/std/object/dock.c diff --git a/lib/domains/std/objects/dock_wall.c b/lib/domains/std/object/dock_wall.c similarity index 88% rename from lib/domains/std/objects/dock_wall.c rename to lib/domains/std/object/dock_wall.c index 404f946f..d5443bd8 100644 --- a/lib/domains/std/objects/dock_wall.c +++ b/lib/domains/std/object/dock_wall.c @@ -35,5 +35,7 @@ void setup() set_text("It says:\n\tThis space intentionally left blank."); set_close_msg("The passage slides shut."); set_open_msg("The rock underneath the inscription slides open, revealing a passage.\n"); - setup_door("dock wall", "south", "/domains/std/rooms/caves/Navigation_Room"); + set_sibling_ident("dock wall"); + set_door_direction("south"); + set_door_destination("/domains/std/room/caves/Navigation_Room"); } diff --git a/lib/domains/std/objects/gate.c b/lib/domains/std/object/gate.c similarity index 65% rename from lib/domains/std/objects/gate.c rename to lib/domains/std/object/gate.c index fa9ad968..4c747f95 100644 --- a/lib/domains/std/objects/gate.c +++ b/lib/domains/std/object/gate.c @@ -6,7 +6,7 @@ void do_on_open() { object env = environment(this_body()); - load_object("/domains/std/rooms/caves/North_Tunnel.c")->set_room_state("gate_open"); + load_object("/domains/std/room/caves/North_Tunnel.c")->set_room_state("gate_open"); env->set_room_state("gate_open"); } @@ -14,7 +14,7 @@ void do_on_close() { object env = environment(this_body()); - load_object("/domains/std/rooms/caves/North_Tunnel.c")->clear_room_state("gate_open"); + load_object("/domains/std/room/caves/North_Tunnel.c")->clear_room_state("gate_open"); env->clear_room_state("gate_open"); } @@ -23,6 +23,8 @@ void setup(string dir, string dest) set_id("gate"); set_adj("rusty", "rusty gate"); set_long("The gate is very rusty and doesnt look like it could stop anything anymore"); - setup_door("rusty gate", dir, dest); + set_sibling_ident("rusty gate"); + set_door_direction("dir"); + set_door_destination(dest); set_flag(ATTACHED); } diff --git a/lib/domains/std/objects/hole.c b/lib/domains/std/object/hole.c similarity index 100% rename from lib/domains/std/objects/hole.c rename to lib/domains/std/object/hole.c diff --git a/lib/domains/std/objects/lantern.c b/lib/domains/std/object/lantern.c similarity index 100% rename from lib/domains/std/objects/lantern.c rename to lib/domains/std/object/lantern.c diff --git a/lib/domains/std/large_oak_door.c b/lib/domains/std/object/large_oak_door.c similarity index 85% rename from lib/domains/std/large_oak_door.c rename to lib/domains/std/object/large_oak_door.c index 38f75fca..e8ea5ca1 100644 --- a/lib/domains/std/large_oak_door.c +++ b/lib/domains/std/object/large_oak_door.c @@ -28,5 +28,7 @@ void setup(string dir, string room) set_id("door"); set_adj("large oak", "large", "oak"); set_long("It is about 10 feet tall, and very beautiful."); - setup_door("large oak door", dir, room); + set_sibling_ident("large oak door"); + set_door_direction(dir); + set_door_destination(room); } diff --git a/lib/domains/std/map.c b/lib/domains/std/object/map.c similarity index 69% rename from lib/domains/std/map.c rename to lib/domains/std/object/map.c index b912ad75..3f000910 100644 --- a/lib/domains/std/map.c +++ b/lib/domains/std/object/map.c @@ -10,17 +10,17 @@ void setup() set_untouched_desc("A map of Lima Bean is pinned to the wall."); set_in_room_desc("A map of Lima Bean has been discarded here."); set_long("It has a crude map of Lima Bean written on it."); - set_text(" MORTAL AREA ATTIC " + - " | / " + - " | / QUIET ROOM " + - " LAVA CAVE | / / " + - " \ | / / PLAINS " + - " \ | U/ / | " + - " ELEVATOR -- WIZARD HALL ---- EXAMPLE ROOM -- CAR WASH " + - " /D | | " + - " / | | " + - "GENERAL STORE | RELATIONS & TOYS -- ENVIRONMENTAL ROOM " + - " MONSTER ROOM | " + - " | " + - " CULT OF LIMA "); + set_text(" MORTAL AREA ATTIC \n" + + " | / \n" + + " | / QUIET ROOM \n" + + " LAVA CAVE | / / \n" + + " \\ | / / PLAINS \n" + + " \\ | U/ / | \n" + + " ELEVATOR -- WIZARD HALL ---- EXAMPLE ROOM -- CAR WASH \n" + + " /D | | \n" + + " / | | \n" + + "GENERAL STORE | RELATIONS & TOYS -- ENVIRONMENTAL ROOM \n" + + " MONSTER ROOM | \n" + + " | \n" + + " CULT OF LIMA \n"); } diff --git a/lib/domains/std/objects/maps.c b/lib/domains/std/object/maps.c similarity index 100% rename from lib/domains/std/objects/maps.c rename to lib/domains/std/object/maps.c diff --git a/lib/domains/std/objects/navigation_button.c b/lib/domains/std/object/navigation_button.c similarity index 100% rename from lib/domains/std/objects/navigation_button.c rename to lib/domains/std/object/navigation_button.c diff --git a/lib/domains/std/objects/navigation_passage.c b/lib/domains/std/object/navigation_passage.c similarity index 100% rename from lib/domains/std/objects/navigation_passage.c rename to lib/domains/std/object/navigation_passage.c diff --git a/lib/domains/std/objects/navigation_table.c b/lib/domains/std/object/navigation_table.c similarity index 89% rename from lib/domains/std/objects/navigation_table.c rename to lib/domains/std/object/navigation_table.c index 88b87d21..09e89de9 100644 --- a/lib/domains/std/objects/navigation_table.c +++ b/lib/domains/std/object/navigation_table.c @@ -17,7 +17,7 @@ void setup() #ifdef USE_MASS set_mass(LARGE); #endif - set_objects((["/domains/std/objects/shovel":1, ]), "on"); + set_objects((["/domains/std/object/shovel":1, ]), "on"); } mixed indirect_get_obj_from_obj(object ob1, object ob2) diff --git a/lib/domains/std/objects/ocean.c b/lib/domains/std/object/ocean.c similarity index 95% rename from lib/domains/std/objects/ocean.c rename to lib/domains/std/object/ocean.c index 05638405..12a73400 100644 --- a/lib/domains/std/objects/ocean.c +++ b/lib/domains/std/object/ocean.c @@ -39,7 +39,7 @@ void setup() void award_points(string direction) { if (evaluate(direction) == "the ocean") - QUEST_D->grant_points(this_body(), "pirate:foundCave"); + QUEST_D->grant_points(this_body(), "std", "Pirate", "foundCave", "begin"); } void on_clone(mixed args...) diff --git a/lib/domains/std/objects/portable_board.c b/lib/domains/std/object/portable_board.c similarity index 100% rename from lib/domains/std/objects/portable_board.c rename to lib/domains/std/object/portable_board.c diff --git a/lib/domains/std/portal.c b/lib/domains/std/object/portal.c similarity index 100% rename from lib/domains/std/portal.c rename to lib/domains/std/object/portal.c diff --git a/lib/domains/std/objects/river.c b/lib/domains/std/object/river.c similarity index 100% rename from lib/domains/std/objects/river.c rename to lib/domains/std/object/river.c diff --git a/lib/domains/std/objects/rock.c b/lib/domains/std/object/rock.c similarity index 100% rename from lib/domains/std/objects/rock.c rename to lib/domains/std/object/rock.c diff --git a/lib/domains/std/objects/rock_wall.c b/lib/domains/std/object/rock_wall.c similarity index 85% rename from lib/domains/std/objects/rock_wall.c rename to lib/domains/std/object/rock_wall.c index 84e984ba..9d416d65 100644 --- a/lib/domains/std/objects/rock_wall.c +++ b/lib/domains/std/object/rock_wall.c @@ -30,5 +30,7 @@ void setup() set_long("You are unable to quite see where it slides."); set_close_msg("The rock slides back."); set_open_msg("The rock slides open, allowing you to exit northwards."); - setup_door("dock wall", "north", "/domains/std/rooms/caves/Small_Dock"); + set_sibling_ident("dock wall"); + set_door_direction("north"); + set_door_destination("/domains/std/room/caves/Small_Dock"); } diff --git a/lib/domains/std/objects/sand_castle.c b/lib/domains/std/object/sand_castle.c similarity index 100% rename from lib/domains/std/objects/sand_castle.c rename to lib/domains/std/object/sand_castle.c diff --git a/lib/domains/std/objects/sand_with_treasure.c b/lib/domains/std/object/sand_with_treasure.c similarity index 100% rename from lib/domains/std/objects/sand_with_treasure.c rename to lib/domains/std/object/sand_with_treasure.c diff --git a/lib/domains/std/objects/shovel.c b/lib/domains/std/object/shovel.c similarity index 100% rename from lib/domains/std/objects/shovel.c rename to lib/domains/std/object/shovel.c diff --git a/lib/domains/std/objects/treasure_chest.c b/lib/domains/std/object/treasure_chest.c similarity index 100% rename from lib/domains/std/objects/treasure_chest.c rename to lib/domains/std/object/treasure_chest.c diff --git a/lib/domains/std/web.c b/lib/domains/std/object/web.c similarity index 97% rename from lib/domains/std/web.c rename to lib/domains/std/object/web.c index 78f1c705..5749ef16 100644 --- a/lib/domains/std/web.c +++ b/lib/domains/std/object/web.c @@ -52,7 +52,7 @@ varargs void do_search(object with, string item) write("Put your hand into _that_? Not likely.\n"); return; } - if (with->query_is_lit() && with->is_flame()) + if (with->is_lit() && with->is_flame()) { do_light(with); return; diff --git a/lib/domains/std/objects/welcome_sign.c b/lib/domains/std/object/welcome_sign.c similarity index 100% rename from lib/domains/std/objects/welcome_sign.c rename to lib/domains/std/object/welcome_sign.c diff --git a/lib/domains/std/objects/dead_adventurer.c b/lib/domains/std/objects/dead_adventurer.c deleted file mode 100644 index 1e735615..00000000 --- a/lib/domains/std/objects/dead_adventurer.c +++ /dev/null @@ -1,18 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -inherit CORPSE; - -void mudlib_setup() -{ - ::mudlib_setup("adventurer"); -} - -void setup() -{ - set_proper_name(0); - set_adj("adventurer's", "brave"); - set_objects( - (["/domains/std/objects/pac_sword":1, - "/domains/std/objects/platemail":1, "/domains/std/objects/lantern":1, "/domains/std/objects/backpack":1, ])); - set_unique(1); -} diff --git a/lib/domains/std/pet.c b/lib/domains/std/pet.c index 8a0903da..31000310 100644 --- a/lib/domains/std/pet.c +++ b/lib/domains/std/pet.c @@ -101,7 +101,7 @@ void setup() string name; master = this_body(); - if (file = read_file("/wiz/" + master->query_name() + "/.petrc")) + if (file = read_file(WIZ_DIR+"/" + master->query_name() + "/.petrc")) m = parse_file(file); else m = ([]); diff --git a/lib/domains/std/Attic.c b/lib/domains/std/room/Attic.c similarity index 85% rename from lib/domains/std/Attic.c rename to lib/domains/std/room/Attic.c index c35eab41..0a2427c3 100644 --- a/lib/domains/std/Attic.c +++ b/lib/domains/std/room/Attic.c @@ -16,6 +16,6 @@ void setup() " the west, and a button beside the door.\n$lamp"); set_state_description("lamp_on", "\nThe lamp on the button beside the elevator is lit.\n"); set_light(1); - set_objects((["/std/elevator_door":({"west", "/domains/std//elevator"}), - "/std/elevator_call_button":({"3/attic", "/domains/std//elevator"}), ])); + set_objects((["/std/elevator_door":({"west", "/domains/std/room/elevator"}), + "/std/elevator_call_button":({"3/attic", "/domains/std/room/elevator"}), ])); } diff --git a/lib/domains/std/Car_Wash.c b/lib/domains/std/room/Car_Wash.c similarity index 100% rename from lib/domains/std/Car_Wash.c rename to lib/domains/std/room/Car_Wash.c diff --git a/lib/domains/std/Church.c b/lib/domains/std/room/Church.c similarity index 90% rename from lib/domains/std/Church.c rename to lib/domains/std/room/Church.c index 7041008b..d049981a 100644 --- a/lib/domains/std/Church.c +++ b/lib/domains/std/room/Church.c @@ -19,8 +19,8 @@ void setup() " Dead people come to the church and pray.\nThere is a clock on th" "e wall.\nThere is an exit to south.$lamp"); set_state_description("lamp_on", "\nThe lamp beside the elevator is lit.\n"); - set_objects((["/std/elevator_door":({"west", "/domains/std//elevator"}), - "/std/elevator_call_button":({"2/church", "/domains/std//elevator"}), ])); + set_objects((["/std/elevator_door":({"west", "/domains/std/room/elevator"}), + "/std/elevator_call_button":({"2/church", "/domains/std/room/elevator"}), ])); add_item("pit", "In the middle of the church is a deep pit.\n It was used for sacrifice in the old times, but " "nowadays\n it is only left for tourists to look at.\n"); } diff --git a/lib/domains/std/Example_Room1.c b/lib/domains/std/room/Example_Room1.c similarity index 97% rename from lib/domains/std/Example_Room1.c rename to lib/domains/std/room/Example_Room1.c index 4e17a35f..aff2db8d 100644 --- a/lib/domains/std/Example_Room1.c +++ b/lib/domains/std/room/Example_Room1.c @@ -29,7 +29,7 @@ mixed can_go_str(string dir) /* * Setup() is where you define what makes your room differant from * the other rooms on the mud. Setup() in the Lima mudlib is used instead - * of create() in the rooms/objects. + * of create() in the rooms/object. */ void setup() { @@ -69,7 +69,7 @@ void setup() * clearer. for more information on what you can do see help exits. */ set_exits((["west":"Wizroom", - "south":"Relations_And_Toys", "north":"/domains/std/rooms/V_Plains/4/7", "east":"Car_Wash", ])); + "south":"Relations_And_Toys", "north":"/domains/std/room/V_Plains/4/7", "east":"Car_Wash", ])); // This sets a special message to be seen when you enter the room on the other // side of the specified exit @@ -103,5 +103,5 @@ void setup() * room, if the safe no longer exists in this room it will be cloned and * moved into the room. */ - set_objects(([])); + set_objects((["^std/monster/robert":1])); } diff --git a/lib/domains/std/Heaven.c b/lib/domains/std/room/Heaven.c similarity index 100% rename from lib/domains/std/Heaven.c rename to lib/domains/std/room/Heaven.c diff --git a/lib/domains/std/room/Laboratory.c b/lib/domains/std/room/Laboratory.c new file mode 100644 index 00000000..0e3122d1 --- /dev/null +++ b/lib/domains/std/room/Laboratory.c @@ -0,0 +1,15 @@ +/* Do not remove the headers from this file! see /USAGE for more info. */ + +#include + +inherit INDOOR_ROOM; + +void setup() +{ + + /* ensure this place is lit, regardless of DEFAULT_LIGHT_LEVEL */ + set_light(1); + + set_brief("Testing lab"); + set_long("If mudlib tests ever need a room for testing, this is the room to use. It's LAB in mudlib.h."); +} diff --git a/lib/domains/std/rooms/Labroom.c b/lib/domains/std/room/Labroom.c similarity index 100% rename from lib/domains/std/rooms/Labroom.c rename to lib/domains/std/room/Labroom.c diff --git a/lib/domains/std/rooms/Labyrinth.c b/lib/domains/std/room/Labyrinth.c similarity index 100% rename from lib/domains/std/rooms/Labyrinth.c rename to lib/domains/std/room/Labyrinth.c diff --git a/lib/domains/std/Lava_Room.c b/lib/domains/std/room/Lava_Room.c similarity index 100% rename from lib/domains/std/Lava_Room.c rename to lib/domains/std/room/Lava_Room.c diff --git a/lib/domains/std/Monster_Room.c b/lib/domains/std/room/Monster_Room.c similarity index 90% rename from lib/domains/std/Monster_Room.c rename to lib/domains/std/room/Monster_Room.c index 5a45d041..8d6057dc 100644 --- a/lib/domains/std/Monster_Room.c +++ b/lib/domains/std/room/Monster_Room.c @@ -10,7 +10,7 @@ void setup() "introduced to other wizards. There aren't any around yet, since everybody is waiting for the combat " "sequences to be completed. The Grand Hall is to the north."); set_exits((["north":"Wizroom.c"])); - set_objects((["/domains/std/guild_guard":({"sorcery"})])); + set_objects((["/domains/std/monster/guild_guard":({"sorcery"})])); } string *query_hint(int level) diff --git a/lib/domains/std/Quiet_Room.c b/lib/domains/std/room/Quiet_Room.c similarity index 87% rename from lib/domains/std/Quiet_Room.c rename to lib/domains/std/room/Quiet_Room.c index 34ab9cb5..72a71857 100644 --- a/lib/domains/std/Quiet_Room.c +++ b/lib/domains/std/room/Quiet_Room.c @@ -10,5 +10,5 @@ void setup() "read the newspapers and do other tasks without all the distractions of the Grand Hall, due to the " "invincible stubbornness of human nature, it has become the spot for many a holy war. Still, if a person " "sits here in the early hours of the morning, it is still relatively quiet and peaceful."); - set_objects((["/domains/std/large_oak_door":({"southwest", "Wizroom"}), ])); + set_objects((["/domains/std/object/large_oak_door":({"southwest", "Wizroom"}), ])); } diff --git a/lib/domains/std/Relations_And_Toys.c b/lib/domains/std/room/Relations_And_Toys.c similarity index 91% rename from lib/domains/std/Relations_And_Toys.c rename to lib/domains/std/room/Relations_And_Toys.c index 85fe8e4c..08b2f669 100644 --- a/lib/domains/std/Relations_And_Toys.c +++ b/lib/domains/std/room/Relations_And_Toys.c @@ -12,5 +12,5 @@ void setup() set_long("Guess what? It's yet another example room. The first example room is back to the north. To the south " "is an ominous looking cave. To the east, it looks like the weather changes alot."); set_exits((["north":"Example_Room1", "east":"Weather_Room", "south":"cult/Foyer", ])); - set_objects((["/domains/std/harry":1])); + set_objects((["/domains/std/monster/harry":1])); } diff --git a/lib/domains/std/Search_Room.c b/lib/domains/std/room/Search_Room.c similarity index 100% rename from lib/domains/std/Search_Room.c rename to lib/domains/std/room/Search_Room.c diff --git a/lib/domains/std/Shop.c b/lib/domains/std/room/Shop.c similarity index 100% rename from lib/domains/std/Shop.c rename to lib/domains/std/room/Shop.c diff --git a/lib/domains/std/rooms/V_Plains.c b/lib/domains/std/room/V_Plains.c similarity index 96% rename from lib/domains/std/rooms/V_Plains.c rename to lib/domains/std/room/V_Plains.c index af0a589d..df651749 100644 --- a/lib/domains/std/rooms/V_Plains.c +++ b/lib/domains/std/room/V_Plains.c @@ -5,7 +5,7 @@ ** ** Format for the object is: ** -** /domains/std/rooms/v_plains/x/y +** /domains/std/room/v_plains/x/y ** ** The data for the plains is pulled from v_plains.data. It is an array ** of description-id values (in the first N non-comment lines). Comments diff --git a/lib/domains/std/Void.c b/lib/domains/std/room/Void.c similarity index 100% rename from lib/domains/std/Void.c rename to lib/domains/std/room/Void.c diff --git a/lib/domains/std/Weather_Room.c b/lib/domains/std/room/Weather_Room.c similarity index 100% rename from lib/domains/std/Weather_Room.c rename to lib/domains/std/room/Weather_Room.c diff --git a/lib/domains/std/Wizroom.c b/lib/domains/std/room/Wizroom.c similarity index 63% rename from lib/domains/std/Wizroom.c rename to lib/domains/std/room/Wizroom.c index 8abc70b9..7cd317f8 100644 --- a/lib/domains/std/Wizroom.c +++ b/lib/domains/std/room/Wizroom.c @@ -12,7 +12,7 @@ void setup() "splashed by flickering blue light, while an equally narrow " "flight leads downwards into the gloom. Two rocky passages leave " "the room. The northwest one is warm and sulfurous, while the " - "air wafting from the south passage smells as though something " + "air wafting from the south passage smells as though something " "had recently died there. For some bizarre reason, there is an " "elevator door off to the west.\n" "A low doorway in the east wall allows access to the example " @@ -24,9 +24,11 @@ void setup() set_state_description("lamp_on", "The lamp beside the elevator is lit."); set_exits((["east":"Example_Room1", "south":"Monster_Room", "northwest":"Lava_Room", ])); set_objects(([STAIRS:({"Attic", "Shop"}), - "large_oak_door":({"northeast", "Quiet_Room"}), "portal":({"/domains/std/rooms/beach/Sandy_Beach"}), - "/std/elevator_door":({"west", "/domains/std/elevator"}), - "/std/elevator_call_button":({"1/lima", "/domains/std/elevator"}), "greeter":1, "map":1, ])); + "../object/large_oak_door":({"northeast", "Quiet_Room"}), + "../object/portal":({"/domains/std/room/beach/Sandy_Beach"}), + "/std/elevator_door":({"west", "/domains/std/room/elevator"}), + "/std/elevator_call_button":({"1/lima", "/domains/std/room/elevator"}), "../monster/greeter":1, + "../object/map":1, ])); set_default_error("Walking through walls is painful. Try a more pleasant " "direction.\n"); set_exit_msg("east", ({"$N $vwomble east.", "$N $vfritter away."})); @@ -45,9 +47,27 @@ void arrived() mixed query_hint(int level) { - if (level>10) + if (level > 10) return "You're a big wizard, you know all about this room."; - return ({"This is a room with many different features and examples for state descriptions, objects, listen, smell and exits.", - "Read the source by using 'more here' or 'cd here' to go to the directory of this file.", - "Use 'talk to greeter' for some basic information about the LIMA Mudlib."}); -} \ No newline at end of file + return ({"This is a room with many different features and examples for state descriptions, objects, listen, smell " + "and exits.", + "Read the source by using 'more here' or 'cd here' to go to the directory of this file.", + "Use 'talk to greeter' for some basic information about the LIMA Mudlib."}); +} + +// These functions are for testing STATE_D and EVENT_D and schedules. +// Use: +// @EVENT_D->register_event("00 12 *","/domains/std/room/Wizroom","ding") +// to schedule the event to run. Cancel it with +// @EVENT_D->unregister_event("/domains/std/room/Wizroom","ding") + +int is_stateful(string d) +{ + return d == "ding" ? 1 : 0; +} + +int state_update(string d) +{ + tell_from_outside(this_object(), "A grandfather clock somewhere goes, \"Ding! Dong!\"."); + return 0; +} diff --git a/lib/domains/std/rooms/beach/Outside_Cave.c b/lib/domains/std/room/beach/Outside_Cave.c similarity index 94% rename from lib/domains/std/rooms/beach/Outside_Cave.c rename to lib/domains/std/room/beach/Outside_Cave.c index c2f394fe..9031ba59 100644 --- a/lib/domains/std/rooms/beach/Outside_Cave.c +++ b/lib/domains/std/room/beach/Outside_Cave.c @@ -12,9 +12,10 @@ void obj_arrived(object ob) return; } - if(!ob->is_living()) { + if (!ob->is_living()) + { receive_inside_msg(capitalize(ob->the_short()) + - " sinks into the surf, and you quickly lose track of it in the violent crashing waves.\n"); + " sinks into the surf, and you quickly lose track of it in the violent crashing waves.\n"); destruct(ob); } } diff --git a/lib/domains/std/rooms/beach/Rocky_Beach.c b/lib/domains/std/room/beach/Rocky_Beach.c similarity index 94% rename from lib/domains/std/rooms/beach/Rocky_Beach.c rename to lib/domains/std/room/beach/Rocky_Beach.c index 1d2efe48..0b7c4d2a 100644 --- a/lib/domains/std/rooms/beach/Rocky_Beach.c +++ b/lib/domains/std/room/beach/Rocky_Beach.c @@ -23,7 +23,7 @@ void setup() "a lot of rocks."); set_hidden_exits("northeast", "northwest", "south", "southeast", "southwest", "north", "east", "west"); - set_objects((["/domains/std/objects/ocean":1, "/domains/std/objects/debris":1, ])); + set_objects((["/domains/std/object/ocean":1, "/domains/std/object/debris":1, ])); } mixed wade(string str) diff --git a/lib/domains/std/rooms/beach/Sandy_Beach.c b/lib/domains/std/room/beach/Sandy_Beach.c similarity index 88% rename from lib/domains/std/rooms/beach/Sandy_Beach.c rename to lib/domains/std/room/beach/Sandy_Beach.c index c4842ca0..11442fc0 100644 --- a/lib/domains/std/rooms/beach/Sandy_Beach.c +++ b/lib/domains/std/room/beach/Sandy_Beach.c @@ -39,9 +39,9 @@ void setup() set_hidden_exits("all"); - set_objects((["/domains/std/objects/sand_castle":1, - "/domains/std/objects/sand_with_treasure":1, "/domains/std/objects/welcome_sign":1, - "/domains/std/objects/ocean":1, + set_objects((["/domains/std/object/sand_castle":1, + "/domains/std/object/sand_with_treasure":1, "/domains/std/object/welcome_sign":1, + "/domains/std/object/ocean":1, ])); } diff --git a/lib/domains/std/rooms/caves/Grotto.c b/lib/domains/std/room/caves/Grotto.c similarity index 94% rename from lib/domains/std/rooms/caves/Grotto.c rename to lib/domains/std/room/caves/Grotto.c index 3f55dd40..afb8ab23 100644 --- a/lib/domains/std/rooms/caves/Grotto.c +++ b/lib/domains/std/room/caves/Grotto.c @@ -19,7 +19,7 @@ void setup() set_default_error("There are tales of mighty wizards who walk through walls, but unfortunately\nthese are but tales " "without foundation.\n"); - set_objects((["/domains/std/objects/dead_adventurer":1, "/domains/std/monster/troll":1, ])); + set_objects((["/domains/std/object/dead_adventurer":1, "/domains/std/monster/troll":1, ])); add_item("cave", "paint", "paintings", "grotto", "The paintings depict many forms of gruesome death." diff --git a/lib/domains/std/rooms/caves/Inside_Cave.c b/lib/domains/std/room/caves/Inside_Cave.c similarity index 100% rename from lib/domains/std/rooms/caves/Inside_Cave.c rename to lib/domains/std/room/caves/Inside_Cave.c diff --git a/lib/domains/std/rooms/caves/Low_Crawl.c b/lib/domains/std/room/caves/Low_Crawl.c similarity index 100% rename from lib/domains/std/rooms/caves/Low_Crawl.c rename to lib/domains/std/room/caves/Low_Crawl.c diff --git a/lib/domains/std/rooms/caves/Navigation_Room.c b/lib/domains/std/room/caves/Navigation_Room.c similarity index 60% rename from lib/domains/std/rooms/caves/Navigation_Room.c rename to lib/domains/std/room/caves/Navigation_Room.c index 06c0e77b..1f2c089d 100644 --- a/lib/domains/std/rooms/caves/Navigation_Room.c +++ b/lib/domains/std/room/caves/Navigation_Room.c @@ -16,11 +16,11 @@ void setup() add_item("legs", "leg", "There's nothing special about the table's legs."); add_item("surface", "There's nothing special about the table's surface."); - set_objects((["/domains/std/objects/navigation_table":1, - "/domains/std/objects/navigation_button":1, - "/domains/std/objects/rock_wall":({ - "north", - "/domains/std/rooms/caves/Small_Dock", - }), - "/domains/std/objects/maps":1, ])); + set_objects((["/domains/std/object/navigation_table":1, + "/domains/std/object/navigation_button":1, + "/domains/std/object/rock_wall":({ + "north", + "/domains/std/room/caves/Small_Dock", + }), + "/domains/std/object/maps":1, ])); } diff --git a/lib/domains/std/rooms/caves/North_Cave.c b/lib/domains/std/room/caves/North_Cave.c similarity index 91% rename from lib/domains/std/rooms/caves/North_Cave.c rename to lib/domains/std/room/caves/North_Cave.c index e1ae89dd..12a05ab6 100644 --- a/lib/domains/std/rooms/caves/North_Cave.c +++ b/lib/domains/std/room/caves/North_Cave.c @@ -10,7 +10,7 @@ void setup() set_long("This is north side of the cavern. To the south you see a small east/west running river. To the west and " "the east the rock walls of the cavern press in ominously."); - set_objects((["/domains/std/objects/gate":({"north", "North_Tunnel"})])); + set_objects((["/domains/std/object/gate":({"north", "North_Tunnel"})])); add_item("wall", "The cave well is your standard everyday rock."); diff --git a/lib/domains/std/rooms/caves/North_Tunnel.c b/lib/domains/std/room/caves/North_Tunnel.c similarity index 84% rename from lib/domains/std/rooms/caves/North_Tunnel.c rename to lib/domains/std/room/caves/North_Tunnel.c index a70296a1..027b2dc0 100644 --- a/lib/domains/std/rooms/caves/North_Tunnel.c +++ b/lib/domains/std/room/caves/North_Tunnel.c @@ -8,7 +8,7 @@ void setup() set_brief("North Tunnel"); set_long("This is a tunnel leading north fro the inside of the cave. more to follow. "); - set_objects((["/domains/std/objects/gate.c":({"south", "North_Cave"})])); + set_objects((["/domains/std/object/gate.c":({"south", "North_Cave"})])); set_state_description("gate_open_off", " To the south is a closed rusty gate."); set_state_description("gate_open_on", " To the south is an open rusty gate."); diff --git a/lib/domains/std/rooms/caves/Sloping_Tunnel.c b/lib/domains/std/room/caves/Sloping_Tunnel.c similarity index 100% rename from lib/domains/std/rooms/caves/Sloping_Tunnel.c rename to lib/domains/std/room/caves/Sloping_Tunnel.c diff --git a/lib/domains/std/rooms/caves/Small_Dock.c b/lib/domains/std/room/caves/Small_Dock.c similarity index 85% rename from lib/domains/std/rooms/caves/Small_Dock.c rename to lib/domains/std/room/caves/Small_Dock.c index 717f729f..885cea99 100644 --- a/lib/domains/std/rooms/caves/Small_Dock.c +++ b/lib/domains/std/room/caves/Small_Dock.c @@ -23,9 +23,9 @@ void setup() "of getting it open.", "open":"There doesn't seem to be a way to open it from here."])); - set_objects((["/domains/std/objects/river":1, - "/domains/std/objects/dock_wall":({"south", "/domains/lima/rooms/caves/Navigation_Room"}), - "/domains/std/objects/dock":1, ])); + set_objects((["/domains/std/object/river":1, + "/domains/std/object/dock_wall":({"south", "/domains/lima/rooms/caves/Navigation_Room"}), + "/domains/std/object/dock":1, ])); } string swim() diff --git a/lib/domains/std/elevator.c b/lib/domains/std/room/elevator.c similarity index 86% rename from lib/domains/std/elevator.c rename to lib/domains/std/room/elevator.c index a028c064..a2e522d4 100644 --- a/lib/domains/std/elevator.c +++ b/lib/domains/std/room/elevator.c @@ -11,9 +11,8 @@ void setup() set_long("You are in the elevator. There are four buttons, labeled " + "'(1) Lima', '(2) Church', '(3) Attic', '(4) Wiz hall'.$elevator_door"); // Set destinations with filenames of where we can go and shorthands. - set_destinations( - (["1/lima":"^std/Wizroom", - "2/church":"^std//Church", "3/attic":"^std//Attic", "4/wizhall":"^std//wiz_hall", ])); + set_destinations((["1/lima":"^std/room/Wizroom", + "2/church":"^std/room/Church", "3/attic":"^std/room/Attic", "4/wizhall":"^std/room/wiz_hall", ])); // Set start position for elevator move_to("2/church"); diff --git a/lib/domains/std/rooms/labyrinth/0,0.c b/lib/domains/std/room/labyrinth/0,0.c similarity index 88% rename from lib/domains/std/rooms/labyrinth/0,0.c rename to lib/domains/std/room/labyrinth/0,0.c index 385d0f35..4fbdcde8 100644 --- a/lib/domains/std/rooms/labyrinth/0,0.c +++ b/lib/domains/std/room/labyrinth/0,0.c @@ -2,7 +2,7 @@ inherit INDOOR_ROOM; -#define LABYRINTH "/domains/std/rooms/labyrinth.c" +#define LABYRINTH "/domains/std/room/labyrinth.c" void setup() { @@ -31,5 +31,5 @@ void setup() add_exit("south", __DIR__ "0,2.c"); } set_long(desc + "as well as west out of the labyrinth.\n"); - add_exit("west", "/domains/std/wizroom"); + add_exit("west", "/domains/std/room/Wizroom"); } diff --git a/lib/domains/std/rooms/storage.c b/lib/domains/std/room/storage.c similarity index 100% rename from lib/domains/std/rooms/storage.c rename to lib/domains/std/room/storage.c diff --git a/lib/domains/std/room/v_plains.data b/lib/domains/std/room/v_plains.data new file mode 100644 index 00000000..420af3e6 --- /dev/null +++ b/lib/domains/std/room/v_plains.data @@ -0,0 +1,60 @@ +# +# v_plains.data -- data file for v_plains.c virtual object server +# +# 960101, Deathblade: created +# + +# +# first, the description id information +# +desc:01103210 +desc:12013102 +desc:22133211 +desc:12030012 +desc:21131001 +desc:11332120 +desc:20300112 +desc:11312001 + +# +# next, the edge rooms. we need 8 for the north edge, 8 for the east edge, +# 8 for the south edge, then 8 for the west edge. +# +# for now, all exits will go back to the Example_Room1. +# +# 8 north exits +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +# 8 east exits +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +# 8 south exits +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +# 8 west exits +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 +/domains/std/room/Example_Room1 diff --git a/lib/domains/std/wiz_hall.c b/lib/domains/std/room/wiz_hall.c similarity index 89% rename from lib/domains/std/wiz_hall.c rename to lib/domains/std/room/wiz_hall.c index 28c983b3..b1fbb7cb 100644 --- a/lib/domains/std/wiz_hall.c +++ b/lib/domains/std/room/wiz_hall.c @@ -30,7 +30,7 @@ void setup() "e north.$lamp"); set_state_description("lamp_on", "\nThere is a lit lamp beside the elevator.\n"); set_light(1); - set_objects((["/std/elevator_door":({"west", "/domains/std//elevator"}), - "/std/elevator_call_button":({"4/wizhall", "/domains/std//elevator"}), ])); + set_objects((["/std/elevator_door":({"west", "/domains/std/room/elevator"}), + "/std/elevator_call_button":({"4/wizhall", "/domains/std/room/elevator"}), ])); set_exits((["north":"quest_room.scr", ])); } diff --git a/lib/domains/std/rooms/v_plains.data b/lib/domains/std/rooms/v_plains.data deleted file mode 100644 index 28e632ae..00000000 --- a/lib/domains/std/rooms/v_plains.data +++ /dev/null @@ -1,60 +0,0 @@ -# -# v_plains.data -- data file for v_plains.c virtual object server -# -# 960101, Deathblade: created -# - -# -# first, the description id information -# -desc:01103210 -desc:12013102 -desc:22133211 -desc:12030012 -desc:21131001 -desc:11332120 -desc:20300112 -desc:11312001 - -# -# next, the edge rooms. we need 8 for the north edge, 8 for the east edge, -# 8 for the south edge, then 8 for the west edge. -# -# for now, all exits will go back to the Example_Room1. -# -# 8 north exits -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -# 8 east exits -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -# 8 south exits -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -# 8 west exits -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 -/domains/std/Example_Room1 diff --git a/lib/domains/std/scarf.c b/lib/domains/std/scarf.c deleted file mode 100644 index 3d90afa0..00000000 --- a/lib/domains/std/scarf.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Do not remove the headers from this file! see /USAGE for more info. */ - -#ifdef USE_BODYSLOTS -#include -#endif - -inherit OBJ; -inherit M_GETTABLE; -inherit M_WEARABLE; - - -void setup() -{ - set_adj("red"); - set_id("scarf"); -#ifdef USE_BODYSLOTS - set_slot(HEAD); -#endif - set_value(10000); -#ifdef USE_SIZE - set_size(SMALL); -#endif -#ifdef USE_MASS - set_mass(SMALL); -#endif -} diff --git a/lib/domains/std/school/R/amulet.c b/lib/domains/std/school/R/amulet.c index f006d582..935414e2 100644 --- a/lib/domains/std/school/R/amulet.c +++ b/lib/domains/std/school/R/amulet.c @@ -4,12 +4,10 @@ inherit INDOOR_ROOM; void setup(){ set_brief("How to make a basic amulet"); set_long(@MAY -#include inherit ARMOUR; void setup() { set_adj("Dusty","dusty","neck"); - set_size(3); set_armour_class (4); set_id("Desert Amulet","Amulet","amulet","desert amulet","armour","armour"); set_long(@KRAMER @@ -18,7 +16,7 @@ magical aura because it is glowing a little and is making somewhat of a faint noise. KRAMER ); - set_size(SMALL); + set_weight(0.2); set_slot("neck"); } MAY diff --git a/lib/domains/std/school/R/app_part3.c b/lib/domains/std/school/R/app_part3.c index 112814a6..4886d62e 100644 --- a/lib/domains/std/school/R/app_part3.c +++ b/lib/domains/std/school/R/app_part3.c @@ -12,7 +12,7 @@ when coding ANYTHING with color if color is allowed in what you are coding. 2) Descriptions are for painting pictures in the mind: Think of it as telling a short story about a room, item, etc. Remember, while writing it, how your -favorite author describes his settings, and apply that to your setting. +favourite author describes his settings, and apply that to your setting. 3) If the room has a ceiling, walls and a floor, you must have descriptions for all of those: Even if it's just something as simple as "The ceiling is high diff --git a/lib/domains/std/school/R/app_part6.c b/lib/domains/std/school/R/app_part6.c index 64178732..47079b4b 100644 --- a/lib/domains/std/school/R/app_part6.c +++ b/lib/domains/std/school/R/app_part6.c @@ -9,7 +9,7 @@ sentences should go smoothly, and not be chopped up. If your description starts wit the sentence like in #4, and is followed by "A large bowl sits in the middle of the floor. The walls are lined with burned out torches." It's kinda like saying" This is here. That is there. Oh, and this has this other thing." -It tends to confuse players. Again, remember how your favorite Author writes +It tends to confuse players. Again, remember how your favourite Author writes descriptions and apply that. diff --git a/lib/domains/std/school/R/apple.c b/lib/domains/std/school/R/apple.c index 4b7684f5..a6bb7981 100644 --- a/lib/domains/std/school/R/apple.c +++ b/lib/domains/std/school/R/apple.c @@ -25,6 +25,6 @@ MAY "pantry" : R + "pantry", ]) ); set_objects( ([ - "/domains/std/apple" : 1, + "/domains/std/consumable/apple" : 1, ]) ); } diff --git a/lib/domains/std/school/R/boots.c b/lib/domains/std/school/R/boots.c index d933de4d..1d05dd01 100644 --- a/lib/domains/std/school/R/boots.c +++ b/lib/domains/std/school/R/boots.c @@ -4,7 +4,6 @@ inherit INDOOR_ROOM; void setup(){ set_brief("How to make basic boots"); set_long(@MAY -#include inherit ARMOUR; inherit M_READABLE; @@ -23,7 +22,7 @@ The inscription reads 'I am boots of swift, wear me, love me for I protect your feet everywhere you go.' KAAN ); - set_size(SMALL); + set_weight(1); set_slot("feet"); } MAY diff --git a/lib/domains/std/school/R/chainmail01.c b/lib/domains/std/school/R/chainmail01.c index 9aff0980..728f0cad 100644 --- a/lib/domains/std/school/R/chainmail01.c +++ b/lib/domains/std/school/R/chainmail01.c @@ -28,6 +28,6 @@ MAY "forward" : "chainmail02", ]) ); set_objects( ([ - "/domains/std/chainmail" : 1, + "/domains/std/armour/chainmail" : 1, ]) ); } diff --git a/lib/domains/std/school/R/chainmail02.c b/lib/domains/std/school/R/chainmail02.c index 1aab0c67..fa1652d5 100644 --- a/lib/domains/std/school/R/chainmail02.c +++ b/lib/domains/std/school/R/chainmail02.c @@ -7,16 +7,13 @@ void setup(){ Starting with chainmail, as in previous room: -#include , so you use abbreviations (eg TORSO for "torso") - Within setup(), add custom wear messages Use set_resist() for strength adjustment against different damage types. -#include set_resist("slashing", 2); // a little better against blades set_wearmsg( "$N $vput on a $o." ); - set_slot(TORSO); + set_slot("torso"); } MAY diff --git a/lib/domains/std/school/R/gloves.c b/lib/domains/std/school/R/gloves.c index 89a8ff37..d3f38e6e 100644 --- a/lib/domains/std/school/R/gloves.c +++ b/lib/domains/std/school/R/gloves.c @@ -4,20 +4,17 @@ inherit INDOOR_ROOM; void setup(){ set_brief("How to make basic gloves"); set_long(@MAY -#include inherit ARMOUR; -void set_slot(string); void setup() { set_adj("Black","black","hands"); - set_size(13); set_armour_class (3); set_id("gloves","Gloves","mitts","armour","armour"); set_long(@KAAN These are black gloves for demonstration KAAN ); - set_size(MEDIUM); + set_weight(0.2); set_slot("hands"); } MAY diff --git a/lib/domains/std/school/R/interactive01.c b/lib/domains/std/school/R/interactive01.c index cef42d2d..097c0681 100644 --- a/lib/domains/std/school/R/interactive01.c +++ b/lib/domains/std/school/R/interactive01.c @@ -28,6 +28,6 @@ MAY ); ]) ); set_objects( ([ - "/domains/std/harry" : 1, + "/domains/std/monster/harry" : 1, ]) ); } diff --git a/lib/domains/std/school/R/interactive02.c b/lib/domains/std/school/R/interactive02.c index 6703a6ed..7d3db27d 100644 --- a/lib/domains/std/school/R/interactive02.c +++ b/lib/domains/std/school/R/interactive02.c @@ -26,6 +26,6 @@ MAY ); ]) ); set_objects( ([ - "/domains/std/harry" : 1, + "/domains/std/monster/harry" : 1, ]) ); } diff --git a/lib/domains/std/school/R/monster.c b/lib/domains/std/school/R/monster.c index 3fda021e..587c3537 100644 --- a/lib/domains/std/school/R/monster.c +++ b/lib/domains/std/school/R/monster.c @@ -16,8 +16,8 @@ void setup() { This is a very scary monster. KYLISSA ); - set_wielding("/wiz/kylissa/gotham/W/skull_sword"); - set_wearing("/wiz/kylissa/gotham/A/skull_plate"); + set_wielding(WIZ_DIR+"/kylissa/gotham/W/skull_sword"); + set_wearing(WIZ_DIR+"/kylissa/gotham/A/skull_plate"); } MAY ); diff --git a/lib/domains/std/school/R/platemail.c b/lib/domains/std/school/R/platemail.c index 584a34bd..eb878153 100644 --- a/lib/domains/std/school/R/platemail.c +++ b/lib/domains/std/school/R/platemail.c @@ -4,12 +4,10 @@ inherit INDOOR_ROOM; void setup(){ set_brief("How to make platemail"); set_long(@MAY -#include inherit ARMOUR; void setup() { set_adj("Black","black","torso"); - set_size(73); set_armour_class (8); set_id("platemail","Platemail","mail","plate","armour","armour"); set_long(@KAAN @@ -18,7 +16,7 @@ no refelctive surfaces but shapes in the form of a black storm trooper's torso shape. KAAN ); - set_size(LARGE); + set_wight(25); set_slot("torso"); } MAY diff --git a/lib/domains/std/school/R/set_exit.c b/lib/domains/std/school/R/set_exit.c index 15c6ab7f..06cab673 100644 --- a/lib/domains/std/school/R/set_exit.c +++ b/lib/domains/std/school/R/set_exit.c @@ -8,7 +8,7 @@ To do a set_exit think of it this way: "direction going to" : "path of the room going to", so... - "may" : "/wiz/may/workroom", + "may" : WIZ_DIR+"/may/workroom", will take you in the direction "may" and the workroom is the location doing to please note do not add the .c to the path. @@ -19,7 +19,7 @@ please note do not add the .c to the path. // where R is defined in the .h file as the path needed to find this // filename set_exits( ([ - "may" : "/wiz/may/workroom", + "may" : WIZ_DIR+"/may/workroom", "east" : "shop", "south" : "fmagehall", "west" : "donation" diff --git a/lib/domains/std/school/R/shield.c b/lib/domains/std/school/R/shield.c index 2f45067d..5c4700ad 100644 --- a/lib/domains/std/school/R/shield.c +++ b/lib/domains/std/school/R/shield.c @@ -4,21 +4,19 @@ inherit INDOOR_ROOM; void setup(){ set_brief("How to make a basic shield"); set_long(@MAY -#include inherit ARMOUR; void setup() { set_adj("Black","black","right","arm"); add_adj("right"); - set_size(39); set_armour_class (10); set_id("shield","Shield","armour","armour"); set_long(@KAAN This is a black shield for demonstration. KAAN ); - set_size(LARGE); + set_weight(5.0); set_slot("right hand"); } MAY diff --git a/lib/domains/std/school/R/sword02.c b/lib/domains/std/school/R/sword02.c index 40e92c33..f295c013 100644 --- a/lib/domains/std/school/R/sword02.c +++ b/lib/domains/std/school/R/sword02.c @@ -22,6 +22,6 @@ MAY "weaponry" : R "weaponry", ]) ); set_objects( ([ - "/domains/std/objects/weapon/sword" : 1, + "/domains/std/weapon/sword" : 1, ]) ); } diff --git a/lib/domains/std/school/R/wander02.c b/lib/domains/std/school/R/wander02.c index 58482c92..c0c84c2b 100644 --- a/lib/domains/std/school/R/wander02.c +++ b/lib/domains/std/school/R/wander02.c @@ -22,6 +22,6 @@ MAY ); "backward" : R "wander01", ]) ); set_objects( ([ - "/domains/std/dragon" : 1, + "/domains/std/monster/dragon" : 1, ]) ); } diff --git a/lib/domains/std/shopkeeper.c b/lib/domains/std/shopkeeper.c index 75b8b3d3..32c0a263 100644 --- a/lib/domains/std/shopkeeper.c +++ b/lib/domains/std/shopkeeper.c @@ -25,11 +25,7 @@ void setup() filename : # if # is set to -1, it will sell an infinite # of that item */ - set_sell(([__DIR__ "apple":-1, - "^std/weapon/sword":3, - __DIR__ - "ale":-1, - ])); + set_sell((["^std/consumable/apple":-1, "^std/weapon/sword":3, __DIR__ "ale":-1, ])); add_sell("^std/weapon/stick", 2, ({"red"})); add_sell("^std/weapon/stick", 1, ({"blue"})); diff --git a/lib/domains/std/trainer.c b/lib/domains/std/trainer.c index caedb4cf..d79ef85a 100644 --- a/lib/domains/std/trainer.c +++ b/lib/domains/std/trainer.c @@ -20,8 +20,8 @@ void setup() set_proper_name("Tara"); set_in_room_desc("Tara, a confident looking female fighter"); set_long("Tara is quite buff and seems to have great skills with a range of weapons."); - - //Set skills we train. These will be automatically shown during 'talk to ...'. + + // Set skills we train. These will be automatically shown during 'talk to ...'. set_trainer_skill("combat/defense/disarm", skill); set_trainer_skill("combat/defense/dodge", skill); set_trainer_skill("combat/melee", skill); @@ -29,9 +29,9 @@ void setup() set_trainer_skill("combat/melee/club", skill); set_trainer_skill("combat/melee/improv", skill); set_trainer_skill("combat/melee/unarmed", skill); - - //Stats we train - set_train_stat(({"strength","agility"})); + + // Stats we train + set_train_stat(({"strength", "agility"})); set_options((["hello":"Hi! Can you tell how skills work?", "potential":"What do you mean potential?", "trainpts":"How do I see how many training points I have?", diff --git a/lib/domains/std/weapon/club.c b/lib/domains/std/weapon/club.c index f358eac3..1fc2844f 100644 --- a/lib/domains/std/weapon/club.c +++ b/lib/domains/std/weapon/club.c @@ -3,7 +3,6 @@ inherit WEAPON; inherit M_THROWABLE; - void setup() { set_adj("simple"); diff --git a/lib/domains/std/crossbow.c b/lib/domains/std/weapon/crossbow.c similarity index 100% rename from lib/domains/std/crossbow.c rename to lib/domains/std/weapon/crossbow.c diff --git a/lib/domains/std/weapon/greataxe.c b/lib/domains/std/weapon/greataxe.c index 557749f7..4ab828ed 100644 --- a/lib/domains/std/weapon/greataxe.c +++ b/lib/domains/std/weapon/greataxe.c @@ -2,7 +2,6 @@ inherit WEAPON; - void setup() { set_id("greataxe", "axe"); diff --git a/lib/domains/std/weapon/longsword.c b/lib/domains/std/weapon/longsword.c index b307cbfd..dee59970 100644 --- a/lib/domains/std/weapon/longsword.c +++ b/lib/domains/std/weapon/longsword.c @@ -4,14 +4,14 @@ inherit SWORD; void setup() { - set_weapon_class(8); - set_id("longsword"); - set_weight(1.3); - set_value(15); - set_skill_used("combat/melee/blade"); - set_skill_restriction("combat/melee/blade", 1); - set_skill_restriction_message("The longsword feels foreign in $p hand. $N $vwield it like $n would wield a shortsword."); - add_combat_message("miss", "$N $vtake an untrained swipe at $t, but only $vsucceed in losing $p footing."); - set_can_dual_wield(1); + set_weapon_class(8); + set_id("longsword"); + set_weight(1.3); + set_value(15); + set_skill_used("combat/melee/blade"); + set_skill_restriction("combat/melee/blade", 1); + set_skill_restriction_message( + "The longsword feels foreign in $p hand. $N $vwield it like $n would wield a shortsword."); + add_combat_message("miss", "$N $vtake an untrained swipe at $t, but only $vsucceed in losing $p footing."); + set_can_dual_wield(1); } - diff --git a/lib/domains/std/weapon/mantis_eagle_m25.c b/lib/domains/std/weapon/mantis_eagle_m25.c index 132422b8..4515c52e 100644 --- a/lib/domains/std/weapon/mantis_eagle_m25.c +++ b/lib/domains/std/weapon/mantis_eagle_m25.c @@ -14,5 +14,6 @@ void setup() set_skill_used("combat/melee/club"); set_ammo_type("11mm bullets"); set_combat_messages("combat-torch"); - set_salvageable((["textile":10, "metal":70, "nature":20])); + set_salvageable((["textile":10, "metal":70, "wood":20])); + set_can_dual_wield(1); } diff --git a/lib/domains/std/weapon/pac_sword.c b/lib/domains/std/weapon/pac_sword.c index fe91a124..23b4f723 100644 --- a/lib/domains/std/weapon/pac_sword.c +++ b/lib/domains/std/weapon/pac_sword.c @@ -62,11 +62,6 @@ void setup() set_id("sword"); add_id("mercy"); add_adj("sword of"); - set_proper_name("the Sword of Mercy"); -#ifdef USE_SIZE - set_size(MEDIUM); -#endif -#ifdef USE_MASS - set_mass(MEDIUM); -#endif + // set_proper_name("the Sword of Mercy"); + set_weight(1.5); } diff --git a/lib/domains/std/weapon/rapier.c b/lib/domains/std/weapon/rapier.c index 94b6af66..3fa6de38 100644 --- a/lib/domains/std/weapon/rapier.c +++ b/lib/domains/std/weapon/rapier.c @@ -1,18 +1,18 @@ /* Do not remove the headers from this file! see /USAGE for more info. */ -//Example rapier that modified a skill when wielded, and removes it again when unwielded. -//Notice custom property "skillfull". +// Example rapier that modified a skill when wielded, and removes it again when unwielded. +// Notice custom property "skillfull". inherit SWORD; void wielded() { - environment()->add_skill_bonus("combat/defense/stance",200); + environment()->add_skill_bonus("combat/defense/stance", 200); } void unwielded() { - environment()->remove_skill_bonus("combat/defense/stance",200); + environment()->remove_skill_bonus("combat/defense/stance", 200); } void setup() diff --git a/lib/domains/std/weapon/special_longsword.c b/lib/domains/std/weapon/special_longsword.c index 07d8e4fb..308ef7cd 100644 --- a/lib/domains/std/weapon/special_longsword.c +++ b/lib/domains/std/weapon/special_longsword.c @@ -5,12 +5,12 @@ inherit M_SPECIAL_WEAPON; void setup() { - ::setup(); - roll_item(); + ::setup(); + roll_item(); } void internal_setup() { - m_special_weapon::internal_setup(); - longsword::internal_setup(); + m_special_weapon::internal_setup(); + longsword::internal_setup(); } \ No newline at end of file diff --git a/lib/domains/std/weapon/stick.c b/lib/domains/std/weapon/stick.c index 11ef77de..8b90c254 100644 --- a/lib/domains/std/weapon/stick.c +++ b/lib/domains/std/weapon/stick.c @@ -3,18 +3,17 @@ inherit WEAPON; inherit M_THROWABLE; - string colour; void setup(string c) { - colour=c; + colour = c; set_adj(colour); set_id("stick"); set_weapon_class(2); set_damage_type("bludgeon"); - set_long("A simple stick coloured "+colour+"."); - set_in_room_desc("A "+colour+" stick is lying on the ground."); + set_long("A simple stick coloured " + colour + "."); + set_in_room_desc("A " + colour + " stick is lying on the ground."); set_weight(1); set_value(2); set_skill_used("combat/melee/club"); @@ -27,7 +26,7 @@ mixed *setup_args() return ({colour}); } -//This hints can be read by cloning the stick and doing 'hints stick'. +// This hints can be read by cloning the stick and doing 'hints stick'. string query_hint(int level) { return "Yes, it's a stick."; diff --git a/lib/domains/std/weapon/sword.c b/lib/domains/std/weapon/sword.c index 1b9909af..328a952e 100644 --- a/lib/domains/std/weapon/sword.c +++ b/lib/domains/std/weapon/sword.c @@ -2,17 +2,11 @@ inherit SWORD; - void setup() { set_adj("dull"); - set_weapon_class(15); -#ifdef USE_SIZE - set_size(MEDIUM); -#endif -#ifdef USE_MASS - set_mass(MEDIUM); -#endif - set_value(1000); + set_weapon_class(5); + set_weight(1.1); + set_value(15); add_combat_message("miss", "$N $vtake a clumsy swipe at $t, but only $vsucceed in making a fool of $r."); } diff --git a/lib/help/_restrict b/lib/help/_restrict index cb5c9f57..40ad9967 100644 --- a/lib/help/_restrict +++ b/lib/help/_restrict @@ -17,17 +17,21 @@ # assumed to have a min-level of 0 (players can see the # topics). Level 99 means the help_d will ignore it. # +# The file also supports subfolders in /help, e.g. +# autodoc/player_command : 0 can be set as well as players +# needs access to this folder even if inside autodoc. +# # And, of course, lines beginning with # are ignored # # This file is parsed by help_d.c. # -player : 0 - +autodoc/player_command : 0 +fluffos: 1 wizard : 1 autodoc : 1 - admin : 5 + # # we want the help_d to ignore this directory; the hint system # uses it instead diff --git a/lib/help/admin/command/.gitignore b/lib/help/admin/command/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/help/player/actions b/lib/help/player/actions deleted file mode 100644 index 8d17d4f7..00000000 --- a/lib/help/player/actions +++ /dev/null @@ -1,35 +0,0 @@ - Communicating With the mud - -The Lima mudlib is able to understand a wide range of user input, -which is unlike most other MU*'s which normally require very terse and -specific commands. However, it is a computer game, not an english professor. -Therefore, while it does its best to understand what you type, -it does have its limits. - -The following examples should give you an idea of what is acceptable: - -north -go north -go through the window -give the red barin to the old wizard -look through beek's crystal ball -drop the hat. -drop the silver hammer -drop all my zorkmids -trade all my weapons for a magic potato -ask the urchin about his jacket - -Some points to keep in mind: - -o Always use lower case letters for entering input. -o Use adjectives to distinguish between like objects. - For example,if you see a red book and a green book, and use "get book" - it will NOT assume for you, but will ask you to specify unambiguously - which one you mean. - If you use "a" or "any" (eg "get a book") it will choose randomly, - and you may get the "wrong" one. - -If there is any input you think the mud should accept and does not, -please use the idea command. - - diff --git a/lib/help/player/actions.rst b/lib/help/player/actions.rst new file mode 100644 index 00000000..8ef18f85 --- /dev/null +++ b/lib/help/player/actions.rst @@ -0,0 +1,38 @@ +Communicating With the mud +########################## + +.. TAGS: RST + +The Lima mudlib is able to understand a wide range of user input, +which is unlike most other MU*'s which normally require very terse and +specific commands. However, it is a computer game, not an english professor. +Therefore, while it does its best to understand what you type, +it does have its limits. + +The following examples should give you an idea of what is acceptable: + + | ``north`` + | ``go north`` + | ``go through the window`` + | ``give the red barin to the old wizard`` + | ``look through beek's crystal ball`` + | ``drop the hat`` + | ``drop the silver hammer`` + | ``drop all my zorkmids`` + | ``trade all my weapons for a magic potato`` + | ``ask the urchin about his jacket`` + +Some points to keep in mind: + +- Always use lower case letters for entering input. +- Use adjectives to distinguish between like objects. + + For example,if you see a red book and a green book, and use "get book" + it will NOT assume for you, but will ask you to specify unambiguously + which one you mean. + + If you use "a" or "any", eg ``get a book``, it will choose randomly, + and you may get the "wrong" one. + +If there is any input you think the mud should accept and does not, +please use the idea command. \ No newline at end of file diff --git a/lib/help/player/bin/_README b/lib/help/player/bin/_README deleted file mode 100644 index 6fd280d3..00000000 --- a/lib/help/player/bin/_README +++ /dev/null @@ -1,2 +0,0 @@ -These are the help files for the commands that are found in -the /bin/player directory. diff --git a/lib/help/player/bin/emotions b/lib/help/player/bin/emotions deleted file mode 100644 index 105c0861..00000000 --- a/lib/help/player/bin/emotions +++ /dev/null @@ -1,13 +0,0 @@ -USAGE: feelings - -With a pattern, feelings will show you all souls matching the given pattern. -Without an argument, feelings will list all available soul commands. - -Examples: - - feelings -- show all souls - feelings s -- show all souls beginning w/ an s - feelings s*e -- show all souls beggining w/ an s, - having anything in the middle, and - ending with an e. - diff --git a/lib/help/player/bin/gossip b/lib/help/player/bin/gossip deleted file mode 100644 index d764345f..00000000 --- a/lib/help/player/bin/gossip +++ /dev/null @@ -1,12 +0,0 @@ -$$ see: channels, chan, newbie -USAGE: gossip /on | /off or - gossip /list or - gossip /who or - gossip /last or - gossip or - gossip ; or - gossip : - -This channel is for exactly what the name implies. Gossip about -anything you want, but stick to the rules regarding what you say. -Basically, keep profanities off the channel! diff --git a/lib/help/player/bin/newbie b/lib/help/player/bin/newbie deleted file mode 100644 index f02194ee..00000000 --- a/lib/help/player/bin/newbie +++ /dev/null @@ -1,12 +0,0 @@ -$$ see: channels, chan, gossip -USAGE: newbie /on | /off or - newbie /list or - newbie /who or - newbie /last or - newbie or - newbie ; or - newbie : - -This channel is for "newbie" players to ask questions and get -help and information about the MUD. Please be helpful if you -listen to this channel. diff --git a/lib/help/player/bin/unalias b/lib/help/player/bin/unalias deleted file mode 100644 index df15cd9d..00000000 --- a/lib/help/player/bin/unalias +++ /dev/null @@ -1,4 +0,0 @@ -$$ see: alias -USAGE: unalias - -Removes an alias. diff --git a/lib/help/player/channels b/lib/help/player/channels deleted file mode 100644 index f72c61b8..00000000 --- a/lib/help/player/channels +++ /dev/null @@ -1,40 +0,0 @@ -$$ see: gossip, newbie, chan, feelings, conference -Channels are a means of commnunication with other players on the MUD. -Players may listen to a channel to take part in conversation with players -that are not even in the same room. - -Two channels are provided, by default, for players: gossip and newbie. -The gossip channel is for any sort of discussion the listeners may -wish. The newbie channel is for newbie players to ask questions and -get help when they first start playing. - -Players may create and listen to additional channels as they please -by using the /new flag to the chan command (see below). -[ note: we may restrict this in the future ] - -All interaction with the channels is performed with the "chan" command. -Here are some example uses of the chan command: - -chan - list channels being listened to -chan gossip - find out whether the 'gossip' channel is - begin listened to -chan gossip /on - turn listening on for the 'gossip' channel -chan gossip /off - stop listening to 'gossip' -chan gossip /list - find out who is listening to 'gossip' -chan gossip /who - same as /list -chan gossip /last - show the last 20 messages on the channel -chan gossip - send to all listeners -chan gossip ; - perform over the channel - (e.g. chan gossip ;grin) -chan gossip : - send to all listeners - (e.g. chan gossip :wants a big sword!) -chan mine /new - create the "mine" channel - -Of course, the 'gossip' may be replaced with any channel name you -might want to use. - -Once you are listening to a channel, then you can simply use that -channel's name as a command. For example, if you listen to the gossip -channel, then you can do: - -gossip ;smile diff --git a/lib/help/player/channels.rst b/lib/help/player/channels.rst new file mode 100644 index 00000000..6c030bc2 --- /dev/null +++ b/lib/help/player/channels.rst @@ -0,0 +1,60 @@ +Channels +======== + +See: `gossip `_ `newbie `_ `new `_ `feelings <../player_command/feelings.html>`_ + +.. TAGS: RST + +Channels are a means of commnunication with other players on the MUD. +Players may listen to a channel to take part in conversation with players +that are not even in the same room. + +Two channels are provided, by default, for players: gossip and newbie. +The gossip channel is for any sort of discussion the listeners may +wish. The newbie channel is for newbie players to ask questions and +get help when they first start playing. + +Players may create and listen to additional channels as they please +by using the /new flag to the chan command (see below). +[ note: we may restrict this in the future ] + +All interaction with the channels is performed with the "chan" command. +Here are some example uses of the chan command: + ++-----------------------+-----------------------------------------------+ +| Command | Result | ++=======================+===============================================+ +| chan | List channels being listened to | ++-----------------------+-----------------------------------------------+ +| chan gossip | Find out whether the 'gossip' channel is | +| | being listened to | ++-----------------------+-----------------------------------------------+ +| chan gossip /on | Turn listening on for the 'gossip' channel | ++-----------------------+-----------------------------------------------+ +| chan gossip /off | Stop listening to 'gossip' | ++-----------------------+-----------------------------------------------+ +| chan gossip /list | Find out who is listening to 'gossip' | ++-----------------------+-----------------------------------------------+ +| chan gossip /who | Same as /list | ++-----------------------+-----------------------------------------------+ +| chan gossip /last | Show the last 20 messages on the channel | ++-----------------------+-----------------------------------------------+ +| chan gossip | Send to all listeners | ++-----------------------+-----------------------------------------------+ +| chan gossip ; | Perform over the channel | +| | (e.g. chan gossip ;grin) | ++-----------------------+-----------------------------------------------+ +| chan gossip : | Send to all listeners | +| | (e.g. chan gossip :wants a big sword!) | ++-----------------------+-----------------------------------------------+ +| chan mine /new | Create the "mine" channel | ++-----------------------+-----------------------------------------------+ + +Of course, the 'gossip' may be replaced with any channel name you +might want to use. + +Once you are listening to a channel, then you can simply use that +channel's name as a command. For example, if you listen to the gossip +channel, then you can do: + + ``gossip ;smile`` diff --git a/lib/help/player/color b/lib/help/player/color deleted file mode 100644 index 0838ba23..00000000 --- a/lib/help/player/color +++ /dev/null @@ -1,4 +0,0 @@ -This mud supports ansi colors. If you want to see them, -type: - ansi on - diff --git a/lib/help/player/color.rst b/lib/help/player/color.rst new file mode 100644 index 00000000..ac22198d --- /dev/null +++ b/lib/help/player/color.rst @@ -0,0 +1,11 @@ +Color +===== + +.. TAGS: RST + +This MUD supports ansi colours. If you want to see them, type: + ``mode`` + +and follow the instructions. + + diff --git a/lib/help/player/colour.rst b/lib/help/player/colour.rst new file mode 100644 index 00000000..082dbe16 --- /dev/null +++ b/lib/help/player/colour.rst @@ -0,0 +1,10 @@ +Colour +====== +.. TAGS: RST + +This MUD supports ansi colours. If you want to see them, type: + ``mode`` + +and follow the instructions. + + diff --git a/lib/help/player/command/.gitignore b/lib/help/player/command/.gitignore deleted file mode 100644 index e69de29b..00000000 diff --git a/lib/help/player/commands b/lib/help/player/commands deleted file mode 100644 index 964e583a..00000000 --- a/lib/help/player/commands +++ /dev/null @@ -1,25 +0,0 @@ -The following commands are currently available: - -adverbs alias bug chan -chanlist converse date emote -emoteapropos exits feelings finger -groups help history i -idea inactive mail menu -mudlist news passwd pipe -quit reply save say -score set shout su -tell title typo unalias -unset uptime whisper who -wizcall - -You can also try many "real life verbs", which have no help because they use -real english syntax. For example: -look at rust -move the yellow table - -some of these verbs include: -close cross drink drop -eat fill flip get -go kill look move -open pour press put -read smell wield diff --git a/lib/help/player/commands.rst b/lib/help/player/commands.rst new file mode 100644 index 00000000..de936788 --- /dev/null +++ b/lib/help/player/commands.rst @@ -0,0 +1,46 @@ +Commands +======== + +.. TAGS: RST +.. INFO: This help file is created using 'docs playerdoc'. Don't edit manually. + +The following commands are currently available: + +adverbs exits mail question snoopable +biff feedback materials quests su +brief feelings menu quit suicide +bug finger metric random tell +chan frames mode random2 time +chanlist groups money reply timezone +colours help mudlist rows title +converse hint news save typo +describe hints nickname score verbose +emoji hp palette semote version +emote idea party shout who +emoteapropos inactive passwd simplify width +equip inventory plan skills wizcall + +You can also try many "real life verbs", which have no help because they use +real english syntax. For example: + ``look at rust`` + ``move the yellow table`` + +The following verbs are currently available: + +activate diagnose get pick sell unwield +apply dig give post sit use +ascend dismount go pour smell wade +ask drink kill pray smoke wait +board drive knock press stand wave +buy drop lie pull swim wear +cast dualwield light put switch whisper +climb eat list read talk wield +close enter listen ready throw wind +count exit load remove tie wish +craft extinguish lock repair touch write +crawl fill look ring turn xyzzy +cross fire mount salvage unlock +curse flip move say unready +descend follow open search untie + +Some of the verbs have aliases, like 'repair' can be 'fix' or 'patch'. diff --git a/lib/help/player/conference b/lib/help/player/conference deleted file mode 100644 index 1991f804..00000000 --- a/lib/help/player/conference +++ /dev/null @@ -1,26 +0,0 @@ -$$ see: chan, channels, groups -Conferencing is possible through the moderation facilities of channels. -The "conf" channel and alias are available for conferences, although -any channel can actually be moderated. - -Channels have a few extra commands available when they are being -moderated: - -chan conf - shows the moderator, the current speaker, and - whether your hand is raised to speak. The - moderator will see a list of people with their - hands raised. -chan conf /raise - raise your hand to speak -chan conf /lower - lower your hand - -chan conf /call - for moderator use: call on the first person in - the list of people with raised hands -chan conf /call joe - for moderator use: call on joe to speak (joe - must have his hand raised) - -chan conf /moderate - for admin and moderator group member use: begin - moderating a particular channel - - -The current speaker and the moderator are the only people allowed to -communicate over the channel (using normal messages, emotes, etc.). diff --git a/lib/help/player/conference.rst b/lib/help/player/conference.rst new file mode 100644 index 00000000..d7340406 --- /dev/null +++ b/lib/help/player/conference.rst @@ -0,0 +1,29 @@ +Conference / moderation +####################### + +.. TAGS: RST + +Conferencing is possible through the moderation facilities of channels. +The "conf" channel and alias are available for conferences, although +any channel can actually be moderated. + +Channels have a few extra commands available when they are being +moderated: + + | chan conf - shows the moderator, the current speaker, and + | whether your hand is raised to speak. The + | moderator will see a list of people with their + | hands raised. + | chan conf /raise - raise your hand to speak + | chan conf /lower - lower your hand + | + | chan conf /call - for moderator use: call on the first person in + | the list of people with raised hands + | chan conf /call joe - for moderator use: call on joe to speak (joe + | must have his hand raised) + | + | chan conf /moderate - for admin and moderator group member use: begin + | moderating a particular channel + +The current speaker and the moderator are the only people allowed to +communicate over the channel (using normal messages, emotes, etc.). diff --git a/lib/help/player/discipline b/lib/help/player/discipline.rst similarity index 76% rename from lib/help/player/discipline rename to lib/help/player/discipline.rst index 5c58099b..f403df76 100644 --- a/lib/help/player/discipline +++ b/lib/help/player/discipline.rst @@ -1,4 +1,8 @@ -$$ see: rules +Discipline +########## + +.. TAGS: RST + Following are the possible punishments established on this MUD, in order of severity. Any reports of violation of the established rules, whether it by players or by Wizards, are will be dealt with by the staff of this @@ -8,17 +12,18 @@ $$ see: rules A note though, we are not sadistic people. We really do this for nothing but your enjoyment and because we enjoy it. We would certainly be overjoyed if there were never any need to punish anybody, but our - experience with other muds and human behavior in general suggests that + experience with other MUDs and human behavior in general suggests that it will happen. And we have found that when a player knows that what he or she has done is explicitly forbidden for the good of the game, that it is much easier for them to accept the consequences of their actions, and for them to avoid trouble. - (See "help rules" for an explanation of the rules on this MUD) +(See "help rules" for an explanation of the rules on this MUD) + +Typical Punishments on this MUD +=============================== - Typical Punishments on this MUD: ----------------------------------- - * One warning against such actions, after which more severe tactics will + - One warning against such actions, after which more severe tactics will be implemented. Note: You are *not* entitled to a warning. In cases of particularly severe offenses or cases where it must have @@ -26,31 +31,31 @@ $$ see: rules sexual harrassment, for example) harsher penalties may be enforced for a first offence. - * Character punishments may take various forms, temporary or permanent. + - Character punishments may take various forms, temporary or permanent. The administration may use a curse of sorts to disable certain actions or may lower stats, skills, hit points, wealth, or equipment, as decided by the staff. - * Character destruction, more commonly known as "dest-ing", in which the + - Character destruction, more commonly known as "dest-ing", in which the current copy of the offending character is instantaneously destroyed, yet your ability to log in again, and use your character as it was last saved is not affected. - * Character banishment, also known as "nuke-ing," or "ridding," may be + - Character banishment, also known as "nuke-ing," or "ridding," may be employed in extreme cases, so that the offending character is dested, and erased from all files, as if he/she never had existed. - * Controlling a site. If many "problem-characters," start springing up from + - Controlling a site. If many "problem-characters," start springing up from one single site, or internet connection, and we are unable to convince the offending individuals to cease and desist then any new characters logging in from your site may be required to e-mail the staff of this MUD in order to get a character. - * Site Banishment. Perhaps the most severe form of punishment, may be used + - Site Banishment. Perhaps the most severe form of punishment, may be used as a near last resort. It means that all users from your entire site or internet connection will be banned forever from connecting to this MUD. If this happens, one player may have "blown it" for hundreds or thousands of potential players in the future. It is truly sad when we have to do this, as our experience is that there are always some 'good' players along with the bad. If you do this to your site, your peers will not - be at all pleased in "real life." + be at all pleased in "real life." \ No newline at end of file diff --git a/lib/help/player/emotions.rst b/lib/help/player/emotions.rst new file mode 100644 index 00000000..586e75e9 --- /dev/null +++ b/lib/help/player/emotions.rst @@ -0,0 +1,16 @@ +Feelings +======== +.. TAGS: RST + +USAGE: + ``feelings `` + +With a pattern, feelings will show you all souls matching the given pattern. +Without an argument, feelings will list all available soul commands. + +Examples: + + | feelings -- show all souls + | feelings s -- show all souls beginning w/ an s + | feelings s*e -- show all souls beggining w/ an s, having anything in the middle, and ending with an e. + diff --git a/lib/help/player/gossip.rst b/lib/help/player/gossip.rst new file mode 100644 index 00000000..a331eb9c --- /dev/null +++ b/lib/help/player/gossip.rst @@ -0,0 +1,19 @@ +Gossip channel +============== +See: `chanlist <../player_command/chanlist.html>`_ `chan <../player_command/chan.html>`_ `newbie `_ + +.. TAGS: RST + +This channel is for exactly what the name implies. Gossip about +anything you want, but stick to the rules regarding what you say. +Basically, keep profanities off the channel! + +USAGE: + ``gossip /on | /off`` + ``gossip /list`` + ``gossip /who`` + ``gossip /last`` + ``gossip `` + ``gossip ;`` + ``gossip :`` + diff --git a/lib/help/player/new.rst b/lib/help/player/new.rst new file mode 100644 index 00000000..21f358ef --- /dev/null +++ b/lib/help/player/new.rst @@ -0,0 +1,62 @@ +Welcome to the MUD! +******************* +.. TAGS: RST + +If you are *new* to the world of mudding, this document should help you get on your way. If you are a veteran, or simply experienced with MUDs, you may as well bypass this document all together. + +What is a MUD? +============== +The term "MUD" stands for "Multi-User Dungeon", or "Domain." It is a world created for people everywhere to role-play in different genres with people all over the world, as if they were in the same room. (Usually a room which only exists in fantasy or sci-fi.) + +What do I have to do? +===================== +All that is required of you, the player, is to simply have fun. Wander around, explore, play the game, and chat with other players. Just think of a MUD as any other role playing game. Improve your character, perform daring deeds, experience adventure, and interact with other characters who are simply doing exactly what you are. + +How do I do something? +====================== +Well, quite simply, just do it. + +Movement: + - If you want to wander south, just type "south". This works for all compass directions, as well as "up" and "down". + +Examining your environment: + - If you want to see the room you're in, and its contents, "look", or if you want to look AT or IN something, use "look at/in". + +Communication: + - Player characters (other real life users like yourself) speak to each other on the MUD, and will eventually speak to YOU. If they don't, and you want to butt in anyway... (Yeah, you guessed it, + + | ``say Hello.`` or + | ``tell bob Hi there!`` or + | ``shout Hello Mudders!`` + +Actions: + - Want something? Then "take/get" it. Don't want in anymore? Then ``drop`` it. Other actions are often defined for particular situations or objects, like ``tie rope``, ``pull lever``, ``kill monster``. + +Emotion or Soul commands: + - Are you happy and damn proud of it? Then ``smile`` or ``smile mary`` if you are happy with her. (type ``feelings`` to see what you can do - there is a lot, so use ``emoteapropos smile`` to see all feelings that contains the word ``smile``). + +Help: + - Overall, if you're confused, ask around, someone's bound to help. People are generally friendly and social, and were once totally new to MUDs just like you are. + +Rules +===== +As a player here, you are responsible for knowing the rules. Type ``help rules`` to see what they are. Type ``help topics`` to get a list of what you can find out from the help documents. With all this, you will quickly be on your way to adventuring in the addictive world of MUDs. Congratulations! + +Some quick abbreviations to save time +===================================== + ++------------------------------+-------------------------+ +| Shortcut | Action | ++==============================+=========================+ +| s,n,e,w,ne,nw,se,sw,u,d | Moves you in the | +| | compass directions | ++------------------------------+-------------------------+ +| i | Lists your inventory | ++------------------------------+-------------------------+ +| exa (something) | Lets you look at, or | +| | examine something | ++------------------------------+-------------------------+ +| 'hello | Means "say hello" | ++------------------------------+-------------------------+ + +Type alias to see what else you might be able to abbreviate. diff --git a/lib/help/player/newbie b/lib/help/player/newbie deleted file mode 100644 index 81ab0308..00000000 --- a/lib/help/player/newbie +++ /dev/null @@ -1,62 +0,0 @@ -$$ see: topics, rules - Welcome to Zork MUD!!! - - If you are new to the world of mudding, this document should help you - get on your way. If you are a veteran, or simply experienced with Muds, - you may as well bypass this document all together. :-) - - * What is a MUD? - + The term "MUD" stands for "Multi-User Dungeon", or "Domain." It - is a world created for people everywhere to role-play in different - genres with people all over the world, as if they were in the same - room. (Usually a room which only exists in fantasy or sci-fi.) - - * What do I have to do? - + All that is required of you, the player, is to simply have fun. - Wander around, explore, play the game, and chat with other players. - Just think of a Mud as any other role playing game. Improve your - character, perform daring deeds, experience adventure, and interact - with other characters who are simply doing exactly what you are. - - * How do I do something? - + Well, quite simply, just do it. - + Movement: - - If you want to wander south, just type "south". This works for all - compass directions, as well as "up" and "down". - + Examining your environment: - - If you want to see the room you're in, and its contents, "look", or - if you want to look AT or IN something, use "look at/in". - + Communication: - - Player characters (other real life users like yourself) speak to - each other on the MUD, and will eventually speak to YOU. If they - don't, and you want to butt in anyway... (Yeah, you guessed it, - "say Hello." or "tell bob Hi there!" or "shout Hello Mudders!" - but without the double quotes.) - + Actions: - - Want something? Then "take/get" it. Don't want in anymore? - Then "drop" it. Other actions are often defined for particular - situations or objects, like "tie rope," "pull lever," "kill monster." - Funny how art imitates life, eh? Want to show the world you're - Type help actions for more on this topic. - + Emotion or Soul commands: - - Are you happy and damn proud of it? Then "smile" or "smile mary" if - you are happy with her. (type "feelings" to see what you can do). - + Help: - - Overall, if you're confused, ask around, someone's bound to help. - People are generally friendly and social, and were once totally new - to muds just like you are. - - * Rules: - + As a player here, you are responsible for knowing the rules. Type - "help rules" to see what they are. Type "help topics" to get a list - of what you can find out from the help documents. With all this, you - will quickly be on your way to adventuring in the addictive world of - MUDs. Congratulations! - - =+=+=+=+= Some quick abbreviations to save time =+=+=+=+= - s,n,e,w,ne,nw,se,sw,u,d (Moves you in the compass directions.) - i (Lists your inventory) - exa (Lets you look at, or Examine ) - 'hello (Means "say hello") - - (type alias to see what else you might be able to abbreviate.) diff --git a/lib/help/player/newbie.rst b/lib/help/player/newbie.rst new file mode 100644 index 00000000..77fed7b1 --- /dev/null +++ b/lib/help/player/newbie.rst @@ -0,0 +1,19 @@ +Newbie channel +============== +See: `chanlist <../player_command/chanlist.html>`_ `random <../player_command/chan.html>`_ `gossip `_ + +.. TAGS: RST + +This channel is for "newbie" players to ask questions and get +help and information about the MUD. Please, be helpful if you +listen to this channel and try to contribute if you know the answers. + +USAGE: + ``newbie /on | /off`` + ``newbie /list`` + ``newbie /who`` + ``newbie /last`` + ``newbie `` + ``newbie ;`` + ``newbie :`` + diff --git a/lib/help/player/parties.rst b/lib/help/player/parties.rst new file mode 100644 index 00000000..30a520cf --- /dev/null +++ b/lib/help/player/parties.rst @@ -0,0 +1,27 @@ +Parties +####### + +.. TAGS: RST + +Parties can be formed on the MUD to share loot and experience points between +players. The party can be created using the 'party' command, with a password +to join set. Players aware of this password can join the party should they want to. + +The party lead has specific actions: + +- Changing the password +- Inviting other players +- Kicking members +- Changing lead +- Signing over lead to another party member. + +Each party can have a colour theme, that can be shown in various locations. + +Each party tracks how many kills are done, by whom, and the last 10 kills can be +shown at any time. + +To start a party, use the ``party`` command, to join one after receiving an invite +use ``party join``. + +As a member of a party, you can see how your party compares to other active +parties, and show you a list of who is in your party and see their contribution. diff --git a/lib/help/player/privacy b/lib/help/player/privacy.rst similarity index 64% rename from lib/help/player/privacy rename to lib/help/player/privacy.rst index 72522623..124eabb1 100644 --- a/lib/help/player/privacy +++ b/lib/help/player/privacy.rst @@ -1,41 +1,44 @@ -$$ see: snoopable -Though technically your legal rights on a mud are very limited, +Privacy +======= +.. TAGS: RST + +See: `snoopable <../player_command/snoopable.html>`_ + +Though technically your legal rights on a MUD are very limited, the administration of this MUD tries its best to treat you as human beings, and respect your privacy. The most destructive -invasion of privacy on muds is the ability for Wizards to snoop. +invasion of privacy on MUDs is the ability for Wizards to snoop. This MUD's policy on snooping is hard coded: -1) There is a player command called "snoopable." Turning it on +#. There is a player command called "snoopable." Turning it on allows a Wizard to snoop you. Default is off. If you want to show a Wizard a bug, or have them watch what you are doing for some reason, turn it on, but otherwise it's a good idea to leave it off to protect your privacy. - -2) Administrators of the mud will always be able to snoop you. They + +#. Administrators of the MUD will always be able to snoop you. They have been hand-picked so that they are EXTREMELY trustable individuals with excellent and final judgment. They will only make use of this power when cheating or other illegal behavior is STRONGLY suspected. -3) All Wizards have the ability to override your "snoopable" flag. +#. All Wizards have the ability to override your "snoopable" flag. The only valid excuse for doing this is if they have an EXTREMELY good reason for doing this without your consent. If they STRONGLY suspect illegal behavior, and there is no Administrator around to handle the problem, they may override. -4) ANY use of this override command will be carefully scrutinized by - the administration of the mud. The Wizard MUST provide a reason +#. ANY use of this override command will be carefully scrutinized by + the administration of the MUD. The Wizard MUST provide a reason before the command will work, and they are required to turn in a report about the snoop afterwards. -5) Wizards using the override command without excuse, or whoose +#. Wizards using the override command without excuse, or whoose excuse is deemed inadequate by an Admin will be publicly reprimanded once, then dismissed if such an event happens again. -6) The Wizards are physically incapable of superseding these rules. +#. The Wizards are physically incapable of superseding these rules. However, there is no protection from a Wizard eavesdropping by being invisible in a room in which a conversation is occurring. Though Wizards are expected to show discretion, you may restrict - your conversations to tells if you want to ensure privacy. - -Rust + your conversations to tells if you want to ensure privacy. \ No newline at end of file diff --git a/lib/help/player/quests/pirate b/lib/help/player/quests/pirate deleted file mode 100644 index fa4346cf..00000000 --- a/lib/help/player/quests/pirate +++ /dev/null @@ -1,5 +0,0 @@ -This example quest comes with the LIMA distribution. To solve the quest, -you must find the treasure chest of the dreaded pirate Bloitbeard! - -Difficulty: easy - diff --git a/lib/help/player/quests/quests b/lib/help/player/quests/quests deleted file mode 100644 index 6778f2cd..00000000 --- a/lib/help/player/quests/quests +++ /dev/null @@ -1,7 +0,0 @@ -Help for quests: - -To list all the quests, type: -quests - -To see help on a quest (if it exists =( ) type: -help questname diff --git a/lib/help/player/rules b/lib/help/player/rules.rst similarity index 75% rename from lib/help/player/rules rename to lib/help/player/rules.rst index deaca095..8c2e9954 100644 --- a/lib/help/player/rules +++ b/lib/help/player/rules.rst @@ -1,16 +1,22 @@ -$$ see: bug, idea, typo, discipline - Following are the rules set up by the Administration of this MUD. You, as - a player or visitor, to the MUD, are responsible for knowing and abiding - by these rules. They have been set up to make the MUD a more enjoyable - playing experience for everyone involved. Failure to do so can result in - a number of punishments, to be detailed in related documents. - - Rule Book for the MUD: ------------------------- +Rules +##### +.. TAGS: RST + +See: `bug <../player_command/bug.html>`_ `idea <../player_command/idea.html>`_ `typo <../player_command/typo.html>`_ `discipline `_ + +Following are the rules set up by the Administration of this MUD. You, as +a player or visitor, to the MUD, are responsible for knowing and abiding +by these rules. They have been set up to make the MUD a more enjoyable +playing experience for everyone involved. Failure to do so can result in +a number of punishments, to be detailed in related documents. + +Rule Book for the MUD +===================== + * Second characters are permitted on this MUD, BUT, only under the following circumstances: + They must be played as separate, individual characters. This means that - the two characters may not be logged into the mud at the same time. + the two characters may not be logged into the MUD at the same time. A character who has gone "net-dead," or has lose link still counts as a logged in character. + The characters may not be switched with the intent to pass items or @@ -39,7 +45,7 @@ $$ see: bug, idea, typo, discipline the game less enjoyable for everyone, and can, in some cases, erase player files or crash the game. On the other hand, good and honest reporting of bugs, ideas and typoes are much appreciated by the Staff - of Zork Mud. + of the MUD. * Deliberate link-death is illegal. Any use of link-death, such as to prevent death, or to prevent punishment or damage, or any other clever diff --git a/lib/help/player/socials b/lib/help/player/socials deleted file mode 100644 index 1a83e198..00000000 --- a/lib/help/player/socials +++ /dev/null @@ -1,2 +0,0 @@ -See: -help feelings diff --git a/lib/help/player/socials.rst b/lib/help/player/socials.rst new file mode 100644 index 00000000..c0c5887d --- /dev/null +++ b/lib/help/player/socials.rst @@ -0,0 +1,7 @@ +Socials +======= +.. TAGS: RST + +See: `feelings <../player_command/feelings.html>`_ `emotions `_ + +See feelings command. \ No newline at end of file diff --git a/lib/help/player/soul b/lib/help/player/soul deleted file mode 100644 index 1a83e198..00000000 --- a/lib/help/player/soul +++ /dev/null @@ -1,2 +0,0 @@ -See: -help feelings diff --git a/lib/help/player/soul.rst b/lib/help/player/soul.rst new file mode 100644 index 00000000..c485ca97 --- /dev/null +++ b/lib/help/player/soul.rst @@ -0,0 +1,7 @@ +Soul +==== +.. TAGS: RST + +See: `feelings <../player_command/feelings.html>`_ `emotions `_ + +See feelings command. \ No newline at end of file diff --git a/lib/help/player/souls b/lib/help/player/souls deleted file mode 100644 index 1a83e198..00000000 --- a/lib/help/player/souls +++ /dev/null @@ -1,2 +0,0 @@ -See: -help feelings diff --git a/lib/help/player/souls.rst b/lib/help/player/souls.rst new file mode 100644 index 00000000..1bde87cf --- /dev/null +++ b/lib/help/player/souls.rst @@ -0,0 +1,7 @@ +Souls +===== +.. TAGS: RST + +See: `feelings <../player_command/feelings.html>`_ `emotions `_ + +See feelings command. \ No newline at end of file diff --git a/lib/help/player/unalias.rst b/lib/help/player/unalias.rst new file mode 100644 index 00000000..2d3fa2c2 --- /dev/null +++ b/lib/help/player/unalias.rst @@ -0,0 +1,8 @@ +Unalias +======= +.. TAGS: RST + +USAGE: + ``unalias `` + +Removes an alias. diff --git a/lib/help/player/wizzing b/lib/help/player/wizzing.rst similarity index 93% rename from lib/help/player/wizzing rename to lib/help/player/wizzing.rst index 0082c1ac..cd0c59f4 100644 --- a/lib/help/player/wizzing +++ b/lib/help/player/wizzing.rst @@ -1,3 +1,7 @@ +Becoming a wizard +================= +.. TAGS: RST + Right now, becoming a wizard on the MUD has no firm requirements. NOTE: A strong knowledge of the theme is ESSENTIAL as is diff --git a/lib/help/rst/index.rst b/lib/help/rst/index.rst deleted file mode 100644 index b65e7df4..00000000 --- a/lib/help/rst/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -************************************ -Welcome to LIMA Mudlib Documentation -************************************ - -**LIMA** (ˈlaɪmə) is FluffOS based Mudlib originally developed in the 1990's. - -Check out the `usage `_ page for further information, including -how to `install `_ the project. A small helper on `messaging `_ -is also available. - -Latest changes -============== -- `Changes in 1.1a1 (Currently Alpha version) `_ -- `Changes in 1.0b6 `_ - -Commands -======== -- `Player Commands `_ - commands for players -- `Verbs `_ - common interactions with the mudlib -- `Other commands `_ - mostly for wizards and admins - -Mudlib -====== -- `Daemons `_ - documentation and functions -- `Modules `_ - modules -- `Mudlib `_ - mudlib stuff -- `In game help `_ - in game help files -- `API `_ - and other things - -.. note:: - - The LIMA documentation project is under active development. - diff --git a/lib/help/wizard/bin/I b/lib/help/wizard/bin/I deleted file mode 100644 index 9b268ccd..00000000 --- a/lib/help/wizard/bin/I +++ /dev/null @@ -1,14 +0,0 @@ -$$ see: didlog - -USAGE: I - - This command produces the "did" log when you first log on. -The use of thes command allows you to let other wizards -know about any changes or additions that you made to the mud. - -I started adding help files for some wiz cmds - -When logging in next time you will see: - -Wed Aug 23 17:48:49 1995: Zifnab started adding help files for some wiz - cmds diff --git a/lib/help/wizard/bin/addemote b/lib/help/wizard/bin/addemote deleted file mode 100644 index c423e79e..00000000 --- a/lib/help/wizard/bin/addemote +++ /dev/null @@ -1,36 +0,0 @@ -$$ see: feelings, m_messages, rmemote, showemote, stupidemote, targetemote - -USAGE: addemote (verb) - - This command allows you to add new souls. (verb) being the soul. - -After entering the addemote soul you will be asked for the rule. -The rule consists of one of the following; OBJ, LIV, STR etc. -Then you will be asked for the message. - -addemote kick -rule OBJ -message: $N $vkick $T - -To add a new rule treat it as if the whole emote was new, just -follow the same steps as for adding a brand new emote. - -The message can also be multiple messages separated by " && "; these -as the message for the doer, others, the first target, the second target ... -respectively. - -e.g. $N $vkick $t hard. && $N $vkick $t hard (how mean). - -gives: -me: You kick Rust hard. -rust: Beek kicks you hard. -room: Beek kicks Rust hard (how mean). - -(when there is no message for the target, they see the first one) - -also: $N $vkick $t hard. && $N $vkick $t hard (how mean). && $N $vkick $t hard (ouch!). - -gives: -me: You kick Rust hard. -rust: Beek kicks you hard (ouch!). -room: Beek kicks Rust hard (how mean). diff --git a/lib/help/wizard/bin/addpath b/lib/help/wizard/bin/addpath deleted file mode 100644 index d431ebc0..00000000 --- a/lib/help/wizard/bin/addpath +++ /dev/null @@ -1,5 +0,0 @@ -$$ see: showpath, rmpath -Usage: addpath [directory] - -This command will add the directory you typed in to your current exec paths in which the command finder will search thru it. - diff --git a/lib/help/wizard/bin/at b/lib/help/wizard/bin/at deleted file mode 100644 index eb86ea50..00000000 --- a/lib/help/wizard/bin/at +++ /dev/null @@ -1,10 +0,0 @@ - -USAGE at - - This command allows you to remotely perform a command -as if you were standing next to the person. - -at beek tickle beek - -Beek will see: Zifnab tickles you. - diff --git a/lib/help/wizard/bin/calls b/lib/help/wizard/bin/calls deleted file mode 100644 index 76a408d4..00000000 --- a/lib/help/wizard/bin/calls +++ /dev/null @@ -1,16 +0,0 @@ - -USAGE: calls - - This command shows you the number of call_outs that are active - - calls - -object Function Delay ------------------------------------------------------------------------------ -/secure/master 1 -/domains/std/harry#474 3 -/domains/std/harry 3 - -There are 3 call_outs active.. -w -q diff --git a/lib/help/wizard/bin/cat b/lib/help/wizard/bin/cat deleted file mode 100644 index ac8f1063..00000000 --- a/lib/help/wizard/bin/cat +++ /dev/null @@ -1,10 +0,0 @@ - -USAGE cat [path/file] - - This command dumps the contents of the named file to your screen -with no page breaks. If no file name is given cat assumes the -last file editted. - - -cat /wiz/zifnab/backup_menu.c - diff --git a/lib/help/wizard/bin/cd b/lib/help/wizard/bin/cd deleted file mode 100644 index 73851d15..00000000 --- a/lib/help/wizard/bin/cd +++ /dev/null @@ -1,8 +0,0 @@ -$$ see: mkdir, ls, pwd, ed - -USAGE: cd [directory] - -Most file commands assume you're talking about your current working -directory, if you do not specify a full path. This command sets your -current directory. If no argument is given, your home directory will -become your current working dir. diff --git a/lib/help/wizard/bin/checkpriv b/lib/help/wizard/bin/checkpriv deleted file mode 100644 index 7d94684e..00000000 --- a/lib/help/wizard/bin/checkpriv +++ /dev/null @@ -1,4 +0,0 @@ - -USAGE: checkpriv < privilege > - - This command will tell you whether or not you have a certain privilege. diff --git a/lib/help/wizard/bin/clean b/lib/help/wizard/bin/clean deleted file mode 100644 index 1233107d..00000000 --- a/lib/help/wizard/bin/clean +++ /dev/null @@ -1,8 +0,0 @@ -$$ see: dest, clone - -USAGE: clean - - This command will destroy everything in your environment if -executed with no args. If given an argument it will destroy all -objects in that object. Especially useful when a pesky wizard or two -clone 20 barney's in your workroom. diff --git a/lib/help/wizard/bin/clone b/lib/help/wizard/bin/clone deleted file mode 100644 index 57ec8446..00000000 --- a/lib/help/wizard/bin/clone +++ /dev/null @@ -1,6 +0,0 @@ -$$ see: dest, clean - -USAGE: clone object - - This command clones an object into your inventory if it is -gettable, and into your environment if it isnt gettable. diff --git a/lib/help/wizard/bin/cp b/lib/help/wizard/bin/cp deleted file mode 100644 index 36d0af0c..00000000 --- a/lib/help/wizard/bin/cp +++ /dev/null @@ -1,22 +0,0 @@ - -USAGE: cp source destination - - This command will allow you to copy files from source to -destination. The source file must exist, the destination may or -may not exist at the time of the copy. If the destination does -not exist one will be created, if the destination does exist, at -the time of the copy it will be overwritten. - -If you do not supply a full path name cp will assume that the -files will be in your current directory. - -cp wizroom.c workroom.c - -I will now have a copy of wizroom.c named workroom.c in the - current directory. - -cp /domains/std/wizroom.c /wiz/zifnab/workroom.c - -I now have a copy of wizroom.c in my home directory named workroom.c - - diff --git a/lib/help/wizard/bin/dataedit b/lib/help/wizard/bin/dataedit deleted file mode 100644 index f8ebc8a5..00000000 --- a/lib/help/wizard/bin/dataedit +++ /dev/null @@ -1,53 +0,0 @@ -USAGE: dataedit file - -'dataedit' allows you to edit .o files created by save_object(), without -having to directly edit the compressed form, and possibly make mistakes -causing the file to restore improperly. - -When you start up dataedit, the file is read, and the filename and variables -in the file appear at the top of the menu. No changes are actually made on -disk until you exit with the 'q' command, or save the new version to a -different file with the 's' command. Using the 'Q' command leaves the file -in its original form. - -Here is a summary of the options available: - -d) Delete Variable: - -Remove the specified variable and value. - -p) Print Expression: - -Print the value of a given expression. The variables may be refered to -using '$varname'. $$, or $ followed by an non-alphanumeric character -can be used to mean a literal $. - -q) Quit and Save: - -Save the internal values to the file being edited, and quit. - -r) Rename Variable: - -Create a new variable with the same value as an old variable, and delete -the old one. - -m) Merge Datafile: - -Merge values from another data file into the current datafile. Arrays and -Mappings are merged by simply adding them; other values will produce mismatches -if the variable exists in both objects. The original version is then kept. - -Q) Quit w/o Saving: - -Quit, leaving the file on disk unmodified. - -=) Set Variable: - -Set a variable (or define one, if it doesn't exist already) to a given value. -The value is any expression, as explained under Print Expression. - -s) Save as ... - -Save the modified file under a new filename. That filename becomes the -current filename. - diff --git a/lib/help/wizard/bin/date b/lib/help/wizard/bin/date deleted file mode 100644 index 958bc923..00000000 --- a/lib/help/wizard/bin/date +++ /dev/null @@ -1,7 +0,0 @@ -Usage: date -Arguments: none - -Displays the current date and time. To display the date with your -current time, use the 'timezone' command. - -[ note: The timezone command is not currently available. ] diff --git a/lib/help/wizard/bin/dest b/lib/help/wizard/bin/dest deleted file mode 100644 index 725834bd..00000000 --- a/lib/help/wizard/bin/dest +++ /dev/null @@ -1,6 +0,0 @@ -$$ see: clone, clean - -USAGE: dest object - - This command destroys an object in your inventory or - in your environment. diff --git a/lib/help/wizard/bin/didlog b/lib/help/wizard/bin/didlog deleted file mode 100644 index 1edc61b6..00000000 --- a/lib/help/wizard/bin/didlog +++ /dev/null @@ -1,10 +0,0 @@ -$$ see: I - -USAGE: didlog or didlog or didlog /on or didlog /off - - This command shows you the "did" log. With no arguements it shows the -log for the past day. With an integer argument it will show the log for -that many days back. - - /off turns didlog notification on login off. /on turns it back -on again. diff --git a/lib/help/wizard/bin/du b/lib/help/wizard/bin/du deleted file mode 100644 index c63cee3e..00000000 --- a/lib/help/wizard/bin/du +++ /dev/null @@ -1,14 +0,0 @@ - -USAGE: du [ path ] - - this command will show you the amount of disk space -is being used. - -If no path is specified du starts from the current -directory and shows disk usage for that directory and -all others under it. - -du - -du / - diff --git a/lib/help/wizard/bin/echo b/lib/help/wizard/bin/echo deleted file mode 100644 index 49897b43..00000000 --- a/lib/help/wizard/bin/echo +++ /dev/null @@ -1,18 +0,0 @@ -$$ see: echoto, echoall - -USAGE: echo (string) - - This command will echo a message to the room exactly as you typed the string. - -echo You suddenly have a strange urge to kill something. - -All users in the room will see the following message on their screens; -You suddenly have a strange urge to kill something. - - -*********** WARNING ************ - - The admin of this mud will not tolerate any type of toying -with players. (i.e. no faked deaths or any other messages of that nature). -Doing this is a direct violation of the mud policy and is grounds for -disciniplary (sp???) action. diff --git a/lib/help/wizard/bin/echoall b/lib/help/wizard/bin/echoall deleted file mode 100644 index 4df5fef2..00000000 --- a/lib/help/wizard/bin/echoall +++ /dev/null @@ -1,20 +0,0 @@ -$$ see: echo, echoto - -USAGE: echoall (string) - -This command will echo a message to the entire mud exactly as you -entered it. - - -echoall You suddenly have a strange urge to kill something. - -All the users on the mud will see on their screen; -You suddenly have this urge to kill something. - - -*********** WARNING ************ - - The admin of this mud will not tolerate any type of toying -with players. (i.e. no faked deaths, or messages of that nature). -Doing this is a direct violation of the mud policy and is grounds for -disciniplary (sp???) action. diff --git a/lib/help/wizard/bin/ed b/lib/help/wizard/bin/ed deleted file mode 100644 index e40986e5..00000000 --- a/lib/help/wizard/bin/ed +++ /dev/null @@ -1,11 +0,0 @@ - -USAGE: ed [ file/path ] - - This is the mud file editor. With no file name supplied -the last file editted will be edited again. If you supply -a file/path that does not exist, ed will respond with [new] -then your ed prompt. - - Help for ed commands is available from within ed itself. - - diff --git a/lib/help/wizard/bin/flist b/lib/help/wizard/bin/flist deleted file mode 100644 index 3d6a6bcd..00000000 --- a/lib/help/wizard/bin/flist +++ /dev/null @@ -1,7 +0,0 @@ - -USAGE: flist -i object, flist object - - This command will show you a list of the functions in an object. -The -i option will show you the function and -where it is found. - diff --git a/lib/help/wizard/bin/force b/lib/help/wizard/bin/force deleted file mode 100644 index 18fd5a00..00000000 --- a/lib/help/wizard/bin/force +++ /dev/null @@ -1,21 +0,0 @@ - -USAGE: force (living command) - - This command will force a player to execute the command you supply - -force ohara north - -This would force Ohara to move to the north if possible. -Ohara would like you to note that "possible" and "a good idea" are two separate things. - - -*********** WARNING ************ - - The admin of this mud will not tolerate any type of toying -with players. Do not force a player into a certain death situation. -Doing this is a direct violation of the mud policy and is grounds for -disciplinary action. - - Ohara also notes that any toying with him may result in a - force dest - diff --git a/lib/help/wizard/bin/goto b/lib/help/wizard/bin/goto deleted file mode 100644 index 21dc4c61..00000000 --- a/lib/help/wizard/bin/goto +++ /dev/null @@ -1,19 +0,0 @@ -$$ see: wizz, trans - -The goto command is a simple method -of teleportation which can move you either -to a specific room or to whatever room -a certain player is in. - - goto - goto - -If the room is in your current directory, -the filename indicates the destination. - - goto workroom.c - -If the room is not in your current directory, -directory/filename format should be used. - - goto /wiz/azy/workroom.c diff --git a/lib/help/wizard/bin/here b/lib/help/wizard/bin/here deleted file mode 100644 index e12ef3d8..00000000 --- a/lib/help/wizard/bin/here +++ /dev/null @@ -1,10 +0,0 @@ - -USAGE: here - - This command shows you the pathname to the file of the object -you are currently in. - -here - -Grand Hall: [/domains/std/wizroom - diff --git a/lib/help/wizard/bin/home b/lib/help/wizard/bin/home deleted file mode 100644 index ad861fad..00000000 --- a/lib/help/wizard/bin/home +++ /dev/null @@ -1,8 +0,0 @@ - -USAGE: home - - This command will take you to your workroom assuming that there is -a file called workroom.c in your home directory. -If you do not have a workroom you will be placed in -/domains/std/wizroom.c. You can also go to another wizards -workroom by home (wizard's name), diff --git a/lib/help/wizard/bin/invis b/lib/help/wizard/bin/invis deleted file mode 100644 index 82787e0a..00000000 --- a/lib/help/wizard/bin/invis +++ /dev/null @@ -1,8 +0,0 @@ -$$ see: vis - -USAGE: invis - - This command will let you turn invisible to players - -At this point invis and vis are kind of up in the air so more will -follow when that settles down. diff --git a/lib/help/wizard/bin/last b/lib/help/wizard/bin/last deleted file mode 100644 index 62354b13..00000000 --- a/lib/help/wizard/bin/last +++ /dev/null @@ -1,16 +0,0 @@ -USAGE: last [-s] [-n count] [-d days] [-D days] [user1 user2 ...] - - -s : be "silent" -- trim headers, displaying just the data - -n count : only display this many users (the most recent) - -d days : display users logged in WITHIN this many days - -D days : display users logged in OLDER than this many days - - user... : display login information for these users - -Note that the options can be combined, but you'll get an error if you -use -d and -D to, say, ask for all users logged in during the past 30 -days and those logged in before 60 days ago. - -For each user found, their name is displayed followed by when they -logged in (if they are still on) or when they logged out, followed by -where they connected from. diff --git a/lib/help/wizard/bin/light b/lib/help/wizard/bin/light deleted file mode 100644 index 52c8f187..00000000 --- a/lib/help/wizard/bin/light +++ /dev/null @@ -1,13 +0,0 @@ - -USAGE: light