#if defined(macintosh) #include <types.h> #else #include <sys/types.h> #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include "merc.h" CLASS_DATA *alie; CLASS_DATA *apoc; CLASS_DATA *drag; CLASS_DATA *drow; CLASS_DATA *jedi; CLASS_DATA *monk; CLASS_DATA *shad; CLASS_DATA *vamp; CLASS_DATA *were; // parses all the improvemtn fields for a class void display_class_stats( CHAR_DATA *ch) { char buf[MAX_STRING_LENGTH]; if(IS_NPC(ch)) return; if(IS_CLASS(ch, CLASS_NONE)) { do_huh(ch, ""); return; } if( IS_CLASS(ch,CLASS_DROW) ) { stc("#6The powers Lloth has bestowed upon you...#n\n\r",ch); stc("#4-----------------------------------------#n\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_SPEED) ) stc("You move quite quickly.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_TOUGHSKIN) ) stc("Your skin has been toughened.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DROWFIRE) ) stc("You can call Drowfire upon your enemies.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DARKNESS) ) stc("You can summon a globe of darkness.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_LEVITATION) ) stc("You can levitate in the air.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DROWSHIELD) ) stc("You can shield your aura.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DROWPOISON) ) stc("You have control over deadly poisons.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_GAROTTE) ) stc("You have mastered the art of garotte.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DGAROTTE) ) stc("You have dark-enhanced garotte.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_ARMS) ) stc("You have extra spidery arms.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_DROWHATE) ) stc("You can invoke the hatred of the Drow.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_SPIDERFORM) ) stc("You can mutate into a large spider.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_WEB) ) stc("You can shoot a spidery web at opponents.\n\r",ch); if (IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_EARTHSHATTER) ) stc("You can shatter the earth under your feet.\n\r",ch); stc("\n\r", ch); if( ch->generation == 1 ) stc("You are Lloth's Avatar.\n\r",ch); if( ch->generation == 2 ) stc("You are a Drow Matron.\n\r",ch); if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) ) stc("You are a Drow Warrior.\n\r",ch); if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) stc("You are a Drow Mage.\n\r", ch ); if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) stc("You are a Drow Cleric.\n\r", ch ); sprintf(buf,"You have %d drow power points.\n\r",GET_POWERS(ch,DROW_POINTS) ); stc(buf,ch); sprintf(buf,"You have %d points of magic resistance.\n\r",GET_POWERS(ch,DROW_MAGIC) ); stc(buf,ch); sprintf(buf,"You have %d pulses of darkness remaining.\n\r",ch->pcdata->pulse_timer[PULSE_DARKNESS]); stc(buf,ch); if( weather_info.sunlight == SUN_DARK ) stc("You feel strong in the night.\n\r", ch ); stc("\n\r",ch); return; } if( IS_CLASS(ch,CLASS_JEDI) ) { char rank[MAX_STRING_LENGTH]; switch( GET_POWERS(ch,JEDI_RANK) ) { case JEDI_RANK_NONE: sprintf(rank,"BUGGED"); break; case JEDI_RANK_APPRENTICE: sprintf(rank,"Apprentice"); break; case JEDI_RANK_INITIATE: sprintf(rank,"Initiate"); break; case JEDI_RANK_GUARDIAN: sprintf(rank,"Guardian"); break; case JEDI_RANK_KNIGHT: sprintf(rank,"Knight"); break; case JEDI_RANK_MASTER: sprintf(rank,"Master"); break; case JEDI_RANK_LORD: sprintf(rank,"Lord"); break; } banner2_to_char("Jedi Stats",ch); sprintf(buf," Stance [%2d] Attack [%2d] Defense [%2d]\n\r", GET_POWERS(ch,JEDI_STANCE),GET_POWERS(ch,JEDI_ATTACK),GET_POWERS(ch,JEDI_DEFENSE)); stc(buf,ch); if( GET_POWERS(ch,JEDI_LIGHT) < 5 && GET_POWERS(ch,JEDI_DARK) < 5 ) sprintf(buf," Rank [%s]\n\r",rank); else if( GET_POWERS(ch,JEDI_LIGHT) >= 5 ) sprintf(buf," Rank [Jedi %s]\n\r",rank); else if( GET_POWERS(ch,JEDI_DARK) >= 5 ) sprintf(buf," Rank [Sith %s]\n\r",rank); stc(buf,ch); stc("\n\r",ch); banner2_to_char("Force Stats",ch); sprintf(buf," Light [%2d]\n\r",GET_POWERS(ch,JEDI_LIGHT)); stc(buf,ch); sprintf(buf," Force Heal [%2d] Force Absorb [%2d] Force Shield [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_HEAL),GET_POWERS(ch,JEDI_FORCE_ABSORB),GET_POWERS(ch,JEDI_FORCE_SHIELD)); stc(buf,ch); sprintf(buf," Jedi Mind Trick [%2d] Jedi Sight [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_MIND_TRICK),GET_POWERS(ch,JEDI_FORCE_SIGHT)); stc(buf,ch); sprintf(buf," Neutral [%2d]\n\r",GET_POWERS(ch,JEDI_NEUTRAL)); stc(buf,ch); sprintf(buf," Force Speed [%2d] Force Jump [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_SPEED),GET_POWERS(ch,JEDI_FORCE_JUMP)); stc(buf,ch); sprintf(buf," Force Push [%2d] Force Pull [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_PUSH),GET_POWERS(ch,JEDI_FORCE_PULL)); stc(buf,ch); sprintf(buf," Dark [%2d]\n\r",GET_POWERS(ch,JEDI_DARK)); stc(buf,ch); sprintf(buf," Force Grip [%2d] Force Rage [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_SPEED),GET_POWERS(ch,JEDI_FORCE_JUMP)); stc(buf,ch); sprintf(buf," Force Drain [%2d] Force Lightning [%2d]\n\r", GET_POWERS(ch,JEDI_FORCE_PUSH),GET_POWERS(ch,JEDI_FORCE_PULL)); stc(buf,ch); sprintf(buf," Force Pool [%d of %d]\n\r",GET_POWERS(ch,JEDI_FORCE_POOL), GET_POWERS(ch,JEDI_FORCE_POOL_MAX)); stc(buf,ch); } if( IS_CLASS(ch, CLASS_DRAGON)) { banner2_to_char("Dragon stats", ch); if( GET_POWERS(ch, DRAGON_MIGHT) >= 10) sprintf( buf, "Might: %d\n\r", GET_POWERS(ch, DRAGON_MIGHT)); else sprintf( buf, "Might: %d Points to increase: %d\n\r", GET_POWERS(ch, DRAGON_MIGHT), (GET_POWERS(ch, DRAGON_MIGHT)+1)*POINT_STEP); stc(buf, ch); if( GET_POWERS(ch, DRAGON_TOUGH) >= 10) sprintf( buf, "Toughness: %d\n\r", GET_POWERS(ch, DRAGON_TOUGH)); else sprintf( buf, "Toughness: %d Points to increase: %d\n\r",GET_POWERS(ch, DRAGON_TOUGH), (GET_POWERS(ch, DRAGON_TOUGH)+1)*POINT_STEP); stc(buf, ch); if( GET_POWERS(ch, DRAGON_SPEED) >= 10) sprintf( buf, "Speed: %d\n\r", GET_POWERS(ch, DRAGON_SPEED)); else sprintf( buf, "Speed: %d Points to increase: %d\n\r",GET_POWERS(ch, DRAGON_SPEED), (GET_POWERS(ch, DRAGON_SPEED)+1)*POINT_STEP); stc(buf, ch); if( GET_POWERS(ch, DRAGON_MAGIC) >= 10) sprintf( buf, "Magic: %d\n\r", GET_POWERS(ch, DRAGON_MAGIC)); else sprintf( buf, "Magic: %d Points to increase: %d\n\r",GET_POWERS(ch, DRAGON_MAGIC), (GET_POWERS(ch, DRAGON_MAGIC)+1)*POINT_STEP); stc(buf, ch); if( GET_POWERS(ch, DRAGON_AGE) >= 10000) sprintf( buf, "Years: %d\n\r", GET_POWERS(ch, DRAGON_AGE)); else sprintf( buf, "Years: %d Points to increase: %d\n\r",GET_POWERS(ch, DRAGON_AGE), (GET_POWERS(ch, DRAGON_AGE)+1)*2); stc(buf, ch); sprintf( buf, "Months: %d\n\r", GET_POWERS(ch, DRAGON_DAYS)); stc(buf, ch); sprintf( buf, "Points: %d\n\r", GET_POWERS(ch, DRAGON_POINTS)); stc(buf, ch); sprintf( buf, "You have %d pulses left on your breath timer.\n\r", GET_POWERS(ch, DRAGON_BTIME)); stc( buf, ch); sprintf( buf, "You have %d pulses left on your shift timer.\n\r", GET_POWERS(ch, DRAGON_STIME)); stc( buf, ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_FIRE)) stc("#1You have fire breath.\n\r#n", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_ICE)) stc("#7You have ice breath.\n\r#n", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_ACID)) stc("#0You have acid breath.\n\r#n", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_POISON)) stc("#2You have poison breath.\n\r#n", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_LIGHTNING)) stc("#4You have lightning breath.\n\r#n", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_GRAB)) stc("You can grasp your victims with your enormous claws.\n\r", ch); if( IS_SET(GET_POWERS(ch, DRAGON_FLAGS), DRAGON_WINGS)) stc("Your wings have grown.\n\r#n", ch); if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) stc("You are in Dragon form.\n\r", ch); else stc("You are in Human form.\n\r", ch); } if( IS_CLASS(ch, CLASS_MONK)) { banner2_to_char("TECHNIQUES", ch); if( HAS_TECH(ch, TECH_ELBOW)) stc("You have learned the combat technique of the elbow.\n\r", ch); if( HAS_TECH(ch, TECH_BACKFIST)) stc("You have learned the combat technique of the backfast.\n\r", ch); if ( HAS_TECH(ch, TECH_SWEEP)) stc("You have learned the combat technique of sweeping.\n\r", ch); if( HAS_TECH(ch, TECH_REVERSE)) stc("You have learned the combat technique of reverse sweeping.\n\r", ch); if( HAS_TECH(ch, TECH_KNEETHRUST)) stc("You have learned the combat technique of the kneethrust.\n\r", ch); if( HAS_TECH(ch, TECH_THRUSTKICK)) stc("You have learned the combat technique of the thrustkick.\n\r", ch); if( HAS_TECH(ch, TECH_ROUNDHOUSE)) stc("You have learned the combat technique of the roundhouse.\n\r", ch); if( HAS_TECH(ch, TECH_HEARTPUNCH)) stc("You have learned the combat technique of the heartpunch.\n\r", ch); if( HAS_TECH(ch, TECH_PALMSTRIKE)) stc("You have learned how to palmstrike your enemies.\n\r", ch); if( HAS_TECH(ch, TECH_DENJIN)) stc("You have learned how to hurl fireballs at your enemies.\n\r", ch); if( HAS_TECH(ch, TECH_CUSTOM)) stc("You have learned how to use your attacks at lighting speed.\n\r", ch); if( HAS_TECH(ch, TECH_VOICE)) stc("You have learned to call the spirits to aid you.\n\r", ch); if( HAS_TECH(ch, TECH_BLOCK)) stc("You have learned how to block your enemies attacks.\n\r", ch); if( HAS_TECH(ch, TECH_CELEST)) stc("You have learned to walk to planes.\n\r", ch); if( HAS_TECH(ch, TECH_STANCE)) stc("You have mastered the arts of the combat stance.\n\r", ch); if( HAS_TECH(ch, TECH_UNARMED)) stc("You fight with precision while unarmed.\n\r", ch); if( HAS_TECH(ch, TECH_HEALTOUCH)) stc("You have been granted a healing touch.\n\r", ch); if( HAS_TECH(ch, TECH_DEATHTOUCH)) stc("You have been granted the knowledge of a killing touch.\n\r", ch); if( HAS_TECH(ch, TECH_HEATMETAL)) stc("You know how to heat an opponents armor with a thought.\n\r", ch); if( HAS_TECH(ch, TECH_CLAIR)) stc("You can sense your foes anywhere in the world.\n\r", ch); sprintf( buf, "Current Chi: %d Max Chi: %d\n\r", GET_POWERS(ch, MONK_CURR_CHI), GET_POWERS(ch, MONK_MAX_CHI)); stc( buf, ch); sprintf( buf, "Current Focus: %d Max Focus: %d\n\r", GET_POWERS(ch, MONK_CURR_FOC), GET_POWERS(ch, MONK_MAX_FOC)); stc( buf, ch); sprintf( buf, "Block counter %d Custom Combo: %d\n\r", GET_POWERS(ch, MONK_BLOCK), GET_POWERS(ch, MONK_CUSTOM)); stc( buf, ch); sprintf( buf, "Cost for new technique: %d\n\r", ((1+count_techniques(ch)) * CHI_COST)); stc(buf, ch); if( GET_POWERS(ch, MONK_MAX_CHI) < MAX_CHI) { sprintf( buf, "Cost to gain chi: %d\n\r", ((1+GET_POWERS(ch, MONK_MAX_CHI)) * (2 * CHI_COST))); stc(buf, ch); } if( GET_POWERS(ch, MONK_MAX_FOC) < MAX_FOCUS) { sprintf( buf, "Cost to gain focus: %d\n\r", ((1+ GET_POWERS(ch, MONK_MAX_FOC)) * (CHI_COST / 10))); stc( buf, ch); } switch( ch->pcdata->powers[MONK_CLASS] ) { case PATH_NONE: sprintf( buf, "Path: None\n\r"); break; case PATH_GAIA: sprintf( buf, "Path: Gaia\n\r"); break; case PATH_INFERNO: sprintf( buf, "Path: Inferno\n\r"); break; case PATH_PEARL: sprintf( buf, "Path: Pearl\n\r"); break; case PATH_TSUNAMI: sprintf( buf, "Path: Tsunami\n\r"); break; case PATH_TEMPEST: sprintf( buf, "Path: Tempest\n\r"); break; default: sprintf( buf, "BUGGED: auto correcting. Setting to None\n\r"); GET_POWERS(ch, MONK_CLASS) = PATH_NONE; break; } stc( buf, ch); return; } if( IS_CLASS(ch, CLASS_ALIEN)) { banner2_to_char("Evolutions", ch); sprintf( buf, "Nervous System: %d\n\r", GET_POWERS(ch, ALIEN_SPEED)); stc( buf, ch); sprintf( buf, "Muscular System: %d\n\r", GET_POWERS(ch, ALIEN_STR)); stc( buf, ch); sprintf( buf, "Carapace: %d\n\r", GET_POWERS(ch, ALIEN_ARMOR)); stc( buf, ch); sprintf(buf, "Size: %d\n\r", GET_POWERS(ch, ALIEN_SIZE)); stc( buf, ch); sprintf(buf, "Senses: %d\n\r", GET_POWERS(ch, ALIEN_SENSE)); stc( buf, ch); sprintf( buf, "DNA: %d\n\r", GET_POWERS(ch, ALIEN_DNA)); stc(buf, ch); sprintf( buf, "Primal urge: %d\n\r", GET_POWERS(ch, ALIEN_PRIMAL)); stc(buf, ch); sprintf( buf, "Pain Tolerance: %d\n\r", GET_POWERS(ch, ALIEN_PAIN)); stc(buf, ch); switch(GET_POWERS(ch, ALIEN_CLASS)) { default: break; case ALIEN_DRONE: stc("You are a drone.\n\r", ch); break; case ALIEN_RUN: stc("You are a runner.\n\r", ch); break; case ALIEN_WAR: stc("You are a warrior.\n\r", ch); break; case ALIEN_PRAE: stc("You are a royal praetorian guardian.\n\r", ch); break; case ALIEN_GOR: stc("You are a gorilla hybrid.\n\r", ch); break; case ALIEN_SCORP: stc("You are a scorpion hybrid.\n\r", ch); break; } return; } if( IS_CLASS(ch, CLASS_SHADOW) ) { char buf[MAX_STRING_LENGTH]; int i; banner2_to_char("Masteries", ch); sprintf( buf, "Backstab [#1" ); for( i = 1; i < GET_POWERS(ch, SHADOW_BACKSTAB)+1; i++ ) sprintf( buf+strlen(buf), "*" ); for( i = 1; i < (5 - GET_POWERS(ch, SHADOW_BACKSTAB)+1); i++ ) sprintf( buf+strlen(buf), " "); if( GET_POWERS(ch, SHADOW_BACKSTAB) < 5 ) sprintf( buf+strlen(buf), "#n] You have attained [#1%d#n] of [#1%d#n] points to your next level.\n\r", GET_POWERS(ch, SHADOW_LEV_BS), ( SHADOW_LEV_GAIN * GET_POWERS(ch, SHADOW_BACKSTAB) ) ); else sprintf( buf+strlen(buf), "#n]\n\r" ); stc(buf,ch); sprintf( buf, "Trap [#1" ); for( i = 1; i < GET_POWERS(ch, SHADOW_TRAP)+1; i++ ) sprintf( buf+strlen(buf), "*" ); for( i = 1; i < (5 - GET_POWERS(ch, SHADOW_TRAP)+1); i++ ) sprintf( buf+strlen(buf), " "); if( GET_POWERS(ch, SHADOW_TRAP) < 5 ) sprintf( buf+strlen(buf), "#n] You have attained [#1%d#n] of [#1%d#n] points to your next level.\n\r", GET_POWERS(ch, SHADOW_LEV_TRAP), ( SHADOW_LEV_GAIN * GET_POWERS(ch, SHADOW_TRAP) ) ); else sprintf( buf+strlen(buf), "#n]\n\r" ); stc(buf,ch); sprintf( buf, "Rune [#1" ); for( i = 1; i < GET_POWERS(ch, SHADOW_RUNE)+1; i++ ) sprintf( buf+strlen(buf), "*" ); for( i = 1; i < (5 - GET_POWERS(ch, SHADOW_RUNE)+1); i++ ) sprintf( buf+strlen(buf), " "); if( GET_POWERS(ch, SHADOW_RUNE) < 5 ) sprintf( buf+strlen(buf), "#n] You have attained [#1%d#n] of [#1%d#n] points to your next level.\n\r", GET_POWERS(ch, SHADOW_LEV_RUNE), ( SHADOW_LEV_GAIN * GET_POWERS(ch, SHADOW_RUNE) ) ); else sprintf( buf+strlen(buf), "#n]\n\r" ); stc(buf,ch); sprintf( buf, "Tracking [#1" ); for( i = 1; i < GET_POWERS(ch, SHADOW_TRACK)+1; i++ ) sprintf( buf+strlen(buf), "*" ); for( i = 1; i < (5 - GET_POWERS(ch, SHADOW_TRACK)+1); i++ ) sprintf( buf+strlen(buf), " "); if( GET_POWERS(ch, SHADOW_TRACK) < 5 ) sprintf( buf+strlen(buf), "#n] You have attained [#1%d#n] of [#1%d#n] points to your next level.\n\r", GET_POWERS(ch, SHADOW_LEV_TRK), ( SHADOW_LEV_GAIN * GET_POWERS(ch, SHADOW_TRACK) ) ); else sprintf( buf+strlen(buf), "#n]\n\r" ); stc(buf,ch); return; } if( IS_CLASS(ch,CLASS_WOLF) ) { char buf[MAX_STRING_LENGTH]; banner2_to_char("Disciplines", ch); sprintf(buf," Bear [%2d] Lynx [%2d] Boar [%2d]\n\r", GET_POWERS(ch,DISC_BEAR),GET_POWERS(ch,DISC_LYNX),GET_POWERS(ch,DISC_BOAR)); stc(buf,ch); sprintf(buf," Owl [%2d] Spider [%2d] Wolf [%2d]\n\r", GET_POWERS(ch,DISC_OWL),GET_POWERS(ch,DISC_SPIDER),GET_POWERS(ch,DISC_WOLF)); stc(buf,ch); sprintf(buf," Hawk [%2d] Mantis [%2d] Raptor [%2d]\n\r", GET_POWERS(ch,DISC_HAWK),GET_POWERS(ch,DISC_MANTIS),GET_POWERS(ch,DISC_RAPTOR)); stc(buf,ch); sprintf(buf," Luna [%2d] Pain [%2d] Congregation [%2d]\n\r", GET_POWERS(ch,DISC_LUNA),GET_POWERS(ch,DISC_PAIN),GET_POWERS(ch,DISC_CONG)); stc(buf,ch); sprintf(buf," Discipline Points [%8d]\n\r",GET_POWERS(ch,WOLF_POINTS)); stc(buf,ch); return; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { char buf[MAX_STRING_LENGTH]; char age[MAX_STRING_LENGTH]; switch( GET_POWERS(ch,VAMP_AGE) ) { case AGE_NONE: sprintf(age,"Childe"); break; case AGE_CAITIFF: sprintf(age,"Caitiff"); break; case AGE_ANCILLA: sprintf(age,"Ancilla"); break; case AGE_ELDER: sprintf(age,"Elder"); break; case AGE_METHUSELAH: sprintf(age,"Methuselah"); break; default: sprintf(age,"BUGGED"); break; } banner2_to_char("Disciplines", ch); sprintf(buf," Obtenebration [%2d] Presence [%2d] Quietus [%2d]\n\r", GET_POWERS(ch,DISC_OBTEN),GET_POWERS(ch,DISC_PRESENCE),GET_POWERS(ch,DISC_QUIETUS)); stc(buf,ch); sprintf(buf," Thaumaturgy [%2d] Auspex [%2d] Dominate [%2d]\n\r", GET_POWERS(ch,DISC_THAUM),GET_POWERS(ch,DISC_AUSPEX),GET_POWERS(ch,DISC_DOMINATE)); stc(buf,ch); sprintf(buf," Obfuscate [%2d] Protean [%2d] Serpentis [%2d]\n\r", GET_POWERS(ch,DISC_OBFUSCATE),GET_POWERS(ch,DISC_PROTEAN),GET_POWERS(ch,DISC_SERPENTIS)); stc(buf,ch); sprintf(buf," Vicissitude [%2d] Daimoinon [%2d] Animalism [%2d]\n\r", GET_POWERS(ch,DISC_VICIS),GET_POWERS(ch,DISC_DAIMOINON),GET_POWERS(ch,DISC_ANIMALISM)); stc(buf,ch); sprintf(buf," Celerity [%2d] Potence [%2d] Fortitude [%2d]\n\r", GET_POWERS(ch,DISC_CELERITY),GET_POWERS(ch,DISC_POTENCE),GET_POWERS(ch,DISC_FORTITUDE)); stc(buf,ch); sprintf(buf," Discipline Points [%10d]\n\r",GET_POWERS(ch,VAMP_POINTS)); stc(buf,ch); sprintf(buf," Age [%10s]\n\r",age); stc(buf,ch); return; } /* add new classes here*/ else return; } //use this as a pass through to do all the work for advancing in a class void improve_class(CHAR_DATA *ch, int field) { int cost; char buf[MAX_STRING_LENGTH]; int (*handle)(); if( IS_NPC(ch) || IS_CLASS(ch, CLASS_NONE)) return; cost = 0; if( IS_CLASS(ch,CLASS_JEDI) ) { if( field == JEDI_STANCE ) { cost = 25000000; if( GET_POWERS(ch,field) >= 1 ) { stc("You have already learned all that is possible without combat.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_DEFENSE ) { cost = 25000000; if( GET_POWERS(ch,field) >= 1 ) { stc("You have already learned all that is possible without combat.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_ATTACK ) { cost = 25000000; if( GET_POWERS(ch,field) >= 1 ) { stc("You have already learned all that is possible without combat.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_HEAL ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_LIGHT)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_ABSORB ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_LIGHT)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_SHIELD ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_LIGHT)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_MIND_TRICK ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_LIGHT)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_SIGHT ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_LIGHT)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_SPEED ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_NEUTRAL)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_JUMP ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_NEUTRAL)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_PUSH ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_NEUTRAL)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_PULL ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_NEUTRAL)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_GRIP ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_DARK)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_RAGE ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_DARK)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_DRAIN ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_DARK)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_LIGHTNING ) { if( (handle = dlsym(jedilib,"snarf_jedi_total_force")) == NULL ) { sprintf(buf,"%s",dlerror()); log_string(buf); } else cost = (((*handle)(ch) + 1) * 150000); if( (GET_POWERS(ch,JEDI_DARK)/2) < GET_POWERS(ch,field) ) { stc("You lack proper discipline with the force to learn this.\n\r",ch); return; } if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_FORCE_POOL_MAX ) { cost = 100000; if( GET_POWERS(ch,field) >= 1000 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_LIGHT ) { cost = 500000; if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_DARK) >= 5 ) { stc("The force prevents you from furthering your knowledge, worshipper of darkness.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) + GET_POWERS(ch,JEDI_DARK) + GET_POWERS(ch,JEDI_NEUTRAL) >= 20 ) { stc("You are already as mastered with the force as you can become.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_NEUTRAL ) { cost = 500000; if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) + GET_POWERS(ch,JEDI_DARK) + GET_POWERS(ch,JEDI_NEUTRAL) >= 20 ) { stc("You are already as mastered with the force as you can become.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } else if( field == JEDI_DARK ) { cost = 500000; if( GET_POWERS(ch,field) >= 10 ) { stc("You have already learned all that is possible.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) >= 5 ) { stc("The force prevents you from furthering your knowledge, worshipper of light.\n\r",ch); return; } if( GET_POWERS(ch,JEDI_LIGHT) + GET_POWERS(ch,JEDI_DARK) + GET_POWERS(ch,JEDI_NEUTRAL) >= 20 ) { stc("You are already as mastered with the force as you can become.\n\r",ch); return; } if( ch->exp < cost ) { act2("You lack the $D exp to further your knowledge.",ch,NULL,NULL,TO_CHAR,cost); return; } stc("Your knowledge increases.\n\r",ch); GET_POWERS(ch,field)++; ch->exp -= cost; return; } return; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( field == DRAGON_MIGHT) { if( GET_POWERS(ch, DRAGON_MIGHT) >= 10) { stc("You have already as mighty as you can get.\n\r", ch); return; } cost = (GET_POWERS(ch, DRAGON_MIGHT)+1) * POINT_STEP; if( GET_POWERS(ch, DRAGON_POINTS) < cost) { stc("You lack the power to incease your might.\n\r", ch); return; } GET_POWERS(ch, DRAGON_MIGHT)++; GET_POWERS(ch, DRAGON_POINTS) -= cost; stc("Your might has increased.\n\r", ch); return; } if( field == DRAGON_TOUGH) { if( GET_POWERS(ch, DRAGON_TOUGH) >= 10) { stc("You have already as tough as you can get.\n\r", ch); return; } cost = (GET_POWERS(ch, DRAGON_TOUGH)+1) * POINT_STEP; if( GET_POWERS(ch, DRAGON_POINTS) < cost) { stc("You lack the power to incease your toughness.\n\r", ch); return; } GET_POWERS(ch, DRAGON_TOUGH)++; GET_POWERS(ch, DRAGON_POINTS) -= cost; stc("Your toughness has increased.\n\r", ch); return; } if( field == DRAGON_SPEED) { if( GET_POWERS(ch, DRAGON_SPEED) >= 10) { stc("You have already as fast as you can get.\n\r", ch); return; } cost = (GET_POWERS(ch, DRAGON_SPEED)+1) * POINT_STEP; if( GET_POWERS(ch, DRAGON_POINTS) < cost) { stc("You lack the power to incease your speed.\n\r", ch); return; } GET_POWERS(ch, DRAGON_SPEED)++; GET_POWERS(ch, DRAGON_POINTS) -= cost; stc("Your speed has increased.\n\r", ch); return; } if( field == DRAGON_MAGIC) { if( GET_POWERS(ch, DRAGON_MAGIC) >= 10) { stc("You have already mastered the magical arts.\n\r", ch); return; } cost = (GET_POWERS(ch, DRAGON_MAGIC)+1) * POINT_STEP; if( GET_POWERS(ch, DRAGON_POINTS) < cost) { stc("You lack the power to incease your magic.\n\r", ch); return; } GET_POWERS(ch, DRAGON_MAGIC)++; GET_POWERS(ch, DRAGON_POINTS) -= cost; stc("Your magical powers have increased.\n\r", ch); return; } if( field == DRAGON_AGE) { if( GET_POWERS(ch, DRAGON_AGE) >= 10000) { stc("Your age already surpasses all time.\n\r", ch); return; } cost = (GET_POWERS(ch, DRAGON_AGE)+1)*2; if( GET_POWERS(ch, DRAGON_POINTS) < cost) { stc("You lack the power to incease your age.\n\r", ch); return; } GET_POWERS(ch, DRAGON_AGE)++; GET_POWERS(ch, DRAGON_POINTS) -= cost; stc("You are one dragon year older.\n\r", ch); return; } return; } if( IS_CLASS(ch, CLASS_MONK)) { if( field == TECH_CHI) { cost = ((1 + GET_POWERS(ch, MONK_MAX_CHI)) * (CHI_COST*2)); if( ch->exp < cost) { sprintf( buf, "You need %d experience points for that.\n\r", cost); stc(buf, ch); return; } if( GET_POWERS(ch, MONK_MAX_CHI) >= MAX_CHI) { stc("Your spirit is already fully attunded.\n\r", ch); return; } ch->exp -= cost; GET_POWERS(ch, MONK_MAX_CHI)++; stc("Your spirit is more attuned with it's surroundings.\n\r", ch); return; } else if( field == MONK_MAX_FOC) { cost = ((1 + GET_POWERS(ch, field)) * (CHI_COST/10)); if( ch->exp < cost) { sprintf( buf, "You need %d experience points for that.\n\r", cost); stc(buf, ch); return; } if( GET_POWERS(ch, field) >= MAX_FOCUS) { stc("Your mind is fully focused.\n\r", ch); return; } ch->exp -= cost; GET_POWERS(ch, field)++; stc("Your mind has become more focused.\n\r", ch); return; } else { if( HAS_TECH(ch, field)) { stc("But you already have that power.\n\r", ch); return; } cost = (1+count_techniques(ch)) * 1000000; if( ch->exp < cost) { sprintf(buf, "You cant afford the %d experience cost.\n\r", cost); stc(buf, ch); return; } SET_BIT(GET_POWERS(ch,MONK_TECH), field); ch->exp -= cost; stc("You have learned a new skill.\n\r", ch); return; } return; } if( IS_CLASS(ch, CLASS_ALIEN)) { if( GET_POWERS(ch, field) >= 10) { stc("You have fully evolved.\n\r", ch); return; } cost = (GET_POWERS(ch, field)+1) * 500; if( GET_POWERS(ch, ALIEN_DNA) < cost) { stc("You lack the genetic material to evolve that further.\n\r", ch); return; } ch->pcdata->powers[field]++; ch->pcdata->powers[ALIEN_DNA] -= cost; stc("You absorb the DNA of others and have evolved.\n\r", ch); return; } if( IS_CLASS(ch,CLASS_WOLF) ) { if( GET_POWERS(ch,field) >= 10) { if( GET_POWERS(ch, field) > 10 ) GET_POWERS(ch, field) = 10; stc("You have fully mastered that discipline.\n\r",ch); return; } cost = (GET_POWERS(ch,field)+1) * 300; if( GET_POWERS(ch,WOLF_POINTS) < cost) { stc("You lack the discipline points to further learn that.\n\r",ch); return; } GET_POWERS(ch,field)++; GET_POWERS(ch,WOLF_POINTS) -= cost; stc("You further your knowledge of your discipline.\n\r",ch); return; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { if( GET_POWERS(ch,field) >= 10) { stc("You have fully mastered that discipline.\n\r",ch); return; } cost = (GET_POWERS(ch,field)+1) * 300; if( GET_POWERS(ch,VAMP_POINTS) < cost) { stc("You lack the discipline points to further learn that.\n\r",ch); return; } GET_POWERS(ch,field)++; GET_POWERS(ch,VAMP_POINTS) -= cost; stc("You further your knowledge of your discipline.\n\r",ch); return; } /* add new class stuff here */ else return; } int class_parry(CHAR_DATA *ch) { int chance; int (*function)(); chance = 0; if( IS_CLASS(ch,CLASS_DROW) ) { if( IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_SPEED) ) chance += 6; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_SPIDERFORM) ) chance += 6; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) chance -= 4; if( weather_info.sunlight == SUN_DARK ) chance++; else chance--; if( IS_SET(ch->newbits,NEW_DARKNESS) ) chance++; else chance--; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) chance += 2; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) chance++; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) chance++; else chance--; chance += drow->parr; } if( IS_CLASS(ch, CLASS_APOCRYPHIC)) { chance += 4; if( has_power_level(ch, SCHOOL_EARTH, 5)) chance += 10; if( has_power_level(ch, SCHOOL_WIND, 2)) chance += 7; if( has_power_level(ch, SCHOOL_WIND, 7)) chance += 7; if( has_power_level(ch, SCHOOL_LUCK, 2)) chance += number_range(-5, 20); if( has_power_level(ch, SCHOOL_ORDER, 5)) chance += 10; chance += apoc->parr; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) chance += GET_POWERS(ch, DRAGON_SPEED); chance += drag->parr; } if( IS_CLASS(ch,CLASS_JEDI) ) { chance += (GET_POWERS(ch,JEDI_DEFENSE)/2.5); chance += (GET_POWERS(ch,JEDI_RANK)/3); function = dlsym(jedilib,"jedi_eq_counter"); if( (*function)(ch,TRUE) > GET_POWERS(ch,JEDI_RANK) ) chance /= 2; else chance *= 1.5; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) chance -= 2; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) chance -= 4; chance += jedi->parr; } if( IS_CLASS(ch, CLASS_MONK)) { chance += GET_POWERS(ch, MONK_CURR_CHI); chance += (GET_POWERS(ch, MONK_CURR_FOC)/10); chance += number_range( 2, 5); chance += monk->parr; } if( IS_CLASS(ch, CLASS_ALIEN)) { chance += GET_POWERS(ch, ALIEN_SPEED)*1.10; chance += (GET_POWERS(ch,ALIEN_SIZE)/2); chance += alie->parr; } if( IS_SET(ch->warp, WARP_CLUMSY)) chance -= 10; if( IS_SET(ch->in_room->affected_by, AFF_ROOM_ICED)) { if( has_power(ch, SCHOOL_WATER)) chance += 10; else chance -= 10; } if((ch->in_room->area != NULL) && IS_SET(ch->in_room->area->affected_by, AFF_AREA_FLOOD)) { if( has_power(ch, SCHOOL_WATER)) chance += 10; else chance -= 10; } if( IS_CLASS(ch, CLASS_SHADOW) ) { chance += ( (GET_POWERS(ch, SHADOW_BACKSTAB) + GET_POWERS(ch, SHADOW_TRACK) + GET_POWERS(ch, SHADOW_TRAP) + GET_POWERS(ch, SHADOW_RUNE) )/2 ); chance += shad->parr; } if( IS_CLASS(ch, CLASS_WOLF) ) { chance += GET_POWERS(ch,DISC_LYNX)/5; chance += GET_POWERS(ch,DISC_MANTIS)/5; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH)) chance += 1; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) chance += 1; else chance -= 4; if( GET_POWERS(ch,WOLF_FORM) < 1 ) chance -= 2; if( GET_POWERS(ch,WOLF_FORM) == 3 ) chance += 2; chance += were->parr; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { chance += GET_POWERS(ch,DISC_CELERITY)/5; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_FLASHING)) chance++; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) chance += 1; else if( !IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) && !IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) chance -= 10; else chance -= 6; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) ) chance ++; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) chance ++; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BEAST) ) chance -= 3; switch( GET_POWERS(ch,VAMP_FORM) ) { case FORM_NORMAL: chance += 1; break; case FORM_SERPENT: chance += 2; break; case FORM_ZULO: chance -= 3; break; case FORM_DRAGON: chance -= 4; break; case FORM_BAT: chance += 3; break; case FORM_WOLF: chance += 2; break; case FORM_OBJECT: chance += 1; break; case FORM_MIST: chance -= 4; break; } switch( GET_POWERS(ch,VAMP_AGE) ) { default: break; case AGE_NONE: chance -= 3; break; case AGE_CAITIFF: chance -= 2; break; case AGE_ANCILLA: break; case AGE_ELDER: chance += 1; break; case AGE_METHUSELAH: chance += 2; break; } chance += vamp->parr; } if( ASKILL(ch,AS_DEFENSE) == 100 ) chance += 1; return chance; } int class_dodge(CHAR_DATA *ch) { int chance; int (*function)(); chance = 0; if( IS_CLASS(ch,CLASS_DROW) ) { if( IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_SPEED) ) chance += 6; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_SPIDERFORM) ) chance += 6; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) chance -= 4; if( weather_info.sunlight == SUN_DARK ) chance++; else chance--; if( IS_SET(ch->newbits,NEW_DARKNESS) ) chance++; else chance--; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) chance += 2; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) chance++; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) chance++; else chance--; chance += drow->dodg; } if( IS_CLASS(ch, CLASS_APOCRYPHIC)) { chance += 4; if( has_power_level(ch, SCHOOL_WATER, 6)) chance += 10; if( has_power_level(ch, SCHOOL_WIND, 1)) chance += 7; if( has_power_level(ch, SCHOOL_WIND, 6)) chance += 7; if( has_power_level(ch, SCHOOL_LUCK, 1)) chance += number_range(-5, 20); if( has_power_level(ch, SCHOOL_ORDER, 4)) chance += 10; if( has_power_level(ch, SCHOOL_LIFE, 4)) chance += 10; chance += apoc->dodg; } if( IS_CLASS(ch,CLASS_JEDI) ) { chance += (GET_POWERS(ch,JEDI_DEFENSE)/2.5); chance += (GET_POWERS(ch,JEDI_RANK)/3); function = dlsym(jedilib,"jedi_eq_counter"); if( (*function)(ch,TRUE) > GET_POWERS(ch,JEDI_RANK) ) chance /= 2; else chance *= 1.5; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) chance -= 2; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) chance -= 4; chance += jedi->dodg; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_HUMAN) { chance += GET_POWERS(ch, DRAGON_SPEED); } chance += drag->dodg; } if( IS_CLASS(ch, CLASS_MONK)) { chance += GET_POWERS(ch, MONK_CURR_CHI); chance += (GET_POWERS(ch, MONK_CURR_FOC)/10); chance += number_range( 2, 5); chance += monk->dodg; } if( IS_CLASS(ch, CLASS_ALIEN)) { chance += GET_POWERS(ch, ALIEN_SPEED)*1.10;; chance += (GET_POWERS(ch,ALIEN_SIZE)/2); chance += alie->dodg; } if( (ch->in_room->area != NULL) && IS_SET( ch->in_room->affected_by, AFF_ROOM_DEFILE)) { if( has_power(ch, SCHOOL_EVIL)) chance += 10; else chance -= 10; } if( (ch->in_room->area != NULL) && IS_SET(ch->in_room->area->affected_by, AFF_AREA_FLOOD)) { if( has_power(ch, SCHOOL_WATER)) chance += 10; else chance -= 10; } if( IS_CLASS(ch, CLASS_SHADOW) ) { chance += ( (GET_POWERS(ch, SHADOW_BACKSTAB) + GET_POWERS(ch, SHADOW_TRACK) + GET_POWERS(ch, SHADOW_TRAP) + GET_POWERS(ch, SHADOW_RUNE) )/2 ); chance += shad->dodg; } if( IS_CLASS(ch,CLASS_WOLF) ) { chance += GET_POWERS(ch,DISC_LYNX)/5; chance += GET_POWERS(ch,DISC_OWL)/5; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH)) chance += 1; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) chance += 1; else chance -= 4; if( GET_POWERS(ch,WOLF_FORM) < 1 ) chance -= 2; if( GET_POWERS(ch,WOLF_FORM) == 4 ) chance += 2; chance += were->dodg; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { chance += GET_POWERS(ch,DISC_CELERITY)/5; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_FLASHING)) chance++; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) chance += 1; else if( !IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) && !IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) chance -= 10; else chance -= 6; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) ) chance ++; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) chance ++; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BEAST) ) chance -= 3; switch( GET_POWERS(ch,VAMP_FORM) ) { case FORM_NORMAL: chance += 1; break; case FORM_SERPENT: chance += 2; break; case FORM_ZULO: chance -= 3; break; case FORM_DRAGON: chance -= 4; break; case FORM_BAT: chance += 3; break; case FORM_WOLF: chance += 2; break; case FORM_OBJECT: chance += 1; break; case FORM_MIST: chance -= 4; break; } switch( GET_POWERS(ch,VAMP_AGE) ) { default: break; case AGE_NONE: chance -= 3; break; case AGE_CAITIFF: chance -= 2; break; case AGE_ANCILLA: break; case AGE_ELDER: chance += 1; break; case AGE_METHUSELAH: chance += 2; break; } chance += vamp->dodg; } if( ASKILL(ch,AS_DEFENSE) == 100 ) chance += 1; return chance; } int class_num_attack(CHAR_DATA *ch) { int count = 0; if( ch->max_move >= 10000 ) count += (ch->max_move / 10000); if( IS_CLASS(ch,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) count++; else count--; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) count += 2; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) count++; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) count++; else count--; if( IS_SET(ch->newbits,NEW_DARKNESS) ) count++; else count--; if( IS_SET(GET_POWERS(ch,DROW_BITS),DPOWER_SPEED) ) count++; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_SPIDERFORM) ) count++; count += drow->atta; } if( IS_CLASS(ch, CLASS_APOCRYPHIC)) { count++; if( has_power_level(ch, SCHOOL_TIME, 1)) count += 1; if( has_power_level(ch, SCHOOL_TIME, 4)) count += 1; if( has_power_level(ch, SCHOOL_TIME, 6)) count += 1; if( number_range(1,5) == 2) count += 1; if( number_range(1,10) == 2) count += 1; if( number_range(1,20) == 2) count += 1; count += apoc->atta; } if( IS_CLASS(ch,CLASS_JEDI) ) { count += (GET_POWERS(ch,JEDI_ATTACK)/2.5); count += (GET_POWERS(ch,JEDI_RANK)/3); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SPEED) ) count++; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) if( number_range(1,6) == 4 ) count++; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) count += 2; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) count -= 4; count += jedi->atta; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) count += (GET_POWERS(ch, DRAGON_SPEED) / 3); else count += (GET_POWERS(ch, DRAGON_SPEED) / 1.25); count += drag->atta; } if( IS_CLASS(ch, CLASS_MONK)) { count += GET_POWERS(ch, MONK_CURR_CHI); count += monk->atta; } if( IS_CLASS(ch, CLASS_ALIEN)) { count += (GET_POWERS(ch, ALIEN_SPEED) / 5); count += GET_POWERS(ch, ALIEN_PRIMAL) / 2; count += alie->atta; } if( IS_CLASS(ch, CLASS_SHADOW) ) { count += 2; count += shad->atta; } if( IS_CLASS(ch,CLASS_WOLF) ) { count += GET_POWERS(ch,DISC_SPIDER)/5; count += GET_POWERS(ch,DISC_HAWK)/5; if( GET_POWERS(ch,WOLF_FORM) < 1 ) count -= 1; if( GET_POWERS(ch,WOLF_FORM) == 2 ) count -= 3; if( GET_POWERS(ch,WOLF_FORM) == 5 ) count += 1; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) count += 2; else count -= 4; count += were->atta; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { count += GET_POWERS(ch,DISC_CELERITY)/6; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_FLASHING) ) count++; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BAAL) ) count++; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) count++; else count -= 10; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) ) count -= 5; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) count += 1; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BEAST) ) count += 3; switch( GET_POWERS(ch,VAMP_FORM) ) { case FORM_NORMAL: break; case FORM_SERPENT: count += 2; break; case FORM_ZULO: count -= 3; break; case FORM_DRAGON: count -= 4; break; case FORM_BAT: count += 1; break; case FORM_WOLF: count += 1; break; case FORM_OBJECT: break; case FORM_MIST: count -= 4; break; } switch( GET_POWERS(ch,VAMP_AGE) ) { default: break; case AGE_NONE: count -= 2; break; case AGE_CAITIFF: count -= 1; break; case AGE_ANCILLA: break; case AGE_ELDER: count += 1; break; case AGE_METHUSELAH: count += 2; break; } count += vamp->atta; } if( is_affected(ch,skill_lookup("haste")) ) count += 2; if( is_affected(ch,skill_lookup("slow")) ) count -= 2; if( ASKILL(ch,AS_ATTACK) >= 75 ) count++; if( ASKILL(ch,AS_ATTACK) == 100 ) count++; if( IS_SET(ch->warp,WARP_QUICK) ) count++; if( IS_CLASS(ch, CLASS_DRAGON) && GET_POWERS(ch,DRAGON_FORM) == DRAGON_FORM_DRAGON) if( count > 3 ) count = 3; if( !IS_NPC(ch) && IS_CLASS(ch, CLASS_DRAGON) && ch->pcdata->held != NULL && ch->pcdata->held[0] != '\0') count = 1; if( !IS_NPC(ch) && ch->pcdata->held_by != NULL && ch->pcdata->held_by[0] != '\0') count /= 2; if( count < 1 ) count = 1; return count; } int class_mod_damage(CHAR_DATA *ch, CHAR_DATA *victim, int dam) { int i; if( !IS_NPC(ch) ) for( i = 0; i < ch->race; i++ ) dam *= 1.01; if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) dam *= 1.025; else dam *= 0.975; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) dam *= 1.05; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) dam *= 1.025; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) dam *= 1.025; else dam *= 0.95; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) dam *= 1.05; if( IS_SET(ch->newbits,NEW_DARKNESS) ) dam *= 1.10; else dam *= 0.90; dam *= drow->powe; } if( !IS_NPC(victim) && IS_CLASS(victim,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) dam *= 0.975; else dam *= 1.025; if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_WAR) || victim->generation == 1 ) dam *= 0.95; else if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_MAG) ) dam *= 0.975; else if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_CLE) ) dam *= 0.975; else dam *= 1.05; if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_HATE) ) dam *= 1.05; if( IS_SET(victim->newbits,NEW_DARKNESS) ) dam *= 0.90; else dam *= 1.10; if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_SHIELD) ) dam *= 0.975; if( IS_SET(GET_POWERS(victim,DROW_BITS),DROW_TOUGHSKIN) ) dam *= 0.95; dam *= drow->toug; } if(!IS_NPC(ch) && IS_CLASS(ch, CLASS_APOCRYPHIC)) { dam *= 1.05; if( has_power_level(ch, SCHOOL_EARTH, 5)) dam *= 1.10; if( has_power_level(ch, SCHOOL_LUCK, 4)) dam += number_range( -300, 500); if( has_power_level(ch, SCHOOL_TIME, 2)) dam *= 1.10; dam *= apoc->powe; } if( !IS_NPC(victim) && IS_CLASS(victim, CLASS_APOCRYPHIC)) { dam *= 0.95; if( has_power_level(victim, SCHOOL_LIFE, 5)) dam *= 0.90; if( has_power_level(victim, SCHOOL_DEATH, 5)) dam *= 0.90; if( has_power_level(victim, SCHOOL_PLANT, 1)) dam *= 0.90; dam *= apoc->toug; } if( !IS_NPC(ch) && IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) { for( i = 0; i < GET_POWERS(ch,DRAGON_AGE); i += 250 ) dam *= 1.01; switch( GET_POWERS(ch, DRAGON_MIGHT)) { case 0: dam *= 0.925; break; case 1: dam *= 0.95; break; case 2: dam *= 0.975; break; case 3: break; case 4: dam *= 1.025; break; case 5: dam *= 1.05; break; case 6: dam *= 1.075; break; case 7: dam *= 1.10; break; case 8: dam *= 1.125; break; case 9: dam *= 1.15; break; case 10: dam *= 1.175; break; default: break; } } else { switch( GET_POWERS(ch, DRAGON_MIGHT)) { case 0: dam *= 0.70; break; case 1: dam *= 0.75; break; case 2: dam *= 0.8; break; case 3: dam *= 0.85; break; case 4: dam *= 0.9; break; case 5: dam *= 0.95; break; case 6: break; case 7: dam *= 1.025; break; case 8: dam *= 1.05; break; case 9: dam *= 1.075; break; case 10: dam *= 1.10; break; default: break; } } dam *= drag->powe; } if( !IS_NPC(victim) && IS_CLASS( victim, CLASS_DRAGON)) { if( GET_POWERS(victim, DRAGON_FORM) == DRAGON_FORM_DRAGON) { for( i = 0; i < GET_POWERS(victim,DRAGON_AGE); i += 250 ) dam *= 0.99; switch( GET_POWERS(victim, DRAGON_TOUGH)) { case 0: dam *= 1.10; break; case 1: dam *= 1.05; break; case 2: break; case 3: dam *= 0.975; break; case 4: dam *= 0.95; break; case 5: dam *= 0.85; break; case 6: dam *= 0.8; break; case 7: dam *= 0.75; break; case 8: dam *= 0.7; break; case 9: dam *= 0.65; break; case 10: dam *= 0.6; break; default: break; } } else { switch( GET_POWERS(victim, DRAGON_SPEED)) { case 0: dam *= 1.5; break; case 1: dam *= 1.4; break; case 3: dam *= 1.3; break; case 4: dam *= 1.2; break; case 5: dam *= 1.1; break; case 6: break; case 7: dam *= 0.95; break; case 8: dam *= 0.9; break; case 9: dam *= 0.85; break; case 10: dam *= 0.8; break; default: break; } } dam *= drag->toug; } if( !IS_NPC(ch) && IS_CLASS(ch, CLASS_MONK)) { dam *= 1 + (GET_POWERS(ch, MONK_CURR_CHI)/10); dam *= monk->powe; } if( !IS_NPC(victim) && IS_CLASS(victim, CLASS_MONK)) { if( dam > 0 && GET_POWERS(victim, MONK_CURR_CHI) > 0) dam /= GET_POWERS(victim, MONK_CURR_CHI); dam *= monk->toug; } if( !IS_NPC(ch) && IS_CLASS(ch, CLASS_ALIEN)) { dam *= ((float) (1 + GET_POWERS(ch, ALIEN_STR) * 0.045)); dam *= ((float) (1 + GET_POWERS(ch, ALIEN_SIZE) * 0.045)); if( GET_POWERS(ch, ALIEN_CLASS) == ALIEN_DRONE) dam *= 0.9; if( GET_POWERS(ch, ALIEN_CLASS) == ALIEN_RUN) dam *= 1.0; if( GET_POWERS(ch, ALIEN_CLASS) == ALIEN_PRAE) dam *= 1.10; if( (GET_POWERS(ch, ALIEN_CLASS) == ALIEN_SCORP) || (GET_POWERS(ch, ALIEN_CLASS) == ALIEN_GOR)) dam *= 1.15; dam *= alie->powe; } if( !IS_NPC(victim) && IS_CLASS(victim, CLASS_ALIEN)) { dam *= ( (float) (1 - (GET_POWERS(victim, ALIEN_ARMOR) * 0.020))); dam *= ( (float) (1 - (GET_POWERS(victim, ALIEN_PAIN) * 0.020))); if( GET_POWERS(victim, ALIEN_CLASS) == ALIEN_DRONE) dam *= 1.10; if( GET_POWERS(victim, ALIEN_CLASS) == ALIEN_RUN) dam *= 1.05; if( GET_POWERS(victim, ALIEN_CLASS) == ALIEN_PRAE) dam *= 0.95; if( (GET_POWERS(victim, ALIEN_CLASS) == ALIEN_SCORP) || (GET_POWERS(victim, ALIEN_CLASS) == ALIEN_GOR)) dam *= 0.90; dam *= alie->toug; } if( !IS_NPC(ch) && IS_CLASS(ch, CLASS_SHADOW) ) { dam *= ( (float)( ch->max_move / 100000 ) + 1.3 ); dam *= shad->powe; } if( !IS_NPC(victim) && IS_CLASS(victim, CLASS_SHADOW) ) {/* if( ( (float)victim->hit / (float)victim->max_hit ) < 0.08 ) dam *= 0.08; else*/ dam *= ( (float)victim->hit / (float)victim->max_hit ); dam *= shad->toug; } if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_WOLF) ) { if( GET_POWERS(ch,DISC_BEAR) > 0 ) dam *= 1.015; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_REND) ) dam *= 1.015; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SENSES) ) dam *= 1.015; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SCLAW) ) dam *= 1.015; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_FCLAW) ) dam *= 1.015; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) dam *= 1.015; else dam *= .925; if( GET_POWERS(ch,WOLF_FORM) < 1 ) dam *= .85; if( GET_POWERS(ch,WOLF_FORM) == 1 ) dam *= 1.05; dam *= were->powe; } if( !IS_NPC(victim) && IS_CLASS(victim,CLASS_WOLF) ) { if( IS_SET(GET_POWERS(victim,WOLF_BITS),BIT_TOUGH) ) dam *= .975; if( GET_POWERS(victim,DISC_BOAR) > 0 ) dam *= .95; if( GET_POWERS(victim,DISC_PAIN) > 0 ) dam *= ( (float) (1 - (GET_POWERS(victim,DISC_PAIN) * 0.01))); if( IS_SET(GET_POWERS(victim,WOLF_BITS),BIT_SHIELD) ) dam *= .975; if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) dam *= .95; else dam *= 1.015; if( GET_POWERS(victim,WOLF_FORM) < 1 ) dam *= 1.015; if( GET_POWERS(victim,WOLF_FORM) == 2 ) dam *= .95; dam *= were->toug; } if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_VAMPIRE) ) { if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) ) dam *= .95; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BEAST) ) dam *= 1.05; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) dam *= 1.025; if( GET_POWERS(ch,DISC_POTENCE) > 0 ) dam *= ( (float) (1 + (GET_POWERS(ch,DISC_POTENCE) * 0.01))); if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) dam *= 1.025; else if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_GOLCANDA) || IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_DARK_GOLC) ) dam *= .85; else dam *= .75; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_BAAL) ) dam *= 1.015; switch( GET_POWERS(ch,VAMP_FORM) ) { case FORM_NORMAL: dam *= 1.00; break; case FORM_DRAGON: dam *= 1.015; break; case FORM_ZULO: dam *= 1.005; break; case FORM_BAT: dam *= 0.90; break; case FORM_SERPENT: dam *= 0.98; break; case FORM_OBJECT: dam *= 1.00; break; case FORM_MIST: dam *= .90; break; case FORM_WOLF: dam *= 1.015; break; } switch( GET_POWERS(ch,VAMP_AGE) ) { case AGE_NONE: dam *= 0.95; break; case AGE_CAITIFF: dam *= 0.97; break; case AGE_ANCILLA: dam *= 0.99; break; case AGE_ELDER: dam *= 1.01; break; case AGE_METHUSELAH: dam *= 1.03; break; } switch( ch->generation ) { default: dam *= 1.00; break; case 4: dam *= 1.01; break; case 3: dam *= 1.02; break; case 2: dam *= 1.03; break; case 1: dam *= 1.05; break; } dam *= vamp->powe; } if( !IS_NPC(victim) && IS_CLASS(victim,CLASS_VAMPIRE) ) { if( IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_SCALES) ) dam *= .98; if( IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_GOLCANDA) ) dam *= .95; if( IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_BEAST) ) dam *= 1.05; if( IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_DARK_GOLC) ) dam *= .975; if( GET_POWERS(victim,DISC_FORTITUDE) > 0 ) dam *= ( (float) (1 - (GET_POWERS(victim,DISC_FORTITUDE) * 0.01))); if( weather_info.sunlight == SUN_SET || weather_info.sunlight == SUN_DARK ) dam *= .95; else if( !IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_GOLCANDA) && !IS_SET(GET_POWERS(victim,VAMP_BITS),BIT_DARK_GOLC) ) dam *= 1.05; switch( GET_POWERS(victim,VAMP_FORM) ) { case FORM_NORMAL: dam *= 1.00; break; case FORM_DRAGON: dam *= .98; break; case FORM_ZULO: dam *= .99; break; case FORM_BAT: dam *= 1.10; break; case FORM_SERPENT: dam *= 1.015; break; case FORM_OBJECT: dam *= 1.00; break; case FORM_MIST: dam *= .90; break; case FORM_WOLF: dam *= 1.015; break; } switch( GET_POWERS(victim,VAMP_AGE) ) { case AGE_NONE: dam *= 1.05; break; case AGE_CAITIFF: dam *= 1.03; break; case AGE_ANCILLA: dam *= 1.01; break; case AGE_ELDER: dam *= 0.99; break; case AGE_METHUSELAH: dam *= 0.97; break; } switch( victim->generation ) { default: dam *= 1.00; break; case 4: dam *= 1.03; break; case 3: dam *= 1.02; break; case 2: dam *= 0.97; break; case 1: dam *= 0.95; break; } dam *= vamp->toug; } if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_JEDI) ) { for( i = 0; i < GET_POWERS(ch,JEDI_ATTACK); i++ ) dam *= 1.05; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) dam *= 1.15; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) dam *= 1.05; switch( GET_POWERS(ch,JEDI_STANCE_STYLE) ) { case JEDI_STYLE_NONE: break; case JEDI_STYLE_LIGHT: dam *= 0.95; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= 1.05; break; } dam *= jedi->powe; } if( !IS_NPC(victim) && IS_CLASS(victim,CLASS_JEDI) ) { for( i = 0; i < GET_POWERS(victim,JEDI_DEFENSE); i++ ) dam *= 0.975; if( IS_SET(GET_POWERS(victim,JEDI_BITS),JEDI_RAGE) ) dam *= 0.975; if( IS_SET(GET_POWERS(victim,JEDI_BITS),JEDI_SHIELD) ) dam *= 0.975; if( IS_SET(GET_POWERS(victim,JEDI_BITS),JEDI_UBER) ) dam *= 0.975; if( IS_SET(GET_POWERS(victim,JEDI_BITS),JEDI_TOUGH) ) dam *= 0.95; if( IS_SET(GET_POWERS(victim,JEDI_BITS),JEDI_UNRAGE) ) dam *= 1.15; switch( GET_POWERS(victim,JEDI_STANCE_STYLE) ) { case JEDI_STYLE_NONE: break; case JEDI_STYLE_LIGHT: dam *= 0.95; break; case JEDI_STYLE_MEDIUM: break; case JEDI_STYLE_HEAVY: dam *= 1.05; break; } dam *= jedi->toug; } return dam; } void get_points(CHAR_DATA *ch, CHAR_DATA *victim) { char buf[MAX_STRING_LENGTH]; int gain = 0; if( IS_NPC(ch)) return; if( !IS_NPC(victim) && IS_HERO(ch) ) { gain = ( victim->race * 15000 ); if( gain <= 0 ) gain = 5000; gain *= global_exp_mult; gain *= exp_who; ch->pcdata->apoints += gain; sprintf(buf, "You recieve %d ability points.\n\r", gain ); stc(buf,ch); } if( IS_CLASS(ch,CLASS_DROW)) { if( IS_NPC(victim)) { if( victim->level < 10 ) return; gain = number_range( 10, victim->level); gain *= global_exp_mult; gain *= exp_who; sprintf(buf,"You have gained %d drow points.\n\r", gain); stc( buf, ch); GET_POWERS(ch, DROW_POINTS) += gain; return; } else { gain = victim->race; gain *= global_exp_mult; gain *= exp_who; sprintf( buf, "You have gained %d drow points.\n\r", gain); stc( buf, ch); GET_POWERS(ch, DROW_POINTS) += gain; return; } return; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( IS_NPC(victim)) { if( victim->level < 10 ) return; gain = number_range( 10, victim->level); gain *= global_exp_mult; gain *= exp_who; sprintf(buf,"You have gained %d dragon points.\n\r", gain); stc( buf, ch); GET_POWERS(ch, DRAGON_POINTS) += gain; return; } else { gain = victim->race; gain *= global_exp_mult; gain *= exp_who; sprintf( buf, "You have gained %d dragon points.\n\r", gain); stc( buf, ch); GET_POWERS(ch, DRAGON_POINTS) += gain; return; } return; } if( IS_CLASS(ch, CLASS_ALIEN)) { if( IS_NPC(victim)) { if( victim->level < 10) return; gain = number_range( 10, victim->level); gain *= global_exp_mult; gain *= exp_who; GET_POWERS(ch, ALIEN_DNA) += gain; sprintf(buf,"You have absorbed %d points of DNA from your victim.\n\r",gain); stc(buf,ch); return; } else { gain = victim->race; gain *= global_exp_mult; gain *= exp_who; sprintf(buf,"You have absorbed %d points of DNA from your victim.\n\r",gain); stc(buf,ch); return; } return; } if( IS_CLASS(ch,CLASS_WOLF) || IS_CLASS(ch,CLASS_VAMPIRE) ) { if( IS_NPC(victim) ) { if( victim->level < 10 ) return; gain = number_range( 10, victim->level); gain *= global_exp_mult; gain *= exp_who; if( IS_CLASS(ch,CLASS_WOLF) ) GET_POWERS(ch,WOLF_POINTS) += gain; else if( IS_CLASS(ch,CLASS_VAMPIRE) ) GET_POWERS(ch,VAMP_POINTS) += gain; sprintf(buf,"You have gained %d discipline points.\n\r",gain); stc(buf,ch); return; } else { gain = victim->race; gain *= global_exp_mult; gain *= exp_who; if( IS_CLASS(ch,CLASS_WOLF) ) GET_POWERS(ch,WOLF_POINTS) += gain; if( IS_CLASS(ch,CLASS_VAMPIRE) ) GET_POWERS(ch,VAMP_POINTS) += gain; sprintf(buf,"You have gained %d discipline points.\n\r",gain); stc(buf,ch); return; } } /* add other classes here*/ return; } void class_attributes(CHAR_DATA *ch) { int age = 0; int value = 0; age = GET_POWERS(ch, DRAGON_AGE); if( age < 10 ) value = 0; else if( age >= 10 && age < 100 ) value = 1; else if( age >= 100 && age < 150 ) value = 2; else if( age >= 150 && age < 200 ) value = 3; else if( age >= 200 && age < 250 ) value = 4; else if( age >= 250 && age < 300 ) value = 5; else if( age >= 300 && age < 350 ) value = 6; else if( age >= 350 ) value = 7; ch->pcdata->mod_str = value; ch->pcdata->mod_dex = value; ch->pcdata->mod_con = value; ch->pcdata->mod_int = value; ch->pcdata->mod_wis = value; return; } int class_hitroll(CHAR_DATA *ch) { int value = 0; value += ch->hitroll; if( !IS_NPC(ch) ) { value += ASKILL(ch,AS_ATTACK); value += str_app[get_curr_str(ch)].tohit; value += ch->rage; value += ch->pkill; if( IS_CLASS(ch,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) value += 300; else value -= 300; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) value += 100; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) value += 50; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) value += 50; else value -= 150; value += drow->hitr; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) value += 300; } if( IS_CLASS(ch, CLASS_DRAGON) ) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) { value += (GET_POWERS(ch,DRAGON_AGE) / 20 ); value += (GET_POWERS(ch, DRAGON_SPEED)*300); } value += drag->hitr; } if( IS_CLASS(ch,CLASS_JEDI) ) { value += (GET_POWERS(ch,JEDI_ATTACK) * 5); value += (GET_POWERS(ch,JEDI_RANK) * 5); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) value += 100; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) value += 200; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) value -= 400; value += jedi->hitr; } if( IS_CLASS(ch,CLASS_APOCRYPHIC) ) { if( has_power_level(ch, SCHOOL_FIRE, 1)) value += 150; if( has_power_level(ch, SCHOOL_WIND, 3)) value += 150; if( has_power_level(ch, SCHOOL_WIND, 8)) value += 150; if( has_power_level(ch, SCHOOL_SPACE, 6)) value += 150; if( has_power_level(ch, SCHOOL_ANIMAL, 3)) value += 150; if( has_power_level(ch, SCHOOL_ANIMAL, 6)) value += 150; if( has_power_level(ch, SCHOOL_LUCK, 5)) value += number_range(-10, 250); if( has_power_level(ch, SCHOOL_ORDER, 6)) value += 150; value += apoc->hitr; } if( IS_CLASS(ch, CLASS_ALIEN)) { value += GET_POWERS(ch, ALIEN_SENSE) * 8; value += GET_POWERS(ch, ALIEN_SPEED) * 8; value += alie->hitr; } if( IS_SET(ch->in_room->affected_by, AFF_ROOM_DEFILE)) { if( !has_power(ch, SCHOOL_EVIL)) value -= 100; else value += 50; } if( IS_CLASS(ch, CLASS_MONK)) { value += (GET_POWERS(ch, MONK_CURR_CHI) * 150); value += monk->hitr; } if( IS_CLASS(ch, CLASS_SHADOW) ) { value += ( ch->max_move / 200 ); value += shad->hitr; } if( IS_CLASS(ch,CLASS_WOLF) ) { value += 3*(GET_POWERS(ch,DISC_BEAR) + GET_POWERS(ch,DISC_LYNX) + GET_POWERS(ch,DISC_BOAR) + GET_POWERS(ch,DISC_OWL) + GET_POWERS(ch,DISC_SPIDER) + GET_POWERS(ch,DISC_WOLF) + GET_POWERS(ch,DISC_HAWK) + GET_POWERS(ch,DISC_MANTIS) + GET_POWERS(ch,DISC_RAPTOR) + GET_POWERS(ch,DISC_LUNA) + GET_POWERS(ch,DISC_PAIN) + GET_POWERS(ch,DISC_CONG) ); value += were->hitr; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { value += (GET_POWERS(ch,DISC_CELERITY) * 12); value += vamp->hitr; } } if( value < 0 ) value = 1; return value; } int class_damroll(CHAR_DATA *ch) { int value = 0; value += ch->damroll; if( !IS_NPC(ch) ) { value += ASKILL(ch,AS_ATTACK); value += str_app[get_curr_str(ch)].todam; value += ch->rage; value += ch->pkill; if( IS_CLASS(ch,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) value += 300; else value -= 300; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) value += 100; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) value += 50; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) value += 50; else value -= 150; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) value += 300; value += drow->damr; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) { value += (GET_POWERS(ch,DRAGON_AGE) / 20 ); value += (GET_POWERS(ch, DRAGON_MIGHT) * 300); } value += drag->damr; } if( IS_CLASS(ch,CLASS_JEDI) ) { value += (GET_POWERS(ch,JEDI_ATTACK) * 5); value += (GET_POWERS(ch,JEDI_RANK) * 5); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) value += 100; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) value += 200; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) value -= 400; value += jedi->damr; } if( IS_CLASS(ch, CLASS_APOCRYPHIC)) { if( has_power_level( ch, SCHOOL_FIRE, 3)) value += 150; if( has_power_level( ch, SCHOOL_WATER, 3)) value += 150; if( has_power_level(ch, SCHOOL_EARTH, 1)) value += 150; if( has_power_level(ch, SCHOOL_EVIL, 5)) value += 150; if( has_power_level(ch, SCHOOL_ANIMAL, 4)) value += 150; if( has_power_level(ch, SCHOOL_LUCK, 4)) value += number_range(-10, 250); if( has_power_level(ch, SCHOOL_CHAOS, 3)) value += 150; if( has_power_level(ch, SCHOOL_DEATH, 3)) value += 150; value += apoc->damr; } if( IS_CLASS(ch, CLASS_ALIEN)) { value += GET_POWERS(ch, ALIEN_STR) * 8; value += GET_POWERS(ch, ALIEN_SIZE) * 8; value += GET_POWERS(ch, ALIEN_PRIMAL) *8; value += alie->damr; } if( IS_SET(ch->in_room->affected_by, AFF_ROOM_DEFILE)) { if( !has_power(ch, SCHOOL_EVIL)) value -= 100; else value += 50; } if( IS_CLASS(ch, CLASS_SHADOW) ) { value += ( ch->max_hit / 200 ); value += shad->damr; } if( IS_CLASS(ch,CLASS_WOLF) ) { value += 3*(GET_POWERS(ch,DISC_BEAR) + GET_POWERS(ch,DISC_LYNX) + GET_POWERS(ch,DISC_BOAR) + GET_POWERS(ch,DISC_OWL) + GET_POWERS(ch,DISC_SPIDER) + GET_POWERS(ch,DISC_WOLF) + GET_POWERS(ch,DISC_HAWK) + GET_POWERS(ch,DISC_MANTIS) + GET_POWERS(ch,DISC_RAPTOR) + GET_POWERS(ch,DISC_LUNA) + GET_POWERS(ch,DISC_PAIN) + GET_POWERS(ch,DISC_CONG) ); value += were->damr; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { value += (GET_POWERS(ch,DISC_POTENCE) * 12); value += vamp->damr; } } if( value < 0 ) value = 1; return value; } int class_ac(CHAR_DATA *ch) { int value = 0; value -= ch->armor; if( !IS_NPC(ch) ) { value += (ASKILL(ch,AS_DEFENSE)*3); value -= dex_app[get_curr_dex(ch)].defensive; value -= ch->rage; value += ch->pkill; if( IS_CLASS(ch,CLASS_DROW) ) { if( weather_info.sunlight == SUN_DARK ) value += 300; else value -= 300; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_WAR) || ch->generation == 1 ) value += 100; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_MAG) ) value += 50; else if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_CLE) ) value += 50; else value -= 150; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_SHIELD) ) value += 100; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_TOUGHSKIN) ) value += 100; if( IS_SET(GET_POWERS(ch,DROW_BITS),DROW_HATE) ) value -= 150; value -= drow->armo; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) == DRAGON_FORM_DRAGON) { value += (GET_POWERS(ch,DRAGON_AGE) / 10 ); value += (GET_POWERS( ch, DRAGON_TOUGH) * 250); } value -= drag->armo; } if( IS_CLASS(ch,CLASS_JEDI) ) { value += (GET_POWERS(ch,JEDI_DEFENSE) * 5); value += (GET_POWERS(ch,JEDI_RANK) * 5); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_SHIELD) ) value += 200; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) value += 100; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_RAGE) ) value += 400; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) value -= 800; value -= jedi->armo; } if( IS_CLASS(ch, CLASS_APOCRYPHIC)) { if( has_power_level(ch, SCHOOL_SPACE, 5)) value += 150; if( has_power_level(ch, SCHOOL_PLANT, 1)) value += 150; if( has_power_level(ch, SCHOOL_LIFE, 3)) value += 150; if( has_power_level(ch, SCHOOL_DEATH, 4)) value += 150; value -= apoc->armo; } if( IS_CLASS(ch, CLASS_ALIEN)) { value += GET_POWERS(ch, ALIEN_SPEED) * 10; value += GET_POWERS(ch, ALIEN_ARMOR) * 10; value -= alie->armo; } if( IS_CLASS(ch, CLASS_MONK)) { value += GET_POWERS(ch, MONK_CURR_CHI) * 200; value -= monk->armo; } if( IS_CLASS(ch, CLASS_SHADOW) ) { value += ( ( ch->max_hit + ch->max_move ) / 400 ); value -= shad->armo; } if( IS_CLASS(ch,CLASS_WOLF) ) { value += 1.25*(GET_POWERS(ch,DISC_BEAR) + GET_POWERS(ch,DISC_LYNX) + GET_POWERS(ch,DISC_BOAR) + GET_POWERS(ch,DISC_OWL) + GET_POWERS(ch,DISC_SPIDER) + GET_POWERS(ch,DISC_WOLF) + GET_POWERS(ch,DISC_HAWK) + GET_POWERS(ch,DISC_MANTIS) + GET_POWERS(ch,DISC_RAPTOR) + GET_POWERS(ch,DISC_LUNA) + GET_POWERS(ch,DISC_PAIN) + GET_POWERS(ch,DISC_CONG) ); if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_SHIELD) ) value += 100; if( IS_SET(GET_POWERS(ch,WOLF_BITS),BIT_VANISH) ) value += 100; value -= were->armo; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_SCALES) ) value += 100; if( IS_SET(GET_POWERS(ch,VAMP_BITS),BIT_EXO) ) value += 100; value += (GET_POWERS(ch,DISC_FORTITUDE) * 12); value -= vamp->armo; } } value *= -1; return value; } void class_regen(CHAR_DATA *ch) { int gain = 0; if( IS_NPC(ch)) return; if( ch->fighting != NULL) return; gain = (ch->max_hit / number_range(150,190)); switch ( ch->position ) { case POS_MEDITATING: gain *= 1.3; break; case POS_SLEEPING: gain *= 1.5; break; case POS_RESTING: gain *= 1.3; break; } if(is_affected(ch, skill_lookup("regeneration"))) gain *= 1.5; if(ch->stasis) gain *= 2; if( IS_SET(ch->warp, WARP_REGEN)) gain *= 1.25; if( IS_SET(ch->warp, WARP_SLOWHEAL)) gain /= 1.25; if( IS_CLASS(ch,CLASS_DROW) ) { gain *= 1.15; gain *= drow->rege; } if( IS_CLASS(ch,CLASS_VAMPIRE) ) { switch( GET_POWERS(ch,VAMP_AGE) ) { default: break; case AGE_NONE: break; case AGE_CAITIFF: gain *= 1.1; break; case AGE_ANCILLA: gain *= 1.2; break; case AGE_ELDER: gain *= 1.4; break; case AGE_METHUSELAH: gain *= 1.8; break; } if( GET_POWERS(ch,VAMP_BLOOD) > blood_max(ch) ) GET_POWERS(ch,VAMP_BLOOD) = blood_max(ch); gain *= vamp->rege; } if( IS_CLASS(ch, CLASS_DRAGON)) { if( GET_POWERS(ch, DRAGON_FORM) != DRAGON_FORM_DRAGON) gain *= 1.5; else gain *= 1.1; gain *= drag->rege; } if( IS_CLASS(ch,CLASS_JEDI) ) { switch( GET_POWERS(ch,JEDI_RANK) ) { default: gain *= 1.0; break; case JEDI_RANK_APPRENTICE: gain *= 1.0; break; case JEDI_RANK_INITIATE: gain *= 1.1; break; case JEDI_RANK_GUARDIAN: gain *= 1.2; break; case JEDI_RANK_KNIGHT: gain *= 1.4; break; case JEDI_RANK_MASTER: gain *= 1.6; break; case JEDI_RANK_LORD: gain *= 1.8; break; } GET_POWERS(ch,JEDI_COMBO_OLD) = 0; GET_POWERS(ch,JEDI_COMBO_NEW) = 0; if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UBER) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_UBER); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_TOUGH) ) REM_BIT_POWERS(ch,JEDI_BITS,JEDI_TOUGH); if( GET_POWERS(ch,JEDI_FORCE_POOL) < GET_POWERS(ch,JEDI_FORCE_POOL_MAX) ) GET_POWERS(ch,JEDI_FORCE_POOL) += number_range(10,25); if( GET_POWERS(ch,JEDI_FORCE_POOL) > GET_POWERS(ch,JEDI_FORCE_POOL_MAX) ) GET_POWERS(ch,JEDI_FORCE_POOL) = GET_POWERS(ch,JEDI_FORCE_POOL_MAX); if( IS_SET(GET_POWERS(ch,JEDI_BITS),JEDI_UNRAGE) ) if( GET_POWERS(ch,JEDI_FORCE_POOL) >= GET_POWERS(ch,JEDI_FORCE_POOL_MAX) ) { stc("You feel recovered from your rage.\n\r",ch); REM_BIT_POWERS(ch,JEDI_BITS,JEDI_UNRAGE); } gain *= jedi->rege; } if( IS_CLASS(ch, CLASS_MONK)) { if( ch->position == POS_MEDITATING ) { if( GET_POWERS(ch, MONK_CURR_FOC) < GET_POWERS(ch, MONK_MAX_FOC)) { GET_POWERS(ch, MONK_CURR_FOC) += number_range(1,GET_POWERS(ch, MONK_MAX_CHI)); if( GET_POWERS(ch, MONK_CURR_FOC) > GET_POWERS(ch, MONK_MAX_FOC)) GET_POWERS(ch, MONK_CURR_FOC) = GET_POWERS(ch, MONK_MAX_FOC); } } GET_POWERS(ch,MONK_COMBO) = 0; GET_POWERS(ch,MONK_CHAIN) = 0; gain *= 3; gain *= monk->rege; } if( IS_CLASS(ch, CLASS_ALIEN)) { if( GET_POWERS(ch,ALIEN_SIZE) < 2 ) gain *= 1; else gain *= (GET_POWERS(ch, ALIEN_SIZE) / 2); gain *= alie->rege; } if( IS_CLASS(ch, CLASS_SHADOW) ) { gain *= ( ( ( (float)ch->max_hit / 100000 ) / 2 ) + 1 ); gain *= ( ( (float)ch->max_mana / 100000 ) + 1 ); gain *= ( ( ( (float)ch->max_move / 100000 ) * 2 ) + 1 ); gain *= shad->rege; } if( !IS_CLASS(ch, CLASS_SHADOW) && ch->in_room != NULL && IS_SET(ch->in_room->affected_by, AFF_ROOM_NEGATIVITY) ) gain /= 2; if( IS_CLASS(ch, CLASS_SHADOW) && ch->in_room != NULL && IS_SET(ch->in_room->affected_by, AFF_ROOM_NEGATIVITY) ) gain *= 2; if( ch->fight_timer > 0) gain /= 2; if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_ALIEN) ) if( IS_SET(GET_POWERS(ch,ALIEN_BITS),ALIEN_CLOAK) ) gain /= 2; if( !IS_NPC(ch) && IS_CLASS(ch,CLASS_SHADOW) ) if( IS_SET(GET_POWERS(ch,SHADOW_BITS),SHADOW_INVIS) ) gain /= 2; if( ch->hit < 0) gain = number_range(1,2); if( !IS_CLASS(ch, CLASS_SHADOW ) ) { if( ch->hit < ch->max_hit) ch->hit += gain; if( ch->mana < ch->max_mana) ch->mana += gain; if( ch->move < ch->max_move) ch->move += gain; } else if( IS_CLASS(ch, CLASS_SHADOW) ) { if( ch->hit < ch->max_hit ) ch->hit += ( gain / 2 ); if( ch->mana < ch->max_mana ) ch->mana += ( gain * 1.25 ); if( ch->move < ch->max_move ) ch->move += ( gain * 1.5 ); } if( ch->level >= 3 ) { if( (ch->loc_hp[0] + ch->loc_hp[1] + ch->loc_hp[2] + ch->loc_hp[3] + ch->loc_hp[4] + ch->loc_hp[5] + ch->loc_hp[6]) != 0) reg_mend(ch); } update_pos(ch); return; } /*int class_damage(CHAR_DATA *ch, CHAR_DATA *vict, int cost, bool type, int cost_loc) { int dam = 0; int wait = 0; if( !ch || !vict) return 0; if( cost == 0) return 0; dam = (cost*2) + number_range(-500, 500); dam = randomize_damage(dam, number_range(1,100)) wait = cost/21; switch(cost_loc) { default: return 0; break case 0: if( ch->hit < cost) return 0; else ch->hit -= cost; break; case 1: if( ch->mana < cost) return 0; else ch->mana -= cost; break; case 2: if( ch->move < cost); return 0; else ch->move -= cost; break; } if( type) vict->hit -= dam; else { vict->hit += dam; if( vict->hit > victim->max_hit) vict->hit = victim->max_hit; } update_pos(vict); update_pos(ch); WAIT_STATE(ch, wait); return dam; } */