diff --git a/Tactical/Drugs And Alcohol.cpp b/Tactical/Drugs And Alcohol.cpp index 4e83af514..322cf7f2f 100644 --- a/Tactical/Drugs And Alcohol.cpp +++ b/Tactical/Drugs And Alcohol.cpp @@ -473,6 +473,23 @@ void HandleEndTurnDrugAdjustments( SOLDIERTYPE *pSoldier ) // Keel over... DeductPoints( pSoldier, 0, 20000 ); } + + // if we have a life damaging effect, deduct life points + if ( pSoldier->drugs.bDrugEffect[ DRUG_TYPE_LIFEDAMAGE ] == 0 && pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_LIFEDAMAGE ] > 0 ) + { + if ( pSoldier->stats.bLife > OKLIFE ) + { + INT8 lifepointdamage = pSoldier->drugs.bDrugSideEffect[ DRUG_TYPE_LIFEDAMAGE ]; + + INT8 applieddamage = pSoldier->stats.bLife; + + pSoldier->stats.bLife = max(OKLIFE - 1, pSoldier->stats.bLife - lifepointdamage); + + applieddamage -= pSoldier->stats.bLife; + + pSoldier->iHealableInjury += (applieddamage * 100); + } + } } } diff --git a/Tactical/Drugs And Alcohol.h b/Tactical/Drugs And Alcohol.h index 2e33cd72b..6c3b69553 100644 --- a/Tactical/Drugs And Alcohol.h +++ b/Tactical/Drugs And Alcohol.h @@ -33,7 +33,8 @@ enum { DRUG_TYPE_BLIND, // 15 DRUG_TYPE_KNOCKOUT, DRUG_TYPE_VISION, - DRUG_TYPE_TUNNELVISION + DRUG_TYPE_TUNNELVISION, + DRUG_TYPE_LIFEDAMAGE }; // Flugente, 12-04-21 @@ -58,7 +59,7 @@ enum { #define DRUG_KNOCKOUT (1 << DRUG_TYPE_KNOCKOUT) //0x00010000 //65536 #define DRUG_VISION (1 << DRUG_TYPE_VISION) //0x00020000 //131072 #define DRUG_TUNNELVISION (1 << DRUG_TYPE_TUNNELVISION) //0x00040000 //262144 -#define DRUG_MISC_6 0x00080000 //524288 +#define DRUG_LIFEDAMAGE (1 << DRUG_TYPE_LIFEDAMAGE) //0x00080000 //524288 #define DRUG_MISC_7 0x00100000 //1048576 #define DRUG_MISC_8 0x00200000 //2097152 #define DRUG_MISC_9 0x00400000 //4194304 diff --git a/Tactical/XML_Drugs.cpp b/Tactical/XML_Drugs.cpp index f8a31d92e..e919c5bbb 100644 --- a/Tactical/XML_Drugs.cpp +++ b/Tactical/XML_Drugs.cpp @@ -48,6 +48,7 @@ drugsStartElementHandle(void *userData, const XML_Char *name, const XML_Char **a } else if(pData->curElement == ELEMENT && (strcmp(name, "ubType") == 0 || + strcmp(name, "name") == 0 || strcmp(name, "ubDrugTravelRate") == 0 || strcmp(name, "ubDrugWearoffRate") == 0 || strcmp(name, "ubDrugEffect") == 0 || @@ -95,7 +96,8 @@ drugsEndElementHandle(void *userData, const XML_Char *name) { pData->curElement = ELEMENT_LIST; - if(pData->curDrugs.ubType < pData->maxArraySize && pData->curDrugs.ubType > 0) // do not write the first item into our array + // we do NOT want to read the first entry -> move stuff by 1 + if(pData->curDrugs.ubType < pData->maxArraySize + 1 && pData->curDrugs.ubType > 0) // do not write the first item into our array { pData->curArray[pData->curDrugs.ubType - 1] = pData->curDrugs; //write the drugs into the table } @@ -105,6 +107,11 @@ drugsEndElementHandle(void *userData, const XML_Char *name) pData->curElement = ELEMENT; pData->curDrugs.ubType = (UINT8) atol(pData->szCharData); } + else if(strcmp(name, "name") == 0) + { + pData->curElement = ELEMENT; + // not needed, but its there :-( + } else if(strcmp(name, "ubDrugTravelRate") == 0) { pData->curElement = ELEMENT;