Accuracy for rockets and missiles, not just shots.

This commit is contained in:
Steve 2016-03-03 09:12:08 +00:00
parent 2f168c2559
commit d5d5169078
9 changed files with 88 additions and 35 deletions

View File

@ -25,7 +25,7 @@
"value" : 120 "value" : 120
}, },
{ {
"type" : "CHALLENGE_ACCURACY", "type" : "CHALLENGE_SHOT_ACCURACY",
"value" : 80 "value" : 80
} }
] ]

View File

@ -368,6 +368,8 @@ static void postBattle(void)
} }
} }
updateAccuracyStats(game.stats);
if (!game.currentMission->challengeData.isChallenge) if (!game.currentMission->challengeData.isChallenge)
{ {
if (game.currentMission && !game.currentMission->completed) if (game.currentMission && !game.currentMission->completed)

View File

@ -82,6 +82,7 @@ extern void destroyDebris(void);
extern void destroyBullets(void); extern void destroyBullets(void);
extern void destroyEffects(void); extern void destroyEffects(void);
extern void initChallengeHome(void); extern void initChallengeHome(void);
extern void updateAccuracyStats(unsigned int *stats);
extern App app; extern App app;
extern Battle battle; extern Battle battle;

View File

@ -169,27 +169,30 @@ static void drawChallenges(void)
{ {
c = game.currentMission->challengeData.challenges[i]; c = game.currentMission->challengeData.challenges[i];
y += 50; if (c)
color = colors.white;
challengeStatus = _("Incomplete");
if (c->passed)
{ {
color = colors.green; y += 50;
challengeStatus = _("Complete"); color = colors.white;
challengeStatus = _("Incomplete");
if (c->passed)
{
color = colors.green;
challengeStatus = _("Complete");
}
else if (battle.status == MS_COMPLETE ||battle.status == MS_FAILED)
{
color = colors.red;
challengeStatus = _("Failed");
}
drawText(SCREEN_WIDTH / 2 - 50, y, 22, TA_RIGHT, colors.white, "%s", getChallengeDescription(c));
drawText(SCREEN_WIDTH / 2 + 50, y, 22, TA_LEFT, color, challengeStatus);
} }
else if (battle.status == MS_COMPLETE ||battle.status == MS_FAILED)
{
color = colors.red;
challengeStatus = _("Failed");
}
drawText(SCREEN_WIDTH / 2 - 50, y, 22, TA_RIGHT, colors.white, "%s", getChallengeDescription(c));
drawText(SCREEN_WIDTH / 2 + 50, y, 22, TA_LEFT, color, challengeStatus);
} }
} }

View File

@ -45,7 +45,9 @@ void initChallenges(void)
challengeDescription[CHALLENGE_ARMOUR] = _("Retain at least %d%% armour"); challengeDescription[CHALLENGE_ARMOUR] = _("Retain at least %d%% armour");
challengeDescription[CHALLENGE_TIME] = _("Complete challenge in %d seconds or less"); challengeDescription[CHALLENGE_TIME] = _("Complete challenge in %d seconds or less");
challengeDescription[CHALLENGE_ACCURACY] = _("Attain a %d%% hit accuracy"); challengeDescription[CHALLENGE_SHOT_ACCURACY] = _("Attain a %d%% shot hit accuracy");
challengeDescription[CHALLENGE_ROCKET_ACCURACY] = _("Attain a %d%% rocket hit accuracy");
challengeDescription[CHALLENGE_MISSILE_ACCURACY] = _("Attain a %d%% missile hit accuracy");
challengeDescription[CHALLENGE_NO_LOSSES] = _("Do not lose any team mates"); challengeDescription[CHALLENGE_NO_LOSSES] = _("Do not lose any team mates");
challengeDescription[CHALLENGE_1_LOSS] = _("Do not lose more than 1 team mate"); challengeDescription[CHALLENGE_1_LOSS] = _("Do not lose more than 1 team mate");
challengeDescription[CHALLENGE_LOSSES] = _("Do not lose more than %d team mates"); challengeDescription[CHALLENGE_LOSSES] = _("Do not lose more than %d team mates");
@ -97,11 +99,13 @@ static void updateChallenges(void)
int i; int i;
Challenge *c; Challenge *c;
updateAccuracyStats(battle.stats);
for (i = 0 ; i < MAX_CHALLENGES ; i++) for (i = 0 ; i < MAX_CHALLENGES ; i++)
{ {
c = game.currentMission->challengeData.challenges[i]; c = game.currentMission->challengeData.challenges[i];
if (!c->passed) if (c && !c->passed)
{ {
switch (c->type) switch (c->type)
{ {
@ -110,7 +114,9 @@ static void updateChallenges(void)
updateTimeChallenge(c); updateTimeChallenge(c);
break; break;
case CHALLENGE_ACCURACY: case CHALLENGE_SHOT_ACCURACY:
case CHALLENGE_ROCKET_ACCURACY:
case CHALLENGE_MISSILE_ACCURACY:
updateAccuracyChallenge(c); updateAccuracyChallenge(c);
break; break;
@ -159,8 +165,6 @@ static void printStats(void)
} }
} }
} }
printf("DEBUG: Accuracy=%d\n", getPercent(battle.stats[STAT_SHOTS_FIRED], battle.stats[STAT_SHOTS_HIT]));
} }
static void updateTimeChallenge(Challenge *c) static void updateTimeChallenge(Challenge *c)
@ -187,9 +191,24 @@ static void updateAccuracyChallenge(Challenge *c)
{ {
float percent; float percent;
percent = battle.stats[STAT_SHOTS_HIT]; switch (c->type)
percent /= battle.stats[STAT_SHOTS_FIRED]; {
percent *= 100; case CHALLENGE_SHOT_ACCURACY:
percent = battle.stats[STAT_SHOT_ACCURACY];
break;
case CHALLENGE_ROCKET_ACCURACY:
percent = battle.stats[STAT_ROCKET_ACCURACY];
break;
case CHALLENGE_MISSILE_ACCURACY:
percent = battle.stats[STAT_MISSILE_ACCURACY];
break;
default:
percent = 0;
break;
}
if (percent >= c->value) if (percent >= c->value)
{ {

View File

@ -30,6 +30,7 @@ extern char *getFileLocation(char *filename);
extern char *getLookupName(char *prefix, long num); 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 Dev dev; extern Dev dev;
extern Battle battle; extern Battle battle;

View File

@ -257,7 +257,9 @@ enum
{ {
CHALLENGE_ARMOUR, CHALLENGE_ARMOUR,
CHALLENGE_TIME, CHALLENGE_TIME,
CHALLENGE_ACCURACY, CHALLENGE_SHOT_ACCURACY,
CHALLENGE_ROCKET_ACCURACY,
CHALLENGE_MISSILE_ACCURACY,
CHALLENGE_NO_LOSSES, CHALLENGE_NO_LOSSES,
CHALLENGE_1_LOSS, CHALLENGE_1_LOSS,
CHALLENGE_LOSSES, CHALLENGE_LOSSES,
@ -276,10 +278,13 @@ enum
STAT_CHALLENGES_COMPLETED, STAT_CHALLENGES_COMPLETED,
STAT_SHOTS_FIRED, STAT_SHOTS_FIRED,
STAT_SHOTS_HIT, STAT_SHOTS_HIT,
STAT_SHOT_ACCURACY,
STAT_ROCKETS_FIRED, STAT_ROCKETS_FIRED,
STAT_ROCKETS_HIT, STAT_ROCKETS_HIT,
STAT_ROCKET_ACCURACY,
STAT_MISSILES_FIRED, STAT_MISSILES_FIRED,
STAT_MISSILES_HIT, STAT_MISSILES_HIT,
STAT_MISSILE_ACCURACY,
STAT_ENEMIES_KILLED, STAT_ENEMIES_KILLED,
STAT_ENEMIES_KILLED_PLAYER, STAT_ENEMIES_KILLED_PLAYER,
STAT_ALLIES_KILLED, STAT_ALLIES_KILLED,

View File

@ -23,9 +23,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
static void prevPage(void); static void prevPage(void);
static void nextPage(void); static void nextPage(void);
static void calculatePercentComplete(void); static void calculatePercentComplete(void);
void updateAccuracyStats(unsigned int *stats);
static char *statDescription[STAT_MAX]; static char *statDescription[STAT_MAX];
static int page; static int page;
static float maxPages; static float maxPages;
static Widget *prev; static Widget *prev;
@ -40,10 +40,13 @@ void initStats(void)
statDescription[STAT_CHALLENGES_COMPLETED] = _("Challenges Completed"); statDescription[STAT_CHALLENGES_COMPLETED] = _("Challenges Completed");
statDescription[STAT_SHOTS_FIRED] = _("Shots Fired"); statDescription[STAT_SHOTS_FIRED] = _("Shots Fired");
statDescription[STAT_SHOTS_HIT] = _("Shots Hit"); statDescription[STAT_SHOTS_HIT] = _("Shots Hit");
statDescription[STAT_SHOT_ACCURACY] = _("Accuracy");
statDescription[STAT_ROCKETS_FIRED] = _("Rockets Fired"); statDescription[STAT_ROCKETS_FIRED] = _("Rockets Fired");
statDescription[STAT_ROCKETS_HIT] = _("Rockets Hit"); statDescription[STAT_ROCKETS_HIT] = _("Rockets Hit");
statDescription[STAT_ROCKET_ACCURACY] = _("Accuracy");
statDescription[STAT_MISSILES_FIRED] = _("Missiles Fired"); statDescription[STAT_MISSILES_FIRED] = _("Missiles Fired");
statDescription[STAT_MISSILES_HIT] = _("Missiles Hit"); statDescription[STAT_MISSILES_HIT] = _("Missiles Hit");
statDescription[STAT_MISSILE_ACCURACY] = _("Accuracy");
statDescription[STAT_ENEMIES_KILLED] = _("Enemies Killed"); statDescription[STAT_ENEMIES_KILLED] = _("Enemies Killed");
statDescription[STAT_ENEMIES_KILLED_PLAYER] = _("Enemies Killed (Player)"); statDescription[STAT_ENEMIES_KILLED_PLAYER] = _("Enemies Killed (Player)");
statDescription[STAT_ALLIES_KILLED] = _("Allies Killed"); statDescription[STAT_ALLIES_KILLED] = _("Allies Killed");
@ -82,6 +85,8 @@ void initStatsDisplay(void)
next->action = nextPage; next->action = nextPage;
calculatePercentComplete(); calculatePercentComplete();
updateAccuracyStats(game.stats);
} }
static void calculatePercentComplete(void) static void calculatePercentComplete(void)
@ -144,13 +149,18 @@ void drawStats(void)
{ {
drawText(r.x + 20, y, 18, TA_LEFT, colors.white, statDescription[i]); drawText(r.x + 20, y, 18, TA_LEFT, colors.white, statDescription[i]);
if (i == STAT_PERCENT_COMPLETE) switch (i)
{ {
drawText(r.x + r.w - 20, y, 18, TA_RIGHT, colors.white, "%d%%", game.stats[i]); case STAT_PERCENT_COMPLETE:
} case STAT_SHOT_ACCURACY:
else case STAT_ROCKET_ACCURACY:
{ case STAT_MISSILE_ACCURACY:
drawText(r.x + r.w - 20, y, 18, TA_RIGHT, colors.white, "%d", game.stats[i]); drawText(r.x + r.w - 20, y, 18, TA_RIGHT, colors.white, "%d%%", game.stats[i]);
break;
default:
drawText(r.x + r.w - 20, y, 18, TA_RIGHT, colors.white, "%d", game.stats[i]);
break;
} }
y += 40; y += 40;
@ -178,3 +188,10 @@ static void prevPage(void)
next->visible = 1; next->visible = 1;
prev->visible = page > 0; prev->visible = page > 0;
} }
void updateAccuracyStats(unsigned int *stats)
{
stats[STAT_SHOT_ACCURACY] = getPercent(stats[STAT_SHOTS_HIT], stats[STAT_SHOTS_FIRED]);
stats[STAT_ROCKET_ACCURACY] = getPercent(stats[STAT_ROCKETS_HIT], stats[STAT_ROCKETS_FIRED]);
stats[STAT_MISSILE_ACCURACY] = getPercent(stats[STAT_MISSILES_HIT], stats[STAT_MISSILES_FIRED]);
}

View File

@ -108,7 +108,9 @@ void initLookups(void)
addLookup("CHALLENGE_ARMOUR", CHALLENGE_ARMOUR); addLookup("CHALLENGE_ARMOUR", CHALLENGE_ARMOUR);
addLookup("CHALLENGE_TIME", CHALLENGE_TIME); addLookup("CHALLENGE_TIME", CHALLENGE_TIME);
addLookup("CHALLENGE_ACCURACY", CHALLENGE_ACCURACY); addLookup("CHALLENGE_SHOT_ACCURACY", CHALLENGE_SHOT_ACCURACY);
addLookup("CHALLENGE_ROCKET_ACCURACY", CHALLENGE_ROCKET_ACCURACY);
addLookup("CHALLENGE_MISSILE_ACCURACY", CHALLENGE_MISSILE_ACCURACY);
addLookup("CHALLENGE_NO_LOSSES", CHALLENGE_NO_LOSSES); addLookup("CHALLENGE_NO_LOSSES", CHALLENGE_NO_LOSSES);
addLookup("CHALLENGE_1_LOSS", CHALLENGE_1_LOSS); addLookup("CHALLENGE_1_LOSS", CHALLENGE_1_LOSS);
addLookup("CHALLENGE_LOSSES", CHALLENGE_LOSSES); addLookup("CHALLENGE_LOSSES", CHALLENGE_LOSSES);
@ -123,10 +125,13 @@ void initLookups(void)
addLookup("STAT_CHALLENGES_COMPLETED", STAT_CHALLENGES_COMPLETED); addLookup("STAT_CHALLENGES_COMPLETED", STAT_CHALLENGES_COMPLETED);
addLookup("STAT_SHOTS_FIRED", STAT_SHOTS_FIRED); addLookup("STAT_SHOTS_FIRED", STAT_SHOTS_FIRED);
addLookup("STAT_SHOTS_HIT", STAT_SHOTS_HIT); addLookup("STAT_SHOTS_HIT", STAT_SHOTS_HIT);
addLookup("STAT_SHOT_ACCURACY", STAT_SHOT_ACCURACY);
addLookup("STAT_ROCKETS_FIRED", STAT_ROCKETS_FIRED); addLookup("STAT_ROCKETS_FIRED", STAT_ROCKETS_FIRED);
addLookup("STAT_ROCKETS_HIT", STAT_ROCKETS_HIT); addLookup("STAT_ROCKETS_HIT", STAT_ROCKETS_HIT);
addLookup("STAT_ROCKET_ACCURACY", STAT_ROCKET_ACCURACY);
addLookup("STAT_MISSILES_FIRED", STAT_MISSILES_FIRED); addLookup("STAT_MISSILES_FIRED", STAT_MISSILES_FIRED);
addLookup("STAT_MISSILES_HIT", STAT_MISSILES_HIT); addLookup("STAT_MISSILES_HIT", STAT_MISSILES_HIT);
addLookup("STAT_MISSILE_ACCURACY", STAT_MISSILE_ACCURACY);
addLookup("STAT_ENEMIES_KILLED", STAT_ENEMIES_KILLED); addLookup("STAT_ENEMIES_KILLED", STAT_ENEMIES_KILLED);
addLookup("STAT_ENEMIES_KILLED_PLAYER", STAT_ENEMIES_KILLED_PLAYER); addLookup("STAT_ENEMIES_KILLED_PLAYER", STAT_ENEMIES_KILLED_PLAYER);
addLookup("STAT_ALLIES_KILLED", STAT_ALLIES_KILLED); addLookup("STAT_ALLIES_KILLED", STAT_ALLIES_KILLED);