Esempio n. 1
0
 public Prop DeepCopy()
 {
     Prop copy = new Prop();
     copy.LocationX = this.LocationX;
     copy.LocationY = this.LocationY;
     copy.ImageFileName = this.ImageFileName;
     copy.PropFacingLeft = this.PropFacingLeft;
     copy.MouseOverText = this.MouseOverText;
     copy.HasCollision = this.HasCollision;
     copy.isShown = this.isShown;
     copy.isActive = this.isActive;
     copy.PropTag = this.PropTag;
     copy.PropCategoryName = this.PropCategoryName;
     copy.ConversationWhenOnPartySquare = this.ConversationWhenOnPartySquare;
     copy.EncounterWhenOnPartySquare = this.EncounterWhenOnPartySquare;
     copy.DeletePropWhenThisEncounterIsWon = this.DeletePropWhenThisEncounterIsWon;
     copy.PropLocalInts = new List<LocalInt>();
     foreach (LocalInt l in this.PropLocalInts)
     {
         LocalInt Lint = new LocalInt();
         Lint.Key = l.Key;
         Lint.Value = l.Value;
         copy.PropLocalInts.Add(Lint);
     }
     copy.PropLocalStrings = new List<LocalString>();
     foreach (LocalString l in this.PropLocalStrings)
     {
         LocalString Lstr = new LocalString();
         Lstr.Key = l.Key;
         Lstr.Value = l.Value;
         copy.PropLocalStrings.Add(Lstr);
     }
     //PROJECT LIVING WORLD STUFF
     copy.PostLocationX = this.PostLocationX;
     copy.PostLocationY = this.PostLocationY;
     copy.WayPointList = new List<WayPoint>();
     foreach (WayPoint coor in this.WayPointList)
     {
         WayPoint c = new WayPoint();
         c.X = coor.X;
         c.Y = coor.Y;
         copy.WayPointList.Add(c);
     }
     copy.WayPointListCurrentIndex = this.WayPointListCurrentIndex;
     copy.isMover = this.isMover;
     copy.ChanceToMove2Squares = this.ChanceToMove2Squares;
     copy.ChanceToMove0Squares = this.ChanceToMove0Squares;
     copy.MoverType = this.MoverType;
     copy.CurrentMoveToTarget = new Coordinate(this.CurrentMoveToTarget.X, this.CurrentMoveToTarget.Y);
     copy.isChaser = this.isChaser;
     copy.isCurrentlyChasing = this.isCurrentlyChasing;
     copy.ChaserDetectRangeRadius = this.ChaserDetectRangeRadius;
     copy.ChaserGiveUpChasingRangeRadius = this.ChaserGiveUpChasingRangeRadius;
     copy.ChaserChaseDuration = this.ChaserChaseDuration;
     copy.ChaserStartChasingTime = this.ChaserStartChasingTime;
     copy.RandomMoverRadius = this.RandomMoverRadius;
     copy.OnHeartBeatLogicTree = this.OnHeartBeatLogicTree;
     copy.OnHeartBeatParms = this.OnHeartBeatLogicTree;
     return copy;
 }
Esempio n. 2
0
 public void doPropBarkString(Prop prp)
 {
     if (prp.WayPointList.Count > 0)
     {
         if ((prp.LocationX == prp.CurrentMoveToTarget.X) && (prp.LocationY == prp.CurrentMoveToTarget.Y))
         {
             //do barks for waypoint
             foreach (BarkString b in prp.WayPointList[prp.WayPointListCurrentIndex].BarkStringsAtWayPoint)
             {
                 if (gv.sf.RandInt(100) < b.ChanceToShow)
                 {
                     gv.screenMainMap.addFloatyText(prp.LocationX, prp.LocationY, b.FloatyTextOneLiner, b.Color, b.LengthOfTimeToShowInMilliSeconds);
                     break;
                 }
             }
         }
         else
         {
             //do barks for patrol, random, or chasing
             foreach (BarkString b in prp.WayPointList[prp.WayPointListCurrentIndex].BarkStringsOnTheWayToNextWayPoint)
             {
                 if (gv.sf.RandInt(100) < b.ChanceToShow)
                 {
                     gv.screenMainMap.addFloatyText(prp.LocationX, prp.LocationY, b.FloatyTextOneLiner, b.Color, b.LengthOfTimeToShowInMilliSeconds);
                     break;
                 }
             }
         }
     }
 }
Esempio n. 3
0
 public void moveToTarget(int targetX, int targetY, Prop prp, int moveDistance)
 {
     for (int i = 0; i < moveDistance; i++)
     {
         gv.pfa.resetGrid();
         Coordinate newCoor = gv.pfa.findNewPoint(new Coordinate(prp.LocationX, prp.LocationY), new Coordinate(targetX, targetY));
         if ((newCoor.X == -1) && (newCoor.Y == -1))
         {
             //didn't find a path, don't move
             prp.CurrentMoveToTarget.X = prp.LocationX;
             prp.CurrentMoveToTarget.Y = prp.LocationY;
             gv.Invalidate();
             return;
         }
         if ((newCoor.X < prp.LocationX) && (!prp.PropFacingLeft)) //move left
         {
             prp.token= gv.cc.flip(prp.token);
             prp.PropFacingLeft = true;
         }
         else if ((newCoor.X > prp.LocationX) && (prp.PropFacingLeft)) //move right
         {
             prp.token= gv.cc.flip(prp.token);
             prp.PropFacingLeft = false;
         }
         prp.LocationX = newCoor.X;
         prp.LocationY = newCoor.Y;
     }
 }
Esempio n. 4
0
        public Coordinate getNewRandomTarget(Prop prp)
        {
            Coordinate newCoor = new Coordinate();

            //X range
            int minX = prp.PostLocationX - prp.RandomMoverRadius;
            if (minX < 0) {minX = 0;}
            int maxX = prp.PostLocationX + prp.RandomMoverRadius;
            if (maxX > gv.mod.currentArea.MapSizeX - 1) {maxX = gv.mod.currentArea.MapSizeX - 1;}

            //Y range
            int minY = prp.PostLocationY - prp.RandomMoverRadius;
            if (minY < 0) {minY = 0;}
            int maxY = prp.PostLocationY + prp.RandomMoverRadius;
            if (maxY > gv.mod.currentArea.MapSizeY - 1) {maxY = gv.mod.currentArea.MapSizeY - 1;}

            //get random location...check if location is valid first...do for loop and exit when found one, try 10 times
            for (int i = 0; i < 10; i++)
            {
                int x = gv.sf.RandInt(minX, maxX);
                int y = gv.sf.RandInt(minY, maxY);
                //if (gv.mod.currentArea.Tiles.get(y * gv.mod.currentArea.MapSizeX + x).Walkable)
                if (!gv.mod.currentArea.GetBlocked(x,y))
                {
                    newCoor.X = x;
                    newCoor.Y = y;
                    return newCoor;
                }
            }
            return new Coordinate(prp.LocationX, prp.LocationY);
        }
Esempio n. 5
0
 public int getMoveDistance(Prop prp)
 {
     if (gv.sf.RandInt(100) <= prp.ChanceToMove2Squares)
     {
         return 2;
     }
     else if (gv.sf.RandInt(100) <= prp.ChanceToMove0Squares)
     {
         return 0;
     }
     else
     {
         return 1;
     }
 }
Esempio n. 6
0
        public Prop DeepCopy()
        {
            Prop copy = new Prop();

            //TODO
            copy.lightRadius = lightRadius;
            copy.lightColor  = lightColor;
            copy.allowEnteringOccupiedSquare = allowEnteringOccupiedSquare;
            copy.stealthModifier             = this.stealthModifier;
            copy.skippedPathfinding          = skippedPathfinding;
            copy.blockConvoForOneTurn        = blockConvoForOneTurn;
            copy.justJumpedBetweenAreas      = justJumpedBetweenAreas;
            copy.relocX = relocX;
            copy.relocY = relocY;
            copy.lastAreaFilenameOfProp = lastAreaFilenameOfProp;
            copy.isPausing                = isPausing;
            copy.pauseCounter             = pauseCounter;
            copy.skipNavigationThisTurn   = skipNavigationThisTurn;
            copy.propMovingHalfSpeedMulti = propMovingHalfSpeedMulti;
            copy.timeSinceLastFloaty      = timeSinceLastFloaty;

            copy.currentWalkingSpeed         = currentWalkingSpeed;
            copy.breathAnimationDelayCounter = breathAnimationDelayCounter;
            copy.showBreathingFrame          = showBreathingFrame;
            copy.walkAnimationDelayCounter   = walkAnimationDelayCounter;
            copy.showWalkingFrame            = showWalkingFrame;
            copy.idleAnimationDelayCounter   = idleAnimationDelayCounter;
            copy.showIdlingFrame             = showIdlingFrame;
            copy.hurdle = hurdle;

            copy.isBroken            = isBroken;
            copy.isPureBreakableProp = isPureBreakableProp;
            //copy.isDiggableIndicatorProp = isDiggableIndicatorProp;
            copy.requiredItemInInventory = requiredItemInInventory; //like eg pick axes of varying qualities
            copy.breakableTraitTag       = breakableTraitTag;
            copy.breakableDC             = breakableDC;
            copy.numberOfStages          = numberOfStages;
            copy.debrisGraphic           = debrisGraphic;
            copy.stageGraphic1           = stageGraphic1;
            copy.stageGraphic2           = stageGraphic2;
            copy.stageGraphic3           = stageGraphic3;
            copy.resRefOfItemGained      = resRefOfItemGained;
            copy.nameOfSoundFileBump     = nameOfSoundFileBump;
            copy.nameOfSoundFileBreak    = nameOfSoundFileBreak;

            copy.counterStages = counterStages;


            copy.gridHasTimeLimit           = gridHasTimeLimit;
            copy.turnsBeforeGridResets      = turnsBeforeGridResets;
            copy.timerTurnsBeforeGridResets = timerTurnsBeforeGridResets;
            copy.gridIsCompleted            = gridIsCompleted;
            copy.isLever                = isLever;
            copy.isOn                   = isOn;
            copy.nameOfBitmapON         = nameOfBitmapON;
            copy.nameOfBitmapOFF        = nameOfBitmapOFF;
            copy.keyOFGlobalIntToChange = keyOFGlobalIntToChange;
            copy.valueOfGlobalIntOFF    = valueOfGlobalIntOFF;
            copy.valueOfGlobalIntON     = valueOfGlobalIntON;

            //1.pushable grid properties (04f - STEP: Pushable grid)
            //copy.isGridForPushableObject = isGridForPushableObject;
            //copy.showPushableGridOutline = showPushableGridOutline;
            copy.completionStateCanBeLostAgain         = completionStateCanBeLostAgain;
            copy.keyOfFirstGlobalIntThatControllsDoor  = keyOfFirstGlobalIntThatControllsDoor;
            copy.valueOfFirstGlobalIntThatOpensDoor    = valueOfFirstGlobalIntThatOpensDoor;
            copy.keyOfSecondGlobalIntThatControllsDoor = keyOfSecondGlobalIntThatControllsDoor;
            copy.valueOfSecondGlobalIntThatOpensDoor   = valueOfSecondGlobalIntThatOpensDoor;
            copy.keyOfThirdGlobalIntThatControllsDoor  = keyOfThirdGlobalIntThatControllsDoor;
            copy.valueOfThirdGlobalIntThatOpensDoor    = valueOfThirdGlobalIntThatOpensDoor;
            copy.keyOfFourthGlobalIntThatControllsDoor = keyOfFourthGlobalIntThatControllsDoor;
            copy.valueOfFourthGlobalIntThatOpensDoor   = valueOfFourthGlobalIntThatOpensDoor;
            copy.keyOfFifthGlobalIntThatControllsDoor  = keyOfFifthGlobalIntThatControllsDoor;
            copy.valueOfFifthGlobalIntThatOpensDoor    = valueOfFifthGlobalIntThatOpensDoor;

            copy.keyOfFirstGlobalIntThatControllsChest = keyOfFirstGlobalIntThatControllsChest;
            copy.valueOfFirstGlobalIntThatOpensChest   = valueOfFirstGlobalIntThatOpensChest;

            copy.keyOfSecondGlobalIntThatControllsChest = keyOfSecondGlobalIntThatControllsChest;
            copy.valueOfSecondGlobalIntThatOpensChest   = valueOfSecondGlobalIntThatOpensChest;
            copy.keyOfThirdGlobalIntThatControllsChest  = keyOfThirdGlobalIntThatControllsChest;
            copy.valueOfThirdGlobalIntThatOpensChest    = valueOfThirdGlobalIntThatOpensChest;
            copy.keyOfFourthGlobalIntThatControllsChest = keyOfFourthGlobalIntThatControllsChest;
            copy.valueOfFourthGlobalIntThatOpensChest   = valueOfFourthGlobalIntThatOpensChest;
            copy.keyOfFifthGlobalIntThatControllsChest  = keyOfFifthGlobalIntThatControllsChest;
            copy.valueOfFifthGlobalIntThatOpensChest    = valueOfFifthGlobalIntThatOpensChest;

            copy.partyDefaultDrawDirection                          = partyDefaultDrawDirection;
            copy.pushableGridCanBeResetViaHotkey                    = pushableGridCanBeResetViaHotkey;
            copy.pushableGridCanBeResetEvenAfterCompletion          = pushableGridCanBeResetEvenAfterCompletion;
            copy.partyDefaultPushableGridPositionX                  = partyDefaultPushableGridPositionX;
            copy.partyDefaultPushableGridPositionY                  = partyDefaultPushableGridPositionY;
            copy.allPushableGridTargetPositionsAreShared            = allPushableGridTargetPositionsAreShared;
            copy.keyOfGlobalIntToChangeUponPushableGridCompletion   = keyOfGlobalIntToChangeUponPushableGridCompletion;
            copy.valueOfGlobalIntToChangeUponPushableGridCompletion = valueOfGlobalIntToChangeUponPushableGridCompletion;
            copy.keyOfGlobalIntToChangeUponPushableGridFailure      = keyOfGlobalIntToChangeUponPushableGridFailure;
            copy.valueOfGlobalIntToChangeUponPushableGridFailure    = valueOfGlobalIntToChangeUponPushableGridFailure;
            copy.pushableGridIsResetOnEachFailure                   = pushableGridIsResetOnEachFailure;
            copy.lockGridOnCompletion   = lockGridOnCompletion;
            copy.removeGridOnCompletion = removeGridOnCompletion;
            copy.messageOnCompletion    = messageOnCompletion;
            copy.lockGridOnFailure      = lockGridOnFailure;
            copy.removeGridOnFailure    = removeGridOnFailure;
            copy.messageOnFailure       = messageOnFailure;

            //2.pushable object properties (04f - STEP: Pushable object)
            copy.isPushable              = isPushable;
            copy.pushableGridTriggerTag  = pushableGridTriggerTag;
            copy.pushableStartPositionX  = pushableStartPositionX;
            copy.pushableStartPositionY  = pushableStartPositionY;
            copy.pushableTargetPositionX = pushableTargetPositionX;
            copy.pushableTargetPositionY = pushableTargetPositionY;
            copy.pushableTraitTag        = pushableTraitTag;
            copy.pushableDC              = pushableDC;

            copy.isClimbable            = this.isClimbable;
            copy.climbDirection         = this.climbDirection;
            copy.climbDC                = this.climbDC;
            copy.climbTrait             = this.climbTrait;
            copy.moved2                 = this.moved2;
            copy.showSneakThroughSymbol = this.showSneakThroughSymbol;
            copy.challengeLevelAssignedForEncounterInConvo = this.challengeLevelAssignedForEncounterInConvo;
            copy.alwaysFlagAsEncounter = this.alwaysFlagAsEncounter;
            copy.ingameShownEncName    = this.ingameShownEncName;
            copy.isDoor = this.isDoor;
            copy.differentSpriteWhenOpen = this.differentSpriteWhenOpen;

            copy.isContainer  = this.isContainer;
            copy.containerTag = this.containerTag;

            copy.isHiddenInfo      = this.isHiddenInfo;
            copy.floatyAndLogText  = this.floatyAndLogText;
            copy.conversationName  = this.conversationName;
            copy.boxText           = this.boxText;
            copy.infoDC            = this.infoDC;
            copy.infoTraitTag      = this.infoTraitTag;
            copy.showOnlyOnce      = this.showOnlyOnce;
            copy.globalStringKey   = this.globalStringKey;
            copy.globalStringValue = this.globalStringValue;

            copy.scriptFilename           = this.scriptFilename;
            copy.parm1                    = this.parm1;
            copy.parm2                    = this.parm2;
            copy.parm3                    = this.parm3;
            copy.parm4                    = this.parm4;
            copy.onlyOnce                 = this.onlyOnce;
            copy.scriptActivationFloaty   = this.scriptActivationFloaty;
            copy.scriptActivationLogEntry = this.scriptActivationLogEntry;

            copy.isTrapMain   = this.isTrapMain;
            copy.trapDC       = this.trapDC;
            copy.trapTraitTag = this.trapTraitTag;

            copy.isSecretDoor       = this.isSecretDoor;
            copy.secretDoorDC       = this.secretDoorDC;
            copy.secretDoorTraitTag = this.secretDoorTraitTag;


            //copy.secretDoorDirectionEW = this.secretDoorDirectionEW;
            copy.wasKilled = this.wasKilled;
            copy.stealthSkipsPropTriggers = this.stealthSkipsPropTriggers;
            copy.isStealthed = this.isStealthed;
            //copy.token = this.token;
            copy.spotEnemy                            = this.spotEnemy;
            copy.stealth                              = this.stealth;
            copy.movementSpeed                        = this.movementSpeed;
            copy.permanentText                        = this.permanentText;
            copy.alwaysDrawNormalSize                 = this.alwaysDrawNormalSize;
            copy.encounterPropTriggerOnEveryStep      = this.encounterPropTriggerOnEveryStep;
            copy.pendingFactionStrengthEffectReversal = this.pendingFactionStrengthEffectReversal;
            copy.spawnLocationX                       = this.spawnLocationX;
            copy.spawnLocationY                       = this.spawnLocationY;
            copy.spawnLocationZ                       = this.spawnLocationZ;
            copy.spawnArea                            = this.spawnArea;
            copy.allowLastLocationUpdate              = this.allowLastLocationUpdate;
            copy.isLight                              = this.isLight;
            copy.inverseAnimationDirection            = this.inverseAnimationDirection;
            copy.randomAnimationDirectionEachCall     = this.randomAnimationDirectionEachCall;
            copy.hasHalo                              = this.hasHalo;
            copy.focalIntensity                       = this.focalIntensity;
            copy.ringIntensity                        = this.ringIntensity;
            copy.LocationX                            = this.LocationX;
            copy.LocationY                            = this.LocationY;
            copy.LocationZ                            = this.LocationZ;
            copy.blockTrigger                         = this.blockTrigger;
            copy.wasTriggeredLastUpdate               = this.wasTriggeredLastUpdate;
            copy.lastLocationX                        = this.lastLocationX;
            copy.lastLocationY                        = this.lastLocationY;
            copy.priorLastLocationX                   = this.lastLocationX;
            copy.priorLastLocationY                   = this.lastLocationY;
            copy.lastLocationZ                        = this.lastLocationZ;
            copy.ImageFileName                        = this.ImageFileName;
            copy.PropFacingLeft                       = this.PropFacingLeft;
            copy.MouseOverText                        = this.MouseOverText;
            copy.HasCollision                         = this.HasCollision;
            copy.isShown                              = this.isShown;
            copy.isActive                             = this.isActive;
            copy.PropTag                              = this.PropTag;
            copy.PropCategoryName                     = this.PropCategoryName;
            copy.ConversationWhenOnPartySquare        = this.ConversationWhenOnPartySquare;
            copy.EncounterWhenOnPartySquare           = this.EncounterWhenOnPartySquare;
            copy.DeletePropWhenThisEncounterIsWon     = this.DeletePropWhenThisEncounterIsWon;
            //copy.PropLocalInts = new List<LocalInt>();
            //copy.OnEnterSquareIBScriptParms = this.OnEnterSquareIBScriptParms;
            copy.OnEnterSquareScript          = this.OnEnterSquareScript;
            copy.OnEnterSquareScriptParm1     = this.OnEnterSquareScriptParm1;
            copy.OnEnterSquareScriptParm2     = this.OnEnterSquareScriptParm1;
            copy.OnEnterSquareScriptParm3     = this.OnEnterSquareScriptParm1;
            copy.OnEnterSquareScriptParm4     = this.OnEnterSquareScriptParm1;
            copy.canBeTriggeredByPc           = this.canBeTriggeredByPc;
            copy.canBeTriggeredByCreature     = this.canBeTriggeredByCreature;
            copy.numberOfScriptCallsRemaining = this.numberOfScriptCallsRemaining;
            copy.PropLocalInts = new List <LocalInt>();
            foreach (LocalInt l in this.PropLocalInts)
            {
                LocalInt Lint = new LocalInt();
                Lint.Key   = l.Key;
                Lint.Value = l.Value;
                copy.PropLocalInts.Add(Lint);
            }
            copy.PropLocalStrings = new List <LocalString>();
            foreach (LocalString l in this.PropLocalStrings)
            {
                LocalString Lstr = new LocalString();
                Lstr.Key   = l.Key;
                Lstr.Value = l.Value;
                copy.PropLocalStrings.Add(Lstr);
            }
            //PROJECT LIVING WORLD STUFF
            copy.PostLocationX = this.PostLocationX;
            copy.PostLocationY = this.PostLocationY;
            copy.oldPath       = new List <Coordinate>();
            foreach (Coordinate Coor in this.oldPath)
            {
                Coordinate c = new Coordinate();
                c.X = Coor.X;
                c.Y = Coor.Y;
                copy.oldPath.Add(c);
            }
            copy.WayPointList = new List <WayPoint>();
            foreach (WayPoint coor in this.WayPointList)
            {
                WayPoint c = new WayPoint();
                c.X             = coor.X;
                c.Y             = coor.Y;
                c.areaName      = coor.areaName;
                c.departureTime = coor.departureTime;
                //List<BarkString> blAT = new List<BarkString>();
                //List<BarkString> blON = new List<BarkString>();
                foreach (BarkString bAT in coor.BarkStringsAtWayPoint)
                {
                    c.BarkStringsAtWayPoint.Add(bAT.DeepCopy());
                }
                foreach (BarkString bON in coor.BarkStringsOnTheWayToNextWayPoint)
                {
                    c.BarkStringsOnTheWayToNextWayPoint.Add(bON.DeepCopy());
                }
                copy.WayPointList.Add(c);
            }
            copy.WayPointListCurrentIndex = this.WayPointListCurrentIndex;
            copy.isMover = this.isMover;
            copy.ChanceToMove2Squares           = this.ChanceToMove2Squares;
            copy.ChanceToMove0Squares           = this.ChanceToMove0Squares;
            copy.MoverType                      = this.MoverType;
            copy.CurrentMoveToTarget            = new Coordinate(this.CurrentMoveToTarget.X, this.CurrentMoveToTarget.Y);
            copy.isChaser                       = this.isChaser;
            copy.isCurrentlyChasing             = this.isCurrentlyChasing;
            copy.ChaserDetectRangeRadius        = this.ChaserDetectRangeRadius;
            copy.ChaserGiveUpChasingRangeRadius = this.ChaserGiveUpChasingRangeRadius;
            copy.ChaserChaseDuration            = this.ChaserChaseDuration;
            copy.ChaserStartChasingTime         = this.ChaserStartChasingTime;
            copy.RandomMoverRadius              = this.RandomMoverRadius;
            //copy.OnHeartBeatLogicTree = this.OnHeartBeatLogicTree;
            //copy.OnHeartBeatParms = this.OnHeartBeatParms;
            copy.OnHeartBeatIBScript      = this.OnHeartBeatIBScript;
            copy.OnHeartBeatIBScriptParms = this.OnHeartBeatIBScriptParms;
            copy.passOneMove = this.passOneMove;
            copy.randomMoverTimerForNextTarget = this.randomMoverTimerForNextTarget;
            copy.lengthOfLastPath              = this.lengthOfLastPath;
            copy.unavoidableConversation       = this.unavoidableConversation;
            copy.destinationPixelPositionXList = this.destinationPixelPositionXList;
            copy.destinationPixelPositionYList = this.destinationPixelPositionYList;
            copy.currentPixelPositionX         = this.currentPixelPositionX;
            copy.currentPixelPositionY         = this.currentPixelPositionY;
            copy.pixelMoveSpeed = this.pixelMoveSpeed;
            //copy.drawAnchorX = this.drawAnchorX;
            //copy.drawAnchorY = this.drawAnchorY;
            //copy.startingOnVisibleSquare = this.startingOnVisibleSquare;

            copy.roamDistanceX         = this.roamDistanceX;
            copy.roamDistanceY         = this.roamDistanceY;
            copy.straightLineDistanceX = this.straightLineDistanceX;
            copy.straightLineDistanceY = this.straightLineDistanceY;
            copy.goDown        = this.goDown;
            copy.goRight       = this.goRight;
            copy.inactiveTimer = this.inactiveTimer;

            copy.isUnderBridge = this.isUnderBridge;

            //prop animation variables
            copy.maxNumberOfFrames              = this.maxNumberOfFrames;
            copy.currentFrameNumber             = this.currentFrameNumber;
            copy.animationDelayCounter          = this.animationDelayCounter;
            copy.updateTicksNeededTillNextFrame = this.updateTicksNeededTillNextFrame;
            copy.chanceToTriggerAnimationCycle  = this.chanceToTriggerAnimationCycle;
            copy.animationComplete              = this.animationComplete;
            copy.normalizedTime      = this.normalizedTime;
            copy.propFrameHeight     = this.propFrameHeight;
            copy.hiddenWhenComplete  = this.hiddenWhenComplete;
            copy.sizeFactor          = this.sizeFactor;
            copy.doOnce              = this.doOnce;
            copy.animationIsActive   = this.animationIsActive;
            copy.hiddenWhenNotActive = this.hiddenWhenNotActive;
            copy.drawAnimatedProp    = this.drawAnimatedProp;
            copy.numberOfCyclesNeededForCompletion = this.numberOfCyclesNeededForCompletion;
            copy.cycleCounter = this.cycleCounter;
            copy.framesNeededForFullFadeInOut  = this.framesNeededForFullFadeInOut;
            copy.totalFramesInWholeLoopCounter = this.totalFramesInWholeLoopCounter;
            copy.opacity = this.opacity;

            copy.OnEnterSquareIBScript      = this.OnEnterSquareIBScript;
            copy.OnEnterSquareIBScriptParms = this.OnEnterSquareIBScriptParms;
            copy.isTrap = this.isTrap;
            copy.trapDCforDisableCheck = this.trapDCforDisableCheck;

            //faction and respawn systems
            copy.respawnTimeInHours  = this.respawnTimeInHours;                                              //-1 meaning false, respawn time is in hours
            copy.maxNumberOfRespawns = this.maxNumberOfRespawns;                                             //-1 meaning no limit to the number of respawns
            //copy.spawnOnNearbySquaresIfOccupied = this.spawnOnNearbySquaresIfOccupied; //if false, the respawn will be delayed until target square is free
            copy.respawnTimeInMinutesPassedAlready   = this.respawnTimeInMinutesPassedAlready;               //internal property, not for toolset
            copy.numberOfRespawnsThatHappenedAlready = this.numberOfRespawnsThatHappenedAlready;             //internal property, not for toolset
            copy.nameAsMaster              = this.nameAsMaster;                                              // blank meaning this prop is master of none
            copy.thisPropsMaster           = this.thisPropsMaster;                                           //blank means this prop has no master; refers to nameAsMaster of another prop
            copy.instantDeathOnMasterDeath = this.instantDeathOnMasterDeath;                                 //if true,the propsis immediately placed on List<Prop> propsWaitingForRespawn of this module on its master's death
            copy.keyOfGlobalVarToSetTo1OnDeathOrInactivity = this.keyOfGlobalVarToSetTo1OnDeathOrInactivity; //set to zero again when living and active

            //faction:
            copy.factionTag = this.factionTag;
            copy.requiredFactionStrength      = this.requiredFactionStrength;
            copy.maxFactionStrength           = this.maxFactionStrength;
            copy.worthForOwnFaction           = this.worthForOwnFaction;
            copy.otherFactionAffectedOnDeath1 = this.otherFactionAffectedOnDeath1;
            copy.effectOnOtherFactionOnDeath1 = this.effectOnOtherFactionOnDeath1;
            copy.otherFactionAffectedOnDeath2 = this.otherFactionAffectedOnDeath2;
            copy.effectOnOtherFactionOnDeath2 = this.effectOnOtherFactionOnDeath2;
            copy.otherFactionAffectedOnDeath3 = this.otherFactionAffectedOnDeath3;
            copy.effectOnOtherFactionOnDeath3 = this.effectOnOtherFactionOnDeath3;
            copy.otherFactionAffectedOnDeath4 = this.otherFactionAffectedOnDeath4;
            copy.effectOnOtherFactionOnDeath4 = this.effectOnOtherFactionOnDeath4;

            //gcCheck
            copy.firstGcScriptName          = this.firstGcScriptName;
            copy.firstGcParm1               = this.firstGcParm1;
            copy.firstGcParm2               = this.firstGcParm2;
            copy.firstGcParm3               = this.firstGcParm3;
            copy.firstGcParm4               = this.firstGcParm4;
            copy.firstCheckForConditionFail = this.firstCheckForConditionFail;

            copy.secondGcScriptName          = this.secondGcScriptName;
            copy.secondGcParm1               = this.secondGcParm1;
            copy.secondGcParm2               = this.secondGcParm2;
            copy.secondGcParm3               = this.secondGcParm3;
            copy.secondGcParm4               = this.secondGcParm4;
            copy.secondCheckForConditionFail = this.secondCheckForConditionFail;

            copy.thirdGcScriptName          = this.thirdGcScriptName;
            copy.thirdGcParm1               = this.thirdGcParm1;
            copy.thirdGcParm2               = this.thirdGcParm2;
            copy.thirdGcParm3               = this.thirdGcParm3;
            copy.thirdGcParm4               = this.thirdGcParm4;
            copy.thirdCheckForConditionFail = this.thirdCheckForConditionFail;


            copy.allConditionsMustBeTrue = this.allConditionsMustBeTrue;

            return(copy);
        }