wmud/TODO
2012-03-11 15:09:50 +01:00

810 lines
27 KiB
Plaintext

wMUD TODO file
* Store EVERYTHING in an SQLite3 database
* At least two threads. One of them should continuously write everything back
to the database, while the other one should serve the connections. Maybe the
out-of-game chat should be outsourced to a separate thread, either.
* All descriptions should be written in a markup language to support bold,
underline, colours, and such
* Movement
o 10 directions (N, E, S, W, NE, NW, SE, SW, U, D)
o Also, some rooms may have other exits, like portals, which can be ENTER'ed.
o Doors can be locked or hidden
* Planets/Planes
o Rooms are connected to Planets
o Planets are connected to Planes
o Rooms may have different descriptions depending on the Plane the Character
is active on
* Commands already defined in Zim Wiki:
o DROP
o GET
o PRACISE/PRACTICE
o PRAY
o RECALL should take back the character to their house, or the Inn room they
have rented. Specific rooms may have a flag so there must be no recall from
them (this should also mean that upon logout/login, the character will get
back to this room)
o SURVEY
o TALE
* Commands that should be present
o AFFECTS to show all the spells that affects the character (spell name,
apply count, duration, applier name)
o SCORE to show the player's statistics
o INVENTORY to show the character's inventory
o EQUIPMENT to show the equipped items
o AUTOEXIT to toggle exit display on LOOK
o LOOK
o EXITS
o EXAMINE should be an alias to LOOK, except it should work only on objects
o CONSIDER
o SET
. AUTOLOOT [OFF]
. AUTOSKIN [OFF]
. AUTODRAIN [OFF]
. AUTOSPLIT [OFF]
. COLOR [ON ]
. AUTOLOOK [ON ]
. WIMPY [OFF]
. AUTOCONSUME [OFF] (To automatically consume food and drink when
hungry/thirsty)
. GROUPINV [ON ]
. PAGELENGTH [30 ]
o BURY/DIG
o EQUIP/WIELD
o IGNORE/UNIGNORE
o WHO/WHOIS
o QUIT should exit the game
o LOGOUT should go back to intro menu
o USE may use objects in hand (map, weapons with spells, etc.), or in room
(buttons, levers, etc.)
* Player grouping (AKA Party)
* Housing system should automatically expand towns (this will be fun to write).
Maybe a better alternative is to check for free housing and if the amount
goes too low, manually create some new one.
o Housing should be decorated with different objects.
* The whole world should have one fallback start location (Tree of Memories?)
* All Races have at least one possible start locations
* People start in a well-defined start location (randomly selected during
character generation)
* Characters can set their hometown in an Inn; however, Inns have only a
limited amount of rooms. Inn rooms cost some amount of gold per day, which is
pre-paid. If the rent is over, the character's start location is set to one
of the racial defaults. If the character is online when the rent is over,
they should get a warning message about this. If the player gets an own
house, their home location should be automatically set to it
* Item creation (AKA combining or Professions, like Blacksmithing and Alchemy)
o Trainers, who know only specific recipes
o Recipe scrolls (e.g to be dropped by mobs and such)
o Corpse skinning (only specific corpses)
o Corpse butching (only specific corpses)
o Fishing
o Mining
o Foraging
* Container items (bags)
* Companions
o Combat/Pack animals
o Mounts (may also act as combat/pack animals)
o Charming
* Auction system
* Item donation
* Gods
o Gods may be chosen upon character creation (for wMUD, a character MUST have
at least two Gods)
* Reputation system
* Player Guilds
* Sacrifices
* Prayers
* Item types
o Armour/Clothing
. Shields
o Weapon
. Ballista
. Bashing
. Bow
. Crossbow
. Club
. Knuckle
. Lash
. Net
. Piercing
. Slashing
. Whip
o Potion
o Poison (appliable to weapons)
o Food/Water/Alcohol/Sugar
o Light
. Maybe these objects (or some of them) should be seen in the dark
o Spell reagent
o Material
o Artifacts
* Death system, Rebirth
* War Machines
* Shops
o Most shops should open/close depending on the in-game time
* Skills/Spells/Talents granted by the Gods
o Fear
* Magic Profession
* Fighting Professions with practicing
o Disarm
o Dual Wield
o Stun
* The whole system should be built with class support, although wMUD will
technically have only one "Adventurer" class. Also, multiclassing should be
possible
* Character aging, with racial maximum age. When a character is too old, they
can retire (e.g they will become story tellers or such), or die and rebirth.
Reborn characters have a bonus to their maximum age. Upon rebirth they create
a totally new character, with all their old data remaining in the database.
Reborn characters have the possibility to regain all their old powers after a
few years
* Quests given by NPCs
* Player creatable quests
* In-game chat (whisper, say, shout, emotes, group/party, guild). Guild chat
should be accessible without entering the game (from the Circle-like main
menu), or even via IRC or something like that
* Speedwalking?
* Arenas
* Player killing/thieving should be enabled/disabled per world
* Mercy mob flag: mobs will stop attacking if their enemy is unable to fight
any more
* Mobs should be able to wear/wield items, have an inventory, have Skills,
Spells and Talents
* Sneaking, thieving, robbery
o A mob may steal stuff from you, you may detect it, and maybe able to catch
it and get your stuff back. However, killing them in a city may result in
punishment by the guards.
* Gossips
* Bragging NPCs: if a character gets killed by a specific NPCs, those NPCs will
humiliate that character for a while
* Weapon USE: wielded weapons may do something (like cast spells or such) if a
specific attribute is set. The item spell should recharge over time, or
recharge upon a specific condition
* Money (with the possibility to create several money types, like different
currencies for different Races)
* Banks
o Money deposit (with interest in some banks)
o Storage, for a fee
o Loans
* Guild bank
* All looted items should be used in some way or another. Sacrifice is a common
way, but some items may be milled (e.g bones and herbs) or disassembled (e.g
Mechanics objects or armour), others may be used as raw materials. Extracted
body parts (e.g blood or meat) should decompose over time, even in an
inventory, unless put in a special container
* Object affects and attribute modifiers, like an earring which make the
character deaf. These affects may be hidden, and even delayed (e.g the
character puts on the earring that gives a high amount of charisma, but after
wearing it for a specific time, they will become deaf, and they will have no
idea what caused it. The same object can also be cursed, so it cannot be
removed except by some professional magicians
* Item modifiers, like sharpening stones
* Item durability. Items must have a Profession and a Profession Level
associated to them to show who can repair it
* <mob> arrives from <direction>
* Character bounty, which can be placed by other characters for a fee (should
be enabled per world), or NPCs.
* Guild wars (Players from a Guild may PK players from another Guild if the two
Guilds are in war with each other)
* Mob glowing (e.g they will be unable to sneak)
* Polls
* Configurable prompt
* Marriage?
* Character titles, which can be rewards for quests, or be bought for a high
amount of money
* Spirit world
o Some rooms (at least one) should be marked as Spirit World. Upon death,
characters get the DEAD flag, and get to this room. They must find their
way to remove the DEAD flag, and/or find a way back to the real world.
* Blood may remain on the floor during a fight (even without a kill)
* Death trap rooms
* Regeneration rooms
* Teleportation objects (portal machines) and rooms (elevators)
* Languages
* Books
* Rivers should have some kind of a current. If you get into a river (even on a
boat, or by swimming), it will move you automatically somewhere
* Gambling (may be illegal in some towns ;) )
* Guides that can be payed for. E.g in a big city, a guide can lead you to the
Inn, or something like that for a small fee.
* Automatically hiding/appearing exits (e.g to created mazes to hide stuff)
* Mailing
* Abilities
o Rolled upon character creation
o May be trained
o There should be a racial maximum
o May be modified by affections and worn items
o May increase/decrease with age
Materia Magica command list
===========================
$ = gold
. = shout
/ = chat
; = formtalk
? = help
away
affects
affected
auction
align
alias
alliance
bury
build
backstab
bash
breathe
bank
cast
channels
combat
ctf
clear
cls
commands
consider
chat
clan
clantalk
ct
close
charge
chess
changes
credits
class
challenge
description
donate
dream
dig
drink
drop
disarm
dismount
effects
evoke
equipment
examine
enter
extinguish
emote
eat
empty
equip
fill
feed
flee
friends
faction
formation
ft
feign
get
gold
give
grab
grapple
guide
gohome
hitch
help
hold
herald
hint
hide
history
home
inventory
invoke
ignore
kill
kick
knock
look
light
levels
lock
locker
lay
mix
memorize
mail
marks
mount
news
novice
notify
order
open
practice
pktalk
pray
pick
put
pull
push
play
protocols
page
quest
quit
rest
read
report
rules
relay
reply
remove
run
recall
rewardunit
religion
raise
snare
sit
stand
sweep
score
socials
skills
scan
survey
say
sayto
shop
shout
search
sacrifice
set
sleep
sneak
ship
steal
shift
slit
strike
tell
tag
time
termreset
typo
title
turn
take
throw
track
train
unhitch
use
unequip
unlock
vendor
visible
version
wield
who
whisper
weather
wimpy
wear
write
wake
where
yell
CircleMUD commands
==================
{ "north" , POS_STANDING, do_move , 0, SCMD_NORTH },
{ "east" , POS_STANDING, do_move , 0, SCMD_EAST },
{ "south" , POS_STANDING, do_move , 0, SCMD_SOUTH },
{ "west" , POS_STANDING, do_move , 0, SCMD_WEST },
{ "up" , POS_STANDING, do_move , 0, SCMD_UP },
{ "down" , POS_STANDING, do_move , 0, SCMD_DOWN },
{ "at" , POS_DEAD , do_at , LVL_IMMORT, 0 },
{ "advance" , POS_DEAD , do_advance , LVL_IMPL, 0 },
{ "alias" , POS_DEAD , do_alias , 0, 0 },
{ "accuse" , POS_SITTING , do_action , 0, 0 },
{ "applaud" , POS_RESTING , do_action , 0, 0 },
{ "assist" , POS_FIGHTING, do_assist , 1, 0 },
{ "ask" , POS_RESTING , do_spec_comm, 0, SCMD_ASK },
{ "auction" , POS_SLEEPING, do_gen_comm , 0, SCMD_AUCTION },
{ "autoexit" , POS_DEAD , do_gen_tog , 0, SCMD_AUTOEXIT },
{ "autoloot" , POS_DEAD , do_gen_tog , 0, SCMD_AUTOLOOT },
{ "autodrain", POS_DEAD , do_gen_tog , 0, SCMD_AUTODRAIN },
{ "bounce" , POS_STANDING, do_action , 0, 0 },
{ "backstab" , POS_STANDING, do_backstab , 1, 0 },
{ "ban" , POS_DEAD , do_ban , LVL_GRGOD, 0 },
{ "balance" , POS_STANDING, do_not_here , 1, 0 },
{ "bash" , POS_FIGHTING, do_bash , 1, 0 },
{ "beg" , POS_RESTING , do_action , 0, 0 },
{ "bleed" , POS_RESTING , do_action , 0, 0 },
{ "blush" , POS_RESTING , do_action , 0, 0 },
{ "bow" , POS_STANDING, do_action , 0, 0 },
{ "brb" , POS_RESTING , do_action , 0, 0 },
{ "brief" , POS_DEAD , do_gen_tog , 0, SCMD_BRIEF },
{ "burp" , POS_RESTING , do_action , 0, 0 },
{ "bury" , POS_STANDING, do_bury , 0, 0 },
{ "buy" , POS_STANDING, do_not_here , 0, 0 },
{ "bug" , POS_DEAD , do_gen_write, 0, SCMD_BUG },
{ "cast" , POS_SITTING , do_cast , 1, 0 },
{ "cackle" , POS_RESTING , do_action , 0, 0 },
{ "check" , POS_STANDING, do_not_here , 1, 0 },
{ "chuckle" , POS_RESTING , do_action , 0, 0 },
{ "clap" , POS_RESTING , do_action , 0, 0 },
{ "clear" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR },
{ "close" , POS_SITTING , do_gen_door , 0, SCMD_CLOSE },
{ "cls" , POS_DEAD , do_gen_ps , 0, SCMD_CLEAR },
{ "consider" , POS_RESTING , do_consider , 0, 0 },
{ "color" , POS_DEAD , do_color , 0, 0 },
{ "comfort" , POS_RESTING , do_action , 0, 0 },
{ "comb" , POS_RESTING , do_action , 0, 0 },
{ "commands" , POS_DEAD , do_commands , 0, SCMD_COMMANDS },
{ "compact" , POS_DEAD , do_gen_tog , 0, SCMD_COMPACT },
{ "cough" , POS_RESTING , do_action , 0, 0 },
{ "credits" , POS_DEAD , do_gen_ps , 0, SCMD_CREDITS },
{ "cringe" , POS_RESTING , do_action , 0, 0 },
{ "cry" , POS_RESTING , do_action , 0, 0 },
{ "cuddle" , POS_RESTING , do_action , 0, 0 },
{ "curse" , POS_RESTING , do_action , 0, 0 },
{ "curtsey" , POS_STANDING, do_action , 0, 0 },
{ "dance" , POS_STANDING, do_action , 0, 0 },
{ "date" , POS_DEAD , do_date , LVL_IMMORT, SCMD_DATE },
{ "daydream" , POS_SLEEPING, do_action , 0, 0 },
{ "dc" , POS_DEAD , do_dc , LVL_GOD, 0 },
{ "deposit" , POS_STANDING, do_not_here , 1, 0 },
{ "diagnose" , POS_RESTING , do_diagnose , 0, 0 },
{ "dig" , POS_STANDING, do_dig , 0, 0 },
{ "display" , POS_DEAD , do_display , 0, 0 },
{ "donate" , POS_RESTING , do_drop , 0, SCMD_DONATE },
{ "drain" , POS_STANDING, do_drain , 0, 0 },
{ "drink" , POS_RESTING , do_drink , 0, SCMD_DRINK },
{ "drop" , POS_RESTING , do_drop , 0, SCMD_DROP },
{ "drool" , POS_RESTING , do_action , 0, 0 },
{ "eat" , POS_RESTING , do_eat , 0, SCMD_EAT },
{ "echo" , POS_SLEEPING, do_echo , LVL_IMMORT, SCMD_ECHO },
{ "emote" , POS_RESTING , do_echo , 1, SCMD_EMOTE },
{ ":" , POS_RESTING, do_echo , 1, SCMD_EMOTE },
{ "embrace" , POS_STANDING, do_action , 0, 0 },
{ "enter" , POS_STANDING, do_enter , 0, 0 },
{ "equipment", POS_SLEEPING, do_equipment, 0, 0 },
{ "exits" , POS_RESTING , do_exits , 0, 0 },
{ "examine" , POS_SITTING , do_examine , 0, 0 },
{ "force" , POS_SLEEPING, do_force , LVL_GOD, 0 },
{ "fart" , POS_RESTING , do_action , 0, 0 },
{ "fill" , POS_STANDING, do_pour , 0, SCMD_FILL },
{ "flee" , POS_FIGHTING, do_flee , 1, 0 },
{ "flip" , POS_STANDING, do_action , 0, 0 },
{ "flirt" , POS_RESTING , do_action , 0, 0 },
{ "follow" , POS_RESTING , do_follow , 0, 0 },
{ "fondle" , POS_RESTING , do_action , 0, 0 },
{ "freeze" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_FREEZE },
{ "french" , POS_RESTING , do_action , 0, 0 },
{ "frown" , POS_RESTING , do_action , 0, 0 },
{ "fume" , POS_RESTING , do_action , 0, 0 },
{ "get" , POS_RESTING , do_get , 0, 0 },
{ "gasp" , POS_RESTING , do_action , 0, 0 },
{ "gecho" , POS_DEAD , do_gecho , LVL_GOD, 0 },
{ "give" , POS_RESTING , do_give , 0, 0 },
{ "giggle" , POS_RESTING , do_action , 0, 0 },
{ "glare" , POS_RESTING , do_action , 0, 0 },
{ "goto" , POS_SLEEPING, do_goto , LVL_IMMORT, 0 },
{ "gold" , POS_RESTING , do_gold , 0, 0 },
{ "gossip" , POS_SLEEPING, do_gen_comm , 0, SCMD_GOSSIP },
{ "group" , POS_RESTING , do_group , 1, 0 },
{ "grab" , POS_RESTING , do_grab , 0, 0 },
{ "grats" , POS_SLEEPING, do_gen_comm , 0, SCMD_GRATZ },
{ "greet" , POS_RESTING , do_action , 0, 0 },
{ "grin" , POS_RESTING , do_action , 0, 0 },
{ "groan" , POS_RESTING , do_action , 0, 0 },
{ "grope" , POS_RESTING , do_action , 0, 0 },
{ "grovel" , POS_RESTING , do_action , 0, 0 },
{ "growl" , POS_RESTING , do_action , 0, 0 },
{ "gsay" , POS_SLEEPING, do_gsay , 0, 0 },
{ "gtell" , POS_SLEEPING, do_gsay , 0, 0 },
{ "help" , POS_DEAD , do_help , 0, 0 },
{ "handbook" , POS_DEAD , do_gen_ps , LVL_IMMORT, SCMD_HANDBOOK },
{ "hcontrol" , POS_DEAD , do_hcontrol , LVL_GRGOD, 0 },
{ "hiccup" , POS_RESTING , do_action , 0, 0 },
{ "hide" , POS_RESTING , do_hide , 1, 0 },
{ "hit" , POS_FIGHTING, do_hit , 0, SCMD_HIT },
{ "hold" , POS_RESTING , do_grab , 1, 0 },
{ "holler" , POS_RESTING , do_gen_comm , 1, SCMD_HOLLER },
{ "holylight", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_HOLYLIGHT },
{ "hop" , POS_RESTING , do_action , 0, 0 },
{ "house" , POS_RESTING , do_house , 0, 0 },
{ "hug" , POS_RESTING , do_action , 0, 0 },
{ "inventory", POS_DEAD , do_inventory, 0, 0 },
{ "idea" , POS_DEAD , do_gen_write, 0, SCMD_IDEA },
{ "imotd" , POS_DEAD , do_gen_ps , LVL_IMMORT, SCMD_IMOTD },
{ "immlist" , POS_DEAD , do_gen_ps , 0, SCMD_IMMLIST },
{ "info" , POS_SLEEPING, do_gen_ps , 0, SCMD_INFO },
{ "insult" , POS_RESTING , do_insult , 0, 0 },
{ "invis" , POS_DEAD , do_invis , LVL_IMMORT, 0 },
{ "junk" , POS_RESTING , do_drop , 0, SCMD_JUNK },
{ "kill" , POS_FIGHTING, do_kill , 0, 0 },
{ "kick" , POS_FIGHTING, do_kick , 1, 0 },
{ "kiss" , POS_RESTING , do_action , 0, 0 },
{ "look" , POS_RESTING , do_look , 0, SCMD_LOOK },
{ "laugh" , POS_RESTING , do_action , 0, 0 },
{ "last" , POS_DEAD , do_last , LVL_GOD, 0 },
{ "leave" , POS_STANDING, do_leave , 0, 0 },
{ "levels" , POS_DEAD , do_levels , 0, 0 },
{ "list" , POS_STANDING, do_not_here , 0, 0 },
{ "lick" , POS_RESTING , do_action , 0, 0 },
{ "lock" , POS_SITTING , do_gen_door , 0, SCMD_LOCK },
{ "load" , POS_DEAD , do_load , LVL_GOD, 0 },
{ "love" , POS_RESTING , do_action , 0, 0 },
{ "moan" , POS_RESTING , do_action , 0, 0 },
{ "motd" , POS_DEAD , do_gen_ps , 0, SCMD_MOTD },
{ "mail" , POS_STANDING, do_not_here , 1, 0 },
{ "massage" , POS_RESTING , do_action , 0, 0 },
{ "mute" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_SQUELCH },
{ "murder" , POS_FIGHTING, do_hit , 0, SCMD_MURDER },
{ "news" , POS_SLEEPING, do_gen_ps , 0, SCMD_NEWS },
{ "nibble" , POS_RESTING , do_action , 0, 0 },
{ "nod" , POS_RESTING , do_action , 0, 0 },
{ "noauction", POS_DEAD , do_gen_tog , 0, SCMD_NOAUCTION },
{ "nogossip" , POS_DEAD , do_gen_tog , 0, SCMD_NOGOSSIP },
{ "nograts" , POS_DEAD , do_gen_tog , 0, SCMD_NOGRATZ },
{ "nohassle" , POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_NOHASSLE },
{ "norepeat" , POS_DEAD , do_gen_tog , 0, SCMD_NOREPEAT },
{ "noshout" , POS_SLEEPING, do_gen_tog , 1, SCMD_DEAF },
{ "nosummon" , POS_DEAD , do_gen_tog , 1, SCMD_NOSUMMON },
{ "notell" , POS_DEAD , do_gen_tog , 1, SCMD_NOTELL },
{ "notitle" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_NOTITLE },
{ "nowiz" , POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_NOWIZ },
{ "nudge" , POS_RESTING , do_action , 0, 0 },
{ "nuzzle" , POS_RESTING , do_action , 0, 0 },
{ "olc" , POS_DEAD , do_olc , LVL_IMPL, 0 },
{ "order" , POS_RESTING , do_order , 1, 0 },
{ "offer" , POS_STANDING, do_not_here , 1, 0 },
{ "open" , POS_SITTING , do_gen_door , 0, SCMD_OPEN },
{ "put" , POS_RESTING , do_put , 0, 0 },
{ "pat" , POS_RESTING , do_action , 0, 0 },
{ "page" , POS_DEAD , do_page , LVL_GOD, 0 },
{ "pardon" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_PARDON },
{ "peer" , POS_RESTING , do_action , 0, 0 },
{ "pick" , POS_STANDING, do_gen_door , 1, SCMD_PICK },
{ "point" , POS_RESTING , do_action , 0, 0 },
{ "poke" , POS_RESTING , do_action , 0, 0 },
{ "policy" , POS_DEAD , do_gen_ps , 0, SCMD_POLICIES },
{ "ponder" , POS_RESTING , do_action , 0, 0 },
{ "poofin" , POS_DEAD , do_poofset , LVL_IMMORT, SCMD_POOFIN },
{ "poofout" , POS_DEAD , do_poofset , LVL_IMMORT, SCMD_POOFOUT },
{ "pour" , POS_STANDING, do_pour , 0, SCMD_POUR },
{ "pout" , POS_RESTING , do_action , 0, 0 },
{ "prompt" , POS_DEAD , do_display , 0, 0 },
{ "practice" , POS_RESTING , do_practice , 1, 0 },
{ "pray" , POS_SITTING , do_action , 0, 0 },
{ "puke" , POS_RESTING , do_action , 0, 0 },
{ "punch" , POS_RESTING , do_action , 0, 0 },
{ "purr" , POS_RESTING , do_action , 0, 0 },
{ "purge" , POS_DEAD , do_purge , LVL_GOD, 0 },
{ "quaff" , POS_RESTING , do_use , 0, SCMD_QUAFF },
{ "qecho" , POS_DEAD , do_qcomm , LVL_IMMORT, SCMD_QECHO },
{ "quest" , POS_DEAD , do_gen_tog , 0, SCMD_QUEST },
{ "qui" , POS_DEAD , do_quit , 0, 0 },
{ "quit" , POS_DEAD , do_quit , 0, SCMD_QUIT },
{ "qsay" , POS_RESTING , do_qcomm , 0, SCMD_QSAY },
{ "reply" , POS_SLEEPING, do_reply , 0, 0 },
{ "rest" , POS_RESTING , do_rest , 0, 0 },
{ "read" , POS_RESTING , do_look , 0, SCMD_READ },
{ "reload" , POS_DEAD , do_reboot , LVL_IMPL, 0 },
{ "recite" , POS_RESTING , do_use , 0, SCMD_RECITE },
{ "receive" , POS_STANDING, do_not_here , 1, 0 },
{ "remove" , POS_RESTING , do_remove , 0, 0 },
{ "rent" , POS_STANDING, do_not_here , 1, 0 },
{ "report" , POS_RESTING , do_report , 0, 0 },
{ "reroll" , POS_DEAD , do_wizutil , LVL_GRGOD, SCMD_REROLL },
{ "rescue" , POS_FIGHTING, do_rescue , 1, 0 },
{ "restore" , POS_DEAD , do_restore , LVL_GOD, 0 },
{ "return" , POS_DEAD , do_return , 0, 0 },
{ "roll" , POS_RESTING , do_action , 0, 0 },
{ "roomflags", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_ROOMFLAGS },
{ "ruffle" , POS_STANDING, do_action , 0, 0 },
{ "say" , POS_RESTING , do_say , 0, 0 },
{ "'" , POS_RESTING , do_say , 0, 0 },
{ "save" , POS_SLEEPING, do_save , 0, 0 },
{ "score" , POS_DEAD , do_score , 0, 0 },
{ "scream" , POS_RESTING , do_action , 0, 0 },
{ "sell" , POS_STANDING, do_not_here , 0, 0 },
{ "send" , POS_SLEEPING, do_send , LVL_GOD, 0 },
{ "set" , POS_DEAD , do_set , LVL_GOD, 0 },
{ "shout" , POS_RESTING , do_gen_comm , 0, SCMD_SHOUT },
{ "shake" , POS_RESTING , do_action , 0, 0 },
{ "shiver" , POS_RESTING , do_action , 0, 0 },
{ "show" , POS_DEAD , do_show , LVL_IMMORT, 0 },
{ "shrug" , POS_RESTING , do_action , 0, 0 },
{ "shutdow" , POS_DEAD , do_shutdown , LVL_IMPL, 0 },
{ "shutdown" , POS_DEAD , do_shutdown , LVL_IMPL, SCMD_SHUTDOWN },
{ "sigh" , POS_RESTING , do_action , 0, 0 },
{ "sing" , POS_RESTING , do_action , 0, 0 },
{ "sip" , POS_RESTING , do_drink , 0, SCMD_SIP },
{ "sit" , POS_RESTING , do_sit , 0, 0 },
{ "skillset" , POS_SLEEPING, do_skillset , LVL_GRGOD, 0 },
{ "sleep" , POS_SLEEPING, do_sleep , 0, 0 },
{ "slap" , POS_RESTING , do_action , 0, 0 },
{ "slowns" , POS_DEAD , do_gen_tog , LVL_IMPL, SCMD_SLOWNS },
{ "smile" , POS_RESTING , do_action , 0, 0 },
{ "smirk" , POS_RESTING , do_action , 0, 0 },
{ "snicker" , POS_RESTING , do_action , 0, 0 },
{ "snap" , POS_RESTING , do_action , 0, 0 },
{ "snarl" , POS_RESTING , do_action , 0, 0 },
{ "sneeze" , POS_RESTING , do_action , 0, 0 },
{ "sneak" , POS_STANDING, do_sneak , 1, 0 },
{ "sniff" , POS_RESTING , do_action , 0, 0 },
{ "snore" , POS_SLEEPING, do_action , 0, 0 },
{ "snowball" , POS_STANDING, do_action , LVL_IMMORT, 0 },
{ "snoop" , POS_DEAD , do_snoop , LVL_GOD, 0 },
{ "snuggle" , POS_RESTING , do_action , 0, 0 },
{ "socials" , POS_DEAD , do_commands , 0, SCMD_SOCIALS },
{ "split" , POS_SITTING , do_split , 1, 0 },
{ "spank" , POS_RESTING , do_action , 0, 0 },
{ "spit" , POS_STANDING, do_action , 0, 0 },
{ "squeeze" , POS_RESTING , do_action , 0, 0 },
{ "stand" , POS_RESTING , do_stand , 0, 0 },
{ "stare" , POS_RESTING , do_action , 0, 0 },
{ "stat" , POS_DEAD , do_stat , LVL_IMMORT, 0 },
{ "steal" , POS_STANDING, do_steal , 1, 0 },
{ "steam" , POS_RESTING , do_action , 0, 0 },
{ "stroke" , POS_RESTING , do_action , 0, 0 },
{ "strut" , POS_STANDING, do_action , 0, 0 },
{ "sulk" , POS_RESTING , do_action , 0, 0 },
{ "switch" , POS_DEAD , do_switch , LVL_GRGOD, 0 },
{ "syslog" , POS_DEAD , do_syslog , LVL_IMMORT, 0 },
{ "tell" , POS_DEAD , do_tell , 0, 0 },
{ "tackle" , POS_RESTING , do_action , 0, 0 },
{ "take" , POS_RESTING , do_get , 0, 0 },
{ "tango" , POS_STANDING, do_action , 0, 0 },
{ "taunt" , POS_RESTING , do_action , 0, 0 },
{ "taste" , POS_RESTING , do_eat , 0, SCMD_TASTE },
{ "teleport" , POS_DEAD , do_teleport , LVL_GOD, 0 },
{ "thank" , POS_RESTING , do_action , 0, 0 },
{ "think" , POS_RESTING , do_action , 0, 0 },
{ "thaw" , POS_DEAD , do_wizutil , LVL_FREEZE, SCMD_THAW },
{ "title" , POS_DEAD , do_title , 0, 0 },
{ "tickle" , POS_RESTING , do_action , 0, 0 },
{ "time" , POS_DEAD , do_time , 0, 0 },
{ "toggle" , POS_DEAD , do_toggle , 0, 0 },
{ "track" , POS_STANDING, do_track , 0, 0 },
{ "trackthru", POS_DEAD , do_gen_tog , LVL_IMPL, SCMD_TRACK },
{ "transfer" , POS_SLEEPING, do_trans , LVL_GOD, 0 },
{ "twiddle" , POS_RESTING , do_action , 0, 0 },
{ "typo" , POS_DEAD , do_gen_write, 0, SCMD_TYPO },
{ "unlock" , POS_SITTING , do_gen_door , 0, SCMD_UNLOCK },
{ "ungroup" , POS_DEAD , do_ungroup , 0, 0 },
{ "unban" , POS_DEAD , do_unban , LVL_GRGOD, 0 },
{ "unaffect" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_UNAFFECT },
{ "uptime" , POS_DEAD , do_date , LVL_IMMORT, SCMD_UPTIME },
{ "use" , POS_SITTING , do_use , 1, SCMD_USE },
{ "users" , POS_DEAD , do_users , LVL_IMMORT, 0 },
{ "value" , POS_STANDING, do_not_here , 0, 0 },
{ "version" , POS_DEAD , do_gen_ps , 0, SCMD_VERSION },
{ "visible" , POS_RESTING , do_visible , 1, 0 },
{ "vnum" , POS_DEAD , do_vnum , LVL_IMMORT, 0 },
{ "vstat" , POS_DEAD , do_vstat , LVL_IMMORT, 0 },
{ "wake" , POS_SLEEPING, do_wake , 0, 0 },
{ "wave" , POS_RESTING , do_action , 0, 0 },
{ "wear" , POS_RESTING , do_wear , 0, 0 },
{ "weather" , POS_RESTING , do_weather , 0, 0 },
{ "who" , POS_DEAD , do_who , 0, 0 },
{ "whoami" , POS_DEAD , do_gen_ps , 0, SCMD_WHOAMI },
{ "where" , POS_RESTING , do_where , 1, 0 },
{ "whisper" , POS_RESTING , do_spec_comm, 0, SCMD_WHISPER },
{ "whine" , POS_RESTING , do_action , 0, 0 },
{ "whistle" , POS_RESTING , do_action , 0, 0 },
{ "wield" , POS_RESTING , do_wield , 0, 0 },
{ "wiggle" , POS_STANDING, do_action , 0, 0 },
{ "wimpy" , POS_DEAD , do_wimpy , 0, 0 },
{ "wink" , POS_RESTING , do_action , 0, 0 },
{ "withdraw" , POS_STANDING, do_not_here , 1, 0 },
{ "wiznet" , POS_DEAD , do_wiznet , LVL_IMMORT, 0 },
{ ";" , POS_DEAD , do_wiznet , LVL_IMMORT, 0 },
{ "wizhelp" , POS_SLEEPING, do_commands , LVL_IMMORT, SCMD_WIZHELP },
{ "wizlist" , POS_DEAD , do_gen_ps , 0, SCMD_WIZLIST },
{ "wizlock" , POS_DEAD , do_wizlock , LVL_IMPL, 0 },
{ "worship" , POS_RESTING , do_action , 0, 0 },
{ "write" , POS_STANDING, do_write , 1, 0 },
{ "yawn" , POS_RESTING , do_action , 0, 0 },
{ "yodel" , POS_RESTING , do_action , 0, 0 },
{ "zreset" , POS_DEAD , do_zreset , LVL_GRGOD, 0 },
const char *fill[] =
{
"in",
"from",
"with",
"the",
"on",
"at",
"to",
"\n"
};
const char *reserved[] =
{
"a",
"an",
"self",
"me",
"all",
"room",
"someone",
"something",
"\n"
};