Merged revision(s) 7082 from branches/ja2_source_official_2014:

Fix: huge amounts of memory are allocated for AStar pathing but are never used. This also causes a significant slowdown every time a turn ends

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7083 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2014-03-18 00:06:03 +00:00
parent e1b581e466
commit 1a47da6d4e
4 changed files with 122 additions and 186 deletions
+9 -9
View File
@@ -15,9 +15,9 @@
#ifdef JA2EDITOR
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Unfinished Business - Map Editor v1.13.7083 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Map Editor v1.13.7083 (Development Build)" };
#endif
// ------------------------------
@@ -27,11 +27,11 @@
//DEBUG BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: Unfinished Business - v1.13.7083 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: JA2 Demo - v1.13.7083 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Debug: v1.13.7083 (Development Build)" };
#endif
#elif defined CRIPPLED_VERSION
@@ -46,16 +46,16 @@
//RELEASE BUILD VERSION
#ifdef JA2UB
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release Unfinished Business - v1.13.7083 (Development Build)" };
#elif defined (JA113DEMO)
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release JA2 Demo - v1.13.7083 (Development Build)" };
#else
CHAR16 zVersionLabel[256] = { L"Release v1.13.7057 (Development Build)" };
CHAR16 zVersionLabel[256] = { L"Release v1.13.7083 (Development Build)" };
#endif
#endif
CHAR8 czVersionNumber[16] = { "Build 14.03.12" }; //YY.MM.DD
CHAR8 czVersionNumber[16] = { "Build 14.03.18" }; //YY.MM.DD
CHAR16 zTrackingNumber[16] = { L"Z" };
// SAVE_GAME_VERSION is defined in header, change it there
+105 -177
View File
@@ -532,12 +532,11 @@ void PreventFromTheFreezingBug(SOLDIERTYPE* pSoldier)
// MAIN TACTICAL UI HANDLER
UINT32 HandleTacticalUI( void )
{
UINT32 ReturnVal = GAME_SCREEN;
UINT32 uiNewEvent;
INT32 usMapPos;
LEVELNODE *pIntTile;
static LEVELNODE *pOldIntTile = NULL;
UINT32 ReturnVal = GAME_SCREEN;
UINT32 uiNewEvent;
INT32 usMapPos;
LEVELNODE *pIntTile;
static LEVELNODE *pOldIntTile = NULL;
// RESET FLAGS
gfUIDisplayActionPoints = FALSE;
@@ -630,7 +629,6 @@ UINT32 HandleTacticalUI( void )
GetRTMouseButtonInput( &uiNewEvent );
// FROM KEYBOARD
GetKeyboardInput( &uiNewEvent );
}
else
{
@@ -643,8 +641,6 @@ UINT32 HandleTacticalUI( void )
// FROM KEYBOARD
GetKeyboardInput( &uiNewEvent );
}
}
else
{
@@ -681,10 +677,8 @@ UINT32 HandleTacticalUI( void )
{
gfUISelectiveTargetFound = TRUE;
}
}
// Check if current event has changed and clear event if so, to prepare it for execution
// Clearing it does things like set first time flag, param variables, etc
if ( uiNewEvent != guiOldEvent )
@@ -739,7 +733,6 @@ UINT32 HandleTacticalUI( void )
ErasePath( TRUE );
break;
}
}
// Check if menu event is done and if so set to privious mode
@@ -777,7 +770,6 @@ UINT32 HandleTacticalUI( void )
gfUIDisplayActionPoints = FALSE;
}
// Will set the cursor but only if different
SetUIMouseCursor( );
@@ -791,7 +783,6 @@ UINT32 HandleTacticalUI( void )
}
}
return( ReturnVal );
}
@@ -804,7 +795,6 @@ void SetUIMouseCursor( )
static INT32 sOldExitGridNo = NOWHERE;
static BOOLEAN fOkForExit = FALSE;
// Check if we moved from confirm mode on exit arrows
// If not in move mode, return!
if ( gCurrentUIMode == MOVE_MODE )
@@ -819,7 +809,6 @@ void SetUIMouseCursor( )
}
}
if ( gfUIShowExitEast )
{
gfUIDisplayActionPoints = FALSE;
@@ -901,7 +890,6 @@ void SetUIMouseCursor( )
}
}
if ( gfUIShowExitSouth )
{
gfUIDisplayActionPoints = FALSE;
@@ -932,8 +920,7 @@ void SetUIMouseCursor( )
MSYS_DefineRegion( &gViewportRegion, 0, 0 ,gsVIEWPORT_END_X, gsVIEWPORT_WINDOW_END_Y, MSYS_PRIORITY_NORMAL,
VIDEO_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK );
// Adjust where we blit our cursor!
gsGlobalCursorYOffset = 0;
SetCurrentCursorFromDatabase( CURSOR_NORMAL );
@@ -956,7 +943,6 @@ void SetUIMouseCursor( )
SetCurrentCursorFromDatabase( gUICursors[ guiNewUICursor ].usFreeCursorName );
gfViewPortAdjustedForSouth = TRUE;
}
}
}
@@ -970,7 +956,6 @@ void SetUIMouseCursor( )
MSYS_DefineRegion( &gViewportRegion, 0, 0 ,gsVIEWPORT_END_X, gsVIEWPORT_WINDOW_END_Y, MSYS_PRIORITY_NORMAL,
VIDEO_NO_CURSOR, MSYS_NO_CALLBACK, MSYS_NO_CALLBACK );
// Adjust where we blit our cursor!
gsGlobalCursorYOffset = 0;
SetCurrentCursorFromDatabase( CURSOR_NORMAL );
@@ -1032,7 +1017,6 @@ void SetUIMouseCursor( )
{
sOldExitGridNo = NOWHERE;
}
}
else
{
@@ -1081,13 +1065,11 @@ void ClearEvent( UI_EVENT *pUIEvent )
pUIEvent->fDoneMenu = FALSE;
pUIEvent->fFirstTime = TRUE;
pUIEvent->uiMenuPreviousMode = 0;
}
void EndMenuEvent( UINT32 uiEvent )
{
gEvents[ uiEvent ].fDoneMenu = TRUE;
}
// HANDLER FUCNTIONS
@@ -1108,13 +1090,12 @@ UINT32 UIHandleExit( UI_EVENT *pUIEvent )
UINT32 UIHandleNewMerc( UI_EVENT *pUIEvent )
{
static UINT8 ubTemp = 3;
INT32 usMapPos;
INT32 usMapPos;
static INT32 iSoldierCount=0;
MERC_HIRE_STRUCT HireMercStruct;
INT8 bReturnCode;
SOLDIERTYPE *pSoldier;
// Get Grid Corrdinates of mouse
if( GetMouseMapPos( &usMapPos) )
{
@@ -1204,9 +1185,9 @@ UINT32 UIHandleNewBadMerc( UI_EVENT *pUIEvent )
{
switch( pSoldier->ubSoldierClass )
{
case SOLDIER_CLASS_ADMINISTRATOR: pSector->ubNumAdmins++; pSector->ubAdminsInBattle++; break;
case SOLDIER_CLASS_ARMY: pSector->ubNumTroops++; pSector->ubTroopsInBattle++; break;
case SOLDIER_CLASS_ELITE: pSector->ubNumElites++; pSector->ubElitesInBattle++; break;
case SOLDIER_CLASS_ADMINISTRATOR: pSector->ubNumAdmins++; pSector->ubAdminsInBattle++; break;
case SOLDIER_CLASS_ARMY: pSector->ubNumTroops++; pSector->ubTroopsInBattle++; break;
case SOLDIER_CLASS_ELITE: pSector->ubNumElites++; pSector->ubElitesInBattle++; break;
}
}
}
@@ -1217,23 +1198,22 @@ UINT32 UIHandleNewBadMerc( UI_EVENT *pUIEvent )
AllTeamsLookForAll( NO_INTERRUPTS );
}
}
return( GAME_SCREEN );
}
UINT32 UIHandleEnterEditMode( UI_EVENT *pUIEvent )
{
return( EDIT_SCREEN );
return( EDIT_SCREEN );
}
UINT32 UIHandleEnterPalEditMode( UI_EVENT *pUIEvent )
{
return( PALEDIT_SCREEN );
return( PALEDIT_SCREEN );
}
UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
{
CHAR16 zString[128];
@@ -1262,7 +1242,7 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
guiPreviousOptionScreen = guiCurrentScreen;
//increment end turn number
guiLastSaveGameNum++;
++guiLastSaveGameNum;
if( guiLastSaveGameNum == 2 )
guiLastSaveGameNum = 0;
@@ -1270,65 +1250,75 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
SaveGame(SAVE__END_TURN_NUM, zString );
}
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
#ifdef USE_ASTAR_PATHS
////ddd îïòèìèçàöèÿ äëÿ õîäà äðàíèêîâ
if ( (gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT ) )
{
memset( gubWorldTileInLight, FALSE, sizeof( gubWorldTileInLight ) );
memset( gubIsCorpseThere, FALSE, sizeof( gubIsCorpseThere ) );
memset( gubMerkCanSeeThisTile, FALSE, sizeof( gubMerkCanSeeThisTile ) );
memset( gubWorldTileInLight, FALSE, sizeof( gubWorldTileInLight ) );
memset( gubIsCorpseThere, FALSE, sizeof( gubIsCorpseThere ) );
memset( gubMerkCanSeeThisTile, FALSE, sizeof( gubMerkCanSeeThisTile ) );
//ðàçâåðòêà öèêëà. ïðè èçìåíåíèè WORLD_MAX íà äð.çíà÷. íåîáõîäèìî áóäåò ïîä÷èùàòü õâîñòû! èáî îïàñíûé êîä!!! ;)
//ðàçâåðòêà öèêëà. ïðè èçìåíåíèè WORLD_MAX íà äð.çíà÷. íåîáõîäèìî áóäåò ïîä÷èùàòü õâîñòû! èáî îïàñíûé êîä!!! ;)
// WANNE: We had a custom user map (Tixa, J9), where the following loop caused an unhandled exception.
// The crash occurd at ~index 16000 when calling the method IsCorpseAtGridNo() ...
// I don't know what causes it ...
// Just try/catch (ugly, but works).
__try
{
for(UINT32 i=0; i<(UINT32)WORLD_MAX ;i+=4)
{
gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight);
gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight );
gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight);
gubIsCorpseThere[i+1] = IsCorpseAtGridNo( i+1, gpWorldLevelData[ i+1 ].sHeight );
gubWorldTileInLight[i+2] = InLightAtNight(i+2, gpWorldLevelData[ i+2 ].sHeight);
gubIsCorpseThere[i+2] = IsCorpseAtGridNo( i+2, gpWorldLevelData[ i+2 ].sHeight );
gubWorldTileInLight[i+3] = InLightAtNight(i+3, gpWorldLevelData[ i+3 ].sHeight);
gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight );
}
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
// WANNE: Ignore, so the game can continue ...
}
INT32 tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
SOLDIERTYPE *tS;
INT16 sXOffset, sYOffset;
INT32 sGridNo;UINT16 usSightLimit=0;
for ( tS = MercPtrs[ tcnt ]; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; tcnt++,tS++ )
if ( tS->stats.bLife >= OKLIFE && tS->sGridNo != NOWHERE && tS->bInSector )
// WANNE: We had a custom user map (Tixa, J9), where the following loop caused an unhandled exception.
// The crash occurd at ~index 16000 when calling the method IsCorpseAtGridNo() ...
// I don't know what causes it ...
// Just try/catch (ugly, but works).
__try
{
for(UINT32 i=0; i<(UINT32)WORLD_MAX; i+=4)
{
gubWorldTileInLight[i] = InLightAtNight(i, gpWorldLevelData[ i ].sHeight);
gubIsCorpseThere[i] = IsCorpseAtGridNo( i, gpWorldLevelData[ i ].sHeight );
gubWorldTileInLight[i+1] = InLightAtNight(i+1, gpWorldLevelData[ i+1 ].sHeight);
gubIsCorpseThere[i+1] = IsCorpseAtGridNo( i+1, gpWorldLevelData[ i+1 ].sHeight );
gubWorldTileInLight[i+2] = InLightAtNight(i+2, gpWorldLevelData[ i+2 ].sHeight);
gubIsCorpseThere[i+2] = IsCorpseAtGridNo( i+2, gpWorldLevelData[ i+2 ].sHeight );
gubWorldTileInLight[i+3] = InLightAtNight(i+3, gpWorldLevelData[ i+3 ].sHeight);
gubIsCorpseThere[i+3] = IsCorpseAtGridNo( i+3, gpWorldLevelData[ i+3 ].sHeight );
}
}
__except( EXCEPTION_EXECUTE_HANDLER )
{
//loop through all the gridnos that we are interested in
for (sYOffset = -30; sYOffset <= 30; sYOffset++)
for (sXOffset = -30; sXOffset <= 30; sXOffset++)
{
sGridNo = tS->sGridNo + sXOffset + (MAXCOL * sYOffset);
if ( sGridNo <= 0 || sGridNo >= WORLD_MAX )
continue;
//usSightLimit = tS->GetMaxDistanceVisible(sGridNo, FALSE, CALC_FROM_WANTED_DIR);
if(gubMerkCanSeeThisTile[sGridNo]==0)
gubMerkCanSeeThisTile[sGridNo]=//SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, FALSE, ANIM_STAND, TRUE, usSightLimit );
SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, tS->pathing.bLevel,
ANIM_STAND, TRUE, CALC_FROM_WANTED_DIR);
// WANNE: Ignore, so the game can continue ...
}
}//fo
}//if
INT32 tcnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
SOLDIERTYPE *tS;
INT16 sXOffset, sYOffset;
INT32 sGridNo;
UINT16 usSightLimit=0;
for ( tS = MercPtrs[ tcnt ]; tcnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; ++tcnt, tS++ )
{
if ( tS->stats.bLife >= OKLIFE && tS->sGridNo != NOWHERE && tS->bInSector )
{
//loop through all the gridnos that we are interested in
for (sYOffset = -30; sYOffset <= 30; ++sYOffset)
{
for (sXOffset = -30; sXOffset <= 30; ++sXOffset)
{
sGridNo = tS->sGridNo + sXOffset + (MAXCOL * sYOffset);
if ( sGridNo <= 0 || sGridNo >= WORLD_MAX )
continue;
//usSightLimit = tS->GetMaxDistanceVisible(sGridNo, FALSE, CALC_FROM_WANTED_DIR);
if(gubMerkCanSeeThisTile[sGridNo]==0)
{
gubMerkCanSeeThisTile[sGridNo]=//SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, FALSE, ANIM_STAND, TRUE, usSightLimit );
SoldierToVirtualSoldierLineOfSightTest( tS, sGridNo, tS->pathing.bLevel, ANIM_STAND, TRUE, CALC_FROM_WANTED_DIR);
}
}//fo
}
}//if
}
}
//ddd îïòèìèçàöèÿ äëÿ õîäà äðàíèêîâ**
#endif
// End our turn!
if (is_server || !is_client)
{
@@ -1336,7 +1326,6 @@ UINT32 UIHandleEndTurn( UI_EVENT *pUIEvent )
}
if(!is_server && is_client)
{
if (INTERRUPT_QUEUED)
{
EndTurn( gbPlayerNum + 1 );//is ending interrupt instead
@@ -1539,7 +1528,6 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
fOverItems = FALSE;
}
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
if ( GetExitGrid( usMapPos, &ExitGrid ) && pSoldier->pathing.bLevel == 0 )
@@ -1628,9 +1616,7 @@ UINT32 UIHandleMOnTerrain( UI_EVENT *pUIEvent )
}
}
{
//if ( fSetCursor && guiNewUICursor != ENTER_VEHICLE_UICURSOR )
if ( fSetCursor && !gfBeginVehicleCursor )
{
@@ -1645,7 +1631,6 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent )
{
SOLDIERTYPE *pSoldier;
// Get soldier
if ( !GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
@@ -1660,7 +1645,6 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent )
// Change cusror to normal
guiNewUICursor = NORMAL_FREEUICURSOR;
}
// Check for done flag
@@ -1721,14 +1705,12 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent )
UIHandleSoldierStanceChange( pSoldier->ubID, ANIM_PRONE );
break;
}
guiPendingOverrideEvent = A_CHANGE_TO_MOVE;
//pSoldier->usUIMovementMode = (INT8)pUIEvent->uiParams[ 0 ];
}
}
}
@@ -1738,7 +1720,6 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent )
UINT32 UIHandlePositionMenu( UI_EVENT *pUIEvent )
{
return( GAME_SCREEN );
}
@@ -1791,7 +1772,6 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent )
}
}
}
}
guiNewUICursor = GetProperItemCursor( (UINT8)gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, FALSE );
@@ -1821,20 +1801,14 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent )
gUITargetReady = TRUE;
}
}
else
{
gUITargetReady = FALSE;
}
}
}
return( GAME_SCREEN );
}
@@ -1901,7 +1875,6 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent )
if ( pInvTile != NULL )
{
fSetCursor = HandleUIMovementCursor( pSoldier, uiCursorFlags, usMapPos, MOVEUI_TARGET_INTTILES );
//Set UI CURSOR
@@ -1913,7 +1886,6 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent )
gfUIHandleShowMoveGrid = 2;
}
return( GAME_SCREEN );
}
@@ -1934,7 +1906,6 @@ UINT32 UIHandleCWait( UI_EVENT *pUIEvent )
//DrawUIMovementPath( pSoldier, sMapPos, 0 );
fSetCursor = HandleUIMovementCursor( pSoldier, uiCursorFlags, usMapPos, 0 );
}
}
return( GAME_SCREEN );
@@ -1980,14 +1951,14 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
{
if ( OK_CONTROLLABLE_MERC( pSoldier ) && pSoldier->bAssignment == CurrentSquad( ) && !pSoldier->flags.fMercAsleep )
{
// If we can't be controlled, returninvalid...
if ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT )
{
if ( !pSoldier->CanRobotBeControlled( ) )
{
continue;
}
}
// If we can't be controlled, returninvalid...
if ( pSoldier->flags.uiStatusFlags & SOLDIER_ROBOT )
{
if ( !pSoldier->CanRobotBeControlled( ) )
{
continue;
}
}
pSoldier->AdjustNoAPToFinishMove( FALSE );
@@ -2006,8 +1977,7 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
// Remove any previous actions
pSoldier->aiData.ubPendingAction = NO_PENDING_ACTION;
//if ( !( gTacticalStatus.uiFlags & INCOMBAT ) && ( gAnimControl[ pSoldier->usAnimState ].uiFlags & ANIM_MOVING ) )
//{
// pSoldier->sRTPendingMovementGridNo = sMapPos;
@@ -2033,7 +2003,6 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
SetConfirmMovementModeCursor( pSoldier, TRUE );
gfUIAllMoveOn = 0;
}
else
{
@@ -2061,11 +2030,9 @@ UINT32 UIHandleCMoveMerc( UI_EVENT *pUIEvent )
{
pSoldier->usUIMovementMode = pSoldier->GetMoveStateBasedOnStance( gAnimControl[ pSoldier->usAnimState ].ubEndHeight );
}
sDestGridNo = usMapPos;
// Get structure info for in tile!
pIntTile = GetCurInteractiveTileGridNoAndStructure( &sIntTileGridNo, &pStructure );
@@ -2223,18 +2190,15 @@ UINT32 UIHandleMCycleMovement( UI_EVENT *pUIEvent )
fGoodMode = TRUE;
}
}
} while( fGoodMode != TRUE );
gfPlotNewMovement = TRUE;
return( GAME_SCREEN );
}
UINT32 UIHandleCOnTerrain( UI_EVENT *pUIEvent )
{
return( GAME_SCREEN );
}
@@ -2242,19 +2206,18 @@ UINT32 UIHandleCOnTerrain( UI_EVENT *pUIEvent )
UINT32 UIHandleMAdjustStanceMode( UI_EVENT *pUIEvent )
{
SOLDIERTYPE *pSoldier;
INT32 iPosDiff;
INT32 iPosDiff;
static UINT16 gusAnchorMouseY;
static UINT16 usOldMouseY;
static BOOLEAN ubNearHeigherLevel;
static BOOLEAN ubNearLowerLevel;
static BOOLEAN ubNearHeigherLevel;
static BOOLEAN ubNearLowerLevel;
static UINT8 ubUpHeight, ubDownDepth;
static UINT32 uiOldShowUPDownArrows;
INT8 bNewDirection;
INT8 bNewDirection;
// Change cusror to normal
guiNewUICursor = NO_UICURSOR;
if ( pUIEvent->fFirstTime )
{
gusAnchorMouseY = gusMouseYPos;
@@ -2347,10 +2310,7 @@ UINT32 UIHandleMAdjustStanceMode( UI_EVENT *pUIEvent )
}
break;
}
}
}
// Check if delta X has changed alot since last time
@@ -2411,12 +2371,10 @@ UINT32 UIHandleMAdjustStanceMode( UI_EVENT *pUIEvent )
}
}
}
}
if ( gusAnchorMouseY < gusMouseYPos )
{
// Get soldier
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
@@ -2468,11 +2426,8 @@ UINT32 UIHandleMAdjustStanceMode( UI_EVENT *pUIEvent )
gbClimbID = -1;
}
}
}
}
}
uiOldShowUPDownArrows = guiShowUPDownArrows;
@@ -2487,7 +2442,6 @@ UINT32 UIHandleAChangeToConfirmAction( UI_EVENT *pUIEvent )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
HandleLeftClickCursor( pSoldier );
}
ResetBurstLocations( );
@@ -2511,7 +2465,6 @@ UINT32 UIHandleCAOnTerrain( UI_EVENT *pUIEvent )
guiNewUICursor = GetProperItemCursor( (UINT8)gusSelectedSoldier, pSoldier->inv[ HANDPOS ].usItem, usMapPos, TRUE );
UIHandleOnMerc( FALSE );
}
return( GAME_SCREEN );
@@ -2618,7 +2571,6 @@ void UIHandleMercAttack( SOLDIERTYPE *pSoldier , SOLDIERTYPE *pTargetSoldier, IN
}
}
// Cannot be fire if we are already in a fire animation....
// this is to stop the shooting trigger/happy duded from contiously pressing fire...
if ( !(gTacticalStatus.uiFlags & INCOMBAT) )
@@ -2638,7 +2590,6 @@ void UIHandleMercAttack( SOLDIERTYPE *pSoldier , SOLDIERTYPE *pTargetSoldier, IN
// guiPendingOverrideEvent = A_CHANGE_TO_MOVE;
}
if (pSoldier->bWeaponMode == WM_ATTACHED_GL || pSoldier->bWeaponMode == WM_ATTACHED_GL_BURST || pSoldier->bWeaponMode == WM_ATTACHED_GL_AUTO )
{
iHandleReturn = HandleItem( pSoldier, sTargetGridNo, bTargetLevel, GetAttachedGrenadeLauncher(pObj), TRUE );
@@ -2663,7 +2614,6 @@ void UIHandleMercAttack( SOLDIERTYPE *pSoldier , SOLDIERTYPE *pTargetSoldier, IN
}
}
if ( gTacticalStatus.uiFlags & TURNBASED && !( gTacticalStatus.uiFlags & INCOMBAT ) )
{
HandleUICursorRTFeedback( pSoldier );
@@ -2711,11 +2661,10 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent )
{
INT32 usMapPos;
SOLDIERTYPE *pSoldier, *pTSoldier = NULL;
BOOLEAN fDidRequester = FALSE;
BOOLEAN fDidRequester = FALSE;
if ( gusSelectedSoldier != NOBODY )
{
if( !GetMouseMapPos( &usMapPos) )
{
return( GAME_SCREEN );
@@ -2731,7 +2680,6 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent )
pTSoldier = MercPtrs[ gusUIFullTargetID ];
}
if ( pTSoldier != NULL )
{
// If this is one of our own guys.....pop up requiester...
@@ -2753,7 +2701,6 @@ UINT32 UIHandleCAMercShoot( UI_EVENT *pUIEvent )
swprintf( zStr, TacticalStr[ ATTACK_OWN_GUY_PROMPT ], pTSoldier->GetName() );
DoMessageBox( MSG_BOX_BASIC_STYLE, zStr, GAME_SCREEN, ( UINT8 )MSG_BOX_FLAG_YESNO, AttackRequesterCallback, NULL );
}
////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - Should we ask if we really want to do the surgery?
@@ -2804,7 +2751,6 @@ UINT32 UIHandleAEndAction( UI_EVENT *pUIEvent )
return( GAME_SCREEN );
}
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
if ( ( gTacticalStatus.uiFlags & REALTIME ) || !( gTacticalStatus.uiFlags & INCOMBAT ) )
@@ -2820,9 +2766,9 @@ UINT32 UIHandleAEndAction( UI_EVENT *pUIEvent )
gUITargetReady = FALSE;
}
}
}
return( GAME_SCREEN );
}
@@ -2850,7 +2796,6 @@ UINT32 UIHandleIOnTerrain( UI_EVENT *pUIEvent )
return( GAME_SCREEN );
}
if ( !UIHandleOnMerc( TRUE ) )
{
// Check if dest is OK
@@ -2875,10 +2820,9 @@ UINT32 UIHandleIChangeToIdle( UI_EVENT *pUIEvent )
UINT32 UIHandlePADJAdjustStance( UI_EVENT *pUIEvent )
{
SOLDIERTYPE *pSoldier;
UINT8 ubNewStance;
guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN;
UINT8 ubNewStance;
guiShowUPDownArrows = ARROWS_HIDE_UP | ARROWS_HIDE_DOWN;
gfIgnoreScrolling = FALSE;
@@ -2905,10 +2849,9 @@ UINT32 UIHandlePADJAdjustStance( UI_EVENT *pUIEvent )
// Once we have APs, we can safely reset nomove flag!
// AdjustNoAPToFinishMove( pSoldier, FALSE );
}
}
return( GAME_SCREEN );
}
@@ -3018,11 +2961,10 @@ void AdjustSoldierCreationStartValues( )
INT32 cnt;
SOLDIERTYPE *pSoldier;
cnt = gTacticalStatus.Team[ gbPlayerNum ].bFirstID;
guiCreateGuyIndex = (INT16)cnt;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; pSoldier++, cnt++ )
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ gbPlayerNum ].bLastID; pSoldier++, ++cnt )
{
if ( !pSoldier->bActive )
{
@@ -3034,7 +2976,7 @@ void AdjustSoldierCreationStartValues( )
cnt = gTacticalStatus.Team[ gbPlayerNum ].bLastID + 1;
guiCreateBadGuyIndex = (INT16)cnt;
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; pSoldier++, cnt++ )
for ( pSoldier = MercPtrs[ cnt ]; cnt <= gTacticalStatus.Team[ LAST_TEAM ].bLastID; pSoldier++, ++cnt )
{
if ( !pSoldier->bActive && cnt > gTacticalStatus.Team[ gbPlayerNum ].bLastID )
{
@@ -3042,7 +2984,6 @@ void AdjustSoldierCreationStartValues( )
break;
}
}
}
BOOLEAN SelectedMercCanAffordAttack( )
@@ -3057,14 +2998,13 @@ BOOLEAN SelectedMercCanAffordAttack( )
if ( gusSelectedSoldier != NOBODY )
{
if( !GetMouseMapPos( &usMapPos) )
{
return( GAME_SCREEN );
}
// Get soldier
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
// LOOK IN GUY'S HAND TO CHECK LOCATION
usInHand = pSoldier->inv[HANDPOS].usItem;
@@ -3120,7 +3060,6 @@ BOOLEAN SelectedMercCanAffordAttack( )
}
}
}
}
return( FALSE );
@@ -3135,14 +3074,13 @@ BOOLEAN SelectedMercCanAffordMove( )
LEVELNODE *pIntTile;
// Get soldier
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
{
if( !GetMouseMapPos( &usMapPos) )
{
return( GAME_SCREEN );
}
// IF WE ARE OVER AN INTERACTIVE TILE, GIVE GRIDNO OF POSITION
pIntTile = GetCurInteractiveTile( );
@@ -3405,7 +3343,6 @@ BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode )
guiShowUPDownArrows = ARROWS_SHOW_DOWN_BESIDE | ARROWS_SHOW_UP_BESIDE;
}
}
}
else
{
@@ -3455,7 +3392,6 @@ BOOLEAN UIHandleOnMerc( BOOLEAN fMovementMode )
{
if ( fMovementMode )
{
// Check if this guy is on the enemy team....
if ( !pSoldier->aiData.bNeutral && (pSoldier->bSide != gbPlayerNum ) )
{
@@ -3543,9 +3479,7 @@ UINT32 UIHandleIETOnTerrain( UI_EVENT *pUIEvent )
void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
{
SOLDIERTYPE *pSoldier;
pSoldier = MercPtrs[ ubSoldierID ];
SOLDIERTYPE *pSoldier = MercPtrs[ ubSoldierID ];
// Is this a valid stance for our position?
if ( !IsValidStance( pSoldier, bNewStance ) )
@@ -3554,9 +3488,7 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, gzLateLocalizedString[ 4 ], pSoldier->GetName() );
}
else
{
if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
else if ( pSoldier->flags.uiStatusFlags & SOLDIER_VEHICLE )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ VEHICLES_NO_STANCE_CHANGE_STR ] );
}
@@ -3564,18 +3496,15 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ ROBOT_NO_STANCE_CHANGE_STR ] );
}
else if ( pSoldier->bCollapsed )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, pMessageStrings[ MSG_CANT_CHANGE_STANCE ], pSoldier->GetName() );
}
else
{
if ( pSoldier->bCollapsed )
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, pMessageStrings[ MSG_CANT_CHANGE_STANCE ], pSoldier->GetName() );
}
else
{
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ CANNOT_STANCE_CHANGE_STR ], pSoldier->GetName() );
}
}
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_UI_FEEDBACK, TacticalStr[ CANNOT_STANCE_CHANGE_STR ], pSoldier->GetName() );
}
return;
}
@@ -3614,7 +3543,6 @@ void UIHandleSoldierStanceChange( UINT8 ubSoldierID, INT8 bNewStance )
{
// Change stance normally
SendChangeSoldierStanceEvent( pSoldier, bNewStance );
}
else
{
+5
View File
@@ -165,11 +165,16 @@ INT32 *gpDirtyData;
UINT32 gSurfaceMemUsage;
//UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2];
UINT8 (*gubWorldMovementCosts)[MAXDIR][2] = NULL;//dnl ch43 260909
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
#ifdef USE_ASTAR_PATHS
//ddd äëÿ óáûñòðåíèÿ ïîèñêà îñâåùåííûõ ó÷àñòêîâ â ïàòõàè.
BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ];
INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ];
//ddd
#endif
// set to nonzero (locs of base gridno of structure are good) to have it defined by structure code
INT16 gsRecompileAreaTop = 0;
INT16 gsRecompileAreaLeft = 0;
+3
View File
@@ -283,6 +283,8 @@ typedef struct
// World Data
extern MAP_ELEMENT *gpWorldLevelData;
// Flugente: this stuff is only ever used in AStar pathing and is a unnecessary waste of resources otherwise, so I'm putting an end to this
#ifdef USE_ASTAR_PATHS
// World Movement Costs
//UINT8 gubWorldMovementCosts[ WORLD_MAX ][MAXDIR][2];
//ddd Tables to track tactical value of grid tiles
@@ -290,6 +292,7 @@ extern BOOLEAN gubWorldTileInLight[ MAX_ALLOWED_WORLD_MAX ];
extern BOOLEAN gubIsCorpseThere[ MAX_ALLOWED_WORLD_MAX ]; //Tracks position of corpses for AI avoidance
extern INT32 gubMerkCanSeeThisTile[ MAX_ALLOWED_WORLD_MAX ]; //Tracks visibility my mercs
//ddd
#endif
extern UINT8 (*gubWorldMovementCosts)[MAXDIR][2];//dnl ch43 260909