예제 #1
0
    public Reballancing(List <Fear> lv1, List <Fear> lv2, List <Fear> lv3)
    {
        this.l1List = new List <Fear>(lv1);
        this.l2List = new List <Fear>(lv2);
        this.l3List = new List <Fear>(lv3);

        //levelThree.Add(new Fear("A", 100));
        //levelThree.Add(new Fear("B", 86));
        //levelThree.Add(new Fear("C", 34));

        //levelTwo.Add(new Fear("D", 94));
        //levelTwo.Add(new Fear("E", 66));
        //levelTwo.Add(new Fear("F", 90));

        //levelOne.Add(new Fear("G", 44));
        //levelOne.Add(new Fear("H", 99));
        //levelOne.Add(new Fear("I", 22));

        this.l3Size = l3List.Count;
        this.l2Size = l2List.Count;
        this.l1Size = l1List.Count;

        this.l1Highest = new Fear(null, 1, 1, null); //setup base fears to be overwritten
        this.l2Highest = new Fear(null, 1, 1, null);
        this.l3Highest = new Fear(null, 1, 1, null);
    }
예제 #2
0
 void Start()
 {
     isPaused = false;
     pc       = Player.GetComponent <PlayerController>();
     ts       = Player.GetComponent <TorchScript>();
     fs       = FearPanel.GetComponent <Fear>();
 }
예제 #3
0
 void SpiderRoomSelected()
 {
     if (currentFear == null)
     {
         SceneManager.LoadScene(this.scenePath + this.Spider.name);
         this.currentFear = this.Spider;
     }
 }
예제 #4
0
 void DollRoomSelected()
 {
     if (currentFear == null)
     {
         SceneManager.LoadScene(this.scenePath + this.Doll.name);
         this.currentFear = this.Doll;
     }
 }
예제 #5
0
 public Room(String roomName, float intensity, Fear fearType, List <SamTags> samTags, float timeSpent)
 {
     this.roomName  = roomName;
     this.intensity = intensity;
     this.fearType  = fearType;
     this.samTags   = samTags;
     this.timeSpent = timeSpent;
 }
예제 #6
0
 void HeightRoomSelected()
 {
     if (currentFear == null)
     {
         SceneManager.LoadScene(this.scenePath + this.Height.name);
         this.currentFear = this.Height;
     }
 }
예제 #7
0
 void GameRestarted()
 {
     SceneManager.LoadScene(this.scenePath + "Menu");
     foreach (var fear in this.fearList)
     {
         fear.CompletedStatus(false);
     }
     currentFear = null;
 }
예제 #8
0
    public float FearMe(float[] stats)
    {
        Fear  fear = addModifier <Fear>();
        float def  = fear.Init(this, stats);

        modified_defenses = true;
        IncrementDefense(EffectType.Fear, def);
        return(def);
    }
예제 #9
0
    public void updateModifiers(Reballancing reb)
    {
        Fear m1 = reb.getMaxFear(1);
        Fear m2 = reb.getMaxFear(2);
        Fear m3 = reb.getMaxFear(3);

        this.l1Mod = m3.getFitness() / m1.getFitness();
        this.l2Mod = m3.getFitness() / m2.getFitness();
    }
예제 #10
0
 public override int GetHashCode()
 {
     return(Anger.GetHashCode() ^
            Disgust.GetHashCode() ^
            Fear.GetHashCode() ^
            Happiness.GetHashCode() ^
            Neutral.GetHashCode() ^
            Sadness.GetHashCode() ^
            Surprise.GetHashCode());
 }
 protected bool Equals(EmotionScores other)
 {
     return(Anger.Equals(other.Anger) &&
            Contempt.Equals(other.Contempt) &&
            Disgust.Equals(other.Disgust) &&
            Fear.Equals(other.Fear) &&
            Happiness.Equals(other.Happiness) &&
            Neutral.Equals(other.Neutral) &&
            Sadness.Equals(other.Sadness) &&
            Surprise.Equals(other.Surprise));
 }
예제 #12
0
    // Start is called before the first frame update
    void Start()
    {
        camMaster = FindObjectOfType <CameraMaster>();
        bCam      = FindObjectOfType <BodyCam>();
        ted       = FindObjectOfType <Teddy>();
        rightEye  = FindObjectOfType <TeddyRightEye>();
        fearMeter = FindObjectOfType <Fear>();

        HideMeshesAndColliders();
        SetTint();
    }
예제 #13
0
        //todo maybe list of effect exemptions in ability class?

        public Intimidate(Entity abilityOwner) : base("Intimidate", "Anyone adjacent gains Fear effect.", -1, 1, abilityOwner, TargetType.Hostile, true, false)
        {
            _fearTiles  = new List <Tile>();
            _fearEffect = new Fear(abilityOwner, true, Fear.INFINITE);

            EffectExemptions = new List <Effect> {
                _fearEffect
            };

            var eventMediator = Object.FindObjectOfType <EventMediator>();

            eventMediator.SubscribeToEvent(GlobalHelper.ActiveEntityMoved, this);
        }
예제 #14
0
 public void UpdateRoomConfig(List <SamTags> tags, Fear fearType, float fearIntensity)
 {
     samLineManager.CleanPipe();
     if (states.GetGameState() != GameStates.PLAY_MODE)
     {
         states.SetGameState(GameStates.PLAY_MODE);
     }
     ++incIntroductionRoom;
     currentRoom = new Room(fearType.ToString(), fearIntensity, fearType, tags, Time.time);
     Debug.Log("wuuuut");
     if (currentRoom.GetSamTags().Count > 0)
     {
         Debug.Log("Room Name :: " + currentRoom.GetRoomName() + ", tags :: " + currentRoom.GetSamTags()[0].name);
     }
     else
     {
         Debug.Log("Room Name :: " + currentRoom.GetRoomName());
     }
     if (incIntroductionRoom == 1)
     {
         states.SetGameState(GameStates.INTRODUCTION);
         samLineManager.CleanPipe();
         ConfigureSoundFirstRoom();
     }
     else if (incIntroductionRoom == 2)
     {
         states.SetGameState(GameStates.INTRODUCTION);
         samLineManager.CleanPipe();
         ConfigureSoundSecondRoom();
     }
     else if (currentRoom.FindSamTagsByName("Jumps") != null)
     {
         samLineManager.CleanPipe();
         ConfigureSoundVertigoRoom();
     }
     else if (currentRoom.FindSamTagsByName("moving_room") != null && currentRoom.FindSamTagsByName("moving_room").name == "moving_room")
     {
         samLineManager.CleanPipe();
         ConfigureSoundClaustrophobiaRoom();
     }
     else if (currentRoom.FindSamTagsByName("spider") != null && currentRoom.FindSamTagsByName("spider").name == "spider")
     {
         samLineManager.CleanPipe();
         ConfigureSoundArachnophobiaRoom();
     }
     else if (currentRoom.FindSamTagsByName("Interupt") != null)
     {
         samLineManager.CleanPipe();
         ConfigureSoundNyctophobiaRoom();
     }
 }
 public override int GetHashCode()
 {
     unchecked {
         var hashCode = Anger.GetHashCode();
         hashCode = (hashCode * 397) ^ Contempt.GetHashCode();
         hashCode = (hashCode * 397) ^ Disgust.GetHashCode();
         hashCode = (hashCode * 397) ^ Fear.GetHashCode();
         hashCode = (hashCode * 397) ^ Happiness.GetHashCode();
         hashCode = (hashCode * 397) ^ Neutral.GetHashCode();
         hashCode = (hashCode * 397) ^ Sadness.GetHashCode();
         hashCode = (hashCode * 397) ^ Surprise.GetHashCode();
         return(hashCode);
     }
 }
예제 #16
0
 private Fear calculateHighest(List <Fear> fearlist)
 {
     //returns highest valued fear
     for (int i = 0; i < fearlist.Count; i++)
     {
         Fear highest = new Fear(null, 1, 1, null);
         Fear search  = fearlist[i];
         if (search.getFitness() >= highest.getFitness())
         {
             highest = search;
         }
         return(highest);
     }
     return(null);
 }
예제 #17
0
 void RoomCompleted()
 {
     if (currentFear != null)
     {
         this.currentFear.CompletedStatus(true);
         this.currentFear = null;
     }
     if (!VictoryCheck())
     {
         SceneManager.LoadScene(this.scenePath + "LibraryHub");
     }
     else
     {
         SceneManager.LoadScene(this.scenePath + "Win");
     }
 }
예제 #18
0
 public void reballanceElement(Fear fear, float percentageChange) //rebalance fears
 {
     if (fear.getCategory() == 1)
     {
         if (percentageChange == 0.0f)
         {
             cat1.Remove(new Fear(fear.getFear(), fear.getFitness(), 1, fear.getFearType()));
             cat1.Add(new Fear(fear.getFear(), fear.getFitness() - 8, 1, fear.getFearType()));
         }
         else
         {
             cat1.Remove(new Fear(fear.getFear(), fear.getFitness(), 1, fear.getFearType()));
             cat1.Add(new Fear(fear.getFear(), fear.getFitness() + (16 * percentageChange), 1, fear.getFearType()));
         }
     }
     if (fear.getCategory() == 2)
     {
         if (percentageChange == 0.0f)
         {
             cat2.Remove(new Fear(fear.getFear(), fear.getFitness(), 2, fear.getFearType()));
             cat2.Add(new Fear(fear.getFear(), fear.getFitness() - 6, 2, fear.getFearType()));
         }
         else
         {
             cat2.Remove(new Fear(fear.getFear(), fear.getFitness(), 2, fear.getFearType()));
             cat2.Add(new Fear(fear.getFear(), fear.getFitness() + (12 * percentageChange), 2, fear.getFearType()));
         }
     }
     if (fear.getCategory() == 3)
     {
         if (percentageChange == 0.0f)
         {
             cat3.Remove(new Fear(fear.getFear(), fear.getFitness(), 3, fear.getFearType()));
             cat3.Add(new Fear(fear.getFear(), fear.getFitness() - 4, 3, fear.getFearType()));
         }
         else
         {
             cat3.Remove(new Fear(fear.getFear(), fear.getFitness(), 3, fear.getFearType()));
             cat3.Add(new Fear(fear.getFear(), fear.getFitness() + (8 * percentageChange), 3, fear.getFearType()));
         }
     }
     UpdateAllFitness();
 }
    void Update()
    {
        fearMeter = Mathf.Clamp(fearMeter, 0, 100); //får bara vara mellan 0-100 och det kommer aldrig överstiga det!

        if (Input.GetKeyDown(KeyCode.F))
        {
            fear = Fear.None;
        }
        if (Input.GetKeyDown(KeyCode.G))
        {
            fear = Fear.Low;
        }
        if (Input.GetKeyDown(KeyCode.H))
        {
            fear = Fear.Normal;
        }
        if (Input.GetKeyDown(KeyCode.J))
        {
            fear = Fear.High;
        }

        CameraEffects(); //Update the effects there. Cleaner in the update function!

        switch (fear)
        {
        case Fear.None:

            break;

        case Fear.Low:

            break;

        case Fear.Normal:

            break;

        case Fear.High:

            break;
        }
    }
예제 #20
0
    public GameState(params Spirit[] spirits)
    {
        if (spirits.Length == 0)
        {
            throw new ArgumentException("Game must include at least 1 spirit");
        }
        this.Spirits = spirits;

        // Note: don't init invader deck here, let users substitute
        RoundNumber = 1;
        Fear        = new Fear(this);
        Invaders    = new Invaders(this);
        Tokens      = new Tokens_ForIsland(this);

        TimePasses_WholeGame += TokenCleanUp;
        TimePasses_WholeGame += ModifyBlightAddedEffect.ForRound.Clear;
        TimePasses_WholeGame += PreRavaging.ForRound.Clear;
        TimePasses_WholeGame += PreBuilding.ForRound.Clear;
        TimePasses_WholeGame += PreExplore.ForRound.Clear;
    }
예제 #21
0
    public void changeFearValue(String name, float newFitness)
    //changes fear value
    {
        Fear l3 = l3List.Find(x => x.getFear() == name);
        Fear l2 = l2List.Find(x => x.getFear() == name);
        Fear l1 = l1List.Find(x => x.getFear() == name);

        if (l1 != null)
        {
            l1.setFitness(newFitness);
        }
        else if (l2 != null)
        {
            l2.setFitness(newFitness);
        }
        else if (l3 != null)
        {
            l3.setFitness(newFitness);
        }
    }
예제 #22
0
    IEnumerator StartRoutine()
    {
        timeToWait = TAI.getTime();                   // get time from TAI
        Debug.Log("Time to wait: " + timeToWait);
        fear = SAI.FireOnce();                        // get fear from SAI
        Debug.Log("Fear: " + fear.getFear() + "Fear Type: " + fear.getFearType());
        yield return(new WaitForSeconds(timeToWait)); //wait time from TAI

        Debug.Log("Wait over, implementing fear");
        fear = doFear(fear);                                               // implement fear
        doFear(new Fear("A", 50, 3, "Spawn"));
        yield return(new WaitForSeconds(1f));                              //wait

        reactionScore = Reaction.checkReaction(fear, fear.returnObject()); //check reaction
        Debug.Log("Reaction Score: " + reactionScore);
        SAI.reballanceElement(fear, reactionScore);                        //send reaction score to reballance SAI
        yield return(new WaitForSeconds(5f));

        StartCoroutine(StartRoutine()); //restart
    }
예제 #23
0
        protected Vector3 flee()
        {
            Vector3 flee = new Vector3(0, 0, 0);

            foreach (Thing thing in nearbyThings)
            {
                if (thing.GetType() == typeof(Predator))
                {
                    flee += (this.location - thing.location);

                    if (_fearState == null)
                    {
                        _fearState = new Fear(world, this, FEAR_TTL);
                        states.Add(_fearState);
                    }
                    _fearState.TTL = FEAR_TTL;
                }
            }

            return(flee);
        }
예제 #24
0
    public float getFearValue(String name)
    //returns fear value
    {
        Fear l3 = l3List.Find(x => x.getFear() == name);
        Fear l2 = l2List.Find(x => x.getFear() == name);
        Fear l1 = l1List.Find(x => x.getFear() == name);

        if (l1 != null)
        {
            return(l1.getFitness() / l1Highest.getFitness() * 100);
        }
        if (l2 != null)
        {
            return(l2.getFitness() / l2Highest.getFitness() * 100);
        }
        if (l3 != null)
        {
            return(l3.getFitness() / l3Highest.getFitness() * 100);
        }
        return(0.0f);
    }
예제 #25
0
    // Use this for initialization
    void Start()
    {
        camMaster      = FindObjectOfType <CameraMaster>();
        bCam           = FindObjectOfType <BodyCam>();
        ted            = FindObjectOfType <Teddy>();
        rightEye       = FindObjectOfType <TeddyRightEye>();
        fearMeter      = FindObjectOfType <Fear>();
        tedDoorInside  = tedDoorTrigInside.GetComponent <AutoDoor>();
        tedDoorOutside = tedDoorTrigOutside.GetComponent <AutoDoor>();
        anim           = tedDoorToAnimate.GetComponent <Animator>();
        animDup        = tedDoorToAnimateDup.GetComponent <Animator>();
        doorCollider   = tedDoorToAnimate.GetComponent <Collider>();
        statusWindow   = FindObjectOfType <StatusPopup>();

        doorOpen       = false;
        tedInsideOrOut = false;

        wholeDoorTransportFromLocation = wholeDoorSetup.position;
        tedTransportFromLocation       = ted.transform.position;
        rightEyeTransportFromLocation  = rightEye.transform.position;
    }
예제 #26
0
    void Start()
    {
        Events.PlayerDeath.AddListener(PlayerDied);

        Events.RoomCompleted.AddListener(RoomCompleted);
        Events.RoomHeightSelected.AddListener(HeightRoomSelected);
        Events.RoomSpiderSelected.AddListener(SpiderRoomSelected);
        Events.RoomDollSelected.AddListener(DollRoomSelected);

        Events.GameStarted.AddListener(RoomCompleted);
        Events.GameRestarted.AddListener(GameRestarted);

        Spider = new Fear("Spiders");
        Height = new Fear("Heights");
        Doll   = new Fear("Dolls");

        this.fearList = new List <Fear>();
        this.fearList.Add(Spider);
        this.fearList.Add(Height);
        this.fearList.Add(Doll);
    }
예제 #27
0
 public void addFear(String name, int fitness, int level, String type)
 //adds fear to its category corresponding to level
 {
     if (level == 1)
     {
         l1List.Add(new Fear(name, fitness, 1, type));
         l1Size    = l1List.Count;
         l1Highest = calculateHighest(l1List);
     }
     else if (level == 2)
     {
         l2List.Add(new Fear(name, fitness, 2, type));
         l2Size    = l2List.Count;
         l2Highest = calculateHighest(l2List);
     }
     else
     {
         l3List.Add(new Fear(name, fitness, 3, type));
         l3Size    = l3List.Count;
         l3Highest = calculateHighest(l3List);
     }
 }
예제 #28
0
        /// <summary>
        /// Sets all the ghosts to scared state
        /// </summary>
        public void ScareGhosts()
        {
            Fear?.Invoke();
            //Prolongs the duration of the scare if they are already scared
            if (isScared)
            {
                scared.Stop();
            }


            foreach (Ghost g in ghosts)
            {
                if (g.CurrentState == GhostState.Chase)
                {
                    g.ChangeState(GhostState.Scared);
                }
            }
            isScared        = true;
            scared          = new Timer(5500);
            scared.Elapsed += DisableScared;
            scared.Start();
        }
        public override bool Apply(GameObject Object)
        {
            int  radius      = 20;
            Cell currentCell = Object.CurrentCell;

            if (currentCell != null)
            {
                List <GameObject> list = currentCell.ParentZone.FastSquareSearch(currentCell.X, currentCell.Y, radius, "Combat");
                foreach (GameObject item in list)
                {
                    if (Object.DistanceTo(item) <= radius && item.pBrain != null)
                    {
                        int mod = 1;
                        if (Object.Statistics["Ego"].Modifier > 0)
                        {
                            mod += Object.Statistics["Ego"].Modifier;
                        }
                        Fear.ApplyFearToObject(mod.ToString() + "d8", Stat.Roll("1d20") + mod, item, Object);
                    }
                }
            }
            return(true);
        }
 void Start()
 {
     fear = FearPanel.GetComponent <Fear>();
 }
예제 #31
0
        public void TriggerEffect(SkillType type, int rank, bool friendly, uint target, uint owner)
        {
            uint eid = Entity.NextEntity();
            HealOverTime HoT;
            TimedEffect time;
            DamageOverTime DoT;
            Buff buff;
            InstantEffect instantEffect;
            DirectDamage directDamage;
            InstantEffect instant;

            switch (type)
            {
                #region Vermis Triggered SKills

                #region ThrownBlade
                case SkillType.ThrownBlades:
                    if (friendly)
                        return;

                    eid = Entity.NextEntity();
                    instantEffect = new InstantEffect() { EntityID = eid, isTriggered = true };
                    DirectDamage damage;
                    switch (rank)
                    {
                        #region Rank 1
                        case 1:
                            damage = new DirectDamage()
                            {
                                Damage = 10,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 2
                        case 2:
                            damage = new DirectDamage()
                            {
                                Damage = 10,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 3
                        case 3:
                            damage = new DirectDamage()
                            {
                                Damage = 11,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 4
                        case 4:
                            damage = new DirectDamage()
                            {
                                Damage = 11,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 5
                        case 5:
                            damage = new DirectDamage()
                            {
                                Damage = 12,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 6
                        case 6:
                            damage = new DirectDamage()
                            {
                                Damage = 12,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 7
                        case 7:
                            damage = new DirectDamage()
                            {
                                Damage = 13,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 8
                        case 8:
                            damage = new DirectDamage()
                            {
                                Damage = 13,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 9
                        case 9:
                            damage = new DirectDamage()
                            {
                                Damage = 14,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion

                        #region Rank 10
                        case 10:
                            damage = new DirectDamage()
                            {
                                Damage = 15,
                                EntityID = eid,
                                TargetID = target,
                            };
                            break;
                        #endregion
                        default:
                            throw new Exception("Unimplemented Rank");
                    }
                    _game.DirectDamageComponent.Add(eid, damage);
                    instant = new InstantEffect() { EntityID = eid, isTriggered = false, };
                    _game.InstantEffectComponent.Add(eid, instant);
                    break;
                #endregion

                //unsure how to properly trigger, left unimplemented
                #region Caustic Weapons
                case SkillType.CausticWeapons:
                    switch (rank)
                    {
                        #region Rank 1
                        case 1:
                            break;
                        #endregion

                        #region Rank 2
                        case 2:
                            break;
                        #endregion

                        #region Rank 3
                        case 3:
                            break;
                        #endregion

                        #region Rank 4
                        case 4:
                            break;
                        #endregion

                        #region Rank 5
                        case 5:
                            break;
                        #endregion

                        #region Rank 6
                        case 6:
                            break;
                        #endregion

                        #region Rank 7
                        case 7:
                            break;
                        #endregion

                        #region Rank 8
                        case 8:
                            break;
                        #endregion

                        #region Rank 9
                        case 9:
                            break;
                        #endregion

                        #region Rank 10
                        case 10:
                            break;
                        #endregion
                        default:
                            throw new Exception("Unimplemented Rank");
                    }
                    break;
                #endregion

                #region BenignParasite
                case SkillType.BenignParasite:
                    if (!friendly)
                        return;
                    eid = Entity.NextEntity();

                    switch (rank)
                    {
                        #region Rank 1
                        case 1:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 1,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 10,
                                TotalDuration = 10,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 2
                        case 2:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 1,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 12,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 3
                        case 3:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 2,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 12,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 4
                        case 4:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 2,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 5
                        case 5:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 3,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 6
                        case 6:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 3,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 7
                        case 7:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 4,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 8
                        case 8:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 4,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 9
                        case 9:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 5,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 10
                        case 10:
                            HoT = new HealOverTime()
                            {
                                AmountPerTick = 7,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.HealOverTimeComponent.Add(eid, HoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 20,
                                TotalDuration = 20,
                            };
                            _game.TimedEffectComponent.Add(eid, time);

                            break;
                        #endregion
                        default:
                            throw new Exception("Unimplemented Rank");
                    }
                    break;
                #endregion

                #region Malicious Parasite
                case SkillType.MaliciousParasite:
                    if (friendly)
                        return;

                    eid = Entity.NextEntity();
                    switch (rank)
                    {
                        #region Rank 1
                        case 1:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 1,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 10,
                                TotalDuration = 10,
                            };
                            _game.TimedEffectComponent.Add(eid, time);

                            break;
                        #endregion

                        #region Rank 2
                        case 2:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 1,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 10,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);

                            break;
                        #endregion

                        #region Rank 3
                        case 3:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 2,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 12,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);

                            break;
                        #endregion

                        #region Rank 4
                        case 4:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 2,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 5
                        case 5:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 3,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 6
                        case 6:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 3,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 7
                        case 7:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 4,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 8
                        case 8:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 4,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 9
                        case 9:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 5,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion

                        #region Rank 10
                        case 10:
                            DoT = new DamageOverTime()
                            {
                                AmountPerTick = 7,
                                CurrentStack = 1,
                                CurrentTime = 0,
                                EntityID = eid,
                                MaxStack = 1,
                                TargetID = target,
                                TickTime = 1,
                            };
                            _game.DamageOverTimeComponent.Add(eid, DoT);

                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 20,
                                TotalDuration = 20,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            break;
                        #endregion
                        default:
                            throw new Exception("Unimplemented Rank");
                    }
                    break;
                #endregion

                #region Mindless Parasite
                case SkillType.MindlessParasites:
                    int mod;
                    eid = Entity.NextEntity();
                    if (friendly)
                        mod = 1;
                    else
                        mod = -1;

                    switch (rank)
                    {
                        #region Rank 1
                        case 1:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 10,
                                TotalDuration = 10,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .1)),
                                DefenseMelee = mod * 1,
                                DefenseRanged = mod * 1,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);

                            break;
                        #endregion

                        #region Rank 2
                        case 2:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 12,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .1)),
                                DefenseMelee = mod * 1,
                                DefenseRanged = mod * 1,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 3
                        case 3:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 12,
                                TotalDuration = 12,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .2)),
                                DefenseMelee = mod * 2,
                                DefenseRanged = mod * 2,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;

                        #endregion

                        #region Rank 4
                        case 4:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .2)),
                                DefenseMelee = mod * 2,
                                DefenseRanged = mod * 2,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 5
                        case 5:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 14,
                                TotalDuration = 14,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .3)),
                                DefenseMelee = mod * 3,
                                DefenseRanged = mod * 3,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 6
                        case 6:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .3)),
                                DefenseMelee = mod * 3,
                                DefenseRanged = mod * 3,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 7
                        case 7:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 16,
                                TotalDuration = 16,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .4)),
                                DefenseMelee = mod * 4,
                                DefenseRanged = mod * 4,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 8
                        case 8:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .4)),
                                DefenseMelee = mod * 4,
                                DefenseRanged = mod * 4,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 9
                        case 9:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 18,
                                TotalDuration = 18,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .5)),
                                DefenseMelee = mod * 5,
                                DefenseRanged = mod * 5,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,
                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion

                        #region Rank 10
                        case 10:
                            time = new TimedEffect()
                            {
                                EntityID = eid,
                                TimeLeft = 20,
                                TotalDuration = 20,
                            };
                            _game.TimedEffectComponent.Add(eid, time);
                            buff = new Buff()
                            {
                                EntityID = eid,
                                MovementSpeed = mod * ((int)(_game.MovementComponent[target].Speed * .7)),
                                DefenseMelee = mod * 7,
                                DefenseRanged = mod * 7,
                                AttackMelee = 0,
                                AttackRanged = 0,
                                AttackSpeed = 0,
                                isPercentAttackMelee = false,
                                isPercentAttackRanged = false,
                                isPercentAttackSpeed = false,

                                isPercentDefenseMelee = false,
                                isPercentDefenseRanged = false,
                                isPercentFatigue = false,
                                isPercentHealth = false,
                                isPercentMovementSpeed = true,
                                Fatigue = 0,
                                Health = 0,
                                isPercentPsi = false,
                                isPercentResistPoison = false,
                                isPercentWeaponAccuracy = false,
                                isPercentWeaponSpeed = false,
                                isPercentWeaponStrength = false,
                                Psi = 0,
                                ResistPoison = 0,
                                TargetID = target,
                                WeaponAccuracy = 0,
                                WeaponSpeed = 0,
                                WeaponStrength = 0,
                            };
                            _game.BuffComponent.Add(eid, buff);
                            break;
                        #endregion
                        default:
                            throw new Exception("Unimplemented Rank");
                    }
                    break;
                #endregion

                #endregion

                #region Cultist Triggered Skills

                #region Psionic Spear
                case SkillType.PsionicSpear:
                    {
                        #region Skill Variables

                        InstantEffect instant_Effect;
                        DirectDamage direct_damage;

                        Random damageMod = new Random();
                        int damageValue = 0;

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    damageValue = damageMod.Next(10) + 1; //Damage from 1 to 10
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    damageValue = damageMod.Next(20) + 1; //Damage from 1 to 20
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    damageValue = damageMod.Next(35) + 1; //Damage from 1 to 35
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    damageValue = damageMod.Next(50) + 1; //Damage from 1 to 50
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    damageValue = damageMod.Next(75) + 1; //Damage from 1 to 75
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    damageValue = damageMod.Next(100) + 1; //Damage from 1 to 100
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    damageValue = damageMod.Next(150) + 1; //Damage from 1 to 150
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    damageValue = damageMod.Next(200) + 1; //Damage from 1 to 200
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    damageValue = damageMod.Next(300) + 1; //Damage from 1 to 300
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    damageValue = damageMod.Next(400) + 1; //Damage from 1 to 400
                                    break;
                                }

                            #endregion

                            default:
                                {
                                    throw new Exception("Unimplemented Rank");
                                }
                        }

                        eid = Entity.NextEntity();

                        instant_Effect = new InstantEffect()
                        {
                            EntityID = eid,
                            isTriggered = false,
                        };
                        _game.InstantEffectComponent.Add(eid, instant_Effect);

                        direct_damage = new DirectDamage()
                        {
                            EntityID = eid,
                            TargetID = target,
                            Damage = damageValue,
                        };
                        _game.DirectDamageComponent.Add(eid, direct_damage);

                        #endregion

                        break;
                    }
                #endregion

                #region Enslave
                case SkillType.Enslave:
                    {
                        #region Skill Variables

                        TimedEffect timedEffect;
                        Enslave enslaveEffect;

                        uint cts_ID = 0;
                        ChanceToSucceed chanceToSucceed;

                        int percentChance = 0;
                        int maxSlaveNum = 0;
                        float duration = 0;

                        List<uint> chanceToSucceedList = new List<uint>();

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    percentChance = 60; //60% chance to succeed
                                    maxSlaveNum = 1; //Can only Enslave 1 enemy
                                    duration = 3; //For 3 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    percentChance = 60; //60% chance to succeed
                                    maxSlaveNum = 1; //Can only Enslave 1 enemy
                                    duration = 5; //For 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    percentChance = 65; //65% chance to succeed
                                    maxSlaveNum = 1; //Can only Enslave 1 enemy
                                    duration = 5; //For 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    percentChance = 70; //70% chance to succeed
                                    maxSlaveNum = 1; //Can only Enslave 1 enemy
                                    duration = 8; //For 8 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    percentChance = 70; //70% chance to succeed
                                    maxSlaveNum = 2; //Can only Enslave 2 enemies
                                    duration = 8; //For 8 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    percentChance = 75; //75% chance to succeed
                                    maxSlaveNum = 2; //Can only Enslave 2 enemies
                                    duration = 8; //For 8 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    percentChance = 75; //75% chance to succeed
                                    maxSlaveNum = 2; //Can only Enslave 2 enemies
                                    duration = 10; //For 10 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    percentChance = 80; //80% chance to succeed
                                    maxSlaveNum = 2; //Can only Enslave 2 enemies
                                    duration = 10; //For 10 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    percentChance = 85; //85% chance to succeed
                                    maxSlaveNum = 2; //Can only Enslave 2 enemies
                                    duration = 12; //For 12 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    percentChance = 85; //85% chance to succeed
                                    maxSlaveNum = 3; //Can only Enslave 3 enemies
                                    duration = 15; //For 15 seconds
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        eid = Entity.NextEntity();
                        timedEffect = new TimedEffect()
                        {
                            EntityID = eid,
                            TotalDuration = duration,
                            TimeLeft = duration,
                        };
                        _game.TimedEffectComponent.Add(eid, timedEffect);

                        enslaveEffect = new Enslave()
                        {
                            EntityID = eid,
                            OwnerID = owner,
                            TargetID = target,
                        };
                        _game.EnslaveComponent.Add(eid, enslaveEffect);

                        chanceToSucceedList.Add(eid);

                        cts_ID = Entity.NextEntity();
                        chanceToSucceed = new ChanceToSucceed()
                        {
                            EntityID = cts_ID,
                            SuccessRateAsPercentage = percentChance,
                            AffectedIDList = chanceToSucceedList,
                        };
                        _game.ChanceToSucceedComponent.Add(cts_ID, chanceToSucceed);

                        #endregion

                        break;
                    }
                #endregion

                #region Fear
                case SkillType.Fear:
                    {
                        #region Skill Variables

                        TimedEffect timedEffect;
                        Fear fear;

                        uint cts_id = 0;
                        ChanceToSucceed chanceToSucceed;
                        List<uint> chanceToSucceedList = new List<uint>();

                        int percentChance = 0;
                        float duration = 0;

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    percentChance = 60; //60% chance to succeed
                                    duration = 2; //lasts 2 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    percentChance = 65; //65% chance to succeed
                                    duration = 2; //lasts 2 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    percentChance = 70; //70% chance to succeed
                                    duration = 2; //lasts 2 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    percentChance = 70; //70% chance to succeed
                                    duration = 3; //lasts 3 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    percentChance = 70; //70% chance to succeed
                                    duration = 5; //lasts 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    percentChance = 75; //75% chance to succeed
                                    duration = 6; //lasts 6 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    percentChance = 75; //75% chance to succeed
                                    duration = 8; //lasts 8 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    percentChance = 75; //75% chance to succeed
                                    duration = 9; //lasts 9 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    percentChance = 80; //80% chance to succeed
                                    duration = 10; //lasts 10 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    percentChance = 85; //85% chance to succeed
                                    duration = 12; //lasts 12 seconds
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        eid = Entity.NextEntity();

                        timedEffect = new TimedEffect()
                        {
                            EntityID = eid,
                            TotalDuration = duration,
                            TimeLeft = duration,
                        };
                        _game.TimedEffectComponent.Add(eid, timedEffect);

                        fear = new Fear()
                        {
                            EntityID = eid,
                            SourceID = owner,
                            TargetID = target,
                        };
                        _game.FearComponent.Add(eid, fear);

                        chanceToSucceedList.Add(eid);

                        cts_id = Entity.NextEntity();

                        chanceToSucceed = new ChanceToSucceed()
                        {
                            EntityID = cts_id,
                            AffectedIDList = chanceToSucceedList,
                            SuccessRateAsPercentage = percentChance,
                        };
                        _game.ChanceToSucceedComponent.Add(cts_id, chanceToSucceed);

                        #endregion

                        break;
                    }
                #endregion

                #region Taint
                case SkillType.Taint:
                    {
                        #region Skill Variables

                        TimedEffect timedEffect;
                        DamageOverTime damageOverTime;

                        float duration = 0;
                        int dps = 0;

                        #endregion

                        #region Skill Logic
                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    dps = 2; // 2 damage per second
                                    duration = 5; // for 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    dps = 3; // 3 damage per second
                                    duration = 5; // for 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    dps = 5; // 5 damage per second
                                    duration = 5; // for 5 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    dps = 6; // 6 damage per second
                                    duration = 6; // for 6 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    dps = 8; // 8 damage per second
                                    duration = 7; // for 7 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    dps = 12; // 12 damage per second
                                    duration = 8; // for 8 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    dps = 15; // 15 damage per second
                                    duration = 9; // for 9 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    dps = 20; // 20 damage per second
                                    duration = 10; // for 10 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    dps = 30; // 30 damage per second
                                    duration = 12; // for 12 seconds
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    dps = 45; // 45 damage per second
                                    duration = 15; // for 15 seconds
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        eid = Entity.NextEntity();

                        timedEffect = new TimedEffect()
                        {
                            EntityID = eid,
                            TotalDuration = duration,
                            TimeLeft = duration,
                        };
                        _game.TimedEffectComponent.Add(eid, timedEffect);

                        damageOverTime = new DamageOverTime()
                        {
                            EntityID = eid,
                            MaxStack = 1,
                            CurrentStack = 1,
                            AmountPerTick = dps,
                            CurrentTime = 0,
                            TickTime = 1,
                            TargetID = target,
                        };
                        _game.DamageOverTimeComponent.Add(eid, damageOverTime);

                        #endregion

                        break;
                    }
                #endregion

                #region Rot
                case SkillType.Rot:
                    {
                        #region Skill Variables

                        TimedEffect timedEffect;
                        Buff buffEffect;

                        bool targetTainted = false;

                        int dps = 0;
                        float duration = 0;
                        int staminaDebuff = 0;

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    dps = 2; // 2 damage per second
                                    duration = 5; // over 5 seconds
                                    staminaDebuff = -1; // and -1 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    dps = 3; // 3 damage per second
                                    duration = 5; // over 5 seconds
                                    staminaDebuff = -1; // and -1 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    dps = 3; // 3 damage per second
                                    duration = 6; // over 6 seconds
                                    staminaDebuff = -1; // and -1 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    dps = 5; // 5 damage per second
                                    duration = 6; // over 6 seconds
                                    staminaDebuff = -1; // and -1 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    dps = 5; // 5 damage per second
                                    duration = 7; // over 7 seconds
                                    staminaDebuff = -2; // and -2 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    dps = 8; // 8 damage per second
                                    duration = 7; // over 7 seconds
                                    staminaDebuff = -2; // and -2 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    dps = 10; // 10 damage per second
                                    duration = 9; // over 9 seconds
                                    staminaDebuff = -3; // and -3 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    dps = 12; // 12 damage per second
                                    duration = 11; // over 11 seconds
                                    staminaDebuff = -3; // and -3 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    dps = 15; // 15 damage per second
                                    duration = 11; // over 11 seconds
                                    staminaDebuff = -3; // and -3 to Stamina
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    dps = 17; // 17 damage per second
                                    duration = 13; // over 13 seconds
                                    staminaDebuff = -4; // and -4 to Stamina
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        //TODO: check if the target has been tainted
                        targetTainted = true;

                        if (!targetTainted) return;

                        eid = Entity.NextEntity();

                        timedEffect = new TimedEffect()
                        {
                            EntityID = eid,
                            TotalDuration = duration,
                            TimeLeft = duration,
                        };
                        _game.TimedEffectComponent.Add(eid, timedEffect);

                        buffEffect = new Buff()
                        {
                            EntityID = eid,
                            Stamina = staminaDebuff,
                        };
                        _game.BuffComponent.Add(eid, buffEffect);

                        #endregion

                        break;
                    }
                #endregion

                #region Push
                case SkillType.Push:
                    {
                        #region Skill Variables

                        InstantEffect instant_Effect;
                        KnockBack knockBack;
                        DirectDamage direct_damage;

                        Random damageMod = new Random();

                        int meterConversion = 75;
                        int pushDistance = 0;
                        int damageValue = 0;

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    pushDistance = 1; // 1 meter
                                    damageValue = 1 + damageMod.Next(2); // Damage between 1 and 2
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    pushDistance = 1; // 1 meter
                                    damageValue = 2 + damageMod.Next(4); // Damage between 2 and 5
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    pushDistance = 2; // 2 meters
                                    damageValue = 2 + damageMod.Next(4); // Damage between 2 and 5
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    pushDistance = 2; // 2 meters
                                    damageValue = 5 + damageMod.Next(6); // Damage between 5 and 10
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    pushDistance = 2; // 2 meters
                                    damageValue = 10 + damageMod.Next(6); // Damage between 10 and 15
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    pushDistance = 3; // 3 meters
                                    damageValue = 10 + damageMod.Next(6); // Damage between 10 and 15
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    pushDistance = 3; // 3 meters
                                    damageValue = 15 + damageMod.Next(6); // Damage between 15 and 20
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    pushDistance = 3; // 3 meters
                                    damageValue = 20 + damageMod.Next(6); // Damage between 20 and 25
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    pushDistance = 4; // 4 meters
                                    damageValue = 20 + damageMod.Next(6); // Damage between 20 and 25
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    pushDistance = 5; // 5 meters
                                    damageValue = 25 + damageMod.Next(6); // Damage between 25 and 30
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        eid = Entity.NextEntity();

                        instant_Effect = new InstantEffect()
                        {
                            EntityID = eid,
                            isTriggered = false,
                        };
                        _game.InstantEffectComponent.Add(eid, instant_Effect);

                        knockBack = new KnockBack()
                        {
                            EntityID = eid,
                            Distance = pushDistance * meterConversion,
                            Origin = _game.PositionComponent[owner].Center,
                            TargetID = target,
                        };
                        _game.KnockBackComponent.Add(eid, knockBack);

                        direct_damage = new DirectDamage()
                        {
                            EntityID = eid,
                            TargetID = target,
                            Damage = damageValue,
                        };
                        _game.DirectDamageComponent.Add(eid, direct_damage);

                        #endregion

                        break;
                    }
                #endregion

                #region Malice
                case SkillType.Malice:
                    {
                        #region Skill Variables

                        InstantEffect instant_Effect;
                        DirectDamage direct_Damage;

                        Random damageMod = new Random();
                        int damageValue = 0;

                        #endregion

                        #region Skill Logic

                        switch (rank)
                        {
                            #region Rank 1
                            case 1:
                                {
                                    damageValue = 20 + damageMod.Next(6); //Damage between 20 and 25
                                    break;
                                }
                            #endregion

                            #region Rank 2
                            case 2:
                                {
                                    damageValue = 20 + damageMod.Next(11); //Damage between 20 and 30
                                    break;
                                }
                            #endregion

                            #region Rank 3
                            case 3:
                                {
                                    damageValue = 25 + damageMod.Next(11); //Damage between 25 and 25
                                    break;
                                }
                            #endregion

                            #region Rank 4
                            case 4:
                                {
                                    damageValue = 40 + damageMod.Next(6); //Damage between 40 and 45
                                    break;
                                }
                            #endregion

                            #region Rank 5
                            case 5:
                                {
                                    damageValue = 50 + damageMod.Next(11); //Damage between 50 and 60
                                    break;
                                }
                            #endregion

                            #region Rank 6
                            case 6:
                                {
                                    damageValue = 65 + damageMod.Next(6); //Damage between 65 and 70
                                    break;
                                }
                            #endregion

                            #region Rank 7
                            case 7:
                                {
                                    damageValue = 70 + damageMod.Next(16); //Damage between 70 and 85
                                    break;
                                }
                            #endregion

                            #region Rank 8
                            case 8:
                                {
                                    damageValue = 90 + damageMod.Next(11); //Damage between 90 and 100
                                    break;
                                }
                            #endregion

                            #region Rank 9
                            case 9:
                                {
                                    damageValue = 105 + damageMod.Next(11); //Damage between 105 and 115
                                    break;
                                }
                            #endregion

                            #region Rank 10
                            case 10:
                                {
                                    damageValue = 120 + damageMod.Next(6); //Damage between 120 and 125
                                    break;
                                }
                            #endregion

                            default:
                                {
                                    break;
                                }
                        }

                        eid = Entity.NextEntity();

                        instant_Effect = new InstantEffect()
                        {
                            EntityID = eid,
                            isTriggered = false,
                        };
                        _game.InstantEffectComponent.Add(eid, instant_Effect);

                        direct_Damage = new DirectDamage()
                        {
                            EntityID = eid,
                            TargetID = target,
                            Damage = damageValue,
                        };
                        _game.DirectDamageComponent.Add(eid, direct_Damage);

                        #endregion

                        break;
                    }
                #endregion

                #endregion

                case SkillType.SniperShot:
                    instantEffect = new InstantEffect()
                    {
                        EntityID = eid,
                    };
                    _game.InstantEffectComponent.Add(eid, instantEffect);

                    directDamage = new DirectDamage()
                    {
                        TargetID = target,
                        Damage = 1,
                        EntityID = eid,
                    };
                    _game.DirectDamageComponent.Add(eid, directDamage);

                    break;

                case SkillType.BasicRangedAttack:
                    eid = Entity.NextEntity();

                    instantEffect = new InstantEffect()
                    {
                        EntityID = eid,
                    };
                    _game.InstantEffectComponent.Add(eid, instantEffect);

                    damage = new DirectDamage()
                    {
                        Damage = rank,
                        EntityID = eid,
                        TargetID = target,
                    };
                    _game.DirectDamageComponent.Add(eid, damage);
                    break;
                default:
                    throw new Exception("Unimplemented SKill");
            }
        }