General Ideas about Attributes

Talk about the mods you'd like to see in Daggerfall Unity. Give mod creators some ideas!
Post Reply
User avatar
NikitaTheTanner
Posts: 366
Joined: Sun Oct 18, 2015 7:57 pm

General Ideas about Attributes

Post by NikitaTheTanner »

It might be a bit random, right now I am very much interested in graphic mods, but I am also thinking a lot about balance and RPG elements of the game. Daggerfall had many cool features and ideas, but sadly, many of them are either broken or unfinished.

I love Attributes: Strength, Intelligence, Willpower, Endurance, Agility, Speed, Personality, Luck. They give a better sense of identity to your character, unlike Skyrim's "Health, Magicka, Stamina" system (although, this one is quite functional). But I think that every single TES game got Attributes wrong.

Thankfully, Daggerfall didn't have Morrowind's and Oblivion's modificator bonuses at level up. They were an interesting idea, but often punished players more than rewarded and almost forced you to min-max your skills to achieve best modifiers.

But Daggerfall also faces another major TES problem: it's easy to be good at everything. I find it rather sad, that in most playthrougs you will play a combination of warrior-mage-thief, unless you really try to limit your playstyle by role-playing specific character. It has many reasons, primarily the fact that you can easily master everything in the game with one character.

That's where Attributes come into play. In Vanilla game, you start with your Attributes very high, almost half-way to the finish. It doesn't take too much time to get most Attributes to the top. And that's where I think is the problem:

The game assumes that Attributes follow the same pattern as, for example, Fallout's S.P.E.C.I.A.L., where 1 is extremely low talent, 5 is average and 10 is genius, but unlike Fallout, you can easily improve your Attributes and that breaks the system. You start being average and end up badass, and almost never touch lower levels of Attributes (unless diseased or something). I don't think it's a great system.

So I think there are two ways to handle Attributes differently:

1) Fallout way - select your Attributes once, during character creation

You start with your attributes pretty high and can distribute them in any way you like, even be genius at things, while bad at other things, but you won't be able to improve your Attributes at level up. It makes your Attributes almost set in stone and part of your character, with some possible exceptions.

2) Souls way - much lower starting Attributes, better bonuses for mastering an Attribute

You start with your attributes much lower than you usually do, though base Stats are raised, so you are not a complete wimp. You improve Attributes on level up and get MUCH better as they get higher, but you can't be good at everything and have to carefully choose what to level up. You can still be a jack of all trades, but you will be a master of none in this case.

------

What do you guys think? Do you agree with me or do you think that TES system has some overlooked good sides, that I missed? And if you agree, what system would you prefer to see in mods for Daggerfall Unity?

Of course, there are more things to consider about Attributes, especially their effects. Should Willpower restore Magicka in real-time? Should Health depend on Endurance? How can Personality be made more useful? How can Intelligence be more interesting? What should Agility do? You can write your thoughts if you want to discuss it, too! 8-)

But the main interest for me right now is the system itself, details can be ironed out later.

Narf the Mouse
Posts: 833
Joined: Mon Nov 30, 2015 6:32 pm

Re: General Ideas about Attributes

Post by Narf the Mouse »

For Morrowind and Oblivion, I look for the mod that makes your attributes depend on your skills. So increase your skills, and you increase your attributes.

I like that sort of natural increase. :)
Previous experience tells me it's very easy to misunderstand the tone, intent, or meaning of what I've posted. If you have questions, ask.

User avatar
Jay_H
Posts: 4062
Joined: Tue Aug 25, 2015 1:54 am
Contact:

Re: General Ideas about Attributes

Post by Jay_H »

Narf the Mouse wrote:For Morrowind and Oblivion, I look for the mod that makes your attributes depend on your skills. So increase your skills, and you increase your attributes.

I like that sort of natural increase. :)
You mean Galsiah? I can't play Morrowind without Galsiah. It takes out the micro-management and just lets me play how I want.

Another possibility is using Mount and Blade's method. You start with like 80 weapon skill, but 100 isn't the max; a really good character will get up to like 400 skill. In other words, if we continue increasing the content limit so there are more and more challenges ahead, a character's overwhelming power will actually be necessary to make it to the end.

Narf the Mouse
Posts: 833
Joined: Mon Nov 30, 2015 6:32 pm

Re: General Ideas about Attributes

Post by Narf the Mouse »

Jay_H wrote:
Narf the Mouse wrote:For Morrowind and Oblivion, I look for the mod that makes your attributes depend on your skills. So increase your skills, and you increase your attributes.

I like that sort of natural increase. :)
You mean Galsiah? I can't play Morrowind without Galsiah. It takes out the micro-management and just lets me play how I want.

Another possibility is using Mount and Blade's method. You start with like 80 weapon skill, but 100 isn't the max; a really good character will get up to like 400 skill. In other words, if we continue increasing the content limit so there are more and more challenges ahead, a character's overwhelming power will actually be necessary to make it to the end.
Yeah, that's the one I use for Morrowind. I think the one for Oblivion is "Realistic Levelling", but I'm not sure.
Previous experience tells me it's very easy to misunderstand the tone, intent, or meaning of what I've posted. If you have questions, ask.

Narf the Mouse
Posts: 833
Joined: Mon Nov 30, 2015 6:32 pm

Re: General Ideas about Attributes

Post by Narf the Mouse »

I wrote some code to base attributes off of skills; it generally starts you off in the low 20s to low 40s, and a broader spread of skills seems to give higher attributes, based on some brief testing.

Anyway, I'm posting the class here; feel free to C&C. It needs some way to hook into PlayerEntity updates (DaggerfallEntity updates? Do monsters have skills?), and doesn't take racial bonuses into account.

I hardcoded a call to it in the character sheet window to test it, but really, it should probably be called about 1/second from a script.

Also, the stat/skill modifiers should be loaded from a file, not hardcoded, but that's a future thing. It also has an unsuccessful attempt to "dynamically" adjust max health.

I should also put the stat-skill modifiers into a struct with primary, secondary, tertairy and misc values, but I wasn't sure how many stats each skill would affect. It turns out, primary/secondary/tertairy/misc works out well for most. :)

If you don't want to look at a long list of stat-skill modifiers, jump down to the bottom; that's where the actual calcs happen.
Spoiler!

Code: Select all

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DaggerfallConnect;
using DaggerfallWorkshop.Game.Entity;

public class NaturalStats
{
    private static readonly Dictionary<DFCareer.Skills, Dictionary<DFCareer.Stats, int>> adjustments2 =
        new Dictionary<DFCareer.Skills, Dictionary<DFCareer.Stats, int>>();

    private const int integerMultPrimary = 40;
    private const int integerMultSecondary = 20;
    private const int integerMultTertairy = 10;
    private const int integerMultMisc = 5;

    static NaturalStats()
    {
        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Personality, integerMultTertairy);
            temp.Add(DFCareer.Stats.Endurance, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Alteration, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Agility, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Archery, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Speed, integerMultPrimary);
            temp.Add(DFCareer.Stats.Strength, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Endurance, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Axe, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Strength, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Backstabbing, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Endurance, integerMultSecondary);
            temp.Add(DFCareer.Stats.Speed, integerMultTertairy);
            temp.Add(DFCareer.Stats.Agility, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.BluntWeapon, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Willpower, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Centaurian, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Agility, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Climbing, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Strength, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.CriticalStrike, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Personality, integerMultSecondary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Daedric, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Strength, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Destruction, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Intelligence, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Dodging, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Personality, integerMultSecondary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultTertairy);
            temp.Add(DFCareer.Stats.Strength, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Dragonish, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Agility, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Strength, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Etiquette, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Personality, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Giantish, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Speed, integerMultPrimary);
            temp.Add(DFCareer.Stats.Strength, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.HandToHand, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Harpy, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Willpower, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Illusion, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Willpower, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Impish, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Jumping, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Speed, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Lockpicking, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Strength, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.LongBlade, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Personality, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Medical, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Willpower, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Mercantile, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Speed, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Mysticism, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Nymph, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Willpower, integerMultSecondary);
            temp.Add(DFCareer.Stats.Strength, integerMultTertairy);
            temp.Add(DFCareer.Stats.Endurance, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Orcish, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Luck, integerMultSecondary);
            temp.Add(DFCareer.Stats.Speed, integerMultTertairy);
            temp.Add(DFCareer.Stats.Personality, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Pickpocket, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Personality, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Restoration, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Speed, integerMultPrimary);
            temp.Add(DFCareer.Stats.Endurance, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Strength, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Running, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Speed, integerMultPrimary);
            temp.Add(DFCareer.Stats.Agility, integerMultSecondary);
            temp.Add(DFCareer.Stats.Luck, integerMultTertairy);
            temp.Add(DFCareer.Stats.Endurance, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.ShortBlade, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Strength, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Spriggan, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Agility, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Endurance, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Stealth, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Personality, integerMultPrimary);
            temp.Add(DFCareer.Stats.Speed, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Streetwise, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Strength, integerMultPrimary);
            temp.Add(DFCareer.Stats.Endurance, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Luck, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Swimming, temp);
        }

        {
            Dictionary<DFCareer.Stats, int> temp =
                new Dictionary<DFCareer.Stats, int>();

            temp.Add(DFCareer.Stats.Willpower, integerMultPrimary);
            temp.Add(DFCareer.Stats.Intelligence, integerMultSecondary);
            temp.Add(DFCareer.Stats.Agility, integerMultTertairy);
            temp.Add(DFCareer.Stats.Endurance, integerMultMisc);

            adjustments2.Add(DFCareer.Skills.Thaumaturgy, temp);
        }
    }

    public void Adjust(DaggerfallEntity entity)
    {
        var skills = entity.Skills;
        var stats = entity.Stats;
        var statDivisors = new DaggerfallStats();

        for (int i = 0; i < DaggerfallStats.Count; ++i)
        {
            stats.SetStatValue((DFCareer.Stats)i, 0);
        }

        foreach (var skillStatAdjustments in adjustments2)
        {
            int skillValue =
                skills.GetSkillValue(skillStatAdjustments.Key);
            int skillValueSqrt =
                Mathf.RoundToInt(Mathf.Sqrt(skillValue / 100f) * 100f);
            int skillValueExp =
                skillValueSqrt;
            foreach (var statAdjustments in skillStatAdjustments.Value)
            {
                stats.SetStatValue(
                    statAdjustments.Key,
                    stats.GetStatValue(statAdjustments.Key) +
                    (skillValueExp * statAdjustments.Value)
                    );
                statDivisors.SetStatValue(
                    statAdjustments.Key,
                    statDivisors.GetStatValue(statAdjustments.Key) +
                    statAdjustments.Value
                    );
            }
        }

        for (int i = 0; i < DaggerfallStats.Count; ++i)
        {
            stats.SetStatValue(
                (DFCareer.Stats)i,
                stats.GetStatValue((DFCareer.Stats)i) /
                statDivisors.GetStatValue((DFCareer.Stats)i)
                );
        }
        
        // !!Does not work!!
        // Health decreases to 0 when resting.
        // Character dies at end of rest.
        // 
        /* entity.MaxHealth =
            Mathf.Max(
                entity.Level,
                (
                (entity.Career.HitPointsPerLevelOrMonsterLevel / 2) +
                ((stats.GetStatValue(DFCareer.Stats.Endurance) / 10) - 5)
                ) *
                entity.Level
            );
        if (entity.CurrentHealth > entity.MaxHealth)
            entity.CurrentHealth = entity.MaxHealth; */

        entity.Stats = stats;
    }
}
Previous experience tells me it's very easy to misunderstand the tone, intent, or meaning of what I've posted. If you have questions, ask.

Post Reply