/********************************************************************* * * * 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 "clan.h" #include "interp.h" void initialize_spell_types args((void)); int focus_level args ((long total)); long focus_left args ((long total)); int focus_dam args ((CHAR_DATA *ch)); int focus_str args ((CHAR_DATA *ch)); int focus_ac args ((CHAR_DATA *ch)); int focus_move args ((CHAR_DATA *ch)); int focus_hit args ((CHAR_DATA *ch)); int focus_dex args ((CHAR_DATA *ch)); int focus_hp args ((CHAR_DATA *ch)); int focus_con args ((CHAR_DATA *ch)); int focus_sorc args ((CHAR_DATA *ch)); int focus_sorcbonus args ((CHAR_DATA *ch)); int focus_mana args ((CHAR_DATA *ch)); int focus_int args ((CHAR_DATA *ch)); int focus_save args ((CHAR_DATA *ch)); int focus_wis args ((CHAR_DATA *ch)); DECLARE_DO_FUN( do_decapitate ); void raw_kill args ((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_HIGHLANDER && ch->class != CLASS_MONK) { send_to_char("You pray for power....the gods laugh at your display.\n\r",ch); return; } if(ch->class == CLASS_HIGHLANDER) { 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); } else { 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|>{x {gCombat Power{x : {r%-2d %-9ld %-9ld Dam: %4d Str: %4d {b<|{x\n\r", 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|>{x {gCombat Defense{x : {r%-2d %-9ld %-9ld AC: %5d Mv: %5d {b<|{x\n\r", 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)*focus_level(ch->pcdata->focus[COMBAT_DEFENSE]) ); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gCombat Agility{x : {r%-2d %-9ld %-9ld Hit: %4d Dex: %4d {b<|{x\n\r", 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|>{x {gCombat Toughness{x : {r%-2d %-9ld %-9ld Hp: %5d Con: %4d {b<|{x\n\r", focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS]), ch->pcdata->focus[COMBAT_TOUGHNESS], focus_left(ch->pcdata->focus[COMBAT_TOUGHNESS]), focus_hp(ch)*focus_level(ch->pcdata->focus[COMBAT_TOUGHNESS]), focus_con(ch) ); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gMagic Power{x : {r%-2d %-9ld %-9ld Sor: %4d Max: +%3d%%{b<|{x\n\r", 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|>{x {gMagic Ability{x : {r%-2d %-9ld %-9ld Ma: %5d Int: %4d {b<|{x\n\r", focus_level(ch->pcdata->focus[MAGIC_ABILITY]), ch->pcdata->focus[MAGIC_ABILITY], focus_left(ch->pcdata->focus[MAGIC_ABILITY]), focus_mana(ch)*focus_level(ch->pcdata->focus[MAGIC_ABILITY]), focus_int(ch) ); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gMagic Defense{x : {r%-2d %-9ld %-9ld Svs: %4d Wis: %4d {b<|{x\n\r", focus_level(ch->pcdata->focus[MAGIC_DEFENSE]), ch->pcdata->focus[MAGIC_DEFENSE], focus_left(ch->pcdata->focus[MAGIC_DEFENSE]), focus_save(ch), focus_wis(ch) ); send_to_char(buf,ch); send_to_char("{b-----------===================={x{c********{x{b=====================-----------{x\n\r",ch); if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_POWER) send_to_char("You current focus is Combat Power.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_DEFENSE) send_to_char("You current focus is Combat Defense.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_AGILITY) send_to_char("You current focus is Combat Agility.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == COMBAT_TOUGHNESS) send_to_char("You current focus is Combat Toughness.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_POWER) send_to_char("You current focus is Magic Power.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_ABILITY) send_to_char("You current focus is Magic Ability.\n\r",ch); else if (ch->pcdata->focus[CURRENT_FOCUS] == MAGIC_DEFENSE) send_to_char("You current focus is Magic Defense.\n\r",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/200 {b<|{x\n\r",ch->magic[MAGIC_WHITE]); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gRed{x : {w%-3d{x/200 {b<|{x\n\r",ch->magic[MAGIC_RED]); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gBlue{x : {w%-3d{x/200 {b<|{x\n\r",ch->magic[MAGIC_BLUE]); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gGreen{x : {w%-3d{x/200 {b<|{x\n\r",ch->magic[MAGIC_GREEN]); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gBlack{x : {w%-3d{x/200 {b<|{x\n\r",ch->magic[MAGIC_BLACK]); send_to_char(buf,ch); sprintf(buf,"{b|>{x {gOrange{x : {w%-3d{x/200 {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 bruttaly!! 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 bruttaly!! 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; }