Giter VIP home page Giter VIP logo

lists-items-effects-manipulator's Introduction

LIEM - Lists Items Effects Manipulator [WIP]

This is a SKSE plugin for Skyrim Special Edition that allows you to manipulate lists and containers, items, effects and so on at startup runtime with configuration files.
No more patch hell for things like WACCF or CACO!

Features

The configuration files are written in ini format and are loaded from the root Data folder of the game with a suffix _LIEM(.ini).

General note

This allows you to mass change many values that might not be supposed to be changed (for example Armors ARMO used as "skins" fx for thralls, meaning that adding rating value buffs them inadvertently).
This is thought mostly as a companion to mods which adds and sets up keywords to all forms correctly, eventually even more than the base game so that you can really create a carefully patch-less world (e.g. KID and related are a good example).

Planning

Still very much a WIP. Plan to cover all possible forms and records within them where make sense (containers or leveled lists for items, ingredients or consumables for effects).

General syntax

NOTE: Everything is case-insensitive.

In general the syntax is the one described below, similar to the one used in SPID or KID, and specialised on the key type.

#--Type----|-What to do-|------------Where to do it------------|-----When to do it-----|
<RuleType> = <Modifiers>|<StringFilters>|<FormFilters>|<Traits>|<Chance>|<LoadCondition>

Think of a rule as a set of "type", "what to do", "where to do it" and "when to do it".

NONE to skip

Use NONE key (or blank) to ignore the value that should be provided.

Modifier - "what to do"

The "modifier" part refers to the "what to do" part, which is almost always specialised for the rule type (Armor-specific, Weapon-specific, ...).

Operation: <empty>/+/-

  • <empty> Empty (or blank) means absolute modifier, thus overwriting the target with the value provided.
  • + Plus sign means relative adding modifier, thus adding the value to the target.
  • - Minus sign means relative substraction modifier, thus substracting the value from the target.

Examples:

# nerfs all cuirass armors tagged as Iron by adding 5 more weight and removing 2 points of rating
# E.g. "Iron Armor" becomes 35 of weight and 23 of rating (see table https://elderscrolls.fandom.com/wiki/Iron_Armor_(Skyrim)#Attributes_by_piece)
Armor = NONE,+5,-2|ArmorMaterialIron+ArmorCuirass
# buffs all helmets tagged as Iron by making their weight be 4
# E.g. "Iron Helmet" has it's weight set to 4 (instead of previous 5)
Armor = NONE,4,|ArmorMaterialIron+ArmorHelmet

Type: integer

Form: <digits>
A natural number written with digits.

Type: real number

Form: <digits>[.<digits>]
A real number written with digits and optionally a deciaml part.

Note: Trailing 0 is required. .5 is not valid but 0.5 is.

Appliers - "where to do it" & "when to do it"

The "appliers" part refers to "where" and "when" to do it parts. It encludes many different ways of filtering the final target records.
Because this is common and/or true for most rules, it can also be enclosed in an expansable/reusable rule Alias at the top of your file and use a special syntax in StringFilters to expand it. (see Alias)

String Filters

Used to filter the records to apply the rule to and multiple rules are separated by a comma (,).

  • Rules are normally applied as "OR"
    • e.g. ArmorMaterialIron,ArmorMaterialSteel means apply to all armors that have either ArmorMaterialIron or ArmorMaterialSteel keyword
  • Use + to make it "AND" on multiple words
    • e.g. ArmorMaterialIron+ArmorHelmet means apply to all armors that have both ArmorMaterialIron and ArmorHelmet keywords
  • Use - to make it "NOT" on a single word
    • e.g. -ArmorMaterialSteel means apply to all armors that do not have ArmorMaterialSteel keyword
  • Use * to make it a "wildcard" on a single word
    • e.g. *Iron means apply to all armors that have the word Iron in their keywords, edids, ...
  • Use @<name> to expand an alias (see Alias)

Refer to each individual rule type for the supported string filters.
Generally you can filter on keywords, form editor ids and form names.

Form Filters

Used to filter the records to apply the rule to and multiple rules are separated by a comma (,).

  • Rules are normally applied as "OR"
    • e.g. LItemClothesAll,BeggarWithHatOutfit means apply to all armors that are either in LItemClothesAll list or BeggarWithHatOutfit outfit
  • Use + to make it "AND" on multiple words
    • e.g. LItemClothesAll+LItemClothesPoor means apply to all armors that are in both LItemClothesAll and LItemClothesPoor lists
  • Use - to make it "NOT" on a single word
    • e.g. -LItemClothesPoor means apply to all armors that are not in LItemClothesPoor list

FormIDs are supported but discoraged to use (e.g. 0x800~MyMod.esp or 0x2D202 without esp/esl for base game and DLCs).

Refer to each individual rule type for the supported form filters.

Traits

Used to filter the records to apply the rule to and multiple rules are separated by a forward slash (/).

  • Rules are normally applied as "AND"
    • e.g. E/X means apply to all armors that are Enchanted and X <as example>
  • Use - to make it "NOT" on a single trait
    • e.g. -E means apply to all armors that are not Enchanted

Refer to each individual rule type for the supported traits.

Chance

Note: This is deterministic for each record, so the "randomness" is always the same across saves.

A natural number between 0 and 100 that represents the chance of the rule to be applied.
100 represents "always" (same as NONE) and 0 "never".

Rules

Supported special rules:

Supported types related to game form records:

  • Armor for armors and clothing (including shields and jewelry) [ARMO]
  • Weapon for weapons [WEAP]
  • Ammo for ammonitions (bolts and arrows) [AMMO]

Alias

Alias = name|...

It's a simple name to "Appliers" expansion rule. In StringFilters use @<name> to target an alias and have it expanded.

Note: It should not matter but aliases gets expanded and added at the end before storing the appliers.

Example:

Alias = IronHelmets|ArmorMaterialIron+ArmorHelmet
# buff all values of iron helmets to 100 but MySpecialHelmet (edid)
Armor = 100|@IronHelmets,-MySpecialHelmet
# is equivalent to
Armor = 100|-MySpecialHelmet,ArmorMaterialIron+ArmorHelmet

Armor

Armor = value,weight,rating|...

Operation Name Type Description
<empty>/+/- value integer Value of the armor
<empty>/+/- weight real number Weight of the armor
<empty>/+/- rating real number Rating of the armor

String Filters

It supports the following string filters:

  • Keywords it has (e.g. ArmorMaterialIron)
  • Armor editorID (e.g. ArmorIronShield)
  • Armor name (e.g. Iron Shield)

Form Filters

It supports the following form filters:

  • Leveled list it is in (e.g. LItemClothesAll)
  • Outfit it belongs to (e.g. BeggarWithHatOutfit)
  • Form list it is in (e.g. WICommentCollegeRobesList)

Traits

It supports the following traits:

  • E for enchanted

Weapon

Weapon = value,weight,damage,critDamage,speed,reach,stagger|...

Operation Name Type Description
<empty>/+/- value integer Value of the weapon
<empty>/+/- weight real number Weight of the weapon
<empty>/+/- damage integer Damage of the weapon
<empty>/+/- critDamage integer Critical damage of the weapon
<empty>/+/- speed real number Speed of the weapon
<empty>/+/- reach real number Reach of the weapon
<empty>/+/- stagger real number Stagger of the weapon

String Filters

It supports the following string filters:

  • Keywords it has (e.g. WeapMaterialIron)
  • Weapon editorID (e.g. IronWarhammer)
  • Weapon name (e.g. Iron Warhammer)

Form Filters

It supports the following form filters:

  • Leveled list it is in (e.g. LItemWeaponBattleAxe)
  • Form list it is in (e.g. MineOreToolsList)

Traits

It supports the following traits:

  • E for enchanted

Ammo

Ammo = value,weight,damage|...

Operation Name Type Description
<empty>/+/- value integer Value of the ammo
<empty>/+/- weight real number Weight of the ammo
<empty>/+/- damage real number Damage of the ammo

String Filters

It supports the following string filters:

  • Keywords it has (e.g. WeapMaterialOrcish)
  • Ammo editorID (e.g. OrcishArrow)
  • Ammo name (e.g. Orcish Arrow)

Form Filters

It supports the following form filters:

  • Leveled list it is in (e.g. LItemAmmo)
  • Form list it is in (e.g. Bolts)

Traits

None.

Requirements

  • Visual Studio 2022 (the free Community edition)
  • vcpkg
      1. Clone the repository using git OR download it as a .zip
      1. Go into the vcpkg folder and double-click on bootstrap-vcpkg.bat
      1. Edit your system or user Environment Variables and add a new one:
      • Name: VCPKG_ROOT
        Value: C:\path\to\wherever\your\vcpkg\folder\is
  • DKUtil
      1. Clone the repository using git
      1. Point an ENV variable to its folder
      • Name: DKUtilPath Value: C:\path\to\wherever\your\DKUtil\folder\is

MO2 deployment

There is a CMake rule to automatically deploy the plugin to MO2's own plugin folder if you have set the MO2SkyrimSEPath environment variable to the path of your MO2 installation.

lists-items-effects-manipulator's People

Contributors

vabatta avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.