mirror of
https://github.com/1dot13/source.git
synced 2026-08-05 14:00:23 +02:00
Bugfixes / Improvements (macros) of Assignments (by Franimus)
- Fixed warning for INT8 overflow on scroll region priority, seemingly had no effect though - Use new assignment macros - Bugfix - POWs' activity level being overwritten - Feature - automatically bandage bleeding mercs on a PATIENT assignment - Bugfix - mercs treated at facilities should not use mercs' medkits - Added 3 new enums for facility doctor, patient, and repair - Bugfix for facility patients not detected as being in a facility - Bugfix - iBurstAPCost was ignoring half of its calculation due to extraneous semicolon git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7988 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+2
-2
@@ -209,7 +209,7 @@ DropDownBase::Create_Drop()
|
||||
usHeight = ( musAreaHeight - DEF_SCROLL_ARROW_HEIGHT - 4 ) / (mNumDisplayedEntries);
|
||||
for ( i = 0; i<mNumDisplayedEntries - 1; ++i )
|
||||
{
|
||||
MSYS_DefineRegion( &mSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX + musWidth), (UINT16)(usPosY + usHeight), MSYS_PRIORITY_HIGHEST + 1,
|
||||
MSYS_DefineRegion( &mSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX + musWidth), (UINT16)(usPosY + usHeight), MSYS_PRIORITY_HIGHEST,
|
||||
CURSOR_LAPTOP_SCREEN, CallBackWrapper((void*) this, DROPDOWN_SCROLL_MOVEMENT, &DropDownBase::Dummyfunc), CallBackWrapper((void*) this, DROPDOWN_SCROLL_REGION, &DropDownBase::Dummyfunc));
|
||||
MSYS_AddRegion(&mSelectedScrollAreaDropDownRegion[i]);
|
||||
MSYS_SetRegionUserData( &mSelectedScrollAreaDropDownRegion[ i ], 0, i);
|
||||
@@ -217,7 +217,7 @@ DropDownBase::Create_Drop()
|
||||
}
|
||||
|
||||
//put the last one down to cover the remaining area
|
||||
MSYS_DefineRegion( &mSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX + musWidth), musDownArrowY, MSYS_PRIORITY_HIGHEST + 1,
|
||||
MSYS_DefineRegion( &mSelectedScrollAreaDropDownRegion[i], usPosX, usPosY, (UINT16)(usPosX + musWidth), musDownArrowY, MSYS_PRIORITY_HIGHEST,
|
||||
CURSOR_LAPTOP_SCREEN, CallBackWrapper((void*) this, DROPDOWN_SCROLL_MOVEMENT, &DropDownBase::Dummyfunc), CallBackWrapper((void*) this, DROPDOWN_SCROLL_REGION, &DropDownBase::Dummyfunc));
|
||||
MSYS_AddRegion(&mSelectedScrollAreaDropDownRegion[i]);
|
||||
MSYS_SetRegionUserData( &mSelectedScrollAreaDropDownRegion[ i ], 0, i);
|
||||
|
||||
@@ -2166,7 +2166,17 @@ BOOLEAN SOLDIERTYPE::Load(HWFILE hFile)
|
||||
numBytesRead = ReadFieldByField(hFile, &this->wornDesertCamo, sizeof(wornDesertCamo), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->snowCamo, sizeof(snowCamo), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->wornSnowCamo, sizeof(wornSnowCamo), sizeof(INT8), numBytesRead);
|
||||
// Preserve old savegames by detecting if the assignment is not saved as FACILITY_ but really should be
|
||||
numBytesRead = ReadFieldByField(hFile, &this->sFacilityTypeOperated, sizeof(sFacilityTypeOperated), sizeof(INT16), numBytesRead);
|
||||
if (this->sFacilityTypeOperated > 0)
|
||||
{
|
||||
if (this->bAssignment == DOCTOR)
|
||||
this->bAssignment = FACILITY_DOCTOR;
|
||||
else if (this->bAssignment == PATIENT)
|
||||
this->bAssignment = FACILITY_PATIENT;
|
||||
else if (this->bAssignment == REPAIR)
|
||||
this->bAssignment = FACILITY_REPAIR;
|
||||
}
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bScopeMode, sizeof(bScopeMode), sizeof(INT8), numBytesRead);
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bUnusedINT8_1, sizeof(bUnusedINT8_1), sizeof(INT8), numBytesRead );
|
||||
numBytesRead = ReadFieldByField(hFile, &this->bUnusedINT8_2, sizeof(bUnusedINT8_2), sizeof(INT8), numBytesRead );
|
||||
|
||||
+107
-98
@@ -722,7 +722,7 @@ void ChangeSoldiersAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment )
|
||||
// HEADROCK HAM 3.6: Clean out new Facility Operation variable.
|
||||
pSoldier->sFacilityTypeOperated = -1;
|
||||
|
||||
if ( ( bAssignment == DOCTOR ) || ( bAssignment == PATIENT ) || ( bAssignment == ASSIGNMENT_HOSPITAL ) )
|
||||
if ( IS_PATIENT(bAssignment) || ( bAssignment == ASSIGNMENT_HOSPITAL ) )
|
||||
{
|
||||
AddStrategicEvent( EVENT_BANDAGE_BLEEDING_MERCS, GetWorldTotalMin() + 1, 0 );
|
||||
}
|
||||
@@ -2674,7 +2674,7 @@ SOLDIERTYPE *AnyDoctorWhoCanHealThisPatient( SOLDIERTYPE *pPatient, BOOLEAN fThi
|
||||
for ( cnt = 0, pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; cnt++,pTeamSoldier++)
|
||||
{
|
||||
// doctor?
|
||||
if( ( pTeamSoldier->bActive ) && ( pTeamSoldier->bAssignment == DOCTOR ) )
|
||||
if( pTeamSoldier->bActive && IS_DOCTOR(pTeamSoldier->bAssignment) )
|
||||
{
|
||||
if( CanSoldierBeHealedByDoctor( pPatient, pTeamSoldier, FALSE, fThisHour, FALSE, FALSE, FALSE ) == TRUE )
|
||||
{
|
||||
@@ -3462,7 +3462,7 @@ void HandleDoctorsInSector( INT16 sX, INT16 sY, INT8 bZ )
|
||||
{
|
||||
if( ( pTeamSoldier->sSectorX == sX ) && ( pTeamSoldier->sSectorY == sY ) && ( pTeamSoldier->bSectorZ == bZ ) )
|
||||
{
|
||||
if ( ( pTeamSoldier->bAssignment == DOCTOR ) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
if ( IS_DOCTOR(pTeamSoldier->bAssignment) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
{
|
||||
MakeSureMedKitIsInHand( pTeamSoldier );
|
||||
// character is in sector, check if can doctor, if so...heal people
|
||||
@@ -3472,13 +3472,13 @@ void HandleDoctorsInSector( INT16 sX, INT16 sY, INT8 bZ )
|
||||
}
|
||||
}
|
||||
/*
|
||||
if( ( pTeamSoldier->bAssignment == DOCTOR ) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
if( IS_DOCTOR(pTeamSoldier->bAssignment) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
{
|
||||
MakeSureMedKitIsInHand( pTeamSoldier );
|
||||
}
|
||||
|
||||
// character is in sector, check if can doctor, if so...heal people
|
||||
if( CanCharacterDoctor( pTeamSoldier ) && ( pTeamSoldier->bAssignment == DOCTOR ) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) && EnoughTimeOnAssignment( pTeamSoldier ) )
|
||||
if( CanCharacterDoctor( pTeamSoldier ) && IS_DOCTOR(pTeamSoldier->bAssignment) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) && EnoughTimeOnAssignment( pTeamSoldier ) )
|
||||
{
|
||||
HealCharacters( pTeamSoldier, sX, sY, bZ );
|
||||
}
|
||||
@@ -3506,7 +3506,7 @@ void UpdatePatientsWhoAreDoneHealing( void )
|
||||
if( pTeamSoldier->bActive )
|
||||
{
|
||||
// patient who doesn't need healing or curing
|
||||
if ( (pTeamSoldier->bAssignment == PATIENT) && (pTeamSoldier->stats.bLife == pTeamSoldier->stats.bLifeMax) && pTeamSoldier->HasDisease(TRUE, TRUE) )
|
||||
if ( IS_PATIENT(pTeamSoldier->bAssignment) && !IS_DOCTOR(pTeamSoldier->bAssignment) && (pTeamSoldier->stats.bLife == pTeamSoldier->stats.bLifeMax) && pTeamSoldier->HasDisease(TRUE, TRUE) )
|
||||
{
|
||||
// Flugente: stats can also be damaged
|
||||
if ( !gGameOptions.fFoodSystem || (gGameOptions.fFoodSystem && pSoldier->bFoodLevel > FoodMoraleMods[FOOD_NORMAL].bThreshold && pSoldier->bDrinkLevel > FoodMoraleMods[FOOD_NORMAL].bThreshold) )
|
||||
@@ -3683,7 +3683,7 @@ BOOLEAN IsSoldierCloseEnoughToADoctor( SOLDIERTYPE *pPatient )
|
||||
{
|
||||
|
||||
// is a doctor
|
||||
if( pSoldier->bAssignment == DOCTOR )
|
||||
if( IS_DOCTOR(pSoldier->bAssignment) )
|
||||
{
|
||||
|
||||
// the doctor is in the house
|
||||
@@ -3725,7 +3725,7 @@ BOOLEAN CanSoldierBeHealedByDoctor( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pDoctor,
|
||||
}
|
||||
|
||||
// must be a patient or a doctor
|
||||
if( ( pSoldier->bAssignment != PATIENT ) && ( pSoldier->bAssignment != DOCTOR ) && ( fIgnoreAssignment == FALSE ) )
|
||||
if ( !IS_PATIENT(pSoldier->bAssignment) && ( fIgnoreAssignment == FALSE ) )
|
||||
{
|
||||
return(FALSE);
|
||||
}
|
||||
@@ -4123,16 +4123,16 @@ void HandleRepairmenInSector( INT16 sX, INT16 sY, INT8 bZ )
|
||||
// set psoldier as first in merc ptrs
|
||||
pSoldier = MercPtrs[0];
|
||||
|
||||
// will handle doctor/patient relationship in sector
|
||||
// will handle repairman/client relationship in sector
|
||||
|
||||
// go through list of characters, find all doctors in sector
|
||||
// go through list of characters, find all repairmen in sector
|
||||
for ( pTeamSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; ++cnt, pTeamSoldier++)
|
||||
{
|
||||
if( pTeamSoldier->bActive )
|
||||
{
|
||||
if( ( pTeamSoldier->sSectorX == sX ) && ( pTeamSoldier->sSectorY == sY ) && ( pTeamSoldier->bSectorZ == bZ) )
|
||||
{
|
||||
if ( ( pTeamSoldier->bAssignment == REPAIR ) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
if ( IS_REPAIR(pTeamSoldier->bAssignment) && ( pTeamSoldier->flags.fMercAsleep == FALSE ) )
|
||||
{
|
||||
if ( MakeSureToolKitIsInHand( pTeamSoldier ) )
|
||||
{
|
||||
@@ -5102,8 +5102,8 @@ void FatigueCharacter( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
switch ( pSoldier->bAssignment )
|
||||
{
|
||||
case DOCTOR:
|
||||
case REPAIR:
|
||||
CASE_DOCTOR:
|
||||
CASE_REPAIR:
|
||||
case TRAIN_TEAMMATE:
|
||||
case TRAIN_TOWN:
|
||||
break;
|
||||
@@ -5131,8 +5131,8 @@ void FatigueCharacter( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
switch ( pSoldier->bAssignment )
|
||||
{
|
||||
case DOCTOR:
|
||||
case REPAIR:
|
||||
CASE_DOCTOR:
|
||||
CASE_REPAIR:
|
||||
case TRAIN_TEAMMATE:
|
||||
if ( Chance( 60 ) )
|
||||
HandleMoraleEvent( pSoldier, MORALE_PACIFIST_GAIN_NONCOMBAT, pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ );
|
||||
@@ -7481,15 +7481,15 @@ void MakeSoldiersTacticalAnimationReflectAssignment( SOLDIERTYPE *pSoldier )
|
||||
if( ( pSoldier->bInSector ) && gfWorldLoaded && ( pSoldier->stats.bLife >= OKLIFE ) )
|
||||
{
|
||||
// Set animation based on his assignment
|
||||
if ( pSoldier->bAssignment == DOCTOR )
|
||||
if ( IS_DOCTOR(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorDoctor( pSoldier, pSoldier->usStrategicInsertionData );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == PATIENT )
|
||||
else if ( IS_PATIENT(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorPatient( pSoldier, pSoldier->usStrategicInsertionData );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == REPAIR )
|
||||
else if ( IS_REPAIR(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorRepair( pSoldier, pSoldier->usStrategicInsertionData );
|
||||
}
|
||||
@@ -7525,7 +7525,7 @@ void AssignmentDone( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote, BOOLEAN fMeToo )
|
||||
{
|
||||
if ( ( pSoldier->bInSector ) && ( gfWorldLoaded ) )
|
||||
{
|
||||
if ( pSoldier->bAssignment == DOCTOR )
|
||||
if ( IS_DOCTOR(pSoldier->bAssignment) )
|
||||
{
|
||||
if ( guiCurrentScreen == GAME_SCREEN )
|
||||
{
|
||||
@@ -7537,7 +7537,7 @@ void AssignmentDone( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote, BOOLEAN fMeToo )
|
||||
}
|
||||
|
||||
}
|
||||
else if ( pSoldier->bAssignment == REPAIR )
|
||||
else if ( IS_REPAIR(pSoldier->bAssignment) )
|
||||
{
|
||||
if ( guiCurrentScreen == GAME_SCREEN )
|
||||
{
|
||||
@@ -7548,7 +7548,7 @@ void AssignmentDone( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote, BOOLEAN fMeToo )
|
||||
pSoldier->ChangeSoldierState( STANDING, 1, TRUE );
|
||||
}
|
||||
}
|
||||
else if ( pSoldier->bAssignment == PATIENT )
|
||||
else if ( IS_PATIENT(pSoldier->bAssignment) )
|
||||
{
|
||||
if ( guiCurrentScreen == GAME_SCREEN )
|
||||
{
|
||||
@@ -7588,8 +7588,8 @@ void AssignmentDone( SOLDIERTYPE *pSoldier, BOOLEAN fSayQuote, BOOLEAN fMeToo )
|
||||
|
||||
if ( fSayQuote )
|
||||
{
|
||||
if ( pSoldier->bAssignment == DOCTOR || pSoldier->bAssignment == REPAIR ||
|
||||
pSoldier->bAssignment == PATIENT || pSoldier->bAssignment == ASSIGNMENT_HOSPITAL )
|
||||
if (IS_DOCTOR( pSoldier->bAssignment ) || IS_REPAIR( pSoldier->bAssignment ) ||
|
||||
IS_PATIENT( pSoldier->bAssignment ) || (pSoldier->bAssignment == ASSIGNMENT_HOSPITAL))
|
||||
{
|
||||
TacticalCharacterDialogue( pSoldier, QUOTE_ASSIGNMENT_COMPLETE );
|
||||
}
|
||||
@@ -7667,7 +7667,7 @@ void HandleHealingByNaturalCauses( SOLDIERTYPE *pSoldier )
|
||||
return;
|
||||
}
|
||||
|
||||
// any bleeding pts - can' recover if still bleeding!
|
||||
// any bleeding pts - can't recover if still bleeding!
|
||||
if( pSoldier->bBleeding != 0 )
|
||||
{
|
||||
return;
|
||||
@@ -7675,15 +7675,15 @@ void HandleHealingByNaturalCauses( SOLDIERTYPE *pSoldier )
|
||||
|
||||
// not bleeding and injured...
|
||||
|
||||
if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
if ((pSoldier->flags.fMercAsleep == TRUE) || (IS_PATIENT(pSoldier->bAssignment) && !IS_DOCTOR(pSoldier->bAssignment)) || (pSoldier->bAssignment == ASSIGNMENT_HOSPITAL))
|
||||
{
|
||||
bActivityLevelDivisor = gGameExternalOptions.ubLowActivityLevel;
|
||||
}
|
||||
else if( pSoldier->bAssignment == ASSIGNMENT_POW )
|
||||
{
|
||||
// use high activity level to simulate stress, torture, poor conditions for healing
|
||||
bActivityLevelDivisor = gGameExternalOptions.ubHighActivityLevel;
|
||||
}
|
||||
if( ( pSoldier->flags.fMercAsleep == TRUE ) || ( pSoldier->bAssignment == PATIENT ) || ( pSoldier->bAssignment == ASSIGNMENT_HOSPITAL ) )
|
||||
{
|
||||
bActivityLevelDivisor = gGameExternalOptions.ubLowActivityLevel;
|
||||
}
|
||||
else if ( pSoldier->bAssignment < ON_DUTY )
|
||||
{
|
||||
// if time is being compressed, and the soldier is not moving strategically
|
||||
@@ -7783,6 +7783,10 @@ void UpDateSoldierLife( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->bBleeding = pSoldier->stats.bLifeMax - pSoldier->stats.bLife;
|
||||
}
|
||||
|
||||
// Autobandage assigned patients - they might still show bleeding for the first minute, but I haven't seen them lose life from it yet.
|
||||
if (pSoldier->bBleeding > 0)
|
||||
AddStrategicEvent( EVENT_BANDAGE_BLEEDING_MERCS, GetWorldTotalMin() + 1, 0 );
|
||||
|
||||
// SANDRO - when being healed normally, reduce insta-healable HPs value
|
||||
if ( gGameOptions.fNewTraitSystem && pSoldier->iHealableInjury > 0 )
|
||||
{
|
||||
@@ -12062,7 +12066,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) )
|
||||
continue; // is nowhere around!
|
||||
|
||||
if (( pSoldier->ubID == pMedic->ubID ) || ( pMedic->bAssignment != DOCTOR ))
|
||||
if ( (pSoldier->ubID == pMedic->ubID) || !IS_DOCTOR(pMedic->bAssignment) )
|
||||
continue; // cannot make surgery on self or not on the right assignment!
|
||||
|
||||
bSlot = FindMedKit( pMedic );
|
||||
@@ -12114,7 +12118,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
case( EPC_MENU_REMOVE ):
|
||||
|
||||
fShowAssignmentMenu = FALSE;
|
||||
UnEscortEPC( pSoldier );
|
||||
UnEscortEPC( pSoldier );
|
||||
break;
|
||||
|
||||
case( EPC_MENU_CANCEL ):
|
||||
@@ -12306,7 +12310,7 @@ void AssignmentMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
if ( !(pMedic->bActive) || !(pMedic->bInSector) || ( pMedic->flags.uiStatusFlags & SOLDIER_VEHICLE ) || (pMedic->bAssignment == VEHICLE ) )
|
||||
continue; // is nowhere around!
|
||||
|
||||
if (( pSoldier->ubID == pMedic->ubID ) || ( pMedic->bAssignment != DOCTOR ))
|
||||
if ( (pSoldier->ubID == pMedic->ubID) || !IS_DOCTOR(pMedic->bAssignment) )
|
||||
continue; // cannot make surgery on self or not on the right assignment!
|
||||
|
||||
bSlot = FindMedKit( pMedic );
|
||||
@@ -14765,7 +14769,7 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
}
|
||||
break;
|
||||
case( PATIENT ):
|
||||
CASE_PATIENT:
|
||||
if( CanCharacterPatient( pSoldier ) )
|
||||
{
|
||||
// set as doctor
|
||||
@@ -14793,18 +14797,18 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
TakeSoldierOutOfVehicle( pSoldier );
|
||||
}
|
||||
|
||||
if( ( pSoldier->bAssignment != PATIENT ) )
|
||||
if ((pSoldier->bAssignment != bAssignment))
|
||||
{
|
||||
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
||||
}
|
||||
|
||||
ChangeSoldiersAssignment( pSoldier, PATIENT );
|
||||
ChangeSoldiersAssignment( pSoldier, bAssignment );
|
||||
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
}
|
||||
|
||||
break;
|
||||
case( DOCTOR ):
|
||||
CASE_DOCTOR:
|
||||
if( CanCharacterDoctor( pSoldier ) )
|
||||
{
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
@@ -14823,12 +14827,12 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
TakeSoldierOutOfVehicle( pSoldier );
|
||||
}
|
||||
|
||||
if( ( pSoldier->bAssignment != DOCTOR ) )
|
||||
if ((pSoldier->bAssignment != bAssignment))
|
||||
{
|
||||
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
||||
}
|
||||
|
||||
ChangeSoldiersAssignment( pSoldier, DOCTOR );
|
||||
ChangeSoldiersAssignment( pSoldier, bAssignment );
|
||||
|
||||
MakeSureMedKitIsInHand( pSoldier );
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
@@ -15050,7 +15054,7 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
}
|
||||
break;
|
||||
|
||||
case( REPAIR ):
|
||||
CASE_REPAIR:
|
||||
if( CanCharacterRepair( pSoldier ) )
|
||||
{
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
@@ -15064,12 +15068,12 @@ void SetSoldierAssignment( SOLDIERTYPE *pSoldier, INT8 bAssignment, INT32 iParam
|
||||
TakeSoldierOutOfVehicle( pSoldier );
|
||||
}
|
||||
|
||||
if( ( pSoldier->bAssignment != REPAIR ) ||( pSoldier->flags.fFixingSAMSite != ( UINT8 )iParam1 ) || ( pSoldier->flags.fFixingRobot != ( UINT8 )iParam2 ) || ( pSoldier->bVehicleUnderRepairID != ( UINT8 )iParam3 ) )
|
||||
if ((pSoldier->bAssignment != bAssignment) || (pSoldier->flags.fFixingSAMSite != (UINT8)iParam1) || (pSoldier->flags.fFixingRobot != (UINT8)iParam2) || (pSoldier->bVehicleUnderRepairID != (UINT8)iParam3))
|
||||
{
|
||||
SetTimeOfAssignmentChangeForMerc( pSoldier );
|
||||
}
|
||||
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
ChangeSoldiersAssignment( pSoldier, bAssignment );
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
pSoldier->flags.fFixingSAMSite = ( UINT8 )iParam1;
|
||||
@@ -16399,55 +16403,56 @@ void BandageBleedingDyingPatientsBeingTreated( )
|
||||
// and he is bleeding or dying
|
||||
if( ( pSoldier->bBleeding ) || ( pSoldier->stats.bLife < OKLIFE ) )
|
||||
{
|
||||
// if soldier is receiving care
|
||||
if( ( pSoldier->bAssignment == PATIENT ) || ( pSoldier->bAssignment == ASSIGNMENT_HOSPITAL ) || ( pSoldier->bAssignment == DOCTOR ) )
|
||||
// if in the hospital
|
||||
if ((pSoldier->bAssignment == FACILITY_PATIENT) || (pSoldier->bAssignment == ASSIGNMENT_HOSPITAL))
|
||||
{
|
||||
// if in the hospital
|
||||
if ( pSoldier->bAssignment == ASSIGNMENT_HOSPITAL )
|
||||
// this is instantaneous, and doesn't use up any bandages!
|
||||
|
||||
// stop bleeding automatically
|
||||
pSoldier->bBleeding = 0;
|
||||
|
||||
if ( pSoldier->stats.bLife < OKLIFE )
|
||||
{
|
||||
// this is instantaneous, and doesn't use up any bandages!
|
||||
|
||||
// stop bleeding automatically
|
||||
pSoldier->bBleeding = 0;
|
||||
|
||||
if ( pSoldier->stats.bLife < OKLIFE )
|
||||
// SANDRO - added to alter the value of insta-healable injuries for doctors
|
||||
if (pSoldier->iHealableInjury > 0)
|
||||
{
|
||||
// SANDRO - added to alter the value of insta-healable injuries for doctors
|
||||
if (pSoldier->iHealableInjury > 0)
|
||||
{
|
||||
pSoldier->iHealableInjury -= ((OKLIFE - pSoldier->stats.bLife) * 100);
|
||||
}
|
||||
|
||||
pSoldier->stats.bLife = OKLIFE;
|
||||
pSoldier->iHealableInjury -= ((OKLIFE - pSoldier->stats.bLife) * 100);
|
||||
}
|
||||
|
||||
pSoldier->stats.bLife = OKLIFE;
|
||||
}
|
||||
else // assigned to DOCTOR/PATIENT
|
||||
}
|
||||
// if treated by fellow merc
|
||||
else if ((pSoldier->bAssignment == DOCTOR) || (pSoldier->bAssignment == PATIENT))
|
||||
{
|
||||
// see if there's a doctor around who can help him
|
||||
pDoctor = AnyDoctorWhoCanHealThisPatient( pSoldier, HEALABLE_EVER );
|
||||
if ( pDoctor != NULL )
|
||||
{
|
||||
// see if there's a doctor around who can help him
|
||||
pDoctor = AnyDoctorWhoCanHealThisPatient( pSoldier, HEALABLE_EVER );
|
||||
if ( pDoctor != NULL )
|
||||
iKitSlot = FindObjClass( pDoctor, IC_MEDKIT );
|
||||
if( iKitSlot != NO_SLOT )
|
||||
{
|
||||
iKitSlot = FindObjClass( pDoctor, IC_MEDKIT );
|
||||
if( iKitSlot != NO_SLOT )
|
||||
pKit = &( pDoctor->inv[ iKitSlot ] );
|
||||
|
||||
usKitPts = TotalPoints( pKit );
|
||||
if( usKitPts )
|
||||
{
|
||||
pKit = &( pDoctor->inv[ iKitSlot ] );
|
||||
uiKitPtsUsed = VirtualSoldierDressWound( pDoctor, pSoldier, pKit, usKitPts, usKitPts, FALSE ); // SANDRO - added variable
|
||||
UseKitPoints( pKit, (UINT16)uiKitPtsUsed, pDoctor );
|
||||
|
||||
usKitPts = TotalPoints( pKit );
|
||||
if( usKitPts )
|
||||
// if he is STILL bleeding or dying
|
||||
if( ( pSoldier->bBleeding ) || ( pSoldier->stats.bLife < OKLIFE ) )
|
||||
{
|
||||
uiKitPtsUsed = VirtualSoldierDressWound( pDoctor, pSoldier, pKit, usKitPts, usKitPts, FALSE ); // SANDRO - added variable
|
||||
UseKitPoints( pKit, (UINT16)uiKitPtsUsed, pDoctor );
|
||||
|
||||
// if he is STILL bleeding or dying
|
||||
if( ( pSoldier->bBleeding ) || ( pSoldier->stats.bLife < OKLIFE ) )
|
||||
{
|
||||
fSomeoneStillBleedingDying = TRUE;
|
||||
}
|
||||
fSomeoneStillBleedingDying = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// soldier is not receiving care
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16478,11 +16483,11 @@ void ReEvaluateEveryonesNothingToDo()
|
||||
{
|
||||
switch( pSoldier->bAssignment )
|
||||
{
|
||||
case DOCTOR:
|
||||
CASE_DOCTOR:
|
||||
fNothingToDo = !CanCharacterDoctor( pSoldier ) || ( GetNumberThatCanBeDoctored( pSoldier, HEALABLE_EVER, FALSE, FALSE, FALSE ) == 0 ); // SANDRO - added variable
|
||||
break;
|
||||
|
||||
case PATIENT:
|
||||
CASE_PATIENT:
|
||||
// HEADROCK HAM 3.6: Characters can be facility patients, in which case they are resting with a
|
||||
// bonus or penalty to their healing rate. No doctor is actually required, even though the
|
||||
// character is still eligible for a doctor's treatment.
|
||||
@@ -16495,7 +16500,7 @@ void ReEvaluateEveryonesNothingToDo()
|
||||
fNothingToDo = !CanCharacterPatient( pSoldier );
|
||||
break;
|
||||
|
||||
case REPAIR:
|
||||
CASE_REPAIR:
|
||||
fNothingToDo = !CanCharacterRepair( pSoldier ) || HasCharacterFinishedRepairing( pSoldier );
|
||||
break;
|
||||
|
||||
@@ -16646,23 +16651,23 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam )
|
||||
|
||||
switch( bAssignment )
|
||||
{
|
||||
case( DOCTOR ):
|
||||
CASE_DOCTOR:
|
||||
// can character doctor?
|
||||
if( CanCharacterDoctor( pSoldier ) )
|
||||
if (CanCharacterDoctor( pSoldier ) && (pSoldier->sFacilityTypeOperated <= 0 || CanCharacterFacility( pSoldier, bParam, FAC_DOCTOR)))
|
||||
{
|
||||
// set as doctor
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
SetSoldierAssignment( pSoldier, DOCTOR, 0,0,0 );
|
||||
SetSoldierAssignment( pSoldier, bAssignment, 0, 0, 0 );
|
||||
fItWorked = TRUE;
|
||||
}
|
||||
break;
|
||||
case( PATIENT ):
|
||||
CASE_PATIENT:
|
||||
// can character patient?
|
||||
if( CanCharacterPatient( pSoldier ) )
|
||||
if (CanCharacterPatient( pSoldier ) && (pSoldier->sFacilityTypeOperated <= 0 || CanCharacterFacility( pSoldier, bParam, FAC_PATIENT )))
|
||||
{
|
||||
// set as patient
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
SetSoldierAssignment( pSoldier, PATIENT, 0,0,0 );
|
||||
SetSoldierAssignment( pSoldier, bAssignment, 0, 0, 0 );
|
||||
fItWorked = TRUE;
|
||||
}
|
||||
break;
|
||||
@@ -16678,8 +16683,8 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam )
|
||||
}
|
||||
}
|
||||
break;
|
||||
case( REPAIR ):
|
||||
if( CanCharacterRepair( pSoldier ) )
|
||||
CASE_REPAIR:
|
||||
if (CanCharacterRepair( pSoldier ))
|
||||
{
|
||||
BOOLEAN fCanFixSpecificTarget = TRUE;
|
||||
|
||||
@@ -16692,20 +16697,24 @@ void SetAssignmentForList( INT8 bAssignment, INT8 bParam )
|
||||
}
|
||||
else
|
||||
*/
|
||||
if ( pSelectedSoldier->bVehicleUnderRepairID != -1 )
|
||||
if (pSelectedSoldier->bVehicleUnderRepairID != -1)
|
||||
{
|
||||
fCanFixSpecificTarget = CanCharacterRepairVehicle( pSoldier, pSelectedSoldier->bVehicleUnderRepairID );
|
||||
fCanFixSpecificTarget = CanCharacterRepairVehicle( pSoldier, pSelectedSoldier->bVehicleUnderRepairID ) && (pSoldier->sFacilityTypeOperated <= 0 || CanCharacterFacility( pSoldier, bParam, FAC_REPAIR_VEHICLE ));
|
||||
}
|
||||
else if( pSoldier->flags.fFixingRobot )
|
||||
else if (pSoldier->flags.fFixingRobot)
|
||||
{
|
||||
fCanFixSpecificTarget = CanCharacterRepairRobot( pSoldier );
|
||||
fCanFixSpecificTarget = CanCharacterRepairRobot( pSoldier ) && (pSoldier->sFacilityTypeOperated <= 0 || CanCharacterFacility( pSoldier, bParam, FAC_REPAIR_ROBOT ));
|
||||
}
|
||||
else
|
||||
{
|
||||
fCanFixSpecificTarget = (pSoldier->sFacilityTypeOperated <= 0 || CanCharacterFacility( pSoldier, bParam, FAC_REPAIR_ITEMS ));
|
||||
}
|
||||
|
||||
if ( fCanFixSpecificTarget )
|
||||
{
|
||||
// set as repair
|
||||
pSoldier->bOldAssignment = pSoldier->bAssignment;
|
||||
SetSoldierAssignment( pSoldier, REPAIR, pSelectedSoldier->flags.fFixingSAMSite, pSelectedSoldier->flags.fFixingRobot, pSelectedSoldier->bVehicleUnderRepairID );
|
||||
SetSoldierAssignment( pSoldier, bAssignment, pSelectedSoldier->flags.fFixingSAMSite, pSelectedSoldier->flags.fFixingRobot, pSelectedSoldier->bVehicleUnderRepairID );
|
||||
fItWorked = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -17181,7 +17190,7 @@ BOOLEAN CharacterIsTakingItEasy( SOLDIERTYPE *pSoldier )
|
||||
}
|
||||
|
||||
// and healing up?
|
||||
if ( ( pSoldier->bAssignment == PATIENT ) || ( pSoldier->bAssignment == ASSIGNMENT_HOSPITAL ) )
|
||||
if ( (IS_PATIENT(pSoldier->bAssignment) && !IS_DOCTOR(pSoldier->bAssignment)) || (pSoldier->bAssignment == ASSIGNMENT_HOSPITAL) )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
@@ -20280,28 +20289,28 @@ void FacilityAssignmentMenuBtnCallback ( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
break;
|
||||
case FAC_REPAIR_ITEMS:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_REPAIR );
|
||||
pSoldier->flags.fFixingRobot = FALSE;
|
||||
pSoldier->bVehicleUnderRepairID = -1;
|
||||
break;
|
||||
case FAC_REPAIR_VEHICLE:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_REPAIR );
|
||||
pSoldier->flags.fFixingRobot = FALSE;
|
||||
pSoldier->bVehicleUnderRepairID = (INT8)ubVehicleID;
|
||||
break;
|
||||
case FAC_REPAIR_ROBOT:
|
||||
MakeSureToolKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, REPAIR );
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_REPAIR );
|
||||
pSoldier->flags.fFixingRobot = TRUE;
|
||||
pSoldier->bVehicleUnderRepairID = -1;
|
||||
break;
|
||||
case FAC_DOCTOR:
|
||||
MakeSureMedKitIsInHand( pSoldier );
|
||||
ChangeSoldiersAssignment( pSoldier, DOCTOR );
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_DOCTOR );
|
||||
break;
|
||||
case FAC_PATIENT:
|
||||
ChangeSoldiersAssignment( pSoldier, PATIENT );
|
||||
ChangeSoldiersAssignment( pSoldier, FACILITY_PATIENT );
|
||||
break;
|
||||
case FAC_PRACTICE_STRENGTH:
|
||||
pSoldier->bTrainStat = STRENGTH;
|
||||
@@ -20436,7 +20445,7 @@ void FacilityAssignmentMenuBtnCallback ( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
|
||||
// Flugente: I guess this piece of code is here to get a group Id for the soldier, which must not be there for movement specifically. Just my understanding, in case anybody else coming here wonders
|
||||
// why we get movement related stuff when we were jsut ordered to stay in a facility
|
||||
// why we get movement related stuff when we were just ordered to stay in a facility
|
||||
AssignMercToAMovementGroup( pSoldier );
|
||||
MakeSoldiersTacticalAnimationReflectAssignment( pSoldier );
|
||||
|
||||
|
||||
+18
-8
@@ -81,9 +81,24 @@ enum
|
||||
FACILITY_STRATEGIC_MILITIA_MOVEMENT, // Flugente: merc staffs a military HQ, we can now control militia movement on the map
|
||||
DISEASE_DIAGNOSE, // Flugente: check for diseases among mercs and local population
|
||||
DISEASE_DOCTOR_SECTOR, // Flugente: treatpopulation (all non-mercs in the sector) against disease
|
||||
FACILITY_DOCTOR,
|
||||
FACILITY_PATIENT,
|
||||
FACILITY_REPAIR,
|
||||
NUM_ASSIGNMENTS,
|
||||
};
|
||||
|
||||
#define IS_DOCTOR(assignment) ((assignment == DOCTOR) || (assignment == FACILITY_DOCTOR))
|
||||
// left the last : off so syntax is visually consistent with non-macro case statements
|
||||
#define CASE_DOCTOR case DOCTOR: case FACILITY_DOCTOR
|
||||
|
||||
// Does not include HOSPITAL since mercs are not responsible for their care
|
||||
#define IS_PATIENT(assignment) ((assignment == DOCTOR) || (assignment == PATIENT) || (assignment == FACILITY_DOCTOR) || (assignment == FACILITY_PATIENT))
|
||||
// Does not include DOCTOR types because switch cases must be unique
|
||||
#define CASE_PATIENT case PATIENT: case FACILITY_PATIENT
|
||||
|
||||
#define IS_REPAIR(assignment) ((assignment == REPAIR) || (assignment == FACILITY_REPAIR))
|
||||
#define CASE_REPAIR case REPAIR: case FACILITY_REPAIR
|
||||
|
||||
// strings for snitch exposition
|
||||
enum
|
||||
{
|
||||
@@ -115,7 +130,8 @@ enum
|
||||
#define NO_ASSIGNMENT 127 //used when no pSoldier->ubDesiredSquad
|
||||
|
||||
// Train stats defines (must match ATTRIB_MENU_ defines, and pAttributeMenuStrings )
|
||||
enum{
|
||||
enum
|
||||
{
|
||||
HEALTH = 0,
|
||||
AGILITY,
|
||||
DEXTERITY,
|
||||
@@ -481,10 +497,4 @@ BOOLEAN MakeSureMedKitIsInHand( SOLDIERTYPE *pSoldier );
|
||||
|
||||
UINT8 CalcSoldierNeedForSleep( SOLDIERTYPE *pSoldier );
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@@ -771,33 +771,22 @@ INT8 GetSoldierFacilityAssignmentIndex( SOLDIERTYPE *pSoldier )
|
||||
INT8 bAssignment = pSoldier->bAssignment;
|
||||
INT8 bAssignmentIndex = -1; // Return variable. -1 = Non-facility assignment.
|
||||
|
||||
if (bAssignment <= ON_DUTY ||
|
||||
bAssignment == PATIENT ||
|
||||
bAssignment == VEHICLE ||
|
||||
bAssignment == IN_TRANSIT ||
|
||||
bAssignment == TRAIN_TOWN ||
|
||||
bAssignment == TRAIN_MOBILE ||
|
||||
( bAssignment > FACILITY_REST && bAssignment != FACILITY_STRATEGIC_MILITIA_MOVEMENT && ( bAssignment < FACILITY_PRISON_SNITCH || bAssignment > FACILITY_GATHER_RUMOURS ) ))
|
||||
{
|
||||
// Soldier is performing a distinctly NON-FACILITY assignment.
|
||||
return (-1);
|
||||
}
|
||||
|
||||
if (pSoldier->sFacilityTypeOperated == -1)
|
||||
{
|
||||
// Soldier is not set to work at a facility...
|
||||
return (-1);
|
||||
}
|
||||
|
||||
// switch of ALL possible facility assignments
|
||||
switch (bAssignment)
|
||||
{
|
||||
case DOCTOR:
|
||||
case FACILITY_DOCTOR:
|
||||
bAssignmentIndex = FAC_DOCTOR;
|
||||
break;
|
||||
case PATIENT:
|
||||
case FACILITY_PATIENT:
|
||||
bAssignmentIndex = FAC_PATIENT;
|
||||
break;
|
||||
case REPAIR:
|
||||
case FACILITY_REPAIR:
|
||||
// Determine which kind of repair is he performing
|
||||
if ( pSoldier->bVehicleUnderRepairID != -1 )
|
||||
{
|
||||
@@ -945,6 +934,7 @@ INT8 GetSoldierFacilityAssignmentIndex( SOLDIERTYPE *pSoldier )
|
||||
bAssignmentIndex = FAC_STRATEGIC_MILITIA_MOVEMENT;
|
||||
break;
|
||||
default:
|
||||
// Soldier is performing a distinctly NON-FACILITY assignment.
|
||||
bAssignmentIndex = -1;
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -713,8 +713,8 @@ void ChangeStat( MERCPROFILESTRUCT *pProfile, SOLDIERTYPE *pSoldier, UINT8 ubSta
|
||||
if ( ((pSoldier->bAssignment == TRAIN_BY_OTHER || pSoldier->bAssignment == TRAIN_TEAMMATE || pSoldier->bAssignment == TRAIN_SELF ||
|
||||
pSoldier->bAssignment == FACILITY_STAFF || pSoldier->bAssignment == TRAIN_TOWN || pSoldier->bAssignment == TRAIN_MOBILE )
|
||||
&& !gGameSettings.fOptions[TOPTION_QUIET_TRAINING]) ||
|
||||
(pSoldier->bAssignment == REPAIR && !gGameSettings.fOptions[TOPTION_QUIET_REPAIRING]) ||
|
||||
(pSoldier->bAssignment == DOCTOR && !gGameSettings.fOptions[TOPTION_QUIET_DOCTORING]))
|
||||
(IS_REPAIR(pSoldier->bAssignment) && !gGameSettings.fOptions[TOPTION_QUIET_REPAIRING]) ||
|
||||
(IS_DOCTOR(pSoldier->bAssignment) && !gGameSettings.fOptions[TOPTION_QUIET_DOCTORING]))
|
||||
|
||||
TacticalCharacterDialogue( pSoldier, QUOTE_EXPERIENCE_GAIN );
|
||||
}
|
||||
|
||||
@@ -105,12 +105,18 @@ void HandleDisease()
|
||||
// infection chance gets modified depending on assignments
|
||||
FLOAT modifier = 1.0f;
|
||||
|
||||
// if both are in the same squad, chance is increased
|
||||
if ( pTeamSoldier->bAssignment == pSoldier->bAssignment && pSoldier->bAssignment < ON_DUTY )
|
||||
// if both are in the same squad or vehicle, chance is increased
|
||||
if (pTeamSoldier->bAssignment == pSoldier->bAssignment &&
|
||||
(pSoldier->bAssignment < ON_DUTY ||
|
||||
(pSoldier->bAssignment == VEHICLE && pSoldier->iVehicleId == pTeamSoldier->iVehicleId)))
|
||||
{
|
||||
modifier = 1.5;
|
||||
}
|
||||
// doctor-patient relations increase chance even more
|
||||
else if ( (pTeamSoldier->bAssignment == DOCTOR || pTeamSoldier->bAssignment == PATIENT) && (pSoldier->bAssignment == DOCTOR || pSoldier->bAssignment == PATIENT) )
|
||||
else if (IS_PATIENT(pTeamSoldier->bAssignment) && IS_PATIENT(pSoldier->bAssignment))
|
||||
{
|
||||
modifier = 4;
|
||||
}
|
||||
|
||||
// we might get a disease from this...
|
||||
HandlePossibleInfection( pSoldier, pTeamSoldier, INFECTION_TYPE_CONTACT_HUMAN, modifier );
|
||||
|
||||
@@ -1966,7 +1966,7 @@ UINT8 GetBestMercLeaderInSector( INT16 sX, INT16 sY, INT8 sZ )
|
||||
|
||||
UINT8 GetRandomMercInSectorNotInList( INT16 sX, INT16 sY, INT8 sZ, std::vector<UINT8> aTaboo, BOOLEAN fImpOnly )
|
||||
{
|
||||
std::vector<UINT8> resultvector;
|
||||
std::vector<UINT16> resultvector;
|
||||
SOLDIERTYPE* pTeamSoldier = NULL;
|
||||
UINT16 bMercID = gTacticalStatus.Team[gbPlayerNum].bFirstID;
|
||||
UINT16 bLastTeamID = gTacticalStatus.Team[gbPlayerNum].bLastID;
|
||||
@@ -2267,7 +2267,7 @@ void HandleDynamicOpinionChange( SOLDIERTYPE* pSoldier, UINT8 usEvent, BOOLEAN f
|
||||
|
||||
case OPINIONEVENT_DISEASE_DISGUSTING:
|
||||
// not if the other guy is a doctor, is currently used as a doctor, or has disease themself
|
||||
if ( pTeamSoldier->bAssignment == DOCTOR || pTeamSoldier->bAssignment == DISEASE_DOCTOR_SECTOR || HAS_SKILL_TRAIT( pTeamSoldier, DOCTOR_NT ) || pTeamSoldier->HasDisease(TRUE, FALSE, FALSE) )
|
||||
if ( IS_DOCTOR(pTeamSoldier->bAssignment) || pTeamSoldier->bAssignment == DISEASE_DOCTOR_SECTOR || HAS_SKILL_TRAIT( pTeamSoldier, DOCTOR_NT ) || pTeamSoldier->HasDisease(TRUE, FALSE, FALSE) )
|
||||
continue;
|
||||
break;
|
||||
|
||||
|
||||
+3
-3
@@ -2246,7 +2246,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
|
||||
switch( pSoldier->bAssignment )
|
||||
{
|
||||
case DOCTOR:
|
||||
CASE_DOCTOR:
|
||||
sIconIndex_Assignment = 1;
|
||||
fDoIcon_Assignment = TRUE;
|
||||
sPtsAvailable = CalculateHealingPointsForDoctor( MercPtrs[ pFace->ubSoldierID ], &usMaximumPts, FALSE );
|
||||
@@ -2258,7 +2258,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
usMaximumPts = ( usMaximumPts + 5 ) / 10;
|
||||
break;
|
||||
|
||||
case PATIENT:
|
||||
CASE_PATIENT:
|
||||
sIconIndex_Assignment = 2;
|
||||
fDoIcon_Assignment = TRUE;
|
||||
// show current health / maximum health
|
||||
@@ -2300,7 +2300,7 @@ void HandleRenderFaceAdjustments( FACETYPE *pFace, BOOLEAN fDisplayBuffer, BOOLE
|
||||
}
|
||||
break;
|
||||
|
||||
case REPAIR:
|
||||
CASE_REPAIR:
|
||||
|
||||
sIconIndex_Assignment = 0;
|
||||
fDoIcon_Assignment = TRUE;
|
||||
|
||||
+1
-1
@@ -382,7 +382,7 @@ void HourlyFoodSituationUpdate( SOLDIERTYPE *pSoldier )
|
||||
else
|
||||
activitymodifier = gGameExternalOptions.sFoodDigestionTravel;
|
||||
}
|
||||
else if ( pSoldier->bAssignment > DOCTOR )
|
||||
else if ( pSoldier->bAssignment > DOCTOR ) // unclear why this does not include DOCTOR assignment???
|
||||
activitymodifier = gGameExternalOptions.sFoodDigestionAssignment;
|
||||
else if ( (gTacticalStatus.uiFlags & INCOMBAT) )
|
||||
activitymodifier = gGameExternalOptions.sFoodDigestionCombat;
|
||||
|
||||
@@ -6476,10 +6476,6 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
INT16 usX, usY;
|
||||
INT16 ubAttackAPs;
|
||||
UINT8 ubNumLine;
|
||||
INT16 sTop;
|
||||
INT16 sHeight;
|
||||
INT16 sLeft;
|
||||
INT16 sWidth;
|
||||
|
||||
OBJECTTYPE *gpComparedItemDescObject = NULL;
|
||||
|
||||
@@ -7931,7 +7927,7 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
* GetAttackAPTraitMultiplier( gpItemDescSoldier, gpComparedItemDescObject, WM_BURST )
|
||||
+ CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpComparedItemDescObject, gpItemDescSoldier ) + 0.5f );
|
||||
// Get base Burst Cost
|
||||
INT16 iBurstAPCost = BaseAPsToShootOrStabNoModifier( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpComparedItemDescObject );
|
||||
INT16 iBurstAPCost = BaseAPsToShootOrStabNoModifier( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpComparedItemDescObject )
|
||||
+ CalcAPsToBurstNoModifier( APBPConstants[DEFAULT_APS], gpComparedItemDescObject );
|
||||
// Get Burst Cost Modifier
|
||||
INT16 iBurstAPCostModifier = iFinalBurstAPCost - iBurstAPCost;
|
||||
@@ -8001,7 +7997,7 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject )
|
||||
* GetAttackAPTraitMultiplier( gpItemDescSoldier, gpComparedItemDescObject, WM_AUTOFIRE )
|
||||
+ CalcAPsToAutofire( APBPConstants[DEFAULT_APS], gpComparedItemDescObject, 3, gpItemDescSoldier ) + 0.5f );
|
||||
// Get base Autofire Cost
|
||||
INT16 iAutoAPCost = BaseAPsToShootOrStabNoModifier( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpComparedItemDescObject );
|
||||
INT16 iAutoAPCost = BaseAPsToShootOrStabNoModifier( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpComparedItemDescObject )
|
||||
+ CalcAPsToAutofireNoModifier( APBPConstants[DEFAULT_APS], gpComparedItemDescObject, 3 );
|
||||
// Get Autofire Cost Modifier
|
||||
INT16 iAutoAPCostModifier = iFinalAutoAPCost - iAutoAPCost;
|
||||
@@ -8767,7 +8763,7 @@ void DrawAmmoValues( OBJECTTYPE * gpItemDescObject, int shotsLeft )
|
||||
INT16 usY;
|
||||
INT16 usX;
|
||||
UINT8 ubNumLine;
|
||||
INT16 sLeft, sTop, sWidth, sHeight;
|
||||
INT16 sTop, sHeight;
|
||||
|
||||
OBJECTTYPE *gpComparedItemDescObject = NULL;
|
||||
|
||||
@@ -9027,7 +9023,7 @@ void DrawExplosiveValues( OBJECTTYPE * gpItemDescObject )
|
||||
INT16 usY;
|
||||
INT16 usX;
|
||||
UINT8 ubNumLine;
|
||||
INT16 sLeft, sTop, sWidth, sHeight;
|
||||
INT16 sTop, sHeight;
|
||||
|
||||
OBJECTTYPE *gpComparedItemDescObject = NULL;
|
||||
|
||||
@@ -9672,7 +9668,6 @@ void DrawArmorValues( OBJECTTYPE * gpItemDescObject )
|
||||
INT16 usY;
|
||||
INT16 usX;
|
||||
UINT8 ubNumLine;
|
||||
INT16 sLeft, sTop, sWidth, sHeight;
|
||||
|
||||
OBJECTTYPE *gpComparedItemDescObject = NULL;
|
||||
|
||||
|
||||
@@ -1730,15 +1730,15 @@ void AddSoldierToSectorGridNo( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT8 ubDir
|
||||
{
|
||||
InternalSoldierInSectorSleep( pSoldier, pSoldier->sInsertionGridNo, FALSE );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == PATIENT )
|
||||
{
|
||||
SoldierInSectorPatient( pSoldier, pSoldier->sInsertionGridNo );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == DOCTOR )
|
||||
else if ( IS_DOCTOR(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorDoctor( pSoldier, pSoldier->sInsertionGridNo );
|
||||
}
|
||||
else if ( pSoldier->bAssignment == REPAIR )
|
||||
else if ( IS_PATIENT(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorPatient( pSoldier, pSoldier->sInsertionGridNo );
|
||||
}
|
||||
else if ( IS_REPAIR(pSoldier->bAssignment) )
|
||||
{
|
||||
SoldierInSectorRepair( pSoldier, pSoldier->sInsertionGridNo );
|
||||
}
|
||||
|
||||
@@ -490,7 +490,7 @@ BOOLEAN DoctorIsPresent( SOLDIERTYPE * pPatient, BOOLEAN fOnDoctorAssignmentChec
|
||||
// cannot make surgery on self!
|
||||
continue; // NEXT!!!
|
||||
}
|
||||
if ( fOnDoctorAssignmentCheck && pMedic->bAssignment != DOCTOR )
|
||||
if ( fOnDoctorAssignmentCheck && !IS_DOCTOR(pMedic->bAssignment) )
|
||||
{
|
||||
// not on the right assignment!
|
||||
continue; // NEXT!!!
|
||||
|
||||
@@ -1866,6 +1866,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"医生",// administering medical aid
|
||||
L"病人", // getting medical aid
|
||||
L"修理", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1964,6 +1967,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"医生",
|
||||
L"病人",
|
||||
L"修理",
|
||||
};
|
||||
|
||||
|
||||
@@ -2021,6 +2027,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"医生",
|
||||
L"病人",
|
||||
L"修理",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1863,6 +1863,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Dokter", // administering medical aid
|
||||
L"Patiënt", // getting medical aid
|
||||
L"Repareer", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1961,6 +1964,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Dokter", // administering medical aid
|
||||
L"Patiënt", // getting medical aid
|
||||
L"Repareer", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -2018,6 +2024,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Dokter", // administering medical aid
|
||||
L"Patiënt", // getting medical aid
|
||||
L"Repareer", // repairing
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1867,6 +1867,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Doctor", // administering medical aid
|
||||
L"Patient", // getting medical aid
|
||||
L"Repair", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1965,6 +1968,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Doctor",
|
||||
L"Patient",
|
||||
L"Repair",
|
||||
};
|
||||
|
||||
|
||||
@@ -2022,6 +2028,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Doctor",
|
||||
L"Patient",
|
||||
L"Repair",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1873,6 +1873,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command.", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Docteur", // administering medical aid
|
||||
L"Patient(e)", // getting medical aid
|
||||
L"Réparat.", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1971,6 +1974,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commande", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Docteur",
|
||||
L"Patient",
|
||||
L"Réparation",
|
||||
};
|
||||
|
||||
|
||||
@@ -2028,6 +2034,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commander", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Docteur",
|
||||
L"Patient",
|
||||
L"Réparation",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1878,6 +1878,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Doktor", // administering medical aid
|
||||
L"Patient", // getting medical aid
|
||||
L"Repar.", // repairing
|
||||
};
|
||||
|
||||
STR16 pMilitiaString[] =
|
||||
@@ -1972,6 +1975,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Doktor",
|
||||
L"Patient",
|
||||
L"Reparieren",
|
||||
};
|
||||
|
||||
// refer to above for comments
|
||||
@@ -2027,6 +2033,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Doktor",
|
||||
L"Patient",
|
||||
L"Reparieren",
|
||||
};
|
||||
|
||||
// the contract options
|
||||
|
||||
@@ -1859,6 +1859,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Dottore", // administering medical aid
|
||||
L"Paziente", // getting medical aid
|
||||
L"Riparare", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1957,6 +1960,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Dottore",
|
||||
L"Paziente",
|
||||
L"Riparare",
|
||||
};
|
||||
|
||||
|
||||
@@ -2014,6 +2020,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Dottore",
|
||||
L"Paziente",
|
||||
L"Ripara",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1875,6 +1875,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders
|
||||
L"Diagnose", // disease diagnosis //TODO.Translate
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Lekarz", // administering medical aid
|
||||
L"Pacjent", // getting medical aid
|
||||
L"Naprawa", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1973,6 +1976,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Lekarz",
|
||||
L"Pacjent",
|
||||
L"Naprawa",
|
||||
};
|
||||
|
||||
|
||||
@@ -2030,6 +2036,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Lekarz",
|
||||
L"Pacjent",
|
||||
L"Naprawa",
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1867,6 +1867,9 @@ STR16 pAssignmentStrings[] =
|
||||
L"Command", // militia movement orders //TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat D.", // treat disease among the population
|
||||
L"Медик", // administering medical aid
|
||||
L"Пациент", // getting medical aid
|
||||
L"Ремонт", // repairing
|
||||
};
|
||||
|
||||
|
||||
@@ -1965,6 +1968,9 @@ STR16 pPersonnelAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Медик",
|
||||
L"Пациент",
|
||||
L"Ремонт",
|
||||
};
|
||||
|
||||
|
||||
@@ -2022,6 +2028,9 @@ STR16 pLongAssignmentStrings[] =
|
||||
L"Commanding Militia", // militia movement orders // TODO.Translate
|
||||
L"Diagnose", // disease diagnosis
|
||||
L"Treat Population disease", // treat disease among the population
|
||||
L"Медик",
|
||||
L"Пациент",
|
||||
L"Ремонтирует",
|
||||
};
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user