/*************************************************************************** * God Wars Mud copyright (C) 1994, 1995, 1996 by Richard Woolcock * * * * Legend of Chrystancia copyright (C) 1999, 2000, 2001 by Matthew Little * * This mud is NOT to be copied in whole or in part, or to be run without * * the permission of Matthew Little. Nobody else has permission to * * authorise the use of this code. * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" #include "garou.h" bool is_garou (CHAR_DATA * ch) { if (IS_NPC (ch)) return FALSE; if (IS_CLASS (ch, CLASS_WEREWOLF)) return TRUE; else return FALSE; } void do_gifts (CHAR_DATA * ch, char *argument) { char arg1[MAX_INPUT_LENGTH]; char arg2[MAX_INPUT_LENGTH]; char buf[MAX_STRING_LENGTH]; char lin[MAX_STRING_LENGTH]; argument = one_argument (argument, arg1); argument = one_argument (argument, arg2); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (arg1[0] == '\0' && arg2[0] == '\0') { sprintf (lin, "#o================================================================================#n\n\r"); stc (lin, ch); stc (" Breed\n\r", ch); stc (lin, ch); sprintf (buf, " Homid [ %d ] Metis [ %d ] Lupus [ %d ]\n\r", ch->gifts[HOMID], ch->gifts[METIS], ch->gifts[LUPUS]); stc (buf, ch); stc (lin, ch); stc (" Auspice\n\r", ch); stc (lin, ch); sprintf (buf, " Ragabash [ %d ] Theurge [ %d ] Philodox [ %d ]\n\r", ch->gifts[RAGABASH], ch->gifts[THEURGE], ch->gifts[PHILODOX]); stc (buf, ch); sprintf (buf, " Galliard [ %d ] Ahroun [ %d ]\n\r", ch->gifts[GALLIARD], ch->gifts[AHROUN]); stc (buf, ch); stc (lin, ch); stc (" Tribe\n\r", ch); stc (lin, ch); sprintf (buf, " Black Furies [ %d ] Wendigo [ %d ] Children of Gaia [ %d ]\n\r", ch->gifts[BLACKFURIES], ch->gifts[WENDIGO], ch->gifts[CHILDREN]); stc (buf, ch); sprintf (buf, " Silver Fangs [ %d ] Uktena [ %d ] Get of Fenris [ %d ]\n\r", ch->gifts[SILVERFANGS], ch->gifts[UKTENA], ch->gifts[GETOFFENRIS]); stc (buf, ch); sprintf (buf, " Red Talons [ %d ] Shadow Lords [ %d ] Silent Striders [ %d ]\n\r", ch->gifts[REDTALONS], ch->gifts[SHADOWLORDS], ch->gifts[SILENTSTRIDERS]); stc (buf, ch); sprintf (buf, " StarGazers [ %d ] Bone Gnawers [ %d ] Glass Walkers [ %d ]\n\r", ch->gifts[STARGAZERS], ch->gifts[BONEGNAWERS], ch->gifts[GLASSWALKERS]); stc (buf, ch); sprintf (buf, " Fianna [ %d ]\n\r", ch->gifts[FIANNA]); stc (buf, ch); stc (lin, ch); stc ("To see the powers you have learned for each gift, type gifts <giftname> without\n\r", ch); stc ("any spaces <example - gifts childrenofgaia>. Type wwpowers to see the commands\n\r", ch); stc ("to use the powers you have learned\n\r", ch); return; } if (arg2[0] == '\0') { if (!str_cmp (arg1, "ragabash")) { if (ch->gifts[RAGABASH] == 0) { stc ("You have no knowledge of the Gifts of Ragabash.\n\r", ch); return; } if (ch->gifts[RAGABASH] >= 1) { divide_to_char (ch); centre_text ("The Gifts of Ragabash", ch); divide_to_char (ch); centre_text ("Blur of the Milky Eye (vanish)", ch); } if (ch->gifts[RAGABASH] >= 2) centre_text ("Scent of Running Water", ch); if (ch->gifts[RAGABASH] >= 3) centre_text ("Blissful Ignorance", ch); if (ch->gifts[RAGABASH] >= 4) centre_text ("Luna's Blessing", ch); if (ch->gifts[RAGABASH] >= 5) centre_text ("Whelp's Body, Tailmonkey", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "lupus")) { if (ch->gifts[LUPUS] == 0) { stc ("You have no knowledge of the Gifts of Lupus\n\r", ch); return; } if (ch->gifts[LUPUS] >= 1) { divide_to_char (ch); centre_text ("The Gifts of Lupus", ch); divide_to_char (ch); centre_text ("Heightened Senses", ch); } if (ch->gifts[LUPUS] >= 2) centre_text ("Catfeet", ch); if (ch->gifts[LUPUS] >= 3) centre_text ("Gnaw", ch); if (ch->gifts[LUPUS] >= 4) centre_text ("Elemental Gift", ch); if (ch->gifts[LUPUS] >= 5) centre_text ("Song of the Great Beast", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "metis")) { if (ch->gifts[METIS] == 0) { stc ("You have no knowledge of the Gifts of Metis.\n\r", ch); return; } if (ch->gifts[METIS] >= 1) { divide_to_char (ch); centre_text ("The Gifts of Metis", ch); divide_to_char (ch); centre_text ("Quills", ch); } if (ch->gifts[METIS] >= 2) centre_text ("Burrow", ch); if (ch->gifts[METIS] >= 3) centre_text ("Nightsight", ch); if (ch->gifts[METIS] >= 4) centre_text ("Wither Limb", ch); if (ch->gifts[METIS] >= 5) centre_text ("Totem Gift (not in)", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "theurge")) { if (ch->gifts[THEURGE] == 0) { stc ("You have no knowledge of the Theurge Gifts.\n\r", ch); return; } else { divide_to_char (ch); centre_text ("The Gifts of Theurge", ch); divide_to_char (ch); centre_text ("Mother's Touch", ch); centre_text ("(Grasp the Beyond)", ch); centre_text ("Spirit Drain", ch); centre_text ("Feral Lobotomy", ch); centre_text ("The Malleable Spirit", ch); return; } } if (!str_cmp (arg1, "Philodox")) { divide_to_char (ch); centre_text ("The Gifts of Philodox", ch); divide_to_char (ch); centre_text ("(Resist Pain)", ch); centre_text ("(King of the Beasts)", ch); centre_text ("(Strength of Purpose)", ch); centre_text ("(Weak Arm)", ch); centre_text ("Wall of Granite", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Ahroun")) { divide_to_char (ch); centre_text ("The Gifts of Ahroun", ch); divide_to_char (ch); centre_text ("(Inspiration)", ch); centre_text ("(Razor Claws)", ch); centre_text ("(The Falling Touch)", ch); centre_text ("(Silver Claws)", ch); centre_text ("Clenched Jaw", ch); //centre_text("(Stoking Fury's Furnace)",ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "BlackFuries")) { divide_to_char (ch); centre_text ("The Gifts of the Black Furies", ch); divide_to_char (ch); centre_text ("(Coup De Grace)", ch); centre_text ("(Visceral Agony)", ch); centre_text ("Body Wrack", ch); centre_text ("(Wasp Talons)", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "ChildrenofGaia")) { divide_to_char (ch); centre_text ("The Gifts of the Children of Gaia", ch); divide_to_char (ch); centre_text ("(Luna's Armor)", ch); centre_text ("Dazzle", ch); centre_text ("Garou Serenity", ch); centre_text ("(Halo of the Sun", ch); centre_text ("The Living Wood", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "GetofFenris")) { divide_to_char (ch); centre_text ("The Gifts of the Get of Fenris", ch); divide_to_char (ch); centre_text ("(Halt the Coward's Flight)", ch); centre_text ("Snarl of the Predator", ch); centre_text ("(Might of Thor)", ch); centre_text ("(Venom Blood)", ch); centre_text ("(Fenris' Bite)", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "RedTalons")) { divide_to_char (ch); centre_text ("The Gifts of the Red Talons", ch); divide_to_char (ch); centre_text ("Avalanche", ch); centre_text ("Barrage", ch); centre_text ("Gaia's Vengeance", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "ShadowLords")) { divide_to_char (ch); centre_text ("The Gifts of the Shadow Lords", ch); divide_to_char (ch); centre_text ("(Fatal Flaw)", ch); centre_text ("(Aura of Confidence)", ch); centre_text ("Clap of Thunder", ch); centre_text ("(Icy Chill of Despair)", ch); centre_text ("Paralyzing Stare", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "SilentStriders")) { divide_to_char (ch); centre_text ("The Gifts of the Silent Striders", ch); divide_to_char (ch); centre_text ("(Speed of Thought)", ch); centre_text ("(Speed Beyond Thought)", ch); centre_text ("(Messenger's Speed)", ch); centre_text ("Gate of the Moon", ch); centre_text ("Reach the Umbra", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "SilverFangs")) { divide_to_char (ch); centre_text ("The Gifts of the Silver Fangs", ch); divide_to_char (ch); centre_text ("(Awe)", ch); centre_text ("(Silver Claws)", ch); centre_text ("(Mindblock)", ch); centre_text ("Luna's Avenger", ch); centre_text ("Paws of the Newborn Cub", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Stargazers")) { divide_to_char (ch); centre_text ("The Gifts of the StarGazers", ch); divide_to_char (ch); centre_text ("(Inner Strength)", ch); centre_text ("Merciful Blow", ch); centre_text ("(Preternatural Awareness", ch); centre_text ("(Circular Attack)", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Uktena")) { divide_to_char (ch); centre_text ("The Gifts of the Uktena", ch); divide_to_char (ch); centre_text ("Dark Shroud", ch); centre_text ("(Spirit of the Bird)", ch); centre_text ("Call Flame Spirit", ch); centre_text ("Invisibility", ch); centre_text ("(Hand of the Earth Lords)", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Wendigo")) { divide_to_char (ch); centre_text ("The Gifts of the Wendigo", ch); divide_to_char (ch); centre_text ("Camouflage", ch); centre_text ("Cutting Wind", ch); centre_text ("Call the Cannibal Spirit", ch); centre_text ("Heart of Ice", ch); centre_text ("Chill of the Early Frost", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "BoneGnawers")) { divide_to_char (ch); centre_text ("The Gifts of the Bone Gnawer", ch); divide_to_char (ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Galliard")) { divide_to_char (ch); centre_text ("The Gifts of the Galliard", ch); divide_to_char (ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "GlassWalkers")) { divide_to_char (ch); centre_text ("The Gifts of the Glass Walkers", ch); divide_to_char (ch); centre_text ("Un-coded", ch); centre_text ("Senseaura", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "Fianna")) { divide_to_char (ch); centre_text ("The Gifts of the Fianna", ch); divide_to_char (ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); centre_text ("Un-coded", ch); divide_to_char (ch); return; } if (!str_cmp (arg1, "homid")) { if (ch->gifts[HOMID] == 0) { stc ("You have no knowledge of the Gift of Homid.\n\r", ch); return; } if (ch->gifts[HOMID] >= 1) { divide_to_char (ch); centre_text ("The Gifts of Homid", ch); divide_to_char (ch); centre_text ("Persuasion", ch); } if (ch->gifts[HOMID] >= 2) centre_text ("Staredown", ch); if (ch->gifts[HOMID] >= 3) centre_text ("Disquiet", ch); if (ch->gifts[HOMID] >= 4) centre_text ("Reshape Object", ch); if (ch->gifts[HOMID] >= 5) centre_text ("Cocoon", ch); divide_to_char (ch); return; } else { do_gifts (ch, ""); return; } return; } if (!str_cmp (arg2, "learn") || !str_cmp (arg2, "improve")) { int improve; int cost; int max = 5; if (!str_cmp (arg1, "homid")) improve = HOMID; else if (!str_cmp (arg1, "metis")) improve = METIS; else if (!str_cmp (arg1, "lupus")) improve = LUPUS; else if (!str_cmp (arg1, "ragabash")) improve = RAGABASH; else if (!str_cmp (arg1, "theurge")) improve = THEURGE; else if (!str_cmp (arg1, "philodox")) improve = PHILODOX; else if (!str_cmp (arg1, "galliard")) improve = GALLIARD; else if (!str_cmp (arg1, "ahroun")) improve = AHROUN; else if (!str_cmp (arg1, "blackfuries")) improve = BLACKFURIES; else if (!str_cmp (arg1, "childrenofgaia")) improve = CHILDREN; else if (!str_cmp (arg1, "getoffenris")) improve = GETOFFENRIS; else if (!str_cmp (arg1, "redtalons")) improve = REDTALONS; else if (!str_cmp (arg1, "shadowlords")) improve = SHADOWLORDS; else if (!str_cmp (arg1, "silentstriders")) improve = SILENTSTRIDERS; else if (!str_cmp (arg1, "silverfangs")) improve = SILVERFANGS; else if (!str_cmp (arg1, "stargazers")) improve = STARGAZERS; else if (!str_cmp (arg1, "uktena")) improve = UKTENA; else if (!str_cmp (arg1, "wendigo")) improve = WENDIGO; else if (!str_cmp (arg1, "bonegnawers")) improve = BONEGNAWERS; else if (!str_cmp (arg1, "glasswalkers")) improve = GLASSWALKERS; else if (!str_cmp (arg1, "fianna")) improve = FIANNA; else { do_gifts (ch, ""); return; } cost = (ch->gifts[improve] + 1) * 10; arg1[0] = UPPER (arg1[0]); if (ch->gifts[improve] >= max) { sprintf (buf, "You have already gained all of the %s gifts.\n\r", arg1); send_to_char (buf, ch); return; } if (cost > ch->practice) { sprintf (buf, "It costs you %d primal to learn a new %s gift.\n\r", cost, arg1); send_to_char (buf, ch); return; } ch->gifts[improve] += 1; ch->practice -= cost; sprintf (buf, "You have learned a new %s gift.\n\r", arg1); send_to_char (buf, ch); return; } else send_to_char ("To learn a new gift, type: gifts '<name>' learn (without the spaces).\n\r", ch); return; } // Next lines added by Unique 22/07/02 for wwpowers command to work homid_gift etc void homid_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[HOMID] <= 1) { stc (" Homid: None.\n\r", ch); return; } if (ch->gifts[HOMID] >= 2) stc (" Homid: Staredown", ch); if (ch->gifts[HOMID] >= 3) stc (" Disquiet", ch); if (ch->gifts[HOMID] >= 4) stc (" Reshape", ch); if (ch->gifts[HOMID] >= 5) stc (" Cocoon", ch); stc ("\n\r", ch); return; } void metis_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[METIS] == 0) { stc (" Metis: None.\n\r", ch); return; } if (ch->gifts[METIS] >= 1) stc (" Metis: Quills", ch); if (ch->gifts[METIS] >= 2) stc (" Burrow", ch); if (ch->gifts[METIS] >= 3) stc (" Nightsight", ch); if (ch->gifts[METIS] >= 4) stc (" Wither", ch); stc ("\n\r", ch); return; } void lupus_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[LUPUS] == 0) { stc (" Lupus: None.\n\r", ch); return; } if (ch->gifts[LUPUS] >= 1) stc (" Lupus: Heightened", ch); if (ch->gifts[LUPUS] >= 3) stc (" Gnaw", ch); if (ch->gifts[LUPUS] >= 4) stc (" ElementGift", ch); if (ch->gifts[LUPUS] >= 5) stc (" SongBeast", ch); stc ("\n\r", ch); return; } void ragabash_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[RAGABASH] == 0) { stc (" Ragabash: None.\n\r", ch); return; } if (ch->gifts[RAGABASH] >= 1) stc (" Ragabash: Vanish", ch); if (ch->gifts[RAGABASH] >= 3) stc (" Blissfull", ch); if (ch->gifts[RAGABASH] >= 4) stc (" Lunasblessing", ch); if (ch->gifts[RAGABASH] >= 5) stc (" Whelpsbody Tailmonkey", ch); stc ("\n\r", ch); return; } void theurge_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[THEURGE] == 0) { stc (" Theurge: None.\n\r", ch); return; } if (ch->gifts[THEURGE] >= 1) stc (" Theurge: Mother", ch); if (ch->gifts[THEURGE] >= 3) stc (" Spiritdrain", ch); if (ch->gifts[THEURGE] >= 4) stc (" Feral", ch); if (ch->gifts[THEURGE] >= 5) stc (" Malleable", ch); stc ("\n\r", ch); return; } void philodox_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[PHILODOX] <= 4) { stc (" Philodox: None.\n\r", ch); return; } if (ch->gifts[PHILODOX] >= 5) stc (" Philodox: Granitewall", ch); stc ("\n\r", ch); return; } void galliard_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[GALLIARD] <= 2) { stc (" Galliard: None.\n\r", ch); return; } if (ch->gifts[GALLIARD] >= 3) stc (" Galliard: Beastwithin", ch); if (ch->gifts[GALLIARD] >= 4) stc (" Shred", ch); if (ch->gifts[GALLIARD] >= 5) stc (" Devour", ch); stc ("\n\r", ch); return; } void ahroun_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[AHROUN] <= 3) { stc (" Ahroun: None.\n\r", ch); return; } if (ch->gifts[AHROUN] >= 4) stc (" Ahroun: Clenched", ch); stc ("\n\r", ch); return; } void blackfuries_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[BLACKFURIES] <= 3) { stc (" Black Furies: None.\n\r", ch); return; } if (ch->gifts[BLACKFURIES] >= 4) stc (" Black Furies: Bodywrack", ch); stc ("\n\r", ch); return; } void wendigo_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[WENDIGO] == 0) { stc (" Wendigo: None.\n\r", ch); return; } if (ch->gifts[WENDIGO] >= 1) stc (" Wendigo: Hide", ch); if (ch->gifts[WENDIGO] >= 2) stc (" Cuttingwind", ch); if (ch->gifts[WENDIGO] >= 3) stc (" Cannibal", ch); if (ch->gifts[WENDIGO] >= 4) stc (" Heart", ch); if (ch->gifts[WENDIGO] >= 5) stc (" Chill", ch); stc ("\n\r", ch); return; } void childrenofgaia_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[CHILDRENOFGAIA] <= 1) { stc ("Children of Gaia: None.\n\r", ch); return; } if (ch->gifts[CHILDRENOFGAIA] >= 2) stc ("Children of Gaia: Dazzle", ch); if (ch->gifts[CHILDRENOFGAIA] >= 3) stc (" Calm Garouserenity", ch); if (ch->gifts[CHILDRENOFGAIA] >= 4) stc (" Halo", ch); if (ch->gifts[CHILDRENOFGAIA] >= 5) stc (" Living", ch); stc ("\n\r", ch); return; } void silverfangs_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[SILVERFANGS] <= 2) { stc (" Silver Fangs: None.\n\r", ch); return; } if (ch->gifts[SILVERFANGS] >= 3) stc (" Silver Fangs: Shield", ch); if (ch->gifts[SILVERFANGS] >= 4) stc (" Lunasavenger", ch); if (ch->gifts[SILVERFANGS] >= 5) stc (" Paws", ch); stc ("\n\r", ch); return; } void uktena_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[UKTENA] == 0) { stc (" Uktena: None.\n\r", ch); return; } if (ch->gifts[UKTENA] >= 1) stc (" Uktena: Darkshroud", ch); if (ch->gifts[UKTENA] >= 3) stc (" Flamespirit", ch); if (ch->gifts[UKTENA] >= 4) stc (" Invisibility", ch); stc ("\n\r", ch); return; } void getoffenris_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[GETOFFENRIS] <= 1) { stc (" Get of Fenris: None.\n\r", ch); return; } if (ch->gifts[GETOFFENRIS] >= 2) stc (" Get of Fenris: Snarl", ch); stc ("\n\r", ch); return; } void redtalons_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[REDTALONS] == 0) { stc (" Red Talons: None.\n\r", ch); return; } if (ch->gifts[REDTALONS] >= 1) stc (" Red Talons: Avalanche", ch); if (ch->gifts[REDTALONS] >= 2) stc (" Barrage", ch); if (ch->gifts[REDTALONS] >= 3) stc (" Vengeance", ch); stc ("\n\r", ch); return; } void shadowlords_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[SHADOWLORDS] <= 2) { stc (" Shadow Lords: None.\n\r", ch); return; } if (ch->gifts[SHADOWLORDS] >= 3) stc (" Shadow Lords: Clap", ch); stc ("\n\r", ch); return; } void silentstriders_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[SILENTSTRIDERS] <= 3) { stc (" Silent Striders: None.\n\r", ch); return; } if (ch->gifts[SILENTSTRIDERS] >= 4) stc (" Silent Striders: Gatemoon", ch); if (ch->gifts[SILENTSTRIDERS] >= 5) stc (" Reach", ch); stc ("\n\r", ch); return; } void stargazers_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[STARGAZERS] <= 1) { stc (" Star Gazers: None.\n\r", ch); return; } if (ch->gifts[STARGAZERS] >= 2) stc (" Star Gazers: Merciful", ch); stc ("\n\r", ch); return; } void bonegnawers_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; stc (" Bone Gnawers: This gift is currently not coded", ch); stc ("\n\r", ch); return; } void glasswalkers_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[GLASSWALKERS] <= 1) { stc (" Glass Walkers: None.\n\r", ch); return; } if (ch->gifts[GLASSWALKERS] >= 2) stc (" Glass Walkers: Senseaura", ch); stc ("\n\r", ch); return; } void fianna_gift (CHAR_DATA * ch) { if (IS_NPC (ch)) return; if (ch->gifts[FIANNA] == 0) { stc (" Fianna: None.\n\r", ch); return; } if (ch->gifts[FIANNA] >= 1) stc (" Fianna: Brew", ch); if (ch->gifts[FIANNA] >= 3) stc (" Banshee", ch); if (ch->gifts[FIANNA] >= 4) stc (" Balor", ch); if (ch->gifts[FIANNA] >= 5) stc (" Talon", ch); stc ("\n\r", ch); return; } void do_wwpowers (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { do_rand_typo (ch); return; } stc ("#o================================================================================#n\n\r", ch); cent_to_char ("#w-[ Werewolf Powers ]-#n", ch); stc ("#o================================================================================#n\n\r", ch); stc (" Innate Powers: Rage Claws Fangs\n\r", ch); homid_gift (ch); metis_gift (ch); lupus_gift (ch); ragabash_gift (ch); theurge_gift (ch); philodox_gift (ch); galliard_gift (ch); ahroun_gift (ch); blackfuries_gift (ch); wendigo_gift (ch); childrenofgaia_gift (ch); silverfangs_gift (ch); uktena_gift (ch); getoffenris_gift (ch); redtalons_gift (ch); shadowlords_gift (ch); silentstriders_gift (ch); stargazers_gift (ch); bonegnawers_gift (ch); glasswalkers_gift (ch); fianna_gift (ch); stc ("#o================================================================================#n\n\r", ch); stc ("Powers that are 'auto' are not listed.\n\rTo see all powers for each gift, type gifts <giftname> (no spaces)\n\r", ch); stc ("#o================================================================================#n\n\r", ch); return; } /* Galliard */ void do_beastwithin (CHAR_DATA * ch, char *argument) { char buf[MSL]; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[GALLIARD] < 3) { stc ("You need level 3 galliard to use this.\n\r", ch); return; } if (IS_SET (ch->special, SPC_WOLFMAN)) { send_to_char ("You are already in crinos form.\n\r", ch); return; } if (ch->beast_timer > 0) { sprintf(buf,"You cannot beast for another %d ticks.\n\r",ch->beast_timer); stc(buf,ch); return; } ch->pcdata->stats[UNI_RAGE] = number_range (250, 300); //ch->beast_timer = 25; do_werewolf (ch, ""); WAIT_STATE (ch, 12); return; } /* * Homid Gifts * Level One - Persuasion - Like Awe for Vampires. Automatic * Level Two - Staredown - Mobs flee * Level Three- Disquiet - Spell effect, -hit\dam in combat for opponent. * Level Four - Reshape Object- Rename objects * Level Five - Cocoon - Damage Reduction */ void do_persuasion (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[HOMID] < 1) { send_to_char ("You must obtain at least level 1 in Homid to become persuasive", ch); return; } if (IS_EXTRA (ch, EXTRA_AWE)) { REMOVE_BIT (ch->extra, EXTRA_AWE); send_to_char ("You are no longer Persuasive.\n\r", ch); act ("$n is no longer persuasive.", ch, NULL, NULL, TO_ROOM); return; } SET_BIT (ch->extra, EXTRA_AWE); send_to_char ("You are now very persuasive.\n\r", ch); act ("$n is now very persuasive", ch, NULL, NULL, TO_ROOM); return; } /* * Homid - 2 - Staredown */ void do_staredown (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; 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_WEREWOLF)) { stc ("Huh?\n\r", ch); return; } if (ch->gifts[HOMID] < 2) { stc ("You have not learned the Homid gift of Staredown.\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } arg[0] = UPPER (arg[0]); if (ch->fighting == NULL) { stc ("You must be fighting to use the gift of Staredown.\n\r", ch); return; } if (victim->fighting == NULL) { sprintf (buf, "%s is not fighting anyone.", arg); stc (buf, ch); return; } WAIT_STATE (ch, 16); if (IS_NPC (victim)) { if (ch->gifts[HOMID] < 4) { if (number_range (1, 3) != 1) { act ("You stare deeply into $N's eyes, but nothing happens.", ch, NULL, victim, TO_CHAR); act ("$n stares deeply into your eyes.", ch, NULL, victim, TO_VICT); act ("$n stares deeply into $N's eyes, but nothing happens.", ch, NULL, victim, TO_NOTVICT); return; } } act ("You stare into $N's eyes, and $E flees in terror.", ch, NULL, victim, TO_CHAR); act ("$n stares deeply into your eyes, and you are filled with terror.", ch, NULL, victim, TO_VICT); act ("$n stares deeply into $N's eyes, and $E flees in terror.", ch, NULL, victim, TO_NOTVICT); do_flee (victim, ""); return; } else { if (ch->gifts[HOMID] < 5) { if (number_range (1, 4) != 2) { act ("You stare deeply into $N's eyes, but nothing happens.", ch, NULL, victim, TO_CHAR); act ("$n stares deeply into your eyes.", ch, NULL, victim, TO_VICT); act ("$n stares deeply into $N's eyes, but nothing happens.", ch, NULL, victim, TO_NOTVICT); return; } } act ("You stare into $N's eyes, and $E flees in terror.", ch, NULL, victim, TO_CHAR); act ("$n stares deeply into your eyes, and you are filled with terror.", ch, NULL, victim, TO_VICT); act ("$n stares deeply into $N's eyes, and $E flees in terror.", ch, NULL, victim, TO_NOTVICT); do_flee (victim, ""); return; } return; } /* void do_disquiet( CHAR_DATA *ch, char *argument ) { CHAR_DATA *victim; AFFECT_DATA af; char arg [MAX_INPUT_LENGTH]; argument = one_argument( argument, arg ); if (IS_NPC(ch)) return; if (!IS_CLASS(ch, CLASS_WEREWOLF)) { send_to_char("Huh?\n\r", ch); return; } if ( ch->gifts[HOMID] < 3 ) { send_to_char("You have not learned the Homid gift of Disquiet.\n\r", ch); return; } if ( ( victim = get_char_room(ch, arg) ) == NULL ) { stc("They are not here.\n\r",ch); return; } if ( is_safe( ch, victim) ) return; if ( ch->gnosis[GCURRENT] < 1 ) { stc("You need one point of gnosis power to use the gift of Disquiet.\n\r",ch); return; } * note TYPE is needed for an effect! tkk 011299 * af.type = skill_lookup("disquiet"); af.duration = ch->gifts[HOMID]; af.location = APPLY_DAMROLL; af.modifier = -( ch->gifts[HOMID] * 5 ); af.bitvector = 0; affect_to_char( victim, &af ); * note TYPE is needed for an effect! tkk 011299 * af.type = skill_lookup("disquiet"); af.duration = ch->gifts[HOMID]; af.location = APPLY_HITROLL; af.modifier = -( ch->gifts[HOMID] * 5 ); af.bitvector = 0; affect_to_char( victim, &af ); ch->gnosis[CURRENT]--; act("Your eyes glow a sinister red as you glare at $N.",ch,NULL,victim,TO_CHAR); act("$n's eyes glow a sinister red as $e glares at you.\n\rYou feel odd.",ch,NULL,victim,TO_VICT); act("$n's eyes glow a sinister red as $e glares at $N.",ch,NULL,victim,TO_NOTVICT); return; } */ DO_COM (do_disquiet) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { do_rand_typo (ch); return; } if (ch->gifts[HOMID] < 3) { send_to_char ("You have not learned the Homid gift of Disquiet.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Who do you wish to use Disquiet on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They are not here.\n\r", ch); return; } if (IS_NPC (victim)) { send_to_char ("Not on NPC's.\n\r", ch); return; } act ("A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM); if (IS_SET (victim->newbits, NEW_CALM)) { send_to_char ("You no longer feel so apathetic.\n\r", victim); victim->disquiet_counter = 0; REMOVE_BIT (victim->newbits, NEW_CALM); WAIT_STATE (ch, 12); return; } if (is_safe (ch, victim)) return; if (number_range (1, 25) >= 10) { send_to_char ("You suddenly feel very apathetic!\n\r", victim); act ("$n yawns and looks around with a bored expression.", victim, NULL, NULL, TO_ROOM); victim->disquiet_counter = 50; SET_BIT (victim->newbits, NEW_CALM); WAIT_STATE (ch, 12); } return; } void do_reshape (CHAR_DATA * ch, char *argument) { char arg1[MAX_STRING_LENGTH]; char arg2[MAX_STRING_LENGTH]; OBJ_DATA *obj; argument = one_argument (argument, arg1); strcpy (arg2, argument); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[HOMID] < 4) { send_to_char ("You have not achieved the Homid gift of Reshape Object.\n\r", ch); return; } if (arg1 == NULL || arg2 == NULL) { send_to_char ("Syntax: Reshape (Item) (Description).\n\r", ch); return; } if ((obj = get_obj_carry (ch, arg1)) == NULL) { send_to_char ("You dont have that item.\n\r", ch); return; } if (!str_cmp (arg2, "Tijer")) { send_to_char ("You failed!\r\n", ch); return; } if (obj->item_type == ITEM_QUEST || obj->item_type == ITEM_AMMO || obj->item_type == ITEM_EGG || obj->item_type == ITEM_VOODOO || obj->item_type == ITEM_PIECE || obj->item_type == ITEM_MONEY || obj->item_type == ITEM_TREASURE || obj->item_type == ITEM_AQUEST || obj->item_type == ITEM_TOOL || obj->item_type == ITEM_SYMBOL || obj->item_type == ITEM_PAGE || IS_SET (obj->quest, QUEST_ARTIFACT) || IS_SET (obj->quest, QUEST_RELIC) || obj->item_type == ITEM_ETOKEN) { send_to_char ("Not on that item!\n\r", ch); return; } if (strlen (arg2) > 40 || strlen (arg2) < 3) { send_to_char ("The name should be between 3 and 40 characters.\n\r", ch); return; } free_string (obj->name); obj->name = str_dup (arg2); free_string (obj->short_descr); obj->short_descr = str_dup (arg2); free_string (obj->questmaker); obj->questmaker = str_dup (ch->name); send_to_char ("Ok.\n\r", ch); return; } void do_cocoon (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { stc ("Huh?\n\r", ch); return; } if (ch->gifts[HOMID] < 5) { stc ("You haven't learned the Homid gift of Cocoon.\n\r", ch); return; } if (IS_GAR1 (ch, WOLF_COCOON)) { stc ("Your cocoon breaks and falls to the ground.\n\r", ch); act ("$n's cocoon breaks and falls to the ground.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT (ch->garou1, WOLF_COCOON); return; } if (ch->gnosis[GCURRENT] < 2) { stc ("You do not have enough gnosis to use Cocoon.\n\r", ch); return; } else { stc ("Your body is surrounded by a thick, opaque epidermis.\n\r", ch); act ("$n's body is surrounded by a thick, opaque epidermis.", ch, NULL, NULL, TO_ROOM); SET_BIT (ch->garou1, WOLF_COCOON); ch->gnosis[GCURRENT]--; return; } return; } /* * Metis Gifts * Level One - Gift of the Porcupine - Quills * Level Two - Burrow - Like Demon Travel * Level Three- Eyes of the Cat - Nightsight * Level Four - Wither Limb - Withers a limb, easier on NPCs * Level Five - Totem Gift - Random, Special Power. Ooo. */ void do_quills (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { stc ("Huh?\n\r", ch); return; } if (ch->gifts[METIS] < 1) { stc ("You haven't learned the Gift of the Porcupine.\n\r", ch); return; } if (IS_SET (ch->newbits, NEW_QUILLS)) { stc ("Your quills soften and twist into fur.\n\r", ch); act ("$n's quills soften and revert back to fur.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT (ch->newbits, NEW_QUILLS); return; } if (!IS_SET (ch->newbits, NEW_QUILLS)) { stc ("Your fur becomes bristly and sharp.\n\r", ch); act ("$n's fur becomes bristly and sharp.", ch, NULL, NULL, TO_ROOM); SET_BIT (ch->newbits, NEW_QUILLS); return; } return; } void do_burrow (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (is_inarena (ch)) return; if (ch->gifts[METIS] < 2) { send_to_char ("You haven't learned the Metis gift of Burrow.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Burrow to who?\n\r", ch); return; } if ((victim = get_char_world (ch, arg)) == NULL) { send_to_char ("They are not here.\n\r", ch); return; } if (IS_NPC (victim)) { send_to_char ("Not on NPC's.\n\r", ch); return; } if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON)) { send_to_char ("I don't think they want you to do that.\n\r", ch); return; } if (victim == ch) { send_to_char ("You cannot burrow to yourself.\n\r", ch); return; } if (victim->level != LEVEL_AVATAR || !IS_CLASS (victim, CLASS_WEREWOLF)) { send_to_char ("Nothing happens.\n\r", ch); return; } if (victim->in_room == NULL) { send_to_char ("Nothing happens.\n\r", ch); return; } send_to_char ("You burrow into the ground.\n\r", ch); act ("$n burrows into the ground.", ch, NULL, NULL, TO_ROOM); char_from_room (ch); char_to_room (ch, victim->in_room); do_look (ch, ""); send_to_char ("You burrow out of the ground.\n\r", ch); act ("$n burrows out of the ground.", ch, NULL, NULL, TO_ROOM); return; } // Eyes of the Cat - Nightsight. clan.c void do_wither (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MAX_INPUT_LENGTH]; bool blah = FALSE; int chance = 0; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { stc ("Huh?\n\r", ch); return; } if (ch->gifts[METIS] < 4) { stc ("You haven't learned the Metis gift of Wither Limb.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 3) { stc ("You do not have enough gnosis power stored to use the gift of Wither Limb.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Who's limb do you wish to wither?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (IS_ARM_R (victim, LOST_ARM) && IS_ARM_L (victim, LOST_ARM)) { stc ("They have already lost both their arms.\n\r", ch); return; } if (is_safe (ch, victim)) return; WAIT_STATE (ch, 32); ch->gnosis[CURRENT] -= 3; if (IS_NPC (victim)) { chance = number_range (45, 55); if (number_percent () > chance) { stc ("Nothing happened.\n\r", ch); return; } if (!IS_ARM_R (victim, LOST_ARM)) blah = FALSE; else blah = TRUE; if (!blah) { if (!IS_ARM_R (victim, LOST_ARM)) SET_BIT (victim->loc_hp[3], LOST_ARM); if (!IS_BLEEDING (victim, BLEEDING_ARM_R)) SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R); if (IS_BLEEDING (victim, BLEEDING_HAND_R)) REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R); act ("You concentrate deeply and $N's arm starts to wither!", ch, NULL, victim, TO_CHAR); act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT); act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL, victim, TO_VICT); make_part (victim, "arm"); if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM)) { if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL) take_item (victim, obj); } if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL) take_item (victim, obj); return; } else if (blah) { if (!IS_ARM_L (victim, LOST_ARM)) SET_BIT (victim->loc_hp[2], LOST_ARM); else blah = TRUE; if (!IS_BLEEDING (victim, BLEEDING_ARM_L)) SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L); if (IS_BLEEDING (victim, BLEEDING_HAND_L)) REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L); act ("You concentrate deeply and $N's arm starts to wither!", ch, NULL, victim, TO_CHAR); act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT); act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL, victim, TO_VICT); make_part (victim, "arm"); if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM)) { if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL) take_item (victim, obj); } if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL) take_item (victim, obj); return; } } else if (!IS_NPC (victim)) { chance = 35; if (IS_ITEMAFF (victim, ITEMA_ARTIFACT)) chance = 0; if (number_percent () > chance) { act ("You gaze intently at $N.\n\rNothing happens.", ch, NULL, victim, TO_CHAR); act ("$n gazes eerily at you.\n\rNothing happens.", ch, NULL, victim, TO_VICT); act ("$n gazes eerily at $N.", ch, NULL, victim, TO_NOTVICT); return; } if (!IS_ARM_R (victim, LOST_ARM)) blah = FALSE; else blah = TRUE; if (!blah) { if (!IS_ARM_R (victim, LOST_ARM)) SET_BIT (victim->loc_hp[3], LOST_ARM); if (!IS_BLEEDING (victim, BLEEDING_ARM_R)) SET_BIT (victim->loc_hp[6], BLEEDING_ARM_R); if (IS_BLEEDING (victim, BLEEDING_HAND_R)) REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_R); act ("You concentrate deeply and $N's arm starts to wither!", ch, NULL, victim, TO_CHAR); act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT); act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL, victim, TO_VICT); make_part (victim, "arm"); if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM)) { if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL) take_item (victim, obj); } if ((obj = get_eq_char (victim, WEAR_WIELD)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_WRIST_R)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_FINGER_R)) != NULL) take_item (victim, obj); return; } else if (blah) { if (!IS_ARM_L (victim, LOST_ARM)) SET_BIT (victim->loc_hp[2], LOST_ARM); else blah = TRUE; if (!IS_BLEEDING (victim, BLEEDING_ARM_L)) SET_BIT (victim->loc_hp[6], BLEEDING_ARM_L); if (IS_BLEEDING (victim, BLEEDING_HAND_L)) REMOVE_BIT (victim->loc_hp[6], BLEEDING_HAND_L); act ("You concentrate deeply and $N's arm starts to wither!", ch, NULL, victim, TO_CHAR); act ("$n's eyes glow dark red as $e gazes at you, and your arm begins withering!", ch, NULL, victim, TO_NOTVICT); act ("$n gazes evilly at $N, and $S arm begins withering!", ch, NULL, victim, TO_VICT); make_part (victim, "arm"); if (IS_ARM_L (victim, LOST_ARM) && IS_ARM_R (victim, LOST_ARM)) { if ((obj = get_eq_char (victim, WEAR_ARMS)) != NULL) take_item (victim, obj); } if ((obj = get_eq_char (victim, WEAR_HOLD)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_DUAL)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_HANDS)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_WRIST_L)) != NULL) take_item (victim, obj); if ((obj = get_eq_char (victim, WEAR_FINGER_L)) != NULL) take_item (victim, obj); return; } } return; } /* Lupus Gifts * Heightened Senses-do_truesight * Catfeet-Auto * Gnaw * Elemental Gift * Song of the Great Beast */ void do_heightened (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!is_garou (ch)) return; if (ch->gifts[LUPUS] < 1) { stc ("You must obtain level one Lupus to use Heightened Senses.\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_gnaw (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[LUPUS] < 3) { stc ("You must obtain level three Lupus to use Gnaw.\n\r", ch); return; } stc ("You try to gnaw through your restrains.\n\r", ch); act ("$n gnaws at $s restrains.", ch, NULL, NULL, TO_ROOM); 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_SET (ch->flag2, AFF2_TENDRILS)) { act ("The tendrils entrapping $n break away.", ch, NULL, NULL, TO_ROOM); send_to_char ("The tendrils entrapping you break away.\n\r", ch); REMOVE_BIT (ch->flag2, AFF2_TENDRILS); } return; } void do_elementalgift (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[LUPUS] < 4) { stc ("You must obtain level 5 Lupus to use Elemental Gift.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 1) { stc ("You must have one point of Gnosis to use this power.\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("You cannot find them here.\n\r", ch); return; } dam = ch->gifts[LUPUS] * 100; if (IS_NPC (victim)) dam *= 3; if (IS_CLASS (victim, CLASS_VAMPIRE)) dam *= 2.3; act ("You call upon the forces of Gaia to annihilate $N.", ch, NULL, victim, TO_CHAR); act ("$n throws back $s head and howls loudly, causing the room to shake.\nThe room turns dark, and a blast of elemental fire consumes you.", ch, NULL, victim, TO_VICT); act ("$n throws back $s head and howls loudly, causing the room to shake.\nThe room turns dark.\nA blast of elemental fire consumes $N!", ch, NULL, victim, TO_NOTVICT); mage_damage (ch, victim, dam, "elemental blast", MAGEDAM_FIRE); ch->gnosis[GCURRENT] -= 1; WAIT_STATE (ch, 16); return; } void do_songbeast (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; AFFECT_DATA af; int sn; if (!is_garou (ch)) return; if (is_inarena (ch)) return; if (ch->gifts[LUPUS] < 5) { stc ("You must obtain level 5 Lupus to use this power.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 3) { stc ("You need 3 points of gnosis to use this power.\n\r", ch); return; } if (ch->pcdata->followers > 3) { stc ("Nothing happens..\n\r", ch); return; } ch->pcdata->followers++; victim = create_mobile (get_mob_index (MOB_VNUM_GUARDIAN)); free_string (victim->short_descr); victim->short_descr = str_dup ("a Giant Yeti"); free_string (victim->name); victim->name = str_dup ("yeti giant"); free_string (victim->long_descr); victim->long_descr = str_dup ("A Giant Yeti, towers over you snarling vicously.\n\r"); victim->level = 500; victim->hit = 15000; victim->max_hit = 15000; victim->hitroll = 250; victim->damroll = 250; victim->armor = -1500; SET_BIT (victim->act, ACT_NOEXP); act ("You howl loudly at the sky.\nThe ground beneath your feet begins to shake.\n Suddenly, A huge dinosaur emerges from the earth below you.", ch, NULL, NULL, TO_CHAR); act ("$n howls loudly at the sky.\nThe ground beneath your feet begins to shake.\n Suddenly, A huge dinosaur bursts from the ground with a loud roar!", ch, NULL, NULL, TO_ROOM); char_to_room (victim, ch->in_room); if ((sn = skill_lookup ("guardian")) < 0) { send_to_char ("Bug - please inform a coder.\n\r", ch); return; } add_follower (victim, ch); af.type = sn; af.duration = 666; af.location = APPLY_NONE; af.modifier = 0; af.bitvector = AFF_CHARM; affect_to_char (victim, &af); ch->gnosis[GCURRENT] -= 3; return; } /* * Ahroun Gifts * 1=razorclaws */ void do_razorclaws (CHAR_DATA * ch, char *argument) { if (IS_CLASS (ch, CLASS_WEREWOLF)) { if (ch->gifts[AHROUN] <= 1) { stc ("Huh?\n\r", ch); return; } } else return; if (!IS_VAMPAFF (ch, VAM_CLAWS)) { stc ("Your talons aren't even extended!\n\r", ch); return; } if (IS_GAR1 (ch, WOLF_RAZORCLAWS)) { stc ("Your claws lose their razor-sharp edge.\n\r", ch); act ("$n's claws lose their razor-sharp edge.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT (ch->garou1, WOLF_RAZORCLAWS); } else { send_to_char ("You hone your claws to a razor sharpness.\n\r", ch); act ("$n hones $s claws to a razor sharpness.", ch, NULL, NULL, TO_ROOM); SET_BIT (ch->garou1, WOLF_RAZORCLAWS); } return; } /* Ragabash * Vanish * Scent of Running Water - No hunt\track(auto) * Blissful Ignorance * Luna's Blessing * Whelp Body */ void do_tailmonkey (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int dam; int stance; one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { do_rand_typo (ch); return; } if (ch->gifts[RAGABASH] < 5) { send_to_char ("You require the level 5 Ragabash power to use Tail of the Monkey.\n\r", ch); return; } if (arg[0] == '\0' && ch->fighting == NULL) { send_to_char ("Who do you wish to use Tail of the Monkey on?\n\r", ch); return; } if ((victim = ch->fighting) == NULL) { if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They aren't here.\n\r", ch); return; } } if (IS_ITEMAFF (ch, ITEMA_PEACE)) do_majesty (ch, ""); if (is_safe (ch, victim)) { return; } WAIT_STATE (ch, skill_table[gsn_kick].beats); dam = number_range (10, 20); dam += char_damroll (ch); dam += ch->damcap[0]/2; if (dam == 0) dam = 1; if (!IS_AWAKE (victim)) dam *= 2; else dam *= 1; dam = dam + (dam * ((ch->wpn[0]) * 0.01)); { stance = ch->stance[0]; if (IS_STANCE (ch, STANCE_NORMAL)) dam *= 1.25; else dam = dambonus (ch, victim, dam, stance); } if (dam <= 0) dam = 1; damage (ch, victim, dam, gsn_tail); return; } void do_blissful (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[RAGABASH] < 3) { stc ("You must obtain level 3 Ragabash to use Blissful Ignorance.\n\r", ch); return; } if (has_timer (ch)) return; if (IS_GAR1 (ch, GAROU_BLISSFUL)) { stc ("You fade back into view.\n\r", ch); REMOVE_BIT (ch->garou1, GAROU_BLISSFUL); return; } else { stc ("You become completely invisible.\n\r", ch); SET_BIT (ch->garou1, GAROU_BLISSFUL); return; } return; } void do_lunasblessing (CHAR_DATA * ch, char *argument) { int sn, level; if (!is_garou (ch)) return; if (ch->gifts[RAGABASH] < 4) { stc ("You must obtain level 4 Ragabash to use Luna's Blessing.\n\r", ch); return; } if ((sn = skill_lookup ("lunas blessing")) < 0) return; if (is_affected (ch, skill_lookup ("lunas blessing"))) { stc ("You already have Luna's Blessing!\n\r", ch); return; } stc ("A beam of moonlight shoots out of the sky and surrounds you.\n\r", ch); act ("$n is engulfed by a beam of moonlight from the sky.", ch, NULL, NULL, TO_ROOM); level = (ch->gifts[RAGABASH] * 5); (*skill_table[sn].spell_fun) (sn, level, ch, ch); WAIT_STATE (ch, 12); return; } void do_whelp (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[RAGABASH] < 5) { stc ("You must obtain level 5 Ragabash to use Whelp's Body\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whelp who?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (victim->level < 3) { stc ("You can only use this power on Avatars!\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 6) { stc ("You require six points of gnosis to use this power.\n\r", ch); return; } if (victim->hit < 1000) { stc ("They are almost dead already. It wouldn't be any fun.\n\r", ch); return; } dam = number_range (1000, 5000); //dam = number_range((ch->gifts[BLACKFURIES] * 150),(ch->gifts[BLACKFURIES]*175)); act ("You lay your hands on $N, and $S body starts to shake and quiver.", ch, NULL, victim, TO_CHAR); act ("$n lays $s hands on you, and you feel your body quiver and weaken.", ch, NULL, victim, TO_VICT); act ("$n lays $s hands on $N, and $N's body starts to shake and quiver.", ch, NULL, victim, TO_NOTVICT); mage_damage (ch, victim, dam, "curse", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 6; WAIT_STATE (ch, 16); return; } void do_whelp2 (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[RAGABASH] < 5) { stc ("You must obtain level 5 Ragabash to use Whelp's Body\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("You cannot find them here.\n\r", ch); return; } if (victim->level < 3) { stc ("You can only use this power on Avatars!\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 6) { stc ("You require six points of gnosis to use this power.\n\r", ch); return; } if (IS_SET (victim->garou1, GAROU_WHELP2) || IS_SET (victim->garou1, GAROU_WHELP1)) { stc ("They are already affected by a Whelp Curse.\n\r", ch); return; } SET_BIT (victim->garou1, GAROU_WHELP2); act ("You lay your hands on $N, and $S body starts to shake and quiver.", ch, NULL, victim, TO_CHAR); act ("$n lays $s hands on you, and you feel your body quiver and weaken.", ch, NULL, victim, TO_VICT); act ("$n lays $s hands on $N, and $N's body starts to shake and quiver.", ch, NULL, victim, TO_NOTVICT); dam = number_range (1500, 2500); mage_damage (ch, victim, dam, "curse", MAGEDAM_OTHER); if (victim->max_hit > 3001) victim->max_hit -= 3000; WAIT_STATE (victim, 8); WAIT_STATE (ch, 16); ch->gnosis[GCURRENT] -= 6; return; } /* Theurge * Mother's Touch * Grasp the Beyond * Spirit Drain * Feral Lobotomy * The Malleable Spirit */ void do_mothers (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[THEURGE] < 1) { stc ("You must obtain level 1 Theurge to use Mother's Touch.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to heal?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("You cannot find them here.\n\r", ch); return; } if (victim == ch) { stc ("You cannot use this power on yourself!\n\r", ch); return; } if (victim->hit >= victim->max_hit) { stc ("They are already at full health!\n\r", ch); return; } act ("You lay your hands on $N, rejuvenating them.", ch, NULL, victim, TO_CHAR); act ("$n lays $s hands on you, and you feel healthier.", ch, NULL, victim, TO_VICT); act ("$n lays $s hands on $N, and $N's wounds begin to close.", ch, NULL, victim, TO_NOTVICT); victim->hit += (number_range ((ch->gifts[THEURGE] * 100), (ch->gifts[THEURGE] * 140))); if (victim->hit > victim->max_hit) victim->hit = victim->max_hit; update_pos (victim); WAIT_STATE (ch, 12); return; } // grasp the beyond. auto. lets you get shit from shadowplane. void do_spiritdrain (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; int hpgain; one_argument (argument, arg); if (!is_garou (ch)) return; if (arg[0] == '\0') { send_to_char ("Drain the spirit of which corpse?\n\r", ch); return; } obj = get_obj_list (ch, arg, ch->in_room->contents); if (obj == NULL) { send_to_char ("You can't find it.\n\r", ch); return; } if (obj->item_type != ITEM_CORPSE_NPC) { act ("You are unable to drain the energy of $p.", ch, obj, 0, TO_CHAR); return; } else if (obj->chobj != NULL && !IS_NPC (obj->chobj) && obj->chobj->pcdata->obj_vnum != 0) { act ("You are unable to drain the energy of $p.", ch, obj, 0, TO_CHAR); return; } hpgain = number_range (50, 150); ch->hit += hpgain; if (ch->hit > ch->max_hit) ch->hit = ch->max_hit; act ("You drain the spirit energy out of $p.", ch, obj, NULL, TO_CHAR); act ("$p is drained of energy by $n.", ch, obj, NULL, TO_ROOM); extract_obj (obj); WAIT_STATE (ch, 4); return; } void do_feral (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[THEURGE] < 4) { stc ("You must obtain level 4 Theurge to use Feral Lobotomy.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They are not here.\n\r", ch); return; } if (victim->level < 3) { stc ("You can only use this power on Avatars!\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 3) { stc ("You need three points of gnosis to use this power.\n\r", ch); return; } dam = ch->gifts[THEURGE] * 100; if (IS_NPC (victim)) dam *= 4; dam = number_range ((dam - 100), (dam + 100)); act ("You focus your gnosis power on $N.", ch, NULL, victim, TO_CHAR); act ("$n's claws deliver a power blow of energy to your head.", ch, NULL, victim, TO_VICT); act ("$n's claws slash open $N's forehead.", ch, NULL, victim, TO_NOTVICT); mage_damage (ch, victim, dam, "mind blast", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 3; return; } void do_malleable (CHAR_DATA * ch, char *argument) { OBJ_DATA *obj; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[THEURGE] < 5) { stc ("You must obtain level 5 Theurge to use Malleable Spirit\n\r", ch); return; } if (arg[0] == '\0') { stc ("Which object do you wish to use this on?\n\r", ch); return; } if ((obj = get_obj_carry (ch, arg)) == NULL) { stc ("You aren't even carrying that object.\n\r", ch); return; } if (obj->item_type != ITEM_WEAPON) { stc ("This power can only be used on weapons.\n\r", ch); return; } if (IS_SET (obj->quest, QUEST_MALLEABLE)) { stc ("This object has already been modified.\n\r", ch); return; } obj->value[1] += (ch->gifts[THEURGE] * 2); obj->value[2] += (ch->gifts[THEURGE] * 2); act ("You manipulate the spirit in $p, increasing it's effectiveness.", ch, obj, NULL, TO_CHAR); SET_BIT (obj->quest, QUEST_MALLEABLE); WAIT_STATE (ch, 8); return; } /* Philodox Gifts * Resist Pain (Auto) * King of the Beasts (Auto) * Strength of Purpose (Auto) * Weak Arm (Auto) * Wall of Granite */ void do_wallofgranite (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[PHILODOX] < 5) { stc ("You must obtain level 5 Philodox to use Wall of Granite.\n\r", ch); return; } if (IS_SET (ch->garou1, WW_GRANITE)) { stc ("Your wall of granite fades away.\n\r", ch); REMOVE_BIT (ch->garou1, WW_GRANITE); } if (!IS_SET (ch->garou1, WW_GRANITE)) { stc ("A wall of granite arises around your body to protect you.\n\r", ch); SET_BIT (ch->garou1, WW_GRANITE); return; } return; } /* Ahroun * Inspiration (Auto) * Razor Claws (Auto) * The Falling Touch (Auto) * Silver Claws (Auto) * Clenched Jaw * Stoking Fury's Furnace (Auto) */ void do_clenched (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[AHROUN] < 4) { stc ("You must obtain level 4 Ahroun to use this power.\n\r", ch); return; } if (IS_SET (ch->garou1, GAROU_CLENCHED)) { stc ("You relax your jaw.\n\r", ch); REMOVE_BIT (ch->garou1, GAROU_CLENCHED); return; } if (!IS_GAR1 (ch, GAROU_CLENCHED)) { stc ("You prepare to clench your jaw on your opponents.\n\r", ch); SET_BIT (ch->garou1, GAROU_CLENCHED); return; } return; } /* Black Furies * Heightened Senses * Coup De Grace (Auto) * Visceral Agony (Auto) * Body Wrack * Wasp Talons (Auto) */ void do_bodywrack (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[BLACKFURIES] < 4) { stc ("You must obtain level 4 Black Furies to use Body Wrack.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 5) { stc ("You need five points of gnosis to use this power.\n\r", ch); return; } if (victim->hit < 1000) { stc ("They are almost dead already. It wouldn't be any fun.\n\r", ch); return; } dam = number_range (500, 1000); //dam = number_range((ch->gifts[BLACKFURIES] * 150),(ch->gifts[BLACKFURIES]*175)); act ("You focus a blast of gnosis on $N.", ch, NULL, victim, TO_CHAR); act ("A blast of energy shoots out of $n's claws and wracks your body.", ch, NULL, victim, TO_VICT); mage_damage (ch, victim, dam, "gnosis warp", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 5; WAIT_STATE (ch, 16); return; } /* Children of Gaia * Luna's Armor (Auto) * Dazzle * Calm the Beast * Halo of the Sun * The Living Wood */ void do_dazzle (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[CHILDRENOFGAIA] < 2) { stc ("You must obtain level 2 Children of Gaia to use Dazzle.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (victim->wait > 0) { stc ("You failed...\n\r", ch); return; } act ("You gaze at $N, dazzling $M with Gaia's Glory.", ch, NULL, victim, TO_CHAR); act ("You catch $n's gaze, and are dazzled by $s glory.", ch, NULL, victim, TO_VICT); WAIT_STATE (victim, 12); WAIT_STATE (ch, 8); return; } void do_garouserenity (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[CHILDRENOFGAIA] < 3) { stc ("You must obtain the third Children of Gaia gift to use Serenity.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to calm?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } victim->beast_timer = 25; if (number_range (1, 4) != 3) { stc ("You sing a blissful and soothing song.\n\r", ch); act ("$n starts singing a blissful and soothing song.", ch, NULL, victim, TO_VICT); stc ("Nothing seems to happen..\n\r", ch); WAIT_STATE (ch, 12); return; } if (IS_CLASS (victim, CLASS_VAMPIRE)) { if (victim->pcdata->stats[UNI_RAGE] < 1) { stc ("They aren't even raged!\n\r", ch); return; } else { stc ("You sing a blissful and soothing song.\n\r", ch); act ("$n starts singing a blissful and soothing song.", ch, NULL, victim, TO_VICT); do_calm (victim, ""); return; } WAIT_STATE (ch, 16); return; } else if (IS_CLASS (victim, CLASS_WEREWOLF)) { if (victim->pcdata->stats[UNI_RAGE] < 100) { stc ("They aren't even raged!\n\r", ch); return; } else { stc ("You sing a blissful and soothing song.\n\r", ch); act ("$n starts singing a blissful and soothing song.", ch, NULL, victim, TO_VICT); do_unwerewolf (victim, ""); return; } WAIT_STATE (ch, 16); } return; } void do_livingwood (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[CHILDRENOFGAIA] < 5) { stc ("You must obtain the fifth Children of Gaia gift to use this power.\n\r", ch); return; } if (ch->in_room->sector_type != SECT_FOREST) { stc ("You can only use this power in the forest.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this power on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (IS_SET (victim->mflags, MAGE_EMBRACED2) || IS_SET (victim->mflags, MAGE_EMBRACED1)) { stc ("They are already embraced by the earth.\n\r", ch); return; } act ("You call upon the forest to entrap your foe.", ch, NULL, NULL, TO_CHAR); act ("$n chants softly.\nThe ground around you begins to rise up, entrapping you.", ch, NULL, victim, TO_VICT); act ("$n begins to chant softly.\nSuddenly, the ground surrounding $N begins to rise up and entrap $M!", ch, NULL, victim, TO_NOTVICT); SET_BIT (victim->mflags, MAGE_EMBRACED2); WAIT_STATE (ch, 16); return; } /* Get of Fenris * Halt the Coward's Flight (Auto) * Snarl of the PRedator * MIght of Thor (Auto) * Venom Blood (Auto) * Fenris' Bite (Auto) */ void do_snarl (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; if (!is_garou (ch)) return; if (ch->gifts[GETOFFENRIS] < 2) { stc ("You must obtain the second gift of Get Of Fenris to use this power.\n\r", ch); return; } if (ch->fighting == NULL) { stc ("You must be fighting to use this power.\n\r", ch); return; } victim = ch->fighting; if (victim->wait > 0) { stc ("You snarl visciously, but nothing seems to happen..\n\r", ch); return; } act ("You snarl visciously at $N, sending chills up $S spine..", ch, NULL, victim, TO_CHAR); act ("$n snarls visciously at you.\nYou are scared stiff.", ch, NULL, victim, TO_VICT); WAIT_STATE (victim, 8); WAIT_STATE (ch, 12); return; } /* Red Talons * Avalanche * Quicksand * Gaia's Vengeance * ONLY THREE POWERS IN THIS SONUVABITCH. */ void do_avalanche (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; if (!is_garou (ch)) return; if (ch->gifts[REDTALONS] < 1) { stc ("You must obtain the level one Red Talons gift to use Avalanche.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 5) { stc ("You must have 5 points of gnosis to use this power.\n\r", ch); return; } stc ("You call upon the power of Gaia to unleash an avalanche on your foes.\n\r", ch); for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (vch->in_room != ch->in_room) continue; if (vch->level < 3) continue; if (!IS_NPC (vch) && vch->pcdata->chobj != NULL) continue; if (is_safe (ch, vch)) continue; if (ch == vch) continue; if ((mount = ch->mount) != NULL) if (mount == vch) continue; act ("$n calls upon the power of Gaia to unleash an Avalanche on the area!", ch, NULL, vch, TO_VICT); mage_damage (ch, vch, number_range (400, 500), "avalanche", MAGEDAM_OTHER); } ch->gnosis[GCURRENT] -= 5; WAIT_STATE (ch, 16); return; } void do_barrage (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; if (!is_garou (ch)) return; if (ch->gifts[REDTALONS] < 2) { stc ("You must obtain the second gift of the Red Talons to use Barrage.\n\r", ch); return; } if (ch->gnosis[GCURRENT] <= 5) { stc ("You must have 5 points of gnosis to use this power.\n\r", ch); return; } for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (vch->in_room != ch->in_room) continue; if (vch->level < 3) continue; if (!IS_NPC (vch)) continue; if (is_safe (ch, vch)) continue; if (ch == vch) continue; if ((mount = ch->mount) != NULL) if (mount == vch) continue; mage_damage (ch, vch, number_range (4000, 5000), "elemental barrage", MAGEDAM_OTHER); } ch->gnosis[GCURRENT] -= 5; WAIT_STATE (ch, 16); return; } void do_vengeance (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; if (!is_garou (ch)) return; if (ch->gifts[REDTALONS] < 3) { stc ("You must obtain the third gift of the Red Talons to use Gaia's Vengeance.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 10) { stc ("You need 10 points of gnosis to use this power.\n\r", ch); return; } stc ("You stir up the essence of Gaia in the land around you, summoning her vegeance to strike down your foes.\n\r", ch); act ("$n summons the essence of Gaia into $s body, and the room bursts with a blinding white light.", ch, NULL, NULL, TO_ROOM); for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (vch->in_room != ch->in_room) continue; if (vch->level < 3) continue; if (!IS_NPC (vch) && ch->pcdata->chobj != NULL) continue; if (ch == vch) continue; if (is_safe (ch, vch)) continue; if ((mount = ch->mount) != NULL) if (mount == vch) continue; mage_damage (ch, vch, number_range (2000, 3000), "vengeance of Gaia", MAGEDAM_OTHER); } ch->gnosis[GCURRENT] -= 10; WAIT_STATE (ch, 24); return; } /* Shadow Lords * Fatal Flaw (Auto) * Aura of Confidence (Auto) * Clap of Thunder * Icy Chill of Dispair (Auto) * Strength of the Dominator (Auto) */ void do_clapofthunder (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; if (!is_garou (ch)) return; if (ch->gifts[SHADOWLORDS] < 3) { stc ("You must obtain the third gift of the Shadow Lords to use Clap of Thunder.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 5) { stc ("You must have 5 points of gnosis to use this power.\n\r", ch); return; } stc ("You clap your hands together, sending forth a shockwave that stuns everyone in the room.\n\r", ch); act ("$n claps $s hands together, sending forth a shockwave that stuns you instantly!", ch, NULL, NULL, TO_ROOM); for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (vch->in_room != ch->in_room) continue; if (vch->level < 3) continue; if (!IS_NPC (vch)) continue; if (is_safe (ch, vch)) continue; if (ch == vch) continue; if ((mount = ch->mount) != NULL) if (mount == vch) continue; mage_damage (ch, vch, number_range (50, 100), "clap of thunder", MAGEDAM_OTHER); vch->position = POS_STUNNED; } ch->gnosis[GCURRENT] -= 5; WAIT_STATE (ch, 16); return; } /* Silent Striders * Speed of Thought (Auto) * Speed beyond Thought (Auto) * Messenger's Speed (Auto) * Gate of the Moon * Reach the Umbra */ void do_gatemoon (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; OBJ_DATA *obj; char arg[MIL]; int duration; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[SILENTSTRIDERS] < 4) { stc ("You must obtain the fourth Silent Striders gift to use Gate of the Moon.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this power on?\n\r", ch); return; } if ((victim = get_char_world (ch, arg)) == NULL) { stc ("They aren't anywhere to be found.\n\r", ch); return; } if IS_SET (victim->in_room->room_flags, ROOM_CCHAMBER) { stc ("You failed.\n\r", ch); return; } if (IS_NPC (victim) && IS_SET (victim->in_room->area->aflags, AFLAG_HQ)) { stc ("You failed.\n\r", ch); return; } if (IS_NPC (victim) && victim->level > 150) { stc ("You failed.\n\r", ch); return; } if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON)) { stc ("You can't manage to open a moongate to them.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 2) { stc ("You need two points of Gnosis to use this power.\n\r", ch); return; } if (weather_info.sunlight == SUN_LIGHT || weather_info.sunlight == SUN_RISE) { send_to_char ("The moon is not out.\n\r", ch); return; } duration = number_range (2, 3) * 15; obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0); obj->value[0] = victim->in_room->vnum; obj->value[3] = ch->in_room->vnum; obj->timer = duration; free_string (obj->name); obj->name = str_dup ("gate moon portal"); free_string (obj->short_descr); obj->short_descr = str_dup ("a moongate"); free_string (obj->description); obj->description = str_dup ("A glimmering moongate floats here."); if (IS_AFFECTED (ch, AFF_SHADOWPLANE)) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room (obj, ch->in_room); obj = create_object (get_obj_index (OBJ_VNUM_PORTAL), 0); obj->value[0] = ch->in_room->vnum; obj->value[3] = victim->in_room->vnum; obj->timer = duration; free_string (obj->name); obj->name = str_dup ("gate moon portal"); free_string (obj->short_descr); obj->short_descr = str_dup ("a moongate"); free_string (obj->description); obj->description = str_dup ("A glimmering moongate floats here."); if (IS_AFFECTED (victim, AFF_SHADOWPLANE)) obj->extra_flags = ITEM_SHADOWPLANE; obj_to_room (obj, victim->in_room); act ("$p appears in front of $n.", ch, obj, NULL, TO_ROOM); act ("$p appears in front of you.", ch, obj, NULL, TO_CHAR); act ("$p appears in front of $n.", victim, obj, NULL, TO_ROOM); act ("$p appears in front of you.", ch, obj, victim, TO_VICT); WAIT_STATE (ch, 8); ch->gnosis[GCURRENT] -= 2; return; } /* Silver Fangs * Awe (Auto) * Silver Claws (Auto) * Mindblock (Auto) * Luna's Avenger * Paws of the Newborn Cub */ void do_lunasavenger (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[SILVERFANGS] < 4) { stc ("You must obtain the fourth gift of the Silver Fangs to use Luna's Avenger.\n\r", ch); return; } if (IS_SET (ch->garou1, GAROU_AVENGER)) { stc ("Your body warps and shrinks, losing it's silver composition.\n\r", ch); REMOVE_BIT (ch->garou1, GAROU_AVENGER); return; } else { stc ("Your body warps and grows, becoming imbued with silver.\n\r", ch); SET_BIT (ch->garou1, GAROU_AVENGER); return; } return; } void do_paws (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[SILVERFANGS] < 5) { stc ("You must obtain the fifth gift of the Silver Fangs to use Paws of the Newborn Cub.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (ch == victim) { stc ("It might be a bad idea to use this on yourself..\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 15) { stc ("You need 15 points of gnosis to use this power.\n\r", ch); return; } if (IS_NPC (victim)) { stc ("This power is useless on beasts..\n\r", ch); return; } if (IS_SET (victim->garou1, GAROU_PAWS)) { stc ("They are already afflicted with this disease..\n\r", ch); return; } act ("You focus your gnosis power into your hands, and lay them on $N.", ch, NULL, victim, TO_CHAR); act ("$n's hands start to glow violently, and $e reaches out and lays them on you.", ch, NULL, victim, TO_VICT); act ("$n's hands start to glow brightly, and $e reaches out and presses them against $N's forehead.", ch, NULL, victim, TO_NOTVICT); act ("$N's body starts to weaken and shrink!", ch, NULL, victim, TO_CHAR); act ("$N's body starts to weaken and shrink!", ch, NULL, victim, TO_NOTVICT); stc ("Your body starts to weaken and shrink!\n\r", victim); SET_BIT (victim->garou1, GAROU_PAWS); ch->gnosis[GCURRENT] -= 15; WAIT_STATE (ch, 24); return; } /* Stargazers * Inner Strength (Auto) * Merciful Blow * Preternatural Awareness (Auto) * Circular Attack (Auto) */ void do_merciful (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; if (!is_garou (ch)) return; if (ch->gifts[STARGAZERS] < 2) { stc ("You must obtain the second gift of the Stargazers to use Merciful Blow.\n\r", ch); return; } if (ch->fighting == NULL) { stc ("You must be fighting to use this power.\n\r", ch); return; } victim = ch->fighting; if (((victim->hit / victim->max_hit) * 100) >= 50) { stc ("They are far too healthy to be affected by this power.\n\r", ch); return; } if (number_range (1, 8) != 4) { act ("You deliver a blow to $N's neck, but nothing happens.", ch, NULL, victim, TO_CHAR); act ("$n delivers a powerful blow to your neck, but you shrug it off.", ch, NULL, victim, TO_VICT); act ("$n delivers a powerful blow to $N's neck, but $E shrugs it off.", ch, NULL, victim, TO_NOTVICT); WAIT_STATE(ch, 12); return; } else { act ("You deliver a blow to $N's neck, and $N falls to the ground.", ch, NULL, victim, TO_CHAR); act ("$n delivers a powerful blow to your neck, and you fall to the ground.", ch, NULL, victim, TO_VICT); act ("$n delivers a powerful blow to $N's neck, and $E falls to the ground.", ch, NULL, victim, TO_NOTVICT); do_peace (ch, ""); victim->position = POS_STUNNED; WAIT_STATE(ch, 12); return; } // WAIT_STATE(ch, 12); return; } /* Uktena * Shroud * Spirit of the Bird (Auto) * Call Flame Spirit * Invisibility * Hand of the Earth Lords (Auto) */ void do_darkshroud (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[UKTENA] < 1) { stc ("You must obtain the first gift of the Uktena to use Dark Shroud.\n\r", ch); return; } if (IS_SET (ch->newbits, NEW_DARKNESS)) { REMOVE_BIT (ch->newbits, NEW_DARKNESS); REMOVE_BIT (ch->in_room->room_flags, ROOM_DARK); send_to_char ("You banish the darkness from the room!\n\r", ch); act ("A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM); act ("$n banishes the darkness from the room!", ch, NULL, NULL, TO_ROOM); return; } if (IS_SET (ch->in_room->room_flags, ROOM_DARK)) { send_to_char ("The room is already in darkness.\n\r", ch); return; } SET_BIT (ch->in_room->room_flags, ROOM_DARK); SET_BIT (ch->newbits, NEW_DARKNESS); send_to_char ("You call forth the Shroud of Night to darken the room!\n\r", ch); act ("A look of concentration crosses $n's face.", ch, NULL, NULL, TO_ROOM); act ("The room is filled with darkness!", ch, NULL, NULL, TO_ROOM); WAIT_STATE (ch, 8); return; } void do_flamespirit (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam = 0; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[UKTENA] < 3) { stc ("You must obtain the third gift of the Uktena to use Call the Flame Spirit.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (is_safe (ch, victim)) return; if (ch->gnosis[GCURRENT] < 2) { stc ("You need two points of gnosis to use this power.\n\r", ch); return; } dam = number_range ((ch->gifts[UKTENA] * 100), (ch->gifts[UKTENA] * 120)); if (IS_CLASS (victim, CLASS_VAMPIRE)) dam *= number_range (2, 3); act ("You summon a spirit of Flames to disintegrate $N.", ch, NULL, victim, TO_CHAR); act ("$n conjures a spirit of flames to smite you.", ch, NULL, victim, TO_VICT); act ("$n conjures a spirit of flames to smite $N!", ch, NULL, victim, TO_NOTVICT); if (!WORN_ARTIFACT (victim, ARTI_DEMONS_HEART)) mage_damage (ch, victim, dam, "flame spirit", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 2; WAIT_STATE (ch, 16); return; } void do_invisibility (CHAR_DATA * ch, char *argument) { if (!is_garou (ch)) return; if (ch->gifts[UKTENA] < 4) { stc ("You must obtain the fourth gift of the Uktena to use Invisibility.\n\r", ch); return; } if (IS_GAR1 (ch, GAROU_BLISSFUL)) { stc ("You fade out of your invisibility.\n\r", ch); REMOVE_BIT (ch->garou1, GAROU_BLISSFUL); return; } else { stc ("Your body fades out of existance.\n\r", ch); SET_BIT (ch->garou1, GAROU_BLISSFUL); return; } return; } /* Wendigo * Camouflage * Cutting Wind * Call the Cannibal Spirit * Heart of Ice * Chill of the Early Frost */ void do_cuttingwind (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam = 0; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[WENDIGO] < 2) { stc ("You must obtain the second gift of the Wendigo to use Cutting Wind.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 2) { stc ("You need two points of gnosis to use this power.\n\r", ch); return; } dam = number_range (1000, 1250); if (IS_NPC (victim)) dam *= 2; act ("You summon the bitter winds of the Great Wendigo to rip $N.", ch, NULL, victim, TO_CHAR); act ("$n summons the bitter winds of the Great Wendigo to tear you apart.", ch, NULL, victim, TO_VICT); act ("$n summons the bitter winds of the Great Wendigo to tear $N apart.", ch, NULL, victim, TO_NOTVICT); mage_damage (ch, victim, dam, "blast of wind", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 2; WAIT_STATE (ch, 24); return; } void do_cannibalspirit (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; CHAR_DATA *mob; char arg[MIL]; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[WENDIGO] < 3) { stc ("You must obtain the third gift of the Wendigo to Call the Cannibal Spirit.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this on?\n\r", ch); return; } if ((victim = get_char_world (ch, arg)) == NULL) { stc ("You cannot find them in this realm.\n\r", ch); return; } if (!IS_NPC (victim) && !IS_IMMUNE (victim, IMM_SUMMON)) { stc ("You failed\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 15) { stc ("You need 15 gnosis points to use this power.\n\r", ch); return; } if (is_safe (ch, victim)) { stc ("They are in a holy place.\n\r", ch); return; } if (victim->level < 3) { stc ("They must be an avatar!\n\r", ch); return; } if ((mob = create_mobile (get_mob_index (MOB_VNUM_CANNIBAL))) == NULL) { stc ("Shit. The Mob is missing. Fuck. Tell someone. Fuck!\n\r", ch); return; } SET_BIT (mob->affected_by, AFF_DETECT_INVIS); SET_BIT (mob->affected_by, AFF_DETECT_HIDDEN); SET_BIT (mob->affected_by, AFF_SHADOWSIGHT); SET_BIT (mob->act, ACT_NOEXP); SET_BIT (mob->act, ACT_AGGRESSIVE); char_to_room (mob, ch->in_room); act ("You summon a Great Wendigo avatar to hunt your foe.", ch, NULL, victim, TO_CHAR); act ("$N bows before you and grins evilly.", ch, NULL, mob, TO_CHAR); act ("$N bursts out of the ground and grins evilly.", ch, NULL, mob, TO_CHAR); char_from_room (mob); char_to_room (mob, victim->in_room); stc ("The huge beast quickly burrows into the ground and seeks out your foe.\n\r", ch); stc ("A huge werewolf bursts out of the ground and growls verociously.\n\r", victim); stc ("The werewolf turns to you and grins.\n\r", victim); do_kill (mob, victim->name); ch->gnosis[GCURRENT] -= 15; WAIT_STATE (ch, 16); return; } void do_heartofice (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MIL]; int dam = 0; argument = one_argument (argument, arg); if (!is_garou (ch)) return; if (ch->gifts[WENDIGO] < 4) { stc ("You must obtain the fourth gift of the Wendigo to use this power.\n\r", ch); return; } if (arg[0] == '\0') { stc ("Whom do you wish to use this power on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { stc ("They aren't here.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 10) { stc ("You must have 10 points of gnosis to use this power.\n\r", ch); return; } if (is_safe (ch, victim)) return; if (victim->level < 3) { stc ("They must be an Avatar.\n\r", ch); return; } dam = number_range (400, 600); if (IS_NPC (victim)) dam *= 3; act ("You summon the frost of the Wendigo to chill $N.", ch, NULL, victim, TO_CHAR); act ("A cold air fills the room.\nYou are gripped with pain as the cold freezes your body.", ch, NULL, victim, TO_VICT); mage_damage (ch, victim, dam, "ice blast", MAGEDAM_OTHER); ch->gnosis[GCURRENT] -= 10; WAIT_STATE (ch, 16); return; } void do_chillfrost (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; int number_hit = 0; if (!is_garou (ch)) return; if (ch->gifts[WENDIGO] < 5) { stc ("You must obtain the fifth gift of the Wendigo to use this power.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 20) { stc ("You need 20 points of gnosis to use this power.\n\r", ch); return; } stc ("You conjure the very essence of the Great Wendigo to blanket the area.\nThe skies turn white and the air turns bitter cold.\n\r", ch); for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (number_hit > 15) break; if (vch->in_room == NULL) continue; if (vch->in_room->area != ch->in_room->area) continue; if (vch->level < 3) continue; if (!IS_NPC (vch) && vch->pcdata->chobj != NULL) continue; if (is_safe (ch, vch)) continue; if (ch == vch) continue; if ((mount = ch->mount) != NULL) if (mount == vch) continue; stc ("The skies turn white and the sun is banished.\nThe room becomes bitterly cold, and your body starts to shiver.\n\r", vch); mage_damage (ch, vch, number_range (400, 500), "chill frost", MAGEDAM_OTHER); number_hit++; } ch->gnosis[GCURRENT] -= 20; WAIT_STATE (ch, 24); return; } /* Glass Walker Gifts */ //LVL 2 Sense Aura void do_senseaura (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_WEREWOLF)) { do_rand_typo (ch); return; } if (ch->gifts[GLASSWALKERS] < 2) { send_to_char ("You require level 2 Glass Walkers to use senseaura.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Sense the aura of what?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { if ((obj = get_obj_carry (ch, arg)) == NULL) { send_to_char ("Sense the aura of what?\n\r", ch); return; } act ("A look of concentration comes over $n's face as they examine $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)) { send_to_char ("You are unable to sense their aura.\n\r", ch); return; } act ("$n examines $N's aura.", ch, NULL, victim, TO_NOTVICT); act ("$n examines your aura.", ch, NULL, victim, TO_VICT); if (IS_NPC (victim)) sprintf (buf, "%s is an NPC.\n\r", victim->short_descr); else { if (victim->level == 12) sprintf (buf, "%s is an Implementor.\n\r", victim->name); else if (victim->level == 11) sprintf (buf, "%s is a High Judge.\n\r", victim->name); else if (victim->level == 10) sprintf (buf, "%s is a Judge.\n\r", victim->name); else if (victim->level == 9) sprintf (buf, "%s is an Enforcer.\n\r", victim->name); else if (victim->level == 8) sprintf (buf, "%s is a Quest Maker.\n\r", victim->name); else if (victim->level == 7) sprintf (buf, "%s is a Builder.\n\r", victim->name); else if (victim->level >= 3) sprintf (buf, "%s is an Avatar.\n\r", victim->name); else sprintf (buf, "%s is a Mortal.\n\r", victim->name); } send_to_char (buf, ch); if (!IS_NPC (victim)) { sprintf (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); } sprintf (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)) sprintf (buf, "Hitroll:%d, Damroll:%d, AC:%d.\n\r", char_hitroll (victim), char_damroll (victim), char_ac (victim)); else sprintf (buf, "AC:%d.\n\r", char_ac (victim)); send_to_char (buf, ch); if (!IS_NPC (victim)) { sprintf (buf, "Status:%d, ", victim->race); send_to_char (buf, ch); } sprintf (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); return; } /*************************************************************************** * New Powers for Wolves, for Legend of Chrystancia by Macademus * ***************************************************************************/ /* Gallaiard */ /* LvL 1 Call of the Wyld */ void do_wyld (CHAR_DATA * ch, char *argument) { DESCRIPTOR_DATA *d; CHAR_DATA *vch; CHAR_DATA *victim; char buf[MAX_STRING_LENGTH]; if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF) && ch->in_room == NULL) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[GALLIARD] < 1) { stc ("You have not learned the Galliard gift of Call Of The Wyld.\n\r", ch); return; } if ((victim = ch->fighting) == NULL && ch->hit > 0) { send_to_char ("You can only call for assistance in times of great need.\n\r", ch); return; } if (ch->pcdata->wyld > 0) { send_to_char ("Your voice has not yet recovered.\n\r", ch); return; } ch->pcdata->wyld = 5; for (d = first_descriptor; d != NULL; d = d->next) { if (d->connected != CON_PLAYING) continue; if ((vch = d->character) == NULL) continue; if (vch->in_room == NULL) continue; if (IS_NPC (vch)) continue; if (ch->pcdata->stats[UNI_RAGE] >= 40 && vch->pcdata->stats[UNI_RAGE] < 40) continue; if (ch->pcdata->stats[UNI_RAGE] < 40 && vch->pcdata->stats[UNI_RAGE] >= 40) continue; if (vch == ch) act ("You call for assistance!", ch, NULL, argument, TO_CHAR); if (ch != vch && (IS_CLASS (vch, CLASS_WEREWOLF) || IS_IMMORTAL (vch))) { if (victim != NULL) { sprintf (buf, "CALL OF THE WYLD:[$n is under attack by %s at %s]", IS_NPC (victim) ? victim->short_descr : victim->name, ch->in_room->name); act (buf, ch, NULL, vch, TO_VICT); } else if (ch->hit < 1) { sprintf (buf, "CALL OF THE WYLD:[$n is badly wounded at %s]", ch->in_room->name); act (buf, ch, NULL, vch, TO_VICT); } else { sprintf (buf, "CALL OF THE WYLD:[$n needs assistance at %s]", ch->in_room->name); act (buf, ch, NULL, vch, TO_VICT); } } } return; } // LVL 2 // LVL 4 Shred void do_shred (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; CHAR_DATA *victim; int dam = 0; argument = one_argument (argument, arg); if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[GALLIARD] < 4) { send_to_char ("You need level 4 Galliard to Shred.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Shred whom?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They aren't here.\n\r", ch); return; } if (victim == ch) { send_to_char ("How can you shred yourself?\n\r", ch); return; } if (victim->fighting != NULL) { send_to_char ("You can't shred a fighting person.\n\r", ch); return; } if (victim->hit < victim->max_hit) { act ("$N is hurt and suspicious ... you can't sneak up.", ch, NULL, victim, TO_CHAR); return; } if (!IS_AFFECTED (ch, AFF_SHADOWPLANE)) { send_to_char ("You must be in the umbra to Shred!\n\r", ch); return; } do_shadowplane (ch, ""); if (is_safe (ch, victim)) return; if (!IS_NPC (victim)) dam = 2000; if (IS_NPC (victim)) dam = 2500; dam += number_range (1, 20); WAIT_STATE (ch, 15); if (ch->gifts[GALLIARD] > 1) damage (ch, victim, dam, gsn_shred); damage (ch, victim, dam, gsn_shred); if (ch->gifts[GALLIARD] > 3) damage (ch, victim, dam, gsn_shred); if (ch->gifts[GALLIARD] > 4) damage (ch, victim, dam, gsn_shred); return; } // LVL 5 Devour void do_devour (CHAR_DATA * ch, char *argument) { char arg[MAX_INPUT_LENGTH]; OBJ_DATA *obj; char buf[MAX_INPUT_LENGTH]; int hpgain; one_argument (argument, arg); if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[GALLIARD] < 5) { send_to_char ("You require Galliard 5 to devour.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Devour what?\n\r", ch); return; } obj = get_obj_list (ch, arg, ch->in_room->contents); if (obj == NULL) { send_to_char ("You can't find it.\n\r", ch); return; } if (obj->item_type != ITEM_CORPSE_NPC) { act ("You are unable to devour $p.", ch, obj, 0, TO_CHAR); return; } else if (obj->chobj != NULL && !IS_NPC (obj->chobj) && obj->chobj->pcdata->obj_vnum != 0) { act ("You are unable to devour $p.", ch, obj, 0, TO_CHAR); return; } hpgain = number_range (100, 250); ch->hit += hpgain; if (ch->hit > ch->max_hit) { ch->hit = ch->max_hit; } sprintf (buf, "You devour %d hp of life from $p.", hpgain); act (buf, ch, obj, NULL, TO_CHAR); act ("You devour $p.", ch, obj, NULL, TO_CHAR); act ("$p is devoured by $n.", ch, obj, NULL, TO_ROOM); extract_obj (obj); return; } /* Fianna */ //LVL 1 void do_brew (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)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[FIANNA] < 1) { stc ("You have not learned the Fianna gift of brew.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("You must state what you wish to brew?\n\r", ch); return; } if ((obj = get_obj_here (ch, arg)) == NULL) { send_to_char ("That isn't here.\n\r", ch); return; } if (obj->item_type != ITEM_FOUNTAIN) { send_to_char ("You can only brew fountains.\n\r", ch); return; } if (strlen (obj->questmaker) > 2 && obj->questmaker != NULL && !str_cmp (obj->questmaker, ch->name)) { send_to_char ("You can't brew a fountain that belongs to someone else.\n\r", ch); return; } if (obj->value[2] == 1) { obj->value[2] = 0; act ("You transform the beer in $p into water.", ch, obj, NULL, TO_CHAR); act ("$n transforms the beer in $p into water.", ch, obj, NULL, TO_ROOM); } else if (obj->value[2] == 0) { obj->value[2] = 1; act ("You change the water in $p into beer.", ch, obj, NULL, TO_CHAR); act ("$n change the water in $p into beer.", ch, obj, NULL, TO_ROOM); } else send_to_char ("You can only change water and beer.\n\r", ch); return; } // Fianna 3 void do_banshee (CHAR_DATA * ch, char *argument) { CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *mount; char arg[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { stc ("Huh?\n\r", ch); return; } if (ch->gifts[FIANNA] < 3) { stc ("You have not learned the Fianna gift of Howl of the Banshee.\n\r", ch); return; } if (IS_SET (ch->in_room->room_flags, ROOM_SAFE)) { stc ("Not while in a safe room.\n\r", ch); return; } if (ch->gnosis[GCURRENT] < 6) { stc ("You need six point of gnosis power to use Howl of the Banshee.\n\r", ch); return; } for (vch = char_list; vch != NULL; vch = vch_next) { vch_next = vch->next; if (vch->in_room == NULL) continue; if (!IS_NPC (vch) && vch->pcdata->chobj != NULL) continue; if (ch == vch) continue; if (vch->in_room == ch->in_room) { if ((mount = ch->mount) != NULL) { if (mount == vch) continue; } if (can_see (ch, vch)) { if (number_range (1, (7 - ch->gifts[FIANNA])) == 2) { act ("A look of concentration crosses $n face.", ch, NULL, vch, TO_ROOM); WAIT_STATE (ch, 25); stc ("You hear an ear poping howl and are suddenly attacked from all sides.\n\r", vch); // vch->position = POS_STUNNED; vch->hit -= 1000; vch->position = POS_STUNNED; ch->gnosis[GCURRENT] = ch->gnosis[GCURRENT] - 6; act ("You hear an ear poping howl, $n is suddenly attacked from all sides.", vch, NULL, vch, TO_NOTVICT); return; } else { act ("A look of concentration crosses $n face.", ch, NULL, vch, TO_ROOM); return; } } else continue; return; } } return; } //Fianna 4 void do_balor (CHAR_DATA * ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; argument = one_argument (argument, arg); if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[FIANNA] < 4) { send_to_char ("You have not yet learned the Fianna gift of Balor's gaze.\n\r", ch); return; } if (arg[0] == '\0') { send_to_char ("Who do you wish to use Balor's gaze on?\n\r", ch); return; } if ((victim = get_char_room (ch, arg)) == NULL) { send_to_char ("They aren't here.\n\r", ch); return; } if (IS_NPC (victim)) { send_to_char ("Not on mobs.\n\r", ch); return; } if (IS_IMMORTAL (victim) && victim != ch) { send_to_char ("You can only use Balor's gaze on Avatar's or lower.\n\r", ch); return; } if (is_safe (ch, victim) == TRUE) return; if (victim->hit < victim->max_hit) { send_to_char ("They are hurt and suspicious.\n\r", ch); return; } act ("You close your eyes and concentrate on $N.", ch, NULL, victim, TO_CHAR); act ("$n's right eye begins to glow a baleful red!", ch, NULL, victim, TO_VICT); act ("$n closes $s eyes and cencentrates on $N.", ch, NULL, victim, TO_NOTVICT); WAIT_STATE (ch, 12); if (number_percent () < 50) { send_to_char ("You failed.\n\r", ch); return; } act ("You scream in pain as your body is torn apart from the inside out!", victim, NULL, NULL, TO_CHAR); act ("$n screams in pain as there body is torn apart from the inside out!", victim, NULL, NULL, TO_ROOM); SET_BIT (victim->flag2, AFF2_BALOR); return; } // Fianna 5 void do_talons (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_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[FIANNA] < 5) { send_to_char ("You need level 5 in Fianna to use talons.\n\r", ch); return; } if ((victim = ch->fighting) == NULL) { send_to_char ("You aren't fighting anyone.\n\r", ch); return; } WAIT_STATE (ch, 12); if (!IS_NPC (victim)) { dam = 350; } else if (IS_NPC (victim)) { dam = 3000; } if (!IS_NPC (victim) && IS_CLASS (victim, CLASS_WEREWOLF)) { if (victim->gifts[STARGAZERS] > 2) dam *= 0.5; } dam += number_range (1, 30); if (dam <= 0) dam = 1; sprintf (buf, "Your talons strike $N incredibly hard! [%d]\n\r", dam); act (buf, ch, NULL, victim, TO_CHAR); sprintf (buf, "$n's talons strike you incredibly hard! [%d]\n\r", dam); act (buf, ch, NULL, victim, TO_VICT); sprintf (buf, "$n's talons strike $N incredibly hard! [%d]\n\r", dam); act (buf, ch, NULL, victim, TO_NOTVICT); hurt_person (ch, victim, dam); return; } void do_halosun (CHAR_DATA * ch, char *argument) { if (IS_NPC (ch)) return; if (!IS_CLASS (ch, CLASS_WEREWOLF)) { send_to_char ("Huh?\n\r", ch); return; } if (ch->gifts[CHILDREN] < 5) { send_to_char ("You require the level 5 Children of Gaia power to use the Halo of the Sun.\n\r", ch); return; } if (IS_ITEMAFF (ch, ITEMA_SUNSHIELD)) { send_to_char ("Your Halo of the Sun gradually fades away.\n\r", ch); act ("$n's Halo of the Sun gradually fades away.", ch, NULL, NULL, TO_ROOM); REMOVE_BIT (ch->itemaffect, ITEMA_SUNSHIELD); return; } send_to_char ("You are surrounded by a halo of sunlight!\n\r", ch); act ("$n is surrounded by a halo of sunlight!", ch, NULL, NULL, TO_ROOM); SET_BIT (ch->itemaffect, ITEMA_SUNSHIELD); return; }