Releases: cmkushnir/NMSModBuilder
Releases · cmkushnir/NMSModBuilder
4.0.0.0
- change:
- enable code to convert glsl to spv in cmk.NMS.PAK.SPV.Data class.
ShaderStages is set based on the name containing "COMP", "VERT", or "FRAG".
Options are set to preserve debug info, but no MacroDefinition have been specified (any needed ?).
experimental at this point, but does round-trip spv glsl text. - Text search tab uses cmk.NMS.PAK.SPV.RawToTextVeldridCompute and PAK Item view tab
and scripts use cmk.NMS.PAK.SPV.RawToTextSpirvCross. This allows text search tab to use
quick dll based decompile, while pak item tab and scripts use accurate spirv-cross.
The differences are minor in the output, but enough to prevent Vedrid from recompiling its
own output by default (possibly since game spv are 450 and Veldrid only outputs 430).
- enable code to convert glsl to spv in cmk.NMS.PAK.SPV.Data class.
- add:
- spv specific syntax highlight rules based on csx rules.
todo: tweak for glsl specific things. - cmk.NMS.PAK.SPV has new method SetMain(string) that will replace void main() { string }.
- spv specific syntax highlight rules based on csx rules.
- update:
- mbinc field names e.g. Id to ID, TechType to Type, ...
- scripts, focus on getting to compile and execute, not correctness
- MS Roslyn NuGet package from 4.3.0 to 4.3.1.
- libmbin.dll 4.0.0.2
3.99.1.8
3.99.1.8
- change:
- wrap MessageBox.Show calls so they are executed from app MainWindow thread (ui),
and use app MainWindow as owner (to prevent opening behind MainWindow). - add sleep call before deciding if need to delete associated mod script folder,
hopefully this will allow external app saves to finish first. - add cancel option when prompted to save|move mod script folder on mod script delete,
for cases where you know external app save takes a long time. - support for converting .spv to glsl (v 430) text using Veldrid.SPIRV,
searching all 59223 spv's goes from 6 min (using spirv-cross.exe) to 35 sec (using Veldrid.SPIRV dll's).
- wrap MessageBox.Show calls so they are executed from app MainWindow thread (ui),
- add:
- scripts can call ProgressReport(string) to update a toolbar TextBlock control.
only query scripts can use in any meaningful way.
see: new Search_SPV query script for example. - new toggle to search .SPV items in Text Search tab.
- Veldrid.SPIRV NuGet package 1.0.15.
- scripts can call ProgressReport(string) to update a toolbar TextBlock control.
3.99.1.5
- add:
- mbin.pc search toggle added to text search tab.
mbin.pc ebin's are only cachable if >= 32 GB of physical memory. - mbin and text (*.txt, *.?xml, *.json, *.vdf, *.bin) toggles added to text search tab.
- support for viewing vdf items (value controller mappings ?)
- mbin.pc search toggle added to text search tab.
- fix:
- cmk.NMS.Game.Items.Data con wasn't setting ItemType, so all substances and technologies
were tagged as products (default value). would only affect scripts looking at ItemType. - new cache and mbin.pc button weren't disabled while search running, would hang if toggled while searching.
- cmk.NMS.Game.Items.Data con wasn't setting ItemType, so all substances and technologies
- change:
- mbin cache toggle button moved from app to text search tab.
- prompt to delete existing mod toggle button moved from app to build tab.
- search all scripts on update toggle button moved fom app to all script tabs,
setting is now per script tab instead of applying to all script tabs. - since now showing technology requirements, have changed technology tab list to be virtual.
- product and technology tab searches now include requirements (like recipe tabs)
e.g. find all products that require 'star silk' to build. - sync'd logic between recipe and item tab searches,
product and technology - searches id and name for item and all requirements,
recipe - searches id and name for recipe and all requirements, and recipe type id and name - bin items now check if the data starts with "<!-" to see if they are xml
vs other bin items that store actual binary data. - target|supported os from 10.0.22000.0 (Win11) to 10.0.19041.0 (Win10).
- update:
- Roslyn .NET compiler NuGet package from 4.2.0 to 4.3.0.
- notes:
- text search tab never searches "LANGUAGE/" mbin items, use language tab.
- product and technology tabs now complex enough that scrolling through full lists
may result in significant stuttering as ui elements get rebuilt,
suggest filtering lists first.
3.99.1.7
- fix:
- FINALLY! binding anything from a AssemblyLoadContext Assembly, e.g. ModScript instances,
to a WPF control seems to result in WPF pinning the Assembly (caches internally ?).
changed Build tab to bind to list of new entry class instances instead of ModScript instances,
this seems to allow mod assemblies to finally be released.
- FINALLY! binding anything from a AssemblyLoadContext Assembly, e.g. ModScript instances,
- change:
- remove all use of static's from included scripts i.e. util and mod,
in an attempt to prevent pinning cmk mod assemblies in memory. - Mod<script_name>() renamed to Script<script_name>().
- PlayAs<script_name>() renamed to Execute<script_name>();
- Script<> and Execute<> can now be called for any (mod) script.
- remove all use of static's from included scripts i.e. util and mod,
- add:
- ModClass class now has virtual void OnDispose() method that should be overridden
in mod classes to unhook any events they may have hooked. Failing to do this
may result in hook pinning the mod Assembly and preventing it from being unloaded.
An example of this is in the cmk/(Configure) script.
- ModClass class now has virtual void OnDispose() method that should be overridden
3.99.1.4
- fix:
- replaced Lo2K and old NMS icons with new that has 256x256 -> 16x16 mipmaps.
- change:
- Target OS and Supported OS versions changed from 7 to 10.0.22000.0 in order to use UWP dll's.
- detection of Game Pass no longer tries to read NMS.exe, instead gets game
path and version from AppX|UWP|Game Pass API and uses cmkNMSReleases.txt date.
modding Game Pass requires game to be moved to XboxGames folder via Xbox App,
does not require changing any folder or file permissions.
- add:
- Format button to script toolbar.
- .editorconfig file in app folder controls script Format options.
- alt-h in TextViewer control will copy selected text as html fragment to clipboard.
- alt-d in Script editor will copy selected text as
cs ...
fragment to clipboard
for posting in Discord. - alt-f in Script editor will format script.
- notes:
- current script editor shortcut keys:
- ctrl-s save script.
- ctrl-f toggle focus between script editor and search textbox.
- alt-f format script.
- alt-h copy selected text to clipboard as html fragment.
- alt-d copy selected text to clipboard as discord cs fragment.
- current script editor shortcut keys:
3.99.1.3
- chage:
- Lo2K provided an icon w/ more mipmaps for higher res desktop shortcuts.
- add:
- code to discover|use Game Pass versions on PC.
requires read permission on nms.exe in oder to get the internal build date,
so it can determine the release and required libmbin vesion.
requires read permission on PCBANKS/*.pak files, and read|write permission
on PCBANKS/MODS/ folder.
it seems that nms.exe is normally not able to be read, may require manually
adjusting permissions. no feedback yet on default permissions for other folders|files.
- code to discover|use Game Pass versions on PC.
- fix:
- race when building existing mod pak. when delete existing mod pak on execute
the app doesn't get delete event until after scripts start executing.
if a script tries to look through mod pak's the deleted mod pak will
still be listed and result in loop with long timeout trying to open.
- race when building existing mod pak. when delete existing mod pak on execute
3.99.1.2
- add:
- d-click on substance|product|technology item in corresponding tab
will open mbin, search for item id, and scroll to first result in right PAK Item tab. - d-click on recipe item in corresponding tab
will open mbin, search for item id, and scroll to first result in right PAK Item tab. - progress while searching on mbin text search tab.
- d-click on substance|product|technology item in corresponding tab
- change:
- removed all use of wait cursor.
- disable mbin cache option if system has < 48 GB physical mem.
- mbin cache disabled when launch nms via nmsmb (to free mem for game).
- updated command-line options:
- no_github - disable querying GitHub for MBINC and NMSMB release info.
- no_registry - disable saving|loading state from registry on start|stop.
uses registry key: HKEY_CURRENT_USER\SOFTWARE\cmkushnir\NMSMB
user responsible for deleteing registry key if delete NMSMB, there is no uninstaller. - p"path" - e.g. p"g:/games/archive/nms/1", if valid game path then adds
as custom path and adds smiley face icon to toolbar to load it.- r#.##.# - e.g. r3.98, specify game release for p"path" option, will use v if not specified.
- v#.##.#.# - e.g. v3.98.0.1, specify libmbin.dll version for p"path" option, will use r if not specifed.
- if both r and v specified for p"path" option, will use v.
- if neither r nor v specified for p"path" option, will lookup nms.exe build date in cmkNMSReleases.txt.
- lg, ls, lp, auto-load gog, steam, or p"path" if they are detected|specified.
- e.g. cmkNMSModBuilder.exe p"g:/games/nms/" v3.98.0.1 lp
will auto-load the game instance at g:/games/nms/ and require libmbin.dll 3.98.0.1 to mod.
3.99.1.1
- fix:
- double-click on string in MBIN only looked in MODS for matching language ID.
- incorrect left padding in MBIN view language text box.
- 3.99.1.0 introduced but parsing GoG version info that would cause CTD.
- add:
- app tab toggle button to search all scripts for search text,
highlights updated on next script or search text change. - scripts tabs will search all scripts when a script it edited or the search text changes,
scripts with matching text will have a bold name. - new util scripts for searching unlockable trees for nodes.
- report number of enum's, classes, and fields for each loaded libmbin.
- app tab toggle button to search all scripts for search text,
- Known Issues:
- wpf gets into infinite ui size recalc loop in some cases when viewing virtualized lists
e.g. the Products tab, in particular when viewing some filtered results.
this causes the ui thread to bog down as long as the offending product is visible,
scrolling up|down so the product is no longer visible breaks the recalc loop.
To see effect search for "egg" and scroll to the bottom.
- wpf gets into infinite ui size recalc loop in some cases when viewing virtualized lists
3.99.1.0
NOTE: code has error if you don't have GoG version of game installed. Steam users should use 3.99.0.0 until 3.99.1.1 is released.
- update:
- libmbin.dll, compiled with and includes 3.99.1.1.
- cmkNMSReleases.txt updated w/ 3.99.1 info.
- change:
- if app tab view mod data toggle is off then does not hold or update cached data.
- fix:
- parsing GoG version info from registry assumed #.##, didn't support #.##.#.
3.99.0.0
- update:
- libmbin.dll, compiled with and includes 3.98.0.6.
- GitHub Octokit NuGet package from 1.0.0 to 2.0.1.
- Pfim NuGet package from 0.10.3 to 0.11.1.
- various scripts to handle breaking changes.
breaking changes mainly related to cached data being moved from Game
to Game.PCBANKS and Game.MODS to support viewing data from mods.
- fix:
- copy & paste typo in cmkNMSReleases.txt.
- command-line option no_mbin_cache wasn't enabled, was always caching.
- re-search script when edited, to realign highlights.
- remove: command-line options
- no_split_tabs, now always shows split set of tabs
- log_mbin_guid_mismatch, use App tab toggle button instead
- prompt_del_on_exec, use App tab toggle button instead
- change:
- reorder tabs.
- steam and gog game data instances now released when another game instance is loaded.
- some log views are now non-virtualizing e.g. script and build log views.
- First looks for local mbinc version before querying GitHub for mbinc assets.
- language/*.mbin are always decompiled using the linked libmbin.dll.
- substance|product|technology and recipe mbin tab contents are generated
from dynamically typed mbin's, this allows them to come from mbin's w/ header
versions that are different than the linked libmbin.dll, as long as the fields
haven't changed i.e. Id, NameLower, Description, Icon.Filename, and whatever is used for category. - cached language, substance|product|technology, and recipe data now stored
per pak collection i.e. Game.PCBANKS and Game.MODS.
e.g. now use Game.PCBANKS.Language instead of Game.Language.
- add:
- size to fixed size array field names in libMBIN API tab.
value taken from NMSAttribute.Size field if present. - string extension method JenkinsHash see: https://en.wikipedia.org/wiki/Jenkins_hash_function
- script method TkSceneNodeDataNameHash,
Bladehawke found that Jenkins hash must be applied to upper-case version of Name. - popup warning when deleting mod script if corrsponding folder not empty,
will delete folder once popup is dismissed.
- size to fixed size array field names in libMBIN API tab.
- add: toggle buttons to Application tab toolbar
- GitHub access (default true).
- view mod data (default false).
If enabled will view language, substance|product|technology, and recipe items
like game i.e. pull from mod if present else from game pak's. - log mbin guid mismatch (default false).
- cache mbin data (default true).
- prompt to delete existing mod pak on execute (default true).