public static int GetAbilityDC(MTEML teml, int level) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } switch (teml) { case MTEML.JUST_BONKERS: return(22 + level + (level / 2)); case MTEML.EXTREME: return(19 + level + ((level + 3) / 5) + ((level + 1) / 5) + (level > 23 ? -1 : 0)); case MTEML.HIGH: return(16 + level + (level / 3)); case MTEML.MODERATE: return(13 + level + (level / 3)); case MTEML.LOW: return(10 + level + (level / 3)); case MTEML.TERRIBLE: return(7 + level + (level / 3)); case MTEML.THE_WORST: return(4 + level + (level / 3)); } return(0); }
public static int GetArmor(MTEML teml, int level) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } switch (teml) { case MTEML.JUST_BONKERS: return(21 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.EXTREME: return(18 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.HIGH: return(15 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.MODERATE: return(14 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.LOW: return(12 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.TERRIBLE: return(8 + level + (level / 2) + (level < 1 ? 1 : 0)); case MTEML.THE_WORST: return(4 + level + (level / 2) + (level < 1 ? 1 : 0)); } return(0); }
/*public static int GetStatValue(Monster mon, MStatAttr stat) { * MTEML teml = mon.GetAttribute(stat); * return 0;// GetValueFor(teml, mon.level); * }*/ public static int GetAttack(MTEML teml, int level, bool isSpell) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } if (isSpell) { return(GetAbilityDC(teml, level) - 8); } switch (teml) { case MTEML.JUST_BONKERS: return(12 + level + ((level + 1) / 2)); case MTEML.EXTREME: return(10 + level + (level / 2) + (level < 0 ? 1 : 0)); case MTEML.HIGH: return(8 + level + (level / 2) + (level < 0 ? 1 : 0)); case MTEML.MODERATE: return(6 + level + (level / 2) + (level < 0 ? 1 : 0)); case MTEML.LOW: return(4 + level + ((level + 1) / 3) + (level < 0 ? 1 : 0)); case MTEML.TERRIBLE: return(2 + level + ((level + 1) / 3)); case MTEML.THE_WORST: return(-1 + level + ((level + 1) / 3)); } return(0); }
public static int GetStealth(MTEML teml, int level) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } switch (teml) { case MTEML.JUST_BONKERS: return(12 + level + (level / 3) + ((level - 1) / 3)); case MTEML.EXTREME: return(9 + level + (level / 3) + ((level - 1) / 3)); case MTEML.HIGH: return(6 + level + (level / 3) + ((level - 1) / 3)); case MTEML.MODERATE: return(5 + level + ((level - 1) / 2)); case MTEML.LOW: return(3 + level + ((level - 1) / 2)); case MTEML.TERRIBLE: return(2 + level + ((level + 1) / 3)); case MTEML.THE_WORST: return(-1 + level + ((level + 1) / 3)); } return(0); }
public static int GetFortReflexBonus(MTEML teml, int level) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } switch (teml) { case MTEML.JUST_BONKERS: return(13 + level + ((level - 1 + (level > 21 ? (1) : 0)) / 2)); case MTEML.EXTREME: return(10 + level + ((level - 1 + (level > 21 ? (1) : 0)) / 2)); case MTEML.HIGH: return(9 + level + ((level - 1 + (level > 5 ? (level > 10 ? (level > 18 ? (3) : 2) : 1) : 0)) / 3)); case MTEML.MODERATE: return(7 + level + ((level - 1 + (level > 5 ? (level > 10 ? (level > 18 ? (3) : 2) : 1) : 0)) / 3)); case MTEML.LOW: return(3 + level + ((level - 1 + (level > 5 ? (level > 10 ? (level > 15 ? (3) : 2) : 1) : 0)) / 3)); case MTEML.TERRIBLE: return(0 + level + ((level - 1 + (level > 5 ? (level > 10 ? (level > 15 ? (3) : 2) : 1) : 0)) / 3)); case MTEML.THE_WORST: return(-3 + level + ((level - 1 + (level > 5 ? (level > 10 ? (level > 15 ? (3) : 2) : 1) : 0)) / 3)); } return(0); }
public static int GetSavingThrow(MTEML teml, int level) { if (Main.instance != null && Main.instance.forbidExtreme && teml < MTEML.HIGH) { teml = MTEML.HIGH; } switch (teml) { case MTEML.JUST_BONKERS: return(17 + level + (level / 2)); } return(GetPerception(teml, level)); }
void Start() { instance = this; allChar = Resources.LoadAll <Character>("classes"); allHaz = Resources.LoadAll <Hazard>("hazards"); List <int> availLevels = new List <int>(); classOpts = new List <Dropdown.OptionData>(); foreach (Character c in allChar) { if (!classOpts.Any(ooo => ooo.text == c.name)) { Dropdown.OptionData opt = new Dropdown.OptionData(c.name); classOpts.Add(opt); } if (!availLevels.Contains(c.level)) { availLevels.Add(c.level); } } levelOpts = new List <Dropdown.OptionData>(); availLevels.Sort(); foreach (int lv in availLevels) { levelOpts.Add(new Dropdown.OptionData(lv.ToString())); } diffDropdown.onValueChanged.AddListener(v => { diffSetting = v; }); Transform legend = topBar.Find("Legend"); legend.Find("Hover").GetComponent <Image>().AddHover(p => { ShowTooltip(legend.transform.position + new Vector3(-50, -100, 0), "Indicates an approximate result of making a roll against challenges of the indicated difficulty as an average between all possible outcomes (nat-1 to nat-20).\nE.g. if only two results are possible (fail or success) then the average will be a blend between the two (yellow).", 4, 1, false); }); legend.Find("Hover2").GetComponent <Image>().AddHover(p => { ShowTooltip(legend.transform.position + new Vector3(-50, -100, 0), "Black: Critical Failure\nRed: Failure\nGreen: Success\nBlue: Critical Success\nBlend: Some mixture.", 4, 1, false); }); Color[] col = new Color[20]; for (int i = 0; i < 20; i++) { col[i] = gradient.gradient.Evaluate((float)i / 19); } legend.GetComponentInChildren <BreakdownBar>().SetBitColors(col); legend.GetComponentInChildren <Dropdown>().onValueChanged.AddListener(v => { gradient = gradients[v]; Color[] cols = new Color[20]; for (int i = 0; i < 20; i++) { cols[i] = gradient.gradient.Evaluate((float)i / 19); } legend.GetComponentInChildren <BreakdownBar>().SetBitColors(cols); foreach (GameObject window in resultWindow) { window.GetComponent <ResultWindow>().RefreshColor(); } }); ToggleDropdown togg = topBar.Find("SourceDropdown").GetComponent <ToggleDropdown>(); togg.onValueChanged.AddListener(_ => { allMons = new Monster[0]; foreach (int i in togg.activeValues) { Dropdown.OptionData dat = togg.options[i]; Monster[] mons = Resources.LoadAll <Monster>("specific_monsters/" + dat.text.Replace(" ", "_").ToLower()); int olen = allMons.Length; Array.Resize <Monster>(ref allMons, olen + mons.Length); Array.Copy(mons, 0, allMons, olen, mons.Length); } }); togg.value = 1; //legend.GetComponentInChildren<BreakdownBar>().SetNotches(-1, -1); Debug.Log(allMons.Length); foreach (MStatAttr atr in Enum.GetValues(typeof(MStatAttr))) { if (atr == MStatAttr.DISABLE) { continue; } int ext = 0; int high = 0; int mod = 0; int low = 0; int ter = 0; int wrst = 0; int bnk = 0; foreach (Monster mon in allMons) { MTEML teml = mon.GetAttribute(atr); switch (teml) { case MTEML.THE_WORST: wrst++; break; case MTEML.TERRIBLE: ter++; break; case MTEML.LOW: low++; break; case MTEML.MODERATE: mod++; break; case MTEML.HIGH: high++; break; case MTEML.EXTREME: ext++; break; case MTEML.JUST_BONKERS: bnk++; break; } } Debug.Log(atr.ToString() + "\nwrst: " + wrst + "\nter: " + ter + "\nlow: " + low + "\nmod: " + mod + "\nhigh: " + high + "\next: " + ext + "\nbnk: " + bnk); } topBar.Find("DifficultySelect/UpdateBtn").GetComponent <Button>().onClick.AddListener(() => { foreach (GameObject window in resultWindow) { window.GetComponent <ResultWindow>().UpdateDifficulty(); } }); topBar.Find("CycleToggle").GetComponent <Toggle>().onValueChanged.AddListener(b => { if (b) { StartCoroutine(CycleLevelValues()); } }); forbidExtreme = false; topBar.Find("DifficultySelect/ExtremeToggle").GetComponent <Toggle>().onValueChanged.AddListener(b => { forbidExtreme = b; }); }