diff --git a/src/js/storyJS.tw b/src/js/storyJS.tw index 40128dd4deff932aab93d1c215570bffa1570385..6e313c2704611119dcfa77b8bc0b0e96bc052528 100644 --- a/src/js/storyJS.tw +++ b/src/js/storyJS.tw @@ -995,6 +995,21 @@ window.overpowerCheck = function(slave, PC) { return strength; } +window.impregnatedBy = function(slave) { /* returns array of IDs of all characters who impregnated slave */ + var IDArray = []; + if (!Array.isArray(slave.womb)) { + WombInit(slave); + } + for (var i = 0; i < slave.womb.length; i++) { + IDArray.push(slave.womb.fatherID); + } + return IDArray; +} + +window.isImpregnatedBy = function(mother, father) { /* returns true if mother was impregnated by father */ + return impregnatedBy(mother).includes(father.ID); +} + window.jsAlert = function(obj) { alert(obj); diff --git a/src/npc/removeActiveSlave.tw b/src/npc/removeActiveSlave.tw index ea3dd93293176173f21fdef29915e9d42981346a..ad4466db4d48a726685f7c931252c0c0a16856d3 100644 --- a/src/npc/removeActiveSlave.tw +++ b/src/npc/removeActiveSlave.tw @@ -143,6 +143,32 @@ <<set $limbs.deleteAt(_o)>> <</if>> + <<set _geneIndex = $genePool.findIndex(function(s) { return s.ID == $activeSlave.ID; })>> + <<if _geneIndex != -1>> + <<set _dontDeleteMe = 0>> + <<if $traitor != 0>> + <<if isImpregnatedBy($traitor, $activeSlave) || $traitor.ID == $activeSlave.ID>> /* did we impregnate the traitor, or are we the traitor? */ + <<set _dontDeleteMe = 1>> + <</if>> + <</if>> + <<if $boomerangSlave != 0>> + <<if isImpregnatedBy($boomerangSlave, $activeSlave) || $boomerangSlave.ID == $activeSlave.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 _rasi = 0; _rasi < _SL; _rasi++>> + <<if $slaves[_rasi].ID != $activeSlave.ID && isImpregnatedBy($slaves[_rasi], $activeSlave)>> /* have we impregnated a slave that is not ourself? */ + <<set _dontDeleteMe = 1>> + <<break>> + <</if>> + <</for>> + <</if>> + <<if _dontDeleteMe == 0>> + <<set $genePool.deleteAt(_geneIndex)>> + <</if>> + <</if>> + <<set _dump = removeSlave(_x), _SL--, $activeSlave = 0>> <<if _missingID == 1>> diff --git a/src/uncategorized/BackwardsCompatibility.tw b/src/uncategorized/BackwardsCompatibility.tw index 4789fdb3dcd3eaad975e14e12de8518d29703b70..6e304a2972de56ac3fe665bd4ddb806804e77f8f 100644 --- a/src/uncategorized/BackwardsCompatibility.tw +++ b/src/uncategorized/BackwardsCompatibility.tw @@ -3019,8 +3019,42 @@ 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>> + + <<if $genePool.map(function(s) { return s.ID; }).count(_Slave.ID) > 1>> /* first check for duplicate IDs, keep the first entry and delete the others */ + <<for _bci2 = _bci + 1; _bci2 < $genePool.length; _bci2++>> + <<if $genePool[_bci2].ID == _Slave.ID>> + <<set $genePool.deleteAt(_bci2), _bci2-->> + <</if>> + <</for>> + <</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 isImpregnatedBy($slaves[_bci2], _Slave)>> /* have we impregnated a slave on the slaves array? */ + <<set _dontDeleteMe = 1>> + <<break>> + <</if>> + <</for>> + <</if>> + <<if _dontDeleteMe == 0>> + <<set $genePool.deleteAt(_bci), _bci-->> + <</if>> + <</for>> <<set $AgeEffectOnTrainerPricingPC = 1>>