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)); } }