@create $generic_help named RPG help database:RPG help database,RPG-help
@prop #17233."find_chars" {} r
;;#17233.("find_chars") = {"find_chars is a utility verb.  The args are a location (room), and the return value is a list containing a list of all RPG characters and monsters at that location, and a list containing their doll numbers.  The verb is located on #46."}
@prop #17233."adventures" {} r
;;#17233.("adventures") = {"[NOTE: This text is WAY outdated. It's in the `history' segment of the help topics for good reason. Preserved for posterity - Mooshie - 12/97 ]", "", "Here's a few pointers about adventure design. We need more good adventures. By good adventures, we mean ones that have a plot, that do something different, that don't just require characters to wade thigh-deep in the blood of generic monsters. Adventures that require skills other than combat skills are especially encouraged.", "The following is a list of the principal adventures that exist at the moment, roughly ordered by how good we think they are. We'll update this list from time to time, so if you need an incentive before you write good adventures, here it is...", "", "Gary_Severn's Cultist adventure, in the University area", "John_Constantine's Haunted Mansion, below the Family Room", "Gemba's Ghostbusters, based around the Illuminati complex", "Gary_Severn's Cistern adventure, in his tower", "Gary_Severn's Sorceress, below the Cinder Pile", "Gary_Severn's fishing expedition, in the caverns", "Gary_Severn's Troll and Princess rescue, in his tower"}
@prop #17233."voodoo dolls" {} r
;;#17233.("voodoo dolls") = {"Each character in LambdaRPG has an associated 'voodoo doll' which mirrors the character's rpg capabilities. The voodoo dolls, children of #74, are all owned by Grand_Master, and have several important verbs and many important properties.", "Each of the character's attributes (and skills) is represented by a property on the character's voodoo doll, but the properties all belong to Grand_Master and are not readable. This is to keep players in the dark as to the exact numerical values in the game. They can be accessed via the get_att verb, and set via the set_att verb. Look up the entries on these verbs for details. See also the get_doll verb, which is defined on the Adventurers Database.", "Other important verbs are total, hit_aggressor, attack, respond, receive_damage, check_ins, invite, and die."}
@prop #17233."adventurers db" {} r
;;#17233.("adventurers db") = {"The Adventurer's database, #46, is a repository for various important verbs and properties, and is in a sense the 'central' object in LambdaRPG. It keeps the master lists of characters and voodoo dolls (cf.) and presently contains all the objects which define skills (cf.).", "The important verbs on #46 have their own help entries, and are listed below:", "", "get_doll", "match_skill", "resolve", "roll", "trust", "sheet", ""}
@prop #17233."notify_exit" {} r
;;#17233.("notify_exit") = {"#259:notify_exit", "This is a verb on the generic monster that tells the monster whenever someone leaves the room it is in. This will only be called in an RPG room however. The monster is supplied with the following information.", "", "  notify_exit(OBJ who, OBJ exit)", "  Who is the number of the person/creature leaving the room. If who left by an exit, the object number of the exit is given as a 2nd arg. If who teleported out then $nothing (#-1) is given as a 2nd arg.", "", "#259:notify_arrival", "This verb on the generic monster is called whenever someone enters the room with the monster. It is only called if the monster is in an RPG room. And the verb is given the following args.", "", "  notify_arrival(OBJ who, OBJ exit)", "  'Who' is the object number of the player/creature entering the room. If who entered through an exit, then the exits object number is given as the 2nd arg. If who entered through other means, $nothing (#-1) is provided as a 2nd arg."}
@prop #17233."notify_arrival" {} r
;;#17233.("notify_arrival") = {"*forward*", "notify_exit"}
@prop #17233."notify_death" {} r
;;#17233.("notify_death") = {":notify_death is called on all monsters (and players who have the verb) present when a character dies. The dying character is provided as the argument."}
@prop #17233."notify_attack" {} r
;;#17233.("notify_attack") = {":notify_attack is called on all monsters in the room whenever an attack occurs. The args provided are (<attacker>,<victim>). It is also called on any players who have the verb, permitting you to cyborg yourself if you really want.", "You should override this verb on your monsters to customize its reaction to combat, but you _don't_ get the monster to launch attacks or anything inside this verb. :act takes care of all that. Updating aggressor lists or altering attitudes towards particular characters is the ideal activity to put in here."}
@prop #17233."act" {} r
;;#17233.("act") = {"<monster>:act() is called whenever it's the monster's turn to do something. The default just calls <doll>:hit_aggressor() to pick a random enemy and attack it. If you want your monster to be able to do anything apart from combat when it is invited to act, you need to override this verb.", "Computation of characters to add to or remove from the .aggressor list can be done here, but is better done in one of the :notify_* verbs for the sake of tick economy."}
@prop #17233."die" {} r
;;#17233.("die") = {"There are three different die verbs. One on the Generic Voodoo Doll (#74), one on the Generic Monster (#259), and one on the Adventurers Data Base (#46).", "", "#74:die", "  The Generic Voodoo Doll's :die verb first notifies the location of the doll's .character, that .character has died. If the .character is a player, it logs the death using Grand_Master's :record_death verb, then calls #46:die giving 'this' as an arg. If the doll's .character is a monster, it clears its .aggressor list, then calls the monster's :die verb.", "", "Usage: die([OBJ killer])", "", "#259:die", "  This verb sets its .alive prop to 0, then schedules a rebirth using $local.rpg.clock:add_death, removes the monster from the .aggressor list of everything in the room with it, clears out its .claimed list, announces its death to its location, then brings in the monsters corpse if it has one using #259:deposit_remains, and moves the monster to $local.rpg.cemetery.", "", "Usage: die([OBJ killer])", "", "#46:die", "  The Adventurers DB :die verb is primarily for use with killing players, but can also be used for monsters, (this won't rebirth them tho, so its better to use #259:die for monsters.) This verb first drops all RPG items that the dolls .character is carrying, or moves them to $local.rpg.cemetery, then clears the aggressor list of anything in the doll's .aggressor list, finaly it tries to move the .character to its .home, failing that to $player_start, and failing that it calls the rooms :_eject verb.", "", "Usage: die(OBJ doll)"}
@prop #17233."invite" {} r
;;#17233.("invite") = {"invite is the verb that handles scheduling of the actions of rpg characters. Every time a character does anything of note, a call to invite on its doll should be made, giving the number of action points expended as the argument. Adjustment of action points is then taken care of, and other characters in the same room (or in rooms connected via missile-transparent exits...) are invited to act if appropriate."}
@prop #17233."check_ins" {} r
;;#17233.("check_ins") = {"check_ins is the sanity (magic system) equivalent to receive_damage, inflicting insanity instead of physical damage to the doll.  The only arg is the insanity to be inflicted.  Mainly used by #331:spell.", "NOTE:  This has recently been changed from 3 args to one arg, so some verbs may break.  All you need to do to fix it is get rid of the first and third args, which weren't really being used anyway.  :-)"}
@prop #17233."receive_damage" {} r
;;#17233.("receive_damage") = {"receive_damage is called on a character's doll when the character receives an injury of some sort. Its args are (<damage>,<armour penetration>,<clang>,<oclang>,<wound>,<owound>,<stun>,<ostun>,<kill>,<okill>). <damage> is the damage inflicted by the attack, <armour penetration> is the penetration rating of the attack, the lower the better, which represents the fact that some weapons can slice through armour better than others.", "The other properties are strings, messages that are given to the recipient (<clang>, etc) and the other characters present (<oclang> etc) in the event of the attack being absorbed by the victim's armour (<clang>), inflicting a wound (<wound>), causing the victim to be stunned (<stun>) or killing the victim (<kill>). The substitutions %w and %b are used for the hit location and the severity of the attack, respectively. See how this is called from #74:respond for an example."}
@prop #17233."respond" {} r
;;#17233.("respond") = {"respond is the verb called on the doll of a character who is being attacked in combat. This verb determines the defender's response and whether or not the parry or dodge succeeded. If not, it calls receive_damage to inflict an injury. Unless you're defining some new form of combat you're unlikely to ever need to call this directly, but if you _really_ want to know what the args are, they're (<attacker>,<attack success>, <weapon damage>, <weapon armour penetration rating>, <weapon dodgableness>, <weapon parryableness>)."}
@prop #17233."attack" {} r
;;#17233.("attack") = {"attack, defined on the voodoo dolls, is the verb that initiates combat. The args are (<target>,<weapon>,<mods>). <target> is the target of the attack, an object. <weapon> is an object, the weapon being used for the attack. <mods> is a number, added to the success of the attack, representing any appropriate difficulty factors.", "attack calls the respond verb on the target's doll, then calls invite.", "", "An example: #46:get_doll(\"Gemba\"):attack(#15,#76,0) would cause Gemba to attack Gary_Severn with his broadsword."}
@prop #17233."hit_aggressor" {} r
;;#17233.("hit_aggressor") = {"hit_aggressor, defined on the voodoo dolls, has  no args. It causes a character to go through its .aggressor list, pick one enemy at random, and attack it. If it has no aggressors, it does nothing.", "The act verb on the generic monster calls this whenever the monster is invited to attack, and this is the verb called for players as well.", "If you're customizing the act verb on one of your monsters, you could call this, or you could just pass(@args) to the parent's verb, when you want your monster to attack someone."}
@prop #17233."total" {} r
;;#17233.("total") = {"A verb defined on voodoo dolls to assess the total aptitude of a character with a particular skill. LambdaRPG works on a sytem of dependent skills, where specialized skills depend on more general skills, which ultimately depend on physical attributes such as strength, agility and intelligence. <doll>:total(<skill>) takes care of all this adding up for you, by adding the raw value of the skill to the summed values of the skills it depends on.", "<skill> in this case, may be either the object number of the corresponding skill or its name (either long or short). Matching skill names takes up a lot of ticks (cpu), so in this case it is much preferable to use the object number of the skill. In case you're wondering, this doesn't apply to get_att and set_att because they just look up properties straight off the doll, without having to locate a skill object.", ":total returns the numerical value representing the total aptitude of the character with the skill.", "", "An example: <doll>:total(#29862) returns a character's total broadsword aptitude. See the Adventurer's Database verb match_skill for info on finding out skill object numbers."}
@prop #17233."set_att" {} r
;;#17233.("set_att") = {"A verb defined on voodoo dolls to allow gamemasters to change the values of attributes of rpg characters. Using this, a gamemaster can make any change at all to any rpg character, so be careful with it.", "You call the verb with arguments :set_att(<attribute name>,<new value>). <attribute name> is the short name of the attribute (see get_att for an explanation of how to find out the short name if you don't know it) and <new value> is the new value to which you are setting the attribute.", "", "An example: <doll>:set_att(\"ins\",0) would cure a character of all insanity (magic-related mental stress). Please don't do this, by the way, unless there is a compelling rationale for it in the context of your adventure!"}
@prop #17233."get_att" {} r
;;#17233.("get_att") = {"A verb defined on voodoo dolls, permitting gamemasters to obtain information about rpg characters. The argument to the verb is a string, the name of the attribute. The words 'attribute' and 'skill' get used interchangeably a lot here because the system perceives no difference between them.", "Many skills have two names, a longer name and a shorter one. This verb requires the use of the shorter one (though this _may_ be fixed at some future stage).", "If you're unsure what the short name of an attribute is, you can find the object number of the corresponding skill object by calling #46:match_skill(<skill name>), supplying your best guess as <skill name>. When you have the object number, the short name is to be found in .aliases[1] of the skill object. Yes, this does seem a little haphazard. Maybe we'll change it sometime. In the meantime, it _does_ work, so don't knock it :-).", "", "The verb returns the numerical value of the character's rating in that attribute, sometimes called the 'raw' value.", "", "An example: <doll>:get_att(\"brswd\") returns a character's raw broadsword aptitude."}
@prop #17233."rpg-index" {} r
;;#17233.("rpg-index") = {"*index*", "RPG Help Database"}
@prop #17233."sheet" {} r
;;#17233.("sheet") = {"#46:sheet(<character>) gives a list of the character's attributes, in a roughly meaningful order. It provides what you could call a 'character sheet' for the character. <character> can be a name or an object.", "This is purely for informational purposes. There would ordinarily be no point in calling this from within your own code, unless you were writing some sort of utility tool, but calling it from eval can be very useful."}
@prop #17233."trust" {} r
;;#17233.("trust") = {"#46:trust", "This is the old security method GMs used to ensure that a verb was only being called by a GM, or a GM's program. It does not take any args, but sifts through the callers() stack to see if the called verb is secure. Although it works, this method is extremely tick-intensive. Unless needed, it is better to use #46:trusted when ensuring the security of your verbs.", "", "  Usage: trust()", "  Returns 1 if calling verb is GM owned, returns 0 if not."}
@prop #17233."roll" {} r
;;#17233.("roll") = {"#46:roll is the randomizing influence in the system. roll returns a random number from a distribution with mean 50 and standard deviation 20 (I think it's 20. I changed it a couple of times when I started the system, and I'm not 100% sure that 20 is what I finally settled on, but it's definitely either 15, 20 or 25. Check the code and work it out if it's important to you :)). The distribution is intended to approximate a normal (gaussian, bell-curve) distribution.", "It has several important advantages over a uniform distribution, which is what many rpg games use. Firstly, it's much more biased towards the mean than a uniform distribution, which means that the results you could expect when a character tries a particular activity occur most of the time. Secondly, the upper and lower bounds of results are much higher/lower, although the extreme results are not very probable. The total range of possibilities is greater than for a uniform distribution, but the tendency for 'ordinary' things to happen is greater. This models real life a little better than a uniform distribution of results does.", "It's not too likely you'll need to call roll directly, but you can if you want."}
@prop #17233."resolve" {} r
;;#17233.("resolve") = {"There are two resolve verbs. One, defined on #46, calls the other, defined on the skill objects. Most existing code calls #46:resolve, but there's no reason you shouldn't call the verb on the skill object itself; you'd probably save a few ticks. The resolve verb is really the heart of the system, it's what you call when a character does anything that involves a skill, and it returns the success or failure of the skill attempt.", "A positive value returned means success, and, if you want to make distinctions, the more positive the better. A negative value means failure, the more negative the worse.", "When calling resolve on #46, you give as args (<character>,<skill>,<modifiers>), but when calling it on the skill object, you just give as args (<character>,<modifiers>). <character> is the player or monster object, <skill> is (preferably) the skill object number (or name, if you absolutely _must_), <modifiers> is a number representing the ease of the particular skill attempt. Positive numbers make it easier for the character to succeed.", "", "An example: #46:resolve(#15,#4649,50) is what you'd call if Gary_Severn was climbing a fairly easy wall. Alternatively, #4649:resolve(#15,50) would have the same effect."}
@prop #17233."match_skill" {} r
;;#17233.("match_skill") = {"#46:match_skill(<skill>) returns the object number associated with a named skill. If <skill> is an object, it just gets returned straight back with minimal tick expenditure, but otherwise the contents of #46 get matched against to find the desired skill. This process uses up about 1800 ticks (which will no doubt increase when/if more skills are added to the system), so try to do it as little as possible. Wherever possible, use object numbers for skills, not names. The best use for this verb is to find out an object number by hand, then use that object number explicitly in your code, rather than the name.", "", "An example: #46:match_skill(\"melee\") returns #19804, the skill object that handles melee."}
@prop #17233."get_doll" {} r
;;#17233.("get_doll") = {"#46:get_doll(<character>) returns the object number of the voodoo doll corresponding to a particular character. <character> can be an object number or a name, but supplying an object number is better as it costs fewer ticks. In the event that the character does not have a voodoo doll, get_doll returns #-1, $nothing.", "", "An example: #46:get_doll(#15) returns Gary_Severn's voodoo doll."}
@prop #17233."Grand_Master" {} r
;;#17233.("Grand_Master") = {"*subst*", "Grand_Master, a shared multi-character, acts as general administrator of the RPG.  He maintains the most generic of the RPG objects and works to improve the RPG system, augmenting the system, enhancing performance, and correcting bugs.  He also chooses the RPG Gamemasters in an effort to continually benefit the RPG system.  Interested players may direct inquiries to him, along with descriptions of their proposed projects.  The following characters share control of Grand_Master:  %[$string_utils:english_list($list_utils:map_prop($local.rpg.grand_masters, \"name\"))]. "}
@prop #17233."Gamemasters" {} r
;;#17233.("Gamemasters") = {"*subst*", "Players who are designated as gamemasters have the ability to extend the RPG system.  They can construct adventures, create working monsters, design new tests of skill and generally add to the fun for other players.", "To become a gamemaster, you have to convince Grand_Master or one of his incarnations (see \"help Grand_Master\") that you have some good ideas for adventures.  Gamemasters have a lot of power within the game, so we can't give GM status to just anyone, but we do want to see more development of interesting things in the RPG system, so if you have good ideas, talk to Grand_Master, et al.", "", "The following is a rough summary of the sort of things that are likely to impress Grand_Master enough to confer GM status on a player:", "1.  Things that are original, rather than copies of something else found around LambdaMOO.", "2.  Things that are smart, e.g., monsters whose response to players is more complex than that of the generic monster.", "3.  Things that are different.  When you've killed one generic monster descendant you've killed them all.  One type of difference is a puzzle, that forces the players to think a little.", "4.  Things that fit the LambdaMOO theme.  'help LambdaMOO' describes what the house looks like, try to build something that will fit within it, preferably with a little pseudo-history to explain what it's doing there.", "", "Anyone can make a child of the generic monster, put it in a room and invite players to attack it, but that doesn't constitute an interesting adventure.  Try to make your scenarios different in some way.", "", "Because gamemasters have a lot of power, it would be easy for them to abuse it.  GMs who abuse their power (such as by using their GM power to kill other player characters) will lose their GM status.  Using your status to improve your personal attributes artificially is also frowned upon, and is rather pointless anyway.", "Another responsibility incumbent upon GMs, which is becoming more and more important as the number of players increases, is to program as efficiently as possible.  Intelligent monsters, for example, tend to be fairly CPU-intensive.  We don't want to discourage you from creating complicated adventures, but we do want to encourage you to write your code so as to have the minimum possible impact on the server.", "These are the current Gamemasters: %[$string_utils:english_list($list_utils:map_prop($local.rpg.gms, \"name\"))]."}
@prop #17233."combat_effects" {} r
;;#17233.("combat_effects") = {"Every voodoo doll has a list of combat effects and death effects.  These are objects which modify the way the character attached to the doll fights and dies.", "", "A combat effect MUST define:    :combat_effect(attacker, target, weapon)", "A death  effect MUST define:    :death_effect(victim, killer)", "", "Additionally, each effect object may define a :look_health_msg(doll) returning a string which will be displayed after the given doll's usual health, insanity, and fatigue status."}
@prop #17233."death_effects" {} r
;;#17233.("death_effects") = {"*forward*", "combat_effects"}
@prop #17233."trusted" {} r
;;#17233.("trusted") = {"#46:trusted", "This is the current security verb used to ensure that only GMs have direct access to a verb. It should be used in any verb the owner wishes only to be callable by a GM, or by a GM's program.", "", "  Usage: trusted(OBJ player)", "  Provide a player' object number as the arg. Returns 1 if the player is a GM, or in $local.rpg.exporters, returns 0 if not."}
@prop #17233."att_schedule" {} r
;;#17233.("att_schedule") = {"#74:att_schedule", "This is a verb on the Generic doll used to temporarily modify a stat, and then return it to normal after a specified lenth of time. ", "", "  Usage: att_schedule(STR stat name, NUM time, NUM modifier[, LIST schedule element])", "  Stat name: The name of the stat on the doll you want modified.", "  Time: The time that the stat will be returned to normal. Setting it to 'time() + 60' would restore the stat 60 seconds after it had been modified.", "  Modifier: Modifies the stat by this number. 10 would put the stat up 10, while -10 would put it down.", "  Schedule Element: Calls a given verb when time is up and stat is restored. The list should be given in this format {OBJ object on which verb is to be called, STR verb name, NUM dummy argument, LIST arguments to verb}", "", " Returns E_TYPE if the attribute is not a number.", " Returns E_INVARG if the modifier is not a number."}
@prop #17233."birth" {} r
;;#17233.("birth") = {"#259:birth", "This verb first cancels any scheduled rebirth task using its :cancel_rebirth verb, then sets its .doll using $local.rpg:create_pc, it then sets all the dolls stats checking for '.i*' properties on the monster (Check out help monsters), finaly it calls the monster's :duty().", "", "Usage: birth()"}
@prop #17233."duty" {} r
;;#17233.("duty") = {"#259:duty", "This first sets the .alive prop to 1, then restores its weapons and items using its :check_mine, :prime_mine, and :equip_mine verbs, it then removes its corpse (if any) using its :rot_corpse, and goes home using its :go_home verb.", "", "Usage: duty()"}
@prop #17233."magic_effects" {} r
;;#17233.("magic_effects") = {"There are three different magic_effect verbs. On the Generic Voodoo Doll (#74) it can be either :magic_effect *or* :magic_effects, this will be explained below. The other two are on the Generic Room DB (#1610), and the Generic monster (#259)", "", "#74:magic_effect*s", "This verb first looks for a .magic_effect on the doll (Which should *not* be there), then it sifts through all the objects in its .magic_effects property. If any of those objects have a trusted :magic_effect verb that returns a numerical value, it returns that value. If it returns a non-numerical value, it returns that. This is not common practice though, and should generaly be avoided. Failing both of those, it returns the value indicated by the 3rd arg which provides the quality of the spell. Calling the verb as magic_effect will always return a numerical value.", "", "  Usage: magic_effect*s(OBJ caster's doll, OBJ target's doll, NUM spell quality, OBJ spell skill object)", "  So if you wanted to influence a player/monster(s) spell casting, you would create an object with a callable :magic_effect verb that would receive the arguments listed above, and have the verb return a numerical value based on the information provided. Then any doll with that object in its .magic_effects would be affected by your :magic_effect verb.", "", "#1610:magic_effect", "This is a verb consulted by any player casting a spell in an RPG room. This verb is given the same args as #74:magic_effect*s, and is given the same chance to alter the quality of the spells by returning a numerical value. Currently #1610:magic_effect has a lot of checks for the rooms current enviroment. For instance it stifles hail and storm spells cast underground, and makes heal spells harder in cursed areas. You may create your own :magic_effect verb on your room, but if you wish to keep those checks in, you may want to use pass(@args), and include that data in your verb.", "", "  Usage: magic_effect(OBJ caster's doll, OBJ target's doll, NUM spell quality, OBJ spell skill)", "", "#259:magic_effect", "This is a very simple verb that checks the targets .magic_resist, so if the target has a natural resistance to spells, it will have a better chance of being unaffected by one cast at it. Here also you may make your own :magic_effect verb on your monsters for some interesting results. Just have them return a numerical value reflective of if you want to spell strength increased, or decreased.", "", "  Usage: magic_effect(OBJ caster's doll, OBJ target's doll, NUM spell quality, OBJ spell skill)"}
@prop #17233."attacking" {} r
;;#17233.("attacking") = {"Attacking", "---------", "Physical combat in the LRPG typically follows a very distinct sequence. I will take you through this entire sequence, listing verbs that are called, and properties referenced in the process. I will not get in to depth about the explicit functions of any of these verbs or properties, but the important ones will have further documentation.", "", "1) The room's :\"att*ack hit ki*ll\" verb is called first. It performs a number of checks. Ascertaining valid, attacker, defender, weapons, idle times, specified attack areas, etc. If all goes well, the doll of the attacker has its :attack verb called.", "2) The doll's :attack verb does even more checks. Including calls to the doll's :combat_effects, and :encumbrance. Checks the .paralyzed property. Then looks at the provided weapons. Makes calls to the weapon's :slowness, :encumbrance, and :attack (:attack returns a modificating integer, doesn't actually do anything.) It then actually performs the swing. Checking weapons :length, :dam, and so on. Resolving skills, choosing hit locations and so on. After this, it calls the defender's :invite. So that the defender can swing back, if appropriate.", "3) The doll's :act verb makes sure that it isn't looping infinitely. Then calls the doll's :act verb.", "4) The doll :act verb checks to see if any scheduled tasks need clearing out. Then calls its :hit_aggressor if everything seems kosher.", "5) :hit_aggressor simply checks to see who the doll has been fighting with, and calls its :attack verb for those aggressors. And so the cycle begins again."}
@prop #17233."casting" {} r
;;#17233.("casting") = {"Help yet to be written."}
@prop #17233."susa" {} r
;;#17233.("susa") = {"Susa is a utility character much like Grand_Master, only for the express purpose of owning all the money objects in the RPG.", "Not all Grand_Masters have access to Susa. Should you need help with Susa, contact darkrider.", "Sometimes, a garbage object will get stuck in susa's .owned_objects, preventing the creation of more cash and causing heinious problems in the RPG. When this happens, you should track down the objnum of the bad object. Then call Susa's :cleanup verb (located on Susa eirself) with the argument of that objnum, and all will be right with the world."}
@prop #17233."Grandmaster" {} r
;;#17233.("Grandmaster") = {"*forward*", "Grand_Master"}
@prop #17233."notify_hit" {} r
;;#17233.("notify_hit") = {"#259:notify_hit", "This verb is called on a monster whenever it is hit by a weapon. A 'hit' qualifies as anything that isn't dodged, parried, or missed. The verb is given the following args, detailing information about the hit.", "", "  notify_hit(OBJ attacker, OBJ defeneder, OBJ weapon, STR location, NUM|STR severity, NUM damage)", "  Attacker is the object number of WHO is attacking. Defender is the object number of WHO is being hit. Weapon is the weapon that did the hit. Location is a string saying which area of the defender has been hit, (like \"left arm\", or \"head\"). Severity is how badly the defender was wounded, this can be either a number or a string, (like \"scratched\", or \"severely wounded\"). The damage is the numerical damage that the weapon has inflicted on the defender."}
@prop #17233."G_M" {} r
;;#17233.("G_M") = {"*forward*", "Grand_Master"}
@prop #17233."RPG_code" {} r
;;#17233.("RPG_code") = {"The RPG is a unique place on the MOO. Nowhere else has there been such a massive group effort expended to build a single interacting, and interdependant enviroment for willing players to enjoy themselves in. Because of this RPG code is hinged on pre-existing code. There is an RPG 'core' of sorts of objects and verbs used to enable carrying out of vr actions and scenarios of your own devising. ", "However, no where is there a written 'list' of core RPG objects and verbs that you will most likely need to know the workings and functions of to successfully create RPG creations of your own. I will attempt to introduce you to at least the very bare bones of these essentialities, and perhaps even more.", "", "See 'help RPG-core' for a list of specific objects and verbs that help is available on."}
@prop #17233."RPG_core" {} r
;;#17233.("RPG_core") = {"This is a list, organized for easy use, that attempts to show you the RPG core objects. Or objects that are absolutely neccesary to the functioning of the RPG. Most GMs will have need of the vast majority of these objects at one point or another. And rely on them all indirectly for their creations to work. Some of these will have specific help (see 'help rpg-index' for a listing), the others you may wish to take a look at on your own. I will include an *extremely* brief description of each.", "", "Utility:", "------- ", "#46 (Adventurers Database) - The very center of the RPG. Look at *all* its verbs.", "#328 (Magic Database) - Has all of the RPG's magic spells on it", "#4489 (LRPG recycler) - Used to recycle G_M owned RPG items.", "#52766 (GM Equipment Dispenser) - Used to create G_M owned RPG items.", "#1140 (Master Clock) - Used to schedule RPG tasks in G_Ms queue.", "#1131 (Cemetery) - Holds dead creatures, and schedules rebirths.", "#10161 (Department of Enviromental Protection) - Reaps old dolls. Sweeps RPG items.", "", "RPG Things", "----------", "#74 (generic voodoo doll) - Each doll represents a players RPG character.", "#258 (Generic Dungeon Room) - The Generic RPG room. ", "#259 (generic monster) - Any non-player sentient beings in the RPG are this.", "#517 (Generic LRPG Thing) - Any object in the RPG should be onea these.", "#418 (armour) - Fairly self explanitory.", "#82 (weapon) - ditto.", "#11286 (Secure Exit) - The generic RPG exit. Secure against RPG cheats.      ", "", "Skills", "------", "#34595 (LRPG Skill Repository) - Keeps all current skill obj nums stored here.", "#19051 (generic skill object) - Every skill will have a child of this.", "#10330 (Generic Combat Skill Object) - Used for fighting/weapon skills.", "#22517 (Generic Spell Skill Object) - All magic skills descend from this.", "#59933 (Generic Weapon Spell Foci) - A weapon that spells can be cast from.", "#9869 (Generic Armour Spell Foci) - A spell foci you can wear!"}
@prop #17233."pc_topics" {} r
;;#17233.("pc_topics") = {"making_monsters", "attributes", "skills", "RPG_FOs", "RPG_Feature_Objects", "adventure_intro", "initiates", "tidbits", "getting_started", "starting", "PvP", "Player_vs_Player_Combat", "duels", "duelling", "CAPS", "quests", "puzzles", "potential", "boosting", "improving", "brackets", "stat_sheets", "natal_charts", "kabbalahs", "player_killer_protection", "pkp"}
@prop #17233."gm_topics" {} r
;;#17233.("gm_topics") = {"find_chars", "voodoo dolls", "adventurers db", "notify_exit", "notify_arrival", "notify_death", "notify_attack", "act", "die", "invite", "check_ins", "receive_damage", "respond", "attack", "hit_aggressor", "total", "set_att", "get_att", "trust", "roll", "resolve", "match_skill", "get_doll", "combat_effects", "death_effects", "trusted", "att_schedule", "birth", "duty", "magic_effects", "attacking", "casting", "notify_hit", "sheet", "combat", "verbs", "G_Mcriteria", "Grand_Master_criteria", "GMexpectations", "GameMaster_expectations", "lighting", "gen_zap", "incorporeality", "balance", "lockpicking", "GMcriteria", "GameMaster_Criteria", "GMintro", "rpg_code", "rpg_core"}
@prop #17233."hist_topics" {} r
;;#17233.("hist_topics") = {"Grand_Master", "Gamemasters", "susa", "Grandmaster", "G_M", "adventures", "design_intro", "adventuring", "matching", "GMlecture", "LRPGTAND", "crash98"}
@prop #17233."GMintro" {} r
;;#17233.("GMintro") = {"*note*", #48547}
@prop #17233."attributes" {} r
;;#17233.("attributes") = {"__Attributes: Brain, Braun and Beauty__", "", "    \"Attributes\" in LambdaRPG, much like in other games, refers to the set of skills that represent the basic physical and mental endowment of your character.  LRPG's attributes are the following:", "", "Strength, Endurance, Dexterity, Agility, Intelligence, Empathy, Willpower, Perception, and Appearance.", "", "    Each of these attributes changes your gameplay in ways you might logically imagine.  Agility, for example, is helpful when dodging an attack.  To see a quick overview of your attributes, TYPE `ins me'.", "", "    Attributes can be improved in the Eastern corridor of the Academy.  The doors that line the north and south walls lead to rooms in which you can spend potential (see `help potential') to raise your Attributes.  The level 1 courses are highly recommended, unless you really know what you're doing.  In the Gymnasium, for example, training in the course called `g1' will raise your Agility by 1 point, provided you have enough potential to spend.", "", "How Much Will It Cost?", "    The actual amount of potential spent on raising an attribute depends wholly on the current value of that attribute. If you know the current value, you can use a handy verb to determine the cost of improving it: @addfeature #88922 and TYPE `train <current value>'.  This will tell you the cost of raising an Attribute from this value up by 1 point.", "", "    The following is a list of the Attribute training rooms in the Eastern wing, and what each of them will help you improve.  N.B.: The attributes listed inside the () brackets are for advanced players that want to mess with the level 3 and 5 courses, so feel free to ignore them.", "", "_Room_                 _Attribute_", "", "Mensa Office         Intelligence(Willpower)", "Gym                  Strength, Endurance, Agility--this room has courses", "                                                   for 3 attributes", "School of Deportment Appearance(Empathy)", "The Cell             Willpower(Endurance)", "Gonzo's Hall         Dexterity(Perception)", "Private Investigat.  Perception(Intelligence)  ", "Counselling Centre   Empathy(Appearance and Willpower)"}
@prop #17233."combat" {} r
;;#17233.("combat") = {"*note*", #416}
@prop #17233."verbs" {} r
;;#17233.("verbs") = {"*note*", #1356}
@prop #17233."skills" {} r
@prop #17233."GMcriteria" {} r
;;#17233.("GMcriteria") = {"*note*", #63435}
@prop #17233."GameMaster_Criteria" {} r
;;#17233.("GameMaster_Criteria") = {"*forward*", "GMcriteria"}
@prop #17233."G_Mcriteria" {} r
;;#17233.("G_Mcriteria") = {"*note*", #87507}
@prop #17233."Grand_Master_criteria" {} r
;;#17233.("Grand_Master_criteria") = {"*forward*", "G_Mcriteria"}
@prop #17233."GMexpectations" {} r
;;#17233.("GMexpectations") = {"*note*", #112502}
@prop #17233."GameMaster_expectations" {} r
;;#17233.("GameMaster_expectations") = {"*note*", #112502}
@prop #17233."RPG_FOs" {} r
;;#17233.("RPG_FOs") = {"There are a LOT of Feature Objects (FOs) that deal with the RPG. Many of the day to day functions performed by GMs are operated through FOs. Many of the most common information such as locating monsters, or looking at another player's RPG status, use FOs. Many feature objects come and go. So bear in mind that this list is 1) probably not complete, and 2) will probably be outdated fairly quickly.", "This list was last updated: Mon Sep 19, 2005", "(And before that: Wed Dec 24 21:08:13 1997 PST).", "", "PC Feature Objects:", "-- ------- --------", "", "#15870  Bovine Familiar FO", "#69060  RPG Option FO", "#53206  Kagan's RPG FO", "#56817  Big `n Meaty LRPG Utils", "#88922  Hannibal's FO", "#55248  RPG info FO", "#12631  The RPG-O-Meter Feature Object", "#29066  GreyDruid's RPG FO", "#62557  Slither's Feature Object", "#77794  Quad's Spiffy Hacked-Up RPG Verbs", "#1090   Role Playing FO", "#306    Mooshie's FO stuff", "#17311  fo of middling powers", "#88113  Cud FO", "#54585  DK's Misc RPG Utils", "#25552  Multi-communications feature", "#6090   Clent's RPG Feature Object", "#96200  abstract's RPG FO for Lazy RPG'ers", "#8200   Cerv's helper FO", "#57465  Wintermoon's RPG FO", "#97133  scope", "#245    RPG Money Manager", "#59524  Quincunx's Archery FO", "#54585  DK's Misc RPG Utils", "#12631  The RPG-O-Meter Feature Object ", "#34843  Orb of Beastie Control", "#55998  Control-o-Squat FO", "#100185 Knighthood of the Rose FO", "#55248  RPG info FO ", "#53206  The bestest RPG fo", "#1090   Role Playing FO", "#6565   Treasure Chest Feature Object", "#96200  abstract's RPG FO for Lazy RPG'ers", "#51200  Kombat Arena RPG Feature", "", "GM Feature Objects:", "-- ------- --------", "", "#51994  fo of godlike powers", "#61041  LRPG Project Board", "#5011   Dr Moreau FO", "#2677   Bradley's GM-Only Object of Features", "#700    Shopkeeper's FO", "#37377  GM Feature Object", "#88856  RPG Status Feature", "#5588   abstract's GM FO", "#98965  THX1138's GM FO", "#60869  New GM Feature Object", "#2690   Sleeper's Random RPG GM FO ", "#60425  Slither's GM FO", "#910    GM Peeking Feature Object", "#88113  Cud FO", "", "G_M Feature Objects:", "--- ------- --------", "", "#44604  Grand_Master's Orb of Omnipotence", "#22023  skill maintenance FO"}
@prop #17233."RPG_Feature_Objects" {} r
;;#17233.("RPG_Feature_Objects") = {"*forward*", "RPG_FOs"}
@prop #17233."adventure_intro" {} r
;;#17233.("adventure_intro") = {"__Introduction to Adventuring__", "Hydros, Bovine Academy Press", "", "    Welcome to the Bovine Illuminati.", "    We recommend that you read the rest of the PC Topics in this help database.  If you're brand new, `help Attributes', `help caps', `help brackets' and `help boosting' are a good start.", "    Since you're reading this, you probably already have a character, (obtained by arriving at the Initiation Chamber (#88)): a character whose abilities are likely very limited at this point.  The Academy provides several courses to help you grow as a character in the LambdaRPG.", "    Beyond that, exploration and interaction are the key.  The more you explore, the more the nuances will begin to make sense.  This is a game: toy with its various aspects and see where they take you.", "", "Hydros Aquarius, Grand_Master, LRPG"}
@prop #17233."design_intro" {} r
;;#17233.("design_intro") = {"*note*", #413}
@prop #17233."adventuring" {} r
;;#17233.("adventuring") = {"*note*", #277}
@prop #17233."initiates" {} r
;;#17233.("initiates") = {"*note*", #10103}
@prop #17233."GMlecture" {} r
;;#17233.("GMlecture") = {"*note*", #21996}
@prop #17233."tidbits" {} r
;;#17233.("tidbits") = {"LambdaRPG Tidbits - Did you know that ... ?", "-------------------------------------------", "", " - #46:trust used to tell *the owner of every verb in the callers()*", "   stack when there was an attempted security violation", "   #46.exporters was created because because people who owned a lot of", "   commonly used verbs would otherwise be spammed constantly.", "", " - Grand_Master was originally Gary_Severn's character, whom Gemba sometimes", "   also used. ", "", " - *RPG-Bugs (#4044) was originally created by darkrider and was called", "   *RPG-Doco. *RPG-Stuph (#21259) was called *RPG-Suggestions.", "", " - For a long while, *RPG-News was sendable and readable by anyone. Later,", "   when many of the GMs wanted a place to talk about puzzles and other ", "   GM-only issues, the alias *GMS was added and it was made readable only", "   by GMs. Later still, it was made unsendable by non-GMs.", "   At several points *RPG-News was almost recycled since virtually all", "   RPG mail traffic was going through other various *RPG-* lists.", "", " - Originally, all RPG skills and their skill info were stored in a single", "   list stored on #46, which had an index for each skill and its info.", "   Later, when skill objects were created, all the skills would be ", "   stored in #46. So #46.contents would be used as a list of all the skills.", "   However, whenever a non-skill object was moved in, it would break things", "   like #46:exp. So Phantom would just manually clean it out occasionally.", "", " - Before it became a spell, the `wall of force' was a generic object", "   that GMs would make children of for their monsters to carry around.", "   There are still a few of these arounds, as wall's original functionality", "   has been preserved.", "", " - Before there were shops to buy items and weapons at, players used ", "   to get their weapons from the armoury in the academy area... for free!"}
@prop #17233."lighting" {} r
;;#17233.("lighting") = {"New LRPG universal lighting system:", "-----------------------------------", "", "Light is emitted from light objects. The regular generic light sources can be used, if desired, but any object can be easily made to provide light; either to a whole room or to a single individual (a `cat eyes' spell or some such).", "", "There are two main interface verbs that can be on a light source:", "", "#light:room_light(INT previous light) = > The integer value that this verb returns is the light value that will be *added* to the room.", "", "#light:doll_light(INT previous light) => The integer value that this verb returns is the light value that will be *added only to a doll which has the object as a light source*.", "", "If a light object is added to a room, its :room_light value will be added to the room. If a light object is added to a doll, the light object will also be added to the room the doll's character is in, and its :doll_light value will be added to the doll's personal lighting (which is cumilative with the room lighting).", "", "To add a light object to a room or doll ...", "", "#room:add_light(OBJ light)          #doll:remove_light(OBJ light)", "", "To remove one ...", "", "#room:remove_light(OBJ light)       #doll:remove_light(OBJ light)", "", "If an object which has a trusted :room_light verb is moved into an RPG room, the room will automatically add it to its list of lights. It will also remove it when it leaves the room. However, you can still manually add and remove lights without actually having the object in the room (you will also be responsible for removing it when appropriate, be careful not to accidentally leave a light object in the room's list, even when the vr effect should have finished). All doll lights must be added and removed manually.", "The generic light sources will presumably handle most of the common object adding and removing when appropriate. Such as being moved from place to place. Being lit/ignited and doused/turned off.", "", "Added 01/29/98 - Mooshie"}
@prop #17233."gen_zap" {} r
;;#17233.("gen_zap") = {"*note*", #4695}
@prop #17233."incorporeality" {} r
;;#17233.("incorporeality") = {"Incorporeality in the Lambda RPG", "----------------------------------", "", "It has long been possible for monsters in the RPG, or players for that matter, to become `incorporeal.'  Traditionally, this has been done by setting the being's .end to 0. Then $local.rpg.doll:attack would simply display a message that the attack had gone through the individual, and return out without carrying out the attack sequence.", "However, to make life interesting, `materializing' weapons were creating which, when swung at an incorporeal being (one with an .end less than 1), would temporarily raise the .end of the being, then fork off a task to reset it later.", "", "This balance was not a pretty one. Having tasks forked off of every attack in an attack sequence is a nightmare. Plus, it didn't really allow GMs to make monsters which actually were immune to attacks... even from materializing weapons.", "Incorporeality is now entirely accomplished with doll effects.  The base effect object is Incorporeal Effects (#1281) along with its gentler child Skean-Sensitive Incorporeal Effects (#2027) and the bastard Temporary Smoke Spirit Incorporeal Effects (#9285) by way of examples.", "", "A doll endurance of 0 now does NOTHING useful."}
@prop #17233."starting" {} r
;;#17233.("starting") = {"Getting Started in the Lambda RPG", "------- ------- -- --- ------ ---", "", "Step 1) Type `@go #88'  (without the `'s of course).", "", "This will take you to room #88, which is the initiation chamber. Upon entering the room you will get a `doll.' If you are not well accustomed to the MOO setting, the concept of a doll will be a difficult abstract to wrap one's brain around. It is an object, seperate from your character object, which represents your RPG character. You'll hear the term `doll' used a lot, since it is the object that stores all the statistics, qualities, and the current state of your RPG character. Suffice it to say that the term \"doll\" in these help documents is often interchangeable with the term \"character\".", "", "Step 2) TYPE `@set me.help to {#17233}'", "", "This adds the LRPG help database to your person. You can then type `help rpg-index' to get a list of RPG topics. To see more about any of the given topics, type `help <topic>'. The help database is currently up to date and will hopefully remain so. The only truly out of date documentation you'll find there will be listed under `historical.'", "", "Step 4) From #88, TYPE `go s e n'", "", "This will take you to the LRPG Library (#198). There's plenty of good readin' to be had here if you take the time to poke around. However, the reason you're being directed there at this point is for On the Learning and Use of Magic (#1151). ", "", "Step 5) TYPE `@subscribe *RPG-Stuph'", "", "This subscribes you to the RPG mailing list. However, if you encounter any bugs in the RPG, send them to *RPG-Bugs. *RPG-Stuph is for discussion of RPG issues.", "", "Step 6) TYPE `@addfeature #25552' then type `@xconnect #39604'", "", "This connects you to the `bovine' communication channel (the LRPGers are known, jokingly, as the `bovine illuminati'). If you have an RPG question that you don't want to mail to *RPG-Stuph, you can type `xm <question>' and the question will be broadcast across the channel.", "", "Follow these simple steps and you should be armed with the tools necessary to get your RPG character started and begin adventuring. Good luck!", "", "                                         ---- Mooshie (Updated circa Sep 2005 by Hydros)"}
@prop #17233."getting_started" {} r
;;#17233.("getting_started") = {"*forward*", "starting"}
@prop #17233."LRPGTAND" {} r
;;#17233.("LRPGTAND") = {"", "I should note at the very beginning that I had planned to put this message together several weeks ago. I talked about the general idea with the GMs that bothered to show up to the last two GM meetings and I meant to draft a message to send around for approval. It seemed to me tonight, though, that I was procrastinating and that I should just write it and send it now before things get worse.", "", "As a result, the GMs are seeing all this at the same time you are; I don't think they'll be surprised (except that Grand_Master finally doing something is always surprising), but you should know that they haven't approved this note in advance.", "", "++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++", "", "Not long after LambdaMOO was opened to the public, several players (most of them wizards) began work on a gaming area of the MOO. The area would take advantage of general MOO systems, but extend what existed elsewhere, to make a more immersive environment. In a sense, the role-playing game would show what a MOO could do. Unintentionally, it also gave people something to do, which became an important drawing point to LambdaMOO.", "", "There weren't many players in the early months, of course. Each of us pretty much knew everyone else, and the only bureaucracy concerned taking care that we didn't step on each other's toes when making changes to the first RPG core. We were a small circle (I remember feeling thrilled when we first had five people playing at the same time) working together to build something that amused us, and maybe, just maybe, somebody else would find interesting enough to visit more than once.", "", "By the end of the third month or so, we had a basic game system and some game areas in sufficiently good shape to open the RPG to all LambdaMOO citizens and invite them into our creation. Even before the announcement on *social_issues, we had lots of new players who had heard about what we were up to by word of mouth. We were beginning to have a gaming community, though it was so small that nearly every player who had ever started playing had been personally greeted by me. (I know, it must be hard to believe that I used to venture regularly from my Vault, but it's so.)", "", "We had some discipline problems, even then. I remember some assholes who came in as a group, changed their names to things I wouldn't say in front of my mother, and spoofed having sex with every monster (and player) in sight. I remember trying to talk to them about it, getting nowhere, and finally recycling their dolls in frustration. I ran across the list of their object numbers the other day, and was amused to find they were all pieces of RPG equipment now.", "", "After the public announcement, of course, the game took a little leap in popularity. We started to see a wider variety of players, too many for me to meet personally anymore, and we started having disagreements about what was and was not a proper way to play. Eventually, I was approached by a number of players and asked to set down a set of rules for proper behavior. With a written set of rules, we felt that new players could perhaps learn from our experience and that maybe the amount of friction would be reduced.", "", "Accordingly, I wrote a set of rules based entirely (as I recall) on the suggestions made by the players who had made the request. I showed the draft around to whoever was handy. After incorporating suggested changes, the first version of the \"RPG Commandments\" was carved into a wall of the Academy. I had, I think, done a good job of capturing the public consensus of that (admittedly early) time.", "", "Perhaps surprisingly, the RPG Commandments worked quite well in reducing the number of incidents of people annoying each other. The game had a charter that reflected the general opinion, and social pressure (and the occasional nuked voodoo doll) kept things running fairly smoothly.", "", "As the game grew, so did the workload on Grand_Master. We were all spending a lot of time answering the same questions over and over, as well as other things, including arbitrations about who'd killed whom, and who'd stolen what. The load of new players and the ever increasing roll as judge and jury made some of us, including me, feel stressed out and overworked. It became clear that something had to be done to reduce the workload, so at the beginning of the next year I created the GameMaster status, to try to shift some of the burden off of Grand_Master and onto people who like that kind of thing.", "", "It took some working out, and I'm not saying that it didn't disturb a number of players, but the GMs did eventually relieve G_M of what had become an intolerable burden. From my standpoint, anyway, it worked very well.", "", "At first, GMs could do very little; they could only make monsters, and they had to be submitted to me first, to be OK'd or denied. After repeated requests by eager GMs, they were allowed to make equipment, and later, rooms and areas. Money was created. Growth in the game continued and continued, forcing G_M to come up with new mechanisms and experimental solutions to the inevitable growing pains. G_M no longer reviewed all projects, since the point of having Gamemasters was to  decrease the amount of G_M's work. After the room in the Academy that held the \"RPG Commandments\" was accidentally recycled, it was decided to do away with these rules, and allow players more flexibility in how they wanted to play.", "", "Of course, during the whole time, we were fighting an increasingly losing battle, to accommodate and soothe a larger and larger, more and more complex community. The RPG has always had cheaters and hackers, but their numbers have never been higher than they have of late. And because we never thought the game would last this long, something happened that never occurred to us when we started: inflation of statistics, money, weapons, and monsters.", "", "You can probably see where this is leading.", "", "The gradual inflation of all things RPG is far more insidious and damaging to the game than all the cheaters put together; in fact, the main problem with cheaters is that they tend to speed up this inflation. The bias toward bigger and bigger numbers affects all players. The distance between 'haves' (usually older players) and 'have-nots' (usually newer players) has grown tremendously, to the point that new players are frustrated and discouraged, and are quitting. The growth of new players has slowed to a trickle, and without new players, the game will stagnate and die. Old players have little left to accomplish, sine they've done everything.", "", "I realize now that the RPG community has attained a level of complexity and messiness that I've been dreading for years now. The RPG has reached a kind of stasis, too difficult for beginners, and too old for veterans to find challenges.  Various attempts at reform over the years have only slowed the inevitable, and haven't addressed the underlying problems.", "", "So, rather than letting the game die by degrees, G_M has decided to make the tough decision of re-starting the RPG. All players will be given new dolls, with basic stats. All G_M owned equipment will be recycled. All money will be recycled. A list of unbalanced objects and monsters owned by various GameMasters has been drawn up, and these things will be excluded from the game from this point forward. All puzzles will be reset, and solutions changed. Some RPG areas will removed. Potential will be much harder to get. Advancement will be much slower, in the hope that this will prevent us from reaching this stage again anytime soon.", "", "I'm sorry I'm not more explicit about what will stay and what will go, but I want that to be part of the rediscovery of LRPG. This may strike some of you as a little drastic, but it solves a lot of problems for G_M, which will ultimately benefit you, the player. In addition to the problem of inflation mentioned above, re-starting the game will wipe out all benefits accrued by cheaters, and will allow G_M to monitor players much more closely and keep control of what has become a diverse and independent community.", "", "It's a brave new world we're starting here, and I am very much looking forward to exploring it with the rest of you.", "", "I think we're going to have a lot of fun, here... :-)", "", "Grand_Master"}
@prop #17233."originator" {} rc
;;#17233.("originator") = {"This LambdaRPG help database was implemented by Mooshie (#106469)."}
@prop #17233."crash98" {} r
;;#17233.("crash98") = {"Message 275 on *LambdaMOO-History-Project (#13149):", "Date:    Thu Apr  2 21:35:20 1998 PST", "From:    Grand_Master (#2693)", "To:      *LambdaMOO-History-Project (#13149) and *RPG-Stuph (#21259)", "Subject: A funny story", "", "Once upon a time, a funny thing happened in the Lambda-RPG, which was ironically suitable to the time it happened on. Ultimately, fault can be attributed to the deteriorating minds of the GMship, who, due to the nature of the position, have humours which continue to describe sharp downward spirals.", "So, in the Year of Our Haakon 1998, April 1st rolled around, and the GMs were determined to out-do their wizard counterparts with the annual americo-centric \"April Fools\" pranks. The whole notion of April Fools is really flawed from the outset. The notion of scheduling a day in which to suprise people, so everyone knows when to expect them, is intrinsicly flawed. Alas, that has never been enough to stop the various MOO-folk.", "", "So, eventually the GMs decided to release `Lambda RPG Takes a New Direction' (LRPGTAND), in which Grand_Master explains that due to a spiraling out of control of LRPG usage and resources, he has decided to reset the RPG. Everyone starts from scratch with a new character and no weapons or money. (The actual document can now be found via `help LRPGTAND' from the LRPG help database - #17233).", "", "The procedure went relatively smoothly. Everyones items and old characters were stored elsewhere. Some players appreciated it, and even enjoyed being able to start afresh without being TOO concerned that it would be a permanent loss of their character. Of course, a few were indignant, but you can't do anything in the RPG without upsetting someone. Besides, the grand-standing that occurred on RPG mailing lists provided more entertainment then the actual April 1st pranks themselves.", "So, eventually April 2nd rolled around for the last time zone, and a scheduled task called the code which would restore everyone's characters.", "", "This did not go quite so smoothly.", "", "By some quirk in the coding, the vast majority of people's dolls were recycled, without restoring them. Since, for the last two days, the GMs had been trying to convince the players that the change was IN FACT permanent, and that we had simply done it on April 1st so everyone would think it was a joke, and not be too upset. There was a bit of \"Oh shit\"-ing and \"We're fucked\"s, eventually we realized we'd need to beg the very wizards we were trying to out-do to retrieve all the old dolls and equipment information from a previous back-up. Boy were our faces red! Whether that was a result of embarrasment or all the alcohol we had imbibed, is still a matter of dispute.", "", "So, anyhow, the most recent backup (tapes are made every day, but none of the active wizards had access to these) was from March 24th; about one week previous. And if you hadn't gathered, `Once upon a time' was yesterday. Everyone's characters should be restored sometime over the next two days to their state on March 24th.", "", "April Fools everyone ;)", "----Moosh", "--------------------------"}
@prop #17233."balance" {} r
;;#17233.("balance") = {"*note*", #3987}
@prop #17233."lockpicking" {} r
;;#17233.("lockpicking") = {"The generic lockpick is #51818, based on an older parent by Taskmaster. This tool allows GMs to create pickable locks on any sort of object.", "The lockpick itself merely checks to make sure the player is in the proper condition to pick a lock and then passes control to the lock object. Anything else (actually opening the lock, announcing messages, etc) is handled by the lock object.", "To have a pickable lock on an object, you need merely add a :DO_pick_lock verb to the object (and, of course, be a GM).", "You will want to do the following in this verb:", "- Check to see if your lock is already unlocked and razz the player if so.", "- Make a skill check against $local.rpg.skills.lockpick, and probably do so at a penalty based on the difficulty of your lock.", "- Announce a failure message if the roll is not high enough.", "- Announce success if the roll is high enough, and actually unlock the object.", "For an example, you may wish to consult object #55712, a pickable door.", "", "Note that for compatibilty with Taskmaster's older lockpicking system, the lockpick will also check for the existence of a :lock_pick verb on a lock object. If this is the case, the pick itself makes the skill roll and calls a different verb in case of failure. This method is deprecated, and should not be used."}
"#17233.("G_Mwithdrawl") => E_PERM (Permission denied)
@prop #17233."Player_vs_Player_Combat" {} r
;;#17233.("Player_vs_Player_Combat") = {"*forward*", "PvP"}
@prop #17233."PvP" {} r
;;#17233.("PvP") = {"Player vs. Player Combat (or PvP) operates under a few restrictions and contains some perhaps not entirely intuitive mechanisms, which are outlined below:", "", "*  **NEW** (circa Sep 2005) All characters begin their lives ignorant and immune to the world of player versus player killing.  That is, no player can attack you and you can attack no other player.  The only exceptions to this rule are Duels (see `help duel') and certain locations that have been designated as player combat areas (explore to find these).", "          For as long as you retain Player Killer Protection (PKP), your score message (`sc*ore me') will display the following:", "    `Her [His] native innocence gleams like polished armour.'", "          To shed your naive trappings of PKP safety and join the world of Player Killing, seek the Temple of the Jackal.", "", "    __Legacy Code Still in Place Regarding Player Killing__", "*  When you attack another player, you are marked as having drawn `First Blood' vs. that player.  This mark lasts for approximately two and three-quarters hours.", "*  If you manage to kill the player you attacked, you are marked as having caused that player's death.", "*  Once you have been marked as having caused the deaths of two players, you are marked as a Player-Killer (PK).", "*  If the person you attacked instead kills YOU before the aforementioned `First Blood' mark expires, e will NOT be marked as responsible for your death. In other words, killing in self-defence is not penalized.", "*  If you attack a player and then use non-rpg means to leave the room (e.g. @go), you will lose some of the items you are carrying, the amount depending on how many of such attacks you have made. Your victim is not so penalized, however. RPG-themely teleportation, such as the recall spell, is not penalized either.", "*  Once you have been marked as a PK, any player who attacks you will never be marked as being responsible for your death.  Additionaly, certain RPG items (e.g. ankhs) may cease to function or function differently for a PK.", "*  Some additional interaction with PKs and PVP is available in the Temple of the Jackal:", " -  A player may `absolve' anyone who has been marked as being responsible for eir death, effectively removing that mark.", " -  It is said that the blood of a PK has power.", "*  There is no obvious way to detect whether a player is a PK or not; you must rely on your powers of deduction, and perhaps a few consultations with the Priest of the Rose.", "*  There is, however, a way to determine if the player has chosen to remove eir PKP status: The above `native innocence' will be missing from eir score message."}
@prop #17233."duelling" {} r
;;#17233.("duelling") = {"*forward*", "duels"}
@prop #17233."duels" {} r
;;#17233.("duels") = {"__Duelling: Engarde!__", "", "    Duels in LRPG allow combat between two players (see `help PvP'), without having to remove your Player Killer Protection (see `help PKP').", "", "    To initiate a duel, both players must be in the same room, which cannot be a `metaroom' type. One player then types `duel <opponent>'. Both e and eir opponent receive a message stating that the player wishes to start a duel. The opponent can then type `duel <player>', at which point the duel starts immediately, after notifying both parties once again. Alternately, the opponent can type `decline <player>' which refuses the duel and cancels the whole thing out, again notifying both parties. A duel can also time out if one of the opponents takes no action for five minutes; in this case the duel is considered null, and no message is broadcast.", "", "    A duel lasts until one of the two opponents dies (via any means) or leaves the room (again, by any means). When the duel ends, all active RPG players will see a broadcast of the results of the duel (you may ignore these broadcats via `@rpg-option !APB'). The killer will not recieve any `first blood' marks or death counts (as detailed in `help PvP').", "", "    To encourage a fair duel, no other players may interfere in the duel: third parties may neither attack nor cast spells upon either of the opponents. Monsters conjured, summoned, or charmed by third parties will not attack the opponents. All other monsters, however, could care less about the duel and can and will attack or cast spells upon the opponents. i.e. ninja can jump you while you are duelling. Also note that those in a duel cannot attack or cast spells on any player who is not their duelling opponent. However, the two opponents have no restrictions on what they may do to each other.", "", "    There are a few restrictions on who you can duel: no guests are allowed, you may not team with anyone before or during a duel, you may not be mounted, you cannot duel someone who is already in a duel, and of course you can't duel non-rpg people."}
@prop #17233."announce" {} r
;;#17233.("announce") = {"Okay.  So the LRPG (and the entire MOO) has an oversimplification that's now causing grief.  Announcements to players are lumped under \"text\".  There's been no effort to separate messages that are \"visible\" vs. \"audible\".  When you say something, it's handled the same way as if you are doing pushups.", "", "Am now retrofitting the core to handle heard messages differently from seen messages.  Gack.  Here are the current flavours:", "", "   Visual Messaging            Audible Messaging", "   ================            =================", "   rpg:say_action              rpg:say_audio", "   rpg:rpg_show_all_but        rpg:rpg_announce_all_but", "   rpg:rpg_show*_all           rpg:rpg_announce*_all", "   rpg:playershow              rpg:playerannounce", "   rpg.dungeon:show_all_but    rpg.dungeon:announce_all_but", "   rpg.dungeon:show_all        rpg.dungeon:announce_all", "   rpg.dungeon:show            rpg.dungeon:announce", "", "NB:  rpg:playertell() will continue to announce no matter what the doll cannot_hear/cannot_resolve/cannot_see!  Sometimes messages just have to be sent.  Use playershow & playerannounce for MESSAGES THAT THE RECIPIENT WOULD EITHER HEAR OR SEE IN THE ROOM.", "", "Don't panic about retrofitting your stuff immediately.  It's going to be an evolutionary process anyway.  This stuff will allow us to have deafness and/or degrees of blindness in the LRPG.  (the lighting system will be a subset of blindness)", "", "Just to repeat a previous post: The audible stuff will prevent messaging to those players who cannot_hear.  say_audio will also substitute in \"Someone\" and \"Somebody Else\" for those players who cannot_see or cannot_resolve.", "", "The visual stuff will prevent messaging to those players who cannot_see.  say_action will also substitute \"Someone\" and \"Somebody Else\" for those players who cannot_resolve."}
@prop #17233."move_effects" {} rc
;;#17233.("move_effects") = {"Every voodoo doll has a list of move effects stored in its .move_effects property. Each object in this property can define either of the following two verbs:", "", ":enter_effect(OBJ player or monster, OBJ room entered, OBJ entrance)", ":exit_effect(OBJ player or monster, OBJ room exited, OBJ exit)", "", "If a move effect defines either of these verbs, they will be called whenever the doll's .character (their player or monster object) enters or exits an RPG room, respectively. Both effect verbs will always be called with three arguments - first the moving player or object, second the room they have just entered or exited, and third the object number of the entrance or exit they used. If no exit was used, the third argument will be $nothing."}
@prop #17233."CAPS" {} rc
;;#17233.("CAPS") = {"__CAPs: The Sky Ain't the Limit, Folks__", "", "    The term \"CAP\" in LambdaRPG refers to a set of unique settable \"skills\".  The reason for the quotation marks here is that CAPs are not a direct indicator of your character's power, but rather an indication of the direction your character is likely to progress in the improving of skills.  CAPs are the absolute limit to which your skills can improve.  For instance, if you had a Swords CAP of 25, all of your skills in the Swords category, (e.g., broadsword or rapier), could reach a maximum of 25 through training.", "", "    CAPs can be set in the East Wing of the Academy (@go #91, E, E, E, E, E, E), in the room called Career Counseling (#12758).  The commands for doing so are all listed in the room's description.  CAP setting, which USED to cost potential, is now free.  You can shift your CAPs around at will at any time in the development of your character.", "", "    All CAPs start at a default of 10, so that even if you had chosen to set none of them, you could still go out in the world of LRPG and train to improve any skills to a maximum of 10 points.  CAP levels are incremented by levels of 5, starting from the default 10, and reaching a maximum of 30: i.e., 10, 15, 20, 25, 30.", "", "    The maximum allowed CAPs at each particular level are as follows: you may set no more than TWO 30s, NINE 25s, THIRTEEN 20s, and INFINITE 15s."}
@prop #17233."potential" {} rc
;;#17233.("potential") = {"__The Potential For Greatness__", "", "    \"Potential\" (or \"pot\") is the numerical measurement of your character's possible future improvement in the basic Attribute areas (e.g. Strength, Agility, etc.).  For the sake of analogy, potential is spent like money to essentially purchase higher Attributes.", "", "How Much Pot do I Got?", "    Your character will have a great amount of potential when you first begin the game.  To see a limited readout of this value, @addfeature #15870 and TYPE `pot'.  This will print out a lexical representation of your potential: a list of Attributes that you might train using your current potential.  This list is not entirely reliable, but as a general rule, the more Attributes listed, the more potential you have.  If you wish a more reliable, numerical reading of your pot, seek the dragonfly.", "", "How Do I Gain More?", "    Once you run out, potential can be gained in two ways:", "i) By solving in-game puzzles, it is possible to gain potential (see `help puzzles|quests').", "ii) Boosting skills can also be a source of potential. (See `help boosting')."}
@prop #17233."quests" {} rc
;;#17233.("quests") = {"__Quests and Puzzles: Usin' Yer Noggin'__", "", "    Quests are the things you do when you're not killing stuff.  While they often require fighting, they offer the gamer an aspect of gameplay other than combat.  LambdaRPG puzzles are sundry and scattered, and often non-linear, frequently forcing you to wander around using your logic skills to determine what the hell to do next in order to solve them.", "", "Gimme, Gimme", "    Different quests award different rewards.  Some give you fun new toys to play with; some give you new abilities; most will give you more potential (see `help potential').  Those that give potential will be listed in your puzzles list for you to view once you've solved them.  To see your current list of solved quests and puzzles, @addfeature #17311 and TYPE `@puzzles'.", "", "Spoiling is a Faux Pas", "    Please try not to give spoilers (i.e., the solutions or results) to any LambdaRPG quests to other players.  It's not fair to them, robs them of the experience of trying it for themselves, and is terribly frustrating for GameMasters who put tireless, unpaid effort into creating these quests.  Thanks kindly.", "", "Hints!", "    In an open-ended game such as this one, it's difficult to know where to begin on any given quest, so here are some hints for various quest types:", "_Pot-Givers: Quests that give potential_", "    1. Wander around the tower of stormhaven for a while. Look for Gorgot. Try to find out what he wants.", "    2. Find the magus, Barsa'at. He seems to be a troubled soul. Maybe you can help him in some way.", "    3. There are two monsters in the mining area that have items of interest. One is the Heretical Kobold, and the other is the One-eyed Goblin. Check them out. The two are oddly connected, and both are connected to a statue of an old man, nearby.", "    4. There is a dark soul somewhere in the rpg. Some say a witch, some say a necromancer. Her skin is pale and her demeanour cruel. Perhaps she wants something?", "    5. Rumours tell of an old twisted house overrun by evil jesters. Perhaps banishing such creatures may lift the curse and mayhaps even rewards are involved. *wink, wink*  You'll fall ass-backwards into finding this one.", "", "_Scroll-Givers: Quests that provide magic scrolls_", "    This one is for the aspiring mages, who may need to search the land for arcane scrolls that contain the instructions for new spells.", "    1. Talk to the magus, Barsa'at. He is quite knowledgeable about many spells and the location of the scrolls that contain their knowledge.", "", "_Focus-givers: quests that give magical foci_", "    Also for the mages.  (See `help focus|foci').", "    1. Talk to the Presbyter of Rosaceae. He may be able to help you in getting an ankh.", "    2. Some say that the top of Lambdahouse is an ideal place to seek a lightning rod.", "    3. There is talk that magical bracelets can be found in a jungle area somewhere across the waters."}
@prop #17233."puzzles" {} rc
;;#17233.("puzzles") = {"*forward*", "quests"}
@prop #17233."boosting" {} rc
;;#17233.("boosting") = {"__Boosting: Practice x 3__", "", "    \"Boosting\" is the LRPG term for improving one's stats through practice.  By performing any given skill repeatedly, you can boost its value upward.  For example, to improve your Broadsword skill, simply swing a broadsword around over and over (i.e., attack stuff).", "", "Can I Boost My Skills Anywhere?", "    It should be noted that you cannot boost offensive spell skills within peaceful rooms (see `help peaceful_rooms').  So don't waste your time trying.", "", "Can I Boost More than One Skill at a Time?", "    Yes.  Lambda RPG skills are hierarchical, (see `help brackets'), so that while working on boosting one skill, you are likely to improve those higher up in the hierarchy.  As a quick example, by practising broadsword, you are also practising Swords, One-handed weapons, Melee, Strength and Agility.", "", "Does it Matter Where, When, or How I Practice?", "    Usually, the harder it is to perform a skill, the faster it will boost. So, things like casting spells on characters or monsters who have high resistance to your spells, or using a weapon in a small location which hinders movement, will boost your skills faster. Experiment to find the best conditions under which to boost.", "", "How Do I Know When I Boost?", "    When performing a skill, if it boosts, you will receive a message informing you that you feel more proficient in the given area.  This means that the given skill has gone up by 1 point.  One message; one point.  Given all of the text that flies up your screen in this game, Grand_Master has provided you with an aid to see boost messages more clearly.  @addfeature #69060 and TYPE `@rpg-option +highlighting'.  Boost messages will then be displayed between a set of arrows: e.g., ----><----.  Note that these arrows will also show up to highlight every instance of your character taking physical damage.", "", "How Easy Is Boosting?", "    As your character gets more powerful, as his or her stats get higher, you may find that boosts are becoming less and less frequent. This is because the higher your skills get, the harder it is to improve further. In addition, as you boost magic-related stats, the raising of physical stats will become increasingly more difficult; and vice versa.", "", "*A Technicality*: There are certain offensive spells which will not boost when cast on oneself, no matter how often they are cast. Also, spells which can be cast on oneself *and* on other characters, such as haste and heal, only boost at 1/3 the rate of normal boosting, when cast on oneself."}
@prop #17233."improving" {} rc
;;#17233.("improving") = {"*forward*", "boosting"}
@prop #17233."brackets" {} rc
;;#17233.("brackets") = {"__Brackets: The Only Things That Matter__", "", "    Although you may have gained up to a 30 in, say, your Broadsword skill, it doesn't necessarily mean you are a master of the blade. That 30 is essentially the \"raw value\" of this skill, and it does *not* actually go into the mathematical, rpg equations of combat. What *does* affect combat and the actual using of your sword, is the bracketed number *beside* the broadsword skill, seen on your Natal Chart (or other stats sheet). Now, don't think that your raw values don't matter at all, because they do.", "", "What Are the Bracketed Numbers?", "    The number within the brackets is the sum total of all of the raw values of the skills that affect a specific skill, including the skill itself. To clarify: for example, the number inside the brackets for my Broadsword skill, is the SUM of all the raw values of the skills which affect the Broadsword skill, including the raw value of Broadsword itself. Let us look to a visual example:", "", "Strength 15 (15)", "Agility 20 (20)", "Melee 20 (75)", "     One-Handed Weapons 20 (95)", "                         Swords 20 (95)", "                                  Broadsword 15 (130)", "    The example above is obviously not an entire stat sheet, but it does give you an isolated example of the hierarchy of stats and how the brackets work. Right now, please notice the hierarchical structure of the stats, with the Attributes like Strength, Agility and Melee at the top, followed by One-handed weapons, Swords and Broadsword, respectively. This means that, essentially, Broadsword relies on the skills above it.", "", "How Are the Bracket Numbers Calculated?", "    First, you will see that Strength and Agility have the same number inside the brackets as outside. This is because Attributes do not rely on other skills for their bracket numbers. The bracket value for Attributes is always simply the value of the Attribute itself (since there are no skills above them in the hierarchy on which they rely.)", "    The next skill in the hierarchy is Melee. The value in the brackets next to Melee is 75. To reach this number, the system adds up all of the skills that Melee relies on, including its own raw value and places the sum as the bracketed number. Because Melee is affected by Agility, Strength and Agility, (yes, skills can be affected by an Attribute twice or more--you just add that Attribute as many times as it is relied upon to the bracket sum), the bracketed number beside melee is: ", "20(Agil) + 15(Str) +20(Agil) + 20(Melee) = (75).", "    Next, you will see the One-Handed Weapons skill and its bracket number, 20 (95). This is added in the same way as melee, but it relies off of a skill as well as attributes. One-handed weapons relies directly on Melee, and therefore, relies also on the Attributes that affect Melee. So, the number 95 comes from the equation: ", "20(One-H W) + 20(melee) + 20(Agil) + 15(Str) + 20(Agil) = 95. ", "    The same is done for a skill like Broadsword, which is lower down the hierarchy. The only change is that it relies on multiple skills which have to be added into the equation. Because it is a sword and a one-handed weapon, it relies on both those skills to function. Therefore, its bracketed number will require a bit more addition: ", "15(broadsw) + 20(swords) + 20(one-h w) + 20(melee) + 20(Agil) + 15(Str) + 20(Agil) = 130.", "", "How Do I Know Which Skills Rely on Which?", "    The RPG Help Database, which you are reading right now, works also to tell players which skills other skills rely on. Simply TYPE `help <skill name>' and it will tell you what that skill relies on.  For example, TYPING help broadsword, will tell you something like:", "\"Broadsword is a skill directly influenced by the attributes one-handed weapons, and the skill(s) Swords.\"", "    You can then trace the lineage further, by TYPING `help Swords'. This way, you can see what skills Swords relies on, and so on, all the way up the hierarchy.", "", "How Do I Know if My Character is Powerful?", "    Now you should have a basic understanding of how the brackets work. What you need to remember is that the *brackets* are what are actually calculated by the system to create your spell effects, to see who does what in combat, to achieve the results of picking a lock, etc. So, if your bracket value in a skill is low, you obviously aren't any good at that skill. Remember this when you are training your CAPs (see `help CAPs'). By setting certain CAP values to high levels, the addition may add up to powerful bracketed numbers for you.", "    Now, in terms of actual weighting of these numbers, (what's good and what sucks), here's a basic overview:", "Amazing     (190) -This is the highest value almost all bracketed numbers can reach.", "Good        (160)", "Decent      (130)", "Not so Good (100)", "Pure Crap    (26) -This is the average starting point for most stats in terms of brackets.", "    Note that these are all averages, and any number around the same value fits into the same category. You'll figure it out.", "Also, a stat of (190) is hard to come by, as the character would have to have a lot of skills maxed out at top CAP values. Try some addition and see which CAPs you have to set to get certain stats to (190). See if you can figure out why setting these CAPs to these values would give you a Firebolt Bracket value of 190:", "Creo - 30", "Ignem - 30", "Magic Theory - 30"}
@prop #17233."stat_sheets" {} rc
;;#17233.("stat_sheets") = {"__Stat Sheets: God Bless Numbers__", "    While many RPGs have stat sheets which you can refer to at any time, LRPG does not offer such things for free. In order to read your stats, you must buy a sheet.", "", "Where Do I Buy One?", "    Mystical sheets can be bought from the seer, Madame Basillard. She is an expert in divination and can tell you your stat values for nominal fees. She has many services through which you can view different stats, but here we will look at the two most useful.", "    Natal Charts are the most effective way of looking at your stats. Although they tend to cost an arm and a leg, (starting at about 500 gold), they are the most in depth view of stats you are likely to see, and they last much longer than other sheets. Whenever you read a natal chart, (TYPE read natal), you will see a massive list of your stats.", "    Alternatively, you can choose to view a specific skill, or groups of skills, by TYPING `check <skillname> on natal'.  For example:", "", "`check broadsword on natal' returns:", "As you begin reading, the letters shift and swirl.  The ink glows, the paper crackles, and you feel magic between your fingers.", "You peruse your skill in the area of Broadsword: 0 (67)", "And:", "`check swords on natal' will return:", "You peruse your skill in the area of Swords: 0 (66)", "Broadsword: 0 (67)", "Rapier: 0 (67)", "Scimitar: 0 (67)", "Katana two-handed: 0 (66)", "Machete: 0 (67)", "Katana one-handed: 0 (66)", "LongSword: 0 (67)", "Greatsword: 0 (66)", "", "    The other type I refer to here is known as a Kabbalah. This sheet is a less powerful, budget version of the natal chart: it doesn't last nearly as long.", "    Both Kabbalahs and Natals display the stats as follows:", "<Attributes> (<Bracket numbers>)", "<Skills> (<Bracket numbers>)", "(See `help attributes' and `help brackets').", "", "How Long Do They Last?", "    Natal charts can be read 100 times, before crumbling to dust.", "    Kabbalahs, the sheets of weaker magick, can only be read 2 times, before they self-destruct in this manner."}
@prop #17233."natal_charts" {} rc
;;#17233.("natal_charts") = {"*forward*", "stat_sheets"}
@prop #17233."kabbalahs" {} rc
;;#17233.("kabbalahs") = {"*forward*", "stat_sheets"}
@prop #17233."player_killer_protection" {} rc
;;#17233.("player_killer_protection") = {"__Player Killer Protection (PKP)__", "", "    Circa August 2005, Grand_Master made the realm of player killing voluntary: that is, you can only start killing players once you have volunteered to be part of that aspect of LRPG.  Until then, you cannot be attacked by another player, nor can you attack another player.  After volunteering, the opposite is then true, for as long as your LRPG lifetime lasts.  If, for example, you press the red button in the Academy's Termination Centre, your next character will again be protected by PKP.", "", "     If you wish to join the world of kill-or-be-killed, seek the Temple of the Jackal."}
@prop #17233."pkp" {} rc
;;#17233.("pkp") = {"*forward*", "player_killer_protection"}
;;#17233.("index_cache") = {"rpg-index"}
"#17233.("key") => E_PERM (Permission denied)
;;#17233.("aliases") = {"RPG help database", "RPG-help"}
;;#17233.("description") = "An infinite horde of monkeys is busy typing out some decent help in one corner.  You can get an index of their efforts so far with `help rpg-index'."
;;#17233.("object_size") = {96545, 1141286561}

@verb #17233:"find_topics" this none this
@program #17233:find_topics
"recognise skills as valid topics";
if (base = pass(@args))
  return base;
elseif (valid(skill = $local.rpg:match_skill(topic = args[1])))
  return {topic};
else
  return {};
endif
.

@verb #17233:"get_topic" this none this
@program #17233:get_topic
"show a skill's description if given as a topic";
base = pass(@args);
if ((typeof(base) == ERR) && valid(skill = $local.rpg:match_skill(args[1])))
  return skill:description();
endif
return base;
.

@verb #17233:"index" this none this
@program #17233:index
"Topic syntax: {\"*index*\", [, title ]}";
"Customized index printout for varying RPG topics.";
$command_utils:suspend_if_needed(0);
su = $string_utils;
title = `args[1][1] ! E_RANGE => su:nn(this)';
body = {"", title, su:from_list($list_utils:map_arg(su, "space", su:explode(title), "-"), " ")};
body = {@body, ">> PC Help Topics >>", @this:columnize(@this:sort_topics(pc = this.pc_topics))};
body = {@body, "", ">> GM Help Topics >>", @this:columnize(@this:sort_topics(gm = this.gm_topics))};
body = {@body, "", ">> RPG History and Characters >>", @this:columnize(@this:sort_topics(hist = this.hist_topics))};
if (misc = $set_utils:diff(this:find_topics(), {@pc, @gm, @hist, "pc_topics", "gm_topics", "hist_topics"}))
  body = {@body, "", ">> Miscellaneous >>", @this:columnize(@this:sort_topics(misc))};
endif
return body;
.

@verb #17233:"note" this none this
@program #17233:note
"Topic syntax: {\"*note*\", OBJ note}";
"Tries to read the text of a note to give as a help topic";
$command_utils:suspend_if_needed(0);
su = $string_utils;
what = `args[1][1] ! E_RANGE => $nothing';
start = {"", title = su:nn(what), su:from_list($list_utils:map_arg(su, "space", su:explode(title), "-"), " ")};
if ((first = $no_one:eval(tostr(";return `", what, ":text() ! ANY';")))[1] && first[2])
  text = (typeof(mebbe = first[2]) == LIST) ? mebbe | {mebbe};
elseif ((second = $no_one:eval(tostr(";return `", what, ".text ! ANY';")))[1] && second[2])
  text = (typeof(mebbe = second[2]) == LIST) ? mebbe | {mebbe};
else
  return {tostr("Something is screwed up with ", su:nn(this), ". Send mail to ", su:nn(this.owner), ".")};
endif
return {@start, @text};
.

"***finished***