[1.0][MODLIST] Fluffy's Mods - New mini-mod: Power Cleaner [BETA]

Started by Fluffy (l2032), September 14, 2015, 06:16:45 AM

Previous topic - Next topic

krnja21

Quote from: Fluffy (l2032) on September 17, 2018, 06:00:23 PM
They're back now, but in the Floors category. Sorry about that, it wasn't intentional!

Already?!

Damn you're fast dude, thanks a lot!


now i LOVE your mods even more <3  :D

Fluffy (l2032)

New mod: Mod Manager

I'd love some feedback before I release to the masses on steam. Mod Manager is a cleaner, better mod management screen, implementing many of the best features of ModSwitch, ModSync and MOD-E, with a (in my opinion) much better UI.

==================================================

Managing mods should be easy!

# Features
A cleaner, better Mod management screen.
- separate lists for available and active mods
- create and delete local copies of steam mods
- create and load mod list backups
- load mod list from save games
- proper search filtering
- drag and drop activation and reordering
- keyboard navigation

And, if supported by the mod author;
- version checking
- dependency checks
- incompatibility checks
- load order hints

# For Modders
Allows modders to create a Manifest.xml file, enabling a bunch of features that should have been in vanilla;
- version checking
- dependency checking
- incompatibility checking
- load order hints

See [the documentation](https://github.com/FluffierThanThou/ModManager/blob/master/ForModders.md) for details on how to implement this. It's easy!

# Details
**local mod copies** 
You can make a local copy of any steam mods (or all active steam mods at once) by clicking the corresponding button underneat the mod details (or active mods list). Doing this will make sure any updates to the steam version will not break your game in progress. Local mods are created in the RimWorld/Mods folder, and can be manually deleted, or deleted by clicking the corresponding button underneath the mod details.

**mod list backups** 
You can create mod lists by clicking the button underneath your active mods. You will have to choose a unique name, and the mod list will be stored in a folder next to your save games.
To load a modlist, click the corresponding button underneath your active mods, then select the save game or mod list you want to load mods from. Any mods that couldn't be matched to your current list of mods will be greyed out.
To delete a mod list (only the list, not the actual mods), click the corresponding button and select the list to be deleted.

**keyboard navigation** 
Sometimes, it's easier to navigate large lists with the keyboard.
- Tab: cycles focus between search inputs and lists of mods.
- Up/Down: selects the previous/next mod in the list.
- Left/Right: switch focus between active and available lists.

You can also manipulate the lists;
- Enter: activates/deactivates a mod, and selects the next mod in the list.
- Shift+left: deactivates a mod, keeping it selected, and switching focus to the available list.
- Shift+right: activates a mod, keeping it selected, and switching focus to the active list.
- Shift+up/Shift+down: move an active mod up/down in the load order.

Roolo


XeoNovaDan

Working on adding support for ModManager to all of my mods, it looks pretty neat :)

Nightinggale

A few issues.

1: I forgot to remove MOD-E (which apparently isn't a problem, at least not yet). It's loaded first, before Core. Also ModCheck is loaded before Core. This gives Core a red error.

What if a mod needs to be loaded before Core? Also ModCheck doesn't have to be before Core, it just needs to be before any mod containing ModCheck.dll. Any idea on how to set that up?

Granted after adding that requirement, I did make the DLL check for this itself while starting up. However given that there is now a GUI for this, it would have been nice if the check is GUI compatible and not just a log error if somebody did it incorrectly. It's not a critical issue though, particularly because it's only an issue when mixing versions of ModCheck and it's not like I plan to spray out versions frequently.

2: I'm getting spammed with warnings/errors that mods are for the outdated build 0. I used the last number for version of ModCheck meaning it warns that ModCheck is for build 8. While it would be nice to get everybody to use the system correctly, the torrent of warnings hides the red error on Core when I put the mouse on the error list. In other words if it should keep warning about this, at least give it some priority handling, which makes the red error clearly stand out.

Quote from: Fluffy (l2032) on September 28, 2018, 07:56:15 AM# For Modders
Allows modders to create a Manifest.xml file, enabling a bunch of features that should have been in vanilla;
- version checking
- dependency checking
- incompatibility checking
- load order hints
I added precisely the same checks to ModCheck, allowing mods to write an error to the log if the requirements aren't met. I added this for A17 and updated it for each RW release, yet it doesn't look like it has been used much, or at least far less than I had hoped (I know it is in use). I hope a GUI will have better luck. In fact I would prefer people using Mod Manager as it's a better solution. ModCheck will however live on as all checks doubles as checks for conditional patching.

It's kind of weird to see another mod using precisely the same names for the same checks as my own code. I don't think you downright copied me (though I wouldn't mind if you did). It's more like it's the obvious approach like two people inventing the wheel both end up deciding round is the correct shape.

Overall I'm very impressed. Now I'm really looking forward to mods starting to use this. While the download link is useful, the true power is in the mod order/compatibility setup. It looks simple with a few instructions in text, but considering the length of the list you quickly end up with, keeping track of precisely which mod said what and the actual order becomes problematic.
ModCheck - boost your patch loading times and include patchmods in your main mod.

BlackSmokeDMax

Gonna give your new mod manager a try this weekend, very exciting!! Thanks as always Fluffy!

Fluffy (l2032)

I've fixed a few issues, and implemented some new features - the most notable of which is subscribing to mods from the in-game interface. You can't browse for mods, but if you load a modlist with Steam mods that you don't have installed, you can install them quickly.

https://imgur.com/a/49s7DJl

@Nightinggale; thanks for the detailed comments!
1) I'll have to look into exceptions for Core not loading first, I wasn't aware any mods needed to load before Core. As for custom checks, I'll have to look into some sort of API to set this up. It should be possible to declare a 'ModIssueWorker' in the manifest which would give you complete freedom to define any hints the user gets to see.
2) I've increased the minimum severity of warnings that are shown in the 'overview' lists, so the spam should be slightly less. I don't want to remove these notices all together, because I do think not setting the build in the targetVersion is bad practice.

I was vaguely aware of ModCheck, but I was under the impression it only provided patches - which is very cool, but I never use patches, so I never looked into it. I agree that ModCheck has a place; ModManager is more user-focused, it doesn't have a modder API to check dependencies, and I have no plans to include that (although as mentioned above, allowing modders to define their own issues is something I'm going to look in to.)

Anyway, I'm glad you like it! Load order hints were also one of the main reasons I set out to do this Including ModSync, MOD-E and ModSwitch functionality just seemed like a logical extension.

(disclaimer: while this mod is heavily inspired by the mentioned mods, the code is all written from scratch).


Nightinggale

Quote from: Fluffy (l2032) on September 28, 2018, 07:16:57 PMI was vaguely aware of ModCheck, but I was under the impression it only provided patches
I wrote a patch operation, which can have 12 tags like ErrorFail and VerboseMessageSuccess. It writes those strings to the log if the criteria from the name are met (skipping empty ones). The success/fail criteria comes from the other patch operation classes because they all inherit this base class. This means you can get the success/fail from patch operations like IsModLoaded or LoadOrder. There is a total of 13 patch operations, including AND, OR and IfElse, meaning the freedom to configure when to write to the log is really high. In B18 it even had wildcards in the strings, which made it possible to insert mod and file currently being patched when writing the log entry, though vanilla changes killed that feature in B19. Interestingly the log writing code is fairly short and simple. The features mainly comes from hooking into existing code written for conditional patching.

Another feature is with verbose logging, it will profile how long each patch spends patching and write that to the log. This has been used by multiple people to figure out which patches are poorly written and slows down the game startup. This is however less useful in B19 because vanilla code made patching a lot faster, meaning it's no longer possible to write a patch, which takes 1-2 seconds to perform. B18 could spend multiple minutes patching.

The fact that you didn't realize the log writing tells me I did a poor job announcing what I have released  :'(

It likely won't change much for the future though. Mod Manager is a much better solution for telling the user to alter the mod load order and/or which mods to load and will/should take over. The only benefit ModCheck has is it allows adding the DLL like Harmony does, meaning the error messages will not be turned off just because the user didn't load some mod like Mod Manager. This means it's not farfetched to imagine some mod creator using both systems in the same mod and I see no reason why it shouldn't work just fine. In other words Mod Creator will not make me change anything in ModCheck, other than adding Manifest.xml to the next release.

I wonder if I can come up with some interesting ideas for ModCheck and Manifest.xml. I did add the ability to read the ModSync version, but unlike ModSync, Mod Manager kind of already does what ModCheck would do the version from Manifest.xml for meaning it's likely not very useful to add a patch operation to check that version.
ModCheck - boost your patch loading times and include patchmods in your main mod.

Canute

One little request.
Force Rimworld to do a restart.
I changed the modlist, but needed to refresh the availble modlist since i just copied some mod over, and pressed "later".
So a button/flag "Restart Rimworld after closing Mod Manager" would be nice.

Fluffy (l2032)

new version, some minor tweaks and bugfixes.

@Nightinggale; Don't pay too much attention to me (not) knowing about ModCheck, I've been largely absent from the mod scene for a while - just keeping my own stuff up to date. It does sound really cool, I will definitely look into that further next time some weird mod conflict bug props up.

Anyway, I've added an implicit loadAfter for Core to all mods that don't specifically specify a loadBefore for Core, which should solve the issue where some mods need to load before Core. I've also taken some time to look at allowing modders to create their own 'issues' which will get shown to the user. In theory, this is simple - I can just load a custom ModIssueWorker from the Manifest. There is a pretty big practical problem though; this would require the mod to add ModManager as a reference - which is something I'd like to avoid. I looked at splitting off the Issue code so it could be included as a standalone .dll with any mods that want to create custom issues, but at the moment the code is too heavily interwoven for that to be feasible.

@Canute; yeah, I should probably do something to force a restart before starting or loading a game. I'll look into that tomorrow.

Tsunamy

MOD-E is traditionally loaded before Core, so I'm surprised a mod that has similar features included doesn't need to be loaded before Core.

Exende

omg, you da bes Fluffy!!!  Ever since Rimwold incorporated movable modlists I've been wanting for separate lists for active and available mods that the old OLD modloader used to have. This is so awesome

BlackSmokeDMax

Possible (unimportant) problem in your *favorite* place.

In your table in first post, the date for most recent update of Work Tab shows Sept 29 and a version of 2.7. Going to either github or steam shows a most recent update date of Aug 30, while still being version 2.7

Format error of your chart or unreleased version?

Fluffy (l2032)

@BlackSmokeDMax; build script oversight ;) I made some changes for investigating a bug report in WorkTab, which made my build script think there were changes when I updated the post for ModMananer.