Custom Buff Effects

Video Guide


Timestamps:

  • 0:14 Adding a custom buff .txt file
  • 0:52 Adding a buf .json and pasting in information
  • 1:13 "id"
  • 1:21 "iconId"
  • 1:35 "buffClass"
  • 2:36 "attributeType"
  • 2:45 "buffType"
  • 2:54 "maxStack" | special mention "maxTurn"
  • 3:02 "canBeDespelled" | special mentions "destroyableOnRetreat" & "destroyableOnZero"
  • 3:19 "ability"
  • 3:56 "categoryKeywordList"
  • 4:37 Adding/Inflicting the buff with a skill
  • 5:45 Adding locale for the buff (buflist)
  • 7:46 Adding locale for the buff (keywordlist)
  • 9:11 Adding the buff to skill locales

Text Guide

Now, you might want to add custom buff effects after having made your fancy skills to make your mod stand out and be more unique. Contrary to really popular belief, that isn't very hard to do.

Tutorial

  • First off, you need to go to limbus_data in dumpedData and find the buff folder.
  • You will find numeral json files; assuming you've been modding for a signifcant amount of time, you're used to this by this point. For our example, go to the first file: 0.json
  • Copy the first entry you see (in this circumstance, Nail) and paste the text into the buff folder of your mod's custom_limbus_data as a .json file.
  • To properly format your file, you must put the entry inside a list. If this is confusing, your file should look like this:
{
  "list": [
    {
      "id": "NailPersonality",
      "iconId": "Nail",
      "buffClass": "NonvolatileBuff",
      "buffType": "Negative",
      "canBeDespelled": true,
      "list": [
        {
          "ability": "GiveBuffOnRoundStart",
          "value": 1,
          "buffData": {
            "buffKeyword": "Laceration",
            "target": "Self",
            "stack": 1,
            "turn": -1,
            "activeRound": 0
          }
        },
        {
          "ability": "LoseStackOnRoundEndByRatio",
          "value": 0.5
        }
      ],
      "categoryKeywordList": ["LACERATION"]
    }
  ]
}

For now, lets empty the, "list," section of the buff.


{
  "list": [
    {
      "id": "NailPersonality",
      "iconId": "Nail",
      "buffClass": "NonvolatileBuff",
      "buffType": "Negative",
      "canBeDespelled": true,
      "list": [],
      "categoryKeywordList": ["LACERATION"]
    }
  ]
}
  • To create a new instance of a buff, make a .txt file with the desired id name of the buff in the custom_buffs folder residing in limbus_data. Make sure you don't use a pre-existing id name, or you will overwrite said buff.

  • Afterward, you can change the id of your buff to the name of your .txt file. If I named my file BeheadShanecliffs.txt, the id BeheadShanecliffs becomes valid. You must re-open Limbus Company for the id to be recognized.

  • iconId is, what you can guess, the icon of the buff. It typically uses the id of a different buff.

  • NOTE: you can add your own custom buff icons by putting the image in the custom_sprites folder and naming it buffIcon_{ID}.png similar to how you'd do skill icons.

  • buffclass dictates what the buff is like, there are 4 main types: NonvolatileBuff means it has only potency and it doesnt expire on turn end, VolatileBuff means only potency and it expires at turn end, CountableBuff means it has both potency and count, and sinBuff is similar to CountableBuff, but it is primarily used on the 7 main status archetypes.

  • buffType can either be Negative or Positive or Neutral its purpose is to be included in things such as "remove one random negative buff from self"

  • canBeDespelled is a boolean that decides if the buff can be forcefully removed or not, back on that "remove one random negative buff from self" if canBeDespelled is false then it cant be removed by scripts similar to that.

  • categoryKeywordList is used to make it a 'unique' buff of an already used status effect; for example, Dark Flame (DarkFlame in code) has COMBUSTION in their catagoryKeywordList which is why it counts as unique Burn

  • Lastly, list, the most important part of a buff. This dictates what the buff actually does. In the OG Nail script, it was this:

"list": [
       {
         "ability": "GiveBuffOnRoundStart",
         "value": 1,
         "buffData": {
           "buffKeyword": "Laceration",
           "target": "Self",
           "stack": 1,
           "turn": -1,
           "activeRound": 0
         }
       },
       {
         "ability": "LoseStackOnRoundEndByRatio",
         "value": 0.5
       }
     ]

Obviously, the ability script will add a buff on round start, and the value divides the buff by one (a number divided by one, is... just the original number), and it gives Bleed (Laceration), which is how Nail gives Bleed count equal to stack on Round Start. There are many scripts to modify, you can find them easily in the files of the buff folder similar to how you'd find skill scripts

EXTRAS

  • "maxStack": can be added to set a limit for the potency, ex: "maxStack": 20 otherwise the default is 99
  • "maxTurn": can be added to set a limit for the count, ex: "maxTurn": 10 otherwise the default is 99
  • "attributeType": unknown what it truly does, the sinBuffs have it with their respective affinity (Sinking has AZURE while Laceration has SCARLET)
  • "destroyableOnZero": determines if the buff gets removed at zero potency (Boolean)
  • "destroyableOnZeroTurn": determines if the buff gets removed at zero count (Boolean)
  • "destroyableOnRetreat": determines if the buff gets removed when the unit retreats (Boolean)