/********************************************************************* * * * 000000This file property of Kefka (kefka@netcom.ca) and * * Skyntil (gvolker98@hotmail.com) * * Code file of Asgardian Nightmare (RoT 1.5/Asgard 0.1b) * * telnet://asgard.betterbox.net:5555 * * http://asgard.betterbox.net * *********************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #include <sys/time.h> #endif #include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <time.h> #include "merc.h" #include "magic.h" #include "recycle.h" #include "tables.h" #include "lookup.h" #include "newclan.h" #include "interp.h" void initialize_spell_types(void); int focus_level(long total); long focus_left(long total); int focus_dam(CHAR_DATA *ch); int focus_str(CHAR_DATA *ch); int focus_ac(CHAR_DATA *ch); int focus_move(CHAR_DATA *ch, int state); int focus_hit(CHAR_DATA *ch); int focus_dex(CHAR_DATA *ch); int focus_hp(CHAR_DATA *ch, int state); int focus_con(CHAR_DATA *ch); int focus_sorc(CHAR_DATA *ch); int focus_sorcbonus(CHAR_DATA *ch); int focus_mana(CHAR_DATA *ch, int state); int focus_int(CHAR_DATA *ch); int focus_save(CHAR_DATA *ch, int state); int focus_wis(CHAR_DATA *ch); int focus_res(CHAR_DATA *ch); int focus_resbonus(CHAR_DATA *ch); DECLARE_DO_FUN( do_decapitate ); void raw_kill(CHAR_DATA * victim, CHAR_DATA * killer); void do_pretitle(CHAR_DATA * ch, char *argument) { char buf[MAX_STRING_LENGTH]; int value; if (IS_SET (ch->act, PLR_NOTITLE)) return; if (IS_NPC (ch)) { send_to_char("Not on NPC's.\n\r", ch); return; } if ((ch->in_room->vnum == ROOM_VNUM_CORNER) && (!IS_IMMORTAL (ch))) { send_to_char( "Just keep your nose in the corner like a good little player.\n\r", ch); return; } if (ch->pcdata->pretit == '\0') ch->pcdata->pretit = "{x"; if (argument[0] == '\0') { sprintf(buf, "Your current pretitle is '%s'.{x\n\r", ch->pcdata->pretit); send_to_char(buf, ch); return; } if (strlen(argument) > 45) { argument[45] = '{'; argument[46] = 'x'; argument[47] = '\0'; } else { value = strlen(argument); argument[value] = '{'; argument[value + 1] = 'x'; argument[value + 2] = '\0'; } ch->pcdata->pretit = str_dup(argument); send_to_char("Done.\n\r", ch); return; } void do_stances(CHAR_DATA *ch, char *argument) { char buf[MSL]; send_to_char("\n\r{b========={x{ySTANCES{x{b========={x\n\r", ch); sprintf(buf, "{b|>{x {gBull{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_BULL]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gViper{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_VIPER]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gCrab{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_CRAB]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gCrane{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_CRANE]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gMongoose{x: {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_MONGOOSE]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gTiger{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_TIGER]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gMantis{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_MANTIS]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gDragon{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_DRAGON]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gMonkey{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_MONKEY]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gSwallow{x : {w%-3d{x/200 {b<|{x\n\r", ch->stance[STANCE_SWALLOW]); send_to_char(buf, ch); send_to_char("{b========={x{y*******{x{b========={x\n\r", ch); return; } void do_power(CHAR_DATA *ch, char *argument) { char buf[MSL]; extern bool clantoggle; if (IS_IMMORTAL(ch)) { if (!str_cmp(argument, "toggle")) { if (clantoggle) clantoggle = FALSE; else if (!clantoggle) clantoggle = TRUE; printf_to_char(ch, "Clantoggle is now %d.\n\r", clantoggle); return; } if (!str_cmp(argument, "reset")) { ch->pcdata->power[0] = 0; ch->pcdata->power[1] = 0; send_to_char("power reset.\n\r", ch); } if (!str_cmp(argument, "nomonk")) { NOMONKS = TRUE; printf_to_char(ch, "NOMONK is now %d.\n\r", NOMONKS); } if (!str_cmp(argument, "yesmonk")) { NOMONKS = FALSE; printf_to_char(ch, "NOMONK is now %d.\n\r", NOMONKS); } if (!str_cmp(argument, "noninja")) { printf_to_char(ch, "NONINJA is now %d.\n\r", NONINJA); NONINJA = TRUE; } if (!str_cmp(argument, "yesninja")) { NONINJA = FALSE; printf_to_char(ch, "NONINJA is now %d.\n\r", NONINJA); } } if (ch->class != CLASS_MONK) { send_to_char( "You pray for power....the gods laugh at your display.\n\r", ch); return; } /*highlander remove swap to barbarian if (ch->class == CLASS_BARBARIAN) { send_to_char("\n\r{b======{x{cHIGHLAND-POWER{x{b======{x\n\r", ch); sprintf(buf,"{b|>{x {gKills{x : {r%-3d{x {b<|{x\n\r",ch->pcdata->power[POWER_KILLS]); send_to_char(buf,ch); sprintf(buf, "{b|>{x {gPoints{x : {r%-3d{x {b<|{x\n\r", ch->pcdata->power[POWER_POINTS]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gLevel{x : {r%-3d{x {b<|{x\n\r", ch->pcdata->power[POWER_LEVEL]); send_to_char(buf, ch); send_to_char("{b========={x{c********{x{b========={x\n\r", ch); } */ if (ch->class == CLASS_MONK) { send_to_char("\n\r{b======{x{c CHI-POWER {x{b======{x\n\r", ch); sprintf(buf, "{b|>{x {gCombat{x : {r%-3d{x {b<|{x\n\r", ch->pcdata->power[0]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gDefense{x : {r%-3d{x {b<|{x\n\r", ch->pcdata->power[1]); send_to_char(buf, ch); send_to_char("{b========={x{c********{x{b========={x\n\r", ch); } return; } void do_focus(CHAR_DATA *ch, char *argument) { char buf[MSL]; if (ch->level < LEVEL_HERO) { send_to_char("You just aren't legendary enough to focus.\n\r", ch); return; } else { send_to_char( "\n\r{b-----------======================{x{cFOCUS{x{b======================-----------{x\n\r", ch); send_to_char( "{b|>{x {RLvl Totl Pnts Pnts Left Modifier1 Modifier2 {b<|{x\n\r", ch); send_to_char( "{b|>{x {r--- --------- --------- --------- --------- {b<|{x\n\r", ch); sprintf( buf, "{b|%s{x {gCombat Power{x : {r%-2d %-9ld %-9ld Dam: %4d Str: %4d {b<|{x\n\r", class_focus[ch->class].combat_power == 2 ? "{CP" : class_focus[ch->class].combat_power == 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[COMBAT_POWER]), ch->pcdata->focus[COMBAT_POWER], focus_left( ch->pcdata->focus[COMBAT_POWER]), focus_dam(ch), focus_str(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gCombat Defense{x : {r%-2d %-9ld %-9ld AC: %5d Mv: %5d {b<|{x\n\r", class_focus[ch->class].combat_defense == 2 ? "{CP" : class_focus[ch->class].combat_defense == 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[COMBAT_DEFENSE]), ch->pcdata->focus[COMBAT_DEFENSE], focus_left( ch->pcdata->focus[COMBAT_DEFENSE]), focus_ac(ch), focus_move(ch,0)/* * focus_level(ch->pcdata->focus[COMBAT_DEFENSE])*/); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gCombat Agility{x : {r%-2d %-9ld %-9ld Hit: %4d Dex: %4d {b<|{x\n\r", class_focus[ch->class].combat_agility == 2 ? "{CP" : class_focus[ch->class].combat_agility == 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[COMBAT_AGILITY]), ch->pcdata->focus[COMBAT_AGILITY], focus_left( ch->pcdata->focus[COMBAT_AGILITY]), focus_hit(ch), focus_dex(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gCombat Toughness{x : {r%-2d %-9ld %-9ld Hp: %5d Con: %4d {b<|{x\n\r", class_focus[ch->class].combat_toughness == 2 ? "{CP" : class_focus[ch->class].combat_toughness == 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS]), ch->pcdata->focus[COMBAT_TOUGHNESS], focus_left( ch->pcdata->focus[COMBAT_TOUGHNESS]), focus_hp(ch,0) /* * focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS])*/, focus_con(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gMagic Power{x : {r%-2d %-9ld %-9ld Sor: %4d Max: +%3d%%{b<|{x\n\r", class_focus[ch->class].magic_power== 2 ? "{CP" : class_focus[ch->class].magic_power== 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[MAGIC_POWER]), ch->pcdata->focus[MAGIC_POWER], focus_left( ch->pcdata->focus[MAGIC_POWER]), focus_sorc(ch), focus_sorcbonus(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gMagic Resonance{x : {r%-2d %-9ld %-9ld Res: %4d Max: +%3d%%{b<|{x\n\r", class_focus[ch->class].magic_resonance== 2 ? "{CP" : class_focus[ch->class].magic_resonance== 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[MAGIC_RESONANCE]), ch->pcdata->focus[MAGIC_RESONANCE], focus_left( ch->pcdata->focus[MAGIC_RESONANCE]), focus_res(ch), focus_resbonus(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gMagic Ability{x : {r%-2d %-9ld %-9ld Ma: %5d Int: %4d {b<|{x\n\r", class_focus[ch->class].magic_ability== 2 ? "{CP" : class_focus[ch->class].magic_ability== 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[MAGIC_ABILITY]), ch->pcdata->focus[MAGIC_ABILITY], focus_left( ch->pcdata->focus[MAGIC_ABILITY]), focus_mana(ch,0) /** focus_level(ch->pcdata->focus[MAGIC_ABILITY])*/, focus_int(ch)); send_to_char(buf, ch); sprintf( buf, "{b|%s{x {gMagic Defense{x : {r%-2d %-9ld %-9ld Svs: %4d Wis: %4d {b<|{x\n\r", class_focus[ch->class].magic_defense== 2 ? "{CP" : class_focus[ch->class].magic_defense== 1 ? "{sS" : "{xT", focus_level(ch->pcdata->focus[MAGIC_DEFENSE]), ch->pcdata->focus[MAGIC_DEFENSE], focus_left( ch->pcdata->focus[MAGIC_DEFENSE]), focus_save(ch, 0), focus_wis(ch)); send_to_char(buf, ch); send_to_char( "{b| {gKey - {CP{g:Primary, {sS{g:Secondary, {xT{g:Tertiary Focus Skills {b|\n\r",ch); send_to_char( "{b-----------===================={x{c********{x{b=====================-----------{x\n\r", ch); if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_POWER) send_to_char("Your current focus is Combat Power.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_DEFENSE) send_to_char("Your current focus is Combat Defense.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_AGILITY) send_to_char("Your current focus is Combat Agility.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_TOUGHNESS) send_to_char("Your current focus is Combat Toughness.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_POWER) send_to_char("Your current focus is Magic Power.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_RESONANCE) send_to_char("Your current focus is Magic Resonance.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_ABILITY) send_to_char("Your current focus is Magic Ability.\n\r", ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_DEFENSE) send_to_char("Your current focus is Magic Defense.\n\r", ch); sprintf(buf,"{xYour current level bonus is %d.\n\r",tier_level_bonus(ch)); send_to_char(buf, ch); sprintf(buf,"{xYour current spell level bonus is %d.\n\r",tier_spell_bonus(ch)); send_to_char(buf, ch); } return; } void do_rubeyes(CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; int burnt = 0; AFFECT_DATA af, *paf, *fire; bool found = 0; one_argument(argument, arg); if (IS_NPC( ch )) return; if (ch->fighting != NULL) { send_to_char("Not while fighting!\n\r", ch); return; } if (!IS_AFFECTED(ch,AFF_BLIND)) { send_to_char("But your eyes aren't blinded!\n\r", ch); return; } for (paf = ch->affected; paf != NULL; paf = paf->next) { switch (paf->location) { case APPLY_CRIPPLE_HEAD: found = 1; break; } if (found) { send_to_char("You can't rub out the crippling effects!\n\r", ch); return; } } if (number_percent() > 60) { act("You rub your eyes till they bleed but remain blind.", ch, NULL, NULL, TO_CHAR); act("$n rubs $s eyes violently.", ch, NULL, NULL, TO_ROOM ); WAIT_STATE(ch,4) ; return; } if ( is_affected(ch,skill_lookup("fire breath"))) { int fchance = 0; fchance = number_percent(); if ( fchance < 5) { act("You start to rub your eyes but fail.",ch,NULL,NULL,TO_CHAR); act("You double over as the smoke in your lungs sends you into a coughing fit!",ch,NULL,NULL,TO_CHAR); act("$n suddenly doubles over and begins to cough uncontrollably!",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch,12); act("Your coughing fit subsides.",ch,NULL,NULL,TO_CHAR); return; } if ( fchance < 10) { act("You try to rub the smoke out of your eyes but fail.",ch,NULL,NULL,TO_CHAR); act("$n rubs $s eyes violently.",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch,3); return; } for ( fire = ch->affected; fire != NULL; fire = fire->next) { if ( fire->type == skill_lookup("fire breath")) { burnt = fire->duration; break; } } if ( burnt > 1 && fchance < 50) { affect_strip(ch,skill_lookup("fire breath")); af.where = TO_AFFECTS; af.location = APPLY_HITROLL; af.modifier = -25; af.level = fire->level; af.bitvector = AFF_BLIND; af.type = skill_lookup("fire breath"); af.duration = 1; affect_to_char(ch,&af); WAIT_STATE( ch, 6 ); act("You manage to rub some smoke out of your eyes.",ch,NULL,NULL,TO_CHAR); act("Smoke flows out from $n's eyes.",ch,NULL,NULL,TO_ROOM); return; } else if ( burnt > 0 && fchance < 75 ) { affect_strip(ch,skill_lookup("fire breath")); af.where = TO_AFFECTS; af.location = APPLY_HITROLL; af.duration = 0; af.type = skill_lookup("fire breath"); af.level = 101; af.bitvector = AFF_BLIND; af.modifier = -25; affect_to_char(ch,&af); if (ch->move > 1) ch->move = ch->move*9/10; act("Your eyes begin to clear, the smoke dissipating",ch,NULL,NULL,TO_CHAR); act("$n's eyes begin to water.",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch,4); return; } } if ( is_affected(ch,skill_lookup("blindness"))) { //act("Try as you might, you the magic will not rub away!",ch,NULL,NULL,TO_CHAR); //WAIT_STATE(ch,2); //return; if(number_percent() < 50) { act("You try to rub the darkness from your eyes but fail.",ch,NULL,NULL,TO_CHAR); act("$n rubs $s eyes violently.",ch,NULL,NULL,TO_ROOM); } for(fire = ch->affected; fire != NULL; fire = fire->next) { if(fire->type == skill_lookup("blindness")) { burnt = fire->duration; break; } } if(burnt > 1) { affect_strip(ch,skill_lookup("blindness")); af.where = TO_AFFECTS; af.location = APPLY_HITROLL; af.modifier = -25; af.level = fire->level; af.bitvector = AFF_BLIND; af.type = skill_lookup("blindness"); af.duration = (burnt-2); affect_to_char(ch,&af); WAIT_STATE(ch, 36); act("You manage to rub some of the darkness from your eyes.",ch,NULL,NULL,TO_CHAR); act("Darkness flows out from $n's eyes.",ch,NULL,NULL,TO_ROOM); return; } else if (burnt > 0) { affect_strip(ch,skill_lookup("blindness")); af.where=TO_AFFECTS; af.location = APPLY_HITROLL; af.duration = 0; af.type = skill_lookup("blindness"); af.level = 101; af.bitvector = AFF_BLIND; af.modifier = -25; affect_to_char(ch,&af); if(ch->move > 1) ch->move = ch->move/2; act("Your eyes begin to clear, the darkness dissapating",ch,NULL,NULL,TO_CHAR); act("$n's eyes begin to water.",ch,NULL,NULL,TO_ROOM); WAIT_STATE(ch,4); return; } } act( "You can see again!!", ch, NULL, ch, TO_CHAR ); act( "$n looks around with googly eyes!", ch, NULL, ch, TO_ROOM ); affect_strip(ch,gsn_dirt); affect_strip(ch,gsn_blindness_dust); affect_strip(ch,gsn_solar_flare); affect_strip(ch,skill_lookup("blindness")); affect_strip(ch,skill_lookup("smokebomb")); affect_strip(ch,skill_lookup("solar")); affect_strip(ch,skill_lookup("fire breath")); if(IS_SET(ch->affected_by,AFF_BLIND)) REMOVE_BIT(ch->affected_by,AFF_BLIND); WAIT_STATE(ch,4); return; } void do_smother(CHAR_DATA *ch, char *argument) { CHAR_DATA *victim; char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); if (IS_NPC( ch )) return; if (arg[0] == '\0') { send_to_char("Smother who?\n\r", ch); return; } if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They aren't here.\n\r", ch); return; } if (ch == victim) { send_to_char("You cannot smother yourself.\n\r", ch); return; } if (!is_affected(victim, gsn_on_fire)) { send_to_char("But they are not on fire!\n\r", ch); return; } if (number_percent() > 40 && number_bits(2) != 0) { 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 ); 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 ); affect_strip(victim, gsn_on_fire); return; } void do_rolldirt(CHAR_DATA *ch, char *argument) { char arg[MAX_INPUT_LENGTH]; one_argument(argument, arg); if (IS_NPC( ch )) return; if (!is_affected(ch, gsn_on_fire)) { send_to_char("But you are not on fire!\n\r", ch); return; } if (number_percent() > 40 && number_bits(2) != 0) { act( "You roll in the dirt but cannot suppress the flames surrounding you.", ch, NULL, NULL, TO_CHAR); act("$n rolls in the dirt trying to smother the flames around $m!", ch, NULL, NULL, TO_ROOM ); return; } act("The flames around you vanish in the dirt!", ch, NULL, ch, TO_CHAR ); act("$n manages to put out $s flames!", ch, NULL, ch, TO_ROOM ); affect_strip(ch, gsn_on_fire); return; } /* * This code is written for Asgardian NightMare * by Skyntil(Gabe Volker) 4/20/00 * Can be expanded to write a whole file if so desired. * * This Function written to write the magtype.c file from AN values. * Basically Declares each spell to be of type MAGIC_NONE * Then is to be edited with correct types * */ void write_spell_file() { FILE *fp; char buf[MAX_STRING_LENGTH / 4]; int i; //Open file sprintf(buf, "%s", "magtype.c"); if ((fp = fopen(buf, "w")) == NULL) { perror(buf); exit(1); } // Write Credits fprintf(fp, "/*\n * Initialize Spell Types -- Do not forget to add new spells to here.\n"); fprintf(fp, " * This File Can be Generated on Bootup If so Desired.\n"); fprintf(fp, " * It could be also done online. This would avoid having to add\n"); fprintf(fp, " * new spells manually.\n"); fprintf(fp, " */\n"); // Write Includes fprintf(fp, "#include \"include.h\"\n"); // Write Declarations fprintf(fp, "#define SPELL_TYPE(name,type) magic_table[skill_lookup(name)] = type;\n"); // Write Function fprintf(fp, "void initialize_spell_types( )\n"); fprintf(fp, "{\n"); fprintf(fp, "log_string( \"Initializing Magic Types.\" );"); // Now the spells for (i = 0; i < MAX_SKILL; i++) { if (skill_table[i].spell_fun != spell_null) fprintf(fp, "SPELL_TYPE( \"%s\", MAGIC_NONE );\n", skill_table[i].name); } // Close it off fprintf(fp, "\nreturn;\n}\n"); fclose(fp); // Close file return; } void do_learned(CHAR_DATA *ch, char *argument) { char buf[MSL]; send_to_char("\n\r{b======={x{yLEARNED MAGIC{x{b======={x\n\r", ch); sprintf(buf, "{b|>{x {gWhite{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_WHITE]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gRed{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_RED]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gBlue{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_BLUE]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gGreen{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_GREEN]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gBlack{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_BLACK]); send_to_char(buf, ch); sprintf(buf, "{b|>{x {gOrange{x : {w%-3d{x/50 {b<|{x\n\r", ch->magic[MAGIC_ORANGE]); send_to_char(buf, ch); send_to_char("{b========{x{y***********{x{b========{x\n\r", ch); return; } void do_combat(CHAR_DATA *ch, char *argument) { char buf[MSL]; float damred; if (!is_warrior_class(ch->class)) { send_to_char("You do not have any special combat abilities.\n\r", ch); return; } damred = ((((float) ch->toughness / 5) / 34) / 10); send_to_char("\n\r{b========={x{yCOMBAT{x{b=========={x\n\r", ch); sprintf(buf, "{b|>{x {gToughness{x : {w%-3d{x/500 {b<|{x\n\r", ch->toughness); send_to_char(buf, ch); sprintf(buf, "{b|> {gDam Reduce{& : {w%.3f{&%s {b<|\n\r{x", damred * 100, "%"); send_to_char(buf, ch); send_to_char("{b========={y*******{b========={x\n\r", ch); if (!str_cmp(argument, "all")) do_stances(ch, ""); return; } void do_decapitate(CHAR_DATA *ch, char *argument) { char arg[MSL]; CHAR_DATA *victim; one_argument(argument, arg); if (arg[0] == '\0') { send_to_char("Decapitate whom?\n\r", ch); return; } if (IS_NPC(ch)) return; if (IS_AFFECTED(ch,AFF_CHARM) || (IS_NPC(ch) && IS_SET(ch->act,ACT_PET))) return; if ((victim = get_char_room(ch, arg)) == NULL) { send_to_char("They aren't here to be decapitated.\n\r", ch); return; } if (victim == ch) { send_to_char("You can't do that.\n\r", ch); return; } if (ch->fighting != NULL) { send_to_char("Finish combat before decapitating!\n\r", ch); return; } if (victim->position > POS_INCAP) { send_to_char( "Your victim needs to be mortally wounded for you to kill them.\n\r", ch); return; } if (!IS_SET(ch->plyr,PLAYER_SUBDUE)) { send_to_char("You must be Subduing to decapitate your victim.\n\r", ch); return; } act("$n decapitates $N brutally!! A fountain of {!GORE{0 flows out of $N ", ch, NULL, victim, TO_NOTVICT); act("$n decapitates you! You feel numb.", ch, NULL, victim, TO_VICT); act("You decapitate $N brutally!! You are covered in {!GORE{0!", ch, NULL, victim, TO_CHAR); REMOVE_BIT(ch->plyr,PLAYER_SUBDUE); victim->position = POS_DEAD; act("$n is DEAD!!", victim, 0, 0, TO_ROOM ); send_to_char( "You Gaze At You're Corpse From Distance As All Goes Dim!!\n\r\n\r", victim); /* * Payoff for killing things. */ if (victim->position == POS_DEAD) raw_kill(victim, ch); SET_BIT(ch->plyr,PLAYER_SUBDUE); sprintf(log_buf, "%s was DECAPITATED by %s at %s [room %d]", victim->name, ch->name, ch->in_room->name, ch->in_room->vnum); wiznet(log_buf, NULL, NULL, WIZ_DEATHS, 0, 0); tail_chain(); return; }