diff --git a/src/npc/removeActiveSlave.tw b/src/npc/removeActiveSlave.tw index a37b221e3978e5d40b02305d3c83e57079f5f29c..ba4cca54469d0b37f59d0910786a7b976fbfebd6 100644 --- a/src/npc/removeActiveSlave.tw +++ b/src/npc/removeActiveSlave.tw @@ -148,25 +148,27 @@ <<set _o = $genePool.findIndex(function(s) { return s.ID = _ID; })>> <<if def _o>> <<set _dontDeleteMe = 0>> - <<for _rasi = 0; _rasi < _SL; _rasi++>> - <<if $slaves[_rasi].ID != _ID && isImpregnatedBy($slaves[_rasi], $genePool[_o])>> - <<set _dontDeleteMe = 1>> - <<break>> - <</if>> - <</for>> <<if $traitor != 0>> - <<if isImpregnatedBy($traitor, $genePool[_o]) || $traitor.ID == _ID>> + <<if isImpregnatedBy($traitor, $genePool[_o]) || $traitor.ID == _ID>> /* did we impregnate the traitor, or are we the traitor? */ <<set _dontDeleteMe = 1>> <</if>> <</if>> <<if $boomerangSlave != 0>> - <<if isImpregnatedBy($boomerangSlave, $genePool[_o]) || $boomerangSlave.ID == _ID)>> + <<if isImpregnatedBy($boomerangSlave, $genePool[_o]) || $boomerangSlave.ID == _ID)>> /* did we impregnate the boomerang, or are we the boomerang? */ <<set _dontDeleteMe = 1>> <</if>> <</if>> - <</if>> - <<if _dontDeleteMe === 0>> - <<set $genePool.deleteAt(_o)>> + <<if _dontDeleteMe == 0>> /* avoid going through this loop if possible */ + <<for _rasi = 0; _rasi < _SL; _rasi++>> + <<if $slaves[_rasi].ID != _ID && isImpregnatedBy($slaves[_rasi], $genePool[_o])>> /* have we impregnated a slave that is not ourself? */ + <<set _dontDeleteMe = 1>> + <<break>> + <</if>> + <</for>> + <</if>> + <<if _dontDeleteMe == 0>> + <<set $genePool.deleteAt(_o)>> + <</if>> <</if>> <<if _missingID == 1>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 4789fdb3dcd3eaad975e14e12de8518d29703b70..6aed0289227f2d1fc68f2802159f1e05a6af624a 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -3019,8 +3019,35 @@ Setting missing slave variables: <<set $slavesOriginal = []>> /* not used by pregmod */ <<for _bci = 0; _bci < $genePool.length; _bci++>> -<<set _Slave = $genePool[_bci]>> + <<set _Slave = $genePool[_bci]>> <<if ndef _Slave.origSkin>><<set _Slave.origSkin = _Slave.skin>><</if>> + + <<set _dontDeleteMe = 0>> + <<if def $slaveIndices[_Slave.ID]>> /* are we still in the $slaves array? */ + <<set _dontDeleteMe = 1>> + <</if>> + <<if $traitor != 0>> + <<if isImpregnatedBy($traitor, _Slave) || $traitor.ID == _Slave.ID>> /* did we impregnate the traitor, or are we the traitor? */ + <<set _dontDeleteMe = 1>> + <</if>> + <</if>> + <<if $boomerangSlave != 0>> + <<if isImpregnatedBy($boomerangSlave, _Slave) || $boomerangSlave.ID == _Slave.ID)>> /* did we impregnate the boomerang, or are we the boomerang? */ + <<set _dontDeleteMe = 1>> + <</if>> + <</if>> + <<if _dontDeleteMe == 0>> /* avoid going through this loop if possible */ + <<for _bci2 = 0; _bci2 < $slaves.length; _bci2++>> + <<if $slaves[_bci2].ID != _Slave.ID && isImpregnatedBy($slaves[_bci2], _Slave)>> /* have we impregnated a slave that is not ourself? */ + <<set _dontDeleteMe = 1>> + <<break>> + <</if>> + <</for>> + <</if>> + <<if _dontDeleteMe == 0>> + <<set $genePool.deleteAt(_bci)>> + <</if>> + <</for>> <<set $AgeEffectOnTrainerPricingPC = 1>>