File information

Last updated

Original upload

Created by

Penta-limbed-cat

Uploaded by

ProfJack

Virus scan

Safe to use

Tags for this mod

About this mod

Post-hit killmove rewritten and expanded. SKSE-powered melee killmoves manager.

Requirements
Permissions and credits
Changelogs
What is this?

  • Kaputt, short for Killmove and Paired Universial... Anyway, this is a mod to manage, expand and customize your killmoves. Like Violens but more.
  • It is a sucessor of my old mod Post-Hit Killmove and Executions, which allows triggering a killmove after a lethal blow is hit. It also came with a method to add a killmove to the system without worrying about idle form compatibility issues.
  • This mod, Kaputt, builds upon that, and therefore includes everything above and more:
  • Different triggers: vanilla-ish, post-hit, sneak kill + key press.
  • New tag-based animation system. Toggle, edit and mix each and every killmove you have.
  • Customizable filtering logic. Easily expandable killmove list.
  • Many more options (See screenshot).
  • Directly triggering and testing the animation in game via animation tab.


Installation
  • Use any mod installer, or manually unpack the zip archive and copy all contents to (your game folder)/data
  • The archive contains a default config file. So be careful not to overwrite your own when updating. You can save the old one as preset.
  • You can safely uninstall the mod at any time.
  • Prerequisites:
  • SKSE
  • Address Library
  • Cathub 1.6.0+ (optional, for in-game customization)


Compatibility
  • Should be compatible with AE (1.6.640). Only tested on SE.
  • The mod author is playing with PrecisionADXP, Valhalla Combat, One Click Power Attack.
  • Violens: Disbale melee killmove if you still want to use it to manage ranged killmoves.
  • Combat Gameplay Overhaul: It seems two handed animations won't play. No idea yet.
  • Killmove replacers: They should still replace.
  • Modded races: Add them to the excluded race list if you don't want to see killmoves on them.
Please report any bugs and incompatibilities w/ log.

Preemptively Answered Questions (PAQ)

  • Why won't my killmove play?
    First, check you settings.Secondly, it won't play if you stand too far away from the target.Finally, sometimes it just won't play :(
  • How do I call out the in-game customization UI?
You need to install Cathub for that. After installation, use Cathub's toggle key (default F6) to invoke CatMenu. Check the Kaputt checkbox, and then the Kaputt customization menu will show up.
  • How do I disable 'advancing killmoves' like Violens? I don't see the options.
This option is not so obvious, but putting "adv" in the Banned Tag list will ban all advancing killmoves. Furthermore, if there's any advancing killmove I left out, you could always add "adv" tag to them yourself, in game. You can see which animation is last played at the bottom of the Kaputt menu, and you can test them one by one as well in the animation tab by clicking on their names/editor ids.
  • How do I disable specific killmoves?
Tag those animations with a tag like "noplay", and put the tag in the Banned Tag list.
  • How about 'mixed killmoves' or 'mace decap' then?
You should take a look at the tagging system. By editing tags of the animation you want, you can achieve very versatile results.
  • Ranged killmoves?
Ranged are not killmoves. They are just cameras, and I haven't figure out the camera bit. So no, for now.

Limitation/Future Work

  • Figuring out how to enable cinematic camera (currently not working)
  • More triggering options. (suggestion welcomed)
  • Papyrus interface.

Configuration/Customization Guide

Basic Configuration
Spoiler:  
Show

All the user-specific configurations are in the file (skyrim game folder)/data/skse/plugins/kaputt.json. You should be able to easily customize these options using the in-game UI, as they are provided with hints. However, if you are unable or unwilling to use my Cathub mod, or when you are transfering options to a new version of Kaputt, here is a walkthrough of the file (// for comment):

{
"anim_custom_tags_map": {  // This is where you set your own tags for specific animations. See Adding Animation.
  "Kap_1HMKillMoveJ": [
"a_all_l",
"a_dagger_r",
"a_human",
"a_player",
"a_sword_r",
"front",
"v_all",
"v_human"
  ]
},
"misc_params": {
  "disable_vanilla": true  // This sets the vanilla global value 'Killmove' to 0. Doesn't affect dragon bites and sneak kills.
},
"precond_params": {
  "essential_protection": 0,  // 0 - Enable, 1 - Treated as Protected, 2 - Disable
  "furn_lean": false,
  "furn_sit": false,
  "furn_sleep": false,  // These 3 options toggles killmoves when vicitim is on certain kinds of furnitures
  "height_diff_range": [
-35.0,
35.0
  ],  // A vanilla check that restricts the difference of height (z coordinate) between attacker and victim
  "last_hostile_range": 1024.0,  // Hostile actors outside of this 'safe' range will be ignored. Search skyrim unit creation kit page.
  "last_hostile_player_follower_only": false,  // Only check last enemy for player and followers.
  "protected_protection": true,
  "skipped_race": [
"DLC1LD_ForgemasterRace",
"DLC2GhostFrostGiantRace",
"DLC2SprigganBurntRace",
"FrostbiteSpiderRaceGiant",
"SprigganEarthMotherRace",
"SprigganMatronRace"
  ]  // Races here won't participate in a killmove.
},
"tagexp_list": {  // Decomposing a 'big' tag into 'smaller' tags, so you don't need to list all of them when you are tagging animations.
  "a_1h_l": [
"a_axe_l",
"a_dagger_l",
"a_mace_l",
"a_sword_l"
  ],
  "a_1h_r": [
"a_axe_r",
"a_dagger_r",
"a_mace_r",
"a_sword_r"
  ],
  "a_2h": [
"a_axe2h",
"a_mace2h",
"a_sword2h"
  ],
  "a_all": [
"a_axe2h",
"a_axe_l",
"a_axe_r",
"a_bow",
"a_crossbow",
"a_dagger_l",
"a_dagger_r",
"a_fist_l",
"a_fist_r",
"a_mace2h",
"a_mace_l",
"a_mace_r",
"a_shield",
"a_spell_l",
"a_spell_r",
"a_staff_l",
"a_staff_r",
"a_sword2h",
"a_sword_l",
"a_sword_r",
"a_torch"
  ],
  "a_all_l": [
"a_axe_l",
"a_dagger_l",
"a_fist_l",
"a_mace_l",
"a_shield",
"a_spell_l",
"a_staff_l",
"a_sword_l",
"a_torch"
  ],
  "a_all_r": [
"a_axe_r",
"a_dagger_r",
"a_fist_r",
"a_mace_r",
"a_spell_r",
"a_staff_r",
"a_sword_r"
  ],
  "v_1h_l": [
"v_axe_l",
"v_dagger_l",
"v_mace_l",
"v_sword_l"
  ],
  "v_1h_r": [
"v_axe_r",
"v_dagger_r",
"v_mace_r",
"v_sword_r"
  ],
  "v_2h": [
"v_axe2h",
"v_mace2h",
"v_sword2h"
  ],
  "v_all": [
"v_axe2h",
"v_axe_l",
"v_axe_r",
"v_bow",
"v_crossbow",
"v_dagger_l",
"v_dagger_r",
"v_fist_l",
"v_fist_r",
"v_mace2h",
"v_mace_l",
"v_mace_r",
"v_shield",
"v_spell_l",
"v_spell_r",
"v_staff_l",
"v_staff_r",
"v_sword2h",
"v_sword_l",
"v_sword_r",
"v_torch"
  ],
  "v_all_l": [
"v_axe_l",
"v_dagger_l",
"v_fist_l",
"v_mace_l",
"v_shield",
"v_spell_l",
"v_staff_l",
"v_sword_l",
"v_torch"
  ],
  "v_all_r": [
"v_axe_r",
"v_dagger_r",
"v_fist_r",
"v_mace_r",
"v_spell_r",
"v_staff_r",
"v_sword_r"
  ]
},
"tagging_params": {
  "banned_tags": [
"adv"
  ],  // do not play animations that have these tags
  "decap_bleed_ignore_perk": true,  // if ture, bleedout killmoves ignores decap perk requirement
  "decap_percent": 30.0,  // chance of decap killmoves, in percentage
  "decap_requires_perk": true,  // whether the attacker needs to have those perks (Savage Strike/Devastation Blow) to be able to decap
  "decap_use_chance": false,  // don't determine decap chance explicitly. sometimes there aren't proper decap animations for the scene. disabling this makes non-decap animations still playable.
  "required_tags": []  // only play animations that have these tags
},
"triggers": {  // these are options for different triggering methods
  "post_hit": {  // triggers after a lethal hit landed
"enable_bleedout_execution": false,  // one-hit killmove triggering on a bleeding out actor, even when the damage is not enough to kill
"enable_getup_execution": false,  // one-hit killmove triggering on an actor recovering from ragdoll, even when the damage is not enough to kill. ragdoll executions are disabled as they're too buggy to handle
"enabled": false,
"instakill": false,  // kills victim instantly even if the execution animation somehow didn't play
"prob_exec": [  // chances of triggering bleedout/get up execution
100.0,  // player to npc
100.0,  // npc to player
100.0  // npc to npc
],
"prob_km": [  // chances of triggering normal killmoves
100.0,
100.0,
100.0
]
  },
  "sneak": {  // trigger sneak killmove on the crosshair target with a key press
"enabled": false,
"key_scancode": 256,  // see this
"need_crouch": true  // if disabled, you can trigger this while standing as long as you are not detected. the animation will be different though
  },
  "vanilla": {  // triggers killmoves when an supposedly lethal attack is initiated, like in vanilla. options same as "post_hit"

        "enable_bleedout_execution": false,
        "enable_getup_execution": false,
        "enabled": true,
        "prob_exec": [
            50.0,
            50.0,
            50.0
        ],
        "prob_km": [
            50.0,
            50.0,
            50.0
        ]
  }
}
}

Animation & Tagging
Spoiler:  
Show

If you know how to add new killmoves via behavior editing, and ecapsulating them in idle animations using creation kit/TESEdit, here is how you add them to this mod. Also useful if you wanna edit the tags in the Animation tab. Animation entries files are located in (skyrim game folder)/data/skse/plugins/kaputt/anims. They are in .json format, and their contents typically look like this:

{
    "Kap_1HMGiantKillMoveA": [
        "front",
        "a_human",
        "a_all_l",
        "a_dagger_r",
        "a_sword_r",
        "v_giant",
        "v_all"
    ],
    "Kap_1HMGiantKillMoveB": [
        "front",
        "a_human",
        "a_all_l",
        "a_1h_r",
        "v_giant",
        "v_all"
    ]
}

As you may have guessed, "Kap_1HMGiantKillMoveA" and "Kap_1HMGiantKillMoveB" are the editor id of the idle form of your killmoves. MAKE SURE THE IDLES HAVE NO CONDITIONS. The strings in the brackets are their tags. Tags tells the mod what kind of animation it is: What is the race of the attacker and vicitm? What weapons are they using? etc. When a killmove triggers, all registered animations will be filtered according to their tags.

By default, these tags are used in the filtering process:

race(skeleton) tags, these tags are assigned by the skeleton file the attacker and victim use (with a_ and v_ prefix for attacker and victim):
Spoiler:  
Show

  • human
  • ashhopper
  • ballista
  • bear
  • boar
  • centurion
  • chaurus
  • chaurushunter
  • cow
  • deer
  • dog
  • dragon
  • draugr
  • dwarven
  • spider
  • falmer
  • flameatronach
  • frostatronach
  • gargoyle
  • giant
  • goat
  • hagraven
  • horker
  • horse
  • lurker
  • mammoth
  • mudcrab
  • netch
  • priest // for dragon priest
  • riekling
  • rabbit
  • sabrecat
  • seeker
  • skeever
  • skeleton
  • slaughterfish
  • sphere // for dwarven sphere
  • spider
  • spriggan
  • stormatronach
  • troll
  • wolf
  • werewolf
  • wisp
  • witchlight
  • wraith
  • vamplord

Note that mod races that uses the same skeleton can be killmoved, which may be undersirable. You should add them to the excluded race list.

weapon tags, these tags tells you what weapon(s) the animation was designed for:
Spoiler:  
Show

  • one handed ( _l and _r suffix for left and right hand): dagger sword axe mace
  • one handed misc (+  _l and _r suffix): fist spell staff
  • always left handed: shield torch
  • two handed: sword2h axe2h mace2h
  • two handed misc: bow crossbow
  • composite tags: 1h_l 1h_r 2h all_l all_r all


other tags:
Spoiler:  
Show

  • front
  • back  // attacker in front of/behind victim
  • decap
  • bleed  // bleedout animation
  • adv  // advancing animation as in Violens
  • sneak
  • a_player
  • v_player  // player only
  • a_male
  • v_male
  • a_female
  • v_female // unisex animations don't need any of these tags


You can always add your own tags to an animation, and use it in the ban-list or require-list, or even customize your own tag filtering conditions, as explained below.

Advanced: Custom Filtering Condition
Spoiler:  
Show

If you want, for example, to make killmoves specifically for some mod weapons (e.g. Animated Armoury), or to add killmoves unique to a custom follower, you need to tweak the filtering conditions.
A clueless person once said: dll is evil mod authors' plan to monopolize knowledge and a barrier to the modding community blah blah blah. Well, it might as well be a barrier to me as I really don't want to implement a condition editor myself. Therefore, I managed to put all the tag filtering operations inside the .esp file. I call it Idle Animation Programming lol.

Here, look at this image of Creation Kit's Gameplay->Animations menu:

Under Actors\Character\Behaviors\0_Master.hkx -> PowerAttackRoot is a new idle KaputtRoot. This idle object has an impossible condition so it will never be played, and is only useful to this mod. It is where all tag filters are, except for the skeleton/race tags since they need functions not provided by CK. Basically, when some code wants to trigger a killmove, it'll first go through these idle forms and their conditions, which will yield tags to be required and/or banned.

How does that work? First the mod will calculate the conditions of each idle one by one, with the attacker as Subject and the vicitim as Target. The results are true or false, and are kind of stored in a variable with the same name as the ID of the idle form. The ID is an important part, as it labels what tag is to be needed/banned. If the ID has any underscore _, it means that if its condtion is true, a tag is needed. The texts after the first underscore is the tag, and animations without this tag is filtered.

The three options (Sequence, Blocking, No Attacking) under the ID input are also used. No Attacking means that, additionally, if the condition is false, then this tag is banned.  Blocking reverts the whole result, so that if the conditon is true, then the tag is banned. If they both are ticked, then true=ban tag, and false=require tag. Sequence tells the plugin to check the conditions one by one instead of as a whole. This enables the conditions to reference one of the idle forms checked before. As shown in the image, GetGraphVariableInt with Swap Subject and Target indicates that this is a reference, and the referenced idle form is specified in the parameter.

In the image, KapComp_bleed will require 'bleed' tag if the conditions are true, and ban it if false. The conditions are that 'KapBleedout' is true or 'KapGettingUp' is true.

Credits
  • SKSE Team
  • meh321 for Address Library
  • Maxsu for tolerating my bothering.
  • Maxsu/Ersh/dTry/SlavicPotato for their code repositories as reference.
  • Atkinson Hypereligible as the screenshot font.
  • Playfair Display as the thumbnail font.
  • My nonexistent cat.

Source Code