Skip to content

Borderlands 2 Container Reference

CJ Kucera edited this page Feb 19, 2018 · 49 revisions

This page is a reference of the containers found in Borderlands 2 (and associated DLC), and the classes/objects used to determine what loot gets generated when opening the container.

Overview

Containers in BL2/TPS have various attachment points defined on the container's 3D model, generally named like Ammo1, Ammo2, Gun1, Gun2, Grenade1, etc. The InteractiveObjectBalanceDefinition object for each container is where the game says what items should get attached where. For instance, the object GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlEpic (the gigantic red Dahl chest) has the following named loot configurations:

  • TreasureChest_2guns2Pistols
  • TreasureChest_4Pistols1Long
  • TreasureChest_Launcher
  • TreasureChest_Gear
  • TreasureChest_Shields
  • TreasureChest_GrenadeMods
  • TreasureChest_ClassMods
  • TreasureChest_2Guns&Gear
  • TreasureChest_Eridium

As you'd expect, each of those options has a weight-based probability associated with it in a Weight block, which gives you the probability that that pool will be chosen. Inside each of those loot definitions, there's an ItemAttachments object which defines an ItemPoolDefinition/WeaponPoolDefinition to pull from, and a named attachment point. For instance, TreasureChest_2guns2Pistols sets a couple items from GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns to get assigned to Gun1 and Gun2, and a couple items from GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols to get assigned to Pistol5 and Pistol6. (There's also various definitions going to Ammo1-4 and Grenade1-4.)

As with many Borderlands objects, this loot pool definition can either be done via a DefaultIncludedLootLists property, which passes off the pool decisions to another object, or with a DefaultLoot property defined right there. (They can also do a combination of the two, of course.)

All of the container InteractiveObjectBalanceDefinition objects are only loaded when a level is loaded, so those objects cannot be modified via standard set commands. The ones which use DefaultIncludedLootLists will often point at a loot pool which can be modified via standard set commands, though there are exceptions.

Notes

The probabilities given below should be more-or-less accurate, though I'm still not totally sure about the exact math behind it. All ammo/health/etc has been ignored here -- this list is only focusing on gear. There's a few places where non-gear loot pools get mentioned, simply because they're part of the decision chain, but they're definitely not the focus.

Some of these pools also have non-100% chances to spawn on each of its defined spawn point. So some of these which say "2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns" or whatever may not always spawn two of them, depending on how the RNG feels at the time.

Many of the pools here which are meant to provide shields in the "epic" chests actually have an error in the Shields pool which prevents that pool from ever actually being used. The specific error is that they include the item GD_Itempools.BuffDrinkPools.Pool_BuffDrinks_Euphoria, which cannot be spawned in-game.

"Trap" chests which can spawn Loot Midgets or Varkids or the like are technically different containers than the non-trap versions, and are specified directly in the level definitions. If you want to change the possible loot pools for dumpsters, for instance, you'd technically have to do so in all four classes, since they're separate and don't call out to a common pool.

Containers Which Mostly Pull from the Epic Chest Pools

GD_Balance_Treasure.ChestGrades.ObjectGrade_TreasureChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_TreasureChest

Actual Loot Pool: GD_Itempools.ListDefs.EpicChestRedLoot (can change with set)

31% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
16% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
9% 1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Items
8% (NOTE: There is an error in this pool which prevents it from actually being used)
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Artifacts (plus a bunch of Eridium+money)

GD_Balance_Treasure.ChestGrades.ObjectGrade_BanditChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_BanditChest

Actual Loot Pool: GD_Itempools.ListDefs.EpicChestBanditLoot (can change with set)

34% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
17% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
10% 1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
9% (NOTE: There is an error in this pool which prevents it from actually being used)
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
9% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
9% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
6% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
6% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Artifacts (plus a bunch of Eridium+money)

GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlEpic

Main Loot Definition Classes: GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlEpic
GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlEpic_BearerBadNews

Actual Loot Pool: (defined directly, must use hotfix on main loot definition class)

Regular Version:

31% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
16% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
9% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Items
8% (NOTE: There is an error in this pool which prevents it from actually being used)
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
8% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Artifacts (plus a bunch of Eridium+money)

Roland's Chest:

33% 1x GD_Itempools.WeaponPools.Pool_Weapons_All_04_Rare
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
16% 1x GD_Itempools.WeaponPools.Pool_Weapons_Pistols_04_Rare
3x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
10% 1x GD_Itempools.WeaponPools.Pool_Weapons_Launchers_04_Rare
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
9% 1x GD_Itempools.ShieldPools.Pool_Shields_All_04_Rare
3x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Items
9% (NOTE: There is an error in this pool which prevents it from actually being used)
1x GD_Itempools.ShieldPools.Pool_Shields_All_04_Rare
3x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
9% 1x GD_Itempools.GrenadeModPools.Pool_GrenadeMods_04_Rare
3x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
9% 1x GD_Itempools.ClassModPools.Pool_ClassMod_04_Rare
3x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods

GD_Balance_Treasure.ChestGrades.ObjectGrade_HyperionChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_HyperionChest

Actual Loot Pool: GD_Itempools.ListDefs.EpicChestHyperionLoot (can change with set)

36% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
18% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
11% 1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
10% (NOTE: There is an error in this pool which prevents it from actually being used)
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
10% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
10% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
6% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Artifacts (plus a bunch of Eridium+money)

GD_Orchid_TreasureChests.InteractiveObjects.ObjectGrade_PirateChest_Epic

Main Loot Definition Class: GD_Orchid_TreasureChests.InteractiveObjects.ObjectGrade_PirateChest_Epic

Actual Loot Pool: GD_Orchid_ItemPools.ListDefs.PirateChestEpicLoot (must be hotfixed)

36% 2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
13% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
10% 1x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
8% 3x GD_Itempools.ArtifactPools.Pool_ArtifactsReward
9% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
9% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
9% 4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
6% Eridium, etc.

GD_Allium_Lootables.Balance.Balance_LootCar

Main Loot Definition Class: GD_Allium_Lootables.Balance.Balance_LootCar

Actual Loot Pool: GD_Allium_Lootables.ListDefs.LootCarLA (must be hotfixed)

100% 2x GD_Allium_Lootables.ListDefs.Pool_EridiumOrCustomization
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Pistols
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_LongGuns
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_GrenadeMods
2x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Weapons_Launchers
6x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Shields
8x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_ClassMods
4x GD_Itempools.Treasure_ChestPools.Pool_EpicChest_Artifacts

Containers Which Mostly Pull From The Regular Chest Pools

GD_Balance_Treasure.LootableGrades.ObjectGrade_MetalCrate

Main Loot Definition Class: GD_Balance_Treasure.LootableGrades.ObjectGrade_MetalCrate

Actual Loot Pool: GD_Itempools.ListDefs.WeaponChestWhiteLoot (can change with set)

33% 2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_LongGuns
16% 4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Pistols
12% 1x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Launchers
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Shields
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_GrenadeMods
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_ClassMods
7% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Artifacts

GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlWeaponChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_DahlWeaponChest

Actual Loot Pool: GD_Itempools.ListDefs.WeaponChestWhiteLoot (can change with set)

(Same as above)

GD_Balance_Treasure.ChestGrades.ObjectGrade_HypWeaponChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_HypWeaponChest

Actual Loot Pool: GD_Itempools.ListDefs.WeaponChestWhiteLoot (can change with set)

(Same as above)

GD_Balance_Treasure.ChestGrades.ObjectGrade_BanditWeaponChest

Main Loot Definition Class: GD_Balance_Treasure.ChestGrades.ObjectGrade_BanditWeaponChest

Actual Loot Pool: GD_Itempools.ListDefs.WeaponChestBanditLoot (can change with set)

34% 2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_LongGuns
17% 4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Pistols
11% 1x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Launchers
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Shields
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_GrenadeMods
11% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_ClassMods
4% 3x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Artifacts

GD_Sage_Lootables.Balance.ObjectGrade_TribalChest

Main Loot Definition Class: GD_Sage_Lootables.Balance.ObjectGrade_TribalChest

Actual Loot Pool: GD_Itempools.ListDefs.WeaponChestBanditLoot (can change with set)

(Same as above)

GD_Aster_Lootables.Balance.ObjectGrade_MimicChest_NoMimic

Main Loot Definition Class: GD_Aster_Lootables.Balance.ObjectGrade_MimicChest_NoMimic

Actual Loot Pool: (defined directly, must use hotfix on main loot definition class)

31% 2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_LongGuns
2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Pistols
16% 4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Pistols
9% 1x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_Launchers
8% 4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Items
8% (NOTE: There is an error in this pool which prevents it from actually being used)
4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Shields
8% 4x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_GrenadeMods
8% 4x GD_Aster_ItemPools.ClassModPools.Pool_ClassMod_00_Aster
5% 2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Weapons_LongGuns
1x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Shields
1x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_GrenadeMods
5% 2x GD_Itempools.Treasure_ChestPools.Pool_WeaponChest_Artifacts (+eridium, cash)

Containers With Mostly Custom Pools

GD_Orchid_TreasureChests.InteractiveObjects.ObjectGrade_PirateChest_EndGame

Main Loot Definition Class: GD_Orchid_TreasureChests.InteractiveObjects.ObjectGrade_PirateChest_EndGame

Actual Loot Pool: GD_Orchid_ItemPools.ListDefs.PirateChestEndGameLoot (must be hotfixed)

32% 2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_LongGuns
7% 1x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_LongGuns
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Shields
7% 1x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_LongGuns
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_ClassMods
7% 1x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_LongGuns
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_GrenadeMods
7% 1x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_LongGuns
2x GD_Itempools.ArtifactPools.Pool_ArtifactsReward
6% 2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Pistols
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Shields
6% 2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Pistols
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_ClassMods
6% 2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Pistols
2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_GrenadeMods
6% 2x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Pistols
2x GD_Itempools.ArtifactPools.Pool_ArtifactsReward
13% 1x GD_Orchid_ItemPools.EndGame.Pool_PirateChest_EndGame_Launchers

Main Loot Definition Class: GD_Aster_Lootables.Balance.ObjectGrade_DiceChest

Actual Loot Pool: n/a

This one pulls from many various pools, based on the die roll. The most interesting ones are probably:

  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_1_VeryLowRoll_Longs
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_2_LowRoll_Longs
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_2_LowRoll_Pistols
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_3_HighRoll_Longs
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_4_VeryHighRoll_Launchers
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_4_VeryHighRoll_Longs
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_4_VeryHighRoll_Pistols
  • GD_Aster_ItemPools.DiceChestPools.Pool_DiceChest_5_LegendaryRoll_Longs

I think that the "VeryHighRoll" pools only trigger on a single 20, and "LegendaryRoll" only triggers on a double-20.

Smaller Custom Containers

GD_Balance_Treasure.LootableGrades.ObjectGrade_StorageLocker

Main Loot Definition Classes: GD_Balance_Treasure.LootableGrades.ObjectGrade_StorageLocker
GD_Balance_Treasure.LootableGradesTrap.MidgetBandit.ObjectGrade_StorageLocker_MidgetBandit
GD_Balance_Treasure.LootableGradesTrap.MidgetHyperion.ObjectGrade_StorageLocker_MidgetHyperion

Actual Loot Pool:

  • Main Class: GD_Itempools.ListDefs.StorageLockerLoot (can change with set)
  • Loot Midget Versions: (defined directly, must use hotfix on main loot definition class)

Main Class: (have not actually looked at the loot midget pools)

83% Cash+Ammo
2% Eridium Stick
0.41% Eridium Bar
6% 1x GD_Itempools.LootablePools.Pool_Locker_Items_SMGsAndPistols
5% 1x GD_Itempools.ShieldPools.Pool_Shields_All
3% 1x GD_Itempools.GrenadeModPools.Pool_GrenadeMods_All
0.41% 1x GD_Itempools.LootablePools.Pool_Locker_Items_SMGsAndPistols
1x GD_Itempools.GrenadeModPools.Pool_GrenadeMods_All

GD_Balance_Treasure.LootableGrades.ObjectGrade_Cardboard_Box

Main Loot Definition Classes: GD_Balance_Treasure.LootableGrades.ObjectGrade_Cardboard_Box
GD_Balance_Treasure.LootableGradesTrap.MidgetBandit.ObjectGrade_CardboardBox_MidgetBandit
GD_Balance_Treasure.LootableGradesTrap.MidgetHyperion.ObjectGrade_CardboardBox_MidgetHyperion

Actual Loot Pool: (defined directly, must use hotfix on main loot definition class)

Main Class: (have not actually looked at the loot midget pools)

(note that the weights here are actually a bit off - I have no idea what the actual number is for that health drop, so take these with a grain of salt)

87% Ammo
9% 1x GD_Itempools.WeaponPools.Pool_Weapons_Pistols
4% Eridium Stick
0.43% Eridium Bar
GD_Itempools.DropWeights.DropODDS_Health, +500 base Health

GD_Balance_Treasure.LootableGrades.ObjectGrade_Dumpster

Main Loot Definition Classes: GD_Balance_Treasure.LootableGrades.ObjectGrade_Dumpster
GD_Balance_Treasure.LootableGradesTrap.MidgetBandit.ObjectGrade_Dumpster_MidgetBandit
GD_Balance_Treasure.LootableGradesTrap.BugMorph.ObjectGrade_Dumpster_BugMorph
GD_Balance_Treasure.LootableGradesTrap.MidgetHyperion.ObjectGrade_Dumpster_MidgetHyperion

Actual Loot Pool: (defined directly, must use hotfix on main loot definition class)

Main Class: (have not actually looked at the loot midget pools)

50% 1x GD_Itempools.LootablePools.Pool_Dumpster_Guns (plus ammo/cash)
50% 1x GD_Itempools.LootablePools.Pool_Dumpster_Guns (plus ammo/cash)

GD_Aster_Lootables.Balance.ObjectGrade_CashChest

Main Loot Definition Class: GD_Aster_Lootables.Balance.ObjectGrade_CashChest

Actual Loot Pool: GD_Aster_ItemPools.ListDefs.CashChestLoot (must be hotfixed)

100% (cash+ammo)
0.05% 1x GD_Aster_ItemPools.ClassModPools.Pool_ClassMod_00_Aster
0.05% (customization)

(some copy+paste bits for during editing)

(Same as above)

(NOTE: There is an error in this pool which prevents it from actually being used)

(defined directly, must use hotfix on main loot definition class)

Main Loot Definition Class: ``

Actual Loot Pool: `` (can change with set)

Clone this wiki locally