Fallout 4
0 of 0

File information

Last updated

Original upload

Created by

Dlinny_Lag

Uploaded by

DlinnyLag

Virus scan

Safe to use

16 comments

  1. ID8879488948574
    ID8879488948574
    • premium
    • 16 kudos
    Wish list:

    - Protected attributes: they can only be changed via an API call and any other source changes aka console will be ignored
    - Dependent attributes: it's when one attribute is not something that's defined independently, but rather depends on other attributes via some formula. It is totally doable even with current setup (especially because you have events for the changes), but having it in F4SE would make it much more performant if applied on many actors
    - Gated attributes: the attribute has it's minimum and maximum and cannot go out of those bounds. Again, doable with scripting, but see the previous point (besides, it would be just nice to not have to do it every time on my own)
    - String attributes: speaks for itself. Unlikely to happen, but as I have no experience with F4SE - who knows.

    So far looks promising!
    1. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      Protected attributes - it will require intervention to existing Creation Engine behavior. Impact is unpredictable at this moment. I don't think it worth the time.
      Dependent attributes - surprisingly, but Creation Engine has some kind of this functionality, but I have no idea how it works and whether it working. See how attribute class is defined. More over, implementation of dependent attributes (aka reactivity) is the not a simple task. I know what I'm talking about - I've designed and implemented such system in some past project. Most complex problem - cyclic dependency. And most likely it will not be possible to intervene to Creation Engine workflow and change it in correct way to implement this thing. I will not even try to do this. Not with Creation Engine, especially when I haven't source codes %)
      Gated attributes - actually you have it. AA limits attributes changes between 0 and base value. 0 is harcoded, base value, or max value is defined during attribute registration. AA will not allow to set value below 0 and higher than base value. On such attempts value will be cropped and exceed argument in notifications will be non zero. (description updated)
      String attributes - interesting idea, thanks. Maybe some work around could be found until it is not implemented. I guess something usefull could be done with LinkedRefs. UPD: I intend to introduce string attributes, seems easy.
    2. ID8879488948574
      ID8879488948574
      • premium
      • 16 kudos
      To be clear - all of the stuff above, apart from the string attributes, I managed to do - but it's scripting and when applied to many actors it's just slow and not something one would want to have in their save

      For dependent attributes - I never used CK so I have no idea what it provides. Also it's unclear how one would define such dependency.
      Gated attributes - I know there are flags for attributes I can use in FO4Edit, like "Maximum 1" / "Maximum 10" / "Maximum 100", but it's not usable all the times. And if I need something of a different scale, primarily symmetric intervals (like -100 / 100) then that won't work as well as what you mentioned for AA.

      I want to emphasise - that there is a way to do it, it's just that it'd be much better to do it outside of scripting. Take for instance the 0..base value you mentioned. If I want to have an arbitrary [-limit .. +limit] interval then I can of course remap it and recalculate on the fly, it's a matter of simple geometric projection of one closed interval onto another, but I'd have to do it in the Papyrus which I hope to avoid in the first place.

      P.S. String attributes would be so, so cool!
    3. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
       if I need something of a different scale
      You can always map some predefined interval to other interval you want with the simple arithmetic operations. And more - you can interpret values in the the way you want, just convert values before they displayed for user. It will not have noticable impact on performance -  most likely displaying will take much more time than your arithmetics  %). This possiblity was assumed when AA was designed. 
      The reason of defining lower bound as hardcoded value - I want something to recover erroneous situation at no performance cost. It is possible that someone changed AV directly (yes, I remember your wish no 1), so I have to recover this situation to avoid subscribers confusion if they tracking changes. If I will try to use user defined MIN value, then I will need to read it each time within critical section.
      Probably I worry to much and it will not have any noticable impact on performance when lower bound will be defined by user.

      Anyway, thanks a lot for your questions. Now I see some problems in my implementation of erroneouse situation recovering. Most likely you will have [-x, +y] intervals as the result of fix %)
    4. ID8879488948574
      ID8879488948574
      • premium
      • 16 kudos
      Yes, I can remap, just as I've pointed above - it's just I'd then need to do it in some Papyrus method, i.e. the Zenimax Papyrus VM needs to kick in and process the whole thing, no matter how simple it is. That takes time, progressively worse as the amount of such attributes grows + the amount of actors grows.

      I'm arguing that if there's a way to do so in-game engine (not Papyrus) - say, as F4SE extension, then it'd be much, much more valuable. If AA doesn't provide such an extension - then it's unfortunately not much more than a pretty wrapper for Papyrus calls - maybe even elegant, but not performant. But please correct me here - if I've read the description correctly, AA implements stuff in F4SE plugin, i.e. exactly how I hope it to be, meaning that implementing the gated attributes in the F4SE extension as opposed to Papyrus remapping brings a lot of value.

      So, TR:DR - allowing for F4SE way of supporting arbitrary min..max will bring a lot of value in my humble opinion.
    5. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      allowing for F4SE way of supporting arbitrary min..max will bring a lot of value
      Done. In 0.5.3 you can define min and max values for managed attributes. AA will not allow to set values below min and above max
      Checks performed in native code, i.e. within F4SE plugin
    6. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      String attributes would be so, so cool!
      Check version 0.5.4
    7. ID8879488948574
      ID8879488948574
      • premium
      • 16 kudos
      Yey, that's so great you included them both. One question here - what is the esm for?

      - Is it absolutely necessary?
      - If not and I want to use AA - is it possible/allowed to merge the contents of it into my plugin? What is your distribution policy here?

      I'd really like to avoid hard dependencies if possible.
    8. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      - Is it absolutely necessary?
      I think, yes. It contains a couple of Quests that used to support Papyrus API script and specific MagicEffect that allows time-based changes on Actors. And some other service data.
      Actually, you are able to use F4SE plugin only, but it is designed to work together with scripts defined in ESM. I've not tested plugin without ESM, so I can't guarantee correct work. And I can't garantee that in future F4SE plugin will not have hard dependency on ESM content.

      - If not and I want to use AA - is it possible/allowed to merge the contents of it into my plugin? What is your distribution policy here?
      On the description page you can found a line
      You are allowed to use the assets in this file without permission or crediting me

      So you are premitted to use it as you want, except profit purposes. Just be aware about further fixes and changes. It is still in alpha stage.

      I'd really like to avoid hard dependencies if possible.
      I guess you can use soft dependency on AA.esm and scripts.
      You can check AA.dll plugin installation by checking its version - just call AA:Plugin.GetVersionInt() - it will be not 0 if AA.dll is in place.
      Additionally you could check that AA.ESM is installed - try to access AA:API script. If it is not None then you could call its methods. If you need examples of code how to implement soft dependecy, I could help.
      But you can't use time-based features without hard dependency. You will need scripts derived from AA:IActorFilter and or AA:ICalculator
      But there there is no limitiations to prepare couple of esp/esl/esm (with and without hard dependency) that could be installed separately. For example, your main esm has soft dependency only and optional second esp/esl - hard dependency with AA:IActorFilter and or AA:ICalculator implementations.
    9. ID8879488948574
      ID8879488948574
      • premium
      • 16 kudos
      Yes, for me the biggest boon are gated attributes and string attributes - that alone makes me want to use the mod. If not having the plugin will still let me use those - I'm more than happy. In that regard, you might think of shipping a "limited" version that includes "everything that works with only installing F4SE plugin". I'm pretty sure a lot of modders would appreciate that.

      Also, will the events work without the ESM? (i.e. changing the attribute and whatnot)

      P.S. I'm not an expert on F4SE at all, but seeing you used linked lists to implement strings .. maybe.. perhaps maybe you can do the same for arbitrary collections of primitives (excluding strings of course as that is already a collection in itself) ? :p That would be insanely powerful.
    10. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      Also, will the events work without the ESM? (i.e. changing the attribute and whatnot)
      Events - yes. But ultimately you have to call AA:Internal.__Increase/__Decrease to trigger notifications. ESM initilizes Papyrus script AA:API that wraps calls of functions above to ensure that logic and arguments will be valid. You could call internal functions above on your own risk.

      perhaps maybe you can do the same for arbitrary collections of primitives

      I intend to add support of dictionaries associated with Actor. I'm still thinking about how to this better. But main feature - usage of Form object as the key in dictionary and array of something - as value.

      you might think of shipping a "limited" version
      I will, thanks for suggestion
    11. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      Also, will the events work without the ESM? (i.e. changing the attribute and whatnot)
      Now you can use native Get/Increase/Decrease methods as a part of official API
      Just ensure you use AA:AV.Get instead of ObjectReference.GetValue for registered attributes.
      I hope it is what you expected.

      And some warning - string attributes will be moved to another plugin
    12. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      String attributes functionality moved to F4DS
    13. DlinnyLag
      DlinnyLag
      • member
      • 12 kudos
      String Attributes functionality moved from F4DS to its own mod 
  2. ImmortalAbsol
    ImmortalAbsol
    • premium
    • 32 kudos
    Oh if only all robots had the moddable attribute and their default parts were playable.
  3. YouDoNotKnowMyName
    YouDoNotKnowMyName
    • member
    • 5 kudos
    Wohoooo!!!
    This is EXACTLY what I will need for a project that I have planned!