Blender add-on
Thanks to the Blender Foundation for Blender, the software carrying the modding scene
FASTER - BETTER - SIMPLER
Way more control, a lot more customizable, much less prone to error, tremendously less work
This add-on allows the import of annotation presets, the export of annotations, the export of AMR motion/rotation datas and comes with a keyframe based system. Annotations and variables are controlled with the same system as for animation. You tweak them directly in Blender per animation
Complex annotation schemes like Precision or Payload Interpreter become trivial with this add-on
You can tweak the values directly in Blender on a per animation basis
Using a preset
Creating a preset
-
Edit / Preferences / Add-ons/ Install
You now have a panel called “SkyrimGuild Annotations add-on” in the new “Skyrim” tab
-
Specific steps for v0.1 :
Rename your armature “Armature”
Go to pose mode
Click on “Import preset”
Install your preset
-
Select your bone in pose mode
Save a keyframe for the location
Adjust values :
Go to the bone tab
Scroll down to “custom properties”
Change the relevant custom properties values and keyframe them
If the value is equal to -1 when a location keyframe is detected, it won’t be written in the annotation
If at frame 20 there is a custom property with value 5
If there is with a location keyframe but no custom property is not keyframe
The custom property will still be written in the annotation
-
Go to Object mode
Select your armature
Add keyframes for your motion and rotation
If the motion doesn’t match in Skyrim, tweak the “Motion factor” in the add-on panel
As examples I used for my personnal rigs :$
13.3 for humans
1.33 in another human rig
133 for the dragons
5ish for the wolves
It seems using multiples of 1.33 works well
-
Click on export preset
You should have a file called “thenameofyouraction.txt” in the same folder as the Blender file
If Blender says you don’t have permission:
save the file
Open the blend file directly in the windows explorer instead of opening Blender and then opening your file from there
-
The presets use a standard JSON format
You can find the format with examples belows
The examples act as a tutorial. The complecity grows as you advance in the examples
You can also study the human attack animation preset. The precision annotations in there are quite complex
Initialise all the values to -1 or -1.0
-
“yourbonename” : ““
“PIE.@SGVF|MCO_AttackSpeed|1.2” : ””
0.0 PIE.@SGVF|MCO_AttackSpeed|1.2
-
“yourbonename” : {“yourvariable” : yourvalue”}
Values are initialized at -1.0 and not -1
“PIE.@SGVF|MCO_AttackSpeed|” : { ”Attack Speed” : 1.0 }
0.0 PIE.@SGVF|MCO_AttackSpeed|value
-
“yourbonename” : {“yourvariable” : yourvalue”}
The values are initialized at -1 and not -1.0
“PIE.@SGVF|MCO_AttackSpeed|” : { ”Attack Speed” : “-1” }
0.0 PIE.@SGVF|MCO_AttackSpeed|value
-
“yourbonename” : {“yourvariable()” : yourvalue”}
“Collision_Add.Node(WEAPON)|” : { ”Damagemult( )” : 1.0 }
0.0 Collision_Add.Node(WEAPON)|DamageMult(value)
-
“yourbonename” : {“yourvariable()” : yourvalue”}
It is possible to have an array without writing the values in parenthesis, I just don’t see why it would happen so I didn’t make it an example
“Collision_Add.Node(WEAPON)|” : { ”Rotation( )” : [-1.0,-1.0,-1.0] }
0.0 Collision_Add.Node(WEAPON)|Rotation( value,value,value)
-
“yourbonename” : {“yourvariable(string)” : yourvalue}
Only the string is written. The value decides if the string is written or not
“Collision_Add.Node(WEAPON)|” : { ”NoTrail(string)” : “-1” }
0.0 Collision_Add.Node(WEAPON)|NoTrail
-
“yourbonename”: {“Annotation” : “youreventname”}
“Next attack” : {“Annotation”:”AttackWinEnd”}
0.0 AttackWinEnd
-
“yourbonename” : {
“Separator”:”yourseparator”,
“yourvariable1” : yourvalue1,
“yourvariable2” : yourvalue2}”Collision_Add.Node(WEAPON)”:
“Separator”:”|”,
“DamageMult()” :-1.0,
”ID()” : -1 }0.0 Collision_Add.Node(WEAPON)|DamageMult(value)|ID(value)
-
“yourbonename”: {”Aliases”:[“youralias1”, “youralias2”]}
“Transition to normal and power attack” :{
“Aliases”:[“MCOAttackWinOpen”,[”MCO_PowerWinOpen”]
}0.0 MCO_WinOpen
0.0 MCO_PowerWinOpen
-
“yourbonename”: {
“Annotation” : “youreventname”,
”Aliases()”:[“youralias1”, “youralias2”}“Transition to normal and power attack” : {“Annotation()”:”Collision_Add.Node”,
“Aliases”:[“NPC L Thigh [LThg]”,[”NPC L Calf [LClf]”, “NPC L Foot [Lft ]”] }0.0 Collision_AddNode(NPC L Thigh [LThg])
0.0 Collision_AddNode(NPC L Calf [LClf])
0.0 Collision_AddNode(NPC L Foot [Lft ])
-
“L.Leg Hitframes”:
{
"Annotation()":"Collison_Add.Node",
"Aliases":["NPC L Thigh [LThg]","NPC L Calf [LClf]","NPC L Foot [Lft ]"],
"Separator":"|",
"ID()":-1,
"DamageMult()":-1.0,"
"Rotation()":[-1.0, -1.0, -1.0],
"NoTrail(string)":-1,"
}0.0 Collision_Add.Node(NPC L Thigh [LThg])|DamageMult(value)|ID(value)|`Rotation(value,value,value)|NoTrail
0.0 Collision_Add.Node(NPC L Calf [LClf])|DamageMult(value)|ID(value)|`Rotation(value,value,value)|NoTrail
0.0 Collision_Add.Node(NPC L Foot [Lft ])|DamageMult(value)|ID(value)|`Rotation(value,value,value)|NoTrail