Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
210 commits
Select commit Hold shift + click to select a range
bde9e06
Fix posix scripts to preserve arguments with spaces
arrowmaster Jul 3, 2025
f25ccc4
Added close action to preview panel
ebkr Jul 24, 2025
51e3cb4
Platform selection radio now persists last selected option
ebkr Jul 25, 2025
61e0750
Fixed bug in rename functionality which didn't use the profile's safe…
ebkr Jul 25, 2025
b357c7d
Disable button for while resetting the settings is in progress to pre…
VilppeRiskidev Jul 28, 2025
73d76d1
Update README.md
ebkr Aug 4, 2025
04cb656
Add custom mod loader package support for three games
anttimaki Aug 12, 2025
9d78537
Merge pull request #1880 from ebkr/custom-ml-packages
anttimaki Aug 12, 2025
8b8a8ca
Merge pull request #1843 from arrowmaster/linuxwrapper
ebkr Aug 13, 2025
56aae9f
Merge pull request #1856 from ebkr/online-preview-panel/close-action
ebkr Aug 15, 2025
bab8539
Merge pull request #1857 from ebkr/remember-last-platform-selected
ebkr Aug 15, 2025
00d5079
Add 2 new games
VilppeRiskidev Aug 18, 2025
d3da3e0
Merge pull request #1885 from ebkr/add-2-games
anttimaki Aug 20, 2025
a7f6b62
Calculate and display the download progress based on the file size
VilppeRiskidev Aug 4, 2025
1fa9bc7
Simplify download progress tracking
anttimaki Aug 19, 2025
293c36b
Calculate total download size when download is added
anttimaki Aug 19, 2025
ba784cc
Misc tweaks to DownloadUtils.generateProgressPercentage
anttimaki Aug 19, 2025
e4766b4
Stop displaying the downloaded file-size on the UI, to prevent a misl…
VilppeRiskidev Aug 19, 2025
2d3cc72
Improve UI texts
anttimaki Aug 20, 2025
575f4c1
Open DownloadOrogressModal only after download object has been created
anttimaki Aug 20, 2025
201da57
Merge pull request #1881 from ebkr/file-size-based-download-progress
anttimaki Aug 20, 2025
71557bc
Add a new game: Paper Animal Adventure
VilppeRiskidev Aug 20, 2025
fbe5cee
Merge pull request #1886 from ebkr/add-game-paper-animal-adventure
anttimaki Aug 20, 2025
d81f291
Improve performance of DownloadUtils.getTotalDownloadSizeInBytes
anttimaki Aug 21, 2025
abb72d8
Fixed launch args in help section for Linux under Native launch behav…
ebkr Jul 18, 2025
9ee05ea
Copy button now copies correct text
ebkr Jul 18, 2025
23d9bc6
Improved name of copy method
ebkr Jul 18, 2025
a15af2f
Removed debug strings
ebkr Jul 18, 2025
f7130b9
Added missing %command% from help launch arg string
ebkr Jul 18, 2025
8bebb2d
Include settingsIdentifier in Error when saving game settings fail
anttimaki Aug 25, 2025
18946cd
Add games: "Pair A Dice" and "Maltese's Fluffy Onsen"
VilppeRiskidev Aug 26, 2025
cf8cb11
Simplify LaunchType enum related type handling
anttimaki Aug 27, 2025
51db94c
Merge pull request #1887 from ebkr/download-size-performance
anttimaki Aug 27, 2025
689a040
Merge pull request #1851 from ebkr/linux-help-launch-args-display
ebkr Aug 27, 2025
da75548
Parametrize the sync script to support only updating type definitions
anttimaki Aug 28, 2025
83f5db3
Add GodotML v7 support to GodotMLInstaller
anttimaki Aug 28, 2025
9917b11
Merge pull request #1890 from ebkr/idb-debug
anttimaki Aug 28, 2025
bcf1a9f
Merge pull request #1895 from ebkr/desynced-sync
anttimaki Aug 28, 2025
583b762
Merge pull request #1891 from ebkr/add-pad-and-mfo
anttimaki Aug 28, 2025
49f39f2
Merge pull request #1897 from ebkr/godotml-7
anttimaki Aug 28, 2025
94cf075
Add support for Beton Brutal
anttimaki Sep 2, 2025
ee66bcc
Merge pull request #1900 from ebkr/beton-brutal
anttimaki Sep 2, 2025
a344801
Update documentation for adding a support for a game
anttimaki Sep 2, 2025
ce6d979
Fix omitting LaunchTypeModal from Windows users
anttimaki Sep 4, 2025
2937626
Add debug logging to keep track of the active game
anttimaki Sep 4, 2025
971cea6
Add support for Hollow Knight: Silksong
anttimaki Sep 5, 2025
64c977e
Merge pull request #1904 from ebkr/silksong
anttimaki Sep 5, 2025
8836420
Merge pull request #1901 from ebkr/game-add-doc
anttimaki Sep 8, 2025
29f9bad
Modify DownloadStatusEnum to keep track of extraction (vs. download) …
VilppeRiskidev Aug 27, 2025
72cca53
Further improvements to download/extract/install tracking
VilppeRiskidev Aug 28, 2025
54e92a2
Add cover image asset for House of Legacy
VilppeRiskidev Sep 9, 2025
c991ae9
Merge pull request #1907 from ebkr/house-of-legacy-assets
anttimaki Sep 10, 2025
8de3336
Merge pull request #1858 from ebkr/profile-rename-remove-trailing-spaces
anttimaki Sep 10, 2025
dc6b66d
Merge pull request #1860 from ebkr/reset-settings-disable-multiple-cl…
anttimaki Sep 10, 2025
ea98fcf
Merge pull request #1894 from ebkr/extraction-status-enum
anttimaki Sep 10, 2025
05702c0
Merge pull request #1903 from ebkr/dexie-settings-debug
anttimaki Sep 10, 2025
2072648
Added barebones drag resize functionality
ebkr Jul 25, 2025
137569a
Fixed overflow appearance by clamping sizes
ebkr Jul 25, 2025
f1f4be0
Changed drag functionality to move with mouse
ebkr Jul 28, 2025
ed7cce3
Panel size is persisted
ebkr Jul 28, 2025
8d4f568
Added BepisLoader support
ebkr Aug 28, 2025
b17e04f
Removed unnecessary conditional from BepInExInstaller and added miss …
ebkr Aug 29, 2025
913389c
Removed outdated comment
ebkr Aug 29, 2025
70e82d6
Mods can be installed to `Renderer`folder
ebkr Sep 8, 2025
82b4c49
BepisLoader and BepInExPack_Renderer loaders can both be used for Res…
ebkr Sep 9, 2025
8245ed0
Made conditional logic safer and cleanup
ebkr Sep 10, 2025
e1d4c59
Updated ecosystem schema and added Resonite cover
ebkr Sep 10, 2025
cb10cb3
Merge pull request #1896 from ebkr/bepisloader-support
anttimaki Sep 10, 2025
def3e6d
Updated BepisLoaderGameInstructions to use Doorstop V4
ebkr Sep 10, 2025
5580bef
Ecosystem sync
ebkr Sep 10, 2025
e808d0f
Merge pull request #1909 from ebkr/resonite-bepinex-renderer-support
anttimaki Sep 10, 2025
49ba46e
Fix absolute import path
anttimaki Sep 10, 2025
7815b07
Remove duplicate entry
anttimaki Sep 10, 2025
60ca2d2
Merge pull request #1910 from ebkr/fix-import
anttimaki Sep 10, 2025
1771caf
Several fixes for Resonite
ebkr Sep 12, 2025
239bbf8
Merge pull request #1906 from ebkr/adjustable-preview-panel-size
ebkr Sep 12, 2025
e432fa6
"Quasar upgrade" dependency updates
ebkr Jun 20, 2025
0ce453e
Removed Quasar configuration files
ebkr Jun 20, 2025
00fce10
Updated Quasar config file
ebkr Jun 20, 2025
11243dc
Added required index.html and updated packages
ebkr Jun 20, 2025
8e4f9b1
Updated yarn.lock file
ebkr Jun 20, 2025
91bac69
Resolved missing Quasar variable errors
ebkr Jun 20, 2025
492515d
Moved src-electron files to newly expected location
ebkr Jun 20, 2025
0f8fb7d
Converted src-electron files to TypeScript
ebkr Jun 20, 2025
f5669a2
Converted src-electron files to ESM and added electron-env.d.ts
ebkr Jun 20, 2025
09e61b4
Updated boot files to support Vue 3
ebkr Jun 20, 2025
2098399
Updated store and router index files to Vue 3
ebkr Jun 20, 2025
95b9595
Removed q-app wrapper according to upgrade docs
ebkr Jun 20, 2025
0674577
Updated routes.ts to use Vue 3 types
ebkr Jun 20, 2025
b237fd0
Enforced version for Vuex
ebkr Jun 20, 2025
e8af3ba
Updated Vue Router usage of UtilityComposable.ts
ebkr Jun 20, 2025
e2907a1
Changed quasar.config.ts targets, minify, and added polyfills
ebkr Jun 20, 2025
8fc26b7
Converted ChildProcess import to indirectly extract exec
ebkr Jun 20, 2025
eeed608
Implemented provider for os library.
ebkr Jun 20, 2025
8c76a7b
Switched path usages to call provider
ebkr Jun 20, 2025
07d9312
Added stacktrace to R2Error.ts
ebkr Jun 20, 2025
7455c05
WIP: Getting preload to work to implement Path library
ebkr Jun 20, 2025
80cf655
Implemented frontend replacement for Node path library
ebkr Jun 23, 2025
9981c02
Implemented child_process exec and execSync methods
ebkr Jun 24, 2025
5ec74e4
Changed missed "path" imports to use provider
ebkr Jun 24, 2025
2403ea1
Removed further uses of ipc in frontend
ebkr Jun 24, 2025
93b560d
Upgraded store and router. Deferenced boot files.
ebkr Jun 24, 2025
e69252f
Implemented minimal required calls to initialise app
ebkr Jun 24, 2025
e78d346
Ported App.vue IPC usages to Promise based calls resolved via preload
ebkr Jun 25, 2025
78724b9
AppData directory and image loading changes
ebkr Jun 25, 2025
bbc0741
Fixed visual regressions on GameSelectionScreen.vue
ebkr Jun 26, 2025
b349776
Added replacement for process.platform and fixed path implementations
ebkr Jun 26, 2025
7df4d58
Fixed visual regression and state errors on Splash.vue
ebkr Jun 26, 2025
33fea4d
Fixed progression to Profiles.vue screen
ebkr Jun 27, 2025
8536e0a
Allow progression from profile selection screen to manager main view
ebkr Jun 30, 2025
b93886b
OnlineModList now renders
ebkr Jun 30, 2025
05518c8
Preview panel can now open correctly
ebkr Jun 30, 2025
130bce0
Fixed pagination buttons and removed defineProps warning
ebkr Jun 30, 2025
89547da
Fixed window titles
ebkr Jun 30, 2025
368b9a2
Modified NavigationMenu items to show correct tag colours
ebkr Jun 30, 2025
0ec63da
Replaced more usages of process.platform
ebkr Jun 30, 2025
6eb202f
Fixed `code` component styling
ebkr Jun 30, 2025
5243953
Fixed theme colours for NavigationMenu items
ebkr Jun 30, 2025
a4bc8ce
Fixed colours for Settings screen
ebkr Jul 1, 2025
ce5e269
Added hr override for Help page - Changed from blue to grey
ebkr Jul 1, 2025
810b744
Mod list is no longer wiped on each launch and mods can be read corre…
ebkr Jul 1, 2025
a6e7b62
List of profiles are shown correctly
ebkr Jul 1, 2025
369e333
Improved performance by removing prewarm until profile has been selected
ebkr Jul 1, 2025
296b6d7
Fixed Splash.vue ensuring wrapper script exists
ebkr Jul 1, 2025
ac32176
LocalModList.vue now renders draggable list
ebkr Jul 1, 2025
901f23e
Implemented full fs and path libraries
ebkr Jul 2, 2025
f5e6e97
Fixed LocalModList image resolve
ebkr Jul 2, 2025
1c7bd49
Started adding IPC support for adm-zip
ebkr Jul 2, 2025
62917ef
Added IPC support for adm-zip
ebkr Jul 3, 2025
1ee1129
Prevented state error in DownloadModule
ebkr Jul 3, 2025
57645b1
Added support for Electron shell calls
ebkr Jul 3, 2025
c80a9e6
Replaced more path usages with IPC equivalent
ebkr Jul 3, 2025
41aafc2
Added electron shell openPath support for EGS runner
ebkr Jul 3, 2025
2f9ba70
Fixed wrapper write to disk on Unix systems
ebkr Jul 3, 2025
7eb57f7
Prevented error on missing element during Linux Setup copy
ebkr Jul 3, 2025
2b8eb1e
WIP: Resolving error with window not being defined
ebkr Jul 3, 2025
ed71087
Corrected import and ensured copyFolder to always exists
ebkr Jul 4, 2025
bc40131
Download UUID now string based instead of object
ebkr Jul 4, 2025
7b966a9
Mod cache is now populated after install
ebkr Jul 4, 2025
74cc7f2
Fixed tooltips and re-added i18n boot file
ebkr Jul 4, 2025
fbbe272
Removed logging from FolderMigration.ts
ebkr Jul 4, 2025
d2d3f13
Converted InteractionProviderImpl to use IPC
ebkr Jul 4, 2025
95d591e
Fixed mtime usage in NodeFs
ebkr Jul 7, 2025
2b711a9
Games can now be launched
ebkr Jul 7, 2025
4397b15
Added OS library IPC implementation
ebkr Jul 4, 2025
bdb9110
Switched router from hash to web history mode
ebkr Jul 14, 2025
a9bad4b
Fixed additional Vuex state errors
ebkr Jul 14, 2025
ac265e9
Resolved error about legacy i18n usage
ebkr Jul 14, 2025
75b3b73
Fixed ZipProvider.getEntries serialization
ebkr Jul 14, 2025
d07d732
Fixed warning where "strike" tag is unrecognised
ebkr Jul 14, 2025
a19031a
File exports can now be imported
ebkr Jul 15, 2025
487c989
Fixed issues after rebase
ebkr Aug 4, 2025
7e62cf0
Addressed PR comments:
ebkr Aug 14, 2025
eac7048
Addressed more PR comments:
ebkr Aug 15, 2025
0aecaaa
Added window to d.ts and upgraded TypeScript version
ebkr Aug 15, 2025
e73516c
Fixed built executable issues
ebkr Aug 18, 2025
b54f9b3
More env.d.ts declarations and PR fixes
ebkr Aug 18, 2025
c42af63
Added icongenie (by Quasar) generated icon
ebkr Aug 18, 2025
fa7c83c
Ported relevant preload binds to invoke/handle
ebkr Aug 18, 2025
9c6af67
Removed redundant catch block
ebkr Aug 18, 2025
ee9493d
Changed Quasar CSS imports and node implementations to relative
ebkr Aug 19, 2025
587f135
Removed need to coerce type definition of writeFile implementation
ebkr Aug 19, 2025
43362f4
Converted CustomInstructions.ts to be lazy resolved
ebkr Aug 19, 2025
ffcc706
Lazy-loading ReturnOfModdingInstaller and ShimloaderInstaller install…
ebkr Aug 19, 2025
b572453
Added store strict mode based on Vite mode
ebkr Aug 19, 2025
f4e3420
Added provider to get public asset path
ebkr Aug 19, 2025
84c9121
Added CdnHostList to allow overriding CDNs
ebkr Aug 20, 2025
622e829
Changed CdnProvider import to relative
ebkr Aug 20, 2025
e20b635
Moved protocol to CDNS array
ebkr Aug 20, 2025
04155e4
Added package url transformer
ebkr Aug 20, 2025
3b83821
Fixed issue with CDN replacement including protocol
ebkr Aug 21, 2025
c1fdcdb
Changed UrlUtils to replace protocol to be in line with the one speci…
ebkr Aug 21, 2025
8f7d0b9
Added transformer usages for hard-coded TS URLs
ebkr Aug 21, 2025
eaebc1e
Fixed bug when importing profiles due to getEntries not being deseria…
ebkr Aug 27, 2025
961c7d7
Fixed path import in WrapperArguments.ts
ebkr Aug 29, 2025
669546a
Changed DownloadUtils.ts to use IPC path
ebkr Sep 9, 2025
9775ce4
WIP: Vitest support
ebkr Jul 29, 2025
bdf691b
Fixed MelonLoader state.spec.ts
ebkr Jul 29, 2025
858427a
WIP: Added Installer tests, fixing ReturnOfModding.Tests.spec.ts
ebkr Jul 30, 2025
d37457f
Ported GameInstructionGenerator.ts.spec.ts
ebkr Jul 30, 2025
0bb258a
Ported Profile.ts.spec.ts
ebkr Jul 30, 2025
c07255f
Ported Game installer tests
ebkr Jul 30, 2025
fd3bf67
Removed ported tests from Jest folder
ebkr Jul 30, 2025
1656284
Ported InMemory.FsProvider.spec.ts to Vitest
ebkr Jul 30, 2025
d702d7d
Added provider for AppWindow calls to fix ModLinker test
ebkr Jul 30, 2025
0306b5d
Ported Util tests to Vitest
ebkr Jul 30, 2025
2faae24
Moved test-setup to Vitest
ebkr Jul 30, 2025
4ba650d
Ported utils to Vitest
ebkr Jul 30, 2025
09ac7c0
Removed Jest test folders
ebkr Jul 30, 2025
5ab240d
Removed all Jest references
ebkr Jul 30, 2025
42ed5d1
Removed process.stdout.write usages
ebkr Jul 30, 2025
cb69ab8
Updated package.json to run correct test command
ebkr Jul 30, 2025
ed61823
Bumped node version requirement in GitHub Actions build.yml
ebkr Jul 30, 2025
fa61e19
Bumped node version requirement in GitHub Actions test.yml
ebkr Jul 30, 2025
63d85be
Added Quasar Prepare step to generate tsconfig.json in GitHub Actions
ebkr Jul 30, 2025
e7b0958
Updated yarn.lock after rebase
ebkr Aug 22, 2025
d952234
Fixed test after rebase
ebkr Aug 22, 2025
f8d7ea5
Addressed PR comments
ebkr Aug 22, 2025
b3b0928
Updated several path references to be relative
ebkr Sep 10, 2025
dad6801
Fixed issues after rebase
ebkr Sep 12, 2025
d5df172
Switched --doorstop-enabled from true to false
ebkr Sep 12, 2025
a1bc980
Addressed PR comments
ebkr Sep 15, 2025
7a494fb
Merge pull request #1912 from ebkr/resonite-fixes
anttimaki Sep 16, 2025
39b4237
Fixed bug and finalising changes:
ebkr Sep 18, 2025
6ca6808
Changed imports to relative
ebkr Sep 18, 2025
94dd1f6
Merge pull request #1823 from ebkr/quasar-upgrade
ebkr Sep 18, 2025
6e68429
Added if condition to donate icon button
ebkr Sep 18, 2025
8ffbc0e
Merge pull request #1914 from ebkr/donate-button-warning-fix
ebkr Sep 18, 2025
a085c97
Updated README and versions
ebkr Sep 19, 2025
c19a10d
Merge pull request #1915 from ebkr/release-3.2.4
ebkr Sep 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
uses: actions/setup-node@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 20.11.0
node-version: 20.19.0
cache: yarn

- name: Install Yarn dependencies
Expand Down
7 changes: 5 additions & 2 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,16 @@ jobs:
uses: actions/setup-node@v3
with:
# The talk on the street says this might be a good version for building.
node-version: 20.11.0
node-version: 20.19.0
cache: yarn

- name: Install Yarn dependencies
run: yarn install --frozen-lockfile

- name: Prepare Quasar files
run: npx @quasar/cli prepare

- name: Run tests
run: >
node test/folder-structure-testing/populator.mjs &&
yarn run test:unit:ci
yarn run test
5 changes: 5 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# pnpm-related options
shamefully-hoist=true
strict-peer-dependencies=false
# to get the latest compatible packages when creating the project https://github.com/pnpm/pnpm/issues/6463
resolution-mode=highest
8 changes: 0 additions & 8 deletions .postcssrc.js

This file was deleted.

4 changes: 0 additions & 4 deletions .prettierrc

This file was deleted.

20 changes: 0 additions & 20 deletions .space.kts

This file was deleted.

35 changes: 0 additions & 35 deletions .stylintrc

This file was deleted.

17 changes: 17 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,20 @@
### 3.2.4
#### Games added
- Hollow Knight: Silksong
- Resonite
- House of Legacy
- Beton Brutal
- Pair A Dice
- Maltese's Fluffy Onsen
- Paper Animal Adventure
- PAC-MAN WORLD Re-PAC
- Darkwater

#### Changes
- Preview panel can now be resized
- Download and install progress is now better reflected
- The entire application has upgraded to Vue 3 along with some other internal tooling upgrades

### 3.2.3
#### Games added
- Len's Island
Expand Down
8 changes: 8 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
> [!WARNING]
> There has been a rise in third-party redistribution sites which are claiming to be official.
>
> There are only two legitimate places to download r2modman which are:
>
> - [Thunderstore](https://thunderstore.io/package/ebkr/r2modman/)
> - [GitHub](https://github.com/ebkr/r2modmanPlus/releases/latest)

# r2modman

[![Discord](https://img.shields.io/discord/727304496522461185?label=r2modman%20Discord&style=for-the-badge)](https://discord.gg/jE2zWHY)
Expand Down
6 changes: 0 additions & 6 deletions babel.config.js

This file was deleted.

126 changes: 9 additions & 117 deletions docs/Adding a game.md
Original file line number Diff line number Diff line change
@@ -1,121 +1,13 @@
# Adding a game

## Requirements
### Game metadata
- Game image (png/jpg - 188x250px)
- App ID for available platforms.
- Folder name relative to root directory ( EG: _steamapps/common/_**Risk of Rain 2** OR _steamapps/common/_**BONEWORKS/BONEWORKS** )
- Game data directory (if applicable). Usually **executable name**
If the game uses a mod loader that is already supported, adding a game is easy:

### Mod loader
- An uploaded mod loader package on TS
- Package identifier
- Mod loader type (BepInEx/MelonLoader/Northstar/etc)
- Format to unpack loader
- BepInEx contents is usually one folder deeper than the package root.

### An understanding of the game's installation rules
- Subdir vs State vs None
- If the mod loader is already used in existing places then this can usually just be copied and lightly modified.

## Adding a new game listing

### Add a new entry to GameManager.ts
- **DisplayName**
- How it appears when presented to the user.
- **InternalFolderName**
- The folder name where files related to profiles and cached packages are saved under.
- Server listings can share this InternalFolderName to have profiles shared between both game/server.
- _Try to keep this without spaces - Helps with max path character limit_
- **SettingsIdentifier**
- Used to scope settings for games.
- **SteamFolderName**
- Used to resolve the game dir. Only Steam related currently, but not a requirement.
- **ExeName**
- An array of different executable names (for all platforms). For `StorePlatform` types such as `OTHER` and `STEAM_DIRECT` then the first found executable is used and called when the game is launched.
- **DataFolderName**
- Required for Unreal games relying on unreal-shimloader.
- **TsUrl**
- The Thunderstore API endpoint for the listing.
- **Platforms**
- Array of `StorePlatformMetadata` for the different supported storefronts. Identifier is not required, however is expected for Steam and EGS (more potentially in future).
- **GameImage**
- Name of the file to display on the GameSelectionScreen view.
- The image file should be placed under `/src/assets/images/game_selection/`. Ensure resolution is 188x250px.
- **DisplayMode**
- Is the game selection presented to the user? (VISIBLE/HIDDEN).
- **InstanceType**
- Is it a game or a server? Only affects the tab the listing is displayed in on the GameSelectionScreen view.
- **PackageLoader**
- Default package loader to use for game launch rules. Saves having to write new rules each time.
- **AdditionalSearchStrings (Optional)**
- Other names that can be used to search for a game on the GameSelectionScreen view.
- EG: RoR2, NASB, TABS, etc.
- Pattern is lowercase although likely isn't necessary.

### Creating new installation rules
- See all files under `/src/r2mm/installing/default_installation_rules/`
- `game_rules` stores all game specific rules.
- Make a new rule file here.
- `generic` is unused currently. Plans to have a standard "BepInEx" rule for example where other rules can build on top of it.
- `InstallationRuleApplicator.ts` is used to load the installation rules. The app will result in a white screen if this is not modified.

To add a new game rule you'll need the following:
- **gameName**
- The InternalFolderName for the game listing.
- **rules**
- The installation rules to be applied
- **relativeFileExclusions**
- Currently only for state-based installs. Used to strip specific files such as `manifest.json` to reduce conflict management abuse.

#### How to write rules
- **route**
- The path relative to the profile folder.
- **isDefaultLocation**
- If no files can be resolved, place them here following the `trackingMethod` given.
- **defaultFileExtensions**
- Similar to `isDefaultLocation` but for any matching extensions.
- **trackingMethod**
- SUBDIR
- Places files in their own namespaced folder inside of the route.
- STATE
- Places files as-is into the route. Has conflict management built-in.
- NONE
- Places files as-is into the route. These files do not have conflict management and cannot be managed further. (No disable/uninstall behaviour).
- Ideal for configs.
- **subRoutes**
- Useful to allow multiple nested resolutions where override folders may be required at both a high and low level of the route.
- See BONEWORKS install rules for an example.
- Allows us to grant or restrict access to the raw BepInEx folder for example depending on the ending of the route name.

> Remember to add this to `InstallationRuleApplicator.ts`

#### Quick note: Resolving a directory
To summarise, a directory is placed (according to the `trackingMethod`) if the end of the route name matches.

See: [Structuring your Thunderstore package](https://github.com/ebkr/r2modmanPlus/wiki/Structuring-your-Thunderstore-package) for detailed information on how rules are handled.

### How to handle the mod loader
We have a "nice" `ModLoaderVariantRecord.ts` file which records which mod loader packages are associate with each game, and how to handle them.
- Key is the InternalFolderName
- Array can contain multiple `ModLoaderPackageMapping` objects
- **PackageName**
- The TS package name
- **RootFolder**
- Used for BepInEx. The subfolder where the files are located to be extracted into the profile dir.
- **LoaderType**
- BEPINEX / MELON_LOADER / NORTHSTAR / etc

## Finally, test
You should always test manually to ensure no white screen is present on startup.

There is also a test suite to ensure that the installation rules work as intended (under `/test/folder-structure-testing`).
This suite works by adding files to any folders you create when running populator.mjs. (Should run depopulator.mjs prior to repopulating).

> Folder names such as `BIE_GameSpecific_GTFO_GameData_Files` are created by the populator. You do not need to create these files.

### Running populator tests
- You'll need to run either `test:unit:ci` or `test:unit:ui`
- Test files are located under `/test/jest/__tests__/impl/install_logic/game_specific/`
- These are generally only needed if any rules were modified after being copied.
1. Follow the [documentation](https://github.com/thunderstore-io/ecosystem-schema/blob/master/games/ADD_GAME.md) to get the game added to Thunderstore ecosystem.
2. Update the local schema from Thunderstore API by running `yarn run sync`.
3. Add game image to `public/images/game_selection/`.
- webp format
- 360x480px
- filename should match the one defined in `ecosystem.json`
4. Test manually that the app starts and the game can be launched via mod manager.

Adding support for a new mod loader requires more effort and should be discussed in advance. A good place for this discussion is the game addition request on Thunderstore's Discord (see the documentation linked above).
21 changes: 21 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<title><%= productName %></title>

<meta charset="utf-8">
<meta name="description" content="<%= productDescription %>">
<meta name="format-detection" content="telephone=no">
<meta name="msapplication-tap-highlight" content="no">
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width<% if (ctx.mode.cordova || ctx.mode.capacitor) { %>, viewport-fit=cover<% } %>">

<link rel="icon" type="image/png" sizes="128x128" href="icons/favicon-128x128.png">
<link rel="icon" type="image/png" sizes="96x96" href="icons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
<link rel="icon" type="image/ico" href="favicon.ico">
</head>
<body>
<!-- quasar:entry-point -->
</body>
</html>
82 changes: 0 additions & 82 deletions jest.config.js

This file was deleted.

Loading
Loading