Nexus-Mods / Vortex

Vortex Development
GNU General Public License v3.0
930 stars 135 forks source link

Review: DmC: Devil May Cry #16092

Open mande806 opened 4 months ago

mande806 commented 4 months ago

Nexus Username

chinamicah

Extension URL

https://www.nexusmods.com/site/mods/967

Game URL

https://www.nexusmods.com/dmcdevilmaycry

Existing Extension URL

No response

New features

No response

Information

Packaging

Testing

If a task fails, contact the author to request changes before continuing.

When reviewed and passed, please complete the following tasks:

mande806 commented 4 months ago

DmC Collection I added to test with is located here: https://next.nexusmods.com/dmcdevilmaycry/collections/d6jiey

IDCs commented 4 months ago

Hi @mande806,

The code and the mods on the website suggest that TFC installer and TexMod are hard requirements; at the very least I think TFC installer should be automatically downloaded by the extension as it's hosted on the website. (even better if you can auto install TexMod as well)

Please see an example of how to do this below. (Snippet from our SMAPI downloader for Stardew Valley)

const modFiles = await api.ext.nexusGetModFiles(GAME_ID, SMAPI_MOD_ID);

    const fileTime = (input: any) => Number.parseInt(input.uploaded_time, 10);

    const file = modFiles
      .filter(file => file.category_id === 1)
      .sort((lhs, rhs) => fileTime(lhs) - fileTime(rhs))[0];

    if (file === undefined) {
      throw new util.ProcessCanceled('No SMAPI main file found');
    }

    const dlInfo = {
      game: GAME_ID,
      name: 'SMAPI',
    };

    const nxmUrl = `nxm://${GAME_ID}/mods/${SMAPI_MOD_ID}/files/${file.file_id}`;
    const dlId = await util.toPromise<string>(cb =>
      api.events.emit('start-download', [nxmUrl], dlInfo, undefined, cb, undefined, { allowInstall: false }));
    const modId = await util.toPromise<string>(cb =>
      api.events.emit('start-install-download', dlId, { allowAutoEnable: false }, cb));
    const profileId = selectors.lastActiveProfileForGame(api.getState(), GAME_ID);
    await actions.setModsEnabled(api, profileId, [modId], true, {
      allowAutoDeploy: false,
      installed: true,
    });

Tag me once that's done and I'll add your extension to the manifest.

IDCs commented 3 months ago

Stale extension reviews are closed within 2 weeks if no changes are made.

mande806 commented 3 months ago

Sorry for the slow response. I'm now working on an improved version. The main reason I didn't go the auto-install route with TexMod was that it seemed most of the nexus/vortex download APIs were premium-only, and that didn't seem like a very good choice for a default install. If I can get it to work without premium then I'll definitely add it in. Also, I'm talking to the TFC Installer people about adding a command line API, so depending on how that goes we may be able to add support for those mods in as well.

mande806 commented 3 months ago

The big issue with TFC Installer mods is they are essentially fancy binary patches. If we can get a command line API, Command line API is on their backlog now 🚀 then we can maybe add load-order support to improve that situation, but that will be a whole other big feature to tackle.

(Aside) I really wish everyone would just make DLC Addon mods instead. You can make those with TFC Installer/UPK Explorer as well, from what I read of the documentation. They're fully standalone and native to the game. No need for additional software or patching or anything else. Just more work on the modder's part editing INI files.

mande806 commented 2 months ago

Sorry, I haven't had much time to work on this recently, but it's not forgotten. @IDCs Do you think I should wait until TFC Installer gets command line support and do everything as one big update? Problem is I have no idea when that will be, they just said it was on their backlog.

IDCs commented 2 months ago

Hey @mande806, backlog items can take months or years to finally be picked up. Really up to you, but I personally wouldn't wait; you can code the extension with the CLI in mind though so it's easier to modify the extension when the time comes 🤷