diff -i smaug14/src/skills.c  smaug18/src/skills.c
8c8
<  * Tricops and Fireblade                                      |             *
---
>  * Tricops, Fireblade, Edmond, Conran                         |             *
24a25
> 
26a28
> extern void remove_bexit_flag( EXIT_DATA * exit, int flag );
31c33
<       "stoponfail", "nofight", "nodispel", "randomtarget", "r2", "r3", "r4",
---
>       "stoponfail", "nofight", "nodispel", "randomtarget", "nomob", "r3", "r4",
41c43,48
< char *const spell_damage[] = { "none", "fire", "cold", "electricity", "energy", "acid", "poison", "drain" };
---
> char *const spell_damage[] =
> #ifdef NEWSPELLS
> { "none", "fire", "cold", "electricity", "energy", "acid", "poison", "drain", "holy", "unholy" };
> #else
> { "none", "fire", "cold", "electricity", "energy", "acid", "poison", "drain" };
> #endif
314d320
< 
320c326,333
< 
---
>                                               /*
>                                                * Too many illegal pk attempts with cuffs, swats etc lately. - Luc 
>                                                */
>                                               if ( xIS_SET( ch->act, PLR_NICE ) )
>                                               {
>                                                       send_to_char( "You feel too nice to do that.\n\r", ch );
>                                                       return TRUE;
>                                               }
456c469
<       OBJ_DATA *korps;
---
>       OBJ_INDEX_DATA *korps;
486c499
<       if ( corpse->item_type != ITEM_CORPSE_PC )
---
>       if ( !IS_IMMORTAL( ch ) && !IS_OBJ_STAT( corpse, ITEM_CLANCORPSE ) )
491c504,506
<       if ( obj->value[3] != 1 && obj->value[3] != 2 && obj->value[3] != 3 && obj->value[3] != 11 )
---
>       if ( ( obj->value[3] != 1
>                       && obj->value[3] != 2
>                       && obj->value[3] != 3 && obj->value[3] != 11 ) || IS_OBJ_STAT( corpse, ITEM_SKINNED ) )
495a511,527
>       if ( !IS_IMMORTAL( ch ) )
>       {
>               if ( IS_OBJ_STAT( corpse, ITEM_CLANCORPSE ) )
>               {
>                       if ( corpse->action_desc && is_name( ch->name, corpse->action_desc ) );
>                       else
>                       {
>                               send_to_char( "There is nothing you can do with this corpse.\n\r", ch );
>                               return;
>                       }
>               }
>               else
>               {
>                       send_to_char( "There is nothing you can do with this corpse.\n\r", ch );
>                       return;
>               }
>       }
501c533
<       korps = create_object( get_obj_index( OBJ_VNUM_CORPSE_PC ), 0 );
---
>       korps = get_obj_index( OBJ_VNUM_CORPSE_PC );
512,514c544,545
< /*  act( AT_MAGIC, "\nThe skinless corpse is dragged through the ground by a strange force...", ch, corpse, NULL, TO_CHAR);
<     act( AT_MAGIC, "\nThe skinless corpse is dragged through the ground by a strange force...", ch, corpse, NULL, TO_ROOM);
<     extract_obj( corpse ); */
---
>       separate_obj( corpse );
>       xSET_BIT( corpse->extra_flags, ITEM_SKINNED );
673d703
< 
741a772,775
> 
> 
> 
> 
762c796
<               if ( get_trust( ch ) > LEVEL_SUB_IMPLEM )
---
>               if ( get_trust( ch ) >= LEVEL_ASCENDANT )
786c820
<       if ( get_trust( ch ) > LEVEL_SUB_IMPLEM && !str_cmp( arg1, "save" ) && !str_cmp( argument, "table" ) )
---
>       if ( get_trust( ch ) >= LEVEL_ASCENDANT && !str_cmp( arg1, "save" ) && !str_cmp( argument, "table" ) )
805c839
<       if ( get_trust( ch ) > LEVEL_SUB_IMPLEM
---
>       if ( get_trust( ch ) >= LEVEL_ASCENDANT
1550a1585,1695
> void do_grapple( CHAR_DATA * ch, char *argument )
> {
> 
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
>       sh_int percent;
>       AFFECT_DATA af;
> 
>       if ( !IS_PKILL( ch ) && !IS_IMMORTAL( ch ) )
>               return;
> 
>       if ( IS_NPC( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
>       {
>               send_to_char( "You can't do that right now.\n\r", ch );
>               return;
>       }
> 
>       if ( ch->mount )
>       {
>               send_to_char( "You can't get close enough while mounted.\n\r", ch );
>               return;
>       }
> 
>       if ( ( victim = who_fighting( ch ) ) == NULL )
>       {
>               one_argument( argument, arg );
>               if ( arg[0] == '\0' )
>               {
>                       act( AT_ACTION, "You move in a circle looking for someone to grapple.", ch, NULL, NULL, TO_CHAR );
>                       act( AT_ACTION, "$n moves in a circle looking for someone to grapple.", ch, NULL, NULL, TO_ROOM );
>                       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 sneak up on yourself?\n\r", ch );
>                       return;
>               }
>       }
> 
>       if ( IS_NPC( victim ) )
>       {
>               send_to_char( "Stick to wrestling players.\n\r", ch );
>               return;
>       }
> 
>       if ( IS_AFFECTED( victim, AFF_GRAPPLE ) )
>               return;
> 
>       if ( is_safe( ch, victim, TRUE ) )
>       {
>               send_to_char( "A magical force prevents you from attacking.\n\r", ch );
>               return;
>       }
> 
>       if ( who_fighting( ch ) && who_fighting( ch ) != victim )
>       {
>               send_to_char( "You're fighting someone else!\n\r", ch );
>               return;
>       }
> 
>       if ( who_fighting( victim ) && who_fighting( victim ) != ch )
>       {
>               send_to_char( "You can't get close enough.\n\r", ch );
>               return;
>       }
> 
>       percent = LEARNED( ch, gsn_grapple );
>       WAIT_STATE( ch, skill_table[gsn_grapple]->beats );
> 
>       if ( !chance( ch, percent ) )
>       {
>               send_to_char( "You lost your balance.\n\r", ch );
>               act( AT_ACTION, "$n tries to grapple you but can't get close enough.", ch, NULL, victim, TO_VICT );
> /*
>       act( AT_ACTION, "$n tries to grapple with $N.", ch, NULL, victim, TO_NOTVICT );
> */
>               learn_from_failure( ch, gsn_grapple );
>               check_illegal_pk( ch, victim );
>               return;
>       }
> 
>       af.type = gsn_grapple;
>       af.duration = 2;
>       af.location = APPLY_DEX;
>       af.modifier = -2;
>       af.bitvector = meb( AFF_GRAPPLE );
>       affect_to_char( victim, &af );
>       af.type = gsn_grapple;
>       af.duration = 2;
>       af.location = APPLY_DEX;
>       af.modifier = -2;
>       af.bitvector = meb( AFF_GRAPPLE );
>       affect_to_char( ch, &af );
>       ch_printf( ch, "You manage to grab hold of %s!\n\r", capitalize( victim->name ) );
>       act( AT_ACTION, "$n grabs hold of you!", ch, NULL, victim, TO_VICT );
>       act( AT_ACTION, "$n begins grappling with $N!", ch, NULL, victim, TO_NOTVICT );
>       learn_from_success( ch, gsn_grapple );
>       check_illegal_pk( ch, victim );
>       if ( !ch->fighting && victim->in_room == ch->in_room )
>               set_fighting( ch, victim );
>       if ( !victim->fighting && ch->in_room == victim->in_room )
>               set_fighting( victim, ch );
>       return;
> }
1750c1895
<       if ( can_use_skill( ch, percent, gsn_detrap ) )
---
>       if ( !can_use_skill( ch, percent, gsn_detrap ) )
1877,1879c2022,2033
<                               REMOVE_BIT( pexit->exit_info, EX_CLOSED );
<                               send_to_char( "You dig open a passageway!\n\r", ch );
<                               act( AT_PLAIN, "$n digs open a passageway!", ch, NULL, NULL, TO_ROOM );
---
>                               if ( !IS_SET( pexit->exit_info, EX_ISDOOR ) )
>                               {
>                                       remove_bexit_flag( pexit, EX_CLOSED );
>                                       send_to_char( "You dig open a passageway!\n\r", ch );
>                                       act( AT_PLAIN, "$n digs open a passageway!", ch, NULL, NULL, TO_ROOM );
>                               }
>                               else
>                               {
>                                       REMOVE_BIT( pexit->exit_info, EX_DIG );
>                                       send_to_char( "You uncover a doorway!\n\r", ch );
>                                       act( AT_PLAIN, "$n uncovers a doorway!", ch, NULL, NULL, TO_ROOM );
>                               }
2095c2249
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
2120c2274
<       if ( xIS_SET( victim->act, ACT_PACIFIST ) )     /* Gorog */
---
>       if ( IS_NPC( victim ) && xIS_SET( victim->act, ACT_PACIFIST ) ) /* Gorog */
2143c2297,2298
<       if ( victim->position == POS_FIGHTING || !can_use_skill( ch, percent, gsn_steal ) )
---
>       if ( victim->position == POS_FIGHTING
>               || !can_use_skill( ch, percent, gsn_steal ) || ( IS_NPC( victim ) && xIS_SET( victim->act, ACT_NOSTEAL ) ) )
2253c2408
< void do_backstab( CHAR_DATA * ch, char *argument )
---
> void do_pounce( CHAR_DATA * ch, char *argument )
2276c2431
<               send_to_char( "Backstab whom?\n\r", ch );
---
>               send_to_char( "Pounce on whom?\n\r", ch );
2288c2443
<               send_to_char( "How can you sneak up on yourself?\n\r", ch );
---
>               send_to_char( "Pounce on yourself?\n\r", ch );
2295c2450,2531
<       if ( !IS_NPC( ch ) && !IS_NPC( victim ) && xIS_SET( ch->act, PLR_NICE ) )
---
>       if ( ( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL
>               || ( obj->value[3] != 1
>                       && obj->value[3] != 2
>                       && obj->value[3] != 3 && obj->value[3] != 5 && obj->value[3] != 10 && obj->value[3] != 11 ) )
>       {
>               send_to_char( "You are not wielding an appropriate weapon type to effectively pounce.\n\r", ch );
>               return;
>       }
> 
>       if ( victim->fighting )
>       {
>               send_to_char( "You cannot pounce on someone who is in combat.\n\r", ch );
>               return;
>       }
> 
>       if ( victim->hit < victim->max_hit && IS_AWAKE( victim ) )
>       {
>               act( AT_PLAIN, "$N is hurt and suspicious ... you can't sneak up.", ch, NULL, victim, TO_CHAR );
>               return;
>       }
> 
>       percent = number_percent(  ) - ( get_curr_lck( ch ) - 14 ) + ( get_curr_lck( victim ) - 13 );
> 
>       check_attacker( ch, victim );
> 
>       WAIT_STATE( ch, skill_table[gsn_pounce]->beats );
> 
>       if ( !IS_AWAKE( victim ) || can_use_skill( ch, percent, gsn_pounce ) )
>       {
>               learn_from_success( ch, gsn_pounce );
>               global_retcode = multi_hit( ch, victim, gsn_pounce );
>               check_illegal_pk( ch, victim );
>       }
>       else
>       {
>               learn_from_failure( ch, gsn_pounce );
>               global_retcode = damage( ch, victim, 0, gsn_pounce );
>               check_illegal_pk( ch, victim );
>       }
>       return;
> }
> 
> void do_backstab( CHAR_DATA * ch, char *argument )
> {
>       char arg[MAX_INPUT_LENGTH];
>       CHAR_DATA *victim;
>       OBJ_DATA *obj;
>       int percent;
> 
>       if ( IS_NPC( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
>       {
>               send_to_char( "You can't do that right now.\n\r", ch );
>               return;
>       }
> 
>       one_argument( argument, arg );
> 
>       if ( ch->mount )
>       {
>               send_to_char( "You can't get close enough while mounted.\n\r", ch );
>               return;
>       }
> 
>       if ( arg[0] == '\0' )
>       {
>               send_to_char( "Backstab 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 sneak up on yourself?\n\r", ch );
>               return;
>       }
> 
>       if ( xIS_SET( ch->act, PLR_NICE ) && !IS_NPC( victim ) )
2297c2533
<               send_to_char( "You are too nice to do that.\n\r", ch );
---
>               send_to_char( "You feel too nice to do that!\n\r", ch );
2300a2537,2540
>       if ( is_safe( ch, victim, TRUE ) )
>               return;
> 
> 
2448a2689,2896
> void do_meditate( CHAR_DATA * ch, char *argument )
> {
>       char *arg;
>       int percent;
>       int managain = ( ch->class == CLASS_DRUID ? 0 : 22 );
> 
>       switch ( ch->substate )
>       {
>               default:
>                       if ( IS_NPC( ch ) || IS_AFFECTED( ch, AFF_CHARM ) )
>                       {
>                               send_to_char( "You can't concentrate enough for that.\n\r", ch );
>                               return;
>                       }
>                       send_to_char_color( "&BYou enter into a meditative state, hoping to collect mana from the cosmos.\n\r",
>                               ch );
>                       add_timer( ch, TIMER_DO_FUN, UMAX( 2, ( skill_table[gsn_meditate]->beats / 8 ) ), do_meditate, 1 );
>                       ch->alloc_ptr = str_dup( argument );
>                       return;
> 
>               case 1:
>                       if ( !ch->alloc_ptr )
>                       {
>                               send_to_char_color( "&BYour meditation was interrupted.\n\r", ch );
>                               bug( "do_meditate: alloc_ptr NULL or not numeric", 0 );
>                               return;
>                       }
>                       arg = str_dup( ch->alloc_ptr );
>                       DISPOSE( ch->alloc_ptr );
>                       break;
> 
>               case SUB_TIMER_DO_ABORT:
>                       ch->substate = SUB_NONE;
>                       send_to_char_color( "&BYou stop meditating.\n\r", ch );
>                       DISPOSE( ch->alloc_ptr );
>                       return;
>       }
> 
>       switch ( ch->in_room->sector_type )
>       {
>               case SECT_INSIDE:
>               case SECT_DUNNO:
>               case SECT_UNDERGROUND:
>               default:
>                       break;
>               case SECT_FIELD:
>               case SECT_HILLS:
>               case SECT_FOREST:
>               case SECT_MOUNTAIN:
>                       if ( ch->class == CLASS_DRUID )
>                               managain = 24;
>                       else
>                               managain += 2;
>                       break;
>               case SECT_WATER_SWIM:
>               case SECT_WATER_NOSWIM:
>               case SECT_UNDERWATER:
>               case SECT_OCEANFLOOR:
>                       if ( ch->race == RACE_SEA_ELF )
>                               managain += 3;
>                       else if ( !IS_AFFECTED( ch, AFF_AQUA_BREATH ) )
>                               managain -= 2;
>                       break;
>               case SECT_AIR:
>                       if ( ch->race == RACE_PIXIE )
>                               managain += 3;
>                       else if ( !IS_AFFECTED( ch, AFF_FLYING ) )
>                               managain -= 2;
>                       break;
>               case SECT_DESERT:
>               case SECT_LAVA:
>               case SECT_SWAMP:
>                       managain -= 2;
>                       break;
>       }
> 
>       percent = UMAX( 1, number_percent(  ) + get_curr_wis( ch ) - 10 );
>       if ( can_use_skill( ch, percent, gsn_meditate ) )
>       {
>               learn_from_success( ch, gsn_meditate );
>               send_to_char_color( "&BYou meditate peacefully, collecting mana from the cosmos.\n\r", ch );
>               ch->mana = UMIN( ch->max_mana, ch->mana + managain );
>       }
>       else
>       {
>               send_to_char_color( "&BYou spend several minutes in deep concentration, but fail to collect any mana.\n\r",
>                       ch );
>               learn_from_failure( ch, gsn_meditate );
>       }
>       if ( ch->mana < ch->max_mana )
>       {
>               TIMER *timer;
> 
>               timer = get_timerptr( ch, TIMER_DO_FUN );
>               timer->count += UMAX( 2, ( skill_table[gsn_meditate]->beats / 8 ) );
>               ch->alloc_ptr = str_dup( arg );
>       }
>       else
>       {
>               send_to_char_color( "&BYou complete your meditations.\n\r", ch );
>               ch->substate = SUB_NONE;
>       }
>       return;
> }
> 
> void do_trance( CHAR_DATA * ch, char *argument )
> {
>       char *arg;
>       int percent;
>       int managain = ( ch->class == CLASS_DRUID ? 0 : 50 );
> 
>       switch ( ch->substate )
>       {
>               default:
>                       if ( IS_NPC( ch ) || IS_AFFECTED( ch, AFF_CHARM ) )
>                       {
>                               send_to_char( "You can't concentrate enough for that.\n\r", ch );
>                               return;
>                       }
>                       send_to_char_color( "&BYou enter a peaceful trance, collecting mana from the cosmos.\n\r", ch );
>                       add_timer( ch, TIMER_DO_FUN, UMAX( 2, ( skill_table[gsn_trance]->beats / 8 ) ), do_trance, 1 );
>                       ch->alloc_ptr = str_dup( argument );
>                       return;
> 
>               case 1:
>                       if ( !ch->alloc_ptr )
>                       {
>                               send_to_char_color( "&BYour trance was interrupted.\n\r", ch );
>                               bug( "do_trance: alloc_ptr NULL or not numeric", 0 );
>                               return;
>                       }
>                       arg = str_dup( ch->alloc_ptr );
>                       DISPOSE( ch->alloc_ptr );
>                       break;
> 
>               case SUB_TIMER_DO_ABORT:
>                       ch->substate = SUB_NONE;
>                       send_to_char_color( "&BYou come out of your trance.\n\r", ch );
>                       DISPOSE( ch->alloc_ptr );
>                       return;
>       }
> 
>       switch ( ch->in_room->sector_type )
>       {
>               case SECT_DUNNO:
>               case SECT_UNDERGROUND:
>               default:
>                       break;
>               case SECT_INSIDE:
>               case SECT_FIELD:
>               case SECT_HILLS:
>               case SECT_FOREST:
>               case SECT_MOUNTAIN:
>                       if ( ch->class == CLASS_DRUID )
>                               managain = 50;
>                       else
>                               managain += 2;
>                       break;
>               case SECT_WATER_SWIM:
>               case SECT_WATER_NOSWIM:
>               case SECT_UNDERWATER:
>               case SECT_OCEANFLOOR:
>                       if ( ch->race == RACE_SEA_ELF )
>                               managain += 3;
>                       else if ( !IS_AFFECTED( ch, AFF_AQUA_BREATH ) )
>                               managain -= 2;
>                       break;
>               case SECT_AIR:
>                       if ( ch->race == RACE_PIXIE )
>                               managain += 3;
>                       else if ( !IS_AFFECTED( ch, AFF_FLYING ) )
>                               managain -= 2;
>                       break;
>               case SECT_DESERT:
>               case SECT_LAVA:
>               case SECT_SWAMP:
>                       managain -= 2;
>                       break;
>       }
> 
> 
>       percent = UMAX( 1, number_percent(  ) + get_curr_wis( ch ) - 10 );
>       if ( can_use_skill( ch, percent, gsn_trance ) )
>       {
>               learn_from_success( ch, gsn_trance );
>               send_to_char_color( "&BIn your peaceful trance, you collect mana from the cosmos.\n\r", ch );
>               ch->mana = UMIN( ch->max_mana, ch->mana + managain );
>       }
>       else
>       {
>               send_to_char_color( "&BYou spend several minutes in a deep trance, but fail to collect any mana.\n\r", ch );
>               learn_from_failure( ch, gsn_trance );
>       }
>       if ( ch->mana < ch->max_mana )
>       {
>               TIMER *timer;
> 
>               timer = get_timerptr( ch, TIMER_DO_FUN );
>               timer->count += UMAX( 2, ( skill_table[gsn_trance]->beats / 8 ) );
>               ch->alloc_ptr = str_dup( arg );
>       }
>       else
>       {
>               send_to_char_color( "&BYou complete your trance.\n\r", ch );
>               ch->substate = SUB_NONE;
>       }
>       return;
> }
2591a3040
> 
2830a3280
>               damage( ch, ch, ch->level / 5, gsn_bloodlet );
2844a3295
>       sh_int temphit;
2891a3343,3348
>                       temphit = ch->hit;
>                       ch->hit += 1 + ch->level / 5;
>                       if ( ch->hit > ch->max_hit )
>                               ch->hit = ch->max_hit;
>                       if ( ch->hit < temphit )
>                               ch->hit = temphit;
2915a3373,3374
> 
>       char buf[MAX_STRING_LENGTH];
2951c3410,3413
<       if ( !IS_NPC( victim ) && CAN_PKILL( victim ) && !IS_OBJ_STAT( obj, ITEM_LOYAL ) )
---
>       if ( !IS_NPC( victim ) && CAN_PKILL( victim ) )
>               /*
>                * && !IS_OBJ_STAT( obj, ITEM_LOYAL ) ) -- why is this here? 
>                */
2954c3416,3418
<               obj->value[5] = victim->level;
---
>               sprintf( buf, "%s %s", ch->name, victim->name );
>               STRFREE( obj->action_desc );
>               obj->action_desc = STRALLOC( buf );
2956a3421
>       {
2957a3423,3431
>               STRFREE( obj->action_desc );    /* Rather do this kludgy stuff than try to test all circumstances */
>               obj->action_desc = STRALLOC( "" );
>       }
>       else if ( in_arena( victim ) )
>       {
>               obj_to_char( obj, victim );
>               STRFREE( obj->action_desc );
>               obj->action_desc = STRALLOC( "" );
>       }
2960d3433
< 
3052a3526,3580
> 
> /* Shargate, May 2002 */
> void do_cleave( CHAR_DATA * ch, char *argument )
> {
>       CHAR_DATA *victim;
>       OBJ_DATA *obj;
>       int dam = 0;
> 
>       if ( IS_NPC( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
>       {
>               send_to_char( "A clear mind is required to use that skill.\n\r", ch );
>               return;
>       }
>       if ( !IS_NPC( ch ) && ch->level < skill_table[gsn_cleave]->skill_level[ch->class] )
>       {
>               send_to_char( "You can't seem to summon the strength.\n\r", ch );
>               return;
>       }
>       if ( ( obj = get_eq_char( ch, WEAR_WIELD ) ) == NULL
>               || ( obj->value[3] != 1 && obj->value[3] != 3 && obj->value[3] != 5 ) )
>       {
>               send_to_char( "You need a slashing weapon.\n\r", ch );
>               return;
>       }
>       if ( ( victim = who_fighting( ch ) ) == NULL )
>       {
>               send_to_char( "You aren't fighting anyone.\n\r", ch );
>               return;
>       }
>       if ( can_use_skill( ch, number_percent(  ), gsn_cleave ) )
>       {
>               WAIT_STATE( ch, skill_table[gsn_cleave]->beats );
>               if ( number_percent(  ) <= 20 )
>               {
>                       set_char_color( AT_WHITE, ch );
>                       send_to_char( "You deal a devastating blow!\n\r", ch );
>                       dam = ( number_range( 11, 22 ) * get_curr_str( ch ) ) + 30;
>                       WAIT_STATE( victim, 2 );
>               }
>               else
>               {
>                       dam = ( number_range( 9, 18 ) * get_curr_str( ch ) ) + 30;
>               }
>               learn_from_success( ch, gsn_cleave );
>               global_retcode = damage( ch, victim, dam, gsn_cleave );
>       }
>       else
>       {
>               learn_from_failure( ch, gsn_cleave );
>               global_retcode = damage( ch, victim, 0, gsn_cleave );
>       }
>       return;
> }
> 
> 
3083c3611
<       if ( IS_PKILL( ch ) && ch->pcdata->condition[COND_BLOODTHIRST] > 22 )
---
>       if ( IS_PKILL( ch ) )
3089,3094c3617,3622
<               || IS_SET( victim->in_room->room_flags, ROOM_PRIVATE )
<               || IS_SET( victim->in_room->room_flags, ROOM_SOLITARY )
<               || IS_SET( victim->in_room->room_flags, ROOM_NO_ASTRAL )
<               || IS_SET( victim->in_room->room_flags, ROOM_DEATH )
<               || IS_SET( victim->in_room->room_flags, ROOM_PROTOTYPE )
<               || IS_SET( ch->in_room->room_flags, ROOM_NO_RECALL )
---
>               || xIS_SET( victim->in_room->room_flags, ROOM_PRIVATE )
>               || xIS_SET( victim->in_room->room_flags, ROOM_SOLITARY )
>               || xIS_SET( victim->in_room->room_flags, ROOM_NO_ASTRAL )
>               || xIS_SET( victim->in_room->room_flags, ROOM_DEATH )
>               || xIS_SET( victim->in_room->room_flags, ROOM_PROTOTYPE )
>               || xIS_SET( ch->in_room->room_flags, ROOM_NO_RECALL )
3107c3635,3637
<        * Subtract 22 extra bp for mist walk from 0500 to 2100 SB 
---
>        * Subtract 22 extra bp for mist walk from 0500 to 2100 SB
>        * if  ( time_info.hour < 21 && time_info.hour > 5 && !IS_NPC(ch) )
>        * gain_condition( ch, COND_BLOODTHIRST, - 22 );
3109,3110d3638
<       if ( time_info.hour < 21 && time_info.hour > 5 && !IS_NPC( ch ) )
<               gain_condition( ch, COND_BLOODTHIRST, -22 );
3428c3956
<       if ( !location )
---
>       if ( !location && !IS_NPC( ch ) )       /* Obscure crash bug */
3443c3971
<       if ( IS_SET( ch->in_room->room_flags, ROOM_NO_RECALL ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_NO_RECALL ) )
3615c4143,4144
< 
---
>       if ( ch->stance > STANCE_NONE )
>               do_stance( ch, "" );
3689a4219,4224
>       /*
>        * Put support in for bonus to parry.  If you have your stance 75% of the
>        * * way to GM, then you get the full parry benefit/penalty otherwise you only
>        * * get half of it.   SHADDAI
>        */
> 
3692,3694d4226
<               /*
<                * Tuan was here.  :) 
<                */
3695a4228,4231
>               if ( victim->pIndexData->stances[victim->stance] > ( STANCE_GRAND_MASTER * .75 ) )
>                       chances += stance_index[victim->stance].parry;
>               else
>                       chances += ( stance_index[victim->stance].parry / 2 );
3701a4238,4241
>               if ( victim->pcdata->stances[victim->stance] > ( STANCE_GRAND_MASTER * .75 ) )
>                       chances += stance_index[victim->stance].parry;
>               else
>                       chances += ( stance_index[victim->stance].parry / 2 );
3740a4281,4285
>       /*
>        * Support for stances have been added.  If you have your stance at least
>        * * half-way to Grand-Master you get the dodge benefit, other-wise you get
>        * * half of the benefit.     SHADDAI
>        */
3741a4287
>       {
3742a4289,4293
>               if ( victim->pIndexData->stances[victim->stance] > ( STANCE_GRAND_MASTER / 2 ) )
>                       chances += stance_index[victim->stance].dodge;
>               else
>                       chances += ( stance_index[victim->stance].dodge / 2 );
>       }
3743a4295
>       {
3744a4297,4301
>               if ( victim->pcdata->stances[ch->stance] > ( STANCE_GRAND_MASTER / 2 ) )
>                       chances += stance_index[victim->stance].dodge;
>               else
>                       chances += ( stance_index[victim->stance].dodge / 2 );
>       }
3770a4328
>       int mod_tumble_by;
3775a4334,4337
>       if ( IS_PKILL( victim ) )
>               mod_tumble_by = sysdata.tumble_pk;
>       else
>               mod_tumble_by = sysdata.tumble_mod;
3779c4341
<               chances = ( int ) ( LEARNED( victim, gsn_tumble ) / sysdata.tumble_mod + ( get_curr_dex( victim ) - 13 ) );
---
>               chances = ( int ) ( LEARNED( victim, gsn_tumble ) / mod_tumble_by + ( get_curr_dex( victim ) - 13 ) );
4043c4605
< 
---
>       WAIT_STATE( ch, skill_table[gsn_scribe]->beats );
4176c4738
< 
---
>       WAIT_STATE( ch, skill_table[gsn_brew]->beats );
4357c4919
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
4507c5069,5072
<               send_to_char( ch->in_room->name, ch );
---
>               if ( xIS_SET( ch->in_room->room_flags, ROOM_COLOR ) )
>                       send_to_char_color( ch->in_room->name, ch );
>               else
>                       send_to_char( ch->in_room->name, ch );
4689c5254
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
4843c5408
<               if ( IS_SET( ch->in_room->room_flags, ROOM_PRIVATE ) || IS_SET( ch->in_room->room_flags, ROOM_SOLITARY ) )
---
>               if ( xIS_SET( ch->in_room->room_flags, ROOM_PRIVATE ) || xIS_SET( ch->in_room->room_flags, ROOM_SOLITARY ) )
4901c5466
<               if ( IS_SET( vch->in_room->room_flags, ROOM_NOMISSILE ) )
---
>               if ( xIS_SET( vch->in_room->room_flags, ROOM_NOMISSILE ) )
4928c5493
<                       send_to_char( "Your too nice to do that!\n\r", ch );
---
>                       send_to_char( "You're too nice to do that!\n\r", ch );
5101,5104c5666,5667
<                               act( color, "Your $t falls harmlessly to the ground to the $T.",
<                                       ch, myobj( projectile ), dir_name[dir], TO_CHAR );
<                               act( color, "$p flies in from $T and falls harmlessly to the ground here.",
<                                       ch, projectile, dtxt, TO_ROOM );
---
>                               act( color, "Your $t falls harmlessly to the $T.", ch, myobj( projectile ), dir_name[dir], TO_CHAR );
>                               act( color, "$p flies in from $T and falls harmlessly to the ground.", ch, projectile, dtxt, TO_ROOM );
5123c5686
<                               act( color, "Your $t hits a wall and bounces harmlessly to the ground to the $T.",
---
>                               act( color, "Your $t hits a wall and bounces harmlessly to the $T.",
5125,5126c5688
<                               act( color, "$p strikes the $Tsern wall and falls harmlessly to the ground.",
<                                       ch, projectile, dir_name[dir], TO_ROOM );
---
>                               act( color, "$p falls harmlessly to the ground.", ch, projectile, dir_name[dir], TO_ROOM );
5136c5698
<                               act( color, "$t strikes the $Tsern wall and falls harmlessly to the ground.",
---
>                               act( color, "$t strikes the $Tern wall and falls harmlessly to the ground.",
5176c5738
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
5250c5812
<       if ( IS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
---
>       if ( xIS_SET( ch->in_room->room_flags, ROOM_SAFE ) )
5394c5956
<       if ( ( pMobIndex = get_mob_index( ( sh_int ) - ( corpse->value[2] ) ) ) == NULL )
---
>       if ( ( pMobIndex = get_mob_index( -( corpse->value[2] ) ) ) == NULL )
5649a6212,6214
>       if ( skill_table[gsn]->guild == 99 && !IS_NPC( ch ) && !IS_SET( ch->pcdata->flags, PCFLAG_DEADLY ) )
>               check = FALSE;
> 
5723,5724c6288,6289
<               act( AT_MAGIC, "$n overcooks a $p.", ch, food, NULL, TO_ROOM );
<               act( AT_MAGIC, "You overcook a $p.", ch, food, NULL, TO_CHAR );
---
>               act( AT_MAGIC, "$n overcooks $p.", ch, food, NULL, TO_ROOM );
>               act( AT_MAGIC, "You overcook $p.", ch, food, NULL, TO_CHAR );
5736,5737c6301,6302
<               act( AT_MAGIC, "$n roasts a $p.", ch, food, NULL, TO_ROOM );
<               act( AT_MAGIC, "You roast a $p.", ch, food, NULL, TO_CHAR );
---
>               act( AT_MAGIC, "$n roasts $p.", ch, food, NULL, TO_ROOM );
>               act( AT_MAGIC, "You roast $p.", ch, food, NULL, TO_CHAR );