::: Monster Documentation ::: Introduction ------------ Monsters form one of the central functions of any mud, and that is for players to kill. Some Creators can get quite creative and make monsters that are for the purpose of interaction. With the diversity of this mudlib the later is preferable, especially by players. 8) It is important that a creator is able to create a monster that is in line with other monsters of similar power about the mud. Players then are able to learn that an orc in one area is about the same ability of other orcs around other areas; they will learn that a monster of 5th level in the city is similar to another monster of 5th level. Table 1: Legal Monster Stats Level is the best indicator of ---------------------------- the general difficulty of the Level HP WC AC MONEY monster, and also of the area ---------------------------- that the monster is found. 1 50 5 3 30 2 55 6 3 60 WC is the same as the player stat 3 60 7 4 100 but is INDEPENDANT of any weapon 4 70 8 4 150 that they may wield. If you make a 5 80 9 5 200 monster wield a weapon set their WC 6 95 10 5 250 AFTER it. 7 110 11 6 300 8 130 12 7 350 AC is also independent of armour. 9 150 13 7 400 Set a monsters AC AFTER you make it 10 175 14 8 700 wear its armour (if any). 11 200 15 9 900 12 230 16 9 1000 Money is the general treasure or 13 260 17 10 1200 coinage given to a player after he 14 300 18 11 1400 kills it. It is independent of armour 15 350 20 12 1600 or weapons he may gain from it. Note 16 450 22 13 1800 that these are absolute maximum values. 17 600 24 14 2000 18 800 26 15 2200 19 1100 27 16 2400 20 1500 30 17 2600 21+ 1700 30 17 2800 ----------------------------------------------------------------------------- Monster stats are permitted to be +/- 20% dependant upon the Creators needs for the area that the monster is placed. Any deviations from this will be noted when a QC checks the area. Use of the 'stat' function from the standard 'creator' powers will also inform you what monsters are legal and what monsters are illegal. Monsters after 21st level are expected to have extensive spell ability, and several class abilities. These monsters are the typical ones that have special armour and weapon types. Monster Equipment ----------------- ARMOUR: Any monster is allowed to have armour of the type to wear. Humanoids often have chainmail, helms, gloves, etc, that perform protective functions. A monster who wears a ring of protection is protected from fire! Some, however, don't have need for wearing armour. Dragons don't wear armour. Dragon hide as an armour type for it to wear, and hence for the player to obtain, is NOT valid armour. A player already has the ability to skin the dragon and turn the hide into armour. A wolf's pelt is a similar example of what NOT to set armour to. See also 'man armour'. WEAPONS: Humanoids defend themselves mostly with swords, hammers, maces, and other weapons. When a monster has one, make sure he wields it. Set the WC after you do this. As with armour, a dragon, or similar monster, does NOT have a weapon to wield. Don't make a dragon's claw a weapon for a dragon to wield. A player can always hack the claw off to use for other purposes, even sell! Functions --------- object set_heart_ob(object ob); object set_dead_ob(object ob); object set_init_ob(object ob); Comment: These fn's allow you to use a heart_beat(), second_life(), and init() in an alternative object ob. E.g. void reset(status arg) { ::reset(arg); if(arg) return; set_name("giant"); set_heart_ob(this_object()); ...etc... } void monster_heart_beat() { if(present("angel", environment())) tell_room(environment(), "Giant says: Hi Angel!\n"); } 'set_dead_ob' works the same, however, this function is called when a monster dies. This way you can have a fire elemental burn into nothingness, rather than leave a corpse. This is good since a living flame ain't gonna leave a body behind; he ain't got one to start off with 8). int set_random_pick(int r); Comment: If there is a gettable object in the room, the monster has r% chance to pick it up each heart beat. Put this function along with all the other sets, like set_name, set_level, etc. status set_move_at_reset(status i); Comment: set_move_at_reset(1) will cause the monster to move every reset. status set_aggressive(status a); Comment: set_aggressive(1) will cause the monster to fight automatically when a player enters the room. string set_name(string n); Comment: This will set living name automatically. void add_spell_immunity(string type); status query_spell_immunity(string type); Comment: Spell immunities allow a player or monster to be immune to certain types of spell and other attacks. The monster can also be immune to non enchanted weapons, or weapons of certain types. E.g. add_spell_immunity("non enchanted weapons"); ...will make a monster immune to those weapons that DONT have set_enchanted(), however, you can also add_spell_immunity("slash"); ..etc... void set_level(int l); Comment: This will set the minimum requirements for level l. By setting the level wc, ac, & hp are also set to an appromimate amount. It is suggested, however, that you set these things as well. void set_wander(int chance, int time); Comment: the monster has chance% to move each heart beat after waiting time heart beats. void set_attack_msg(({ string *array })); Comment: the monster is able to attack with 7 messages from least hard hit to hardest hit. It makes the monsters attack more realistic if it is not wielding a weapon. For non-human monsters it is recommended that you set the attack message. After all, you don't want rabbits and lizards kicking you! E.g. set_attack_msg(({ "bruises softly", "with its nose", "grazes lightly", "with its tail", ...etc })); Undead Monsters --------------- Monsters can be undead. An undead monster has a few more abilities it is able to use against a player. To make an undead monster, inherit UNDEAD, rather than MONSTER at the top of your file. Since undead monsters have standard protections (like cold, energy drain.. etc) you are permitted to make them as low as -30% from their original suggested stats. int set_chill_chance(int chance); int set_chill_dam(int damage); Comment: This gives the undead monster %chance to damage to a player through a chilling touch. A liches touch is deadly cold. int set_drain_chance(int chance); Comment: This gives the undead monster %chance to drain one level from a player. In this case restoration of that level is possible, but it will only place the player at the beginning of the level (exp wise) that he lost). Many drain life energy levels including vampires, liches, wraiths. The %chance should not be set very high, say, 5% int set_disease_chance(int chance); Comment: Mummies and other undead carry dreaded disease which passes to the player giving him cold-like symptoms at first, but ending up in weighing the player down, not being able to eat or drink as much while he is under its effects. The disease is also contagious from monster to monster and player to player. Spells & Abilities ------------------ All monsters, as they gain in levels, should be given some form of spell-like attack. Players find it much more of a challenge if they have to use their spells for immunities against monsters spells, and find the rewards from the battle much more rewarding. It is EXPECTED that appropriate humanoid monsters have spell-like attacks. int set_chance(int c); int set_spell_dam(int d); string set_spell_mess1(string m); string set_spell_mess2(string m); string set_spell_type(string t); /* like fire, lightning, etc */ string set_spell_skill_type(string str); Comment: This is the old way (dated from circa 2.4.5). This is not used any more but is left for compatibility. This old spell type can also be used for, say, a red dragon's breath weapon (fire), or a black dragon's acid breath weapon, or even a minotaur's head butt! The new spell system allows monsters to utilise the same spells and skills as players. Firstly, make sure you 'add_class(string class)' for the appropriate spell types. E.g. 'add_class("cleric");' for a monster who can cast healing spells on itself, or cast curse spells on its attacker. void set_spell(mixed *arr); Comment: this loads a default spell, in a fashion the same as load_spell(). See spell2.doc. (This replaces above functions). /* can call player spells */ void load_spells(int c, string *s); Comment: *s is a list of spells (by there bin name). There is a c% chance per heart to cast a spell. It is important to note the monster must be of a level capable of casting the spell. Set the c% to approximately 2% per level as a rule of thumb (only). Eg. load_spells(10,({ "cure light wounds", "magic missile", })); /**************************************************************************/ status init_command(string cmd); Comment: commands the monster to 'cmd'. This must be used if a monster has an item that it is able to either wear or wield. This feature can also be used for any action you want the monster to take when someone walks into the room and initialises the monster. /***************************************************************************/ /*** Load Chats and Attack chats. ***/ void load_chat(int chance, string *strs); Comment: there is a chance% chance per heart beart to say a chat string. Monsters almost always have something to say, and so this enables the player to interact with it on some limited level. Eg. load_chat(10,({ "Bob says: Hi.\n", "Bob peers into the distance.\n", })); void load_a_chat(int chance, string *strs); Comment: If the monster is attacking is will use attack chats instead of chats. void load_l_chat(int chance, string lang, string *strs); Comment: same as load_chat(), but spoken in language lang. This is useful if the monster is an elf, and only people who know elvish will understand the monster. void load_monster(mixed name, int lev, string race); Comment: This is another format for loading monsters. You will have to look at the function in /inherit/monster.c. to see a complete listing of how to use this feature, or ask an ELDER. A complete listing of valid monster stats can be found in /include/fn/stat.h This file is required to be changed if the ADMIN decide to alter the legal values and statistics of not only monsters, but also weapons and armour. Angel, July 1996.