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:
Flugente
2013-08-27 22:48:02 +00:00
parent 18a55c89cc
commit ee8d4f6eb9
3 changed files with 63 additions and 41 deletions
+6 -2
View File
@@ -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) )
{
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;
}
@@ -9409,7 +9411,9 @@ BOOLEAN ApplyClothes( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fUseAPs
if ( !(pSoldier->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER) )
{
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!
+14 -6
View File
@@ -15460,14 +15460,22 @@ void SOLDIERTYPE::Strip()
if ( usPaletteAnimSurface != INVALID_ANIMATION_SURFACE )
{
UINT8 ubProfileIndex;
MERCPROFILESTRUCT * pProfile;
if ( this->bTeam == OUR_TEAM )
{
UINT8 ubProfileIndex;
MERCPROFILESTRUCT * pProfile;
ubProfileIndex = this->ubProfile;
pProfile = &(gMercProfiles[ubProfileIndex]);
ubProfileIndex = this->ubProfile;
pProfile = &(gMercProfiles[ubProfileIndex]);
SET_PALETTEREP_ID ( this->VestPal, pProfile->VEST );
SET_PALETTEREP_ID ( this->PantsPal, pProfile->PANTS );
SET_PALETTEREP_ID ( this->VestPal, pProfile->VEST );
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
memcpy( this->p8BPPPalette, gAnimSurfaceDatabase[ usPaletteAnimSurface ].hVideoObject->pPaletteEntry, sizeof( this->p8BPPPalette ) * 256 );
+43 -33
View File
@@ -3150,7 +3150,7 @@ SOLDIERTYPE* TacticalCreateEnemyAssassin(UINT8 disguisetype)
// set correct stats
pSoldier->stats.bLife = pSoldier->stats.bLifeMax = (INT8)( 70 + Random( 26 ) );
pSoldier->stats.bAgility = (INT8)( 70 + Random( 16 ) );
// add assassin flag
pSoldier->bSoldierFlagMask |= (SOLDIER_COVERT_SOLDIER|SOLDIER_ASSASSIN);
@@ -3164,38 +3164,6 @@ SOLDIERTYPE* TacticalCreateEnemyAssassin(UINT8 disguisetype)
// set militia name to further irritate the player
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
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;
@@ -3230,6 +3198,48 @@ void CreateAssassin(UINT8 disguisetype)
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!
AllTeamsLookForAll(NO_INTERRUPTS);