/*************************************************************************** * Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, * * Michael Seifert, Hans Henrik St{rfeldt, Tom Madsen, and Katja Nyboe. * * * * Merc Diku Mud improvments copyright (C) 1992, 1993 by Michael * * Chastain, Michael Quan, and Mitchell Tse. * * * * In order to use any part of this Merc Diku Mud, you must comply with * * both the original Diku license in 'license.doc' as well the Merc * * license in 'license.txt'. In particular, you may not remove either of * * these copyright notices. * * * * Much time and thought has gone into this software and you are * * benefitting. We hope that you share your changes too. What goes * * around, comes around. * ***************************************************************************/ /*************************************************************************** * ROM 2.4 is copyright 1993-1995 Russ Taylor * * ROM has been brought to you by the ROM consortium * * Russ Taylor (rtaylor@pacinfo.com) * * Gabrielle Taylor (gtaylor@pacinfo.com) * * Brian Moore (rom@rom.efn.org) * * By using this code, you have agreed to follow the terms of the * * ROM license, in the file Rom24/doc/rom.license * ***************************************************************************/ /*************************************************************************** * ROT 1.4 is copyright 1996-1997 by Russ Walsh * * By using this code, you have agreed to follow the terms of the * * ROT license, in the file doc/rot.license * ***************************************************************************/ #if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <string.h> #include <time.h> #include <stdlib.h> #include "merc.h" #include "music.h" #include "interp.h" #include "clan.h" /* command procedures needed */ DECLARE_DO_FUN(do_quit ); DECLARE_DO_FUN(do_announce ); DECLARE_DO_FUN(do_look ); /* * Local functions. */ int hit_gain args( ( CHAR_DATA *ch ) ); int mana_gain args( ( CHAR_DATA *ch ) ); int move_gain args( ( CHAR_DATA *ch ) ); void mobile_update args( ( void ) ); void weather_update args( ( void ) ); void char_update args( ( void ) ); void arena_update args( ( void ) ); void obj_update args( ( void ) ); void aggr_update args( ( void ) ); void quest_update args( ( void ) ); void tele_update args( ( void ) ); void check_reboot args( ( void ) ); int focus_save args ((CHAR_DATA *ch)); int focus_level args ((long total)); void focus_up args ((CHAR_DATA *ch)); void room_affect_update args(( void )); void free_auction args( ( AUCTION_DATA *auction ) ); void auction_update args( ( void ) ); void auction_channel args( ( CHAR_DATA *ch, OBJ_DATA *obj, char *msg ) ); /* used for saving */ int save_number = 0; void gamegratz( CHAR_DATA *ch ) { /* char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; for ( d = descriptor_list; d; d = d->next ) { if ( d->connected == CON_PLAYING && !IS_SET(d->character->comm,COMM_NOGRATS) && !IS_SET(d->character->comm, COMM_QUIET)) send_to_char( buf, d->character ); } */ ch->hit = ch->max_hit; ch->mana = ch->max_mana; ch->move = ch->max_move; update_pos( ch ); return; } /* * Advancement stuff. */ void advance_level( CHAR_DATA *ch ) { char buf[MAX_STRING_LENGTH]; int loc, i, temp; int add_hp; int add_mana; int add_move; int add_prac; OBJ_DATA *obj; char log_buf[MSL]; ch->pcdata->last_level = ( ch->played + (int) (current_time - ch->logon) ) / 3600; sprintf( buf, "the %s", title_table [ch->class] [ch->level] [ch->sex == SEX_FEMALE ? 1 : 0] ); if ( ch->pcdata->usr_ttl == FALSE ) set_title( ch, "" ); add_hp = (con_app[get_curr_stat(ch,STAT_CON)].hitp + number_range( class_table[ch->class].hp_min, class_table[ch->class].hp_max )); add_mana = number_range(10 + (3 * ch->pcdata->tier), (5 * get_curr_stat(ch,STAT_INT) + 2 * get_curr_stat(ch,STAT_WIS))/2); if (!class_table[ch->class].fMana) add_mana /= 5; add_move = number_range( 1, (get_curr_stat(ch,STAT_CON) + get_curr_stat(ch,STAT_DEX))/8 ); add_prac = wis_app[get_curr_stat(ch,STAT_WIS)].practice; add_hp = add_hp * 9/10; add_hp = add_hp * 7/4; add_hp = add_hp * 5/4; add_mana = add_mana * 9/10; add_mana = add_mana * 7/4; add_mana = add_mana * 1/2; add_move = add_move * 9/10; add_move = add_move * 3/2; add_hp = UMAX( 4, add_hp ); add_mana = UMAX( 4, add_mana ); add_move = UMAX( 12, add_move ); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 1; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf( buf, "Your gain is: %d/%d hp, %d/%d m, %d/%d mv %d/%d prac.\n\r", add_hp, ch->max_hit, add_mana, ch->max_mana, add_move, ch->max_move, add_prac, ch->practice ); send_to_char( buf, ch ); temp = (dice(1,50) + 51); if ((ch->level == 19) && (!is_pkill(ch)) && (ch->pcdata->tier != 3)) send_to_char("{Y{zREMINDER: By level 20 you must choose to be Pkill or Non-Pkill, because after this you cannot choose.\n\r{x",ch); if ( !IS_SET(ch->act, PLR_NOEVOLVE) && race_lookup(pc_race_table[ch->race].rare_race[0]) != 0 && (temp == ch->level || ch->level == LEVEL_HERO) ) { sprintf(log_buf, "%s evolved..", ch->name); log_string( log_buf ); temp = (dice(1,7)-1); sprintf(log_buf, "Temp = %d", temp); log_string( log_buf ); while ( race_lookup(pc_race_table[ch->race].rare_race[temp]) == 0 ) { temp = (dice(1,7)-1); sprintf(log_buf, "Temp = %d", temp); log_string( log_buf ); } ch->race = race_lookup(pc_race_table[ch->race].rare_race[temp] ); sprintf(log_buf, "Charrace = %s", pc_race_table[ch->race].name); log_string( log_buf ); send_to_char("{YYou feel your body begin to writhe and change.\n\rYou are now...\n\r", ch); sprintf(buf,"{WA %s!{0\n\r",race_table[ch->race].name); send_to_char(buf, ch); if (ch->level != LEVEL_HERO) { ch->exp = ch->level*exp_per_level(ch,ch->pcdata->points); } } for (loc = 0; loc < MAX_WEAR; loc++) { obj = get_eq_char(ch,loc); if (obj == NULL) continue; if (obj->clan) { for (i = 0; i < 4; i++) { ch->armor[i] += apply_ac( ch->level-1, obj, loc, i ); ch->armor[i] -= apply_ac( ch->level, obj, loc, i ); } } } return; } void advance_level_quiet( CHAR_DATA *ch ) { char buf[MAX_STRING_LENGTH]; int loc, i, temp; int add_hp; int add_mana; int add_move; int add_prac; OBJ_DATA *obj; char log_buf[MSL]; ch->pcdata->last_level = ( ch->played + (int) (current_time - ch->logon) ) / 3600; sprintf( buf, "the %s", title_table [ch->class] [ch->level] [ch->sex == SEX_FEMALE ? 1 : 0] ); if ( ch->pcdata->usr_ttl == FALSE ) set_title( ch, "" ); add_hp = (con_app[get_curr_stat(ch,STAT_CON)].hitp + number_range( class_table[ch->class].hp_min, class_table[ch->class].hp_max )); add_mana = number_range(4,(4*get_curr_stat(ch,STAT_INT) + get_curr_stat(ch,STAT_WIS))/2); if (!class_table[ch->class].fMana) add_mana /= 3; add_move = number_range( 1, (get_curr_stat(ch,STAT_CON) + get_curr_stat(ch,STAT_DEX))/8 ); add_prac = wis_app[get_curr_stat(ch,STAT_WIS)].practice; add_hp = add_hp * 9/10; add_hp = add_hp * 7/4; add_hp = add_hp * 5/4; add_mana = add_mana * 9/10; add_mana = add_mana * 7/4; add_mana = add_mana * 1/2; add_move = add_move * 9/10; add_move = add_move * 3/2; add_hp = UMAX( 4, add_hp ); add_mana = UMAX( 4, add_mana ); add_move = UMAX( 12, add_move ); ch->max_hit += add_hp; ch->max_mana += add_mana; ch->max_move += add_move; ch->practice += add_prac; ch->train += 1; ch->pcdata->perm_hit += add_hp; ch->pcdata->perm_mana += add_mana; ch->pcdata->perm_move += add_move; sprintf( buf, "Your gain is: %d/%d hp, %d/%d m, %d/%d mv %d/%d prac.\n\r", add_hp, ch->max_hit, add_mana, ch->max_mana, add_move, ch->max_move, add_prac, ch->practice ); send_to_char( buf, ch ); temp = (dice(1,50) + 51); if ( !IS_SET(ch->act, PLR_NOEVOLVE) && race_lookup(pc_race_table[ch->race].rare_race[0]) != 0 && (temp == ch->level || ch->level == LEVEL_HERO) ) { sprintf(log_buf, "%s evolved..", ch->name); log_string( log_buf ); temp = (dice(1,7)-1); sprintf(log_buf, "Temp = %d", temp); log_string( log_buf ); while ( race_lookup(pc_race_table[ch->race].rare_race[temp]) == 0 ) { temp = (dice(1,7)-1); sprintf(log_buf, "Temp = %d", temp); log_string( log_buf ); } ch->race = race_lookup(pc_race_table[ch->race].rare_race[temp] ); sprintf(log_buf, "Charrace = %s", pc_race_table[ch->race].name); log_string( log_buf ); send_to_char("{YYou feel your body begin to writhe and change.\n\rYou are now...\n\r", ch); sprintf(buf,"{WA %s!{0\n\r",race_table[ch->race].name); send_to_char(buf, ch); if (ch->level != LEVEL_HERO) { ch->exp = ch->level*exp_per_level(ch,ch->pcdata->points); } } for (loc = 0; loc < MAX_WEAR; loc++) { obj = get_eq_char(ch,loc); if (obj == NULL) continue; if (obj->clan) { for (i = 0; i < 4; i++) { ch->armor[i] += apply_ac( ch->level-1, obj, loc, i ); ch->armor[i] -= apply_ac( ch->level, obj, loc, i ); } } } return; } void gain_exp( CHAR_DATA *ch, int gain ) { char buf[MAX_STRING_LENGTH]; int orig=0; if ( IS_NPC(ch) ) return; if ( ch->level >= LEVEL_HERO ) { if (gain < 0) return; if (ch->pcdata->focus[CURRENT_FOCUS] > MAGIC_DEFENSE || ch->pcdata->focus[CURRENT_FOCUS] < COMBAT_POWER ) return; orig = focus_level(ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]]); ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]] += gain; if (orig < focus_level(ch->pcdata->focus[ch->pcdata->focus[CURRENT_FOCUS]])) focus_up(ch); return; } ch->exp = UMAX( exp_per_level(ch,ch->pcdata->points), ch->exp + gain ); while ( ch->level < LEVEL_HERO && ch->exp >= exp_per_level(ch,ch->pcdata->points) * (ch->level+1) ) { send_to_char( "You raise a level!!\n\r", ch ); ch->level += 1; /* sprintf(buf,"$N has attained level %d!",ch->level); wiznet(buf,ch,NULL,WIZ_LEVELS,0,0); */ sprintf(buf,"%s has made it to level %d!!",ch->name,ch->level); do_announce(ch,buf); advance_level( ch ); gamegratz( ch ); save_char_obj(ch); } return; } /* * Regeneration stuff. */ int hit_gain( CHAR_DATA *ch ) { int gain; int number; if (ch->in_room == NULL) return 0; if ( IS_NPC(ch) ) { gain = 5 + ch->level; if (IS_AFFECTED(ch,AFF_REGENERATION)) gain *= 2; switch(ch->position) { default : gain /= 2; break; case POS_SLEEPING: gain = 3 * gain/2; break; case POS_RESTING: break; case POS_FIGHTING: gain /= 3; break; } } else { gain = UMAX(3,2*get_curr_stat(ch,STAT_CON) - 6 + ch->level/2); gain += class_table[ch->class].hp_max - 10; if(IS_AFFECTED(ch,AFF_REGENERATION)) gain*=2; number = number_percent(); if (number < get_skill(ch,gsn_fast_healing)) { gain += number * gain / 100; if (ch->hit < ch->max_hit) check_improve(ch,gsn_fast_healing,TRUE,8); } if (number < get_skill(ch,gsn_acute_vision)) check_improve(ch,gsn_acute_vision,TRUE,8); switch ( ch->position ) { default: gain /= 4; break; case POS_SLEEPING: break; case POS_RESTING: gain /= 2; break; case POS_FIGHTING: gain /= 6; break; } if ( ch->pcdata->condition[COND_HUNGER] == 0 ) gain /= 2; if ( ch->pcdata->condition[COND_THIRST] == 0 ) gain /= 2; } gain = gain * ch->in_room->heal_rate / 90; if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE) gain = gain * ch->on->value[3] / 90; if ( IS_AFFECTED(ch, AFF_POISON) ) gain /= 4; if (IS_AFFECTED(ch, AFF_PLAGUE)) gain /= 8; if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW)) gain /= 2; return UMIN(gain, ch->max_hit - ch->hit); } int mana_gain( CHAR_DATA *ch ) { int gain; int number; if (ch->in_room == NULL) return 0; if ( IS_NPC(ch) ) { gain = 5 + ch->level; if (IS_AFFECTED(ch,AFF_REGENERATION)) gain *= 2; switch (ch->position) { default: gain /= 2; break; case POS_SLEEPING: gain = 3 * gain/2; break; case POS_RESTING: break; case POS_FIGHTING: gain /= 3; break; } } else { gain = (get_curr_stat(ch,STAT_WIS) + get_curr_stat(ch,STAT_INT) + ch->level); if (IS_AFFECTED(ch,AFF_REGENERATION)) gain*=2; number = number_percent(); /*if (number < get_skill(ch,gsn_meditation)) { gain += number * gain / 100; if (ch->mana < ch->max_mana) check_improve(ch,gsn_meditation,TRUE,8); }*/ if (!class_table[ch->class].fMana) gain /= 2; switch ( ch->position ) { default: gain /= 4; break; case POS_SLEEPING: break; case POS_RESTING: gain /= 2; break; case POS_FIGHTING: gain /= 6; break; } if ( ch->pcdata->condition[COND_HUNGER] == 0 ) gain /= 2; if ( ch->pcdata->condition[COND_THIRST] == 0 ) gain /= 2; } gain = gain * ch->in_room->mana_rate / 90; if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE) gain = gain * ch->on->value[4] / 90; if ( IS_AFFECTED( ch, AFF_POISON ) ) gain /= 4; if (IS_AFFECTED(ch, AFF_PLAGUE)) gain /= 8; if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW)) gain /=2 ; if(is_affected(ch,gsn_quickening)) gain *= 2; return UMIN(gain, ch->max_mana - ch->mana); } int move_gain( CHAR_DATA *ch ) { int gain; if (ch->in_room == NULL) return 0; if ( IS_NPC(ch) ) { gain = ch->level; } else { gain = UMAX( 15, ch->level ); if (IS_AFFECTED(ch,AFF_REGENERATION)) gain *= 2; switch ( ch->position ) { case POS_SLEEPING: gain += get_curr_stat(ch,STAT_DEX); break; case POS_RESTING: gain += get_curr_stat(ch,STAT_DEX) / 2; break; } if ( ch->pcdata->condition[COND_HUNGER] == 0 ) gain /= 2; if ( ch->pcdata->condition[COND_THIRST] == 0 ) gain /= 2; } gain = gain * ch->in_room->heal_rate/90; if (ch->on != NULL && ch->on->item_type == ITEM_FURNITURE) gain = gain * ch->on->value[3] / 90; if ( IS_AFFECTED(ch, AFF_POISON) ) gain /= 4; if (IS_AFFECTED(ch, AFF_PLAGUE)) gain /= 8; if (IS_AFFECTED(ch,AFF_HASTE) || IS_AFFECTED(ch,AFF_SLOW)) gain /=2 ; if(is_affected(ch,gsn_quickening)) gain *= 2; return UMIN(gain, ch->max_move - ch->move); } void gain_condition( CHAR_DATA *ch, int iCond, int value ) { int condition; if ( value == 0 || IS_NPC(ch) || ch->level >= LEVEL_IMMORTAL) return; condition = ch->pcdata->condition[iCond]; if (condition == -1) return; ch->pcdata->condition[iCond] = URANGE( 0, condition + value, 48 ); if ( ch->pcdata->condition[iCond] == 0 ) { switch ( iCond ) { case COND_HUNGER: send_to_char( "You are hungry.\n\r", ch ); break; case COND_THIRST: send_to_char( "You are thirsty.\n\r", ch ); break; case COND_DRUNK: if ( condition != 0 ) send_to_char( "You are sober.\n\r", ch ); break; } } return; } /* * Mob autonomous action. * This function takes 25% to 35% of ALL Merc cpu time. * -- Furey */ void mobile_update( void ) { CHAR_DATA *ch; CHAR_DATA *ch_next; EXIT_DATA *pexit; int door,i; /* Examine all mobs. */ for ( ch = char_list; ch != NULL; ch = ch_next ) { ch_next = ch->next; if ( !IS_NPC(ch) || ch->in_room == NULL) continue; // No more negatives for(i=0; i < 5; i++) if(ch->mod_stat[i] < 1) ch->mod_stat[i] = 1; if (ch->in_room->area->empty && !IS_SET(ch->act,ACT_UPDATE_ALWAYS)) continue; /* Examine call for special procedure */ if ( ch->spec_fun != 0 ) { if ( (*ch->spec_fun) ( ch ) ) continue; } if (ch->pIndexData->pShop != NULL) /* give him some platinum */ if ((ch->platinum * 100 + ch->gold) < ch->pIndexData->wealth) { ch->platinum += ch->pIndexData->wealth * number_range(1,20)/500000; ch->gold += ch->pIndexData->wealth * number_range(1,20)/5000; } /* * Check triggers only if mobile still in default position */ if ( ch->position == ch->pIndexData->default_pos ) { /* Delay */ if ( HAS_TRIGGER( ch, TRIG_DELAY) && ch->mprog_delay >= 0 ) { if ( --ch->mprog_delay <= 0 ) { mp_percent_trigger( ch, NULL, NULL, NULL, TRIG_DELAY ); continue; } } if ( HAS_TRIGGER( ch, TRIG_RANDOM) ) { if( mp_percent_trigger( ch, NULL, NULL, NULL, TRIG_RANDOM ) ) continue; } } /* That's all for sleeping / busy monster, and empty zones */ if ( ch->position != POS_STANDING ) continue; /* Scavenge */ if ( IS_SET(ch->act, ACT_SCAVENGER) && ch->in_room->contents != NULL && number_bits( 6 ) == 0 ) { OBJ_DATA *obj; OBJ_DATA *obj_best; int max; max = 1; obj_best = 0; for ( obj = ch->in_room->contents; obj; obj = obj->next_content ) { if ( CAN_WEAR(obj, ITEM_TAKE) && can_loot(ch, obj) && ch->carry_number + get_obj_number(obj) <= can_carry_n(ch) && get_carry_weight(ch) + get_obj_weight(obj) <= can_carry_w(ch) && obj->cost > max && obj->cost > 0) { obj_best = obj; max = obj->cost; } } if ( obj_best ) get_obj(ch,obj_best,NULL); /* { obj_from_room( obj_best ); obj_to_char( obj_best, ch ); act( "$n gets $p.", ch, obj_best, NULL, TO_ROOM ); } */ } /* Wander */ if ( !IS_SET(ch->act, ACT_SENTINEL) && number_bits(3) == 0 && ( door = number_bits( 5 ) ) <= 5 && ( pexit = ch->in_room->exit[door] ) != NULL && pexit->u1.to_room != NULL && !IS_SET(pexit->exit_info, EX_CLOSED) && !IS_SET(pexit->u1.to_room->room_flags, ROOM_NO_MOB) && ( !IS_SET(ch->act, ACT_STAY_AREA) || pexit->u1.to_room->area == ch->in_room->area ) && ( !IS_SET(ch->act, ACT_OUTDOORS) || !IS_SET(pexit->u1.to_room->room_flags,ROOM_INDOORS)) && ( !IS_SET(ch->act, ACT_INDOORS) || IS_SET(pexit->u1.to_room->room_flags,ROOM_INDOORS))) { move_char( ch, door, FALSE, FALSE ); } } return; } /* * Update the weather. */ void weather_update( void ) { char buf[MAX_STRING_LENGTH]; DESCRIPTOR_DATA *d; int diff; buf[0] = '\0'; switch ( ++time_info.hour ) { case 6: weather_info.sunlight = SUN_LIGHT; switch(number_range(1,4)) { case 1: strcat( buf, "The day has begun.\n\r" ); break; case 2: strcat( buf, "Slowly the night sky gives way to light.\n\r" ); break; case 3: strcat( buf, "Dawn breaks along the horizon.\n\r" ); break; case 4: buf[0] = '\0'; } break; case 7: weather_info.sunlight = SUN_RISE; switch(number_range(1,4)) { case 1: strcat( buf, "The sun rises in the east.\n\r" ); break; case 2: strcat( buf, "Light shines on the lands as the sun rises.\n\r"); break; case 3: strcat( buf, "The rising sun pushes away the remaining darkness.\n\r"); break; case 4: buf[0] = '\0'; } break; case 12: weather_info.sunlight = SUN_RISE; strcat( buf, "The sun reaches its peak in the heavens.\n\r" ); break; case 18: weather_info.sunlight = SUN_SET; switch(number_range(1,4)) { case 1: strcat( buf, "The sun slowly disappears in the west.\n\r" ); break; case 2: strcat( buf, "The sun sets behind the mountains to the west.\n\r" ); break; case 3: strcat( buf, "The sky grows darker as dusk settles in.\n\r" ); break; case 4: buf[0] = '\0'; } break; case 19: weather_info.sunlight = SUN_DARK; switch(number_range(1,3)) { case 1: strcat( buf, "The night has begun.\n\r" ); break; case 2: strcat( buf, "Darkness shrouds the lands as the night begins.\n\r" ); break; case 3: buf[0] = '\0'; } break; case 24: time_info.hour = 0; time_info.day++; break; } if ( time_info.day >= 35 ) { time_info.day = 0; time_info.month++; } if ( time_info.month >= 12 ) { time_info.month = 0; time_info.year++; } /* * Weather change. */ if ( time_info.month >= 9 && time_info.month <= 16 ) diff = weather_info.mmhg > 985 ? -2 : 2; else diff = weather_info.mmhg > 1015 ? -2 : 2; weather_info.change += diff * dice(1, 4) + dice(2, 6) - dice(2, 6); weather_info.change = UMAX(weather_info.change, -12); weather_info.change = UMIN(weather_info.change, 12); weather_info.mmhg += weather_info.change; weather_info.mmhg = UMAX(weather_info.mmhg, 960); weather_info.mmhg = UMIN(weather_info.mmhg, 1040); switch ( weather_info.sky ) { default: bug( "Weather_update: bad sky %d.", weather_info.sky ); weather_info.sky = SKY_CLOUDLESS; break; case SKY_CLOUDLESS: if ( weather_info.mmhg < 990 || ( weather_info.mmhg < 1010 && number_bits( 2 ) == 0 ) ) { switch(number_range(1,3)) { case 1: strcat( buf, "The sky is getting cloudy.\n\r" ); break; case 2: strcat( buf, "Large clouds cover up the sky.\n\r" ); break; case 3: strcat( buf, "Clouds start to blow in from the North.\n\r" ); break; } weather_info.sky = SKY_CLOUDY; } break; case SKY_CLOUDY: if ( weather_info.mmhg < 970 || ( weather_info.mmhg < 990 && number_bits( 2 ) == 0 ) ) { switch(number_range(1,3)) { case 1: strcat( buf, "It starts to rain.\n\r" ); break; case 2: strcat( buf, "A light drizzle begins to fall.\n\r" ); break; case 3: strcat( buf, "Heavy rain starts pouring down.\n\r" ); break; } weather_info.sky = SKY_RAINING; } if ( weather_info.mmhg > 1030 && number_bits( 2 ) == 0 ) { strcat( buf, "The clouds disappear.\n\r" ); weather_info.sky = SKY_CLOUDLESS; } break; case SKY_RAINING: if ( weather_info.mmhg < 970 && number_bits( 2 ) == 0 ) { switch(number_range(1,3)) { case 1: strcat( buf, "Lightning flashes in the sky.\n\r" ); break; case 2: strcat( buf, "The sound of thunder assails your ears.\n\r" ); break; case 3: strcat( buf, "You hear the distant roll of thunder.\n\r" ); break; } weather_info.sky = SKY_LIGHTNING; } if ( weather_info.mmhg > 1030 || ( weather_info.mmhg > 1010 && number_bits( 2 ) == 0 ) ) { strcat( buf, "The rain has stopped.\n\r" ); weather_info.sky = SKY_CLOUDY; } break; case SKY_LIGHTNING: if ( weather_info.mmhg > 1010 || ( weather_info.mmhg > 990 && number_bits( 2 ) == 0 ) ) { strcat( buf, "The lightning has stopped.\n\r" ); weather_info.sky = SKY_RAINING; break; } break; } if ( buf[0] != '\0' ) { for ( d = descriptor_list; d != NULL; d = d->next ) { if ( d->connected == CON_PLAYING && IS_OUTSIDE(d->character) && IS_AWAKE(d->character) && !IS_SET(d->character->comm,COMM_QUIET)) send_to_char( buf, d->character ); } } return; } /* * Update all chars, including mobs. */ void char_update( void ) { CHAR_DATA *ch; CHAR_DATA *ch_next; CHAR_DATA *ch_quit; OBJ_DATA *munchie; int dream; AFFECT_DATA af; dream = number_range(1,460); ch_quit = NULL; /* update save counter */ save_number++; if (save_number > 29) save_number = 0; for ( ch = char_list; ch != NULL; ch = ch_next ) { ch_next = ch->next; if ( ch->timer > 30 ) ch_quit = ch; /* Ghosts........Spooky isn't it? -Skyntil */ if ( ch->ghost_timer > -1 ) ch->ghost_timer -= 1; if(ch->ghost_timer == 0 && IS_SET(ch->plyr,PLAYER_GHOST)) { REMOVE_BIT(ch->plyr,PLAYER_GHOST); act("You feel more real.",ch,NULL,NULL,TO_CHAR); act("$n fades into reality.",ch,NULL,NULL,TO_ROOM); } else if(ch->ghost_timer == 0 && !IS_SET(ch->plyr,PLAYER_GHOST)) { act("You feel ready to kill again.",ch,NULL,NULL,TO_CHAR); ch->ghost = str_dup(""); } if ( IS_NPC(ch) && ch->hastimer ) { if ( ++ch->timer > 5 ) { act("$n decays into dust.",ch,NULL,NULL,TO_ROOM); extract_char(ch,TRUE); } } if ((ch->class == CLASS_FADE) || (ch->class == CLASS_BANSHEE)) { SET_BIT(ch->affected_by, AFF_PASS_DOOR); SET_BIT(ch->affected_by, AFF_FLYING); } if ( ch->position >= POS_STUNNED ) { /* check to see if we need to go home */ if (IS_NPC(ch) && ch->zone != NULL && ch->zone != ch->in_room->area && ch->desc == NULL && ch->fighting == NULL && !IS_AFFECTED(ch,AFF_CHARM) && number_percent() < 5) { act("$n wanders on home.",ch,NULL,NULL,TO_ROOM); extract_char(ch,TRUE); continue; } if ( ch->hit < ch->max_hit ) ch->hit += hit_gain(ch); else ch->hit = ch->max_hit; if ( ch->mana < ch->max_mana ) ch->mana += mana_gain(ch); else ch->mana = ch->max_mana; if ( ch->move < ch->max_move ) ch->move += move_gain(ch); else ch->move = ch->max_move; } if ( ch->position == POS_STUNNED ) update_pos( ch ); //Toughness if(ch->position == POS_SLEEPING && is_warrior_class(ch->class)) ch->toughness = UMAX(1, ch->toughness - 8); if(ch->position == POS_RESTING && is_warrior_class(ch->class)) ch->toughness = UMAX(1, ch->toughness - 4); if(ch->position == POS_STANDING && is_warrior_class(ch->class)) ch->toughness = UMAX(1, ch->toughness - 1); if(ch->position == POS_MORTAL && is_warrior_class(ch->class)) ch->toughness = UMAX(1, ch->toughness - 5); /***** START OF DREAMS ******************/ if (!IS_NPC(ch) && ch->position == POS_SLEEPING) { if (dream <=186) { send_to_char("zzzzzzzzzzzzzzzzzzzzzzzzz.\n\r",ch); } else if (dream <= 188) { send_to_char("Frantically looking around, your arms hit the bars of a cold iron cage..\n\r",ch); send_to_char("You panic and rattle the bars hoping to escape.. finding the door\n\r",ch); send_to_char("unlocked you quickly leap from the cage.. when suddenly a seemingly\n\r",ch); send_to_char("giant roar echoes in your ears.. Looking above you see a common yet\n\r",ch); send_to_char("titanic tabby cat licking its chops waiting for a delicious meal. Before\n\r",ch); send_to_char("you can react it pounces upon you...\n\r",ch); } else if (dream <= 189) { send_to_char("Sitting before a vast table, you and a hoard of guests begin to eat..\n\r",ch); send_to_char("Course after fine course flow across the table... and toast after toast\n\r",ch); send_to_char("of fine wine flows through out the hall! Minstrels begin to sing songs\n\r",ch); send_to_char("of valiant bravery and lost love.. as people get up from their hosts \n\r",ch); send_to_char("table to dance...\n\r",ch); } else if (dream <= 190) { send_to_char("Moving your hands through the air you summon powerful magics!\n\r",ch); send_to_char("Creating and destoying worlds, setting ablaze all of time!\n\r",ch); send_to_char("Cackling with your god-like power you crush whole races between\n\r",ch); send_to_char("your fingertips.. and create new ones with a single thought\n\r",ch); send_to_char("to worship your awe inspiring power..\n\r",ch); } else if (dream <= 191) { send_to_char("At the head of a vast and powerful army you lead your troops toward\n\r",ch); send_to_char("a secluded village.. Unsuspecting and innocent the towns people see your\n\r",ch); send_to_char("approach and begin to flee in terror! Giving the order your archers\n\r",ch); send_to_char("and pikemen rush toward them! Sending flaming arrow into the sky, fires\n\r",ch); send_to_char("begin to flame around the defenseless village.. slaughter and blood fill\n\r",ch); send_to_char("the scene.. as innocent lives scream for mercy..\n\r",ch); } else if (dream <= 192) { send_to_char("Soaring through the skies you fly, diving and careening through the\n\r",ch); send_to_char("gusty wind.. Looking below you, the ground slowly dissapears, leaving\n\r",ch); send_to_char("you flying through empty and endless sky blue sky.. As the sun sets\n\r",ch); send_to_char("sending golden rays streaming acoss the air you glance at back and find\n\r",ch); send_to_char("you have no wings! Gasping in terror you begin to falllllll.....\n\r",ch); } else if (dream <= 193) { send_to_char("Feeling the cooling surf wash over your feet and the wet sand creep\n\r",ch); send_to_char("its way between your toes, you smile briefly. Looking across the\n\r",ch); send_to_char("horizon you cannot tell where crystal blue ocean ends and sky begins.\n\r",ch); send_to_char("Above you the rustling of palm trees are your only compannion on this\n\r",ch); send_to_char("lone beach...\n\r",ch); } else if (dream <= 194) { send_to_char("A pair of gleaming red eyes, shine from the pitch black darkness,\n\r",ch); send_to_char("hearing the creatures breath you freeze. Closer and closer it\n\r",ch); send_to_char("creeps, scraping its claws against the dungeons stone walls.\n\r",ch); send_to_char("Panicing you begin to run through the darkness blindly. Out of\n\r",ch); send_to_char("breath you stop and listen.. all is silent in the pitch blackness...\n\r",ch); send_to_char("Suddenly you feel somethings icy claws bore into your flesh!\n\r",ch); } else if (dream <= 202) { send_to_char("Strange colors swirl around you, blinding you.\n\r",ch); act( "$n mumbles in $s sleep.", ch, NULL, NULL, TO_ROOM); } else if ( dream <= 204) { send_to_char("Horses thunder past you, bearing naked riders to \n\r",ch); send_to_char("who knows where. The sound of horns echo in the distance.\n\r",ch); act( "$n tosses restlessly in $s sleep.", ch, NULL, NULL, TO_ROOM); } else if (dream <= 206) { send_to_char("You awake in a soft, warm bed. As you bask in warm glow of firelight you\n\r",ch); send_to_char("wonder how long it's been since last you've had such comfort. The \n\r",ch); send_to_char("firelight fades and turns from red-orange to blue to white to a \n\r",ch); send_to_char("spectrum. The colors surround you. You hear soft music, filling your \n\r",ch); send_to_char("ears and your soul. You are swept away on the bittersweet and melancholy \n\r",ch); send_to_char("chords, your spirit lifted and your heart twisted.. You hear faint \n\r",ch); send_to_char("laughter, a woman's voice, a child whimpering softly.. You begin to cry \n\r",ch); send_to_char("suddenly and are not sure why.\n\r",ch); act( "$n sobs quietly in $s sleep for a moment then is still once again.", ch, NULL, NULL, TO_ROOM); } else if (dream <= 208) { send_to_char("You stand high on a mountain top, surrounded by azure skies and whitest \n\r",ch); send_to_char("clouds There is a blinding flash of light, and the clouds part as does \n\r",ch); send_to_char("the very sky as if it were a fabric that could be ripped. From this \n\r",ch); send_to_char("opening fly hundreds of winged beings, majestic and terrible in \n\r",ch); send_to_char("their beauty. They seem to emanated light and heat.. their bodies \n\r",ch); send_to_char("are so bright that it hurts your eyes to look at them. You avert your \n\r",ch); send_to_char("eyes, and when you dare to look up the beings are gone, the sky as it \n\r",ch); send_to_char("had been..\n\r",ch); send_to_char("You notice a single golden feather at your feet and pick it up \n\r",ch); send_to_char("thoughtfully.\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("golden feather"); free_string(munchie->short_descr); munchie->short_descr=str_dup("a golden feather"); free_string(munchie->description); munchie->description=str_dup("A beautiful golden feather is here"); munchie->wear_flags=17; munchie->value[0]=0; munchie->value[1]=0; munchie->value[2]=0; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=0; munchie->item_type = ITEM_JEWELRY; obj_to_room( munchie, ch->in_room ); act( "$n smiles slightly in $s sleep.", ch, NULL, NULL, TO_ROOM); } else if (dream <= 210) { send_to_char("You push through a crowd of people, repulsed by the smell of bodies, of \n\r",ch); send_to_char("heat and of greed. A thousand booths stretch out along each side of the \n\r",ch); send_to_char("street each selling a differnt ware or service. A particular booth \n\r",ch); send_to_char("catches your attention, the one in which you catch a glimpse of white \n\r",ch); send_to_char("and gold.. As you get closer you see a caged unicorn, pure white with a \n\r",ch); send_to_char("gold horn. Next to the grubby man selling tickets to touch its horn it looks all the\n\r",ch); send_to_char("more majestic. It turns sad, pleading doelike eyes on you, and you can\n\r",ch); send_to_char("hear its thoughts, its anguish, its utter lonliness and longing to be \n\r",ch); send_to_char("free..\n\r",ch); } else if (dream <= 212) { send_to_char("You move but hardly notice the feeling of the floor....\n\r",ch); send_to_char("You grab a 20 by 30 foot canvas and vainly attempt to set it up....\n\r",ch); send_to_char("Three or four passers by stop to inspect your work....\n\r",ch); send_to_char("Everything you needed is now available but you feel as if soon it \n\r",ch); send_to_char("will be gone... The walls close in and a glowing presense alerts you.\n\r",ch); send_to_char("You dig at the walls with your fingertips, trying to get through\n\r",ch); send_to_char("The cinder block comes loose! You are free! You squeeze through the hole\n\r",ch); send_to_char("And in the next room...it is exactly the same....\n\r",ch); } else if (dream <= 214) { send_to_char("You are high above the earth...plummeting towards the ground.\n\r",ch); send_to_char("You realize its a dream and think, OK I'll wake up in a minute.\n\r",ch); send_to_char("As the ground draws near you begin to scream in terror of death.\n\r",ch); send_to_char("You hit the ground with a sickening crunch and lay there until you \n\r",ch); send_to_char("bleed to death.\n\r",ch); } else if (dream <= 216) { send_to_char("the shadows around you swirl and gire into the form of a dark\n\r",ch); send_to_char("steed...it whispers something in a strange tongue and melts\n\r",ch); send_to_char("into the foreground.....\n\r",ch); } else if (dream <= 218) { send_to_char("Lights streak past you leaving long trails.\n\r",ch); send_to_char("Red, blue, yellow, white trails.\n\r",ch); send_to_char("A coldness unlike any you have ever felt before creeps through your \n\r",ch); send_to_char("bones. The only sound you hear is the slow thud of your heart.\n\r",ch); } else if (dream <= 220) { send_to_char("You find yourself standing at your old bus stop *sigh*\n\r",ch); send_to_char("a dreary morning only 1/3 into the school year\n\r",ch); send_to_char("All of a sudden you are soaring high above the street!\n\r",ch); send_to_char("You swoop down and topple over a couple trash cans!\n\r",ch); send_to_char("All your fellow students turn green with envy\n\r",ch); send_to_char("You begin to doubt your abilities! LOOK OUT!!\n\r",ch); send_to_char("You are falling into a deep, black hole.....\n\r",ch); } else if (dream <= 222) { send_to_char("Ahhhhh you are in perhaps THE most comfortable bed ever.\n\r",ch); send_to_char("The blankets arranged just so and very warm...\n\r",ch); send_to_char("Your dog cuddled closely to you.\n\r",ch); send_to_char("and your arm hangs over the edge of the bed...Ahhhhhh.\n\r",ch); send_to_char("then a hand comes from under the bed and GRABS your hand!\n\r",ch); send_to_char("You wake up in a cold sweat!\n\r",ch); send_to_char("Something STILL has your hand!\n\r",ch); send_to_char("You wake up in a cold sweat...whew your hand is ok.\n\r",ch); } else if (dream <= 224) { send_to_char("A warm incredible feeling of happiness washes over you.\n\r",ch); send_to_char("It feels like you are floating on a bed of air and a \n\r",ch); send_to_char("thousand butterflies are fluttering over you gently cooling\n\r",ch); send_to_char("you with the beating of their wings. A far off harp\n\r",ch); send_to_char("peacefully fills the air with soul-stirring music. As you\n\r",ch); send_to_char("open your eyes, you realize the sweet aroma filling the air comes\n\r",ch); send_to_char("from the hundreds of flowers on and around you with still\n\r",ch); send_to_char("more floating down from the sky above. You close your eyes\n\r",ch); send_to_char("hoping to retain these feelings forever.\n\r",ch); act( "The air is filled with sweetness as hundreds of flower petals float", ch, NULL, NULL, TO_ROOM); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("flower petals"); free_string(munchie->short_descr); munchie->short_descr=str_dup("hundreds of flower petals"); free_string(munchie->description); munchie->description=str_dup("hundreds of flower petals lie here"); munchie->wear_flags=0; munchie->value[0]=0; munchie->value[1]=0; munchie->value[2]=0; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=1; munchie->item_type = ITEM_TRASH; munchie->timer=number_range(1,6); obj_to_room( munchie, ch->in_room ); act( "down from the sky to cover $n as $e lies sleeping.", ch, NULL, NULL, TO_ROOM); } else if (dream <= 226) { send_to_char("Right, left, onward.\n\r",ch); send_to_char("The hall seems to stretch endlessly.\n\r",ch); send_to_char("Is this the door? No.\n\r",ch); send_to_char("Is this the door? No.\n\r",ch); send_to_char("Onward...there seems to be no way out.\n\r",ch); send_to_char("Ahead you see a figure crumbled on the ground. As you turn him over\n\r",ch); send_to_char("he crumbles into dust. All that remains is a large black opal\n\r",ch); send_to_char("strung on a gold chain.\n\r",ch); } else if (dream <= 228) { send_to_char("You hear a slow, pulsing beat, rushing liquid.. A bird cries out in the \n\r",ch); send_to_char("distance. You crane your neck to see what is around you, but \n\r",ch); send_to_char("everything remains hazy.\n\r",ch); send_to_char("You try to stand up, to walk towards the sounds, but you cannot move\n\r",ch); send_to_char("You legs do not respond, your arms are pinned to your chest..\n\r",ch); send_to_char("You struggle and try to cry out, but no sound comes..\n\r",ch); } else if (dream <= 230) { send_to_char("A pair of ginger-haired twins, pale, thin and beautifully androgynous\n\r",ch); send_to_char("stand before you, smiling cryptically. They look at you and say, in \n\r",ch); send_to_char("unison, How nice of you to visit! We've been waiting for you...\n\r",ch); send_to_char("The taller one looks at his brother lovingly and says Oh but I have \n\r",ch); send_to_char("been hungry... isn't this just lovely? \n\r",ch); send_to_char("He opens his mouth in a wide grin and you realize.. he has fangs.\n\r",ch); } else if (dream <= 232) { send_to_char("Breathing heavily, you duck behind a stone wall.\n\r",ch); send_to_char("You can hear them behind you, dozens of them.\n\r",ch); send_to_char("It had been a long and glorius battle. One by one\n\r",ch); send_to_char("you comrades had fallen. Now there was only you left and\n\r",ch); send_to_char("your quiver is empty. Breathing deeply, you calm yourself.\n\r",ch); send_to_char("Sword left in the chest of a battle dragon, arrows expended,\n\r",ch); send_to_char("all you have left is the small charm that an old woman gave you.\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("small charm"); free_string(munchie->short_descr); munchie->short_descr=str_dup("a small charm"); free_string(munchie->description); munchie->description=str_dup("You see a small charm."); munchie->wear_flags=5; munchie->value[0]=0; munchie->value[1]=0; munchie->value[2]=0; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=1; munchie->item_type = ITEM_JEWELRY; obj_to_room( munchie, ch->in_room ); } else if (dream <= 234) { send_to_char("Tick Tick Tick Tick ...\n\r",ch); send_to_char("The sound of the clock echos though the house.\n\r",ch); send_to_char("Somewhere between sleep and wake you drift ...\n\r",ch); send_to_char("Something big is going to happen, you can sense it.\n\r",ch); send_to_char("TICK TICK TICK TICK ...\n\r",ch); send_to_char("Somehow the clock seems louder ... more ominous ...\n\r",ch); send_to_char("You struggle to awake, your heart quickening.\n\r",ch); send_to_char("TICK TICK TICK TICK ...\n\r",ch); } else if (dream <= 236) { send_to_char("A flash of spinning silver\n\r",ch); send_to_char("trapped in a whirling sphere of dimpled gleaming light\n\r",ch); send_to_char("Friction a fiction, the body slides without feeling, presses\n\r",ch); send_to_char("without resistance\n\r",ch); send_to_char("splayed like a starfish scrabbling for purchase\n\r",ch); send_to_char("Inevitably funneled into a chrome trumpet of doomsounding thunder\n\r",ch); send_to_char("spun into a slick wet thread of bare bony wire\n\r",ch); } else if (dream <= 238) { send_to_char("The horse and it's rider comes trampling out of the fog called\n\r",ch); send_to_char("sleep. As you peer at it's indistinguishable (sic) form, it's name\n\r",ch); send_to_char("escapes you but for a second. The lance is pointed straight \n\r",ch); send_to_char("for your forehead. It's thunderous hooves jolt your memory. \n\r",ch); send_to_char("HARK! You remember the name if the horse and rider,it's \n\r",ch); send_to_char("Knight-Mare. \n\r",ch); } else if (dream <= 240) { send_to_char("Someone wakes you up.\n\r",ch); send_to_char("{BSomeone's backstab {Mdoes U{GN{YS{CP{YE{WA{RK{CA{YB{GL{ME things to {B you!{x {y[11578]{x\n\r",ch); send_to_char ("{cThat really did {RHURT!{x\n\r", ch); send_to_char ("{cYou have been {RKILLED!!{x\n\r\n\r", ch); send_to_char("\n\r",ch); send_to_char("\n\r",ch); send_to_char("\n\r",ch); send_to_char("Oh, You're dreaming again. *sigh*\n\r",ch); } else if (dream <= 242) { send_to_char("The abomination points at you with a crocked and gnawed finger, \n\r",ch); send_to_char("whispering your name over and over. Chanting your death wish \n\r",ch); send_to_char("like a mantra. It glides towards where you stand frozen. Your \n\r",ch); send_to_char("mind begins to scream for your legs to run... to move... to do \n\r",ch); send_to_char("anything but buckle and fall. You stare in horror, as it's maw \n\r",ch); send_to_char("open up and... \n\r",ch); send_to_char("\n\r",ch); send_to_char("That's when you realize with disgust your bedroll has somehow been soaked. \n\r",ch); } else if (dream <= 244) { send_to_char("The cat grabs the dog by the nose and bonks him on the head. \n\r",ch); send_to_char("The dog, growling, pokes the mouse in it's eyes. The mouse, \n\r",ch); send_to_char("with one stroke, slaps both the cat and the dog. The cat gets \n\r",ch); send_to_char("mad, swings his fist and kicks the mouse in the stomach. The \n\r",ch); send_to_char("dog, seeing the mouse being abused, bonks the cat\n\r",ch); send_to_char("\n\r",ch); send_to_char("Oh gawd, the 3 Stoogies meet Tom and Jerry.\n\r",ch); } else if (dream <= 246) { send_to_char("You feel a tickling on your arm, you try to reach over and \n\r",ch); send_to_char("scratch it but you find yourself frozen. You open your eyes to \n\r",ch); send_to_char("see a bright light shining at you. Shadows move in the \n\r",ch); send_to_char("background and you hear a throbbing sound\n\r",ch); send_to_char("A sting from your arm feels like a needle and you realize that \n\r",ch); send_to_char("your very marrow is being drawn from your bones.\n\r",ch); send_to_char("As you are just about to pass out you hear alien voices buzzing \n\r",ch); send_to_char("quietly...\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("buzzing alien"); free_string(munchie->short_descr); munchie->short_descr=str_dup("a buzzing alien"); free_string(munchie->description); munchie->description=str_dup("A buzzing alien is buzzing here."); munchie->wear_flags=0; munchie->value[0]=0; munchie->value[1]=0; munchie->value[2]=0; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=2; munchie->item_type = ITEM_TRASH; munchie->timer=1; obj_to_room( munchie, ch->in_room ); } else if (dream <= 248) { send_to_char("You're sitting at the table, eating your steak and potatoes, \n\r",ch); send_to_char("when the meat you're just about to devour begins to cough and \n\r",ch); send_to_char("spasm. The potatoes start to roll around on your plate, and \n\r",ch); send_to_char("some even jump up and down, making a huge mess of your \n\r",ch); send_to_char("vegetables, and a loud ruckus to boot. Hey buddy, says the \n\r",ch); send_to_char("slab of flesh you called dinner. Why don't you pick on someone \n\r",ch); send_to_char("your OWN size? \n\r",ch); } else if (dream <= 250) { send_to_char("You walk through a valley of daisys.. \n\r",ch); send_to_char("over a ways you see people from different races spread out sleeping \n\r",ch); send_to_char("over the field.. \n\r",ch); send_to_char("In the distance you hear the faint sound of music.\n\r",ch); send_to_char("your eyes get heavy....\n\r",ch); send_to_char("you collapse to the ground and sleep....\n\r",ch); } else if (dream <= 252) { send_to_char("Darkness surrounds you.. cold and silent.. feeling around you, you \n\r",ch); send_to_char("catch ahold of a candle, and magically it lights itself.. burning \n\r",ch); send_to_char("slowly sending melted wax down your hand.. Looking around you find \n\r",ch); send_to_char("you are surrounded..by wooden walls?.. you begin to recognize \n\r",ch); send_to_char("the shape.. of a coffin.. you panic and begin to claw at the lid, \n\r",ch); send_to_char("trying in vain to push it open.. but it is impossible.. as you \n\r",ch); send_to_char("struggle alittle dirt tumbles in from a crack in the coffin \n\r",ch); send_to_char("wall.. and as the candle slowly is extinguished you realize you are \n\r",ch); send_to_char("doomed...\n\r",ch); } else if (dream <= 254) { send_to_char("Standing in front of a large man-sized mirror.. you gaze into its \n\r",ch); send_to_char("depths looking into your reflection.. when suddenly you think you \n\r",ch); send_to_char("see the reflection wink at you.. slightly startled you realize \n\r",ch); send_to_char("it was just a trick of your mind.. curious you place your hand \n\r",ch); send_to_char("against the mirror.. and the reflection mimics your actions \n\r",ch); send_to_char("exactally.. drawing your hand back away from the mirror your \n\r",ch); send_to_char("reflection gains a demonic appearance.. reaching through the \n\r",ch); send_to_char("mirror it grabs your hand and pulls you in..\n\r",ch); } else if (dream <= 256) { send_to_char("Plucking a apple from a tree along the trail, you lift it to your \n\r",ch); send_to_char("mouth and begin to take a bite.. a faint whisper is heard..\n\r",ch); send_to_char("pleeeease... pleeeease slightly puzzled you ignore the faint voice\n\r",ch); send_to_char("and commence to take a satisfying bite from the ripe apple, and \n\r",ch); send_to_char("in responce a scream of mortal pain is heard..looking down at the \n\r",ch); send_to_char("apple in your palm.. a twisted and painfilled face glares at you \n\r",ch); send_to_char("from the plush ripe apple..\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("glaring apple"); free_string(munchie->short_descr); munchie->short_descr=str_dup("a glaring apple"); free_string(munchie->description); munchie->description=str_dup("A glaring apple is glaring at you."); munchie->wear_flags=1; munchie->value[0]=3; munchie->value[1]=4; munchie->value[2]=0; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=0; munchie->item_type = ITEM_FOOD; munchie->timer=number_range(1, 3); obj_to_room( munchie, ch->in_room ); } else if (dream <= 258) { send_to_char("Sitting upon a plush throne of gold and frilly pillows you feel a \n\r",ch); send_to_char("breeze.. looking to your right and left you see a pair of beautiful \n\r",ch); send_to_char("servants waving peacock feather fans through the air. Stepping \n\r",ch); send_to_char("towards you a equally handsome servant approaches with a plate of\n\r",ch); send_to_char("ripe grapes...\n\r",ch); } else if (dream <= 260) { send_to_char("Being led through a crowd of hissing and booing peasants.. two guards\n\r",ch); send_to_char("push you along towards a strange platform in the center of the square.\n\r",ch); send_to_char("shackles bear their heavy burden upon your chained arms and legs..\n\r",ch); send_to_char("Rotten fruit and eggs sail through the air at you.. steping upon\n\r",ch); send_to_char("the wooden platform, you are forced to kneel and a strange wooden bar\n\r",ch); send_to_char("secures your head from moving... looking upwards you see a pair of straight\n\r",ch); send_to_char("wooden poles and at the top a gleaming harbringer of death.. a sharp blade..\n\r",ch); send_to_char("hearing a voice accost you from behind the words are barely heard as the\n\r",ch); send_to_char("crowds yells.. you have been accused of murder.. and found guilty by\n\r",ch); send_to_char("the court.. executioner let the blade fall.. and the last thing you hear\n\r",ch); send_to_char("is the grinding sound of metal against wood.. pain.. and then oblivion\n\r",ch); } else if (dream <= 262) { send_to_char("Walking through the twisting corrodors of the endless dungeon.. you trip\n\r",ch); send_to_char("over a rock.. trying to get up you find your arms and legs stuck.. from\n\r",ch); send_to_char("the last faint flickers of your torch you see a gigantic web or sticky\n\r",ch); send_to_char("fibers... struggling against the tight pull of the web.. you hear a\n\r",ch); send_to_char("strange clicking sound come from above.. and as your torch goes out\n\r",ch); send_to_char("a enormous black spider floats down upon you..\n\r",ch); } else if (dream <= 264) { send_to_char("Soft breezes blow against your skin, the salty air bitter on your tongue.\n\r",ch); send_to_char("You see them... so soft... so unreal...\n\r",ch); send_to_char("You walk towards them, and hold out your hand for them to take.\n\r",ch); send_to_char("As your hand clasps theirs, they swirl and slowly fade into nothing.\n\r",ch); send_to_char("You sink to the damp, white sand... they are gone. And you are alone.\n\r",ch); } else if (dream <= 266) { send_to_char("You feal someone breathing down the back of your neck.. you open your eyes to\n\r",ch); send_to_char("see a huge cat-like creature growling behind you..it smiles and you see a\n\r",ch); send_to_char("row of hideuos sharp teeth..before a scream can pass your lips it sinks \n\r",ch); send_to_char("it's fangs into your neck. Everything goes black.\n\r",ch); } else if (dream <= 268) { send_to_char("Creak.\n\r",ch); send_to_char("Someone ... or something is approaching.\n\r",ch); send_to_char("You struggle to awaken as you hear the whisper of a sword being drawn.\n\r",ch); send_to_char("Red eyes gleem evilly at you as you frantically roll out of bed reaching \n\r",ch); send_to_char("in vain for your weapon.\n\r",ch); send_to_char("Swish.\n\r",ch); send_to_char("Darkness.\n\r",ch); } else if (dream <= 270) { send_to_char("You look around at a land youve never seen before wondering why it seems so \n\r",ch); send_to_char("familar.. you hear the slithy tothes giriing near by <eh?>\n\r",ch); send_to_char("you feel something moving around your feet and look down to see the mome raths \n\r",ch); send_to_char("swarming around you....\n\r",ch); send_to_char("a flock of jubjub birds flap towards the sky from some near by bushes \n\r",ch); send_to_char("startled by something ..\n\r",ch); send_to_char("You hear a sound coming nearer something about it makes you shiver...\n\r",ch); send_to_char("You look up into a pair of glowing eyes and realize it must be ....it cant be \n\r",ch); send_to_char("..oh no it is the creature your mother told you to beware of...\n\r",ch); send_to_char("the Jabberwock stands there its jaws snapping\n\r",ch); send_to_char("you turn to run but can go no where...\n\r",ch); send_to_char("you scream.....it fades into silence\n\r",ch); } else if (dream <= 272) { send_to_char("You stand alone on a moonlit sandy beach , a sudden bzeeze blows agaainst you \n\r",ch); send_to_char("face , you shiver for some unknown reason.\n\r",ch); send_to_char("An eerie fog swirls around you.\n\r",ch); send_to_char("You hear a cackle from somewhere behind you but before you can turn an arm \n\r",ch); send_to_char("grabs you by the neck. \n\r",ch); send_to_char("A dagger presses against your throat, pierceing the skin.\n\r",ch); send_to_char("A low voice growls in your ear 'fear the ghost pirate Acheron'\n\r",ch); send_to_char("The fog swirls again and is gone. You are alone and trembleing..fearing the day\n\r",ch); send_to_char("that he might return...\n\r",ch); act( "$n fidgets and mumbles strange words in $s sleep.", ch, NULL, NULL, TO_ROOM); } else if (dream <= 274) { send_to_char("You are walking down the street on a bright and sunny morning.\n\r",ch); send_to_char("People are laughing and smiling happily as you walk by and you smile in\n\r",ch); send_to_char("return. It sure is nice to see people happy for once.\n\r",ch); send_to_char("You continue your walk down the street and stop to look in a store window\n\r",ch); send_to_char("at beautiful dishes. Looking more closely in the window you gasp in horror.\n\r",ch); send_to_char("YOU FORGOT TO PUT YOUR CLOTHES ON THIS MORNING!!!!\n\r",ch); send_to_char("You turn deep red from embrassment and hide behind a bush.\n\r",ch); } else if (dream <= 276) { send_to_char("You are surrounded by golden flames.\n\r",ch); send_to_char("You frantically look for a way of escape, but to no avail.\n\r",ch); send_to_char("You smell the armoma of burning flesh.\n\r",ch); send_to_char("YOUR FLESH!\n\r",ch); send_to_char("The flames around you seem to be getting hotter.\n\r",ch); send_to_char("You scream but no one hears your voice or is it that no one cares.\n\r",ch); send_to_char("You run aimlessly but the flames seem to follow your every move.\n\r",ch); send_to_char("THERE IS NO ESCAPE!\n\r",ch); send_to_char("\n\r",ch); send_to_char("As the flames are about to engulf you...\n\r",ch); send_to_char("You realize....its only a dream....its only a dream...\n\r",ch); send_to_char("Or is it........\n\r",ch); } else if (dream <= 278) { send_to_char("Ahhhh... Asleep at last, it's been a long time since you've had a good\n\r",ch); send_to_char("nights sleep, and you figure that tonight should be different.. Or should\n\r",ch); send_to_char("it! All of a sudden you feel a burst of energy run thru your body, and\n\r",ch); send_to_char("you break out in a cold sweat! YOu feel as if someone or some THING is\n\r",ch); send_to_char("pulling your body, down, down, down, your pulled until your at the center\n\r",ch); send_to_char("of the earth. Then a deep voice speaks, I have been waiting your arrival\n\r",ch); send_to_char("it booms. Looking around franticlly you see a dark figure with horns dressed\n\r",ch); send_to_char("in a blood-stained cloak. 'You have been very bad...' it continues 'for this\n\r",ch); send_to_char("I will punish you!' With that you feel a draining of strength and you fall\n\r",ch); send_to_char("to the ground. Trying to get up you realise that you can't move! Then the\n\r",ch); send_to_char("voice booms 'And now, you DIE!' ZZZZZZZZZZaaaaaaaaaaaaappppppp! a bolt \n\r",ch); send_to_char("lightning hits your body...\n\r",ch); send_to_char("\n\r",ch); send_to_char("\n\r",ch); send_to_char(" Everything falls silent.\n\r",ch); ch->hit = 100; af.where = TO_AFFECTS; af.location = APPLY_REGEN; af.modifier = 300; af.duration = 5; af.type = gsn_herb; af.bitvector = AFF_REGENERATION; affect_to_char(ch,&af); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("sparks"); free_string(munchie->short_descr); munchie->short_descr=str_dup("some sparks"); free_string(munchie->description); munchie->description=str_dup("You see some sparks."); munchie->wear_flags=16385; munchie->value[0]=0; munchie->value[1]=0; munchie->value[2]=100; munchie->value[3]=0; munchie->value[4]=0; munchie->extra_flags=1; munchie->item_type = ITEM_LIGHT; munchie->timer = number_range(1, 10); obj_to_room( munchie, ch->in_room ); act( "A bolt of {WLIGHTNING{0 falls from the sky and strikes $n as $e lies sleeping!", ch, NULL, NULL, TO_ROOM); send_to_char("You feel energized!\n\r",ch); } else if (dream <= 280) { send_to_char("As you start to drift off to sleep you see sheep jumping over a fence..\n\r",ch); send_to_char("One Sheep, Two sheep, Three Sheep, Four Sheep...\n\r",ch); send_to_char("Slowly as you fall into a deeper sslleep the sheep start morphing into wolves.\n\r",ch); send_to_char("Even farther into your slumber the wolves again start morphing. into corpses..\n\r",ch); send_to_char("Eight Corpses, Nine Corpses...\n\r",ch); send_to_char("You then realise that the corpses are YOUR corpses!\n\r",ch); send_to_char("You wake up bathed in a blood-red sweat....\n\r",ch); } else if (dream <= 282) { send_to_char("'They're coming' shrieked the old woman.\n\r",ch); send_to_char("Sudden blurs of movement fog your already hazy eyes.\n\r",ch); send_to_char("Praying for strength you struggle to rise to your feet.\n\r",ch); send_to_char("You fall to your knees, too dizzy to stand. You realize everyone else\n\r",ch); send_to_char("has escaped through the passage and you are left alone...\n\r",ch); send_to_char("The door bursts open and you lift your head to see.\n\r",ch); send_to_char("Laughing in hysteria you know it's over and there is no escape.\n\r",ch); send_to_char("The dark figures roughly pull you to your feet \n\r",ch); send_to_char("sneering in disgust at your hideous appearance, the leader snaps your neck\n\r",ch); send_to_char("and all is silent in the church yard as the 7 nuns dispose of your body.\n\r",ch); } else if (dream <= 284) { send_to_char("You look into their eyes, unable to break the gaze because of its\n\r",ch); send_to_char("intensity. She reaches for your hand and places it in hers. Holding it\n\r",ch); send_to_char("there for a moment of sadness, then kissing your forehead lovingly she goes.\n\r",ch); send_to_char("You watch her leave, and a single tear falls to the ground, you know she\n\r",ch); send_to_char("will never return. Realizing she left something in your hand you open\n\r",ch); send_to_char("it to find a small ring with a beautiful amethyst set in it.\n\r",ch); send_to_char("You put the ring on your own finger and swear to never forget the most\n\r",ch); send_to_char("important person in your life. Once again you cry for the loss of\n\r",ch); send_to_char("your mother.\n\r",ch); } else if (dream <= 286) { send_to_char("You hear fighting all around you, looking around you realize your in the\n\r",ch); send_to_char("middle of a gang fight. You notice that you are holding a 6 inch knife, and \n\r",ch); send_to_char("there's a man in front of youo pointing a gun at your head.\n\r",ch); send_to_char("All of a sudden you hear strange noises from behind you and the\n\r",ch); send_to_char("man with the gun whirls around to get a better look. As he does you lunge\n\r",ch); send_to_char("the knife into him and knock the gun ou of his hand.\n\r",ch); send_to_char("reallizing what you just did you take off running, and keep running,\n\r",ch); send_to_char("leaping over a 8' fence no problem, running, running, running until you\n\r",ch); send_to_char("can't run any more and you collapse under a tree. Finding yourself exhausted\n\r",ch); send_to_char("you pass out without knowing it.\n\r",ch); send_to_char("Your vision goes blood-red and the man you stabbed is burned into\n\r",ch); send_to_char("your mind until you wake up trembling in horror.\n\r",ch); } else if (dream == 289) { send_to_char("You are in a large cell with mattresses completly covering every wall.. \n\r",ch); send_to_char("You try to move but find that\n\r",ch); send_to_char("it is nearly immpossible since you are in a straight jacket.\n\r",ch); send_to_char("You scream as loud as you can, hoping that someone will come, but nobody\n\r",ch); send_to_char("does..\n\r",ch); send_to_char("You're doomed to stay here for the rest of eternity, there is no escape..\n\r",ch); } else if (dream <= 292) { send_to_char("Running through the forrest, your heart almost pounds out of your\n\r",ch); send_to_char("chest. The cold sweat pouring down your cheeks blurs your vision\n\r",ch); send_to_char("and the burning is almost unbearable. You can hear the rapid\n\r",ch); send_to_char("hoofbeats close behind you and the howling of dogs on your scent.\n\r",ch); send_to_char("There!! Up ahead you see a light!!! Happy tears stream down your\n\r",ch); send_to_char("face as you run to the flames. As you are almost upon the flames your laughter\n\r",ch); send_to_char("stops and is replaced with piercing shrieks. Where are\n\r",ch); send_to_char("the horrible screams coming from? You turn and see 2 charred bodies\n\r",ch); send_to_char("running madly around, still covered with flickering fire. You cover\n\r",ch); send_to_char("your mouth as the sickening feeling over comes you and you \n\r",ch); send_to_char("collapse into the flames and join the poor people behind you.\n\r",ch); } else if (dream <=300) { send_to_char("A hand grabs your shoulder and a grizzled old man\n\r",ch); send_to_char("peers at your wounds.\n\r",ch); send_to_char("'Hmmmm, let me see.'\n\r",ch); send_to_char("He digs in his pouch and pulls out a smelly potion.\n\r",ch); send_to_char("'Here, drink this.'\n\r",ch); send_to_char("As you raise yourself from your slumbers, he disappears.\n\r",ch); send_to_char("All that remains is a vial that reeks even from arms length.\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("smelly vial potion"); free_string(munchie->short_descr); munchie->short_descr=str_dup("a smelly potion"); free_string(munchie->description); munchie->description=str_dup("A smelly vial is here."); munchie->wear_flags=1; munchie->value[0]=40; munchie->value[1]=4; munchie->value[2]=24; munchie->value[3]=27; munchie->value[4]=29; munchie->item_type = ITEM_POTION; obj_to_char( munchie, ch ); } else if (dream <=302) { send_to_char("The bright beam catches you on the shoulder and you scream in pain as\n\r",ch); send_to_char("your flesh rips open. You fumble with your gun and try to unjam the trigger.\n\r",ch); send_to_char("Still unable to get the laser to work, you throw it to the ground in\n\r",ch); send_to_char("disgust. Holding your injured shoulder with one hand, you reach with the\n\r",ch); send_to_char("other into your pack, pulling out a small blinking sphere.\n\r",ch); send_to_char("You close your eyes and say a silent good-bye to your fleet, only\n\r",ch); send_to_char("praying they made it out in time. You can hear the strange foreign\n\r",ch); send_to_char("shouts of the Krakians coming up quickly, and you shudder in fear.\n\r",ch); send_to_char("Soon they are nearing the gate you're in and you know it is time. You\n\r",ch); send_to_char("push a glowing button on the sphere and it begins to beep loudly.\n\r",ch); send_to_char("'10 seconds until utter destruction' a computerized voice intones.\n\r",ch); send_to_char("You clip the sphere onto the wall as the Krakians enter screaming.\n\r",ch); send_to_char("There is a sudden white light and then nothing....\n\r",ch); } else if (dream <= 304) { send_to_char("You hear the slow flap of wings.\n\r",ch); send_to_char("It draws closer and closer. Looking up\n\r",ch); send_to_char("you can see a large silver dragon outlined against the sun.\n\r",ch); send_to_char("As it draws nearer, you see a golden lyre dangling from a strap\n\r",ch); send_to_char("around its neck. Suddenly you let out a scream and run for cover.\n\r",ch); send_to_char("You fall. splat. Heartbeats later. SPLAT!!\n\r",ch); } else if (dream <= 306) { send_to_char("You sit on the green grass beneath a broad large oak tree staring out at the\n\r",ch); send_to_char("sunlit fields while a soft warm breeze touchs you lightly. Staring up\n\r",ch); send_to_char("through the leaves you can see motes of sunlight peeking through and you\n\r",ch); send_to_char("can only think of how wonderful it is to be alive...\n\r",ch); send_to_char("\n\r",ch); send_to_char("Suddenly, violently the weather changes, wind whipping almost through you,\n\r",ch); send_to_char("chilling your soul. The plains turn a drab grey and they sun clouds over.\n\r",ch); send_to_char("Something caresses your shoulder and you restist temptation to look even \n\r",ch); send_to_char("though it frightens and freezes your blood....\n\r",ch); send_to_char("\n\r",ch); send_to_char("Like a snake striking a tendril wraps around your neck choking you. Fighting\n\r",ch); send_to_char("to scream, for even a sound to escape your throat, you claw at your unkown\n\r",ch); send_to_char("foe.\n\r",ch); } else if (dream <= 308) { send_to_char("Aaaaaahhhh, what a good nights sleep you had. You stand up and stretch\n\r",ch); send_to_char("letting everybone in your body snap and pop.. Looking at the clock you\n\r",ch); send_to_char("realise it's only 6:30AM and that mabye it would be a good time to go\n\r",ch); send_to_char("check out the mud. As you start walking to the computer room you feel a\n\r",ch); send_to_char("cold chill run thru your body but just shrug it off. As you enter the room\n\r",ch); send_to_char("and look over to where your computer is, you realize IT'S GONE! Thinkinng\n\r",ch); send_to_char("you've been robbed you run to the phone, but find it isn't there either!\n\r",ch); send_to_char("Feeling scared, and invaded you look around to see what else is missing\n\r",ch); send_to_char("when you notice the door, and none of the windows have been broken into.\n\r",ch); send_to_char("Another cold chill runs thru your body and you hear a voice off in the\n\r",ch); send_to_char("background...\n\r",ch); send_to_char("'You are entering another dimension...'\n\r",ch); } else if (dream <= 310) { send_to_char("Looking back you see hundreds of people running your way, all screaming your\n\r",ch); send_to_char("name and waving weapons in the air. You have no idea why there chasing you\n\r",ch); send_to_char("but decide it would be a good idea to get out of there! Starting to run\n\r",ch); send_to_char(", you run down many streets and alleys slowly winding your way out of the\n\r",ch); send_to_char("town only stopping occassionaly to fight someone that jumped out in front\n\r",ch); send_to_char("of you. After what seems like forever you come to a small inn and decide to stay for the night.\n\r",ch); send_to_char("after paying the innkeeper extra to not tell anyone your there you go up to\n\r",ch); send_to_char("your room and tend to your wounds. Shortly after you hear a horde of people come in and\n\r",ch); send_to_char("question him, then go racing off...\n\r",ch); send_to_char("The next morning you thank the man and go off looking for\n\r",ch); send_to_char("a new place to hide, fearing they will eventually catch up to you and\n\r",ch); send_to_char("wonder what they will do then...\n\r",ch); } else if (dream <= 312) { send_to_char("You feel a soft brush at your neck, and ignore it.\n\r",ch); send_to_char("Then you feel the fangs PIERCE your skin and your lifeblood being taken!\n\r",ch); send_to_char("\n\r",ch); send_to_char("You sit bolt upright, your heart pounding!\n\r",ch); send_to_char("You look about but see no one near you.\n\r",ch); send_to_char("You calm yourself and drift back to sleep, realizing it was only a dream.\n\r",ch); send_to_char("Or was it...........?\n\r",ch); } else if (dream <= 314) { send_to_char("You hear flutes in the distance. As the fog clears you realize that you\n\r",ch); send_to_char("are standing in a quaint village filled with small happy fauns. A small\n\r",ch); send_to_char("male approaches you, smiles, puts a pipe to his lips, and begins to play\n\r",ch); send_to_char("a tune. He walks away - and you begin to follow. At first you are enchanted\n\r",ch); send_to_char("...but you slowly come to the realization you can't stop! You struggle\n\r",ch); send_to_char("from the sound...throwing your hands over your ears...but it solves\n\r",ch); send_to_char("nothing. He leads you away from the village into a dark, ominous forest.\n\r",ch); send_to_char("The sound begins to drill into your eardrums...then your brain...\n\r",ch); send_to_char("You awake with a start!\n\r",ch); } else if (dream <= 316) { send_to_char("You are being led down a corridor.\n\r",ch); send_to_char("You are completely shackled and each arm is fiercely gripped by a decaying\n\r",ch); send_to_char("zombie...They force you into a large dark throne room. Before you sits\n\r",ch); send_to_char("Egil on a throne of chipped bone and patchworked flesh. He is in deep\n\r",ch); send_to_char("conversation with Withers, who stands to his left. Withers leans over and\n\r",ch); send_to_char("whispers something into Egil's ear, and Egil turns to glare at you. He\n\r",ch); send_to_char("extends his arm, makes a fist, and points his thumb down to the floor.\n\r",ch); send_to_char("\n\r",ch); send_to_char("Excruciating pain fills your entire body, and you look down to see your\n\r",ch); send_to_char("skin dissolve into dust. You open your mouth, and a scream of hopelessness\n\r",ch); send_to_char("escapes........\n\r",ch); send_to_char("\n\r",ch); send_to_char("All goes dark.......\n\r",ch); } else if (dream <= 318) { send_to_char("You're resting peacefully, dreaming about beautiful green fields, full of colorful flowers.. the \n\r",ch); send_to_char("sun shines brightly overhead, when an odd sensation awakes you.\n\r",ch); send_to_char("You wake up to feel an odd burning sensation on your left hand, and look down to\n\r",ch); send_to_char("find your hand literally on fire! Bright flames and greasy orange smoke rise from the palm of your \n\r",ch); send_to_char("hand, as you sit helplessly and watch the skin drip and crackle,\n\r",ch); send_to_char("peeling away from the bones as you begin to scream in agony..\n\r",ch); send_to_char("You sit bolt upright in bed, rocked to the core of your being as you realize this was only.. a \n\r",ch); send_to_char("dream..? \n\r",ch); } else if (dream <= 321) { send_to_char("Your walking down a grey road, and the scenes all about\n\r",ch); send_to_char("you are blue, thats all you see, greish blue for as far as \n\r",ch); send_to_char("the eye can see.\n\r",ch); send_to_char("You keep walking down the road, and you come upon a bench, \n\r",ch); send_to_char("with 2 people sitting on it reading news papers, you \n\r",ch); send_to_char("notice the papers are close to there faces.\n\r",ch); send_to_char("All of a sudden there faces morph into the news paper, and \n\r",ch); send_to_char("they put their hands down. They look at you then start \n\r",ch); send_to_char("talking to each other.\n\r",ch); send_to_char("You run as fast as you can down the road, till you see a \n\r",ch); send_to_char("woman, made of bones. She is taking a walk, with her baby in the cart\n\r",ch); send_to_char("she is pushing along, you decide to look closer, so you \n\r",ch); send_to_char("walk over to the cart made of bones...\n\r",ch); send_to_char("You look in side and the baby screams so loud it knocks \n\r",ch); send_to_char("you back a few feet. \n\r",ch); send_to_char("You run as fast as you can, you come to a cliff.\n\r",ch); } else if (dream <= 324) { send_to_char("you hear them comming\n\r",ch); send_to_char("They're comming, there's too many of them. What will you do?\n\r",ch); send_to_char("Suddenly, they crest the ridge, and you are bowled over by \n\r",ch); send_to_char("2000 puppies who want to lick your face.\n\r",ch); send_to_char("They're all over. Well, at least they're housebroken.\n\r",ch); send_to_char("Aren't they?\n\r",ch); } else if (dream <= 326) { send_to_char("You find yourself in a labyrinth of pipes and gears. All around you, you\n\r",ch); send_to_char("hear clanks, bangs, and the rattle of chains. You smell the oil used to\n\r",ch); send_to_char("lubricate the gears. As you walk through this place, you find it\n\r",ch); send_to_char("looks familiar. You wonder why. Then you realize, you've\n\r",ch); send_to_char("seen it before! A gnome had been working on the plans a while back!\n\r",ch); } else if (dream <= 328) { send_to_char("Wait, is that pipe shaking? Yes, it is! All of the sudden\n\r",ch); send_to_char("you, hear the shrill scream of alarms! You run as fast as you\n\r",ch); send_to_char("can, trying to get out, but it's just too big! Oh, no!\n\r",ch); send_to_char("BOOOOOOOOMMMMMMMMMM!!!!!!!!!!!!!!!\n\r",ch); send_to_char("You wake up, with grease in your hair.\n\r",ch); } else if (dream == 465) { send_to_char("You open your eyes, it is still dark.\n\r",ch); send_to_char("The fire has gone out. Where are the matchs?\n\r",ch); send_to_char("You reach around in the dark, your hand strikes something hard.\n\r",ch); send_to_char("Ouch!!!! Blood flows from your hand as you nick it on the blade of a \n\r",ch); send_to_char("sword. The room lights up as your blood drips onto the blade. \n\r",ch); send_to_char("The image of a powerful sword is burned into your mind!\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("dream sword"); free_string(munchie->short_descr); munchie->short_descr=str_dup("Sword of {WD{0reams"); free_string(munchie->description); munchie->description=str_dup("A sharp sword is here."); munchie->wear_flags=8193; munchie->value[0]=1; munchie->value[1]=number_range(1,10); munchie->value[2]=number_range(1,20); munchie->value[3]=1; munchie->value[4]=8; munchie->extra_flags=1; munchie->item_type = ITEM_WEAPON; munchie->timer=number_range(1,75); obj_to_room( munchie, ch->in_room ); act( "$n lets out a cry and a bit of blood drips from $s hand!", ch, NULL, NULL, TO_ROOM); act( "Mumbling strange words, $n passes into a deeper sleep.", ch, NULL, NULL, TO_ROOM); } else if (dream == 466) { send_to_char("You shudder from the cold as you see a scene of a vast frozen wasteland\n\r",ch); send_to_char("you begin to stumble around in the cold snow drifts and frozen ponds\n\r",ch); send_to_char("the cold begins to reach your fingers and toes as you begin to loose\n\r",ch); send_to_char("feeling in them, all of a sudden a man dressed in black appears before you\n\r",ch); send_to_char("in one hand he is holding a dagger and in the other...\n\r",ch); send_to_char("YOUR HEAD!?!! As you begin to scream it slowly fades away as you feel the frost\n\r",ch); send_to_char("from a short blade against your neck.\n\r",ch); munchie = create_object( get_obj_index( OBJ_VNUM_GENERIC ), 0 ); free_string(munchie->name); munchie->name=str_dup("dream dagger"); free_string(munchie->short_descr); munchie->short_descr=str_dup("Dagger of {WD{0reams"); free_string(munchie->description); munchie->description=str_dup("A sharp dagger is here."); munchie->wear_flags=8193; munchie->value[0]=2; munchie->value[1]=number_range(1,9); munchie->value[2]=number_range(1,21); munchie->value[3]=1; munchie->value[4]=8; munchie->extra_flags=1; munchie->item_type = ITEM_WEAPON; munchie->timer=number_range(1,75); obj_to_room( munchie, ch->in_room ); act( "$n lets out a cry and a bit of blood drips from $s hand!", ch, NULL, NULL, TO_ROOM); act( "Mumbling strange words, $n passes into a deeper sleep.", ch, NULL, NULL, TO_ROOM); } else if (dream == 467) { send_to_char("You think about vampires and one appears.\n\r",ch); send_to_char("It reaches for you and you scream in terror as\n\r",ch); send_to_char("it's fangs bite into your neck!\n\r",ch); } else { send_to_char("zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz.\n\r",ch); } } /*** END ADD ***/ if ( !IS_NPC(ch) && ch->level < LEVEL_IMMORTAL ) { OBJ_DATA *obj; if ( ( obj = get_eq_char( ch, WEAR_LIGHT ) ) != NULL && obj->item_type == ITEM_LIGHT && obj->value[2] > 0 ) { if ( --obj->value[2] == 0 && ch->in_room != NULL ) { --ch->in_room->light; act( "$p goes out.", ch, obj, NULL, TO_ROOM ); act( "$p flickers and goes out.", ch, obj, NULL, TO_CHAR ); extract_obj( obj ); } else if ( obj->value[2] <= 5 && ch->in_room != NULL) act("$p flickers.",ch,obj,NULL,TO_CHAR); } if (IS_IMMORTAL(ch)) ch->timer = 0; if ( ++ch->timer >= 12 ) { /* -- lets not allow the use of void triggers and try to stop idlers ~ Stheno: 01-06-2006 */ if ( ch->was_in_room == NULL && ch->in_room != NULL ) { ch->was_in_room = ch->in_room; if ( ch->fighting != NULL ) stop_fighting( ch, TRUE ); act( "$n disappears into the void.",ch, NULL, NULL, TO_ROOM ); /*send_to_char( "You disappear into the void.\n\r", ch );*/ if (ch->level > 1) save_char_obj( ch ); char_from_room( ch ); char_to_room( ch, get_room_index( ROOM_VNUM_LIMBO ) ); } } if(!IS_SET(ch->plyr,PLAYER_GHOST)) { gain_condition( ch, COND_DRUNK, -1 ); gain_condition( ch, COND_FULL, ch->size > SIZE_MEDIUM ? -4 : -2 ); gain_condition( ch, COND_THIRST, -1 ); gain_condition( ch, COND_HUNGER, ch->size > SIZE_MEDIUM ? -2 : -1); } } } /* * Autosave and autoquit. * Check that these chars still exist. */ for ( ch = char_list; ch != NULL; ch = ch_next ) { ch_next = ch->next; if (ch->desc != NULL && ch->desc->descriptor % 30 == save_number) save_char_obj(ch); if ( ch == ch_quit ) do_quit( ch, "" ); } return; } /* * Update all affects -- chars, including mobs. */ void affect_update( void ) { CHAR_DATA *ch; CHAR_DATA *ch_next; for ( ch = char_list; ch != NULL; ch = ch_next ) { AFFECT_DATA *paf; AFFECT_DATA *paf_next; ch_next = ch->next; for ( paf = ch->affected; paf != NULL; paf = paf_next ) { paf_next = paf->next; if ( paf->duration > 0 ) { paf->duration--; if (number_range(0,4) == 0 && paf->level > 0) paf->level--; /* spell strength fades with time */ } else if ( paf->duration < 0 ) ; else { if ( paf_next == NULL || paf_next->type != paf->type || paf_next->duration > 0 ) { if ( paf->type > 0 && skill_table[paf->type].msg_off ) { send_to_char( skill_table[paf->type].msg_off, ch ); send_to_char( "\n\r", ch ); } } affect_remove( ch, paf ); } } /* * Careful with the damages here, * MUST NOT refer to ch after damage taken, * as it may be lethal damage (on NPC). */ if (is_affected(ch, gsn_plague) && ch != NULL) { AFFECT_DATA *af, plague; CHAR_DATA *vch; int dam; if (ch->in_room == NULL) return; act("$n writhes in agony as plague sores erupt from $s skin.", ch,NULL,NULL,TO_ROOM); send_to_char("You writhe in agony from the plague.\n\r",ch); for ( af = ch->affected; af != NULL; af = af->next ) { if (af->type == gsn_plague) break; } if (af == NULL) { REMOVE_BIT(ch->affected_by,AFF_PLAGUE); return; } if (af->level == 1) return; plague.where = TO_AFFECTS; plague.type = gsn_plague; plague.level = af->level - 1; plague.duration = number_range(1,2 * plague.level); plague.location = APPLY_CON; plague.modifier = number_range(1,4)*-1; plague.bitvector = AFF_PLAGUE; for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (!saves_spell(plague.level - 2,vch,DAM_DISEASE) && !IS_IMMORTAL(vch) && !IS_AFFECTED(vch,AFF_PLAGUE) && number_bits(4) == 0) { send_to_char("You feel hot and feverish.\n\r",vch); act("$n shivers and looks very ill.",vch,NULL,NULL,TO_ROOM); affect_join(vch,&plague); } } dam = number_range(1000,4000)/get_curr_stat(ch, STAT_CON);//Between 50 and 200 with 20 Constitution ch->mana -= dam; ch->move -= dam; damage_old( ch, ch, dam/2, gsn_plague,DAM_DISEASE,FALSE);//Let's not do so much damage though. Max of 100. } if ( IS_AFFECTED(ch, AFF_POISON) && ch != NULL ) // && !IS_AFFECTED(ch,AFF_SLOW)) { AFFECT_DATA *poison; int poidam; poison = affect_find(ch->affected,gsn_poison); if (poison != NULL) { if(poison->duration < 100) poidam = UMAX ( 10, number_range (10, poison->level*1.8)); else if(poison->duration < 200) poidam = UMAX ( 10, number_range (10, poison->level*2.0)); else if(poison->duration < 300) poidam = UMAX ( 10, number_range (10, poison->level*2.2)); else if(poison->duration < 400) poidam = UMAX ( 10, number_range (10, poison->level*2.4)); else if(poison->duration < 550) poidam = UMAX ( 10, number_range (10, poison->level*2.6)); else if(poison->duration < 800) poidam = UMAX ( 10, number_range (10, poison->level*3.0)); else poidam = UMAX ( 10, number_range (10, poison->level*3.4)); if(ch->hit*6 < ch->max_hit) poidam /=3; if((ch->hit-poidam)<0) poidam = abs(ch->hit-0); ch->hit-=poidam; act( "$n shivers and suffers.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You shiver and suffer.\n\r", ch ); damage_old(ch,ch,poison->level/5 + 1,gsn_poison, DAM_POISON,FALSE); } } else if ( ch->position == POS_INCAP && number_range(0,1) == 0) { damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0); } else if ( ch->position == POS_MORTAL ) { damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0); } if (IS_AFFECTED2(ch,AFF2_GARROTE) && ch != NULL) { AFFECT_DATA *garrote; garrote = affect_find(ch->affected,gsn_garrote); if (garrote != NULL) { act( "$n chokes and gags.", ch, NULL, NULL, TO_ROOM ); send_to_char( "You choke and gag.\n\r", ch ); damage(ch,ch,garrote->level + 300,gsn_garrote,DAM_ENERGY,FALSE,0); } } else if ( ch->position == POS_INCAP && number_range(0,1) == 0) { damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0); } else if ( ch->position == POS_MORTAL ) { damage( ch, ch, 1, TYPE_UNDEFINED, DAM_NONE,FALSE,0); } if (IS_AFFECTED(ch,AFF_DEAF) && ch != NULL) { AFFECT_DATA *shriek; for (shriek = ch->affected; shriek != NULL; shriek = shriek->next) { if (shriek->type == gsn_shriek) break; } if (shriek->duration && shriek->type == gsn_shriek) { AFFECT_DATA af; af.where = TO_AFFECTS; af.type = gsn_shriek; af.level = 0; af.duration = 0; af.location = APPLY_HITROLL; af.modifier = shriek->modifier * -1 / 5; af.bitvector= AFF_DEAF; act("$n cries out and falls to their knees holding their ears.",ch,NULL,NULL,TO_ROOM); send_to_char("You tremble and fall to your knees holding your ears.\n\r",ch); ch->position = POS_RESTING; affect_join(ch,&af); } } if (is_affected(ch, gsn_on_fire) && ch != NULL) { AFFECT_DATA *af, fire; CHAR_DATA *vch; int dam; if (ch->in_room == NULL) return; act("$n screams as flames erupt along $s skin.",ch,NULL,NULL,TO_ROOM); send_to_char("You feel your skin begin to burn.\n\r",ch); send_to_char("HOT HOT HOT!!\n\r",ch); for ( af = ch->affected; af != NULL; af = af->next ) { if (af->type == gsn_on_fire) break; } if (af == NULL) { affect_strip(ch,gsn_on_fire); return; } if (af->level == 1) return; fire.where = TO_AFFECTS; fire.type = gsn_on_fire; fire.level = af->level - 1; fire.duration = number_range(1,2 * fire.level); fire.location = APPLY_DEX; fire.modifier = -2; fire.bitvector = 0; for ( vch = ch->in_room->people; vch != NULL; vch = vch->next_in_room) { if (!saves_spell(fire.level - 2,vch,DAM_DISEASE) && !IS_IMMORTAL(vch) && !is_affected(vch,gsn_on_fire) && number_bits(4) == 0) { act("Sparks leap from $n and you catch on fire!",ch,NULL,vch,TO_VICT); act("Sparks from $n ignite $N's hair!",ch,NULL,vch,TO_NOTVICT); affect_join(vch,&fire); } } dam = UMIN(ch->level * 2, af->level/3 + 1); ch->move -= dam / 2; if(( ch->hit - dam ) < 0 ) dam = ch->hit; ch->hit -= dam; damage_old( ch, ch, af->level/10 + 1, gsn_on_fire,DAM_FIRE,FALSE); } } return; } void cooldown_update( void ) { char buf[MAX_STRING_LENGTH]; CHAR_DATA *ch; CHAR_DATA *ch_next; for ( ch = char_list; ch != NULL; ch = ch_next ) { COOLDOWN_DATA *pcd, *pcd_next = NULL; ch_next = ch->next; for ( pcd = ch->cooldowns; pcd != NULL; pcd = pcd_next ) { if ( pcd->duration > 0 ) pcd->duration--; else if ( pcd->duration < 0 ) ; else { sprintf( buf, "{W%s is no longer on cooldown.{x\n\r", skill_table[pcd->type].name ); send_to_char( buf , ch ); cooldown_remove( ch, pcd ); } } } return; } /* * Update all objs. * This function is performance sensitive. */ void obj_update( void ) { AUCTION_DATA *auc; OBJ_DATA *obj, *obj_next; AFFECT_DATA *paf, *paf_next; char message[MAX_INPUT_LENGTH]; for ( obj = object_list; obj != NULL; obj = obj_next ) { CHAR_DATA *rch; obj_next = obj->next; /* go through affects and decrement */ for ( paf = obj->affected; paf != NULL; paf = paf_next ) { paf_next = paf->next; if ( paf->duration > 0 ) { paf->duration--; if (number_range(0,4) == 0 && paf->level > 0) paf->level--; /* spell strength fades with time */ } else if ( paf->duration < 0 ) ; else { if ( paf_next == NULL || paf_next->type != paf->type || paf_next->duration > 0 ) { if ( paf->type > 0 && skill_table[paf->type].msg_obj ) { if (obj->carried_by != NULL) { rch = obj->carried_by; act(skill_table[paf->type].msg_obj, rch,obj,NULL,TO_CHAR); } if (obj->in_room != NULL && obj->in_room->people != NULL) { rch = obj->in_room->people; act(skill_table[paf->type].msg_obj, rch,obj,NULL,TO_ALL); } } } affect_remove_obj( obj, paf ); } } if ( obj->timer <= 0 || --obj->timer > 0 ) continue; switch ( obj->item_type ) { default: strcpy( message, "$p crumbles into dust." ); break; case ITEM_FOUNTAIN: strcpy( message, "$p dries up." ); break; case ITEM_CORPSE_NPC: strcpy( message, "$p decays into dust." ); break; case ITEM_CORPSE_PC: strcpy( message, "$p decays into dust." ); break; case ITEM_FOOD: strcpy( message, "$p decomposes." ); break; case ITEM_POTION: strcpy( message, "$p has evaporated from disuse." ); break; case ITEM_PORTAL: strcpy( message, "$p fades out of existence." ); break; case ITEM_CONTAINER: case ITEM_PIT: if (CAN_WEAR(obj,ITEM_WEAR_FLOAT)) if (obj->contains) strcpy( message, "$p flickers and vanishes, spilling its contents on the floor." ); else strcpy( message, "$p flickers and vanishes." ); else strcpy( message, "$p crumbles into dust." ); break; } if ( obj->carried_by != NULL ) { if (IS_NPC(obj->carried_by) && obj->carried_by->pIndexData->pShop != NULL) obj->carried_by->silver += obj->cost/5; else { act( message, obj->carried_by, obj, NULL, TO_CHAR ); if ( obj->wear_loc == WEAR_FLOAT) act(message,obj->carried_by,obj,NULL,TO_ROOM); } } else if ( obj->in_room != NULL && ( rch = obj->in_room->people ) != NULL ) { if (! (obj->in_obj && obj->in_obj->pIndexData->item_type == ITEM_PIT && !CAN_WEAR(obj->in_obj,ITEM_TAKE))) { act( message, rch, obj, NULL, TO_ROOM ); act( message, rch, obj, NULL, TO_CHAR ); } } if ((obj->item_type == ITEM_CORPSE_PC || obj->wear_loc == WEAR_FLOAT) && obj->contains) { /* save the contents */ OBJ_DATA *t_obj, *next_obj; for (t_obj = obj->contains; t_obj != NULL; t_obj = next_obj) { next_obj = t_obj->next_content; obj_from_obj(t_obj); if (obj->in_obj) /* in another object */ obj_to_obj(t_obj,obj->in_obj); else if (obj->carried_by) /* carried */ if (obj->wear_loc == WEAR_FLOAT) if (obj->carried_by->in_room == NULL) extract_obj(t_obj); else obj_to_room(t_obj,obj->carried_by->in_room); else obj_to_char(t_obj,obj->carried_by); else if (obj->in_room == NULL) /* destroy it */ extract_obj(t_obj); else /* to a room */ obj_to_room(t_obj,obj->in_room); } } for ( auc = auction_list; auc != NULL; auc = auc->next ) { if (auc->item != NULL && obj == auc->item) { char buf[MAX_STRING_LENGTH]; if ( auc->high_bidder != NULL ) { add_cost(auc->high_bidder,auc->bid_amount,auc->bid_type); send_to_char("\n\rYour bid has been returned to you.\n\r",auc->high_bidder); } sprintf( buf, "{+Ticket [{Y%d{+], Auction stopped: %s{x", auc->slot, message ); auction_channel( auc->owner, auc->item, buf ); free_auction( auc ); break; } } extract_obj( obj ); } return; } /* * Aggress. * * for each mortal PC * for each mob in room * aggress on some random PC * * This function takes 25% to 35% of ALL Merc cpu time. * Unfortunately, checking on each PC move is too tricky, * because we don't the mob to just attack the first PC * who leads the party into the room. * * -- Furey */ void aggr_update( void ) { CHAR_DATA *wch; CHAR_DATA *wch_next; CHAR_DATA *ch; CHAR_DATA *ch_next; CHAR_DATA *vch; CHAR_DATA *vch_next; CHAR_DATA *victim; for ( wch = char_list; wch != NULL; wch = wch_next ) { wch_next = wch->next; if ( IS_NPC(wch) || wch->level >= LEVEL_IMMORTAL || wch->in_room == NULL || wch->in_room->area->empty) continue; for ( ch = wch->in_room->people; ch != NULL; ch = ch_next ) { int count; ch_next = ch->next_in_room; if ( !IS_NPC(ch) || !IS_SET(ch->act, ACT_AGGRESSIVE) || IS_SET(ch->in_room->room_flags,ROOM_SAFE) || IS_AFFECTED(ch,AFF_CALM) || ch->fighting != NULL || IS_AFFECTED(ch, AFF_CHARM) || !IS_AWAKE(ch) || ( IS_SET(ch->act, ACT_WIMPY) && IS_AWAKE(wch) ) || !can_see( ch, wch ) || ch->leader == wch || ch->master == wch || number_bits(1) == 0) continue; /* * Ok we have a 'wch' player character and a 'ch' npc aggressor. * Now make the aggressor fight a RANDOM pc victim in the room, * giving each 'vch' an equal chance of selection. */ count = 0; victim = NULL; for ( vch = wch->in_room->people; vch != NULL; vch = vch_next ) { vch_next = vch->next_in_room; if ( !IS_NPC(vch) && vch->level < LEVEL_IMMORTAL && ch->level >= vch->level - 5 && ( !IS_SET(ch->act, ACT_WIMPY) || !IS_AWAKE(vch) ) && can_see( ch, vch ) ) { if ( number_range( 0, count ) == 0 ) victim = vch; count++; } } if ( victim == NULL ) continue; multi_hit( ch, victim, TYPE_UNDEFINED ); } } return; } /* * Handle all kinds of updates. * Called once per pulse from game loop. * Random times to defeat tick-timing clients and players. */ void update_handler( bool forced ) { static int pulse_area; static int pulse_mobile; static int pulse_violence; static int pulse_point; static int pulse_music; static int pulse_quest; static int pulse_tele; static int pulse_affect; static int pulse_auction; if ( --pulse_auction <= 0 ) { pulse_auction = ( 20 * PULSE_PER_SECOND ); auction_update( ); } if ( --pulse_tele <= 0 ) { pulse_tele = PULSE_TELEPORT; tele_update ( ); } if ( --pulse_quest <= 0 ) { pulse_quest = PULSE_QUEST; quest_update ( ); } if ( --pulse_area <= 0 ) { pulse_area = number_range(PULSE_AREA, 3 * PULSE_AREA / 2); /* pulse_area = PULSE_AREA; */ /* number_range( PULSE_AREA / 2, 3 * PULSE_AREA / 2 ); */ area_update ( ); } if ( --pulse_music <= 0 ) { pulse_music = PULSE_MUSIC; song_update(); // who_html_update(); // note_html_update(); } if ( --pulse_mobile <= 0 ) { pulse_mobile = PULSE_MOBILE; mobile_update ( ); } if ( --pulse_violence <= 0 ) { pulse_violence = PULSE_VIOLENCE; violence_update ( ); } if (forced) { pulse_point = 0; } forced = FALSE; if ( --pulse_point <= 0 ) { wiznet("TICK!",NULL,NULL,WIZ_TICKS,0,0); pulse_point = number_range(PULSE_TICK / 3 * 2, 3 * PULSE_TICK / 2); /* pulse_point = PULSE_TICK; */ /* number_range( PULSE_TICK / 2, 3 * PULSE_TICK / 2 ); */ weather_update ( ); char_update ( ); obj_update ( ); check_reboot ( ); randomize_entrances ( ROOM_VNUM_CHAIN ); } if ( --pulse_affect <= 0 ) { wiznet("AFFECT_TICK!",NULL,NULL,WIZ_TICKS,0,0); pulse_affect = PULSE_TICK; affect_update ( ); room_affect_update ( ); } arena_update ( ); aggr_update( ); tail_chain( ); return; } void quest_update(void) { CHAR_DATA *ch, *ch_next; for ( ch = char_list; ch != NULL; ch = ch_next ) { ch_next = ch->next; if (IS_NPC(ch)) continue; if (ch->nextquest > 0) { ch->nextquest--; if (ch->nextquest == 0) { send_to_char("You may now quest again.\n\r",ch); return; } } else if (IS_SET(ch->act,PLR_QUESTOR)) { if (--ch->countdown <= 0) { char buf [MAX_STRING_LENGTH], buf2 [MAX_STRING_LENGTH]; ch->nextquest = 10; strcpy(buf, "You have run out of time for your quest!\n\r"); strcat(buf, "You may quest again in "); sprintf(buf2, "%d", ch->nextquest); strcat(buf, buf2); strcat(buf, " minutes.\n\r"); send_to_char(buf, ch); REMOVE_BIT(ch->act, PLR_QUESTOR); ch->questgiver = NULL; ch->countdown = 0; ch->questmob = 0; } if (ch->countdown > 0 && ch->countdown < 6) { char buf [MAX_STRING_LENGTH]; strcpy(buf, "Better hurry, you're almost out of time "); strcat(buf, "for your quest!\n\r"); send_to_char(buf, ch); return; } } } return; } void tele_update ( void ) { /* CHAR_DATA *ch; CHAR_DATA *ch_next; ROOM_INDEX_DATA *pRoomIndex; for (ch = char_list ; ch != NULL; ch = ch_next ) { ch_next = ch->next; if ( IS_SET(ch->in_room->room_flags, ROOM_TELEPORT ) ) { do_look ( ch, "tele" ); if ( ch->in_room->tele_dest == 0 ) pRoomIndex = get_random_room (ch); else pRoomIndex = get_room_index(ch->in_room->tele_dest); send_to_char ("You have been teleported!!!\n\r", ch); act("$n vanishes!!!\n\r", ch, NULL, NULL, TO_ROOM); char_from_room(ch); char_to_room(ch, pRoomIndex); act("$n slowly fades into existence.\n\r", ch, NULL, NULL, TO_ROOM); do_look(ch, "auto"); } } */ } void check_reboot( void ) { char buf[MAX_STRING_LENGTH]; CHAR_DATA *vch; DESCRIPTOR_DATA *d; switch(reboot_counter) { case -1: break; case 0: { for ( d = descriptor_list; d; d = d->next ) { if ( d->connected == CON_PLAYING ) { vch = d->original ? d->original : d->character; if (vch != NULL && d->connected == 0) { affect_strip(vch,gsn_plague); affect_strip(vch,gsn_poison); affect_strip(vch,gsn_blindness); affect_strip(vch,gsn_sleep); affect_strip(vch,gsn_curse); affect_strip(vch,gsn_wither); vch->hit = vch->max_hit; vch->mana = vch->max_mana; vch->move = vch->max_move; save_char_obj(vch); send_to_char("{^*** {#You have been restored{&! {^***{x\n\r",vch); send_to_char("{^*** {#You are now saved. {^***{x\n\r",vch); } } } reboot_system("SYSTEM conducting {!Auto-Reboot{x. Please wait 10 seconds before Re-Connecting."); return; } case 1: case 2: case 3: case 4: case 5: case 10: case 15: sprintf(buf,"{@***** {!REBOOT{x IN %i TICKS {@*****{x\n\r",reboot_counter); for (d = descriptor_list; d != NULL; d = d->next) send_to_desc(buf,d); default: reboot_counter--; break; } switch(shutdown_counter) { case -1: break; case 0: { for ( d = descriptor_list; d; d = d->next ) { if ( d->connected == CON_PLAYING ) { vch = d->original ? d->original : d->character; if (vch != NULL && d->connected == 0) { affect_strip(vch,gsn_plague); affect_strip(vch,gsn_poison); affect_strip(vch,gsn_blindness); affect_strip(vch,gsn_sleep); affect_strip(vch,gsn_curse); affect_strip(vch,gsn_wither); vch->hit = vch->max_hit; vch->mana = vch->max_mana; vch->move = vch->max_move; save_char_obj(vch); send_to_char("{^*** {#You have been restored{&! {^***{x\n\r",vch); send_to_char("{^*** {#You are now saved. {^***{x\n\r",vch); } } } shutdown_system(); return; } case 1: case 2: case 3: case 4: case 5: case 10: case 15: sprintf(buf,"{@***** {!SHUTDOWN{x IN %i TICKS {@*****{x\n\r",shutdown_counter); for (d = descriptor_list; d != NULL; d = d->next) send_to_desc(buf,d); default: shutdown_counter--; break; } } /* * Update Room affects */ void room_affect_update( void ) { ROOM_INDEX_DATA *pRoom; int iHash; CHAR_DATA *ich; for( iHash = 0; iHash < MAX_KEY_HASH; iHash++ ) { for( pRoom = room_index_hash[iHash]; pRoom; pRoom = pRoom->next ) { AFFECT_DATA *paf; AFFECT_DATA *paf_next; AFFECT_DATA af; for ( paf = pRoom->affected; paf != NULL; paf = paf_next ) { paf_next = paf->next; if ( paf->duration > 0 ) { paf->duration--; if (number_range(0,4) == 0 && paf->level > 0) paf->level--; /* spell strength fades with time */ } else if ( paf->duration < 0 ) ; else { if ( paf_next == NULL || paf_next->type != paf->type || paf_next->duration > 0 ) { if ( paf->type > 0 && skill_table[paf->type].msg_obj ) { for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room ) { act(skill_table[paf->type].msg_obj,ich,NULL,NULL,TO_CHAR); } } affect_remove_room(pRoom, paf ); } } /* Special cases */ if(paf->bitvector == ROOM_AFF_FIRES) { for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room ) { if (ich->invis_level > 0) continue; if(!str_cmp(clan_table[ich->clan].name,"torment")) continue; if (IS_NPC(ich) || !is_pkill(ich) || ich->level < paf->level-10) continue; if ( saves_spell( paf->level, ich, DAM_OTHER) ) continue; fire_effect(ich,paf->level,300,TARGET_CHAR); damage_old( ich, ich, 300, gsn_on_fire,DAM_FIRE,FALSE); act( "$n burns in the Fires of Torment.", ich, NULL, NULL, TO_ROOM ); send_to_char( "You burn in the Fires of Torment.\n\r", ich ); } } if(paf->bitvector == ROOM_AFF_FAERIE) { for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room ) { if ((ich->invis_level > 0) || (ich->ghost_level > 0)) continue; if ( saves_spell( paf->level, ich, DAM_OTHER) ) continue; affect_strip ( ich, gsn_invis ); affect_strip ( ich, gsn_mass_invis ); affect_strip ( ich, gsn_sneak ); REMOVE_BIT ( ich->affected_by, AFF_HIDE ); REMOVE_BIT ( ich->shielded_by, SHD_INVISIBLE ); REMOVE_BIT ( ich->affected_by, AFF_SNEAK ); affect_strip ( ich, gsn_forest_blend ); affect_strip ( ich, gsn_earthmeld ); act( "$n is revealed!", ich, NULL, NULL, TO_ROOM ); send_to_char( "You are revealed!\n\r", ich ); } } if(paf->bitvector == ROOM_AFF_SMOKE) { for ( ich = pRoom->people; ich != NULL; ich = ich->next_in_room ) { if (ich->invis_level > 0) continue; if ( saves_spell( paf->level, ich, DAM_OTHER) ) continue; if( !IS_AFFECTED(ich, AFF_BLIND)) { af.where = TO_AFFECTS; af.location = APPLY_HITROLL; af.modifier = -4; af.duration = 0; af.type = gsn_smokebomb; af.bitvector = AFF_BLIND; affect_to_char( ich, &af ); act("$n is blinded by the {Dsmoke{x in the room!",ich,NULL,NULL,TO_ROOM); send_to_char( "You are blinded by {Dsmoke{x!\n\r", ich ); } } } } } } } bool is_warrior_class(int class) { if(class == CLASS_WARRIOR || class == CLASS_THIEF || class == CLASS_RANGER || class == CLASS_GLADIATOR || class == CLASS_MERCENARY || class == CLASS_STRIDER || class == CLASS_HIGHLANDER || class == CLASS_CRUSADER || class == CLASS_SWASHBUCKLER || class == CLASS_NINJA || class == CLASS_ASSASSIN || class == CLASS_BARD || class == CLASS_PALADIN || class == CLASS_HUNTER || class == CLASS_MONK) return TRUE; return FALSE; }