Skip to content

Commit 2e8efd4

Browse files
committed
Cleaned up code and commendations
1 parent d17b66f commit 2e8efd4

2 files changed

Lines changed: 47 additions & 59 deletions

File tree

bin/data/Ruleset/Commendations.rul

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,8 @@ extraStrings:
8989
STR_MEDAL_DISTINGUISHED_SERVICE_DESCRIPTION: "Given to a soldier who has killed alien soldiers of all kinds."
9090
STR_MEDAL_BOLTS_CROSS_NAME: "Bolt's Cross"
9191
STR_MEDAL_BOLTS_CROSS_DESCRIPTION: "Given to a soldier who has used non-lethal force to take down important targets."
92+
STR_MEDAL_GRENADIERS_MEDAL_NAME: "Grenadier's Medal"
93+
STR_MEDAL_GRENADIERS_MEDAL_DESCRIPTION: "Given to a soldier who has used thrown explosives to kill 3 aliens at once."
9294
STR_AWARD_0: "First award"
9395
STR_AWARD_1: "Second award"
9496
STR_AWARD_2: "Third award"
@@ -240,16 +242,33 @@ extraStrings:
240242
# total_missions_in_a_region
241243
# total_kills_by_race
242244
# total_kills_by_rank
243-
# For more control over commendation awards, use kills_with_criteria.
244-
# The killCriteria can list any race, rank, weapon, ammo, STATUS_DEAD, STATUS_UNCONSCIOUS,
245-
# FACTION_HOSTILE, FACTION_NEUTRAL, FACTION_PLAYER. For example,
246-
# ["STR_INCENDIARY_ROCKET", "FACTION_HOSTILE"] looks for a kill with Incendiary Rockets AND hostile faction.
245+
# The following criteria allow more control over the kinds of kills that can be awarded.
246+
# To use, you must define a killCriteria.
247+
# The killCriteria can list any race, rank, weapon, ammo,
248+
# or one of these statuses: STATUS_DEAD and STATUS_UNCONSCIOUS,
249+
# or one of these faction s: FACTION_HOSTILE, FACTION_NEUTRAL, FACTION_PLAYER
250+
# Use the strings from the ruleset to define them (mods can be used too).
251+
# For example, look at "STR_MEDAL_BOLTS_CROSS_NAME". It is awarded if a soldier
252+
# stuns a hostile commander or stuns a hostile leader.
253+
# kills_with_criteria_career
254+
# kills_with_criteria_mission
255+
# kills_with_criteria_turn
247256
commendations:
257+
- type: STR_MEDAL_BOLTS_CROSS_NAME
258+
description: STR_MEDAL_BOLTS_CROSS_DESCRIPTION
259+
sprite: 13
260+
criteria:
261+
kills_with_criteria_career: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
262+
killCriteria:
263+
-
264+
1: ["STR_LIVE_COMMANDER", "FACTION_HOSTILE", "STATUS_UNCONSCIOUS"]
265+
-
266+
1: ["STR_LIVE_LEADER", "FACTION_HOSTILE", "STATUS_UNCONSCIOUS"]
248267
- type: STR_MEDAL_MERIT_STAR_NAME
249268
description: STR_MEDAL_MERIT_STAR_DESCRIPTION
250269
sprite: 0
251270
criteria:
252-
kills_with_criteria: [3, 5, 10, 15, 20, 25, 30, 35, 40, 50]
271+
kills_with_criteria_career: [3, 5, 10, 15, 20, 25, 30, 35, 40, 50]
253272
killCriteria:
254273
-
255274
1: ["FACTION_HOSTILE", "STATUS_DEAD"]
@@ -262,7 +281,7 @@ commendations:
262281
description: STR_MEDAL_ORDER_OF_RESTRAINT_DESCRIPTION
263282
sprite: 2
264283
criteria:
265-
kills_with_criteria: [1, 3, 5, 7, 9, 11, 13, 15, 17, 20]
284+
kills_with_criteria_career: [1, 3, 5, 7, 9, 11, 13, 15, 17, 20]
266285
killCriteria:
267286
-
268287
1: ["FACTION_HOSTILE", "STATUS_UNCONSCIOUS"]
@@ -310,46 +329,33 @@ commendations:
310329
description: STR_MEDAL_HELLRAISER_MEDAL_DESCRIPTION
311330
sprite: 11
312331
criteria:
313-
kills_with_criteria: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
332+
kills_with_criteria_career: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
314333
killCriteria:
315334
-
316335
1: ["STR_INCENDIARY_ROCKET", "FACTION_HOSTILE"]
317336
- type: STR_MEDAL_DISTINGUISHED_SERVICE_NAME
318337
description: STR_MEDAL_DISTINGUISHED_SERVICE_DESCRIPTION
319338
sprite: 12
320339
criteria:
321-
kills_with_criteria: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
340+
kills_with_criteria_career: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
322341
killCriteria:
323342
-
324343
1: ["STR_SECTOID", "STR_LIVE_SOLDIER", "FACTION_HOSTILE", "STATUS_DEAD"]
325344
1: ["STR_FLOATER", "STR_LIVE_SOLDIER", "FACTION_HOSTILE", "STATUS_DEAD"]
326345
1: ["STR_SNAKEMAN", "STR_LIVE_SOLDIER", "FACTION_HOSTILE", "STATUS_DEAD"]
327346
1: ["STR_MUTON", "STR_LIVE_SOLDIER", "FACTION_HOSTILE", "STATUS_DEAD"]
328347
1: ["STR_ETHEREAL", "STR_LIVE_SOLDIER", "FACTION_HOSTILE", "STATUS_DEAD"]
329-
- type: STR_MEDAL_BOLTS_CROSS_NAME
330-
description: STR_MEDAL_BOLTS_CROSS_DESCRIPTION
331-
sprite: 13
332-
criteria:
333-
kills_with_criteria: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
334-
killCriteria:
335-
-
336-
1: ["STR_LIVE_COMMANDER", "FACTION_HOSTILE", "STATUS_UNCONSCIOUS"]
337-
1: ["STR_LIVE_LEADER", "FACTION_HOSTILE", "STATUS_UNCONSCIOUS"]
338-
- type: STR_DOUBLE_KILL
339-
description: STR_DOUBLE_KILL
348+
- type: STR_MEDAL_GRENADIERS_MEDAL_NAME
349+
description: STR_MEDAL_GRENADIERS_MEDAL_DESCRIPTION
340350
sprite: 0
341351
criteria:
342-
kills_with_criteria: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
352+
kills_with_criteria_turn: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
343353
killCriteria:
344354
-
345-
2: ["FACTION_HOSTILE", "STATUS_DEAD"]
346-
- type: STR_TRIPLE_KILL
347-
description: STR_TRIPLE_KILL
348-
sprite: 0
349-
criteria:
350-
kills_with_criteria: [1, 2, 3, 4, 5, 7, 9, 11, 15, 20]
351-
killCriteria:
355+
3: ["FACTION_HOSTILE", "STATUS_DEAD", "STR_GRENADE"]
356+
-
357+
3: ["FACTION_HOSTILE", "STATUS_DEAD", "STR_PROXIMITY_GRENADE"]
358+
-
359+
3: ["FACTION_HOSTILE", "STATUS_DEAD", "STR_ALIEN_GRENADE"]
352360
-
353-
3: ["FACTION_HOSTILE", "STATUS_DEAD"]
354-
#
355-
# killCriteria can be specified for a single turn, a single mission, or career wide
361+
3: ["FACTION_HOSTILE", "STATUS_DEAD", "STR_HIGH_EXPLOSIVE"]

src/Savegame/SoldierDiary.cpp

Lines changed: 11 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -435,11 +435,6 @@ bool SoldierDiary::manageCommendations(Ruleset *rules)
435435
}
436436
else if ((*j).first == "kills_with_criteria_career" || (*j).first == "kills_with_criteria_mission" || (*j).first == "kills_with_criteria_turn")
437437
{
438-
/**
439-
Career: Look at all
440-
Mission: Look only at kills with same mission ID
441-
Turn: Look only at kills with same turn ID
442-
**/
443438
// Looks to see how many kills the soldier has received over the course of his career
444439
std::vector<std::map<int, std::vector<std::string> > > *_killCriteriaList = (*i).second->getKillCriteria();
445440

@@ -510,29 +505,26 @@ bool SoldierDiary::manageCommendations(Ruleset *rules)
510505
{
511506
count++;
512507
// Only one count per mission, unless the commendation wants more than one
508+
// This also stops a "double kill" not getting awarded because we got 5 kills
513509
if ( count == (*andCriteria).first) break;
514510
}
515511
}
516-
int multiCriteria = (*andCriteria).first;
517-
// If one of the AND criteria fail, stop looking
518-
if (multiCriteria == 0 || count / multiCriteria < (*j).second.at(_nextCommendationLevel[""]))
519-
{
520-
_awardCommendation = false;
521-
break;
522-
}
512+
}
513+
int multiCriteria = (*andCriteria).first;
514+
// If one of the AND criteria fail, stop looking
515+
if (multiCriteria == 0 || count / multiCriteria < (*j).second.at(_nextCommendationLevel[""]))
516+
{
517+
_awardCommendation = false;
518+
break;
523519
}
524520
}
525521
}
526-
527-
528-
529-
530522
else if ((*j).first == "kills_with_criteria_turn")
531523
{
532524
// Loop over the AND vectors
533525
for (std::map<int, std::vector<std::string> >::const_iterator andCriteria = orCriteria->begin(); andCriteria != orCriteria->end(); ++andCriteria)
534526
{
535-
int count = 0; // Each AND vector has to match the award criteria
527+
int count = 0; // How many AND vectors (list of DETAILs) have been successful
536528
int killThisTurn = 0;
537529
int killLastTurn = -1;
538530
bool goToNextTurn = false;
@@ -582,21 +574,11 @@ bool SoldierDiary::manageCommendations(Ruleset *rules)
582574
break;
583575
}
584576
}
585-
586-
587-
// Missions: only loops through kills on the same mission
588-
// Turns: only loops through kills on the same turn
589577
}
590-
591-
592-
593-
594-
595-
578+
596579
}
597580
if (_awardCommendation) break; // Stop looking because we are getting one regardless
598-
}
599-
}
581+
}
600582
}
601583
if (_awardCommendation)
602584
{

0 commit comments

Comments
 (0)