Jump to content

[WIPz] TES5Edit


zilav

Recommended Posts

The UI seems to be a lot slower in the latest release, particularly when scrolling through worldspace records.

Link to comment
Share on other sites

The UI seems to be a lot slower in the latest release, particularly when scrolling through worldspace records.

That's strange, there were no changes that could do that. Even the new "stick to" option does nothing unless you enable it manually.

If you have mods that contain a lot of records referencing them, then scrolling will be slower due to updates of "Referenced by" list.

Link to comment
Share on other sites

That's strange, there were no changes that could do that. Even the new "stick to" option does nothing unless you enable it manually.

If you have mods that contain a lot of records referencing them, then scrolling will be slower due to updates of "Referenced by" list.

 

I haven't looked at the source, but is xEdit preloading the Referenced By tab?

 

If so, I think there are two versions of an optimization you could do:

  • only count the number of references, don't preload the data into the control, and load the data into the control only when the user accesses the tab; or
  • determine whether there is at least one reference, replace the count with an asterisk to indicate that there are references, don't preload the data into the control, and load the data and update the count only when the user accesses the tab.

I'm not sure how much of an optimization that would be though.

Link to comment
Share on other sites

Too awhile to get back to this, but your updates to the Tree LOD script fixed the problem I was having in Shor's Stone. So thanks, and you should stick that in the next xEdit update :P

Link to comment
Share on other sites

GAH! Actually nevermind, that didn't help one bit. Something else is going on here and I can't figure it out. Are trees not using the same quad map that object LOD uses or something?

 

If I regenerate ALL tree LOD for Tamriel, patch it with your updated script, then load the game the LOD in front of the spot I saved is correct.

 

If I then delete all tree LOD from my folder except for the two that should be in the quad affected by this, the tree LOD is wrong and they're sitting well above ground level. I don't get it. Any idea how I'd go about determining which files are actually correct for the area I'm editing?

 

EDIT: Is there any possible way to manually edit the data in these BTT files?

Link to comment
Share on other sites

Ok. I figured it out. Sort of. After getting progressively more annoyed at the tree thing, I decided to go grab the vanilla one from the Skyrim BSA. Dropped that into the folder. Edited your tree script to simply write back values for every form ID except the 5 I needed to change, which I then let it change according to the logic you have established.

 

That worked. The distance view is now correct and the 5 trees I actually touched are correctly handled as far as I can see.

 

So I decided to throw out the file (after copying it to my distro folder for the mod of course) and start from scratch. I popped open the CK, generated tree LOD for a strictly vanilla data set. Dumped all but the one file I was testing. Ran your script on the newly generated CK file. Sure enough, tree LOD not where it belongs, sitting far too high above the ground.

 

I saved the output of each of these to a text file. The vanilla file I hacked to change 5 trees has one set of values for the "Rot" while the vanilla one has an entirely different set and the errant LOD *ONLY* shows up after running your script on the file, not before. So something about how the "Rot" is being handled, at least for this quad (filename Tamriel.4.40.-16.BTT) isn't being handled right. I couldn't tell you what though cause it doesn't look to me like you're actually changing that but it's hard for me to know.

 

for reference, this is what I did to the script you gave me:

      for t := 1 to NumTrees do begin

        x := reader.ReadSingle;

        y := reader.ReadSingle;

        z := reader.ReadSingle;

        rot := reader.ReadSingle;

        scale := reader.ReadSingle;

        formid := reader.ReadInteger;

        f := FileByLoadOrder(formid shr 24);

        r := RecordByFormID(f, LoadOrderFormIDtoFileFormID(f, formid), false);

        if not Assigned(r) then begin

          AddMessage('Can''t locate record with formid=' + IntToHex(formid, 8));

          Result := False;

          Exit;

        end else

        if (Signature(r) <> 'REFR') or (Signature(LinksTo(ElementBySignature(r, 'NAME'))) <> 'TREE') then begin

          AddMessage('Record with formid=' + IntToHex(formid, 8) + ' in BTT file is not a reference of TREE');

          Result := False;

          Exit;

        end else

        begin

          AddMessage('Int: ' + IntToStr(formid) + ' FormID: ' + IntToHex(formid, 8) + ' X: ' + IntToStr(x) + ' Y: ' + IntToStr(y) + ' Z: ' + IntToStr(z) + ' Rot: ' + IntToStr(rot) + ' Scale: ' + IntToStr(scale) + '');

          if( formid = 674507 ) or ( formid = 674508 ) or ( formid = 674511 ) or ( formid = 674512 ) or ( formid = 674513 ) then begin

            AddMessage('I found one of the ones you want!');

             r := WinningOverride(r);

             x := GetElementNativeValues(r, 'DATA\Position\X');

             y := GetElementNativeValues(r, 'DATA\Position\Y');

             z := GetElementNativeValues(r, 'DATA\Position\Z');

             if ElementExists(r, 'XSCL') then scale := GetElementNativeValues(r, 'XSCL') else scale := 1.0;

          end;

        end;

        writer.WriteSingle(x);

        writer.WriteSingle(y);

        writer.WriteSingle(z);

        writer.WriteSingle(rot);

        writer.WriteSingle(scale);

        writer.Write(formid);

        writer.Write(reader.ReadInteger); // unknown int

        writer.Write(reader.ReadInteger); // unknown int

      end;

 

 

These are the files that the hacks produced to check with:

 

BTTOutputTest.7z

Link to comment
Share on other sites

I am using the Fo4Edit -View -Saves option and I want to look for properties that a script added to the save. The FormID in question is 00106DA2.  So what should have happened is a mod added a FLST to that FormID.  For example it has 12 entries, the script ran, and now there are 13 entries in the Form List.  Where do I look for that?  Changed Forms, or FormIDs?  Can I filter for that or search of it?

Link to comment
Share on other sites

Rot value isn't used at all by LOD since billboards are flat images and changing their rotation does nothing. I don't remeber now, but TES5LODGen even leaves it at 0 for all trees or fills with random angle.

The script also doesn't handle Rot, it reads and writes it back unchanged as is.

 

Compare LST files from vanilla game and after your generation, they must be identical otherwise you can't interchange BTT files. Maybe you have non vanilla _lod_flat.nif file that alters tree LOD generation in CK.

Link to comment
Share on other sites

I don't have any tree LOD meshes installed at all. Only whatever the CK comes with. I can see your code says it doesn't mess with the "Rot" value, whatever those mean, but nonetheless, running the file through the script produced a list of Rot values that were wrong and that file with the wrong values in it is what caused the incorrect tree height issue.

 

I'm not even using an LST file so I have no idea what role that plays and all my tree LOD for every other village mod works fine. I really don't know how much more information I can give you to show that SOMETHING is obviously going wrong. Worst case though, I at least know how to dance around it if I ever run into this again.

Link to comment
Share on other sites

I'm not even using an LST file so I have no idea what role that plays and all my tree LOD for every other village mod works fine. I really don't know how much more information I can give you to show that SOMETHING is obviously going wrong. Worst case though, I at least know how to dance around it if I ever run into this again.

Rot value isn't used so it doesn't matter.

I know what is wrong here - the CK. I forgot it's bugged overcomplicated LOD generation like a bad dream :imp:

Link to comment
Share on other sites

Well either way, I managed to poke it into submission.

 

Probably a far fetched request, but would it ever be possible to offer some way to manually edit the contents of a BTT and then simply write the modified data back when you're done?

Link to comment
Share on other sites

Well either way, I managed to poke it into submission.

 

Probably a far fetched request, but would it ever be possible to offer some way to manually edit the contents of a BTT and then simply write the modified data back when you're done?

There was a template for 101 Editor http://www.sweetscape.com/010editor/ to browse and edit btt files on official forum, but since Search doesn't work there it would be hard to find now.

Link to comment
Share on other sites

There was a template for 101 Editor http://www.sweetscape.com/010editor/ to browse and edit btt files on official forum, but since Search doesn't work there it would be hard to find now.

 

The old official forum? Search works there, but you have to log in. You can also search the new official forum, but the search engine sucks.

 

http://forums.bethsoft.com/topic/1368378-tree-lod-btt-files-%E2%80%93-finding-a-solution-to-wall-of-trees-32-cell-problem/page-2?hl=%2B010+%2Btemplate#entry22012841

Link to comment
Share on other sites

I am using the Fo4Edit -View -Saves option and I want to look for properties that a script added to the save. The FormID in question is 00106DA2.  So what should have happened is a mod added a FLST to that FormID.  For example it has 12 entries, the script ran, and now there are 13 entries in the Form List.  Where do I look for that?  Changed Forms, or FormIDs?  Can I filter for that or search of it?

 

Unfortunately the display is pretty useless for forms. I need to restart working on that. And I did not look at all at the filtering possibilities.

 

My recommendation here would be to xDump your save (using -df:42 to restrict data to FormList).

Link to comment
Share on other sites

Unfortunately the display is pretty useless for forms. I need to restart working on that. And I did not look at all at the filtering possibilities.

 

My recommendation here would be to xDump your save (using -df:42 to restrict data to FormList).

 

Would I use "fo4dump.exe -Saves -df:42" or what would I rename dump to?

Link to comment
Share on other sites

This will work, but only once I actually decode FLST changed forms. I never remember I did do any forms yet in saves. Theatrically there are only 2 record there and the first is the flags that is common to all forms.

 

EDIT: Definition updated. You can try compiling now.

Link to comment
Share on other sites

Could any of you (zilav ? :P  ) provide some kind of IDLE explorer via a script since it's impossible to browse those in the CK ?

 

Essentially grouping those belonging to the same .hkx, and linking sub/roots/action under some kind of tree.

 

 

Whenever you have time and motivation for this obviously, that would just make the whole group a bit easier to apprehend.

 

Edit : Nvm, the Idle Animations interface of the CK is actually good enough. would be nice to have a per-folder split, but that's good enough.

Link to comment
Share on other sites

I have a script that changes the Form ID of a record based on the Next Object ID. 
 
Is there a way to tell xEdit to update linked records with the new Form ID when using SetLoadOrderFormID (similar to the Change Form ID dialog)?
 
edit: This doesn't seem to work with VMAD references. VMAD retains the old Form ID.

	for i := 0 to ReferencedByCount(e) - 1 do
		CompareExchangeFormID(ReferencedByIndex(e, i), iOldFormID, iNewFormID);
	SetLoadOrderFormID(e, iNewFormID); 

edit: I tried logging the process:

Updating: Vault111OverseersTerminal [TERM:000A0F1C] <- Override
Updating: [:00000000] <- QUST VMAD 

edit: Not running CompareExchangeFormID yielded the right output:

Updating: Vault111OverseersTerminal [TERM:000A0F1C]
Updating: dubhAutoLootHolotapeQuest [QUST:01001014] 

edit: So, I guess I have to store this information in a list before working on it.
 
edit: LOL. Now it's not updating Ref[0].

Applying script...
Updating: Vault111OverseersTerminal [TERM:000A0F1C]
Updating: dubhAutoLootHolotapeQuest [QUST:01001014]
[Apply Script done]  Processed Records: 1, Elapsed Time: 00:00
[00:00] Checking for Errors in [01] Auto Loot.esp
[00:00] Vault111OverseersTerminal "Overseer's Terminal" [TERM:000A0F1C]
[00:00]     TERM \ Items \ Item \ CNTO - Item \ Item -> [01001013] < Error: Could not be resolved >
[00:00] All Done!

edit: The problem was twofold. I was setting the old Form ID with FormID() instead of GetLoadOrderFormID(), and I wasn't looping through the references in reverse.
 
This works:

	iOldFormID := GetLoadOrderFormID(e);
	iNewFormID := StrToInt64('$' + sLoadOrder + sNextObjectID);

	for i := Pred(ReferencedByCount(e)) downto 0 do
		CompareExchangeFormID(ReferencedByIndex(e, i), iOldFormID, iNewFormID);

	SetLoadOrderFormID(e, iNewFormID);
Link to comment
Share on other sites

fireundubh: You should view the source code of merge plugins and my experimental FormID compacting script.  You need to also adjust the formIDs of overrides and there's a complete function in there for handling the renumbering of a FormID including all of its references and overrides.  Note that when changing the FormIDs of overrides you'll get injected messages, and there doesn't seem to be a way to avoid it.

 

https://www.reddit.com/r/skyrimmods/comments/4kxfo8/psa_compacting_form_id_space_research/

Link to comment
Share on other sites

xEdit doesn't renumber FormIDs of overrides as Mator mentioned. I added it to GUI renumbering only recently by request, however scripts call engine functions directly and hence my GUi code is bypassed anyway. You have to handle overrides yourself.

Link to comment
Share on other sites

Zilav I am currently using the update 3.1.3 of xEdit provided on FO4 Nexus ( FO4Edit 3.1.3 - bec9ac9 ) ..

 

For UDRs and ITMs in Skyrim Master files

 

Checking the results of my cleaning guide, the UDRs and ITMs still tally correct

 

But the resulting file CRCs have all changed compaired with the last time I checked - Is this to be expected ?

 

Old results

 

gallery_1652_58_24372.png

 

New results

 

Dc1BULj.png

Link to comment
Share on other sites

I changed what is included into ONAMs, xEdit had been doing it slightly wrong. Overridden persistent refs should not be included, but since the game loads all of them anyway I doub't it really matters.

It is still a mystery what do they actually do.

Link to comment
Share on other sites

Okay I roughly understand what that is about, thank you for clearing it up, I thought I had missed a step in the automated cleaning process or something ( which did not make sense because I would not make such a mistake repeatedly in this process, especially when trying to keep the guide 100% accurate with current software versions in use ) :)

Link to comment
Share on other sites

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
×
×
  • Create New...