mirror of
https://github.com/1dot13/source.git
synced 2026-07-22 13:40:22 +02:00
Minor improvement/fix for "Improved Bomb Planting" feature. (by Sevenfm)
1. Now you don't need to hold shift all the time while planting bomb, just shift+click is enough. 2. If successfully taken new bomb from inventory (or using Tripwire Roll), cursor is not changed back to MOVE after planting bomb. This means one less right-click for each bomb when making big minefields/tripwire networks. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6876 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+26
-19
@@ -83,6 +83,8 @@ ITEM_POOL_LOCATOR FlashItemSlots[ NUM_ITEM_FLASH_SLOTS ];
|
||||
UINT32 guiNumFlashItemSlots = 0;
|
||||
// sevenfm: remember network settings for last planted tripwire
|
||||
UINT8 gubLastTripwire = 0;
|
||||
// set to TRUE if shift+click was pressed for planting bomb - will use for Improved Bomb Planting feature
|
||||
BOOLEAN gfShiftBombPlant = FALSE;
|
||||
|
||||
|
||||
LEVELNODE *AddItemGraphicToWorld( INVTYPE *pItem, INT32 sGridNo, UINT8 ubLevel );
|
||||
@@ -1517,6 +1519,12 @@ INT32 HandleItem( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bLevel, UINT16 usHa
|
||||
// Save gridno....
|
||||
pSoldier->aiData.sPendingActionData2 = sGridNo;
|
||||
|
||||
// sevenfm: set shift flag for auto-taking of next mine from inventory (Improved Bomb Planting)
|
||||
if( fFromUI && _KeyDown(SHIFT) )
|
||||
gfShiftBombPlant = TRUE;
|
||||
else
|
||||
gfShiftBombPlant = FALSE;
|
||||
|
||||
if ( pSoldier->sGridNo != sGridNo )
|
||||
{
|
||||
// SEND PENDING ACTION
|
||||
@@ -1830,12 +1838,16 @@ void HandleSoldierDropBomb( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
// we now know there is something nasty here
|
||||
gpWorldLevelData[ sGridNo ].uiFlags |= MAPELEMENT_PLAYER_MINE_PRESENT;
|
||||
|
||||
if (pSoldier->inv[ HANDPOS ].MoveThisObjectTo(gTempObject, 1) == 0) {
|
||||
if (pSoldier->inv[ HANDPOS ].MoveThisObjectTo(gTempObject, 1) == 0)
|
||||
{
|
||||
AddItemToPool( sGridNo, &gTempObject, BURIED, pSoldier->pathing.bLevel, WORLD_ITEM_ARMED_BOMB, 0 );
|
||||
// sevenfm: take another item with same id from inventory, only REALTIME
|
||||
HandleTakeNewBombFromIventory(pSoldier, &gTempObject);
|
||||
}
|
||||
// sevenfm: change cursor back to action if successfully taken new bomb
|
||||
if ( gfShiftBombPlant && pSoldier->inv[ pSoldier->ubAttackingHand ].exists() )
|
||||
guiPendingOverrideEvent = M_CHANGE_TO_ACTION;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// EXPLOSIVES GAIN (10): Failed to place a bomb, or bury and arm a mine
|
||||
@@ -1932,7 +1944,7 @@ void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
if ( GetRangeFromGridNoDiff( sGridNo, pSoldier->sGridNo ) < MIN_LOB_RANGE )
|
||||
{
|
||||
|
||||
//ddd âîæìîæíî åùå íàäî äîáàâèòü óñëîâèå ïðîâåðêè íà êëàññ êèäàåìîãî ïðåäìåòà - ãðàíàòû
|
||||
//ddd maybe need to add check for throwing item class - grenade
|
||||
if( (pSoldier->pThrowParams->ubActionCode == THROW_ARM_ITEM) &&
|
||||
( (pSoldier->ubBodyType == BIGMALE) || (pSoldier->ubBodyType == REGMALE) ) )
|
||||
pSoldier->usPendingAnimation = LOB_GRENADE_STANCE;
|
||||
@@ -1940,12 +1952,8 @@ void HandleSoldierThrowItem( SOLDIERTYPE *pSoldier, INT32 sGridNo )
|
||||
pSoldier->usPendingAnimation = LOB_ITEM;
|
||||
|
||||
}
|
||||
else
|
||||
{ //ddd âîæìîæíî åùå íàäî äîáàâèòü óñëîâèå ïðîâåðêè íà êëàññ êèäàåìîãî ïðåäìåòà - ãðàíàòû
|
||||
//INT32 uiItemClass; //òàêîé êîä òîæå ðàáîòàåò. ôàëüøâååð è ãðàíàòà èç îäíîãî êëàññà?
|
||||
// uiItemClass= Item[ pSoldier->inv[HANDPOS].usItem ].usItemClass;
|
||||
//if( (uiItemClass == IC_GRENADE) &&
|
||||
|
||||
else
|
||||
{
|
||||
|
||||
if( (pSoldier->pThrowParams->ubActionCode == THROW_ARM_ITEM) &&
|
||||
( (pSoldier->ubBodyType == BIGMALE) || (pSoldier->ubBodyType == REGMALE) ) )
|
||||
@@ -4904,7 +4912,7 @@ void StartBombMessageBox( SOLDIERTYPE * pSoldier, INT32 sGridNo )
|
||||
gzUserDefinedButtonColor[cnt] = 0;
|
||||
|
||||
// sevenfm: if SHIFT is pressed - plant tripwire with last network settings
|
||||
if( _KeyDown( SHIFT ) && gubLastTripwire > 0 )
|
||||
if( gfShiftBombPlant && gubLastTripwire > 0 )
|
||||
BombMessageBoxCallBack(gubLastTripwire);
|
||||
else
|
||||
DoMessageBox( MSG_BOX_BASIC_SMALL_BUTTONS, TacticalStr[ CHOOSE_TRIPWIRE_NETWORK ], GAME_SCREEN, MSG_BOX_FLAG_GENERIC_SIXTEEN_BUTTONS, BombMessageBoxCallBack, NULL );
|
||||
@@ -4920,10 +4928,10 @@ void StartTacticalFunctionSelectionMessageBox( SOLDIERTYPE * pSoldier, INT32 sGr
|
||||
gpTempSoldier = pSoldier;
|
||||
gsTempGridNo = sGridNo;
|
||||
|
||||
// sevenfm: reorganized buttons order for new dialog
|
||||
// sevenfm: reorganized buttons order for new dialog
|
||||
wcscpy( gzUserDefinedButton[0], TacticalStr[ FILL_CANTEEN_STR ] );
|
||||
wcscpy( gzUserDefinedButton[2], TacticalStr[ CLEAN_ONE_GUN_STR ] );
|
||||
wcscpy( gzUserDefinedButton[3], TacticalStr[ CLEAN_ALL_GUNS_STR ] );
|
||||
wcscpy( gzUserDefinedButton[2], TacticalStr[ CLEAN_ONE_GUN_STR ] );
|
||||
wcscpy( gzUserDefinedButton[3], TacticalStr[ CLEAN_ALL_GUNS_STR ] );
|
||||
|
||||
if ( gpTempSoldier->bSoldierFlagMask & (SOLDIER_COVERT_CIV|SOLDIER_COVERT_SOLDIER) )
|
||||
wcscpy( gzUserDefinedButton[1], TacticalStr[ TAKE_OFF_DISGUISE_STR ] );
|
||||
@@ -5116,6 +5124,9 @@ void BombMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// sevenfm: set flag only if planting tripwire
|
||||
gpWorldLevelData[ gsTempGridNo ].uiFlags |= MAPELEMENT_PLAYER_MINE_PRESENT;
|
||||
HandleTakeNewBombFromIventory(gpTempSoldier, &gTempObject);
|
||||
// sevenfm: change cursor back to action if successfully taken new bomb (also change mode back to action if using tripwire roll)
|
||||
if ( gfShiftBombPlant && gpTempSoldier->inv[ gpTempSoldier->ubAttackingHand ].exists() )
|
||||
guiPendingOverrideEvent = M_CHANGE_TO_ACTION;
|
||||
}
|
||||
else
|
||||
AddItemToPool( gsTempGridNo, &gTempObject, VISIBLE, gpTempSoldier->pathing.bLevel, WORLD_ITEM_ARMED_BOMB, 0 );
|
||||
@@ -5507,7 +5518,7 @@ void BoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
// this allows to keep all attachments
|
||||
if( gTempObject.usItem == ACTION_ITEM || !gGameExternalOptions.bAllowExplosiveAttachments )
|
||||
{
|
||||
CreateItem( gTempObject[0]->data.misc.usBombItem, gTempObject[0]->data.misc.bBombStatus, &gTempObject );
|
||||
CreateItem( gTempObject[0]->data.misc.usBombItem, gTempObject[0]->data.misc.bBombStatus, &gTempObject );
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -6978,10 +6989,6 @@ void ExtendedBoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
else
|
||||
return;
|
||||
}
|
||||
/* if(_KeyDown( SHIFT ) && gGameExternalOptions.bDontRevealTripwire )
|
||||
gRevealTripwire = TRUE;
|
||||
else
|
||||
gRevealTripwire = FALSE; */
|
||||
if (gfDisarmingBuriedBomb)
|
||||
{
|
||||
SetOffBombsInGridNo( gpBoobyTrapSoldier->ubID, gsBoobyTrapGridNo, TRUE, gbBoobyTrapLevel );
|
||||
@@ -6996,7 +7003,7 @@ void ExtendedBoobyTrapMessageBoxCallBack( UINT8 ubExitValue )
|
||||
void HandleTakeNewBombFromIventory(SOLDIERTYPE* pSoldier, OBJECTTYPE* pObj)
|
||||
{
|
||||
if( !( (gTacticalStatus.uiFlags & TURNBASED ) && (gTacticalStatus.uiFlags & INCOMBAT) ) &&
|
||||
!pSoldier->inv[HANDPOS].exists() && _KeyDown( SHIFT ))
|
||||
!pSoldier->inv[HANDPOS].exists() && gfShiftBombPlant )
|
||||
{
|
||||
pSoldier->TakeNewBombFromIventory(pObj->usItem);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user