public HScene.StartMotion RandomSelectAnimation(List <HScene.AnimationListInfo>[] animList)
        {
            HAutoCtrl.AutoRandom inclusionAutoRandom = new HAutoCtrl.AutoRandom();
            HAutoCtrl.AutoRandom autoRandom          = new HAutoCtrl.AutoRandom();

            bool male            = Singleton <HSceneManager> .Instance.player.sex == 0;
            bool futa            = Singleton <HSceneManager> .Instance.bFutanari && !male;
            bool multipleFemales = Singleton <HSceneManager> .Instance.Hscene.GetFemales().Length > 1;

            bool fem1Present = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] != null;

            bool multipleMales = Singleton <HSceneManager> .Instance.Hscene.GetMales().Length > 1;

            string femaleName1 = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0] == null ? "" : Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0].fileParam.fullname;

            string femaleName2 = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] == null ? "" : Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1].fileParam.fullname;

            string roomName = BaseMap.infoTable[Singleton <HSceneManager> .Instance.mapID].MapNames[0];

            //      Log.LogInfo(string.Format("Now Entering: {0} {3} with {1} {2}", Singleton<HSceneManager>.Instance.mapID, femaleName1, femaleName2, roomName));


            for (int info1 = 0; info1 < animList.Length; info1++)
            {
                for (int pos = 0; pos < animList[info1].Count; pos++)
                {
                    int mode = DetermineModeByActionCtrl(animList[info1][pos].ActionCtrl.Item1, animList[info1][pos].ActionCtrl.Item2);
                    if (!animList[info1][pos].nPositons.Contains(Singleton <HSceneFlagCtrl> .Instance.nPlace))
                    {
                        // Skip positions not available in location
                        if (!AllowAllPositions.Value)
                        {
                            continue;
                        }
                    }
                    if (mode == 4 && (male || futa))
                    {
                        //Skip masturbation if not female
                        continue;
                    }
                    if (mode == 5 && (male || futa) && !fem1Present)
                    {
                        // Don't peep without a female subject?
                        continue;
                    }
                    if (!multipleFemales && (mode == 6 || mode == 7))
                    {
                        // need multiple females for les/f2 scenes
                        continue;
                    }
                    if (!multipleMales && mode == 8)
                    {
                        // need multiple makes for m2 scenes
                        continue;
                    }

                    TCRuleApplicationJudgement female1CharacterJudgement = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[0] == null ? TCRuleApplicationJudgement.NEUTRAL : RuleSet.CharacterRuleJudgement(femaleName1, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    TCRuleApplicationJudgement female2CharacterJudgement = Singleton <HSceneManager> .Instance.Hscene.GetFemales()[1] == null ? TCRuleApplicationJudgement.NEUTRAL : RuleSet.CharacterRuleJudgement(femaleName2, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    TCRuleApplicationJudgement roomJudgement = RuleSet.RoomRuleJudgement(roomName, animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString());

                    if (RuleSet.ExcludeAlwaysCheck(animList[info1][pos].nameAnimation, ((PositionCategories)mode).ToString()) || female1CharacterJudgement == TCRuleApplicationJudgement.EXCLUDED || female2CharacterJudgement == TCRuleApplicationJudgement.EXCLUDED || roomJudgement == TCRuleApplicationJudgement.EXCLUDED)
                    {
                        //           Log.LogInfo(string.Format("TC Rule Judgement: Excluding: {0} ({1}, {2}, {3})", animList[info1][pos].nameAnimation, femaleName1, femaleName2, roomName));
                        continue;
                    }

                    // Staying with Illusion Random logic for consistency...
                    HAutoCtrl.AutoRandom.AutoRandomDate autoRandomDate = new HAutoCtrl.AutoRandom.AutoRandomDate();
                    autoRandomDate.mode = info1;
                    autoRandomDate.id   = animList[info1][pos].id;
                    if (female1CharacterJudgement == TCRuleApplicationJudgement.INCLUDED || female2CharacterJudgement == TCRuleApplicationJudgement.INCLUDED || roomJudgement == TCRuleApplicationJudgement.INCLUDED)
                    {
                        //            Log.LogInfo(string.Format("TC Rule Judgement: Including: {0} ({1}, {2}, {3})", animList[info1][pos].nameAnimation, femaleName1, femaleName2, roomName));
                        inclusionAutoRandom.Add(autoRandomDate, 10f);
                    }
                    else
                    {
                        autoRandom.Add(autoRandomDate, 10f);
                    }
                }
            }

            if (!inclusionAutoRandom.IsEmpty())
            {
                HAutoCtrl.AutoRandom.AutoRandomDate selectedAutoRandom = inclusionAutoRandom.Random();
                return(new HScene.StartMotion(selectedAutoRandom.mode, selectedAutoRandom.id));
            }
            else
            {
                HAutoCtrl.AutoRandom.AutoRandomDate selectedAutoRandom = autoRandom.Random();
                return(new HScene.StartMotion(selectedAutoRandom.mode, selectedAutoRandom.id));
            }
        }