The Mogaminator
The Mogaminator is a rule based system for managing objects
automatically. With this system, you can decide which objects to
pickup, which to destroy, which to automatically identify, and which to
display in the special full screen map. You can automatically inscribe
certain objects to suit your tastes (for example, spellbooks or magical
devices) and even enter conditional statements to handle the
preferences of different classes.
This document describes this system in tutorial fashion, assuming you
know nothing about it. Detailed reference material will appear towards
the bottom of this document (see [a] if you really cannot wait!).
This system is named after its original author. I got
rather tired of calling it the Automatic Pickup and
Destruction Preferences, which is not only a lot to
type, but sounds rather stuffy and boring as well.
Also, it was sometimes called The Auto-Destroyer, but,
as you are about to learn, automatic destruction is
only part of the story.
Review of Object Knowledge
There is no doubt about it: The game generates lots and lots of
objects. Some are valuable and some are not. And what you consider
worthy will even change based on your character's class and progress.
Dealing with objects, especially later in the game, can become a bit of
a nuisance. Fortunately, there are ways to handle the mountains of
stuff that your character is likely to encounter.
First, let's do a quick review. When you find an object, it will
generally be unidentified. You might know the basic kind of object it
is (e.g. a sword), and perhaps its damage dice (if it is a weapon) or
its base AC (if it is armor), but not much else. Carry the object
around a bit in your pack, and you might eventually get a sense of the
quality of the object: whether it is good, or excellent or even
special, or just average or perhaps even terrible. Details depend on
your class and this is called pseudo-id. See [b] for more information.
If you are impatient, you can identify the object right away, provided
you have a means to do so (spell, scroll or magical device).
Identification tells you a little more about the object, including its
obvious magical bonuses and its ego type or artifact name, should you
be so lucky to find an excellent or special item. But Identify
generally won't tell you everything about the object. You might need to
*Identify* it as well to learn about all its attributes.
To recap: your knowledge of an object is in one of the following
states:
[1] Unknown
[2] Pseudo-Identified
[3] Identified
[4] *Identified
Since Identify and *Identify* are scarce resources, you will need to
excercise some restraint when using them. Actually, Identify is rather
common and it is only *Identify* you really need to worry about, at
least once you reach the middle part of the game.
For mushrooms, potions and scrolls, things are a little different.
These objects come in flavors, and once you have learned the flavor,
you will immediately recognize all future instances of that object.
Indeed, all instances of the object are exactly alike, so the
identification game is simply to discover and know the first instance
of the object, and then decide, via your pickup and destroy
preferences, what to do with future instances of this type of object.
For these objects, Identify usually suffices.
For excellent objects, you also need to learn about the ego type
itself. For example, the first time you encounter a (Pattern) weapon,
your character will have no knowledge of its basic attributes. Once you
*Identify* an instance of this ego, you become aware of future
instances of this ego, just like with flavors of potions and scrolls.
This will allow you to cut back on your use of *Identify*, but realize
that many ego types also have some random bonuses in addition to their
fixed attributes. When you learn an ego type, it is only the fixed
attributes that you become aware of.
Managing Objects
So, how do you manage this? Well, you can certainly manage things
manually, dealing with each object in isolation as you encounter it.
For the early game, this is doable. But the first time you Ctrl+Arrow
through a horde orcs or trolls, you will find this approach tedious. At
this point, I recommend you bite the bullet and enable The Mogaminator.
It is worth learning about if you plan on playing this variant for any
length of time. There is also an Easy Destroyer approach to managing
objects, but I'd prefer you not use it. The choice is yours, though,
but one caution: Decide which system you are going to use and only use
that system. In other words, if you turn The Mogaminator on, then turn
off the Easy Destroyer, and vice versa. If you leave both systems on,
then there are precedence issues (one system might destroy what is
marked as desirable via the other system) and it can be hard to track
down why some undesirable event is happening.
What is The Mogaminator? Basically, it is a rule based system for
taking a given action each time you encounter a certain type of object.
The default action is pickup, and this action is used whenever you fail
to specify an alternative action. But you will also want to learn about
destroying objects too, since much of what you find will be junk. Let's
discuss the basics.
Basic Usage
In this section, I'll describe using The Mogaminator without knowing
anything at all about it. So, I am assuming you are a new player.
Please don't take offense :)
You turn on this system by pressing _, which also brings up an in-game
editor where you can manage your preferences. It might look something
like:
(^Q:Quit, ^W:Save&Quit, ESC:Menu, Other:Input text) (0,10)
#***
#*** You have activated the Auto-Picker Editor for the first time.
#*** Since user pref file for autopick is not yet created,
#*** the default setting is loaded from lib/pref/pickpref.prf .
#***
#########################################
# Consumables
#########################################
mushroom of restoring#!E
potions:resist#!k!q
potions:resistance#!k!q
potions:stone skin#!k
potions:heroism
potions:speed#!k!q
potions:giant strength#!k
potions:enlightenment
potions:of strength#!k
--------------------------------------------------------------------------------
Pickup and inscribe "!E" on all items which have "mushroom of restoring" as part
of its name. Display these items when you press the M key in the full 'M'ap.
Since you are new, you probably want to run from this complexity as
fast as you can. Notice the top line of the screen where it tells you
how to get out: ^Q. That's fine and we'll discuss this file in detail,
including its format and what each line means later on below. The
important thing is that the first time you press _ turns this system
on, and initializes it with some pretty nice default preferences.
Now, you will find much of the junk you encounter being destroyed. For
example, all those corpses and skeletons that you are leaving behind as
you hack and slash your way through the dungeon. That in itself is
rather nice. But, you will still run into objects you consider useless.
For example, suppose you took that all important first step on the road
to slaying Morgoth, and bought a lantern at the General Store. Now, you
don't really care about torches anymore. Use the k command (or ^D for
the Roguelike keyset) and you get a prompt like:
Really destroy Wooden Torches {unidentified}? [y/n/Auto]
Notice the Auto option. Choose that and you get a message that the
object is destroyed, but the fact that you don't like torches is
remembered by the system. The next time your character moves on top of
one, it will automatically be destroyed.
And that is basically it. Keep registering stuff for automatic
destruction as you encounter it, and you'll find objects becoming much
easier to manage.
Correcting Mistakes
"Awesome! But what if I make a mistake and auto-register rings of
speed?" Well, don't panic. You can easily fix things up, but doing so
will require you to go back to the preference file editor. Press _ and
then press END to move to the end of the document. This is where the
game keeps track of any objects that you automatically register for
destruction during the Destroy Object command. Your screen might look
something like:
(^Q:Quit, ^W:Save&Quit, ESC:Menu, Other:Input text) (0,199)
?:[GEQ $LEVEL 35]
!nameless common armors
?:[GEQ $LEVEL 30]
!nameless common weapons
?:[GEQ $LEVEL 20]
!average common weapons
!average common armors
?:1
?:[LEQ $LEVEL 34]
#(unidentified armors
#(unidentified weapons
?:1
~special items
!worthless items
#!unusable items
?:$AUTOREGISTER
# *Waring!* The lines below will be deleated later.
# Keep it by cut & paste if you need these lines for future characters.
(!unidentified lights:^wooden torch$
--------------------------------------------------------------------------------
Destroy unidentified light sources whose name is beginning with "wooden torch$".
Not displayed in the full map. This line will be delete later.
You cannot tell from the picture above, but I placed the cursor on the
very last line of the file. In my case, this is the line from when I
auto-registered torches for destruction. Notice that at the very bottom
of the screen, the game tells you exactly what each line means, and
what will happen for the given rule. If you are curious, you can move
the cursor around the default preference file and actually learn quite
a bit about how the system works. For now, though, if you wish to undo
any rules that you automatically added, simply delete the corresponding
line from this file and then exit with the ^W option to save and apply
your changes.
What About Stuff I Want?
That's correct: What you don't want is only half the story. Some
objects you really, really want, such as stat potions and 5d5 long
swords. Wouldn't it be nice if the game automatically picked these
objects up for you whenever you encountered them? Or, even better, what
if the game showed them to you in the Object List command and the Full
Map Display? Then, assuming your detection was good, you could quickly
see what worthy objects might be laying about on the current level.
Well, you can do all these things. At the moment, we still don't know
anything about what those lines in the editor mean, but we have a vague
notion that each line represents a single rule somehow. We also know
that the auto-destroy lines from the Destroy Object command are being
added to the bottom and are being displayed in a funny color.
Generally, those lines are hands off: The game manages them for you,
though, as we just saw above, it's fine to go ahead and delete them if
you made a mistake with the auto-register option. And, we saw that the
game comes with lots of rules already set up for you. You can ignore
those for the time being, though you can also learn a bit by moving the
cursor around in the default file and reading the detailed explanation
at the bottom.
This is great, but let's say you really want a particular object.
Suppose you want potions of Cure Critical Wounds (I'm trying to think
of an example that isn't set in the default preferences). It's early in
the game, and you find yourself getting hurt quite often. Wouldn't it
be nice to be able to automatically display these potions? Well, you
can easily do so by adding the following line to the top of the file:
(^Q:Quit, ^W:Save&Quit, ESC:Menu, Other:Input text) * (0,5)-(20,5)
#***
#*** You have activated the Auto-Picker Editor for the first time.
#*** Since user pref file for autopick is not yet created,
#*** the default setting is loaded from lib/pref/pickpref.prf .
#***
Cure Critical Wounds
#########################################
# Consumables
#########################################
mushroom of restoring#!E
potions:resist#!k!q
potions:resistance#!k!q
potions:stone skin#!k
potions:heroism
potions:speed#!k!q
potions:giant strength#!k
potions:enlightenment
potions:of strength#!k
--------------------------------------------------------------------------------
Pickup all items which have "cure critical wounds" as part of its name. Display
these items when you press the M key in the full 'M'ap.
I colored the new line in yellow so you could see what I changed. Pay
attention to the bottom of the screen: Does it sound like it will work?
+------------------------------------------------------------------+
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|###########################.###.##.#####.#########################|
|#######################..#...#.........#.#..######################|
|#####################........................#####################|
|###################..#######################.#####################|
|#############.:.##.#.##+..................+##..###################|
|#############:::#.#..###..#0##+###+###+#..###...##################|
|##############.##....#+.###################+#..###################|
|###################..#..+##9##3###6###4#+#.##..###################|
|#################.#..#.....................##..###################|
Potions of C|###################..#..!.......>..........##..###################|
|##################...#.....................##...##################|
|##################...#..1##7##2###5###8#+#.##...##################|
|#################.#..#+####+##+###+########+#..###################|
|#################.#..###..................+##.####################|
|##################...########################..###################|
|##################....######################.#####################|
|######################..#.................#..#####################|
|#######################...#####.##.#..###..#######################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
|##################################################################|
| |
| |
| |
Hit M, N(for ~), K(for !), or D(same as M+N) to display auto-picker items.---+
Here, you can see there is some sort of wanted potion in the Full
Screen Map (M), though, unfortunately, you can tell what. Let's try the
Object List (]) instead:
There are 7 wanted objects: ################# LEVEL 1
! 7 Potions of Cure Critical Wounds S 1 E 1 ##..########.#### EXP 10
.........#.....#. AU 462
[Press ESC to exit. Press ? for help] ................. | } [
Bingo! You can even automatically travel to those delicious potions by
pressing ` inside the Object List. What could be easier? With features
like these, why isn't The Serpent of Chaos dead already?
To recap, adding the line "Cure Critical Wounds" means to automatically
pick up any object having "Cure Critical Wounds" as part of its name.
You don't have to type so much: "Crit" might work just as well. But the
less you type, the more likely it is that your new rule will match
other objects. For example, "Cure" would match potions of Cure Light
Wounds, Cure Serious Wounds and Cure Critical Wounds. It might also
pick up some magical devices that have some sort of Cure effect.
Sometimes this is OK and even desirable. Other times, it behooves you
to type more.
Introduction to Rules and Events
Let's begin to learn what is going on. Basically, the preference file
is an ordered list of rules. Whenever a certain event happens, such as
moving on top of an object, the rules are scanned, in order, and the
first one that matches, if any, is applied. Every rule has an action
associate with it that determines what to do whenever this rule
matches.
It is very important to keep in mind that order matters, and that it is
the first matching rule that gets used. Often times, you might add a
line to do something really important, but place it too low in the file
so that it never gets used in practice. The default preference file is
very careful about the ordering of the rules it adds. With time and
practice, you will be too! If you are adding a rule to automatically
pickup a new kind of object, like we did with "Cure Critical Wounds" in
the previous section, simply add it to the very top of the file. With
that approach, you generally won't go wrong.
The second point was that each rule is a single line in the file. You
probably noticed that not every line in the file corresponds to a rule,
though. There are comments and blank lines, for example. There are also
conditional tests, but we won't discuss those just now. Comments begin
with a # key and are ignored by the system. They are displayed in
green. The syntax of a rule is discussed in the next section.
The final point was the notion of an event, or a point in time when the
game will attempt to apply a rule. In general, this happens whenever
(1) the player moves on top of an object, (2) gets a pseudo-id for an
object (see [c]) and (3) identifies an object (see [d]).
Rules
A rule is a single line that consists of an action to perform, a
predicate to test matches, and an optional inscription to add. Let's
discuss each of these in turn.
Actions
First of all, picking something up is the default action and is
inferred whenever you fail to specify an alternative. What are the
alternatives?
! Destroy
; Prompt to Pickup
~ Leave on the Floor
These are the primary actions. Pickup is assumed if you fail to type
!,; or ~.
In addition there are the following command letters that augment the
primary action.
( Don't display this item in the Full Map
? Automatically Identify this item
The first one is not commonly used. Later in the game, your character
might have the power to map the entire level at once. If there is a
vault on the level, then many, many objects may match your pickup
rules. Were they all to be displayed in the Full Map view, there
would not be room to see them all, which can be annoying when that
5d5 long sword is not displayed but the potion of curing is. You'd
really, really prefer to hear about that sword! With the ( option,
you will still automatically pickup the matching object, it's just
that you won't get a text indicator in the Full Map screen. (But you
should probably use the Object List command too, since it shows all
matching objects in a scrollable list, sorted by object value).
The second additional option (viz., ?) is very useful, since it
automatically identifies the matching object. This is a *HUGE*
timesaver ... when it works! But to work, you need to have either
scrolls or a device with the identify power. Spell casters are
currently out of luck :(
All of the action command letters must be specified first in the line
for the rule, with one exception. The # letter indicates that you
wish to automatically inscribe matching objects, and it must occur at
the end of the rule, followed by the text to use for the actual
inscription. For example, #@ad!s!d!k at the end of a rule will
automatically inscribe @ad!s!d!k to any object matching the rule. If
you don't know what this inscription means, it is not really
important. You can see [e] for information about inscriptions.
Matching
Matching is the most important part of a rule. We saw above that
matching is by string comparison with the object name, but you can be
more specific than that if you want. To do so, use the following
keywords to construct a predicate used to test objects. The keyword
portion of the match consists of zero or more adjectives modifying a
noun that indicates the broad class of objects which should be
considered. In addition, you can specify a free form text comparison
string by adjoining : followed by text to search for. We'll put all
of this together in the examples section below.
Let's do nouns first. A complete list is presented at the end of this
document, but some common nouns to get us started include:
Items Applies to everything. This is useful for very general
rules, such as ~?Unidentified Items to automatically
identify, but leave on the ground, everything not yet
identified.
Weapons Applies to all melees weapons, but not to missile weapons.
Shooters Applies to all missile weapons, including bows, slings and
crossbows.
Armors Applies to all forms of armor, including shields, helms,
cloaks as well as body armor.
Wands Applies to magical devices that are wands
Staves Applies to magical devices that are staves
Rods Applies to magical devices that are rods
Potions Applies to potions
Scrolls Applies to scrolls
If you are using keywords to build a match predicate, then you must
specify exactly one noun. But you may use as many adjectives as you
like. The complete list of adjectives is given in the reference
section of this document, but here are some of the more common ones:
Unaware Applies to objects that the player is unaware of. In
practice, this currently only includes mushrooms,
potions and scrolls that the player has not yet
encountered.
Unidentified Applies to objects that have not yet been identified.
Ego Applies to all excellent objects.
Dice Boosted When used with Weapons or Shooters, this adjective
indicates that the object has higher damage dice than
usual. Archers in particular should be on the lookout
for Dice Boosted Shooters!
Wanted Combine with Corpses or Skeletons to indicated that the
corpse or skeleton belongs to a wanted monster. These
may be turned in at the Hunter's Office for a prize.
As an example of using multiple adjectives, the phrase unidentified
ego weapons applies to, well, all melee weapons that are both
excellent and not yet identified. Of course this means that you must
have gotten a psuedo-id on the object in order to be aware that the
object is excellent, since it is not yet identified. Still, this is a
very useful phrase when combined with the ? command letter!
Finally, use a search string to further refine the match. If you
don't use any adjective or noun keywords, then the entire text of
your rule (starting after any command letters, and including all text
up to the # inscription character) is used as the search string. If
you are using keywords, then you will need to mark the end of the
keyword section with the : separator letter. Examples are discussed
below.
Examples
There will be a quiz on this later, so make sure you understand the
following examples!
!potions:apple juice
Destroy potions of apple juice (Who would want those?). It uses the
! command letter for destruction, the potions keyword to apply to
an entire class of objects, the : separator key, and an arbitrary
text field to use for a string match against the object name.
?unaware items
Pickup and automatically identify unaware items (e.g. a potion
you've never seen before). Note that the pickup action is implied
since none of the other primary actions are indicated, and even
though there is a secondary action (to auto-id). This command uses
the adjective unaware to modify the noun items. You could narrow
down the applicability of this rule by using a more specific noun,
such as rings or potions.
wanted corpses#Wanted!k!k!k
Pickup wanted corpses. These are corpses that you may turn in at
the Hunter's Office for a prize. Automatically inscribe these
objects with Wanted!k!k!k. If you don't know what !k means, see [f]
(OK, it means to prompt the user when using the k command to
destroy objects. So, if you are paranoid and don't want to destroy
something by mistake, you inscribe !k on it. In this case, whoever
wrote this rule was really paranoid, since you will be prompted
three times to confirm destruction!).
potions:resistance#!k!q
Pickup all potions whose name contains the word "resistance".
Automatically inscribe !k!q on these objects. In effect, this rule
matches potions of resistance, but rather than using a string match
of "potion of resistance" on all items, it uses a string match of
"resistance" only on potions. Either approach would work equally
well in this instance, but sometimes it is better to use the
appropriate noun for the match, especially if you are dealing with
objects that might come as ego items, as the next example
indicates. Also, if you string match using "potions of resistance"
by mistake, your rule will not work. Why it fails is left as an
exercise for the reader!
?staves:destruction#@ud!s!d!k
Pickup and automatically identify all staves whose name contains
the word "destruction". Inscribe these objects with @ud!s!d!k as
well. Note that using the noun staves with a string match on
"destruction" works more reliably then a string match on "staff:
destruction". Why this is the case will become apparent the first
time you find a "staff of power: destruction".
Scenarios
After that last section, you should have complete mastery over
individual rules. Now, it is time to step up one level and apply
multiple rules to accomplish common tasks. Ready?
Scenario #1: Handling Objects
In this scenario, you would like to handle the stream of objects in
the most efficient way possible. Let's begin with the following
rules:
(unidentified armors
(unidentified weapons
These rules say to pickup all armor and weapons not yet identified.
That leaves out many types of objects, like potions and scrolls, but
this scenario is just focusing on objects for which you might receive
a pseudo-id. We use the ( command letter to prevent the Full Map
Screen from filling up with stuff not yet known to be desirable. But
the auto-pickup is very nice, since items need to be in your pack for
pseudo-id to kick in (until CL35, at least).
Now, lets add the following rules:
!average common weapons
!average common armors
In practice, we wouldn't want these right away since they say to
destroy common stuff. You can handle that with conditionals, which I
haven't discussed yet. For the moment, assume your character is
advanced enough to not want to keep average equipment. These rules
will fire once pseudo-id kicks in, destroying junk. (Of course, junk
is relative, and you may want to keep some stuff). The common
adjective prevents these rules from applying to rare average items,
like dragon scale mail, or blades of chaos.
So, now our character is merrily picking up all equipment and then
auto-destroying the average stuff once pseudo-id kicks in. Can we do
more? Well, try adding:
?unidentified ego items
Now, the egos are automatically being identified on psuedo-id as
well. Pretty sweet! Finally, eventually you will learn that some ego
types are junk, and perhaps would have auto registered some lines
like:
(!common ego cloaks:of protection
(!common ego weapons:of *slay* orc
etc.
So that even the junk excellent items are being toasted for you,
automatically, with nary a keystroke on your part. But, sometimes
egos become dice boosted, and the *slay* orc weapon might mean
something to you if it is really powerful. You can protect it with
dice boosted weapons
or perhaps even
weapons more dice than 30
but that last one is an advanced maneuver.
In summary, the complete order of your rules might be:
weapons more dice than 30
?unidentified ego items
!average common weapons
!average common armors
(unidentified armors
(unidentified weapons
(!common ego cloaks:of protection
(!common ego weapons:of *slay* orc
New armors and weapons come down and hit rule 5 or 6 when your
character steps on them, so they get placed into your pack
automatically (Remember, matching is based on your current knowledge
of the object, not what it truly is. So, when you find, say, a dagger
(+0, +0), it is not immediately destroyed since it is unidentified
and not yet pseudo-identified: You don't yet know it is average!).
Eventually, pseudo-id will kick in revealing the object as average,
in which case it is destroyed by rule 3 or rule 4, or as excellent,
in which case it is processed by rule 2 which auto-identifies the ego
item and rescans the rules. If it is a cloak of protection, it is
destroyed by rule 7, while if it is a weapon of *slay* orc, it is
destroyed by rule 8. Unless it happened to be hugely dice boosted, in
which case it got protected by rule 1 (remember, rules are processed
in order). Easy, right? What happens to weapons/armors that psuedo-id
as {Good}? Or {Special}?
Scenario #2: Flavored Objects
This one is easier, and I'll give the full set of rules first:
potions:healing#!k!q
potions:of strength#!k
potions:of intelligence#!k
potions:of wisdom#!k
potions:of dexterity#!k
potions:of constitution#!k
potions:of charisma#!k
potions:augmentation#!k
scrolls:artifact creation#!*
...
?unaware items
collecting potions
collecting scrolls
?:$AUTOREGISTER
...
(!potions:^potion of restore charisma$
(!scrolls:^scroll of treasure detection$
... <many more junk flavors auto-registered for destruction> ...
Now, the pattern is wanted flavors on top for autopickup (and
inscription), unwanted flavors on bottom for autodestruction (these
are placed in your file automatically each time you press A while
destroying an object) and rules for collecting and unaware items in
the middle. Unaware items get automatically identified, at which
point one of the pickup or destroy rules might get a chance to act.
If this was a new flavor you find useless, destroy it and
autoregister it for destruction so you never see it again. As for the
collecting rules, those fire if you have another object of the same
flavor in your pack. Perhaps you are carrying potions of cure
critical wounds but don't have a rule specifically for this flavor.
In this case, the collecting rule will pickup these objects for you.
Scenario #3: Spellbooks
OK, this is the last one. See if you can figure this one out first:
first realm's fourth spellbooks#@md!s!d!k
first realm's third spellbooks#@mc!k
~first realm's second spellbooks#@mb!k
~first realm's first spellbooks#@ma!k
second realm's fourth spellbooks#@mh!s!d!k
second realm's third spellbooks#@mg!k
~second realm's second spellbooks#@mf!k
~second realm's first spellbooks#@me!k
!first spellbooks
!second spellbooks
!third spellbooks:major arcana
!fourth spellbooks:manual of mastery
third spellbooks
fourth spellbooks
Did you figure it out? This scenario picks up high level spellbooks
from your player's realms of magics, leaves low level spellbooks from
your player's realms of magics, destroys all other low level
spellbooks, destroys all arcane magic spellbooks, but picks up high
level spellbooks from other realms (presumably to sell for gold).
Spellbooks from the player's realms are auto-inscribed to make
casting a spell from the appropriate book consistently use the same
letter to choose that book. Here, as elsewhere, order is very
important. Rules for the player's spell realms must come before the
general rules to destroy low level spellbooks. There is also an
unreadable adjective that would have made processing safer, and less
order dependant.
Which Rule is Being Used?
If you are ever unsure about which rule is being applied in a given
situation, turn on the destroy_debug option (see [g]). With this option
you can use the Inspect command for more information. For example:
a Thieves' Guide [Burglar's Handbook]
Autopick: (!unreadable first spellbooks
6 Potions of Resist Cold
You get temporary resistance to cold when you quaff it. This
resistance is cumulative with equipment.
Autopick: potions:resist#!k!q
In the first case, this is a line automatically added when I destroyed
an unreadable spellbook using the k command. In the second case, this
is a line that comes as a default setting. I may or may not like this
behavior, and if I don't, now I know which line to change!
In addition, with debugging turned on, the rules used are printed in
the message log as actions are taken, so you can see exactly why
objects are being destroyed, picked up, left on the ground or
auto-identified. For example:
You have 26 charges remaining. (AutoID:~?unidentified rods) You see a
Rod: Frost Ball (1/3 charges). (Destroy:(!rods:frost ball$)
Auto-destroying.
Also, you might want to check out the ~_ Knowledge Option. Like the
editor, it displays the rules for you in the order they are processed.
But it only displays the rules that are currently active, which can be
a useful thing to see if you add a lot of conditional rules.
Conditional Rules
This is an advanced topic. If you play a lot, then you probably play
many different types of characters. You probably have rules for objects
that you would like to share across all of your characters. While other
characters, depending on their class, might have special needs.
Finally, you might have some rules that you use early in the game, and
others that you would like to turn on towards the end of the game. You
can accomplish all of this using conditional statements to guard your
individual rule definitions. The conditions are evaluated each time
your preference file is loaded to determine which rules to apply. Oh,
and don't worry, the game automatically reloads the file for you each
time your player gains an experience level, so your conditions get
checked automatically without any intervention on your part.
Imagine scanning the entire preference file from top to bottom,
building a list of all the player's rules. Imagine now that there
exists a switch that can be turned on and off. If the switch is on,
then every rule line you read gets added to the list of current rules.
If the switch is off, then every rule line you read gets skipped.
Finally, imagine there are lines in the file that can turn this switch
on and off. If you can imagine all of that, then, aside from the fact
you are probably a computer programmer, you can understand how
conditional rules work.
The rule lines have already been discussed, and you are surely a master
of them by now. So we really only need to consider those lines that can
flip our global switch. These are called Conditional Lines and they
always begin with the characters ?: followed by a (rather cryptic
looking) expression.
Let's look at an example. Remember Scenario #1 above when we added
lines to destroy average equipment? Well, in practice, you would
probably want those rules to not be used in the early game. Perhaps
once your character reaches a certain level, you would want to add
them. Well, try the following instead:
?:[GEQ $LEVEL 20]
!average common weapons
!average common armors
?:1
Notice there are two lines colored in violet, each beginning with ?:.
These are the Conditional Lines. The first one executes a funny looking
expression while the second one is much simpler, albeit just as hard to
fathom. In programming, one typically uses numbers to represent
everything, and this case is no different. We represent the state of
our global switch as a number. When it is 0, the switch is off. When it
is nonzero, the switch is on. So the first conditional might or might
not flip the switch. It depends on the value of $LEVEL (which you
probably guessed is the player's current experience level) and whether
or not it is >= 20. GEQ stands for greater than or equal to, and 20 is
just a number. And the expression is presented in a funny order as [GEQ
$LEVEL 20] rather than $LEVEL GEQ 20 (or even $LEVEL >= 20). You might
not find this odd, but if that is the case, then you probably (like me)
enjoy programming in LISP or Scheme. In these languages, functions are
always expressed as (f x y z) to evaluate the function f with the
arguments x, y and z. And >= is a function just like any other (it
returns a number which we think of as a boolean value, being either
non-zero for TRUE, or zero for FALSE). You can also nest calls. Perhaps
x must be computed as (g u v) which calls function g with arguments u
and v. Then, instead of (f x y z) you write (f (g u v) y z). Got it?
Now make those parentheses square as [f [g u v] y z], tag variables
with a leading $ so our parser can figure things out, rename operators
with three letter abbreviations, "turn up the volume" making everything
uppercase, and you will finally understand [GEQ $LEVEL 20].
In contrast, ?:1 is easy. Like any good Scheme wannabe, literal values
are self evaluating. Which is just a fancy way of saying that the value
of 1 is itself, viz. 1. No confusion. And 1 means true, which means
turn the switch back on in case the first Conditional Line turned it
off. And in case it isn't obvious, the switch is always turned on
before starting the scan, so you don't need a ?:1 at the top of the
file.
Here's another, more complicated example:
?:[OR [EQU $CLASS Mage High-Mage Sorcerer] [EQU $RACE Beholder Lich] ]
wizardstaff
?:1
That's a complicated expression to determine who wants to gather a
wizardstaff, but I'm willing to bet you can figure it out without
waiting for my explanation. In words, if the player's class is either a
Mage, High-Mage or a Sorcerer; or if the player's race is either a
Beholder or a Lich, then the player wants a wizardstaff (rather badly,
actually). So we really have the expression (or a b) where a and b are
computed values using subexpressions to test the player's class or race
(and you should try playing a Beholder sometime; they are quite fun!).
So, we have expressions composed of functions, variables, literals and
parentheses. What are the functions and variables we can use?
Function Explanation
IOR Inclusive Or: [IOR a b c ...] is TRUE if the value of any
subexpression a, b, c, ... is TRUE.
OR Same as IOR. One day I was puzzled why my [OR ...] expression
wasn't working. Also, if you are going to have IOR, it
suggests you will have XOR (Exclusive Or) as well, and we
don't!
AND Logical And: [AND a b c ...] is TRUE if the value of all
subexpressions a, b, c, ... are TRUE.
NOT [NOT a] is TRUE if a is FALSE, and vice versa. Use this when
you want to take an action when something is not true.
EQU [EQU v a b c ...] is TRUE when the value of v is one of the
values a, b, c, ... Comparison is by string. Typically, you
use this with v being a built-in variable expression, like
$CLASS (see below) and the remaining arguments to EQU being
strings to test, like Warrior or Rogue. Note that string
literals are not quoted and therefore may not contain spaces.
LEQ [LEQ v a] is TRUE when the integer value of v is less than or
equal to the integer value of a. Note that while EQU treats
its arguments as strings, LEQ treats them as numbers.
GEQ [GEQ v a] is TRUE when the integer value of v is greater than
or equal to the integer value of a. Note that while EQU
treats its arguments as strings, GEQ treats them as numbers.
For example, use [GEQ $LEVEL 20] to test if the player's
current level is greater than, or equal to 20.
Variable Explanation
$RACE Returns the name of the player's race. For example, Snotling
or High-Elf.
$CLASS Returns the name of the player's class. For example,
Warrior-Mage or Mindcrafter. Note, if you are playing in
Monster mode, then this variable always returns Monster,
while $RACE returns the actual monster race you are playing,
such as Lich or Dragon.
$REALM1 Returns the name of the player's first realm, if any. For
example, Chaos or Sorcery. If the player does not have a
first realm, then this variable returns none.
$REALM2 Returns the name of the player's second realm, if any. For
example, Life or Death. If the player does not have a second
realm, then this variable returns none.
$LEVEL Returns the player's current level. Typically, you combine
this with GEQ or LEQ to test the level against a threshold,
such as [LEQ $LEVEL 34].
$MONEY Returns the amount of gold the player has. Like $LEVEL, use
this with GEQ or LEQ to test whether your player is rich or
poor.
As mentioned before, all variables begin with a $ character to
distinguish them from string literals.
Literal Explanation
Number Numbers are written like 105 or 32.
String Strings are written like High-Mage or Beholder. Note that
string literals are not quoted and therefore may not contain
spaces.
Using the Editor
We've gotten this far, and I bet you've been using the built in
preference editor just fine. It is pretty easy to use, and you can
probably figure it out on your own. Like any text editor you have used,
you move the cursor about with the arrow keys and then type when you
have located the correct position. Navigation keys like HOME and END
might not be standard, since they take you to the top or bottom of the
document, rather than the beginning or end of the current line, but
you'll get used to the various quirks.
I really don't feel a need to document the editor at all, since it has
a complete menu structure which you can browse and learn all the
commands. Simply press ESC to get started and then follow the various
options. For example:
(a-j) Command:
#*** +---------------------------+
#*** | a) Help |Picker Editor for the first time.
#*** | b) Quit without save ^Q |opick is not yet created,
#*** | c) Sa+----------------------------------+f/pickpref.prf .
#*** | d) Re| a) Left (Left Arrow key) ^B |
| e) Ed| b) Down (Down Arrow key) ^N |
#####| f) Se| c) Up (Up Arrow key) ^P |
# Con| g) Mo| d) Right (Right Arrow key) ^F |
#####| h) In| e) Beggining of line ^A |
mushr| i) Ad| f) End of line ^E |
| j) Ad| g) Page up (PageUp key) ^O |
potio| k) Ke| h) Page down(PageDown key) ^L |
potio| l) Co| i) Top (Home key) ^T |
potio+------| j) Bottom (End key) ^U |
potions:hero+----------------------------------+
potions:speed#!k!q
potions:giant strength#!k
potions:enlightenment
potions:of strength#!k
potions:of intelligence#!k
--------------------------------------------------------------------------------
This line is a comment.
Here, you can clearly see what commands to use to move the cursor about
(And if you are running on the Curses platform, you'll notice that
arrow keys don't work so you'll need to learn the control key
alternatives).
One comment I will make on the editor is that it colors each rule line
according to the syntax of the expression. I personally find this
rather useful. However, sometimes the text displayed is not the same as
the rule you actually typed in, even though the meaning is the same.
For example, if you use multiple adjectives, then they might get
reordered when they are drawn with syntax coloring. In order to avoid
confusion, the current line (viz. the line under the cursor) is never
syntax colored and always displays exactly what you typed.
Reference Tables
This section will give all the nitty gritty syntax details for The
Mogaminator. But first, where are those preference files located
anyway? The default preferences are initialized from
lib/pref/pickpref.prf which is located in your game's directory
structure. If you don't like the defaults that I have provided and
would like to use your own, then this is the file to edit. Once you
enable the system, your preferences are stored in a separate file in a
system dependant location. On Windows, they will be stored in
lib/user/pickpref-NAME.prf inside the game's directory structure, while
on Linux, they can be found in
~/.angband/PosChengband/pickpref-NAME.prf (outside the game's directory
structure). Here, NAME is replaced with your player's current name. So
if you want to edit your preferences using some other text editor, this
is the file you need to change. If you do edit preferences outside of
the game while you are playing, then be sure to use the $ command to
force the game to reload the preference file.
OK, so I promised you reference tables. I'm a man of my word, so here
they are. Enjoy!
Table I: Line Types in the Editor
Type Explanation
Comment These lines begin with a # and are ignored by the system.
Feel free to add them whenever you want to document what
you are trying to do so that you can better understand
the file in the future. I like to add comments to
visually break the file up into different sections, such
as Consumables, Weapons, Armor and Devices.
Conditional These lines flip the global processing switch ON and OFF.
If the expression evaluates to TRUE, then the switch is
turned ON and any subsequent rules will be included. If
the expression evaluates to FALSE, the switch is turned
OFF and any subsequent rules will be ignored. Use
Conditional Lines so that your rule base adapts to the
variety of classes and situations that you encounter. If
this is gibberish to you, then you probably skipped the
section [h] above!
Rule Every other line, unless it is blank, is a rule. The
syntax of a rule is described in the following 5 tables.
Table II: Rules: Syntax
Rules have one of the following two syntactic forms:
[Commands] Adjective* Noun Special-Clause* [:Search-String]
[#Inscription-String]
[Commands] Search-String [#Inscription-String]
Square brackets denote optional syntactic elements. * is the
Kleene-Star and indicates that 0 or more of the preceding syntactic
elements may be specified. All rules must be specified on a single
line in your preference file.
Syntactic Element Explanation
Commands These are actions to take whenever this rule
matches. They are built up with command leters as
described in the next table. If this element is
omitted, then this rule will pickup any matching
objects.
Adjective These modify Nouns, further narrowing down the set
of objects that will match this rule.
Noun A single noun is always specified for the first
syntactic form and indicates the broad class of
objects to which this rule shall apply.
Special-Clause These consist of further rule match refinements
and are discussed below. They are like adjectives
in that they modify nouns, but they also involve
some sort of numerical comparison of an object
attribute, and therefore require special syntax.
They also always follow the Noun while Adjectives
precede the Noun.
Search-String This is a free form text value to compare against
the object's name. Comparison is by string and is
case-insensitive. In addition, you may use the ^
special character at the beginning of a
Search-String to force your match to the beginning
of an object name, and the $ special character at
the end of a Search-String to force your match to
the end of the object name. For example, ^Foo will
only match objects whose names begin with Foo, and
will skip other objects that might have Foo
somewhere in the name, but not at the beginning.
Similarly, Bar$ only matches objects whose name
ends with Bar and skips any that might have Bar
someplace in the middle of its name. Finally note
that an object's name is always in the singular.
So, for example, Seeker Bolt would work for a
string match, but Seeker Bolts would always fail.
Inscription-String This is a free form text value that will be
automatically inscribed on any object matching
this rule.
If you didn't understand some of that, you should probably review the
tutorial sections above, starting with [i]. The examples section
above, in particular, is probably the best way to learn what is going
on.
Table III: Rules: Command Letters
Letter Type Explanation
! Primary Destroy
; Primary Prompt to Pickup
~ Primary Leave on the Floor
Primary Pickup is assumed if you fail to provide an
alternative primary command letter. There is no
command letter for this action, it is simply the
default action to take unless overridden.
( Secondary Don't display this item in the Full Map Screen.
? Secondary Automatically Identify this item. This requires
you to carry scrolls or magical devices with the
Identify power. It does not currently work for
spellcasters.
# Terminal Auto-inscribe matching objects with whatever text
follows this key. Note that Primary and Secondary
command letters must be placed at the beginning of
a rule line, while Terminal command letters must
be placed at the end of a rule line.
Every rule must have one Primary action. It can have 0 or more
secondary actions, and the sole Terminal action is also optional.
Table IV: Rules: Nouns
Noun Explanation
Items Applies to everything. This is useful for very general
rules, such as ~?Unidentified Items to automatically
identify, but leave on the ground, everything not yet
identified.
Weapons Applies to all melees weapons, but not to missile weapons.
If you are a veteran player, then read that description
again. This noun used to include shooters, but I just
recently changed the semantics to accomodate archers who
are very interested in Dice Boosted Shooters but could
usually care less about Dice Boosted Weapons. Also, monks
may want to !Weapons since they usually fight bare-handed,
and having this rule also destroy shooters is quite
annoying.
Favorite Weapons
Applies to all weapons, including shooters, that are
desired by your class. For example, Weaponmasters
specialize in a given class of weapons, such as Axes or
Crossbows. Whatever their speciality, this "noun" will
apply to these preferred items. Calling this "keyword" a
noun is a bit of a misnomer, but it will help you to think
of Favorite Weapons as a single word that is a Noun, since
the code treats it that way! For example, saying Ego
Favorite Weapons is syntactically correct, while Favorite
Ego Weapons is not. (There is no adjective called
Favorite).
Hafted Weapons
Applies to all hafted weapons like Maces, Flails and War
Hammers. These weapons are preferred by Priests who
disdain other kinds of weapons, such as Swords or
Polearms. Like the Favorite Weapons "noun" above, it helps
to think of Hafted Weapons as a single word that is a
Noun, since the code treats it that way (There is no
adjective Hafted). If you are a priest interested in
excellent and artifact hafted weapons, you need to say Ego
Hafted Weapons or Artifact Hafted Weapons to get the job
done.
Diggers Applies to all digging implements, such as shovels and
picks. Digging is fun, but eventually you will probably
want to destroy these objects. Perhaps, you would like the
rule ~Dice Boosted Diggers:Mattock followed by the rule
!Diggers?
Shooters Applies to all missile weapons, including bows, slings and
crossbows. It also includes harps and guns. If you are a
Bard, then you might consider Shooters:Harp as a pickup
preference, while if you are ignoring archery altogether,
try Shooters:Gun instead since the guns are quite useful
for resistances and boosting stats.
Ammo Applies to all ammunition for missile weapons: arrows,
shots and bolts. Consider using Ammo:Seeker or
Ammo:Mithril or Ammo:Steel to pick out desirable ammo.
Armors Applies to all forms of armor, including shields, helms,
cloaks as well as body armor. You can narrow down the
range of armor objects by using a more specific noun from
the following list:
Suits Applies to body armor
Shields Applies to shields
Cloaks Applies to cloaks
Helms Applies to helmets and crowns
Gloves Applies to gloves
Boots Applies to boots
Consider using Armors:Dragon to pickup all the various
forms of dragon armor, including dragon boots, gloves,
helmets and wings. If you are playing a class with armor
weight restrictions, check out the More Weight Than NN
special clause below.
Wands Applies to magical devices that are wands. Use
Wands:Rockets to get all wands, including ego and artifact
wands, that can fire rockets (Trust me: You want them!).
Note: We no longer have a noun Magical Devices.
Staves Applies to magical devices that are staves. For example,
try Staves:Healing or Staves:Speed.
Rods Applies to magical devices that are rods.
Potions Applies to potions. There are many useful potions. If you
are trying to get stat potions, you might consider
Potions:of Strength rather than just Potions:Strength,
since the latter will also match potions of restore
strength.
Scrolls Applies to scrolls
Rings Applies to jewelry that are rings. Since rings are so
useful, I like the rule ?Unidentified Rings for all of my
characters.
Amulets Applies to jewelry that are amulets. Like rings, I prefer
to keep the rule ?Unidentified Amulets for all of my
characters.
Lights These are torches, lanterns and feanorian lamps, as well
as the various artifact light sources. If you are looking
for the Jewel of Judgment, try using Lights:Jewel.
Spellbooks These are all the spellbooks, for all of the various
magical realms. If you are a spellcaster, you will
invariably want to make use of the numerous spellbook
specific adjectives described in the next table.
Junk Need I say more? You probably just need !Junk in your pref
file, though some junk might be useful for some players.
Corpses Corpses actually can be useful. For one thing, every
player can turn in Wanted Corpses at the Hunter's Office
for prizes. And then there are possessors, a monster race
that can actually possess the corpse of a slain foe and
gain the powers of that monster type. They will want to
make use of rules like ~Corpses More Level Than 20 which
uses a special form described below. Of course, they will
tweak the level threshold of corpses they wish to keep as
the game progresses, and they also need to be careful to
keep rather than pickup these desirable objects: Corpses
can be very heavy! Note that Skeletons no longer count as
corpses, mainly because Possessors cannot possess
skeletons so they require a more specific keyword. If you
are a hungry demon, you might consider Human Corpses.
Skeletons Like corpses, you may turn in Wanted Skeletons at the
Hunter's Office. Archers may also use skeletons to make
arrows and bolts, so this class of objects is not as
useless as you might have thought.
If you are using keywords to build a match predicate, then you must
specify exactly one noun. But you may use as many adjectives as you
like.
Table V: Rules: Adjectives
There are many adjectives, and perhaps it might be useful to group
them by kind?
Object Knowledge
Unsensed Applies to objects that have not yet been identified nor
even pseudo-identified. In this sense, it is more
inclusive then the Unidentified adjective. Use a rule
like (Unsensed Weapons to (i) automatically pickup newly
dropped weapons so that you can pseudo-id them in your
pack in the early to mid game; and (ii) automatically
travel to newly dropped weapons in the remainder of the
game using the newly enhanced get objects command (Turn
on auto_get_objects). If destroy_feeling is turned on,
the set of rules will be rescanned once the given item
is sensed, either in your pack at some future time
(prior to CL35) or by stepping on the same square as the
object (once you reach CL35). If destroy_identify is
turned on, the set of rules will be rescanned once you
identify the object.
Unidentified Applies to objects that have not yet been identified and
is a very useful adjective. For example, ?Unidentified
Items has to be my favorite rule of all time!
Identified Applies all objects that have been identified. You might
use this with a rule like !Identified Weapons, preceded
by rules to protect weapons you actually care about,
like dice boosted ego items, for example. But I think it
is almost always preferable to use a !Nameless Common
Weapons rule instead, since it is much safer (e.g. It
won't destroy rare objects like Blades of Chaos and
won't destroy egos either).
*Identified* Applies to fully identified objects, and is rarely
needed. Perhaps you might consider a block of rules
like:
~*identified* rings more value than 5000
~*identified* amulets more value than 5000
~?unidentified rings
~?unidentified amulets
!identified rings
!identified amulets
But this requires you to have a good sense of the value
threshold for jewelry you might want. Also note that
this rule set is safe because, in the current version,
identifying jewelry also *identifies* it. Do not try
this pattern with other types of objects!
Unaware Applies to objects that the player is unaware of. In
practice, this currently only includes mushrooms,
potions and scrolls that the player has not yet
encountered. A rule like ?Unaware Items will help you
learn all those flavors in the early game.
Object Quality
Average Just like the name says, this adjective matches average
items. These are items that lack any form of magical
bonus or enhancment. This adjective is best combined
with the ! command letter at a very early point in the
game :)
Good Good items have a magical bonus of some kind, either a
combat bonus to hit or damage for weapons and shooters,
or an armor class bonus for armors. You might want to
hang on to these objects a bit longer since they can be
sold for gold in the town, but even here, you will want
to destroy them eventually. I usually use the rule
!Nameless Common Weapons rather than the Good adjective,
since Nameless will include average items as well, while
the Common adjective protects objects that are rare and
might still be useful, even if they are only Average or
Good (e.g. Dragon Scale Mail).
Ego Applies to all excellent objects. See [j] for more
information.
Artifact Artifacts are special items and are unique. Think of
them as super-ego objects that you can only find one of
in each game you play. I almost never use this
adjective, though, since you cannot destroy artifacts
anyway. Perhaps you might like to auto-identify them,
though, and a rule like ?Artifact Items would accomplish
this.
Cursed Cursed items aren't necessarily all bad. Still, you
might want rules to handle these objects, for example,
to destroy them. Also note that objects can be Cursed
Ego Items or even Cursed Artifact Items, so perhaps the
rule you are looking for is !Cursed Nameless Common
Items.
Nameless Nameless applies to any object that is neither an
artifact nor an ego item. This adjective is commonly
used to destroy stuff that you know won't be
particularly good, usually as a rule of the form
!Nameless Common Items.
Rare Rare items are special objects that don't show up often,
and might still be desirable even if they are Nameless.
For example, and hopefully this won't spoil too much,
weapons like Blades of Chaos and armors like Dragon
Scale Mail are considered Rare.
Common Common includes any object that is not Rare. So, a Long
Sword is common, but a Blade of Chaos is not. Metal
Scale Mail is common, but White Dragon Scale Mail is
not.
Worthless Any object whose value is 0 is considered Worthless.
This doesn't necessarily mean you want to destroy it,
though. For example, Corpses are worthless, but you
still want some of them. In general, you will want rules
to protect the worthless items you might want, and then,
at the very bottom of your preference file, you add a
rule !Worthless Items.
Object Attributes
Dice Boosted When used with Weapons or Shooters, this adjective
indicates that the object has higher damage dice than
usual. Archers in particular should be on the lookout
for Dice Boosted Shooters!
See the Special Clauses below for more information about matching on
an object's attributes.
Spellbook Adjectives
Unreadable This will match spellbooks that you cannot use, either
because you are playing a non-magical class, or
because you did not choose to learn that particular
magical realm at birth. The most common use for this
adjective is for destruction purposes, as in
!Unreadable Spellbooks.
First Realm's This refers to your primary magical realm. For many
players, this is their only magic realm. For example,
if you are playing a High-Mage, Paladin, Monk, Rogue
or Chaos-Warrior, then you can pick a single realm of
magic at birth.
Second Realm's This refers to your secondary magical realm. If you
are playing a Mage, Priest or Ranger, then you can
pick two realms of magic at birth. The most common
reason to distinguish between your first and second
realms of magic has to do with inscriptions.
Typically, players inscribe @ma through @md, in order,
on their first realm's spellbooks, and use @me through
@mh, in order, on their second realm's spellbooks. Or
you might use @m1 through @m8 if you prefer.
First
Second
Third
Fourth Each realm of magic has four possible spellbooks.
These adjectives refer to each of these possibilities.
For every school except Arcane, only the first and
second spellbooks are available in town, while the
third and fourth spellbooks must be found in the
dungeon. They can be quite rare, and are also valuable
objects, so one typically wants to distinguish between
first and second spellbooks on the one hand, and third
and fourth on the other. Also, combine these
adjectives with the First Realm's and Second Realm's
adjectives discussed above in order to get your
inscriptions setup properly (see Scenario #3 above).
Corpse Adjectives
Wanted Combine with Corpses or Skeletons to indicate that the
corpse or skeleton belongs to a wanted monster. These
may be turned in at the Hunter's Office for a prize.
Unique Combine with Corpses or Skeletons to indicate that the
corpse or skeleton belongs to a unique monster. Not all
unique monsters are Wanted, so many players would
consider them to be junk (They are destroyed by the
default rule !Worthless Items). However, other players
enjoy collecting the corpses of unique monsters, and
placing them on display at the museum. For these
(strange?) folks, adding a rule like ~Unique Corpses
before the !Worthless Items will protect them from
default destruction.
Human And then there are those character's that require the
corpses of humans for either food, or as part of a
ritual to summon a powerful demonic ally. For these
situations, add a rule like ~Human Corpses to your
preferences, though ~Special Items also works.
Miscellaneous
Collecting Collecting Items are stackable objects that you happen
to currently be carrying in your pack. Use this broad
adjective when you don't feel like adding a more
specific rule. For example, you might currently be
carrying Potions of Cure Serious Wounds, and would like
to collect those if you happen to find them. But since
these objects are only useful for a very small portion
of the game, you don't want to use a conditional rule to
handle this.
Special Special Items are objects your race or class needs;
objects that are usually considered junk by default. For
example, some players cannot eat normal food, but must
consume the corpses of humans (Yuk!). Other players use
corpses for various spells, and need to keep them
around. Archers use skeletons to make their own ammo.
And classes that ride pets into battle actually enjoy
using devices that haste monsters. All of these special
scenarios are handled with this adjective.
Unusable This adjective applies to wearable items that your
current character is unable to wear. Doe this sound
strange? It is, but remember that you have the option to
play the game as a Monster, and monsters often have
unusual body types. For example, a Dragon can wear
rings, amulets, lights, cloaks and helmets, but nothing
else. So weapons, shooters, body armor, shields, gloves,
and boots are all considered Unusable. Adding a rule
like !Unusable Items makes the game much more pleasant,
at least once the player is past the point of worrying
too much about gold. (They could also use a rule like
!Unusable Nameless Items if they wanted to keep egos for
resale purposes).
Table VI: Rules: Special Clauses
In the following clauses, N refers to a numerical digit, 0 through 9.
The sequence NN means you may type one or two digits, and can
therefore enter any number between 0 and 99. The sequence NNNNNN
means you may type from one to six digits, and can therefore enter
any number between 0 and 999999. If you enter too many digits, then
the parser will not recognize your special clause, and you will get
unsatisfactory results from your rule.
Special Clause Explanation
More Dice Than NN This clause applies to Weapons only, and is
true whenever the maximum possible damage
exceeds the number you enter. For example a
(2d5) weapon will match More Dice Than 9 but
will fail to match More Dice Than 10.
More Bonus Than NN An object's bonus is the largest of its pval,
its bonus to hit, to damage and to armor
class. Confused? Well, the rule Rings More
Bonus Than 9:Speed will pickup rings of speed
(+10) or better, but will not match other
rings of speed. Another (sarcastic) example:
Suits More Bonus Than 19:Power Dragon says
that you would like Power Dragon Scale Mail,
but only if its bonus to armor class is +20
or better!
More Level Than NN This clause is intended to be used on Corpses
so that Possessors can manage the mountains
of dead bodies they create. You can also use
it with other objects, in which case it
corresponds to the level of the object, or
its ego type. For devices, it matches against
the power level of the device.
More Weight Than NN Some classes have weight restrictions on
armor, like Monks, Scouts and Ninjas. Other
classes, like Maulers, prefer very heavy
weapons. This clause matches against the
weight of the object, in pounds. So Weapons
More Weight Than 39 will match weapons at
least 39.1 lbs in weight (In practice, this
means at least 40.0 lbs in weight).
More Value Than NNNNNN This clause matches against the known value of
the object. Use it with care, since unknown,
or even un-*identified* objects may have
disturbingly low known values.
Table VII: Conditional Lines: Syntax
Conditional Lines have the following syntactic form:
?:Expression
Conditional Expressions use the following (partial) grammar:
Expression := Literal | Variable | [Function Expression*]
Function := IOR | OR | AND | NOT | EQU | LEQ | GEQ
Variable := $RACE | $CLASS | $REALM1 | $REALM2 | $LEVEL | $MONEY |
...
Literal := 23 | 52 | Rage-Mage | High-Elf | ...
Note that unlike above, square brackets are part of the syntax of
expressions and do not indicate optional elements in the grammar.
Rather, function application expressions are always surrounded with
square brackets.
When the expression on a conditional line evaluates to FALSE or 0,
then any subsequent rules will be ignored. When the expression
evaluates to TRUE or non-zero, then any subsequent rules will be
applied.
If none of this makes sense, see [k] above.
Table VIII: Conditional Lines: Functions
Function Explanation
IOR Inclusive Or: [IOR a b c ...] is TRUE if the value of any
subexpression a, b, c, ... is TRUE.
OR Same as IOR. One day I was puzzled why my [OR ...]
expression wasn't working. Also, if you are going to have
IOR, it suggests you will have XOR (Exclusive Or) as well,
and we don't!
AND Logical And: [AND a b c ...] is TRUE if the value of all
subexpressions a, b, c, ... are TRUE.
NOT [NOT a] is TRUE if a is FALSE, and vice versa. Use this
when you want to take an action when something is not true.
EQU [EQU v a b c ...] is TRUE when the value of v is one of the
values a, b, c, ... Comparison is by string. Typically, you
use this with v being a built-in variable expression, like
$CLASS (see below) and the remaining arguments to EQU being
strings to test, like Warrior or Rogue. Note that string
literals are not quoted and therefore may not contain
spaces.
LEQ [LEQ v a] is TRUE when the integer value of v is less than
or equal to the integer value of a. Note that while EQU
treats its arguments as strings, LEQ treats them as
numbers.
GEQ [GEQ v a] is TRUE when the integer value of v is greater
than or equal to the integer value of a. Note that while
EQU treats its arguments as strings, GEQ treats them as
numbers. For example, use [GEQ $LEVEL 20] to test if the
player's current level is greater than, or equal to 20.
Table IX: Conditional Lines: Variables
Variable Explanation
$RACE Returns the name of the player's race. For example,
Snotling or High-Elf.
$CLASS Returns the name of the player's class. For example,
Warrior-Mage or Mindcrafter. Note, if you are playing in
Monster mode, then this variable always returns Monster,
while $RACE returns the actual monster race you are
playing, such as Lich or Dragon.
$REALM1 Returns the name of the player's first realm, if any. For
example, Chaos or Sorcery. If the player does not have a
first realm, then this variable returns none.
$REALM2 Returns the name of the player's second realm, if any. For
example, Life or Death. If the player does not have a
second realm, then this variable returns none.
$LEVEL Returns the player's current level. Typically, you combine
this with GEQ or LEQ to test the level against a threshold,
such as [LEQ $LEVEL 34].
$MONEY Returns the amount of gold the player has. Like $LEVEL, use
this with GEQ or LEQ to test whether your player is rich or
poor.
As mentioned before, all variables begin with a $ character to
distinguish them from string literals. Also, note there are other
variables like $SYS and $KEYBOARD which I haven't documented.
Table X: Conditional Lines: Literals
Literal Explanation
Number Numbers are written like 105 or 32.
String Strings are written like High-Mage or Beholder. Note that
string literals are not quoted and therefore may not
contain spaces.
The Easy Destroyer
If, after reading all of the above, you decide that The Mogaminator is
too much for you to handle, you may, instead, use a simpler system to
manage objects: The Easy Destroyer. I don't recommend this, but the
choice is yours. This system is configured via options (see [l]). The
option destroy_items turns The Easy Destroyer on and off. If you are
using The Mogaminator, be sure to turn off The Easy Destroyer, and vice
versa. (BTW, you "turn off" The Mogaminator but closing the game and
deleting the pickpref-NAME.prf file whose location was indicated in the
reference section).
Original : PosChengband 4.0.0