mirror of
https://github.com/1dot13/source.git
synced 2026-08-19 14:20:30 +02:00
Assassins use and loose uniforms if uncovered
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6326 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+6
-2
@@ -9399,7 +9399,9 @@ BOOLEAN ApplyClothes( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fUseAPs
|
|||||||
if ( COMPARE_PALETTEREP_ID(pSoldier->VestPal, gUniformColors[ i ].vest) && COMPARE_PALETTEREP_ID(pSoldier->PantsPal, gUniformColors[ i ].pants) )
|
if ( COMPARE_PALETTEREP_ID(pSoldier->VestPal, gUniformColors[ i ].vest) && COMPARE_PALETTEREP_ID(pSoldier->PantsPal, gUniformColors[ i ].pants) )
|
||||||
{
|
{
|
||||||
pSoldier->bSoldierFlagMask |= SOLDIER_COVERT_SOLDIER;
|
pSoldier->bSoldierFlagMask |= SOLDIER_COVERT_SOLDIER;
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_SOLDIER], pSoldier->GetName() );
|
|
||||||
|
if ( pSoldier->bTeam == OUR_TEAM )
|
||||||
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_SOLDIER], pSoldier->GetName() );
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -9409,7 +9411,9 @@ BOOLEAN ApplyClothes( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fUseAPs
|
|||||||
if ( !(pSoldier->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER) )
|
if ( !(pSoldier->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER) )
|
||||||
{
|
{
|
||||||
pSoldier->bSoldierFlagMask |= SOLDIER_COVERT_CIV;
|
pSoldier->bSoldierFlagMask |= SOLDIER_COVERT_CIV;
|
||||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_CIVILIAN], pSoldier->GetName() );
|
|
||||||
|
if ( pSoldier->bTeam == OUR_TEAM )
|
||||||
|
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DISGUISED_AS_CIVILIAN], pSoldier->GetName() );
|
||||||
}
|
}
|
||||||
|
|
||||||
// reevaluate sight - otherwise we could hide by changing clothes in plain sight!
|
// reevaluate sight - otherwise we could hide by changing clothes in plain sight!
|
||||||
|
|||||||
@@ -15460,14 +15460,22 @@ void SOLDIERTYPE::Strip()
|
|||||||
|
|
||||||
if ( usPaletteAnimSurface != INVALID_ANIMATION_SURFACE )
|
if ( usPaletteAnimSurface != INVALID_ANIMATION_SURFACE )
|
||||||
{
|
{
|
||||||
UINT8 ubProfileIndex;
|
if ( this->bTeam == OUR_TEAM )
|
||||||
MERCPROFILESTRUCT * pProfile;
|
{
|
||||||
|
UINT8 ubProfileIndex;
|
||||||
|
MERCPROFILESTRUCT * pProfile;
|
||||||
|
|
||||||
ubProfileIndex = this->ubProfile;
|
ubProfileIndex = this->ubProfile;
|
||||||
pProfile = &(gMercProfiles[ubProfileIndex]);
|
pProfile = &(gMercProfiles[ubProfileIndex]);
|
||||||
|
|
||||||
SET_PALETTEREP_ID ( this->VestPal, pProfile->VEST );
|
SET_PALETTEREP_ID ( this->VestPal, pProfile->VEST );
|
||||||
SET_PALETTEREP_ID ( this->PantsPal, pProfile->PANTS );
|
SET_PALETTEREP_ID ( this->PantsPal, pProfile->PANTS );
|
||||||
|
}
|
||||||
|
else if ( this->bSoldierFlagMask & SOLDIER_ASSASSIN )
|
||||||
|
{
|
||||||
|
SET_PALETTEREP_ID( this->VestPal, gUniformColors[ UNIFORM_ENEMY_ELITE ].vest );
|
||||||
|
SET_PALETTEREP_ID( this->PantsPal, gUniformColors[ UNIFORM_ENEMY_ELITE ].pants );
|
||||||
|
}
|
||||||
|
|
||||||
// Use palette from HVOBJECT, then use substitution for pants, etc
|
// Use palette from HVOBJECT, then use substitution for pants, etc
|
||||||
memcpy( this->p8BPPPalette, gAnimSurfaceDatabase[ usPaletteAnimSurface ].hVideoObject->pPaletteEntry, sizeof( this->p8BPPPalette ) * 256 );
|
memcpy( this->p8BPPPalette, gAnimSurfaceDatabase[ usPaletteAnimSurface ].hVideoObject->pPaletteEntry, sizeof( this->p8BPPPalette ) * 256 );
|
||||||
|
|||||||
+42
-32
@@ -3164,38 +3164,6 @@ SOLDIERTYPE* TacticalCreateEnemyAssassin(UINT8 disguisetype)
|
|||||||
// set militia name to further irritate the player
|
// set militia name to further irritate the player
|
||||||
swprintf( pSoldier->name, TacticalStr[ MILITIA_TEAM_MERC_NAME ] );
|
swprintf( pSoldier->name, TacticalStr[ MILITIA_TEAM_MERC_NAME ] );
|
||||||
|
|
||||||
// wear a militia uniform
|
|
||||||
UINT16 usPaletteAnimSurface = LoadSoldierAnimationSurface( pSoldier, pSoldier->usAnimState );
|
|
||||||
|
|
||||||
if ( usPaletteAnimSurface != INVALID_ANIMATION_SURFACE )
|
|
||||||
{
|
|
||||||
switch( disguisetype )
|
|
||||||
{
|
|
||||||
case ELITE_MILITIA:
|
|
||||||
SET_PALETTEREP_ID( pSoldier->VestPal, gUniformColors[ UNIFORM_MILITIA_ELITE ].vest );
|
|
||||||
SET_PALETTEREP_ID( pSoldier->PantsPal, gUniformColors[ UNIFORM_MILITIA_ELITE ].pants );
|
|
||||||
break;
|
|
||||||
case REGULAR_MILITIA:
|
|
||||||
SET_PALETTEREP_ID( pSoldier->VestPal, gUniformColors[ UNIFORM_MILITIA_REGULAR ].vest );
|
|
||||||
SET_PALETTEREP_ID( pSoldier->PantsPal, gUniformColors[ UNIFORM_MILITIA_REGULAR ].pants );
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
SET_PALETTEREP_ID( pSoldier->VestPal, gUniformColors[ UNIFORM_MILITIA_ROOKIE ].vest );
|
|
||||||
SET_PALETTEREP_ID( pSoldier->PantsPal, gUniformColors[ UNIFORM_MILITIA_ROOKIE ].pants );
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Use palette from HVOBJECT, then use substitution for pants, etc
|
|
||||||
memcpy( pSoldier->p8BPPPalette, gAnimSurfaceDatabase[ usPaletteAnimSurface ].hVideoObject->pPaletteEntry, sizeof( pSoldier->p8BPPPalette ) * 256 );
|
|
||||||
|
|
||||||
SetPaletteReplacement( pSoldier->p8BPPPalette, pSoldier->HeadPal );
|
|
||||||
SetPaletteReplacement( pSoldier->p8BPPPalette, pSoldier->VestPal );
|
|
||||||
SetPaletteReplacement( pSoldier->p8BPPPalette, pSoldier->PantsPal );
|
|
||||||
SetPaletteReplacement( pSoldier->p8BPPPalette, pSoldier->SkinPal );
|
|
||||||
|
|
||||||
pSoldier->CreateSoldierPalettes();
|
|
||||||
}
|
|
||||||
|
|
||||||
// send soldier to centre of map, roughly
|
// send soldier to centre of map, roughly
|
||||||
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
pSoldier->aiData.sNoiseGridno = (CENTRAL_GRIDNO + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) + ( Random( CENTRAL_RADIUS * 2 + 1 ) - CENTRAL_RADIUS ) * WORLD_COLS);
|
||||||
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
pSoldier->aiData.ubNoiseVolume = MAX_MISC_NOISE_DURATION;
|
||||||
@@ -3230,6 +3198,48 @@ void CreateAssassin(UINT8 disguisetype)
|
|||||||
|
|
||||||
AddSoldierToSector( pSoldier->ubID );
|
AddSoldierToSector( pSoldier->ubID );
|
||||||
|
|
||||||
|
// assassins are elite soldiers disguised as militia. Create militia clothes and apply them
|
||||||
|
BOOLEAN vestfound = FALSE;
|
||||||
|
BOOLEAN pantsfound = FALSE;
|
||||||
|
UINT16 vestitem = 0;
|
||||||
|
UINT16 pantsitem = 0;
|
||||||
|
switch( disguisetype )
|
||||||
|
{
|
||||||
|
case ELITE_MILITIA:
|
||||||
|
vestfound = GetFirstClothesItemWithSpecificData(&vestitem, gUniformColors[ UNIFORM_MILITIA_ELITE ].vest, "blank");
|
||||||
|
pantsfound = GetFirstClothesItemWithSpecificData(&pantsitem, "blank", gUniformColors[ UNIFORM_MILITIA_ELITE ].pants);
|
||||||
|
break;
|
||||||
|
case REGULAR_MILITIA:
|
||||||
|
vestfound = GetFirstClothesItemWithSpecificData(&vestitem, gUniformColors[ UNIFORM_MILITIA_REGULAR ].vest, "blank");
|
||||||
|
pantsfound = GetFirstClothesItemWithSpecificData(&pantsitem, "blank", gUniformColors[ UNIFORM_MILITIA_REGULAR ].pants);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
vestfound = GetFirstClothesItemWithSpecificData(&vestitem, gUniformColors[ UNIFORM_MILITIA_ROOKIE ].vest, "blank");
|
||||||
|
pantsfound = GetFirstClothesItemWithSpecificData(&pantsitem, "blank", gUniformColors[ UNIFORM_MILITIA_ROOKIE ].pants);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( vestfound )
|
||||||
|
{
|
||||||
|
CreateItem( vestitem, 100, &gTempObject );
|
||||||
|
|
||||||
|
ApplyClothes(pSoldier, &gTempObject, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pantsfound )
|
||||||
|
{
|
||||||
|
CreateItem( pantsitem, 100, &gTempObject );
|
||||||
|
|
||||||
|
ApplyClothes(pSoldier, &gTempObject, FALSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Dirty
|
||||||
|
fInterfacePanelDirty = DIRTYLEVEL2;
|
||||||
|
|
||||||
|
// add correct flags. Undo SOLDIER_COVERT_CIV flag, we disguise as militia, not as a civilian (player cannot disguise as militia, thus he becomes a civilian)
|
||||||
|
pSoldier->bSoldierFlagMask &= ~SOLDIER_COVERT_CIV;
|
||||||
|
pSoldier->bSoldierFlagMask |= (SOLDIER_COVERT_SOLDIER|SOLDIER_ASSASSIN);
|
||||||
|
|
||||||
// So we can see them!
|
// So we can see them!
|
||||||
AllTeamsLookForAll(NO_INTERRUPTS);
|
AllTeamsLookForAll(NO_INTERRUPTS);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user