diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d753e8e2e..f51bd9c2b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -77,3 +77,10 @@ jobs: uses: actions/github-script@v6 with: script: core.setFailed('It seems the build process failed silently. See previous step for more info.') + + - if: contains(github.event.head_commit.message, 'build(artifact)') + name: Upload artifacts + uses: actions/upload-artifact@v6 + with: + path: 'dist/electron/Packaged' + name: 'r2modman-${{ matrix.platform }}-build-${{ github.sha }}' diff --git a/CHANGELOG.md b/CHANGELOG.md index 1474b54a1..ea9a00c71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,18 @@ +### 3.2.14 +#### Games added +- Carrier Deck +- Factory Planner +- On-Together: Virtual Co-Working +- Project Arrhythmia +- Stolen Realm +- The Farmer Was Replaced +- YAPYAP + +#### Fixes +- On Together automatically resolves the correct folder +- Fixed linux_wrapper implementation that supports UMM. (Thanks to @alexneargarder) +- Miside image fixed (Thanks to @Hythera) + ### 3.2.13 #### Fixes - Linux behaviour used to automatically set WINEDLLOVERRIDES. This has been restored for now. diff --git a/package.json b/package.json index 7f700c21e..10fcbf7d8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "r2modman", - "version": "3.2.13", + "version": "3.2.14", "description": "A simple and easy to use mod manager for many games using Thunderstore.", "productName": "r2modman", "author": "ebkr", diff --git a/public/images/game_selection/carrier-deck.webp b/public/images/game_selection/carrier-deck.webp new file mode 100644 index 000000000..ddeb18a24 Binary files /dev/null and b/public/images/game_selection/carrier-deck.webp differ diff --git a/public/images/game_selection/factory-planner.webp b/public/images/game_selection/factory-planner.webp new file mode 100644 index 000000000..08ea8d503 Binary files /dev/null and b/public/images/game_selection/factory-planner.webp differ diff --git a/public/images/game_selection/MiSide.webp b/public/images/game_selection/miside.webp similarity index 100% rename from public/images/game_selection/MiSide.webp rename to public/images/game_selection/miside.webp diff --git a/public/images/game_selection/on-together.webp b/public/images/game_selection/on-together.webp new file mode 100644 index 000000000..dc3ebecdf Binary files /dev/null and b/public/images/game_selection/on-together.webp differ diff --git a/public/images/game_selection/project-arrhythmia.webp b/public/images/game_selection/project-arrhythmia.webp new file mode 100644 index 000000000..3affcc84f Binary files /dev/null and b/public/images/game_selection/project-arrhythmia.webp differ diff --git a/public/images/game_selection/stolen-realm.webp b/public/images/game_selection/stolen-realm.webp new file mode 100644 index 000000000..12e5b5617 Binary files /dev/null and b/public/images/game_selection/stolen-realm.webp differ diff --git a/public/images/game_selection/the-farmer-was-replaced.webp b/public/images/game_selection/the-farmer-was-replaced.webp new file mode 100644 index 000000000..c39c7856a Binary files /dev/null and b/public/images/game_selection/the-farmer-was-replaced.webp differ diff --git a/public/images/game_selection/yapyap.webp b/public/images/game_selection/yapyap.webp new file mode 100644 index 000000000..c05ee02d5 Binary files /dev/null and b/public/images/game_selection/yapyap.webp differ diff --git a/public/linux_wrapper.sh b/public/linux_wrapper.sh index 6926219f5..d7c79ba53 100644 --- a/public/linux_wrapper.sh +++ b/public/linux_wrapper.sh @@ -40,6 +40,8 @@ fi if test -f "$BASEDIR/profiles/$R2PROFILE/run_bepinex.sh"; then exec "$BASEDIR/profiles/$R2PROFILE/run_bepinex.sh" "$@" +elif test -f "$BASEDIR/profiles/$R2PROFILE/run_umm.sh"; then + exec "$BASEDIR/profiles/$R2PROFILE/run_umm.sh" "$@" else - exec "$BASEDIR/profiles/$R2PROFILE/start_game_bepinex.sh" "$@" + exec "$BASEDIR/profiles/$R2PROFILE/start_game_bepinex.sh" "$@" fi diff --git a/src/_managerinf/ManagerInformation.ts b/src/_managerinf/ManagerInformation.ts index b87fe722d..c2137c3b0 100644 --- a/src/_managerinf/ManagerInformation.ts +++ b/src/_managerinf/ManagerInformation.ts @@ -1,7 +1,7 @@ import VersionNumber from '../model/VersionNumber'; export default class ManagerInformation { - public static VERSION: VersionNumber = new VersionNumber('3.2.13'); + public static VERSION: VersionNumber = new VersionNumber('3.2.14'); public static IS_PORTABLE: boolean = false; public static APP_NAME: string = "r2modman"; } diff --git a/src/assets/data/ecosystem.json b/src/assets/data/ecosystem.json index b120d35e5..401d0a248 100644 --- a/src/assets/data/ecosystem.json +++ b/src/assets/data/ecosystem.json @@ -19126,6 +19126,55 @@ ] } }, + "banjo-recompiled": { + "uuid": "31d9c310-34d3-4c9c-9361-ea664f8a1104", + "label": "banjo-recompiled", + "meta": { + "displayName": "Banjo: Recompiled", + "iconUrl": "banjo-recompiled.webp" + }, + "distributions": [], + "r2modman": null, + "thunderstore": { + "displayName": "Banjo: Recompiled", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "wikiUrl": "https://hackmd.io/fMDiGEJ9TBSjomuZZOgzNg", + "discordUrl": "https://discord.gg/AWZThJ4dPf" + } + }, "beetleball": { "uuid": "4746944a-59d5-4038-8a13-f9710a4c4bb7", "label": "beetleball", @@ -19510,6 +19559,124 @@ "autolistPackageIds": [] } }, + "carrier-deck": { + "uuid": "82453e42-aa80-4dd0-ab64-8a64d72fe252", + "label": "carrier-deck", + "meta": { + "displayName": "Carrier Deck", + "iconUrl": "carrier-deck.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "580720" + } + ], + "steamFolderName": "Carrier Deck", + "dataFolderName": "CD_Data", + "exeNames": [ + "CD.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "Carrier Deck", + "iconUrl": "carrier-deck.webp" + }, + "settingsIdentifier": "CarrierDeck", + "internalFolderName": "CarrierDeck", + "packageIndex": "https://thunderstore.io/c/carrier-deck/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "Carrier Deck", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Carrier Deck is a fast paced time management game where you play as the Air Boss on board the CVN-76 in the midst of active war." + } + }, "chill-with-you": { "uuid": "5090345c-21f2-421f-a53d-13b47a25beae", "label": "chill-with-you", @@ -20666,6 +20833,123 @@ }, "r2modman": null }, + "factory-planner": { + "uuid": "f8e2a1c3-9b4d-4e6f-a7c8-d1e2f3a4b5c6", + "label": "factory-planner", + "meta": { + "displayName": "Factory Planner", + "iconUrl": "factory-planner.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "3679930" + } + ], + "steamFolderName": "Factory Planner", + "dataFolderName": "Factory Planner_Data", + "exeNames": [ + "Factory Planner.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "Factory Planner", + "iconUrl": "factory-planner.webp" + }, + "settingsIdentifier": "FactoryPlanner", + "internalFolderName": "FactoryPlanner", + "packageIndex": "https://thunderstore.io/c/factory-planner/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "Factory Planner", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack_IL2CPP" + ] + } + }, "five-nights-at-freddys-into-the-pit": { "uuid": "ec590bff-7655-4946-acf1-476782de86d5", "label": "five-nights-at-freddys-into-the-pit", @@ -21600,6 +21884,9 @@ "asset-packs": { "label": "Asset Packs" }, + "early-plugins": { + "label": "Early Plugins" + }, "mods": { "label": "Mods" }, @@ -21623,7 +21910,10 @@ "mods": { "name": "Mods", "requireCategories": [ - "mods" + "mods", + "plugins", + "early-plugins", + "asset-packs" ], "excludeCategories": [ "modpacks", @@ -21635,7 +21925,8 @@ "plugins": { "name": "Plugins", "requireCategories": [ - "plugins" + "plugins", + "early-plugins" ], "excludeCategories": [ "modpacks", @@ -21655,7 +21946,8 @@ "worlds", "universes", "saves", - "plugins" + "plugins", + "early-plugins" ] }, "saves": { @@ -21669,7 +21961,8 @@ "universes", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "universes": { @@ -21683,7 +21976,8 @@ "saves", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "worlds": { @@ -21697,7 +21991,8 @@ "saves", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "other": { @@ -21709,7 +22004,8 @@ "modpacks", "worlds", "universes", - "saves" + "saves", + "early-plugins" ] }, "modpacks": { @@ -23402,6 +23698,124 @@ ] } }, + "on-together": { + "uuid": "299844b0-c8f4-41da-8e4a-d742aca37f8d", + "label": "on-together", + "meta": { + "displayName": "On-Together: Virtual Co-Working", + "iconUrl": "on-together.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "3707400" + } + ], + "steamFolderName": "On-Together/On-Together", + "dataFolderName": "On-Together_Data", + "exeNames": [ + "On-Together.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "On-Together: Virtual Co-Working", + "iconUrl": "on-together.webp" + }, + "settingsIdentifier": "OnTogetherVirtualCoWorking", + "internalFolderName": "OnTogetherVirtualCoWorking", + "packageIndex": "https://thunderstore.io/c/on-together/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "On-Together: Virtual Co-Working", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Virtual co-working with friends or strangers all over the world! Digital pals hang out at the bottom of the screen while you work, study, and get stuff done. Includes productivity tools, hangout spots, breaktime games, and more!" + } + }, "ostranauts": { "uuid": "376711bd-6557-4c98-8efc-acc903868386", "label": "ostranauts", @@ -24145,6 +24559,126 @@ ] } }, + "project-arrhythmia": { + "uuid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890", + "label": "project-arrhythmia", + "meta": { + "displayName": "Project Arrhythmia", + "iconUrl": "project-arrhythmia.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "440310" + } + ], + "steamFolderName": "Project Arrhythmia", + "dataFolderName": "Project Arrhythmia_Data", + "exeNames": [ + "Project Arrhythmia.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "Project Arrhythmia", + "iconUrl": "project-arrhythmia.webp" + }, + "settingsIdentifier": "ProjectArrhythmia", + "internalFolderName": "ProjectArrhythmia", + "packageIndex": "https://thunderstore.io/c/project-arrhythmia/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [ + "PA" + ], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "Project Arrhythmia", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "discordUrl": "https://discord.gg/BN25jdt3Vj", + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ] + } + }, "pushing-it-together-sisyphus": { "uuid": "ca4df913-b688-459c-bb60-f56951a5b6a0", "label": "pushing-it-together-sisyphus", @@ -24422,7 +24956,15 @@ "additionalSearchStrings": [ "夺魄机兵" ], - "installRules": [], + "installRules": [ + { + "route": "mods", + "defaultFileExtensions": [], + "trackingMethod": "package-zip", + "subRoutes": [], + "isDefaultLocation": true + } + ], "relativeFileExclusions": null } ], @@ -25246,16 +25788,16 @@ "autolistPackageIds": [] } }, - "starship": { - "uuid": "367e77fa-c7d6-4ca0-a8c6-a35e3f10d300", - "label": "starship", + "starfox-64-recompiled": { + "uuid": "887dcdab-3747-44a3-8c11-56389c80cc73", + "label": "starfox-64-recompiled", "meta": { - "displayName": "Starship", + "displayName": "Starfox 64: Recompiled", "iconUrl": null }, "distributions": [], "thunderstore": { - "displayName": "Starship", + "displayName": "Starfox 64: Recompiled", "categories": { "mods": { "label": "Mods" @@ -25290,40 +25832,206 @@ ] } }, - "wikiUrl": "https://gamebanana.com/games/21612", - "discordUrl": "https://discord.com/invite/shipofharkinian", "autolistPackageIds": [] }, "r2modman": null }, - "super-fantasy-kingdom": { - "uuid": "fe0fa301-b037-4cbc-84e1-300a44bd3eb0", - "label": "super-fantasy-kingdom", + "starship": { + "uuid": "367e77fa-c7d6-4ca0-a8c6-a35e3f10d300", + "label": "starship", "meta": { - "displayName": "Super Fantasy Kingdom", - "iconUrl": "super-fantasy-kingdom.webp" + "displayName": "Starship", + "iconUrl": null }, "distributions": [], - "r2modman": [ - { - "gameInstanceType": "game", - "distributions": [ - { - "platform": "steam", - "identifier": "2289750" - } - ], - "steamFolderName": "Super Fantasy Kingdom", - "dataFolderName": "Super Fantasy Kingdom_Data", - "exeNames": [ - "Super Fantasy Kingdom.exe" - ], - "packageLoader": "bepinex", - "meta": { - "displayName": "Super Fantasy Kingdom", - "iconUrl": "super-fantasy-kingdom.webp" - }, - "settingsIdentifier": "SuperFantasyKingdom", + "thunderstore": { + "displayName": "Starship", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "wikiUrl": "https://gamebanana.com/games/21612", + "discordUrl": "https://discord.com/invite/shipofharkinian", + "autolistPackageIds": [] + }, + "r2modman": null + }, + "stolen-realm": { + "uuid": "7bb8d376-9f63-4ffb-ad9b-6069565a1ae0", + "label": "stolen-realm", + "meta": { + "displayName": "Stolen Realm", + "iconUrl": "stolen-realm.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "1330000" + } + ], + "steamFolderName": "Stolen Realm", + "dataFolderName": "Stolen Realm_Data", + "exeNames": [ + "Stolen Realm.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "Stolen Realm", + "iconUrl": "stolen-realm.webp" + }, + "settingsIdentifier": "StolenRealm", + "internalFolderName": "StolenRealm", + "packageIndex": "https://thunderstore.io/c/stolen-realm/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "Stolen Realm", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Stolen Realm is a simultaneous turn-based tactical dungeon crawling looter with action RPG elements where you control up to 6 heroes, solo or through online co-op, venturing forth in adventures set in a high-fantasy, low-poly world." + } + }, + "super-fantasy-kingdom": { + "uuid": "fe0fa301-b037-4cbc-84e1-300a44bd3eb0", + "label": "super-fantasy-kingdom", + "meta": { + "displayName": "Super Fantasy Kingdom", + "iconUrl": "super-fantasy-kingdom.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "2289750" + } + ], + "steamFolderName": "Super Fantasy Kingdom", + "dataFolderName": "Super Fantasy Kingdom_Data", + "exeNames": [ + "Super Fantasy Kingdom.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "Super Fantasy Kingdom", + "iconUrl": "super-fantasy-kingdom.webp" + }, + "settingsIdentifier": "SuperFantasyKingdom", "internalFolderName": "SuperFantasyKingdom", "packageIndex": "https://thunderstore.io/c/super-fantasy-kingdom/api/v1/package-listing-index/", "gameSelectionDisplayMode": "visible", @@ -25514,6 +26222,124 @@ }, "r2modman": null }, + "the-farmer-was-replaced": { + "uuid": "20fb1c8c-fa3b-48ec-b0bc-e7d1acc15355", + "label": "the-farmer-was-replaced", + "meta": { + "displayName": "The Farmer Was Replaced", + "iconUrl": "the-farmer-was-replaced.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "2060160" + } + ], + "steamFolderName": "The Farmer Was Replaced", + "dataFolderName": "TheFarmerWasReplaced_Data", + "exeNames": [ + "TheFarmerWasReplaced.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "The Farmer Was Replaced", + "iconUrl": "the-farmer-was-replaced.webp" + }, + "settingsIdentifier": "TheFarmerWasReplaced", + "internalFolderName": "TheFarmerWasReplaced", + "packageIndex": "https://thunderstore.io/c/the-farmer-was-replaced/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "The Farmer Was Replaced", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Program and optimize a drone to automate a farm and watch it do the work for you. Collect resources to unlock better technology and become the most efficient farmer in the world. Improve your problem solving and coding skills." + } + }, "unfair-flips": { "uuid": "747c7cd7-8b91-45fd-b734-72fb313cf39b", "label": "unfair-flips", @@ -25954,6 +26780,123 @@ ] } }, + "yapyap": { + "uuid": "3bc90e47-4b31-486b-9226-e5d5791fe35e", + "label": "yapyap", + "meta": { + "displayName": "YAPYAP", + "iconUrl": "yapyap.webp" + }, + "distributions": [], + "r2modman": [ + { + "gameInstanceType": "game", + "distributions": [ + { + "platform": "steam", + "identifier": "3834090" + } + ], + "steamFolderName": "YAPYAP", + "dataFolderName": "yapyap_Data", + "exeNames": [ + "yapyap.exe" + ], + "packageLoader": "bepinex", + "meta": { + "displayName": "YAPYAP", + "iconUrl": "yapyap.webp" + }, + "settingsIdentifier": "Yapyap", + "internalFolderName": "Yapyap", + "packageIndex": "https://thunderstore.io/c/yapyap/api/v1/package-listing-index/", + "gameSelectionDisplayMode": "visible", + "additionalSearchStrings": [], + "installRules": [ + { + "route": "BepInEx/plugins", + "isDefaultLocation": true, + "defaultFileExtensions": [ + ".dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/core", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/patchers", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/monomod", + "isDefaultLocation": false, + "defaultFileExtensions": [ + ".mm.dll" + ], + "trackingMethod": "subdir", + "subRoutes": [] + }, + { + "route": "BepInEx/config", + "isDefaultLocation": false, + "defaultFileExtensions": [], + "trackingMethod": "none", + "subRoutes": [] + } + ], + "relativeFileExclusions": null + } + ], + "thunderstore": { + "displayName": "YAPYAP", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ] + } + }, "zelda-64-recompiled": { "uuid": "9a90746b-6ae2-426b-92ac-cf4e06ab0564", "label": "zelda-64-recompiled", @@ -31440,6 +32383,45 @@ "BepInEx-BepInExPack" ] }, + "banjo-recompiled": { + "displayName": "Banjo: Recompiled", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "wikiUrl": "https://hackmd.io/fMDiGEJ9TBSjomuZZOgzNg", + "discordUrl": "https://discord.gg/AWZThJ4dPf" + }, "beetleball": { "displayName": "Beetleball", "categories": { @@ -31604,6 +32586,47 @@ "discordUrl": "https://discord.com/invite/freelives", "autolistPackageIds": [] }, + "carrier-deck": { + "displayName": "Carrier Deck", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Carrier Deck is a fast paced time management game where you play as the Air Boss on board the CVN-76 in the midst of active war." + }, "chill-with-you": { "displayName": "Chill with You : Lo-Fi Story", "categories": { @@ -32072,8 +33095,49 @@ "Thunderstore-unreal_shimloader" ] }, - "easy-delivery-co": { - "displayName": "Easy Delivery Co", + "easy-delivery-co": { + "displayName": "Easy Delivery Co", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "discordUrl": "https://discord.com/invite/TDkZWmrET3", + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ] + }, + "endless-space-2": { + "displayName": "Endless Space 2", "categories": { "mods": { "label": "Mods" @@ -32108,13 +33172,10 @@ ] } }, - "discordUrl": "https://discord.com/invite/TDkZWmrET3", - "autolistPackageIds": [ - "BepInEx-BepInExPack" - ] + "discordUrl": "https://discord.gg/KZRVjVEe5v" }, - "endless-space-2": { - "displayName": "Endless Space 2", + "factory-planner": { + "displayName": "Factory Planner", "categories": { "mods": { "label": "Mods" @@ -32149,7 +33210,9 @@ ] } }, - "discordUrl": "https://discord.gg/KZRVjVEe5v" + "autolistPackageIds": [ + "BepInEx-BepInExPack_IL2CPP" + ] }, "five-nights-at-freddys-into-the-pit": { "displayName": "Five Nights at Freddy's: Into the Pit", @@ -32516,6 +33579,9 @@ "asset-packs": { "label": "Asset Packs" }, + "early-plugins": { + "label": "Early Plugins" + }, "mods": { "label": "Mods" }, @@ -32539,7 +33605,10 @@ "mods": { "name": "Mods", "requireCategories": [ - "mods" + "mods", + "plugins", + "early-plugins", + "asset-packs" ], "excludeCategories": [ "modpacks", @@ -32551,7 +33620,8 @@ "plugins": { "name": "Plugins", "requireCategories": [ - "plugins" + "plugins", + "early-plugins" ], "excludeCategories": [ "modpacks", @@ -32571,7 +33641,8 @@ "worlds", "universes", "saves", - "plugins" + "plugins", + "early-plugins" ] }, "saves": { @@ -32585,7 +33656,8 @@ "universes", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "universes": { @@ -32599,7 +33671,8 @@ "saves", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "worlds": { @@ -32613,7 +33686,8 @@ "saves", "mods", "plugins", - "asset-packs" + "asset-packs", + "early-plugins" ] }, "other": { @@ -32625,7 +33699,8 @@ "modpacks", "worlds", "universes", - "saves" + "saves", + "early-plugins" ] }, "modpacks": { @@ -33323,6 +34398,47 @@ "BepInEx-BepInExPack" ] }, + "on-together": { + "displayName": "On-Together: Virtual Co-Working", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Virtual co-working with friends or strangers all over the world! Digital pals hang out at the bottom of the screen while you work, study, and get stuff done. Includes productivity tools, hangout spots, breaktime games, and more!" + }, "ostranauts": { "displayName": "Ostranauts", "categories": { @@ -33622,6 +34738,47 @@ "BepInEx-BepInExPack" ] }, + "project-arrhythmia": { + "displayName": "Project Arrhythmia", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "discordUrl": "https://discord.gg/BN25jdt3Vj", + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ] + }, "pushing-it-together-sisyphus": { "displayName": "Pushing it! Together - Sisyphus Co-op", "categories": { @@ -34167,6 +35324,44 @@ "discordUrl": "https://discord.com/invite/shipofharkinian", "autolistPackageIds": [] }, + "starfox-64-recompiled": { + "displayName": "Starfox 64: Recompiled", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [] + }, "starship": { "displayName": "Starship", "categories": { @@ -34207,6 +35402,47 @@ "discordUrl": "https://discord.com/invite/shipofharkinian", "autolistPackageIds": [] }, + "stolen-realm": { + "displayName": "Stolen Realm", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Stolen Realm is a simultaneous turn-based tactical dungeon crawling looter with action RPG elements where you control up to 6 heroes, solo or through online co-op, venturing forth in adventures set in a high-fantasy, low-poly world." + }, "super-fantasy-kingdom": { "displayName": "Super Fantasy Kingdom", "categories": { @@ -34326,6 +35562,47 @@ "discordUrl": "https://discord.gg/vXmCVnsPE5", "autolistPackageIds": [] }, + "the-farmer-was-replaced": { + "displayName": "The Farmer Was Replaced", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ], + "shortDescription": "Program and optimize a drone to automate a farm and watch it do the work for you. Collect resources to unlock better technology and become the most efficient farmer in the world. Improve your problem solving and coding skills." + }, "unfair-flips": { "displayName": "Unfair Flips", "categories": { @@ -34526,6 +35803,46 @@ "BepInEx-BepInExPack" ] }, + "yapyap": { + "displayName": "YAPYAP", + "categories": { + "mods": { + "label": "Mods" + }, + "modpacks": { + "label": "Modpacks" + }, + "tools": { + "label": "Tools" + }, + "libraries": { + "label": "Libraries" + }, + "misc": { + "label": "Misc" + }, + "audio": { + "label": "Audio" + } + }, + "sections": { + "mods": { + "name": "Mods", + "excludeCategories": [ + "modpacks" + ] + }, + "modpacks": { + "name": "Modpacks", + "requireCategories": [ + "modpacks" + ] + } + }, + "autolistPackageIds": [ + "BepInEx-BepInExPack" + ] + }, "zelda-64-recompiled": { "displayName": "Zelda 64: Recompiled", "categories": { diff --git a/src/installers/UMMInstaller.ts b/src/installers/UMMInstaller.ts index 1dbacc764..7683e8248 100644 --- a/src/installers/UMMInstaller.ts +++ b/src/installers/UMMInstaller.ts @@ -12,7 +12,14 @@ import FileUtils from '../utils/FileUtils'; export class UMMInstaller implements PackageInstaller { - private static readonly TRACKED = ['UMM/Core', 'doorstop_config.ini', 'winhttp.dll']; + private static readonly TRACKED = [ + 'UMM/Core', + 'doorstop_config.ini', + 'winhttp.dll', + '.doorstop_version', + 'doorstop_libs', + 'run_umm.sh' + ]; async install(args: InstallArgs): Promise { const { packagePath, profile } = args; @@ -20,6 +27,9 @@ export class UMMInstaller implements PackageInstaller { try { for (const fileOrFolder of UMMInstaller.TRACKED) { const cachePath = path.join(packagePath, fileOrFolder); + if (!(await FsProvider.instance.exists(cachePath))) { + continue; + } const profilePath = profile.joinToProfilePath(fileOrFolder); await FsProvider.instance.mkdirs(path.dirname(profilePath)); await FileUtils.copyFileOrFolder(cachePath, profilePath); diff --git a/src/pages/Profiles.vue b/src/pages/Profiles.vue index e0f14ffbe..e60cf697f 100644 --- a/src/pages/Profiles.vue +++ b/src/pages/Profiles.vue @@ -175,6 +175,6 @@ onMounted( async () => { gap: 1rem; justify-content: start; text-align: left; - width: 100vw; + width: 100%; } diff --git a/src/r2mm/launching/instructions/GameInstructionParser.ts b/src/r2mm/launching/instructions/GameInstructionParser.ts index 68c1854e0..1b9173909 100644 --- a/src/r2mm/launching/instructions/GameInstructionParser.ts +++ b/src/r2mm/launching/instructions/GameInstructionParser.ts @@ -118,6 +118,11 @@ export default class GameInstructionParser { } private static async ummPreloaderResolver(game: Game, profile: Profile): Promise { + if (["linux"].includes(appWindow.getPlatform().toLowerCase())) { + const isProton = await GameInstructionParser.isProton(game); + const ummPath = await FsProvider.instance.realpath(profile.joinToProfilePath("UMM", "Core", "UnityModManager.dll")); + return `${isProton ? 'Z:' : ''}${ummPath}`; + } return profile.joinToProfilePath("UMM", "Core", "UnityModManager.dll"); } diff --git a/src/r2mm/launching/instructions/instructions/loader/UMMGameInstructions.ts b/src/r2mm/launching/instructions/instructions/loader/UMMGameInstructions.ts index ee5f61c88..857c78877 100644 --- a/src/r2mm/launching/instructions/instructions/loader/UMMGameInstructions.ts +++ b/src/r2mm/launching/instructions/instructions/loader/UMMGameInstructions.ts @@ -4,6 +4,7 @@ import Game from '../../../../../model/game/Game'; import Profile from '../../../../../model/Profile'; import { DynamicGameInstruction } from '../../DynamicGameInstruction'; import { getUnityDoorstopVersion } from '../../../../../utils/UnityDoorstopUtils'; +import appWindow from '../../../../../providers/node/app/app_window'; export default class UMMGameInstructions extends GameInstructionGenerator { @@ -16,29 +17,37 @@ export default class UMMGameInstructions extends GameInstructionGenerator { } private async genDoorstopV3(game: Game, profile: Profile): Promise { + const launchArgs: string[] = [ + '--doorstop-enable', + 'true', + '--doorstop-target', + DynamicGameInstruction.UMM_PRELOADER_PATH + ]; + + if (["linux", "darwin"].includes(appWindow.getPlatform().toLowerCase())) { + launchArgs.push('--r2profile', DynamicGameInstruction.PROFILE_NAME); + } + return { - moddedParameterList: [ - '--profile', - profile.getProfilePath(), - '--doorstop-enable', - 'true', - '--doorstop-target', - DynamicGameInstruction.UMM_PRELOADER_PATH - ], + moddedParameterList: launchArgs, vanillaParameterList: ['--doorstop-enable', 'false'] }; } private async genDoorstopV4(game: Game, profile: Profile): Promise { + const launchArgs: string[] = [ + '--doorstop-enabled', + 'true', + '--doorstop-target-assembly', + DynamicGameInstruction.UMM_PRELOADER_PATH + ]; + + if (["linux", "darwin"].includes(appWindow.getPlatform().toLowerCase())) { + launchArgs.push('--r2profile', DynamicGameInstruction.PROFILE_NAME); + } + return { - moddedParameterList: [ - '--profile', - profile.getProfilePath(), - '--doorstop-enabled', - 'true', - '--doorstop-target-assembly', - DynamicGameInstruction.UMM_PRELOADER_PATH - ], + moddedParameterList: launchArgs, vanillaParameterList: ['--doorstop-enabled', 'false'] }; }