mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
- reworked the tripwire nework flags. This will allow much more complex networks in the future. WARNING: planted tripwires in savegames from previous savegames will behave strangely with this version.
- externalised texts for cleaning, food, corpse handling and covert ops - tripwire can now be defused even if it does not have a blue flag. When having a wirecutter in the main hand, click on the planted tripwire while crouched, the defuse dialogue will show up. - corpses spawned from items will behave according to the zombie spawn rules - fixed a few glitches with the covert ops trait - fixed a bug that gave the 'mounted' bonus on a roof git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5546 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -3073,7 +3073,7 @@ void recievePLANTEXPLOSIVE (RPCParameters *rpcParameters)
|
||||
(*pObj)[0]->data.misc.bDelay = exp->bDelayFreq;
|
||||
|
||||
(*pObj)[0]->data.ubDirection = DIRECTION_IRRELEVANT;
|
||||
(*pObj)[0]->data.ubWireNetworkFlag = ENEMY_NET_1_LVL_1;
|
||||
(*pObj)[0]->data.ubWireNetworkFlag = (TRIPWIRE_NETWORK_OWNER_ENEMY|TRIPWIRE_NETWORK_NET_1|TRIPWIRE_NETWORK_LVL_1);
|
||||
(*pObj)[0]->data.bDefuseFrequency = 0;
|
||||
|
||||
// save old clients WorldID if we can
|
||||
|
||||
+29
-25
@@ -1129,15 +1129,19 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE
|
||||
// determine this tripwire's flag
|
||||
UINT32 ubWireNetworkFlag = (*pObj)[0]->data.ubWireNetworkFlag;
|
||||
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_1_LVL_1 | PLAYER_NET_1_LVL_2 | PLAYER_NET_1_LVL_3 | PLAYER_NET_1_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_NET_1;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_2_LVL_1 | PLAYER_NET_2_LVL_2 | PLAYER_NET_2_LVL_3 | PLAYER_NET_2_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_NET_2;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_3_LVL_1 | PLAYER_NET_3_LVL_2 | PLAYER_NET_3_LVL_3 | PLAYER_NET_3_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_NET_3;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_4_LVL_1 | PLAYER_NET_4_LVL_2 | PLAYER_NET_4_LVL_3 | PLAYER_NET_4_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_NET_4;
|
||||
// only if its one of our networks
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER ) != 0 )
|
||||
{
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_1 ) != 0 )
|
||||
bMines = MINES_NET_1;
|
||||
else if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_2 ) != 0 )
|
||||
bMines = MINES_NET_2;
|
||||
else if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_3 ) != 0 )
|
||||
bMines = MINES_NET_3;
|
||||
else if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_4 ) != 0 )
|
||||
bMines = MINES_NET_4;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1151,15 +1155,15 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE
|
||||
UINT32 ubWireNetworkFlag = (*pObj)[0]->data.ubWireNetworkFlag;
|
||||
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_1_LVL_1 | PLAYER_NET_1_LVL_2 | PLAYER_NET_1_LVL_3 | PLAYER_NET_1_LVL_4 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER ) != 0 && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_1 ) != 0 )
|
||||
{
|
||||
bMines = MINES_LVL_1;
|
||||
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_1_LVL_2 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_2 ) ) != 0 )
|
||||
bMines = MINES_LVL_2;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_1_LVL_3 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_3 ) ) != 0 )
|
||||
bMines = MINES_LVL_3;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_1_LVL_4 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_LVL_4;
|
||||
}
|
||||
}
|
||||
@@ -1175,15 +1179,15 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE
|
||||
UINT32 ubWireNetworkFlag = (*pObj)[0]->data.ubWireNetworkFlag;
|
||||
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_2_LVL_1 | PLAYER_NET_2_LVL_2 | PLAYER_NET_2_LVL_3 | PLAYER_NET_2_LVL_4 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER ) != 0 && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_2 ) != 0 )
|
||||
{
|
||||
bMines = MINES_LVL_1;
|
||||
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_2_LVL_2 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_2 ) ) != 0 )
|
||||
bMines = MINES_LVL_2;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_2_LVL_3 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_3 ) ) != 0 )
|
||||
bMines = MINES_LVL_3;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_2_LVL_4 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_LVL_4;
|
||||
}
|
||||
}
|
||||
@@ -1199,15 +1203,15 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE
|
||||
UINT32 ubWireNetworkFlag = (*pObj)[0]->data.ubWireNetworkFlag;
|
||||
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_3_LVL_1 | PLAYER_NET_3_LVL_2 | PLAYER_NET_3_LVL_3 | PLAYER_NET_3_LVL_4 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER ) != 0 && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_3 ) != 0 )
|
||||
{
|
||||
bMines = MINES_LVL_1;
|
||||
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_3_LVL_2 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_2 ) ) != 0 )
|
||||
bMines = MINES_LVL_2;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_3_LVL_3 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_3 ) ) != 0 )
|
||||
bMines = MINES_LVL_3;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_3_LVL_4 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_LVL_4;
|
||||
}
|
||||
}
|
||||
@@ -1223,15 +1227,15 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE
|
||||
UINT32 ubWireNetworkFlag = (*pObj)[0]->data.ubWireNetworkFlag;
|
||||
|
||||
// correct network?
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_4_LVL_1 | PLAYER_NET_4_LVL_2 | PLAYER_NET_4_LVL_3 | PLAYER_NET_4_LVL_4 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER ) != 0 && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_4 ) != 0 )
|
||||
{
|
||||
bMines = MINES_LVL_1;
|
||||
|
||||
if ( (ubWireNetworkFlag & ( PLAYER_NET_4_LVL_2 ) ) != 0 )
|
||||
if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_2 ) ) != 0 )
|
||||
bMines = MINES_LVL_2;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_4_LVL_3 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_3 ) ) != 0 )
|
||||
bMines = MINES_LVL_3;
|
||||
else if ( (ubWireNetworkFlag & ( PLAYER_NET_4_LVL_4 ) ) != 0 )
|
||||
else if ( (ubWireNetworkFlag & ( TRIPWIRE_NETWORK_LVL_4 ) ) != 0 )
|
||||
bMines = MINES_LVL_4;
|
||||
}
|
||||
}
|
||||
|
||||
+13
-13
@@ -116,9 +116,9 @@ BOOLEAN ApplyFood( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject, BOOLEAN fForce, B
|
||||
|
||||
// notification
|
||||
if ( type == AP_EAT )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s does not want to eat %s", pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_DONOTWANT_EAT], pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s does not want to drink %s", pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_DONOTWANT_DRINK], pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
|
||||
// Say quote!
|
||||
TacticalCharacterDialogue( pSoldier, 61 );
|
||||
@@ -192,9 +192,9 @@ BOOLEAN ApplyFood( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObject, BOOLEAN fForce, B
|
||||
|
||||
// notification
|
||||
if ( type == AP_EAT )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s ate %s", pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_ATE], pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s drank %s", pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_DRANK], pSoldier->name, Item[pObject->usItem].szItemName );
|
||||
|
||||
// now remove a portion of the food item (or the whole item altogether)
|
||||
UINT16 ptsconsumed = UseKitPoints( pObject, Food[foodtype].ubPortionSize, pSoldier );
|
||||
@@ -367,9 +367,9 @@ void HourlyFoodSituationUpdate( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->usValueGoneUp &= ~( STRENGTH_INCREASE );
|
||||
|
||||
if ( foodsituation < FOOD_NORMAL )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's strength was damaged due to being overfed!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_STR_DAMAGE_FOOD_TOO_MUCH], pSoldier->name );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's strength was damaged due to lack of nutrition!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_STR_DAMAGE_FOOD_TOO_LESS], pSoldier->name );
|
||||
}
|
||||
|
||||
// damage health
|
||||
@@ -398,9 +398,9 @@ void HourlyFoodSituationUpdate( SOLDIERTYPE *pSoldier )
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usTimesStatDamaged++;
|
||||
|
||||
if ( foodsituation < FOOD_NORMAL )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's health was damaged due to being overfed!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_HEALTH_DAMAGE_FOOD_TOO_MUCH], pSoldier->name );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's health was damaged due to lack of nutrition!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_HEALTH_DAMAGE_FOOD_TOO_LESS], pSoldier->name );
|
||||
|
||||
// if we fall below OKLIFE, we start bleeding...
|
||||
// Reason for this is that
|
||||
@@ -451,9 +451,9 @@ void HourlyFoodSituationUpdate( SOLDIERTYPE *pSoldier )
|
||||
pSoldier->usValueGoneUp &= ~( STRENGTH_INCREASE );
|
||||
|
||||
if ( watersituation < FOOD_NORMAL )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's strength was damaged due to excessive drinking!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_STR_DAMAGE_DRINK_TOO_MUCH], pSoldier->name );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's strength was damaged due to lack of water!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_STR_DAMAGE_DRINK_TOO_LESS], pSoldier->name );
|
||||
}
|
||||
|
||||
// damage health
|
||||
@@ -484,9 +484,9 @@ void HourlyFoodSituationUpdate( SOLDIERTYPE *pSoldier )
|
||||
gMercProfiles[ pSoldier->ubProfile ].records.usTimesStatDamaged++;
|
||||
|
||||
if ( watersituation < FOOD_NORMAL )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's health was damaged due to excessive drinking!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_HEALTH_DAMAGE_DRINK_TOO_MUCH], pSoldier->name );
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s's health was damaged due to lack of water!", pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_HEALTH_DAMAGE_DRINK_TOO_LESS], pSoldier->name );
|
||||
|
||||
// if we fall below OKLIFE, we start bleeding...
|
||||
// Reason for this is that
|
||||
@@ -733,7 +733,7 @@ void SectorFillCanteens( void )
|
||||
{
|
||||
if ( !gGameOptions.fFoodSystem )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"SectorFillCanteen not possible, Food System is off!" );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szFoodTextStr[STR_FOOD_ERROR_NO_FOOD_SYSTEM] );
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -902,7 +902,12 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
}
|
||||
else
|
||||
{
|
||||
pSoldier->EVENT_SoldierBeginCutFence( sAdjustedGridNo, ubDirection );
|
||||
// Flugente: if we are trying to defuse a tripwire, call EVENT_SoldierDefuseTripwire() instead
|
||||
INT32 tripwirefound = FindWorldItemForTripwireInGridNo( sGridNo, pSoldier->pathing.bLevel, TRUE );
|
||||
if ( tripwirefound != -1 )
|
||||
pSoldier->EVENT_SoldierDefuseTripwire( sGridNo, tripwirefound );
|
||||
else
|
||||
pSoldier->EVENT_SoldierBeginCutFence( sAdjustedGridNo, ubDirection );
|
||||
}
|
||||
|
||||
|
||||
@@ -1611,7 +1616,7 @@ void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
pSoldier->inv[ HANDPOS ][0]->data.ubDirection = pSoldier->ubDirection;
|
||||
|
||||
// no frequency known... give a default value, so we don't defuse it by accident
|
||||
gTempObject[0]->data.ubWireNetworkFlag = ENEMY_NET_1_LVL_1;
|
||||
gTempObject[0]->data.ubWireNetworkFlag = (TRIPWIRE_NETWORK_OWNER_ENEMY|TRIPWIRE_NETWORK_NET_1|TRIPWIRE_NETWORK_LVL_1);
|
||||
gTempObject[0]->data.bDefuseFrequency = 0;
|
||||
|
||||
// we now know there is something nasty here
|
||||
@@ -1655,6 +1660,18 @@ void HandleSoldierUseCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
StartCorpseMessageBox( pSoldier, sGridNo, bLevel );
|
||||
}
|
||||
|
||||
void HandleSoldierDefuseTripwire( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT32 sItem )
|
||||
{
|
||||
gpBoobyTrapItemPool = GetItemPoolForIndex( sGridNo, sItem, pSoldier->pathing.bLevel );
|
||||
gpBoobyTrapSoldier = pSoldier;
|
||||
gsBoobyTrapGridNo = sGridNo;
|
||||
gbBoobyTrapLevel = pSoldier->pathing.bLevel;
|
||||
gfDisarmingBuriedBomb = FALSE;
|
||||
gbTrapDifficulty = (gWorldItems[ sItem ].object)[0]->data.bTrap;
|
||||
|
||||
DoMessageBox( MSG_BOX_BASIC_STYLE, TacticalStr[ DISARM_BOOBYTRAP_PROMPT ], GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, BoobyTrapMessageBoxCallBack, NULL );
|
||||
}
|
||||
|
||||
void SoldierHandleDropItem( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
// LOOK IN PANDING DATA FOR ITEM TO DROP, AND LOCATION
|
||||
|
||||
@@ -136,6 +136,7 @@ void HandleSoldierUseRemote( SOLDIERTYPE *pSoldier, INT32 sGridNo );
|
||||
void HandleTacticalFunctionSelection( SOLDIERTYPE *pSoldier, INT32 sGridNo ); // Flugente: in tactical, open a selection box for different actions
|
||||
|
||||
void HandleSoldierUseCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel ); // Flugente: handle corpses
|
||||
void HandleSoldierDefuseTripwire( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT32 sItem ); // Flugente: defuse tripwire
|
||||
|
||||
BOOLEAN ItemPoolOKForDisplay( ITEM_POOL *pItemPool, INT8 bZLevel );
|
||||
INT16 GetNumOkForDisplayItemsInPool( ITEM_POOL *pItemPool, INT8 bZLevel );
|
||||
|
||||
@@ -4408,6 +4408,11 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
// Flugente: if there is tripwire here that we know of, allow handling
|
||||
else if ( FindWorldItemForTripwireInGridNo( usMapPos, pSoldier->pathing.bLevel, TRUE ) != -1 )
|
||||
{
|
||||
return( TRUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( FALSE );
|
||||
|
||||
@@ -1317,7 +1317,7 @@ OBJECTTYPE& OBJECTTYPE::operator=(const OLD_OBJECTTYPE_101& src)
|
||||
(*this)[0]->data.misc.bActionValue = src.ugYucky.bActionValue;
|
||||
(*this)[0]->data.misc.ubTolerance = src.ugYucky.ubTolerance; // includes ubLocationID
|
||||
(*this)[0]->data.ubDirection = DIRECTION_IRRELEVANT;
|
||||
(*this)[0]->data.ubWireNetworkFlag = ENEMY_NET_1_LVL_1;
|
||||
(*this)[0]->data.ubWireNetworkFlag = (TRIPWIRE_NETWORK_OWNER_ENEMY|TRIPWIRE_NETWORK_NET_1|TRIPWIRE_NETWORK_LVL_1);
|
||||
(*this)[0]->data.bDefuseFrequency = 0;
|
||||
break;
|
||||
default:
|
||||
|
||||
+30
-24
@@ -675,45 +675,51 @@ extern OBJECTTYPE gTempObject;
|
||||
|
||||
// -------- added by Flugente: flags for tripwire networks --------
|
||||
// the numbering of these flags is important. DO NOT CHANGE THEM, UNLESS YOU KNOW WHAT YOU ARE DOING!!!
|
||||
#define ENEMY_NET_1_LVL_1 0x00000001 //1
|
||||
#define ENEMY_NET_2_LVL_1 0x00000002 //2
|
||||
#define ENEMY_NET_3_LVL_1 0x00000004 //4
|
||||
#define ENEMY_NET_4_LVL_1 0x00000008 //8
|
||||
// these flags were revised on 2012-9-2
|
||||
// it is theoretically possible to have much more than the currently existing 4 networks, and to have many more hierarchy levels
|
||||
// however, at the moment, there is no need for that
|
||||
#define TRIPWIRE_NETWORK_OWNER_ENEMY 0x00000001 //1 // this wire belongs to an enemy network
|
||||
#define TRIPWIRE_NETWORK_OWNER_PLAYER 0x00000002 //2 // this wire was set by the player
|
||||
//#define TRIPWIRE_NETWORK_OWNER_PLAYER 0x00000004 //4 // unused, might one day be used in multiplayer or with several factions
|
||||
//#define TRIPWIRE_NETWORK_OWNER_PLAYER 0x00000008 //8 // unused, might one day be used in multiplayer or with several factions
|
||||
|
||||
#define ENEMY_NET_1_LVL_2 0x00000010 //16
|
||||
#define ENEMY_NET_2_LVL_2 0x00000020 //32
|
||||
#define ENEMY_NET_3_LVL_2 0x00000040 //64
|
||||
#define ENEMY_NET_4_LVL_2 0x00000080 //128
|
||||
#define TRIPWIRE_NETWORK_NET_1 0x00000010 //16 // network number of the wire
|
||||
#define TRIPWIRE_NETWORK_NET_2 0x00000020 //32
|
||||
#define TRIPWIRE_NETWORK_NET_3 0x00000040 //64
|
||||
#define TRIPWIRE_NETWORK_NET_4 0x00000080 //128
|
||||
|
||||
#define ENEMY_NET_1_LVL_3 0x00000100 //256
|
||||
/*#define ENEMY_NET_1_LVL_3 0x00000100 //256
|
||||
#define ENEMY_NET_2_LVL_3 0x00000200 //512
|
||||
#define ENEMY_NET_3_LVL_3 0x00000400 //1024
|
||||
#define ENEMY_NET_4_LVL_3 0x00000800 //2048
|
||||
|
||||
#define ENEMY_NET_1_LVL_4 0x00001000 //4096
|
||||
#define ENEMY_NET_2_LVL_4 0x00002000 //8192
|
||||
#define ENEMY_NET_3_LVL_4 0x00004000 //16384
|
||||
#define ENEMY_NET_4_LVL_4 0x00008000 //32768
|
||||
#define TRIPWIRE_NETWORK_LVL_1 0x00001000 //4096 // hierarchy level of the wire
|
||||
#define TRIPWIRE_NETWORK_LVL_2 0x00002000 //8192
|
||||
#define TRIPWIRE_NETWORK_LVL_3 0x00004000 //16384
|
||||
#define TRIPWIRE_NETWORK_LVL_4 0x00008000 //32768
|
||||
|
||||
#define PLAYER_NET_1_LVL_1 0x00010000 //65536
|
||||
#define PLAYER_NET_2_LVL_1 0x00020000 //131072
|
||||
#define PLAYER_NET_3_LVL_1 0x00040000 //262144
|
||||
#define PLAYER_NET_4_LVL_1 0x00080000 //524288
|
||||
#define PLAYER_NET_4_LVL_1 0x00080000 //524288*/
|
||||
|
||||
#define PLAYER_NET_1_LVL_2 0x00100000 //1048576
|
||||
#define PLAYER_NET_2_LVL_2 0x00200000 //2097152
|
||||
#define PLAYER_NET_3_LVL_2 0x00400000 //4194304
|
||||
#define PLAYER_NET_4_LVL_2 0x00800000 //8388608
|
||||
// WARNING! It is important that the flags with the highest numbers are the hierarchy flags!
|
||||
// This allows for a very simple check on wether a wire gets called
|
||||
// keep this in mind when adding additional flags!
|
||||
#define TRIPWIRE_NETWORK_LVL_1 0x00100000 //1048576 // hierarchy level of the wire
|
||||
#define TRIPWIRE_NETWORK_LVL_2 0x00200000 //2097152
|
||||
#define TRIPWIRE_NETWORK_LVL_3 0x00400000 //4194304
|
||||
#define TRIPWIRE_NETWORK_LVL_4 0x00800000 //8388608
|
||||
|
||||
#define PLAYER_NET_1_LVL_3 0x01000000 //16777216
|
||||
#define PLAYER_NET_2_LVL_3 0x02000000 //33554432
|
||||
#define PLAYER_NET_3_LVL_3 0x04000000 //67108864
|
||||
#define PLAYER_NET_4_LVL_3 0x08000000 //134217728
|
||||
/*#define TRIPWIRE_NETWORK_LVL_1 0x01000000 //16777216
|
||||
#define TRIPWIRE_NETWORK_LVL_2 0x02000000 //33554432
|
||||
#define TRIPWIRE_NETWORK_LVL_3 0x04000000 //67108864
|
||||
#define TRIPWIRE_NETWORK_LVL_4 0x08000000 //134217728
|
||||
|
||||
#define PLAYER_NET_1_LVL_4 0x10000000 //268435456
|
||||
#define PLAYER_NET_2_LVL_4 0x20000000 //536870912
|
||||
#define PLAYER_NET_3_LVL_4 0x40000000 //1073741824
|
||||
#define PLAYER_NET_4_LVL_4 0x80000000 //2147483648
|
||||
#define PLAYER_NET_4_LVL_4 0x80000000 //2147483648*/
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
// -------- added by Flugente: various item flags --------
|
||||
@@ -772,7 +778,7 @@ extern OBJECTTYPE gTempObject;
|
||||
#define CORPSE_HAIR_WHITE 0x00000040 //64
|
||||
#define CORPSE_HAIR_BLOND 0x00000080 //128
|
||||
|
||||
#define CORPSE_HAIR_RED 0x00000100 //256
|
||||
#define CORPSE_NO_ZOMBIE_RISE 0x00000100 //256 // no zombie can rise from this corpse
|
||||
#define CORPSE_SKIN_PINK 0x00000200 //512
|
||||
#define CORPSE_SKIN_TAN 0x00000400 //1024
|
||||
#define CORPSE_SKIN_DARK 0x00000800 //2048
|
||||
|
||||
+24
-4
@@ -7843,12 +7843,32 @@ BOOLEAN ArmBomb( OBJECTTYPE * pObj, INT8 bSetting )
|
||||
UINT32 ubWireNetworkFlag = 0;
|
||||
if ( Item[pObj->usItem].tripwire == 1 && bSetting > 0 && bSetting < 17 ) // checks for safety
|
||||
{
|
||||
// we are placing it, so it's ours
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_OWNER_PLAYER;
|
||||
|
||||
// the bSetting consists of the network number + 4 * (network hierarchy - 1)
|
||||
INT8 netnr = bSetting % 4;
|
||||
INT8 hierarchytimesfour = bSetting - netnr;
|
||||
|
||||
// account for placement by the enemy
|
||||
INT8 editoradj = 16;
|
||||
//if ( editor ) editoradj = 0; or something like that
|
||||
ubWireNetworkFlag = 1 << (editoradj - 1 + bSetting);
|
||||
if ( 1 == netnr )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_NET_1;
|
||||
else if ( 2 == netnr )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_NET_2;
|
||||
else if ( 3 == netnr )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_NET_3;
|
||||
else
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_NET_4;
|
||||
|
||||
if ( 0 == hierarchytimesfour )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_LVL_1;
|
||||
else if ( 1 == hierarchytimesfour )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_LVL_2;
|
||||
else if ( 2 == hierarchytimesfour )
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_LVL_3;
|
||||
else
|
||||
ubWireNetworkFlag |= TRIPWIRE_NETWORK_LVL_4;
|
||||
|
||||
// TOOD: once tripwire can be placed in the editor, this has to be altered
|
||||
}
|
||||
|
||||
if (fDefuse) // TODO: doesn't work this way if both a detonator and a remote defuse is attached...
|
||||
|
||||
@@ -1896,7 +1896,11 @@ void DecapitateCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
// All teams lok for this...
|
||||
NotifySoldiersToLookforItems( );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_HEAD_ITEM] );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_DECAPITATION] );
|
||||
}
|
||||
|
||||
// Flugente: can this corpse be gutted?
|
||||
@@ -1945,9 +1949,11 @@ void GutCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
// All teams lok for this...
|
||||
NotifySoldiersToLookforItems( );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_MEAT_ITEM] );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"Not possible, you sick, sick individual!" );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_GUTTING] );
|
||||
}
|
||||
|
||||
// Flugente: can clothes be taken off of this corpse?
|
||||
@@ -1969,7 +1975,7 @@ void StripCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse = GetCorpseAtGridNo( sGridNo, bLevel );
|
||||
|
||||
if ( pCorpse == NULL )
|
||||
if ( pCorpse == NULL || !pSoldier )
|
||||
return;
|
||||
|
||||
// can this thing be stripped?
|
||||
@@ -1981,9 +1987,11 @@ void StripCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
// we took the clothes, mark this
|
||||
pCorpse->def.usFlags |= ROTTING_CORPSE_CLOTHES_TAKEN;
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_STRIPPING_POSSIBLE], pSoldier->name );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"No clothes to take!" );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_CLOTHESFOUND] );
|
||||
}
|
||||
|
||||
// Flugente: can clothes be taken off of this corpse?
|
||||
@@ -2000,7 +2008,7 @@ void TakeCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
ROTTING_CORPSE *pCorpse = GetCorpseAtGridNo( sGridNo, bLevel );
|
||||
|
||||
if ( pCorpse == NULL )
|
||||
if ( pCorpse == NULL || !pSoldier )
|
||||
return;
|
||||
|
||||
// can this corpse be picked up?
|
||||
@@ -2029,6 +2037,11 @@ void TakeCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
|
||||
if ( pCorpse->def.usFlags & ROTTING_CORPSE_CLOTHES_TAKEN )
|
||||
gTempObject[0]->data.sObjectFlag |= CORPSE_STRIPPED;
|
||||
|
||||
#ifdef ENABLE_ZOMBIES
|
||||
if ( pCorpse->def.usFlags & ROTTING_CORPSE_NEVER_RISE_AGAIN )
|
||||
gTempObject[0]->data.sObjectFlag |= CORPSE_NO_ZOMBIE_RISE;
|
||||
#endif
|
||||
|
||||
// now we have to get the correct flags for the object from the corpse, so that upon recreating the corpse, it looks the same
|
||||
UINT8 headpal = 0, skinpal = 0, vestpal = 0, pantspal = 0;
|
||||
@@ -2053,7 +2066,7 @@ void TakeCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
break;
|
||||
case 4:
|
||||
default:
|
||||
gTempObject[0]->data.sObjectFlag |= CORPSE_HAIR_RED;
|
||||
// the default value (which is also used for red hair) is nothing. Upon spawning a corpse from an item, we assume that it has red hair if none of the above flags is found
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -2145,12 +2158,16 @@ void TakeCorpse( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel )
|
||||
}
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"No free hand to carry corpse!" );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_FREEHAND] );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_CORPSE_ITEM] );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_NO_TAKING] );
|
||||
}
|
||||
|
||||
// Flugente: create a corpse from an object and plce it in the world
|
||||
// Flugente: create a corpse from an object and place it in the world
|
||||
BOOLEAN AddCorpseFromObject(OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel )
|
||||
{
|
||||
if ( !pObj || !HasItemFlag(pObj->usItem, CORPSE) )
|
||||
@@ -2291,8 +2308,15 @@ BOOLEAN AddCorpseFromObject(OBJECTTYPE* pObj, INT32 sGridNo, INT8 bLevel )
|
||||
else if ( (*pObj)[0]->data.sObjectFlag & CORPSE_VEST_BLACK && (*pObj)[0]->data.sObjectFlag & CORPSE_PANTS_BLACK )
|
||||
gRottingCorpse[ iCorpseID ].def.usFlags |= ROTTING_CORPSE_FROM_ELITE;
|
||||
|
||||
#ifdef ENABLE_ZOMBIES
|
||||
if ( (*pObj)[0]->data.sObjectFlag & CORPSE_NO_ZOMBIE_RISE )
|
||||
gRottingCorpse[ iCorpseID ].def.usFlags |= ROTTING_CORPSE_NEVER_RISE_AGAIN;
|
||||
#endif
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCorpseTextStr[STR_CORPSE_INVALID_CORPSE_ID] );
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
+175
-79
@@ -12058,7 +12058,7 @@ void SOLDIERTYPE::EVENT_SoldierBeginKnifeThrowAttack( INT32 sGridNo, UINT8 ubDir
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginDropBomb( void )
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginDropBomb( )
|
||||
{
|
||||
// Increment the number of people busy doing stuff because of an attack
|
||||
switch( gAnimControl[ this->usAnimState ].ubHeight )
|
||||
@@ -12078,6 +12078,29 @@ void SOLDIERTYPE::EVENT_SoldierBeginDropBomb( void )
|
||||
|
||||
}
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierDefuseTripwire( INT32 sGridNo, INT32 sItem )
|
||||
{
|
||||
// Flugente: if item is tripwireactivated and is a planted bomb, call the defuse dialogue. We obviously know about the item's existence already...
|
||||
if ( gWorldItems[ sItem ].object.exists() && gWorldItems[ sItem ].object.fFlags & OBJECT_ARMED_BOMB && Item[gWorldItems[ sItem ].object.usItem].tripwire == 1 )
|
||||
{
|
||||
// Increment the number of people busy doing stuff because of an attack
|
||||
switch( gAnimControl[ this->usAnimState ].ubHeight )
|
||||
{
|
||||
case ANIM_STAND:
|
||||
|
||||
this->EVENT_InitNewSoldierAnim( CROUCHING, 0 , FALSE );
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
// Call handler for planting bomb...
|
||||
HandleSoldierDefuseTripwire(this, sGridNo, sItem );
|
||||
this->SoldierGotoStationaryStance( );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void SOLDIERTYPE::EVENT_SoldierBeginUseDetonator( void )
|
||||
{
|
||||
@@ -13694,10 +13717,9 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void )
|
||||
if ( gAnimControl[ this->usAnimState ].ubEndHeight == ANIM_PRONE )
|
||||
return( FALSE );
|
||||
|
||||
BOOLEAN onroof = FALSE;
|
||||
// not possible to get this bonus on a roof, as there are no objects on the roof on which we could rest our gun
|
||||
if ( this->pathing.bLevel == 1 )
|
||||
onroof = TRUE;
|
||||
return( FALSE );
|
||||
|
||||
// we determine the height of the next tile in our direction. Because of the way structures are handled, we sometimes have to take the very tile we're occupying right now
|
||||
INT32 nextGridNoinSight = this->sGridNo;
|
||||
@@ -13719,9 +13741,9 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void )
|
||||
if (!pStructure)
|
||||
{
|
||||
// for some reason I find EXTREMELY FRUSTRATING, we might get a heigth of 2 on a totally empty tile... so we check if we could occupy the tile
|
||||
if ( !IsLocationSittable( nextGridNoinSight, onroof ) )
|
||||
if ( !IsLocationSittable( nextGridNoinSight, 0 ) )
|
||||
// resting our gun on people would be rude - only allow if nobody is there
|
||||
if( WhoIsThere2( nextGridNoinSight, onroof ) == NOBODY )
|
||||
if( WhoIsThere2( nextGridNoinSight, 0 ) == NOBODY )
|
||||
applybipod = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -13764,9 +13786,9 @@ BOOLEAN SOLDIERTYPE::IsWeaponMounted( void )
|
||||
if (!pStructure)
|
||||
{
|
||||
// for some reason I find EXTREMELY FRUSTRATING, we might get a heigth of 2 on a totally empty tile... so we check if we could occupy the tile
|
||||
if ( !IsLocationSittable( nextGridNoinSight, onroof ) )
|
||||
if ( !IsLocationSittable( nextGridNoinSight, 0 ) )
|
||||
// resting our gun on people would be rude - only allow if nobody is there
|
||||
if( WhoIsThere2( nextGridNoinSight, onroof ) == NOBODY )
|
||||
if( WhoIsThere2( nextGridNoinSight, 0 ) == NOBODY )
|
||||
applybipod = TRUE;
|
||||
}
|
||||
}
|
||||
@@ -14006,7 +14028,7 @@ void SOLDIERTYPE::InventoryExplosion( void )
|
||||
INT16 status = (*pObj)[0]->data.objectStatus;
|
||||
(*pObj)[0]->data.objectStatus = max(1, (INT16)(status/2));
|
||||
|
||||
// for every objects, we also have to check wether there are weapon attachments (eg. underbarrel grenade launchers), and cool them down too
|
||||
// also damage every attachment
|
||||
attachmentList::iterator iterend = (*pObj)[i]->attachments.end();
|
||||
for (attachmentList::iterator iter = (*pObj)[i]->attachments.begin(); iter != iterend; ++iter)
|
||||
{
|
||||
@@ -14070,12 +14092,10 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal(UINT8* pubId1, UINT16* pGunSlot1, UINT16
|
||||
|
||||
UINT16 usGunItem = 0;
|
||||
UINT8 usGunCalibre = 0;
|
||||
//UINT16 usGunMagSize = 0;
|
||||
UINT8 usGunAmmoType = 0;
|
||||
|
||||
UINT16 usAmmoItem = 0;
|
||||
UINT8 usAmmoCalibre = 0;
|
||||
//UINT16 usAmmoMagSize = 0;
|
||||
UINT8 usAmmoAmmoType = 0;
|
||||
|
||||
UINT16 usMagIndex = 0;
|
||||
@@ -14102,7 +14122,6 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal(UINT8* pubId1, UINT16* pGunSlot1, UINT16
|
||||
usMagIndex = Item[usAmmoItem].ubClassIndex;
|
||||
|
||||
usAmmoCalibre = Magazine[usMagIndex].ubCalibre;
|
||||
//usAmmoMagSize = Magazine[usMagIndex].ubMagSize;
|
||||
usAmmoAmmoType = Magazine[usMagIndex].ubAmmoType;
|
||||
|
||||
// our current stance is important
|
||||
@@ -14191,11 +14210,10 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal(UINT8* pubId1, UINT16* pGunSlot1, UINT16
|
||||
OBJECTTYPE* pObjInHands = &(pTeamSoldier->inv[teamsoldierinvpos]);
|
||||
if ( pObjInHands && pObjInHands->exists() && Item [ pObjInHands->usItem ].usItemClass == IC_GUN && (HasItemFlag( pObjInHands->usItem, BELT_FED ) || HasAttachmentOfClass(pObjInHands, AC_FEEDER) ) && (*pObjInHands)[0]->data.gun.ubGunShotsLeft > 0 )
|
||||
{
|
||||
// remember the caliber, magsize (TODO: really?) and type of ammo. They all have to fit
|
||||
// remember the caliber and type of ammo. They all have to fit
|
||||
usGunItem = pObjInHands->usItem;
|
||||
|
||||
usGunCalibre = Weapon[usGunItem].ubCalibre;
|
||||
//usGunMagSize = Weapon[usGunItem].ubMagSize;
|
||||
usGunAmmoType = (*pObjInHands)[0]->data.gun.ubGunAmmoType;
|
||||
|
||||
if ( usGunCalibre == usAmmoCalibre && /*usGunMagSize == usAmmoMagSize &&*/ usGunAmmoType == usAmmoAmmoType )
|
||||
@@ -14267,9 +14285,8 @@ BOOLEAN SOLDIERTYPE::IsFeedingExternal(UINT8* pubId1, UINT16* pGunSlot1, UINT16
|
||||
// can't use this, end
|
||||
continue;
|
||||
|
||||
// remember the caliber, magsize (TODO: really?) and type of ammo. They all have to fit
|
||||
// remember the caliber and type of ammo. They all have to fit
|
||||
usGunCalibre = Weapon[usGunItem].ubCalibre;
|
||||
//usGunMagSize = Weapon[usGunItem].ubMagSize;
|
||||
usGunAmmoType = (*pObj)[0]->data.gun.ubGunAmmoType;
|
||||
|
||||
// now check the inventory for an ammo belt. If we are not from the player team or a robot, we will search the entire inventory
|
||||
@@ -14385,7 +14402,7 @@ void SOLDIERTYPE::CleanWeapon( BOOLEAN fCleanAll )
|
||||
{
|
||||
(*pObj)[i]->data.bDirtLevel = 0.0f;
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s cleaned %s", this->name, Item[pObj->usItem].szItemName );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, TacticalStr[WEAPON_CLEANING_STR], this->name, Item[pObj->usItem].szItemName );
|
||||
|
||||
// 33% chance to use up 1% of the cleaning kit
|
||||
if ( Random(2) > 0 )
|
||||
@@ -14423,7 +14440,10 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
{
|
||||
// if we have any camo: not covert
|
||||
if ( GetWornCamo(this) > 0 || GetWornUrbanCamo(this) > 0 || GetWornDesertCamo(this) > 0 || GetWornSnowCamo(this) > 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CAMOFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( UsingNewInventorySystem() )
|
||||
{
|
||||
@@ -14434,7 +14454,10 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
{
|
||||
// if we have a back pack: not covert
|
||||
if ( bLoop == BPACKPOCKPOS )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_BACKPACKFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// do not check the LBE itself (we already checked for camo above)
|
||||
if ( bLoop >= VESTPOCKPOS && bLoop <= CPACKPOCKPOS )
|
||||
@@ -14442,10 +14465,13 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
|
||||
// seriously? a corpse? of course this is suspicious!
|
||||
if ( HasItemFlag(this->inv[bLoop].usItem, CORPSE) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CARRYCORPSEFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN checkfurther = FALSE;
|
||||
// further checks it item is not covert. This means that a gun that has that tag will not be detectedif if its inside a pocket!
|
||||
// further checks it item is not covert. This means that a gun that has that tag will not be detected if its inside a pocket!
|
||||
if ( bLoop == HANDPOS || bLoop == SECONDHANDPOS || bLoop == GUNSLINGPOCKPOS || bLoop == HELMETPOS || bLoop == VESTPOS || bLoop == LEGPOS || bLoop == HEAD1POS || bLoop == HEAD2POS )
|
||||
checkfurther = TRUE;
|
||||
else if ( bLoop == KNIFEPOCKPOS && !HasItemFlag(this->inv[bLoop].usItem, COVERT) )
|
||||
@@ -14458,6 +14484,9 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
UINT8 checkslot = 0;
|
||||
switch (uiNIVSlotType[bLoop])
|
||||
{
|
||||
case 2:
|
||||
// this is worn LBE gear itself
|
||||
break;
|
||||
case 3:
|
||||
checkslot = VESTPOCKPOS;
|
||||
break;
|
||||
@@ -14471,8 +14500,11 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
checkslot = CPACKPOCKPOS;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CARRY_BADLBE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// found a slot to check for LBE
|
||||
@@ -14492,7 +14524,10 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
( (Item[this->inv[bLoop].usItem].usItemClass & (IC_ARMOUR) ) && !Item[this->inv[bLoop].usItem].leatherjacket && Armour[ Item[this->inv[bLoop].usItem].ubClassIndex ].ubProtection > 10 ) ||
|
||||
( Item[this->inv[bLoop].usItem].nightvisionrangebonus > 0 || Item[this->inv[bLoop].usItem].hearingrangebonus > 0 )
|
||||
)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_MILITARYGEARFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14511,7 +14546,10 @@ BOOLEAN SOLDIERTYPE::LooksLikeACivilian( void )
|
||||
( (Item[this->inv[bLoop].usItem].usItemClass & (IC_ARMOUR) ) && !Item[this->inv[bLoop].usItem].leatherjacket && Armour[ Item[this->inv[bLoop].usItem].ubClassIndex ].ubProtection > 10 ) ||
|
||||
( Item[this->inv[bLoop].usItem].nightvisionrangebonus > 0 || Item[this->inv[bLoop].usItem].hearingrangebonus > 0 )
|
||||
)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_MILITARYGEARFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14530,7 +14568,10 @@ BOOLEAN SOLDIERTYPE::LooksLikeASoldier( void )
|
||||
{
|
||||
// seriously? a corpse? of course this is suspicious!
|
||||
if ( HasItemFlag(this->inv[bLoop].usItem, CORPSE) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CARRYCORPSEFOUND], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14557,16 +14598,25 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
{
|
||||
// if we have a back pack: not covert
|
||||
if ( bLoop == BPACKPOCKPOS )
|
||||
return FALSE;
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_BACKPACKFOUND], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
// further checks it item is not covert. This means that a gun that has that tag will not be detectedif if its inside a pocket!
|
||||
if ( bLoop == HANDPOS || bLoop == SECONDHANDPOS || bLoop == GUNSLINGPOCKPOS || bLoop == HELMETPOS || bLoop == VESTPOS || bLoop == LEGPOS || bLoop == HEAD1POS || bLoop == HEAD2POS ||
|
||||
!HasItemFlag(this->inv[bLoop].usItem, COVERT) )
|
||||
// further checks it item is not covert. This means that an item that has that tag will not be detected if it is inside a pocket!
|
||||
if ( bLoop == HANDPOS || bLoop == SECONDHANDPOS || bLoop == GUNSLINGPOCKPOS || bLoop == HELMETPOS || bLoop == VESTPOS || bLoop == LEGPOS || bLoop == HEAD1POS || bLoop == HEAD2POS )
|
||||
;
|
||||
else if ( bLoop == KNIFEPOCKPOS && !HasItemFlag(this->inv[bLoop].usItem, COVERT) )
|
||||
;
|
||||
else if ( !HasItemFlag(this->inv[bLoop].usItem, COVERT) )
|
||||
{
|
||||
// item will be detected if someone looks - check for the LBE item that gave us this slot. If that one is covert, this item is also covert
|
||||
UINT8 checkslot = 0;
|
||||
switch (uiNIVSlotType[bLoop])
|
||||
{
|
||||
case 2:
|
||||
// this is worn LBE gear itself
|
||||
break;
|
||||
case 3:
|
||||
checkslot = VESTPOCKPOS;
|
||||
break;
|
||||
@@ -14580,8 +14630,11 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
checkslot = CPACKPOCKPOS;
|
||||
break;
|
||||
default:
|
||||
return FALSE;
|
||||
break;
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CARRY_BADLBE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// found a slot to check for LBE
|
||||
@@ -14592,47 +14645,59 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
// pass for this item
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// if that item is a gun, explosives, military armour or facewear, investigate further
|
||||
if ( (Item[this->inv[bLoop].usItem].usItemClass & (IC_GUN|IC_LAUNCHER|IC_ARMOUR|IC_FACE) ) )
|
||||
// if that item is a gun, explosives, military armour or facewear, investigate further
|
||||
if ( (Item[this->inv[bLoop].usItem].usItemClass & (IC_GUN|IC_LAUNCHER|IC_ARMOUR|IC_FACE) ) )
|
||||
{
|
||||
if ( (Item[this->inv[bLoop].usItem].usItemClass & (IC_GUN|IC_LAUNCHER) ) )
|
||||
{
|
||||
if ( (Item[this->inv[bLoop].usItem].usItemClass & (IC_GUN|IC_LAUNCHER) ) )
|
||||
++numberofguns;
|
||||
|
||||
if ( numberofguns > 2 )
|
||||
{
|
||||
++numberofguns;
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOOMANYGUNS], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if ( numberofguns > 2 )
|
||||
return TRUE;
|
||||
OBJECTTYPE * pObj = &(this->inv[bLoop]); // ... get pointer for this item ...
|
||||
|
||||
OBJECTTYPE * pObj = &(this->inv[bLoop]); // ... get pointer for this item ...
|
||||
|
||||
if ( pObj != NULL )
|
||||
if ( pObj != NULL )
|
||||
{
|
||||
for(INT16 i = 0; i < pObj->ubNumberOfObjects; ++i) // ... there might be multiple items here (item stack), so for each one ...
|
||||
{
|
||||
// loop over every item and its attachments
|
||||
if ( Item[pObj->usItem].ubCoolness > maxcoolnessallowed )
|
||||
{
|
||||
for(INT16 i = 0; i < pObj->ubNumberOfObjects; ++i) // ... there might be multiple items here (item stack), so for each one ...
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ITEMSTOOGOOD], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT8 numberofattachments = 0;
|
||||
// for every objects, we also have to check wether there are weapon attachments (eg. underbarrel grenade launchers), and cool them down too
|
||||
attachmentList::iterator iterend = (*pObj)[i]->attachments.end();
|
||||
for (attachmentList::iterator iter = (*pObj)[i]->attachments.begin(); iter != iterend; ++iter)
|
||||
{
|
||||
if ( iter->exists() )
|
||||
{
|
||||
// loop over every item and its attachments
|
||||
if ( Item[pObj->usItem].ubCoolness > maxcoolnessallowed )
|
||||
return TRUE;
|
||||
|
||||
UINT8 numberofattachments = 0;
|
||||
// for every objects, we also have to check wether there are weapon attachments (eg. underbarrel grenade launchers), and cool them down too
|
||||
attachmentList::iterator iterend = (*pObj)[i]->attachments.end();
|
||||
for (attachmentList::iterator iter = (*pObj)[i]->attachments.begin(); iter != iterend; ++iter)
|
||||
if ( Item[iter->usItem].ubCoolness > maxcoolnessallowed )
|
||||
{
|
||||
if ( iter->exists() )
|
||||
{
|
||||
// loop over every item and its attachments
|
||||
if ( Item[iter->usItem].ubCoolness > maxcoolnessallowed )
|
||||
return TRUE;
|
||||
|
||||
++numberofattachments;
|
||||
}
|
||||
}
|
||||
|
||||
// no ordinary soldier is allowed that many attachemnts > not covert
|
||||
if ( numberofattachments > gGameExternalOptions.iMaxEnemyAttachments )
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ITEMSTOOGOOD], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
++numberofattachments;
|
||||
|
||||
// no ordinary soldier is allowed that many attachments > not covert
|
||||
if ( numberofattachments > gGameExternalOptions.iMaxEnemyAttachments )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOOMANYATTACHMENTS], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14654,7 +14719,10 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
++numberofguns;
|
||||
|
||||
if ( numberofguns > 2 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOOMANYGUNS], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
OBJECTTYPE * pObj = &(this->inv[bLoop]); // ... get pointer for this item ...
|
||||
|
||||
@@ -14664,7 +14732,10 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
{
|
||||
// loop over every item and its attachments
|
||||
if ( Item[pObj->usItem].ubCoolness > maxcoolnessallowed )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ITEMSTOOGOOD], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
UINT8 numberofattachments = 0;
|
||||
// for every objects, we also have to check wether there are weapon attachments (eg. underbarrel grenade launchers), and cool them down too
|
||||
@@ -14675,7 +14746,10 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
{
|
||||
// loop over every item and its attachments
|
||||
if ( Item[iter->usItem].ubCoolness > maxcoolnessallowed )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ITEMSTOOGOOD], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
++numberofattachments;
|
||||
}
|
||||
@@ -14683,7 +14757,10 @@ BOOLEAN SOLDIERTYPE::EquipmentTooGood( BOOLEAN fCloselook )
|
||||
|
||||
// no ordinary soldier is allowed that many attachments > not covert
|
||||
if ( numberofattachments > gGameExternalOptions.iMaxEnemyAttachments )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOOMANYATTACHMENTS], this->name );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -14709,7 +14786,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
if ( !(this->bSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER) ) )
|
||||
return FALSE;
|
||||
|
||||
// if we are in a suspicious stance: not covert
|
||||
// if we are in a suspicious activity: not covert
|
||||
if ( this->usAnimState == NINJA_SPINKICK ||
|
||||
this->usAnimState == NINJA_PUNCH ||
|
||||
this->usAnimState == NINJA_LOWKICK ||
|
||||
@@ -14743,25 +14820,20 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
this->usAnimState == JUMPWINDOWS
|
||||
)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s was seen performing suspicious activities!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ACTIVITIES], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN looklikeaciv = this->LooksLikeACivilian();
|
||||
|
||||
|
||||
// if we are trying to dress like a civilian, but aren't sucessful: not covert
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_CIV && !looklikeaciv)
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_CIV && !(this->LooksLikeACivilian()) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s does not look like a civilian!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NO_CIV], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOLEAN looklikeasoldier = this->LooksLikeASoldier();
|
||||
|
||||
|
||||
// if we are trying to dress like a soldier, but aren't sucessful: not covert
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER && !looklikeasoldier)
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER && !(this->LooksLikeASoldier()) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s is carrying a corpse!", this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -14783,13 +14855,13 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// if we are openly bleeding: not covert
|
||||
if ( this->bBleeding > 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s bleeding was discovered!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_BLEEDING], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER && GetDrunkLevel( this ) != SOBER )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s is drunk and doesn't look like a soldier!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_DRUNKEN_SOLDIER], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -14801,13 +14873,13 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// if we are openly bleeding: not covert
|
||||
if ( this->bBleeding > 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s bleeding was discovered!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_BLEEDING], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"On closer inspection, %s's disguise does not hold!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOO_CLOSE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -14817,7 +14889,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// without the covert ops skill, we can only dress up as civilians. We will be discovered if we get too close to the enemy
|
||||
if ( (this->bSoldierFlagMask & SOLDIER_COVERT_NPC_SPECIAL) == 0 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"On closer inspection, %s's disguise does not hold!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TOO_CLOSE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
@@ -14842,13 +14914,13 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
|
||||
if ( sectordata > 1 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s isn't supposed to be here!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CURFEW_BROKEN], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
// is it night?
|
||||
else if ( sectordata == 1 && GetTimeOfDayAmbientLightLevel() < NORMAL_LIGHTLEVEL_DAY + 2 )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s isn't supposed to be here at this time!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_CURFEW_BROKEN_NIGHT], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -14864,7 +14936,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// a corpse was found near our position. If the soldier observing us can see it, he will be alarmed
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, pCorpse->def.sGridNo, pCorpse->def.bLevel, 3, TRUE, CALC_FROM_WANTED_DIR ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s was seen near a fresh corpse!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NEAR_CORPSE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -14876,7 +14948,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// if our equipment is too good, that is suspicious... not covert!
|
||||
if ( this->EquipmentTooGood( (distance < discoverrange) ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s equipment raises a few eyebrows!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_SUSPICIOUS_EQUIPMENT], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -14886,7 +14958,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// if we aiming at a soldier, others will notice our intent... not covert!
|
||||
if ( WeaponReady(this) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s is seen targeting a soldier!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_TARGETTING_SOLDIER], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -14907,7 +14979,7 @@ BOOLEAN SOLDIERTYPE::SeemsLegit( UINT8 ubObserverID )
|
||||
// a corpse was found near our position. If the soldier observing us can see it, he will be alarmed
|
||||
if ( SoldierTo3DLocationLineOfSightTest( pSoldier, pCorpse->def.sGridNo, pCorpse->def.bLevel, 3, TRUE, CALC_FROM_WANTED_DIR ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s was seen near a fresh corpse!", this->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NEAR_CORPSE], this->name );
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
@@ -14981,7 +15053,7 @@ BOOLEAN SOLDIERTYPE::RecognizeAsCombatant(UINT8 ubTargetID)
|
||||
{
|
||||
pSoldier->LooseDisguise();
|
||||
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, L"%s has seen through %s disguise!", this->name, pSoldier->name );
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_UNCOVERED], this->name, pSoldier->name );
|
||||
|
||||
// we have uncovered a spy! Get alerted, if we aren't already
|
||||
if ( this->aiData.bAlertStatus < STATUS_BLACK )
|
||||
@@ -15036,6 +15108,8 @@ void SOLDIERTYPE::LooseDisguise( void )
|
||||
if ( !AutoPlaceObject( this, &gTempObject, FALSE ) )
|
||||
AddItemToPool( sGridNo, &gTempObject, 1, 0, 0, -1 );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NO_CLOTHES_ITEM] );
|
||||
}
|
||||
|
||||
// if we are also disguised as a soldier, remove that flag
|
||||
@@ -15050,13 +15124,19 @@ BOOLEAN SOLDIERTYPE::DisguiseAsCivilian( void )
|
||||
{
|
||||
// this will only work with the new trait system
|
||||
if (!gGameOptions.fNewTraitSystem)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ERROR_OLDTRAITS] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
UINT8 skilllevel = NUM_SKILL_TRAITS( this, COVERT_NT );
|
||||
|
||||
INT16 apcost = (APBPConstants[AP_DISGUISE] * ( gSkillTraitValues.sCODisguiseAPReduction * skilllevel))/100;
|
||||
if ( !EnoughPoints( this, apcost, 0, TRUE ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NOT_ENOUGH_APS] );
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
this->bSoldierFlagMask |= SOLDIER_COVERT_CIV;
|
||||
|
||||
@@ -15094,6 +15174,8 @@ BOOLEAN SOLDIERTYPE::DisguiseAsCivilian( void )
|
||||
|
||||
this->CreateSoldierPalettes();
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_BAD_PALETTE] );
|
||||
|
||||
// if we are also disguised as a soldier, remove that flag
|
||||
if ( this->bSoldierFlagMask & SOLDIER_COVERT_SOLDIER )
|
||||
@@ -15111,16 +15193,25 @@ BOOLEAN SOLDIERTYPE::DisguiseAsSoldierFromCorpse( UINT32 usFlag )
|
||||
{
|
||||
// this will only work with the new trait system
|
||||
if (!gGameOptions.fNewTraitSystem)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_ERROR_OLDTRAITS] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// action is only possible if we have the covert ops trait
|
||||
UINT8 skilllevel = NUM_SKILL_TRAITS( this, COVERT_NT );
|
||||
if ( skilllevel < 1)
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NO_SKILL] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
INT16 apcost = (APBPConstants[AP_DISGUISE] * ( gSkillTraitValues.sCODisguiseAPReduction * skilllevel))/100;
|
||||
if ( !EnoughPoints( this, apcost, 0, TRUE ) )
|
||||
{
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NOT_ENOUGH_APS] );
|
||||
return( FALSE );
|
||||
}
|
||||
|
||||
UINT8 uniformtype = 0;
|
||||
|
||||
@@ -15131,8 +15222,11 @@ BOOLEAN SOLDIERTYPE::DisguiseAsSoldierFromCorpse( UINT32 usFlag )
|
||||
else if ( usFlag & ROTTING_CORPSE_FROM_ELITE )
|
||||
uniformtype = UNIFORM_ENEMY_ELITE;
|
||||
else
|
||||
{
|
||||
// no uniform here, so nothing to wear
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NO_UNIFORM_FOUND] );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
this->bSoldierFlagMask |= SOLDIER_COVERT_SOLDIER;
|
||||
|
||||
@@ -15166,6 +15260,8 @@ BOOLEAN SOLDIERTYPE::DisguiseAsSoldierFromCorpse( UINT32 usFlag )
|
||||
CreateItem( civilianclothesitem, 100, &gTempObject );
|
||||
AddItemToPool( sGridNo, &gTempObject, 1, 0, 0, -1 );
|
||||
}
|
||||
else
|
||||
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, szCovertTextStr[STR_COVERT_NO_CLOTHES_ITEM] );
|
||||
}
|
||||
|
||||
DeductPoints( this, apcost, 0 );
|
||||
|
||||
@@ -1296,7 +1296,8 @@ public:
|
||||
void EVENT_SoldierBeginRefuel( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginKnifeThrowAttack( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginUseDetonator( void );
|
||||
void EVENT_SoldierBeginDropBomb( void );
|
||||
void EVENT_SoldierBeginDropBomb( );
|
||||
void EVENT_SoldierDefuseTripwire( INT32 sGridNo, INT32 sItem );
|
||||
void EVENT_SoldierEnterVehicle( INT32 sGridNo, UINT8 ubDirection );
|
||||
void EVENT_SoldierBeginGiveItem( void );
|
||||
void EVENT_SetSoldierPositionAndMaybeFinalDest( FLOAT dNewXPos, FLOAT dNewYPos, BOOLEAN fUpdateFinalDest );
|
||||
|
||||
@@ -287,6 +287,36 @@ INT32 FindWorldItemForBombInGridNo( INT32 sGridNo, INT8 bLevel )
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
// Flugente: is there a planted tripwire at this gridno? fKnown = TRUE: only return true if we know of that one already
|
||||
INT32 FindWorldItemForTripwireInGridNo( INT32 sGridNo, INT8 bLevel, BOOLEAN fKnown )
|
||||
{
|
||||
UINT32 uiBombIndex;
|
||||
OBJECTTYPE* pObj = NULL;
|
||||
|
||||
for (uiBombIndex = 0; uiBombIndex < guiNumWorldBombs; uiBombIndex++)
|
||||
{
|
||||
if (gWorldBombs[ uiBombIndex ].fExists && gWorldItems[ gWorldBombs[ uiBombIndex ].iItemIndex ].sGridNo == sGridNo && gWorldItems[ gWorldBombs[ uiBombIndex ].iItemIndex ].ubLevel == bLevel )
|
||||
{
|
||||
pObj = &( gWorldItems[ gWorldBombs[ uiBombIndex ].iItemIndex ].object );
|
||||
|
||||
if ( pObj && Item[pObj->usItem].tripwire )
|
||||
{
|
||||
if ( !fKnown )
|
||||
return( gWorldBombs[ uiBombIndex ].iItemIndex );
|
||||
|
||||
// owned by the player team - we know of this thing
|
||||
if ( (*pObj)[0]->data.ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER )
|
||||
return( gWorldBombs[ uiBombIndex ].iItemIndex );
|
||||
|
||||
// something is here, as a blue flag is planted
|
||||
if ( gpWorldLevelData[sGridNo].uiFlags & MAPELEMENT_PLAYER_MINE_PRESENT )
|
||||
return( gWorldBombs[ uiBombIndex ].iItemIndex );
|
||||
}
|
||||
}
|
||||
}
|
||||
return( -1 );
|
||||
}
|
||||
|
||||
|
||||
void FindPanicBombsAndTriggers( void )
|
||||
{
|
||||
|
||||
@@ -118,6 +118,9 @@ extern INT32 AddBombToWorld( INT32 iItemIndex );
|
||||
extern void FindPanicBombsAndTriggers( void );
|
||||
extern INT32 FindWorldItemForBombInGridNo( INT32 sGridNo, INT8 bLevel);
|
||||
|
||||
// Flugente: is there a planted tripwire at this gridno? fKnown = TRUE: only return true if we know of that one already
|
||||
extern INT32 FindWorldItemForTripwireInGridNo( INT32 sGridNo, INT8 bLevel, BOOLEAN fKnown = TRUE );
|
||||
|
||||
void RefreshWorldItemsIntoItemPools( WORLDITEM * pItemList, INT32 iNumberOfItems );
|
||||
void CoolDownWorldItems( ); // Flugente: Cool/decay down all items in this sector
|
||||
|
||||
|
||||
@@ -3686,25 +3686,26 @@ BOOLEAN ActivateSurroundingTripwire( UINT8 ubID, INT32 sGridNo, INT8 bLevel, UIN
|
||||
BOOLEAN samenetwork = FALSE;
|
||||
BOOLEAN sameorlowerhierarchy = FALSE;
|
||||
|
||||
if ( ubWireNetworkFlag <= ubFlag ) // hierarchy of a group is sorted, so this suffices
|
||||
// the biggest flags are the hierarchy flags, so a simple comparison is enough here
|
||||
if ( ubWireNetworkFlag <= ubFlag )
|
||||
sameorlowerhierarchy = TRUE;
|
||||
|
||||
if ( !sameorlowerhierarchy )
|
||||
continue;
|
||||
|
||||
for (INT8 i = 0; i < 2; ++i) // 2 runs: first for enemy networks, second for player networks
|
||||
// test: do the 2 wires belong to the same 'side'?
|
||||
if ( ( (ubFlag & TRIPWIRE_NETWORK_OWNER_ENEMY) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_ENEMY) ) || ( (ubFlag & TRIPWIRE_NETWORK_OWNER_PLAYER) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_OWNER_PLAYER) ) )
|
||||
{
|
||||
for (INT8 j = 0; j < 4; ++j)
|
||||
{
|
||||
UINT32 samenetworkflag = ( ENEMY_NET_1_LVL_1 | ENEMY_NET_1_LVL_2 | ENEMY_NET_1_LVL_3 | ENEMY_NET_1_LVL_4 ) << (16*i + j); // comparing with this flag will determine the network
|
||||
|
||||
if ( ( (ubFlag & samenetworkflag) != 0 ) && ( (ubWireNetworkFlag & samenetworkflag) != 0 ) )
|
||||
samenetwork = TRUE;
|
||||
|
||||
if ( samenetwork )
|
||||
break;
|
||||
}
|
||||
if ( ( (ubFlag & TRIPWIRE_NETWORK_NET_1) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_1) ) ||
|
||||
( (ubFlag & TRIPWIRE_NETWORK_NET_2) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_2) ) ||
|
||||
( (ubFlag & TRIPWIRE_NETWORK_NET_3) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_3) ) ||
|
||||
( (ubFlag & TRIPWIRE_NETWORK_NET_4) && (ubWireNetworkFlag & TRIPWIRE_NETWORK_NET_4) ) )
|
||||
samenetwork = TRUE;
|
||||
else
|
||||
continue;
|
||||
}
|
||||
else
|
||||
continue;
|
||||
|
||||
if ( samenetwork && sameorlowerhierarchy )
|
||||
{
|
||||
|
||||
+75
-1
@@ -651,6 +651,80 @@ extern CHAR16 zHealthStr[][13];
|
||||
extern STR16 gzHiddenHitCountStr[1];
|
||||
extern STR16 zVehicleName[ 6 ];
|
||||
|
||||
// Flugente: externalised texts for some features
|
||||
enum
|
||||
{
|
||||
STR_COVERT_CAMOFOUND,
|
||||
STR_COVERT_BACKPACKFOUND,
|
||||
STR_COVERT_CARRYCORPSEFOUND,
|
||||
STR_COVERT_CARRY_BADLBE,
|
||||
STR_COVERT_MILITARYGEARFOUND,
|
||||
STR_COVERT_TOOMANYGUNS,
|
||||
STR_COVERT_ITEMSTOOGOOD,
|
||||
STR_COVERT_TOOMANYATTACHMENTS,
|
||||
STR_COVERT_ACTIVITIES,
|
||||
STR_COVERT_NO_CIV,
|
||||
STR_COVERT_BLEEDING,
|
||||
STR_COVERT_DRUNKEN_SOLDIER,
|
||||
STR_COVERT_TOO_CLOSE,
|
||||
STR_COVERT_CURFEW_BROKEN,
|
||||
STR_COVERT_CURFEW_BROKEN_NIGHT,
|
||||
STR_COVERT_NEAR_CORPSE,
|
||||
STR_COVERT_SUSPICIOUS_EQUIPMENT,
|
||||
STR_COVERT_TARGETTING_SOLDIER,
|
||||
STR_COVERT_UNCOVERED,
|
||||
STR_COVERT_NO_CLOTHES_ITEM,
|
||||
STR_COVERT_ERROR_OLDTRAITS,
|
||||
STR_COVERT_NOT_ENOUGH_APS,
|
||||
STR_COVERT_BAD_PALETTE,
|
||||
STR_COVERT_NO_SKILL,
|
||||
STR_COVERT_NO_UNIFORM_FOUND,
|
||||
|
||||
TEXT_NUM_COVERT_STR
|
||||
};
|
||||
|
||||
extern STR16 szCovertTextStr[];
|
||||
|
||||
enum
|
||||
{
|
||||
STR_CORPSE_NO_HEAD_ITEM,
|
||||
STR_CORPSE_NO_DECAPITATION,
|
||||
STR_CORPSE_NO_MEAT_ITEM,
|
||||
STR_CORPSE_NO_GUTTING,
|
||||
STR_CORPSE_NO_CLOTHESFOUND,
|
||||
STR_CORPSE_NO_STRIPPING_POSSIBLE,
|
||||
STR_CORPSE_NO_TAKING,
|
||||
STR_CORPSE_NO_FREEHAND,
|
||||
STR_CORPSE_NO_CORPSE_ITEM,
|
||||
STR_CORPSE_INVALID_CORPSE_ID,
|
||||
|
||||
TEXT_NUM_CORPSE_STR
|
||||
};
|
||||
|
||||
extern STR16 szCorpseTextStr[];
|
||||
|
||||
enum
|
||||
{
|
||||
STR_FOOD_DONOTWANT_EAT,
|
||||
STR_FOOD_DONOTWANT_DRINK,
|
||||
STR_FOOD_ATE,
|
||||
STR_FOOD_DRANK,
|
||||
STR_FOOD_STR_DAMAGE_FOOD_TOO_MUCH,
|
||||
STR_FOOD_STR_DAMAGE_FOOD_TOO_LESS,
|
||||
STR_FOOD_HEALTH_DAMAGE_FOOD_TOO_MUCH,
|
||||
STR_FOOD_HEALTH_DAMAGE_FOOD_TOO_LESS,
|
||||
STR_FOOD_STR_DAMAGE_DRINK_TOO_MUCH,
|
||||
STR_FOOD_STR_DAMAGE_DRINK_TOO_LESS,
|
||||
STR_FOOD_HEALTH_DAMAGE_DRINK_TOO_MUCH,
|
||||
STR_FOOD_HEALTH_DAMAGE_DRINK_TOO_LESS,
|
||||
|
||||
STR_FOOD_ERROR_NO_FOOD_SYSTEM,
|
||||
|
||||
TEXT_NUM_FOOD_STR
|
||||
};
|
||||
|
||||
extern STR16 szFoodTextStr[];
|
||||
|
||||
enum
|
||||
{
|
||||
AIR_RAID_TURN_STR,
|
||||
@@ -818,8 +892,8 @@ enum
|
||||
MERC_VITAL_STATS_WITH_POISON_AND_FOOD_POPUPTEXT,
|
||||
|
||||
FUNCTION_SELECTION_STR,
|
||||
|
||||
CORPSE_SELECTION_STR,
|
||||
WEAPON_CLEANING_STR,
|
||||
|
||||
TEXT_NUM_TACTICAL_STR
|
||||
};
|
||||
|
||||
@@ -2903,6 +2903,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7395,4 +7398,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"更多...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //CHINESE
|
||||
|
||||
@@ -2900,6 +2900,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7388,4 +7391,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //DUTCH
|
||||
|
||||
@@ -2902,6 +2902,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body",
|
||||
|
||||
// Flugente: weapon cleaning
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7377,4 +7380,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //ENGLISH
|
||||
|
||||
@@ -2902,6 +2902,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7363,4 +7366,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //FRENCH
|
||||
|
||||
@@ -2905,6 +2905,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7203,4 +7206,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"weitere...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //GERMAN
|
||||
|
||||
@@ -2895,6 +2895,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7375,4 +7378,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //ITALIAN
|
||||
|
||||
@@ -2910,6 +2910,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7389,4 +7392,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //POLISH
|
||||
|
||||
@@ -2903,6 +2903,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7355,4 +7358,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //RUSSIAN
|
||||
|
||||
@@ -2904,6 +2904,9 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] =
|
||||
|
||||
// added by Flugente: decide what to do with the corpses
|
||||
L"1 - Decapitate 2 - Gut 3 - Take Clothes 4 - Take Body", // TODO.Translate
|
||||
|
||||
// Flugente: weapon cleaning // TODO.Translate
|
||||
L"%s cleaned %s",
|
||||
};
|
||||
|
||||
//Varying helptext explains (for the "Go to Sector/Map" checkbox) what will happen given different circumstances in the "exiting sector" interface.
|
||||
@@ -7392,4 +7395,65 @@ STR16 gszPocketPopupText[]=
|
||||
L"more...", //POCKET_POPUP_MOAR
|
||||
};
|
||||
|
||||
// Flugente: externalised texts for some features // TODO.Translate
|
||||
STR16 szCovertTextStr[]=
|
||||
{
|
||||
L"%s has camo!",
|
||||
L"%s has a backpack!",
|
||||
L"%s is seen carrying a corpse!",
|
||||
L"%s wears suspicious LBE gear!",
|
||||
L"%s possesses military hardware!",
|
||||
L"%s carries too many guns!",
|
||||
L"%s equipment is too good!",
|
||||
L"%s gun has too many attachments!",
|
||||
L"%s was seen performing suspicious activities!",
|
||||
L"%s does not look like a civilian!",
|
||||
L"%s bleeding was discovered!",
|
||||
L"%s is drunk and doesn't look like a soldier!",
|
||||
L"On closer inspection, %s's disguise does not hold!",
|
||||
L"%s isn't supposed to be here!",
|
||||
L"%s isn't supposed to be here at this time!",
|
||||
L"%s was seen near a fresh corpse!",
|
||||
L"%s equipment raises a few eyebrows!",
|
||||
L"%s is seen targeting a soldier!",
|
||||
L"%s has seen through %s disguise!",
|
||||
L"No clothes item found in Items.xml!",
|
||||
L"This does not work with the old trait system!",
|
||||
L"Not enough Aps!",
|
||||
L"Bad palette found!",
|
||||
L"You need the covert skill to do this!",
|
||||
L"No uniform found!",
|
||||
};
|
||||
|
||||
STR16 szCorpseTextStr[]=
|
||||
{
|
||||
L"No head item found in Items.xml!",
|
||||
L"Corpse cannot be decapitated!",
|
||||
L"No meat item found in Items.xml!",
|
||||
L"Not possible, you sick, twisted individual!",
|
||||
L"No clothes to take!",
|
||||
L"%s cannot take clothes off of this corpse!",
|
||||
L"This corpse cannot be taken!",
|
||||
L"No free hand to carry corpse!",
|
||||
L"No corpse item found in Items.xml!",
|
||||
L"Invalid corpse ID!",
|
||||
};
|
||||
|
||||
STR16 szFoodTextStr[]=
|
||||
{
|
||||
L"%s does not want to eat %s",
|
||||
L"%s does not want to drink %s",
|
||||
L"%s ate %s",
|
||||
L"%s drank %s",
|
||||
L"%s's strength was damaged due to being overfed!",
|
||||
L"%s's strength was damaged due to lack of nutrition!",
|
||||
L"%s's health was damaged due to being overfed!",
|
||||
L"%s's health was damaged due to lack of nutrition!",
|
||||
L"%s's strength was damaged due to excessive drinking!",
|
||||
L"%s's strength was damaged due to lack of water!",
|
||||
L"%s's health was damaged due to excessive drinking!",
|
||||
L"%s's health was damaged due to lack of water!",
|
||||
L"Sectorwide canteen filling not possible, Food System is off!"
|
||||
};
|
||||
|
||||
#endif //TAIWANESE
|
||||
|
||||
Reference in New Issue
Block a user