Skip to content

Commit

Permalink
Make VTOLs return to rearm when out of ammo, if told to patrol or cir…
Browse files Browse the repository at this point in the history
…cle.

However, if set to hold fire, don't return to rearm, even when reaching a patrol endpoint.

Fixes ticket:3705.
  • Loading branch information
Cyp committed May 25, 2013
1 parent d5dd591 commit 7a52d37
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 2 deletions.
2 changes: 1 addition & 1 deletion src/action.cpp
Expand Up @@ -691,7 +691,7 @@ void actionSanity(DROID *psDroid)
// if VTOL - return to rearm pad if not patrolling
if (isVtolDroid(psDroid))
{
if ((psDroid->order.type == DORDER_PATROL || psDroid->order.type == DORDER_CIRCLE) && !vtolEmpty(psDroid))
if ((psDroid->order.type == DORDER_PATROL || psDroid->order.type == DORDER_CIRCLE) && (!vtolEmpty(psDroid) || (psDroid->secondaryOrder & DSS_ALEV_MASK) == DSS_ALEV_NEVER))
{
// Back to the patrol.
actionDroid(psDroid, DACTION_MOVE, psDroid->order.pos.x, psDroid->order.pos.y);
Expand Down
13 changes: 12 additions & 1 deletion src/order.cpp
Expand Up @@ -569,7 +569,7 @@ void orderUpdateDroid(DROID *psDroid)
// started a new order, quit
break;
}
if (isVtolDroid(psDroid) && !vtolFull(psDroid))
if (isVtolDroid(psDroid) && !vtolFull(psDroid) && (psDroid->secondaryOrder & DSS_ALEV_MASK) != DSS_ALEV_NEVER)
{
moveToRearm(psDroid);
break;
Expand Down Expand Up @@ -600,6 +600,11 @@ void orderUpdateDroid(DROID *psDroid)
actionDroid(psDroid, DACTION_RETURNTOPOS, psDroid->actionPos.x, psDroid->actionPos.y);
}
}
if (psDroid->order.type == DORDER_PATROL && isVtolDroid(psDroid) && vtolEmpty(psDroid) && (psDroid->secondaryOrder & DSS_ALEV_MASK) != DSS_ALEV_NEVER)
{
moveToRearm(psDroid); // Completely empty (and we're not set to hold fire), don't bother patrolling.
break;
}
break;
case DORDER_CIRCLE:
// if there is an enemy around, attack it
Expand Down Expand Up @@ -650,6 +655,12 @@ void orderUpdateDroid(DROID *psDroid)
} while (!worldOnMap(psDroid->order.pos.x + xoffset, psDroid->order.pos.y + yoffset)); // Don't try to fly off map.
actionDroid(psDroid, DACTION_MOVE, psDroid->order.pos.x + xoffset, psDroid->order.pos.y + yoffset);
}

if (isVtolDroid(psDroid) && vtolEmpty(psDroid) && (psDroid->secondaryOrder & DSS_ALEV_MASK) != DSS_ALEV_NEVER)
{
moveToRearm(psDroid); // Completely empty (and we're not set to hold fire), don't bother circling.
break;
}
}
else if ((psDroid->action == DACTION_ATTACK) ||
(psDroid->action == DACTION_MOVETOATTACK) ||
Expand Down

0 comments on commit 7a52d37

Please sign in to comment.