File information

Last updated

Original upload

Created by

TLG53787

Uploaded by

TLG53787

Virus scan

Safe to use

About this mod

This mod adds an spell and/or a passive to remove broken objects (like crates, chairs, doors...etc) which normally can't be interacted with once their broken.
The spell/passive is automatically added when a save is loaded or when a companion joins the party.

Requirements
Permissions and credits
Translations
  • French
Mirrors
Changelogs
Patch #7 compatible

Did you ever broke that sitting tree on your camp or some crates trying some new spell and you were stuck with it? Are you annoyed with that clipping sound from the piece of crate you just broke trying to melt with the floor? Well, me too. So, after looking for a way to remove those broken objects through forums and mods with no luck, I decided to make my own.

After a lot of trial and error I found a way to iterate through all loaded entities with the script extender console, identify the ones who are broken and delete them. So I ended up making a mod for my personal use so I doesn't have to input the SE command each time I want to delete something.
Now uses Osiris Scripting to remove the dependency of the Script Extender and the logic has been reworked to optimize the code (now iterates over DB_Destroyed instead of all loaded entities).

And seeing that nobody have still shared something similar I decided to go ahead and share it, so I hope you'll find it useful!


Demo



Versions

There are two versions of the mod and both are standalone and independant, so you can use one or both of them at the same time.
  • The spell version adds a spell called Remove Broken Objects to the Common - Class Actions. The spell has a target radius of 18m and an area radius of 9m, and it costs nothing to cast.
  • The passive version adds a toggleable passive that casts an invisible aura of 9m and removes every broken object inside each second.

How to acquire the spell/passive

It's automatically added to all party characters (not including summons) on a
save load or when a companion is added to the party.
As it uses native scripting (Osiris) it has no requirements and should be compatible with any mod.


What is the difference between this version and the Mod.io one?


None, they're the same. But, as mod.io don't support optional files, they're splitted into two mods.


How to install the mod

In-game mod menu

Extract the .pak file into "%UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\Mods", open the game, go to the Mod Management window and tick the mod in the list.

BG3 Mod Manager

Just import it using the Mod Manager and add it to the active list. The order shouldn't matter.

Manual Install

Spoiler:  
Show

If you really want to install it manually, drop the PAK file into "%UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\Mods"
Open "%UserProfile%\AppData\Local\Larian Studios\Baldur's Gate 3\PlayerProfiles\Public\modsettings.lsx" and add this to the ModOrder childs:
Spoiler:  
Show
<node id="Module">
    <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
</node>
<node id="Module">
    <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
</node>

And this to the Mods childs:
Spoiler:  
Show
<node id="ModuleShortDesc">
  <attribute id="Folder" value="RemoveBrokenObjects" type="LSString" />
  <attribute id="MD5" value="" type="LSString" />
  <attribute id="Name" value="Remove Broken Objects" type="LSString" />
  <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
  <attribute id="Version64" value="36310271995674654" type="int64" />
</node>
<node id="ModuleShortDesc">
  <attribute id="Folder" value="RemoveBrokenObjectsPassive" type="LSString" />
  <attribute id="MD5" value="" type="LSString" />
  <attribute id="Name" value="Remove Broken Objects (Passive)" type="LSString" />
  <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
  <attribute id="Version64" value="36310271995674654" type="int64" />
</node>

So it looks something like this:
Spoiler:  
Show
<?xml version="1.0" encoding="UTF-8"?>
<save>
  <version major="4" minor="0" revision="9" build="331" />
  <region id="ModuleSettings">
    <node id="root">
      <children>
        <node id="ModOrder">
          <children>
            <node id="Module">
              <attribute id="UUID" value="28ac9ce2-2aba-8cda-b3b5-6e922f71b6b8" type="FixedString" />
            </node>
            <node id="Module">
              <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
            </node>
            <node id="Module">
              <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
            </node>
          </children>
        </node>
        <node id="Mods">
          <children>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="GustavDev" type="LSString" />
              <attribute id="MD5" value="9a704697f3b8d390347f0aea21d02074" type="LSString" />
              <attribute id="Name" value="GustavDev" type="LSString" />
              <attribute id="UUID" value="28ac9ce2-2aba-8cda-b3b5-6e922f71b6b8" type="FixedString" />
              <attribute id="Version64" value="144820164012315624" type="int64" />
            </node>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="RemoveBrokenObjects" type="LSString" />
              <attribute id="MD5" value="" type="LSString" />
              <attribute id="Name" value="Remove Broken Objects" type="LSString" />
              <attribute id="UUID" value="e9a47cc1-2919-4936-a9b6-2adf6f495394" type="FixedString" />
              <attribute id="Version64" value="36310271995674654" type="int64" />
            </node>
            <node id="ModuleShortDesc">
              <attribute id="Folder" value="RemoveBrokenObjectsPassive" type="LSString" />
              <attribute id="MD5" value="" type="LSString" />
              <attribute id="Name" value="Remove Broken Objects (Passive)" type="LSString" />
              <attribute id="UUID" value="45ca0fd0-4238-4962-b059-e62a066daf04" type="FixedString" />
              <attribute id="Version64" value="36310271995674654" type="int64" />
            </node>
          </children>
        </node>
      </children>
    </node>
  </region>
</save>


How to uninstall the mod


The spell is removed each time a character lefts the party and when the game is saved, so but it should be safe to remove it. I did a few tests and I could load my save without problems.
If your using the passive version, toggle off the passive and save before uninstalling/updating.

In-game Mod Menu


Open the game, go to the Mod Management window and untick the mod in the list. If you want, you can also click on the mod and click on the Uninstall button at the right to completly remove the .pak file.

BG3 Mod Manager


Just delete it using the Mod Manager and don't forget to export the new mod order.

Manual Install


Remove the PAK file from the Mods folder and remove the corresponding lines of the install section from the modsettings.lsx file.

Supported Languages

Currently it supports english and spanish languages.

Extra

Spoiler:  
Show
If you're interested in the script extender commands that this mod used to use but you don't want to unpack the mod to see them or just want to remove something one time and don't want to install this mod to later uninstall it I leave them here, just enter the lua console in the script extender (you'll need the script extender version with the console) when the save is loaded (hit intro once and you should see the prompt ">>"), copy&paste this command and hit intro again.

Remove all broken objects loaded:
for _, ent in ipairs(Ext.Entity.GetAllEntitiesWithComponent("ServerItem")) do if ent.ServerItem.Destroyed then RequestDelete(ent.Uuid.EntityUuid) end end

Remove all broken objects in a 100 meter radius from the current player:
local max_distance = 100 local player_uuid = GetHostCharacter() for _, ent in ipairs(Ext.Entity.GetAllEntitiesWithComponent("ServerItem")) do local distance = Osi.GetDistanceTo(ent.Uuid.EntityUuid, player_uuid) if ent.ServerItem.Destroyed and distance ~= nil and distance < max_distance then RequestDelete(ent.Uuid.EntityUuid) end end


My other mods

Special Thanks