Merged from revision: 7525

- Fixed bug with game selecting helicopter loading screen when reloading game (by anv)
- Fixed autoplace stacks logic from sector inventory on r7380 commit (by Buggler)

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7526 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Wanne
2014-09-17 18:46:09 +00:00
parent 12cf5396e9
commit 6de39a6ff2
2 changed files with 68 additions and 51 deletions
+2 -1
View File
@@ -19,6 +19,7 @@
#include "Strategic Movement.h" #include "Strategic Movement.h"
#include "UndergroundInit.h" #include "UndergroundInit.h"
#include <string> #include <string>
#include "strategicmap.h"
extern HVSURFACE ghFrameBuffer; extern HVSURFACE ghFrameBuffer;
extern BOOLEAN gfSchedulesHosed; extern BOOLEAN gfSchedulesHosed;
@@ -358,9 +359,9 @@ void DisplayLoadScreenWithID( UINT8 ubLoadScreenID )
vs_desc.fCreateFlags = VSURFACE_CREATE_FROMFILE | VSURFACE_SYSTEM_MEM_USAGE | VSURFACE_CREATE_FROMPNG_FALLBACK; vs_desc.fCreateFlags = VSURFACE_CREATE_FROMFILE | VSURFACE_SYSTEM_MEM_USAGE | VSURFACE_CREATE_FROMPNG_FALLBACK;
szSector = szSectorMap [gWorldSectorY][gWorldSectorX];
const BOOLEAN fExternalLS = (szSector != NULL) && ((DAY <= ubLoadScreenID && ubLoadScreenID <= NIGHT_ALT) || (ubLoadScreenID == UNDERGROUND)); const BOOLEAN fExternalLS = (szSector != NULL) && ((DAY <= ubLoadScreenID && ubLoadScreenID <= NIGHT_ALT) || (ubLoadScreenID == UNDERGROUND));
if (fExternalLS) if (fExternalLS)
{ {
// Get the image path // Get the image path
+65 -49
View File
@@ -7009,19 +7009,19 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
if (pSoldier->inv[HANDPOS].exists() == false) if (pSoldier->inv[HANDPOS].exists() == false)
{ {
// put the one-handed weapon in the guy's hand... // put the one-handed weapon in the guy's hand...
PlaceObject( pSoldier, HANDPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, HANDPOS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
else if ( !(Item[pSoldier->inv[HANDPOS].usItem].twohanded ) && pSoldier->inv[SECONDHANDPOS].exists() == false) else if ( !(Item[pSoldier->inv[HANDPOS].usItem].twohanded ) && pSoldier->inv[SECONDHANDPOS].exists() == false)
{ {
// put the one-handed weapon in the guy's 2nd hand... // put the one-handed weapon in the guy's 2nd hand...
PlaceObject( pSoldier, SECONDHANDPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, SECONDHANDPOS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
// two-handed objects are best handled in the main loop for large objects, // two-handed objects are best handled in the main loop for large objects,
@@ -7035,18 +7035,22 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
case IC_GUN: case IC_GUN:
if(pSoldier->inv[GUNSLINGPOCKPOS].exists() == false) // Long Gun use Gun Sling if(pSoldier->inv[GUNSLINGPOCKPOS].exists() == false) // Long Gun use Gun Sling
{ {
PlaceObject( pSoldier, GUNSLINGPOCKPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, GUNSLINGPOCKPOS, pObj, fNewItem ) )
if (pObj->exists() == false || fStackOrSingleSlot) {
return( TRUE ); if (pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
break; break;
case IC_THROWING_KNIFE: case IC_THROWING_KNIFE:
case IC_BLADE: case IC_BLADE:
if(pSoldier->inv[KNIFEPOCKPOS].exists() == false) // Knife if(pSoldier->inv[KNIFEPOCKPOS].exists() == false) // Knife
{ {
PlaceObject( pSoldier, KNIFEPOCKPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, KNIFEPOCKPOS, pObj, fNewItem ) )
if (pObj->exists() == false || fStackOrSingleSlot) {
return( TRUE ); if (pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
break; break;
} }
@@ -7059,10 +7063,10 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
if (pSoldier->inv[VESTPOS].exists() == false) if (pSoldier->inv[VESTPOS].exists() == false)
{ {
// put on the armour! // put on the armour!
PlaceObject( pSoldier, VESTPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, VESTPOS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
break; break;
@@ -7079,21 +7083,21 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
if (pSoldier->inv[LEGPOS].exists() == false) if (pSoldier->inv[LEGPOS].exists() == false)
{ {
// put on the armour! // put on the armour!
PlaceObject( pSoldier, LEGPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, LEGPOS, pObj, fNewItem ) )
} {
if ( pObj->exists() == false || fStackOrSingleSlot ) if ( pObj->exists() == false || fStackOrSingleSlot )
{ return( TRUE );
return( TRUE ); }
} }
break; break;
case ARMOURCLASS_HELMET: case ARMOURCLASS_HELMET:
if (pSoldier->inv[HELMETPOS].exists() == false) if (pSoldier->inv[HELMETPOS].exists() == false)
{ {
// put on the armour! // put on the armour!
PlaceObject( pSoldier, HELMETPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, HELMETPOS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
break; break;
@@ -7105,18 +7109,18 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
case IC_FACE: case IC_FACE:
if ( (pSoldier->inv[HEAD1POS].exists() == false) && CompatibleFaceItem( pObj->usItem, pSoldier->inv[HEAD2POS].usItem ) ) if ( (pSoldier->inv[HEAD1POS].exists() == false) && CompatibleFaceItem( pObj->usItem, pSoldier->inv[HEAD2POS].usItem ) )
{ {
PlaceObject( pSoldier, HEAD1POS, pObj, fNewItem ); if( PlaceObject( pSoldier, HEAD1POS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
else if ( (pSoldier->inv[HEAD2POS].exists() == false) && CompatibleFaceItem( pObj->usItem, pSoldier->inv[HEAD1POS].usItem ) ) else if ( (pSoldier->inv[HEAD2POS].exists() == false) && CompatibleFaceItem( pObj->usItem, pSoldier->inv[HEAD1POS].usItem ) )
{ {
PlaceObject( pSoldier, HEAD2POS, pObj, fNewItem ); if( PlaceObject( pSoldier, HEAD2POS, pObj, fNewItem ) )
if ( pObj->exists() == false || fStackOrSingleSlot )
{ {
return( TRUE ); if ( pObj->exists() == false || fStackOrSingleSlot )
return( TRUE );
} }
} }
break; break;
@@ -7128,22 +7132,30 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
lbeClass = LoadBearingEquipment[pItem->ubClassIndex].lbeClass; lbeClass = LoadBearingEquipment[pItem->ubClassIndex].lbeClass;
if(lbeClass == THIGH_PACK) // Thigh pack if(lbeClass == THIGH_PACK) // Thigh pack
{ {
if (pSoldier->inv[LTHIGHPOCKPOS].exists() == false) { if (pSoldier->inv[LTHIGHPOCKPOS].exists() == false)
PlaceObject( pSoldier, LTHIGHPOCKPOS, pObj, fNewItem ); {
if(pObj->exists() == false || fStackOrSingleSlot) if( PlaceObject( pSoldier, LTHIGHPOCKPOS, pObj, fNewItem ) )
return( TRUE ); {
if(pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
if (pSoldier->inv[RTHIGHPOCKPOS].exists() == false) { if (pSoldier->inv[RTHIGHPOCKPOS].exists() == false)
PlaceObject( pSoldier, RTHIGHPOCKPOS, pObj, fNewItem ); {
if(pObj->exists() == false || fStackOrSingleSlot) if( PlaceObject( pSoldier, RTHIGHPOCKPOS, pObj, fNewItem ) )
return( TRUE ); {
if(pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
} }
else if(pSoldier->inv[VESTPOCKPOS].exists() == false && lbeClass == VEST_PACK) // Vest pack else if(pSoldier->inv[VESTPOCKPOS].exists() == false && lbeClass == VEST_PACK) // Vest pack
{ {
PlaceObject( pSoldier, VESTPOCKPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, VESTPOCKPOS, pObj, fNewItem ) )
if(pObj->exists() == false || fStackOrSingleSlot) {
return( TRUE ); if(pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
else if(pSoldier->inv[CPACKPOCKPOS].exists() == false && lbeClass == COMBAT_PACK) // Combat pack else if(pSoldier->inv[CPACKPOCKPOS].exists() == false && lbeClass == COMBAT_PACK) // Combat pack
{ {
@@ -7152,9 +7164,11 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
//DBrot: changed to bitwise comparison //DBrot: changed to bitwise comparison
if((pSoldier->inv[BPACKPOCKPOS].exists() == true && packCombo != 0 && (backCombo & packCombo)) || pSoldier->inv[BPACKPOCKPOS].exists() == false) if((pSoldier->inv[BPACKPOCKPOS].exists() == true && packCombo != 0 && (backCombo & packCombo)) || pSoldier->inv[BPACKPOCKPOS].exists() == false)
{ {
PlaceObject( pSoldier, CPACKPOCKPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, CPACKPOCKPOS, pObj, fNewItem ) )
if(pObj->exists() == false || fStackOrSingleSlot) {
return( TRUE ); if(pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
} }
else if(pSoldier->inv[BPACKPOCKPOS].exists() == false && lbeClass == BACKPACK) // Backpack else if(pSoldier->inv[BPACKPOCKPOS].exists() == false && lbeClass == BACKPACK) // Backpack
@@ -7167,12 +7181,14 @@ BOOLEAN AutoPlaceObject( SOLDIERTYPE * pSoldier, OBJECTTYPE * pObj, BOOLEAN fNew
//DBrot: changed to bitwise comparison //DBrot: changed to bitwise comparison
if((pSoldier->inv[CPACKPOCKPOS].exists() == true && backCombo != 0 && (backCombo & packCombo)) || pSoldier->inv[CPACKPOCKPOS].exists() == false) if((pSoldier->inv[CPACKPOCKPOS].exists() == true && backCombo != 0 && (backCombo & packCombo)) || pSoldier->inv[CPACKPOCKPOS].exists() == false)
{ {
PlaceObject( pSoldier, BPACKPOCKPOS, pObj, fNewItem ); if( PlaceObject( pSoldier, BPACKPOCKPOS, pObj, fNewItem ) )
pSoldier->flags.DropPackFlag = FALSE; {
pSoldier->flags.ZipperFlag = FALSE; pSoldier->flags.DropPackFlag = FALSE;
RenderBackpackButtons(ACTIVATE_BUTTON); /* CHRISL: Needed for new inventory backpack buttons */ pSoldier->flags.ZipperFlag = FALSE;
if(pObj->exists() == false || fStackOrSingleSlot) RenderBackpackButtons(ACTIVATE_BUTTON); /* CHRISL: Needed for new inventory backpack buttons */
return( TRUE ); if(pObj->exists() == false || fStackOrSingleSlot)
return( TRUE );
}
} }
//} //}
} }