diff --git a/Tactical/DisplayCover.cpp b/Tactical/DisplayCover.cpp index 2dfffd40..d83ba75b 100644 --- a/Tactical/DisplayCover.cpp +++ b/Tactical/DisplayCover.cpp @@ -1069,7 +1069,8 @@ void DetermineMineDisplayInTile( INT32 sGridNo, INT8 bLevel, INT8& bMines, BOOLE if (!((*pObj).fFlags & OBJECT_DISABLED_BOMB)) { // we are looking for hostile mines and have got an detector equipped - if ( gubDrawModeMine == MINES_DRAW_DETECT_ENEMY && fWithMineDetector ) + // some bombs cannot be found via metal detector + if ( gubDrawModeMine == MINES_DRAW_DETECT_ENEMY && fWithMineDetector && !( HasItemFlag(pObj->usItem, NO_METAL_DETECTION) || HasItemFlag((*pObj)[0]->data.misc.usBombItem, NO_METAL_DETECTION) ) ) { // display all mines bMines = MINE_BOMB; diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 06ac0776..f6fd0ee9 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -5389,7 +5389,8 @@ BOOLEAN NearbyGroundSeemsWrong( SOLDIERTYPE * pSoldier, INT32 sGridNo, BOOLEAN f pObj = &( gWorldItems[ gWorldBombs[uiWorldBombIndex].iItemIndex ].object ); if ( (*pObj)[0]->data.misc.bDetonatorType == BOMB_PRESSURE && !((*pObj).fFlags & OBJECT_KNOWN_TO_BE_TRAPPED) && (!((*pObj).fFlags & OBJECT_DISABLED_BOMB)) ) { - if ( fMining && (*pObj)[0]->data.bTrap <= 10 ) + // Flugente: some bombs cannot be found via metal detector + if ( fMining && (*pObj)[0]->data.bTrap <= 10 && !( HasItemFlag(pObj->usItem, NO_METAL_DETECTION) || HasItemFlag((*pObj)[0]->data.misc.usBombItem, NO_METAL_DETECTION) ) ) { // add blue flag AddBlueFlag( sNextGridNo, pSoldier->pathing.bLevel ); diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 2d3091e4..e4e2d75f 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -747,9 +747,9 @@ extern OBJECTTYPE gTempObject; #define CORPSE 0x00008000 //32768 // a dead body #define SKIN_BLOODCAT 0x00010000 //65536 // retrieve this by skinning (=decapitating) a bloodcat -/*#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 NO_METAL_DETECTION 0x00020000 //131072 // a planted bomb with this flag can NOT be detected via metal detector. Use sparingly! +#define JUMP_GRENADE 0x00040000 //262144 // add +25 heigth to explosion, used for bouncing grenades and jumping mines +/*#define PLAYER_NET_4_LVL_1 0x00080000 //524288 #define PLAYER_NET_1_LVL_2 0x00100000 //1048576 #define PLAYER_NET_2_LVL_2 0x00200000 //2097152 diff --git a/TileEngine/Explosion Control.cpp b/TileEngine/Explosion Control.cpp index a2c69d16..d30feac2 100644 --- a/TileEngine/Explosion Control.cpp +++ b/TileEngine/Explosion Control.cpp @@ -337,6 +337,16 @@ void InternalIgniteExplosion( UINT8 ubOwner, INT16 sX, INT16 sY, INT16 sZ, INT32 } // Callahan end + // Flugente: bouncing grenades/jumping mines explode from about waist heigth, so we add 25 to sZ. However, on order for this to work on roofs, we have to add another 50 + // if on a roof, as heigth is only added if bLevel = 1 and sZ = 0 + if ( HasItemFlag(usItem, JUMP_GRENADE) ) + { + sZ += 25; + + if ( bLevel ) + sZ += ROOF_LEVEL_HEIGHT; + } + ExpParams.sX = sX; ExpParams.sY = sY; ExpParams.sZ = sZ;