Jump to content

Recommended Posts

AAF Informer (Beta)

View File

AAF Informer is the F4SE plugin to simplify obtaining of AAF scenes information in Papyrus scripts.

 

 

AAF Informer consist of 3 parts:

 - AAFInformer.dll - F4SE plugin

 - AAFCollector.exe - service executable to parse AAF XML files

 - Info.pex/Info.psc - Papyrus script to access AAFInformer.dll API

 

How it works:

 

At the game start up AAFCollector.exe is started to parse AAF XML files. When it finishes all collected information memorised in F4SE plugin and later this information can be accessed via API calls from Papyrus script.

 

Following information is available:

 - For scenes (actually, positions in AAF terminology) that you can see in AAF UI - see SceneInfo structure in Info.psc

 - For scene participant(s) - see ActorInfo in Info.psc

 

Most information is obtained from tags defined by animation authors or by themes. Themes are essential to get information from AAF scenes. Without themes installed, most likely your script will not receive usefull information.

Tags that defines types of actors (like F_F or F_M) are ignored. Actor types retrieved from animation definitions.

Tags that defines furniture are ignored. Furniture information retrived from positionData XMLs

 

 

Note: animation author's XML files and themes XML files contains a lot of mistakes. Fixing them is out of scope of this tool, but I hope all mistakes will be elimenated sooner or later.

To simplify mistakes detection usefull logs could be found in %userprofile%\documents\My Games\Fallout4\F4SE\AAFInformer.log

Also this log contains error messages generated by AAFCollector.exe

 

 

Implementation details:

 

What tags are supported? All tags falls into several categories:

 

 

How values are applied to actors?

 

Spoiler

 

The tags systems to define actor's values like stimulation level or held level seems novice. So some assumptions are made to calculate final values for actors

Also tag system to define contact between actors is very scarce and much more assumptions are used.

Calculation details could be found in processor

 

 

Example of script

 

Spoiler

 

function PrintActorInfo(AAF:Info:ActorInfo ai)
    if !ai
        Debug.Notification("No actor info")
        return
    endif
    string report = "" + ai.Index + ". " + ai.Participant.GetDisplayName() + " (" + ai.Type +"): "
    if ai.IsAggressor
        report += "/Aggr"
    endif
    if ai.IsVictim
        report += "/Vict"
    endif

    if ai.IsHandGiver
        report += "/HG:" + ai.IsHandGiver
    endif
    if ai.IsHandTaker
        report += "/HT:" + ai.IsHandTaker
    endif
    if ai.IsLegGiver
        report += "/LG:" + ai.IsLegGiver
    endif
    if ai.IsLegTaker
        report += "/LT:" + ai.IsLegTaker
    endif
    if ai.IsOralGiver
        report += "/OG:" + ai.IsOralGiver
    endif
    if ai.IsOralTaker
        report += "/OT:" + ai.IsOralTaker
    endif
    if ai.IsGenitalTaker
        report += "/GT:" + ai.IsGenitalTaker
    endif
    if ai.IsGenitalGiver
        report += "/GG:" + ai.IsGenitalGiver
    endif

    if ai.IsAnalTaker
        report += "/AT:" + ai.IsAnalTaker
    endif
    if ai.IsButtTaker
        report += "/BT:" + ai.IsButtTaker
    endif
    if ai.IsNippleTaker
        report += "/NT:" + ai.IsNippleTaker
    endif
    if ai.IsOtherGiver
        report += "/OtG:" + ai.IsOtherGiver
    endif

    report += ", Held=" + ai.HeldLevel + ", Stim=" + ai.StimLevel + ", Love=" + ai.LoveLevel + ", Dom=" + ai.DomLevel
    Debug.Notification(report)
endfunction

function PrintActorsInfo(AAF:Info:ActorInfo[] ais)
    if !ais
        Debug.Notification("No data")
        return
    endif
    int i = 0
    while i < ais.Length
        PrintActorInfo(ais[i])
        i += 1
    endwhile
endfunction

function Report(var[] args)
    Actor[] actors = Utility.VarToVarArray(args[1]) as Actor[]
    AAF:Info:ActorInfo[] ais = new AAF:Info:ActorInfo[actors.Length]
    int i =0
    while i < ais.Length
        ais[i] = new AAF:Info:ActorInfo
        i += 1
    endwhile
    AAF:Info:SceneInfo s = AAF:Info.GetSceneAndActors(args[2] as string, actors, ais)
    Debug.Notification("[" + s.Name + "] by [" + s.Author + "] started! " + " Furn="+s.FurnGroup)
    PrintActorsInfo(ais)
endfunction

Event AAF:AAF_API.OnAnimationStart(AAF:AAF_API sender, var[] args)
    if args[0] as int == 0
        Report(args)
    else
        Debug.Notification("Failed to start AAF scene")
    endif
Endevent

Event AAF:AAF_API.OnAnimationChange(AAF:AAF_API sender, var[] args)
    if args[0] as int == 0
        Report(args)
    endif
Endevent

 

 

 

Known issues:

1. Some positions contains location attribute that has multiple furniture groups separated by comma. Such locations are handled, but I can't test it as such position does not appear AAF UI. Probably defining multiple furniture groups is invalid location definition, but without original AAF source code it hard to say definitely.

2. I had no chances to test AAF sex overriding with keywords. So not sure is it even working.

3. With current system of tags it is not possible to recognize how actors are contacted with each other, so all contacts for actors with index greater than 0 are applied to actor with index 0. So scenes like "BP70 Lesbian Threesome..." might have irrelevant contact information. See below.

 

 

Next steps:

- try to introduce new tags system to allow definition of actors contacts exacly. This plugin will be updated on succees.

- try to introduce new tags system to allow definition of Held/Love/Dom/Stim values for each actor. This plugin will be updated on succees.

- try to introduce new tags system to allow definition of actor position for actors with index greater than 0. This plugin will be updated on succees.

 

 

New system to define contacts beween actors in scenes.

Spoiler

It is a problem to understand how actors are contacted in scene when tag for it is defined like HandToMouth or PenisToEither in case where more than 2 actors participate in scene.

 

To solve this problem new format of contacts definitions is introduced. The base is same, as introduced in AAF Themes, but extra data is necessary to difine actors that related to the contact definition.

 

An example of tag: PenisToEither:1-0

1-0 is the definition of contact direction. From actor with index 1 to actor with index 0. So actor 1 uses Penis to contact with actor 0, and actor 0 is contacted by Either (Genital+Anal)

This tag works exactly as PenisToEither when 2 actors are defined for scene where actor 0 is receiver, and actor 1 is giver. But it can be used for scenes with more than 2 actors.

 

More complex example: 

<tag position="BP70 Lesbian Threesome 6" animation="rxl_bp70_lesbianthreesome06" tags="BP70,F_F_F,NoFurn,Cunnilingus,FromFront,Neutral,Climax,Held1,Love5,Stim3,Dom3,MouthToVagina:1-0,MouthToVagina:2-1,MouthToVagina:0-2"/>


3 tags defines 3 contacts between 3 actors - MouthToVagina:1-0,MouthToVagina:2-1,MouthToVagina:0-2

In this case it is not a problem to understand how actors contacted with other.

 

Additional benefit- tags like TongueToAnus can be correctly supported.

Usually, actor 0 is the victim in agressive scenes. And tags like PenisToAnus should means that agreessor (actor 1) uses Penis, and victim (actor 0) - Anus. I.e. direction is defined from agressor to victim. And this is ok for most of contacts definitions. But for TongueToAnus direction should be defined from victim to agressor. It can be solved by changing order of actors in scene definition, but this will mean that actor 0 should not be treated as victim.

New system allows to define correct direction by TongueToAnus:0-1. I.e, from actor 0 (victim, Tongue) to actor 1 (agressor, Anus) but keep actor 0 as a victim without scenes alteration.

 

Also, it is not a problem to define contact from actor to the same actor. Like HandToStick:0-0 or HandToFeet:5-5

 

 

 

Feel free to request new features.

 

 

 


 

Edited by Dlinny_Lag
Link to comment
  • Dlinny_Lag changed the title to AAF Informer (Beta)
  • 6 months later...
5 hours ago, RawThunderHustle said:

I downloaded it but it's not showing in my download folder

There are multiple options

 - File downloaded to another folder. Try to open folder from browser immediately after downloading and search for the file

 - File downloading was interrupted due to network failure. Try to download it once again

 - File downloading interrupted by antivirus software or downloaded file removed by antivirus software. Exact steps depends on your antivirus software. Try to instruct your antivirus software to allow file downloading and saving

 - File actually downloaded but you just overlooked it. Try to sort files in folder by date or try to search file by name

Link to comment
  • 4 weeks later...

Tried this but get this error in AAFInformer.log:

Executing "E:\Steam\steamapps\common\Fallout 4\Data\F4SE\Plugins\AAFCollector.exe" "C:\Users\USERNAME\Documents\My Games\Fallout4\F4SE\__AAF_XML_DATA.bin"
C:\Users\USERNAME\Documents\My Games\Fallout4\F4SE\__AAF_XML_DATA.bin failed with error -1073741571.
Done

 

-- UPDATE --

Ran AAFCollector.exe as Admin. Got a different error:

Failed to execute XML Collector with error = 740

 

Edited by krlll
Link to comment
4 hours ago, krlll said:
failed with error -1073741571.

Stack overflow error.

If you could compress to zip your E:\Steam\steamapps\common\Fallout 4\Data\AAF\ folder and share it then I will have a chance to investigate the problem.

 

4 hours ago, krlll said:
Failed to execute XML Collector with error = 740

You shouldn't run it as Administrator. Please revert back compatibility settings.

Link to comment
  • 7 months later...

I made a mod that applies SAM adjustments to AAF animations. It uses SAMFormer. I make adjustments, add tags to positiondata.xml and then SAMFormer automatically applies the adjustments to animations when they play. The SAMFormer tags look something like this: "SF:F=female adjustment:M=male adjustment"

One user told me that our mods appear to conflict, he wrote that he gets CTD even before fallout is launched if both are enabled. Could it be because of this different kind of tag format?

Link to comment
2 hours ago, ookkerpak said:

he wrote that he gets CTD even before fallout is launched if both are enabled. Could it be because of this different kind of tag format?

Thanks a lot for notice. I will investigate.

I saw your mod, just had no time to try it.

Edited by Dlinny_Lag
Link to comment
  • 1 month later...
  • 9 months later...
1 hour ago, LynErso666 said:

but what exactly is this for? 

It is my first attempt to introduce the "custom" attributes (not just tags) for animations.

This mod analyses tags associated with AAF's positions (tags are defined in AAF related XML files) and generates some meaningful values (custom attributes) available for the Papyrus scripts. I use this mod in my LiP Framework to simplify AAF integration.

 

Currently I'm working on much more comprehensive solution to attach "metadata" to AAF/NAF positions (animation scenes) and the new solution will supersede this mod. So this mod will be a subject of deprecation soon.

 

Edited by Dlinny_Lag
Link to comment
9 minutes ago, Dlinny_Lag said:

It is my first attempt to allow definition of the "custom" attributes (not just tags) for animations.

This mod analyses tags associated with AAF's positions (tags are defined in AAF related XML files) and generates some meaningful values (custom attributes) available for the Papyrus scripts. I use this mod in my LiP Framework to simplify AAF integration.

 

Currently I'm working on much more comprehensive solution to attach "metadata" to AAF/NAF positions (animation scenes) and the new solution will supersede this mod. So this mod will be a subject of deprecation soon.

 


Ohhhh wow, so wait a minute, does this mean animation packs whose tags are a mess will still be read fine with AAF using this new advancement?

Link to comment
27 minutes ago, LynErso666 said:

Ohhhh wow, so wait a minute, does this mean animation packs whose tags are a mess will still be read fine with AAF using this new advancement?

This mod doesn't alter any AAF functionality. So, XML "files reading" remain untouched.

This mod just adds a new option to get information from existing XML files in a more structured way.

Edited by Dlinny_Lag
Link to comment
38 minutes ago, Dlinny_Lag said:

This mod doesn't alter any AAF functionality. So, XML "files reading" remain untouched.

This mod just adds a new option to get information from existing XML files in a more structured way.


Ohhh that IS awesome! Thank you so much for your work, Dlinny_Lag!

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more information, see our Privacy Policy & Terms of Use