The Objects Section
The previous chapters would be enough for you to create an entire game of nudists with no technology and no items of any kind. This of course would be a very boring game of naked people fighting with no weapons. Don’t worry, the VME has a solution to this - you can build objects to dress up the NPCs and to fill the rooms with cluttered junk.
In order to get started building objects you should first be aware of the object fields you can use.
Object Fields and Types
| Field | Type |
|---|---|
| symbolic name | Symbol |
| names | Stringlist |
| title | String |
| descr | String |
| inside_descr | String |
| extra | Structure |
| minv | Integer |
| alignment | Integer |
| flags | Integer |
| weight | Integer |
| capacity | Integer |
| light | Integer |
| manipulate | Integer |
| spell | Integer |
| value | Integer |
| cost | Integer |
| rent | Integer |
| type | Integer |
| open | Integer |
| key | String |
| affect | Affect function |
| dilbegin/dilcopy | Function pointer |
| end | Symbol |
Many of the same fields you found in rooms and NPCs can also be found in objects. The fields do not always have exactly the same use when coding rooms, NPCs, and objects but they are normally set in the same manner. It is very important that you read and understand the differences of each field as they pertain to rooms, objects, and/or NPCs.
Description of Object Fields
symbolic name
The rules of symbols have been explained in the Unit Building Blocks chapter, if you didn’t read them yet you may want to review. The important thing to realize with the object symbol is it is always good practice to give the object a symbol that resembles the title and description so administrators and builders can use the load and wstat commands to easily locate, examine, and load the object in question.
title
The object title is what is shown if the object is being picked up, dropped, given to someone, when you do the inventory command, or being used in combat. There should be no punctuation in the object title because of how it is used in the VME server. If you add punctuation or forget to capitalize something that the VMC thinks you should, it will give you a warning when you compile.
title "a big rock"
title "the flame tongue"
title "a lap top"
title "a garbage bag"
title "an oval hover car"
descr
The description field is what the player sees when walking into the room or when looking with no arguments. It is good practice to make this no longer than one line not counting the ‘descr’ tag.
descr
"a green bloody sword is laying here."
descr
"A massive wooden round table sits here."
descr
"a funny looking hammer is laying here."
names
The object names are as important as the NPC names. They are what you act on when picking the object up, dropping it, throwing it - just about anything you do to objects uses these name fields. On drink containers you add the liquid name at the end, so people can drink the liquid. You always need to make sure you put every possible name that the player may use to examine or take your item. The rule of thumb is if it is in the title or description it should be in the names list. Conversely, if it is not in the title or description it shouldn’t be in the names list because the players will not use it if they don’t know about it.
title "a big rock"
descr "a big rock is here blocking the road."
names {"big rock","rock"}
title "an old twisted staff"
descr "An old twisted staff has been discarded here."
names {"old twisted staff","twisted staff","old staff","staff"}
inside_descr
The inside description is what a player sees if it is inside the object. This is used for things like coffins or boxes or boats that a player can climb inside. The inside description is defined the same way the normal description is but you can make it as many lines as you want like you would with a room description.
inside_descr
"You are inside a black coffin with a red velvet padding - scary!"
inside_descr
"You are inside the pink time machine. A small control panel is on the
floor and seems to be operated by stepping on it."
extra
The extras on the object, like the NPC, can be used to do many things. It can be used to store information for DIL programs or it can be used to show a part of the object like the room extras show a part of the room. They can even be used to create new acts when a person picks the item up, drops, or enters it. There is also a special extra that is the object’s description when you look at it with the look <object> command.
If you use an extra with no names list it will become the object’s description when you look at any of the names on it:
extra {}
"It's just a rock nothing special about it."
extra {}
"The ice cube is about 40 meters perfectly cubed. It seems to be
melting slightly but waiting for it to finish would be sort of like
waiting for the ice age to end."
You can also use extras to show parts of the object:
extra {"crack"}
"There is a big crack in the side of the ice cube. Maybe if you mess
with the crack you will be able to open it or something."
extra {"bed post","post"}
"It's a big gold bed post don't you wish you could get this sucker off it
would make you a rich adventurer indeed."
Object Special Action Extras
| Extra | Description |
|---|---|
$wear_s | A message shown to activator when wearing (+wield/grab/hold) an item |
$wear_o | A message shown to others when wearing an item |
$rem_s | A message shown to activator when removing worn stuff |
$rem_o | A message shown to others when removing an item |
$get_s | A message shown to activator when getting an item |
$get_o | A message shown to others when getting an item |
$drop_s | A message shown to activator when dropping an item |
$drop_o | A message shown to others when dropping an object |
$enter_s | A message shown to activator when entering an item |
$enter_o | A message shown to others when entering an item |
$exit_s | A message shown to activator when leaving an item |
$exit_o | A message shown to others when leaving an item |
In the following example of an ice cube, $1n is the activator and $2n is the unit in question:
extra {"$get_s"}
"You pick up the $2N, it is very cold and begins to melt in your hands."
extra {"$get_o"}
"$1n picks up the $2N, you notice that a drop of water hits the ground as
it begins to melt in $1s hand."
manipulate
This field defines the things that can be done to the object. For example a piece of armour should be able to be taken and worn, while a fountain should be able to be entered but not taken unless it’s some magical portable fountain.
Take and Enter Flags:
| Manipulate | Description |
|---|---|
MANIPULATE_TAKE | Set this flag if the unit can be taken (picked up/moved about) |
MANIPULATE_ENTER | Set this flag if it is possible to enter a unit (e.g., a coffin) |
Wear Position Flags:
| Flag |
|---|
MANIPULATE_WEAR_FINGER |
MANIPULATE_WEAR_NECK |
MANIPULATE_WEAR_BODY |
MANIPULATE_WEAR_HEAD |
MANIPULATE_WEAR_LEGS |
MANIPULATE_WEAR_FEET |
MANIPULATE_WEAR_HANDS |
MANIPULATE_WEAR_ARMS |
MANIPULATE_WEAR_SHIELD |
MANIPULATE_WEAR_ABOUT |
MANIPULATE_WEAR_WAIST |
MANIPULATE_WEAR_WRIST |
MANIPULATE_WIELD |
MANIPULATE_HOLD |
MANIPULATE_WEAR_EAR |
MANIPULATE_WEAR_BACK |
MANIPULATE_WEAR_CHEST |
MANIPULATE_WEAR_ANKLE |
MANIPULATE_WEAR_FACE |
MANIPULATE_WEAR_SHOULDERS |
MANIPULATE_WEAR_HALO (not for general use) |
MANIPULATE_WEAR_AURA (not for general use) |
MANIPULATE_WEAR_BONUS (not for general use) |
Currently you can only set one of the worn position flags on an item at a time. You can set both enter and take on an item with a position or just one or the other.
// An earring
manipulate {MANIPULATE_TAKE, MANIPULATE_WEAR_EAR}
// A backpack
manipulate {MANIPULATE_TAKE, MANIPULATE_ENTER, MANIPULATE_WEAR_BACK}
// Strange but legal - an earring pack
manipulate {MANIPULATE_TAKE, MANIPULATE_ENTER, MANIPULATE_WEAR_EAR}
flags
This field on an object is used to set special attributes in order to make the object able to be buried or not, no-teleportable, and many others.
| Flag | Description |
|---|---|
UNIT_FL_PRIVATE | Currently has no effect on an object |
UNIT_FL_INVISIBLE | Makes unit invisible |
UNIT_FL_NO_BURY | Makes it so you can create objects that can not be buried |
UNIT_FL_BURIED | Makes unit buried when loaded |
UNIT_FL_NO_TELEPORT | Makes it so you can not teleport into this object (containers only) |
UNIT_FL_NO_MOB | Currently has no effect on an object |
UNIT_FL_NO_WEATHER | Currently has no effect on an object |
UNIT_FL_INDOORS | Currently has no effect on an object |
UNIT_FL_TRANS | Makes unit transparent - you can see NPCs inside it |
UNIT_FL_NOSAVE | Makes it so a PC can’t save with this unit |
UNIT_FL_SACRED | Currently has no effect on an object |
UNIT_FL_MAGIC | This flag is used by spells to tell if the object is magic |
manipulate {MANIPULATE_TAKE}
flags {UNIT_FL_NOSAVE}
type
This field is what you use to set the object’s type. The type field is used when spells are cast or commands are executed on the object.
| Type | Description |
|---|---|
ITEM_LIGHT | Can be lighted and extinguished |
ITEM_SCROLL | Can be read as a magical scroll |
ITEM_WAND | Can be used with the use command |
ITEM_STAFF | Can be used with the tap command as a magical staff |
ITEM_WEAPON | Used as weapons |
ITEM_FIREWEAPON | Not currently supported |
ITEM_MISSILE | Not currently supported |
ITEM_TREASURE | Of great value to sell but nothing else |
ITEM_ARMOR | Can be worn or used as armour |
ITEM_POTION | Can be used with the quaff command |
ITEM_WORN | Can be worn but not normally used for armour - more for clothing |
ITEM_OTHER | For items that don’t fit any other type |
ITEM_TRASH | Usually junk or broken equipment |
ITEM_TRAP | Not currently supported |
ITEM_CONTAINER | Can be used as containers |
ITEM_NOTE | Can be used to write on like paper or slates |
ITEM_DRINKCON | Can carry liquids |
ITEM_KEY | Can be used as a key |
ITEM_FOOD | Can be eaten |
ITEM_MONEY | Can be spent as currency |
ITEM_PEN | No longer supported |
ITEM_BOAT | Can be used as a water craft |
ITEM_SPELL | Not currently supported |
ITEM_BOOK | Not currently supported |
ITEM_SHIELD | Can be used as a shield |
ITEM_SKIN | Not currently supported |
ITEM_BOARD | Used for public communications |
ITEM_ALC_TOOL | Tool used for alchemy crafting |
ITEM_ALC_REAGENT | Reagent used in alchemy recipes |
Unlike flags and manipulate fields, only one item type can be set on an object at a time:
type ITEM_BOARD
weight
The weight is the weight of the object in pounds.
// 80 lbs.
weight 80
capacity
This field sets the size of a container object. If the object does not have the manipulate enter flag set then this field doesn’t have to be set. The capacity is currently by pounds since the weight of objects is set in pounds.
capacity 600
key
The key field sets the key name of the key that will open the item. This field should be set to the symbolic name of the key that opens the item it is on. If the item is in the same zone as the key then you do not need to put the zone extension on the key name.
// If object and key are in same zone
key brasskey
// If key and object are in same zone (explicit)
key brasskey@zonename
// If key and object are not in same zone
key brasskey@otherzonename
cost
This is the field you set to add a cost to your object. If you leave this field out it will default to no cost and will not be able to be sold at stores. The system for setting cost on an item is the same as setting money on a NPC.
IRON_PIECE
COPPER_PIECE
SILVER_PIECE
GOLD_PIECE
PLATINUM_PIECE
cost 5*GOLD_PIECE
// Multiple coin types
cost 5*GOLD_PIECE, 20*IRON_PIECE
rent
This field tells how much it costs you to keep an item while you’re offline. The rent is not always taken if the VME server is set up to not take any rent.
rent 5*GOLD_PIECE, 20*IRON_PIECE
minv
This field is the administrator invisible level of the object it is set on. This means that if you set the ‘minv’ to 200 it will make it so the object can not be seen by anyone below the administrator level of 200.
minv 239
alignment
The object alignment is not currently used. It is an integer value that can be set on an object to be used with any DIL functions. The value is set from -1000 to +1000.
alignment -250
open
The open field is used if you want to give your object the ability to be opened, closed, and/or locked. If you add the open flags you need to also add a key field.
| Flag | Description |
|---|---|
EX_OPEN_CLOSE | Set this if you can open and close this object |
EX_CLOSED | Set this if you want the object to be closed when loaded |
EX_LOCKED | Set this if you want the object to be locked when loaded |
EX_PICKPROOF | Renders the ‘pick’ skill and ‘unlock’ spell unusable |
EX_INSIDE_OPEN | Enables opening and locking from inside (containers only) |
Note: If you do not specify a key, you can only unlock this door with the ‘pick’ skill, ‘unlock’ spell or from DIL with
UnSet().
// Simple open/close
open {EX_OPEN_CLOSE}
// Locked and closed with a key
open {EX_OPEN_CLOSE, EX_CLOSED, EX_LOCKED}
key brass_key
spell
The spell field is the power of the object’s defense against spells. You can set it from zero all the way to 200% which means a person who has 100% in a spell will fail almost all the time.
// Spell resistance at 150%
spell 150
value
The object values are used for just about any special item from armour to drink containers. They should not be set directly unless you have a reason to do so. There are five values that can be set to any integer:
value[0] 5
value[1] 16
value[2] -2
value[3] -10
value[4] 12
affect
The affect field should not be set directly, instead you should use the macros defined in the Object Macros section.
dilbegin or dilcopy
DIL functions are what give VME servers the edge over all other MUDs. There are several object functions that come standard with the VME:
- Guild restrict
- Anti-guild restrict
- Quest restrict
- Quests restrict
- Alignment restrict
- Level restrict
- Virtual level restrict
- Race restrict
- Ability restrict
- Skill restrict
- Spell restrict
- Weapon restrict
- Gender restrict
- Player restrict
- Message board
- Tuborg (drink bonus)
Object Macros
To make the creation of some objects easier we have provided a set of macros. The macros range from general armour and weapons macros to macros that help you create special affects on all items.
Weapon and Armour Craftsmanship
The craftsmanship is a way of expressing the overall quality of a piece of armour or weapon. The quality on the VME servers currently means the amount of hit points given to an item. The craftsmanship ranges from 25 to -25 and the hit points range from 125 to 6000.
| Craftsmanship | Hit Points |
|---|---|
| 25 | 6000 |
| 20 | 5000 |
| 15 | 4000 |
| 10 | 3000 |
| 5 | 2000 |
| 0 | 1000 |
| -5 | 825 |
| -10 | 650 |
| -15 | 475 |
| -20 | 300 |
| -25 | 125 |
It is suggested the higher the craftsmanship the higher the cost of the weapon should be.
Magical Modifier
The magical modifier can be said to modify damage done to an opponent. In combat the damage is calculated and then the magical bonuses on armour or weapons is added in. The magical modifier ranges from 25 to -25.
For example: If you were about to give 25 hit points of damage to a person and your sword has a plus 25% in magical bonus, the bonus is added to your damage to make it a total of 50 hit points of damage. If the player you are hitting has a +25% magical bonus on his armour, that will reduce the damage back to its 25 hit points originally done.
Setting Weapon Fields
To create a weapon you only need three pieces of information: the weapon’s craftsmanship, magical modifier, and the weapon type.
#define WEAPON_DEF(weapon_category, craftsmanship, magic_bonus)
#define WEAPONSZ_DEF(weapon_category, craftsmanship, magic_bonus, hgt)
The first macro uses the second macro - the only difference is the first one sets the height field.
// A flail of non-pure iron, a little better than average craftsmanship
WEAPON_DEF(WPN_FLAIL, +2, 0)
// A rusty mean sacrificial dagger by a skilled smithy, magically enchanted
flags {UNIT_FL_MAGIC}
WEAPON_DEF(WPN_DAGGER, 0, +5)
// An old shaky wooden stick made for a 400 cm tall person
WEAPONSZ_DEF(WPN_CLUB, -5, 0, 400)
// A wooden bastard sword (poor craftsmanship due to material)
WEAPON_DEF(WPN_BROAD_SWORD, -15, 0)
Setting Armour Fields
When designing armour there are five main armour types:
ARM_CLOTHESARM_LEATHERARM_HLEATHERARM_CHAINARM_PLATE
The armour type defines how different weapons and spells are defended against.
#define ARMOUR_DEF(atype, craftsmanship, magic_bonus)
#define ARMOURSZ_DEF(atype, craftsmanship, magic_bonus, hgt)
Example:
flags {UNIT_FL_MAGIC}
ARMOUR_DEF(ARM_PLATE, +15, +5)
There are also convenience macros that combine the type and ARMOUR_DEF:
ARMOUR_CLOTHES(craftsmanship, magic_bonus)
ARMOUR_LEATHER(craftsmanship, magic_bonus)
ARMOUR_HRD_LEATHER(craftsmanship, magic_bonus)
ARMOUR_CHAIN(craftsmanship, magic_bonus)
ARMOUR_PLATE(craftsmanship, magic_bonus)
Example using the convenience macro:
flags {UNIT_FL_MAGIC}
ARMOUR_PLATE(+15, +5)
Setting Shield Fields
There are three shield types categorized by size:
SHIELD_SMALLSHIELD_MEDIUMSHIELD_LARGE
The larger the shield the better chance of blocking an attack.
#define SHIELD_DEF(shield_type, craftsmanship, magic_bonus)
#define SHIELDSZ_DEF(shield_type, craftsmanship, magic_bonus, hgt)
Example:
flags {UNIT_FL_MAGIC}
SHIELD_DEF(SHIELD_SMALL, 0, +5)
Setting Material Types
Currently material types are not used greatly in spells or skills but in the future we hope to add more functionality.
MATERIAL_WOOD("a hard oak")
MATERIAL_METAL("fine steel")
MATERIAL_STONE("granite")
MATERIAL_CLOTH("silk")
MATERIAL_LEATHER("cow hide")
MATERIAL_SKIN("dragon skin")
MATERIAL_ORGANIC("soft plastic")
MATERIAL_GLASS("crystal")
MATERIAL_FIRE("flames")
MATERIAL_WATER("liquid")
MATERIAL_EARTH("clay")
MATERIAL_MAGIC("pure energy")
Drink Container Macros
There are pre-defined macros for common drinks in liquid.h:
LIQ_WATER(WEIGHT, CAPACITY, INSIDE, POISON)
LIQ_BEER(WEIGHT, CAPACITY, INSIDE, POISON)
LIQ_WINE(WEIGHT, CAPACITY, INSIDE, POISON)
LIQ_COFFEE(WEIGHT, CAPACITY, INSIDE, POISON)
Arguments:
- weight: How heavy the container is when empty (in pounds)
- capacity: Maximum liquid weight the container can hold. Set to -1 for infinite
- inside: How much liquid the container starts with (should not exceed capacity)
- poison: The amount of poison in your drink (0-10, with 10 being extreme)
// A simple small glass of water
LIQ_WATER(1, 2, 2, 0)
The player’s thirst ranges from -24 (dying of thirst) to +24 (full). A barrel with capacity 24 when full can take a person from zero thirst to full.
For exotic drinks, use the full macro:
#define LIQ_DEF(color, wgt, max_cap, inside, thirst, full, drunk, poison)
Arguments:
- color: Color of the liquid shown when you look at it
- wgt: Weight of the empty container
- max_cap: Maximum capacity
- inside: Starting amount of liquid
- thirst: Thirst quenching power per pound (0-10, water is 10)
- full: Fullness added per pound (0-10, like milk around 5)
- drunk: Drunkenness added per quantity (0-10, vodka is 10)
- poison: Poison factor (0-10+)
// Silicone oil for aliens
LIQ_DEF("blue", 5, 10, 10, 5, 1, 0, 0)
// Creating your own easy macro
#define LIQ_SILICONE(WEIGHT, CAPACITY, INSIDE, POISON) \
LIQ_DEF("blue", WEIGHT, CAPACITY, INSIDE, 5, 1, 0, POISON)
The Food Macros
The food macro is simpler than drink containers:
#define FOOD_DEF(food_amount, poison_factor)
// Fill a player entirely in one bite
FOOD_DEF(50, 0)
It is recommended to set the value between 1 and 10 so players have to eat a bit as if they were eating in the real world.
Light Object Macro
#define LIGHT_DEF(hours, how_bright)
- hours: Duration in mud hours (about 5 minutes per mud hour)
- how_bright: 1=small torch, 2=large torch, 3=lantern
Container Macro
#define CONTAINER_DEF(max_capacity)
Remember that capacity is in weight, not size. If someone’s corpse weighs 230 pounds, you need a container with capacity of 230 to fit it.
// A coffin that can carry any normal human corpse
CONTAINER_DEF(300)
Money Macro
#define MONEY(coin_type, coins)
Coin types: IRON_PIECE, COPPER_PIECE, SILVER_PIECE, GOLD_PIECE, PLATINUM_PIECE
platinum_piece
MONEY(PLATINUM_PIECE, 0)
end
platinum_pile
MONEY(PLATINUM_PIECE, 80)
extra {}
"Holy cow that's a stash."
end
Cursed Objects Macro
CURSED_OBJECT
When you set this macro on an object it adds an affect that can only be removed by the ‘set’ command or by the ‘remove curse spell’.
Potion, Wand, and Staff Macros
#define POTION_DEF(power, spell1, spell2, spell3)
#define SCROLL_DEF(power, spell1, spell2, spell3)
#define WAND_DEF(power, charge, spell1, spell2)
#define STAFF_DEF(power, charge, spell1, spell2)
- power: The spell power (1-200)
- charge: Number of charges (wands/staffs only)
- spell#: The spells to cast (set unused to 0)
Magical Transfer Macros
CHAR_FLAG_TRANSFER(_MFLAGS)
SKILL_TRANSFER(skill, amount)
WEAPON_TRANSFER(weapon, amount)
SPELL_TRANSFER(spell, amount)
STR_TRANSFER(amount)
DEX_TRANSFER(amount)
CON_TRANSFER(amount)
CHA_TRANSFER(amount)
BRA_TRANSFER(amount)
MAG_TRANSFER(amount)
DIV_TRANSFER(amount)
HIT_TRANSFER(amount)
SPEED_TRANSFER(newspeed)
SLOW_TRANSFER(amount)
The skill, weapons, spells, and ability macros transfer the amount of percentage you put. If you give a negative percentage it will take that much away. The speed transfer adds or subtracts speed (valid range 4-200, with 12 being default and lower values being faster).
Building Your First Object
Now that you have learned how to make rooms and NPCs it’s time to make the objects for your little world. As always we will start with something I like - dragons. So the first object we will make is a dragon head.
The first part of all object definitions is the symbolic name. It is good to always pick a name that will match the name of the object so it will be easy to load. When you use the command wstat zone dragon objects you will see:
List of objects in zone Dragon:
claw info_board dragon_head
versus unclear names like:
List of objects in zone Dragon:
obj1 a_obj2 o3
Let’s get started with our dragon head:
dragon_head
title "a gold dragon head"
descr "A large golden dragon head is laying here looking sad."
names {"large golden dragon head","large gold dragon head",
"golden dragon head","large dragon head","gold dragon head",
"dragon head","large head", "sad head","head"}
extra {}
"The head is large and beautiful, at least as beautiful as a dead
dragon head can be. There is an extreme look of sorrow on the dragons
face and it seems to be for much more than its own death."
extra {"gold dragon head face","dragon head face","head face","face"}
"Looking into the dragons face your eyes are drawn to the eyes of the
dead dragon. Could there be something there?"
extra {"eyes","eye"}
"A world of blue skies and no storms is visible through the eyes and it
seems to be moving as if you were watching the world from space."
manipulate {MANIPULATE_TAKE, MANIPULATE_HOLD}
// 20 feet (1 inch = 2.54 cm)
height 33
// 566 KG (1 lb. = .45359 kg)
weight 50
extra {"$get_s"}
"You suddenly feel very sad for a world that you don't even know."
extra {"$get_o"}
"A strange look of sadness crosses $1ns face."
extra {"$drop_s"}
"You feel much happier but you remember a feeling of great sorrow."
extra {"$drop_o"}
"$1n seems to cheer up a bit."
end
Compiling and Debugging Your First Object
As we have previously mentioned, it is always a good idea to build one or two things and then compile to make finding errors easy. The following is what the zone looks like when it has only one object:
#include <composed.h>
%zone dragonst
lifespan 20
reset RESET_ANYHOW
creators {"whistler"}
notes
"This is the dragon station I shortened it to dragonst for ease in
loading. If you have any questions email me at admin@example.com"
help
"Not sure what could help you now. You are stuck on one of the
weirdest space stations you have ever seen and you smell burning
sulfur."
%objects
dragon_head
title "a gold dragon head"
descr "A large golden dragon head is laying here looking sad."
names {"large golden dragon head","large gold dragon head",
"golden dragon head","large dragon head","gold dragon head",
"dragon head","large head", "sad head","head"}
// ... rest of object definition ...
end
%end
The command to compile the zone is VMC debug_obj.zon. Here are some common errors you might encounter:
Missing ‘s’ on creators:
debug_obj.zon: 5: parse error
Token: '{'
The compiler is pointing at ‘{’ but the real problem is creator instead of creators.
Missing quote:
debug_obj.zon: 25: parse error
Token: 'golden'
This usually means a missing quote somewhere before line 25.
Missing braces on manipulate:
debug_obj.zon: 42: parse error
Token: ','
The manipulate field needs {} around its values.
When you see VMC Done, you have successfully compiled the zone.
DIL Functions for Objects
The DIL language is what a builder can use to make special functions on rooms, NPCs, objects, PCs, and much more. The following sections contain the object functions released with the VME server.
Restriction Functions
The restrict functions were designed to allow only certain groups of players to wear some items. They can be used alone or together to make a greater restricted item.
All restrict functions have this format:
dilcopy <function name> (arg1, <max damage>, <percentage>, <Optional DIL>);
max damage and percentage: These set the damage done when the wrong player wears an object.
- Both set to 0: No damage done
- Second arg set to number, third to 0: Exact damage (can kill)
- Second arg to 0, third to number: Percentage damage
- Both set: Percentage damage up to max amount
Optional DIL: Pass in a custom DIL for custom messages, or "" for default.
Guild Restrict
Restricts an object to players in certain guild(s).
dilbegin guild_restrict
(guilds:stringlist, damage:integer, percent:integer, action:string);
// Example: Only Paladins and Sorcerers
dilcopy guild_restrict@function ({"Midgaard Paladin",
"Midgaard Sorcerer"}, 0, 25, "");
Anti-guild Restrict
Restricts an object from players in certain guild(s).
dilbegin anti_guild
(guilds:stringlist, damage:integer, percent:integer, action:string);
// Example: Anyone except Paladins and Sorcerers
dilcopy anti_guild@function ({"Midgaard Paladin",
"Midgaard Sorcerer"}, 0, 25, "");
Quest Restrict
Restricts an object to players who have done a certain quest.
dilbegin quest_restrict
(qst:string, damage:integer, percent:integer, action:string);
dilcopy quest_restrict@function ("Eagles quest complete", 0, 25, "");
Quests Restrict
Restricts an object to players who have done ALL listed quests.
dilbegin quests_restrict
(qsts:stringlist, damage:integer, percent:integer, action:string);
dilcopy quests_restrict@function ({"Eagles quest complete",
"Feather fall quest complete"}, 0, 25, "");
Alignment Restrict
Restricts an object to players within a certain alignment range.
dilbegin ali_restrict
(max:integer, min:integer, damage:integer, percent:integer, action:string);
// Only good players (350 to 1000)
dilcopy ali_restrict@function (1000, 350, 0, 25, "");
Level Restrict
Restricts to players at or above a certain level (1-50 for mortals).
dilbegin level_restrict
(lvl:integer, damage:integer, percent:integer, action:string);
// Administrators only
dilcopy level_restrict@function (51, 0, 25, "");
Virtual Level Restrict
Restricts to players at or above a certain virtual level (1 to infinity).
dilbegin vlevel_restrict
(lvl:integer, damage:integer, percent:integer, action:string);
dilcopy vlevel_restrict@function (5000, 0, 25, "");
Race Restrict
Restricts from players of a certain race.
dilbegin race_restrict
(rc:integer, damage:integer, percent:integer, action:string);
// Humans cannot use
dilcopy race_restrict@function (RACE_HUMAN, 0, 25, "");
Gender Restrict
Restricts to players of a certain gender.
#define SEX_NEUTRAL 0
#define SEX_MALE 1
#define SEX_FEMALE 2
dilbegin sex_restrict
(sx:integer, damage:integer, percent:integer, action:string);
dilcopy sex_restrict@function (SEX_FEMALE, 0, 25, "");
Player Restrict
Restricts to a specific player name.
dilbegin ply_restrict
(pname:string, damage:integer, percent:integer, action:string);
dilcopy ply_restrict@function ("Whistler", 0, 25, "");
Ability Restrict
Restricts to players with minimum ability.
dilbegin abi_restrict
(abi:integer, min_abi:integer, damage:integer, percent:integer, action:string);
// Requires 50% strength
dilcopy abi_restrict@function (ABIL_STR, 50, 0, 25, "");
// Multiple abilities
dilcopy abi_restrict@function (ABIL_DIV, 50, 0, 25, "");
dilcopy abi_restrict@function (ABIL_BRA, 30, 0, 25, "");
Ability types: ABIL_MAG, ABIL_DIV, ABIL_STR, ABIL_DEX, ABIL_CON, ABIL_CHA, ABIL_BRA, ABIL_HP
Skill, Spell, and Weapon Restrict
Similar to ability restrict:
dilcopy ski_restrict@function (SKI_TURN_UNDEAD, 50, 0, 25, "");
dilcopy sp_restrict@function (SPL_LOCK, 50, 0, 25, "");
dilcopy weap_restrict@function (WPN_BATTLE_AXE, 50, 0, 25, "");
Tuborg Function
The VME has a tuborg function that makes a drink give endurance and health when drunk.
dilbegin tuborg (s:string);
dilcopy tuborg@function ("");
The argument is not used yet - just pass an empty string.
Message Board
Every game needs a way for administrators and players to exchange ideas.
dilbegin board
(idxfile:string, l_res:string, r_res:string, p_res:string, bmax:integer);
Arguments:
- idxfile: Board index filename (unique identifier for this board)
- l_res: DIL for look restrictions (
""for none,"admin_res@boards"for admin only) - r_res: DIL for remove restrictions (
""for none,"rem_res@boards"for admin only) - p_res: DIL for post restrictions (
""for none) - bmax: Maximum number of posts
// Free for all board
dilcopy board@boards("citizen", "", "", "", 50);
// Only admins can remove posts
dilcopy board@boards("citizen", "", "rem_res@boards", "", 100);
More Complex Objects
Making a Communication Board
info_board
title "a merchant information board"
descr "A merchant information Board is mounted on a wall here."
names {"merchant information board","information board","merchant board","board"}
extra {}
"A large flashy black steel board."
MATERIAL_METAL("A very fine quality black steel")
type ITEM_BOARD
dilcopy board@boards("info", "", "rem_res@boards", "", 100);
end
Making a Container
wpn_locker
title "a weapons locker"
names {"weapons locker","weapon locker","locker"}
descr "a small weapons locker hangs on the wall here."
extra {}
"It is an ordinary weapons locker that looks like it holds any illegal
weapons that are taken on the station."
MATERIAL_METAL("A very fine quality steel")
manipulate {MANIPULATE_ENTER}
CONTAINER_DEF(500)
open {EX_OPEN_CLOSE, EX_CLOSED, EX_LOCKED}
key black_key
end
Notice we didn’t make the item MANIPULATE_TAKE because we don’t want people to walk off with our weapons locker.
Creating Drinks
The drink container has special rules:
- title and descr: Should NOT have the liquid name (it might change if refilled)
- names: MUST have the drink name as the LAST name (it gets removed/added when emptied/refilled)
liq_ration
names {"red bag", "bag", "wine"}
title "a red bag"
descr "A red bag has been gently placed here."
extra {}
"A small label reads Tassel Grove's finest. Year 321"
MATERIAL_ORGANIC("a soft plastic")
manipulate {MANIPULATE_TAKE}
LIQ_WINE(1, 2, 2, 0)
cost 2 IRON_PIECE
extra {"$identify"}
"It's the special wine from Tassel grove a small halfling village on the
planet Valhalla. It seems like a great vintage wine."
end
Creating Food
Food is very simple - just a regular item with the food macro:
beef_stick
title "a tough leathery stick"
descr "A tough leathery looking stick is laying here."
names {"tough leathery stick","tough leather stick","leathery stick",
"leather stick","tough stick","stick"}
extra {}
"This has the word BEEF burnt into it."
manipulate {MANIPULATE_TAKE}
FOOD_DEF(5, 0)
weight 1
cost 1 COPPER_PIECE
MATERIAL_ORGANIC("tough beef")
end
Making a Weapon
w_stiletto
title "a stiletto"
names {"deadly looking stiletto","deadly stiletto","stiletto", "dagger"}
descr "A deadly looking stiletto has been left here."
extra {}
"This looks like a thieves dream come true."
MATERIAL_METAL("A very fine quality steel")
manipulate {MANIPULATE_TAKE, MANIPULATE_WIELD}
WEAPON_DEF(WPN_DAGGER, 1, 2)
SKILL_TRANSFER(SKI_BACKSTAB, 2)
dilcopy abi_restrict@function (ABIL_DEX, 10, 0, 25, "");
weight 2
cost 2 GOLD_PIECE
rent 1 COPPER_PIECE
extra {"$identify"}
"The stiletto looks magical in nature and seems really sharp. You can
tell if you wield it you would be able to backstab someone really easy."
extra {"$improved identify"}
"The stiletto gives you a magical bonus of +1 and has a quality of +2.
It also raises your back stabbing skill by 2%. You have to have at
least 10% in dex before you can wield this magical weapon."
end
Making Armour
Only seven wear positions count as armour:
| Position | Define |
|---|---|
| head | MANIPULATE_WEAR_HEAD |
| hands | MANIPULATE_WEAR_HANDS |
| arms | MANIPULATE_WEAR_ARMS |
| body | MANIPULATE_WEAR_BODY |
| legs | MANIPULATE_WEAR_LEGS |
| feet | MANIPULATE_WEAR_FEET |
| cloak | MANIPULATE_WEAR_ABOUT |
Note:
MANIPULATE_WEAR_SHIELDalso works as armour but uses a different define.
pol_plate
names {"polished breast plate","polished plate","breast plate","plate"}
title "a polished breast plate"
descr "A polished breast plate has been left here."
extra {}
"This is one shiny plate it seems to be made out of one perfect piece of
metal. There doesn't even seem to be any markings of ownership."
MATERIAL_METAL("A high luster silver colored metal")
manipulate {MANIPULATE_TAKE, MANIPULATE_WEAR_BODY}
ARMOUR_DEF(ARM_PLATE, 5, 9)
dilcopy abi_restrict@function (ABIL_STR, 40, 0, 25, "");
cost 2 GOLD_PIECE
rent 3 COPPER_PIECE
weight 25
extra {"$identify"}
"This is a high quality plate with a magical feeling."
extra {"$improved identify"}
"The plate has a magical bonus to your defence of a +5 and a quality of
+9. You need 40% in strength to be able to wear it."
end
Making Non-Armour Worn Objects
Non-armour positions:
| Position | Define |
|---|---|
| ear | MANIPULATE_WEAR_EAR |
| neck | MANIPULATE_WEAR_NECK |
| wrist | MANIPULATE_WEAR_WRIST |
| finger | MANIPULATE_WEAR_FINGER |
| chest | MANIPULATE_WEAR_CHEST |
| back | MANIPULATE_WEAR_BACK |
| waist | MANIPULATE_WEAR_WAIST |
| ankle | MANIPULATE_WEAR_ANKLE |
Note: Positions like ear, neck, wrist, and ankle can have two on a player. Any bonuses you give can be doubled if the player gets two of them.
maskwa
names {"maskwa platinum ring", "platinum ring","maskwa ring","maskwa","ring"}
title "a Maskwa ring"
descr "A Maskwa platinum ring is laying here."
MATERIAL_METAL("Platinum, and other precious metals")
extra {}
"The ring has a large bear head. Could this be the legendary head of
Maskwa? Any thing formed with its head on it is said to strengthen the
wearer."
type ITEM_WORN
manipulate {MANIPULATE_TAKE, MANIPULATE_HOLD, MANIPULATE_WEAR_FINGER}
cost 100 COPPER_PIECE
rent 50 IRON_PIECE
weight 1
STR_TRANSFER(+1)
end
Note: The item type for non-armour worn items is
ITEM_WORN.
Dragon Station with Rooms, NPCs, and Objects
Now we will add the objects we have built to the zone from the previous chapter. This is still not complete while it does compile and you can log into your zone, you still have to load your NPCs and objects but they do not load themselves and they are not dressed with their armour. This will be taken care of in The Reset Section and you will finally have a finished zone. The following is the source file so far.
#include <composed.h>
%zone dragonst
lifespan 20
reset RESET_ANYHOW
creators {"whistler"}
notes
"This is the dragon station I shortened it to dragonst for ease in
loading. If you have any questions email me at admin@example.com"
help
"Not sure what could help you now. You are stuck on one of the
weirdest space stations you have ever seen and you smell burning
sulfur."
%rooms
chamber
title "The middle chamber of the station"
descr
"This chamber seems to have the entire station rotating around it. It is
unbelievably large the ceiling seems to be a good 200 meters high and
the room is perfectly cubic. Small human size ornate chairs with dragon
designs scrawled on the arms and back are arranged in a triangle like
setting with one large chair at the front. This must be where all
station meetings are held. Large pictures cover the walls depicting
dragons in all kinds of situations. Large passages lead off to the west
and the east."
extra {"chair","chairs"}
"The chairs are made of some metal you don't recognize and every inch is covered
with some kind of dragon."
extra {"dragon picture","picture"}
"Thousands of dragons dot the skies of this rather life like picture. In the
center you see something move. It looks to be a little green dragon."
extra {"green dragon","dragon","green"}
"An intelligent looking dragon is sitting perched on a large chair watching you."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
west to disposal_room descr
"You see a small room.";
east to hallway descr
"You see what looks to be a hallway.";
end
hallway
title "Module tunnel"
descr "The hallway is about 50 meters long and around 100 meters from
side to side and top to bottom. The hallway seems to be dust free. The
walls and the floors seem to be made out of the same sterile
metal-plastic that all space agencies uses. There are large plate glass
windows that open up into space. The hallway is filled with a dim light
that seems to come from everywhere yet no where all at once. You notice
a glimmer of bright light coming from the windows. To the east you see
an air lock and to the west the hallway opens up into a larger room."
extra {"windows","window"}
"Your eyes are drawn to a large ship lit up with running lights sitting
about 1 kilometer from the station."
extra {"floor","walls","wall"}
"Well what can be said it looks to be in perfect condition. what else would
you want to know?"
extra {"large ship" ,"ship"}
"The ship looks really big and is shaped like a dragon. The scales
sparkle and seem to be multiple colors."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
west to chamber descr
"The hallway opens up into a chamber.";
east to office descr
"You see what looks to be an office."
keyword {"air lock door","air lock","door"}
open {EX_OPEN_CLOSE, EX_CLOSED};
end
office
title "The station office"
descr
"Large paintings fill the walls of this part of the station. The room
is as large as the other rooms big enough for Dragons to lounge while
still having a desk in one corner small enough for a humanoid. The
floor along the north wall is lined with some kind of fabric and seems very
soft to walk on, it may be some kind of dragon lounge judging by how large an
area it covers. There is a passage to the west."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
extra {"paintings","painting"}
"The paintings are of many dragons and riders in all kinds of tasks from
combat to look out. All the figures seem to be staring at a staff
being held by a depiction of a wizard on the south wall."
extra {"wizard","staff"}
"The wizard has his hand stretched out and it seems there is a place
you can almost grab the staff. Maybe if you searched the staff you would
find it."
extra {"desk"}
"It's a desk alright but there doesn't seem to be any drawers and it
seems totally empty."
extra {"fabric"}
"Wussshhhhh you bound across the comfortable floor wasn't that fun."
west to hallway descr
"You see what looks to be a hallway."
keyword {"air lock door","air lock","door"}
open {EX_OPEN_CLOSE, EX_CLOSED};
south to portal_room descr
"You see what looks to be a portal room."
keyword {"air lock door","air lock","staff","door"}
key nokey
difficulty 50
open {EX_OPEN_CLOSE, EX_CLOSED, EX_LOCKED, EX_HIDDEN};
end
portal_room
title "Green field room"
descr
"Like the other rooms on the station this one is large enough for
dragons to comfortably fit in. The strange thing about this room though
is it is totally empty except for a green field right in the center.
there is a door that leads to another room to the north."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
extra {"green field","field"}
"The field looks to be a green fog shifting and churning as you watch.
if you are nuts you could probably enter it."
north to office descr
"You see what looks to be an office."
keyword {"air lock door","air lock","door"}
key nokey
difficulty 50
open {EX_OPEN_CLOSE, EX_CLOSED, EX_LOCKED};
//A link to the portal is also here from room_port
end
ship_port
names {"green field", "field"}
title "Green field"
descr
"Green Mist swirls about you."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
in ship
dilcopy force_move@function(
//Time in ticks (PULSE_SEC*seconds), minimum 12 ticks (3 sec)
PULSE_SEC*4,
//room and act
"portal_room@dragonst!You feel your body dissolving for lack of a better
description.&nYou appear on the deck of a ship.",
//True or False for randomizing or not
FALSE);
end
room_port
names {"green field", "field"}
title "Green field"
descr
"Green Mist swirls about you."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
in portal_room
dilcopy force_move@function(
//Time in ticks (PULSE_SEC*seconds), minimum 12 ticks (3 sec)
PULSE_SEC*4,
//room and act
"ship@dragonst!You feel your body dissolving for lack of a better
description.&nYou appear on the deck of a ship.",
//True or False for randomizing or not
FALSE);
end
disposal_room
title "Red field room"
descr
"Like the other rooms on the station this one is large enough for
dragons to comfortably fit in. The strange thing about this room though
is it is totally empty except for a red field right in the center.
there is a door that leads to another room to the east."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
extra {"red field","field"}
"The field looks to be a red fog shifting and churning as you watch.
if you are nuts you could probably enter it."
east to chamber descr
"You see the main chamber.";
//A link to the portal is also here from dis_port
end
dis_port
names {"red field","field"}
title "Red field"
descr
"Red Mist swirls about you."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
dilcopy force_move@function(
//Time in ticks (PULSE_SEC*seconds), minimum 12 ticks (3 sec)
PULSE_SEC*4,
//room to force move to and act
"deathspace@dragonst!You feel your body dissolving for lack of a better
description.",
//true or false random move or not
0);
in disposal_room
end
ship
title "War dragon"
descr
"Blue light softly glows from con duets that line the walls of this ship.
The floors beside the east and west wall have what looks to be soft
fabric covering. The south wall has small controls that seem to be made
for humanoids with two small chairs that look to be pilot seats. view
portals are about 50 meters up the side of the ship on the west and east
wall and some kind of electronic screen covers the south wall. The ship
seems to be a one room ship but there is a green field by the north
wall."
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
extra {"view port"}
"Sorry you're not 50 meters tall maybe it is made for a dragon?"
extra {"view screen","screen"}
"It seems to be the pilots view screen but you can't seem to see a way
to turn it on."
extra {"controls","control"}
"The controls are in some weird language and you're afraid if you start
pushing buttons you might rocket in to the station or worse slam into
a planet."
extra {"soft fabric","fabric"}
"It looks to be a dragon lounge area."
//A link to the portal is also here from ship_port
end
deathspace
title "Open space"
descr
"You see the ship and the station far off in the distance and you are in Space!"
movement SECT_INSIDE
ALWAYS_LIGHT
flags {UNIT_FL_NO_WEATHER, UNIT_FL_INDOORS}
dilcopy death_room@function (
//Time in ticks (PULSE_SEC*seconds), minimum 12 ticks (3 sec)
PULSE_SEC*4,
//damage
400,
//act for the damage.
"You realize to late that was the trash disposal transporter and you feel
your lungs explode.");
end
%mobiles
bldragon
title "a black dragon"
descr "A big ugly black dragon is clawing the ground here."
names {"big ugly black dragon","ugly black dragon","big black dragon",
"black dragon","dragon"}
extra {}
"The black dragons scales glitter like black granite that has been
polished for years by water. He has a large neck and huge bat like
wings. his eyes watch you as you stand before him. One claw seems to be
tapping slightly on the ground as if the dragon is waiting for
something."
extra {"eye","eyes"}
"The dragons eyes seem to follow you no matter where you go in the room
nothing seems to escape the dragons attention."
extra {"claws","claw"}
"The claw is big black and it looks very deadly. It seems like the
dragon has two sets of 4 large claws and 2 sets of 4 smaller claws which
to say means the claws are about the size of short swords and long
swords."
extra {"scales","scale"}
"It's a scale! Haven't you ever seen a dragon before!"
extra {"bat wings","wings"}
"The dragon sees you looking and flaps his wings creating one heck of a
wind blast."
M_DRAGON_BLACK_OLD(SEX_MALE)
end
janitor
names {"ugly janitor", "janitor", "hobgoblin"}
title "an ugly janitor"
descr "an ugly janitor is walking around, cleaning up."
extra {}
"This ugly green thing looks more goblin than hobgoblin but he seems intent on
cleaning everything around him."
M_AVG_HOBGOBLIN(6, SEX_MALE)
// he is sort of good for cleaning so much
alignment 900
//give him some money
money 5 IRON_PIECE
dilcopy janitor@clashut("disposal_room@dragonst");
// only want him cleaning the station
dilcopy wander_zones@function("dragonst", 20, 1, 1);
end
bob
names {"Bob"}
title "Bob"
descr "Bob the Banker is here, sitting behind the counter."
extra {}
"He has a very serious look on his face."
// define from composed.h
M_SHOP_KEEPER(4, SEX_MALE, RACE_HUMAN)
//discourage people from killing banker
exp -500
flags {UNIT_FL_NO_TELEPORT}
special SFUN_BANK
end
%objects
info_board
title "a merchant information board"
descr "A merchant information Board is mounted on a wall here."
names {"merchant information board","information board","merchant board","board"}
extra {}
"A large flashy black steal board."
MATERIAL_METAL("A very fine quality black steel")
type ITEM_BOARD
dilcopy board@boards("info","","rem_res@boards","",100);
end
w_stiletto
title "a stiletto"
names {"deadly looking stiletto","deadly stiletto","stiletto", "dagger"}
descr "A deadly looking stiletto has been left here."
MATERIAL_METAL("A very fine quality steel")
manipulate {MANIPULATE_TAKE, MANIPULATE_WIELD}
WEAPON_DEF(WPN_DAGGER, 1, 2)
weight 2
cost 2 GOLD_PIECE
rent 1 COPPER_PIECE
SKILL_TRANSFER(SKI_BACKSTAB, 2)
dilcopy abi_restrict@function (ABIL_DEX,10,0,25,"");
extra {}
"This looks like a thief dream come true. "
extra {"$identify"}
"The stiletto looks magical in nature and seems really sharp. You can
tell if you wield it you would be able to backstab someone really easy."
extra {"$improved identify"}
"The stiletto gives you a magic bonus of +1 and has a quality of +2.
It also raises your back stabbing skill by 2%. You have to have at
least 10% in dex before you can wield this magical weapon."
end
wpn_locker
title "a weapons locker"
names {"weapons locker","weapon locker","locker"}
descr "a small weapons locker hangs on the wall here."
manipulate {MANIPULATE_ENTER}
CONTAINER_DEF(500)
open {EX_OPEN_CLOSE, EX_CLOSED,EX_LOCKED}
weight 400
MATERIAL_METAL("A very fine quality steel")
extra {}
"It is an ordinary weapons locker that looks like it holds any illegal
weapons that are taken on the station."
end
pol_plate
names {"polished breast plate","polished plate","breast plate","plate"}
title "a polished breast plate"
descr "A polished breast plate has been left here."
extra {}
"This is one shiny plate it seems to be made out of one perfect piece of
metal. There doesn't even seem to be any markings of owner ship."
MATERIAL_METAL("A high luster silver colored metal")
manipulate {MANIPULATE_TAKE, MANIPULATE_WEAR_BODY}
ARMOUR_DEF(ARM_PLATE,5,9)
dilcopy abi_restrict@function (ABIL_STR,40,0,25,"");
cost 2 GOLD_PIECE
rent 3 COPPER_PIECE
weight 25
extra {"$identify"}
"This is a high quality plate with a magical feeling."
extra {"$improved identify"}
"The plate has a magical bonus to your defence of a +5 and a quality of
+9. You need 40% in strength to be able to wear it."
end
liq_ration
names {"red bag", "bag", "wine"}
title "a red bag"
descr "A red bag has been gently placed here."
MATERIAL_ORGANIC("a soft plastic")
manipulate {MANIPULATE_TAKE}
LIQ_WINE(1,2,2,0)
cost 2 IRON_PIECE
extra {}
"A small label reads Tassel Grove's finest. Year 321"
extra {"$identify"}
"It's the special wine from Tassel grove a small halfling village on the
planet Valhalla. It seems like a great vintage wine."
end
beef_stick
title "a tough leathery stick"
descr "A tough leathery looking stick is laying here."
names {"tough leathery stick","tough leather stick","leathery stick",
"leather stick","tough stick","stick"}
extra {}
"This has the word BEEF burnt into it."
manipulate {MANIPULATE_TAKE}
FOOD_DEF(5,0)
weight 1
cost 1 COPPER_PIECE
MATERIAL_ORGANIC("tough beef")
end
maskwa
names {"maskwa platinum ring", "platinum ring","maskwa ring","maskwa","ring"}
title "a Maskwa ring"
descr "A Maskwa platinum ring is laying here."
MATERIAL_METAL("Platinum, and other precious metals")
extra {}
"The ring has a large bear head. Could this be the legendary head of
Maskwa? Any thing formed with its head on it is said to strengthen the
wearer."
type ITEM_WORN
manipulate {MANIPULATE_TAKE, MANIPULATE_HOLD, MANIPULATE_WEAR_FINGER}
cost 100 COPPER_PIECE
rent 50 IRON_PIECE
weight 1
STR_TRANSFER(+1)
end
%end
Suggested Object Exercises
-
Using information about craftsmanship, magical modifier, and shield fields, create a large shield.
-
Using information about non-armour worn objects and magical transfer macros, create a ring that gives a person 5% strength bonus and removes 5% magic ability.
-
Using information from drink container macros, create a beer or soda from your local area.
-
Using information about light object macros, make an object that gives off a bright light and will never run out.
-
Using the container, food, drink, and money macros, create a chest that can be locked that contains food, drink, a pile of silver pieces, and a pile of iron pieces.