Improve mission code readability.
git-svn-id: svn+ssh://svn.gna.org/svn/warzone/trunk@3723 4a71c877-e1ca-e34f-864e-861f7616d084master
parent
67d38b5298
commit
ac65ebfdfc
629
src/mission.c
629
src/mission.c
|
@ -325,7 +325,6 @@ void initMission(void)
|
||||||
UDWORD inc;
|
UDWORD inc;
|
||||||
|
|
||||||
debug( LOG_NEVER, "***Init Mission ***\n" );
|
debug( LOG_NEVER, "***Init Mission ***\n" );
|
||||||
//mission.type = MISSION_NONE;
|
|
||||||
mission.type = LDS_NONE;
|
mission.type = LDS_NONE;
|
||||||
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
||||||
{
|
{
|
||||||
|
@ -334,12 +333,11 @@ void initMission(void)
|
||||||
mission.apsFeatureLists[inc] = NULL;
|
mission.apsFeatureLists[inc] = NULL;
|
||||||
//mission.apsProxDisp[inc] = NULL;
|
//mission.apsProxDisp[inc] = NULL;
|
||||||
mission.apsFlagPosLists[inc] = NULL;
|
mission.apsFlagPosLists[inc] = NULL;
|
||||||
apsLimboDroids[inc] = NULL;
|
apsLimboDroids[inc] = NULL;
|
||||||
}
|
}
|
||||||
offWorldKeepLists = FALSE;
|
offWorldKeepLists = FALSE;
|
||||||
mission.time = -1;
|
mission.time = -1;
|
||||||
// ffs ab
|
setMissionCountDown();
|
||||||
setMissionCountDown();
|
|
||||||
|
|
||||||
mission.ETA = -1;
|
mission.ETA = -1;
|
||||||
mission.startTime = 0;
|
mission.startTime = 0;
|
||||||
|
@ -360,16 +358,13 @@ void initMission(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
// init the vtol return pos
|
// init the vtol return pos
|
||||||
memset(asVTOLReturnPos, 0, sizeof(Vector2i)*MAX_PLAYERS);
|
memset(asVTOLReturnPos, 0, sizeof(Vector2i) * MAX_PLAYERS);
|
||||||
|
|
||||||
bDroidsToSafety = FALSE;
|
bDroidsToSafety = FALSE;
|
||||||
|
setPlayCountDown(TRUE);
|
||||||
|
|
||||||
|
//start as not cheating!
|
||||||
setPlayCountDown(TRUE);
|
mission.cheatTime = 0;
|
||||||
|
|
||||||
|
|
||||||
//start as not cheating!
|
|
||||||
mission.cheatTime = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// reset the vtol landing pos
|
// reset the vtol landing pos
|
||||||
|
@ -413,14 +408,14 @@ BOOL missionShutDown(void)
|
||||||
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
||||||
{
|
{
|
||||||
apsDroidLists[inc] = mission.apsDroidLists[inc];
|
apsDroidLists[inc] = mission.apsDroidLists[inc];
|
||||||
mission.apsDroidLists[inc] = NULL;
|
mission.apsDroidLists[inc] = NULL;
|
||||||
apsStructLists[inc] = mission.apsStructLists[inc];
|
apsStructLists[inc] = mission.apsStructLists[inc];
|
||||||
mission.apsStructLists[inc] = NULL;
|
mission.apsStructLists[inc] = NULL;
|
||||||
apsFeatureLists[inc] = mission.apsFeatureLists[inc];
|
apsFeatureLists[inc] = mission.apsFeatureLists[inc];
|
||||||
mission.apsFeatureLists[inc] = NULL;
|
mission.apsFeatureLists[inc] = NULL;
|
||||||
//apsProxDisp[inc] = mission.apsProxDisp[inc];
|
//apsProxDisp[inc] = mission.apsProxDisp[inc];
|
||||||
apsFlagPosLists[inc] = mission.apsFlagPosLists[inc];
|
apsFlagPosLists[inc] = mission.apsFlagPosLists[inc];
|
||||||
mission.apsFlagPosLists[inc] = NULL;
|
mission.apsFlagPosLists[inc] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
psMapTiles = mission.psMapTiles;
|
psMapTiles = mission.psMapTiles;
|
||||||
|
@ -480,7 +475,6 @@ void setMissionCountDown(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//BOOL startMission(MISSION_TYPE missionType, char *pGame)
|
|
||||||
BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
{
|
{
|
||||||
BOOL loaded = TRUE;
|
BOOL loaded = TRUE;
|
||||||
|
@ -489,45 +483,12 @@ BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
setPlayerHasLost(FALSE);
|
setPlayerHasLost(FALSE);
|
||||||
setPlayerHasWon(FALSE);
|
setPlayerHasWon(FALSE);
|
||||||
|
|
||||||
/*and win/lose video is obvioulsy not playing*/
|
/* and win/lose video is obvioulsy not playing */
|
||||||
setScriptWinLoseVideo(PLAY_NONE);
|
setScriptWinLoseVideo(PLAY_NONE);
|
||||||
|
|
||||||
//HACKY HACK HACK
|
// this inits the flag so that 'reinforcements have arrived' message isn't played for the first transporter load
|
||||||
//this inits the flag so that 'reinforcements have arrived' message isn't played for the first transporter load
|
initFirstTransporterFlag();
|
||||||
initFirstTransporterFlag();
|
|
||||||
|
|
||||||
// if (missionType == LDS_CAMSTART)
|
|
||||||
// {
|
|
||||||
//only load up one campaign start
|
|
||||||
// if (!DemoStart)
|
|
||||||
// {
|
|
||||||
// DBERROR(("Unable to load mission"));
|
|
||||||
// return FALSE;
|
|
||||||
// }
|
|
||||||
// DemoStart = FALSE;
|
|
||||||
// }
|
|
||||||
// else if (missionType == LDS_MKEEP)
|
|
||||||
// {
|
|
||||||
//only load up one other mission
|
|
||||||
// if (!DemoExpand)
|
|
||||||
// {
|
|
||||||
// DBERROR(("Unable to load mission"));
|
|
||||||
// return FALSE;
|
|
||||||
// }
|
|
||||||
// DemoExpand = FALSE;
|
|
||||||
// }
|
|
||||||
// else if(missionType == LDS_BETWEEN)
|
|
||||||
// {
|
|
||||||
// // do nothing.
|
|
||||||
// }
|
|
||||||
// else
|
|
||||||
// {
|
|
||||||
// //don't want to load up any other type of mission
|
|
||||||
// DBERROR(("Unable to load mission"));
|
|
||||||
// return FALSE;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//if (mission.type != MISSION_NONE)
|
|
||||||
if (mission.type != LDS_NONE)
|
if (mission.type != LDS_NONE)
|
||||||
{
|
{
|
||||||
/*mission type gets set to none when you have returned from a mission
|
/*mission type gets set to none when you have returned from a mission
|
||||||
|
@ -541,7 +502,6 @@ BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
initEffectsSystem();
|
initEffectsSystem();
|
||||||
|
|
||||||
//load the game file for all types of mission except a Between Mission
|
//load the game file for all types of mission except a Between Mission
|
||||||
//if (missionType != MISSION_BETWEEN)
|
|
||||||
if (missionType != LDS_BETWEEN)
|
if (missionType != LDS_BETWEEN)
|
||||||
{
|
{
|
||||||
loadGameInit(pGame);
|
loadGameInit(pGame);
|
||||||
|
@ -581,22 +541,6 @@ BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
}
|
}
|
||||||
case LDS_CAMCHANGE:
|
case LDS_CAMCHANGE:
|
||||||
{
|
{
|
||||||
/*if (getCampaignNumber() == 1)
|
|
||||||
{
|
|
||||||
//play the cam 2 video
|
|
||||||
seq_ClearSeqList();
|
|
||||||
seq_AddSeqToList("cam2/c002.rpl",NULL,"cam2/c002.txa",FALSE);
|
|
||||||
seq_StartNextFullScreenVideo();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//play the cam 3 video
|
|
||||||
seq_ClearSeqList();
|
|
||||||
seq_AddSeqToList("cam2/cam2out.rpl",NULL,NULL,FALSE);
|
|
||||||
seq_AddSeqToList("cam3/c003.rpl",NULL,"cam3/c003.txa",FALSE);
|
|
||||||
seq_StartNextFullScreenVideo();
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (!startMissionCampaignChange(pGame))
|
if (!startMissionCampaignChange(pGame))
|
||||||
{
|
{
|
||||||
loaded = FALSE;
|
loaded = FALSE;
|
||||||
|
@ -645,11 +589,11 @@ BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
|
|
||||||
mission.type = missionType;
|
mission.type = missionType;
|
||||||
|
|
||||||
if (missionIsOffworld())
|
if (missionIsOffworld())
|
||||||
{
|
{
|
||||||
//add what power have got from the home base
|
//add what power have got from the home base
|
||||||
adjustMissionPower();
|
adjustMissionPower();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (missionCanReEnforce())
|
if (missionCanReEnforce())
|
||||||
{
|
{
|
||||||
|
@ -662,8 +606,8 @@ BOOL startMission(LEVEL_TYPE missionType, char *pGame)
|
||||||
|
|
||||||
scoreInitSystem();
|
scoreInitSystem();
|
||||||
|
|
||||||
//add proximity messages for all untapped VISIBLE oil resources
|
// add proximity messages for all untapped VISIBLE oil resources
|
||||||
addOilResourceProximities();
|
addOilResourceProximities();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -700,10 +644,8 @@ adding the timer button*/
|
||||||
void addTransporterTimerInterface(void)
|
void addTransporterTimerInterface(void)
|
||||||
{
|
{
|
||||||
DROID *psDroid, *psTransporter;
|
DROID *psDroid, *psTransporter;
|
||||||
BOOL bAddInterface = FALSE;
|
BOOL bAddInterface = FALSE;
|
||||||
|
W_CLICKFORM *psForm;
|
||||||
W_CLICKFORM *psForm;
|
|
||||||
|
|
||||||
|
|
||||||
//check if reinforcements are allowed
|
//check if reinforcements are allowed
|
||||||
if (mission.ETA >= 0)
|
if (mission.ETA >= 0)
|
||||||
|
@ -719,23 +661,9 @@ void addTransporterTimerInterface(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (psDroid)
|
if (psDroid)
|
||||||
{
|
{
|
||||||
//don't bother checking for reinforcements - always add it if you've got a Transporter
|
bAddInterface = TRUE;
|
||||||
//check the player has some reinforcements back at home
|
|
||||||
/*psDroid = NULL;
|
|
||||||
for (psDroid = mission.apsDroidLists[selectedPlayer]; psDroid !=
|
|
||||||
NULL; psDroid = psDroid->psNext)
|
|
||||||
{
|
|
||||||
if (psDroid->droidType != DROID_TRANSPORTER)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//if reinforcements available
|
|
||||||
if (psDroid)*/
|
|
||||||
{
|
|
||||||
bAddInterface = TRUE;
|
|
||||||
|
|
||||||
//check timer is not already on the screen
|
//check timer is not already on the screen
|
||||||
if (!widgGetFromID(psWScreen, IDTRANTIMER_BUTTON))
|
if (!widgGetFromID(psWScreen, IDTRANTIMER_BUTTON))
|
||||||
|
@ -743,27 +671,25 @@ void addTransporterTimerInterface(void)
|
||||||
intAddTransporterTimer();
|
intAddTransporterTimer();
|
||||||
}
|
}
|
||||||
|
|
||||||
//set the data for the transporter timer
|
//set the data for the transporter timer
|
||||||
widgSetUserData(psWScreen, IDTRANTIMER_DISPLAY, (void*)psTransporter);
|
widgSetUserData(psWScreen, IDTRANTIMER_DISPLAY, (void*)psTransporter);
|
||||||
|
|
||||||
//lock the button if necessary
|
// lock the button if necessary
|
||||||
if (transporterFlying(psTransporter))
|
if (transporterFlying(psTransporter))
|
||||||
{
|
{
|
||||||
//disable the form so can't add any more droids into the transporter
|
// disable the form so can't add any more droids into the transporter
|
||||||
psForm = (W_CLICKFORM*)widgGetFromID(psWScreen,IDTRANTIMER_BUTTON);
|
psForm = (W_CLICKFORM*)widgGetFromID(psWScreen,IDTRANTIMER_BUTTON);
|
||||||
if (psForm)
|
if (psForm)
|
||||||
{
|
{
|
||||||
formSetClickState(psForm, WBUT_LOCK);
|
formSetClickState(psForm, WBUT_LOCK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
// if criteria not met
|
||||||
}
|
if (!bAddInterface)
|
||||||
//if criteria not met
|
|
||||||
if (!bAddInterface)
|
|
||||||
{
|
{
|
||||||
//make sure its not there!
|
// make sure its not there!
|
||||||
intRemoveTransporterTimer();
|
intRemoveTransporterTimer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -915,9 +841,9 @@ void saveMissionData(void)
|
||||||
apEquivZones = NULL;
|
apEquivZones = NULL;
|
||||||
mission.aZoneReachable = aZoneReachable;
|
mission.aZoneReachable = aZoneReachable;
|
||||||
aZoneReachable = NULL;
|
aZoneReachable = NULL;
|
||||||
//save the selectedPlayer's LZ
|
// save the selectedPlayer's LZ
|
||||||
mission.homeLZ_X = getLandingX(selectedPlayer);
|
mission.homeLZ_X = getLandingX(selectedPlayer);
|
||||||
mission.homeLZ_Y = getLandingY(selectedPlayer);
|
mission.homeLZ_Y = getLandingY(selectedPlayer);
|
||||||
|
|
||||||
bRepairExists = FALSE;
|
bRepairExists = FALSE;
|
||||||
//set any structures currently being built to completed for the selected player
|
//set any structures currently being built to completed for the selected player
|
||||||
|
@ -934,24 +860,23 @@ void saveMissionData(void)
|
||||||
{
|
{
|
||||||
if (psStructBeingBuilt == psStruct)
|
if (psStructBeingBuilt == psStruct)
|
||||||
{
|
{
|
||||||
//check there is enough power to complete
|
// check there is enough power to complete
|
||||||
//inc = psStruct->pStructureType->powerToBuild - psStruct->currentPowerAccrued;
|
inc = structPowerToBuild(psStruct) - psStruct->currentPowerAccrued;
|
||||||
inc = structPowerToBuild(psStruct) - psStruct->currentPowerAccrued;
|
if (inc > 0)
|
||||||
if (inc > 0)
|
{
|
||||||
{
|
// not accrued enough power, so check if there is enough available
|
||||||
//not accrued enough power, so check if there is enough available
|
if (checkPower(selectedPlayer, inc, FALSE))
|
||||||
if (checkPower(selectedPlayer, inc, FALSE))
|
{
|
||||||
{
|
// enough - so use it and set to complete
|
||||||
//enough - so use it and set to complete
|
usePower(selectedPlayer, inc);
|
||||||
usePower(selectedPlayer, inc);
|
buildingComplete(psStruct);
|
||||||
buildingComplete(psStruct);
|
}
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
else
|
{
|
||||||
{
|
// enough power or more than enough! - either way, set to complete
|
||||||
//enough power or more than enough! - either way, set to complete
|
buildingComplete(psStruct);
|
||||||
buildingComplete(psStruct);
|
}
|
||||||
}
|
|
||||||
//don't bother looking for any other droids working on it
|
//don't bother looking for any other droids working on it
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -996,12 +921,6 @@ void saveMissionData(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//THIS HAPPENS AT THE END OF THE CAMCHANGE MISSION NOW - AB 22/12/98
|
|
||||||
//before copy the pointers over check selectedPlayer's mission.droids since
|
|
||||||
//there might be some from the previous camapign
|
|
||||||
//processPreviousCampDroids();
|
|
||||||
|
|
||||||
|
|
||||||
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
||||||
{
|
{
|
||||||
mission.apsStructLists[inc] = apsStructLists[inc];
|
mission.apsStructLists[inc] = apsStructLists[inc];
|
||||||
|
@ -1027,8 +946,6 @@ void saveMissionData(void)
|
||||||
initEffectsSystem();
|
initEffectsSystem();
|
||||||
|
|
||||||
resetRadarRedraw();
|
resetRadarRedraw();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1094,7 +1011,6 @@ void restoreMissionData(void)
|
||||||
}
|
}
|
||||||
//swap mission data over
|
//swap mission data over
|
||||||
|
|
||||||
|
|
||||||
psMapTiles = mission.psMapTiles;
|
psMapTiles = mission.psMapTiles;
|
||||||
|
|
||||||
aMapLinePoints = mission.aMapLinePoints;
|
aMapLinePoints = mission.aMapLinePoints;
|
||||||
|
@ -1143,10 +1059,8 @@ void restoreMissionData(void)
|
||||||
|
|
||||||
resetRadarRedraw();
|
resetRadarRedraw();
|
||||||
|
|
||||||
|
// reset the environ map back to the homebase settings
|
||||||
//reset the environ map back to the homebase settings
|
environReset();
|
||||||
environReset();
|
|
||||||
|
|
||||||
|
|
||||||
//intSetMapPos(mission.playerX, mission.playerY);
|
//intSetMapPos(mission.playerX, mission.playerY);
|
||||||
}
|
}
|
||||||
|
@ -1154,97 +1068,53 @@ void restoreMissionData(void)
|
||||||
/*Saves the necessary data when moving from one mission to a limbo expand Mission*/
|
/*Saves the necessary data when moving from one mission to a limbo expand Mission*/
|
||||||
void saveMissionLimboData(void)
|
void saveMissionLimboData(void)
|
||||||
{
|
{
|
||||||
DROID *psDroid, *psNext;
|
DROID *psDroid, *psNext;
|
||||||
//UDWORD droidX, droidY;
|
//UDWORD droidX, droidY;
|
||||||
//PICKTILE pickRes;
|
//PICKTILE pickRes;
|
||||||
STRUCTURE *psStruct;
|
STRUCTURE *psStruct;
|
||||||
|
|
||||||
//clear out the audio
|
//clear out the audio
|
||||||
audio_StopAll();
|
audio_StopAll();
|
||||||
|
|
||||||
//before copy the pointers over check selectedPlayer's mission.droids since
|
// before copy the pointers over check selectedPlayer's mission.droids since
|
||||||
//there might be some from the previous camapign
|
// there might be some from the previous camapign
|
||||||
processPreviousCampDroids();
|
processPreviousCampDroids();
|
||||||
|
|
||||||
//only need to keep the selectedPlayer's droid's separate
|
// move droids properly - does all the clean up code
|
||||||
//mission.apsDroidLists[selectedPlayer] = apsDroidLists[selectedPlayer];
|
for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL; psDroid = psNext)
|
||||||
//apsDroidLists[selectedPlayer] = NULL;
|
{
|
||||||
//move droids properly - does all the clean up code
|
psNext = psDroid->psNext;
|
||||||
for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL; psDroid = psNext)
|
if (droidRemove(psDroid, apsDroidLists))
|
||||||
{
|
|
||||||
psNext = psDroid->psNext;
|
|
||||||
if (droidRemove(psDroid, apsDroidLists))
|
|
||||||
{
|
|
||||||
addDroid(psDroid, mission.apsDroidLists);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
apsDroidLists[selectedPlayer] = NULL;
|
|
||||||
|
|
||||||
//this is happening in a separate function now so can be called once the mission has started
|
|
||||||
/*apsDroidLists[selectedPlayer] = apsLimboDroids[selectedPlayer];
|
|
||||||
apsLimboDroids[selectedPlayer] = NULL;
|
|
||||||
|
|
||||||
//set up location for each of the droids
|
|
||||||
for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL; psDroid =
|
|
||||||
psDroid->psNext)
|
|
||||||
{
|
|
||||||
droidX = map_coord(getLandingX(LIMBO_LANDING));
|
|
||||||
droidY = map_coord(getLandingY(LIMBO_LANDING));
|
|
||||||
pickRes = pickHalfATile(&droidX, &droidY,LOOK_FOR_EMPTY_TILE);
|
|
||||||
if (pickRes == NO_FREE_TILE )
|
|
||||||
{
|
{
|
||||||
ASSERT( FALSE, "saveMissionLimboData: Unable to find a free location" );
|
addDroid(psDroid, mission.apsDroidLists);
|
||||||
}
|
}
|
||||||
psDroid->pos.x = (UWORD)world_coord(droidX);
|
}
|
||||||
psDroid->pos.y = (UWORD)world_coord(droidY);
|
apsDroidLists[selectedPlayer] = NULL;
|
||||||
if (pickRes == HALF_FREE_TILE )
|
|
||||||
|
// any selectedPlayer's factories/research need to be put on holdProduction/holdresearch
|
||||||
|
for (psStruct = apsStructLists[selectedPlayer]; psStruct != NULL; psStruct = psStruct->psNext)
|
||||||
|
{
|
||||||
|
if (StructIsFactory(psStruct))
|
||||||
{
|
{
|
||||||
psDroid->pos.x += TILE_UNITS;
|
holdProduction(psStruct);
|
||||||
psDroid->pos.y += TILE_UNITS;
|
|
||||||
}
|
}
|
||||||
psDroid->pos.z = map_Height(psDroid->pos.x, psDroid->pos.y);
|
else if (psStruct->pStructureType->type == REF_RESEARCH)
|
||||||
updateDroidOrientation(psDroid);
|
{
|
||||||
//psDroid->lastTile = mapTile(map_coord(psDroid->pos.x),
|
holdResearch(psStruct);
|
||||||
// map_coord(psDroid->pos.y));
|
}
|
||||||
psDroid->selected = FALSE;
|
}
|
||||||
//this is mainly for VTOLs
|
|
||||||
psDroid->psBaseStruct = NULL;
|
|
||||||
psDroid->cluster = 0;
|
|
||||||
//initialise the movement data
|
|
||||||
initDroidMovement(psDroid);
|
|
||||||
//make sure the died flag is not set
|
|
||||||
psDroid->died = FALSE;
|
|
||||||
|
|
||||||
}*/
|
|
||||||
|
|
||||||
//any selectedPlayer's factories/research need to be put on holdProduction/holdresearch
|
|
||||||
for (psStruct = apsStructLists[selectedPlayer]; psStruct != NULL; psStruct =
|
|
||||||
psStruct->psNext)
|
|
||||||
{
|
|
||||||
if (StructIsFactory(psStruct))
|
|
||||||
{
|
|
||||||
holdProduction(psStruct);
|
|
||||||
}
|
|
||||||
else if (psStruct->pStructureType->type == REF_RESEARCH)
|
|
||||||
{
|
|
||||||
holdResearch(psStruct);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//this is called via a script function to place the Limbo droids once the mission has started
|
//this is called via a script function to place the Limbo droids once the mission has started
|
||||||
void placeLimboDroids(void)
|
void placeLimboDroids(void)
|
||||||
{
|
{
|
||||||
DROID *psDroid, *psNext;
|
DROID *psDroid, *psNext;
|
||||||
UDWORD droidX, droidY;
|
UDWORD droidX, droidY;
|
||||||
PICKTILE pickRes;
|
PICKTILE pickRes;
|
||||||
|
|
||||||
//copy the droids across for the selected Player
|
// Copy the droids across for the selected Player
|
||||||
for (psDroid = apsLimboDroids[selectedPlayer]; psDroid != NULL;
|
for (psDroid = apsLimboDroids[selectedPlayer]; psDroid != NULL; psDroid = psNext)
|
||||||
psDroid = psNext)
|
{
|
||||||
{
|
|
||||||
psNext = psDroid->psNext;
|
psNext = psDroid->psNext;
|
||||||
if (droidRemove(psDroid, apsLimboDroids))
|
if (droidRemove(psDroid, apsLimboDroids))
|
||||||
{
|
{
|
||||||
|
@ -1288,7 +1158,7 @@ void placeLimboDroids(void)
|
||||||
{
|
{
|
||||||
ASSERT( FALSE, "placeLimboUnits: Unable to remove unit from Limbo list" );
|
ASSERT( FALSE, "placeLimboUnits: Unable to remove unit from Limbo list" );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*restores the necessary data on completion of a Limbo Expand mission*/
|
/*restores the necessary data on completion of a Limbo Expand mission*/
|
||||||
|
@ -1324,84 +1194,54 @@ void saveCampaignData(void)
|
||||||
UBYTE inc;
|
UBYTE inc;
|
||||||
DROID *psDroid, *psNext, *psSafeDroid, *psNextSafe, *psCurr, *psCurrNext;
|
DROID *psDroid, *psNext, *psSafeDroid, *psNextSafe, *psCurr, *psCurrNext;
|
||||||
|
|
||||||
//if the droids have been moved to safety then get any Transporters that exist
|
// If the droids have been moved to safety then get any Transporters that exist
|
||||||
if (getDroidsToSafetyFlag())
|
if (getDroidsToSafetyFlag())
|
||||||
{
|
{
|
||||||
//move any Transporters into the mission list
|
// Move any Transporters into the mission list
|
||||||
psDroid = apsDroidLists[selectedPlayer];
|
psDroid = apsDroidLists[selectedPlayer];
|
||||||
while(psDroid != NULL)
|
while(psDroid != NULL)
|
||||||
{
|
{
|
||||||
psNext = psDroid->psNext;
|
psNext = psDroid->psNext;
|
||||||
if (psDroid->droidType == DROID_TRANSPORTER)
|
if (psDroid->droidType == DROID_TRANSPORTER)
|
||||||
{
|
{
|
||||||
/*Now - we want to empty the transporter and make it turn up
|
// Empty the transporter into the mission list
|
||||||
with the first ten out of the previous mission*/
|
ASSERT(psDroid->psGroup != NULL, "saveCampaignData: Transporter does not have a group");
|
||||||
|
|
||||||
//we want to make sure they are full
|
for (psCurr = psDroid->psGroup->psList; psCurr != NULL && psCurr != psDroid; psCurr = psCurrNext)
|
||||||
/*if (calcRemainingCapacity(psDroid))
|
{
|
||||||
//before we move the droid into the mission list - check to see if it's empty
|
psCurrNext = psCurr->psGrpNext;
|
||||||
//if (psDroid->psGroup && psDroid->psGroup->refCount == 1)
|
// Remove it from the transporter group
|
||||||
{
|
grpLeave( psDroid->psGroup, psCurr);
|
||||||
//fill it with droids from the mission list
|
// Cam change add droid
|
||||||
for (psSafeDroid = mission.apsDroidLists[selectedPlayer];
|
|
||||||
psSafeDroid != NULL; psSafeDroid = psNextSafe)
|
|
||||||
{
|
|
||||||
psNextSafe = psSafeDroid->psNext;
|
|
||||||
//add to the Transporter, checking for when full
|
|
||||||
if (checkTransporterSpace(psDroid, psSafeDroid))
|
|
||||||
{
|
|
||||||
if (droidRemove(psSafeDroid, mission.apsDroidLists))
|
|
||||||
{
|
|
||||||
grpJoin(psDroid->psGroup, psSafeDroid);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//setting this will cause the loop to end
|
|
||||||
psNextSafe = NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
//empty the transporter into the mission list
|
|
||||||
ASSERT( psDroid->psGroup != NULL,
|
|
||||||
"saveCampaignData: Transporter does not have a group" );
|
|
||||||
|
|
||||||
for (psCurr = psDroid->psGroup->psList; psCurr != NULL && psCurr !=
|
|
||||||
psDroid; psCurr = psCurrNext)
|
|
||||||
{
|
|
||||||
psCurrNext = psCurr->psGrpNext;
|
|
||||||
//remove it from the transporter group
|
|
||||||
grpLeave( psDroid->psGroup, psCurr);
|
|
||||||
//cam change add droid
|
|
||||||
psCurr->pos.x = INVALID_XY;
|
psCurr->pos.x = INVALID_XY;
|
||||||
psCurr->pos.y = INVALID_XY;
|
psCurr->pos.y = INVALID_XY;
|
||||||
//add it back into current droid lists
|
// Add it back into current droid lists
|
||||||
addDroid(psCurr, mission.apsDroidLists);
|
addDroid(psCurr, mission.apsDroidLists);
|
||||||
}
|
}
|
||||||
//remove the transporter from the current list
|
// Remove the transporter from the current list
|
||||||
if (droidRemove(psDroid, apsDroidLists))
|
if (droidRemove(psDroid, apsDroidLists))
|
||||||
{
|
{
|
||||||
//cam change add droid
|
//cam change add droid
|
||||||
psDroid->pos.x = INVALID_XY;
|
psDroid->pos.x = INVALID_XY;
|
||||||
psDroid->pos.y = INVALID_XY;
|
psDroid->pos.y = INVALID_XY;
|
||||||
addDroid(psDroid, mission.apsDroidLists);
|
addDroid(psDroid, mission.apsDroidLists);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
psDroid = psNext;
|
psDroid = psNext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//reserve the droids for selected player for start of next campaign
|
// Reserve the droids for selected player for start of next campaign
|
||||||
mission.apsDroidLists[selectedPlayer] = apsDroidLists[selectedPlayer];
|
mission.apsDroidLists[selectedPlayer] = apsDroidLists[selectedPlayer];
|
||||||
apsDroidLists[selectedPlayer] = NULL;
|
apsDroidLists[selectedPlayer] = NULL;
|
||||||
psDroid = mission.apsDroidLists[selectedPlayer];
|
psDroid = mission.apsDroidLists[selectedPlayer];
|
||||||
while(psDroid != NULL)
|
while(psDroid != NULL)
|
||||||
{
|
{
|
||||||
//cam change add droid
|
//cam change add droid
|
||||||
psDroid->pos.x = INVALID_XY;
|
psDroid->pos.x = INVALID_XY;
|
||||||
psDroid->pos.y = INVALID_XY;
|
psDroid->pos.y = INVALID_XY;
|
||||||
psDroid = psDroid->psNext;
|
psDroid = psDroid->psNext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1487,9 +1327,9 @@ BOOL startMissionOffClear(char *pGame)
|
||||||
|
|
||||||
//this gets set when the timer is added in scriptFuncs
|
//this gets set when the timer is added in scriptFuncs
|
||||||
//mission.startTime = gameTime;
|
//mission.startTime = gameTime;
|
||||||
// ffs ab
|
|
||||||
//the message should have been played at the between stage
|
// The message should have been played at the between stage
|
||||||
missionCountDown &= ~NOT_PLAYED_ACTIVATED;
|
missionCountDown &= ~NOT_PLAYED_ACTIVATED;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1513,30 +1353,27 @@ BOOL startMissionOffKeep(char *pGame)
|
||||||
|
|
||||||
//this gets set when the timer is added in scriptFuncs
|
//this gets set when the timer is added in scriptFuncs
|
||||||
//mission.startTime = gameTime;
|
//mission.startTime = gameTime;
|
||||||
// ffs ab
|
|
||||||
//the message should have been played at the between stage
|
|
||||||
missionCountDown &= ~NOT_PLAYED_ACTIVATED;
|
|
||||||
|
|
||||||
return TRUE;
|
// The message should have been played at the between stage
|
||||||
|
missionCountDown &= ~NOT_PLAYED_ACTIVATED;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL startMissionCampaignStart(char *pGame)
|
BOOL startMissionCampaignStart(char *pGame)
|
||||||
{
|
{
|
||||||
//clear out all intelligence screen messages
|
// Clear out all intelligence screen messages
|
||||||
freeMessages();
|
freeMessages();
|
||||||
|
|
||||||
//check no units left with any settings that are invalid
|
// Check no units left with any settings that are invalid
|
||||||
clearCampaignUnits();
|
clearCampaignUnits();
|
||||||
|
|
||||||
//load in the new game details
|
// Load in the new game details
|
||||||
if (!loadGame(pGame, !KEEPOBJECTS, FREEMEM, FALSE))
|
if (!loadGame(pGame, !KEEPOBJECTS, FREEMEM, FALSE))
|
||||||
{
|
{
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
//call after everything has been loaded up - done on stageThreeInit
|
|
||||||
//gridReset();
|
|
||||||
|
|
||||||
offWorldKeepLists = FALSE;
|
offWorldKeepLists = FALSE;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -1544,16 +1381,16 @@ BOOL startMissionCampaignStart(char *pGame)
|
||||||
|
|
||||||
BOOL startMissionCampaignChange(char *pGame)
|
BOOL startMissionCampaignChange(char *pGame)
|
||||||
{
|
{
|
||||||
//clear out all intelligence screen messages
|
// Clear out all intelligence screen messages
|
||||||
freeMessages();
|
freeMessages();
|
||||||
|
|
||||||
//check no units left with any settings that are invalid
|
// Check no units left with any settings that are invalid
|
||||||
clearCampaignUnits();
|
clearCampaignUnits();
|
||||||
|
|
||||||
//clear out the production run between campaigns
|
// Clear out the production run between campaigns
|
||||||
changeProductionPlayer((UBYTE)selectedPlayer);
|
changeProductionPlayer((UBYTE)selectedPlayer);
|
||||||
|
|
||||||
saveCampaignData();
|
saveCampaignData();
|
||||||
|
|
||||||
//load in the new game details
|
//load in the new game details
|
||||||
if (!loadGame(pGame, !KEEPOBJECTS, !FREEMEM, FALSE))
|
if (!loadGame(pGame, !KEEPOBJECTS, !FREEMEM, FALSE))
|
||||||
|
@ -1562,7 +1399,7 @@ BOOL startMissionCampaignChange(char *pGame)
|
||||||
}
|
}
|
||||||
|
|
||||||
offWorldKeepLists = FALSE;
|
offWorldKeepLists = FALSE;
|
||||||
intResetPreviousObj();
|
intResetPreviousObj();
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1584,7 +1421,7 @@ BOOL startMissionCampaignExpand(char *pGame)
|
||||||
|
|
||||||
BOOL startMissionCampaignExpandLimbo(char *pGame)
|
BOOL startMissionCampaignExpandLimbo(char *pGame)
|
||||||
{
|
{
|
||||||
saveMissionLimboData();
|
saveMissionLimboData();
|
||||||
|
|
||||||
//load in the new game details
|
//load in the new game details
|
||||||
if (!loadGame(pGame, KEEPOBJECTS, !FREEMEM, FALSE))
|
if (!loadGame(pGame, KEEPOBJECTS, !FREEMEM, FALSE))
|
||||||
|
@ -1610,14 +1447,13 @@ BOOL startMissionBetween(void)
|
||||||
//check no units left with any settings that are invalid
|
//check no units left with any settings that are invalid
|
||||||
void clearCampaignUnits(void)
|
void clearCampaignUnits(void)
|
||||||
{
|
{
|
||||||
DROID *psDroid;
|
DROID *psDroid;
|
||||||
|
|
||||||
for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL; psDroid =
|
for (psDroid = apsDroidLists[selectedPlayer]; psDroid != NULL; psDroid = psDroid->psNext)
|
||||||
psDroid->psNext)
|
{
|
||||||
{
|
orderDroid(psDroid, DORDER_STOP);
|
||||||
orderDroid(psDroid, DORDER_STOP);
|
|
||||||
setDroidBase(psDroid, NULL);
|
setDroidBase(psDroid, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*This deals with droids at the end of an offworld mission*/
|
/*This deals with droids at the end of an offworld mission*/
|
||||||
|
@ -1637,60 +1473,40 @@ static void processMission(void)
|
||||||
|
|
||||||
//remove out of stored list and add to current Droid list
|
//remove out of stored list and add to current Droid list
|
||||||
if (droidRemove(psDroid, apsDroidLists))
|
if (droidRemove(psDroid, apsDroidLists))
|
||||||
{
|
{
|
||||||
addDroid(psDroid, mission.apsDroidLists);
|
addDroid(psDroid, mission.apsDroidLists);
|
||||||
// just remove the droid from the grid cos
|
droidX = getHomeLandingX();
|
||||||
// there is only one grid which gets reset when we go back to the
|
droidY = getHomeLandingY();
|
||||||
// campaign map
|
// Swap the droid and map pointers
|
||||||
//gridRemoveObject((BASE_OBJECT *)psDroid); - happens in droidRemove()
|
swapMissionPointers();
|
||||||
//set the x/y for now
|
|
||||||
//psDroid->pos.x = getHomeLandingX() + 256;
|
|
||||||
//psDroid->pos.y = getHomeLandingY() + 256;
|
|
||||||
//droidX = map_coord(getLandingX(psDroid->player)); //map_coord(getHomeLandingX());
|
|
||||||
//droidY = map_coord(getLandingY(psDroid->player)); //map_coord(getHomeLandingY());
|
|
||||||
droidX = getHomeLandingX();
|
|
||||||
droidY = getHomeLandingY();
|
|
||||||
//swap the droid and map pointers
|
|
||||||
swapMissionPointers();
|
|
||||||
|
|
||||||
pickRes = pickHalfATile(&droidX, &droidY,LOOK_FOR_EMPTY_TILE);
|
pickRes = pickHalfATile(&droidX, &droidY,LOOK_FOR_EMPTY_TILE);
|
||||||
if (pickRes == NO_FREE_TILE )
|
ASSERT(pickRes != NO_FREE_TILE, "processMission: Unable to find a free location" );
|
||||||
{
|
psDroid->pos.x = (UWORD)world_coord(droidX);
|
||||||
ASSERT( FALSE, "processMission: Unable to find a free location" );
|
psDroid->pos.y = (UWORD)world_coord(droidY);
|
||||||
}
|
if (pickRes == HALF_FREE_TILE )
|
||||||
psDroid->pos.x = (UWORD)world_coord(droidX);
|
{
|
||||||
psDroid->pos.y = (UWORD)world_coord(droidY);
|
psDroid->pos.x += TILE_UNITS;
|
||||||
if (pickRes == HALF_FREE_TILE )
|
psDroid->pos.y += TILE_UNITS;
|
||||||
{
|
}
|
||||||
psDroid->pos.x += TILE_UNITS;
|
ASSERT(worldOnMap(psDroid->pos.x,psDroid->pos.y), "the droid is not on the map");
|
||||||
psDroid->pos.y += TILE_UNITS;
|
psDroid->pos.z = map_Height(psDroid->pos.x, psDroid->pos.y);
|
||||||
}
|
updateDroidOrientation(psDroid);
|
||||||
ASSERT(worldOnMap(psDroid->pos.x,psDroid->pos.y), "the droid is not on the map");
|
// Swap the droid and map pointers back again
|
||||||
psDroid->pos.z = map_Height(psDroid->pos.x, psDroid->pos.y);
|
swapMissionPointers();
|
||||||
updateDroidOrientation(psDroid);
|
psDroid->selected = FALSE;
|
||||||
/* psDroid->lastTile = mapTile(map_coord(psDroid->pos.x),
|
// This is mainly for VTOLs
|
||||||
map_coord(psDroid->pos.y));
|
|
||||||
*/
|
|
||||||
//swap the droid and map pointers back again
|
|
||||||
swapMissionPointers();
|
|
||||||
psDroid->selected = FALSE;
|
|
||||||
//this is mainly for VTOLs
|
|
||||||
setDroidBase(psDroid, NULL);
|
setDroidBase(psDroid, NULL);
|
||||||
psDroid->cluster = 0;
|
psDroid->cluster = 0;
|
||||||
//initialise the movement data
|
// Initialise the movement data
|
||||||
initDroidMovement(psDroid);
|
initDroidMovement(psDroid);
|
||||||
|
}
|
||||||
//orderSelectedLoc(psDroid->player, psDroid->pos.x + 3 * TILE_UNITS,
|
|
||||||
// psDroid->pos.y + 3 * TILE_UNITS);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define MAXLIMBODROIDS (999)
|
#define MAXLIMBODROIDS (999)
|
||||||
|
|
||||||
|
|
||||||
/*This deals with droids at the end of an offworld Limbo mission*/
|
/*This deals with droids at the end of an offworld Limbo mission*/
|
||||||
void processMissionLimbo(void)
|
void processMissionLimbo(void)
|
||||||
{
|
{
|
||||||
|
@ -1706,35 +1522,29 @@ void processMissionLimbo(void)
|
||||||
{
|
{
|
||||||
vanishDroid(psDroid);
|
vanishDroid(psDroid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (numDroidsAddedToLimboList >= MAXLIMBODROIDS) // any room in limbo list
|
if (numDroidsAddedToLimboList >= MAXLIMBODROIDS) // any room in limbo list
|
||||||
{
|
{
|
||||||
vanishDroid(psDroid);
|
vanishDroid(psDroid);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
// Remove out of stored list and add to current Droid list
|
||||||
|
if (droidRemove(psDroid, apsDroidLists))
|
||||||
//remove out of stored list and add to current Droid list
|
{
|
||||||
if (droidRemove(psDroid, apsDroidLists))
|
// Limbo list invalidate XY
|
||||||
{
|
psDroid->pos.x = INVALID_XY;
|
||||||
//limbo list invalidate XY
|
psDroid->pos.y = INVALID_XY;
|
||||||
psDroid->pos.x = INVALID_XY;
|
addDroid(psDroid, apsLimboDroids);
|
||||||
psDroid->pos.y = INVALID_XY;
|
// This is mainly for VTOLs
|
||||||
addDroid(psDroid, apsLimboDroids);
|
|
||||||
//this is mainly for VTOLs
|
|
||||||
setDroidBase(psDroid, NULL);
|
setDroidBase(psDroid, NULL);
|
||||||
psDroid->cluster = 0;
|
psDroid->cluster = 0;
|
||||||
orderDroid(psDroid, DORDER_STOP);
|
orderDroid(psDroid, DORDER_STOP);
|
||||||
|
|
||||||
numDroidsAddedToLimboList++;
|
numDroidsAddedToLimboList++;
|
||||||
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1746,11 +1556,11 @@ void swapMissionPointers(void)
|
||||||
void **ppVoid;
|
void **ppVoid;
|
||||||
UDWORD udwTemp, inc;
|
UDWORD udwTemp, inc;
|
||||||
|
|
||||||
//swap psMapTiles
|
// Swap psMapTiles
|
||||||
pVoid = (void*)psMapTiles;
|
pVoid = (void*)psMapTiles;
|
||||||
psMapTiles = mission.psMapTiles;
|
psMapTiles = mission.psMapTiles;
|
||||||
mission.psMapTiles = (MAPTILE *)pVoid;
|
mission.psMapTiles = (MAPTILE *)pVoid;
|
||||||
//swap map sizes
|
// Swap map sizes
|
||||||
udwTemp = mapWidth;
|
udwTemp = mapWidth;
|
||||||
mapWidth = mission.mapWidth;
|
mapWidth = mission.mapWidth;
|
||||||
mission.mapWidth = udwTemp;
|
mission.mapWidth = udwTemp;
|
||||||
|
@ -1776,7 +1586,7 @@ void swapMissionPointers(void)
|
||||||
pVoid = (void*)aZoneReachable;
|
pVoid = (void*)aZoneReachable;
|
||||||
aZoneReachable = mission.aZoneReachable;
|
aZoneReachable = mission.aZoneReachable;
|
||||||
mission.aZoneReachable = (UBYTE *)pVoid;
|
mission.aZoneReachable = (UBYTE *)pVoid;
|
||||||
//swap scroll limits
|
// Swap scroll limits
|
||||||
udwTemp = scrollMinX;
|
udwTemp = scrollMinX;
|
||||||
scrollMinX = mission.scrollMinX;
|
scrollMinX = mission.scrollMinX;
|
||||||
mission.scrollMinX = udwTemp;
|
mission.scrollMinX = udwTemp;
|
||||||
|
@ -1804,44 +1614,6 @@ void swapMissionPointers(void)
|
||||||
apsFlagPosLists[inc] = mission.apsFlagPosLists[inc];
|
apsFlagPosLists[inc] = mission.apsFlagPosLists[inc];
|
||||||
mission.apsFlagPosLists[inc] = (FLAG_POSITION *)pVoid;
|
mission.apsFlagPosLists[inc] = (FLAG_POSITION *)pVoid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
for (inc = 0; inc < MAX_PLAYERS; inc++)
|
|
||||||
{
|
|
||||||
udwTemp = iTranspEntryTileX[inc];
|
|
||||||
iTranspEntryTileX[inc] = mission.iTranspEntryTileX[inc];
|
|
||||||
mission.iTranspEntryTileX[inc] = udwTemp;
|
|
||||||
udwTemp = iTranspEntryTileY[inc];
|
|
||||||
iTranspEntryTileY[inc] = mission.iTranspEntryTileY[inc];
|
|
||||||
mission.iTranspEntryTileY[inc] = udwTemp;
|
|
||||||
udwTemp = iTranspExitTileX[inc];
|
|
||||||
iTranspExitTileX[inc] = mission.iTranspExitTileX[inc];
|
|
||||||
mission.iTranspExitTileX[inc] = udwTemp;
|
|
||||||
udwTemp = iTranspExitTileY[inc];
|
|
||||||
iTranspExitTileY[inc] = mission.iTranspExitTileY[inc];
|
|
||||||
mission.iTranspExitTileY[inc] = udwTemp;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// NOTE: none of the gateway pointers are swapped at the moment
|
|
||||||
// which isn't a problem for the current usage - might need to be
|
|
||||||
// added later
|
|
||||||
/* stuff to add
|
|
||||||
UDWORD type; //defines which start and end functions to use - see levels_type in levels.h
|
|
||||||
//struct _proximity_display *apsProxDisp[MAX_PLAYERS];
|
|
||||||
FLAG_POSITION *apsFlagPosLists[MAX_PLAYERS];
|
|
||||||
PLAYER_POWER asPower[MAX_PLAYERS];
|
|
||||||
|
|
||||||
//stuff for save game
|
|
||||||
UDWORD startTime; //time the mission started
|
|
||||||
SDWORD time; //how long the mission can last
|
|
||||||
// < 0 = no limit
|
|
||||||
SDWORD ETA; //time taken for reinforcements to arrive
|
|
||||||
// < 0 = none allowed
|
|
||||||
UWORD homeLZ_X; //selectedPlayer's LZ x and y
|
|
||||||
UWORD homeLZ_Y;
|
|
||||||
SDWORD playerX; //original view position
|
|
||||||
SDWORD playerY;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void endMission(void)
|
void endMission(void)
|
||||||
|
@ -3424,8 +3196,6 @@ BOOL intAddMissionResult(BOOL result, BOOL bPlaySuccess)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void intRemoveMissionResultNoAnim(void)
|
void intRemoveMissionResultNoAnim(void)
|
||||||
{
|
{
|
||||||
widgDelete(psWScreen, IDMISSIONRES_TITLE);
|
widgDelete(psWScreen, IDMISSIONRES_TITLE);
|
||||||
|
@ -3632,7 +3402,6 @@ void intCDCancel( void )
|
||||||
|
|
||||||
|
|
||||||
//sets up the game to start a new mission
|
//sets up the game to start a new mission
|
||||||
//BOOL setUpMission(MISSION_TYPE type)
|
|
||||||
BOOL setUpMission(UDWORD type)
|
BOOL setUpMission(UDWORD type)
|
||||||
{
|
{
|
||||||
//close the interface
|
//close the interface
|
||||||
|
@ -3753,20 +3522,14 @@ void adjustMissionPower(void)
|
||||||
game needs to be paused*/
|
game needs to be paused*/
|
||||||
void setMissionPauseState(void)
|
void setMissionPauseState(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (!bMultiPlayer)
|
if (!bMultiPlayer)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
gameTimeStop();
|
gameTimeStop();
|
||||||
setGameUpdatePause(TRUE);
|
setGameUpdatePause(TRUE);
|
||||||
setAudioPause(TRUE);
|
setAudioPause(TRUE);
|
||||||
setScriptPause(TRUE);
|
setScriptPause(TRUE);
|
||||||
setConsolePause(TRUE);
|
setConsolePause(TRUE);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*resets the pause states */
|
/*resets the pause states */
|
||||||
|
|
14
src/objmem.c
14
src/objmem.c
|
@ -452,13 +452,13 @@ void removeDroid(DROID *psDroidToRemove, DROID *pList[MAX_PLAYERS])
|
||||||
"removeUnit: invalid player for unit" );
|
"removeUnit: invalid player for unit" );
|
||||||
removeObjectFromList((BASE_OBJECT**)pList, (BASE_OBJECT*)psDroidToRemove);
|
removeObjectFromList((BASE_OBJECT**)pList, (BASE_OBJECT*)psDroidToRemove);
|
||||||
|
|
||||||
/*whenever a droid is removed from the current list its died
|
/* Whenever a droid is removed from the current list its died
|
||||||
flag is set to NOT_CURRENT_LIST so that anything targetting
|
* flag is set to NOT_CURRENT_LIST so that anything targetting
|
||||||
it will cancel itself - HACK?!*/
|
* it will cancel itself, and we know it is not really on the map. */
|
||||||
if (pList[psDroidToRemove->player] == apsDroidLists[psDroidToRemove->player])
|
if (pList[psDroidToRemove->player] == apsDroidLists[psDroidToRemove->player])
|
||||||
{
|
{
|
||||||
psDroidToRemove->died = NOT_CURRENT_LIST;
|
psDroidToRemove->died = NOT_CURRENT_LIST;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*Removes all droids that may be stored in the mission lists*/
|
/*Removes all droids that may be stored in the mission lists*/
|
||||||
|
|
|
@ -969,27 +969,23 @@ BOOL scrAddDroidToTransporter(void)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psTransporter == NULL || psDroid == NULL)
|
if (psTransporter == NULL || psDroid == NULL)
|
||||||
{
|
{
|
||||||
//ignore!
|
ASSERT(FALSE, "scrAddUnitToTransporter: null unit passed");
|
||||||
ASSERT( FALSE, "scrAddUnitToTransporter: null unit passed" );
|
return TRUE; // allow to continue
|
||||||
return TRUE;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
ASSERT( psTransporter != NULL,
|
ASSERT(psTransporter != NULL, "scrAddUnitToTransporter: invalid transporter pointer");
|
||||||
"scrAddUnitToTransporter: invalid transporter pointer" );
|
ASSERT(psDroid != NULL, "scrAddUnitToTransporter: invalid unit pointer");
|
||||||
ASSERT( psDroid != NULL,
|
ASSERT(psTransporter->droidType == DROID_TRANSPORTER, "scrAddUnitToTransporter: invalid transporter type");
|
||||||
"scrAddUnitToTransporter: invalid unit pointer" );
|
|
||||||
ASSERT( psTransporter->droidType == DROID_TRANSPORTER,
|
|
||||||
"scrAddUnitToTransporter: invalid transporter type" );
|
|
||||||
|
|
||||||
/* check for space */
|
/* check for space */
|
||||||
if (checkTransporterSpace(psTransporter, psDroid))
|
if (checkTransporterSpace(psTransporter, psDroid))
|
||||||
{
|
{
|
||||||
if (droidRemove(psDroid, mission.apsDroidLists))
|
if (droidRemove(psDroid, mission.apsDroidLists))
|
||||||
{
|
{
|
||||||
grpJoin(psTransporter->psGroup, psDroid);
|
grpJoin(psTransporter->psGroup, psDroid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
Loading…
Reference in New Issue