Nexus-Mods / NexusMods.App

Home of the development of the Nexus Mods App
https://nexus-mods.github.io/NexusMods.App/
GNU General Public License v3.0
915 stars 45 forks source link

[Skyrim SE, Fallout 4] Xbox Game Pass for PC - DLC Detection #268

Open Pickysaurus opened 1 year ago

Pickysaurus commented 1 year ago

User story

As a user playing Skyrim SE or Fallout 4 on Xbox Game Pass who has also purchased the GOTY (FO4) or Anniversary (Skyrim) DLCs

I want to have my DLC purchases detected by the app

So that I can manage my game files for DLCs and manage the plugins in my load order

Example

Install Skyrim SE on Xbox Game Pass. The game will be installed to C:\Games\Xbox\The Elder Scrolls V- Skyrim Special Edition (PC)\Content or similar.

Purchase the Anniversary Upgrade which installs separately to C:\Games\Xbox\Skryim 10 - Creation Club Full Content\Content

Requirements

Recognise the following DLCs for Skyrim and Fallout 4 (this pattern may also be extended to other Game Pass games).

Fallout 4

DLC Name Xbox Store App ID Plugins
Automatron BethesdaSoftworks.Fallout4Automatron-PC DLCRobot.esm
Contraptions Workshop BethesdaSoftworks.Fallout4ContraptionsWorkshop-PC DLCworkshop02.esm
Far Harbor BethesdaSoftworks.Fallout4FarHarbor-PC DLCCoast.esm
Nuka World BethesdaSoftworks.Fallout4Nuka-World-PC DLCNukaWorld.esm
Vault-Tec Workshop BethesdaSoftworks.Fallout4Vault-TecWorkshop-PC DLCworkshop03.esm
Wasteland Workshop BethesdaSoftworks.Fallout4WastelandWorkshop-PC DLCworkshop01.esm

Skyrim Special Edition

DLC Name Xbox Store App ID Plugins
Anniversary Upgrade BethesdaSoftworks.Skyrim10AddOnPC ccAARSSE001-Manufactory.esl, ccASVSSE001-ALMSIVI.esl, ccASVSSE001-ALMSIVI.esm, ccBGSSSE002-ExoticArrows.esl, ccBGSSSE003-Zombies.esl, ccBGSSSE004-RuinsEdge.esl, ccBGSSSE005-Goldbrand.esl, ccBGSSSE006-StendarsHammer.esl, ccBGSSSE007-Chrysamere.esl, ccBGSSSE008-Wraithguard.esl, ccBGSSSE010-PetDwarvenArmoredMudcrab.esl, ccBGSSSE011-HrsArmrElvn.esl, ccBGSSSE012-HrsArmrStl.esl, ccBGSSSE013-Dawnfang.esl, ccBGSSSE014-SpellPack01.esl, ccBGSSSE016-Umbra.esm, ccBGSSSE017-SwordofJyggalag.esl, ccBGSSSE018-Shadowrend.esl, ccBGSSSE019-StaffofSheogorath.esl, ccBGSSSE020-GrayCowl.esl, ccBGSSSE021-LordsMail.esl, ccBGSSSE025-AdvDSGS.esm, ccBGSSSE029-Nerveshatter.esl, ccBGSSSE031-AdvCyrus.esm, ccBGSSSE032-MntDaed.esl, ccBGSSSE034-MntUni.esl, ccBGSSSE035-PetNHound.esl, ccBGSSSE036-PetBWolf.esl, ccBGSSSE037-Curios.esl, ccBGSSSE040-AdvObGobs.esl, ccBGSSSE041-NetchLeather.esl, ccBGSSSE043-CrossElv.esl, ccBGSSSE045-Hasedoki.esl, ccBGSSSE050-BA_Daedric.esl, ccBGSSSE051-BA_DaedricMail.esl, ccBGSSSE052-BA_Iron.esl, ccBGSSSE053-BA_Leather.esl, ccBGSSSE054-BA_Orcish.esl, ccBGSSSE055-BA_OrcishScaled.esl, ccBGSSSE056-BA_Silver.esl, ccBGSSSE057-BA_Stalhrim.esl, ccBGSSSE058-BA_Steel.esl, ccBGSSSE059-BA_Dragonplate.esl, ccBGSSSE060-BA_Dragonscale.esl, ccBGSSSE061-BA_Dwarven.esl, ccBGSSSE062-BA_DwarvenMail.esl, ccBGSSSE063-BA_Ebony.esl, ccBGSSSE064-BA_Elven.esl, ccCBHSSE001-Gaunt.esl, ccEDHSSE001-NorJewel.esl, ccEDHSSE002-SplKntSet.esl, ccEEJSSE001-Hstead.esm, ccEEJSSE002-Tower.esl, ccEEJSSE003-Hollow.esl, ccEEJSSE004-Hall.esl, ccFFBSSE001-ImperialDragon.esl, ccFFBSSE002-CrossbowPack.esl, ccFFBSSE002-StormBear.esl, ccFSVSSE001-Backpacks.esl, ccKRTSSE001_Altar.esl, ccMDRSSE001-DweSanctuary.esm, ccMTYSSE001-KnightsOfTheNine.esl, ccMTYSSE002-VE.esl, ccPEWSSE002-ArmsOfChaos.esl, ccQDRSSE001-SurvivalMode.esl, ccQDRSSE002-Firewood.esl, ccRMSSSE001-NecroHouse.esl, ccTWBSSE001-PuzzleDungeon.esm, ccVSVSSE001-Winter.esl, ccVSVSSE002-Pets.esl, ccVSVSSE003-NecroArts.esl

In testing, the subfolder locations of the DLC files will always overwrite the same files found in the "main" game directory.

Design

(Any designs required for this story)

DOD

(Describe the expected behaviour from the users point of view. Create multiple DoD's if required to fully describe what should happen. Number each DoD)

Scenario 1

Given ___

When ___

Then ___

Pickysaurus commented 1 year ago
const dlcs = {
    fallout4: [
        {
            id: 'BethesdaSoftworks.Fallout4Automatron-PC',
            name: 'Automatron',
            plugins: ['DLCRobot.esm']
        },
        {
            id: 'BethesdaSoftworks.Fallout4ContraptionsWorkshop-PC',
            name: 'Contraptions Workshop',
            plugin: ['DLCworkshop02.esm']
        },
        {
            id: 'BethesdaSoftworks.Fallout4FarHarbor-PC',
            name: 'Far Harbor',
            plugins: ['DLCCoast.esm']
        },
        {
            id: 'BethesdaSoftworks.Fallout4Nuka-World-PC',
            name: 'Nuka World',
            plugins: ['DLCNukaWorld.esm']
        },
        {
            id: 'BethesdaSoftworks.Fallout4Vault-TecWorkshop-PC',
            name: 'Vault-Tec Workshop',
            plugins: ['DLCworkshop03.esm']
        },
        {
            id: 'BethesdaSoftworks.Fallout4WastelandWorkshop-PC',
            name: 'Wasteland Workshop',
            plugins: ['DLCworkshop01.esm']
        },
    ],
    skyrimse: [
        {
            id: 'BethesdaSoftworks.Skyrim10AddOnPC',
            name: 'Anniversary Upgrade',
            plugins: [
                'ccAARSSE001-Manufactory.esl', 'ccASVSSE001-ALMSIVI.esl', 'ccASVSSE001-ALMSIVI.esm', 'ccBGSSSE002-ExoticArrows.esl', 
                'ccBGSSSE003-Zombies.esl', 'ccBGSSSE004-RuinsEdge.esl', 'ccBGSSSE005-Goldbrand.esl', 'ccBGSSSE006-StendarsHammer.esl', 'ccBGSSSE007-Chrysamere.esl', 
                'ccBGSSSE008-Wraithguard.esl', 'ccBGSSSE010-PetDwarvenArmoredMudcrab.esl', 'ccBGSSSE011-HrsArmrElvn.esl', 'ccBGSSSE012-HrsArmrStl.esl', 
                'ccBGSSSE013-Dawnfang.esl', 'ccBGSSSE014-SpellPack01.esl', 'ccBGSSSE016-Umbra.esm', 'ccBGSSSE017-SwordofJyggalag.esl', 'ccBGSSSE018-Shadowrend.esl', 
                'ccBGSSSE019-StaffofSheogorath.esl', 'ccBGSSSE020-GrayCowl.esl', 'ccBGSSSE021-LordsMail.esl', 'ccBGSSSE025-AdvDSGS.esm', 'ccBGSSSE029-Nerveshatter.esl', 
                'ccBGSSSE031-AdvCyrus.esm', 'ccBGSSSE032-MntDaed.esl', 'ccBGSSSE034-MntUni.esl', 'ccBGSSSE035-PetNHound.esl', 'ccBGSSSE036-PetBWolf.esl', 
                'ccBGSSSE037-Curios.esl', 'ccBGSSSE040-AdvObGobs.esl', 'ccBGSSSE041-NetchLeather.esl', 'ccBGSSSE043-CrossElv.esl', 'ccBGSSSE045-Hasedoki.esl', 
                'ccBGSSSE050-BA_Daedric.esl', 'ccBGSSSE051-BA_DaedricMail.esl', 'ccBGSSSE052-BA_Iron.esl', 'ccBGSSSE053-BA_Leather.esl', 'ccBGSSSE054-BA_Orcish.esl', 
                'ccBGSSSE055-BA_OrcishScaled.esl', 'ccBGSSSE056-BA_Silver.esl', 'ccBGSSSE057-BA_Stalhrim.esl', 'ccBGSSSE058-BA_Steel.esl', 'ccBGSSSE059-BA_Dragonplate.esl', 
                'ccBGSSSE060-BA_Dragonscale.esl', 'ccBGSSSE061-BA_Dwarven.esl', 'ccBGSSSE062-BA_DwarvenMail.esl', 'ccBGSSSE063-BA_Ebony.esl', 'ccBGSSSE064-BA_Elven.esl', 
                'ccCBHSSE001-Gaunt.esl', 'ccEDHSSE001-NorJewel.esl', 'ccEDHSSE002-SplKntSet.esl', 'ccEEJSSE001-Hstead.esm', 'ccEEJSSE002-Tower.esl', 'ccEEJSSE003-Hollow.esl', 
                'ccEEJSSE004-Hall.esl', 'ccFFBSSE001-ImperialDragon.esl', 'ccFFBSSE002-CrossbowPack.esl', 'ccFFBSSE002-StormBear.esl', 'ccFSVSSE001-Backpacks.esl', 
                'ccKRTSSE001_Altar.esl', 'ccMDRSSE001-DweSanctuary.esm', 'ccMTYSSE001-KnightsOfTheNine.esl', 'ccMTYSSE002-VE.esl', 'ccPEWSSE002-ArmsOfChaos.esl', 
                'ccQDRSSE001-SurvivalMode.esl', 'ccQDRSSE002-Firewood.esl', 'ccRMSSSE001-NecroHouse.esl', 'ccTWBSSE001-PuzzleDungeon.esm', 'ccVSVSSE001-Winter.esl', 
                'ccVSVSSE002-Pets.esl', 'ccVSVSSE003-NecroArts.esl']
        },
    ],

};