From 99d9567f3575feb51e358847801765136a32aee3 Mon Sep 17 00:00:00 2001 From: Wanne Date: Wed, 13 Jun 2012 07:48:02 +0000 Subject: [PATCH] Bugfixes (by Flugente) - fixed a bug that caused wrong cursors to be dispalyed in NCTH - fixed an oversight that caused the scope mode toggle not to be working - corrected fortification cursor issues git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@5345 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Handle UI.cpp | 20 +++++----- Tactical/Structure Wrap.cpp | 4 +- Tactical/Structure Wrap.h | 2 +- Tactical/Turn Based Input.cpp | 5 +-- Tactical/UI Cursors.cpp | 14 ++++--- Utils/Cursors.cpp | 71 +++++++++++++++++------------------ 6 files changed, 57 insertions(+), 59 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index 17895b32..b006602f 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -4450,23 +4450,21 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) if ( pSoldier->pathing.bLevel == 0 ) { - if ( IsFortificationPossibleAtGridNo( usMapPos, NULL ) ) - { - return( TRUE ); - } - if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, (EMPTY_SANDBAG)) ) { // check if we have a shovel in our second hand OBJECTTYPE* pShovelObj = &(pSoldier->inv[SECONDHANDPOS]); - if ( !pShovelObj || !(pShovelObj->exists()) || !HasItemFlag(pSoldier->inv[ SECONDHANDPOS ].usItem, (SHOVEL)) ) + if ( pShovelObj && (pShovelObj->exists()) && HasItemFlag(pSoldier->inv[ SECONDHANDPOS ].usItem, (SHOVEL)) ) { - return( TRUE ); + INT8 bOverTerrainType = GetTerrainType( usMapPos ); + if( bOverTerrainType == FLAT_GROUND || bOverTerrainType == DIRT_ROAD || bOverTerrainType == LOW_GRASS ) + { + return( TRUE ); + } } } - - if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, (SHOVEL)) ) + else if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, (SHOVEL)) ) { STRUCTURE* pStruct = FindStructure(usMapPos, STRUCTURE_GENERIC); @@ -4475,6 +4473,10 @@ BOOLEAN UIMouseOnValidAttackLocation( SOLDIERTYPE *pSoldier ) return( TRUE ); } } + else if ( IsFortificationPossibleAtGridNo( usMapPos ) ) + { + return( TRUE ); + } } return( FALSE ); diff --git a/Tactical/Structure Wrap.cpp b/Tactical/Structure Wrap.cpp index 51f1f06b..72830038 100644 --- a/Tactical/Structure Wrap.cpp +++ b/Tactical/Structure Wrap.cpp @@ -565,10 +565,8 @@ BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ) // Flugente: determine wether a fortification can be built on this position -BOOLEAN IsFortificationPossibleAtGridNo( INT32 sGridNo, UINT8 *pubID ) +BOOLEAN IsFortificationPossibleAtGridNo( INT32 sGridNo ) { - GetMouseMapPos( &sGridNo ); - INT8 bOverTerrainType = GetTerrainType( sGridNo ); if( bOverTerrainType == MED_WATER || bOverTerrainType == DEEP_WATER || bOverTerrainType == LOW_WATER ) return FALSE; diff --git a/Tactical/Structure Wrap.h b/Tactical/Structure Wrap.h index ca2c28b3..53636b87 100644 --- a/Tactical/Structure Wrap.h +++ b/Tactical/Structure Wrap.h @@ -38,7 +38,7 @@ BOOLEAN IsCutWireFenceAtGridNo( INT32 sGridNo ); BOOLEAN IsRepairableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ); BOOLEAN IsRefuelableStructAtGridNo( INT32 sGridNo, UINT8 *pubID ); -BOOLEAN IsFortificationPossibleAtGridNo( INT32 sGridNo, UINT8 *pubID ); // added by Flugente +BOOLEAN IsFortificationPossibleAtGridNo( INT32 sGridNo ); // added by Flugente BOOLEAN IsRoofPresentAtGridNo( INT32 sGridNo ); diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index f784ffaa..410a697a 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -4440,10 +4440,7 @@ void GetKeyboardInput( UINT32 *puiNewEvent ) } else { - INT32 sGridNo = 0; - GetMouseMapPos( &sGridNo ); - RemoveFortification( sGridNo ); - //SetScopeMode(); + SetScopeMode(); } break; diff --git a/Tactical/UI Cursors.cpp b/Tactical/UI Cursors.cpp index a4a74796..8b313166 100644 --- a/Tactical/UI Cursors.cpp +++ b/Tactical/UI Cursors.cpp @@ -2158,12 +2158,16 @@ UINT8 HandleFortificationCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 ui // check if we have a shovel in our second hand OBJECTTYPE* pShovelObj = &(pSoldier->inv[SECONDHANDPOS]); - if ( !pShovelObj || !(pShovelObj->exists()) || !HasItemFlag(pSoldier->inv[ SECONDHANDPOS ].usItem, (SHOVEL)) ) + if ( pShovelObj && (pShovelObj->exists()) && HasItemFlag(pSoldier->inv[ SECONDHANDPOS ].usItem, (SHOVEL)) ) { - return( FORTIFICATION_RED_UICURSOR ); + INT8 bOverTerrainType = GetTerrainType( sGridNo ); + if( bOverTerrainType == FLAT_GROUND || bOverTerrainType == DIRT_ROAD || bOverTerrainType == LOW_GRASS ) + { + return( FORTIFICATION_GREY_UICURSOR ); + } } - else - return( FORTIFICATION_RED_UICURSOR ); + + return( FORTIFICATION_RED_UICURSOR ); } if ( HasItemFlag( (&(pSoldier->inv[HANDPOS]))->usItem, (SHOVEL)) ) @@ -2179,7 +2183,7 @@ UINT8 HandleFortificationCursor( SOLDIERTYPE *pSoldier, INT32 sGridNo, UINT32 ui } // can we build something here? - if ( IsFortificationPossibleAtGridNo( sGridNo, NULL ) && pSoldier->pathing.bLevel == 0 ) + if ( IsFortificationPossibleAtGridNo( sGridNo ) ) { return( FORTIFICATION_GREY_UICURSOR ); } diff --git a/Utils/Cursors.cpp b/Utils/Cursors.cpp index 5f224fb1..9cb9cccc 100644 --- a/Utils/Cursors.cpp +++ b/Utils/Cursors.cpp @@ -1182,13 +1182,6 @@ CursorData CursorDatabase[] = 0, 0, 0, 0, 0, 2, CENTER_CURSOR, CENTER_CURSOR , 0, 0 , 0, 0 }, - /*{ C_TRINGS, 6, 0, HIDE_SUBCURSOR, HIDE_SUBCURSOR, - C_FORTIFICATION , 0, 0, CENTER_SUBCURSOR, CENTER_SUBCURSOR, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, - 2, CENTER_CURSOR, CENTER_CURSOR, 0, 0 , 0, 0 },*/ - { C_TRINGS, 6, 0, HIDE_SUBCURSOR, HIDE_SUBCURSOR, C_FORTIFICATION , 0, 0, CENTER_SUBCURSOR, CENTER_SUBCURSOR, 0, 0, 0, 0, 0, @@ -1715,42 +1708,46 @@ void UpdateAnimatedCursorFrames( UINT32 uiCursorIndex ) { pCurImage = &( pCurData->Composites[ cnt ] ); + // Flugente: now using enums instead of hardcoded values //CHRISL: NCTH uses a completely different cursor so if we're in NCTH mode, we want to use different graphics - if(UsingNewCTHSystem() == true){ + if(UsingNewCTHSystem() == true) + { switch(pCurImage->uiFileIndex) { - case 2: - pCurImage->uiFileIndex = 68; break; - case 3: - pCurImage->uiFileIndex = 69; break; - case 5: - pCurImage->uiFileIndex = 70; break; - case 6: - pCurImage->uiFileIndex = 71; break; - case 7: - pCurImage->uiFileIndex = 72; break; - case 8: - pCurImage->uiFileIndex = 73; break; - case 35: - pCurImage->uiFileIndex = 74; break; + case C_ACTIONMODERED: + pCurImage->uiFileIndex = C_ACTIONMODERED_NCTH; break; + case C_ACTIONMODEBLACK: + pCurImage->uiFileIndex = C_ACTIONMODEBLACK_NCTH; break; + case C_TARGMODEBURSTRED: + pCurImage->uiFileIndex = C_TARGMODEBURSTRED_NCTH; break; + case C_TARGMODEBURSTBLACK: + pCurImage->uiFileIndex = C_TARGMODEBURSTBLACK_NCTH; break; + case C_TRINGS: + pCurImage->uiFileIndex = C_TRINGS_NCTH; break; + case C_TWRINGS: + pCurImage->uiFileIndex = C_TWRINGS_NCTH; break; + case C_YELLOWRINGS: + pCurImage->uiFileIndex = C_YELLOWRINGS_NCTH; break; } - } else { + } + else + { switch(pCurImage->uiFileIndex) { - case 68: - pCurImage->uiFileIndex = 2; break; - case 69: - pCurImage->uiFileIndex = 3; break; - case 70: - pCurImage->uiFileIndex = 5; break; - case 71: - pCurImage->uiFileIndex = 6; break; - case 72: - pCurImage->uiFileIndex = 7; break; - case 73: - pCurImage->uiFileIndex = 8; break; - case 74: - pCurImage->uiFileIndex = 35; break; + case C_ACTIONMODERED_NCTH: + pCurImage->uiFileIndex = C_ACTIONMODERED; break; + case C_ACTIONMODEBLACK_NCTH: + pCurImage->uiFileIndex = C_ACTIONMODEBLACK; break; + case C_TARGMODEBURSTRED_NCTH: + pCurImage->uiFileIndex = C_TARGMODEBURSTRED; break; + case C_TARGMODEBURSTBLACK_NCTH: + pCurImage->uiFileIndex = C_TARGMODEBURSTBLACK; break; + case C_TRINGS_NCTH: + pCurImage->uiFileIndex = C_TRINGS; break; + case C_TWRINGS_NCTH: + pCurImage->uiFileIndex = C_TWRINGS; break; + case C_YELLOWRINGS_NCTH: + pCurImage->uiFileIndex = C_YELLOWRINGS; break; } }