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-861f7616d084
master
Dennis Schridde 2006-12-31 19:51:43 +00:00
parent 3f88e8e4f2
commit 8df2091640
12 changed files with 205 additions and 431 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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);
}

View File

@ -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)

View File

@ -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());

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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);
}

View File

@ -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);
}
}
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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;
}