Handle mission result correctly.
This commit is contained in:
parent
e887e385c7
commit
5a134f2250
|
@ -40,11 +40,8 @@ void initPostMission(void)
|
||||||
|
|
||||||
updateMissionStatus();
|
updateMissionStatus();
|
||||||
|
|
||||||
if (status != MS_INCOMPLETE)
|
if (status == MS_COMPLETE || (!world.isReturnVisit && status != MS_INCOMPLETE))
|
||||||
{
|
{
|
||||||
app.delegate.logic = logic;
|
|
||||||
app.delegate.draw = draw;
|
|
||||||
|
|
||||||
app.restrictTrophyAlert = 0;
|
app.restrictTrophyAlert = 0;
|
||||||
|
|
||||||
canContinue = 0;
|
canContinue = 0;
|
||||||
|
@ -53,8 +50,32 @@ void initPostMission(void)
|
||||||
|
|
||||||
playSound(SND_MISSION_COMPLETE, 0);
|
playSound(SND_MISSION_COMPLETE, 0);
|
||||||
|
|
||||||
|
app.delegate.logic = logic;
|
||||||
|
app.delegate.draw = draw;
|
||||||
|
|
||||||
|
saveGame();
|
||||||
|
|
||||||
|
saveWorld();
|
||||||
|
|
||||||
endSectionTransition();
|
endSectionTransition();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (world.isReturnVisit)
|
||||||
|
{
|
||||||
|
saveWorld();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
restoreGameState();
|
||||||
|
}
|
||||||
|
|
||||||
|
saveGame();
|
||||||
|
|
||||||
|
destroyWorld();
|
||||||
|
|
||||||
|
initHub();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateMissionStatus(void)
|
static void updateMissionStatus(void)
|
||||||
|
@ -77,16 +98,6 @@ static void updateMissionStatus(void)
|
||||||
|
|
||||||
STRNCPY(t->key, world.id, MAX_NAME_LENGTH);
|
STRNCPY(t->key, world.id, MAX_NAME_LENGTH);
|
||||||
t->value.i = status = getMissionStatus();
|
t->value.i = status = getMissionStatus();
|
||||||
|
|
||||||
if (status != MS_INCOMPLETE)
|
|
||||||
{
|
|
||||||
saveGame();
|
|
||||||
saveWorld();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
restoreGameState();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void logic(void)
|
static void logic(void)
|
||||||
|
|
|
@ -24,7 +24,6 @@ static int isMissingHeartCell(char *targetName);
|
||||||
static int countTargetsInWorld(char *targetName);
|
static int countTargetsInWorld(char *targetName);
|
||||||
|
|
||||||
static int missingHeartCell;
|
static int missingHeartCell;
|
||||||
static int isReturnVisit;
|
|
||||||
static int isEliminateAllEnemies;
|
static int isEliminateAllEnemies;
|
||||||
|
|
||||||
void initObjectives(void)
|
void initObjectives(void)
|
||||||
|
@ -32,10 +31,11 @@ void initObjectives(void)
|
||||||
int totalTargets;
|
int totalTargets;
|
||||||
Objective *o;
|
Objective *o;
|
||||||
|
|
||||||
isReturnVisit = world.currentStatus == MS_PARTIAL || world.currentStatus == MS_MISSING_HEART_CELL;
|
world.isReturnVisit = world.currentStatus == MS_PARTIAL || world.currentStatus == MS_MISSING_HEART_CELL;
|
||||||
|
|
||||||
missingHeartCell = world.currentStatus == MS_MISSING_HEART_CELL;
|
missingHeartCell = world.currentStatus == MS_MISSING_HEART_CELL;
|
||||||
|
|
||||||
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "isReturnVisit = %d", isReturnVisit);
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "world.isReturnVisit = %d", world.isReturnVisit);
|
||||||
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "missingHeartCell = %d", missingHeartCell);
|
SDL_LogMessage(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG, "missingHeartCell = %d", missingHeartCell);
|
||||||
|
|
||||||
for (o = world.objectiveHead.next ; o != NULL ; o = o->next)
|
for (o = world.objectiveHead.next ; o != NULL ; o = o->next)
|
||||||
|
@ -64,7 +64,7 @@ void initObjectives(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o->required && isReturnVisit)
|
if (o->required && world.isReturnVisit)
|
||||||
{
|
{
|
||||||
o->targetValue = o->totalValue;
|
o->targetValue = o->totalValue;
|
||||||
o->required = 0;
|
o->required = 0;
|
||||||
|
@ -150,7 +150,7 @@ void updateObjective(char *targetName)
|
||||||
{
|
{
|
||||||
if (o->currentValue < o->targetValue)
|
if (o->currentValue < o->targetValue)
|
||||||
{
|
{
|
||||||
if (o->required || isReturnVisit)
|
if (o->required || world.isReturnVisit)
|
||||||
{
|
{
|
||||||
world.allObjectivesComplete = 0;
|
world.allObjectivesComplete = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,6 +47,7 @@ static void drawQuit(void);
|
||||||
static void quitMission(void);
|
static void quitMission(void);
|
||||||
static void returnFromOptions(void);
|
static void returnFromOptions(void);
|
||||||
int getMissionStatus(void);
|
int getMissionStatus(void);
|
||||||
|
static void completeTrainingMission(void);
|
||||||
|
|
||||||
static Texture *background;
|
static Texture *background;
|
||||||
static int observationIndex;
|
static int observationIndex;
|
||||||
|
@ -664,11 +665,6 @@ int getMissionStatus(void)
|
||||||
Entity *e;
|
Entity *e;
|
||||||
int status;
|
int status;
|
||||||
|
|
||||||
if (world.missionType == MT_TRAINING)
|
|
||||||
{
|
|
||||||
return MS_COMPLETE;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = MS_COMPLETE;
|
status = MS_COMPLETE;
|
||||||
|
|
||||||
for (o = world.objectiveHead.next ; o != NULL ; o = o->next)
|
for (o = world.objectiveHead.next ; o != NULL ; o = o->next)
|
||||||
|
@ -808,6 +804,11 @@ static void quitMission(void)
|
||||||
stopMusic();
|
stopMusic();
|
||||||
world.state = WS_COMPLETE;
|
world.state = WS_COMPLETE;
|
||||||
world.missionCompleteTimer = (FPS * 1.5) + 1;
|
world.missionCompleteTimer = (FPS * 1.5) + 1;
|
||||||
|
|
||||||
|
if (world.missionType == MT_TRAINING)
|
||||||
|
{
|
||||||
|
completeTrainingMission();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void returnFromOptions(void)
|
static void returnFromOptions(void)
|
||||||
|
@ -818,6 +819,39 @@ static void returnFromOptions(void)
|
||||||
returnFromTrophyStats();
|
returnFromTrophyStats();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void completeTrainingMission(void)
|
||||||
|
{
|
||||||
|
Objective *o;
|
||||||
|
Entity *e;
|
||||||
|
|
||||||
|
for (o = world.objectiveHead.next ; o != NULL ; o = o->next)
|
||||||
|
{
|
||||||
|
o->currentValue = o->targetValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (e = world.entityHead.next ; e != NULL ; e = e->next)
|
||||||
|
{
|
||||||
|
switch (e->type)
|
||||||
|
{
|
||||||
|
case ET_MIA:
|
||||||
|
e->alive = ALIVE_DEAD;
|
||||||
|
game.stats[STAT_MIAS_RESCUED]++;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ET_KEY:
|
||||||
|
if (!(e->flags & EF_GONE))
|
||||||
|
{
|
||||||
|
e->alive = ALIVE_DEAD;
|
||||||
|
game.stats[STAT_KEYS_FOUND]++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void destroyWorld(void)
|
void destroyWorld(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
Loading…
Reference in New Issue