src/hcode/btech/p.mech.enhanced.criticals.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

void getWeapData (MECH *mech, int section, int critical, int *wWeapIndex, int *wWeapSize, int *wFirstCrit)
int getCritAddedBTH (MECH *mech, int section, int critical, int rangeBracket)
int getCritAddedHeat (MECH *mech, int section, int critical)
int getCritSubDamage (MECH *mech, int section, int critical)
int canWeapExplodeFromDamage (MECH *mech, int section, int critical, int roll)
int canWeapJamFromDamage (MECH *mech, int section, int critical, int roll)
int isWeapAmmoFeedLocked (MECH *mech, int section, int critical)
int countDamagedSlots (MECH *mech, int section, int wFirstCrit, int wWeapSize)
int countDamagedSlotsFromCrit (MECH *mech, int section, int critical)
int shouldDestroyWeapon (MECH *mech, int section, int critical, int incrementCount)
void scoreEnhancedWeaponCriticalHit (MECH *mech, MECH *attacker, int LOS, int section, int critical)
void mech_weaponstatus (dbref player, MECH *mech, char *buffer)
void showWeaponDamageAndInfo (dbref player, MECH *mech, int section, int critical)


Function Documentation

int canWeapExplodeFromDamage ( MECH mech,
int  section,
int  critical,
int  roll 
)

Definition at line 118 of file mech.enhanced.criticals.c.

References CLASS_MECH, GetPartDamageFlags, getWeapData(), MechType, WEAP_DAM_BALL_AMMO, WEAP_DAM_EN_CRYSTAL, and WEAP_DAM_MSL_AMMO.

00119 {
00120         int wWeapSize = 0;
00121         int wFirstCrit = 0;
00122         int wWeapIndex = 0;
00123         int i;
00124         int wExplosionCheck = 0;
00125 
00126         if(MechType(mech) != CLASS_MECH)
00127                 return 0;
00128 
00129         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00130                                 &wFirstCrit);
00131 
00132         /* Iterate over the crits and see if we have any enhanced damage */
00133         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00134                 if((GetPartDamageFlags(mech, section, i) & WEAP_DAM_EN_CRYSTAL) ||
00135                    (GetPartDamageFlags(mech, section, i) & WEAP_DAM_BALL_AMMO) ||
00136                    (GetPartDamageFlags(mech, section, i) & WEAP_DAM_MSL_AMMO))
00137                         wExplosionCheck++;
00138         }
00139 
00140         if(wExplosionCheck > 0)
00141                 wExplosionCheck += 1;
00142 
00143         return wExplosionCheck >= roll;
00144 }

int canWeapJamFromDamage ( MECH mech,
int  section,
int  critical,
int  roll 
)

Definition at line 146 of file mech.enhanced.criticals.c.

References CLASS_MECH, GetPartDamageFlags, getWeapData(), MechType, and WEAP_DAM_BALL_BARREL.

00147 {
00148         int wWeapSize = 0;
00149         int wFirstCrit = 0;
00150         int wWeapIndex = 0;
00151         int i;
00152         int wJamCheck = 0;
00153 
00154         if(MechType(mech) != CLASS_MECH)
00155                 return 0;
00156 
00157         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00158                                 &wFirstCrit);
00159 
00160         /* Iterate over the crits and see if we have any enhanced damage */
00161         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00162                 if(GetPartDamageFlags(mech, section, i) & WEAP_DAM_BALL_BARREL)
00163                         wJamCheck++;
00164         }
00165 
00166         if(wJamCheck > 0)
00167                 wJamCheck += 1;
00168 
00169         return wJamCheck >= roll;
00170 }

int countDamagedSlots ( MECH mech,
int  section,
int  wFirstCrit,
int  wWeapSize 
)

Definition at line 207 of file mech.enhanced.criticals.c.

References PartIsDamaged.

Referenced by countDamagedSlotsFromCrit(), scoreEnhancedWeaponCriticalHit(), and shouldDestroyWeapon().

00208 {
00209         int wCritsDamaged = 0;
00210         int i;
00211 
00212         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00213                 if(PartIsDamaged(mech, section, i))
00214                         wCritsDamaged++;
00215         }
00216 
00217         return wCritsDamaged;
00218 }

int countDamagedSlotsFromCrit ( MECH mech,
int  section,
int  critical 
)

Definition at line 195 of file mech.enhanced.criticals.c.

References countDamagedSlots(), and getWeapData().

Referenced by mech_weaponstatus(), and PrintWeaponStatus().

00196 {
00197         int wWeapSize = 0;
00198         int wFirstCrit = 0;
00199         int wWeapIndex = 0;
00200 
00201         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00202                                 &wFirstCrit);
00203 
00204         return countDamagedSlots(mech, section, wFirstCrit, wWeapSize);
00205 }

int getCritAddedBTH ( MECH mech,
int  section,
int  critical,
int  rangeBracket 
)

Definition at line 40 of file mech.enhanced.criticals.c.

References CLASS_MECH, GetPartDamageFlags, getWeapData(), MechType, RANGE_SHORT, WEAP_DAM_EN_FOCUS, WEAP_DAM_MODERATE, and WEAP_DAM_MSL_RANGING.

Referenced by FindNormalBTH().

00041 {
00042         int wWeapSize = 0;
00043         int wFirstCrit = 0;
00044         int wWeapIndex = 0;
00045         int i;
00046         int wRetMod = 0;
00047 
00048         if(MechType(mech) != CLASS_MECH)
00049                 return 0;
00050 
00051         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00052                                 &wFirstCrit);
00053 
00054         /* Iterate over the crits and see if we have any enhanced damage */
00055         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00056                 if(GetPartDamageFlags(mech, section, i) & WEAP_DAM_MODERATE)
00057                         wRetMod++;
00058 
00059                 if(((GetPartDamageFlags(mech, section, i) & WEAP_DAM_EN_FOCUS) ||
00060                         (GetPartDamageFlags(mech, section,
00061                                                                 i) & WEAP_DAM_MSL_RANGING)) &&
00062                    (rangeBracket != RANGE_SHORT))
00063                         wRetMod++;
00064         }
00065 
00066         return wRetMod;
00067 }

int getCritAddedHeat ( MECH mech,
int  section,
int  critical 
)

Definition at line 69 of file mech.enhanced.criticals.c.

References GetPartDamageFlags, getWeapData(), IsEnergy, and WEAP_DAM_EN_CRYSTAL.

00070 {
00071         int wWeapSize = 0;
00072         int wFirstCrit = 0;
00073         int wWeapIndex = 0;
00074         int i;
00075         int wRetMod = 0;
00076 
00077         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00078                                 &wFirstCrit);
00079 
00080         if(!IsEnergy(wWeapIndex))
00081                 return 0;
00082 
00083         /* Iterate over the crits and see if we have any enhanced damage */
00084         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00085                 if(GetPartDamageFlags(mech, section, i) & WEAP_DAM_EN_CRYSTAL)
00086                         wRetMod++;
00087         }
00088 
00089         return wRetMod;
00090 }

int getCritSubDamage ( MECH mech,
int  section,
int  critical 
)

Definition at line 92 of file mech.enhanced.criticals.c.

References CLASS_MECH, GetPartDamageFlags, getWeapData(), IsEnergy, MechType, and WEAP_DAM_EN_FOCUS.

Referenced by determineDamageFromHit().

00093 {
00094         int wWeapSize = 0;
00095         int wFirstCrit = 0;
00096         int wWeapIndex = 0;
00097         int i;
00098         int wRetMod = 0;
00099 
00100         if(MechType(mech) != CLASS_MECH)
00101                 return 0;
00102 
00103         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00104                                 &wFirstCrit);
00105 
00106         if(!IsEnergy(wWeapIndex))
00107                 return 0;
00108 
00109         /* Iterate over the crits and see if we have any enhanced damage */
00110         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00111                 if(GetPartDamageFlags(mech, section, i) & WEAP_DAM_EN_FOCUS)
00112                         wRetMod++;
00113         }
00114 
00115         return wRetMod;
00116 }

void getWeapData ( MECH mech,
int  section,
int  critical,
int *  wWeapIndex,
int *  wWeapSize,
int *  wFirstCrit 
)

Definition at line 20 of file mech.enhanced.criticals.c.

References FindFirstWeaponCrit(), GetPartType, GetWeaponCrits(), and Weapon2I.

Referenced by canWeapExplodeFromDamage(), canWeapJamFromDamage(), countDamagedSlotsFromCrit(), getCritAddedBTH(), getCritAddedHeat(), getCritSubDamage(), isWeapAmmoFeedLocked(), scoreEnhancedWeaponCriticalHit(), shouldDestroyWeapon(), and showWeaponDamageAndInfo().

00022 {
00023         int wCritType = 0;
00024 
00025         /* Get the crit type */
00026         wCritType = GetPartType(mech, section, critical);
00027 
00028         /* Get the weapon index */
00029         *wWeapIndex = Weapon2I(wCritType);
00030 
00031         /* Get the max number of crits for this weapon */
00032         *wWeapSize = GetWeaponCrits(mech, *wWeapIndex);
00033 
00034         /* Find the first crit */
00035         *wFirstCrit =
00036                 FindFirstWeaponCrit(mech, section, critical, 0, wCritType,
00037                                                         *wWeapSize);
00038 }

int isWeapAmmoFeedLocked ( MECH mech,
int  section,
int  critical 
)

Definition at line 172 of file mech.enhanced.criticals.c.

References CLASS_MECH, GetPartDamageFlags, getWeapData(), MechType, WEAP_DAM_BALL_AMMO, and WEAP_DAM_MSL_AMMO.

Referenced by mech_inarc_ammo_toggle(), and mech_toggle_mode_sub_func().

00173 {
00174         int wWeapSize = 0;
00175         int wFirstCrit = 0;
00176         int wWeapIndex = 0;
00177         int i;
00178 
00179         if(MechType(mech) != CLASS_MECH)
00180                 return 0;
00181 
00182         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00183                                 &wFirstCrit);
00184 
00185         /* Iterate over the crits and see if we have any enhanced damage */
00186         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00187                 if((GetPartDamageFlags(mech, section, i) & WEAP_DAM_BALL_AMMO) ||
00188                    (GetPartDamageFlags(mech, section, i) & WEAP_DAM_MSL_AMMO))
00189                         return 1;
00190         }
00191 
00192         return 0;
00193 }

void mech_weaponstatus ( dbref  player,
MECH mech,
char *  buffer 
)

Definition at line 356 of file mech.enhanced.criticals.c.

References ArmorStringFromIndex(), cch, CLASS_MECH, countDamagedSlotsFromCrit(), FAIL_AMMOJAMMED, FAIL_DESTROYED, FAIL_DUD, FAIL_EMPTY, FAIL_JAMMED, FAIL_SHORTED, FindWeapons, MAX_WEAPS_SECTION, MECH_USUALSP, MechMove, MechType, MechWeapons, name, notify, NUM_SECTIONS, PartIsBroken, PartIsDisabled, PartTempNuke, and showWeaponDamageAndInfo().

00357 {
00358         int secIter = 0;
00359         int weapIter = 0;
00360         int wWeapsInSec = 0;
00361         int wcWeaps = 0;
00362         int wDamagedSlots = 0;
00363         unsigned char weaparray[MAX_WEAPS_SECTION];
00364         unsigned char weapdata[MAX_WEAPS_SECTION];
00365         int critical[MAX_WEAPS_SECTION];
00366         char tempbuff[160];
00367         char strLocation[80];
00368         char weapbuff[120];
00369 
00370         cch(MECH_USUALSP);
00371 
00372         notify(player,
00373                    "=========================WEAPON SYSTEMS STATUS=========================");
00374         notify(player,
00375                    "[##] -------- Weapon Name -------- || Location -------- || Status -----");
00376 
00377         for(secIter = 0; secIter < NUM_SECTIONS; secIter++) {
00378                 wWeapsInSec =
00379                         FindWeapons(mech, secIter, weaparray, weapdata, critical);
00380 
00381                 if(wWeapsInSec <= 0)
00382                         continue;
00383 
00384                 ArmorStringFromIndex(secIter, tempbuff, MechType(mech),
00385                                                          MechMove(mech));
00386                 sprintf(strLocation, "%-18.18s", tempbuff);
00387 
00388                 for(weapIter = 0; weapIter < wWeapsInSec; weapIter++) {
00389                         sprintf(weapbuff, "[%2d] %-29.29s || ", wcWeaps++,
00390                                         &MechWeapons[weaparray[weapIter]].name[3]);
00391 
00392                         strcat(weapbuff, strLocation);
00393                         wDamagedSlots = 0;
00394 
00395                         if(PartIsBroken(mech, secIter, critical[weapIter]) ||
00396                            PartTempNuke(mech, secIter,
00397                                                         critical[weapIter]) == FAIL_DESTROYED)
00398                                 strcat(weapbuff, "|| %ch%cxDESTROYED%c");
00399                         else {
00400 
00401                                 if(MechType(mech) == CLASS_MECH)
00402                                         wDamagedSlots =
00403                                                 countDamagedSlotsFromCrit(mech, secIter,
00404                                                                                                   critical[weapIter]);
00405 
00406                                 if(PartIsDisabled(mech, secIter, critical[weapIter]))
00407                                         strcat(weapbuff, "|| %crDISABLED%c");
00408                                 else if(PartTempNuke(mech, secIter, critical[weapIter])) {
00409                                         switch (PartTempNuke(mech, secIter, critical[weapIter])) {
00410                                         case FAIL_JAMMED:
00411                                                 strcat(weapbuff, "|| %crJAMMED%c");
00412                                                 break;
00413                                         case FAIL_SHORTED:
00414                                                 strcat(weapbuff, "|| %crSHORTED%c");
00415                                                 break;
00416                                         case FAIL_EMPTY:
00417                                                 strcat(weapbuff, "|| %crEMPTY%c");
00418                                                 break;
00419                                         case FAIL_DUD:
00420                                                 strcat(weapbuff, "|| %crDUD%c");
00421                                                 break;
00422                                         case FAIL_AMMOJAMMED:
00423                                                 strcat(weapbuff, "|| %crAMMOJAM%c");
00424                                                 break;
00425                                         }
00426                                 } else if(wDamagedSlots > 0)
00427                                         strcat(weapbuff, "|| %cr%chDAMAGED%c");
00428                                 else
00429                                         strcat(weapbuff, "|| %cg%chOPERATIONAL%cn");
00430                         }
00431 
00432                         notify(player, weapbuff);
00433 
00434                         showWeaponDamageAndInfo(player, mech, secIter,
00435                                                                         critical[weapIter]);
00436                 }
00437         }
00438 }

void scoreEnhancedWeaponCriticalHit ( MECH mech,
MECH attacker,
int  LOS,
int  section,
int  critical 
)

Definition at line 245 of file mech.enhanced.criticals.c.

References countDamagedSlots(), DamagePart, DestroyWeapon(), GetPartDamageFlags, GetPartType, getWeapData(), IsArtillery, IsBallistic, IsEnergy, IsMissile, mech_printf(), MECHALL, MechWeapons, name, Roll(), shouldDestroyWeapon(), WEAP_DAM_BALL_AMMO, WEAP_DAM_BALL_BARREL, WEAP_DAM_EN_CRYSTAL, WEAP_DAM_EN_FOCUS, WEAP_DAM_MODERATE, WEAP_DAM_MSL_AMMO, and WEAP_DAM_MSL_RANGING.

Referenced by HandleMechCrit().

00247 {
00248         int wWeapSize = 0;
00249         int wFirstCrit = 0;
00250         int wWeapIndex = 0;
00251         int wCritRoll = Roll();
00252         int tDestroyWeapon = 0;
00253         int tNoCrit = 0;
00254         int tModerateCrit = 0;
00255 
00256         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00257                                 &wFirstCrit);
00258 
00259         /* See if we should just destroy the sucker outright */
00260         if(shouldDestroyWeapon(mech, section, critical, 1))
00261                 tDestroyWeapon = 1;
00262         else {
00263                 /* Add the total number of damaged slots */
00264                 wCritRoll += countDamagedSlots(mech, section, wFirstCrit, wWeapSize);
00265                 wCritRoll++;
00266         }
00267 
00268         if(!tDestroyWeapon) {
00269                 /* See what damage we do */
00270                 if(IsEnergy(wWeapIndex)) {
00271                         if(wCritRoll <= 3) {
00272                                 tNoCrit = 1;
00273                         } else if(wCritRoll <= 5) {
00274                                 tModerateCrit = 1;
00275                         } else if(wCritRoll <= 7) {
00276                                 mech_printf(mech, MECHALL,
00277                                                         "Your %s's focusing mechanism gets knocked out of alignment!!",
00278                                                         &MechWeapons[wWeapIndex].name[3]);
00279                                 GetPartDamageFlags(mech, section, critical) |=
00280                                         WEAP_DAM_EN_FOCUS;
00281                         } else if(wCritRoll <= 9) {
00282                                 mech_printf(mech, MECHALL,
00283                                                         "Your %s's charging crystal takes a direct hit!!",
00284                                                         &MechWeapons[wWeapIndex].name[3]);
00285                                 GetPartDamageFlags(mech, section, critical) |=
00286                                         WEAP_DAM_EN_CRYSTAL;
00287                         } else {
00288                                 tDestroyWeapon = 1;
00289                         }
00290                 } else if(IsMissile(wWeapIndex)) {
00291                         if(wCritRoll <= 3) {
00292                                 tNoCrit = 1;
00293                         } else if(wCritRoll <= 5) {
00294                                 tModerateCrit = 1;
00295                         } else if(wCritRoll <= 7) {
00296                                 mech_printf(mech, MECHALL,
00297                                                         "Your %s's ranging system takes a hit!!",
00298                                                         &MechWeapons[wWeapIndex].name[3]);
00299                                 GetPartDamageFlags(mech, section, critical) |=
00300                                         WEAP_DAM_MSL_RANGING;
00301                         } else if(wCritRoll <= 9) {
00302                                 mech_printf(mech, MECHALL,
00303                                                         "Your %s's ammo feed is damaged!!",
00304                                                         &MechWeapons[wWeapIndex].name[3]);
00305                                 GetPartDamageFlags(mech, section, critical) |=
00306                                         WEAP_DAM_MSL_AMMO;
00307                         } else {
00308                                 tDestroyWeapon = 1;
00309                         }
00310                 } else if(IsBallistic(wWeapIndex) || IsArtillery(wWeapIndex)) {
00311                         if(wCritRoll <= 3) {
00312                                 tNoCrit = 1;
00313                         } else if(wCritRoll <= 5) {
00314                                 tModerateCrit = 1;
00315                         } else if(wCritRoll <= 7) {
00316                                 mech_printf(mech, MECHALL,
00317                                                         "Your %s's barrel warps from the damage!!",
00318                                                         &MechWeapons[wWeapIndex].name[3]);
00319                                 GetPartDamageFlags(mech, section, critical) |=
00320                                         WEAP_DAM_BALL_BARREL;
00321                         } else if(wCritRoll <= 9) {
00322                                 mech_printf(mech, MECHALL,
00323                                                         "Your %s's ammo feed is damaged!!",
00324                                                         &MechWeapons[wWeapIndex].name[3]);
00325                                 GetPartDamageFlags(mech, section, critical) |=
00326                                         WEAP_DAM_BALL_AMMO;
00327                         } else {
00328                                 tDestroyWeapon = 1;
00329                         }
00330                 } else {
00331                         tDestroyWeapon = 1;
00332                 }
00333         }
00334 
00335         if(tDestroyWeapon) {
00336                 mech_printf(mech, MECHALL, "Your %s has been destroyed!!",
00337                                         &MechWeapons[wWeapIndex].name[3]);
00338                 DestroyWeapon(mech, section, GetPartType(mech, section, critical),
00339                                           wFirstCrit, 1, wWeapSize);
00340         } else {
00341                 DamagePart(mech, section, critical);
00342 
00343                 if(tNoCrit)
00344                         mech_printf(mech, MECHALL,
00345                                                 "Your %s takes a hit but suffers no noticeable damage!!",
00346                                                 &MechWeapons[wWeapIndex].name[3]);
00347                 else if(tModerateCrit) {
00348                         mech_printf(mech, MECHALL,
00349                                                 "Your %s takes a hit but continues working!!",
00350                                                 &MechWeapons[wWeapIndex].name[3]);
00351                         GetPartDamageFlags(mech, section, critical) |= WEAP_DAM_MODERATE;
00352                 }
00353         }
00354 }

int shouldDestroyWeapon ( MECH mech,
int  section,
int  critical,
int  incrementCount 
)

Definition at line 220 of file mech.enhanced.criticals.c.

References CLASS_MECH, countDamagedSlots(), getWeapData(), and MechType.

Referenced by scoreEnhancedWeaponCriticalHit().

00222 {
00223         int wCritsDamaged = 0;
00224         int wWeapSize = 0;
00225         int wFirstCrit = 0;
00226         int wWeapIndex = 0;
00227 
00228         if(MechType(mech) != CLASS_MECH)
00229                 return 1;
00230 
00231         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00232                                 &wFirstCrit);
00233 
00234         if(incrementCount)
00235                 wCritsDamaged++;
00236 
00237         wCritsDamaged += countDamagedSlots(mech, section, wFirstCrit, wWeapSize);
00238 
00239         if((wCritsDamaged * 2) > wWeapSize)
00240                 return 1;
00241 
00242         return 0;
00243 }

void showWeaponDamageAndInfo ( dbref  player,
MECH mech,
int  section,
int  critical 
)

Definition at line 440 of file mech.enhanced.criticals.c.

References ArmorStringFromIndex(), GetPartDamageFlags, GetPartDesiredAmmoLoc, getWeapData(), IsArtillery, IsBallistic, IsEnergy, IsMissile, MechMove, MechType, MechWeapons, notify, notify_printf(), PartIsDamaged, PartIsDestroyed, PartIsDisabled, WEAP_DAM_BALL_AMMO, WEAP_DAM_BALL_BARREL, WEAP_DAM_EN_CRYSTAL, WEAP_DAM_EN_FOCUS, WEAP_DAM_MODERATE, WEAP_DAM_MSL_AMMO, and WEAP_DAM_MSL_RANGING.

Referenced by mech_weaponstatus().

00442 {
00443         int wWeapSize = 0;
00444         int wFirstCrit = 0;
00445         int wWeapIndex = 0;
00446         int awDamage[3];
00447         int i;
00448         int tHasDamagedPart = 0;
00449         int tPrintSpace = 0;
00450         int wAmmoLoc = GetPartDesiredAmmoLoc(mech, section, critical);
00451         char strLocation[80];
00452         int awNonOpCrits[3];
00453 
00454         getWeapData(mech, section, critical, &wWeapIndex, &wWeapSize,
00455                                 &wFirstCrit);
00456 
00457         for(i = 0; i < 3; i++) {
00458                 awDamage[i] = 0;
00459                 awNonOpCrits[i] = 0;
00460         }
00461 
00462         for(i = wFirstCrit; i < (wFirstCrit + wWeapSize); i++) {
00463                 if(PartIsDamaged(mech, section, i)) {
00464                         tHasDamagedPart = 1;
00465 
00466                         awDamage[0] +=
00467                                 GetPartDamageFlags(mech, section, i) & WEAP_DAM_MODERATE;
00468                         awDamage[1] +=
00469                                 ((GetPartDamageFlags(mech, section, i) & WEAP_DAM_EN_FOCUS)
00470                                  || (GetPartDamageFlags(mech, section,
00471                                                                                 i) & WEAP_DAM_BALL_BARREL) ||
00472                                  (GetPartDamageFlags(mech, section,
00473                                                                          i) & WEAP_DAM_MSL_RANGING));
00474                         awDamage[2] +=
00475                                 ((GetPartDamageFlags(mech, section,
00476                                                                          i) & WEAP_DAM_EN_CRYSTAL) ||
00477                                  (GetPartDamageFlags(mech, section, i) & WEAP_DAM_BALL_AMMO)
00478                                  || (GetPartDamageFlags(mech, section,
00479                                                                                 i) & WEAP_DAM_MSL_AMMO));
00480 
00481                         awNonOpCrits[0]++;
00482                 } else if(PartIsDestroyed(mech, section, i)) {
00483                         awNonOpCrits[1]++;
00484                 } else if(PartIsDisabled(mech, section, i)) {
00485                         awNonOpCrits[2]++;
00486                 }
00487         }
00488 
00489         if(tHasDamagedPart) {
00490                 tPrintSpace = 1;
00491 
00492                 if(awDamage[0] > 0)
00493                         notify_printf(player,
00494                                                   "      %%cr%%chGeneral damage (%d hit%s): +%d to hit.",
00495                                                   awDamage[0], awDamage[0] > 1 ? "s" : "",
00496                                                   awDamage[0]);
00497 
00498                 if(IsEnergy(wWeapIndex)) {
00499                         if(awDamage[1] > 0)
00500                                 notify_printf(player,
00501                                                           "      %%cr%%chFocus misalignment (%d hit%s): -%d damage. +%d to hit at >%d hexes.%%c",
00502                                                           awDamage[1], awDamage[1] > 1 ? "s" : "",
00503                                                           awDamage[1], awDamage[1],
00504                                                           MechWeapons[wWeapIndex].shortrange);
00505 
00506                         if(awDamage[2] > 0)
00507                                 notify_printf(player,
00508                                                           "      %%cr%%chCharging crystal damage (%d hit%s): +%d heat. Explodes on %d or less.%%c",
00509                                                           awDamage[2], awDamage[2] > 1 ? "s" : "",
00510                                                           awDamage[2], awDamage[2] + 1);
00511                 } else if(IsMissile(wWeapIndex)) {
00512                         if(awDamage[1] > 0)
00513                                 notify_printf(player,
00514                                                           "      %%cr%%chRanging system damage (%d hit%s): +%d to hit at >%d hexes.%%c",
00515                                                           awDamage[1], awDamage[1] > 1 ? "s" : "",
00516                                                           awDamage[1],
00517                                                           MechWeapons[wWeapIndex].shortrange);
00518 
00519                         if(awDamage[2] > 0)
00520                                 notify_printf(player,
00521                                                           "      %%cr%%chAmmo feed damage (%d hit%s): Can't switch ammo. Explodes on %d or less.%%c",
00522                                                           awDamage[2], awDamage[2] > 1 ? "s" : "",
00523                                                           awDamage[2] + 1);
00524                 } else if(IsBallistic(wWeapIndex) || IsArtillery(wWeapIndex)) {
00525                         if(awDamage[1] > 0)
00526                                 notify_printf(player,
00527                                                           "      %%cr%%chBarrel damage (%d hit%s): Jams on a %d or less.%%c",
00528                                                           awDamage[1], awDamage[1] > 1 ? "s" : "",
00529                                                           awDamage[1] + 1);
00530 
00531                         if(awDamage[2] > 0)
00532                                 notify_printf(player,
00533                                                           "      %%cr%%chAmmo feed damage (%d hit%s): Can't switch ammo. Explodes on %d or less.%%c",
00534                                                           awDamage[2], awDamage[2] > 1 ? "s" : "",
00535                                                           awDamage[2] + 1);
00536                 }
00537 
00538                 if((awDamage[0] == 0) && (awDamage[1] == 0) && (awDamage[2] == 0))
00539                         notify(player, "      %cr%chDamaged, but fully operational.%cn");
00540                 tPrintSpace = 1;
00541         }
00542 
00543         if(wAmmoLoc >= 0) {
00544                 ArmorStringFromIndex(wAmmoLoc, strLocation, MechType(mech),
00545                                                          MechMove(mech));
00546                 notify_printf(player, "      %%cg%%chPrefered ammo source: %s%%c",
00547                                           strLocation);
00548                 tPrintSpace = 1;
00549         }
00550 
00551         if((awNonOpCrits[0] > 0) || (awNonOpCrits[1] > 0) ||
00552            (awNonOpCrits[2] > 0)) {
00553                 notify_printf(player,
00554                                           "      %%cr%%chSlot status: Damaged: %d. Destroyed: %d. Disabled: %d%%c",
00555                                           awNonOpCrits[0], awNonOpCrits[1], awNonOpCrits[2]);
00556                 tPrintSpace = 1;
00557         }
00558 
00559         if(tPrintSpace)
00560                 notify(player, " ");
00561 }


Generated on Mon May 28 04:25:41 2007 for BattletechMUX by  doxygen 1.4.7