mirror of
https://github.com/1dot13/source.git
synced 2026-08-12 14:10:23 +02:00
- New Feature: Spotter skill (available to every merc) allows a merc to be spotter for other snipers. Spotter items have to be in hands, spending APs cancels action.
- renamed GetObjectNCTHModifier to GetObjectModifier, as function is no longer used exclusively for NCTH Warning: GameDir >= r1896 is required. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6694 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+163
-155
@@ -1085,162 +1085,8 @@ void HourlyMoraleUpdate( void )
|
||||
}
|
||||
}
|
||||
|
||||
// WANNE: Fix by Headrock: Morale and the ice-cream truck.
|
||||
if (OKToCheckOpinion(pOtherSoldier->ubProfile))
|
||||
{
|
||||
bOpinion = pProfile->bMercOpinion[ pOtherSoldier->ubProfile ];
|
||||
}
|
||||
else
|
||||
{
|
||||
bOpinion = 0;
|
||||
}
|
||||
|
||||
// Flugente: evaluate appearance/refinement/hated nationalities
|
||||
|
||||
// some people loathe ugly people and like beautiful people. It's a mean world.
|
||||
// we also handle sexism here
|
||||
switch ( gMercProfiles[ pOtherSoldier->ubProfile ].bAppearance )
|
||||
{
|
||||
case APPEARANCE_UGLY:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 4;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pOtherSoldier->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 2;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_HOMELY:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pOtherSoldier->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_ATTRACTIVE:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pOtherSoldier->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_BABE:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 4;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pOtherSoldier->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 2;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// some people care about how distuingished other people are. Malus if on different ends of the spectrum, a small bonus if on the same and its really important to the person
|
||||
// also give a malus if the other person is a slob or snob and we are average but care extremely (we don't like people who behave differently)
|
||||
switch ( gMercProfiles[ pOtherSoldier->ubProfile ].bRefinement )
|
||||
{
|
||||
case REFINEMENT_SLOB:
|
||||
{
|
||||
if ( pProfile->bRefinement == REFINEMENT_AVERAGE )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
if ( pProfile->bRefinement == REFINEMENT_SLOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
else if ( pProfile->bRefinement == REFINEMENT_SNOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
else if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case REFINEMENT_SNOB:
|
||||
{
|
||||
if ( pProfile->bRefinement == REFINEMENT_AVERAGE )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
if ( pProfile->bRefinement == REFINEMENT_SNOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
else if ( pProfile->bRefinement == REFINEMENT_SLOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
else if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// some people hate other nationalities (do not mix up with racism, which uses bRace)
|
||||
if ( pProfile->bHatedNationality > -1 && gMercProfiles[ pOtherSoldier->ubProfile ].bNationality == pProfile->bHatedNationality )
|
||||
{
|
||||
if ( pProfile->bHatedNationalityCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModHatedNationality;
|
||||
else if ( pProfile->bHatedNationalityCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModHatedNationality * 2;
|
||||
}
|
||||
|
||||
// some people are racists
|
||||
if ( pProfile->bRacist && gMercProfiles[ pOtherSoldier->ubProfile ].bRace != pProfile->bRace )
|
||||
{
|
||||
if ( pProfile->bRacist == RACIST_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRacism;
|
||||
else if ( pProfile->bRacist == RACIST_VERY )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRacism * 2;
|
||||
}
|
||||
bOpinion = SoldierRelation( pSoldier, pOtherSoldier);
|
||||
|
||||
// Flugente: backgrounds
|
||||
if ( pSoldier->HasBackgroundFlag( BACKGROUND_XENOPHOBIC ) && pOtherSoldier->ubProfile != NO_PROFILE && gMercProfiles[pSoldier->ubProfile].usBackground != gMercProfiles[pOtherSoldier->ubProfile].usBackground )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModXenophobicBackGround;
|
||||
|
||||
if (bOpinion == HATED_OPINION)
|
||||
{
|
||||
bHated = WhichHated( pSoldier->ubProfile, pOtherSoldier->ubProfile );
|
||||
@@ -1450,4 +1296,166 @@ BOOLEAN IsShowOffNearBy( SOLDIERTYPE * pSoldier )
|
||||
}
|
||||
|
||||
return( fYesHeIs );
|
||||
}
|
||||
|
||||
// Flugente: calculate A's opinion of B
|
||||
INT8 SoldierRelation( SOLDIERTYPE* pSoldierA, SOLDIERTYPE* pSoldierB)
|
||||
{
|
||||
INT8 bOpinion = 0;
|
||||
|
||||
// WANNE: Fix by Headrock: Morale and the ice-cream truck.
|
||||
if ( !OKToCheckOpinion(pSoldierB->ubProfile))
|
||||
return 0;
|
||||
|
||||
MERCPROFILESTRUCT* pProfile = &(gMercProfiles[ pSoldierA->ubProfile ]);
|
||||
|
||||
bOpinion = pProfile->bMercOpinion[ pSoldierB->ubProfile ];
|
||||
|
||||
// Flugente: evaluate appearance/refinement/hated nationalities
|
||||
|
||||
// some people loathe ugly people and like beautiful people. It's a mean world.
|
||||
// we also handle sexism here
|
||||
switch ( gMercProfiles[ pSoldierB->ubProfile ].bAppearance )
|
||||
{
|
||||
case APPEARANCE_UGLY:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 4;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pSoldierB->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 2;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_HOMELY:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pSoldierB->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModSexism * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_ATTRACTIVE:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pSoldierB->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case APPEARANCE_BABE:
|
||||
{
|
||||
if ( pProfile->bAppearanceCareLevel == CARELEVEL_SOME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 2;
|
||||
else if ( pProfile->bAppearanceCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModAppearance * 4;
|
||||
|
||||
// some people are sexists
|
||||
if ( pProfile->bSexist && gMercProfiles[ pSoldierB->ubProfile ].bSex != pProfile->bSex )
|
||||
{
|
||||
if ( pProfile->bSexist == SOMEWHAT_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 2;
|
||||
else if ( pProfile->bSexist == VERY_SEXIST )
|
||||
bOpinion += gGameExternalOptions.sMoraleModSexism * 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// some people care about how distuingished other people are. Malus if on different ends of the spectrum, a small bonus if on the same and its really important to the person
|
||||
// also give a malus if the other person is a slob or snob and we are average but care extremely (we don't like people who behave differently)
|
||||
switch ( gMercProfiles[ pSoldierB->ubProfile ].bRefinement )
|
||||
{
|
||||
case REFINEMENT_SLOB:
|
||||
{
|
||||
if ( pProfile->bRefinement == REFINEMENT_AVERAGE )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
if ( pProfile->bRefinement == REFINEMENT_SLOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
else if ( pProfile->bRefinement == REFINEMENT_SNOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
else if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case REFINEMENT_SNOB:
|
||||
{
|
||||
if ( pProfile->bRefinement == REFINEMENT_AVERAGE )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
if ( pProfile->bRefinement == REFINEMENT_SNOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion += gGameExternalOptions.sMoraleModRefinement;
|
||||
}
|
||||
else if ( pProfile->bRefinement == REFINEMENT_SLOB )
|
||||
{
|
||||
if ( pProfile->bRefinementCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement;
|
||||
else if ( pProfile->bRefinementCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRefinement * 2;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// some people hate other nationalities (do not mix up with racism, which uses bRace)
|
||||
if ( pProfile->bHatedNationality > -1 && gMercProfiles[ pSoldierB->ubProfile ].bNationality == pProfile->bHatedNationality )
|
||||
{
|
||||
if ( pProfile->bHatedNationalityCareLevel == CARELEVEL_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModHatedNationality;
|
||||
else if ( pProfile->bHatedNationalityCareLevel == CARELEVEL_EXTREME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModHatedNationality * 2;
|
||||
}
|
||||
|
||||
// some people are racists
|
||||
if ( pProfile->bRacist && gMercProfiles[ pSoldierB->ubProfile ].bRace != pProfile->bRace )
|
||||
{
|
||||
if ( pProfile->bRacist == RACIST_SOME )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRacism;
|
||||
else if ( pProfile->bRacist == RACIST_VERY )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModRacism * 2;
|
||||
}
|
||||
|
||||
// Flugente: backgrounds
|
||||
if ( pSoldierA->HasBackgroundFlag( BACKGROUND_XENOPHOBIC ) && pSoldierB->ubProfile != NO_PROFILE && gMercProfiles[pSoldierA->ubProfile].usBackground != gMercProfiles[pSoldierB->ubProfile].usBackground )
|
||||
bOpinion -= gGameExternalOptions.sMoraleModXenophobicBackGround;
|
||||
|
||||
return bOpinion;
|
||||
}
|
||||
Reference in New Issue
Block a user