bug fixes from Overhaul:

- CTD when someone fell off the west side of a building 
- Assertion failure when Skyrider leaves a sector where a merc cannot be woken up 
- Boxing fixes: Opponent no longer "seeks cover", ie jumps back out of the ring; no longer will pick up a gun from the ground while boxing
- Disappearing corpses (and possibly items) when cursor hovers over a square on the rooftop; also fixes a "write to freed memory" heap check

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@867 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
lalien
2007-05-08 14:42:28 +00:00
parent 91016c3d6c
commit 30cc546c09
7 changed files with 40 additions and 9 deletions
+1 -1
View File
@@ -23,7 +23,7 @@ wchar_t zVersionLabel[256] = { L"Beta v. 0.98" };
#else #else
//RELEASE BUILD VERSION //RELEASE BUILD VERSION
wchar_t zVersionLabel[256] = { L"Release v1.13.861" }; wchar_t zVersionLabel[256] = { L"Release v1.13.867" };
#endif #endif
BIN
View File
Binary file not shown.
+1 -1
View File
@@ -546,7 +546,7 @@
<Tool <Tool
Name="VCLinkerTool" Name="VCLinkerTool"
AdditionalDependencies="libexpatMT.lib winmm.lib smackw32.lib mss32.lib fmodvc.lib" AdditionalDependencies="libexpatMT.lib winmm.lib smackw32.lib mss32.lib fmodvc.lib"
OutputFile="D:\games\Jagged Alliance 2 v1.13\JA2 v1.13.861_EN.exe" OutputFile="D:\games\Jagged Alliance 2 v1.13\JA2 v1.13.867_EN.exe"
LinkIncremental="1" LinkIncremental="1"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories=".\..\..\Standard Gaming Platform\" AdditionalLibraryDirectories=".\..\..\Standard Gaming Platform\"
+9 -2
View File
@@ -2638,12 +2638,19 @@ void RemovePGroup( GROUP *pGroup )
uniqueIDMask[ index ] -= mask; uniqueIDMask[ index ] -= mask;
if (gpBattleGroup == pGroup) {
gpBattleGroup = NULL;
}
MemFree( pGroup ); MemFree( pGroup );
pGroup = NULL; pGroup = NULL;
} }
void RemoveAllGroups() void RemoveAllGroups()
{ {
// Since we are removing all groups, clear the gpBattleGroup
gpBattleGroup = NULL;
gfRemovingAllGroups = TRUE; gfRemovingAllGroups = TRUE;
while( gpGroupList ) while( gpGroupList )
{ {
@@ -3253,14 +3260,14 @@ BOOLEAN PlayersBetweenTheseSectors( INT16 sSource, INT16 sDest, INT32 *iCountEnt
if( gpBattleGroup ) if( gpBattleGroup )
{ {
Assert( gfPreBattleInterfaceActive ); // Assert( gfPreBattleInterfaceActive );
sBattleSector = (INT16)SECTOR( gpBattleGroup->ubSectorX, gpBattleGroup->ubSectorY ); sBattleSector = (INT16)SECTOR( gpBattleGroup->ubSectorX, gpBattleGroup->ubSectorY );
} }
// debug only // debug only
if ( gfDisplayPotentialRetreatPaths == TRUE ) if ( gfDisplayPotentialRetreatPaths == TRUE )
{ {
Assert( gfPreBattleInterfaceActive ); // Assert( gfPreBattleInterfaceActive );
} }
+3 -4
View File
@@ -12322,11 +12322,10 @@ void HandleNewDestConfirmation( INT16 sMapX, INT16 sMapY )
// tell player the route was CONFIRMED // tell player the route was CONFIRMED
// NOTE: We don't this this for the helicopter any more, since it clashes with Skyrider's own confirmation msg // NOTE: We don't this this for the helicopter any more, since it clashes with Skyrider's own confirmation msg
MapScreenMessage( FONT_MCOLOR_LTYELLOW, MSG_MAP_UI_POSITION_MIDDLE, pMapPlotStrings[ 1 ] ); MapScreenMessage( FONT_MCOLOR_LTYELLOW, MSG_MAP_UI_POSITION_MIDDLE, pMapPlotStrings[ 1 ] );
// wake up anybody who needs to be awake to travel
WakeUpAnySleepingSelectedMercsOnFootOrDriving();
} }
// wake up anybody who needs to be awake to travel
WakeUpAnySleepingSelectedMercsOnFootOrDriving();
} }
+12
View File
@@ -554,6 +554,12 @@ INT16 FindBestNearbyCover(SOLDIERTYPE *pSoldier, INT32 morale, INT32 *piPercentB
UINT8 ubLightPercentDifference; UINT8 ubLightPercentDifference;
BOOLEAN fNight; BOOLEAN fNight;
// There's no cover when boxing!
if (gTacticalStatus.bBoxingState == BOXING)
{
return (NOWHERE);
}
if ( gbWorldSectorZ > 0 ) if ( gbWorldSectorZ > 0 )
{ {
fNight = FALSE; fNight = FALSE;
@@ -1638,6 +1644,12 @@ INT8 SearchForItems( SOLDIERTYPE * pSoldier, INT8 bReason, UINT16 usItem )
iTempValue = -1; iTempValue = -1;
iItemIndex = iBestItemIndex = -1; iItemIndex = iBestItemIndex = -1;
// No fair picking up weapons while boxing!
if (gTacticalStatus.bBoxingState == BOXING)
{
return AI_ACTION_NONE;
}
if (pSoldier->bActionPoints < AP_PICKUP_ITEM) if (pSoldier->bActionPoints < AP_PICKUP_ITEM)
{ {
return( AI_ACTION_NONE ); return( AI_ACTION_NONE );
+14 -1
View File
@@ -982,6 +982,8 @@ UINT8 GetLandLevelDepth( UINT32 iMapIndex )
BOOLEAN GetSubIndexFromTileIndex( UINT16 usTileIndex, UINT16 *pusSubIndex ) BOOLEAN GetSubIndexFromTileIndex( UINT16 usTileIndex, UINT16 *pusSubIndex )
{ {
UINT32 uiType=0; UINT32 uiType=0;
*pusSubIndex = 0xffff;
if( GetTileType( usTileIndex, &uiType ) ) if( GetTileType( usTileIndex, &uiType ) )
{ {
*pusSubIndex = usTileIndex - gTileTypeStartIndex[ uiType ] + 1; *pusSubIndex = usTileIndex - gTileTypeStartIndex[ uiType ] + 1;
@@ -995,6 +997,8 @@ BOOLEAN GetTypeSubIndexFromTileIndex( UINT32 uiCheckType, UINT16 usIndex, UINT16
// Tile database is zero-based, Type indecies are 1-based! // Tile database is zero-based, Type indecies are 1-based!
*pusSubIndex = 0xffff;
CHECKF ( uiCheckType < NUMBEROFTILETYPES ); CHECKF ( uiCheckType < NUMBEROFTILETYPES );
*pusSubIndex = usIndex - gTileTypeStartIndex[ uiCheckType ] + 1; *pusSubIndex = usIndex - gTileTypeStartIndex[ uiCheckType ] + 1;
@@ -1004,6 +1008,7 @@ BOOLEAN GetTypeSubIndexFromTileIndex( UINT32 uiCheckType, UINT16 usIndex, UINT16
BOOLEAN GetTypeSubIndexFromTileIndexChar( UINT32 uiCheckType, UINT16 usIndex, UINT8 *pubSubIndex ) BOOLEAN GetTypeSubIndexFromTileIndexChar( UINT32 uiCheckType, UINT16 usIndex, UINT8 *pubSubIndex )
{ {
*pubSubIndex = 0xff;
// Tile database is zero-based, Type indecies are 1-based! // Tile database is zero-based, Type indecies are 1-based!
@@ -1018,6 +1023,8 @@ BOOLEAN GetTileIndexFromTypeSubIndex( UINT32 uiCheckType, UINT16 usSubIndex, UIN
{ {
// Tile database is zero-based, Type indecies are 1-based! // Tile database is zero-based, Type indecies are 1-based!
*pusTileIndex = 0xffff;
CHECKF ( uiCheckType < NUMBEROFTILETYPES ); CHECKF ( uiCheckType < NUMBEROFTILETYPES );
*pusTileIndex = usSubIndex + gTileTypeStartIndex[ uiCheckType ] - 1; *pusTileIndex = usSubIndex + gTileTypeStartIndex[ uiCheckType ] - 1;
@@ -1045,6 +1052,8 @@ BOOLEAN GetTileType( UINT16 usIndex, UINT32 *puiType )
{ {
TILE_ELEMENT TileElem; TILE_ELEMENT TileElem;
*puiType = 0xffffffff;
CHECKF( usIndex != NO_TILE ); CHECKF( usIndex != NO_TILE );
CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix
@@ -1060,6 +1069,8 @@ BOOLEAN GetTileFlags( UINT16 usIndex, UINT32 *puiFlags )
{ {
TILE_ELEMENT TileElem; TILE_ELEMENT TileElem;
*puiFlags = 0;
CHECKF( usIndex != NO_TILE ); CHECKF( usIndex != NO_TILE );
CHECKF( usIndex < NUMBEROFTILES ); CHECKF( usIndex < NUMBEROFTILES );
@@ -1195,8 +1206,10 @@ BOOLEAN AnyLowerLand( UINT32 iMapIndex, UINT32 uiSrcType, UINT8 *pubLastLevel )
BOOLEAN GetWallOrientation( UINT16 usIndex, UINT16 *pusWallOrientation ) BOOLEAN GetWallOrientation( UINT16 usIndex, UINT16 *pusWallOrientation )
{ {
TILE_ELEMENT TileElem; TILE_ELEMENT TileElem;
*pusWallOrientation = 0xffff;
CHECKF( usIndex != NO_TILE ); CHECKF( usIndex != NO_TILE );
CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix CHECKF( usIndex < NUMBEROFTILES ); //lal bugfix