mirror of
https://github.com/1dot13/source.git
synced 2026-07-29 13:52:17 +02:00
New militia order: Move to (works in realtime only, switches militia soldier to DTATIONARY/DEFENSIVE).
Cancel current AI order when giving militia order. Check if desired stance is possible here when ordering militia to crouch/prone. Green AI: reworked climb code (only climb up, only at the start of the turn, disable for STATIONARY). git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8947 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -64,6 +64,7 @@ enum{
|
||||
MILCON_MENU_GETDOWN,
|
||||
MILCON_MENU_CROUCH,
|
||||
MILCON_MENU_TAKE_COVER,
|
||||
MILCON_MENU_MOVE_TO,
|
||||
MILCON_MENU_ALL_ATTACK,
|
||||
MILCON_MENU_ALL_HOLD,
|
||||
MILCON_MENU_ALL_RETREAT,
|
||||
|
||||
+16
-5
@@ -229,6 +229,9 @@ UINT32 UIHandleOpenDoorMenu( UI_EVENT *pUIEvent );
|
||||
|
||||
UINT32 UIHandleEXExitSectorMenu( UI_EVENT *pUIEvent );
|
||||
|
||||
// sevenfm:
|
||||
UINT32 UIHandleChangeToRadio(UI_EVENT *pUIEvent);
|
||||
|
||||
BOOLEAN ValidQuickExchangePosition( );
|
||||
|
||||
|
||||
@@ -365,7 +368,7 @@ UI_EVENT gEvents[ NUM_UI_EVENTS ] =
|
||||
0, RUBBERBAND_MODE, UIHandleRubberBandOnTerrain, FALSE, FALSE, 0, 0, 0, 0,
|
||||
0, JUMPOVER_MODE, UIHandleJumpOverOnTerrain, FALSE, FALSE, 0, 0, 0, 0,
|
||||
0, MOVE_MODE, UIHandleJumpOver, FALSE, FALSE, 0, 0, 0, 0,
|
||||
|
||||
0, RADIOCURSOR_MODE, UIHandleChangeToRadio, FALSE, FALSE, 0, 0, 0, 0,
|
||||
};
|
||||
|
||||
UI_MODE gCurrentUIMode = IDLE_MODE;
|
||||
@@ -745,7 +748,7 @@ UINT32 HandleTacticalUI( void )
|
||||
}
|
||||
}
|
||||
|
||||
// Check if menu event is done and if so set to privious mode
|
||||
// Check if menu event is done and if so set to previous mode
|
||||
// This is needed to hook into the interface stuff which sets the fDoneMenu flag
|
||||
if ( gEvents[ uiNewEvent ].fDoneMenu == TRUE )
|
||||
{
|
||||
@@ -754,7 +757,7 @@ UINT32 HandleTacticalUI( void )
|
||||
gCurrentUIMode = (UI_MODE) gEvents[ uiNewEvent ].uiMenuPreviousMode;
|
||||
}
|
||||
}
|
||||
// Check to return to privious mode
|
||||
// Check to return to previous mode
|
||||
// If the event is a single event, return to previous
|
||||
if ( gEvents[ uiNewEvent ].uiFlags & UIEVENT_SINGLEEVENT )
|
||||
{
|
||||
@@ -767,7 +770,7 @@ UINT32 HandleTacticalUI( void )
|
||||
else
|
||||
{
|
||||
// ATE: Check first that some modes are met....
|
||||
if ( gCurrentUIMode != HANDCURSOR_MODE && gCurrentUIMode != LOOKCURSOR_MODE && gCurrentUIMode != TALKCURSOR_MODE )
|
||||
if (gCurrentUIMode != HANDCURSOR_MODE && gCurrentUIMode != LOOKCURSOR_MODE && gCurrentUIMode != TALKCURSOR_MODE && gCurrentUIMode != RADIOCURSOR_MODE)
|
||||
{
|
||||
guiCurrentEvent = M_ON_TERRAIN;
|
||||
}
|
||||
@@ -1935,7 +1938,7 @@ UINT32 UIHandleAOnTerrain( UI_EVENT *pUIEvent )
|
||||
// Get soldier to determine range
|
||||
if ( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
{
|
||||
// ATE: Add stuff here to display a system message if we are targeting smeothing and
|
||||
// ATE: Add stuff here to display a system message if we are targeting something and
|
||||
// are out of range.
|
||||
// Are we using a gun?
|
||||
if ( GetActionModeCursor( pSoldier ) == TARGETCURS )
|
||||
@@ -5813,6 +5816,14 @@ UINT32 UIHandleLAOnTerrain( UI_EVENT *pUIEvent )
|
||||
return( GAME_SCREEN );
|
||||
}
|
||||
|
||||
UINT32 UIHandleChangeToRadio(UI_EVENT *pUIEvent)
|
||||
{
|
||||
ErasePath(TRUE);
|
||||
|
||||
guiNewUICursor = PLACE_REMOTE_GREY_UICURSOR;
|
||||
|
||||
return(GAME_SCREEN);
|
||||
}
|
||||
|
||||
void GetGridNoScreenXY( INT32 sGridNo, INT16 *pScreenX, INT16 *pScreenY )
|
||||
{
|
||||
|
||||
@@ -60,6 +60,7 @@ typedef enum
|
||||
EXITSECTORMENU_MODE,
|
||||
RUBBERBAND_MODE,
|
||||
JUMPOVER_MODE,
|
||||
RADIOCURSOR_MODE,
|
||||
|
||||
} UI_MODE;
|
||||
|
||||
@@ -163,6 +164,8 @@ typedef enum
|
||||
JP_ON_TERRAIN,
|
||||
JP_JUMP,
|
||||
|
||||
R_CHANGE_TO_RADIO,
|
||||
|
||||
NUM_UI_EVENTS
|
||||
|
||||
} UI_EVENT_DEFINES;
|
||||
@@ -346,6 +349,7 @@ void BeginDisplayTimedCursor( UINT32 uiCursorID, UINT32 uiDelay );
|
||||
|
||||
void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent );
|
||||
void HandleHandCursorRightClick( INT32 usMapPos, UINT32 *puiNewEvent );
|
||||
void HandleRadioCursorClick(INT32 usMapPos, UINT32 *puiNewEvent);
|
||||
INT8 HandleMoveModeInteractiveClick( INT32 usMapPos, UINT32 *puiNewEvent );
|
||||
|
||||
BOOLEAN HandleUIReloading( SOLDIERTYPE *pSoldier );
|
||||
|
||||
+101
-34
@@ -619,32 +619,6 @@ void CreateDestroyMouseRegionsForMilitiaControlMenu( void )
|
||||
SGPRect pDimensions;
|
||||
static BOOLEAN fShowRemoveMenu = FALSE;
|
||||
|
||||
|
||||
// will create/destroy mouse regions for the map screen assignment main menu
|
||||
// check if we can only remove character from team..not assign
|
||||
//if( ( bSelectedAssignChar != -1 ) || ( fShowRemoveMenu == TRUE ) )
|
||||
//{
|
||||
// if( fShowRemoveMenu == TRUE )
|
||||
// {
|
||||
// // dead guy handle menu stuff
|
||||
// fShowRemoveMenu = fShowMilitiaControlMenu | fShowContractMenu;
|
||||
//
|
||||
// CreateDestroyMouseRegionsForRemoveMenu( );
|
||||
|
||||
// return;
|
||||
// }
|
||||
// if( ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].bLife == 0 ) || ( Menptr[gCharactersList[bSelectedAssignChar].usSolID].bMilitiaControl == MilitiaControl_POW ) )
|
||||
// {
|
||||
// // dead guy handle menu stuff
|
||||
// fShowRemoveMenu = fShowMilitiaControlMenu | fShowContractMenu;
|
||||
//
|
||||
// CreateDestroyMouseRegionsForRemoveMenu( );
|
||||
|
||||
// return;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
if( ( fShowMilitiaControlMenu == TRUE ) && ( fCreated == FALSE ) )
|
||||
{
|
||||
gfIgnoreScrolling = FALSE;
|
||||
@@ -1062,7 +1036,12 @@ void HandleShadingOfLinesForMilitiaControlMenu( void )
|
||||
UnShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_COMETOME );
|
||||
UnShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_GETDOWN );
|
||||
UnShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_CROUCH );
|
||||
UnShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_TAKE_COVER );
|
||||
UnShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_TAKE_COVER );
|
||||
|
||||
if ((gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT))
|
||||
ShadeStringInBox(ghMilitiaControlBox, MILCON_MENU_MOVE_TO);
|
||||
else
|
||||
UnShadeStringInBox(ghMilitiaControlBox, MILCON_MENU_MOVE_TO);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1073,6 +1052,8 @@ void HandleShadingOfLinesForMilitiaControlMenu( void )
|
||||
ShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_GETDOWN );
|
||||
ShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_CROUCH );
|
||||
ShadeStringInBox( ghMilitiaControlBox, MILCON_MENU_TAKE_COVER );
|
||||
|
||||
ShadeStringInBox(ghMilitiaControlBox, MILCON_MENU_MOVE_TO);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1169,6 +1150,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
// Attack !!!
|
||||
pTMilitiaSoldier->aiData.bOrders = SEEKENEMY;
|
||||
pTMilitiaSoldier->aiData.bAttitude = AGGRESSIVE;
|
||||
@@ -1197,6 +1182,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
//Hold Position !!!
|
||||
//ScreenMsg( FONT_WHITE, MSG_INTERFACE, L"Hold Position" );
|
||||
pTMilitiaSoldier->aiData.bOrders = STATIONARY;
|
||||
@@ -1223,6 +1212,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
INT16 sActionGridNo;
|
||||
|
||||
pTMilitiaSoldier->aiData.bOrders = FARPATROL;
|
||||
@@ -1275,6 +1268,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
INT32 sActionGridNo, sGridNo, sAdjustedGridNo;
|
||||
UINT8 ubDirection;
|
||||
|
||||
@@ -1321,10 +1318,13 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
//if ( SoldierCanAffordNewStance( pTeamSoldier, ANIM_PRONE ) )
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
if (pTMilitiaSoldier->InternalIsValidStance(pTMilitiaSoldier->ubDirection, ANIM_PRONE))
|
||||
{
|
||||
SendChangeSoldierStanceEvent( pTMilitiaSoldier, ANIM_PRONE );
|
||||
//SendChangeSoldierStanceEvent( pTMilitiaSoldier, ANIM_CROUCH );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1346,8 +1346,17 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
case( MILCON_MENU_CROUCH ):
|
||||
if (fCanCommunicate)
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
SendChangeSoldierStanceEvent( pTMilitiaSoldier, ANIM_CROUCH );
|
||||
if ((pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE))
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
if (pTMilitiaSoldier->InternalIsValidStance(pTMilitiaSoldier->ubDirection, ANIM_CROUCH))
|
||||
{
|
||||
SendChangeSoldierStanceEvent(pTMilitiaSoldier, ANIM_CROUCH);
|
||||
}
|
||||
}
|
||||
|
||||
DeductPoints( pSoldier, APBPConstants[AP_TALK], 0 );
|
||||
StatChange( pSoldier, LDRAMT, 1, FALSE );
|
||||
@@ -1369,6 +1378,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTMilitiaSoldier->bActive) && (pTMilitiaSoldier->bInSector) && (pTMilitiaSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
INT16 sActionGridNo;
|
||||
INT32 iDummy;
|
||||
|
||||
@@ -1404,6 +1417,27 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
}
|
||||
break;
|
||||
|
||||
case( MILCON_MENU_MOVE_TO ):
|
||||
if (!((gTacticalStatus.uiFlags & TURNBASED) && (gTacticalStatus.uiFlags & INCOMBAT)))
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTMilitiaSoldier->EVENT_StopMerc(pTMilitiaSoldier->sGridNo, pTMilitiaSoldier->ubDirection);
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
|
||||
DeductPoints(pSoldier, APBPConstants[AP_TALK], 0);
|
||||
StatChange(pSoldier, LDRAMT, 1, FALSE);
|
||||
|
||||
// stop showing menu
|
||||
fShowMilitiaControlMenu = FALSE;
|
||||
giAssignHighLine = -1;
|
||||
|
||||
// set dirty flag
|
||||
fTeamPanelDirty = TRUE;
|
||||
fMapScreenBottomDirty = TRUE;
|
||||
|
||||
guiPendingOverrideEvent = R_CHANGE_TO_RADIO;
|
||||
}
|
||||
break;
|
||||
|
||||
case( MILCON_MENU_ALL_ATTACK ):
|
||||
if (fAllowSectorOrder)
|
||||
@@ -1417,6 +1451,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
pTeamSoldier->aiData.bOrders = SEEKENEMY;
|
||||
pTeamSoldier->aiData.bAttitude = AGGRESSIVE;
|
||||
pTeamSoldier->usUIMovementMode = RUNNING;
|
||||
@@ -1450,6 +1488,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
pTeamSoldier->aiData.bOrders = STATIONARY;
|
||||
pTeamSoldier->aiData.bAttitude = DEFENSIVE;
|
||||
}
|
||||
@@ -1483,6 +1525,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
pTeamSoldier->aiData.bOrders = FARPATROL;
|
||||
pTeamSoldier->aiData.bAttitude = DEFENSIVE;
|
||||
pTeamSoldier->usUIMovementMode = RUNNING;
|
||||
@@ -1542,6 +1588,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
// OK, find an adjacent gridno....
|
||||
sGridNo = pSoldier->sGridNo;
|
||||
|
||||
@@ -1594,6 +1644,9 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
// See if we can get there
|
||||
sActionGridNo = RandDestWithinRange( pTeamSoldier );
|
||||
@@ -1643,10 +1696,13 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
//if ( SoldierCanAffordNewStance( pTeamSoldier, ANIM_PRONE ) )
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
if (pTeamSoldier->InternalIsValidStance(pTeamSoldier->ubDirection, ANIM_PRONE))
|
||||
{
|
||||
SendChangeSoldierStanceEvent( pTeamSoldier, ANIM_PRONE );
|
||||
//SendChangeSoldierStanceEvent( pTeamSoldier, ANIM_CROUCH );
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1678,7 +1734,14 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
SendChangeSoldierStanceEvent( pTeamSoldier, ANIM_CROUCH );
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
if (pTeamSoldier->InternalIsValidStance(pTeamSoldier->ubDirection, ANIM_CROUCH))
|
||||
{
|
||||
SendChangeSoldierStanceEvent(pTeamSoldier, ANIM_CROUCH);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1711,6 +1774,10 @@ void MilitiaControlMenuBtnCallBack( MOUSE_REGION * pRegion, INT32 iReason )
|
||||
{
|
||||
if ( (pTeamSoldier->bActive) && (pTeamSoldier->bInSector) && (pTeamSoldier->stats.bLife >= OKLIFE) )
|
||||
{
|
||||
// sevenfm: stop any AI
|
||||
pTeamSoldier->EVENT_StopMerc(pTeamSoldier->sGridNo, pTeamSoldier->ubDirection);
|
||||
CancelAIAction(pTeamSoldier, TRUE);
|
||||
|
||||
// See if we can get there
|
||||
sActionGridNo = FindBestNearbyCover(pTeamSoldier,pTeamSoldier->aiData.bAIMorale,&iDummy);
|
||||
|
||||
|
||||
@@ -578,6 +578,11 @@ void QueryRTLeftButton( UINT32 *puiNewEvent )
|
||||
HandleHandCursorClick( usMapPos, puiNewEvent );
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
|
||||
HandleRadioCursorClick(usMapPos, puiNewEvent);
|
||||
break;
|
||||
|
||||
case ACTION_MODE:
|
||||
|
||||
//*puiNewEvent = A_CHANGE_TO_CONFIM_ACTION;
|
||||
@@ -1108,6 +1113,7 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
case IDLE_MODE:
|
||||
case ACTION_MODE:
|
||||
case HANDCURSOR_MODE:
|
||||
case RADIOCURSOR_MODE:
|
||||
case LOOKCURSOR_MODE:
|
||||
case TALKCURSOR_MODE:
|
||||
case MOVE_MODE:
|
||||
@@ -1322,6 +1328,11 @@ void QueryRTRightButton( UINT32 *puiNewEvent )
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
// If we cannot actually do anything, return to movement mode
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
break;
|
||||
|
||||
case LOOKCURSOR_MODE:
|
||||
|
||||
// If we cannot actually do anything, return to movement mode
|
||||
@@ -1491,6 +1502,10 @@ void GetRTMousePositionInput( UINT32 *puiNewEvent )
|
||||
*puiNewEvent = HC_ON_TERRAIN;
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
//*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
break;
|
||||
|
||||
case MOVE_MODE:
|
||||
|
||||
if ( usMapPos != usOldMapPos )
|
||||
@@ -1826,6 +1841,7 @@ void QueryRTWheels( UINT32 *puiNewEvent )
|
||||
case IDLE_MODE:
|
||||
case MOVE_MODE:
|
||||
case HANDCURSOR_MODE:
|
||||
case RADIOCURSOR_MODE:
|
||||
if(gGameExternalOptions.bAlternateMouseCommands)
|
||||
HandleAltMouseRTWheel();
|
||||
else
|
||||
|
||||
@@ -123,6 +123,7 @@
|
||||
#include "DynamicDialogueWidget.h" // added by Flugente for DelayBoxDestructionBy(...)
|
||||
#include "Utilities.h" // added by Flugente
|
||||
#include "AIInternals.h" // sevenfm
|
||||
#include "Interface Cursors.h" // sevenfm
|
||||
|
||||
//forward declarations of common classes to eliminate includes
|
||||
class OBJECTTYPE;
|
||||
@@ -165,6 +166,9 @@ extern COVER_DRAW_MODE gubDrawMode;
|
||||
|
||||
extern MOUSE_REGION gMPanelRegion;
|
||||
|
||||
extern UINT32 guiNewUICursor;
|
||||
extern SOLDIERTYPE *pTMilitiaSoldier;
|
||||
|
||||
void HandleTalkingMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
void HandleMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
void HandleItemMenuKeys( InputAtom *pInputEvent, UINT32 *puiNewEvent );
|
||||
@@ -722,6 +726,11 @@ void QueryTBLeftButton( UINT32 *puiNewEvent )
|
||||
HandleHandCursorClick( usMapPos, puiNewEvent );
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
|
||||
HandleRadioCursorClick(usMapPos, puiNewEvent);
|
||||
break;
|
||||
|
||||
case JUMPOVER_MODE:
|
||||
|
||||
if( GetSoldier( &pSoldier, gusSelectedSoldier ) )
|
||||
@@ -889,6 +898,7 @@ void QueryTBRightButton( UINT32 *puiNewEvent )
|
||||
case IDLE_MODE:
|
||||
case ACTION_MODE:
|
||||
case HANDCURSOR_MODE:
|
||||
case RADIOCURSOR_MODE:
|
||||
case LOOKCURSOR_MODE:
|
||||
case TALKCURSOR_MODE:
|
||||
case MOVE_MODE:
|
||||
@@ -1080,6 +1090,11 @@ void QueryTBRightButton( UINT32 *puiNewEvent )
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
// If we cannot actually do anything, return to movement mode
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
break;
|
||||
|
||||
case LOOKCURSOR_MODE:
|
||||
case TALKCURSOR_MODE:
|
||||
|
||||
@@ -1408,6 +1423,9 @@ void GetTBMousePositionInput( UINT32 *puiNewEvent )
|
||||
*puiNewEvent = HC_ON_TERRAIN;
|
||||
break;
|
||||
|
||||
case RADIOCURSOR_MODE:
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
usOldMapPos = usMapPos;
|
||||
@@ -1438,6 +1456,7 @@ void GetPolledKeyboardInput( UINT32 *puiNewEvent )
|
||||
case MOVE_MODE:
|
||||
case ACTION_MODE:
|
||||
case HANDCURSOR_MODE:
|
||||
case RADIOCURSOR_MODE:
|
||||
|
||||
if ( _KeyDown( CTRL ) )
|
||||
{
|
||||
@@ -2063,6 +2082,11 @@ void GetKeyboardInput( UINT32 *puiNewEvent )
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
}
|
||||
|
||||
if (gCurrentUIMode == RADIOCURSOR_MODE)
|
||||
{
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
}
|
||||
|
||||
if ( !( gTacticalStatus.uiFlags & ENGAGED_IN_CONV ) )
|
||||
{
|
||||
if ( gusSelectedSoldier != NOBODY )
|
||||
@@ -5518,6 +5542,63 @@ INT8 CheckForAndHandleHandleVehicleInteractiveClick( SOLDIERTYPE *pSoldier, UINT
|
||||
return( 0 );
|
||||
}
|
||||
|
||||
void HandleRadioCursorClick(INT32 usMapPos, UINT32 *puiNewEvent)
|
||||
{
|
||||
SOLDIERTYPE * pSoldier = NULL;
|
||||
GetSoldier(&pSoldier, gusSelectedSoldier);
|
||||
|
||||
if (pSoldier &&
|
||||
pTMilitiaSoldier &&
|
||||
pTMilitiaSoldier->bActive &&
|
||||
pTMilitiaSoldier->bInSector &&
|
||||
pTMilitiaSoldier->stats.bLife >= OKLIFE)
|
||||
{
|
||||
INT32 sMoveSpot = usMapPos;
|
||||
BOOLEAN fClimbingNecessary;
|
||||
INT32 sClimbSpot;
|
||||
INT32 iPathCost = EstimatePathCostToLocation(pTMilitiaSoldier, sMoveSpot, gsInterfaceLevel, FALSE, &fClimbingNecessary, &sClimbSpot);
|
||||
|
||||
// See if we can get there
|
||||
if (iPathCost > 0)
|
||||
{
|
||||
// sevenfm: change from stationary/patrol etc
|
||||
pTMilitiaSoldier->aiData.bOrders = STATIONARY;
|
||||
pTMilitiaSoldier->aiData.bAttitude = DEFENSIVE;
|
||||
|
||||
// sevenfm: set this spot as original point
|
||||
pTMilitiaSoldier->aiData.sPatrolGrid[0] = sMoveSpot;
|
||||
|
||||
CancelAIAction(pTMilitiaSoldier, TRUE);
|
||||
if (fClimbingNecessary)
|
||||
{
|
||||
pTMilitiaSoldier->aiData.bNextAction = AI_ACTION_MOVE_TO_CLIMB;
|
||||
pTMilitiaSoldier->aiData.usNextActionData = sClimbSpot;
|
||||
pTMilitiaSoldier->sAbsoluteFinalDestination = sMoveSpot;
|
||||
|
||||
BeginMultiPurposeLocator(sClimbSpot, pTMilitiaSoldier->pathing.bLevel, FALSE);
|
||||
}
|
||||
else
|
||||
{
|
||||
pTMilitiaSoldier->aiData.bNextAction = AI_ACTION_SEEK_OPPONENT;
|
||||
pTMilitiaSoldier->aiData.usNextActionData = sMoveSpot;
|
||||
|
||||
BeginMultiPurposeLocator(sMoveSpot, pTMilitiaSoldier->pathing.bLevel, FALSE);
|
||||
}
|
||||
RESETTIMECOUNTER(pTMilitiaSoldier->timeCounters.AICounter, 100);
|
||||
|
||||
//pTMilitiaSoldier->usSoldierFlagMask |= SOLDIER_MILITIA_ORDER;
|
||||
}
|
||||
else
|
||||
{
|
||||
pTMilitiaSoldier->DoMercBattleSound(BATTLE_SOUND_CURSE1);
|
||||
}
|
||||
}
|
||||
|
||||
*puiNewEvent = A_CHANGE_TO_MOVE;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void HandleHandCursorClick( INT32 usMapPos, UINT32 *puiNewEvent )
|
||||
{
|
||||
SOLDIERTYPE *pSoldier;
|
||||
@@ -6892,6 +6973,7 @@ void QueryTBWheel( UINT32 *puiNewEvent )
|
||||
case MOVE_MODE:
|
||||
case CONFIRM_MOVE_MODE:
|
||||
case HANDCURSOR_MODE:
|
||||
case RADIOCURSOR_MODE:
|
||||
if(gGameExternalOptions.bAlternateMouseCommands)
|
||||
HandleAltMouseTBWheel();
|
||||
else
|
||||
|
||||
@@ -1130,7 +1130,12 @@ INT8 DecideActionGreen(SOLDIERTYPE *pSoldier)
|
||||
// CLIMB A BUILDING
|
||||
////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
if (!fCivilian && pSoldier->aiData.bLastAction != AI_ACTION_CLIMB_ROOF && !is_networked)
|
||||
if (!fCivilian &&
|
||||
pSoldier->CheckInitialAP() &&
|
||||
pSoldier->aiData.bLastAction != AI_ACTION_CLIMB_ROOF &&
|
||||
pSoldier->aiData.bOrders != STATIONARY &&
|
||||
pSoldier->pathing.bLevel == 0 &&
|
||||
!is_networked)
|
||||
{
|
||||
iChance = 10 + pSoldier->aiData.bBypassToGreen;
|
||||
|
||||
|
||||
@@ -2798,6 +2798,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"卧倒",
|
||||
L"蹲下", // L"Crouch",
|
||||
L"隐蔽",
|
||||
L"Move to", // TODO. Translate
|
||||
L"全体: 自动进攻",
|
||||
L"全体: 原地坚守",
|
||||
L"全体: 撤退",
|
||||
|
||||
@@ -2797,6 +2797,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Get down", // retreat militia
|
||||
L"Crouch", // TODO.Translate
|
||||
L"Take cover",
|
||||
L"Move to", // TODO.Translate
|
||||
L"All: Attack",
|
||||
L"All: Hold Position",
|
||||
L"All: Retreat",
|
||||
|
||||
@@ -2798,6 +2798,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Get down",
|
||||
L"Crouch",
|
||||
L"Take cover",
|
||||
L"Move to",
|
||||
L"All: Attack",
|
||||
L"All: Hold Position",
|
||||
L"All: Retreat",
|
||||
|
||||
@@ -2806,6 +2806,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Couchez-vous", // retreat militia
|
||||
L"Accroupi",
|
||||
L"À couvert !",
|
||||
L"Move to", // TODO.Translate
|
||||
L"Tous : Attaquez",
|
||||
L"Tous : Tenez la position",
|
||||
L"Tous : Retraite",
|
||||
|
||||
@@ -2827,6 +2827,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Auf den Boden", // retreat militia
|
||||
L"Ducken",
|
||||
L"In Deckung gehen",
|
||||
L"Move to", // TODO.Translate
|
||||
L"Alle: Angreifen",
|
||||
L"Alle: Position halten",
|
||||
L"Alle: Rückzug",
|
||||
|
||||
@@ -2792,6 +2792,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Get down", // retreat militia
|
||||
L"Crouch", // TODO.Translate
|
||||
L"Take cover",
|
||||
L"Move to", // TODO.Translate
|
||||
L"All: Attack",
|
||||
L"All: Hold Position",
|
||||
L"All: Retreat",
|
||||
|
||||
@@ -2804,6 +2804,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Padnij", // retreat militia
|
||||
L"Crouch", // TODO.Translate
|
||||
L"Kryj się",
|
||||
L"Move to", // TODO.Translate
|
||||
L"Wszyscy: Atakujcie",
|
||||
L"Wszyscy: Utrzymajcie pozycje",
|
||||
L"Wszyscy: Wycofajcie się",
|
||||
|
||||
@@ -2798,6 +2798,7 @@ STR16 pMilitiaControlMenuStrings[] =
|
||||
L"Ложись",
|
||||
L"Присесть",
|
||||
L"В укрытие",
|
||||
L"Двигаться в точку",
|
||||
L"Все в атаку",
|
||||
L"Всем держать оборону",
|
||||
L"Всем отступать",
|
||||
|
||||
Reference in New Issue
Block a user