@@ -299,6 +299,15 @@ DebriefingState::DebriefingState() : _eventToSpawn(nullptr), _region(0), _countr
299299
300300
301301 // COOP
302+ // hotseat
303+ if (_game->getCoopMod ()->_isHotseatActive == true )
304+ {
305+
306+ _game->getCoopMod ()->_changeHotseatTurn = false ;
307+ _game->getCoopMod ()->_isHotseatAlienTurn = false ;
308+
309+ }
310+
302311 if (_game->getCoopMod ()->isCoopSession () == true )
303312 {
304313 _game->getCoopMod ()->coopMissionEnd = true ;
@@ -1257,34 +1266,46 @@ void DebriefingState::init()
12571266
12581267 // rank
12591268 int soldier_index = 0 ;
1260- for (auto &soldier : participants)
1261- {
12621269
1263- root[" soldiers" ][soldier_index][" coopname" ] = soldier->getCoopName ();
1264- root[" soldiers" ][soldier_index][" name" ] = soldier->getName ();
1265- root[" soldiers" ][soldier_index][" nationality" ] = soldier->getNationality ();
1266- root[" soldiers" ][soldier_index][" rank" ] = _game->getCoopMod ()->SoldierRanktoInt (soldier->getRank ());
1267- root[" soldiers" ][soldier_index][" promoted" ] = soldier->getRecentlyPromotedCoop ();
1270+ if (_base)
1271+ {
12681272
1269- if ( soldier-> getCurrentStats ())
1273+ for ( auto & soldier : *_base-> getSoldiers ())
12701274 {
12711275
1272- root[" soldiers" ][soldier_index][" unit_stats" ][" tu" ] = static_cast <int >(soldier->getCurrentStats ()->tu );
1273- root[" soldiers" ][soldier_index][" unit_stats" ][" stamina" ] = static_cast <int >(soldier->getCurrentStats ()->stamina );
1274- root[" soldiers" ][soldier_index][" unit_stats" ][" health" ] = static_cast <int >(soldier->getCurrentStats ()->health );
1275- root[" soldiers" ][soldier_index][" unit_stats" ][" bravery" ] = static_cast <int >(soldier->getCurrentStats ()->bravery );
1276- root[" soldiers" ][soldier_index][" unit_stats" ][" reactions" ] = static_cast <int >(soldier->getCurrentStats ()->reactions );
1277- root[" soldiers" ][soldier_index][" unit_stats" ][" firing" ] = static_cast <int >(soldier->getCurrentStats ()->firing );
1278- root[" soldiers" ][soldier_index][" unit_stats" ][" throwing" ] = static_cast <int >(soldier->getCurrentStats ()->throwing );
1279- root[" soldiers" ][soldier_index][" unit_stats" ][" strength" ] = static_cast <int >(soldier->getCurrentStats ()->strength );
1280- root[" soldiers" ][soldier_index][" unit_stats" ][" psiStrength" ] = static_cast <int >(soldier->getCurrentStats ()->psiStrength );
1281- root[" soldiers" ][soldier_index][" unit_stats" ][" psiSkill" ] = static_cast <int >(soldier->getCurrentStats ()->psiSkill );
1282- root[" soldiers" ][soldier_index][" unit_stats" ][" melee" ] = static_cast <int >(soldier->getCurrentStats ()->melee );
1283- root[" soldiers" ][soldier_index][" unit_stats" ][" mana" ] = static_cast <int >(soldier->getCurrentStats ()->mana );
1276+ root[" soldiers" ][soldier_index][" coopbase" ] = soldier->getCoopBase ();
1277+ root[" soldiers" ][soldier_index][" coopname" ] = soldier->getCoopName ();
1278+ root[" soldiers" ][soldier_index][" name" ] = soldier->getName ();
1279+ root[" soldiers" ][soldier_index][" nationality" ] = soldier->getNationality ();
1280+ root[" soldiers" ][soldier_index][" rank" ] = _game->getCoopMod ()->SoldierRanktoInt (soldier->getRank ());
1281+ root[" soldiers" ][soldier_index][" promoted" ] = soldier->getRecentlyPromotedCoop ();
12841282
1285- }
1283+ if (soldier->getInitStats ())
1284+ {
12861285
1287- soldier_index++;
1286+ root[" soldiers" ][soldier_index][" init_tu" ] = static_cast <int >(soldier->getInitStats ()->tu );
1287+
1288+ }
1289+
1290+ if (soldier->getCurrentStats ())
1291+ {
1292+
1293+ root[" soldiers" ][soldier_index][" unit_stats" ][" tu" ] = static_cast <int >(soldier->getCurrentStats ()->tu );
1294+ root[" soldiers" ][soldier_index][" unit_stats" ][" stamina" ] = static_cast <int >(soldier->getCurrentStats ()->stamina );
1295+ root[" soldiers" ][soldier_index][" unit_stats" ][" health" ] = static_cast <int >(soldier->getCurrentStats ()->health );
1296+ root[" soldiers" ][soldier_index][" unit_stats" ][" bravery" ] = static_cast <int >(soldier->getCurrentStats ()->bravery );
1297+ root[" soldiers" ][soldier_index][" unit_stats" ][" reactions" ] = static_cast <int >(soldier->getCurrentStats ()->reactions );
1298+ root[" soldiers" ][soldier_index][" unit_stats" ][" firing" ] = static_cast <int >(soldier->getCurrentStats ()->firing );
1299+ root[" soldiers" ][soldier_index][" unit_stats" ][" throwing" ] = static_cast <int >(soldier->getCurrentStats ()->throwing );
1300+ root[" soldiers" ][soldier_index][" unit_stats" ][" strength" ] = static_cast <int >(soldier->getCurrentStats ()->strength );
1301+ root[" soldiers" ][soldier_index][" unit_stats" ][" psiStrength" ] = static_cast <int >(soldier->getCurrentStats ()->psiStrength );
1302+ root[" soldiers" ][soldier_index][" unit_stats" ][" psiSkill" ] = static_cast <int >(soldier->getCurrentStats ()->psiSkill );
1303+ root[" soldiers" ][soldier_index][" unit_stats" ][" melee" ] = static_cast <int >(soldier->getCurrentStats ()->melee );
1304+ root[" soldiers" ][soldier_index][" unit_stats" ][" mana" ] = static_cast <int >(soldier->getCurrentStats ()->mana );
1305+ }
1306+
1307+ soldier_index++;
1308+ }
12881309
12891310 }
12901311
@@ -3053,6 +3074,13 @@ void DebriefingState::recoverItems(std::vector<BattleItem*> *from, Base *base, C
30533074 }
30543075 else
30553076 {
3077+
3078+ // coop fix
3079+ if (!bi->getUnit ())
3080+ {
3081+ continue ;
3082+ }
3083+
30563084 if (rule->isRecoverable () && !bi->getXCOMProperty ())
30573085 {
30583086 if (rule->getBattleType () == BT_CORPSE)
0 commit comments