Jump to content
  • 0

Removing objects with Base Object Swapper and using Dyndolod


Question

Posted

Hello, I've been using Base Object Swapper to remove a lot of trees in Fabled Forests mod (Skyrim SE), because they have clipping with objects from other mods or even in vanilla Skyrim when using big scale of trees. I know I could do that in xEdit, but I have hundreds of affected trees. 

The author of BOS, powerofthree, recommends this to disable something (in non-related to Dyndolod discussion):

[Properties]
;see https://en.uesp.net/wiki/Skyrim_Mod:Mod_File_Format#Records for more flags
YourTreeIDHere|flags(0x00000800) 

However Dyndolod generates lod for the disabled trees in such case. 

There are another ways from mod authors using BOS and these ways work fine with Dyndolod:

[Transforms]
...|PosR(10.0,10.0,-30000.0),flags(0x00000800)
[References]
...|AlphaTest
[References]
...|0x3B~Skyrim.esm
[References]
...|0x058E92~Skyrim.esm

(the last one references AlphaTest nif in Skyrim.esm, which I guess some sort of totally empty nif without collision?)

The last 3 approaches seem to place lod model of tree instead of full one in the place of removed tree when Dyndolod isn't used. Not a big issue though, because it's probably a rare case to use tree mods without Dyndolod, but it feels something's not ok because of that.

So I wonder, is there an "official" way to disable objects with BOS which is considered by Dyndolod? I've read the Dyndolod webpage about BOS, but couldn't find info about disabling objects.

11 answers to this question

Recommended Posts

  • 0
Posted
  On 2/21/2025 at 1:00 PM, JumpingBoat35434 said:

Hello, I've been using Base Object Swapper to remove a lot of trees in Fabled Forests mod (Skyrim SE), because they have clipping with objects from other mods or even in vanilla Skyrim when using big scale of trees. I know I could do that in xEdit, but I have hundreds of affected trees. 

The author of BOS, powerofthree, recommends this to disable something (in non-related to Dyndolod discussion):

[Properties]
;see https://en.uesp.net/wiki/Skyrim_Mod:Mod_File_Format#Records for more flags
YourTreeIDHere|flags(0x00000800) 

However Dyndolod generates lod for the disabled trees in such case. 

There are another ways from mod authors using BOS and these ways work fine with Dyndolod:

[Transforms]
...|PosR(10.0,10.0,-30000.0),flags(0x00000800)
[References]
...|AlphaTest
[References]
...|0x3B~Skyrim.esm
[References]
...|0x058E92~Skyrim.esm

(the last one references AlphaTest nif in Skyrim.esm, which I guess some sort of totally empty nif without collision?)

The last 3 approaches seem to place lod model of tree instead of full one in the place of removed tree when Dyndolod isn't used. Not a big issue though, because it's probably a rare case to use tree mods without Dyndolod, but it feels something's not ok because of that.

So I wonder, is there an "official" way to disable objects with BOS which is considered by Dyndolod? I've read the Dyndolod webpage about BOS, but couldn't find info about disabling objects.

Expand  

BOS flags are not yet supported but will be in a future update.

If you really want to make sure something is "permanently" disabled, use a swap that moves it to z = -30000 exactly and sets the initially disabled flag. You should not change x or y so the reference does not change cells accidently.

Only setting something initially disabled without moving it to z = -30000 means it might be enabled again via script for example and the be visible. It might also get unneeded dynamic LOD.

Disabling references while generating the LOD patch can also be achieved by using DynDOLOD rules setting the Reference drop down to "Delete" - with additional condition about plugins from other mods being present. It will also set the enable parent to opposite player like xEdit undelete so it can not be enabled again.
 

  • 0
Posted
  On 2/21/2025 at 2:20 PM, sheson said:

BOS flags are not yet supported but will be in a future update.

If you really want to make sure something is "permanently" disabled, use a swap that moves it to z = -30000 exactly and sets the initially disabled flag. You should not change x or y so the reference does not change cells accidently.

Only setting something initially disabled without moving it to z = -30000 means it might be enabled again via script for example and the be visible. It might also get unneeded dynamic LOD.

Disabling references while generating the LOD patch can also be achieved by using DynDOLOD rules setting the Reference drop down to "Delete" - with additional condition about plugins from other mods being present. It will also set the enable parent to opposite player like xEdit undelete so it can not be enabled again.
 

Expand  

Thanks, I'll use this option then, with 0 for x and y:

[Transforms]
...|PosR(0.0,0.0,-30000.0),flags(0x00000800)
  • 0
Posted (edited)
  On 2/21/2025 at 3:10 PM, JumpingBoat35434 said:

Thanks, I'll use this option then, with 0 for x and y:

[Transforms]
...|PosR(0.0,0.0,-30000.0),flags(0x00000800)
Expand  

But with position relative (posR) the Z position will be whatever Z was before you decreased it by 30000, so it will only ever be -30000 after the swap if it was 0 before.

posA (absolute position) is the better approach, but you need to know/copy X and Y from the plugin to your _swap.ini so they are 'unchanged' after the swap.

Can't tell how precise you have to be -> how many decimal places you need to copy so it will work as itended.

Edited by PRieST
  • 0
Posted
  On 2/22/2025 at 12:34 AM, PRieST said:

But with position relative (posR) the Z position will be whatever Z was before you decreased it by 30000, so it will only ever be -30000 after the swap if it was 0 before.

posA (absolute position) is the better approach, but you need to know/copy X and Y from the plugin to your _swap.ini so they are 'unchanged' after the swap.

Can't tell how precise you have to be -> how many decimal places you need to copy so it will work as itended.

Expand  

PosR(0.0,0.0,-30000.0),flags(0x00000800) should still work as intended is most cases.

It would be nice if posA would accept placeholders that could be used to not change the x, y coordinates, to support the "standard" more easiliy.

  • 0
Posted
  On 2/22/2025 at 8:22 AM, sheson said:

PosR(0.0,0.0,-30000.0),flags(0x00000800) should still work as intended is most cases.

It would be nice if posA would accept placeholders that could be used to not change the x, y coordinates, to support the "standard" more easiliy.

Expand  

So it's ok, if Z is not exactly -30000 when a swap.ini is used?

I'm working on an xEdit script right now to get position and rotation ready to copy them over to an ini.

A convenient way to get the exact values from the record with absolute position. That's why I'm interested, does DynDOLOD need all 6 decimal places for position and the 4 for rotation?

  • 0
Posted (edited)

Just want to add, there is a Synthesis patcher based on script which moves to -30000 everything that's lower -30000 to prevent issues... so maybe a good option would be indeed PosA(0.0,0.0,-30000.0),flags(0x00000800)? If the objects are disabled then it wouldn't matter they're all in the same coordinates?

Edited by JumpingBoat35434
  • 0
Posted
  On 2/22/2025 at 1:34 PM, JumpingBoat35434 said:

Just want to add, there is a Synthesis patcher based on script which moves to -30000 everything that's lower -30000 to prevent issues... so maybe a good option would be indeed PosA(0.0,0.0,-30000.0),flags(0x00000800)? If the objects are disabled then it wouldn't matter they're all in the same coordinates?

Expand  

I suggest to test both options once you created a larger list of references that you want to disable. PosR and PosA are easily searched and replaced.

If disabling references for trees, the test should include standard tree LOD to see if changing x, y triggers stuck tree LOD.
If disabling references for statics and movable statics, it should include checking for additional large reference bugs caused by changing cells.

Might be easier to just make a feature request.

  • 0
Posted
  On 2/22/2025 at 11:50 AM, PRieST said:

I'm working on an xEdit script right now to get position and rotation ready to copy them over to an ini.

Expand  

That's how it's working at the moment
This is how an example record looks like in xEdit:
Example Example
First script will just give you position, rotation, scale or set the 0x00000800 flag if needed - ready to copy it from the info tab into any _SWAP.ini:
First script First script

  Reveal hidden contents

And the second one is the BOS equivalent to the 'initially disabled and set Z position to -30000 (with all other values copied from the plugin, so posA can be used) - ready to copy it from the info tab into any _SWAP.ini:
Second scrip Second scrip

  Reveal hidden contents


And as said above, scale, rotation, flags or position will only be added, if they are differ from the master the record is relying on
OR
if it's a new record (not relying on a master) and any value is set (only important for scale as position and rotation are always set).

And, as you can see, you already get a shortend FormID ready for BOS as well as the name of the .esp/.esm/.esl plugin -> of the master plugin if the record you're selecting is overwriting another record or the plugin itself, if it is not overwriting anything else.


@sheson: Will this work with DynDOLOD, or is there anything else I need to consider?

  • 0
Posted
  On 2/23/2025 at 1:49 AM, PRieST said:

That's how it's working at the moment
This is how an example record looks like in xEdit:
Example Example
First script will just give you position, rotation, scale or set the 0x00000800 flag if needed - ready to copy it from the info tab into any _SWAP.ini:
First script First script

  Reveal hidden contents

And the second one is the BOS equivalent to the 'initially disabled and set Z position to -30000 (with all other values copied from the plugin, so posA can be used) - ready to copy it from the info tab into any _SWAP.ini:
Second scrip Second scrip

  Reveal hidden contents


And as said above, scale, rotation, flags or position will only be added, if they are differ from the master the record is relying on
OR
if it's a new record (not relying on a master) and any value is set (only important for scale as position and rotation are always set).

And, as you can see, you already get a shortend FormID ready for BOS as well as the name of the .esp/.esm/.esl plugin -> of the master plugin if the record you're selecting is overwriting another record or the plugin itself, if it is not overwriting anything else.


@sheson: Will this work with DynDOLOD, or is there anything else I need to consider?

Expand  

DynDOLOD supports PosR and PosA already so the intention should work already.

I would just ask po3 to add a placeholder to PosA that keeps whatever original/current value or add a PosX, PosY, PosY.

  • 0
Posted
  On 2/22/2025 at 2:02 PM, sheson said:

I suggest to test both options once you created a larger list of references that you want to disable. PosR and PosA are easily searched and replaced.

If disabling references for trees, the test should include standard tree LOD to see if changing x, y triggers stuck tree LOD.
If disabling references for statics and movable statics, it should include checking for additional large reference bugs caused by changing cells.

Might be easier to just make a feature request.

Expand  

I tested PosA with standard lod and new generated lod. No difference with PosR, so visually it's good. I also disabled some static objects like a small stone wall (from Northern Roads Clutter Only) and didn't find additional large reference bugs in logs. That means for now PosA(0.0,0.0,-30000.0),flags(0x00000800) would be the best option? Until the script is released or BOS supports something like PosX, etc.

  On 2/23/2025 at 1:49 AM, PRieST said:

And the second one is the BOS equivalent to the 'initially disabled and set Z position to -30000 (with all other values copied from the plugin, so posA can be used) - ready to copy it from the info tab into any _SWAP.ini:

Expand  

Looking forward for the script, will it support a list of IDs as input?

  • 0
Posted (edited)
  On 2/23/2025 at 6:22 PM, JumpingBoat35434 said:

Looking forward for the script, will it support a list of IDs as input?

Expand  

Right now the output looks this way in the xEdit info tab (from all valid selected records):

Copy between this >>
0x23818~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x23819~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x2382C~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x2382E~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x23832~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x2CC60~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
<< and this

If you have a _SWAP.ini ready you just need to copy this under [Transforms].
or you need to create a new one (example_SWAP.ini) and write [Transforms] first and than copy the output into it as well.

So for example, if you want to hide everything in the quasmoke cell, it took only seconds to create a new swap file (I attached the example).

dont_SWAP.iniFetching info...

Edit: made the format (hopefully) even more readable/informative:

;WhiterunWindDistrict03 (Cell: 0001A275)
0x805~test.esp|posA(0,0,-30000),flags(0x00000800)
0x804~test.esp|posA(0,0,-30000),flags(0x00000800)
0x23805~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x23612~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)

;(Cell: 0001A273)
0x803~test.esp|posA(0,0,-30000),flags(0x00000800)
0x802~test.esp|posA(0,0,-30000),flags(0x00000800)
0x23811~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x23810~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)

;WhiterunSkyforge (Cell: 0001A272)
0x801~test.esp|posA(0,0,-30000),flags(0x00000800)
0x800~test.esp|posA(0,0,-30000),flags(0x00000800)
0x10E42E~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)
0x10E42D~Skyrim.esm|posA(0,0,-30000),flags(0x00000800)

Added a line above every group of entries so you see from which parent cell (with formID if available) the records are from.

Edit2:
It's now published: xEdit Scripts - ESP to BOS _SWAP.ini

Edited by PRieST

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

By using this site, you agree to our Guidelines, Privacy Policy, and Terms of Use.