Waypoint challenge updates.
This commit is contained in:
parent
599c4fc338
commit
7979b175a2
|
@ -14,18 +14,19 @@
|
||||||
},
|
},
|
||||||
"challenge" : {
|
"challenge" : {
|
||||||
"waypointLimit" : 5,
|
"waypointLimit" : 5,
|
||||||
|
"timeLimit" : 120,
|
||||||
"challenges" : [
|
"challenges" : [
|
||||||
{
|
{
|
||||||
"type" : "CHALLENGE_TIME",
|
"type" : "CHALLENGE_TIME",
|
||||||
"value" : 60
|
"value" : 80
|
||||||
},
|
|
||||||
{
|
|
||||||
"type" : "CHALLENGE_TIME",
|
|
||||||
"value" : 90
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type" : "CHALLENGE_TIME",
|
"type" : "CHALLENGE_TIME",
|
||||||
"value" : 120
|
"value" : 120
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type" : "CHALLENGE_ARMOUR",
|
||||||
|
"value" : 100
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -33,34 +34,46 @@
|
||||||
{
|
{
|
||||||
"groupName" : "RT1",
|
"groupName" : "RT1",
|
||||||
"types" : "Rocket Turret",
|
"types" : "Rocket Turret",
|
||||||
"x" : 35,
|
"x" : 30,
|
||||||
"y" : 15,
|
"y" : 30,
|
||||||
"side" : "SIDE_REBEL",
|
"side" : "SIDE_REBEL",
|
||||||
"active" : 0
|
"scatter" : 1000,
|
||||||
|
"number" : 2
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"groupName" : "RT1",
|
||||||
|
"types" : "Rocket Turret",
|
||||||
|
"x" : 30,
|
||||||
|
"y" : 20,
|
||||||
|
"side" : "SIDE_REBEL",
|
||||||
|
"scatter" : 1000,
|
||||||
|
"number" : 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"groupName" : "RT2",
|
"groupName" : "RT2",
|
||||||
"types" : "Rocket Turret",
|
"types" : "Rocket Turret",
|
||||||
"x" : 15,
|
"x" : 20,
|
||||||
"y" : 15,
|
"y" : 20,
|
||||||
"side" : "SIDE_REBEL",
|
"side" : "SIDE_REBEL",
|
||||||
"active" : 0
|
"scatter" : 1000,
|
||||||
|
"number" : 2
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"groupName" : "RT3",
|
"groupName" : "RT3",
|
||||||
"types" : "Rocket Turret",
|
"types" : "Rocket Turret",
|
||||||
"x" : 15,
|
"x" : 20,
|
||||||
"y" : 35,
|
"y" : 30,
|
||||||
"side" : "SIDE_REBEL",
|
"side" : "SIDE_REBEL",
|
||||||
"active" : 0
|
"scatter" : 1000,
|
||||||
}
|
"number" : 2
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"groupName" : "RT4",
|
"groupName" : "RT4",
|
||||||
"types" : "Rocket Turret",
|
"types" : "Rocket Turret",
|
||||||
"x" : 25,
|
"x" : 25,
|
||||||
"y" : 25,
|
"y" : 25,
|
||||||
"side" : "SIDE_REBEL",
|
"side" : "SIDE_REBEL",
|
||||||
"scatter" : 500,
|
"scatter" : 1000,
|
||||||
"number" : 2,
|
"number" : 2,
|
||||||
"active" : 0
|
"active" : 0
|
||||||
}
|
}
|
||||||
|
@ -68,26 +81,26 @@
|
||||||
"entities" : [
|
"entities" : [
|
||||||
{
|
{
|
||||||
"type" : "ET_WAYPOINT",
|
"type" : "ET_WAYPOINT",
|
||||||
"x" : 35,
|
"x" : 30,
|
||||||
"y" : 35,
|
"y" : 30,
|
||||||
"active" : 0
|
"active" : 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type" : "ET_WAYPOINT",
|
"type" : "ET_WAYPOINT",
|
||||||
"x" : 35,
|
"x" : 30,
|
||||||
"y" : 15,
|
"y" : 20,
|
||||||
"active" : 0
|
"active" : 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type" : "ET_WAYPOINT",
|
"type" : "ET_WAYPOINT",
|
||||||
"x" : 15,
|
"x" : 20,
|
||||||
"y" : 15,
|
"y" : 20,
|
||||||
"active" : 0
|
"active" : 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type" : "ET_WAYPOINT",
|
"type" : "ET_WAYPOINT",
|
||||||
"x" : 15,
|
"x" : 20,
|
||||||
"y" : 35,
|
"y" : 30,
|
||||||
"active" : 0
|
"active" : 0
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -98,24 +111,6 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"script" : [
|
"script" : [
|
||||||
{
|
|
||||||
"function" : "Waypoint #1",
|
|
||||||
"lines" : [
|
|
||||||
"ACTIVATE_ENTITY_GROUPS RT1"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"function" : "Waypoint #2",
|
|
||||||
"lines" : [
|
|
||||||
"ACTIVATE_ENTITY_GROUPS RT2"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"function" : "Waypoint #3",
|
|
||||||
"lines" : [
|
|
||||||
"ACTIVATE_ENTITY_GROUPS RT3"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"function" : "Waypoint #4",
|
"function" : "Waypoint #4",
|
||||||
"lines" : [
|
"lines" : [
|
||||||
|
|
|
@ -67,6 +67,8 @@ static void think(void)
|
||||||
runScriptFunction(self->name);
|
runScriptFunction(self->name);
|
||||||
|
|
||||||
activateNextWaypoint(self->id);
|
activateNextWaypoint(self->id);
|
||||||
|
|
||||||
|
battle.stats[STAT_WAYPOINTS_VISITED]++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@ static void updateChallenges(void);
|
||||||
static char *getFormattedChallengeDescription(const char *format, ...);
|
static char *getFormattedChallengeDescription(const char *format, ...);
|
||||||
char *getChallengeDescription(Challenge *c);
|
char *getChallengeDescription(Challenge *c);
|
||||||
static int hasFailedAllChallenges(void);
|
static int hasFailedAllChallenges(void);
|
||||||
|
static int challengeFinished(void);
|
||||||
static void printStats(void);
|
static void printStats(void);
|
||||||
|
|
||||||
static char descriptionBuffer[MAX_DESCRIPTION_LENGTH];
|
static char descriptionBuffer[MAX_DESCRIPTION_LENGTH];
|
||||||
|
@ -54,7 +55,6 @@ void initChallenges(void)
|
||||||
challengeDescription[CHALLENGE_LOSSES] = _("Do not lose more than %d team mates");
|
challengeDescription[CHALLENGE_LOSSES] = _("Do not lose more than %d team mates");
|
||||||
challengeDescription[CHALLENGE_PLAYER_KILLS] = _("Take down %d enemy targets");
|
challengeDescription[CHALLENGE_PLAYER_KILLS] = _("Take down %d enemy targets");
|
||||||
challengeDescription[CHALLENGE_DISABLE] = _("Disable %d or more enemy fighters");
|
challengeDescription[CHALLENGE_DISABLE] = _("Disable %d or more enemy fighters");
|
||||||
challengeDescription[CHALLENGE_TIME_MINS] = _("Complete challenge in %d minutes or less");
|
|
||||||
|
|
||||||
tail = &game.challengeMissionHead;
|
tail = &game.challengeMissionHead;
|
||||||
|
|
||||||
|
@ -78,7 +78,7 @@ void doChallenges(void)
|
||||||
{
|
{
|
||||||
if (game.currentMission->challengeData.isChallenge && battle.status == MS_IN_PROGRESS)
|
if (game.currentMission->challengeData.isChallenge && battle.status == MS_IN_PROGRESS)
|
||||||
{
|
{
|
||||||
if (game.currentMission->challengeData.timeLimit > 0 && battle.stats[STAT_TIME] >= game.currentMission->challengeData.timeLimit)
|
if (challengeFinished())
|
||||||
{
|
{
|
||||||
updateChallenges();
|
updateChallenges();
|
||||||
|
|
||||||
|
@ -91,15 +91,33 @@ void doChallenges(void)
|
||||||
completeChallenge();
|
completeChallenge();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int challengeFinished(void)
|
||||||
|
{
|
||||||
|
if (game.currentMission->challengeData.timeLimit > 0 && battle.stats[STAT_TIME] >= game.currentMission->challengeData.timeLimit)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* disabled enemies count as killed during challenges - not player exclusive, but no need to worry about AI contributions here */
|
/* disabled enemies count as killed during challenges - not player exclusive, but no need to worry about AI contributions here */
|
||||||
if (game.currentMission->challengeData.killLimit > 0 && (battle.stats[STAT_ENEMIES_KILLED_PLAYER] + battle.stats[STAT_ENEMIES_DISABLED]) >= game.currentMission->challengeData.killLimit)
|
if (game.currentMission->challengeData.killLimit > 0 && (battle.stats[STAT_ENEMIES_KILLED_PLAYER] + battle.stats[STAT_ENEMIES_DISABLED]) >= game.currentMission->challengeData.killLimit)
|
||||||
{
|
{
|
||||||
updateChallenges();
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
completeChallenge();
|
if (game.currentMission->challengeData.waypointLimit > 0 && battle.stats[STAT_WAYPOINTS_VISITED] >= game.currentMission->challengeData.waypointLimit)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (game.currentMission->challengeData.itemLimit > 0 && battle.stats[STAT_ITEMS_COLLECTED] >= game.currentMission->challengeData.itemLimit)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hasFailedAllChallenges(void)
|
static int hasFailedAllChallenges(void)
|
||||||
|
@ -136,7 +154,6 @@ static void updateChallenges(void)
|
||||||
switch (c->type)
|
switch (c->type)
|
||||||
{
|
{
|
||||||
case CHALLENGE_TIME:
|
case CHALLENGE_TIME:
|
||||||
case CHALLENGE_TIME_MINS:
|
|
||||||
updateTimeChallenge(c);
|
updateTimeChallenge(c);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -195,22 +212,10 @@ static void printStats(void)
|
||||||
|
|
||||||
static void updateTimeChallenge(Challenge *c)
|
static void updateTimeChallenge(Challenge *c)
|
||||||
{
|
{
|
||||||
switch (c->type)
|
|
||||||
{
|
|
||||||
case CHALLENGE_TIME:
|
|
||||||
if (battle.stats[STAT_TIME] / FPS < c->value)
|
if (battle.stats[STAT_TIME] / FPS < c->value)
|
||||||
{
|
{
|
||||||
c->passed = 1;
|
c->passed = 1;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
case CHALLENGE_TIME_MINS:
|
|
||||||
if ((battle.stats[STAT_TIME] / FPS) / 60 < c->value)
|
|
||||||
{
|
|
||||||
c->passed = 1;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void updateAccuracyChallenge(Challenge *c)
|
static void updateAccuracyChallenge(Challenge *c)
|
||||||
|
|
|
@ -30,6 +30,7 @@ extern char *getLookupName(char *prefix, long num);
|
||||||
extern char *timeToString(long millis, int showHours);
|
extern char *timeToString(long millis, int showHours);
|
||||||
extern int getPercent(float current, float total);
|
extern int getPercent(float current, float total);
|
||||||
extern void updateAccuracyStats(unsigned int *stats);
|
extern void updateAccuracyStats(unsigned int *stats);
|
||||||
|
extern char *timeToString(long millis, int showHours);
|
||||||
|
|
||||||
extern Dev dev;
|
extern Dev dev;
|
||||||
extern Battle battle;
|
extern Battle battle;
|
||||||
|
|
|
@ -287,7 +287,6 @@ enum
|
||||||
CHALLENGE_LOSSES,
|
CHALLENGE_LOSSES,
|
||||||
CHALLENGE_PLAYER_KILLS,
|
CHALLENGE_PLAYER_KILLS,
|
||||||
CHALLENGE_DISABLE,
|
CHALLENGE_DISABLE,
|
||||||
CHALLENGE_TIME_MINS,
|
|
||||||
CHALLENGE_MAX
|
CHALLENGE_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -323,6 +322,7 @@ enum
|
||||||
STAT_SHUTTLE,
|
STAT_SHUTTLE,
|
||||||
STAT_NUM_TOWED,
|
STAT_NUM_TOWED,
|
||||||
STAT_ITEMS_COLLECTED,
|
STAT_ITEMS_COLLECTED,
|
||||||
|
STAT_WAYPOINTS_VISITED,
|
||||||
STAT_EPIC_KILL_STREAK,
|
STAT_EPIC_KILL_STREAK,
|
||||||
STAT_CAPITAL_SHIPS_DESTROYED,
|
STAT_CAPITAL_SHIPS_DESTROYED,
|
||||||
STAT_CAPITAL_SHIPS_LOST,
|
STAT_CAPITAL_SHIPS_LOST,
|
||||||
|
|
|
@ -77,7 +77,7 @@ Mission *loadMissionMeta(char *filename)
|
||||||
{
|
{
|
||||||
mission->challengeData.isChallenge = 1;
|
mission->challengeData.isChallenge = 1;
|
||||||
|
|
||||||
mission->challengeData.timeLimit = getJSONValue(node, "timeLimit", 0);
|
mission->challengeData.timeLimit = getJSONValue(node, "timeLimit", 0) * FPS;
|
||||||
mission->challengeData.killLimit = getJSONValue(node, "killLimit", 0);
|
mission->challengeData.killLimit = getJSONValue(node, "killLimit", 0);
|
||||||
mission->challengeData.waypointLimit = getJSONValue(node, "waypointLimit", 0);
|
mission->challengeData.waypointLimit = getJSONValue(node, "waypointLimit", 0);
|
||||||
mission->challengeData.noMissiles = getJSONValue(node, "noMissiles", 0);
|
mission->challengeData.noMissiles = getJSONValue(node, "noMissiles", 0);
|
||||||
|
|
|
@ -64,6 +64,7 @@ void initStats(void)
|
||||||
statDescription[STAT_NUM_TOWED] = _("Craft Towed");
|
statDescription[STAT_NUM_TOWED] = _("Craft Towed");
|
||||||
statDescription[STAT_ITEMS_COLLECTED] = _("Items Collected");
|
statDescription[STAT_ITEMS_COLLECTED] = _("Items Collected");
|
||||||
statDescription[STAT_EPIC_KILL_STREAK] = _("Longest Epic Kill Streak");
|
statDescription[STAT_EPIC_KILL_STREAK] = _("Longest Epic Kill Streak");
|
||||||
|
statDescription[STAT_WAYPOINTS_VISITED] = _("Waypoints Visited");
|
||||||
statDescription[STAT_CAPITAL_SHIPS_DESTROYED] = _("Capital Ships Destroyed");
|
statDescription[STAT_CAPITAL_SHIPS_DESTROYED] = _("Capital Ships Destroyed");
|
||||||
statDescription[STAT_CAPITAL_SHIPS_LOST] = _("Capital Ships Lost");
|
statDescription[STAT_CAPITAL_SHIPS_LOST] = _("Capital Ships Lost");
|
||||||
statDescription[STAT_TIME] = _("Time Played");
|
statDescription[STAT_TIME] = _("Time Played");
|
||||||
|
|
|
@ -247,6 +247,7 @@ typedef struct {
|
||||||
int killLimit;
|
int killLimit;
|
||||||
int lossLimit;
|
int lossLimit;
|
||||||
int itemLimit;
|
int itemLimit;
|
||||||
|
int waypointLimit;
|
||||||
int noMissiles;
|
int noMissiles;
|
||||||
int noBoost;
|
int noBoost;
|
||||||
int noECM;
|
int noECM;
|
||||||
|
|
|
@ -130,7 +130,6 @@ void initLookups(void)
|
||||||
addLookup("CHALLENGE_LOSSES", CHALLENGE_LOSSES);
|
addLookup("CHALLENGE_LOSSES", CHALLENGE_LOSSES);
|
||||||
addLookup("CHALLENGE_PLAYER_KILLS", CHALLENGE_PLAYER_KILLS);
|
addLookup("CHALLENGE_PLAYER_KILLS", CHALLENGE_PLAYER_KILLS);
|
||||||
addLookup("CHALLENGE_DISABLE", CHALLENGE_DISABLE);
|
addLookup("CHALLENGE_DISABLE", CHALLENGE_DISABLE);
|
||||||
addLookup("CHALLENGE_TIME_MINS", CHALLENGE_TIME_MINS);
|
|
||||||
|
|
||||||
addLookup("STAT_PERCENT_COMPLETE", STAT_PERCENT_COMPLETE);
|
addLookup("STAT_PERCENT_COMPLETE", STAT_PERCENT_COMPLETE);
|
||||||
addLookup("STAT_MISSIONS_STARTED", STAT_MISSIONS_STARTED);
|
addLookup("STAT_MISSIONS_STARTED", STAT_MISSIONS_STARTED);
|
||||||
|
@ -162,6 +161,7 @@ void initLookups(void)
|
||||||
addLookup("STAT_SHUTTLE", STAT_SHUTTLE);
|
addLookup("STAT_SHUTTLE", STAT_SHUTTLE);
|
||||||
addLookup("STAT_NUM_TOWED", STAT_NUM_TOWED);
|
addLookup("STAT_NUM_TOWED", STAT_NUM_TOWED);
|
||||||
addLookup("STAT_ITEMS_COLLECTED", STAT_ITEMS_COLLECTED);
|
addLookup("STAT_ITEMS_COLLECTED", STAT_ITEMS_COLLECTED);
|
||||||
|
addLookup("STAT_WAYPOINTS_VISITED", STAT_WAYPOINTS_VISITED);
|
||||||
addLookup("STAT_EPIC_KILL_STREAK", STAT_EPIC_KILL_STREAK);
|
addLookup("STAT_EPIC_KILL_STREAK", STAT_EPIC_KILL_STREAK);
|
||||||
addLookup("STAT_CAPITAL_SHIPS_DESTROYED", STAT_CAPITAL_SHIPS_DESTROYED);
|
addLookup("STAT_CAPITAL_SHIPS_DESTROYED", STAT_CAPITAL_SHIPS_DESTROYED);
|
||||||
addLookup("STAT_CAPITAL_SHIPS_LOST", STAT_CAPITAL_SHIPS_LOST);
|
addLookup("STAT_CAPITAL_SHIPS_LOST", STAT_CAPITAL_SHIPS_LOST);
|
||||||
|
|
Loading…
Reference in New Issue