Merged New Inventory Project into main branch

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@1871 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
lalien
2008-03-08 15:15:25 +00:00
parent e16d166277
commit 43ca24dda8
649 changed files with 93359 additions and 82507 deletions
+312 -312
View File
@@ -30,12 +30,12 @@
#endif
/* view directions */
#define DLEFT 0
#define DRIGHT 1
#define UP 2
#define LEFT 3
#define RIGHT 4
#define NOVIEW 5
#define DLEFT 0
#define DRIGHT 1
#define UP 2
#define LEFT 3
#define RIGHT 4
#define NOVIEW 5
#define MAXVIEWPATHS 17
#define VIEWPATHLENGTH 13
@@ -51,7 +51,7 @@ UINT8 gubFOVDebugInfoInfo[ WORLD_MAX ];
#endif
UINT8 ViewPath[MAXVIEWPATHS][VIEWPATHLENGTH] ={
UINT8 ViewPath[MAXVIEWPATHS][VIEWPATHLENGTH] ={
{NOVIEW,UP,UP,UP,UP,UP,UP,UP,UP, UP, UP, UP, UP},
{UP,UP,UP,UP,DRIGHT,UP,UP,UP,UP, UP, UP, UP, UP},
{UP,UP,UP,UP,DLEFT,UP,UP,UP,UP, UP, UP, UP, UP},
@@ -71,15 +71,15 @@ UINT8 ViewPath[MAXVIEWPATHS][VIEWPATHLENGTH] ={
{RIGHT,DRIGHT,DRIGHT,DRIGHT,DRIGHT,DRIGHT,UP,UP,UP, UP, UP, UP, UP},
{LEFT,DLEFT,DLEFT,DLEFT,DLEFT,DLEFT,UP,UP,UP, UP, UP, UP, UP},
{DLEFT,LEFT,LEFT,UP,NOVIEW,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{DLEFT,LEFT,LEFT,UP,NOVIEW,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{LEFT,LEFT,LEFT,UP,LEFT,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{DRIGHT,RIGHT,RIGHT,UP,NOVIEW,NOVIEW,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{RIGHT,RIGHT,RIGHT,UP,RIGHT,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW}
{RIGHT,RIGHT,RIGHT,UP,RIGHT,NOVIEW,NOVIEW,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW}
};
UINT8 ViewPath2[MAXVIEWPATHS][VIEWPATHLENGTH]= {
UINT8 ViewPath2[MAXVIEWPATHS][VIEWPATHLENGTH]= {
{NOVIEW,UP,UP,UP,UP,UP,UP,NOVIEW,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{UP,UP,DLEFT,UP,UP,UP,DLEFT,DRIGHT,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
{UP,UP,DLEFT,UP,UP,UP,DRIGHT,DLEFT,NOVIEW, NOVIEW, NOVIEW, NOVIEW, NOVIEW},
@@ -115,57 +115,57 @@ void BuildSightDir(UINT32 dir, UINT32 *One, UINT32 *Two, UINT32 *Three, UINT32 *
{
switch(dir)
{
case NORTH : *One = NORTHWEST;
*Two = NORTHEAST;
*Three = NORTH;
*Four = WEST;
*Five = EAST;
break;
case NORTHEAST: *One = NORTH;
*Two = EAST;
*Three = NORTHEAST;
*Four = NORTHWEST;
*Five = SOUTHEAST;
break;
case EAST : *One = NORTHEAST;
*Two = SOUTHEAST;
*Three = EAST;
*Four = NORTH;
*Five = SOUTH;
break;
case SOUTHEAST: *One = EAST;
*Two = SOUTH;
*Three = SOUTHEAST;
*Four = NORTHEAST;
*Five = SOUTHWEST;
break;
case SOUTH : *One = SOUTHEAST;
*Two = SOUTHWEST;
*Three = SOUTH;
*Four = EAST;
*Five = WEST;
break;
case SOUTHWEST: *One = SOUTH;
*Two = WEST;
*Three = SOUTHWEST;
*Four = SOUTHEAST;
*Five = NORTHWEST;
break;
case WEST : *One = SOUTHWEST;
*Two = NORTHWEST;
*Three = WEST;
*Four = SOUTH;
*Five = NORTH;
break;
case NORTHWEST: *One = WEST;
*Two = NORTH;
*Three = NORTHWEST;
*Four = SOUTHWEST;
*Five = NORTHEAST;
break;
case NORTH : *One = NORTHWEST;
*Two = NORTHEAST;
*Three = NORTH;
*Four = WEST;
*Five = EAST;
break;
case NORTHEAST: *One = NORTH;
*Two = EAST;
*Three = NORTHEAST;
*Four = NORTHWEST;
*Five = SOUTHEAST;
break;
case EAST : *One = NORTHEAST;
*Two = SOUTHEAST;
*Three = EAST;
*Four = NORTH;
*Five = SOUTH;
break;
case SOUTHEAST: *One = EAST;
*Two = SOUTH;
*Three = SOUTHEAST;
*Four = NORTHEAST;
*Five = SOUTHWEST;
break;
case SOUTH : *One = SOUTHEAST;
*Two = SOUTHWEST;
*Three = SOUTH;
*Four = EAST;
*Five = WEST;
break;
case SOUTHWEST: *One = SOUTH;
*Two = WEST;
*Three = SOUTHWEST;
*Four = SOUTHEAST;
*Five = NORTHWEST;
break;
case WEST : *One = SOUTHWEST;
*Two = NORTHWEST;
*Three = WEST;
*Four = SOUTH;
*Five = NORTH;
break;
case NORTHWEST: *One = WEST;
*Two = NORTH;
*Three = NORTHWEST;
*Four = SOUTHWEST;
*Five = NORTHEAST;
break;
#ifdef BETAVERSION
default:
NumMessage("BuildSightDir: Invalid 'dir' value, = ",dir);
default:
NumMessage("BuildSightDir: Invalid 'dir' value, = ",dir);
#endif
}
}
@@ -242,7 +242,7 @@ BOOLEAN FindSlantRoofSlot( INT16 sGridNo )
if ( gSlantRoofData[uiCount].sGridNo == sGridNo )
{
return( TRUE );
}
}
}
}
@@ -293,7 +293,7 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
INT32 Inc[6],Dir[6];
INT8 itemVisible = FALSE;
INT8 Blocking,twoMoreTiles,markerDir;
INT8 nextDir=0,AlreadySawItem=FALSE;
INT8 nextDir=0;
UINT8 who; //,itemIndex; // for each square checked
UINT8 dir,range,Path2;
UINT8 ubRoomNo;
@@ -311,24 +311,24 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
INT8 bTallestStructureHeight;
INT32 iDoorGridNo;
STRUCTURE * pStructure, *pDummy;
INT8 bStructHeight;
INT8 bThroughWindowDirection;
INT8 bStructHeight;
INT8 bThroughWindowDirection;
if ( pSoldier->uiStatusFlags & SOLDIER_ENEMY )
{
//pSoldier->needToLookForItems = FALSE;
return;
}
if ( pSoldier->flags.uiStatusFlags & SOLDIER_ENEMY )
{
//pSoldier->needToLookForItems = FALSE;
return;
}
if ( pSoldier->uiStatusFlags & SOLDIER_VEHICLE )
if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
{
return;
}
// Return if this guy has no gridno, has bad life, etc
if( pSoldier->sGridNo == NOWHERE || !pSoldier->bInSector || pSoldier->bLife < OKLIFE )
if( pSoldier->sGridNo == NOWHERE || !pSoldier->bInSector || pSoldier->stats.bLife < OKLIFE )
{
return;
return;
}
if (pSoldier->bBlindedCounter > 0)
@@ -351,39 +351,39 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
MercLooksForDoors( pSoldier, TRUE );
who = pSoldier->ubID;
dir = pSoldier->ubDirection;
who = pSoldier->ubID;
dir = pSoldier->ubDirection;
//NumMessage("good old reveal",dir);
// a gassed merc can only see 1 tile away due to blurred vision
if ( pSoldier->uiStatusFlags & SOLDIER_GASSED )
// a gassed merc can only see 1 tile away due to blurred vision
if ( pSoldier->flags.uiStatusFlags & SOLDIER_GASSED )
{
range = 1;
}
else
else
{
range = pSoldier->bViewRange;
range = pSoldier->bViewRange;
// balance item viewing range between normal and the limit set by opplist-type functions -- CJC
range = (AdjustMaxSightRangeForEnvEffects( pSoldier, LightTrueLevel( pSoldier->sGridNo, pSoldier->bLevel), range ) + range) / 2;
range = (AdjustMaxSightRangeForEnvEffects( pSoldier, LightTrueLevel( pSoldier->sGridNo, pSoldier->pathing.bLevel), range ) + range) / 2;
}
BuildSightDir(dir,(UINT32 *)&Dir[0],(UINT32 *)&Dir[1],(UINT32 *)&Dir[2],(UINT32 *)&Dir[3],(UINT32 *)&Dir[4]);
for (cnt = 0; cnt < 5; cnt++)
Inc[cnt] = DirectionInc( (UINT8) Dir[cnt]);
BuildSightDir(dir,(UINT32 *)&Dir[0],(UINT32 *)&Dir[1],(UINT32 *)&Dir[2],(UINT32 *)&Dir[3],(UINT32 *)&Dir[4]);
// create gridno increment for NOVIEW - in other words, no increment!
Inc[5] = 0;
Dir[5] = pSoldier->ubDirection;
for (cnt = 0; cnt < 5; cnt++)
Inc[cnt] = DirectionInc( (UINT8) Dir[cnt]);
// create gridno increment for NOVIEW - in other words, no increment!
Inc[5] = 0;
Dir[5] = pSoldier->ubDirection;
if (dir % 2 == 1) /* even numbers use ViewPath2 */
Path2 = TRUE;
else
Path2 = FALSE;
if (dir % 2 == 1) /* even numbers use ViewPath2 */
Path2 = TRUE;
else
Path2 = FALSE;
// ATE: if in this special cercumstance... our guys are moving on their own...
// Stop sighting items
// IN the future, we may want to do something else here...
@@ -393,170 +393,170 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
itemsToo = FALSE;
}
for (maincnt = 0; maincnt < MAXVIEWPATHS; maincnt++)
{
marker = pSoldier->sGridNo;
Blocking = FALSE;
twoMoreTiles = FALSE;
tilesLeftToSee = 99;
fRevealItems = TRUE;
fStopRevealingItemsAfterThisTile = FALSE;
for (maincnt = 0; maincnt < MAXVIEWPATHS; maincnt++)
{
marker = pSoldier->sGridNo;
Blocking = FALSE;
twoMoreTiles = FALSE;
tilesLeftToSee = 99;
fRevealItems = TRUE;
fStopRevealingItemsAfterThisTile = FALSE;
#ifdef _DEBUG
if ( _KeyDown( NUM_LOCK ) )
{
memset( gubFOVDebugInfoInfo, 0, sizeof( gubFOVDebugInfoInfo ) );
if ( _KeyDown( NUM_LOCK ) )
{
memset( gubFOVDebugInfoInfo, 0, sizeof( gubFOVDebugInfoInfo ) );
SetRenderFlags( RENDER_FLAG_FULL );
RenderWorld( );
}
SetRenderFlags( RENDER_FLAG_FULL );
RenderWorld( );
}
#endif
for (markercnt = 0; markercnt < range; markercnt++)
{
for (markercnt = 0; markercnt < range; markercnt++)
{
//fGoneThroughDoor = FALSE;
//fThroughWindow = FALSE;
//fGoneThroughDoor = FALSE;
//fThroughWindow = FALSE;
prevmarker = marker;
prevmarker = marker;
nextDir = 99;
fCheckForRooms = FALSE;
fTravelCostObs = FALSE;
if ( fStopRevealingItemsAfterThisTile )
{
fRevealItems = FALSE;
fStopRevealingItemsAfterThisTile = FALSE;
}
nextDir = 99;
fCheckForRooms = FALSE;
fTravelCostObs = FALSE;
if ( fStopRevealingItemsAfterThisTile )
{
fRevealItems = FALSE;
fStopRevealingItemsAfterThisTile = FALSE;
}
if (Path2)
{
if (Path2)
{
markerDir = ViewPath2[maincnt][markercnt];
if (markercnt < 12)
nextDir = ViewPath2[maincnt][markercnt+1];
}
else
{
nextDir = ViewPath2[maincnt][markercnt+1];
}
else
{
markerDir = ViewPath[maincnt][markercnt];
if (markercnt < 12)
nextDir = ViewPath[maincnt][markercnt+1];
}
nextDir = ViewPath[maincnt][markercnt+1];
}
// OK, check flags for going through door/window last tile
if ( fThroughWindow == 1 )
{
// ATE: Make sure we are going through the same direction!
// THis is to solve the drassen SAM problem with seeing through walls
if ( Dir[markerDir] == bThroughWindowDirection)
{
fThroughWindow = 2;
}
else
{
fThroughWindow = 0;
}
}
else if ( fThroughWindow == 2 )
{
// We've overstayed our welcome - remove!
// OK, check flags for going through door/window last tile
if ( fThroughWindow == 1 )
{
// ATE: Make sure we are going through the same direction!
// THis is to solve the drassen SAM problem with seeing through walls
if ( Dir[markerDir] == bThroughWindowDirection)
{
fThroughWindow = 2;
}
else
{
fThroughWindow = 0;
}
if ( fGoneThroughDoor == 1 )
{
fGoneThroughDoor = 2;
}
else if ( fGoneThroughDoor == 2 )
{
}
}
else if ( fThroughWindow == 2 )
{
// We've overstayed our welcome - remove!
fGoneThroughDoor = 0;
}
fThroughWindow = 0;
}
if ( fGoneThroughDoor == 1 )
{
fGoneThroughDoor = 2;
}
else if ( fGoneThroughDoor == 2 )
{
// We've overstayed our welcome - remove!
fGoneThroughDoor = 0;
}
//ATE CHECK FOR NOVIEW!
if ( nextDir == NOVIEW )
{
nextDir = 99;
}
//ATE CHECK FOR NOVIEW!
if ( nextDir == NOVIEW )
{
nextDir = 99;
}
marker = NewGridNo((INT16)marker,(INT16)Inc[markerDir]);
marker = NewGridNo((INT16)marker,(INT16)Inc[markerDir]);
if ( marker == 12426 )
{
int i = 0;
}
// End if this is a no view...
if ( markerDir == NOVIEW && markercnt != 0 )
{
break;
}
// End if this is a no view...
if ( markerDir == NOVIEW && markercnt != 0 )
{
break;
}
#ifdef _DEBUG
if ( _KeyDown( NUM_LOCK ) )
{
int cnt = GetJA2Clock( );
if ( _KeyDown( NUM_LOCK ) )
{
int cnt = GetJA2Clock( );
gubFOVDebugInfoInfo[ marker ] = (UINT8)markercnt;
gubFOVDebugInfoInfo[ marker ] = (UINT8)markercnt;
StartFrameBufferRender();
StartFrameBufferRender();
RenderFOVDebug( );
RenderFOVDebug( );
SetFont( LARGEFONT1 );
SetFontBackground( FONT_MCOLOR_BLACK );
SetFontForeground( FONT_MCOLOR_WHITE );
mprintf( 10, 10 , L"%d", maincnt );
//mprintf( 10, 20 , L"%d", marker );
//mprintf( 50, 20 , L"%d", pSoldier->sGridNo );
SetFont( LARGEFONT1 );
SetFontBackground( FONT_MCOLOR_BLACK );
SetFontForeground( FONT_MCOLOR_WHITE );
mprintf( 10, 10 , L"%d", maincnt );
//mprintf( 10, 20 , L"%d", marker );
//mprintf( 50, 20 , L"%d", pSoldier->sGridNo );
InvalidateScreen( );
EndFrameBufferRender();
RefreshScreen( NULL );
InvalidateScreen( );
EndFrameBufferRender();
RefreshScreen( NULL );
do
{
do
{
} while( ( GetJA2Clock( ) - cnt ) < 250 );
}
} while( ( GetJA2Clock( ) - cnt ) < 250 );
}
#endif
// Check if we can get to this gridno from our direction in
ubMovementCost = gubWorldMovementCosts[ marker ][ Dir[ markerDir ] ][ ubLevel ];
// Check if we can get to this gridno from our direction in
ubMovementCost = gubWorldMovementCosts[ marker ][ Dir[ markerDir ] ][ ubLevel ];
// ATE: Added: If our current sector is below ground, ignore any blocks!
if ( gfCaves && ubMovementCost != TRAVELCOST_CAVEWALL )
{
ubMovementCost = TRAVELCOST_FLAT;
}
// ATE: Added: If our current sector is below ground, ignore any blocks!
if ( gfCaves && ubMovementCost != TRAVELCOST_CAVEWALL )
{
ubMovementCost = TRAVELCOST_FLAT;
}
if ( IS_TRAVELCOST_DOOR( ubMovementCost ) )
{
ubMovementCost = DoorTravelCost( pSoldier, marker, ubMovementCost, (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), &iDoorGridNo );
pStructure = FindStructure( (INT16) iDoorGridNo, STRUCTURE_ANYDOOR );
if ( pStructure != NULL && pStructure->fFlags & STRUCTURE_TRANSPARENT)
{
if ( IS_TRAVELCOST_DOOR( ubMovementCost ) )
{
ubMovementCost = DoorTravelCost( pSoldier, marker, ubMovementCost, (BOOLEAN) (pSoldier->bTeam == gbPlayerNum), &iDoorGridNo );
pStructure = FindStructure( (INT16) iDoorGridNo, STRUCTURE_ANYDOOR );
if ( pStructure != NULL && pStructure->fFlags & STRUCTURE_TRANSPARENT)
{
// cell door or somehow otherwise transparent; allow merc to see through
ubMovementCost = TRAVELCOST_FLAT;
}
}
}
}
// If we have hit an obstacle, STOP HERE
if ( ubMovementCost >= TRAVELCOST_BLOCKED )
{
// If we have hit an obstacle, STOP HERE
if ( ubMovementCost >= TRAVELCOST_BLOCKED )
{
// We have an obstacle here...
// If it is bigger than a breadbox... err... taller than a man...
// Then stop path altogether
// otherwise just stop revealing items
// CJC: only do this when the direction is horizontal; easier and faster to check
// otherwise just stop revealing items
// CJC: only do this when the direction is horizontal; easier and faster to check
// and the effect should still be good enough
if ( ubMovementCost == TRAVELCOST_WALL || ubMovementCost == TRAVELCOST_DOOR || ubMovementCost == TRAVELCOST_EXITGRID )
@@ -572,7 +572,7 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
{
fTravelCostObs = TRUE;
fStopRevealingItemsAfterThisTile = TRUE;
}
}
else if ( bTallestStructureHeight != 0 )
{
// stop revealing items after this tile but keep going
@@ -593,14 +593,14 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
fRevealItems = FALSE;
}
else
{
{
bTallestStructureHeight = GetTallestStructureHeight( (INT16) marker, FALSE );
if (bTallestStructureHeight >= 3)
{
fTravelCostObs = TRUE;
fStopRevealingItemsAfterThisTile = TRUE;
}
}
else if ( bTallestStructureHeight != 0 )
{
// stop revealing items after this tile but keep going
@@ -608,102 +608,102 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
}
}
}
}
// Check if it's been done already!
if ( gubGridNoMarkers[ marker ] != gubGridNoValue )
{
// Check if it's been done already!
if ( gubGridNoMarkers[ marker ] != gubGridNoValue )
{
// Mark gridno
gubGridNoMarkers[ marker ] = gubGridNoValue;
// check and see if the gridno changed
// if the gridno is the same, avoid redundancy and break
if (marker==prevmarker && markercnt != 0 )
{
}
else // it changed
{
// Mark gridno
gubGridNoMarkers[ marker ] = gubGridNoValue;
// check and see if the gridno changed
// if the gridno is the same, avoid redundancy and break
if (marker==prevmarker && markercnt != 0 )
{
}
else // it changed
{
// Skip others if we have gone through a door but are too far away....
if ( fGoneThroughDoor )
{
if (markercnt > 5 ) // Are we near the door?
if (markercnt > 5 ) // Are we near the door?
{
break;
}
}
// DO MINE FINDING STUFF
// GET INDEX FOR ITEM HERE
// if there IS a direction after this one, nextdir WILL NOT be 99
if (nextDir != 99)
{
}
// DO MINE FINDING STUFF
// GET INDEX FOR ITEM HERE
// if there IS a direction after this one, nextdir WILL NOT be 99
if (nextDir != 99)
{
Blocking = GetBlockingStructureInfo( (INT16)marker, (INT8)Dir[ markerDir ], (INT8)Dir[ nextDir ], ubLevel, &bStructHeight, &pDummy, FALSE );
}
else // no "next" direction, so pass in a NOWHERE so that
// "SpecialViewObstruction" will know not to take it UINT32o consideration
{
Blocking = GetBlockingStructureInfo( (INT16)marker, (INT8)Dir[markerDir], (INT8)30, ubLevel, &bStructHeight, &pDummy, FALSE );
}
}
else // no "next" direction, so pass in a NOWHERE so that
// "SpecialViewObstruction" will know not to take it UINT32o consideration
{
Blocking = GetBlockingStructureInfo( (INT16)marker, (INT8)Dir[markerDir], (INT8)30, ubLevel, &bStructHeight, &pDummy, FALSE );
}
if ( gfCaves )
{
Blocking = NOTHING_BLOCKING;
}
if ( gfCaves )
{
Blocking = NOTHING_BLOCKING;
}
// CHECK FOR ROOMS
if ( Blocking == BLOCKING_TOPLEFT_WINDOW || Blocking == BLOCKING_TOPLEFT_OPEN_WINDOW )
{
// CHECK FOR ROOMS
if ( Blocking == BLOCKING_TOPLEFT_WINDOW || Blocking == BLOCKING_TOPLEFT_OPEN_WINDOW )
{
// CHECK FACING DIRECTION!
if ( Dir[markerDir] == NORTH || Dir[markerDir] == SOUTH )
{
if (markercnt <= 1 ) // Are we right beside it?
if (markercnt <= 1 ) // Are we right beside it?
{
fThroughWindow = TRUE;
bThroughWindowDirection = ( INT8 ) Dir[ markerDir ];
bThroughWindowDirection = ( INT8 ) Dir[ markerDir ];
}
}
}
if ( Blocking == BLOCKING_TOPRIGHT_WINDOW || Blocking == BLOCKING_TOPRIGHT_OPEN_WINDOW )
{
}
if ( Blocking == BLOCKING_TOPRIGHT_WINDOW || Blocking == BLOCKING_TOPRIGHT_OPEN_WINDOW )
{
// CHECK FACING DIRECTION!
if ( Dir[markerDir] == EAST || Dir[markerDir] == WEST )
{
if (markercnt <= 1 ) // Are we right beside it?
if (markercnt <= 1 ) // Are we right beside it?
{
fThroughWindow = TRUE;
bThroughWindowDirection = ( INT8 ) Dir[ markerDir ];
bThroughWindowDirection = ( INT8 ) Dir[ markerDir ];
}
}
}
}
if ( Blocking == BLOCKING_TOPLEFT_DOOR )
{
if ( Blocking == BLOCKING_TOPLEFT_DOOR )
{
fGoneThroughDoor = TRUE;
}
if ( Blocking == BLOCKING_TOPRIGHT_DOOR )
{
}
if ( Blocking == BLOCKING_TOPRIGHT_DOOR )
{
fGoneThroughDoor = TRUE;
}
}
// ATE: If we hit this tile, find item always!
//if (Blocking < FULL_BLOCKING )
{
// ATE: If we hit this tile, find item always!
//if (Blocking < FULL_BLOCKING )
{
// Handle special things for our mercs, like uncovering roofs
// and revealing objects...
//gpSoldier->shad |= SEENBIT;
//itemVisible = ObjList[itemIndex].visible;
//itemVisible = ObjList[itemIndex].visible;
// NOTE: don't allow object viewing if gassed XXX
// NOTE: don't allow object viewing if gassed XXX
if (itemsToo && fRevealItems ) // && itemIndex < MAXOBJECTLIST)
{
// OK, look for corpses...
LookForAndMayCommentOnSeeingCorpse( pSoldier, (INT16)marker, ubLevel );
if (itemsToo && fRevealItems ) // && itemIndex < MAXOBJECTLIST)
{
// OK, look for corpses...
LookForAndMayCommentOnSeeingCorpse( pSoldier, (INT16)marker, ubLevel );
if ( GetItemPool( (INT16)marker, &pItemPool, ubLevel ) )
{
@@ -726,13 +726,13 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
// ATE: Only if in combat...
if ( gTacticalStatus.uiFlags & INCOMBAT )
{
HaultSoldierFromSighting( pSoldier, FALSE );
pSoldier->HaultSoldierFromSighting( FALSE );
}
else
{
// ATE: Make sure we show locators...
gTacticalStatus.fLockItemLocators = FALSE;
}
else
{
// ATE: Make sure we show locators...
gTacticalStatus.fLockItemLocators = FALSE;
}
if ( !fItemsQuoteSaid && gTacticalStatus.fLockItemLocators == FALSE )
{
@@ -742,22 +742,22 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
{
gTacticalStatus.fItemsSeenOnAttack = TRUE;
gTacticalStatus.ubItemsSeenOnAttackSoldier = pSoldier->ubID;
gTacticalStatus.usItemsSeenOnAttackGridNo = (INT16)(marker);
gTacticalStatus.sItemsSeenOnAttackGridNo = (INT16)(marker);
}
else
{
// Display quote!
if ( !AM_AN_EPC( pSoldier ) )
{
TacticalCharacterDialogueWithSpecialEvent( pSoldier, (UINT16)( QUOTE_SPOTTED_SOMETHING_ONE + Random( 2 ) ), DIALOGUE_SPECIAL_EVENT_SIGNAL_ITEM_LOCATOR_START, (INT16)(marker), 0 );
}
else
{
// Turn off item lock for locators...
gTacticalStatus.fLockItemLocators = FALSE;
// Slide to location!
SlideToLocation( 0, (INT16)(marker) );
}
if ( !AM_AN_EPC( pSoldier ) )
{
TacticalCharacterDialogueWithSpecialEvent( pSoldier, (UINT16)( QUOTE_SPOTTED_SOMETHING_ONE + Random( 2 ) ), DIALOGUE_SPECIAL_EVENT_SIGNAL_ITEM_LOCATOR_START, (INT16)(marker), 0 );
}
else
{
// Turn off item lock for locators...
gTacticalStatus.fLockItemLocators = FALSE;
// Slide to location!
SlideToLocation( 0, (INT16)(marker) );
}
}
fItemsQuoteSaid = TRUE;
}
@@ -766,27 +766,27 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
}
}
}
}
// if blood here, let the user see it now...
//if (ExtGrid[marker].patrolInfo < MAXBLOOD)
// gpSoldier->blood = ExtGrid[marker].patrolInfo;
// if blood here, let the user see it now...
//if (ExtGrid[marker].patrolInfo < MAXBLOOD)
// gpSoldier->blood = ExtGrid[marker].patrolInfo;
//DoRoofs(marker,gpSoldier);
//DoRoofs(marker,gpSoldier);
tilesLeftToSee--;
tilesLeftToSee--;
}
// CHECK FOR HIDDEN STRUCTS
// IF we had a hidden struct here that is not visible ( which will still be true because
// we set it revealed below...
if ( DoesGridnoContainHiddenStruct( (UINT16)marker, &fHiddenStructVisible ) )
// CHECK FOR HIDDEN STRUCTS
// IF we had a hidden struct here that is not visible ( which will still be true because
// we set it revealed below...
if ( DoesGridnoContainHiddenStruct( (INT16)marker, &fHiddenStructVisible ) )
{
if ( !fHiddenStructVisible )
{
gpWorldLevelData[marker].uiFlags|=MAPELEMENT_REDRAW;
SetRenderFlags(RENDER_FLAG_MARKED);
RecompileLocalMovementCosts( (UINT16)marker );
RecompileLocalMovementCosts( (INT16)marker );
}
}
@@ -826,7 +826,7 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
}
// Set gridno as revealed
// Set gridno as revealed
if ( ubLevel == FIRST_LEVEL )
{
if ( gfBasement || gfCaves )
@@ -857,51 +857,51 @@ void RevealRoofsAndItems(SOLDIERTYPE *pSoldier, UINT32 itemsToo, BOOLEAN fShowLo
{
if ( InAHiddenRoom( (INT16)marker, &ubRoomNo ) )
{
RemoveRoomRoof( (INT16)marker, ubRoomNo, pSoldier );
if ( ubRoomNo == ROOM_SURROUNDING_BOXING_RING && gWorldSectorX == BOXING_SECTOR_X && gWorldSectorY == BOXING_SECTOR_Y && gbWorldSectorZ == BOXING_SECTOR_Z )
{
RemoveRoomRoof( (INT16)marker, ubRoomNo, pSoldier );
if ( ubRoomNo == ROOM_SURROUNDING_BOXING_RING && gWorldSectorX == BOXING_SECTOR_X && gWorldSectorY == BOXING_SECTOR_Y && gbWorldSectorZ == BOXING_SECTOR_Z )
{
// reveal boxing ring at same time
RemoveRoomRoof( (INT16)marker, BOXING_RING, pSoldier );
}
}
}
}
}
else
{
gpWorldLevelData[ marker ].uiFlags |= MAPELEMENT_REVEALED_ROOF;
gpWorldLevelData[ marker ].uiFlags |= MAPELEMENT_REVEALED_ROOF;
}
// Check for blood....
UpdateBloodGraphics( (INT16)marker, ubLevel );
if ( Blocking != NOTHING_BLOCKING && Blocking != BLOCKING_TOPLEFT_DOOR && Blocking != BLOCKING_TOPRIGHT_DOOR && Blocking != BLOCKING_TOPLEFT_WINDOW && Blocking != BLOCKING_TOPRIGHT_WINDOW && Blocking != BLOCKING_TOPRIGHT_OPEN_WINDOW && Blocking != BLOCKING_TOPLEFT_OPEN_WINDOW)
if ( Blocking != NOTHING_BLOCKING && Blocking != BLOCKING_TOPLEFT_DOOR && Blocking != BLOCKING_TOPRIGHT_DOOR && Blocking != BLOCKING_TOPLEFT_WINDOW && Blocking != BLOCKING_TOPRIGHT_WINDOW && Blocking != BLOCKING_TOPRIGHT_OPEN_WINDOW && Blocking != BLOCKING_TOPLEFT_OPEN_WINDOW)
{
break;
break;
}
//gpWorldLevelData[ marker ].uiFlags |= MAPELEMENT_SHADELAND;
//gpWorldLevelData[ marker ].uiFlags |= MAPELEMENT_SHADELAND;
}
} // End of duplicate check
else
{
} // End of duplicate check
else
{
if ( fTravelCostObs )
{
break;
}
}
}
} // end of one path
} // end of path loop
} // end of path loop
// Loop through all availible slant roofs we collected and perform cool stuff on them
ExamineSlantRoofFOVSlots( );
//pSoldier->needToLookForItems = FALSE;
//pSoldier->needToLookForItems = FALSE;
//LookForDoors(pSoldier,UNAWARE);
}