Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Random names not transferring/copying #501

Open
dystopiat opened this issue Dec 1, 2024 · 10 comments
Open

Random names not transferring/copying #501

dystopiat opened this issue Dec 1, 2024 · 10 comments

Comments

@dystopiat
Copy link

Confirmed in 0.32.1 build.

I've noticed this with the past several builds, although I cannot say when it started, or if it has always been present.

I'm using Synthesis for Skyrim VR.

When the object/npc name is missing, the object or corpse cannot be interacted with. If it is a book, you cannot pick it up, if it is a corpse, you cannot loot it.

After much troubleshooting I finally realized that it is due to the name of the thing not existing in the final synthesis.esp output file.

This seems random and is not always occurring for the same objects each run. Other than Elder Scrolls, for which the name never transfers.

"FULL - Name" and "SHRT - Short Name" are the fields in question.

Including screenshots of the issue showing missing full names.

synthesis book
synthesis elderscroll
synthesis spriggan

@Noggog
Copy link
Member

Noggog commented Dec 3, 2024

There's been a few other users reporting similar things. If I recall, all of them have been VR? I feel like something is at play with that suite that everyone's doing.

Few questions:

Randomness

Are you certain it's different every time? For example, if you reran again, you're saying that Elder Scroll (Blood) might work that run... but then break again if run a 3rd time?

Test Tool

Can you try running a tool for me?

It's located here

You can then run it via the command line. Or, if you're using MO2 or other mod manager, you can add it as a tool to run from within the manager so it sees all your mods.

.\Path\To\Mutagen.Bethesda.Generation.Tools.exe string-source-tester -r SkyrimVR -k "01398E:Skyrim.esm" -t "Weapon" --HaltAfterRunning

Where the -k should be changed to the formID you want to test, and -t should be changed to the type of record it is (by Mutagen's naming, so Weapon, Book, etc)

It should give an output like:

Analyzing from winning override path: Update.esm => D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Update.esm
Mutagen Name field returned: Orcish Dagger
FULL record index: 14506
StringsOverlay lookup found:
  Orcish Dagger
  D:\SteamLibrary\steamapps\common\Skyrim Special Edition\Data\Skyrim - Interface.bsa\strings\update_english.strings

This is showing a lot of details of where and how the string was located

If it fails to find, say, Elder Scroll (Blood) for you, that would be a hint at what is going on

Synthesis Patch File

After a run in which you've found a record that has its name missing, have run the above tool ^.. it would be good to get a copy of your synthesis patch esp to inspect as well, if you can upload that here

@dystopiat
Copy link
Author

dystopiat commented Dec 3, 2024

It may be less random than I thought. Elder Scrolls are always an issue. But creatures and NPCs seemed random. However, it seems to always fail for Tolan from Dawnguard. But I'm getting "Could not find target type for: NPC_" when running the tool for NPCs.

When I run the tool via MO2, the window just closes, even if I remove "HaltAfterRunning" from the command.

Here's output for an Elder Scroll and a Book, each is missing it's FULL - Name and DESC - Book Text:

C:\Skyrim VR Tools, etc\MutagenGenerationTools>Mutagen.Bethesda.Generation.Tools.exe string-source-tester -r SkyrimVR -k "0F1447:Skyrim.esm" -t "Book" --HaltAfterRunning
Analyzing from winning override path: HearthFires.esm => D:\Steam\steamapps\common\SkyrimVR\Data\HearthFires.esm
Mutagen Name field returned: Solitude Home Decorating Guide
FULL record index: 67508
StringsOverlay lookup found:
Solitude Home Decorating Guide
D:\Steam\steamapps\common\SkyrimVR\Data\Strings\HearthFires_ENGLISH.STRINGS

C:\Skyrim VR Tools, etc\MutagenGenerationTools>Mutagen.Bethesda.Generation.Tools.exe string-source-tester -r SkyrimVR -k "0118F9:Dawnguard.esm" -t "Book" --HaltAfterRunning
Analyzing from winning override path: Dawnguard.esm => D:\Steam\steamapps\common\SkyrimVR\Data\Dawnguard.esm
Mutagen Name field returned: Elder Scroll (Blood)
FULL record index: 2228
StringsOverlay lookup found:
Elder Scroll (Blood)
D:\Steam\steamapps\common\SkyrimVR\Data\Strings\Dawnguard_ENGLISH.STRINGS

Github is not allowing me to upload the synthesis.esp

@dystopiat
Copy link
Author

@Noggog
Copy link
Member

Noggog commented Dec 3, 2024

Thanks for the info!

Here's output for an Elder Scroll and a Book

Is this output running through Mo2? I imagine not, if you're having issues with it closing instantly.

When I run the tool via MO2, the window just closes, even if I remove "HaltAfterRunning" from the command.

The --HaltAfterRunning is supposed to help when running through Mo2, as by default, the app will run, print its results, and then since it's done.. close the window. Adding --HaltAfterRunning makes it stay open until you press a key, letting you see the results a bit easier.

Someone else that was trying the tool for a bit said they had to create a .bat file that ran the command, and worked better for them. Make a someName.bat file, with .\Path\To\Mutagen.Bethesda.Generation.Tools.exe string-source-tester -r SkyrimVR -k "01398E:Skyrim.esm" -t "Weapon" --HaltAfterRunning, and then instruct Mo2 to run the bat file?


We'll want to run the tool on your full setup through Mo2, as that's what synth is running on.

In the meantime, I'll see about potentially making a test synthesis patcher that runs the same logic. That'll be easier to pull in and run

@Noggog
Copy link
Member

Noggog commented Dec 4, 2024

Just added this synthesis patcher:
https://github.com/Synthesis-Collective/StringLocalizationTester

Should be able to add it to your patchers list as an easy way to run the same test script.

I'd put it as the first patcher in the same group as all the rest. Make sure to set its settings to fish for the specific record you want to print information about!

@dystopiat
Copy link
Author

Thanks! I could not get the exe to work correctly even when using a .bat file and launching from MO2.

After adding the StringLocalizationTester, I've entered "0118F9" in the FormID field, which is for "Elder Scroll (Blood)."

Consistently getting the following:

Reading settings: C:\Skyrim VR Tools, etc\Synthesis.0.32.1\Data\Skyrim VR\StringLocalizationTester\settings.json
Could not find target type for: Null<Bethesda.IMajorRecordGetter>

@Noggog
Copy link
Member

Noggog commented Dec 5, 2024

Hmmm, I was able to run it with this configuration:

image
image
image

Can maybe try the orcish dagger first like I did just to see if it works ^

For your record though, did you fill out the other fields? You'll probably want to put Book in the Record Type Name and then DESC for the Subrecord Type

@dystopiat
Copy link
Author

dystopiat commented Dec 5, 2024

Test for 0118F9:Dawnguard.esm, subrecord type FULL - Name:

=============== RUNNING TEST ===============
Analyzing from winning override path: Dawnguard.esm => D:\Steam\steamapps\common\SkyrimVR\Data\Dawnguard.esm
Mutagen Name field returned:
System.ArgumentException: Type String not expected length: 11 != 4.
at Mutagen.Bethesda.Plugins.RecordType..ctor(ReadOnlySpan1 typeStr) at StringLocalizationTester.Program.Test(ModPath modPath, FormKey formKey, GameRelease release, DirectoryPath dataPath, Type targetType) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 109 at StringLocalizationTester.Program.RunPatchInternal(IPatcherState env, ILinkCache linkCache) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 65 at StringLocalizationTester.Program.RunPatch(IPatcherState2 state) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 43
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass16_02.<<AddPatch>b__0>d.MoveNext() --- End of stack trace from previous location --- at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, Nullable1 exportKey, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass45_0.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.HandleOnShutdown(Func`1 a)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass44_0.<b__1>d.MoveNext()

Test for 0118F9:Dawnguard.esm subrecord type DESC:

=============== RUNNING TEST ===============
Analyzing from winning override path: Dawnguard.esm => D:\Steam\steamapps\common\SkyrimVR\Data\Dawnguard.esm
Mutagen Name field returned:
DESC record index: 4042
System.ArgumentException: Couldnt look up index 4042
at StringLocalizationTester.Program.Test(ModPath modPath, FormKey formKey, GameRelease release, DirectoryPath dataPath, Type targetType) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 122
at StringLocalizationTester.Program.RunPatchInternal(IPatcherState env, ILinkCache linkCache) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 65
at StringLocalizationTester.Program.RunPatch(IPatcherState2 state) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 43 at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass16_02.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, Nullable1 exportKey, IFileSystem fileSystem) at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass45_0.<<Run>b__0>d.MoveNext() --- End of stack trace from previous location --- at Mutagen.Bethesda.Synthesis.SynthesisPipeline.HandleOnShutdown(Func1 a)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass44_0.<b__1>d.MoveNext()

Test for 0F1447:Skyrim.esm, subrecord type FULL - Name

=============== RUNNING TEST ===============
Analyzing from winning override path: HearthFires.esm => D:\Steam\steamapps\common\SkyrimVR\Data\HearthFires.esm
Mutagen Name field returned:
System.ArgumentException: Type String not expected length: 11 != 4.
at Mutagen.Bethesda.Plugins.RecordType..ctor(ReadOnlySpan1 typeStr) at StringLocalizationTester.Program.Test(ModPath modPath, FormKey formKey, GameRelease release, DirectoryPath dataPath, Type targetType) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 109 at StringLocalizationTester.Program.RunPatchInternal(IPatcherState env, ILinkCache linkCache) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 65 at StringLocalizationTester.Program.RunPatch(IPatcherState2 state) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 43
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass16_02.<<AddPatch>b__0>d.MoveNext() --- End of stack trace from previous location --- at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, Nullable1 exportKey, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass45_0.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.HandleOnShutdown(Func`1 a)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass44_0.<b__1>d.MoveNext()

Test for 0F1447:Skyrim.esm, subrecord type FULL

=============== RUNNING TEST ===============
Analyzing from winning override path: HearthFires.esm => D:\Steam\steamapps\common\SkyrimVR\Data\HearthFires.esm
Mutagen Name field returned:
FULL record index: 67508
System.ArgumentException: Couldnt look up index 67508
at StringLocalizationTester.Program.Test(ModPath modPath, FormKey formKey, GameRelease release, DirectoryPath dataPath, Type targetType) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 122
at StringLocalizationTester.Program.RunPatchInternal(IPatcherState env, ILinkCache linkCache) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 65
at StringLocalizationTester.Program.RunPatch(IPatcherState2 state) in C:\Skyrim VR Tools, etc\StringLocalizationTester-main\StringLocalizationTester\Program.cs:line 43 at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass16_02.<b__0>d.MoveNext()
--- End of stack trace from previous location ---
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, Nullable1 exportKey, IFileSystem fileSystem) at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass45_0.<<Run>b__0>d.MoveNext() --- End of stack trace from previous location --- at Mutagen.Bethesda.Synthesis.SynthesisPipeline.HandleOnShutdown(Func1 a)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.Run(RunSynthesisMutagenPatcher args, IFileSystem fileSystem)
at Mutagen.Bethesda.Synthesis.SynthesisPipeline.<>c__DisplayClass44_0.<b__1>d.MoveNext()

@dystopiat
Copy link
Author

dystopiat commented Dec 7, 2024

I've identified several projectiles that always fail to copy FULL - Name each run. Using Another-Archery-Patcher:

FULL - Name missing
DLC1BoltSteelProjectile [PROJ:02000BB4] - supersonic flag also not transferring
DLC1BoltDwarvenProjectile [PROJ:0200D09A] - supersonic flag flag also not transferring
DLC1ArrowAurielProjectile [PROJ:02015FEF]
ArrowDragonboneProjectile [PROJ:020176F3]
DCL1ArrowElvenBloodProjectile [PROJ:02018C59]
DLC2ArrowRieklingSpearProjectile [PROJ:04017721]
DLC2ArrowNordicProjectile [PROJ:0402623A]

@dystopiat
Copy link
Author

dystopiat commented Feb 4, 2025

Any progress on this?

Here's a sample of the log after checking for errors in xedit on synthesis.esp (for the patcher NPC Stat Rescaler):

[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [54] DLC2EncClassAshGuardian [CLAS:0403CF6A] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [55] DLC2EncClassSeeker [CLAS:0403C6A3] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [56] DLC2EncClassRiekling [CLAS:0403BD08] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [57] DLC2NPCClassTeldryn [CLAS:04038561] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [58] DLC2dunHaknirClass [CLAS:04037FEB] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [59] DLC2EncClassLurker [CLAS:0403183A] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [60] DLC2EbonyWarriorClass [CLAS:040285C2] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [61] DLC2dunKarstaagClass [CLAS:04028213] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [62] dlc2DBAncientDragonbornClass [CLAS:040265AF] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [63] DLC2EncClassMiraak [CLAS:04023F78] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [64] DLC2EncClassAshHopper [CLAS:04020E8A] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [65] DLC2dunKolbjornRalisClass [CLAS:040179C6] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [66] DLC2NelothClassTrainer [CLAS:04017774] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [67] DLC1EncClassDeathhound [CLAS:020145DC] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [68] DLC1CClassVyrthur [CLAS:020126B3] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [69] DLC1EncClassGargoyle [CLAS:0200D6F6] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [70] DLC1_EncClassChaurusFlyer [CLAS:02005206] \ [3] DESC - Description>
[04:14] <Warning: Unused data in: \ [70] NPCStatRescaler.esp \ [2] GRUP Top "CLAS" \ [71] DLC1EncClassKatria [CLAS:02004D0E] \ [3] DESC - Description>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants