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
},
{
"type" : "CHALLENGE_ACCURACY",
"type" : "CHALLENGE_SHOT_ACCURACY",
"value" : 80
}
]

View File

@ -367,6 +367,8 @@ static void postBattle(void)
game.stats[i] += battle.stats[i];
}
}
updateAccuracyStats(game.stats);
if (!game.currentMission->challengeData.isChallenge)
{

View File

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

View File

@ -169,27 +169,30 @@ static void drawChallenges(void)
{
c = game.currentMission->challengeData.challenges[i];
y += 50;
color = colors.white;
challengeStatus = _("Incomplete");
if (c->passed)
if (c)
{
color = colors.green;
y += 50;
challengeStatus = _("Complete");
}
else if (battle.status == MS_COMPLETE ||battle.status == MS_FAILED)
{
color = colors.red;
color = colors.white;
challengeStatus = _("Failed");
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);
}
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_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_1_LOSS] = _("Do not lose more than 1 team mate");
challengeDescription[CHALLENGE_LOSSES] = _("Do not lose more than %d team mates");
@ -97,11 +99,13 @@ static void updateChallenges(void)
int i;
Challenge *c;
updateAccuracyStats(battle.stats);
for (i = 0 ; i < MAX_CHALLENGES ; i++)
{
c = game.currentMission->challengeData.challenges[i];
if (!c->passed)
if (c && !c->passed)
{
switch (c->type)
{
@ -110,7 +114,9 @@ static void updateChallenges(void)
updateTimeChallenge(c);
break;
case CHALLENGE_ACCURACY:
case CHALLENGE_SHOT_ACCURACY:
case CHALLENGE_ROCKET_ACCURACY:
case CHALLENGE_MISSILE_ACCURACY:
updateAccuracyChallenge(c);
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)
@ -187,9 +191,24 @@ static void updateAccuracyChallenge(Challenge *c)
{
float percent;
percent = battle.stats[STAT_SHOTS_HIT];
percent /= battle.stats[STAT_SHOTS_FIRED];
percent *= 100;
switch (c->type)
{
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)
{

View File

@ -30,6 +30,7 @@ extern char *getFileLocation(char *filename);
extern char *getLookupName(char *prefix, long num);
extern char *timeToString(long millis, int showHours);
extern int getPercent(float current, float total);
extern void updateAccuracyStats(unsigned int *stats);
extern Dev dev;
extern Battle battle;

View File

@ -257,7 +257,9 @@ enum
{
CHALLENGE_ARMOUR,
CHALLENGE_TIME,
CHALLENGE_ACCURACY,
CHALLENGE_SHOT_ACCURACY,
CHALLENGE_ROCKET_ACCURACY,
CHALLENGE_MISSILE_ACCURACY,
CHALLENGE_NO_LOSSES,
CHALLENGE_1_LOSS,
CHALLENGE_LOSSES,
@ -276,10 +278,13 @@ enum
STAT_CHALLENGES_COMPLETED,
STAT_SHOTS_FIRED,
STAT_SHOTS_HIT,
STAT_SHOT_ACCURACY,
STAT_ROCKETS_FIRED,
STAT_ROCKETS_HIT,
STAT_ROCKET_ACCURACY,
STAT_MISSILES_FIRED,
STAT_MISSILES_HIT,
STAT_MISSILE_ACCURACY,
STAT_ENEMIES_KILLED,
STAT_ENEMIES_KILLED_PLAYER,
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 nextPage(void);
static void calculatePercentComplete(void);
void updateAccuracyStats(unsigned int *stats);
static char *statDescription[STAT_MAX];
static int page;
static float maxPages;
static Widget *prev;
@ -40,10 +40,13 @@ void initStats(void)
statDescription[STAT_CHALLENGES_COMPLETED] = _("Challenges Completed");
statDescription[STAT_SHOTS_FIRED] = _("Shots Fired");
statDescription[STAT_SHOTS_HIT] = _("Shots Hit");
statDescription[STAT_SHOT_ACCURACY] = _("Accuracy");
statDescription[STAT_ROCKETS_FIRED] = _("Rockets Fired");
statDescription[STAT_ROCKETS_HIT] = _("Rockets Hit");
statDescription[STAT_ROCKET_ACCURACY] = _("Accuracy");
statDescription[STAT_MISSILES_FIRED] = _("Missiles Fired");
statDescription[STAT_MISSILES_HIT] = _("Missiles Hit");
statDescription[STAT_MISSILE_ACCURACY] = _("Accuracy");
statDescription[STAT_ENEMIES_KILLED] = _("Enemies Killed");
statDescription[STAT_ENEMIES_KILLED_PLAYER] = _("Enemies Killed (Player)");
statDescription[STAT_ALLIES_KILLED] = _("Allies Killed");
@ -82,6 +85,8 @@ void initStatsDisplay(void)
next->action = nextPage;
calculatePercentComplete();
updateAccuracyStats(game.stats);
}
static void calculatePercentComplete(void)
@ -144,13 +149,18 @@ void drawStats(void)
{
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]);
}
else
{
drawText(r.x + r.w - 20, y, 18, TA_RIGHT, colors.white, "%d", game.stats[i]);
case STAT_PERCENT_COMPLETE:
case STAT_SHOT_ACCURACY:
case STAT_ROCKET_ACCURACY:
case STAT_MISSILE_ACCURACY:
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;
@ -178,3 +188,10 @@ static void prevPage(void)
next->visible = 1;
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_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_1_LOSS", CHALLENGE_1_LOSS);
addLookup("CHALLENGE_LOSSES", CHALLENGE_LOSSES);
@ -123,10 +125,13 @@ void initLookups(void)
addLookup("STAT_CHALLENGES_COMPLETED", STAT_CHALLENGES_COMPLETED);
addLookup("STAT_SHOTS_FIRED", STAT_SHOTS_FIRED);
addLookup("STAT_SHOTS_HIT", STAT_SHOTS_HIT);
addLookup("STAT_SHOT_ACCURACY", STAT_SHOT_ACCURACY);
addLookup("STAT_ROCKETS_FIRED", STAT_ROCKETS_FIRED);
addLookup("STAT_ROCKETS_HIT", STAT_ROCKETS_HIT);
addLookup("STAT_ROCKET_ACCURACY", STAT_ROCKET_ACCURACY);
addLookup("STAT_MISSILES_FIRED", STAT_MISSILES_FIRED);
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_PLAYER", STAT_ENEMIES_KILLED_PLAYER);
addLookup("STAT_ALLIES_KILLED", STAT_ALLIES_KILLED);