public static DaggerfallStats GetClassBaseStats(DFCareer dfClass) { DaggerfallStats stats = new DaggerfallStats(); stats.Strength = dfClass.Strength; stats.Intelligence = dfClass.Intelligence; stats.Willpower = dfClass.Willpower; stats.Agility = dfClass.Agility; stats.Endurance = dfClass.Endurance; stats.Personality = dfClass.Personality; stats.Speed = dfClass.Speed; stats.Luck = dfClass.Luck; return stats; }
public int GetStatValue(DFCareer.Stats stat) { switch (stat) { case DFCareer.Stats.Strength: return this.Strength; case DFCareer.Stats.Intelligence: return this.Intelligence; case DFCareer.Stats.Willpower: return this.Willpower; case DFCareer.Stats.Agility: return this.Agility; case DFCareer.Stats.Endurance: return this.Endurance; case DFCareer.Stats.Personality: return this.Personality; case DFCareer.Stats.Speed: return this.Speed; case DFCareer.Stats.Luck: return this.Luck; default: return 0; } }
// Set some default values for testing during development void SetDefaultValues() { race = GetRaceTemplate(Races.Breton); gender = Genders.Male; career = DaggerfallEntity.GetClassCareerTemplate(ClassCareers.Mage); name = "Nameless"; reflexes = PlayerReflexes.Average; workingSkills.SetDefaults(); workingStats.SetFromCareer(career); faceIndex = 0; }
void SetClass(DFCareer dfClass) { Setup(); this.dfClass = dfClass; skillsRollout.SetClassSkills(dfClass); }
public void SetFromCareer(DFCareer career) { if (career != null) { Strength = career.Strength; Intelligence = career.Intelligence; Willpower = career.Willpower; Agility = career.Agility; Endurance = career.Endurance; Personality = career.Personality; Speed = career.Speed; Luck = career.Luck; } }
public int GetStatDescriptionTextID(DFCareer.Stats stat) { switch (stat) { case DFCareer.Stats.Strength: return 0; case DFCareer.Stats.Intelligence: return 1; case DFCareer.Stats.Willpower: return 2; case DFCareer.Stats.Agility: return 3; case DFCareer.Stats.Endurance: return 4; case DFCareer.Stats.Personality: return 5; case DFCareer.Stats.Speed: return 6; case DFCareer.Stats.Luck: return 7; default: return -1; } }
public string GetAbbreviatedStatName(DFCareer.Stats stat) { switch (stat) { case DFCareer.Stats.Strength: return "STR"; case DFCareer.Stats.Intelligence: return "INT"; case DFCareer.Stats.Willpower: return "WIL"; case DFCareer.Stats.Agility: return "AGI"; case DFCareer.Stats.Endurance: return "END"; case DFCareer.Stats.Personality: return "PER"; case DFCareer.Stats.Speed: return "SPD"; case DFCareer.Stats.Luck: return "LUC"; default: return string.Empty; } }
public static DFCareer.Stats GetPrimaryStat(DFCareer.Skills skill) { switch (skill) { case DFCareer.Skills.Medical: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Etiquette: return DFCareer.Stats.Personality; case DFCareer.Skills.Streetwise: return DFCareer.Stats.Personality; case DFCareer.Skills.Jumping: return DFCareer.Stats.Strength; case DFCareer.Skills.Orcish: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Harpy: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Giantish: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Dragonish: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Nymph: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Daedric: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Spriggan: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Centaurian: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Impish: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Lockpicking: return DFCareer.Stats.Intelligence; case DFCareer.Skills.Mercantile: return DFCareer.Stats.Personality; case DFCareer.Skills.Pickpocket: return DFCareer.Stats.Agility; case DFCareer.Skills.Stealth: return DFCareer.Stats.Agility; case DFCareer.Skills.Swimming: return DFCareer.Stats.Endurance; case DFCareer.Skills.Climbing: return DFCareer.Stats.Strength; case DFCareer.Skills.Backstabbing: return DFCareer.Stats.Agility; case DFCareer.Skills.Dodging: return DFCareer.Stats.Speed; case DFCareer.Skills.Running: return DFCareer.Stats.Speed; case DFCareer.Skills.Destruction: return DFCareer.Stats.Willpower; case DFCareer.Skills.Restoration: return DFCareer.Stats.Willpower; case DFCareer.Skills.Illusion: return DFCareer.Stats.Willpower; case DFCareer.Skills.Alteration: return DFCareer.Stats.Willpower; case DFCareer.Skills.Thaumaturgy: return DFCareer.Stats.Willpower; case DFCareer.Skills.Mysticism: return DFCareer.Stats.Willpower; case DFCareer.Skills.ShortBlade: return DFCareer.Stats.Agility; case DFCareer.Skills.LongBlade: return DFCareer.Stats.Agility; case DFCareer.Skills.HandToHand: return DFCareer.Stats.Agility; case DFCareer.Skills.Axe: return DFCareer.Stats.Strength; case DFCareer.Skills.BluntWeapon: return DFCareer.Stats.Strength; case DFCareer.Skills.Archery: return DFCareer.Stats.Agility; case DFCareer.Skills.CriticalStrike: return DFCareer.Stats.Agility; default: return (DFCareer.Stats)(-1); } }
void ConfirmClassPopup_OnButtonClick(DaggerfallMessageBox sender, DaggerfallMessageBox.MessageBoxButtons messageBoxButton) { if (messageBoxButton == DaggerfallMessageBox.MessageBoxButtons.Yes) { sender.CloseWindow(); CloseWindow(); } else if (messageBoxButton == DaggerfallMessageBox.MessageBoxButtons.No) { selectedClass = null; sender.CancelWindow(); } }
void RemoveSkillPoint(DFCareer.Skills skill, LeftRightSpinner spinner) { // Working skill value cannot fall below rolled skill value int workingValue = workingSkills.GetSkillValue(skill); if (workingValue == startingSkills.GetSkillValue(skill)) return; // Remove a point from skill and assign to pool spinner.Value += 1; workingSkills.SetSkillValue(skill, (short)(workingValue - 1)); UpdateSkillValueLabels(); }
void AddSkillPoint(DFCareer.Skills skill, LeftRightSpinner spinner) { // Bonus point pool cannot fall below zero int workingValue = workingSkills.GetSkillValue(skill); if (spinner.Value == 0) return; // Remove a point from pool and assign to skill spinner.Value -= 1; workingSkills.SetSkillValue(skill, (short)(workingValue + 1)); UpdateSkillValueLabels(); }
public void SetClassSkills(DFCareer dfClass) { // Set primary, major, minor skills from class template primarySkills[0] = dfClass.PrimarySkill1; primarySkills[1] = dfClass.PrimarySkill2; primarySkills[2] = dfClass.PrimarySkill3; majorSkills[0] = dfClass.MajorSkill1; majorSkills[1] = dfClass.MajorSkill2; majorSkills[2] = dfClass.MajorSkill3; minorSkills[0] = dfClass.MinorSkill1; minorSkills[1] = dfClass.MinorSkill2; minorSkills[2] = dfClass.MinorSkill3; minorSkills[3] = dfClass.MinorSkill4; minorSkills[4] = dfClass.MinorSkill5; minorSkills[5] = dfClass.MinorSkill6; UpdateSkillLabels(); Reroll(); }
public void SetStatValue(DFCareer.Stats stat, int value) { switch (stat) { case DFCareer.Stats.Strength: this.Strength = value; break; case DFCareer.Stats.Intelligence: this.Intelligence = value; break; case DFCareer.Stats.Willpower: this.Willpower = value; break; case DFCareer.Stats.Agility: this.Agility = value; break; case DFCareer.Stats.Endurance: this.Endurance = value; break; case DFCareer.Stats.Personality: this.Personality = value; break; case DFCareer.Stats.Speed: this.Speed = value; break; case DFCareer.Stats.Luck: this.Luck = value; break; } }
public short GetSkillValue(DFCareer.Skills skill) { switch (skill) { case DFCareer.Skills.Medical: return Medical; case DFCareer.Skills.Etiquette: return Etiquette; case DFCareer.Skills.Streetwise: return Streetwise; case DFCareer.Skills.Jumping: return Jumping; case DFCareer.Skills.Orcish: return Orcish; case DFCareer.Skills.Harpy: return Harpy; case DFCareer.Skills.Giantish: return Giantish; case DFCareer.Skills.Dragonish: return Dragonish; case DFCareer.Skills.Nymph: return Nymph; case DFCareer.Skills.Daedric: return Daedric; case DFCareer.Skills.Spriggan: return Spriggan; case DFCareer.Skills.Centaurian: return Centaurian; case DFCareer.Skills.Impish: return Impish; case DFCareer.Skills.Lockpicking: return Lockpicking; case DFCareer.Skills.Mercantile: return Mercantile; case DFCareer.Skills.Pickpocket: return Pickpocket; case DFCareer.Skills.Stealth: return Stealth; case DFCareer.Skills.Swimming: return Swimming; case DFCareer.Skills.Climbing: return Climbing; case DFCareer.Skills.Backstabbing: return Backstabbing; case DFCareer.Skills.Dodging: return Dodging; case DFCareer.Skills.Running: return Running; case DFCareer.Skills.Destruction: return Destruction; case DFCareer.Skills.Restoration: return Restoration; case DFCareer.Skills.Illusion: return Illusion; case DFCareer.Skills.Alteration: return Alteration; case DFCareer.Skills.Thaumaturgy: return Thaumaturgy; case DFCareer.Skills.Mysticism: return Mysticism; case DFCareer.Skills.ShortBlade: return ShortBlade; case DFCareer.Skills.LongBlade: return LongBlade; case DFCareer.Skills.HandToHand: return HandToHand; case DFCareer.Skills.Axe: return Axe; case DFCareer.Skills.BluntWeapon: return BluntWeapon; case DFCareer.Skills.Archery: return Archery; case DFCareer.Skills.CriticalStrike: return CriticalStrike; default: return 0; } }
void DaggerfallClassSelectWindow_OnItemPicked(int index, string className) { selectedClass = classList[index]; TextFile.Token[] textTokens = DaggerfallUnity.Instance.TextProvider.GetRSCTokens(startClassDescriptionID + index); DaggerfallMessageBox messageBox = new DaggerfallMessageBox(uiManager, this); messageBox.SetTextTokens(textTokens); messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.Yes); Button noButton = messageBox.AddButton(DaggerfallMessageBox.MessageBoxButtons.No); noButton.ClickSound = DaggerfallUI.Instance.GetAudioClip(SoundClips.ButtonClick); messageBox.OnButtonClick += ConfirmClassPopup_OnButtonClick; uiManager.PushWindow(messageBox); AudioClip clip = DaggerfallUnity.Instance.SoundReader.GetAudioClip(SoundClips.SelectClassDrums); DaggerfallUI.Instance.AudioSource.PlayOneShot(clip); }
public void SetSkillValue(DFCareer.Skills skill, short value) { switch (skill) { case DFCareer.Skills.Medical: Medical = value; break; case DFCareer.Skills.Etiquette: Etiquette = value; break; case DFCareer.Skills.Streetwise: Streetwise = value; break; case DFCareer.Skills.Jumping: Jumping = value; break; case DFCareer.Skills.Orcish: Orcish = value; break; case DFCareer.Skills.Harpy: Harpy = value; break; case DFCareer.Skills.Giantish: Giantish = value; break; case DFCareer.Skills.Dragonish: Dragonish = value; break; case DFCareer.Skills.Nymph: Nymph = value; break; case DFCareer.Skills.Daedric: Daedric = value; break; case DFCareer.Skills.Spriggan: Spriggan = value; break; case DFCareer.Skills.Centaurian: Centaurian = value; break; case DFCareer.Skills.Impish: Impish = value; break; case DFCareer.Skills.Lockpicking: Lockpicking = value; break; case DFCareer.Skills.Mercantile: Mercantile = value; break; case DFCareer.Skills.Pickpocket: Pickpocket = value; break; case DFCareer.Skills.Stealth: Stealth = value; break; case DFCareer.Skills.Swimming: Swimming = value; break; case DFCareer.Skills.Climbing: Climbing = value; break; case DFCareer.Skills.Backstabbing: Backstabbing = value; break; case DFCareer.Skills.Dodging: Dodging = value; break; case DFCareer.Skills.Running: Running = value; break; case DFCareer.Skills.Destruction: Destruction = value; break; case DFCareer.Skills.Restoration: Restoration = value; break; case DFCareer.Skills.Illusion: Illusion = value; break; case DFCareer.Skills.Alteration: Alteration = value; break; case DFCareer.Skills.Thaumaturgy: Thaumaturgy = value; break; case DFCareer.Skills.Mysticism: Mysticism = value; break; case DFCareer.Skills.ShortBlade: ShortBlade = value; break; case DFCareer.Skills.LongBlade: LongBlade = value; break; case DFCareer.Skills.HandToHand: HandToHand = value; break; case DFCareer.Skills.Axe: Axe = value; break; case DFCareer.Skills.BluntWeapon: BluntWeapon = value; break; case DFCareer.Skills.Archery: Archery = value; break; case DFCareer.Skills.CriticalStrike: CriticalStrike = value; break; } }
/// <summary> /// Sets enemy career and prepares entity settings. /// </summary> public void SetEnemyCareer(MobileEnemy mobileEnemy, EntityTypes entityType) { if (entityType == EntityTypes.EnemyMonster) { careerIndex = (int)mobileEnemy.ID; career = GetMonsterCareerTemplate((MonsterCareers)careerIndex); stats.SetFromCareer(career); // Enemy monster has predefined level and health level = career.HitPointsPerLevelOrMonsterLevel; maxHealth = UnityEngine.Random.Range(mobileEnemy.MinHealth, mobileEnemy.MaxHealth + 1); } else if (entityType == EntityTypes.EnemyClass) { careerIndex = (int)mobileEnemy.ID - 128; career = GetClassCareerTemplate((ClassCareers)careerIndex); stats.SetFromCareer(career); // Enemy class is levelled to player and uses same health rules level = GameManager.Instance.PlayerEntity.Level; maxHealth = FormulaHelper.RollMaxHealth(level, stats.Endurance, career.HitPointsPerLevelOrMonsterLevel); // Enemy class damage is temporarily set by a fudged level multiplier // This will change once full entity setup and items are available const float damageMultiplier = 4f; mobileEnemy.MinDamage = (int)(level * damageMultiplier); mobileEnemy.MaxDamage = (int)((level + 2) * damageMultiplier); } else { career = new DFCareer(); careerIndex = -1; return; } this.mobileEnemy = mobileEnemy; this.entityType = entityType; name = career.Name; FillVitalSigns(); }
public void Reroll(DFCareer dfClass) { // Assign base stats from class template DaggerfallStats rolledStats = CharacterSheet.GetClassBaseStats(dfClass); // Roll bonus value for each base stat // Using maxBonusRoll + 1 as Unity's Random.Range(int,int) is exclusive // of maximum value and we want to be inclusive of maximum value rolledStats.Strength += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Intelligence += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Willpower += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Agility += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Endurance += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Personality += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Speed += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); rolledStats.Luck += UnityEngine.Random.Range(minBonusRoll, maxBonusRoll + 1); // Roll bonus pool for player to distribute // Using maxBonusPool + 1 for inclusive range as above int bonusPool = UnityEngine.Random.Range(minBonusPool, maxBonusPool + 1); // Apply stats to control SetStats(rolledStats, rolledStats, bonusPool); UpdateStatLabels(); // Play "rolling dice" sound DaggerfallUI.Instance.PlayOneShot(SoundClips.DiceRoll); }
// Adds button for attribute popup text // NOTE: This has only partial functionality until %vars and all formatting tokens are supported void AddAttributePopupButton(DFCareer.Stats stat, Rect rect) { Button button = DaggerfallUI.AddButton(rect, NativePanel); button.Tag = DaggerfallUnity.TextProvider.GetStatDescriptionTextID(stat); button.OnMouseClick += StatButton_OnMouseClick; }
public string GetSkillName(DFCareer.Skills skill) { switch (skill) { case DFCareer.Skills.Medical: return "Medical"; case DFCareer.Skills.Etiquette: return "Etiquette"; case DFCareer.Skills.Streetwise: return "Streetwise"; case DFCareer.Skills.Jumping: return "Jumping"; case DFCareer.Skills.Orcish: return "Orcish"; case DFCareer.Skills.Harpy: return "Harpy"; case DFCareer.Skills.Giantish: return "Giantish"; case DFCareer.Skills.Dragonish: return "Dragonish"; case DFCareer.Skills.Nymph: return "Nymph"; case DFCareer.Skills.Daedric: return "Daedric"; case DFCareer.Skills.Spriggan: return "Spriggan"; case DFCareer.Skills.Centaurian: return "Centaurian"; case DFCareer.Skills.Impish: return "Impish"; case DFCareer.Skills.Lockpicking: return "Lockpicking"; case DFCareer.Skills.Mercantile: return "Mercantile"; case DFCareer.Skills.Pickpocket: return "Pickpocket"; case DFCareer.Skills.Stealth: return "Stealth"; case DFCareer.Skills.Swimming: return "Swimming"; case DFCareer.Skills.Climbing: return "Climbing"; case DFCareer.Skills.Backstabbing: return "Backstabbing"; case DFCareer.Skills.Dodging: return "Dodging"; case DFCareer.Skills.Running: return "Running"; case DFCareer.Skills.Destruction: return "Destruction"; case DFCareer.Skills.Restoration: return "Restoration"; case DFCareer.Skills.Illusion: return "Illusion"; case DFCareer.Skills.Alteration: return "Alteration"; case DFCareer.Skills.Thaumaturgy: return "Thaumaturgy"; case DFCareer.Skills.Mysticism: return "Mysticism"; case DFCareer.Skills.ShortBlade: return "Short Blade"; case DFCareer.Skills.LongBlade: return "Long Blade"; case DFCareer.Skills.HandToHand: return "Hand To Hand"; case DFCareer.Skills.Axe: return "Axe"; case DFCareer.Skills.BluntWeapon: return "Blunt Weapon"; case DFCareer.Skills.Archery: return "Archery"; case DFCareer.Skills.CriticalStrike: return "Critical Strike"; default: return string.Empty; } }
// Creates formatting tokens for skill popups TextFile.Token[] CreateSkillTokens(DFCareer.Skills skill) { List<TextFile.Token> tokens = new List<TextFile.Token>(); TextFile.Token skillNameToken = new TextFile.Token(); skillNameToken.text = DaggerfallUnity.Instance.TextProvider.GetSkillName(skill); skillNameToken.formatting = TextFile.Formatting.Text; TextFile.Token skillValueToken = new TextFile.Token(); skillValueToken.text = string.Format("{0}%", playerEntity.Skills.GetSkillValue(skill)); skillValueToken.formatting = TextFile.Formatting.Text; DFCareer.Stats primaryStat = DaggerfallSkills.GetPrimaryStat(skill); TextFile.Token skillPrimaryStatToken = new TextFile.Token(); skillPrimaryStatToken.text = DaggerfallUnity.Instance.TextProvider.GetAbbreviatedStatName(primaryStat); skillPrimaryStatToken.formatting = TextFile.Formatting.Text; TextFile.Token spacesToken = new TextFile.Token(); spacesToken.formatting = TextFile.Formatting.Text; spacesToken.text = " "; TextFile.Token tabToken = new TextFile.Token(); tabToken.formatting = TextFile.Formatting.PositionPrefix; // Add tokens in order tokens.Add(skillNameToken); tokens.Add(tabToken); tokens.Add(tabToken); tokens.Add(skillValueToken); tokens.Add(spacesToken); tokens.Add(skillPrimaryStatToken); return tokens.ToArray(); }
public string GetStatName(DFCareer.Stats stat) { switch (stat) { case DFCareer.Stats.Strength: return "Strength"; case DFCareer.Stats.Intelligence: return "Intelligence"; case DFCareer.Stats.Willpower: return "Willpower"; case DFCareer.Stats.Agility: return "Agility"; case DFCareer.Stats.Endurance: return "Endurance"; case DFCareer.Stats.Personality: return "Personality"; case DFCareer.Stats.Speed: return "Speed"; case DFCareer.Stats.Luck: return "Luck"; default: return string.Empty; } }
void OnGUI() { if (!IsReady()) { EditorGUILayout.HelpBox("DaggerfallUnity instance not ready. Have you set your Arena2 path?", MessageType.Info); return; } // Select class source EditorGUILayout.Space(); careerSource = (CareerSource)EditorGUILayout.EnumPopup(new GUIContent("Source"), (CareerSource)careerSource); // Select class from specified source selectedCareer = null; if (careerSource == CareerSource.PlayerClasses && classNames != null && classNames.Length > 0) { if (selectedTemplate > classNames.Length) selectedTemplate = 0; selectedTemplate = EditorGUILayout.Popup(new GUIContent("Class"), selectedTemplate, classNames); selectedCareer = classTemplates[selectedTemplate]; } else if (careerSource == CareerSource.Monsters && monsterNames != null && monsterNames.Length > 0) { if (selectedTemplate > monsterNames.Length) selectedTemplate = 0; selectedTemplate = EditorGUILayout.Popup(new GUIContent("Class"), selectedTemplate, monsterNames); selectedCareer = monsterTemplates[selectedTemplate]; } else { return; } // Show foldouts if (selectedCareer != null) { scrollPos = GUILayoutHelper.ScrollView(scrollPos, () => { ShowAdvancementGUI(); ShowAttributesGUI(); ShowSecondaryAttributesGUI(); ShowSkillsGUI(); ShowTolerancesGUI(); ShowProficienciesGUI(); ShowForbiddenMaterialsGUI(); ShowForbiddenArmorGUI(); ShowForbiddenShieldsGUI(); ShowMagickaGUI(); ShowMiscellaneousGUI(); //ShowUnknownGUI(); }); } }