Skip to content

Commit 1ca048a

Browse files
committed
Added Mercy Cross
1 parent e89285e commit 1ca048a

5 files changed

Lines changed: 46 additions & 5 deletions

File tree

bin/data/Ruleset/Commendations.rul

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -287,6 +287,8 @@ extraStrings:
287287
STR_MEDAL_ALIEN_BASE_ASSAULT_DESCRIPTION: "Given to a soldier who has been part of a successful alien base assault mission."
288288
STR_MEDAL_NIKE_CROSS_NAME: "Nike Cross"
289289
STR_MEDAL_NIKE_CROSS_DESCRIPTION: "Given to a soldier who single handedly killed every alien in a mission."
290+
STR_MEDAL_MERCY_CROSS_NAME: "Mercy Cross"
291+
STR_MEDAL_MERCY_CROSS_DESCRIPTION: "Given to a soldier who single handedly stunned every alien in a mission."
290292
STR_AWARD_0: "First award"
291293
STR_AWARD_1: "Second award"
292294
STR_AWARD_2: "Third award"
@@ -425,6 +427,8 @@ extraStrings:
425427
STR_MEDAL_ALIEN_BASE_ASSAULT_DESCRIPTION: "Given to a soldier who has been part of a successful alien base assault mission."
426428
STR_MEDAL_NIKE_CROSS_NAME: "Nike Cross"
427429
STR_MEDAL_NIKE_CROSS_DESCRIPTION: "Given to a soldier who single handedly killed every alien in a mission."
430+
STR_MEDAL_MERCY_CROSS_NAME: "Nike Cross"
431+
STR_MEDAL_MERCY_CROSS_DESCRIPTION: "Given to a soldier who single handedly killed every alien in a mission."
428432
STR_AWARD_0: "First award"
429433
STR_AWARD_1: "Second award"
430434
STR_AWARD_2: "Third award"
@@ -694,6 +698,8 @@ extraStrings:
694698
STR_MEDAL_ALIEN_BASE_ASSAULT_DESCRIPTION: "Вручается солдату, за участие в операции по уничтожению базы пришельцев."
695699
STR_MEDAL_NIKE_CROSS_NAME: "Крест Победы"
696700
STR_MEDAL_NIKE_CROSS_DESCRIPTION: "Вручается солдату, единолично уничтожившему силы пришельцев в ходе операции."
701+
STR_MEDAL_MERCY_CROSS_NAME: "Крест Победы"
702+
STR_MEDAL_MERCY_CROSS_DESCRIPTION: "Вручается солдату, единолично уничтожившему силы пришельцев в ходе операции."
697703
STR_AWARD_0: "Первая награда"
698704
STR_AWARD_1: "Вторая награда"
699705
STR_AWARD_2: "Третья награда"
@@ -841,6 +847,8 @@ extraStrings:
841847
STR_MEDAL_NAME: Nome della Medaglia
842848
STR_MEDAL_NIKE_CROSS_DESCRIPTION: Data ad un soldato che ha ucciso da solo tutti gli alieni durante una missione.
843849
STR_MEDAL_NIKE_CROSS_NAME: Croce di Nike
850+
STR_MEDAL_MERCY_CROSS_DESCRIPTION: Data ad un soldato che ha ucciso da solo tutti gli alieni durante una missione.
851+
STR_MEDAL_MERCY_CROSS_NAME: Croce di Nike
844852
STR_MEDAL_ORDER_OF_EARTH_DESCRIPTION: Data ad un soldato che è stato importante nella difesa della Terra
845853
STR_MEDAL_ORDER_OF_EARTH_NAME: "L'Ordine della Terra"
846854
STR_MEDAL_ORDER_OF_GLORY_DESCRIPTION: Data ad un soldato che è stato importante nella riuscita di una missione.
@@ -1146,6 +1154,11 @@ commendations:
11461154
sprite: 32
11471155
criteria:
11481156
totalAllAliensKilled: [1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
1157+
- type: STR_MEDAL_MERCY_CROSS_NAME
1158+
description: STR_MEDAL_MERCY_CROSS_DESCRIPTION
1159+
sprite: 32
1160+
criteria:
1161+
totalAllAliensStunned: [1, 1, 2, 2, 2, 2, 3, 3, 3, 3]
11491162
ufopaedia:
11501163
- id: STR_MEDAL_MILITARY_CROSS_NAME
11511164
type_id: 7
@@ -1377,6 +1390,13 @@ ufopaedia:
13771390
image_id: NIKE_CROSS
13781391
text: STR_MEDAL_NIKE_CROSS_MEDAL_UFOPEDIA
13791392
text_width: 164
1393+
listOrder: 6033
1394+
- id: STR_MEDAL_MERCY_CROSS_NAME
1395+
type_id: 7
1396+
section: STR_HEAVY_WEAPONS_PLATFORMS
1397+
image_id: NIKE_CROSS
1398+
text: STR_MEDAL_MERCY_CROSS_MEDAL_UFOPEDIA
1399+
text_width: 164
13801400
listOrder: 6033
13811401
# entries below move the HWPs to the Craft Section of the UFOPedia
13821402
- id: STR_TANK_CANNON

src/Battlescape/DebriefingState.cpp

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ DebriefingState::DebriefingState() : _region(0), _country(0), _noContainment(fal
149149

150150
int total = 0, statsY = 0, recoveryY = 0;
151151
int civiliansSaved = 0, civiliansDead = 0;
152-
int aliensKilled = 0;
152+
int aliensKilled = 0, aliensStunned = 0;
153153
for (std::vector<DebriefingStat*>::iterator i = _stats.begin(); i != _stats.end(); ++i)
154154
{
155155
if ((*i)->qty == 0)
@@ -181,6 +181,10 @@ DebriefingState::DebriefingState() : _region(0), _country(0), _noContainment(fal
181181
{
182182
aliensKilled += (*i)->qty;
183183
}
184+
if ((*i)->item == "STR_LIVE_ALIENS_RECOVERED")
185+
{
186+
aliensStunned += (*i)->qty;
187+
}
184188
}
185189
if (civiliansSaved && !civiliansDead && _missionStatistics->success == true)
186190
{
@@ -254,17 +258,26 @@ DebriefingState::DebriefingState() : _region(0), _country(0), _noContainment(fal
254258
if ((*j)->getGeoscapeSoldier())
255259
{
256260
int soldierAlienKills = 0;
261+
int soldierAlienStuns = 0;
257262
for (std::vector<BattleUnitKills*>::const_iterator k = (*j)->getStatistics()->kills.begin(); k != (*j)->getStatistics()->kills.end(); ++k)
258263
{
259264
if ((*k)->faction == FACTION_HOSTILE && (*k)->getUnitStatusString() == "STATUS_DEAD")
260265
{
261266
soldierAlienKills++;
262267
}
268+
if ((*k)->faction == FACTION_HOSTILE && (*k)->getUnitStatusString() == "STATUS_UNCONSCIOUS")
269+
{
270+
soldierAlienStuns++;
271+
}
263272
}
264273
if (aliensKilled && aliensKilled == soldierAlienKills && _missionStatistics->success == true)
265274
{
266275
(*j)->getStatistics()->nikeCross = true;
267276
}
277+
if (aliensStunned && aliensStunned == soldierAlienStuns && _missionStatistics->success == true)
278+
{
279+
(*j)->getStatistics()->mercyCross = true;
280+
}
268281
(*j)->getStatistics()->daysWounded = (*j)->getGeoscapeSoldier()->getWoundRecovery();
269282
_missionStatistics->injuryList[(*j)->getGeoscapeSoldier()->getId()] = (*j)->getGeoscapeSoldier()->getWoundRecovery();
270283
if ((*j)->getStatus() == STATUS_DEAD)

src/Savegame/BattleUnit.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ struct BattleUnitStatistics
149149
int daysWounded; // Tracks how many days the unit was wounded for
150150
bool KIA; // Tracks if the soldier was killed in battle
151151
bool nikeCross; // Tracks if a soldier killed every alien
152+
bool mercyCross; // Tracks if a soldier stunned every alien
152153

153154
/// Functions
154155
// Friendly fire check
@@ -181,6 +182,7 @@ struct BattleUnitStatistics
181182
shotsFiredCounter = node["shotsFiredCounter"].as<int>(shotsFiredCounter);
182183
shotsLandedCounter = node["shotsLandedCounter"].as<int>(shotsLandedCounter);
183184
nikeCross = node["nikeCross"].as<bool>(nikeCross);
185+
mercyCross = node["mercyCross"].as<bool>(mercyCross);
184186
}
185187
// Save function
186188
YAML::Node save() const
@@ -203,10 +205,11 @@ struct BattleUnitStatistics
203205
node["shotsFiredCounter"] = shotsFiredCounter;
204206
node["shotsLandedCounter"] = shotsLandedCounter;
205207
if (nikeCross) node["nikeCross"] = nikeCross;
208+
if (mercyCross) node["mercyCross"] = mercyCross;
206209
return node;
207210
}
208211
BattleUnitStatistics(const YAML::Node& node) { load(node); }
209-
BattleUnitStatistics() : wasUnconcious(false), kills(), shotAtCounter(0), hitCounter(0), shotByFriendlyCounter(0), shotFriendlyCounter(0), loneSurvivor(false), ironMan(false), longDistanceHitCounter(0), lowAccuracyHitCounter(0), shotsFiredCounter(0), shotsLandedCounter(0), KIA(false), nikeCross(false) { }
212+
BattleUnitStatistics() : wasUnconcious(false), kills(), shotAtCounter(0), hitCounter(0), shotByFriendlyCounter(0), shotFriendlyCounter(0), loneSurvivor(false), ironMan(false), longDistanceHitCounter(0), lowAccuracyHitCounter(0), shotsFiredCounter(0), shotsLandedCounter(0), KIA(false), nikeCross(false), mercyCross(false) { }
210213
~BattleUnitStatistics() { }
211214
};
212215

src/Savegame/SoldierDiary.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ SoldierDiary::SoldierDiary() : _killList(), _regionTotal(), _countryTotal(), _ty
3939
_nightTerrorMissionTotal(0), _monthsService(0), _unconciousTotal(0), _shotAtCounterTotal(0), _hitCounterTotal(0), _loneSurvivorTotal(0),
4040
_totalShotByFriendlyCounter(0), _totalShotFriendlyCounter(0), _ironManTotal(0), _importantMissionTotal(0), _longDistanceHitCounterTotal(0),
4141
_lowAccuracyHitCounterTotal(0), _shotsFiredCounterTotal(0), _shotsLandedCounterTotal(0), _shotAtCounter10in1Mission(0), _hitCounter5in1Mission(0),
42-
_reactionFireTotal(0), _timesWoundedTotal(0), _valiantCruxTotal(0), _KIA(0), _trapKillTotal(0), _alienBaseAssaultTotal(0), _allAliensKilledTotal(0)
42+
_reactionFireTotal(0), _timesWoundedTotal(0), _valiantCruxTotal(0), _KIA(0), _trapKillTotal(0), _alienBaseAssaultTotal(0), _allAliensKilledTotal(0), _allAliensStunnedTotal(0)
4343
{
4444
}
4545
/**
@@ -107,6 +107,7 @@ void SoldierDiary::load(const YAML::Node& node)
107107
_trapKillTotal = node["trapKillTotal"].as<int>(_trapKillTotal);
108108
_alienBaseAssaultTotal = node["alienBaseAssaultTotal"].as<int>(_alienBaseAssaultTotal);
109109
_allAliensKilledTotal = node["allAliensKilledTotal"].as<int>(_allAliensKilledTotal);
110+
_allAliensStunnedTotal = node["_allAliensStunnedTotal"].as<int>(_allAliensStunnedTotal);
110111
}
111112
/**
112113
* Saves the diary to a YAML file.
@@ -154,6 +155,7 @@ YAML::Node SoldierDiary::save() const
154155
if (_trapKillTotal) node["trapKillTotal"] = _trapKillTotal;
155156
if (_alienBaseAssaultTotal) node["alienBaseAssaultTotal"] = _alienBaseAssaultTotal;
156157
if (_allAliensKilledTotal) node["allAliensKilledTotal"] = _allAliensKilledTotal;
158+
if (_allAliensStunnedTotal) node["_allAliensStunnedTotal"] = _allAliensStunnedTotal;
157159
return node;
158160
}
159161
/**
@@ -224,6 +226,8 @@ void SoldierDiary::updateDiary(BattleUnitStatistics *unitStatistics, MissionStat
224226
_KIA++;
225227
if (unitStatistics->nikeCross)
226228
_allAliensKilledTotal++;
229+
if (unitStatistics->nikeCross)
230+
_allAliensStunnedTotal++;
227231
_missionIdList.push_back(missionStatistics->id);
228232
}
229233
/**
@@ -301,7 +305,8 @@ bool SoldierDiary::manageCommendations(Ruleset *rules)
301305
((*j).first == "isDead" && _KIA < (*j).second.at(nextCommendationLevel["noNoun"])) ||
302306
((*j).first == "totalTrapKills" && _trapKillTotal < (*j).second.at(nextCommendationLevel["noNoun"])) ||
303307
((*j).first == "totalAlienBaseAssaults" && _alienBaseAssaultTotal < (*j).second.at(nextCommendationLevel["noNoun"])) ||
304-
((*j).first == "totalAllAliensKilled" && _allAliensKilledTotal < (*j).second.at(nextCommendationLevel["noNoun"])) )
308+
((*j).first == "totalAllAliensKilled" && _allAliensKilledTotal < (*j).second.at(nextCommendationLevel["noNoun"])) ||
309+
((*j).first == "totalAllAliensStunned" && _allAliensStunnedTotal < (*j).second.at(nextCommendationLevel["noNoun"])) ))
305310
{
306311
awardCommendationBool = false;
307312
break;

src/Savegame/SoldierDiary.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ class SoldierDiary
7575
int _scoreTotal, _killTotal, _winTotal, _stunTotal, _daysWoundedTotal, _baseDefenseMissionTotal, _totalShotByFriendlyCounter, _totalShotFriendlyCounter, _loneSurvivorTotal,
7676
_terrorMissionTotal, _nightMissionTotal, _nightTerrorMissionTotal, _monthsService, _unconciousTotal, _shotAtCounterTotal, _hitCounterTotal, _ironManTotal,
7777
_importantMissionTotal, _longDistanceHitCounterTotal, _lowAccuracyHitCounterTotal, _shotsFiredCounterTotal, _shotsLandedCounterTotal, _shotAtCounter10in1Mission,
78-
_hitCounter5in1Mission, _reactionFireTotal, _timesWoundedTotal, _valiantCruxTotal, _KIA, _trapKillTotal, _alienBaseAssaultTotal, _allAliensKilledTotal;
78+
_hitCounter5in1Mission, _reactionFireTotal, _timesWoundedTotal, _valiantCruxTotal, _KIA, _trapKillTotal, _alienBaseAssaultTotal, _allAliensKilledTotal, _allAliensStunnedTotal;
7979
void manageModularCommendations(std::map<std::string, int> &nextCommendationLevel, std::map<std::string, int> &modularCommendations, std::pair<std::string, int> statTotal, int criteria);
8080
void awardCommendation(std::string type, std::string noun = "noNoun");
8181
public:

0 commit comments

Comments
 (0)