Merge mods like never before!
TKMM is a mod manager and merger for Tears of the Kingdom developed by TKMM-Team.
A mod merger and manager for Tears of the kingdom
Home Page: https://tkmm.org
License: MIT License
Ryujinx requires all .ips filenames to be uppercase and TKMM outputs them in lowercase which will cause them to be ignored. This is not an issue with Atmosphère as far as I am aware, I do not know about Yuzu.
(forwarding on behalf of Miirkuz)
so basically i've built my mod DAR and wanted to make a compatibility patch to make DAR compatible with Challenge Mode.
one of the things that the patch contain is the chance to make Golden Enemies (from Challeng Mode) drops custom DAR items like chest keys and other stuff.
what i have noticed is that if i put my patch with higher priority than Challenge Mode, everything is merged correctly except my edits on golden enemies droptables, while if i put my patch with lower priority than Challenge Mode, droptables are merged fine but other edits on golden enemies actors are not merged.
Same thing with Mals, since both DAR and Challenge Mode change the text of 'Game Over' with 'You Died' (DAR) and with 'Defeat' (Challenge Mode), when DAR has higher priority than Challenge Mode, i would expect that when i die i see the 'You Died' text from DAR, but i got 'Defeat' from Challenge Mode.
I've put my DAR mals inside the compatibility patch, and put it with lower priority than Challenge Mode, and this fixed my problem, but i don't think that's how it supposed to be.
so to me, looks like that tkmm confuses the priority order on droptables and Mals.
Let me know what you think or if you need extra info or the mods files.
Thank you in advance and this is my e-mail: [email protected]
Melon Speedrun's randomizer completely fails to install in TKMM using any version, this was tested using a compiled version from the latest commit.
[Error] System.NotSupportedException: Deletion of array elements is not supported in DefaultValue: 1055395112 in table Enum
at TKMM.SarcTool.Core.GameDataListMerger.ReconcileChanges(Byml modified, Byml vanilla, String table) in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\GameDataList\GameDataListMerger.cs:line 702
at TKMM.SarcTool.Core.GameDataListMerger.CreateChangelog(BymlMap vanilla, BymlMap modified) in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\GameDataList\GameDataListMerger.cs:line 645
at TKMM.SarcTool.Core.GameDataListMerger.Package(Memory`1 vanillaBytes, Memory`1 modifiedBytes) in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\GameDataList\GameDataListMerger.cs:line 76
at TKMM.SarcTool.Core.SarcPackager.PackageGameDataList() in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\SarcPackager.cs:line 318
at TKMM.SarcTool.Core.SarcPackager.InternalMakePackage() in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\SarcPackager.cs:line 174
at TKMM.SarcTool.Core.SarcPackager.Package() in C:\Users\%username%\Documents\GitHub\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\SarcPackager.cs:line 112
at Tkmm.Core.Components.PackageBuilder.<>c__DisplayClass8_0`1.<CopyContentsInternal>b__2() in C:\Users\%username%\Documents\GitHub\Tkmm\src\Tkmm.Core\Components\PackageBuilder.cs:line 107
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
--- End of stack trace from previous location ---
at Tkmm.Core.Components.PackageBuilder.CopyContents[T](T item, String sourceFolder, String outputFolder) in C:\Users\%username%\Documents\GitHub\Tkmm\src\Tkmm.Core\Components\PackageBuilder.cs:line 66
Issue #10 for TKMM-SARC
I have tried these two mods in a couple ways, No World Limits 1.2.1, and Disable Healing In Combat, both of these mods contents are exclusively patch.txt files as far as I am aware, and when trying to merge any mods, at all, with these mods enabled, throw an ArgumentOutOfRange error every time.
I even tried merging only these two mods, exact same error, once disabling them, no issues with merging at all.
I really like the Gamebanana browser of the app, however it doesn't allow one to log in which can allow people to show other mods marked as NSFW or similar markings that cause it to disappear during guest view.
When a mod has options selected (tested with all 4 types of option groups), the options will not be merged into the romfs folder in the merged output folder, but stay in a separate options
folder within the target merge folder. Attached is a .ZIP containing a TKCL to test this with.
ArmorIconToolOptions001.zip
When I tried to install a folder mod it failed to install because it couldn't find /home/user/.local/share/Totk/config.json
, however the tkmm binary created files at /home/user/.local/share/totk/Config.json.
I was able to work around the issue by creating these symbolic:
ln -s ~/.local/share/totk ~/.local/share/Totk
ln -s ~/.local/share/totk/Config.json ~/.local/share/totk/config.json
There may be more instances of this, but this is what I've run into.
P.S. I've also run into an Arithmetic operation overflow during import of said mod, but one bug report at a time.
tkmm.exe and tkmm-launcher.exe fail to open. I've deleted all folders related to the applications in appdata and documents. I'm not sure if my PC is the issue or if this is a tkmm problem [.NET is installed].
When two mods with options are open on the home page, editing one will move it to the previously edited mod options.
Currently, mods without romfs
cause an exception. E.g.:
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'C:\\Users\\Mika\\AppData\\Local\\Temp\\360347ed-9b6f-44ae-86b6-91e90b84e92f\\romfs\\RSDB'
[27132] Failed to execute script 'rsdb-merge' due to unhandled exception!
[Error] System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\Users\Mika\AppData\Local\Temp\360347ed-9b6f-44ae-86b6-91e90b84e92f\romfs'.
at System.IO.Enumeration.FileSystemEnumerator`1.Init()
at System.IO.Enumeration.FileSystemEnumerableFactory.UserFiles(String directory, String expression, EnumerationOptions options)
at System.IO.Directory.InternalEnumeratePaths(String path, String searchPattern, SearchTarget searchTarget, EnumerationOptions options)
at System.IO.Directory.GetFiles(String path, String searchPattern, EnumerationOptions enumerationOptions)
at TKMM.SarcTool.Core.SarcAssembler.InternalAssemble() in C:\Users\Mika\Sources\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\SarcAssembler.cs:line 103
at TKMM.SarcTool.Core.SarcAssembler.Assemble() in C:\Users\Mika\Sources\Tkmm\lib\TKMM-SARC\TKMM.SarcTool.Core\SarcAssembler.cs:line 83
at Tkmm.Core.Components.PackageBuilder.<>c__DisplayClass8_0`1.<CopyContentsInternal>b__1() in C:\Users\Mika\Sources\Tkmm\src\Tkmm.Core\Components\PackageBuilder.cs:line 85
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread)
SarcTool, RSDB, and any other subtool that operates on romfs
should not run in cases where the mod doesn't have a romfs
folder. We should just do a straight copy over to the target by priority.
Implement a global try/catch to avoid instantly crashing when errors occur.
Upon merging one or multiple mods that contains a romfs/Pack/Bootup file, TKMM adds a copy of it in romfs/Pack/Actor.
Tested on TKMM v1.0.0-beta9.
System.IO.IOException: The process cannot access the file 'C:\Users\User\Downloads\archive.tkcl' because it is being used by another process.
at Microsoft.Win32.SafeHandles.SafeFileHandle.CreateFile(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options)
at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.SyncWindowsFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategyCore(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize, Nullable`1 unixCreateMode)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize)
at System.IO.File.Create(String path, Int32 bufferSize)
at System.IO.File.Create(String path)
at Tkmm.Core.Components.PackageBuilder.Package(String inputFolder, String outputFile) in C:\Users\User\Sources\Tkmm\src\Tkmm.Core\Components\PackageBuilder.cs:line 133
at Tkmm.ViewModels.Pages.PackagingPageViewModel.<>c__DisplayClass9_0.<<Create>b__0>d.MoveNext() in C:\Users\User\Sources\Tkmm\src\Tkmm\ViewModels\Pages\PackagingPageViewModel.cs:line 124
As soon as i start the launches, it loads a bit but then stops. I dont get a screen and there is nothing that runs in the background. I have installed net runtime(x64).
The HeadDef (
System/HeapSize/Product.Nin_NX_NVN.HeapDef.byml.zs
) file is currently being re-compressed with dictionary1
(zs.dic
).However, this file is loaded before dictionaries, so it must not use any dictionaries in the compression.
The launcher seems to startup just fine, but upon pushing the install button, it completely crashes.
Commandline Output:
ripps ~ Downloads ./tkmm-launcher
Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Tkmm.Core.Helpers.Operations.GitHubOperations.GetLatestRelease(String org, String repo, String assetName) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Helpers/Operations/GitHubOperations.cs:line 32
at Tkmm.Core.Components.AppManager.Update(Action`1 setProgress) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/AppManager.cs:line 113
at Tkmm.Launcher.ViewModels.ShellViewModel.<Primary>b__10_0() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/ViewModels/ShellViewModel.cs:line 50
at Tkmm.Launcher.ViewModels.ShellViewModel.Primary() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/ViewModels/ShellViewModel.cs:line 48
at CommunityToolkit.Mvvm.Input.AsyncRelayCommand.AwaitAndThrowIfFailed(Task executionTask)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at Avalonia.Threading.SendOrPostCallbackDispatcherOperation.InvokeCore()
at Avalonia.Threading.DispatcherOperation.Execute()
at Avalonia.Threading.Dispatcher.ExecuteJob(DispatcherOperation job)
at Avalonia.Threading.Dispatcher.ExecuteJobsCore(Boolean fromExplicitBackgroundProcessingCallback)
at Avalonia.Threading.Dispatcher.Signaled()
at Avalonia.X11.X11PlatformThreading.CheckSignaled()
at Avalonia.X11.X11PlatformThreading.RunLoop(CancellationToken cancellationToken)
at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)
at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
at Tkmm.Launcher.Program.Main(String[] args) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/Program.cs:line 13
Aborted (core dumped)
Thinking that there was slim chance this was a Wayland/X11 thing, since I saw Avalonia.X11.X11PlatformThreading in the output. I tried running it in Gamescope so it would be running in on Xwayland, however it crashed the same way:
ripps ~ Downloads 139 gamescope.nvidia -- ./tkmm-launcher
No CAP_SYS_NICE, falling back to regular-priority compute and threads.
Performance will be affected.
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
ATTENTION: default value of option vk_khr_present_wait overridden by environment.
DRM kernel driver 'nvidia-drm' in use. NVK requires nouveau.
vulkan: physical device 10de:1e84 compute queue doesn't support presenting on our surface, using graphics queue
vulkan: selecting physical device 'NVIDIA GeForce RTX 2070 SUPER': queue family 0 (general queue family 0)
vulkan: physical device supports DRM format modifiers
wlserver: [backend/headless/backend.c:67] Creating headless backend
vulkan: vkGetPhysicalDeviceFormatProperties2 returned zero modifiers for DRM format 0x38344241 (VkResult: 0)
vulkan: vkGetPhysicalDeviceFormatProperties2 returned zero modifiers for DRM format 0x38344258 (VkResult: 0)
vulkan: supported DRM formats for sampling usage:
vulkan: AR24 (0x34325241)
vulkan: XR24 (0x34325258)
vulkan: AB24 (0x34324241)
vulkan: XB24 (0x34324258)
vulkan: RG16 (0x36314752)
vulkan: NV12 (0x3231564E)
vulkan: AB4H (0x48344241)
vulkan: XB4H (0x48344258)
vulkan: AB30 (0x30334241)
vulkan: XB30 (0x30334258)
vulkan: AR30 (0x30335241)
vulkan: XR30 (0x30335258)
vulkan: Creating Gamescope nested swapchain with format 64 and colorspace 0
wlserver: Running compositor on wayland display 'gamescope-0'
wlserver: [backend/headless/backend.c:17] Starting headless backend
wlserver: [xwayland/sockets.c:63] Failed to bind socket @/tmp/.X11-unix/X0: Address already in use
wlserver: [xwayland/server.c:108] Starting Xwayland on :2
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning: Could not resolve keysym XF86CameraAccessEnable
> Warning: Could not resolve keysym XF86CameraAccessDisable
> Warning: Could not resolve keysym XF86CameraAccessToggle
> Warning: Could not resolve keysym XF86NextElement
> Warning: Could not resolve keysym XF86PreviousElement
> Warning: Could not resolve keysym XF86AutopilotEngageToggle
> Warning: Could not resolve keysym XF86MarkWaypoint
> Warning: Could not resolve keysym XF86Sos
> Warning: Could not resolve keysym XF86NavChart
> Warning: Could not resolve keysym XF86FishingChart
> Warning: Could not resolve keysym XF86SingleRangeRadar
> Warning: Could not resolve keysym XF86DualRangeRadar
> Warning: Could not resolve keysym XF86RadarOverlay
> Warning: Could not resolve keysym XF86TraditionalSonar
> Warning: Could not resolve keysym XF86ClearvuSonar
> Warning: Could not resolve keysym XF86SidevuSonar
> Warning: Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server
wlserver: [types/wlr_compositor.c:692] New wlr_surface 0x5613adc6d890 (res 0x5613adc47780)
wlserver: [xwayland/server.c:273] Xserver is ready
pipewire: stream state changed: connecting
pipewire: stream state changed: paused
pipewire: stream available on node ID: 113
vblank: Using timerfd.
vulkan: Creating Gamescope nested swapchain with format 64 and colorspace 0
pipewire: renegotiating stream params (size: 1920x1080)
wlserver: [types/wlr_compositor.c:692] New wlr_surface 0x5613adcd4bf0 (res 0x5613adc6ad90)
xwm: got the same buffer committed twice, ignoring.
The XKEYBOARD keymap compiler (xkbcomp) reports:
> Warning: Unsupported maximum keycode 708, clipping.
> X11 cannot support keycodes above 255.
> Warning: Could not resolve keysym XF86CameraAccessEnable
> Warning: Could not resolve keysym XF86CameraAccessDisable
> Warning: Could not resolve keysym XF86CameraAccessToggle
> Warning: Could not resolve keysym XF86NextElement
> Warning: Could not resolve keysym XF86PreviousElement
> Warning: Could not resolve keysym XF86AutopilotEngageToggle
> Warning: Could not resolve keysym XF86MarkWaypoint
> Warning: Could not resolve keysym XF86Sos
> Warning: Could not resolve keysym XF86NavChart
> Warning: Could not resolve keysym XF86FishingChart
> Warning: Could not resolve keysym XF86SingleRangeRadar
> Warning: Could not resolve keysym XF86DualRangeRadar
> Warning: Could not resolve keysym XF86RadarOverlay
> Warning: Could not resolve keysym XF86TraditionalSonar
> Warning: Could not resolve keysym XF86ClearvuSonar
> Warning: Could not resolve keysym XF86SidevuSonar
> Warning: Could not resolve keysym XF86NavInfo
Errors from xkbcomp are not fatal to the X server
Unhandled exception. System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at System.Collections.Generic.List`1.get_Item(Int32 index)
at Tkmm.Core.Helpers.Operations.GitHubOperations.GetLatestRelease(String org, String repo, String assetName) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Helpers/Operations/GitHubOperations.cs:line 32
at Tkmm.Core.Components.AppManager.Update(Action`1 setProgress) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/AppManager.cs:line 113
at Tkmm.Launcher.ViewModels.ShellViewModel.<Primary>b__10_0() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/ViewModels/ShellViewModel.cs:line 50
at Tkmm.Launcher.ViewModels.ShellViewModel.Primary() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/ViewModels/ShellViewModel.cs:line 48
at CommunityToolkit.Mvvm.Input.AsyncRelayCommand.AwaitAndThrowIfFailed(Task executionTask)
at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)
at Avalonia.Threading.SendOrPostCallbackDispatcherOperation.InvokeCore()
at Avalonia.Threading.DispatcherOperation.Execute()
at Avalonia.Threading.Dispatcher.ExecuteJob(DispatcherOperation job)
at Avalonia.Threading.Dispatcher.ExecuteJobsCore(Boolean fromExplicitBackgroundProcessingCallback)
at Avalonia.Threading.Dispatcher.Signaled()
at Avalonia.X11.X11PlatformThreading.CheckSignaled()
at Avalonia.X11.X11PlatformThreading.RunLoop(CancellationToken cancellationToken)
at Avalonia.Threading.DispatcherFrame.Run(IControlledDispatcherImpl impl)
at Avalonia.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at Avalonia.Threading.Dispatcher.MainLoop(CancellationToken cancellationToken)
at Avalonia.Controls.ApplicationLifetimes.ClassicDesktopStyleApplicationLifetime.Start(String[] args)
at Tkmm.Launcher.Program.Main(String[] args) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Launcher/Program.cs:line 13
xwm: error 3: BadWindow (invalid Window parameter) request 15 minor 0 serial 1256
gamescope: children shut down!
(EE) failed to read Wayland events: Broken pipe
I can try on a real X11 display server later, but I have feeling that this isn't the problem.
No matter what i try i get errors, this is the current error i got after trying to install a mod. game version is 1.2.1
[Error] System.ArgumentOutOfRangeException: Index was out of range. Must be non-negative and less than the size of the collection. (Parameter 'index')
at RsdbMerger.Core.Mergers.RsdbUniqueRowMerger.LogRowChanges(BymlArray vanillaRows, Byml row, UInt64 rsdbNameHash, Int32 version) in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Mergers/RsdbUniqueRowMerger.cs:line 78
at RsdbMerger.Core.Mergers.RsdbUniqueRowMerger.CreateChangelog(ReadOnlySpan1 canonical, ArraySegment
1 data, RsdbFile target, Stream output) in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Mergers/RsdbUniqueRowMerger.cs:line 38
at RsdbMerger.Core.Services.RsdbChangelogService.CreateChangelog(RsdbFile target, ArraySegment1 data) in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Services/RsdbChangelogService.cs:line 82 at RsdbMerger.Core.Services.RsdbChangelogService.CreateChangelog(RsdbFile target) in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Services/RsdbChangelogService.cs:line 69 at RsdbMerger.Core.Services.RsdbChangelogService.<CreateChangelogsAsync>b__5_0(RsdbFile target, CancellationToken cancellationToken) in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Services/RsdbChangelogService.cs:line 54 at System.Threading.Tasks.Parallel.<>c__53
1.<b__53_0>d.MoveNext()
--- End of stack trace from previous location ---
at RsdbMerger.Core.Services.RsdbChangelogService.CreateChangelogsAsync() in /home/runner/work/Tkmm/Tkmm/lib/RsdbMerger/src/RsdbMerger.Core/Services/RsdbChangelogService.cs:line 53
at Tkmm.Core.Components.PackageBuilder.<>c__DisplayClass8_0`1.<b__1>d.MoveNext() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/PackageBuilder.cs:line 94
--- End of stack trace from previous location ---
at Tkmm.Core.Components.PackageBuilder.CopyContents[T](T item, String sourceFolder, String outputFolder) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/PackageBuilder.cs:line 66
Within UI\LayoutArchive\Common.Product.110.Nin_NX_NVN.blarc.zs
, the majority of the .bflyt
and .bflan
are stored. These are the layouts and layout animations. Even if a given one of these files is unmodified, it is read as a modified file. Since there's no library for merging layouts and their animations, they are priority based, so if two mods edit layouts, only the mod with the higher priority will have the modified layout applied, since its vanilla layout files have higher priority than the lower mod's modded layout file. Attached is a zip containing a mod that edits a layout file, specifically Pouch_00.bflyt
.
ArmorIconToolOptions001.zip
On the master mod list, the uninstall button cannot be clicked if the mod is selected.
Arch Linux with TKMM 1.0.0-beta6, running through XWayland on Hyprland
When drag-and-dropping files on the below area, nothing happens. This has been tried with both Nautilus and Dolphin file managers.
It's probably something to do with Linux on my end, but I think a different form of input like adding a text input would be a nice addition that would solve this. Another idea is making it so pressing on the area would open a file dialogue on its own, as that seemed to work fine in the setup process.
I keep getting this error when merging and I can't figure out the cause
[Error] System.FormatException: The input string '@k' was not in a correct format.
at System.Number.ThrowFormatException[TChar](ReadOnlySpan1 value) at System.Byte.Parse(ReadOnlySpan
1 s, NumberStyles style, IFormatProvider provider)
at IPS.NET.Core.Converters.PchtxtToIPS.ConvertPchtxtToIps(ReadOnlySpan`1 text, Stream output) in /home/runner/work/Tkmm/Tkmm/lib/IPS.NET/IPS.NET.Core/Converters/PchtxtToIPS.cs:line 103
at Tkmm.Core.Components.Mergers.ExefsMerger.Merge(IModItem[] mods, String output) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/Mergers/ExefsMerger.cs:line 91
at Tkmm.Core.Services.MergerService.MergeAsync(IModItem[] mods, String output) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Services/MergerService.cs:line 70
at Tkmm.Core.Services.MergerService.<>c__DisplayClass4_0.<b__2>d.MoveNext() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Services/MergerService.cs:line 57
--- End of stack trace from previous location ---
at Tkmm.Core.Services.MergerService.Merge(Profile profile, String output) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Services/MergerService.cs:line 55
at Tkmm.Core.Services.MergerService.Merge() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Services/MergerService.cs:line 23
at Tkmm.Helpers.MergerOperations.Merge() in /home/runner/work/Tkmm/Tkmm/src/Tkmm/Helpers/MergerOperations.cs:line 15
This should be added to the setup docs, and a proper error should be given to the user when this error occurs.
(copied exactly from the discord bug report bc I figured I should probably actually open a github issue lol, only thing is github doesn't support byml files so I can't upload the actual file in the issue)
I'd open an issue on GitHub, but skimming through both RsdbMerger and BymlLibrary, I couldn't quite tell where the issue could be coming from. It seems that when merging PouchActorInfo files for certain mods, the merger will output a file with node type 0xFE for certain IsUsable nodes (supposed to be 0xD0 for bool). This can occur when merging a mod with itself (such as merging Cook Or Die with itself) or when merging different mods together. This issue is present in both the changelog and the output file (sample file attached). While this does not cause the game to crash, it can lead to unintended behavior as the game will default to false for these invalid nodes even if they are intended to be set to true. It also makes editing the merged files impossible as tools will fail to parse the files. I've also attached an image with the locations of the invalid nodes in the sample file for reference. As far as I can tell, this only occurs for IsUsable nodes for some reason.
This issue is caused when running via the launcher or with elevated permissions.
The drag/drop client fails because TKMM is a higher elevation than file explorer.
The ideal solution is to run the launcher without admin, however, if this is not forced when installing/updating things will break.
For the Required
option group types, it always selects only the one at the top, whatever else we toggle gets unselected and it does not save it. It appears to be due to this bit of code here (on lines 18 and 20).
When we remove SelectionMode.AlwaysSelected
the problem disappears, but it also gets rid of what handles the need for those group types to always have at least one option selected
If a mod like UltraCam (https://gamebanana.com/mods/480138) has an exefs
folder with main.npdm
and subsdk3
inside, and another mod like Kingdom Rebalance (https://gamebanana.com/mods/478892) has a few .pchtxt files inside, the final Merged Output
folder won't include the .pchtxt files. They have to be copied-in manually after the fact.
This is on Windows btw, in case it matters.
if i start TKMM i get this error message:
Unhandled exception. System.TypeInitializationException: The type initializer for 'Tkmm.Core.Components.AppManager' threw an exception.
---> System.TypeInitializationException: The type initializer for 'ConfigFactory.Core.ConfigModule1' threw an exception. ---> System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0. at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan
1 bytes)
at System.Text.Json.Utf8JsonReader.Read()
at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex) at System.Text.Json.Serialization.JsonConverter
1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.ContinueDeserialize(ReadBufferState& bufferState, JsonReaderState& jsonReaderState, ReadStack& readStack) at System.Text.Json.Serialization.Metadata.JsonTypeInfo
1.Deserialize(Stream utf8Json)
at ConfigFactory.Core.ConfigModule1.Load(T& module) at ConfigFactory.Core.ConfigModule
1.<>c.<.cctor>b__43_0()
at System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy
1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy1.CreateValue() at ConfigFactory.Core.ConfigModule
1..cctor()
--- End of inner exception stack trace ---
at ConfigFactory.Core.ConfigModule1.get_Shared() at Tkmm.Core.Components.AppManager..cctor() in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/AppManager.cs:line 29 --- End of inner exception stack trace --- at Tkmm.Core.Components.AppManager.Start(String[] args, Func
2 attach) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Core/Components/AppManager.cs:line 41
at Tkmm.Desktop.Program.Main(String[] args) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Desktop/Program.cs:line 23
How can i fix it?
When updating a mod, it is installed twice in the master mod collection.
Uninstalling the second throws an error (folder not found, because it was uninstalled already); same folder, different listing.
I just installed TKMM, and it doesn't want to run at all. No console or exceptions. Windows 11 64bit. with required .nET downloaded and installed as well.
tkmm dosen't open for some reason it says this:
System.TypeInitializationException: The type initializer for 'ConfigFactory.Core.ConfigModule1' threw an exception. ---> System.Text.Json.JsonException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. Path: $ | LineNumber: 0 | BytePositionInLine: 0. ---> System.Text.Json.JsonReaderException: The input does not contain any JSON tokens. Expected the input to start with a valid JSON token, when isFinalBlock is true. LineNumber: 0 | BytePositionInLine: 0. at System.Text.Json.ThrowHelper.ThrowJsonReaderException(Utf8JsonReader& json, ExceptionResource resource, Byte nextByte, ReadOnlySpan
1 bytes)
at System.Text.Json.Utf8JsonReader.Read()
at System.Text.Json.Serialization.JsonConverter1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, JsonReaderException ex) at System.Text.Json.Serialization.JsonConverter
1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state)
at System.Text.Json.Serialization.Metadata.JsonTypeInfo1.ContinueDeserialize(ReadBufferState& bufferState, JsonReaderState& jsonReaderState, ReadStack& readStack) at System.Text.Json.Serialization.Metadata.JsonTypeInfo
1.Deserialize(Stream utf8Json)
at ConfigFactory.Core.ConfigModule1.Load(T& module) at ConfigFactory.Core.ConfigModule
1.<>c.<.cctor>b__43_0()
at System.Lazy1.ViaFactory(LazyThreadSafetyMode mode) at System.Lazy
1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)
at System.Lazy1.CreateValue() at ConfigFactory.Core.ConfigModule
1..cctor()
--- End of inner exception stack trace ---
at ConfigFactory.Core.ConfigModule1.get_Shared() at Tkmm.App.OnFrameworkInitializationCompleted() in /home/runner/work/Tkmm/Tkmm/src/Tkmm/App.axaml.cs:line 119 at Avalonia.AppBuilder.SetupUnsafe() at Avalonia.AppBuilder.Setup() at Avalonia.AppBuilder.SetupWithLifetime(IApplicationLifetime lifetime) at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime(AppBuilder builder, String[] args, Action
1 lifetimeBuilder)
at Tkmm.Desktop.Program.Main(String[] args) in /home/runner/work/Tkmm/Tkmm/src/Tkmm.Desktop/Program.cs:line 28
If the TKMM Launcher associated TKCL files with TKMM during installation, it would make it easier for end-users to install mods from a TKCL from their system's file browser
((forwarded from echo))
When merging an option that contains a Mals file, the base mod's Mals file will be merged with a higher priority than the option leading to any changes in the option's Mals being ignored.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.