/***************************************************************************
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. *
* *
* Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* *
* In order to use any part of this Merc Diku Mud, you must comply with *
* both the original Diku license in 'license.doc' as well the Merc *
* license in 'license.txt'. In particular, you may not remove either of *
* these copyright notices. *
* *
* Much time and thought has gone into this software and you are *
* benefitting. We hope that you share your changes too. What goes *
* around, comes around. *
***************************************************************************/
/***************************************************************************
* God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock *
* *
* Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little *
* This mud is NOT to be copied in whole or in part, or to be run without *
* the permission of Matthew Little. Nobody else has permission to *
* authorise the use of this code. *
***************************************************************************/
#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "player.h"
void sora_principle (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
if (ch->pcdata->powers[NPOWER_SORA] == 0)
{
stc (" Sora: None.\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_SORA] >= 1)
stc (" Sora: Mitsukeru", ch);
if (ch->pcdata->powers[NPOWER_SORA] >= 2)
stc (" Koryou", ch);
if (ch->pcdata->powers[NPOWER_SORA] >= 3)
stc (" Kakusu", ch);
if (ch->pcdata->powers[NPOWER_SORA] >= 5)
stc (" Kanzuite", ch);
if (ch->pcdata->powers[NPOWER_SORA] >= 6)
stc (" Bomuzite", ch);
if (ch->pcdata->powers[NPOWER_SORA] >= 7)
stc (" Mizotamouyo", ch);
stc ("\n\r", ch);
return;
}
void chikyu_principle (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
if (ch->pcdata->powers[NPOWER_CHIKYU] <= 5)
{
stc (" Chikyu: None.\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_CHIKYU] >= 6)
stc (" Chikyu: Harakiri", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] >= 7)
stc (" Orimasu", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] >= 8)
stc (" Gunaya", ch);
stc ("\n\r", ch);
return;
}
void ningenno_principle (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
if (ch->pcdata->powers[NPOWER_NINGENNO] == 0)
{
stc (" Ningenno: None.\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_NINGENNO] >= 1)
stc (" Ningenno: Tsume", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] >= 3)
stc (" Mienaku", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] >= 6)
stc (" Circle", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] >= 7)
stc (" Trip", ch);
stc ("\n\r", ch);
return;
}
void tengu_principle (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
if (ch->pcdata->powers[NPOWER_TENGU] == 0)
{
stc (" Tengu: None.\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_TENGU] >= 1)
stc (" Tengu: Kunoichi", ch);
if (ch->pcdata->powers[NPOWER_TENGU] >= 4)
stc (" Caltrops", ch);
if (ch->pcdata->powers[NPOWER_TENGU] >= 5)
stc (" Tetsubishi", ch);
stc ("\n\r", ch);
return;
}
void ashiko_principle (CHAR_DATA * ch)
{
if (IS_NPC (ch))
return;
if (ch->pcdata->powers[NPOWER_ASHIKO] == 0)
{
stc (" Ashiko: None.\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_ASHIKO] >= 1)
stc (" Ashiko: Doka", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] >= 2)
stc (" Ngazumo", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] >= 3)
stc (" Nekade", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] >= 4)
stc (" Ipponsugi", ch);
stc ("\n\r", ch);
return;
}
void do_ninjapowers (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
do_rand_typo (ch);
return;
}
stc ("#p================================================================================#n\n\r", ch);
cent_to_char ("#w-[ Ninja Principles ]-#n", ch);
stc ("#p================================================================================#n\n\r", ch);
sora_principle (ch);
chikyu_principle (ch);
ningenno_principle (ch);
tengu_principle (ch);
ashiko_principle (ch);
stc ("#wPowers not based on principles: Ncreate, Calm, Michi#n\n\r", ch);
stc ("#p================================================================================#n\n\r", ch);
stc ("Powers that are 'auto' are not listed.\n\rTo see all powers for each principle, type principle <principlename>\n\r", ch);
stc ("#p================================================================================#n\n\r", ch);
stc ("#wHelp files: Ashiku, Chikyu, Sora, Tengu, Ningenno, Principle, Ninja\n\r", ch);
stc ("#p================================================================================#n\n\r", ch);
return;
}
void do_ninjaeq (CHAR_DATA * ch, char *argument)
{
OBJ_INDEX_DATA *pObjIndex;
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
int vnum = 0;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
do_rand_typo (ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("What piece of ninja armor do you wish to create?.\n\r",
ch);
send_to_char ("A sword, dagger or mask? \n\r", ch);
return;
}
if (!str_cmp (arg, "sword"))
vnum = 29701;
else if (!str_cmp (arg, "dagger"))
vnum = 29700;
else if (!str_cmp (arg, "mask"))
vnum = 29702;
else
{
send_to_char ("What piece of ninja armor do you wish to create?.\n\r",
ch);
send_to_char ("A sword, dagger or mask? \n\r", ch);
return;
}
if (ch->practice < 60)
{
send_to_char
("It costs 60 primal to craft a piece of ninja equipment!\n\r", ch);
return;
}
if (vnum == 0 || (pObjIndex = get_obj_index (vnum)) == NULL)
{
send_to_char ("Missing object, please inform Tijer.\n\r", ch);
return;
}
ch->practice -= 60;
obj = create_object (pObjIndex, 50);
SET_BIT (obj->extra_flags, ITEM_LOYAL);
FILL_STRING (obj->questowner, ch->name);
obj_to_char (obj, ch);
act ("$p appears in a cloud of smoke.", ch, obj, NULL, TO_CHAR);
act ("$p appears in a cloud if smoke.", ch, obj, NULL, TO_ROOM);
return;
}
void do_principles (CHAR_DATA * ch, char *argument)
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char buf[MAX_STRING_LENGTH];
argument = one_argument (argument, arg1);
argument = one_argument (argument, arg2);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (arg1[0] == '\0' && arg2[0] == '\0')
{
sprintf (buf,
"Principles: Sora (%d), Chikyu (%d), Ningenno (%d), Tengu (%d), Ashiko (%d).\n\r",
ch->pcdata->powers[NPOWER_SORA],
ch->pcdata->powers[NPOWER_CHIKYU],
ch->pcdata->powers[NPOWER_NINGENNO],
ch->pcdata->powers[NPOWER_TENGU],
ch->pcdata->powers[NPOWER_ASHIKO]);
send_to_char (buf, ch);
return;
}
if (arg2[0] == '\0')
{
if (!str_cmp (arg1, "tengu"))
{
send_to_char
("Tengu - The weapons and gadget mastery principle.\n\r", ch);
if (ch->pcdata->powers[NPOWER_TENGU] < 1)
stc ("You have none of the Tengu Principles.\n\r", ch);
if (ch->pcdata->powers[NPOWER_TENGU] > 0)
stc ("Kunoichi - Stun Bomb - Paralyze everyone in room.\n\r", ch);
if (ch->pcdata->powers[NPOWER_TENGU] > 1)
stc ("Shurijitsu - Dart Shiroken - Another Shiroken Attack\n\r",
ch);
if (ch->pcdata->powers[NPOWER_TENGU] > 2)
stc ("Hankyu - Double Shiroken - Double Dart Attack.\n\r", ch);
if (ch->pcdata->powers[NPOWER_TENGU] > 3)
stc ("Trulkor - Caltrops - Drops caltrops to poison and wither limbs.\n\r", ch);
if (ch->pcdata->powers[NPOWER_TENGU] > 4)
stc ("Tetsu-bishi - Cures - Creates cure concoctions.\n\r", ch);
return;
}
if (!str_cmp (arg1, "ashiko"))
{
stc ("Ashiko - The Unarmed Combat principle.\n\r", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] < 1)
stc ("You have none of the Ashiko Principles.\n\r", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] > 0)
stc ("Doka - Incapacitate - Renders a limb useless.\n\r", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] > 1)
stc ("Ngazumo - Iron Fist - Toughens the hands that they feel like steal.\n\r", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] > 2)
stc ("Nekade - Pain Touch - Sets victim ablaze.\n\r", ch);
if (ch->pcdata->powers[NPOWER_ASHIKO] > 3)
stc ("Ippon-sugi - Stunning touch - Stuns and dazes opponent.\n\r", ch);
return;
}
if (!str_cmp (arg1, "sora"))
{
send_to_char
("Sora - The finding, observing, and locating principle.\n\r\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] < 1)
send_to_char ("You have none of the Sora principles.\n\r", ch);
if (ch->pcdata->powers[NPOWER_SORA] > 0)
send_to_char
("Mitsukeru -Locate- The scrying power to find enemies.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] > 1)
send_to_char
("Koryou -Consider- The read aura power, learn about your enemies.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] > 2)
send_to_char
("Kakusu -Hidden- Enhanced Hide. Only other ninjas can see you.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] > 3)
send_to_char
("Uro-Uro -Silent Walk- You leave no footprints behind.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] > 4)
send_to_char ("Kanzuite -Aware- The truesight power.\n\r", ch);
if (ch->pcdata->powers[NPOWER_SORA] > 5)
send_to_char
("Bomuzite -Sleep Gas- By mixing an potion, you can put everyone in a room to sleep.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_SORA] > 6)
send_to_char
("Mizotamouyo -Gate- Gate to mobs or characters.\n\r",
ch);
return;
}
else if (!str_cmp (arg1, "chikyu"))
{
send_to_char ("Chikyu - Preperation for battle.\n\r\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] < 1)
send_to_char ("You have none of the Chikyu principles.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 0)
send_to_char ("Tsuyoku -Strength- Toughness.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 1)
send_to_char ("Songai -Damage- Enhanced damage.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 2)
send_to_char ("Isogu -Haste- Adds two extra attacks.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 3)
send_to_char ("Tsuiseki -Hunt- Fast hunting.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 4)
send_to_char ("Sakeru -Sonic Speed- Dodge more attacks.\n\r", ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 5)
send_to_char
("HaraKiri -Blood Power- Hurt yourself to gain power.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 6)
send_to_char
("Orimasu -Mending- Regenerate your being through willpower alone.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_CHIKYU] > 7)
send_to_char
("Gunaya - Entrap your foes with a spiritual net.\n\r", ch);
return;
}
else if (!str_cmp (arg1, "ningenno"))
{
send_to_char
("Ningenno - The battle, attacking and getting away.\n\r\n\r",
ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] < 1)
send_to_char ("You have none of the Ningenno principles.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 0)
send_to_char
("Tsume -Claw- IronClaw always worn on wrist to aid in hand-to-hand.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 1)
send_to_char
("Hakunetsu -First Strike- You get super backstabs.\n\r", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 2)
send_to_char ("Mienaku -Vanish- Never fail flee.\n\r", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 3)
send_to_char
("Shiroken -Throwing Star- Added attack per round, like headbutt for demons.\n\r",
ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 4)
send_to_char
("Dokuyaku -Poison- Adds poisons to the Shiroken\n\r", ch);
if (ch->pcdata->powers[NPOWER_NINGENNO] > 5)
send_to_char
("Circle - circle behind your opponent and hit him during battle\n\r",
ch);
return;
}
sprintf (buf,
"Principles: Sora (%d), Chikyu (%d), Ningenno (%d), Tengu (%d), Ashiko (%d).\n\r",
ch->pcdata->powers[NPOWER_SORA],
ch->pcdata->powers[NPOWER_CHIKYU],
ch->pcdata->powers[NPOWER_NINGENNO],
ch->pcdata->powers[NPOWER_TENGU],
ch->pcdata->powers[NPOWER_ASHIKO]);
send_to_char (buf, ch);
return;
}
if (!str_cmp (arg2, "improve"))
{
int improve;
int cost;
int max;
if (!str_cmp (arg1, "sora"))
{
improve = NPOWER_SORA;
max = 7;
}
else if (!str_cmp (arg1, "chikyu"))
{
improve = NPOWER_CHIKYU;
max = 8;
}
else if (!str_cmp (arg1, "ningenno"))
{
improve = NPOWER_NINGENNO;
max = 7;
}
else if (!str_cmp (arg1, "tengu"))
{
improve = NPOWER_TENGU;
max = 5;
}
else if (!str_cmp (arg1, "ashiko"))
{
improve = NPOWER_ASHIKO;
max = 4;
}
else
{
send_to_char
("Principles: Sora, Chikyu, Ningenno, Tengu, Ashiko\n\r", ch);
return;
}
cost = (ch->pcdata->powers[improve] + 1) * 10;
arg1[0] = UPPER (arg1[0]);
if (ch->pcdata->powers[improve] >= max)
{
sprintf (buf,
"You have already gained all the powers of the %s principle.\n\r",
arg1);
send_to_char (buf, ch);
return;
}
if (cost > ch->practice)
{
sprintf (buf,
"It costs you %d primal to improve your %s principle.\n\r",
cost, arg1);
send_to_char (buf, ch);
return;
}
ch->pcdata->powers[improve] += 1;
ch->practice -= cost;
sprintf (buf, "You improve your ability in the %s principle.\n\r",
arg1);
send_to_char (buf, ch);
}
else
send_to_char
("To improve a principle, type: Principle <principle type> improve.\n\r",
ch);
return;
}
void do_michi (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_CLASS (ch, CLASS_NINJA))
{
if (ch->pcdata->stats[UNI_RAGE] >= 50)
{
send_to_char ("But you are already in the state of Michi.\n\r", ch);
return;
}
/*
if ( ch->pcdata->powers[NINJAKI] < 100 )
{
send_to_char("But you don't have enough Ki to perform the michi.\n\r", ch);
return;
}
*/
send_to_char
("You are gifted positive energy while performing the michi.\n\r",
ch);
act ("$n is gifted positives energy while performing the michi.", ch,
NULL, NULL, TO_ROOM);
ch->pcdata->stats[UNI_RAGE] += 500;
// ch->pcdata->powers[NINJAKI] -= 100;
WAIT_STATE (ch, 12);
return;
}
else
send_to_char ("But you are already in the state of Michi.\n\r", ch);
return;
}
void do_discipline (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
do_rand_typo (ch);
return;
}
if (ch->pcdata->stats[UNI_GEN] > 2)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Discipline whom?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (IS_NPC (victim))
{
send_to_char ("Not on NPC's.\n\r", ch);
return;
}
if (IS_IMMORTAL (victim))
{
send_to_char ("Not on Immortals's.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("You cannot discipline yourself.\n\r", ch);
return;
}
if (victim->max_hit < 3000)
{
stc ("You need 3000hps before you can be classed\n\r", victim);
stc ("They need 3000hps before they can be classed\n\r", ch);
return;
}
if (IS_CLASS (victim, CLASS_NINJA))
{
send_to_char ("They are already disciplined.\n\r", ch);
return;
}
if (victim->level != LEVEL_AVATAR && !IS_IMMORTAL (victim))
{
send_to_char ("You can only teach avatars.\n\r", ch);
return;
}
if (victim->class != 0)
{
send_to_char ("They already have a profession.\n\r", ch);
return;
}
if (!IS_IMMUNE (victim, IMM_VAMPIRE))
{
send_to_char ("You cannot discipline an unwilling person.\n\r", ch);
return;
}
if (ch->exp < 100000)
{
send_to_char
("You cannot afford the 100000 exp required to discipline them.\n\r",
ch);
return;
}
if (victim->exp < 100000)
{
send_to_char
("They cannot afford the 100000 exp required to be disciplined from you.\n\r",
ch);
return;
}
ch->exp -= 100000;
victim->exp -= 100000;
act ("You teach $N the ways of the ninja.", ch, NULL, victim, TO_CHAR);
act ("$n teaches $N the ways of the ninja.", ch, NULL, victim, TO_NOTVICT);
act ("$n teaches you the way of the ninja.", ch, NULL, victim, TO_VICT);
victim->class = CLASS_NINJA;
send_to_char ("You are now a ninja.\n\r", victim);
free_string (victim->lord);
victim->lord = str_dup (ch->name);
//free_string(victim->clan);
//victim->clan = str_dup(ch->clan);
victim->pcdata->stats[UNI_GEN] = ch->pcdata->stats[UNI_GEN] + 1;
save_char_obj (ch);
save_char_obj (victim);
return;
}
void do_kakusu (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_CLASS (ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_SORA] < 3)
{
send_to_char ("You have not learned the Sora principle to 3.\n\r", ch);
return;
}
if (ch->fight_timer > 0)
{
send_to_char ("Not until your fight timer expires.\n\r", ch);
return;
}
if (ch->pcdata->powers[NINJAKI] < 30)
{
send_to_char ("You don't have 30 ki to activate your power.\n\r", ch);
return;
}
if (IS_AFFECTED (ch, AFF_HIDE))
{
REMOVE_BIT (ch->affected_by, AFF_HIDE);
act ("$n appears from the shadows.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You appear from the shadows.\n\r", ch);
}
else
{
act ("$n disappears into the shadows.", ch, NULL, NULL, TO_ROOM);
send_to_char ("You disappear into the shadows.\n\r", ch);
SET_BIT (ch->affected_by, AFF_HIDE);
ch->pcdata->powers[NINJAKI] -= 30;
}
return;
}
void do_orimasu (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_CHIKYU] < 7)
{
send_to_char ("Huh?\n\r", ch);
return;
}
/* else if( ch->pcdata->powers[NINJAKI] < 15 )
* {
* send_to_char("You do not have the required mental energies
* to mend your being.\r\n", ch);
* return;
* }
*/
else if (ch->position == POS_FIGHTING)
{
send_to_char ("You cannot mend your being with such distractions!\r\n",
ch);
return;
}
if (ch->fight_timer > 0)
{
send_to_char ("Not until your fight timer expires.\n\r", ch);
return;
}
send_to_char
("You take a deep breath and attempt to gain mastery over your injuries.\r\n",
ch);
act ("$n takes a deep breath and begins to concentrate.", ch, NULL, NULL,
TO_ROOM);
if (number_range (1, 5) != 1)
{
send_to_char ("You mend some of your injuries by force of will alone.",
ch);
ch->hit +=
(int) (ch->max_hit *
(double) ((double) 1 / (double) (number_range (8, 12))));
ch->mana +=
(int) (ch->max_mana *
(double) ((double) 1 / (double) (number_range (12, 16))));
if (!IS_SET(ch->affected_by, AFF_HIDE)) {
ch->move +=
(int) (ch->max_move *
(double) ((double) 1 / (double) (number_range (12, 16))));
}
if (ch->hit > ch->max_hit)
ch->hit = ch->max_hit;
if (ch->mana > ch->max_mana)
ch->mana = ch->max_mana;
if (ch->move > ch->max_move)
ch->move = ch->max_move;
/* ch->pcdata->powers[NINJAKI] -= 15;*/
act ("$n's wounds slowly begin to close before your eyes!", ch, NULL,
NULL, TO_ROOM);
WAIT_STATE (ch, 12);
return;
}
else
{
send_to_char ("You were unable to gain mastery over your mortal being.",
ch);
/* ch->pcdata->powers[NINJAKI] -= 5;*/
WAIT_STATE (ch, 12);
return;
}
}
void do_kanzuite (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_CLASS (ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_SORA] < 5)
{
send_to_char ("You have not learned the Sora principle to 5.\n\r", ch);
return;
}
else if (ch->pcdata->powers[NINJAKI] < 30)
{
send_to_char ("You don't have 30 Ki to increase your awareness.\n\r",
ch);
return;
}
if (IS_SET (ch->act, PLR_HOLYLIGHT))
{
REMOVE_BIT (ch->act, PLR_HOLYLIGHT);
send_to_char ("You're senses return to normal.\n\r", ch);
}
else
{
SET_BIT (ch->act, PLR_HOLYLIGHT);
send_to_char ("You're senses increase into incredible proportions.\n\r",
ch);
ch->pcdata->powers[NINJAKI] -= 30;
}
return;
}
void do_mienaku (CHAR_DATA * ch, char *argument)
{
ROOM_INDEX_DATA *was_in;
ROOM_INDEX_DATA *now_in;
CHAR_DATA *victim;
int attempt;
if (IS_CLASS (ch, CLASS_NINJA) && ch->pcdata->powers[NPOWER_NINGENNO] < 3)
{
send_to_char ("You have not learned the Ningenno principle to 3.\n\r",
ch);
return;
}
else if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_NPC (ch))
return;
if ((victim = ch->fighting) == NULL)
{
if (ch->position == POS_FIGHTING)
ch->position = POS_STANDING;
send_to_char ("You aren't fighting anyone.\n\r", ch);
return;
}
WAIT_STATE( ch, 12);
if (ch->pcdata->powers[NINJAKI] < 20)
{
send_to_char ("You don't have enough Ki points to flee.\n\r", ch);
return;
}
if (IS_AFFECTED (ch, AFF_WEBBED))
{
send_to_char
("You are unable to move with all this sticky webbing on.\n\r", ch);
return;
}
was_in = ch->in_room;
{
EXIT_DATA *pexit;
int door;
send_to_char ("You move to vanish from combat!\n\r", ch);
if (IS_AFFECTED (ch, AFF_WEBBED))
{
send_to_char
("You are unable to move with all this sticky webbing on.\n\r", ch);
return;
}
if (IS_SET (ch->affected_by, AFF_ENTRAILS))
{
send_to_char
("You are unable to move with these entrails entrapping you.\n\r",
ch);
return;
}
for (attempt = 0; attempt < 6; attempt++)
{
door = number_door ();
if ((pexit = was_in->exit[door]) == 0 || pexit->to_room == NULL
|| IS_SET (pexit->exit_info, EX_CLOSED) || (IS_NPC (ch)
&& IS_SET (pexit->
to_room->
room_flags,
ROOM_NO_MOB)))
continue;
if (WORN_ARTIFACT(ch, ARTI_MAIDENS_BREATH))
break;
move_char (ch, door);
if ((now_in = ch->in_room) == was_in)
continue;
/* Use escape instead of flee so people know it's the ninja power */
ch->in_room = was_in;
act ("$n has escaped!", ch, NULL, NULL, TO_ROOM);
ch->in_room = now_in;
if (!IS_NPC (ch))
send_to_char ("You escape from combat!\n\r", ch);
/* if (victim->in_room == ch->in_room)
{
SET_BIT(victim->extra,BLINDFOLDED);
act("You start to move at super speeds and blind $N.",ch,NULL,victim,TO_CHAR);
act("$n starts to move at super speeds and blinds $N.",ch,NULL,victim,TO_ROOM);
act("$n starts to move at super speeds and blinds you.",ch,NULL,victim,TO_VICT);
return;
}
*/
ch->pcdata->powers[NINJAKI] -= 20;
stop_fighting (ch, TRUE);
return;
}
}
return;
}
void do_bomuzite (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg1[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
else if (ch->pcdata->powers[NPOWER_SORA] < 6)
{
send_to_char ("You have not learned the Sora principle to 6.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char ("Bomb who?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg1)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("Not on yourself!\n\r", ch);
return;
}
if (ch->position == POS_FIGHTING)
{
send_to_char ("Not while fighting!\n\r", ch);
return;
}
if (ch->pcdata->powers[NINJAKI] < 20)
{
send_to_char ("You don't have enough Ki points.\n\r", ch);
return;
}
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
if (victim->in_room == ch->in_room)
{
act ("You toss your bomb onto the floor and put $N to sleep.", ch, NULL,
victim, TO_CHAR);
act ("$n tosses a bomb onto the floor. You feel sleepy.", ch, NULL,
victim, TO_VICT);
victim->position = POS_SLEEPING;
ch->pcdata->powers[NINJAKI] -= 20;
WAIT_STATE (ch, 12);
return;
}
return;
}
void do_tsume (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_NINGENNO] < 1)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (IS_VAMPAFF (ch, VAM_CLAWS))
{
send_to_char ("You remove the IronClaws from your wrists.\n\r", ch);
REMOVE_BIT (ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
return;
}
send_to_char ("You attach IronClaws to your wrists.\n\r", ch);
SET_BIT (ch->pcdata->stats[UNI_AFF], VAM_CLAWS);
return;
}
void do_hara_kiri (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_CHIKYU] < 6)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[HARA_KIRI] > 0)
{
send_to_char ("You are already experiencing the power of HaraKiri.\n\r",
ch);
return;
}
if (ch->hit < ch->max_hit / 10)
{
send_to_char ("You are hurt too badly already.\n\r", ch);
return;
}
ch->pcdata->powers[HARA_KIRI] = ch->hit / 500;
if (ch->pcdata->powers[HARA_KIRI] < 5)
ch->pcdata->powers[HARA_KIRI] = 5;
ch->hit = 1;
ch->mana = 1;
ch->move = 1;
send_to_char ("You cut your finger and bleed profusely.\n\r", ch);
act ("$n cuts his finger and obtains the power of HaraKiri", ch, NULL,
NULL, TO_ROOM);
return;
}
void do_trip (CHAR_DATA * ch, char *argument)
{
char arg[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_NINGENNO] < 7)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
if (arg[0] == '\0')
{
send_to_char ("Trip whom?\r\n", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("How can you trip someone who is not here?\r\n", ch);
return;
}
else if (IS_NPC (victim))
{
send_to_char ("You cannot trip them!\r\n", ch);
return;
}
}
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
if (number_range (1, 4) != 1)
{
sprintf (buf, "You skillfully trip %s, and they go down!\r\n",
victim->name);
send_to_char (buf, ch);
sprintf (buf,
"%s makes an impressive fighting move, and you land on your butt!\r\n",
ch->name);
send_to_char (buf, victim);
WAIT_STATE (ch, 5);
WAIT_STATE (victim, 5);
return;
}
else
{
send_to_char
("You attempt an impressive fighting move, but instead land on your butt!\r\n",
ch);
sprintf (buf,
"%s attempts to make an impressive fighting move, but lands on his butt!\r\n",
ch->name);
send_to_char (buf, victim);
WAIT_STATE (ch, 10);
return;
}
}
// Next 2 functions added by TheKid 03/02/01
void do_caltrops (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg1[MAX_INPUT_LENGTH];
AFFECT_DATA af;
int sn;
argument = one_argument (argument, arg1);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_TENGU] < 4)
{
send_to_char ("You have not learned the Tengu principle to 4.\n\r", ch);
return;
}
if (arg1[0] == '\0')
{
send_to_char ("Poison who?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg1)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
if (ch == victim)
{
send_to_char ("Not on yourself!\n\r", ch);
return;
}
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
if (ch->pcdata->powers[NINJAKI] < 30)
{
send_to_char ("You don't have enough Ki points.\n\r", ch);
return;
}
if (is_affected (victim, skill_lookup ("poison")))
{
stc ("They are already under the affects of caltrops.\n\r", ch);
return;
}
if ((sn = skill_lookup ("poison")) < 0)
{
send_to_char ("Bug - please inform a coder.\n\r", ch);
return;
}
ch->pcdata->powers[NINJAKI] -= 30;
af.type = gsn_poison;
af.duration = 10;
af.location = APPLY_HITROLL;
af.modifier = -50;
af.bitvector = 0;
af.type = sn;
af.duration = 10;
af.location = APPLY_STR;
af.modifier = 0 - number_range (1, 3);
af.bitvector = AFF_POISON;
affect_to_char (victim, &af);
act ("You toss your caltrop onto the floor and poison $N.", ch, NULL,
victim, TO_CHAR);
act ("$n tosses a caltrop onto the floor. You feel sick.", ch, NULL,
victim, TO_VICT);
return;
}
void do_tetsubishi (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MIL];
int i, test = 0;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
do_rand_typo (ch);
return;
}
if (ch->pcdata->powers[NPOWER_TENGU] < 5)
{
stc ("You haven't learned Tetsu-bishi yet\n\r", ch);
return;
}
if (ch->mana < 500)
{
send_to_char ("You don't have enough mana.\n\r", ch);
return;
}
if (ch->position == POS_FIGHTING)
{
stc ("Not while fighting!\n\r", ch);
return;
}
victim = ch;
for (i = 0; i < 7; i++)
{
if (victim->loc_hp[i] > 0)
test++;
}
if (victim->hit == victim->max_hit && victim->mana == victim->max_mana
&& victim->move == victim->max_move && test == 0)
{
stc ("You are in perfect condition!\n\r", ch);
return;
}
if (victim->loc_hp[6] > 0)
{
stc ("Your wounds close up and stop bleeding.\n\r", victim);
victim->loc_hp[6] = 0;
}
if ((victim->loc_hp[0] + victim->loc_hp[1] + victim->loc_hp[2] +
victim->loc_hp[3] + victim->loc_hp[4] + victim->loc_hp[5]) != 0)
{
stc ("Your bones mend themselves together and new limbs grow out of your body.\n\r", victim);
victim->loc_hp[0] = 0;
victim->loc_hp[1] = 0;
victim->loc_hp[2] = 0;
victim->loc_hp[3] = 0;
victim->loc_hp[4] = 0;
victim->loc_hp[5] = 0;
}
act ("You feel more healthy.", ch, NULL, ch, TO_CHAR);
act ("$n feels more healthy.", ch, NULL, ch, TO_ROOM);
victim->hit += number_range(500,2500);
victim->mana -= 500;
if (victim->hit > victim->max_hit)
victim->hit = victim->max_hit;
update_pos(ch);
WAIT_STATE (ch, 18);
return;
}
void do_tetsubishi2 (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
do_rand_typo (ch);
return;
}
if (ch->pcdata->powers[NPOWER_TENGU] < 5)
{
stc ("You haven't learned Tetsu-bishi yet\n\r", ch);
return;
}
if (ch->mana < 500)
{
send_to_char ("You don't have enough mana.\n\r", ch);
return;
}
if (ch->position == POS_FIGHTING)
{
stc ("Not while fighting!\n\r", ch);
return;
}
if (ch->hit >= ch->max_hit)
{
stc ("You require no healing!\n\r", ch);
return;
}
ch->mana = ch->mana - 500;
ch->hit = ch->hit + 500;
if (ch->hit > ch->max_hit)
ch->hit = ch->max_hit;
act ("You feel more healthy.", ch, NULL, ch, TO_CHAR);
act ("$n feels more healthy.", ch, NULL, ch, TO_ROOM);
update_pos (ch);
WAIT_STATE (ch, 6);
return;
}
void do_mizotamouyo (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_SORA] < 7)
{
send_to_char ("Huh?", ch);
return;
}
if (ch->fight_timer > 0)
{
send_to_char ("Not until your fight timer expires.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char
("Who do you wish to walk to via the paths of darkness?\r\n", ch);
return;
}
if ((victim = get_char_world (ch, arg)) == NULL || victim == ch
|| victim->in_room == NULL || ch->in_room == NULL || (IS_NPC (victim)
&& victim->
level > 150))
{
send_to_char ("You attempt to walk through the shadows, but fail.\n\r",
ch);
return;
}
if (victim->in_room == ch->in_room)
{
send_to_char ("But you are already there!\n\r", ch);
return;
}
if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ))
{
stc ("You failed.\n\r", ch);
return;
}
if (IS_SET (victim->in_room->room_flags, ROOM_SAFE)
// || IS_SET(victim->in_room->room_flags, ROOM_PRIVATE)
// || IS_SET(victim->in_room->room_flags, ROOM_SOLITARY)
// || IS_SET(victim->in_room->room_flags, ROOM_NO_RECALL)
|| (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON)))
{
send_to_char ("You are unable to focus on their location.\n\r", ch);
return;
}
send_to_char ("You dissipate into the shadows.\n\r", ch);
act ("$n dissipates into the shadows, slowly vanishing from sight.", ch,
NULL, NULL, TO_ROOM);
char_from_room (ch);
char_to_room (ch, victim->in_room);
do_look (ch, "");
send_to_char ("You coalesce from the darkness which surrounds you.\n\r",
ch);
WAIT_STATE (ch, 5);
return;
}
/***************************************************************************
* New Ninja Powers (C) 16/4/2000 Macademus All Rights Reserved *
***************************************************************************/
/***************************************************************************
* Tengu Principle *
***************************************************************************/
/* Level 1 - Kunoichi - a Stunning power*/
void do_stun (CHAR_DATA * ch, char *argument)
{
char arg[MAX_STRING_LENGTH];
char buf[MAX_STRING_LENGTH];
CHAR_DATA *victim;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_TENGU] < 1)
{
send_to_char ("Huh?\n\r", ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
if (arg[0] == '\0')
{
send_to_char ("Stun whom?\r\n", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("How can you stun someone who is not here?\r\n", ch);
return;
}
else if (IS_NPC (victim))
{
send_to_char ("You cannot stun them!\r\n", ch);
return;
}
}
if (ch == victim)
{
stc ("Yes you are stunning arent you?\n\r", ch);
return;
}
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
if (number_range (1, 4) != 1)
{
sprintf (buf, "The room glows bright white and %s is stunned!\r\n",
victim->name);
send_to_char (buf, ch);
sprintf (buf,
"%s makes the room glow bright white, and you fall to the ground stunned!\r\n",
ch->name);
send_to_char (buf, victim);
WAIT_STATE (ch, 5);
victim->position = POS_STUNNED;
return;
}
else
{
send_to_char
("You attempt to let off your stun bomb, but it fails!\r\n", ch);
sprintf (buf, "%s attempts to stun bomb you fail!\n\r", ch->name);
send_to_char (buf, victim);
WAIT_STATE (ch, 20);
return;
}
}
// Ashiko - Principle of Unarmed Combat
// LVL 1 Doka
void do_doka (CHAR_DATA * ch, char *argument)
{
CHAR_DATA *victim;
OBJ_DATA *obj;
char arg[MAX_INPUT_LENGTH];
bool blah = FALSE;
int chance = 0;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_ASHIKO] < 1)
{
stc ("You haven't learned the principle of doka.\n\r", ch);
return;
}
if (arg[0] == '\0')
{
stc ("Who's limb do you wish to wither?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
stc ("They aren't here.\n\r", ch);
return;
}
if (IS_ARM_R (victim, LOST_ARM) && IS_ARM_L (victim, LOST_ARM))
{
stc ("They have already lost both their arms.\n\r", ch);
return;
}
WAIT_STATE (ch, 20);
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
if (IS_NPC (victim))
{
chance = number_range (45, 55);
if (number_percent () > chance)
{
stc ("Nothing happened.\n\r", ch);
return;
}
if (!IS_ARM_R (victim, LOST_ARM))
blah = FALSE;
else
blah = TRUE;
if (!blah)
{
if (!IS_ARM_R (victim, LOST_ARM))
SET_BIT (victim->loc_hp[3], LOST_ARM);
if (!IS_BLEEDING (victim, BLEEDING_ARM_R))
SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R);
if (IS_BLEEDING (victim, BLEEDING_HAND_R))
REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R);
act ("You concentrate deeply and $N's arm starts to wither!", ch,
NULL, victim, TO_CHAR);
act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
victim, TO_VICT);
make_part (victim, "arm");
if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
{
if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
take_item (victim, obj);
}
if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL)
take_item (victim, obj);
return;
}
else if (blah)
{
if (!IS_ARM_L (victim, LOST_ARM))
SET_BIT (victim->loc_hp[2], LOST_ARM);
else
blah = TRUE;
if (!IS_BLEEDING (victim, BLEEDING_ARM_L))
SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L);
if (IS_BLEEDING (victim, BLEEDING_HAND_L))
REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L);
act ("You concentrate deeply and $N's arm starts to wither!", ch,
NULL, victim, TO_CHAR);
act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
victim, TO_VICT);
make_part (victim, "arm");
if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
{
if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
take_item (victim, obj);
}
if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL)
take_item (victim, obj);
return;
}
}
else if (!IS_NPC (victim))
{
chance = 40;
if (IS_ITEMAFF (victim, ITEMA_ARTIFACT))
chance = 0;
if (number_percent () > chance)
{
act ("You gaze intently at $N.\n\rNothing happens.", ch, NULL,
victim, TO_CHAR);
act ("$n gazes eerily at you.\n\rNothing happens.", ch, NULL, victim,
TO_VICT);
act ("$n gazes eerily at $N.", ch, NULL, victim, TO_NOTVICT);
return;
}
if (!IS_ARM_R (victim, LOST_ARM))
blah = FALSE;
else
blah = TRUE;
if (!blah)
{
if (!IS_ARM_R (victim, LOST_ARM))
SET_BIT (victim->loc_hp[3], LOST_ARM);
if (!IS_BLEEDING (victim, BLEEDING_ARM_R))
SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R);
if (IS_BLEEDING (victim, BLEEDING_HAND_R))
REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R);
act ("You concentrate deeply and $N's arm starts to wither!", ch,
NULL, victim, TO_CHAR);
act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
victim, TO_VICT);
make_part (victim, "arm");
if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
{
if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
take_item (victim, obj);
}
if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL)
take_item (victim, obj);
return;
}
else if (blah)
{
if (!IS_ARM_L (victim, LOST_ARM))
SET_BIT (victim->loc_hp[2], LOST_ARM);
else
blah = TRUE;
if (!IS_BLEEDING (victim, BLEEDING_ARM_L))
SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L);
if (IS_BLEEDING (victim, BLEEDING_HAND_L))
REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L);
act ("You concentrate deeply and $N's arm starts to wither!", ch,
NULL, victim, TO_CHAR);
act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT);
act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL,
victim, TO_VICT);
make_part (victim, "arm");
if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM))
{
if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL)
take_item (victim, obj);
}
if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL)
take_item (victim, obj);
if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL)
take_item (victim, obj);
return;
}
}
return;
}
// LVL 2 - Ngazumo
void do_ngazumo (CHAR_DATA * ch, char *argument)
{
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
send_to_char ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_ASHIKO] < 2)
{
send_to_char ("You have not learned this principle yet.\n\r", ch);
return;
}
if (IS_SET (ch->more, MORE_STEELFISTS))
{
REMOVE_BIT (ch->more, MORE_STEELFISTS);
send_to_char ("Your fists resume their normal toughness.\n\r", ch);
act ("$n's fists resume their normal toughness.\n\r", ch, NULL, NULL,
TO_ROOM);
return;
}
if (!IS_SET (ch->more, MORE_STEELFISTS))
{
SET_BIT (ch->more, MORE_STEELFISTS);
send_to_char ("Your fists turn as hard as steel!\n\r", ch);
act ("$n's fists shine as they turn as hard as steel!\n\r", ch, NULL,
NULL, TO_ROOM);
return;
}
}
// LVL 3 - Nekade
DO_COM (do_nekade)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
int damage;
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_ASHIKO] < 3)
{
stc ("You have not learned that principle yet.\n\r", ch);
return;
}
if (arg[0] == '\0' && ch->fighting == NULL)
{
send_to_char ("Who do you wish to use Pain Touch on?\n\r", ch);
return;
}
if ((victim = ch->fighting) == NULL)
{
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They aren't here.\n\r", ch);
return;
}
}
if (ch == victim)
{
stc ("OUCH\n\r", ch);
return;
}
if (is_safe (ch, victim))
{
stc ("You are unable to affect them\n\r", ch);
return;
} //NO using if safe :)
damage = number_range (1000, 2000);
act ("A look of concentration crosses $n's face.", ch, NULL, NULL,
TO_ROOM);
send_to_char
("You scream in agony as the pain shoots through your body!\n\r",
victim);
act ("$n doubles over and screams in agony!", victim, NULL, NULL, TO_ROOM);
victim->hit -= damage;
if ((IS_NPC (victim) && victim->hit < 1))
{
act ("$n's body falls limply to the ground.", victim, NULL, NULL,
TO_ROOM);
WAIT_STATE (ch, 12);
return;
}
update_pos (victim);
if (IS_NPC (victim))
multi_hit (victim, ch, TYPE_UNDEFINED);
WAIT_STATE (ch, 12);
return;
}
// LVL 4 - Ippon Sugi
DO_COM (do_ippon)
{
CHAR_DATA *victim;
char arg[MAX_INPUT_LENGTH];
argument = one_argument (argument, arg);
if (IS_NPC (ch))
return;
if (!IS_CLASS (ch, CLASS_NINJA))
{
stc ("Huh?\n\r", ch);
return;
}
if (ch->pcdata->powers[NPOWER_ASHIKO] < 4)
{
stc ("You need Ashiko 4, to use this power!\n\r", ch);
return;
}
if (arg[0] == '\0')
{
send_to_char ("Who do you want to Dazzle?\n\r", ch);
return;
}
if ((victim = get_char_room (ch, arg)) == NULL)
{
send_to_char ("They are not here.\n\r", ch);
return;
}
if (victim->position != POS_FIGHTING && victim->hit < victim->max_hit)
{
send_to_char ("Nothing happens.\n\r", ch);
}
if (is_safe (ch, victim))
{
return;
}
act ("A look of concentration crosses $n's face.", ch, NULL, NULL,
TO_ROOM);
send_to_char ("You cover your eyes as you are dazzled!\n\r", victim);
act ("$n covers $s eyes, looking dazzled!", victim, NULL, NULL, TO_ROOM);
stop_fighting (victim, TRUE);
update_pos (victim);
if (victim->position > POS_STUNNED)
victim->position = POS_STUNNED;
if (IS_NPC (victim))
multi_hit (victim, ch, TYPE_UNDEFINED);
WAIT_STATE (ch, 12);
return;
}