Dread Quixadhal welcomes you back to wiley.shadowlord.org 3000
__ __.__.__ _____ ____ ___________ .___.___.___
/ \ / \__| | ____ ___.__. / \ | | \______ \ | | | |
\ \/\/ / | | _/ __ < | |/ \ / \| | /| | \ | | | |
\ /| | |_\ ___/\___ / Y \ | / | ` \ | | | |
\__/\ / |__|____/\___ > ____\____|__ /______/ /_______ / |___|___|___|
\/ \/\/ \/ \/
Raised from the depths of the ether, to torment the players of WMU once again!
-= Documentation revised by Quixadhal, 95.12.21 =-
You have on your screen the latest attempt to document the sprawling mass
of spaghetti which we all know and love... WileyMUD! DikuMUD are, by nature,
difficult to use, and even harder to program. They evolved out of a poorly
thought-out design and grew every more convoluted through various people
hacking more and more into them. Why don't we all just go over to the LpMUD
people and beg them to let us in then? Well, some of us like taking the mud
down every 10 minutes to fix typos... and some of us like the fact that we
remember the obscure file formats that these beasties use. Some of us also
have inherited wonderfully designed working muds and haven't yet taken the
time to learn lpc coding sufficiently to attempt a lossless conversion!
In any case, you must somehow have gotten entangled in this web of
chaos and confusion, so this is an attempt to help you SUFFER! through the
worst of it. Creating on WileyMUD is fairly easy, but it requires a handy
copy of these docs somewhere nearby to avoid complete madness. A good
calculator is also helpful since we still do bit-twiddling the old fashion
way... addition.
-= RULES and REGULATIONS =-
1) Your creations MUST fall into the general theme of our mud.
I define our theme as a "dark medieval fantasy", which means that
orcs, dragons, evil spirits and spell casters are all par for the
course. Machine guns, airplanes, taco stands, and anything else
from the modern era is unsuitable. If you want a historical timeframe
to consider, think about europe before about 800 A.D.
2) Your work must be of good quality and be error free.
By good quality, I mean it must be written in the King's English.
While I won't force people to use British spellings, I also won't mind
if they do. Complete sentances are mandatory, and not having english
as your native language is not an excuse. I would not think about
writing areas on a german language mud, as I do not know german and
would fail miserably. Probably, if you can't catch the subtleties
in English poetry, you don't know the language well enough to write
high quality descriptions. Remember, the text you enter is the ONLY
way people can visualize where they are!
Your work should also adhere to our formatting style. We generally
indent room descriptions two spaces on the first line, and let the
rest be flush with the left margin. Any other descriptions, such
as extra details, monsters or whatever, are only indented if they
exceed a single line of text. Consider column 75 to be your right
margin so that word wrapping clients will see things properly.
Bug-free means you've double and triple checked all those annoying
little numbers and made sure it looks proper BEFORE giving it to me.
3) You must submit your work to me for it to be entered into the game.
Because of the nature of DikuMUDs, you cannot directly enter your
creations in the game world. Rather, the entire game must be shutdown
and reloaded after your changes have been merged into the world files.
This means that one of the highest immortals must be given your work
in order for it to enter the game at all. This also means they get
a chance to proof-read it before it enters the game.
Table of Contenets:
This document is broken up into several sections. Each one corresponds
to one of the five world files, and other sections regarding all the other
files and coding standards. All WileyMUD files follow a fixed format, so
each subsection will describe the file directly instead of in prose.
I. The World File, tinyworld.wld ............................... 83
II. The Mob File, tinyworld.mob ................................. 363
III. The Object File, tinyworld.obj .............................. 1111
IV. The Zone File, tinyworld.zon ................................ 1111
V. The Shop File, tinyworld.shp ................................ 1111
VI. Miscellaneus Files and their uses ........................... 1111
VII. WileyMUD III source code .................................... 1111
VIII. Who has been involved in this mess? ......................... 1111
I. The world file (tinyworld.wld)
The world file is the heart of WileyMUD. It is the largest (over
two megabytes at last count) file involved in the game, and contains well
over 4,000 rooms. Here is a description of the room structure as it appears
in the file. Anything enclosed in <symbols> is a piece of data. Anything
enclosed in {symbols} is a group, which must appear together but which can
appear several times or not at all. Anything enclosed in [symbols] is a
group which depends on other values, and is only present when those values
are set correctly. Anything not in these symbols is a literal which must
appear as shown. All lines begin flush with the left margin and are only
indented for clarity. If the line ends with a \, it means it is really a
continuation of the previous line but was formatted for readability.
#<virtual number>
<room title>~
<description>
~
<zone number> <room flags> <sector type> \
[ <teleport delay> <target room> <look?> <movement type> ] \
[ <river delay> <flow direction> ]
[ <sound one>
~
<sound two>
~ ]
{ <exit direction>
<exit description>
~
<exit keyword list>~
<exit type> <key number> <target room> }
[ <alias list>~ ]
{ E
<extra keywords>~
<extra description>
~ }
S
Explanations of Room fields.
<virtual number>:
A number for the given room. No two rooms may have the same number.
The <virtual number> must always increase when browsing down the
world file (but increments can be larger than one).
ie.
#3001
#3002
#3010
<room title>~:
This name is the "title" of the room. It is very important to have a
title to your room as that is the only part of a room that will print
when 'brief' has been set on a player. A tilda must follow the name
of your room.
<description>:
This is what will print to a character who walks into a room, this should
include what the room looks like, what the people see and why they see
it. There must be a tilda on a line by itself below the last line of
the description.
<zone number>:
This is the zone in which the room will reside for purposes of a reset.
Your room must have a zone or it will have no place in the world to
which you build it for. Before you begin building, you will be given
a range of virtual numbers to use. All but the last two digits of
your range will be your zone number... for example: if you were told
to build in the range of 7000 to 7099, your zone will be zone 70. If
you were given rooms 16600 to 16699, your zone will be 166.
<room flags>:
A bitvector consisting of the room conditions. The ones that are desired
are added together and that number is used for the final bit.
DARK 1 Light must be used to see anything.
DEATH 2 Mortals DIE on entry... NEVER use this one!
NO_MOB 4 No monsters may enter this room.
INDOORS 8 The room is indoors, and unaffected by weather.
PEACEFUL 16 No fighting can be attempted.
NO_STEAL 32 No stealing can be attempted.
NO_SUM 64 Nothing can be summoned out of this room.
NO_MAGIC 128 No magic can be cast.
TUNNEL 256 This room has a possibility of collapse.
PRIVATE 512 This room cannot be accesed by a teleport spell.
SOUND 1024 The room eminates sounds.
SOUND requires addition of two fields below the line containing the
<zone number>, <room flags>, and <sector type>.
<sound one>
~
<sound two>
~
<sound one> and <sound two>:
These are text strings which are printed to anyone in the room periodically.
They may be any length, but should probably be kept to one or two lines.
Remember to indent if they will be longer than a single line! Also remember
to put the ~'s on a line by themselves following the sound line. You MUST
have two sounds if you have any. If you only want one sound, make them
both identical.
<sector_type>:
This determines how many movement points are used when moving through
the room. This is a bit table, not the amount of movement it actually
takes to move through this room. The sector type is also used to decide
things like lighting conditions, spell success, etc.
SECT_TELE -1 Teleports players to another room periodically.
SECT_INSIDE 0 Indoor room, no weather or lighting changes.
SECT_CITY 1 City streets, best movement.
SECT_FIELD 2 Grassy fields.
SECT_FOREST 3 Dense forest.
SECT_HILLS 4 Highlands... rocky hills.
SECT_MOUNTAIN 5 Mountains.
SECT_WATER_SWIM 6 Shallow water, no current.
SECT_WATER_NOSWIM 7 Rivers, Requires use of a boat.
SECT_AIR 8 Requires use of flight.
SECT_UNDERWATER 9 Deep water, oceans, Requires water breathing.
SECT_TELE:
The below parameters must be placed behind the <sector_type>.
<teleport delay> <target room> <look?> <movement type>
<teleport delay>:
A multiple of 10, the higher the number, the longer the wait before
the teleports activates. (10 is a combat round)
<target room>:
The room to which you are teleported to.
<look?>:
If this value is a non-zero you will automatically look when entering
the new room. If it is zero, you will not realize you have been moved!
<movement type>:
If the teleport does not activate before you move out of the room, this
is the sector type used for calculating movement costs.
SECT_WATER_NOSWIM:
The below parameters must be place behind the <sector type>.
<river delay> <flow direction>
<river delay>:
The time it takes before you drift through a exit.
<flow direction>:
The exit through which you will drift. The exit must exist or no
drift will occur.
<exit direction>:
This combination of a 'D' and exit number. This field states that a
exit will be leaving the room in one of the cardinal directions.
0 = North
1 = East
2 = South
3 = West
4 = Up
5 = Down
<exit description>:
What a player will see if he looks in the direction of this exit. There
must be a tilda on a line by itself after this field.
<exit keyword list>:
A keyword is what the exit is called if you have to open it. This is also
used if you want the <exit description> printed out if they look at a
keyword. If the exit is a door, you must have a keyword, without one the
door cannot be opened or used in any way.
<exit type>:
This field determines what type of portal the exit is. If it is anything
other than '0' there must be a keyword for it to be acted upon. A door is
considred opened by the game unless it is closed in the zone file.
0 A open passage.
1 A normal door.
2 A door that cannot be picked, you MUST have the key to unlock it.
3 A Secret door that is not shown by ovbious exits.
4 A Secret door that is pickproof.
5+ A door of the type 4 less, but with an additional alias list.
<key number>:
The number of the object which can unlock/lock the door. A value of -1
means there is no key for this door.
<target room>:
The virtual number of the room to which the exit leads. If this number is
-1, the exit doesn't lead anywhere, this is used when you need a exit
description but don't need it to go anywhere. A good example is the edge
of a forest, where a "look east" command will display the vista to the east
even though no more rooms yet exist.
You must have a door between both rooms that the door seperates!
<alias list>:
This allows you to have a alternate name to a exit. The northern exit
could be called a cave instead of north. This is accomplished by adding
4 to the exit type that you desire. ie. 1 + 4 = 5 to include a alias.
Please note that the alias for the exit must be included in the <keywords>
for that exit. Also NOTE that it appears to be disabled in the source.
E: Extra descriptions
Extra descriptions are used for things within the room that you would like
the player to be able to look at. This is signified by placing a 'E' on
a line by itself after all exits have been completed. Below the 'E' you
must add these fields.
<extra keywords>~:
A list of the keywords that will allow the extra description to be
displayed. The keywords must must be seperated by blanks. This must
be followed by a tilda.
<extra description>:
The description that is show when a player types 'look at <keyword>'
and keyword matches one of the above. There must be a tilda on a line
by itself following the description.
S: signifies the end of the room entry, and is the diminutive form of $.
An Example Room!
#3001
The Griffons Tail~
Warm candlelight burns about you as you glance into this small bar and
inn. About you people talk amungst themselves around small oaken tables,
most moving uncomfortably upon their small stools. Near the far wall a
tall bench serves as the bar for this inn, behind which stands a large man
cleaning a wooden mug.
A door lies to the west while archways lead east and south from here.
~
3 12 0
D1
The archway seems to lead into another chamber, most likely where people
to when they feel they need to rest.
~
~
0 -1 3008
D2
You can see a large bulletin board not for into this chamber.
~
~
0 -1 3048
D3
The door is made of solid oak, the brass handle shines in the warm light.
~
door~
1 3010 3000
E
bar~
The bar holds many drinks upon it from those that mill about, the barkeep
fills them from time to time, spilling a bit as he looses his attention.
~
S
-= Information provided by the room file definition:
Room number: 3001
Room name: The Griffons Tail
Zone number: 3
Room Flags: 12 (8+4=12) "INDOORS and NO_MOB"
Sector Type: 0 "Inside"
Exits:
A eastern exit which has:
A description when someone looks east.
No key-words for the exit.
A open passageway.
No key.
Leads to another room, 3008.
A southern exit which has:
A description when somone looks south.
No key-words for the exit.
A open passageway.
No key.
Leads to another room 3048.
A western exit which has:
A description when someone loods west, or at 'door'.
A keyword of door.
A pickable door.
A key with object number 3010.
Leads to another room 3000.
Extra Description: bar
II. The mob file (tinyworld.mob)
If the world file is the heart, the mob file is the limbs of the game.
A world without mobs would be a very boring one indeed, so we provide lots
of painfully entertaining creatures for you to be killed by. Unlike the
world file, there are three distinct variants of mob records. The most
common one is the 'MWS' record. These are the WileyMUD II record types
and they simplified the data entry by sacrificing flexibility. I do not
believe there are any, but support still exists in the source code for the
type 'D' mobile, which allowed setting of the ability scores, but used a
more archaic format. I have created a new type 'C' mob entry, which tries
to follow the feeling of the Wiley II mobs, but allows more flexibility and
even future enhancements like variable damage types on multi-attacks such
as the venerable claw/claw/bite.
To encourage its use, I will begin by describing the type 'C' mob and
then describe the others in how they differ. Full templates will be given
for each so those ignoring the text and using this as a reference can be
spared some suffering. Anything enclosed in <symbols> is a piece of data.
Anything enclosed in {symbols} is a group, which must appear together but
which can appear several times or not at all. Anything enclosed in [symbols]
is a group which depends on other values, and is only present when those
values are set correctly. Anything not in these symbols is a literal which
must appear as shown. All lines begin flush with the left margin and are only
indented for clarity. If the line ends with a \, it means it is really a
continuation of the previous line but was formatted for readability.
Quixadhal's type 'C' mobile template:
#<virtual number>
<name list>~
<short description>~
<long description>
~
<description>
~
<act flags> <affect flags> <alignment> C
<race> <class> <sex> <height> <weight> <gold>
<exp> <level> <hit points> <AC> <thac0> <attacks per round>
{ <damage> <type> }
<immunity> <resistance> <susceptibility>
<str> <stradd> <dex> <con> <intel> <wis>
<sav1> <sav2> <sav3> <sav4> <sav5>
<load position> <default position> <sounds?> <skill count>
[ <local sound>
~
<distant sound>
~ ]
[ <skill number> <learned> <recognized> ]
Basic template of a mobile:
<#virtual_number>
<name_list>~
<short_description>~
<long_description>
~
<description>
~
<action_flags affects_flags alignment type>
<level thac0 AC hit_points damage>
<-1 gold experience race_type>
<position def_postion sex resistances immunites suscebilities>
<room_sound>
~
<distant_sound>
~
-= Explanations:
<#virtual_number>:
The monsters virtual number. These work best if in numerical order.
ie.
#102
#201
<name_list>~:
This are the names by which the mob can be accesed for player actions such
as 'look at buck'. In there 'buck' must be one of the names in the
<name_list> for the mob to be looked at.
<short_description>~:
This string will be displayed when the monster takes action. This is when
the mob does anything, ie. A small boy leaves south, A small boy misses you
with his hit.
<long_description>:
This string is displayed when the current position of the mob matches that
of the default position. If those two do not match the string will simply
read, A small boy is sitting here. There must be a tilda on a line by
itself following this description.
<description>:
This string will be displayed when a player looks at the monster. There
must be a tilda on a line by itself following this description.
<action_flags>:
This bitvector define how the monster behave. The desired bits are to be
added together and that final bit is to be used as <action_flags>.
ACT_SPEC 1 This bit should not be set.
ACT_SENTINEL 2 The mob will not move out of its loading room.
ACT_SCAVENGER 4 The mob will pick things up.
ACT_ISNPC 8 Do not use.
ACT_NICE_THIEF 16 The mob will not attack if a missed steal happens.
ACT_AGGRESSIVE 32 The mob will attack only things it can see.
ACT_STAY_ZONE 64 The mob will not move out of its loading zone.
ACT_WIMPY 128 Mob will flee if injured. If this bit is combined with
ACT_AGGRESSIVE the mob attacks sleeping pc's only.
ACT_HATED 256 The mob will be attacked by other mobs.
ACT_ASSASIN 512 Do not use.
ACT_SCARED_PC 1024 Do not use.
ACT_IMMORTAL 2048 Mob can not be attacked.
ACT_HUNTING 4096 Do not use.
ACT_DEADLY 8192 Do not use.
ACT_POLYSELF 16384 Do not use.
ACT_POLYOTHER 32768 Do not use.
ACT_GUARDIAN 65536 Do not use.
ACT_USE_ITEM 131072 The mob will use items that it picks up.
ACT_FR_MOVES 262144 The mob will use fighter skills.
ACT_FD_PROV 524288 The mob has a chance to provide food when killed.
ACT_PROT 1048576 Do not use.
ACT_MOUNT 2097152 The mob can be ridden.
<affection_flags>:
This is a bitvector that indicates what the monster is affected by. The
bits desired for a mob are added and the final number is that which is
used for <affection_flags>.
AFF_INVISIBLE 2 The mob is invisible.
AFF_DETECT_INVISIBLE 8 The mob can see_invisible.
AFF_SENSE_LIFE 32 The mob can sense hidden pc's.
AFF_SANCTUARY 128 The mob takes half damage.
AFF_FLYING 2048 The mob can move into FLY sectors.
AFF_INFRAVISION 32768 The mob can see in the dark.
AFF_GILLS 65536 The mob can see underwater.
AFF_SNEAK 524288 The mob will not be seen leaving/entering.
AFF_HIDE 1048576 The mob will be hidden, even in combat.
AFF_CHARM 4194304 The mob will act as charmed if a 'follow' command
is given to it.
<alignment>:
This is the monsters alignment read as:
1000 <> 350 (good alignment)
349 <>-349 (neutral alignment)
-350 <>-1000 (evil alignment)
<type>:
There are four different types of a mobile. The type defines what the
mob will do in other respects besides those covered in <affect, action>.
'D' - Do not use.
'S' - Mob will not have multiple attacks or make sounds.
'M' - Mob can have more than one attack. You must place a number after the
M to designate how many attacks the mob shall have. ie. M 2
'W' - Mob can have multiple attacks and make sounds. Attacks apply to the
same rule as M mobs. Sound is handled at the end of the template.
'C' - Most recent mob structure. See special details on building C mobs
in the section below.
<level>:
This is the level of the monster, and is used for the 'consider' command
in game.
<thac0>:
The amount the mob needs to hit armor class 0. The lower the number the
better the chance the mob will hit. This number should be <level> + 2, with
a max of 20.
<AC>:
The mobs armor class. The lower the number the harder it is to hit the
mob. Figure in dexterity bonuses as dex 18=AC 6, 17=7, 16=8, 15=9, 14+=10.
<hit_points>:
This defines the number of hitpoints a given monster has. The format is:
<level>d8+25. Figure in constitution bonuses as con 18=+4 per <level>,
17=+3/level, 16=+2/level, 15=+1/level. Constitution bonuses are added to
the base 25.
<damage>:
This is the bare_hand damage a mob will give. The format is: 1d4+0 for any
normal mobile. The dice and additional strength damage can be increased
if the mobile is deserving.
<-1>:
This is stating that the mob will have a race, which will be place after the
<experience>. You do not have to have a race, therefore the -1 is not
needed in that case.
<gold>:
This is how much gold the mob has on its body. This amount can be stolen
and is the amount a player will get from the corpse of the mob.
<experience>:
This is how much exp a player will get for killing the mob. A general rule
for experience is 100*<level> + whatever amount you feel neccesary. Do
not give out a exuberant amount of exp, but enough to make the fight worth
a players while.
<race>:
This is activated by having a -1 in front of the <gold> portion of the mob
template. This number will be the race that the mob is seen as when a
player looks at it. Mobs of the same race will help each other out in a
fight, keep that in mind.
Races available:
Player/Mobile races :
RACE_HALFBREED 0
RACE_HUMAN 1
RACE_ELVEN 2
RACE_DWARF 3
RACE_HALFLING 4
RACE_GNOME 5
Mobile races :
RACE_REPTILE 6
RACE_SPECIAL 7
RACE_LYCANTH 8
RACE_DRAGON 9
RACE_UNDEAD 10
RACE_ORC 11
RACE_INSECT 12
RACE_ARACHNID 13
RACE_DINOSAUR 14
RACE_FISH 15
RACE_BIRD 16
RACE_GIANT 17
RACE_PREDATOR 18
RACE_PARASITE 19
RACE_SLIME 20
RACE_DEMON 21
RACE_SNAKE 22
RACE_HERBIV 23
RACE_TREE 24
RACE_VEGGIE 25
RACE_ELEMENT 26
RACE_PLANAR 27
RACE_DEVIL 28
RACE_GHOST 29
RACE_GOBLIN 30
RACE_TROLL 31
RACE_VEGMAN 32
RACE_MFLAYER 33
RACE_PRIMATE 34
RACE_ANIMAL 35
RACE_FAERY 36
RACE_PLANT 37
<position>:
This defines the monster's position when loaded into the game.
A position is one of:
Position_Sleeping 4 The mob is sleeping.
Position_Resting 5 The mob is resting.
Position_Sitting 6 The mob is sitting.
Position_Standing 8 The mob is standing.
<def_position>:
This is the position into which the monster will return after a fight.
This must be the same as the <positon> or the <long_description> will not
print out.
<sex>:
This is the monsters sex. If the mob is going to have <immunities, ect>,
you must add 3 to the sex, and then you may include those fields.
Neutral 0
Male 1
Female 2
<resistance> <immunity> <susceptibility>:
This combination of numbers will make the mob resistant to those types of
attacks and damages. Each field uses the numbers below to result in the
resistances, immunities, and suscebilities. This field is only active if
a 3 has been added to the sex of the mob.
Imm_Fire 1
Imm_Cold 2
Imm_Elec 4
Imm_Energy 8
Imm_Blunt 16
Imm_Pierce 32
Imm_Slash 64
<sound_one>:
This is the sound that will be heard if you are in the same room as the W
type mob. Only the 'W' type mobs are allowed to have this field.
<sound_two>:
This is the sound you will hear if you are standing one room away from the
mob that emits the sound. Only 'W' type mobs are allows to have this field.
*******************************************************************************
The 'C' mob structure
Standard WileyIII mobs are very primitive and limited. All attributes, such
as str, int, wis, dex, con, and class are defaulted. All objects simply "hit",
rather than using special attacks which are normal for their species. Instead
of a clawed attack, such as from a Slaadi, the mob simply "hits" you.
The C mob structure was developed to overcome that limitation and offer greater
flexibility to the builder.
Here is the layout for the C-type mob structure.
<#virtual_number>
<name_list>~
<short_description>~
<long_description>
~
<description>
~
<action_flags affects_flags alignment type(='C')>
<race class sex height weight gold(dice)>
<exp(dice) level hit(dice) AC thac0 #attacks>
<damage(dice) dam_type>
... continues for each attack.
<resistance immunities susceptibilities>
<str stradd dex con intel wis>
<sav1 sav2 sav3 sav4 sav5>
<position def_position sounds skills>
<local_sound> (if sounds=1)
~
<distant_sound> (if sounds=1)
~
<skill_type learned recognized> (for skills from 0 to n in skills database)
...
The different specifications from the normal mobs are broken into:
race: same as above.
class: which class. Mobs can multiclass. Here is a list of the class values
to add together:
CLASS_MAGIC_USER 1
CLASS_CLERIC 2
CLASS_WARRIOR 4
CLASS_THIEF 8
CLASS_RANGER 16
CLASS_DRUID 32 (note: not implemented)
sex: same as above.
height: how tall a mob is. It does nothing that we know of. Old default is
137.
weight: how much the mob wieghs. Also does nothing. Old default is 235.
gold(dice): amount of gold mob will have. Specified in dice format (i.e.
<#die>d<die_size>+<added_value>).
experience: also in dice roll.
level: mob level. Applied to all classes mob belongs to.
hit: specified in dice.
AC, thac0: Same as above.
<#attacks>: number of attacks the mob is allowed.
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-= Object field description:
Basic object template:
<#virtual_number>
<name_list>~
<short_description>~
<long_description>~
<action_description>~
<type_flag> <extra_flag> <wear_flag>
<value0> <value1> <value2> <value3>
<wieght> <value> <cost/day>
<A>
<location> <modifier>
<E>
<keyword_list>~
<extra_description>
~
<#virtual_number>:
This is the virtual number of the object. Object numbers must increase
in number with each additional object.
#234
#235
#391
<namelist>~:
These are the various names that the obj can be accessed with. They must
be obvious enough so that a player can manipulate the obj.
<short_description>~:
This string will be displayed when the object is used. This field is
the name of the obj as it will appear in a players inventory or when the
obj is manipulated.
<long_description>~:
This description is displayed when the object is lying on the ground.
<action_description>~:
This field is not used for all objects other than the audio object for which
it is used as the sound that the object will make.
<type_flag>:
This defines what kind of obj you are making. A obj can ony be one of
the listed below.
ITEM_LIGHT 1 Obj gives off light.
ITEM_SCROLL 2 Obj can be a read spell.
ITEM_WAND 3 Obj can use a spell.
ITEM_STAFF 4 Obj can use a spell.
ITEM_WEAPON 5 Obj is a weapon.
ITEM_FIREWEAPON 6 Do not use.
ITEM_MISSILE 7 Do not use.
ITEM_TREASURE 8 Obj is jewelry worth coin.
ITEM_ARMOR 9 Obj is armor.
ITEM_POTION 10 Obj can be quaffed.
ITEM_WORN 11 Obj can be worn.
ITEM_OTHER 12 Obj is misc.
ITEM_TRASH 13 Obj is junk.
ITEM_TRAP 14 Obj is a trap.
ITEM_CONTAINER 15 Obj is a container.
ITEM_NOTE 16 Obj is a note, can be written upon.
ITEM_DRINKCON 17 Obj is a drink container.
ITEM_KEY 18 Obj is a key.
ITEM_FOOD 19 Obj is food.
ITEM_MONEY 20 Obj is a amount of coins.
ITEM_PEN 21 Obj is a pen, can write on a note.
ITEM_BOAT 22 Obj allows a player to move into SECT_NOSWIM.
ITEM_AUDIO 23 Obj will make a sound.
ITEM_BOARD 24 Obj can be a bulletin board.
<extra_flag>:
This bitvector defines the affects and restrictions of the obj. The
desired bits below are added together and the final number is used as
the <extra_flag> bit.
ITEM_GLOW 1 Obj glows.
ITEM_HUM 2 Obj hums.
ITEM_INVISIBLE 32 Obj is invisible.
ITEM_MAGIC 64 Obj will have a blue hue if detect magic is cast.
ITEM_NODROP 128 Obj cannot be dropped.
ITEM_BLESS 256 Obj is blessed.
ITEM_ANTI_GOOD 512 Obj cannot be held by a good alignment.
ITEM_ANTI_EVIL 1024 Obj cannot be held by a evilalignment.
ITEM_ANTI_NEUTRAL 2048 Obj cannot be held by a neutral alignment.
ITEM_ANTI_CLERIC 4096 Obj cannot be used by a cleric.
ITEM_ANTI_MAGE 8192 Obj cannot be used by a mage.
ITEM_ANTI_THIEF 16384 Obj cannot be used by a thief.
ITEM_ANTI_FIGHTER 32768 Obj cannot be used by a warrior.
ITEM_ANTI_RANGER 65536 Obj cannot be used by a ranger.
ITEM_PARISH 131072 Obj ITEM_FOOD will decay.
<wear_flag>:
This bit defines how and where the obj is manipulated within the game. The
desired bits are added together and used for <wear_flag> bit. Please note
that ITEM_TAKE should be set, or the object can never be picked up to be
used.
ITEM_TAKE 1 Obj can be picked up.
ITEM_WEAR_FINGER 2 Obj can be worn on finger.
ITEM_WEAR_NECK 4 Obj can be worn around neck.
ITEM_WEAR_BODY 8 Obj can be worn on body.
ITEM_WEAR_HEAD 16 Obj can be worn on head.
ITEM_WEAR_LEGS 32 Obj can be worn on legs.
ITEM_WEAR_FEET 64 Obj can be worn on feet.
ITEM_WEAR_HANDS 128 Obj can be worn on hands.
ITEM_WEAR_ARMS 256 Obj can be worn on arms.
ITEM_WEAR_SHIELD 512 Obj can be used as a shield.
ITEM_WEAR_ABOUT 1024 Obj is worn about body.
ITEM_WEAR_WAISTE 2048 Obj can be worn around the waiste.
ITEM_WEAR_WRIST 4096 Obj can be worn on wrist.
ITEM_WIELD 8192 Obj can be wielded one-handed.
ITEM_HOLD 16384 Obj can be held in a hand.
ITEM_WIELD_TWOH 32768 Obj can he wielded two-handed.
<value 0> <value 1> <value 2> <value 3>:
These values are very central. They define the ability of items based on
the items <item_type>. These values are defined in below as each obj has
different values.
Values are:
(Items with no values listed must have a 0 assinged to all values)
ITEM_LIGHT (1)
Value[0]: 0
Value[1]: 0
Value[2]: Number of hours the light can be used for. Zero hours means that
the light has gone out. A negative number will create an eternal
light source.
Value[3]: 0
ITEM_SCROLL (2)
Value[0]: Level of the spell on the scroll.
Value[1]: Spell one.
Value[2]: Spell two.
Value[3]: Spell three.
The values(1-3) are three (or less) different spells scribed on the scroll.
Unused spells should be set to -1.
ITEM_WAND (3)
Value[0]: Level of spell in wand.
Value[1]: Max charges.
Value[2]: Charges left.
Value[3]: Spell in wand.
ITEM_STAFF (4)
Value[0]: Level of spell in staff.
Value[1]: Max charges.
Value[2]: Charges left.
Value[3]: Spell in staff.
ITEM_WEAPON (5)
Value[0]: 0
Value[1]: Number of die for damage.
Value[2]: Size of die for damage
Value[3]: The weapon type. Type is one of:
NUMBER CATEGORY Message type
0 : Bludgeon "smite/smites"
1 : Pierce "stab/stabs"
2 : Slash "whip/whips"
3 : Slash "slash/slashes"
4 : Bludgeon "smash/smashes"
5 : Slash "cleave/cleaves"
6 : Bludgeon "crush/crushes"
7 : Bludgeon "pound/pounds"
8 : Mob "claw/claws"
9 : Mob "bite/bites"
10 : Mob "sting/stings"
11 : Pierce "pierce/pierces"
ITEM_FIREWEAPON (6)
ITEM_MISSILE (7)
ITEM_TREASURE (8)
ITEM_ARMOR (9)
Value[0]: Effective AC of armor.
Value[1]: Original AC of armor (before damage).
Value[2]: 0
Value[3]: 0
ITEM_POTION (10)
Value[0]: Level of the spell in the potion.
Value[1]: Spell one.
Value[2]: Spell two.
Value[3]: Spell three.
The values(1-3) are three (or less) different spells, mixed in the potion.
Unused spells should be set to -1.
ITEM_WORN (11)
ITEM_OTHER (12)
ITEM_TRASH (13)
ITEM_TRAP (14)
value[0]: The effect of the trap.
TRAP_EFF_MOVE 1 Movement trigger, must be used with TRAP_EFF_(dir).
TRAP_EFF_OBJECT 2 Trigger on a get or put of this obj, or in its chest.
TRAP_EFF_ROOM 4 Triggers affect all in the room.
TRAP_EFF_NORTH 8 Used with TRAP_EFF_MOVE.
TRAP_EFF_EAST 16 Used with TRAP_EFF_MOVE.
TRAP_EFF_SOUTH 32 Used with TRAP_EFF_MOVE.
TRAP_EFF_WEST 64 Used with TRAP_EFF_MOVE.
TRAP_EFF_UP 128 Used with TRAP_EFF_MOVE.
TRAP_EFF_DOWN 256 Used with TRAP_EFF_MOVE.
value[1]: What type of damage the trap does.
TRAP_DAM_SLEEP -3 Makes player sleep for 12 hours. Save vs spell.
TRAP_DAM_TELEPORT -2 Player is teleported. Save vs petrification.
TRAP_DAM_ENERGY 10 Energy damage.
TRAP_DAM_FIRE 26 Fire damage.
TRAP_DAM_COLD 203 Cold damage.
TRAP_DAM_ACID 206 Acid damage.
TRAP_DAM_BLUNT 207 Blunt damage.
TRAP_DAM_PIERCE 208 Piercing damage.
TRAP_DAM_SLASH 209 Slashing damage.
value[2]: Level of the trap. The higher the level, the larger the chance of
the trap being sprung.
value[3]: Charges on trap.
ITEM_CONTAINER (15)
Value[0]: Maximum weight the container can contain.
Value[1]: Container flags:
CLOSEABLE 1
PICKPROOF 2
CLOSED 4
LOCKED 8
Value[2]: The item-number of the object which can open the object. -1 means
no lockability.
Value[3]: 0
ITEM_NOTE (16)
ITEM_DRINKCON (17)
Value[0]: Max drinks.
Value[1]: Number of drinks left.
Value[2]: The type of liquid in the drink-container, one of:
Type # Drunkness Fullness Thirst
LIQ_WATER 0 0 1 10
LIQ_BEER 1 3 2 5
LIQ_WINE 2 5 2 5
LIQ_ALE 3 2 2 5
LIQ_DARKALE 4 1 2 5
LIQ_WHISKY 5 6 1 4
LIQ_LEMONADE 6 0 1 8
LIQ_FIREBRT 7 10 0 0
LIQ_LOCALSPC 8 3 3 3
LIQ_SLIME 9 0 4 -8
LIQ_MILK 10 0 3 6
LIQ_TEA 11 0 1 6
LIQ_COFFE 12 0 1 6
LIQ_BLOOD 13 0 2 -1
LIQ_SALTWATER 14 0 1 -2
LIQ_COKE 15 0 1 5
Value[3]: If non-zero, the drink is poisoned.
ITEM_KEY (18)
Value[0]: The key-type. This value must match the lock-type of the door.
Value[1]: 0
Value[2]: 0
Value[3]: 0
ITEM_FOOD (19)
Value[0]: The number of hours, that this food will fill the stomach.
Value[1]: 0
Value[2]: 0
Value[3]: If this value is non-zero, the food is poisoned.
ITEM_MONEY (20)
Value[0]: The number of gold coins.
Value[1]: 0
Value[2]: 0
Value[3]: 0
ITEM_PEN (21)
ITEM_BOAT (22)
Spells for items:
(The Y/N are stating whether that spell can be in that item. The MIN_LEV
is the minimum level for that item spell level in the item)
POTION SCROLL WAND STAFF MIN_LEV
TYPE_UNDEFINED -1 Y Y Y Y -
SPELL_RESERVED_DBC 0 N N N N -
SPELL_ARMOR 1 Y Y Y N >0
SPELL_TELEPORT 2 Y Y Y Y >0
SPELL_BLESS 3 Y Y Y N ...
SPELL_BLINDNESS 4 Y Y Y Y
SPELL_BURNING_HANDS 5 N N N N == 5
SPELL_CALL_LIGHTNING 6 Y Y N Y >=12
SPELL_CHARM_PERSON 7 N Y N Y
SPELL_CHILL_TOUCH 8 N N N N == 3
SPELL_CLONE 9 Y Y Y N
SPELL_COLOUR_SPRAY 10 N Y Y N ==11
SPELL_CONTROL_WEATHER 11 N N N N
SPELL_CREATE_FOOD 12 N Y N N
SPELL_CREATE_WATER 13 N N N N
SPELL_CURE_BLIND 14 Y N N Y
SPELL_CURE_CRITIC 15 Y N N Y
SPELL_CURE_LIGHT 16 Y N N Y
SPELL_CURSE 17 Y Y N Y
SPELL_DETECT_EVIL 18 Y N N Y
SPELL_DETECT_INVISIBLE 19 Y N N Y
SPELL_DETECT_MAGIC 20 Y N N Y
SPELL_DETECT_POISON 21 Y Y N N
SPELL_DISPEL_EVIL 22 Y Y Y Y == 10
SPELL_EARTHQUAKE 23 N Y N Y == 7
SPELL_ENCHANT_WEAPON 24 N Y N N
SPELL_ENERGY_DRAIN 25 Y Y Y Y == 13
SPELL_FIREBALL 26 N Y Y N == 15
SPELL_HARM 27 Y N N Y == 15
SPELL_HEAL 28 Y N N Y
SPELL_INVISIBLE 29 Y Y Y Y
SPELL_LIGHTNING_BOLT 30 N Y Y N == 9
SPELL_LOCATE_OBJECT 31 N N N N
SPELL_MAGIC_MISSILE 32 N Y Y N == 1
SPELL_POISON 33 Y N N Y
SPELL_PROTECT_FROM_EVIL 34 Y Y Y Y
SPELL_REMOVE_CURSE 35 Y Y N Y
SPELL_SANCTUARY 36 Y Y N Y
SPELL_SHOCKING_GRASP 37 N N N N == 7
SPELL_SLEEP 38 Y Y Y Y
SPELL_STRENGTH 39 Y Y N Y
SPELL_SUMMON 40 N N N N
SPELL_VENTRILOQUATE 41 N N N N
SPELL_WORD_OF_RECALL 42 Y Y Y Y
SPELL_REMOVE_POISON 43 Y N N Y
SPELL_SENCE_LIFE 44 Y N N Y
SPELL_IDENTIFY 53 N Y N N
<weight>:
The weight of the item in pounds.
<value>:
The value of the item if sold.
<cost/day>:
The cost to store the item in the reception overnight.
<A>:
This option is stating that the object has magical properties if it is
held, worn or used by the player. There can a maximum of two properties
to a object.
<location>:
This is the area of the player that the obj will affect.
APPLY_NONE 0 Do not use.
APPLY_STR 1 Positive aids while negative hinders strength.
APPLY_DEX 2 Positive aids while negative hinders dexterity.
APPLY_INT 3 Positive aids while negative hinders inteligence.
APPLY_WIS 4 Positive aids while negative hinders wisdom.
APPLY_CON 5 Positive aids while negative hinders constitution.
APPLY_SEX 6 Do not use.
APPLY_CLASS 7 Do not use.
APPLY_LEVEL 8 Do not use.
APPLY_AGE 9 Positive will age while negative makes young.
APPLY_CHAR_WEIGHT 10 Positive adds wieght while negative takes away.
APPLY_CHAR_HEIGHT 11 Positive adds hieght while negative takes away.
APPLY_MANA 12 Positive adds mana while negative takes away.
APPLY_HIT 13 Positive adds HP while negative declines HP.
APPLY_MOVE 14 Positive adds move while negative declines move.
APPLY_GOLD 15 Positive adds gold while negative declines gold.
APPLY_EXP 16 Do not use.
APPLY_ARMOR 17 Negative numbers make a lower AC.
APPLY_HITROLL 18 Bonus/penalty to hit the opponent.
APPLY_DAMROLL 19 Bouns/penalty to damage the opponent.
APPLY_SAVING_PARA 20 Positive number helps make saving throw.
APPLY_SAVING_ROD 21 Positive number helps make saving throw.
APPLY_SAVING_PETRI 22 Positive number helps make saving throw.
APPLY_SAVING_BREATH 23 Positive number helps make saving throw.
APPLY_SAVING_SPELL 24 Positive number helps make saving throw.
APPLY_SAVE_ALL 25 Adjustment to all 5 saving throws
APPLY_IMMUNE 26 Resistance to spell or weapon/spell type.
Imm_Fire 1
Imm_Cold 2
Imm_Elec 4
Imm_Energy 8
Imm_Blunt 16
Imm_Pierce 32
Imm_Slash 64
APPLY_SUSC 27 Susceptable to a above weapon/spell type.
APPLY_M_IMMUNE 28 Make totally immune to a above weapon/spell type.
APPLY_SPELL_AFFECT 29 Makes a item use a spell. (above list)
APPLY_WEAPON_SPELL 30 A weapon uses a spell upon each hit. (above list)
APPLY_EAT_SPELL 31 Food contains a spell cast when eaten.
APPLY_BACKSTAB 32 Positive aids skill while negative is a detriment.
APPLY_KICK 33 Positive aids skill while negative is a detriment.
APPLY_SNEAK 34 Positive aids skill while negative is a detriment.
APPLY_HIDE 35 Positive aids skill while negative is a detriment.
APPLY_BASH 36 Positive aids skill while negative is a detriment.
APPLY_PICK 37 Positive aids skill while negative is a detriment.
APPLY_STEAL 38 Positive aids skill while negative is a detriment.
APPLY_TRACK 39 Positive aids skill while negative is a detriment.
APPLY_HITNDAM 40 Bonus/penalty for both to_hit and damage.
<modifier>:
This is a negative or positive number following the <location>.
A
1 2
<E>:
This option means that there will be a extra description.
<keyword_list>~:
The words that are used to activate the extra descriptions buffer.
<extra_description>:
The buffer that will print out if a player looks at one of the keywords.
There must be a tilda on a line by itself following the description.
Example of a mobile:
#3001
punice baker~
Punice the baker~
The baker, Punice, looks at you calmly, wiping his hands on an apron.
~
A fat, nice looking baker. But you can see that he has many scars on his
body.
~
2 0 900 W 2
15 2 2 15d8+170 1d4+4
-1 200 3000 1
8 8 1
Punice says, 'What can I get for you?".
~
~
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-= The zone file description:
Basic template of a zone file:
<#zone_number>
<zone_name>~
<top_room> <reset_time> <reset_mode>
<command> <if_flag> <parm1/command> <max_existing/state> <parm2/room>
S
What this mess means:
<#zone_number>:
This is the virtual_number of the zone. The rooms that are part of this
zone must match the <#zone_number>. This number relates to objects and
mobs as well. The zone will work fastest if all the files that are being
used inside a zone start with the zone number for their <#virtual_numbers>.
<zone_name>~:
This is the name of the zone as it would appear in a table of all zones.
There must be a tilda following the <zone_name>.
<top_room>:
This is the largest <#virtual_number> of the rooms that are being loaded
into this zone.
<reset_time>:
This is the amount of time a zone will remain before it resets all the
commands within its file. This value is a number of minutes, usually
between 30 minutes and a hour. Zones that never reset have no need for
a reset time, therefore this value can be placed at 0.
<reset_mode>:
This field is a command: 0, 1, 2. Any of those three numbers will tell
the zone file how the zone will reset. They mean:
0: Don't reset the zone at all. In this case, the age of the zone is never
updated, and it will never be queued for reset. Thus, the value of the
<reset_time> is effectively ignored.
1: Reset the zone as soon as it is deserted, ie as soon as there are no
players located within the zone.
2: Reset the zone no matter who or what is in it.
<command> <if_flag> <parm1/command> <max_existing/state> <parm2/room>:
These are a series of comands that tell the zone file what to do when it
resets. Each command has different parts so each will be handled
seperately. The commands are:
M: This command loads a mobile into a room.
Format: M <if_flag> <mob_number> <max_existing> <room>
<if_flag>:
This is either 0, which means load the mobile no matter what. Or 1, which
means load the mobile only if the command before it was executed. This
stands true for all the commands in the zone file. 0 means load the
command, 1 means load this command only if the previous was executed.
<mob_number>:
This is the virtual number of the mobile to be loaded.
<max_existing>:
This field is the maximum number of mobs that the game will load in. Note
that if you want more than one mobile in a room you must load each
individualy, with the <max_existing> equal to the total number of that
which will be in the game. This stands true for all the commands in
the zone file. This field must be the total amount that you want to be
loaded into the game.
<room>:
This is the virtual number of the room to which the mob is loaded into.
O: This command loads a object into a room.
Format: O <if_flag> <obj_number> <max_existing> <room>
<obj_number>:
This is the virtual number of the object to be loaded.
<room>:
This is the room that the obj is to be loaded into.
G: Give a obj to a mob. This must be preceeded with the load of a mob.
Format: G <if_flag> <obj_number> <max_existing>
<obj_number>:
This is the virtual number of the obj to be given.
E: Equips a mob with a object.
Format: E <if_flag> <obj_number> <max_existing> <equip_position>
<obj_number>:
The virtual number of the obj to be equipped.
<equip_position>:
This is the position to which the mob will be equiped with the item. Make
sure that the obj is able to be equiped in that position, or you will
have boots loading in as worn on head. Positions are:
WEAR_LIGHT 0
WEAR_FINGER_R 1
WEAR_FINGER_L 2
WEAR_NECK_1 3
WEAR_NECK_2 4
WEAR_BODY 5
WEAR_HEAD 6
WEAR_LEGS 7
WEAR_FEET 8
WEAR_HANDS 9
WEAR_ARMS 10
WEAR_SHIELD 11
WEAR_ABOUT 12
WEAR_WAISTE 13
WEAR_WRIST_R 14
WEAR_WRIST_L 15
WIELD 16
HOLD 17
WIELD_TWOH 18
P: Loads one obj and puts it into another obj.
Format: P <if_flag> <obj_number1> <max_existing> <obj_number2>
<obj_number1>:
This is the obj that will be put into <obj_number2>.
<obj_number2>:
This is the obj that will have <obj_number1> put into it.
D: Sets the state of a door.
Format: D <if_flag> <room> <exit_number> <state>
<room>:
This is the room that holds the door to be manipulated.
<exit_number>:
This is the exit number of the exit. (1-5)
<state>:
This field puts the door in one of the below states.
0: Open.
1: Closed.
2: Closed and locked.
R: Removes a obj from a room.
Format: R <if_flag> <room> <obj_number>
<room>:
The room from which the obj is to be removed.
<obj_number>:
The virtual number of the obj to be removed.
L: Led by, makes a mob the leader of others.
This still needs a bit more work.
H/F: The hate/fear flags. These will make a mob hate/fear something else.
This still needs a bit more work.
Example of part of a zone:
#30
Shylar~
3099 15 2
M 0 3000 1 3001 * buck, the barkeep w/drinks
G 1 3000 1
G 1 3001 1
G 1 3002 1
G 1 3003 6
G 1 3004 1
M 0 3001 1 3010 * punice, the baker w/food
G 1 3010 7
G 1 3011 3
G 1 3012 3
M 0 3004 1 3012 * sass, the leatherworker w/leathers
G 1 3025 100
G 1 3026 100
G 1 3027 100
G 1 3028 100
G 1 3051 100
G 1 3052 100
G 1 3053 100
M 0 3005 1 3008 * butler
M 0 3018 5 3016 * small boys
M 0 3018 5 3002
M 0 3018 5 3002
M 0 3018 5 3015
M 0 3018 5 3005
S
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
-= The design of shops.
Basic template of a shop:
<#virtual_number>~
<obj1_sold>
<obj2_sold>
<obj3_sold>
<obj4_sold>
<obj5_sold>
<selling_profit>
<buying_profit>
<obj1_traded>
<obj2_traded>
<obj3_traded>
<obj4_traded>
<obj5_traded>
<keeper_message1>~
<keeper_message2>~
<keeper_message3>~
<keeper_message4>~
<keeper_message5>~
<keeper_message6>~
<keeper_message7>~
<temper1>
<temper2>
<keeper_mob_number>
0
<room>
<open1>
<close1>
<open2>
<close2>
What this means:
<#virtual_number>~:
This is the number of the shop. This must be followed by a tilda.
<obj1_sold> <obj2_sold> <obj3_sold> <obj4_sold> <obj5_sold>:
These are objs that the shop will sell and never run out of. You must give
the shop keeper the obj in the zone file when loading. These fields refer
to the virtual numbers of the objs. There can only be five items that
the shop will sell and never run out of. Other objs can be given to the
shopkeeper and he will sell just one of them.
<selling_prof>:
The object value is multiplied by this value when sold. This is a
floating point value. Must be >= 1.0
<buying_prof>:
The object value is multiplied by this value when bought. This is a
floating point value. Must be <= 1.0
<obj1_traded> <obj2_traded> <obj3_traded> <obj4_traded> <obj5_traded>:
These are the ITEM_TYPE's that the shop will buy. There can only be five
different types.
<keeper_message1>~:
Message when item to buy is non existing. A %s must be at the beginning
of this field to signify the shopkeeper will be talking. The %s applies
for message fields 1 - 7. %d symbolizes the coin for the item.
<keeper_message2>~:
Message when item trying to sell is non existing.
<keeper_message3>~:
Message when wrong item-type sold.
<keeper_message4>~:
Message when shop can't afford item.
<keeper_message5>~:
Message when player can't afford item.
<keeper_message6>~:
Message when buying an item. The price is %d.
<keeper_message7>~:
Message when selling an item. The price is %d.
<temper1>:
When player can't afford an item.
0: The shopkeeper spits player in the face.
1: The shopkeeper smokes his joint.
<temper2>:
When player is attempting a to kill a shopkeeper.
0: Shopkeeper tells player "Don't ever try that again!" and gets the
first hit!
1: Shopkeeper tells player "I'm to powerfull for you - midget!" and
killing is impossible.
<keeper_mob_number>:
Virtual number of the shopkeeper.
<room>:
The virtual number of the room the mobile must be in for the shop to be
effective.
<open1>:
The time which the shop opens. Use a 0 for this field.
<close1>:
The time which the shop closes. If you use 28 for this field, the shop is
open all the time, never closes.
<open2>:
Use a 0 for this field.
<close2>:
Use a 0 for this field.
Example of a shop:
#0~
3000
3001
3002
3003
3004
1.5
0.5
0
0
0
0
0
%s Don't mix that here pup.~
%s You don't even have that pup.~
%s This is a bar pup, only drinks here.~
%s A might to expensive for me pup.~
%s This is a little out of your league pup.~
%s Thanks for the %d coins pup.~
%s I think %d coins is just a bit much, but i'll do it pup.~
2
0
3000
0
3001
0
28
0
0