mongoose /*************************************************************************** * 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. * * * * Dystopia Mud improvements copyright (C) 2000, 2001 by Brian Graversen * * * * 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. * ***************************************************************************/ /*************************************************************************** * _/ _/ * * _/_/_/ _/_/ _/_/_/ _/ _/_/ _/ _/ _/_/_/ * * _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ * * _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ _/ * * _/ _/ _/ _/_/_/ _/ _/_/ _/_/_/ _/_/_/ * *************************************************************************** * Mindcloud Copyright 2001-2003 by Jeff Boschee (Zarius), * * Additional credits are in the help file CODECREDITS * * All Rights Reserved. * ***************************************************************************/ #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #include "interp.h" #include "magic.h" /* * Local functions. */ void do_level(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char skill[MSL]; char stance[MSL]; char buf[MSL]; float chgen = 0; float chgenexp = 0; int percent = 0; int nextgen = 0; int expneeded = 0; one_argument(argument, arg); ROOM_INDEX_DATA *room; if (IS_NPC(ch)) return; if (arg[0] == '\0') { stc("#0x#r----#R=====#r----#R=====#r----#R=====#r----#0x#n\n\r", ch); xprintf(buf, "#0You are currently generation #W%d#n\n\r", ch->generation); send_to_char(buf, ch); chgen = ch->generation; chgenexp = ch->genexp; if (ch->generation == 6) expneeded = 13000000.00; else if (ch->generation == 5) expneeded = 150000000.00; else if (ch->generation == 4) expneeded = 400000000.00; else if (ch->generation == 3) expneeded = 900000000.00; else if (ch->generation == 2) expneeded = 1800000000.00; percent = (chgenexp / expneeded) * 100.00; nextgen = (ch->generation - 1); //if (ch->generation > 1 && ch->level > 2) //{ // xprintf (buf, // "#0You are #R%d#W%% #0on your way to generation #R%d.#n\n\r", // percent, nextgen); // stc (buf, ch); // } if (ch->generation > 2 && ch->level > 2) { int x, howmany; howmany = percent / 2; xprintf(buf, "#0 Progress to gen %d #W[#R", nextgen); for (x = 1; x <= 50; x++) { if (x <= howmany) xcatf(buf, "#R*#n"); else xcatf(buf, "#0-#n"); } xcatf(buf, "#W]#n\n\r"); send_to_char(buf, ch); } stc("#0x#r----#R=====#r----#R=====#r----#R=====#r----#0x#n\n\r", ch); if (ch->stance[12] == 1) xprintf(stance, " Viper"); else if (ch->stance[12] == 2) xprintf(stance, " Crane"); else if (ch->stance[12] == 3) xprintf(stance, " Crab"); else if (ch->stance[12] == 4) xprintf(stance, " Mongoose"); else if (ch->stance[12] == 5) xprintf(stance, " PitBull"); else if (ch->stance[12] == 6) xprintf(stance, " Hawk"); else if (ch->stance[12] == 7) xprintf(stance, " Badger"); else if (ch->stance[12] == 8) xprintf(stance, " Cougar"; else if (ch->stance[12] == 9) xprintf(stance, " Wolverine"); else if (ch->stance[12] == 10) xprintf(stance, " Grizzly"); else if (ch->stance[12] == 11) xprintf(stance, " Wolf"); else if (ch->stance[12] == 13) xprintf(stance, " SS1"); else if (ch->stance[12] == 14) xprintf(stance, " SS2"); else if (ch->stance[12] == 15) xprintf(stance, " SS3"); else if (ch->stance[12] == 16) xprintf(stance, " Pizza"); else if (ch->stance[12] == 17) xprintf(stance, " Zarius"); else if (ch->stance[12] == -1) xprintf(stance, " None"); else xprintf(stance, " None"); xprintf(buf, "#0Autostance#n: #R%s #n\n\r", stance); send_to_char(buf, ch); if (IS_SET(ch->act, PLR_RIGHTHAND)) send_to_char ("#wYou favor your right arm in combat.#n\n\r", ch); else if (IS_SET(ch->act, PLR_LEFTHAND)) send_to_char ("#wYou favor your left arm in combat.#n\n\r", ch); else send_to_char ("#wYou fight well with both your arms.#n\n\r", ch); stc("#0x#r----#R=====#r----#R=====#r----#R=====#r----#0x#n\n\r", ch); if (IS_CLASS(ch, CLASS_DEMON)) send_to_char("You are a demon!\n\r", ch); if (IS_CLASS(ch, CLASS_MAGE)) send_to_char("You are a battlemage!\n\r", ch); if (IS_CLASS(ch, CLASS_SHAPESHIFTER)) send_to_char("You are a shapeshifter!\n\r", ch); if (IS_CLASS(ch, CLASS_UNDEAD_KNIGHT)) send_to_char("You are an undead knight!\n\r", ch); if (IS_CLASS(ch, CLASS_WEREWOLF)) send_to_char("You are a werewolf!\n\r", ch); if (IS_CLASS(ch, CLASS_NINJA)) send_to_char("You are a ninja!\n\r", ch); if (IS_CLASS(ch, CLASS_VAMPIRE)) send_to_char("You are a vampire!\n\r", ch); if (IS_CLASS(ch, CLASS_SAMURAI)) send_to_char("You are a Samurai!\n\r", ch); if (IS_CLASS(ch, CLASS_DROW)) send_to_char("You are a drow!\n\r", ch); if (IS_CLASS(ch, CLASS_ANGEL)) send_to_char("You are an angel!\n\r", ch); if (IS_CLASS(ch, CLASS_LICH)) send_to_char("You are a lich!\n\r", ch); if (IS_CLASS(ch, CLASS_SKYBLADE)) send_to_char("You are a SkyBlade!!\n\r", ch); if (IS_CLASS(ch, CLASS_GHOUL)) send_to_char ("You are a foul smelling #GGhoul#n!!\n\r", ch); if (IS_CLASS(ch, CLASS_DRACONIAN)) send_to_char("You are a Draconian!!\n\r", ch); if (IS_CLASS(ch, CLASS_TANARRI)) send_to_char ("You are a warrior of The Bloodwars.\n\r", ch); if (IS_CLASS(ch, CLASS_MONK)) stc("You are a monk!\n\r", ch); if (IS_CLASS(ch, CLASS_CYBORG)) stc("You are a Mix Between Man and Machine!\n\r", ch); if (IS_CLASS(ch, CLASS_SHADOW)) stc("You are a Shadow!\n\r", ch); if (IS_CLASS(ch, CLASS_PRIEST)) stc("You are a holy Priest\n\r", ch); if (IS_CLASS(ch, CLASS_JEDI)) stc("You are a Jedi Warrior!\n\r", ch); if (IS_CLASS(ch, CLASS_TANARRI)) { if (ch->pcdata->rank == TANARRI_FODDER) send_to_char ("You are nothing but fodder for the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_FIGHTER) send_to_char ("You are a fighter in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_ELITE) send_to_char ("You are an elite warrior in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_CAPTAIN) send_to_char ("You are a captain in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_WARLORD) send_to_char ("You are a warlord in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_BALOR) send_to_char("You are a Tanar'ri Balor.\n\r", ch); } if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (ch->pcdata->rank == AGE_TRUEBLOOD) send_to_char("You are a TrueBlood!\n\r", ch); else if (ch->pcdata->rank == AGE_LA_MAGRA) send_to_char("You are a La Magra!\n\r", ch); else if (ch->pcdata->rank == AGE_METHUSELAH) send_to_char("You are a Methuselah!\n\r", ch); else if (ch->pcdata->rank == AGE_ELDER) send_to_char("You are an Elder!\n\r", ch); else if (ch->pcdata->rank == AGE_ANCILLA) send_to_char("You are an Ancilla!\n\r", ch); else if (ch->pcdata->rank == AGE_NEONATE) send_to_char("You are a Neonate!\n\r", ch); else send_to_char("You are a Childe!\n\r", ch); } room = get_room_index(ch->home); xprintf(buf, "#0Recall Room#R : #Y%s#n\n\r", room->name); send_to_char(buf, ch); stc("#0x#r----#R=====#r----#R=====#r----#R=====#r----#0x#n\n\r", ch); stc("#wTo view weapons, use the argument weapons ('#Rlevel weapons#w')#n\n\r", ch); stc("#wTo view stances, use the argument stances ('#Blevel stances#w')#n\n\r", ch); stc("#wTo view spells, use the argument spells ('#Plevel spells#w')#n\n\r", ch); stc("#wTo view using old style dystopia method ('#Woldlevel#w')#n\n\r\n\r", ch); } else if (!str_cmp(arg, "weapons")) { stc(" ,/| #G(__ #0/|#l /(_)\\ #0|\\ #G__)#g |\\\n\r", ch); stc(" ,/ \\ #G, _#R`#G-\\ #0/' `\\#b \\#R`#b,#R'#b/ #0/' `\\ #G/-#R`#G__ >,#g / `\\\n\r", ch); stc(" / \\_#G/ / #7^^^ #0/' / | `\\#l_/\\^/\\#l_#0/' | \\ `\\ #7^^^#G \\ \\#g_/ `\\\n\r", ch); stc(" / | #G|| #0O | \\#b/' #0V#b `\\#0/ | O #G|| #g| \\\n\r", ch); stc("| | | /#G|| #0O |#l,-,| ,_;_, |,-,#0| O #G||#g\\ | | |\n\r", ch); stc("| | \\ | #G\\\\ #0oO#l \\ \\\\ '\\ I /` // / #0Oo #G// #g| / | |\n\r", ch); stc("| \\ /\\| #G| #Y) #0oO#l \\ \\#0`#b\\ \\ / /#0'#l/ / #0Oo #Y( #G| #g|/\\ / |\n\r", ch); stc("| \\ | ` #G/#Y/ #0O /^#l\\ \\#0,#b\\ | /#0,#l/ /#0^#l\\ #0O #Y\\#G\\ #g' | / |\n\r", ch); stc("| /'\\| #G( #Y| #0__________#0O /#0__#l/ /#0__#b| I |#0__#l\\ \\#0__#0\\ O#0__________ #Y| #G) #g|/`\\ |\n\r", ch); stc(" \\ | ` #G\\\\ #0| #0\\| #7''' ''' ``` ``` #0|/ #0| #Y/#G/ #g' | /\n\r", ch); stc(" \\| #r( #G|| #0| #rW#Reapon #rL#Revels #0| #Y( #G| #r) #g|/\n\r", ch); xprintf(skill, " #G\\ #G\\\\_// #0|Slice: #7%-4d #0Stab: #7%-4d #0Whip: #7%-4d #0Pierce: #7%-4d#0| #G\\\\_// #g/\n\r", ch->wpn[1], ch->wpn[2], ch->wpn[4], ch->wpn[11]); stc(skill, ch); xprintf(skill, " #G` `v' #0|Crush: #7%-4d #0Claw: #7%-4d #0Slash: #7%-4d #0Pound: #7%-4d#0| #G'v' #g'\n\r", ch->wpn[8], ch->wpn[5], ch->wpn[3], ch->wpn[7]); stc(skill, ch); xprintf(skill, " #G` `v' #0|Blast: #7%-4d #0Grep: #7%-4d #0Suck: #7%-4d #0Bite: #7%-4d #0| #G'v' #g'\n\r", ch->wpn[6], ch->wpn[9], ch->wpn[12], ch->wpn[10]); stc(skill, ch); xprintf(skill, " #0| Unarm: #7%-4d #0|\n\r", ch->wpn[0]); stc(skill, ch); stc(" #0|_______________________________________________#0|#n\n\r", ch); } else if (!str_cmp(arg, "magic") || !str_cmp(arg, "spells")) { stc(" #y_________________________________\n\r", ch); stc("#y/ _\\ \\\n\r", ch); stc("#y\\ (_/_____________________________/\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, " #y\\ #0*#rR#Red Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[1] + 20); else xprintf(skill, " #y\\ #0*#rR#Red Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[1]); stc(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, " #y\\ #0*#bB#Blue Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[2] + 20); else xprintf(skill, " #y\\ #0*#bB#Blue Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[2]); stc(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, " #y\\ #0*#gG#Green Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[3] + 20); else xprintf(skill, " #y\\ #0*#gG#Green Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[3]); stc(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, " #y__\\ #0*#pP#Purple Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[0] + 20); else xprintf(skill, " #y__\\ #0*#pP#Purple Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[0]); stc(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, " #y/ )_\\ #0*#yY#Yellow Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[4] + 20); else xprintf(skill, " #y/ )_\\ #0*#yY#Yellow Magic #0[#R%-3d#0]#y\\\n\r", ch->spl[4]); stc(skill, ch); stc(" #y\\___/______________________________/#n\n\r", ch); } else if (!str_cmp(arg, "stances")) { stc("#r _.--.\n\r", ch); stc(" #r.' ,--.`.\n\r", ch); stc(" #r,' ,' `|\n\r", ch); stc(" #r,' ,' '\n\r", ch); stc(" #r,' '\n\r", ch); stc(" #r,' '\n\r", ch); stc(" #r_,- ,'\n\r", ch); stc(" #r_,' | ____,-------.\n\r", ch); stc(" #r_,' `. _,---' ___,----. `.\n\r", ch); stc(" #r_,' #R_,---.#r ,-' ,-' `.|\n\r", ch); stc(" #r_,' #R_,-' _ `.#r ,' #R__#r ,' |'\n\r", ch); stc(" #r,' .--. #R_,-'__,--' `. `.#r ,'#R_,-' `.#r ,' ,'\n\r", ch); stc(" #r,' , ' `. #R,'_,-' `. .,'-'-. `.\n\r", ch); stc(" #r ,', ' #R,',' `. `-. `. `.\n\r", ch); stc(" #r,',' #0,''`)#r`.#R ,`. `. `.`-.`.\n\r", ch); stc(" #r,,' #0(( ' #r`.#R ,' _,-=-. `\\ `\\ #0|`.\\\n\r", ch); stc(" #r' ( #0`` #r`.#R ,' ,'-,' `. `) `)` #0))\n\r", ch); stc(" #r( ` #r` #R.' ,'#y-,#R' | #Y,#R; ; #0''\n\r", ch); stc(" #r`#R #R`: |---| `. ,'\n\r", ch); stc(" #R: |---| '. :\n\r", ch); stc(" #R: `.--`. '. :\n\r", ch); stc(" #R` ` ` ',`__)\n\r", ch); stc("#0X#r==============================#0[#rS#Rtance #rL#Revels#0]#r==============================#0X\n\r", ch); xprintf(skill, "#r|#0 Viper #7%-4d #0Crane #7%-4d #0Crab #7%-4d #0Mongoose #7%-4d #0PitBull #7%-4d#r |\n\r", ch->stance[1], ch->stance[2], ch->stance[3], ch->stance[4], ch->stance[5]); stc(skill, ch); xprintf(skill, "#r|#0 Hawk #7%-4d #0Badger #7%-4d #0Cougar #7%-4d #0Grizzly #7%-4d #0Wolverine |\n\r", ch->stance[6], ch->stance[7], ch->stance[8], ch->stance[10], ch->stance[9]); stc(skill, ch); stc("#0X#r==============================#0[#rS#Ruper #rS#Rtances#0]#r==============================#0X#n\n\r", ch); xprintf(skill, "#r|#0 SS1 #7%-4d #0SS2 #7%-4d #0SS3 #7%-4d #0Pizza #7%-4d #0Zarius #7%-4d#r |#n\n\r", ch->stance[13], ch->stance[14], ch->stance[15], ch->stance[16], ch->stance[17]); stc(skill, ch); stc("#r| |\n\r", ch); stc("#r| #7To gain super stances, you must max all your current stances. #r|\n\r", ch); stc("#r| #7After this, use 'setstance' to beging editing your superstance. #r|\n\r", ch); stc("#0X#r==============================#0[#r+#R-#r+#R-#r+#R-#r+#R-#r+#R-#r+#R-#r+#0]#r==============================#0X#n\n\r", ch); } else { do_level(ch, ""); } return; } void do_oldlevel(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char skill[MSL]; char stance[MSL]; one_argument(argument, arg); ROOM_INDEX_DATA *room; int percent = 0; int nextgen = 0; int expneeded = 0; float chgen = 0; float chgenexp = 0; if (IS_NPC(ch)) return; send_to_char ("---------------------------=[#CWeapon Levels#n]=--------------------------------\n\r", ch); xprintf(skill, "Slice : %-4d", ch->wpn[1]); send_to_char(skill, ch); xprintf(skill, " Stab : %-4d", ch->wpn[2]); send_to_char(skill, ch); xprintf(skill, " Slash : %-4d", ch->wpn[3]); send_to_char(skill, ch); xprintf(skill, " Whip : %-4d", ch->wpn[4]); send_to_char(skill, ch); xprintf(skill, " Claw : %-4d\n\r", ch->wpn[5]); send_to_char(skill, ch); xprintf(skill, "Blast : %-4d", ch->wpn[6]); send_to_char(skill, ch); xprintf(skill, " Pound : %-4d", ch->wpn[7]); send_to_char(skill, ch); xprintf(skill, " Crush : %-4d", ch->wpn[8]); send_to_char(skill, ch); xprintf(skill, " Grep : %-4d", ch->wpn[9]); send_to_char(skill, ch); xprintf(skill, " Bite : %-4d\n\r", ch->wpn[10]); send_to_char(skill, ch); xprintf(skill, "Pierce : %-4d", ch->wpn[11]); send_to_char(skill, ch); xprintf(skill, " Suck : %-4d", ch->wpn[12]); send_to_char(skill, ch); xprintf(skill, " Unarmed: %-4d\n\r\n", ch->wpn[0]); send_to_char(skill, ch); send_to_char ("---------------------------=[#CStance Levels#n]=--------------------------------\n\r", ch); xprintf(skill, "Viper : %-4d", ch->stance[1]); send_to_char(skill, ch); xprintf(skill, "Crane : %-4d", ch->stance[2]); send_to_char(skill, ch); xprintf(skill, "Crab : %-4d", ch->stance[3]); send_to_char(skill, ch); xprintf(skill, "Mongoose : %-4d", ch->stance[4]); send_to_char(skill, ch); xprintf(skill, "PitBull : %-4d\n\r", ch->stance[5]); send_to_char(skill, ch); xprintf(skill, "Hawk : %-4d", ch->stance[6]); send_to_char(skill, ch); xprintf(skill, "Badger : %-4d", ch->stance[7]); send_to_char(skill, ch); xprintf(skill, "Cougar : %-4d", ch->stance[8]); send_to_char(skill, ch); xprintf(skill, "Wolverine : %-4d", ch->stance[9]); send_to_char(skill, ch); xprintf(skill, "Grizzly : %-4d\n\r", ch->stance[10]); send_to_char(skill, ch); send_to_char ("\n\r---------------------------=[#CSuper Stances#n]=--------------------------------\n\r", ch); xprintf(skill, "SS1 : %-4d", ch->stance[13]); send_to_char(skill, ch); xprintf(skill, "SS2 : %-4d", ch->stance[14]); send_to_char(skill, ch); xprintf(skill, "SS3 : %-4d", ch->stance[15]); send_to_char(skill, ch); xprintf(skill, "Pizza : %-4d", ch->stance[16]); send_to_char(skill, ch); xprintf(skill, "Zarius : %-4d\n\r", ch->stance[17]); send_to_char(skill, ch); send_to_char ("\n\r---------------------------=[#CSpell Levels#n]=---------------------------------\n\r", ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, "#PPurple#n : %-4d", ch->spl[0] + 20); else xprintf(skill, "#PPurple#n : %-4d", ch->spl[0]); send_to_char(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, "#BBlue#n : %-4d", ch->spl[2] + 20); else xprintf(skill, "#BBlue#n : %-4d", ch->spl[2]); send_to_char(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, "#RRed#n : %-4d", ch->spl[1] + 20); else xprintf(skill, "#RRed#n : %-4d", ch->spl[1]); send_to_char(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, "#GGreen#n : %-4d", ch->spl[3] + 20); else xprintf(skill, "#GGreen#n : %-4d", ch->spl[3]); send_to_char(skill, ch); if (IS_ITEMAFF(ch, ITEMA_AFFENTROPY)) xprintf(skill, "#YYellow#n : %-4d\n\r\n", ch->spl[4] + 20); else xprintf(skill, "#YYellow#n : %-4d\n\r\n", ch->spl[4]); send_to_char(skill, ch); send_to_char ("---------------------------=[#CMisc. Things#n]=---------------------------------\n\r", ch); room = get_room_index(ch->home); xprintf(skill, "Recall Room : %s \n\r", room->name); send_to_char(skill, ch); if (ch->stance[12] == 1) xprintf(stance, " Viper"); else if (ch->stance[12] == 2) xprintf(stance, " Crane"); else if (ch->stance[12] == 3) xprintf(stance, " Crab"); else if (ch->stance[12] == 4) xprintf(stance, " Mongoose"); else if (ch->stance[12] == 5) xprintf(stance, " PitBull"); else if (ch->stance[12] == 6) xprintf(stance, " Hawk"); else if (ch->stance[12] == 7) xprintf(stance, " Badger"); else if (ch->stance[12] == 8) xprintf(stance, " Cougar"); else if (ch->stance[12] == 9) xprintf(stance, " Wolverine"); else if (ch->stance[12] == 10) xprintf(stance, " Grizzly"); else if (ch->stance[12] == 11) xprintf(stance, " Wolf"); else if (ch->stance[12] == 13) xprintf(stance, " SS1"); else if (ch->stance[12] == 14) xprintf(stance, " SS2"); else if (ch->stance[12] == 15) xprintf(stance, " SS3"); else if (ch->stance[12] == 16) xprintf(stance, " Pizza"); else if (ch->stance[12] == 17) xprintf(stance, " Zarius"); else if (ch->stance[12] == -1) xprintf(stance, " None"); else xprintf(stance, " None"); xprintf(skill, "#pAutostance#n: %s #n\n\r", stance); send_to_char(skill, ch); if (IS_SET(ch->act, PLR_RIGHTHAND)) send_to_char("You favor your right arm in combat.\n\r", ch); else if (IS_SET(ch->act, PLR_LEFTHAND)) send_to_char("You favor your left arm in combat.\n\r", ch); else send_to_char("You fight well with both your arms.\n\r", ch); send_to_char ("---------------------------=[#CClass Things#n]=---------------------------------\n\r", ch); if (IS_CLASS(ch, CLASS_DEMON)) send_to_char("You are a demon!\n\r", ch); if (IS_CLASS(ch, CLASS_MAGE)) send_to_char("You are a battlemage!\n\r", ch); if (IS_CLASS(ch, CLASS_SHAPESHIFTER)) send_to_char("You are a shapeshifter!\n\r", ch); if (IS_CLASS(ch, CLASS_UNDEAD_KNIGHT)) send_to_char("You are an undead knight!\n\r", ch); if (IS_CLASS(ch, CLASS_WEREWOLF)) send_to_char("You are a werewolf!\n\r", ch); if (IS_CLASS(ch, CLASS_NINJA)) send_to_char("You are a ninja!\n\r", ch); if (IS_CLASS(ch, CLASS_VAMPIRE)) send_to_char("You are a vampire!\n\r", ch); if (IS_CLASS(ch, CLASS_SAMURAI)) send_to_char("You are a Samurai!\n\r", ch); if (IS_CLASS(ch, CLASS_DROW)) send_to_char("You are a drow!\n\r", ch); if (IS_CLASS(ch, CLASS_ANGEL)) send_to_char("You are an angel!\n\r", ch); if (IS_CLASS(ch, CLASS_HOBBIT)) send_to_char("#R[#nYou are a #CHobbit#R]\n\r", ch); if (IS_CLASS(ch, CLASS_GIANT)) send_to_char("#R[#nYou are a #Cgiant#R]\n\r", ch); if (IS_CLASS(ch, CLASS_LICH)) send_to_char("You are a lich!\n\r", ch); if (IS_CLASS(ch, CLASS_FAE)) stc("#R[#nYou are a #CFae#R]\n\r", ch); if (IS_CLASS(ch, CLASS_DRONE)) stc("#R[#nYou are a #CDrone#R]\n\r", ch); if (IS_CLASS(ch, CLASS_DROID)) stc("#R[#nYou are a #Spider Droid#R]\n\r", ch); if (IS_CLASS(ch, CLASS_TANARRI)) send_to_char("You are a warrior of The Bloodwars.\n\r", ch); if (IS_CLASS(ch, CLASS_MONK)) stc("You are a monk!\n\r", ch); if (IS_CLASS(ch, CLASS_CYBORG)) stc("You are a Mix Between Man and Machine!\n\r", ch); chgen = ch->generation; chgenexp = ch->genexp; if (ch->generation == 6) expneeded = 13000000.00; else if (ch->generation == 5) expneeded = 150000000.00; else if (ch->generation == 4) expneeded = 400000000.00; else if (ch->generation == 3) expneeded = 900000000.00; else if (ch->generation == 2) expneeded = 1800000000.00; percent = (chgenexp / expneeded) * 100.00; nextgen = (ch->generation - 1); if (ch->generation > 1 && ch->level > 2) { xprintf(skill, "You are #R%d#W%% #non your way to generation #Y%d.#n\n\r", percent, nextgen); //stc(skill,ch); //xprintf(skill, "Generation : %d\n\r", ch->generation); send_to_char(skill, ch); } if (IS_CLASS(ch, CLASS_TANARRI)) { if (ch->pcdata->rank == TANARRI_FODDER) send_to_char ("You are nothing but fodder for the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_FIGHTER) send_to_char ("You are a fighter in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_ELITE) send_to_char ("You are an elite warrior in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_CAPTAIN) send_to_char ("You are a captain in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_WARLORD) send_to_char ("You are a warlord in the great war.\n\r", ch); if (ch->pcdata->rank == TANARRI_BALOR) send_to_char("You are a Tanar'ri Balor.\n\r", ch); } if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (ch->pcdata->rank == AGE_TRUEBLOOD) send_to_char("You are a TrueBlood!\n\r", ch); else if (ch->pcdata->rank == AGE_LA_MAGRA) send_to_char("You are a La Magra!\n\r", ch); else if (ch->pcdata->rank == AGE_METHUSELAH) send_to_char("You are a Methuselah!\n\r", ch); else if (ch->pcdata->rank == AGE_ELDER) send_to_char("You are an Elder!\n\r", ch); else if (ch->pcdata->rank == AGE_ANCILLA) send_to_char("You are an Ancilla!\n\r", ch); else if (ch->pcdata->rank == AGE_NEONATE) send_to_char("You are a Neonate!\n\r", ch); else send_to_char("#R[You are a #CChilde#R]\n\r", ch); if (IS_SET(ch->special, SPC_PRINCE)) send_to_char("#R[#nYou are a #Cprince#R]\n\r", ch); } } void do_smother(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; ROOM_INDEX_DATA *inroom; one_argument(argument, arg); if (IS_NPC(ch)) return; inroom = ch->in_room; if (arg[0] == '\0' && !IS_SET(inroom->room_flags, ROOM_FLAMING)) { send_to_char("Smother whom?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (!IS_AFFECTED(victim, AFF_FLAMING)) { send_to_char("But they are not on fire!\n\r", ch); return; } if (number_percent() > (ch->level * 10)) { act("You try to smother the flames around $N but fail!", ch, NULL, victim, TO_CHAR); act("$n tries to smother the flames around you but fails!", ch, NULL, victim, TO_VICT); act("$n tries to smother the flames around $N but fails!", ch, NULL, victim, TO_NOTVICT); if (number_percent() > 98 && !IS_AFFECTED(ch, AFF_FLAMING)) { act("A spark of flame from $N's body sets you on fire!", ch, NULL, victim, TO_CHAR); act("A spark of flame from your body sets $n on fire!", ch, NULL, victim, TO_VICT); act("A spark of flame from $N's body sets $n on fire!", ch, NULL, victim, TO_NOTVICT); SET_BIT(ch->affected_by, AFF_FLAMING); do_humanity(ch, ""); } return; } act("You manage to smother the flames around $M!", ch, NULL, victim, TO_CHAR); act("$n manages to smother the flames around you!", ch, NULL, victim, TO_VICT); act("$n manages to smother the flames around $N!", ch, NULL, victim, TO_NOTVICT); REMOVE_BIT(victim->affected_by, AFF_FLAMING); do_humanity(ch, ""); return; } void do_introduce(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->generation > 0 && ch->generation < 14) { if (ch->generation == 1) { xprintf(buf, "My name is %s. I am of the First Generation. I am the Sire of all Kindred.\n\r", ch->name); do_say(ch, buf); } else if (ch->generation == 2) { xprintf(buf, "My name is %s. I am of the Second Generation. My sire is Caine.\n\r", ch->name); do_say(ch, buf); } else if (ch->generation == 3) { xprintf(buf, "My name is %s. I am of the Third Generation. My sire is Caine.\n\r", ch->name); do_say(ch, buf); } else if (ch->generation > 3) { xprintf(buf, "My name is %s. I am of the %dth Generation. My sire is Caine.\n\r", ch->name, ch->generation); do_say(ch, buf); } else return; } else if (IS_CLASS(ch, CLASS_WEREWOLF) && IS_HERO(ch) && ch->generation > 0 && ch->generation < 7) { if (ch->generation == 1) { xprintf(buf, "My name is %s. I am the chosen champion of Gaia.\n\r", ch->name); do_say(ch, buf); } else if (ch->generation > 1) { xprintf(buf, "My name is %s. I am the pup of Gaia.", ch->name); do_say(ch, buf); } return; } else send_to_char("Huh?\n\r", ch); return; } void do_dragon(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; int dam = 0; if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_VICI] < 8) { send_to_char ("You must have at least level 8 Vicissitude to use Dragon Breath.\n\r", ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char("You aren't fighting anyone.\n\r", ch); return; } if (!IS_EXTRA(ch, EXTRA_DRAGON)) { send_to_char ("You must be in Dragonform to use Dragonbreath.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 6) { send_to_char("You have insufficient blood.\n\r", ch); return; } WAIT_STATE(ch, 12); if (!IS_NPC(victim)) { dam = ch->power[DISC_VAMP_VICI] * 50; } if (IS_NPC(victim)) { dam = ch->power[DISC_VAMP_VICI] * 200; } ch->pcdata->condition[COND_THIRST] -= 6; if ((!IS_NPC(victim)) && IS_CLASS(victim, CLASS_VAMPIRE)) { dam *= 1.5; } if ((!IS_NPC(victim)) && IS_CLASS(victim, CLASS_WEREWOLF)) { if (ch->power[DISC_WERE_BOAR] > 2) dam *= 1.5; } if (dam <= 0) dam = 1; xprintf(buf, "Your flame fries $N! [%d]\n\r", dam); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "$n's flame fries you! [%d]\n\r", dam); act(buf, ch, NULL, victim, TO_VICT); xprintf(buf, "$n's flame fries $N! [%d]\n\r", dam); act(buf, ch, NULL, victim, TO_NOTVICT); hurt_person(ch, victim, dam); if (!IS_AFFECTED(victim, AFF_FLAMING)) SET_BIT(victim->affected_by, AFF_FLAMING); return; } void do_taste(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; char age[MAX_STRING_LENGTH]; char lin[MAX_STRING_LENGTH]; char lord[MAX_STRING_LENGTH]; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_THAU] < 1) { send_to_char ("You must obtain at least level 1 in Thaumaturgy to use Taste of Blood.\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (!IS_CLASS(victim, CLASS_VAMPIRE)) { send_to_char("Only useful on vampire targets.\n\r", ch); return; } if (IS_NPC(victim)) { send_to_char("Only useful on vampire targets.\n\r", ch); return; } xprintf(buf, "You examine $N's blood carefully.\n\r"); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "$n examines your blood carefully.\n\r"); act(buf, ch, NULL, victim, TO_VICT); xprintf(buf, "$n examines $N's blood carefully.\n\r"); act(buf, ch, NULL, victim, TO_NOTVICT); send_to_char("\n\r", ch); send_to_char("\n\r", victim); if (victim->pcdata->rank == AGE_ANCILLA) xprintf(age, "Ancilla"); else if (victim->pcdata->rank == AGE_CHILDE) xprintf(age, "Childe"); else if (victim->pcdata->rank == AGE_NEONATE) xprintf(age, "Neonate"); else if (victim->pcdata->rank == AGE_ELDER) xprintf(age, "Elder"); else if (victim->pcdata->rank == AGE_METHUSELAH) xprintf(age, "Methuselah"); else if (victim->pcdata->rank == AGE_LA_MAGRA) xprintf(age, "La Magra"); else if (victim->pcdata->rank == AGE_TRUEBLOOD) xprintf(age, "TrueBlood"); if (victim->lord == NULL) xprintf(lord, "None"); else xprintf(lord, "%s", victim->lord); xprintf(lin, "---------------------------------------------------------------------------\n\r"); send_to_char(lin, ch); send_to_char(" Vampire Status\n\r", ch); send_to_char(lin, ch); xprintf(buf, "Generation:%d Bloodpool:%d Age:%s Lord:%s\n\r", victim->generation, victim->pcdata->condition[COND_THIRST], age, lord); send_to_char(buf, ch); send_to_char(lin, ch); send_to_char(" Disciplines\n\r", ch); send_to_char(lin, ch); xprintf(buf, "Animalism: [%d] Celerity: [%d] Fortitude: [%d]\n\r", victim->power[DISC_VAMP_ANIM], victim->power[DISC_VAMP_CELE], victim->power[DISC_VAMP_FORT]); send_to_char(buf, ch); xprintf(buf, "Obtenebration:[%d] Presence: [%d] Quietus: [%d]\n\r", victim->power[DISC_VAMP_OBTE], victim->power[DISC_VAMP_PRES], victim->power[DISC_VAMP_QUIE]); send_to_char(buf, ch); xprintf(buf, "Thaumaturgy: [%d] Auspex: [%d] Dominate: [%d]\n\r", victim->power[DISC_VAMP_THAU], victim->power[DISC_VAMP_AUSP], victim->power[DISC_VAMP_DOMI]); send_to_char(buf, ch); xprintf(buf, "Obfuscate: [%d] Potence: [%d] Protean: [%d]\n\r", victim->power[DISC_VAMP_OBFU], victim->power[DISC_VAMP_POTE], victim->power[DISC_VAMP_PROT]); send_to_char(buf, ch); xprintf(buf, "Serpentis: [%d] Vicissitude:[%d] Daimoinon: [%d]\n\r", victim->power[DISC_VAMP_SERP], victim->power[DISC_VAMP_VICI], victim->power[DISC_VAMP_DAIM]); send_to_char(buf, ch); send_to_char(lin, ch); return; } void do_shadowstep(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; if (IS_NPC(ch)) return; argument = one_argument(argument, arg); if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_OBTE] < 4) { send_to_char ("You must obtain at least level 4 in Obtenebration to use this power.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Shadowstep to who?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (IS_SET(victim->in_room->room_flags, ROOM_ASTRAL)) { stc("You can't find it's room.\n\r", ch); return; } if (IS_SET(ch->in_room->room_flags, ROOM_ASTRAL)) { stc("Your room is not connected to the astral plane.\n\r", ch); return; } if (IS_IMMUNE(victim, IMM_TRAVEL)) { send_to_char("He doesnt want you near him!\n\r", ch); return; } if (IS_SET(victim->act, ACT_NOTRAVEL)) { send_to_char("No Can Do.\n\r", ch); return; } if (ch == victim) { send_to_char("But you're already at yourself!\n\r", ch); return; } if (IS_NPC(victim) && (!room_is_dark(victim->in_room))) { send_to_char("You cant find a shadow in his room.\n\r", ch); return; } if (room_is_private(victim->in_room)) { send_to_char("That room is private right now.\n\r", ch); return; } if (victim->in_room == ch->in_room) { send_to_char("But you're already there!\n\r", ch); return; } char_from_room(ch); char_to_room(ch, victim->in_room); act("You step into the shadows and appear before $N.", ch, NULL, victim, TO_CHAR); act("$n appears out of the shadows before $N.", ch, NULL, victim, TO_NOTVICT); act("$n appears from the shadows in front of you.", ch, NULL, victim, TO_VICT); do_look(ch, "auto"); return; } void do_earthmeld(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; CHAR_DATA *mount; one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_PROT] < 4) { send_to_char ("You must obtain at least level 4 Protean to use Earthmeld.\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char("Not while polymorphed.\n\r", ch); return; } if (has_timer(ch)) return; if (IS_NPC(ch) || IS_EXTRA(ch, EXTRA_EARTHMELD)) { REMOVE_BIT(ch->affected_by, AFF_SHIFT); REMOVE_BIT(ch->extra, EXTRA_EARTHMELD); REMOVE_BIT(ch->act, PLR_WIZINVIS); if (IS_HEAD(ch, LOST_HEAD)) REMOVE_BIT(ch->loc_hp[0], LOST_HEAD); free_string(ch->morph); ch->morph = str_dup(""); send_to_char("You rise up from the ground.\n\r", ch); xprintf(buf, "%s rises up from the ground", ch->name); act(buf, ch, NULL, NULL, TO_ROOM); return; } if ((mount = ch->mount) != NULL) do_dismount(ch, ""); SET_BIT(ch->affected_by, AFF_SHIFT); SET_BIT(ch->extra, EXTRA_EARTHMELD); SET_BIT(ch->act, PLR_WIZINVIS); free_string(ch->morph); ch->morph = str_dup("Someone"); send_to_char("You sink into the ground.\n\r", ch); xprintf(buf, "%s sinks into the ground.", ch->name); act(buf, ch, NULL, NULL, TO_ROOM); return; } void do_serenity(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("huh?.\n\r", ch); return; } if (ch->power[DISC_VAMP_ANIM] < 2) { send_to_char ("You must obtain at least level 2 in Animalism to use Song of Serenity.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->beast < 1) { if (ch->rage < 1) { send_to_char ("Your beast doesn't control your actions.\n\r", ch); return; } send_to_char ("You chant a soft tune and pacify your inner beast.\n\r", ch); act("$n chants a soft tune and pacifies their inner beast.", ch, NULL, NULL, TO_ROOM); ch->rage = 0; if (IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) do_nightsight(ch, ""); if (IS_VAMPAFF(ch, VAM_FANGS)) do_fangs(ch, ""); if (IS_VAMPAFF(ch, VAM_CLAWS)) do_claws(ch, ""); WAIT_STATE(ch, 12); return; } else { send_to_char ("Only those who achieve Golconda can sing the Song of Serenity.\n\r", ch); return; } } void do_theft(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; int bloodpool; int blpr; /* Blood sucked storage variable. Shakti */ argument = one_argument(argument, arg); if (ch->generation <= 0) ch->generation = 4; { if (IS_SET(ch->newbits, NEW_TIDE)) bloodpool = (3000 / ch->generation); else bloodpool = (2000 / ch->generation); } if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_THAU] < 4) { send_to_char ("You must obtain at least level 4 in Thaumaturgy to use Theft of Vitae.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Steal blood from whom?\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_POLYMORPH) && !IS_VAMPAFF(ch, VAM_DISGUISED)) { send_to_char("Not while polymorphed.\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (IS_NPC(victim) && IS_SET(victim->act, ACT_NOAUTOKILL)) { send_to_char("You can't do that to them.\n\r", ch); return; } if (!IS_NPC(victim) && victim->pcdata->condition[COND_THIRST] <= 0) { send_to_char("There isn't enough blood to steal.\n\r", ch); return; } if (!IS_NPC(victim) && IS_IMMORTAL(victim) && victim != ch) { send_to_char ("You can only steal blood from Avatar's or lower.\n\r", ch); return; } if (is_safe(ch, victim) == TRUE) return; if (!IS_NPC(victim)) { xprintf(buf, "A stream of blood shoots from %s into your body.", victim->name); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "A stream of blood shoots from %s into %s.", victim->name, ch->name); act(buf, ch, NULL, victim, TO_ROOM); xprintf(buf, "A stream of blood shoots from your body into %s.", ch->name); act(buf, ch, NULL, victim, TO_VICT); } else { xprintf(buf, "A stream of blood shoots from %s into your body.", victim->short_descr); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "A stream of blood shoots from %s into %s.", victim->short_descr, ch->name); act(buf, ch, NULL, victim, TO_ROOM); xprintf(buf, "A stream of blood shoots from your body into %s.", ch->name); act(buf, ch, NULL, victim, TO_VICT); } ch->pcdata->condition[COND_THIRST] += number_range(10, 15); if (IS_NPC(victim)) { /* Raw-killing it from one theft is stupid. Im going to use the primal */ /* stat on the mobs for blood its quick, effective, and straightford, AND */ /* no new fields have to be added to the mob.Shakti 09/07/98 */ (blpr = number_range(30, 40)); (victim->practice -= blpr); (ch->pcdata->condition[COND_THIRST] += blpr); if (victim->practice < 0) { xprintf(buf, "%s falls over dead.", victim->short_descr); act(buf, ch, NULL, victim, TO_ROOM); act(buf, ch, NULL, victim, TO_CHAR); raw_kill(victim, ch); } if (ch->pcdata->condition[COND_THIRST] >= bloodpool / ch->generation) { ch->pcdata->condition[COND_THIRST] = bloodpool / ch->generation; } if (ch->fighting == NULL) set_fighting(ch, victim, TRUE); return; } if (IS_SET(victim->act, PLR_ACID)) { send_to_char("Their blood is a deadly acid!\n\r", ch); hurt_person(victim, ch, 300); victim->pcdata->condition[COND_THIRST] -= 30; return; } if (!IS_NPC(victim)) { victim->pcdata->condition[COND_THIRST] -= number_range(30, 40); } if (ch->pcdata->condition[COND_THIRST] >= bloodpool / ch->generation) { ch->pcdata->condition[COND_THIRST] = bloodpool / ch->generation; } if (victim->pcdata->condition[COND_THIRST] <= 0) { victim->pcdata->condition[COND_THIRST] = 0; } if (ch->fighting == NULL) set_fighting(ch, victim, TRUE); return; } void do_demonform(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_DEMON)) { send_to_char("Huh?\n\r", ch); return; } if (!IS_DEMPOWER(ch, DEM_FORM) && IS_CLASS(ch, CLASS_DEMON)) { send_to_char ("You haven't been granted the gift of demonform.\n\r", ch); return; } if (IS_POLYAFF(ch, POLY_ZULOFORM)) { REMOVE_BIT(ch->polyaff, POLY_ZULOFORM); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); act("You transform into human form.", ch, NULL, NULL, TO_CHAR); act("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM); ch->damroll -= 200; ch->hitroll -= 200; ch->armor += 300; free_string(ch->morph); ch->morph = str_dup(""); return; } else if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char("You cant demon form when changed.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); act("You transform into a huge demon.", ch, NULL, NULL, TO_CHAR); act("$n's body grows and distorts into a huge demon.", ch, NULL, NULL, TO_ROOM); ch->pcdata->mod_str = 15; ch->pcdata->mod_dex = 15; SET_BIT(ch->polyaff, POLY_ZULOFORM); SET_BIT(ch->affected_by, AFF_POLYMORPH); xprintf(buf, "%s the huge hulking demon", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); ch->damroll += 200; ch->hitroll += 200; ch->armor -= 300; return; } void do_zuloform(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (ch->power[DISC_VAMP_VICI] < 2) { send_to_char ("You must obtain at least level 2 in Vicissitude to use Zuloform.\n\r", ch); return; } if (IS_EXTRA(ch, EXTRA_DRAGON)) { send_to_char("You cannot unzulo while a dragon.\n\r", ch); return; } if (IS_POLYAFF(ch, POLY_DRAGON)) { stc("You can't do that.\n\r", ch); return; } if (IS_POLYAFF(ch, POLY_ZULOFORM)) { REMOVE_BIT(ch->polyaff, POLY_ZULOFORM); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); act("You transform into human form.", ch, NULL, NULL, TO_CHAR); act("$n's shrinks back into human form.", ch, NULL, NULL, TO_ROOM); if (ch->hit < 1) ch->hit = 1; ch->damroll = ch->damroll - 150; ch->hitroll = ch->hitroll - 150; free_string(ch->morph); ch->morph = str_dup(""); return; } else if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char("You cant zulo when changed.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 200) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); ch->pcdata->condition[COND_THIRST] -= number_range(100, 200); act("You transform into large beast.", ch, NULL, NULL, TO_CHAR); act("$n's body grows and distorts into a large beast.", ch, NULL, NULL, TO_ROOM); ch->pcdata->mod_str = 15; ch->pcdata->mod_dex = 15; SET_BIT(ch->polyaff, POLY_ZULOFORM); SET_BIT(ch->affected_by, AFF_POLYMORPH); xprintf(buf, "A big black monster"); free_string(ch->morph); ch->morph = str_dup(buf); ch->damroll = ch->damroll + 150; ch->hitroll = ch->hitroll + 150; return; } void horn args((CHAR_DATA * ch)); /* claw and fang commands */ void declaw(CHAR_DATA * ch) { if (!IS_VAMPAFF(ch, VAM_CLAWS)) return; send_to_char("You retract your claws.\n\r", ch); act("$n retracts $s claws.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); } void dehorn(CHAR_DATA * ch) { if (!IS_VAMPAFF(ch, VAM_HORNS)) return; send_to_char("Your horns burrow back into your skull.\n\r", ch); act("$n's horns retract into $s skull.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS); } void horn(CHAR_DATA * ch) { OBJ_DATA *obj; if (IS_VAMPAFF(ch, VAM_HORNS)) return; /* * Only certain demons may use their horns */ if (ch->power[DISC_DAEM_ATTA] < 4) return; send_to_char("Sharp horns grow out of your skull.\n\r", ch); act("Sharp horns grow out of $n's skull.", ch, NULL, NULL, TO_ROOM); if ((obj = get_eq_char(ch, WEAR_HEAD)) != NULL) { act("Your horns shred $p.", ch, obj, NULL, TO_CHAR); act("$n's horns shred $p.", ch, obj, NULL, TO_ROOM); extract_obj(obj); } SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_HORNS); } void defang(CHAR_DATA * ch) { if (!IS_VAMPAFF(ch, VAM_FANGS)) return; send_to_char("Your fangs slide back into your gums.\n\r", ch); act("$n retracts $s fangs back into $s gums.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS); } void do_isauto(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; send_to_char("That power is automatic.\n\r", ch); return; } void do_claws(CHAR_DATA * ch, char *argument) { if (IS_CLASS(ch, CLASS_WEREWOLF)) { if (ch->power[DISC_WERE_WOLF] < 1) { stc("Huh?\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_DEMON)) { if (!IS_DEMPOWER(ch, DEM_CLAWS) && ch->power[DISC_DAEM_ATTA] < 1) { send_to_char ("You haven't been granted the gift of claws or attack is below level 1.\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (ch->power[DISC_VAMP_PROT] < 2) { stc("Huh?\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_TANARRI)) { if (!IS_SET(ch->pcdata->powers[TANARRI_POWER], TANARRI_CLAWS)) { send_to_char("Huh?\n\r", ch); return; } } else { stc("Huh?\n\r", ch); return; } if (IS_VAMPAFF(ch, VAM_CLAWS)) { if (IS_CLASS(ch, CLASS_VAMPIRE) || IS_CLASS(ch, CLASS_DEMON)) { if (ch->rage > 0) { send_to_char ("You cannot retract your claws while the beast is within you.\n\r", ch); return; } } send_to_char("You retract your claws.\n\r", ch); act("$n retracts $s claws.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); } else { send_to_char("Wicked claws extend from your fingers.\n\r", ch); act("Long sharp claws extend from $n's fingers.", ch, NULL, NULL, TO_ROOM); remove_obj(ch, WEAR_WIELD, TRUE); remove_obj(ch, WEAR_HOLD, TRUE); remove_obj(ch, WEAR_THIRD, TRUE); remove_obj(ch, WEAR_FOURTH, TRUE); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); } } void do_fangs(CHAR_DATA * ch, char *argument) { if (IS_CLASS(ch, CLASS_WEREWOLF)) { if (ch->power[DISC_WERE_WOLF] < 2) { stc("Huh?\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_DEMON)) { if (!IS_DEMPOWER(ch, DEM_FANGS) && ch->power[DISC_DAEM_ATTA] < 2) { send_to_char ("You haven't been granted the gift of fangs.\n\r", ch); return; } } else if (!IS_CLASS(ch, CLASS_VAMPIRE)) { stc("Huh?\n\r", ch); return; } if (IS_VAMPAFF(ch, VAM_FANGS)) { if (IS_CLASS(ch, CLASS_VAMPIRE) || IS_CLASS(ch, CLASS_DEMON)) { if (ch->rage > 0) { send_to_char ("You cannot retract your fangs while the beast is within you.\n\r", ch); return; } } send_to_char("Your fangs slide back into your gums.\n\r", ch); act("$n retracts $s fangs back into $s gums.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS); } else { send_to_char("Sharp fangs slide out of your gums.\n\r", ch); act("Sharp fangs slide out of $n's gums.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS); } } void do_nightsight(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (IS_CLASS(ch, CLASS_WEREWOLF)) { /*supposed to be < but changedd while gifts are out */ if (ch->power[DISC_WERE_HAWK] < 1) { send_to_char ("Your power in hawk is not great enough yet.\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_DEMON)) { if (!IS_DEMPOWER(ch, DEM_EYES)) { send_to_char ("You haven't been granted the gift of nightsight.\n\r", ch); return; } } else if (IS_CLASS(ch, CLASS_MONK)) { if (ch->monkab[AWARE] < 1) { stc("You must obtain level one in Awareness to use Nightsight.\n\r", ch); return; } } else if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_PROT] < 1 && ch->power[DISC_VAMP_OBTE] < 3) { send_to_char ("You must obtain at least level 1 in Protean or 3 in Obtenebration.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->rage > 0) { send_to_char("Not while your beast is in control.\n\r", ch); return; } if (IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) { send_to_char("The red glow in your eyes fades.\n\r", ch); act("The red glow in $n's eyes fades.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT); return; } send_to_char("Your eyes start glowing red.\n\r", ch); act("$n's eyes start glowing red.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT); return; } void do_inconnu(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->pcdata->rank < AGE_ELDER) { send_to_char ("You must be at least an Elder to become an Inconnu.\n\r", ch); return; } if (IS_SET(ch->special, SPC_INCONNU)) { send_to_char("But you are already an Inconnu!\n\r", ch); return; } if (ch->exp < 1000000) { send_to_char("It costs 1000000 exp to become an Inconnu.\n\r", ch); return; } ch->exp -= 1000000; send_to_char("You are now an Inconnu.\n\r", ch); xprintf(buf, "%s is now an Inconnu!", ch->name); do_info(ch, buf); SET_BIT(ch->special, SPC_INCONNU); return; } void do_shadowsight(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (IS_CLASS(ch, CLASS_WEREWOLF) && ch->power[DISC_WERE_HAWK] < 2) { stc("Huh?\n\r", ch); return; } else if (IS_CLASS(ch, CLASS_GHOUL) && ch->pcdata->powers[GPOWER_SHADOW] < 1) { stc("You need level 2 in Shadow Power\n\r", ch); return; } else if (IS_CLASS(ch, CLASS_SKYBLADE) && ch->pcdata->powers[SKYBLADE_POWER] < 2) { stc("You need level 2 in Skyblade Power\n\r", ch); return; } else if (IS_CLASS(ch, CLASS_MONK) && ch->monkab[AWARE] < 2) { stc("Huh?\n\r", ch); return; } else if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_OBTE] < 2) { send_to_char("Huh?\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_SHADOWSIGHT)) { send_to_char("You can no longer see between planes.\n\r", ch); REMOVE_BIT(ch->affected_by, AFF_SHADOWSIGHT); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->pcdata->condition[COND_THIRST] < 10) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE)) ch->pcdata->condition[COND_THIRST] -= number_range(5, 10); send_to_char("You can now see between planes.\n\r", ch); SET_BIT(ch->affected_by, AFF_SHADOWSIGHT); return; } void do_class(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if (IS_NPC(ch)) return; if (arg1[0] == '\0' || arg2[0] == '\0') { send_to_char("Syntax: class <char> <class>.\n\r", ch); send_to_char("#W--==[ #RMindcloud Classes #W]==--#n\n\r", ch); send_to_char("#0Demon, Werewolf, Drow, \n\r", ch); send_to_char("#0Ninja, Vampire, Shapeshifter\n\r", ch); send_to_char("#0Battlemage, Tanar'ri, Undead Knight#n\n\r", ch); send_to_char("#0Cyborg, Samurai, Monk\n\r", ch); send_to_char("#0Angel, Lich, Drone#n\n\r", ch); send_to_char("#0SkyBlade, Ghoul, Draconian#n\n\r", ch); send_to_char("#0Thief, Shadow, Giant#n\n\r", ch); send_to_char("#0Priest, Jedi, Fae\n\r", ch); send_to_char("#0Hobbit\n\r", ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { send_to_char("That player is not here.\n\r", ch); return; } do_clearcrap(ch, ""); if (!str_cmp(arg2, "demon")) { victim->class = CLASS_DEMON; set_learnable_disciplines(victim); send_to_char("You are now a demon!\n\r", victim); } else if (!str_cmp(arg2, "fae")) { victim->class = CLASS_FAE; set_learnable_disciplines(victim); send_to_char("You are one of the Fae.\n\r", victim); } else if (!str_cmp(arg2, "drone")) { victim->class = CLASS_DRONE; send_to_char("You are now a drone.\n\r", victim); } else if (!str_cmp(arg2, "tanarri")) { victim->class = CLASS_TANARRI; send_to_char("You are now a Tanar'ri.\n\r", victim); } else if (!str_cmp(arg2, "draconian")) { victim->class = CLASS_DRACONIAN; stc("You are now a Draconian!\n\r", victim); } else if (!str_cmp(arg2, "jedi")) { victim->class = CLASS_JEDI; stc("You are now a Jedi\n\r", victim); } else if (!str_cmp(arg2, "priest")) { victim->class = CLASS_PRIEST; stc("You are now a priest!\n\r", victim); } else if (!str_cmp(arg2, "shadow")) { victim->class = CLASS_SHADOW; stc("You are now a Dark Assasin Shadow!\n\r", victim); } else if (!str_cmp(arg2, "thief")) { victim->class = CLASS_THIEF; stc("You are now a Dirty Bird Thief!\n\r", victim); } else if (!str_cmp(arg2, "ghoul")) { victim->class = CLASS_GHOUL; send_to_char("You are now a Freaky Ghoul.\n\r", victim); } else if (!str_cmp(arg2, "undeadknight")) { victim->class = CLASS_UNDEAD_KNIGHT; send_to_char("You are now an Undead Knight.\n\r", victim); } else if (!str_cmp(arg2, "shapeshifter")) { victim->class = CLASS_SHAPESHIFTER; send_to_char("You are now a Shapeshifter.\n\r", victim); } else if (!str_cmp(arg2, "angel")) { victim->class = CLASS_ANGEL; send_to_char("You are now an Angel.\n\r", victim); } else if (!str_cmp(arg2, "lich")) { victim->class = CLASS_LICH; send_to_char("You are now a Lich.\n\r", victim); } else if (!str_cmp(arg2, "mage")) { victim->class = CLASS_MAGE; send_to_char("You are now a mage!\n\r", victim); } else if (!str_cmp(arg2, "werewolf")) { victim->class = CLASS_WEREWOLF; set_learnable_disciplines(victim); send_to_char("You are now a werewolf!\n\r", victim); } else if (!str_cmp(arg2, "vampire")) { victim->class = CLASS_VAMPIRE; victim->beast = 30; set_learnable_disciplines(victim); send_to_char("You are now a vampire!\n\r", victim); } else if (!str_cmp(arg2, "spiderdroid")) { victim->class = CLASS_DROID; send_to_char("You are now a Spider Droid!\n\r", victim); } else if (!str_cmp(arg2, "cyborg")) { victim->class = CLASS_CYBORG; send_to_char("You are now a Cyborg!\n\r", victim); } else if (!str_cmp(arg2, "samurai")) { victim->class = CLASS_SAMURAI; send_to_char("You are now a Samurai!\n\r", victim); } else if (!str_cmp(arg2, "monk")) { victim->class = CLASS_MONK; send_to_char("You are now a monk!\n\r", victim); } else if (!str_cmp(arg2, "skyblade")) { victim->class = CLASS_SKYBLADE; send_to_char("You are now a skyblade!\n\r", victim); } else if (!str_cmp(arg2, "giant")) { victim->class = CLASS_GIANT; send_to_char("You are now a giant.\n\r", victim); } else if (!str_cmp(arg2, "hobbit")) { victim->class = CLASS_HOBBIT; send_to_char("You are now a hobbit!\n\r", victim); } else if (!str_cmp(arg2, "drow")) { victim->class = CLASS_DROW; send_to_char("You are now a drow!\n\r", victim); } else if (!str_cmp(arg2, "ninja")) { victim->class = CLASS_NINJA; send_to_char("You are now a ninja!\n\r", victim); } else if (!str_cmp(arg2, "none")) { victim->class = 0; do_clearcrap(victim, ""); send_to_char("Your class have been removed.\n\r", victim); } else { do_class(ch, ""); return; } //send_to_char("Class Set.\n\r",ch); return; } void do_clearcrap(CHAR_DATA * ch, char *argument) { OBJ_DATA *obj; OBJ_DATA *obj_next; int sn = 0; if (IS_NPC(ch)) return; powerdown(ch); /* remove class shit */ for (obj = ch->carrying; obj != NULL; obj = obj_next) { obj_next = obj->next_content; if (obj->wear_loc != WEAR_NONE) { obj_from_char(obj); obj_to_char(obj, ch); } } while (ch->affected) affect_remove(ch, ch->affected); if (IS_SET(ch->affected_by, AFF_POLYMORPH)) REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); if (IS_SET(ch->affected_by, AFF_ETHEREAL)) REMOVE_BIT(ch->affected_by, AFF_ETHEREAL); if (IS_EXTRA(ch, EXTRA_DRAGON)) REMOVE_BIT(ch->extra, EXTRA_DRAGON); ch->affected_by = 0; ch->armor = 100; ch->hit = UMAX(1, ch->hit); ch->mana = UMAX(1, ch->mana); ch->move = UMAX(1, ch->move); ch->hitroll = 0; ch->damroll = 0; ch->saving_throw = 0; ch->pcdata->mod_str = 0; ch->pcdata->mod_int = 0; ch->pcdata->mod_wis = 0; ch->pcdata->mod_dex = 0; ch->pcdata->mod_con = 0; for (sn = 0; sn < 12; sn++) if (ch->wpn[sn] > 100) ch->wpn[sn] = 100; for (sn = 0; sn < 5; sn++) if (ch->spl[sn] > 100) ch->spl[sn] = 100; for (sn = 0; sn < 12; sn++) if (ch->stance[sn] > 100) ch->stance[sn] = 100; for (sn = 13; sn < 18; sn++) ch->stance[sn] = 0; ch->stance[19] = -1; ch->stance[20] = -1; ch->stance[21] = -1; ch->stance[22] = -1; ch->stance[23] = -1; for (sn = 0; sn < 20; sn++) { ch->pcdata->powers[sn] = 0; } ch->newbits = 0; ch->newbits2 = 0; ch->sohbits = 0; ch->rage = 0; ch->extra = 0; ch->morph = str_dup(""); ch->vampgen_a = 0; ch->paradox[0] = 0; /* Total paradox */ ch->paradox[1] = 0; /* Current Paradox */ ch->paradox[2] = 0; /* Paradox Ticker */ ch->damcap[0] = 1000; ch->damcap[1] = 0; ch->vampaff_a = 0; ch->itemaffect = 0; ch->polyaff = 0; save_char_obj(ch); return; } void do_generation(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; int gen; char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg1); argument = one_argument(argument, arg2); if (IS_NPC(ch)) return; if (arg1[0] == '\0' || arg2[0] == '\0') { send_to_char("Syntax: generation <char> <generation>.\n\r", ch); send_to_char ("Generation 1 is a Master <Class> and 2 is clan leader.\n\r", ch); return; } if ((victim = get_char_world(ch, arg1)) == NULL) { send_to_char("That player is not here.\n\r", ch); return; } gen = is_number(arg2) ? atoi(arg2) : -1; send_to_char("Generation Set.\n\r", ch); victim->generation = gen; return; } void reset_weapon(CHAR_DATA * ch, int dtype) { if (ch->wpn[dtype] > 200) ch->wpn[dtype] = 200; return; } void reset_spell(CHAR_DATA * ch, int dtype) { if (ch->spl[dtype] > 200) ch->spl[dtype] = 200; return; } void do_stake(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *stake; char arg[MAX_INPUT_LENGTH]; int blood; return; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (arg[0] == '\0') { send_to_char("Stake whom?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } stake = get_eq_char(ch, WEAR_HOLD); if (stake == NULL || stake->item_type != ITEM_STAKE) { stake = get_eq_char(ch, WEAR_WIELD); if (stake == NULL || stake->item_type != ITEM_STAKE) { send_to_char ("How can you stake someone down without holding a stake?\n\r", ch); return; } } if (IS_NPC(victim)) { send_to_char("Not on NPC's.\n\r", ch); return; } if (ch == victim) { send_to_char("You cannot stake yourself.\n\r", ch); return; } if (!IS_CLASS(victim, CLASS_VAMPIRE)) { send_to_char("You can only stake vampires.\n\r", ch); return; } if (victim->position > POS_MORTAL) { send_to_char ("You can only stake down a vampire who is mortally wounded.\n\r", ch); return; } act("You plunge $p into $N's heart.", ch, stake, victim, TO_CHAR); act("$n plunges $p into $N's heart.", ch, stake, victim, TO_NOTVICT); send_to_char("You feel a stake plunged through your heart.\n\r", victim); if (IS_IMMUNE(victim, IMM_STAKE)) return; /* * Have to make sure they have enough blood to change back */ blood = victim->pcdata->condition[COND_THIRST]; victim->pcdata->condition[COND_THIRST] = 666; /* * To take care of vampires who have powers in affect. */ if (IS_VAMPAFF(victim, VAM_DISGUISED)) do_mask(victim, "self"); if (IS_IMMUNE(victim, IMM_SHIELDED)) do_shield(victim, ""); if (IS_AFFECTED(victim, AFF_SHADOWPLANE)) do_shadowplane(victim, ""); if (IS_VAMPAFF(victim, VAM_FANGS)) do_fangs(victim, ""); if (IS_VAMPAFF(victim, VAM_CLAWS)) do_claws(victim, ""); if (IS_VAMPAFF(victim, VAM_NIGHTSIGHT)) do_nightsight(victim, ""); if (IS_AFFECTED(victim, AFF_SHADOWSIGHT)) do_shadowsight(victim, ""); if (IS_SET(victim->act, PLR_HOLYLIGHT)) do_truesight(victim, ""); if (IS_VAMPAFF(victim, VAM_CHANGED)) do_change(victim, "human"); if (IS_POLYAFF(victim, POLY_SERPENT)) do_serpent(victim, ""); victim->rage = 0; victim->pcdata->condition[COND_THIRST] = blood; REMOVE_BIT(victim->class, CLASS_VAMPIRE); obj_from_char(stake); obj_to_char(stake, victim); ch->exp = ch->exp + 1000; victim->home = 3001; return; } void do_mask(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_CLASS(ch, CLASS_SHAPESHIFTER)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_OBFU] < 2 && IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char ("You must obtain at least level 2 in Obfuscate to use Mask.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHAPESHIFTER) && ch->pcdata->powers[SHAPE_POWERS] < 4) { send_to_char ("You need level 4 in general shapeshifting powers.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Change to look like whom?\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_POLYMORPH) && !IS_VAMPAFF(ch, VAM_DISGUISED)) { send_to_char("Not while polymorphed.\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, 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) && victim != ch) { send_to_char("You can only mask avatars or lower.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 40 && IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE)) ch->pcdata->condition[COND_THIRST] -= number_range(30, 40); if (ch == victim) { if (!IS_AFFECTED(ch, AFF_POLYMORPH) && !IS_VAMPAFF(ch, VAM_DISGUISED)) { send_to_char("You already look like yourself!\n\r", ch); return; } xprintf(buf, "Your form shimmers and transforms into %s.", ch->name); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "%s's form shimmers and transforms into %s.", ch->morph, ch->name); act(buf, ch, NULL, victim, TO_ROOM); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED); free_string(ch->morph); ch->morph = str_dup(""); return; } if (IS_VAMPAFF(ch, VAM_DISGUISED)) { xprintf(buf, "Your form shimmers and transforms into a clone of %s.", victim->name); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "%s's form shimmers and transforms into a clone of %s.", ch->morph, victim->name); act(buf, ch, NULL, victim, TO_NOTVICT); xprintf(buf, "%s's form shimmers and transforms into a clone of you!", ch->morph); act(buf, ch, NULL, victim, TO_VICT); free_string(ch->morph); ch->morph = str_dup(victim->name); return; } xprintf(buf, "Your form shimmers and transforms into a clone of %s.", victim->name); act(buf, ch, NULL, victim, TO_CHAR); xprintf(buf, "%s's form shimmers and transforms into a clone of %s.", ch->name, victim->name); act(buf, ch, NULL, victim, TO_NOTVICT); xprintf(buf, "%s's form shimmers and transforms into a clone of you!", ch->name); act(buf, ch, NULL, victim, TO_VICT); SET_BIT(ch->affected_by, AFF_POLYMORPH); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED); free_string(ch->morph); ch->morph = str_dup(victim->name); return; } void do_change(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_PROT] < 3) { send_to_char ("You must obtain at least level 3 in Protean to use Minor Change.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("You can change between 'human', 'bat', 'wolf' and 'mist' forms.\n\r", ch); return; } if (!str_cmp(arg, "bat")) { if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char ("You can only polymorph from human form.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 50) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); ch->pcdata->condition[COND_THIRST] -= number_range(40, 50); clear_stats(ch); act("You transform into bat form.", ch, NULL, NULL, TO_CHAR); act("$n transforms into a bat.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_FLYING); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_SONIC); /* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_BAT);*/ SET_BIT(ch->polyaff, POLY_BAT); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED); SET_BIT(ch->affected_by, AFF_POLYMORPH); xprintf(buf, "%s the vampire bat", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); return; } else if (!str_cmp(arg, "wolf")) { if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char ("You can only polymorph from human form.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 50) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); ch->pcdata->condition[COND_THIRST] -= number_range(40, 50); act("You transform into wolf form.", ch, NULL, NULL, TO_CHAR); act("$n transforms into a dire wolf.", ch, NULL, NULL, TO_ROOM); clear_stats(ch); if (ch->wpn[0] > 0) { ch->hitroll += (ch->wpn[0]); ch->damroll += (ch->wpn[0]); ch->armor -= (ch->wpn[0] * 3); } ch->pcdata->mod_str = 10; /* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);*/ SET_BIT(ch->polyaff, POLY_WOLF); SET_BIT(ch->affected_by, AFF_POLYMORPH); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED); xprintf(buf, "%s the dire wolf", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); return; } else if (!str_cmp(arg, "mist")) { if (IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char ("You can only polymorph from human form.\n\r", ch); return; } if (has_timer(ch)) return; if (ch->pcdata->condition[COND_THIRST] < 50) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); ch->pcdata->condition[COND_THIRST] -= number_range(40, 50); act("You transform into mist form.", ch, NULL, NULL, TO_CHAR); act("$n transforms into a white mist.", ch, NULL, NULL, TO_ROOM); if (IS_EXTRA(ch, TIED_UP)) { act("The ropes binding you fall through your ethereal form.", ch, NULL, NULL, TO_CHAR); act("The ropes binding $n fall through $s ethereal form.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->extra, TIED_UP); REMOVE_BIT(ch->extra, GAGGED); REMOVE_BIT(ch->extra, BLINDFOLDED); } if (is_affected(ch, gsn_web)) { act("The webbing entrapping $n falls through $s ethereal form.", ch, NULL, NULL, TO_ROOM); send_to_char ("The webbing entrapping you falls through your ethereal form.\n\r", ch); affect_strip(ch, gsn_web); } clear_stats(ch); /* SET_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_MIST);*/ SET_BIT(ch->polyaff, POLY_MIST); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED); SET_BIT(ch->affected_by, AFF_POLYMORPH); SET_BIT(ch->affected_by, AFF_ETHEREAL); xprintf(buf, "%s the white mist", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); return; } else if (!str_cmp(arg, "human")) { if (!IS_AFFECTED(ch, AFF_POLYMORPH)) { send_to_char("You are already in human form.\n\r", ch); return; } if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_BAT)) { REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FLYING); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_SONIC); REMOVE_BIT(ch->polyaff, POLY_BAT); /* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_BAT);*/ } else if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_WOLF)) { /* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_WOLF);*/ REMOVE_BIT(ch->polyaff, POLY_WOLF); if (ch->hit < 1) ch->hit = 1; } else if (IS_VAMPAFF(ch, VAM_CHANGED) && IS_POLYAFF(ch, POLY_MIST)) { /* REMOVE_BIT(ch->pcdata->powers[WOLF_POLYAFF], POLY_MIST);*/ REMOVE_BIT(ch->polyaff, POLY_MIST); REMOVE_BIT(ch->affected_by, AFF_ETHEREAL); } else { /* * In case they try to change to human from a non-vamp form */ send_to_char("You seem to be stuck in this form.\n\r", ch); return; } act("You transform into human form.", ch, NULL, NULL, TO_CHAR); act("$n transforms into human form.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CHANGED); clear_stats(ch); free_string(ch->morph); ch->morph = str_dup(""); return; } else send_to_char ("You can change between 'human', 'bat', 'wolf' and 'mist' forms.\n\r", ch); return; } void do_clandisc(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_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (arg1[0] == '\0' && arg2[0] == '\0') { do_stat(ch, ""); return; } if (arg2[0] == '\0') { if (!str_cmp(arg1, "animalism")) { send_to_char ("Animalism: The discipline of nature control.\n\r", ch); if (ch->power[DISC_VAMP_ANIM] < 1) send_to_char ("You have none of the Animalism powers.\n\r", ch); if (ch->power[DISC_VAMP_ANIM] > 0) send_to_char ("Serenity: You can sooth the most aggressive soul (Golconda Required).\n\r", ch); return; } else if (!str_cmp(arg1, "auspex")) { send_to_char ("Auspex: The discipline of extrasensory awareness.\n\r", ch); if (ch->power[DISC_VAMP_AUSP] < 1) send_to_char ("You have none of the Auspex discipline powers.\n\r", ch); if (ch->power[DISC_VAMP_AUSP] > 0) send_to_char ("Truesight: The user can see everything, including invis.\n\r", ch); if (ch->power[DISC_VAMP_AUSP] > 1) send_to_char ("Scry: Allows you to view the room the specified target is in.\n\r", ch); if (ch->power[DISC_VAMP_AUSP] > 2) send_to_char ("Readaura: Gives you detained information about a creature or object.\n\r", ch); return; } else if (!str_cmp(arg1, "celerity")) { send_to_char ("Celerity: The discipline of superior speed.\n\r", ch); return; } else if (!str_cmp(arg1, "chimerstry")) { send_to_char ("chimerstry: The discipline of illusion.\n\r", ch); return; } else if (!str_cmp(arg1, "daimoinon")) { send_to_char ("Daimoinon: The discipline of dark corruption.\n\r", ch); if (ch->power[DISC_VAMP_DAIM] < 1) send_to_char ("You have none of the Daimoinon discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "dominate")) { send_to_char ("Dominate: The discipline of control.\n\r", ch); if (ch->power[DISC_VAMP_DOMI] < 1) send_to_char ("You have none of the Dominate discipline powers.\n\r", ch); if (ch->power[DISC_VAMP_DOMI] > 0) send_to_char ("Command: You can plant suggestions in the mind of others.\n\r", ch); if (ch->power[DISC_VAMP_DOMI] > 1) send_to_char ("Shield: You are able to shield your mind from scrying and aura-reading.\n\r", ch); if (ch->power[DISC_VAMP_DOMI] > 3) send_to_char ("Possession: You can take control of mobs by feeding them blood.\n\r", ch); return; } else if (!str_cmp(arg1, "fortitude")) { send_to_char ("Fortitude: The discipline of supernatural toughness and vigor.\n\r", ch); if (ch->power[DISC_VAMP_FORT] < 1) send_to_char("You have no fortitude.\n\r", ch); return; } else if (!str_cmp(arg1, "obfuscate")) { send_to_char ("Obfuscate: The discipline of stealth.\n\r", ch); if (ch->power[DISC_VAMP_OBFU] < 1) send_to_char ("You have none of the Obfuscate discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "obtenebration")) { send_to_char ("Obtenebration: The discipline of darkness manipulation.\n\r", ch); if (ch->power[DISC_VAMP_OBTE] < 1) send_to_char ("You have none of the Obtenebration discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "potence")) { send_to_char ("Potence: The discipline of superior strength.\n\r", ch); return; } else if (!str_cmp(arg1, "presence")) { send_to_char ("Presence: The discipline of appeal and attractiveness.\n\r", ch); if (ch->power[DISC_VAMP_PRES] < 1) send_to_char ("You have none of the Presence discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "protean")) { send_to_char ("Protean: The discipline of neutral transformation.\n\r", ch); if (ch->power[DISC_VAMP_PROT] < 1) send_to_char ("You have none of the Protean discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "quietus")) { send_to_char("Quietus: The discipline of death.\n\r", ch); if (ch->power[DISC_VAMP_QUIE] < 1) send_to_char ("You have none of the Quietus discipline powers.\n\r", ch); if (ch->power[DISC_VAMP_QUIE] > 3) send_to_char ("Spit: You can project your deadly spit at a foe\n\r", ch); return; } else if (!str_cmp(arg1, "serpentis")) { send_to_char ("Serpentis: The discipline of temptation and corruption.\n\r", ch); if (ch->power[DISC_VAMP_SERP] < 1) send_to_char ("You have none of the Serpentis discipline powers.\n\r", ch); return; } else if (!str_cmp(arg1, "thaumaturgy")) { send_to_char ("Thaumaturgy: The discipline of blood magic.\n\r", ch); if (ch->power[DISC_VAMP_THAU] < 1) send_to_char ("You have none of the Thaumaturgy discipline powers.\n\r", ch); if (ch->power[DISC_VAMP_THAU] > 0) send_to_char ("Theft: You can take from the blood pool of other players.\n\r", ch); return; } else if (!str_cmp(arg1, "vicissitude")) { send_to_char ("Vicissitude: The discipline of evil body control.\n\r", ch); if (ch->power[DISC_VAMP_VICI] < 1) send_to_char ("You have none of the Vicissitude discipline powers.\n\r", ch); if (ch->power[DISC_VAMP_VICI] > 3) send_to_char ("Zuloform: Transformation into a powerful being.\n\r", ch); return; } do_stat(ch, ""); return; } if (!str_cmp(arg2, "improve")) { int improve; int cost; int max; int maxlevel; stc("Please use the new commands, Disciplines and research.\n\r", ch); return; maxlevel = 10; if (!str_cmp(arg1, "animalism")) { improve = DISC_VAMP_ANIM; max = maxlevel; } else if (!str_cmp(arg1, "auspex")) { improve = DISC_VAMP_AUSP; max = maxlevel; } else if (!str_cmp(arg1, "celerity")) { improve = DISC_VAMP_CELE; max = maxlevel; } else if (!str_cmp(arg1, "chimerstry")) { improve = DISC_VAMP_CHIM; max = maxlevel; } else if (!str_cmp(arg1, "dominate")) { improve = DISC_VAMP_DOMI; max = maxlevel; } else if (!str_cmp(arg1, "daimoinon")) { improve = DISC_VAMP_DAIM; max = maxlevel; } else if (!str_cmp(arg1, "fortitude")) { improve = DISC_VAMP_FORT; max = 12; } else if (!str_cmp(arg1, "obfuscate")) { improve = DISC_VAMP_OBFU; max = maxlevel; } else if (!str_cmp(arg1, "obtenebration")) { improve = DISC_VAMP_OBTE; max = maxlevel; } else if (!str_cmp(arg1, "potence")) { improve = DISC_VAMP_POTE; max = maxlevel; } else if (!str_cmp(arg1, "presence")) { improve = DISC_VAMP_PRES; max = maxlevel; } else if (!str_cmp(arg1, "protean")) { improve = DISC_VAMP_PROT; max = maxlevel; } else if (!str_cmp(arg1, "quietus")) { improve = DISC_VAMP_QUIE; max = maxlevel; } else if (!str_cmp(arg1, "serpentis")) { improve = DISC_VAMP_SERP; max = maxlevel; } else if (!str_cmp(arg1, "thaumaturgy")) { improve = DISC_VAMP_THAU; max = maxlevel; } else if (!str_cmp(arg1, "vicissitude")) { improve = DISC_VAMP_VICI; max = maxlevel; } else if (!str_cmp(arg1, "obeah")) { improve = DISC_VAMP_OBEA; max = maxlevel; } else if (!str_cmp(arg1, "melpominee")) { improve = DISC_VAMP_MELP; max = maxlevel; } else if (!str_cmp(arg1, "necromancy")) { improve = DISC_VAMP_NECR; max = maxlevel; } else if (!str_cmp(arg1, "thanatosis")) { improve = DISC_VAMP_THAN; max = maxlevel; } else { send_to_char ("You can improve: Animalism, Auspex, Celerity, Dominate, Fortitude, Obfuscate,\n\r Obtenebration, Potence, Presence, Protean, Quietus, Serpentis,\n\r Thaumaturgy or Vicissitude.\n\r", ch); return; } cost = (ch->power[improve] + 1) * 10; arg1[0] = UPPER(arg1[0]); if (ch->power[improve] >= max && ch->pcdata->rank == AGE_METHUSELAH) { xprintf(buf, "You have already gained all the powers of the %s discipline.\n\r", arg1); send_to_char(buf, ch); return; } if (ch->power[improve] >= max) { xprintf(buf, "You have already maxed %s.\n\r", arg1); send_to_char(buf, ch); return; } if (cost > ch->practice) { xprintf(buf, "It costs you %d primal to improve your %s discipline.\n\r", cost, arg1); send_to_char(buf, ch); return; } ch->power[improve] += 1; ch->practice -= cost; xprintf(buf, "You improve your ability in the %s discipline.\n\r", arg1); send_to_char(buf, ch); } else send_to_char ("To improve a discipline, type: Clandisc <discipline type> improve.\n\r", ch); return; } void do_vampire(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_IMMUNE(ch, IMM_VAMPIRE)) { send_to_char("You will now allow vampires to bite you.\n\r", ch); SET_BIT(ch->immune, IMM_VAMPIRE); return; } send_to_char("You will no longer allow vampires to bite you.\n\r", ch); REMOVE_BIT(ch->immune, IMM_VAMPIRE); return; } void do_shadowplane(CHAR_DATA * ch, char *argument) { OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF) || ch->power[DISC_WERE_OWL] < 3) { if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_CLASS(ch, CLASS_GHOUL)) { send_to_char("Huh?\n\r", ch); return; } if (ch->pcdata->powers[GPOWER_SHADOW] < 3 && IS_CLASS(ch, CLASS_GHOUL)) { send_to_char ("You must obtain at least level 3 in Shadow to use the Shadowplane.\n\r", ch); return; } if (ch->power[DISC_VAMP_OBTE] < 3 && IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char ("You must obtain at least level 3 in Obtenebration to use Shadowplane.\n\r", ch); return; } } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->pcdata->condition[COND_THIRST] < 75) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE)) ch->pcdata->condition[COND_THIRST] -= number_range(65, 75); if (arg[0] == '\0') { if (!IS_AFFECTED(ch, AFF_SHADOWPLANE)) { if (has_timer(ch)) return; send_to_char ("You fade into the plane of shadows.\n\r", ch); act("The shadows flicker and swallow up $n.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "auto"); return; } REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); send_to_char("You fade back into the real world.\n\r", ch); act("The shadows flicker and $n fades into existance.", ch, NULL, NULL, TO_ROOM); do_look(ch, "auto"); return; } if ((obj = get_obj_here(ch, NULL, arg)) == NULL) { send_to_char ("What do you wish to toss into the shadow plane?\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_SHADOWPLANE)) send_to_char("You toss it to the ground and it vanishes.\n\r", ch); else send_to_char("You toss it into a shadow and it vanishes.\n\r", ch); return; } void do_darkheart(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_SERP] < 1) { send_to_char ("You must obtain at least level 1 in Serpentis to use Darkheart.\n\r", ch); return; } if (IS_IMMUNE(ch, IMM_STAKE)) { send_to_char("But you've already torn your heart out!\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 1000 / (10 - ch->generation)) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= 100; send_to_char ("You rip your heart from your body and toss it to the ground.\n\r", ch); act("$n rips $s heart out and tosses it to the ground.", ch, NULL, NULL, TO_ROOM); make_part(ch, "heart"); ch->hit = ch->hit - number_range(10, 20); update_pos(ch); if (ch->position == POS_DEAD && !IS_HERO(ch)) { send_to_char("You have been KILLED!!\n\r\n\r", ch); raw_kill(ch, ch); return; } SET_BIT(ch->immune, IMM_STAKE); return; } void do_truesight(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (ch->class == 0) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_TANARRI) && !IS_SET(ch->pcdata->powers[TANARRI_POWER], TANARRI_TRUESIGHT)) { send_to_char("You don't have that power yet", ch); return; } if (IS_CLASS(ch, CLASS_PRIEST)) { if (!IS_PRIPOWER(ch, PRI_SIGHT)) { send_to_char ("You need to learn that skill first.\n\r", ch); return; } } if (IS_CLASS(ch, CLASS_DROID) && !IS_SET(ch->pcdata->powers[DROID_IMPLANTS], IMPLANT_EYES)) { send_to_char("You need the eye implant.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHADOW) && !IS_SET(ch->pcdata->powers[SHADOW_POWERS], NSHADOWS_SIGHT)) { stc("You haven't gained that skill yet\n\r", ch); return; } if ((ch->power[DISC_VAMP_AUSP] < 1) && IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char ("You must obtain at least level 1 in Auspex to use Truesight.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_FAE) && ch->power[DISC_FAE_ARCANE] < 6) { send_to_char("Your mastery of the arcane is pathetic.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_HOBBIT) && ch->pcdata->powers[HOBBIT_DISHES] < 2) { send_to_char ("You must at least know how to cook two dishes.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DRONE) && ch->pcdata->powers[DRONE_HORRID_REALITY] < 1) { send_to_char ("You cannot grasp the truth of this horrid reality.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHAPESHIFTER) && ch->pcdata->powers[SHAPE_POWERS] < 1) { send_to_char ("You must obtain at least level 1 in shiftpowers to use Truesight.\n\r", ch); return; } if ((ch->power[DISC_WERE_HAWK] < 3) && IS_CLASS(ch, CLASS_WEREWOLF)) { send_to_char ("You must obtain level 3 in the Hawk totem to use Truesight.\n\r", ch); return; } if (!IS_DEMPOWER(ch, DEM_TRUESIGHT) && IS_CLASS(ch, CLASS_DEMON)) { stc("You must inpart truesight first.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_MONK) && ch->monkab[AWARE] < 3) { stc("You must obtain level 4 in Awareness first.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_GHOUL) && ch->pcdata->powers[GPOWER_SHADOW] < 2) { stc("You don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SKYBLADE) && ch->pcdata->powers[SKYBLADE_POWER] < 1) { stc("You must raise your skyblade power first .\n\r", ch); return; } if (IS_SET(ch->act, PLR_HOLYLIGHT)) { REMOVE_BIT(ch->act, PLR_HOLYLIGHT); send_to_char("Your senses return to normal.\n\r", ch); } else { SET_BIT(ch->act, PLR_HOLYLIGHT); send_to_char ("Your senses increase to incredible proportions.\n\r", ch); } return; } void do_majesty(CHAR_DATA * ch, char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; smash_tilde(argument); argument = one_argument(argument, arg1); strcpy(arg2, argument); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_PRES] < 5) { send_to_char ("You must obtain at least level 5 in Presence to use Majesty.\n\r", ch); return; } if (has_timer(ch)) return; if (IS_AFFECTED(ch, AFF_PEACE)) { REMOVE_BIT(ch->affected_by, AFF_PEACE); act("You lower your majesty.", ch, NULL, NULL, TO_CHAR); act("$n looks less imposing.", ch, NULL, NULL, TO_NOTVICT); return; } if (ch->pcdata->condition[COND_THIRST] < 45) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= number_range(35, 45); SET_BIT(ch->affected_by, AFF_PEACE); act("You raise your majesty.", ch, NULL, NULL, TO_CHAR); act("$n suddenly looks very imposing.", ch, NULL, NULL, TO_NOTVICT); return; } void do_scry(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; ROOM_INDEX_DATA *chroom; ROOM_INDEX_DATA *victimroom; char arg[MAX_INPUT_LENGTH]; int rand_room; bool chaosvalue = FALSE; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_ITEMAFF(ch, ITEMA_VISION) && !ragnarok) { if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_CLASS(ch, CLASS_MONK) && !IS_CLASS(ch, CLASS_DEMON) && !IS_CLASS(ch, CLASS_MAGE) && !IS_CLASS(ch, CLASS_FAE) && !IS_CLASS(ch, CLASS_GIANT) && !IS_CLASS(ch, CLASS_SHADOW) && !IS_CLASS(ch, CLASS_CYBORG) && !IS_CLASS(ch, CLASS_PRIEST)) { stc("Huh?\n\r", ch); return; } } if (!IS_ITEMAFF(ch, ITEMA_VISION) && !ragnarok) { if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_AUSP] < 2) { send_to_char ("You must obtain at least level 2 Auspex to use Scry.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_MONK) && ch->pcdata->powers[PMONK] < 3) { send_to_char ("You need the trio mantra to use scry.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_GIANT) && ch->pcdata->rank < FOOT_25) { send_to_char ("You are not that high, the trees are blocking your view.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_FAE) && ch->power[DISC_FAE_NATURE] < 3) { send_to_char("You don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHADOW) && !IS_SET(ch->pcdata->powers[SHADOW_POWERS], NSHADOWS_SCRY)) { stc("You don't have that power.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_PRIEST)) { if (!IS_PRIPOWER(ch, PRI_SCRY)) { send_to_char ("You haven't mastered scry yet!\n\r", ch); return; } } if (IS_CLASS(ch, CLASS_MAGE) && ch->pcdata->powers[PINVOKE] < 3) { stc("You don't have the power to scry yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_CYBORG) && ch->pcdata->powers[CYBORG_FACE] < 5) { stc("You must have full facial implants to scry.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DEMON) && !IS_DEMPOWER(ch, DEM_SCRY)) { stc("You have not been granted the power of Scry.\n\r", ch); return; } } if (arg[0] == '\0') { send_to_char("Scry on whom?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (victim->in_room) { if (has_area_affect (victim->in_room->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your scrying attempt.\n\r", ch); return; } } if (victim->trust > 6) { send_to_char("SPYING ON THE GODS!?!?!?!\n\r", ch); send_to_char("Someone is scrying you.\n\r", victim); return; } if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_SHIELDED) && !ragnarok) { send_to_char("You cannot find them.\n\r", ch); return; } if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_SHIELD2)) chaosvalue = TRUE; if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->pcdata->condition[COND_THIRST] < 25 && !IS_ITEMAFF(ch, ITEMA_VISION)) { send_to_char("You have insufficient blood.\n\r", ch); return; } if (!IS_ITEMAFF(ch, ITEMA_VISION) && IS_CLASS(ch, CLASS_VAMPIRE)) ch->pcdata->condition[COND_THIRST] -= number_range(15, 25); if (!IS_NPC(victim) && (victim->pcdata->powers[JPOWER_SPIRIT] < 2) && IS_CLASS(victim, CLASS_JEDI)) { send_to_char ("#GYou sense the force moving as you are being watched.#n\n\r", victim); } chroom = ch->in_room; victimroom = victim->in_room; if (chaosvalue && !ragnarok) for (;;) { rand_room = number_range(0, 65535); victimroom = get_room_index(rand_room); if (victimroom != NULL) break; } char_from_room(ch); char_to_room(ch, victimroom); if (IS_AFFECTED(ch, AFF_SHADOWPLANE) && (!IS_AFFECTED(victim, AFF_SHADOWPLANE))) { REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "scry"); SET_BIT(ch->affected_by, AFF_SHADOWPLANE); } else if (!IS_AFFECTED(ch, AFF_SHADOWPLANE) && (IS_AFFECTED(victim, AFF_SHADOWPLANE))) { SET_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "scry"); REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); } else do_look(ch, "scry"); char_from_room(ch); char_to_room(ch, chroom); if (!IS_NPC(victim)) ch->fight_timer += 5; if (IS_CLASS(victim, CLASS_VAMPIRE) && IS_SET(victim->flag2, AFF_SPIRITGUARD)) { act("Your spirit guardian sends you a message:", ch, NULL, victim, TO_VICT); act("\"$n is scrying you.\"", ch, NULL, victim, TO_VICT); } return; } void do_readaura(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; bool chaosvalue = FALSE; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_ITEMAFF(ch, ITEMA_VISION) && !IS_CLASS(ch, CLASS_MONK) && !IS_CLASS(ch, CLASS_CYBORG) && !IS_CLASS(ch, CLASS_HOBBIT) && !IS_CLASS(ch, CLASS_LICH) && !IS_CLASS(ch, CLASS_FAE) && !IS_CLASS(ch, CLASS_PRIEST) && !IS_CLASS(ch, CLASS_DRONE)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_AUSP] < 3 && !IS_ITEMAFF(ch, ITEMA_VISION)) { send_to_char ("You must obtain at least level 3 in Auspex to use Readaura.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DRONE) && ch->pcdata->powers[DRONE_MINDCONTROL] < 2) { send_to_char ("You don't have the skills to read their mind.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_LICH) && ch->pcdata->powers[DEATH_LORE] < 1) { send_to_char("You don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_PRIEST)) { if (!IS_PRIPOWER(ch, PRI_READ)) { send_to_char ("Try mastering readaura first, Genius.\n\r", ch); return; } } if (IS_CLASS(ch, CLASS_MONK) && ch->pcdata->powers[PMONK] < 2) { send_to_char("You must obtain the level 2 Mantra first!\n\r", ch); return; } if (IS_CLASS(ch, CLASS_FAE) && ch->power[DISC_FAE_NATURE] < 5) { stc("Nay, not yet kid.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_CYBORG) && ch->pcdata->powers[CYBORG_FACE] < 5) { stc("You must have full face implants to readaura.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Read the aura on what?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { if ((obj = get_obj_carry(ch, arg, ch)) == NULL) { send_to_char("Read the aura on what?\n\r", ch); return; } act("$n examines $p intently.", ch, obj, NULL, TO_ROOM); spell_identify(skill_lookup("identify"), ch->level, ch, obj); return; } if (victim->in_room) { if (has_area_affect (victim->in_room->area, AREA_AFF_BADMOON, 0)) { send_to_char ("Some powerful magic prevent your aura reading attempt.\n\r", ch); return; } } if (!IS_NPC(victim) && (IS_IMMUNE(victim, IMM_SHIELDED) || (IS_CLASS(victim, CLASS_DROW) && IS_SET(victim->pcdata->powers[1], DPOWER_DROWSHIELD))) && !IS_ITEMAFF(ch, ITEMA_VISION)) { send_to_char("You are unable to read their aura.\n\r", ch); return; } if (!IS_NPC(victim) && IS_IMMUNE(victim, IMM_SHIELD2)) chaosvalue = TRUE; act("$n examines $N intently.", ch, NULL, victim, TO_NOTVICT); act("$n examines you intently.", ch, NULL, victim, TO_VICT); if (IS_NPC(victim)) xprintf(buf, "%s is an NPC.\n\r", victim->short_descr); else { if (victim->level == 12) xprintf(buf, "%s is an Implementor.\n\r", victim->name); else if (victim->level == 11) xprintf(buf, "%s is a High Judge.\n\r", victim->name); else if (victim->level == 10) xprintf(buf, "%s is a Judge.\n\r", victim->name); else if (victim->level == 9) xprintf(buf, "%s is an Enforcer.\n\r", victim->name); else if (victim->level == 8) xprintf(buf, "%s is a Quest Maker.\n\r", victim->name); else if (victim->level == 7) xprintf(buf, "%s is a Builder.\n\r", victim->name); else if (victim->level >= 3) xprintf(buf, "%s is an Avatar.\n\r", victim->name); else xprintf(buf, "%s is a Mortal.\n\r", victim->name); } send_to_char(buf, ch); if (!IS_NPC(victim)) { xprintf(buf, "Str:%d, Int:%d, Wis:%d, Dex:%d, Con:%d.\n\r", get_curr_str(victim), get_curr_int(victim), get_curr_wis(victim), get_curr_dex(victim), get_curr_con(victim)); send_to_char(buf, ch); } if (chaosvalue) xprintf(buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", number_range(1000, 5000), number_range(10000, 20000), number_range(1000, 5000), number_range(10000, 20000), number_range(1000, 5000), number_range(10000, 20000)); else xprintf(buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", victim->hit, victim->max_hit, victim->mana, victim->max_mana, victim->move, victim->max_move); send_to_char(buf, ch); if (!IS_NPC(victim)) { if (chaosvalue) xprintf(buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", number_range(500, 2500), number_range(500, 2500), number_range(-2000, 0)); else xprintf(buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", char_hitroll(victim), char_damroll(victim), char_ac(victim)); } else xprintf(buf, "AC:%d.\n\r", char_ac(victim)); send_to_char(buf, ch); if (!IS_NPC(victim)) { xprintf(buf, "Status:%d, ", victim->race); send_to_char(buf, ch); if (IS_CLASS(victim, CLASS_VAMPIRE)) { xprintf(buf, "Blood:%d, ", victim->pcdata->condition[COND_THIRST]); send_to_char(buf, ch); } } xprintf(buf, "Alignment:%d.\n\r", victim->alignment); send_to_char(buf, ch); if (!IS_NPC(victim) && IS_EXTRA(victim, EXTRA_PREGNANT)) act("$N is pregnant.", ch, NULL, victim, TO_CHAR); if (!IS_NPC(victim) && IS_CLASS(victim, CLASS_VAMPIRE)) { send_to_char("Disciplines:", ch); if (IS_VAMPAFF(victim, VAM_PROTEAN)) send_to_char(" Protean", ch); if (IS_VAMPAFF(victim, VAM_CELERITY)) send_to_char(" Celerity", ch); if (IS_VAMPAFF(victim, VAM_FORTITUDE)) send_to_char(" Fortitude", ch); if (IS_VAMPAFF(victim, VAM_POTENCE)) send_to_char(" Potence", ch); if (IS_VAMPAFF(victim, VAM_OBFUSCATE)) send_to_char(" Obfuscate", ch); if (IS_VAMPAFF(victim, VAM_OBTENEBRATION)) send_to_char(" Obtenebration", ch); if (IS_VAMPAFF(victim, VAM_SERPENTIS)) send_to_char(" Serpentis", ch); if (IS_VAMPAFF(victim, VAM_AUSPEX)) send_to_char(" Auspex", ch); if (IS_VAMPAFF(victim, VAM_DOMINATE)) send_to_char(" Dominate", ch); if (IS_VAMPAFF(victim, VAM_PRESENCE)) send_to_char(" Presence", ch); if (IS_VAMPAFF(victim, VAM_VICISSITUDE)) send_to_char(" Vicissitude", ch); if (IS_VAMPAFF(victim, VAM_THAU)) send_to_char(" Thaumaturgy", ch); if (IS_VAMPAFF(victim, VAM_ANIMAL)) send_to_char(" Animalism", ch); if (IS_VAMPAFF(victim, VAM_QUIETUS)) send_to_char(" Quietus", ch); send_to_char(".\n\r", ch); } return; } void do_mortal(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int blood; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_VAMPAFF(ch, VAM_MORTAL)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_OBFU] < 4) { send_to_char ("You must obtain at least level 4 in Obfuscate to use Mortal Facade.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE)) { if (ch->pcdata->condition[COND_THIRST] < 1000 / (10 - ch->generation)) { send_to_char ("You must be at full blood to use this power.\n\r", ch); return; } /* * Have to make sure they have enough blood to change back */ blood = ch->pcdata->condition[COND_THIRST]; ch->pcdata->condition[COND_THIRST] = 666; /* * Remove physical vampire attributes when you take mortal form */ if (IS_VAMPAFF(ch, VAM_DISGUISED)) do_mask(ch, "self"); if (IS_IMMUNE(ch, IMM_SHIELDED)) do_shield(ch, ""); if (IS_AFFECTED(ch, AFF_SHADOWPLANE)) do_shadowplane(ch, ""); if (IS_VAMPAFF(ch, VAM_FANGS)) do_fangs(ch, ""); if (IS_VAMPAFF(ch, VAM_CLAWS)) do_claws(ch, ""); if (IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) do_nightsight(ch, ""); if (IS_AFFECTED(ch, AFF_SHADOWSIGHT)) do_shadowsight(ch, ""); if (IS_SET(ch->act, PLR_HOLYLIGHT)) do_truesight(ch, ""); if (IS_VAMPAFF(ch, VAM_CHANGED)) do_change(ch, "human"); if (IS_POLYAFF(ch, POLY_SERPENT)) do_serpent(ch, ""); ch->rage = 0; ch->pcdata->condition[COND_THIRST] = blood; send_to_char ("Colour returns to your skin and you warm up a little.\n\r", ch); act("Colour returns to $n's skin.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->class, CLASS_VAMPIRE); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_MORTAL); return; } send_to_char("You skin pales and cools.\n\r", ch); act("$n's skin pales slightly.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->class, CLASS_VAMPIRE); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_MORTAL); return; } void do_mortalvamp(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int blood; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (IS_CLASS(ch, CLASS_VAMPIRE)) { /* * Have to make sure they have enough blood to change back */ blood = ch->pcdata->condition[COND_THIRST]; ch->pcdata->condition[COND_THIRST] = 666; /* * Remove physical vampire attributes when you take mortal form */ if (IS_VAMPAFF(ch, VAM_DISGUISED)) do_mask(ch, "self"); if (IS_IMMUNE(ch, IMM_SHIELDED)) do_shield(ch, ""); if (IS_AFFECTED(ch, AFF_SHADOWPLANE)) do_shadowplane(ch, ""); if (IS_VAMPAFF(ch, VAM_FANGS)) do_fangs(ch, ""); if (IS_VAMPAFF(ch, VAM_CLAWS)) do_claws(ch, ""); if (IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) do_nightsight(ch, ""); if (IS_AFFECTED(ch, AFF_SHADOWSIGHT)) do_shadowsight(ch, ""); if (IS_SET(ch->act, PLR_HOLYLIGHT)) do_truesight(ch, ""); if (IS_VAMPAFF(ch, VAM_CHANGED)) do_change(ch, "human"); if (IS_POLYAFF(ch, POLY_SERPENT)) do_serpent(ch, ""); ch->rage = 0; ch->pcdata->condition[COND_THIRST] = blood; send_to_char("You loose your vampire powers.\n\r", ch); return; } send_to_char("You regain your vampire powers.\n\r", ch); return; } void do_shield(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE) && !IS_CLASS(ch, CLASS_DROW) && !IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_DEMON) && !IS_CLASS(ch, CLASS_MONK) && !IS_CLASS(ch, CLASS_CYBORG) && !IS_CLASS(ch, CLASS_SHADOW) && !IS_CLASS(ch, CLASS_HOBBIT) && !IS_CLASS(ch, CLASS_DRONE)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_WEREWOLF) && ch->power[DISC_WERE_OWL] < 2) { send_to_char("Sorry, you don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHADOW) && !IS_SET(ch->pcdata->powers[SHADOW_POWERS], NSHADOWS_SHIELD)) { send_to_char("You don't have that power yet.\n\r", ch); return; } if (!IS_DEMPOWER(ch, DEM_SHIELD) && IS_CLASS(ch, CLASS_DEMON)) { send_to_char("You must inpart it first!\n\r", ch); return; } if (IS_CLASS(ch, CLASS_PRIEST)) { if (!IS_PRIPOWER(ch, PRI_SHIELD)) { send_to_char ("You should probably pgain shield first.\n\r", ch); return; } } if (IS_CLASS(ch, CLASS_HOBBIT) && ch->pcdata->powers[HOBBIT_DISHES] < 5) { send_to_char("You must at least learn to cook 5 dishes.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DROW) && !IS_SET(ch->pcdata->powers[1], DPOWER_DROWSHIELD)) { send_to_char("You don't have that power.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_MONK) && !IS_NPC(ch) && ch->pcdata->powers[PMONK] < 2) { send_to_char ("You must improve your Mantras to level 2 first!\n\r", ch); return; } if (IS_CLASS(ch, CLASS_CYBORG) && ch->pcdata->powers[CYBORG_FACE] < 4) { stc("You must have 4 implants before using shield.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DRONE) && ch->pcdata->powers[DRONE_WILLPOWER] < 2) { send_to_char ("You don't have the willpower to invoke the fortress of the mind.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_OBFU] < 3 && ch->power[DISC_VAMP_DOMI] < 2) { send_to_char ("You must obtain at least level 3 in Obfuscate or level 2 in Dominate.\n\r", ch); return; } if (!IS_IMMUNE(ch, IMM_SHIELDED)) { send_to_char ("You shield your aura from those around you.\n\r", ch); SET_BIT(ch->immune, IMM_SHIELDED); return; } send_to_char("You stop shielding your aura.\n\r", ch); REMOVE_BIT(ch->immune, IMM_SHIELDED); return; } void do_serpent(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_SERP] < 2) { send_to_char ("You must obtain at least level 2 in Serpentis to use Serpent Form.\n\r", ch); return; } if (IS_AFFECTED(ch, AFF_POLYMORPH)) { if (!IS_POLYAFF(ch, POLY_SERPENT)) { send_to_char ("You cannot polymorph from this form.\n\r", ch); return; } act("You transform back into human.", ch, NULL, NULL, TO_CHAR); act("$n transform into human form.", ch, NULL, NULL, TO_ROOM); clear_stats(ch); REMOVE_BIT(ch->polyaff, POLY_SERPENT); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); free_string(ch->morph); ch->morph = str_dup(""); return; } if (ch->pcdata->condition[COND_THIRST] < 50) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= number_range(40, 50); clear_stats(ch); if (ch->wpn[0] > 0) { ch->hitroll += ch->wpn[0] * 0.75; ch->damroll += ch->wpn[0] * 0.75; ch->armor -= ch->wpn[0] * 3; } if (ch->stance[0] != -1) do_stance(ch, ""); if (ch->mounted == IS_RIDING) do_dismount(ch, ""); ch->pcdata->mod_str = 10; act("You transform into a huge serpent.", ch, NULL, NULL, TO_CHAR); act("$n transforms into a huge serpent.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->polyaff, POLY_SERPENT); SET_BIT(ch->affected_by, AFF_POLYMORPH); xprintf(buf, "%s the huge serpent", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); return; } void do_poison(CHAR_DATA * ch, char *argument) { OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_SERP] < 3) { send_to_char ("You must obtain at least level 3 in Serpentis to use Poison.\n\r", ch); return; } if (((obj = get_eq_char(ch, WEAR_WIELD)) == NULL) && ((obj = get_eq_char(ch, WEAR_HOLD)) == NULL)) { send_to_char ("You must wield the weapon you wish to poison.\n\r", ch); return; } if (obj->value[0] != 0) { send_to_char("This weapon cannot be poisoned.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 15) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= number_range(5, 15); act("You run your tongue along $p, poisoning it.", ch, obj, NULL, TO_CHAR); act("$n runs $s tongue along $p, poisoning it.", ch, obj, NULL, TO_ROOM); obj->value[0] = 53; obj->timer = number_range(10, 20); return; } void do_regenerate(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->rage > 0) { send_to_char ("You cannot control your regenerative powers while the beast is so strong.\n\r", ch); return; } if (ch->position == POS_FIGHTING) { send_to_char("You cannot regenerate while fighting.\n\r", ch); return; } if (ch->hit >= ch->max_hit && ch->mana >= ch->max_mana && ch->move >= ch->max_move) { send_to_char ("But you are already completely regenerated!\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 5) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= number_range(10, 20); if (ch->hit >= ch->max_hit && ch->mana >= ch->max_mana && ch->move >= ch->max_move) { send_to_char("Your body has completely regenerated.\n\r", ch); act("$n's body completely regenerates itself.", ch, NULL, NULL, TO_ROOM); } else send_to_char("Your body slowly regenerates itself.\n\r", ch); if (ch->hit < 1) { ch->hit = ch->hit + 1; update_pos(ch); WAIT_STATE(ch, 24); } else { ch->hit = UMIN(ch->hit + 1500, ch->max_hit); WAIT_STATE(ch, 8); update_pos(ch); } return; } void reg_mend(CHAR_DATA * ch) { int ribs = 0; int teeth = 0; if (IS_BODY(ch, BROKEN_RIBS_1)) ribs += 1; if (IS_BODY(ch, BROKEN_RIBS_2)) ribs += 2; if (IS_BODY(ch, BROKEN_RIBS_4)) ribs += 4; if (IS_BODY(ch, BROKEN_RIBS_8)) ribs += 8; if (IS_BODY(ch, BROKEN_RIBS_16)) ribs += 16; if (IS_HEAD(ch, LOST_TOOTH_1)) teeth += 1; if (IS_HEAD(ch, LOST_TOOTH_2)) teeth += 2; if (IS_HEAD(ch, LOST_TOOTH_4)) teeth += 4; if (IS_HEAD(ch, LOST_TOOTH_8)) teeth += 8; if (IS_HEAD(ch, LOST_TOOTH_16)) teeth += 16; if (ribs > 0) { if (IS_BODY(ch, BROKEN_RIBS_1)) REMOVE_BIT(ch->loc_hp[1], BROKEN_RIBS_1); if (IS_BODY(ch, BROKEN_RIBS_2)) REMOVE_BIT(ch->loc_hp[1], BROKEN_RIBS_2); if (IS_BODY(ch, BROKEN_RIBS_4)) REMOVE_BIT(ch->loc_hp[1], BROKEN_RIBS_4); if (IS_BODY(ch, BROKEN_RIBS_8)) REMOVE_BIT(ch->loc_hp[1], BROKEN_RIBS_8); if (IS_BODY(ch, BROKEN_RIBS_16)) REMOVE_BIT(ch->loc_hp[1], BROKEN_RIBS_16); ribs -= 1; if (ribs >= 16) { ribs -= 16; SET_BIT(ch->loc_hp[1], BROKEN_RIBS_16); } if (ribs >= 8) { ribs -= 8; SET_BIT(ch->loc_hp[1], BROKEN_RIBS_8); } if (ribs >= 4) { ribs -= 4; SET_BIT(ch->loc_hp[1], BROKEN_RIBS_4); } if (ribs >= 2) { ribs -= 2; SET_BIT(ch->loc_hp[1], BROKEN_RIBS_2); } if (ribs >= 1) { ribs -= 1; SET_BIT(ch->loc_hp[1], BROKEN_RIBS_1); } act("One of $n's ribs snap back into place.", ch, NULL, NULL, TO_ROOM); act("One of your ribs snap back into place.", ch, NULL, NULL, TO_CHAR); } else if (IS_HEAD(ch, LOST_EYE_L)) { act("An eyeball appears in $n's left eye socket.", ch, NULL, NULL, TO_ROOM); act("An eyeball appears in your left eye socket.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_EYE_L); } else if (IS_HEAD(ch, LOST_EYE_R)) { act("An eyeball appears in $n's right eye socket.", ch, NULL, NULL, TO_ROOM); act("An eyeball appears in your right eye socket.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_EYE_R); } else if (IS_HEAD(ch, LOST_EAR_L)) { act("An ear grows on the left side of $n's head.", ch, NULL, NULL, TO_ROOM); act("An ear grows on the left side of your head.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_EAR_L); } else if (IS_HEAD(ch, LOST_EAR_R)) { act("An ear grows on the right side of $n's head.", ch, NULL, NULL, TO_ROOM); act("An ear grows on the right side of your head.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_EAR_R); } else if (IS_HEAD(ch, LOST_NOSE)) { act("A nose grows on the front of $n's face.", ch, NULL, NULL, TO_ROOM); act("A nose grows on the front of your face.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_NOSE); REMOVE_BIT(ch->loc_hp[LOC_HEAD], BROKEN_NOSE); } else if (teeth > 0) { if (IS_HEAD(ch, LOST_TOOTH_1)) REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_1); if (IS_HEAD(ch, LOST_TOOTH_2)) REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_2); if (IS_HEAD(ch, LOST_TOOTH_4)) REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_4); if (IS_HEAD(ch, LOST_TOOTH_8)) REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_8); if (IS_HEAD(ch, LOST_TOOTH_16)) REMOVE_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_16); teeth -= 1; if (teeth >= 16) { teeth -= 16; SET_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_16); } if (teeth >= 8) { teeth -= 8; SET_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_8); } if (teeth >= 4) { teeth -= 4; SET_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_4); } if (teeth >= 2) { teeth -= 2; SET_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_2); } if (teeth >= 1) { teeth -= 1; SET_BIT(ch->loc_hp[LOC_HEAD], LOST_TOOTH_1); } act("A missing tooth grows in your mouth.", ch, NULL, NULL, TO_CHAR); act("A missing tooth grows in $n's mouth.", ch, NULL, NULL, TO_ROOM); } else if (IS_HEAD(ch, BROKEN_NOSE)) { act("$n's nose snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your nose snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], BROKEN_NOSE); } else if (IS_HEAD(ch, BROKEN_JAW)) { act("$n's jaw snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your jaw snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], BROKEN_JAW); } else if (IS_HEAD(ch, BROKEN_SKULL)) { act("$n's skull knits itself back together.", ch, NULL, NULL, TO_ROOM); act("Your skull knits itself back together.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_HEAD], BROKEN_SKULL); } else if (IS_BODY(ch, BROKEN_SPINE)) { act("$n's spine knits itself back together.", ch, NULL, NULL, TO_ROOM); act("Your spine knits itself back together.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_BODY], BROKEN_SPINE); } else if (IS_BODY(ch, BROKEN_NECK)) { act("$n's neck snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your neck snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_BODY], BROKEN_NECK); } else if (IS_ARM_L(ch, LOST_ARM)) { act("An arm grows from the stump of $n's left shoulder.", ch, NULL, NULL, TO_ROOM); act("An arm grows from the stump of your left shoulder.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_ARM); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_ARM); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_HAND); } else if (IS_ARM_R(ch, LOST_ARM)) { act("An arm grows from the stump of $n's right shoulder.", ch, NULL, NULL, TO_ROOM); act("An arm grows from the stump of your right shoulder.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_ARM); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_ARM); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_HAND); } else if (IS_LEG_L(ch, LOST_LEG)) { act("A leg grows from the stump of $n's left hip.", ch, NULL, NULL, TO_ROOM); act("A leg grows from the stump of your left hip.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_L], LOST_LEG); REMOVE_BIT(ch->loc_hp[LOC_LEG_L], BROKEN_LEG); SET_BIT(ch->loc_hp[LOC_LEG_L], LOST_FOOT); } else if (IS_LEG_R(ch, LOST_LEG)) { act("A leg grows from the stump of $n's right hip.", ch, NULL, NULL, TO_ROOM); act("A leg grows from the stump of your right hip.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_R], LOST_LEG); REMOVE_BIT(ch->loc_hp[LOC_LEG_R], BROKEN_LEG); SET_BIT(ch->loc_hp[LOC_LEG_R], LOST_FOOT); } else if (IS_ARM_L(ch, BROKEN_ARM)) { act("$n's left arm snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left arm snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_ARM); } else if (IS_ARM_R(ch, BROKEN_ARM)) { act("$n's right arm snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right arm snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_ARM); } else if (IS_LEG_L(ch, BROKEN_LEG)) { act("$n's left leg snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left leg snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_L], BROKEN_LEG); } else if (IS_LEG_R(ch, BROKEN_LEG)) { act("$n's right leg snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right leg snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_R], BROKEN_LEG); } else if (IS_ARM_L(ch, LOST_HAND)) { act("A hand grows from the stump of $n's left wrist.", ch, NULL, NULL, TO_ROOM); act("A hand grows from the stump of your left wrist.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_HAND); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_THUMB); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_I); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_M); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_R); SET_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_L); } else if (IS_ARM_R(ch, LOST_HAND)) { act("A hand grows from the stump of $n's right wrist.", ch, NULL, NULL, TO_ROOM); act("A hand grows from the stump of your right wrist.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_HAND); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_THUMB); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_I); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_M); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_R); SET_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_L); } else if (IS_LEG_L(ch, LOST_FOOT)) { act("A foot grows from the stump of $n's left ankle.", ch, NULL, NULL, TO_ROOM); act("A foot grows from the stump of your left ankle.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_L], LOST_FOOT); } else if (IS_LEG_R(ch, LOST_FOOT)) { act("A foot grows from the stump of $n's right ankle.", ch, NULL, NULL, TO_ROOM); act("A foot grows from the stump of your right ankle.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_LEG_R], LOST_FOOT); } else if (IS_ARM_L(ch, LOST_THUMB)) { act("A thumb slides out of $n's left hand.", ch, NULL, NULL, TO_ROOM); act("A thumb slides out of your left hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_THUMB); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_THUMB); } else if (IS_ARM_L(ch, BROKEN_THUMB)) { act("$n's left thumb snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left thumb snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_THUMB); } else if (IS_ARM_L(ch, LOST_FINGER_I)) { act("An index finger slides out of $n's left hand.", ch, NULL, NULL, TO_ROOM); act("An index finger slides out of your left hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_I); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_I); } else if (IS_ARM_L(ch, BROKEN_FINGER_I)) { act("$n's left index finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left index finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_I); } else if (IS_ARM_L(ch, LOST_FINGER_M)) { act("A middle finger slides out of $n's left hand.", ch, NULL, NULL, TO_ROOM); act("A middle finger slides out of your left hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_M); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_M); } else if (IS_ARM_L(ch, BROKEN_FINGER_M)) { act("$n's left middle finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left middle finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_M); } else if (IS_ARM_L(ch, LOST_FINGER_R)) { act("A ring finger slides out of $n's left hand.", ch, NULL, NULL, TO_ROOM); act("A ring finger slides out of your left hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_R); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_R); } else if (IS_ARM_L(ch, BROKEN_FINGER_R)) { act("$n's left ring finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left ring finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_R); } else if (IS_ARM_L(ch, LOST_FINGER_L)) { act("A little finger slides out of $n's left hand.", ch, NULL, NULL, TO_ROOM); act("A little finger slides out of your left hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], LOST_FINGER_L); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_L); } else if (IS_ARM_L(ch, BROKEN_FINGER_L)) { act("$n's left little finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your left little finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_L], BROKEN_FINGER_L); } else if (IS_ARM_R(ch, LOST_THUMB)) { act("A thumb slides out of $n's right hand.", ch, NULL, NULL, TO_ROOM); act("A thumb slides out of your right hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_THUMB); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_THUMB); } else if (IS_ARM_R(ch, BROKEN_THUMB)) { act("$n's right thumb snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right thumb snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_THUMB); } else if (IS_ARM_R(ch, LOST_FINGER_I)) { act("An index finger slides out of $n's right hand.", ch, NULL, NULL, TO_ROOM); act("An index finger slides out of your right hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_I); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_I); } else if (IS_ARM_R(ch, BROKEN_FINGER_I)) { act("$n's right index finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right index finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_I); } else if (IS_ARM_R(ch, LOST_FINGER_M)) { act("A middle finger slides out of $n's right hand.", ch, NULL, NULL, TO_ROOM); act("A middle finger slides out of your right hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_M); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_M); } else if (IS_ARM_R(ch, BROKEN_FINGER_M)) { act("$n's right middle finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right middle finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_M); } else if (IS_ARM_R(ch, LOST_FINGER_R)) { act("A ring finger slides out of $n's right hand.", ch, NULL, NULL, TO_ROOM); act("A ring finger slides out of your right hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_R); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_R); } else if (IS_ARM_R(ch, BROKEN_FINGER_R)) { act("$n's right ring finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right ring finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_R); } else if (IS_ARM_R(ch, LOST_FINGER_L)) { act("A little finger slides out of $n's right hand.", ch, NULL, NULL, TO_ROOM); act("A little finger slides out of your right hand.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], LOST_FINGER_L); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_L); } else if (IS_ARM_R(ch, BROKEN_FINGER_L)) { act("$n's right little finger snaps back into place.", ch, NULL, NULL, TO_ROOM); act("Your right little finger snaps back into place.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_ARM_R], BROKEN_FINGER_L); } else if (IS_BODY(ch, CUT_THROAT)) { if (IS_SET(ch->loc_hp[6], BLEEDING_THROAT)) return; act("The wound in $n's throat closes up.", ch, NULL, NULL, TO_ROOM); act("The wound in your throat closes up.", ch, NULL, NULL, TO_CHAR); REMOVE_BIT(ch->loc_hp[LOC_BODY], CUT_THROAT); } return; } void vamp_rage(CHAR_DATA * ch) { if (IS_NPC(ch)) return; send_to_char ("You scream with rage as the beast within consumes you!\n\r", ch); act("$n screams with rage as $s inner beast consumes $m!.", ch, NULL, NULL, TO_ROOM); do_beastlike(ch, ""); do_frenzy(ch, ""); return; } void do_humanity(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_VAMPIRE) && ch->beast > 0 && ch->beast < 100 && number_range(1, 300) <= ch->beast) { if (ch->beast == 1) { send_to_char("You have attained Golconda!\n\r", ch); ch->exp += 1000000; if (!IS_IMMUNE(ch, IMM_SUNLIGHT)) SET_BIT(ch->immune, IMM_SUNLIGHT); } else send_to_char ("You feel slightly more in control of your beast.\n\r", ch); ch->beast -= 1; } return; } void do_beastlike(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int blood; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_NPC(ch) && IS_CLASS(ch, CLASS_VAMPIRE) && ch->beast < 100 && ch->beast > 0 && number_range(1, 500) <= ch->beast) { if (ch->beast < 99) send_to_char ("You feel your beast take more control over your actions.\n\r", ch); else send_to_char ("Your beast has fully taken over control of your actions!\n\r", ch); ch->beast += 1; blood = ch->pcdata->condition[COND_THIRST]; ch->pcdata->condition[COND_THIRST] = 666; if ((IS_VAMPAFF(ch, VAM_PROTEAN) || (IS_VAMPAFF(ch, VAM_OBTENEBRATION))) && !IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) do_nightsight(ch, ""); if (!IS_VAMPAFF(ch, VAM_FANGS)) do_fangs(ch, ""); if (IS_VAMPAFF(ch, VAM_PROTEAN) && !IS_VAMPAFF(ch, VAM_CLAWS)) do_claws(ch, ""); ch->pcdata->condition[COND_THIRST] = blood; } return; } void do_werewolf(CHAR_DATA * ch, char *argument) { char buf[MAX_INPUT_LENGTH]; char arg[MAX_INPUT_LENGTH]; CHAR_DATA *vch; CHAR_DATA *vch_next; OBJ_DATA *obj; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF)) return; if (IS_SET(ch->special, SPC_WOLFMAN)) return; SET_BIT(ch->special, SPC_WOLFMAN); send_to_char("You throw back your head and howl with rage!\n\r", ch); act("$n throws back $s head and howls with rage!.", ch, NULL, NULL, TO_ROOM); send_to_char("Coarse dark hair sprouts from your body.\n\r", ch); act("Coarse dark hair sprouts from $n's body.", ch, NULL, NULL, TO_ROOM); if (!IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) { send_to_char("Your eyes start glowing red.\n\r", ch); act("$n's eyes start glowing red.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT); } if (!IS_VAMPAFF(ch, VAM_FANGS)) { send_to_char ("A pair of long fangs extend from your mouth.\n\r", ch); act("A pair of long fangs extend from $n's mouth.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS); } if (!IS_VAMPAFF(ch, VAM_CLAWS)) { send_to_char ("Razor sharp talons extend from your fingers.\n\r", ch); act("Razor sharp talons extend from $n's fingers.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); } if ((obj = get_eq_char(ch, WEAR_WIELD)) != NULL && (!IS_SET(obj->spectype, SITEM_WOLFWEAPON) || obj->pIndexData->vnum == OBJ_VNUM_PROTOPLASM)) { act("$p drops from your right hand.", ch, obj, NULL, TO_CHAR); act("$p drops from $n's right hand.", ch, obj, NULL, TO_ROOM); obj_from_char(obj); obj_to_char(obj, ch); } if ((obj = get_eq_char(ch, WEAR_HOLD)) != NULL && (!IS_SET(obj->spectype, SITEM_WOLFWEAPON) || obj->pIndexData->vnum == OBJ_VNUM_PROTOPLASM)) { act("$p drops from your left hand.", ch, obj, NULL, TO_CHAR); act("$p drops from $n's left hand.", ch, obj, NULL, TO_ROOM); obj_from_char(obj); obj_to_char(obj, ch); } SET_BIT(ch->affected_by, AFF_POLYMORPH); SET_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED); xprintf(buf, "%s the werewolf", ch->name); free_string(ch->morph); ch->morph = str_dup(buf); ch->rage += 25; ch->hitroll += 50; ch->damroll += 50; if (ch->power[DISC_WERE_WOLF] > 3) ch->rage += 100; if (ch->rage > 300) ch->rage = 300; ch->hit += 2000; for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (ch == vch) { act("You throw back your head and howl with rage!", ch, NULL, NULL, TO_CHAR); continue; } if (!IS_NPC(vch) && vch->pcdata->chobj != NULL) continue; if (!IS_NPC(vch)) { if (vch->in_room == ch->in_room) act("$n throws back $s head and howls with rage!", ch, NULL, vch, TO_VICT); else if (vch->in_room->area == ch->in_room->area) send_to_char ("You hear a fearsome howl close by!\n\r", vch); else if (!CAN_PK(vch)) continue; } if (vch->in_room == ch->in_room && can_see(ch, vch)) { multi_hit(ch, vch, TYPE_UNDEFINED); if (vch == NULL || vch->position <= POS_STUNNED) continue; multi_hit(ch, vch, TYPE_UNDEFINED); } } return; } void do_unwerewolf(CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF)) return; if (!IS_SET(ch->special, SPC_WOLFMAN)) return; REMOVE_BIT(ch->special, SPC_WOLFMAN); REMOVE_BIT(ch->affected_by, AFF_POLYMORPH); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_DISGUISED); free_string(ch->morph); ch->morph = str_dup(""); if (IS_VAMPAFF(ch, VAM_CLAWS)) { send_to_char("Your talons slide back into your fingers.\n\r", ch); act("$n's talons slide back into $s fingers.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_CLAWS); } if (IS_VAMPAFF(ch, VAM_FANGS)) { send_to_char("Your fangs slide back into your mouth.\n\r", ch); act("$n's fangs slide back into $s mouth.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_FANGS); } if (IS_VAMPAFF(ch, VAM_NIGHTSIGHT)) { send_to_char("The red glow in your eyes fades.\n\r", ch); act("The red glow in $n's eyes fades.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->pcdata->stats[UNI_AFF], VAM_NIGHTSIGHT); } send_to_char("Your coarse hair shrinks back into your body.\n\r", ch); act("$n's coarse hair shrinks back into $s body.", ch, NULL, NULL, TO_ROOM); ch->rage -= 25; ch->hitroll -= 50; ch->damroll -= 50; if (ch->rage < 0) ch->rage = 0; if (ch->hit > 2000) ch->hit -= 2000; return; } void do_possession(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; CHAR_DATA *familiar; char arg[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->power[DISC_VAMP_DOMI] < 3 && IS_CLASS(ch, CLASS_MAGE)) { send_to_char ("You must obtain at least level 3 in Dominate to use Possession.\n\r", ch); return; } if ((familiar = ch->pcdata->familiar) != NULL) { xprintf(buf, "You break your hold over %s.\n\r", familiar->short_descr); send_to_char(buf, ch); familiar->wizard = NULL; ch->pcdata->familiar = NULL; return; } if (arg[0] == '\0') { send_to_char("What do you wish to Possess?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (ch == victim) { send_to_char("What an intelligent idea!\n\r", ch); return; } if (!IS_NPC(victim)) { send_to_char("Not on players.\n\r", ch); return; } if (victim->wizard != NULL) { send_to_char("You are unable to possess them.\n\r", ch); return; } if (victim->level > (ch->spl[RED_MAGIC] * 0.25)) { send_to_char("They are too powerful.\n\r", ch); return; } if (ch->pcdata->condition[COND_THIRST] < 50 && IS_CLASS(ch, CLASS_VAMPIRE)) { send_to_char("You have insufficient blood.\n\r", ch); return; } ch->pcdata->condition[COND_THIRST] -= 50; ch->pcdata->familiar = victim; victim->wizard = ch; act("You concentrate on $N.", ch, NULL, victim, TO_CHAR); act("$n is staring at you!", ch, NULL, victim, TO_VICT); act("$n starts staring at $N", ch, NULL, victim, TO_NOTVICT); return; } void do_familiar(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; CHAR_DATA *familiar; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); return; if (arg[0] == '\0') { send_to_char("What do you wish to make your familiar?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (ch == victim) { send_to_char("Become your own familiar?\n\r", ch); return; } if (!IS_NPC(victim)) { send_to_char("Not on players.\n\r", ch); return; } if ((familiar = ch->pcdata->familiar) != NULL) familiar->wizard = NULL; ch->pcdata->familiar = victim; victim->wizard = ch; send_to_char("Ok.\n\r", ch); return; } void do_fcommand(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; if (IS_NPC(ch)) return; if (IS_CLASS(ch, CLASS_VAMPIRE) && (ch->power[DISC_VAMP_DOMI] < 3)) { send_to_char ("You are not trained in the Dominate discipline.\n\r", ch); return; } if ((victim = ch->pcdata->familiar) == NULL) { send_to_char("But you don't have a familiar!\n\r", ch); return; } if (argument[0] == '\0') { send_to_char("What do you wish to make your familiar do?\n\r", ch); return; } interpret(victim, argument); return; } void do_vanish(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_VAMPIRE) && !IS_CLASS(ch, CLASS_HOBBIT) && !IS_CLASS(ch, CLASS_FAE) && !IS_CLASS(ch, CLASS_SHADOW)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_WEREWOLF) && ch->power[DISC_WERE_OWL] < 1) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_VAMPIRE) && ch->power[DISC_VAMP_OBFU] < 1) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_SHADOW) && !IS_SET(ch->pcdata->powers[SHADOW_POWERS], NSHADOWS_HIDE)) { send_to_char("Huh?\n\r", ch); return; } if (ch->fight_timer > 0) { send_to_char("Not until your fight timer expires.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_FAE) && ch->power[DISC_FAE_ARCANE] < 4) { send_to_char("You can't do that, yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_HOBBIT) && ch->pcdata->powers[HOBBIT_DISHES] < 5) { send_to_char("You need to master 5 ingredients.\n\r", ch); return; } if (ch->fight_timer > 0) { send_to_char("Not until your fight timer expires.\n\r", ch); return; } if (IS_SET(ch->act, AFF_HIDE)) { REMOVE_BIT(ch->act, AFF_HIDE); send_to_char("You slowly fade into existance.\n\r", ch); act("$n slowly fades into existance.", ch, NULL, NULL, TO_ROOM); } else { send_to_char("You slowly fade out of existance.\n\r", ch); act("$n slowly fades out of existance.", ch, NULL, NULL, TO_ROOM); SET_BIT(ch->act, AFF_HIDE); } return; } void do_flex(CHAR_DATA * ch, char *argument) { act("You flex your bulging muscles.", ch, NULL, NULL, TO_CHAR); act("$n flexes $s bulging muscles.", ch, NULL, NULL, TO_ROOM); if (IS_NPC(ch)) return; if (IS_EXTRA(ch, TIED_UP)) { act("The ropes restraining you snap.", ch, NULL, NULL, TO_CHAR); act("The ropes restraining $n snap.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT(ch->extra, TIED_UP); } if (is_affected(ch, gsn_web)) { act("The webbing entrapping $n breaks away.", ch, NULL, NULL, TO_ROOM); send_to_char("The webbing entrapping you breaks away.\n\r", ch); affect_strip(ch, gsn_web); } if (IS_AFFECTED(ch, AFF_WEBBED)) { act("The webbing entrapping $n breaks away.", ch, NULL, NULL, TO_ROOM); send_to_char("The webbing entrapping you breaks away.\n\r", ch); REMOVE_BIT(ch->affected_by, AFF_WEBBED); } if (IS_AFF2(ch, AFF2_THORNS)) { act("The thorns and brambles holding $n breaks away.", ch, NULL, NULL, TO_ROOM); send_to_char("The brambles break away.\n\r", ch); REMOVE_BIT(ch->affected_by2, AFF2_THORNS); return; } WAIT_STATE(ch, 12); return; } void do_rage(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_DEMON)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_WEREWOLF)) { if (!IS_SET(ch->special, SPC_WOLFMAN)) { send_to_char("You start snarling angrilly.\n\r", ch); act("$n starts snarling angrilly.", ch, NULL, NULL, TO_ROOM); ch->rage += number_range(40, 60); if (ch->rage >= 100) do_werewolf(ch, ""); WAIT_STATE(ch, 12); return; } send_to_char("But you are already in a rage!\n\r", ch); } if (IS_CLASS(ch, CLASS_DEMON)) { if (ch->power[DISC_DAEM_ATTA] < 3) { stc("You try, but cannot summon your beast.\n\r", ch); return; } if (ch->beast < 1) ch->beast = 1; if (ch->beast > ch->rage || ch->rage < 125) { ch->rage += number_range(ch->generation, 25); stc("You scream as you plunge into a mad attacking frenzy.\n\r", ch); act("$n screams in frenzied rage.", ch, NULL, NULL, TO_ROOM); if (number_percent() < (ch->beast + 1)) { stc("You feel the beast take more control.\n\r", ch); ch->beast += 1; if (ch->beast > 100) ch->beast = 100; } WAIT_STATE(ch, 12); return; } stc("You have reached the pinnacle of your frenzy.\n\r", ch); } return; } void do_calm(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_DEMON) && !IS_CLASS(ch, CLASS_NINJA)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_WEREWOLF)) { if ((ch->power[DISC_WERE_WOLF] < 3) && (IS_CLASS(ch, CLASS_WEREWOLF))) { stc("You need level three in the Wolf totem to Calm.\n\r", ch); return; } if (IS_SET(ch->special, SPC_WOLFMAN)) { send_to_char ("You take a deep breath and calm yourself.\n\r", ch); act("$n takes a deep breath and tries to calm $mself.", ch, NULL, NULL, TO_ROOM); ch->rage -= number_range(60, 90); if (ch->rage < 0) ch->rage = 0; if (ch->rage < 100) do_unwerewolf(ch, ""); WAIT_STATE(ch, 12); return; } send_to_char("But you are not in crinos form!\n\r", ch); } if (IS_CLASS(ch, CLASS_NINJA)) { send_to_char("You take a deep breath and calm yourself.\n\r", ch); act("$n takes a deep breath and tries to calm $mself.", ch, NULL, NULL, TO_ROOM); ch->rage = 0; WAIT_STATE(ch, 12); return; } if (IS_CLASS(ch, CLASS_DEMON)) { if (ch->power[DISC_DAEM_ATTA] < 4) { stc("You need level four in Attack to calm your frenzy.\n\r", ch); return; } if (ch->beast >= 100) ch->beast = 100; if (ch->beast <= 0) ch->beast = 0; ch->rage -= (40 - (ch->beast / 3) + dice(1, 10)); if (ch->rage <= 0) { ch->rage = 0; send_to_char ("You have calmed out of your rage completely.\n\r", ch); } else { send_to_char ("You hold your breath and try to calm your frenzy.\n\r", ch); WAIT_STATE(ch, 8); } return; } return; } void do_totems(CHAR_DATA * ch, char *argument) { if (IS_NPC(ch)) return; send_to_char ("Please use the new commands, Disciplines and research.\n\r", ch); return; } void do_web(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; int sn; int level; int spelltype; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF) && !IS_CLASS(ch, CLASS_DROW) && !IS_CLASS(ch, CLASS_CYBORG) && !IS_CLASS(ch, CLASS_DROID) && !IS_CLASS(ch, CLASS_TANARRI) && !IS_CLASS(ch, CLASS_SAMURAI) && !IS_CLASS(ch, CLASS_PRIEST)) { send_to_char("Huh?\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DROID) && !IS_SET(ch->pcdata->powers[DROID_IMPLANTS], IMPLANT_ARMWIRE)) { send_to_char("You don't have the armwire implant.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_WEREWOLF) && ch->power[DISC_WERE_SPID] < 2) { send_to_char("You don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_DROW) && !IS_SET(ch->pcdata->powers[1], DPOWER_WEB)) { send_to_char("You don't have that power yet.\n\r", ch); return; } if (IS_CLASS(ch, CLASS_TANARRI) && ch->pcdata->rank < 3) { send_to_char("You don't have that power yet.\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (ch == victim) { send_to_char("You cannot web yourself.\n\r", ch); return; } if (IS_AFFECTED(victim, AFF_ETHEREAL)) { send_to_char("You cannot web an ethereal person.\n\r", ch); return; } if ((sn = skill_lookup("web")) < 0) return; spelltype = skill_table[sn].target; level = ch->spl[spelltype] * 0.25; (*skill_table[sn].spell_fun) (sn, level, ch, victim); WAIT_STATE(ch, 12); return; } void do_mitsukeru(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; ROOM_INDEX_DATA *chroom; ROOM_INDEX_DATA *victimroom; 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] < 1) { send_to_char("Huh?\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Scry on whom?\n\r", ch); return; } if ((victim = get_char_world(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } chroom = ch->in_room; victimroom = victim->in_room; char_from_room(ch); char_to_room(ch, victimroom); if (IS_AFFECTED(ch, AFF_SHADOWPLANE) && (!IS_AFFECTED(victim, AFF_SHADOWPLANE))) { REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "auto"); SET_BIT(ch->affected_by, AFF_SHADOWPLANE); } else if (!IS_AFFECTED(ch, AFF_SHADOWPLANE) && (IS_AFFECTED(victim, AFF_SHADOWPLANE))) { SET_BIT(ch->affected_by, AFF_SHADOWPLANE); do_look(ch, "auto"); REMOVE_BIT(ch->affected_by, AFF_SHADOWPLANE); } else do_look(ch, "auto"); char_from_room(ch); char_to_room(ch, chroom); if (!IS_NPC(victim)) ch->fight_timer += 5; return; } void do_koryou(CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; char buf[MAX_INPUT_LENGTH]; argument = one_argument(argument, arg); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_NINJA) || ch->pcdata->powers[NPOWER_SORA] < 2) { send_to_char("Huh?\n\r", ch); return; } if (arg[0] == '\0') { send_to_char("Read the aura on what?\n\r", ch); return; } if ((victim = get_char_room(ch, NULL, arg)) == NULL) { if ((obj = get_obj_carry(ch, arg, ch)) == NULL) { send_to_char("Read the aura on what?\n\r", ch); return; } act("$n examines $p intently.", ch, obj, NULL, TO_ROOM); spell_identify(skill_lookup("identify"), ch->level, ch, obj); return; } if (!IS_NPC(victim) && (IS_IMMUNE(victim, IMM_SHIELDED) || (IS_CLASS(victim, CLASS_DROW) && IS_SET(victim->pcdata->powers[1], DPOWER_DROWSHIELD))) && !IS_ITEMAFF(ch, ITEMA_VISION)) { send_to_char("You are unable to read their aura.\n\r", ch); return; } act("$n examines $N intently.", ch, NULL, victim, TO_NOTVICT); act("$n examines you intently.", ch, NULL, victim, TO_VICT); if (IS_NPC(victim)) xprintf(buf, "%s is an NPC.\n\r", victim->short_descr); else { if (victim->level == 12) xprintf(buf, "%s is an Implementor.\n\r", victim->name); else if (victim->level == 11) xprintf(buf, "%s is a High Judge.\n\r", victim->name); else if (victim->level == 10) xprintf(buf, "%s is a Judge.\n\r", victim->name); else if (victim->level == 9) xprintf(buf, "%s is an Enforcer.\n\r", victim->name); else if (victim->level == 8) xprintf(buf, "%s is a Quest Maker.\n\r", victim->name); else if (victim->level == 7) xprintf(buf, "%s is a Builder.\n\r", victim->name); else if (victim->level >= 3) xprintf(buf, "%s is an Avatar.\n\r", victim->name); else xprintf(buf, "%s is a Mortal.\n\r", victim->name); } send_to_char(buf, ch); if (!IS_NPC(victim)) { xprintf(buf, "Str:%d, Int:%d, Wis:%d, Dex:%d, Con:%d.\n\r", get_curr_str(victim), get_curr_int(victim), get_curr_wis(victim), get_curr_dex(victim), get_curr_con(victim)); send_to_char(buf, ch); } xprintf(buf, "Hp:%d/%d, Mana:%d/%d, Move:%d/%d.\n\r", victim->hit, victim->max_hit, victim->mana, victim->max_mana, victim->move, victim->max_move); send_to_char(buf, ch); if (!IS_NPC(victim)) xprintf(buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", char_hitroll(victim), char_damroll(victim), char_ac(victim)); else xprintf(buf, "AC:%d.\n\r", char_ac(victim)); send_to_char(buf, ch); if (!IS_NPC(victim)) { xprintf(buf, "Status:%d, ", victim->race); send_to_char(buf, ch); if (IS_CLASS(victim, CLASS_VAMPIRE)) { xprintf(buf, "Blood:%d, ", victim->pcdata->condition[COND_THIRST]); send_to_char(buf, ch); } } xprintf(buf, "Alignment:%d.\n\r", victim->alignment); send_to_char(buf, ch); if (!IS_NPC(victim) && IS_EXTRA(victim, EXTRA_PREGNANT)) act("$N is pregnant.", ch, NULL, victim, TO_CHAR); if (!IS_NPC(victim) && IS_CLASS(victim, CLASS_VAMPIRE)) { send_to_char("Disciplines:", ch); if (IS_VAMPAFF(victim, VAM_PROTEAN)) send_to_char(" Protean", ch); if (IS_VAMPAFF(victim, VAM_CELERITY)) send_to_char(" Celerity", ch); if (IS_VAMPAFF(victim, VAM_FORTITUDE)) send_to_char(" Fortitude", ch); if (IS_VAMPAFF(victim, VAM_POTENCE)) send_to_char(" Potence", ch); if (IS_VAMPAFF(victim, VAM_OBFUSCATE)) send_to_char(" Obfuscate", ch); if (IS_VAMPAFF(victim, VAM_OBTENEBRATION)) send_to_char(" Obtenebration", ch); if (IS_VAMPAFF(victim, VAM_SERPENTIS)) send_to_char(" Serpentis", ch); if (IS_VAMPAFF(victim, VAM_AUSPEX)) send_to_char(" Auspex", ch); if (IS_VAMPAFF(victim, VAM_DOMINATE)) send_to_char(" Dominate", ch); if (IS_VAMPAFF(victim, VAM_PRESENCE)) send_to_char(" Presence", ch); if (IS_VAMPAFF(victim, VAM_VICISSITUDE)) send_to_char(" Vicissitude", ch); if (IS_VAMPAFF(victim, VAM_THAU)) send_to_char(" Thaumaturgy", ch); if (IS_VAMPAFF(victim, VAM_ANIMAL)) send_to_char(" Animalism", ch); if (IS_VAMPAFF(victim, VAM_QUIETUS)) send_to_char(" Quietus", ch); send_to_char(".\n\r", ch); } return; }