Cleanup, fix warnings created by missing braces in intialization of the oaInfo struct.
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@947 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
3f88e8e4f2
commit
8df2091640
127
src/action.c
127
src/action.c
|
@ -1440,7 +1440,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
if (psDroid->psActionTarget[j] != NULL &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[j], j))
|
||||
{
|
||||
|
||||
|
||||
// firing on something while moving
|
||||
if (DROID_STOPPED(psDroid))
|
||||
{
|
||||
|
@ -1475,7 +1475,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
psDroid->action = DACTION_NONE;
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
if (iVisible == 1 && !bHasTarget && j == (psDroid->numWeaps - 1))
|
||||
{
|
||||
// lost the target
|
||||
|
@ -1533,7 +1533,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
// In range - fire !!!
|
||||
combFire(&psDroid->asWeaps[j], (BASE_OBJECT *)psDroid,
|
||||
psDroid->psActionTarget[0], j);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1553,94 +1553,6 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
break;
|
||||
|
||||
case DACTION_ATTACK:
|
||||
|
||||
/*
|
||||
ASSERT( psDroid->psActionTarget[0] != NULL,
|
||||
"actionUpdateUnit: target is NULL while attacking" );
|
||||
|
||||
// don't wan't formations for this one
|
||||
if (psDroid->sMove.psFormation)
|
||||
{
|
||||
formationLeave(psDroid->sMove.psFormation, (BASE_OBJECT *)psDroid);
|
||||
psDroid->sMove.psFormation = NULL;
|
||||
}
|
||||
|
||||
//check the target hasn't become one the same player ID - Electronic Warfare
|
||||
if ((electronicDroid(psDroid) && (psDroid->player == psDroid->psActionTarget[0]->player)) ||
|
||||
(validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], 0)))// ||
|
||||
// (secondaryGetState(psDroid, DSO_ATTACK_LEVEL, &state) && (state != DSS_ALEV_ALWAYS)))
|
||||
{
|
||||
psDroid->psActionTarget[0] = NULL;
|
||||
psDroid->action = DACTION_NONE;
|
||||
}
|
||||
else if (actionVisibleTarget(psDroid, psDroid->psActionTarget[0], 0) &&
|
||||
actionInAttackRange(psDroid, psDroid->psActionTarget[0], 0))
|
||||
{
|
||||
for(i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
if ( (num_weapons & (1 << (i+1))) &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], i) &&
|
||||
actionVisibleTarget(psDroid, psDroid->psActionTarget[0], i) )
|
||||
{
|
||||
psWeapStats = asWeaponStats + psDroid->asWeaps[i].nStat;
|
||||
if (!psWeapStats->rotate)
|
||||
{
|
||||
// no rotating turret - need to check aligned with target
|
||||
targetDir = (SDWORD)calcDirection(
|
||||
psDroid->x,psDroid->y,
|
||||
psDroid->psActionTarget[0]->x,psDroid->psActionTarget[0]->y);
|
||||
dirDiff = labs(targetDir - (SDWORD)psDroid->direction);
|
||||
}
|
||||
else
|
||||
{
|
||||
dirDiff = 0;
|
||||
}
|
||||
if (dirDiff > FIXED_TURRET_DIR)
|
||||
{
|
||||
if (psDroid->sMove.Status != MOVESHUFFLE)
|
||||
{
|
||||
psDroid->action = DACTION_ROTATETOATTACK;
|
||||
moveTurnDroid(psDroid, psDroid->psActionTarget[0]->x,psDroid->psActionTarget[0]->y);
|
||||
}
|
||||
}
|
||||
else if (!psWeapStats->rotate ||
|
||||
/*actionTargetTurret((BASE_OBJECT*)psDroid, psDroid->psActionTarget,
|
||||
&(psDroid->turretRotation), &(psDroid->turretPitch),
|
||||
psDroid->turretRotRate, (SWORD)(psDroid->turretRotRate/2),
|
||||
//asWeaponStats[psDroid->asWeaps->nStat].direct))
|
||||
proj_Direct(&asWeaponStats[psDroid->asWeaps->nStat]),
|
||||
bInvert))*/
|
||||
/*
|
||||
actionTargetTurret((BASE_OBJECT*)psDroid, psDroid->psActionTarget[0],
|
||||
&(psDroid->turretRotation[i]), &(psDroid->turretPitch[i]),
|
||||
&asWeaponStats[psDroid->asWeaps[i].nStat],
|
||||
bInvert,i))
|
||||
|
||||
/* In range - fire !!! */
|
||||
/*
|
||||
combFire(&psDroid->asWeaps[i], (BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], i);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( ( (psDroid->order == DORDER_ATTACKTARGET || psDroid->order == DORDER_FIRESUPPORT) &&
|
||||
secondaryGetState(psDroid, DSO_HALTTYPE, &state) && (state == DSS_HALT_HOLD) ) ||
|
||||
( !vtolDroid(psDroid) &&
|
||||
orderStateObj(psDroid, DORDER_FIRESUPPORT, &psTarget) && (psTarget->type == OBJ_STRUCTURE) ) )
|
||||
{
|
||||
// don't move if on hold or firesupport for a sensor tower
|
||||
psDroid->action = DACTION_NONE; // holding, cancel the order.
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->action = DACTION_MOVETOATTACK; // out of range - chase it
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
*/
|
||||
case DACTION_ATTACK_M:
|
||||
ASSERT( psDroid->psActionTarget[0] != NULL,
|
||||
"actionUpdateUnit: target is NULL while attacking" );
|
||||
|
@ -1667,7 +1579,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
for(i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
//Skip main turret target changes
|
||||
if (i > 0 &&
|
||||
if (i > 0 &&
|
||||
psDroid->psActionTarget[i] == NULL &&
|
||||
aiChooseTarget((BASE_OBJECT*)psDroid, &psTargets[i], i, FALSE))
|
||||
{
|
||||
|
@ -1683,8 +1595,8 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
psActionTarget = psDroid->psActionTarget[0];
|
||||
}
|
||||
|
||||
if ( (num_weapons & (1 << (i+1))) &&
|
||||
actionVisibleTarget(psDroid, psActionTarget, i) &&
|
||||
if ( (num_weapons & (1 << (i+1))) &&
|
||||
actionVisibleTarget(psDroid, psActionTarget, i) &&
|
||||
actionInRange(psDroid, psActionTarget, i))
|
||||
{
|
||||
bHasTarget = TRUE;
|
||||
|
@ -1744,7 +1656,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
|
||||
case DACTION_VTOLATTACK:
|
||||
//Watermelon:uses vtResult
|
||||
if (psDroid->psActionTarget != NULL &&
|
||||
if (psDroid->psActionTarget != NULL &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], 0))
|
||||
{
|
||||
//check if vtol that its armed
|
||||
|
@ -1761,7 +1673,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
|
||||
for(i = 0;i <psDroid->numWeaps;i++)
|
||||
{
|
||||
if ( (num_weapons & (1 << (i+1))) &&
|
||||
if ( (num_weapons & (1 << (i+1))) &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], i) )
|
||||
{
|
||||
//Watermelon:I moved psWeapStats flag update there
|
||||
|
@ -1844,7 +1756,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
break;
|
||||
|
||||
case DACTION_MOVETOATTACK:
|
||||
debug( LOG_NEVER, "MOVETOATTACK - %x\n",psDroid);
|
||||
debug( LOG_NEVER, "MOVETOATTACK - %p\n",psDroid);
|
||||
|
||||
// don't wan't formations for this one
|
||||
if (psDroid->sMove.psFormation)
|
||||
|
@ -1878,8 +1790,8 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
{
|
||||
for(i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
if( (num_weapons & (1 << (i+1))) &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], i) &&
|
||||
if( (num_weapons & (1 << (i+1))) &&
|
||||
validTarget((BASE_OBJECT *)psDroid, psDroid->psActionTarget[0], i) &&
|
||||
actionVisibleTarget(psDroid, psDroid->psActionTarget[0], i) )
|
||||
{
|
||||
psWeapStats = asWeaponStats + psDroid->asWeaps[i].nStat;
|
||||
|
@ -2364,8 +2276,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
psNextWreck = checkForWreckage(psDroid);
|
||||
if (psNextWreck)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psNextWreck;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psNextWreck}};
|
||||
orderDroidObj(psDroid, DORDER_CLEARWRECK, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
@ -2612,7 +2523,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
}
|
||||
//}
|
||||
break;
|
||||
case DACTION_DESTRUCT:
|
||||
case DACTION_DESTRUCT:
|
||||
if ((psDroid->actionStarted + ACTION_DESTRUCT_TIME) < gameTime)
|
||||
{
|
||||
if ( psDroid->droidType == DROID_PERSON )
|
||||
|
@ -2792,7 +2703,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
ASSERT( FALSE, "actionUpdateUnit: unknown action" );
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if (psDroid->action != DACTION_MOVEFIRE &&
|
||||
psDroid->action != DACTION_ATTACK &&
|
||||
psDroid->action != DACTION_MOVETOATTACK &&
|
||||
|
@ -2823,7 +2734,7 @@ void actionUpdateDroid(DROID *psDroid)
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Overall action function that is called by the specific action functions */
|
||||
|
@ -2929,7 +2840,7 @@ static void actionDroidBase(DROID *psDroid, DROID_ACTION_DATA *psAction)
|
|||
psDroid->actionX = psDroid->x;
|
||||
psDroid->actionY = psDroid->y;
|
||||
|
||||
// multiple target data
|
||||
// multiple target data
|
||||
for (i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psActionTarget[i] = psAction->psObj[i];
|
||||
|
@ -3263,6 +3174,8 @@ void moveToRearm(DROID *psDroid)
|
|||
psStruct = findNearestReArmPad(psDroid, psDroid->psBaseStruct, FALSE);
|
||||
if (psStruct)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psStruct}};
|
||||
|
||||
// note a base rearm pad if the vtol doesn't have one
|
||||
if (psDroid->psBaseStruct == NULL)
|
||||
{
|
||||
|
@ -3274,15 +3187,11 @@ void moveToRearm(DROID *psDroid)
|
|||
{
|
||||
// no order set - use the rearm order to ensure the unit goes back
|
||||
// to the landing pad
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
orderDroidObj(psDroid, DORDER_REARM, &oaInfo);
|
||||
chosen=1;
|
||||
}
|
||||
else
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
actionDroidObj(psDroid, DACTION_MOVETOREARM, &oaInfo);
|
||||
chosen=2;
|
||||
}
|
||||
|
|
15
src/ai.c
15
src/ai.c
|
@ -136,9 +136,9 @@ SDWORD aiBestNearestTarget(DROID *psDroid, BASE_OBJECT **ppsObj, int weapon_slot
|
|||
if(friendlyDroid->order != DORDER_ATTACK)
|
||||
{
|
||||
//(WEAPON_STATS *)(asWeaponStats + ((DROID *)friendlyObj)->asWeaps[0].nStat)->;
|
||||
|
||||
|
||||
// make sure target is near enough
|
||||
if(dirtySqrt(psDroid->x,psDroid->y,tempTarget->x,tempTarget->y)
|
||||
if(dirtySqrt(psDroid->x,psDroid->y,tempTarget->x,tempTarget->y)
|
||||
< (psDroid->sensorRange * 2))
|
||||
{
|
||||
targetInQuestion = tempTarget; //consider this target
|
||||
|
@ -888,9 +888,9 @@ void aiUpdateDroid(DROID *psDroid)
|
|||
updateTarget = FALSE;
|
||||
}
|
||||
|
||||
/* Don't update target if we are sent to attack and reached
|
||||
/* Don't update target if we are sent to attack and reached
|
||||
attack destination (attacking our target) */
|
||||
if((orderState(psDroid, DORDER_ATTACK) || orderState(psDroid, DORDER_ATTACK_M))
|
||||
if((orderState(psDroid, DORDER_ATTACK) || orderState(psDroid, DORDER_ATTACK_M))
|
||||
&& (psDroid->psActionTarget[0] == psDroid->psTarget[0]))
|
||||
{
|
||||
updateTarget = FALSE;
|
||||
|
@ -978,7 +978,7 @@ void aiUpdateDroid(DROID *psDroid)
|
|||
if((psDroid->numWeaps > 0) && ((psDroid->droidType == DROID_COMMAND) ||
|
||||
!(psDroid->psGroup && (psDroid->psGroup->type == GT_COMMAND)))) //not assigned to commander
|
||||
{
|
||||
if((psDroid->id % TARGET_UPD_SKIP_FRAMES) ==
|
||||
if((psDroid->id % TARGET_UPD_SKIP_FRAMES) ==
|
||||
(frameGetFrameNumber() % TARGET_UPD_SKIP_FRAMES))
|
||||
{
|
||||
(void)updateAttackTarget((BASE_OBJECT*)psDroid, 0);
|
||||
|
@ -1146,8 +1146,7 @@ BOOL updateAttackTarget(BASE_OBJECT * psAttacker, SDWORD weapon_slot)
|
|||
{
|
||||
BASE_OBJECT *psBetterTarget=NULL;
|
||||
DROID *psDroid;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
|
||||
psBetterTarget = NULL;
|
||||
|
||||
if(aiChooseTarget(psAttacker, &psBetterTarget, weapon_slot, TRUE)) //update target
|
||||
|
@ -1162,7 +1161,7 @@ BOOL updateAttackTarget(BASE_OBJECT * psAttacker, SDWORD weapon_slot)
|
|||
orderState(psDroid, DORDER_GUARD) ||
|
||||
orderState(psDroid, DORDER_ATTACKTARGET))
|
||||
{
|
||||
oaInfo.objects[0] = psBetterTarget;
|
||||
DROID_OACTION_INFO oaInfo = {{psBetterTarget}};
|
||||
orderDroidObj((DROID *)psAttacker, DORDER_ATTACKTARGET, &oaInfo);
|
||||
}
|
||||
else //can't override current order
|
||||
|
|
|
@ -64,7 +64,6 @@ void cmdDroidUpdate(void)
|
|||
void cmdDroidAddDroid(DROID *psCommander, DROID *psDroid)
|
||||
{
|
||||
DROID_GROUP *psGroup;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
if (psCommander->psGroup == NULL)
|
||||
{
|
||||
|
@ -78,6 +77,8 @@ void cmdDroidAddDroid(DROID *psCommander, DROID *psDroid)
|
|||
|
||||
if (grpNumMembers(psCommander->psGroup) < cmdDroidMaxGroup(psCommander))
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT*)psCommander}};
|
||||
|
||||
grpJoin(psCommander->psGroup, psDroid);
|
||||
psDroid->group = UBYTE_MAX;
|
||||
|
||||
|
@ -87,7 +88,6 @@ void cmdDroidAddDroid(DROID *psCommander, DROID *psDroid)
|
|||
secondarySetState(psDroid, DSO_ATTACK_LEVEL, (SECONDARY_STATE)(psCommander->secondaryOrder & DSS_ALEV_MASK));
|
||||
secondarySetState(psDroid, DSO_HALTTYPE, (SECONDARY_STATE)(psCommander->secondaryOrder & DSS_HALT_MASK));
|
||||
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psCommander;
|
||||
orderDroidObj(psDroid, DORDER_GUARD, &oaInfo);
|
||||
}
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@ void combFire(WEAPON *psWeap, BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget, in
|
|||
/* Check we can see the target */
|
||||
if ( (psAttacker->type == OBJ_DROID) &&
|
||||
!vtolDroid((DROID *)psAttacker) &&
|
||||
(proj_Direct(psStats) ||
|
||||
(proj_Direct(psStats) ||
|
||||
actionInsideMinRange(psDroid, psTarget, weapon_slot)) )
|
||||
{
|
||||
if(!visibleObjWallBlock(psAttacker, psTarget))
|
||||
|
@ -570,8 +570,7 @@ void counterBatteryFire(BASE_OBJECT *psAttacker, BASE_OBJECT *psTarget)
|
|||
//inform viewer of target
|
||||
if (psViewer->type == OBJ_DROID)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = psAttacker;
|
||||
DROID_OACTION_INFO oaInfo = {{psAttacker}};
|
||||
orderDroidObj((DROID *)psViewer, DORDER_OBSERVE, &oaInfo);
|
||||
}
|
||||
else if (psViewer->type == OBJ_STRUCTURE)
|
||||
|
|
103
src/display.c
103
src/display.c
|
@ -2044,13 +2044,12 @@ FEATURE *psFeature;
|
|||
OBJECT_POSITION *psLocation;
|
||||
UDWORD i;
|
||||
SELECTION_TYPE selection;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
|
||||
/* Don't process if in game options are on screen */
|
||||
if(InGameOpUp == TRUE OR widgGetFromID(psWScreen,INTINGAMEOP))
|
||||
{
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2058,16 +2057,12 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
if(driveModeActive() && !driveTacticalActive())
|
||||
{
|
||||
psClickedOn = targetGetCurrent();
|
||||
//if(psClickedOn != NULL) {
|
||||
//printf("%p\n",psClickedOn);
|
||||
//}
|
||||
}
|
||||
else
|
||||
{
|
||||
psClickedOn = mouseTarget();
|
||||
}
|
||||
|
||||
//DBPRINTF(("dealWithLMB() : %p\n",psClickedOn));
|
||||
/* If not NULL, then it's a droid or a structure */
|
||||
if(psClickedOn != NULL)
|
||||
{
|
||||
|
@ -2080,7 +2075,6 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
psDroid = (DROID *) psClickedOn;
|
||||
if(psDroid->player == selectedPlayer)
|
||||
{
|
||||
|
||||
if (ctrlShiftDown())
|
||||
{
|
||||
// select/deselect etc. the droid
|
||||
|
@ -2091,19 +2085,19 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
{
|
||||
if (selection == SC_INVALID)
|
||||
{
|
||||
//in multiPlayer mode we RMB to get the interface up
|
||||
if (bMultiPlayer)
|
||||
{
|
||||
psDroid->selected = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
intResetScreen(FALSE);
|
||||
if(!getWidgetsStatus())
|
||||
{
|
||||
setWidgetsStatus(TRUE);
|
||||
}
|
||||
addTransporterInterface(psDroid, FALSE);
|
||||
//in multiPlayer mode we RMB to get the interface up
|
||||
if (bMultiPlayer)
|
||||
{
|
||||
psDroid->selected = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
intResetScreen(FALSE);
|
||||
if(!getWidgetsStatus())
|
||||
{
|
||||
setWidgetsStatus(TRUE);
|
||||
}
|
||||
addTransporterInterface(psDroid, FALSE);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2112,18 +2106,7 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
FeedbackOrderGiven();
|
||||
}
|
||||
}
|
||||
/*
|
||||
else if (psDroid->droidType == DROID_SENSOR &&
|
||||
selection == SC_DROID_INDIRECT &&
|
||||
!(keyDown(KEY_LCTRL) || keyDown(KEY_RCTRL)))
|
||||
// !(keyDown(KEY_LSHIFT) || keyDown(KEY_RSHIFT)))
|
||||
{
|
||||
orderSelectedObj(selectedPlayer, psClickedOn);
|
||||
}
|
||||
*/
|
||||
else
|
||||
|
||||
if (keyDown(KEY_LALT) || keyDown(KEY_RALT))
|
||||
else if (keyDown(KEY_LALT) || keyDown(KEY_RALT))
|
||||
{
|
||||
// try to attack your own unit
|
||||
for(psCurr=apsDroidLists[selectedPlayer]; psCurr; psCurr = psCurr->psNext)
|
||||
|
@ -2131,8 +2114,8 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
if ((psCurr != psDroid) && // can't attack yourself
|
||||
(psCurr->selected))
|
||||
{
|
||||
if ((psCurr->droidType == DROID_WEAPON) ||
|
||||
(psCurr->droidType == DROID_CYBORG) ||
|
||||
if ((psCurr->droidType == DROID_WEAPON) ||
|
||||
(psCurr->droidType == DROID_CYBORG) ||
|
||||
(psCurr->droidType == DROID_CYBORG_SUPER) ||
|
||||
(psCurr->droidType == DROID_COMMAND))
|
||||
{
|
||||
|
@ -2220,11 +2203,11 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
for(psCurr = apsDroidLists[selectedPlayer]; psCurr; psCurr = psCurr->psNext)
|
||||
{
|
||||
//must be indirect weapon droid or VTOL weapon droid
|
||||
if( (psCurr->droidType == DROID_WEAPON) AND (psCurr->selected)
|
||||
//AND (psCurr->numWeaps) AND
|
||||
AND (psCurr->asWeaps[0].nStat > 0) AND
|
||||
((!proj_Direct(asWeaponStats + psCurr->asWeaps[0].nStat)) OR
|
||||
vtolDroid(psCurr)) AND
|
||||
if( (psCurr->droidType == DROID_WEAPON) &&
|
||||
(psCurr->selected)&&
|
||||
(psCurr->asWeaps[0].nStat > 0) &&
|
||||
((!proj_Direct(asWeaponStats + psCurr->asWeaps[0].nStat)) ||
|
||||
vtolDroid(psCurr)) &&
|
||||
droidSensorDroidWeapon((BASE_OBJECT *)psDroid, psCurr))
|
||||
{
|
||||
//bWeapDroidSelected = TRUE;
|
||||
|
@ -2242,8 +2225,8 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
}
|
||||
}
|
||||
|
||||
//cannot have LasSat struct and Droid selected
|
||||
bLasSatStruct = FALSE;
|
||||
//cannot have LasSat struct and Droid selected
|
||||
bLasSatStruct = FALSE;
|
||||
|
||||
// select/deselect etc. the droid
|
||||
if(!ctrlShiftDown())
|
||||
|
@ -2259,14 +2242,12 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
// addConsoleMessage("Clicked on another player's droid",DEFAULT_JUSTIFY);
|
||||
orderSelectedObjAdd(selectedPlayer,psClickedOn, ctrlShiftDown());
|
||||
|
||||
//lasSat structure can select a target - in multiPlayer only
|
||||
if (bMultiPlayer AND bLasSatStruct)
|
||||
{
|
||||
if(aiCheckAlliances(selectedPlayer,psClickedOn->player) == FALSE)
|
||||
{
|
||||
orderStructureObj(selectedPlayer,psClickedOn);
|
||||
}
|
||||
}
|
||||
//lasSat structure can select a target - in multiPlayer only
|
||||
if (bMultiPlayer && bLasSatStruct &&
|
||||
aiCheckAlliances(selectedPlayer,psClickedOn->player) == FALSE)
|
||||
{
|
||||
orderStructureObj(selectedPlayer,psClickedOn);
|
||||
}
|
||||
|
||||
FeedbackOrderGiven();
|
||||
driveDisableTactical();
|
||||
|
@ -2286,8 +2267,8 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
printStructureInfo(psStructure);
|
||||
|
||||
/* Got to be built. Also, you can't 'select' derricks */
|
||||
if( (psStructure->status==SS_BUILT) AND (psStructure->pStructureType->type !=
|
||||
REF_RESOURCE_EXTRACTOR) )
|
||||
if( (psStructure->status==SS_BUILT) &&
|
||||
(psStructure->pStructureType->type != REF_RESOURCE_EXTRACTOR) )
|
||||
{
|
||||
//if selected object is an upgradeable structure then don't
|
||||
//inform the interface (if not fully upgraded) and a any droid
|
||||
|
@ -2330,19 +2311,17 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
}
|
||||
|
||||
}
|
||||
else if ( (psStructure->status==SS_BUILT) AND (psStructure->pStructureType->type ==
|
||||
REF_RESOURCE_EXTRACTOR) )
|
||||
else if ( (psStructure->status==SS_BUILT) &&
|
||||
(psStructure->pStructureType->type == REF_RESOURCE_EXTRACTOR) &&
|
||||
selection == SC_INVALID)
|
||||
{
|
||||
if (selection == SC_INVALID)
|
||||
/* Clear old building selection(s) - should only be one */
|
||||
for(psSLoop = apsStructLists[selectedPlayer]; psSLoop; psSLoop = psSLoop->psNext)
|
||||
{
|
||||
/* Clear old building selection(s) - should only be one */
|
||||
for(psSLoop = apsStructLists[selectedPlayer]; psSLoop; psSLoop = psSLoop->psNext)
|
||||
{
|
||||
psSLoop->selected = FALSE;
|
||||
}
|
||||
/* Establish new one */
|
||||
psStructure->selected = TRUE;
|
||||
psSLoop->selected = FALSE;
|
||||
}
|
||||
/* Establish new one */
|
||||
psStructure->selected = TRUE;
|
||||
}
|
||||
if (keyDown(KEY_LALT) || keyDown(KEY_RALT))
|
||||
{
|
||||
|
@ -2400,7 +2379,7 @@ DROID_OACTION_INFO oaInfo = {NULL};
|
|||
//some features are targetable
|
||||
psFeature = (FEATURE *) psClickedOn;
|
||||
//check for constructor droid trying to remove wrecked building first
|
||||
if (psFeature->psStats->subType == FEAT_BUILD_WRECK AND
|
||||
if (psFeature->psStats->subType == FEAT_BUILD_WRECK &&
|
||||
(constructorDroidSelected(selectedPlayer) != NULL) )
|
||||
{
|
||||
orderSelectedObjAdd(selectedPlayer,psClickedOn, ctrlShiftDown());
|
||||
|
|
|
@ -341,6 +341,7 @@ void orderGroupLoc(DROID_GROUP *psGroup, DROID_ORDER order, UDWORD x, UDWORD y)
|
|||
void orderGroupObj(DROID_GROUP *psGroup, DROID_ORDER order, BASE_OBJECT *psObj)
|
||||
{
|
||||
DROID *psCurr;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psObj}};
|
||||
|
||||
ASSERT( PTRVALID(psGroup, sizeof(DROID_GROUP)),
|
||||
"orderGroupObj: invalid droid group" );
|
||||
|
@ -352,8 +353,6 @@ void orderGroupObj(DROID_GROUP *psGroup, DROID_ORDER order, BASE_OBJECT *psObj)
|
|||
|
||||
for(psCurr = psGroup->psList; psCurr; psCurr = psCurr->psGrpNext)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
orderDroidObj(psCurr, order, &oaInfo);
|
||||
}
|
||||
|
||||
|
@ -363,8 +362,6 @@ void orderGroupObj(DROID_GROUP *psGroup, DROID_ORDER order, BASE_OBJECT *psObj)
|
|||
{
|
||||
for(psCurr = psGroup->psList; psCurr; psCurr = psCurr->psGrpNext)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
orderDroidObj(psCurr, order, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -170,14 +170,14 @@ BOOL recvVtolRearm(NETMSG *pMsg)
|
|||
UDWORD id,ids;
|
||||
STRUCTURE *psStruct = NULL;
|
||||
UBYTE i;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
NetGet(pMsg,0,player);
|
||||
NetGet(pMsg,1,id);
|
||||
NetGet(pMsg,5,chosen);
|
||||
NetGet(pMsg,6,ids);
|
||||
|
||||
if(!IdToDroid(id,player,&psDroid)) //find droid.
|
||||
if(!IdToDroid(id,player,&psDroid))// find droid.
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -188,7 +188,7 @@ BOOL recvVtolRearm(NETMSG *pMsg)
|
|||
NetGet(pMsg,(11 + i),amm[i]);
|
||||
}
|
||||
|
||||
if(ids) // find rearm pad.
|
||||
if(ids)// find rearm pad.
|
||||
{
|
||||
psStruct = IdToStruct(id,psDroid->player);
|
||||
if(!psStruct)
|
||||
|
@ -210,20 +210,20 @@ BOOL recvVtolRearm(NETMSG *pMsg)
|
|||
turnOffMultiMsg(TRUE);
|
||||
switch(chosen)
|
||||
{
|
||||
case 1:
|
||||
psDroid->order = DORDER_NONE;
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
orderDroidObj(psDroid, DORDER_REARM, &oaInfo);
|
||||
break;
|
||||
case 2:
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
actionDroidObj(psDroid,DACTION_MOVETOREARM, &oaInfo);
|
||||
break;
|
||||
case 3:
|
||||
orderDroid( psDroid, DORDER_RTB );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
case 1:
|
||||
psDroid->order = DORDER_NONE;
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
orderDroidObj(psDroid, DORDER_REARM, &oaInfo);
|
||||
break;
|
||||
case 2:
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
actionDroidObj(psDroid,DACTION_MOVETOREARM, &oaInfo);
|
||||
break;
|
||||
case 3:
|
||||
orderDroid( psDroid, DORDER_RTB );
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
turnOffMultiMsg(FALSE);
|
||||
|
||||
|
@ -974,20 +974,19 @@ BOOL recvDroidInfo(NETMSG *pMsg)
|
|||
|
||||
// ////////////////////////////////////////////////////////////////////////////
|
||||
// process droid order
|
||||
static void ProcessDroidOrder(DROID *psDroid, DROID_ORDER order,UDWORD x, UDWORD y,
|
||||
OBJECT_TYPE desttype,UDWORD destid)
|
||||
static void ProcessDroidOrder(DROID *psDroid, DROID_ORDER order, UDWORD x, UDWORD y, OBJECT_TYPE desttype, UDWORD destid)
|
||||
{
|
||||
UDWORD i;
|
||||
DROID *pD;
|
||||
STRUCTURE *pS;
|
||||
FEATURE *pF;
|
||||
BASE_OBJECT *psObj= NULL;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
BASE_OBJECT *psObj = NULL;
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
if(destid==0 && desttype==0) // target is a location
|
||||
{
|
||||
if( abs(psDroid->x - x )< (TILE_UNITS/2)
|
||||
&& abs(psDroid->y - y )< (TILE_UNITS/2) ) // don't bother if close.
|
||||
if( abs(psDroid->x - x) < (TILE_UNITS/2)
|
||||
&& abs(psDroid->y - y) < (TILE_UNITS/2) ) // don't bother if close.
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
@ -1035,7 +1034,7 @@ static void ProcessDroidOrder(DROID *psDroid, DROID_ORDER order,UDWORD x, UDWO
|
|||
}
|
||||
break;
|
||||
|
||||
case OBJ_BULLET: // shouldn't be getting this!
|
||||
case OBJ_BULLET: // shouldn't be getting this!
|
||||
debug( LOG_ERROR, "multibot: order specified destination as a bullet. what am i to do??" );
|
||||
abort();
|
||||
break;
|
||||
|
|
|
@ -445,16 +445,15 @@ static void highLevelDroidUpdate(DROID *psDroid,UDWORD x, UDWORD y,
|
|||
UDWORD state, UDWORD order,
|
||||
BASE_OBJECT *psTarget,UDWORD numKills)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
// update kill rating.
|
||||
psDroid->numKills = (UWORD)numKills;
|
||||
|
||||
// remote droid is attacking, not here tho!
|
||||
if(order == DORDER_ATTACK && psDroid->order != DORDER_ATTACK && psTarget)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {{psTarget}};
|
||||
|
||||
turnOffMultiMsg(TRUE);
|
||||
oaInfo.objects[0] = psTarget;
|
||||
orderDroidObj(psDroid, DORDER_ATTACK, &oaInfo);
|
||||
turnOffMultiMsg(FALSE);
|
||||
}
|
||||
|
|
280
src/order.c
280
src/order.c
|
@ -101,6 +101,23 @@ void initRunData(void)
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
static void clearTargets(DROID * psDroid)
|
||||
{
|
||||
unsigned int i;
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for(i = 0; i < psDroid->numWeaps; i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//FIXME: unit doesn't shoot while returning to the guard position
|
||||
// check whether a droid has to move back to the thing it is guarding
|
||||
void orderCheckGuardPosition(DROID *psDroid, SDWORD range)
|
||||
|
@ -270,41 +287,32 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
UBYTE i;
|
||||
float radToAction;
|
||||
SDWORD xoffset,yoffset;
|
||||
DROID_OACTION_INFO oaInfo= {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
// clear the target if it has died
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for (i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
if (psDroid->psTarget[i])
|
||||
if (psDroid->psTarget[i] && psDroid->psTarget[i]->died)
|
||||
{
|
||||
if (psDroid->psTarget[i]->died)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (psDroid->psTarget[0])
|
||||
if (psDroid->psTarget[0] && psDroid->psTarget[0]->died)
|
||||
{
|
||||
if (psDroid->psTarget[0]->died)
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
//clear its base struct if its died
|
||||
if (psDroid->psBaseStruct)
|
||||
{
|
||||
if (psDroid->psBaseStruct->died)
|
||||
{
|
||||
psDroid->psBaseStruct = NULL;
|
||||
}
|
||||
}
|
||||
//clear its base struct if its died
|
||||
if (psDroid->psBaseStruct && psDroid->psBaseStruct->died)
|
||||
{
|
||||
psDroid->psBaseStruct = NULL;
|
||||
}
|
||||
|
||||
// check for died objects in the list
|
||||
orderCheckList(psDroid);
|
||||
|
@ -324,8 +332,6 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
psDroid->psGroup->type == GT_COMMAND &&
|
||||
(psDroid->psTarStats[0] != (BASE_STATS *) structGetDemolishStat())) // stop the constructor auto repairing when it is about to demolish
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psDroid->psGroup->psCommander;
|
||||
orderDroidObj(psDroid, DORDER_GUARD, &oaInfo);
|
||||
}
|
||||
|
@ -348,17 +354,14 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
else if ((psDroid->player == selectedPlayer) &&
|
||||
(psDroid->psTarStats[0] != (BASE_STATS *) structGetDemolishStat()) && // stop the constructor auto repairing when it is about to demolish
|
||||
secondaryGetState(psDroid, DSO_HALTTYPE, &state) &&
|
||||
!vtolDroid(psDroid))
|
||||
!vtolDroid(psDroid) &&
|
||||
state == DSS_HALT_GUARD)
|
||||
{
|
||||
if (state == DSS_HALT_GUARD)
|
||||
{
|
||||
actionX = psDroid->x;
|
||||
actionY = psDroid->y;
|
||||
turnOffMultiMsg(TRUE);
|
||||
orderDroidLoc(psDroid, DORDER_GUARD, actionX,actionY);
|
||||
turnOffMultiMsg(FALSE);
|
||||
|
||||
}
|
||||
actionX = psDroid->x;
|
||||
actionY = psDroid->y;
|
||||
turnOffMultiMsg(TRUE);
|
||||
orderDroidLoc(psDroid, DORDER_GUARD, actionX,actionY);
|
||||
turnOffMultiMsg(FALSE);
|
||||
}
|
||||
|
||||
//repair droids default to repairing droids within a given range
|
||||
|
@ -366,14 +369,10 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
DROID_CYBORG_REPAIR) && !orderState(psDroid, DORDER_GUARD))
|
||||
{
|
||||
psObj = checkForRepairRange(psDroid,NULL);
|
||||
if (psObj)
|
||||
if (psObj && (!bMultiPlayer || myResponsibility(psDroid->player)))
|
||||
{
|
||||
if(!bMultiPlayer || myResponsibility(psDroid->player))
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = psObj;
|
||||
orderDroidObj(psDroid, DORDER_DROIDREPAIR, &oaInfo);
|
||||
}
|
||||
oaInfo.objects[0] = psObj;
|
||||
orderDroidObj(psDroid, DORDER_DROIDREPAIR, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -385,14 +384,10 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
(psDroid->psTarStats[0] != (BASE_STATS *) structGetDemolishStat()))
|
||||
{
|
||||
psObj = checkForDamagedStruct(psDroid,NULL);
|
||||
if (psObj)
|
||||
if (psObj && (!bMultiPlayer || myResponsibility(psDroid->player)))
|
||||
{
|
||||
if(!bMultiPlayer || myResponsibility(psDroid->player))
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = psObj;
|
||||
orderDroidObj(psDroid, DORDER_REPAIR, &oaInfo);
|
||||
}
|
||||
oaInfo.objects[0] = psObj;
|
||||
orderDroidObj(psDroid, DORDER_REPAIR, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -404,59 +399,39 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
|
||||
/* clear order */
|
||||
psDroid->order = DORDER_NONE;
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for(i = 0;i <psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
psDroid->psTarStats[0] = NULL;
|
||||
}
|
||||
break;
|
||||
case DORDER_TRANSPORTOUT:
|
||||
if (psDroid->action == DACTION_NONE)
|
||||
{
|
||||
//if moving droids to safety and still got some droids left don't do callback
|
||||
if (psDroid->player == selectedPlayer AND getDroidsToSafetyFlag() AND
|
||||
missionDroidsRemaining(selectedPlayer))
|
||||
{
|
||||
//move droids in Transporter into holding list
|
||||
moveDroidsToSafety(psDroid);
|
||||
//we need the transporter to just sit off world for a while...
|
||||
orderDroid( psDroid, DORDER_TRANSPORTIN );
|
||||
/* set action transporter waits for timer */
|
||||
actionDroid( psDroid, DACTION_TRANSPORTWAITTOFLYIN );
|
||||
//if moving droids to safety and still got some droids left don't do callback
|
||||
if (psDroid->player == selectedPlayer && getDroidsToSafetyFlag() &&
|
||||
missionDroidsRemaining(selectedPlayer))
|
||||
{
|
||||
//move droids in Transporter into holding list
|
||||
moveDroidsToSafety(psDroid);
|
||||
//we need the transporter to just sit off world for a while...
|
||||
orderDroid( psDroid, DORDER_TRANSPORTIN );
|
||||
/* set action transporter waits for timer */
|
||||
actionDroid( psDroid, DACTION_TRANSPORTWAITTOFLYIN );
|
||||
|
||||
missionSetReinforcementTime( gameTime );
|
||||
missionSetReinforcementTime( gameTime );
|
||||
|
||||
//don't do this until waited for the required time
|
||||
//fly Transporter back to get some more droids
|
||||
//orderDroidLoc( psDroid, DORDER_TRANSPORTIN,
|
||||
// getLandingX(selectedPlayer), getLandingY(selectedPlayer));
|
||||
}
|
||||
else
|
||||
{
|
||||
//don't do this until waited for the required time
|
||||
//fly Transporter back to get some more droids
|
||||
//orderDroidLoc( psDroid, DORDER_TRANSPORTIN,
|
||||
// getLandingX(selectedPlayer), getLandingY(selectedPlayer));
|
||||
}
|
||||
else
|
||||
{
|
||||
//the script can call startMission for this callback for offworld missions
|
||||
eventFireCallbackTrigger((TRIGGER_TYPE)CALL_START_NEXT_LEVEL);
|
||||
|
||||
/* clear order */
|
||||
psDroid->order = DORDER_NONE;
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for(i = 0;i <psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
psDroid->psTarStats[0] = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -467,17 +442,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
{
|
||||
/* clear order */
|
||||
psDroid->order = DORDER_NONE;
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for(i = 0;i <psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
psDroid->psTarStats[0] = NULL;
|
||||
|
||||
//FFS! You only wan't to do this if the droid being tracked IS the transporter! Not all the time!
|
||||
|
@ -517,17 +482,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
if (psDroid->action == DACTION_NONE)
|
||||
{
|
||||
psDroid->order = DORDER_NONE;
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for(i = 0;i <psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
psDroid->psTarStats[0] = NULL;
|
||||
}
|
||||
break;
|
||||
|
@ -714,10 +669,6 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
psDroid->order = DORDER_NONE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
else if ((psDroid->action == DACTION_ATTACK) ||
|
||||
(psDroid->action == DACTION_MOVETOATTACK) ||
|
||||
|
@ -902,10 +853,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
{
|
||||
// on hold orders give up
|
||||
psDroid->order = DORDER_NONE;
|
||||
for (i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
}
|
||||
else if (!vtolDroid(psDroid) ||
|
||||
allVtolsRearmed(psDroid))
|
||||
|
@ -965,17 +913,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
transporterAddDroid((DROID *)psDroid->psTarget[0], psDroid);
|
||||
//order the droid to stop so moveUpdateDroid does not process this unit
|
||||
orderDroid(psDroid, DORDER_STOP);
|
||||
if (psDroid->numWeaps > 0)
|
||||
{
|
||||
for (i = 0;i < psDroid->numWeaps;i++)
|
||||
{
|
||||
psDroid->psTarget[i] = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
psDroid->psTarget[0] = NULL;
|
||||
}
|
||||
clearTargets(psDroid);
|
||||
psDroid->psTarStats[0] = NULL;
|
||||
secondarySetState(psDroid, DSO_RETURN_TO_LOC, DSS_NONE);
|
||||
}
|
||||
|
@ -1379,7 +1317,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
}
|
||||
if (psObj)
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
actionDroidObj(psDroid, DACTION_DROIDREPAIR, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
@ -1400,7 +1338,7 @@ void orderUpdateDroid(DROID *psDroid)
|
|||
}
|
||||
if (psObj)
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
actionDroidObj(psDroid, DACTION_REPAIR, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
@ -1646,7 +1584,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
static UDWORD lastFrame;
|
||||
#endif
|
||||
UBYTE i;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
// ASSERT( psDroid->x != 0 && psDroid->y != 0,
|
||||
// "orderUnitBase: unit at (0,0)" );
|
||||
|
@ -1835,7 +1773,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
// If there arn't any weapons on slot 2 stop
|
||||
//if (psDroid->numWeaps == 0)
|
||||
//Watermelon:re-added if(psDroid->numWeaps == 0)
|
||||
if ((psDroid->numWeaps == 0) ||
|
||||
if ((psDroid->numWeaps == 0) ||
|
||||
(psDroid->asWeaps[0].nStat == 0) ||
|
||||
(psDroid->droidType == DROID_TRANSPORTER))
|
||||
{
|
||||
|
@ -1857,15 +1795,15 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
if ((psDroid->order == DORDER_GUARD) &&
|
||||
(psOrder->order == DORDER_ATTACKTARGET))
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
// attacking something while guarding, don't change the order
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
actionDroidObj(psDroid, DACTION_ATTACK, &oaInfo);
|
||||
}
|
||||
else
|
||||
{
|
||||
//cannot attack a Transporter with EW in multiPlayer
|
||||
if (game.maxPlayers > 0 AND electronicDroid(psDroid) AND
|
||||
psOrder->psObj[0]->type == OBJ_DROID AND ((DROID *)psOrder->psObj[0])->
|
||||
if (game.maxPlayers > 0 && electronicDroid(psDroid) &&
|
||||
psOrder->psObj[0]->type == OBJ_DROID && ((DROID *)psOrder->psObj[0])->
|
||||
droidType == DROID_TRANSPORTER)
|
||||
{
|
||||
break;
|
||||
|
@ -1879,7 +1817,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
( (psOrder->order == DORDER_ATTACKTARGET) &&
|
||||
secondaryGetState(psDroid, DSO_HALTTYPE, &state) && (state == DSS_HALT_HOLD) )) )
|
||||
{
|
||||
oaInfo.objects[0] = psDroid->psTarget[0];
|
||||
oaInfo.objects[0] = psDroid->psTarget[0];
|
||||
actionDroidObj(psDroid, DACTION_ATTACK, &oaInfo);
|
||||
}
|
||||
else
|
||||
|
@ -1893,7 +1831,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
// If there arn't any weapons on slot 2 stop
|
||||
//if (psDroid->numWeaps == 0)
|
||||
//Watermelon:re-added if(psDroid->numWeaps == 0)
|
||||
if ((psDroid->numWeaps <= 1) ||
|
||||
if ((psDroid->numWeaps <= 1) ||
|
||||
(psDroid->asWeaps[1].nStat == 0) ||
|
||||
(psDroid->droidType == DROID_TRANSPORTER))
|
||||
{
|
||||
|
@ -2044,51 +1982,32 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
}
|
||||
ASSERT( PTRVALID(psOrder->psStats, sizeof(STRUCTURE_STATS)),
|
||||
"orderUnitBase: invalid structure stats pointer" );
|
||||
//if (getDroidDestination((STRUCTURE_STATS *)psOrder->psStats,
|
||||
// if (getDroidDestination(psOrder->psStats,
|
||||
// psOrder->x,psOrder->y, &actionX,&actionY))
|
||||
{
|
||||
psDroid->order = DORDER_LINEBUILD;
|
||||
psDroid->orderX = psOrder->x;
|
||||
psDroid->orderY = psOrder->y;
|
||||
psDroid->orderX2 = psOrder->x2;
|
||||
psDroid->orderY2 = psOrder->y2;
|
||||
psDroid->psTarget[0] = NULL;
|
||||
psDroid->psTarStats[0] = psOrder->psStats;
|
||||
|
||||
actionDroidLoc(psDroid, DACTION_BUILD, psOrder->x,psOrder->y);
|
||||
|
||||
}
|
||||
|
||||
psDroid->order = DORDER_LINEBUILD;
|
||||
psDroid->orderX = psOrder->x;
|
||||
psDroid->orderY = psOrder->y;
|
||||
psDroid->orderX2 = psOrder->x2;
|
||||
psDroid->orderY2 = psOrder->y2;
|
||||
psDroid->psTarget[0] = NULL;
|
||||
psDroid->psTarStats[0] = psOrder->psStats;
|
||||
actionDroidLoc(psDroid, DACTION_BUILD, psOrder->x,psOrder->y);
|
||||
break;
|
||||
case DORDER_HELPBUILD:
|
||||
// help to build a structure that is starting to be built
|
||||
//if (psDroid->droidType != DROID_CONSTRUCT)
|
||||
if (!(psDroid->droidType == DROID_CONSTRUCT OR
|
||||
psDroid->droidType == DROID_CYBORG_CONSTRUCT))
|
||||
{
|
||||
break;
|
||||
}
|
||||
//if (getDroidDestination(((STRUCTURE *)psOrder->psObj)->pStructureType,
|
||||
// if (getDroidDestination((BASE_STATS *)((STRUCTURE *)psOrder->psObj)->pStructureType,
|
||||
// psOrder->psObj->x,psOrder->psObj->y,
|
||||
// &actionX,&actionY))
|
||||
{
|
||||
psDroid->order = DORDER_HELPBUILD;
|
||||
psDroid->orderX = psOrder->psObj[0]->x;
|
||||
psDroid->orderY = psOrder->psObj[0]->y;
|
||||
// psDroid->orderX = (UWORD)(psOrder->psObj->x + ((STRUCTURE *)psOrder->psObj)->
|
||||
// pStructureType->baseWidth * TILE_UNITS/2);
|
||||
// psDroid->orderY = (UWORD)(psOrder->psObj->y + ((STRUCTURE *)psOrder->psObj)->
|
||||
// pStructureType->baseBreadth * TILE_UNITS/2);
|
||||
psDroid->psTarget[0] = psOrder->psObj[0];
|
||||
psDroid->psTarStats[0]= (BASE_STATS *)((STRUCTURE *)psOrder->psObj[0])->pStructureType;
|
||||
actionDroidLoc(psDroid, DACTION_BUILD, psDroid->orderX,psDroid->orderY);
|
||||
}
|
||||
psDroid->order = DORDER_HELPBUILD;
|
||||
psDroid->orderX = psOrder->psObj[0]->x;
|
||||
psDroid->orderY = psOrder->psObj[0]->y;
|
||||
psDroid->psTarget[0] = psOrder->psObj[0];
|
||||
psDroid->psTarStats[0]= (BASE_STATS *)((STRUCTURE *)psOrder->psObj[0])->pStructureType;
|
||||
actionDroidLoc(psDroid, DACTION_BUILD, psDroid->orderX,psDroid->orderY);
|
||||
break;
|
||||
case DORDER_DEMOLISH:
|
||||
//if (psDroid->droidType != DROID_CONSTRUCT)
|
||||
if (!(psDroid->droidType == DROID_CONSTRUCT OR
|
||||
if (!(psDroid->droidType == DROID_CONSTRUCT ||
|
||||
psDroid->droidType == DROID_CYBORG_CONSTRUCT))
|
||||
{
|
||||
break;
|
||||
|
@ -2123,14 +2042,14 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
}
|
||||
psDroid->order = DORDER_DROIDREPAIR;
|
||||
psDroid->psTarget[0] = psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
actionDroidObj(psDroid, DACTION_DROIDREPAIR, &oaInfo);
|
||||
break;
|
||||
case DORDER_OBSERVE:
|
||||
// keep an object within sensor view
|
||||
psDroid->order = DORDER_OBSERVE;
|
||||
psDroid->psTarget[0] = psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
actionDroidObj(psDroid, DACTION_OBSERVE, &oaInfo);
|
||||
break;
|
||||
case DORDER_FIRESUPPORT:
|
||||
|
@ -2144,7 +2063,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
// let the order update deal with vtol droids
|
||||
if (!vtolDroid(psDroid))
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
actionDroidObj(psDroid, DACTION_FIRESUPPORT, &oaInfo);
|
||||
}
|
||||
|
||||
|
@ -2456,7 +2375,7 @@ void orderDroidBase(DROID *psDroid, DROID_ORDER_DATA *psOrder)
|
|||
psDroid->order = DORDER_REARM;
|
||||
psDroid->psTarget[0] = psOrder->psObj[0];
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psOrder->psObj[0];
|
||||
actionDroidObj( psDroid,DACTION_MOVETOREARM, &oaInfo);
|
||||
actionDroidObj(psDroid,DACTION_MOVETOREARM, &oaInfo);
|
||||
assignVTOLPad(psDroid, (STRUCTURE *)psOrder->psObj[0]);
|
||||
break;
|
||||
case DORDER_CIRCLE:
|
||||
|
@ -3586,8 +3505,6 @@ void orderSelectedObjAdd(UDWORD player, BASE_OBJECT *psObj, BOOL add)
|
|||
{
|
||||
DROID *psCurr, *psDemolish;
|
||||
DROID_ORDER order;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
|
||||
if (!add && bMultiPlayer && SendGroupOrderSelected((UBYTE)player,0,0,psObj) )
|
||||
{ // turn off multiplay messages,since we've send a group one instead.
|
||||
|
@ -3621,10 +3538,10 @@ void orderSelectedObjAdd(UDWORD player, BASE_OBJECT *psObj, BOOL add)
|
|||
psDemolish = psCurr;
|
||||
}
|
||||
// see if the order can be added to the list
|
||||
oaInfo.objects[0] = psObj;
|
||||
if (!(add && orderDroidObjAdd(psCurr, order, &psObj)))
|
||||
{
|
||||
// if not just do it straight off
|
||||
DROID_OACTION_INFO oaInfo = {{psObj}};
|
||||
orderDroidObj(psCurr, order, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
@ -4302,8 +4219,7 @@ BOOL secondarySetState(DROID *psDroid, SECONDARY_ORDER sec, SECONDARY_STATE Stat
|
|||
CurrState |= DSS_RTL_TRANSPORT;
|
||||
if (!orderState(psDroid, DORDER_EMBARK))
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psTransport;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psTransport}};
|
||||
orderDroidObj(psDroid, DORDER_EMBARK, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
@ -4395,12 +4311,10 @@ void secondarySetGroupState(UDWORD player, UDWORD group, SECONDARY_ORDER sec, SE
|
|||
|
||||
for(psCurr = apsDroidLists[player]; psCurr; psCurr=psCurr->psNext)
|
||||
{
|
||||
if (psCurr->group == group)
|
||||
if (psCurr->group == group &&
|
||||
secondaryGetState(psCurr, sec, &currState) && (currState != state))
|
||||
{
|
||||
if (secondaryGetState(psCurr, sec, &currState) && (currState != state))
|
||||
{
|
||||
secondarySetState(psCurr, sec, state);
|
||||
}
|
||||
secondarySetState(psCurr, sec, state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -547,7 +547,7 @@ BOOL scrOrderDroidObj(void)
|
|||
DROID *psDroid;
|
||||
SDWORD order;
|
||||
BASE_OBJECT *psObj;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
if (!stackPopParams(3, ST_DROID, &psDroid, VAL_INT, &order, ST_BASEOBJECT, &psObj))
|
||||
{
|
||||
|
@ -2244,7 +2244,7 @@ BOOL scrActionDroidObj(void)
|
|||
DROID *psDroid;
|
||||
SDWORD action;
|
||||
BASE_OBJECT *psObj;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
DROID_OACTION_INFO oaInfo = {{NULL}};
|
||||
|
||||
if (!stackPopParams(3, ST_DROID, &psDroid, VAL_INT, &action, ST_BASEOBJECT, &psObj))
|
||||
{
|
||||
|
@ -2267,7 +2267,7 @@ BOOL scrActionDroidObj(void)
|
|||
debug(LOG_ERROR, "scrActionDroidObj: this action is not supported");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psObj;
|
||||
actionDroidObj(psDroid, action, &oaInfo);
|
||||
|
||||
|
|
|
@ -3654,8 +3654,7 @@ static void structPlaceDroid(STRUCTURE *psStructure, DROID_TEMPLATE *psTempl,
|
|||
if (idfDroid(psNewDroid) ||
|
||||
vtolDroid(psNewDroid))
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psFact->psCommander;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psFact->psCommander}};
|
||||
orderDroidObj(psNewDroid, DORDER_FIRESUPPORT, &oaInfo);
|
||||
moveToRearm(psNewDroid);
|
||||
}
|
||||
|
@ -3944,7 +3943,6 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
DROID_TEMPLATE *psNextTemplate;
|
||||
#endif
|
||||
UDWORD i;
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
|
||||
ASSERT( PTRVALID(psStructure, sizeof(STRUCTURE)),
|
||||
"aiUpdateStructure: invalid Structure pointer" );
|
||||
|
@ -3953,8 +3951,7 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
{
|
||||
for (i = 0;i < psStructure->numWeaps;i++)
|
||||
{
|
||||
if (psStructure->psTarget[i] &&
|
||||
psStructure->psTarget[i]->died)
|
||||
if (psStructure->psTarget[i] && psStructure->psTarget[i]->died)
|
||||
{
|
||||
psStructure->psTarget[i] = NULL;
|
||||
}
|
||||
|
@ -3962,8 +3959,7 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
}
|
||||
else
|
||||
{
|
||||
if (psStructure->psTarget[0] &&
|
||||
psStructure->psTarget[0]->died)
|
||||
if (psStructure->psTarget[0] && psStructure->psTarget[0]->died)
|
||||
{
|
||||
psStructure->psTarget[0] = NULL;
|
||||
}
|
||||
|
@ -4123,19 +4119,6 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
//check if this structure is due some power
|
||||
if (getLastPowered((BASE_OBJECT *)psStructure))
|
||||
{
|
||||
|
||||
//DBPRINTF(("pStructureType %d\n",psStructure->pStructureType->type));
|
||||
//if(psStructure->pStructureType->type == REF_FACTORY) {
|
||||
// FACTORY *Fact = psStructure->pFunctionality;
|
||||
// DBPRINTF(("Subject %p\n",Fact->psSubject));
|
||||
// DBPRINTF(("Accrued %d\n",Fact->powerAccrued));
|
||||
// DBPRINTF(("Started %d\n",Fact->timeStarted));
|
||||
// DBPRINTF(("Start Hold %d\n",Fact->timeStartHold));
|
||||
// if(Fact->psSubject) {
|
||||
// DBPRINTF(("Required %d\n",((DROID_TEMPLATE*)Fact->psSubject)->powerPoints ));
|
||||
// }
|
||||
//}
|
||||
|
||||
//get some power if necessary
|
||||
if (accruePower((BASE_OBJECT *)psStructure))
|
||||
{
|
||||
|
@ -4272,6 +4255,8 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
}
|
||||
case REF_REARM_PAD:
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psStructure}};
|
||||
|
||||
psReArmPad = (REARM_PAD *) psStructure->pFunctionality;
|
||||
psChosenObj = psReArmPad->psObj;
|
||||
structureMode = REF_REARM_PAD;
|
||||
|
@ -4293,7 +4278,6 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
psDroid = (DROID *)psChosenObj;
|
||||
if (psDroid != NULL)
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStructure;
|
||||
actionDroidObj( psDroid, DACTION_MOVETOREARMPOINT,
|
||||
&oaInfo);
|
||||
}
|
||||
|
@ -4305,7 +4289,6 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
psDroid->sMove.Status == MOVEHOVER ) &&
|
||||
psDroid->action == DACTION_WAITFORREARM )
|
||||
{
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStructure;
|
||||
actionDroidObj( psDroid, DACTION_MOVETOREARMPOINT,
|
||||
&oaInfo);
|
||||
}
|
||||
|
@ -4779,8 +4762,7 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
|
|||
// return a droid to it's command group
|
||||
DROID *psCommander = psDroid->psGroup->psCommander;
|
||||
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psCommander;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psCommander}};
|
||||
// orderDroidLoc(psDroid, DORDER_MOVE, psCommander->x, psCommander->y);
|
||||
orderDroidObj(psDroid, DORDER_GUARD, &oaInfo);
|
||||
}
|
||||
|
@ -9446,8 +9428,7 @@ void ensureRearmPadClear(STRUCTURE *psStruct, DROID *psDroid)
|
|||
(vtolDroid(psCurr))
|
||||
)
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psStruct;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psStruct}};
|
||||
actionDroidObj(psCurr, DACTION_CLEARREARMPAD, &oaInfo);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1155,8 +1155,7 @@ BOOL OrderDroidsToEmbark(void)
|
|||
{
|
||||
if( psDroid->selected && (psDroid->droidType != DROID_TRANSPORTER) )
|
||||
{
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psTransporters[CurrentTransporter];
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psTransporters[CurrentTransporter]}};
|
||||
orderDroidObj(psDroid, DORDER_EMBARK,
|
||||
&oaInfo);
|
||||
|
||||
|
@ -1184,8 +1183,7 @@ BOOL OrderDroidToEmbark(DROID *psDroid)
|
|||
psTransporter = FindATransporter();
|
||||
|
||||
if(psTransporter != NULL) {
|
||||
DROID_OACTION_INFO oaInfo = {NULL};
|
||||
oaInfo.objects[0] = (BASE_OBJECT *)psTransporter;
|
||||
DROID_OACTION_INFO oaInfo = {{(BASE_OBJECT *)psTransporter}};
|
||||
orderDroidObj(psDroid, DORDER_EMBARK, &oaInfo);
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue