/* Filename : axeofdeception.c
* Description : a very special weapon
*
* written : 05-10-1996 - Gunner
* last modified : 11-07-1998 - Gunner
* HTML-Version : 06-02-2000 - Ghorwin
*/
#include <mudlib.h>
inherit I_WEAPON;
#define FUNC "/doc/crashcourse/course09/axefuncs"
create()
{
::create();
set_name("axe of deception");
add_id(({"axe","bloody axe"}));
set_short("A bloody axe");
set_long("This axe sure is bloody. Whoever wielded this axe must "
"have spent it well...\n");
add_item("blood","The axe is covered in blood.\n");
set_weight(4);
set_value(1000+random(500));
set_class(15+random(6));
set_damage_type("chop");
set_weapon_type("axe");
set_info("It's the infamous Axe Of Deception.\n");
set_hit_func((:call_other,FUNC,"axe_hit",this_object():));
add_property(({"hidden","magic","metal"}));
replace_program(I_WEAPON);
}
/* Filename : axefuncs.c
* Description : the functionfile for axeofdeception.c
*
* written : 05-10-1996 - Gunner
* last modified : 28-05-1998 - Gunner
* HTML-Version : 06-02-2000 - Ghorwin
*/
#include <mudlib.h>
#include <colours.h>
#include "/doc/crashcourse/defs.h"
inherit I_DAEMON;
#define BASE 20 /* Basedamage */
int
axe_hit(object axe, object att)
{
object attweap;
object room = ENV(att);
object wielder = axe->query_wielded_by();
int ran = random(100);
int hit = BASE + random(20);
if (ran > 90) // Special hits every ~10th round
{
switch (hit) // Hit messages... With colours...
{
case BASE :
tell_object(wielder,
COL_YH(wielder,"You run the axe into " + Q_NAME(att) +
", hurting " + Q_OBJ(att) + " badly!\n"));
tell_object(att,
COL_HY(att,Q_NAME(wielder) + " runs " + Q_POSS(wielder) +
" axe into you, hurting you badly!\n"));
tell_room(room,Q_NAME(wielder) + " runs " + Q_POSS(wielder) +
" axe into " + Q_NAME(att) + ", hurting " +
Q_OBJ(att) + " badly!\n", ({wielder,att}));
break;
case BASE+1..BASE+10 :
tell_object(wielder,
COL_YH(wielder,"You run the axe through the flesh "
"of " + Q_NAME(att) + "!\n"));
tell_object(att,
COL_HY(att,Q_NAME(wielder) + " runs " + Q_POSS(wielder) +
" axe through your flesh!\n"));
tell_room(room,Q_NAME(wielder) + " runs " + Q_POSS(wielder) +
" axe through " + Q_NAME(att) + "'s flesh!\n",({wielder,att}));
break;
case BASE+11..BASE+19 :
tell_object(wielder,
COL_YH(wielder,"You let your the axe cut " + Q_NAME(att) +
" to the bone!\n"));
tell_object(att,
COL_HY(att,Q_NAME(wielder) + " lets " + Q_POSS(wielder) +
" axe cut you to the bone!\n"));
tell_room(room,Q_NAME(wielder) + " lets " + Q_POSS(wielder) +
" axe cut " + Q_NAME(att) + " to the bone!\n",({wielder,att}));
break;
}
}
if (ran < 5) // 5% chance for the deception... Bad luck...
{
if (axe->unwield(1) == 0) return 0; // Couldn't unwield...
axe->move(att);
tell_object(wielder,
COL_HY(wielder,"The axe suddenly disapproves of you and "
"decides to help your enemy! It stuns your hand and "
"flies over to your enemy!\n"));
tell_object(att,
COL_YH(att,Q_NAME(wielder) + "'s axe suddenly flies over "
"to you!\n"));
tell_room(room,Q_NAME(wielder) + "'s axe suddenly flies over to " +
Q_NAME(att) + "!\n",({wielder,att}));
wielder->hit_player(10+random(10),"electricity",axe,"glove");
attweap = att->query_weapon(1);
if (attweap)
if (attweap->unwield() == 0) return 0; // Couldn't unwield...
axe->wield();
}
if (ran > 90)
return hit; // Return the extra hits
else
return 0;
}