diff --git a/.github/workflows/algolia-crawler.yml b/.github/workflows/algolia-crawler.yml index cd5ee4b..1572ee7 100644 --- a/.github/workflows/algolia-crawler.yml +++ b/.github/workflows/algolia-crawler.yml @@ -31,4 +31,4 @@ jobs: crawler-api-key: ${{ secrets.CRAWLER_API_KEY }} algolia-app-id: ${{ secrets.ALGOLIA_APP_ID }} algolia-api-key: ${{ secrets.ALGOLIA_API_KEY }} - site-url: 'https://modding.resonite.net' \ No newline at end of file + site-url: 'https://modding.resonite.net' diff --git a/.prettierignore b/.prettierignore index e88fe36..10514ae 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,2 +1,3 @@ pnpm-lock.yaml pnpm-workspace.yaml +src/content/docs/reference diff --git a/astro.config.mjs b/astro.config.mjs index 0617b0c..4654b54 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -51,24 +51,22 @@ export default defineConfig({ { label: 'Getting Started', translations: { en: 'Getting Started' }, - items: [ - { translations: { en: 'Installation' }, slug: 'getting-started/installation' }, - { translations: { en: 'Your First Mod' }, slug: 'getting-started/first-mod' }, - { translations: { en: 'Troubleshooting' }, slug: 'getting-started/troubleshooting' }, - ], + autogenerate: { directory: 'getting-started' }, + }, + { + label: 'Creating a Mod', + translations: { en: 'Creating a Mod' }, + autogenerate: { directory: 'creating-a-mod' }, }, { label: 'Guides', translations: { en: 'Guides' }, - items: [ - { translations: { en: 'Mod Development Basics' }, slug: 'guides/mod-basics' }, - { translations: { en: 'Debugging Mods' }, slug: 'guides/debugging' }, - ], + autogenerate: { directory: 'guides' }, }, { label: 'Recipes', translations: { en: 'Recipes' }, - items: [], + autogenerate: { directory: 'recipes' }, }, { label: 'Reference', @@ -79,10 +77,7 @@ export default defineConfig({ { label: 'Resources', translations: { en: 'Resources' }, - items: [ - { translations: { en: 'Tools & Utilities' }, slug: 'resources/tools' }, - { translations: { en: 'Links & Community' }, slug: 'resources/links' }, - ], + autogenerate: { directory: 'resources' }, }, ], components: { diff --git a/docfx.json b/docfx.json index 4331c72..445d5f7 100644 --- a/docfx.json +++ b/docfx.json @@ -6,7 +6,9 @@ { "files": [ "BepInEx.Preloader.Core/BepInEx.Preloader.Core.csproj", - "BepInEx.Core/BepInEx.Core.csproj" + "BepInEx.Core/BepInEx.Core.csproj", + "Runtimes/NET/BepInEx.NET.Common/BepInEx.NET.Common.csproj", + "Runtimes/NET/BepInEx.NET.CoreCLR/BepInEx.NET.CoreCLR.csproj" ], "exclude": ["**/bin/**", "**/obj/**"] } @@ -15,8 +17,8 @@ "shouldSkipMarkup": false, "disableGitFeatures": false, "disableDefaultFilter": false, - "categoryLayout": "flattened", - "namespaceLayout": "flattened", + "categoryLayout": "nested", + "namespaceLayout": "nested", "memberLayout": "separatePages", "properties": { "TargetFramework": "net9.0" diff --git a/package.json b/package.json index 5dea996..d80db2e 100644 --- a/package.json +++ b/package.json @@ -16,17 +16,17 @@ "@astrojs/starlight": "^0.35.2", "@astrojs/starlight-docsearch": "^0.6.0", "@astrojs/svelte": "^7.1.0", - "astro": "^5.6.1", - "sharp": "^0.34.2", + "astro": "^5.13.5", + "sharp": "^0.34.3", "starlight-theme-rapide": "^0.5.1", - "svelte": "^5.38.2", + "svelte": "^5.38.6", "typescript": "^5.9.2" }, "devDependencies": { - "oxlint": "^1.12.0", + "oxlint": "^1.14.0", "oxlint-tsgolint": "^0.0.4", "prettier": "3.6.2", "prettier-plugin-astro": "0.14.1", - "vite": "^7.1.3" + "vite": "^7.1.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d4bdecc..372e696 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,35 +10,35 @@ importers: dependencies: '@astrojs/mdx': specifier: ^4.3.4 - version: 4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + version: 4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) '@astrojs/starlight': specifier: ^0.35.2 - version: 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + version: 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) '@astrojs/starlight-docsearch': specifier: ^0.6.0 - version: 0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3) + version: 0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3) '@astrojs/svelte': specifier: ^7.1.0 - version: 7.1.0(@types/node@24.3.0)(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.2)(typescript@5.9.2) + version: 7.1.0(@types/node@24.3.0)(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.6)(typescript@5.9.2) astro: - specifier: ^5.6.1 - version: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) + specifier: ^5.13.5 + version: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) sharp: - specifier: ^0.34.2 + specifier: ^0.34.3 version: 0.34.3 starlight-theme-rapide: specifier: ^0.5.1 - version: 0.5.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))) + version: 0.5.1(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))) svelte: - specifier: ^5.38.2 - version: 5.38.2 + specifier: ^5.38.6 + version: 5.38.6 typescript: specifier: ^5.9.2 version: 5.9.2 devDependencies: oxlint: - specifier: ^1.12.0 - version: 1.12.0 + specifier: ^1.14.0 + version: 1.14.0(oxlint-tsgolint@0.0.4) oxlint-tsgolint: specifier: ^0.0.4 version: 0.0.4 @@ -49,8 +49,8 @@ importers: specifier: 0.14.1 version: 0.14.1 vite: - specifier: ^7.1.3 - version: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) + specifier: ^7.1.4 + version: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) packages: @@ -675,43 +675,43 @@ packages: cpu: [x64] os: [win32] - '@oxlint/darwin-arm64@1.12.0': - resolution: {integrity: sha512-Pv+Ho1uq2ny8g2P6JgQpaIUF1FHPL32DfOlZhKqmzDT3PydtFvZp/7zNyJE3BIXeTOOOG1Eg12hjZHMLsWxyNw==} + '@oxlint/darwin-arm64@1.14.0': + resolution: {integrity: sha512-rcTw0QWeOc6IeVp+Up7WtcwdS9l4j7TOq4tihF0Ud/fl+VUVdvDCPuZ9QTnLXJhwMXiyQRWdxRyI6XBwf80ncQ==} cpu: [arm64] os: [darwin] - '@oxlint/darwin-x64@1.12.0': - resolution: {integrity: sha512-kNXPH/7jXjX4pawrEWXQHOasOdOsrYKhskA1qYwLYcv/COVSoxOSElkQtQa+KxN5zzt3F02kBdWDndLpgJLbLQ==} + '@oxlint/darwin-x64@1.14.0': + resolution: {integrity: sha512-TWFSEmyl2/DN4HoXNwQl0y/y3EXFJDctfv5MiDtVOV1GJKX80cGSIxMxXb08Q3CCWqteqEijmfSMo5TG8X1H/A==} cpu: [x64] os: [darwin] - '@oxlint/linux-arm64-gnu@1.12.0': - resolution: {integrity: sha512-U7NETs02K55ZyDlgdhx4lWeFYbkUKcL+YcG+Ak70EyEt/BKIIVt4B84VdV1JzC71FErUipDYAwPJmxMREXr4Sg==} + '@oxlint/linux-arm64-gnu@1.14.0': + resolution: {integrity: sha512-N1FqdKfwhVWPpMElv8qlGqdEefTbDYaRVhdGWOjs/2f7FESa5vX0cvA7ToqzkoXyXZI5DqByWiPML33njK30Kg==} cpu: [arm64] os: [linux] - '@oxlint/linux-arm64-musl@1.12.0': - resolution: {integrity: sha512-e4Pb2eZu3V2BsiX4t4gyv9iJ8+KRT6bkoWM5uC9BLX7edsVchwLwL6LB2vPYusYdPPrxdjlFCg6ni+9wlw7FbQ==} + '@oxlint/linux-arm64-musl@1.14.0': + resolution: {integrity: sha512-v/BPuiateLBb7Gz1STb69EWjkgKdlPQ1NM56z+QQur21ly2hiMkBX2n0zEhqfu9PQVRUizu6AlsYuzcPY/zsIQ==} cpu: [arm64] os: [linux] - '@oxlint/linux-x64-gnu@1.12.0': - resolution: {integrity: sha512-qJK98Dj/z7Nbm0xoz0nCCMFGy0W/kLewPzOK5QENxuUoQQ6ymt7/75rXOuTwAZJ6JFTarqfSuMAA0pka6Tmytw==} + '@oxlint/linux-x64-gnu@1.14.0': + resolution: {integrity: sha512-gUTp8KIrSYt97dn+tRRC3LKnH4xlHKCwrPwiDcGmLbCxojuN9/H5mnIhPKEfwNuZNdoKGS/ABuq3neVyvRCRtQ==} cpu: [x64] os: [linux] - '@oxlint/linux-x64-musl@1.12.0': - resolution: {integrity: sha512-jNeltpHc1eonSev/bWKipJ7FI6+Rc7EXh6Y7E0pm8e95sc1klFA29FFVs3FjMA6CCa+SRT0u0nnNTTAtf2QOiQ==} + '@oxlint/linux-x64-musl@1.14.0': + resolution: {integrity: sha512-DpN6cW2HPjYXeENG0JBbmubO8LtfKt6qJqEMBw9gUevbyBaX+k+Jn7sYgh6S23wGOkzmTNphBsf/7ulj4nIVYA==} cpu: [x64] os: [linux] - '@oxlint/win32-arm64@1.12.0': - resolution: {integrity: sha512-T3fpNZJ3Q9YGgJTKc1YyvGoomSXnrV5mREz0QACE06zUzfS8EWyaYc/GN17FhHvQ4uQk/1xLgnM6FPsuLMeRhw==} + '@oxlint/win32-arm64@1.14.0': + resolution: {integrity: sha512-oXxJksnUTUMgJ0NvjKS1mrCXAy1ttPgIVacRSlxQ+1XHy+aJDMM7I8fsCtoKoEcTIpPaD98eqUqlLYs0H2MGjA==} cpu: [arm64] os: [win32] - '@oxlint/win32-x64@1.12.0': - resolution: {integrity: sha512-2eC4XQ1SMM2z7bCDG+Ifrn5GrvP6fkL0FGi4ZwDCrx6fwb1byFrXgSUNIPiqiiqBBrFRMKlXzU9zD6IjuFlUOg==} + '@oxlint/win32-x64@1.14.0': + resolution: {integrity: sha512-iRYy2rhTQKFztyx0jtNMRBnFpzsRwFdjWQ7sKKzJpmbijA3Tw3DCqlGT7QRgoVRF0+X/ccNGvvsrgMohPVfLeQ==} cpu: [x64] os: [win32] @@ -999,8 +999,8 @@ packages: peerDependencies: astro: ^4.0.0-beta || ^5.0.0-beta || ^3.3.0 - astro@5.13.2: - resolution: {integrity: sha512-yjcXY0Ua3EwjpVd3GoUXa65HQ6qgmURBptA+M9GzE0oYvgfuyM7bIbH8IR/TWIbdefVUJR5b7nZ0oVnMytmyfQ==} + astro@5.13.5: + resolution: {integrity: sha512-XmBzkl13XU97+n/QiOM5uXQdAVe0yKt5gO+Wlgc8dHRwHR499qhMQ5sMFckLJweUINLzcNGjP3F5nG4wV8a2XA==} engines: {node: 18.20.8 || ^20.3.0 || >=22.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'} hasBin: true @@ -1750,10 +1750,15 @@ packages: resolution: {integrity: sha512-KFWVP+VU3ymgK/Dtuf6iRkqjo+aN42lS1YThY6JWlNi1GQqm7wtio/kAwssqDhm8kP+CVXbgZAtu1wgsK4XeTg==} hasBin: true - oxlint@1.12.0: - resolution: {integrity: sha512-tBQ9aB00aYLlGXE21WJHnKQAI8xoi2V6Eiz/WvGV7FwU9YLYuNOurEEVbfoS5u0ODX8GLvGWj1fdHh5Rb74Kkw==} + oxlint@1.14.0: + resolution: {integrity: sha512-oo0nq3zF9hmgATGc9esoMahLuEESOodUxEDeHDA2K7tbYcSfcmReE9G2QNppnq9rOSQHLTwlMtzGAjjttYaufQ==} engines: {node: '>=8.*'} hasBin: true + peerDependencies: + oxlint-tsgolint: '>=0.1.5' + peerDependenciesMeta: + oxlint-tsgolint: + optional: true p-limit@6.2.0: resolution: {integrity: sha512-kuUqqHNUqoIWp/c467RI4X6mmyuojY5jGutNU0wVTmEOOfcuwLqyMVoAi9MKi2Ak+5i9+nhmrK4ufZE8069kHA==} @@ -2030,8 +2035,8 @@ packages: svelte: ^3.55 || ^4.0.0-next.0 || ^4.0 || ^5.0.0-next.0 typescript: ^4.9.4 || ^5.0.0 - svelte@5.38.2: - resolution: {integrity: sha512-iAcp/oFAWauVSGILdD67n7DiwgLHXZzWZIdzl7araRxu72jUr7PFAo2Iie7gXt0IbnlYvhxCb9GT3ZJUquO3PA==} + svelte@5.38.6: + resolution: {integrity: sha512-ltBPlkvqk3bgCK7/N323atUpP3O3Y+DrGV4dcULrsSn4fZaaNnOmdplNznwfdWclAgvSr5rxjtzn/zJhRm6TKg==} engines: {node: '>=18'} tiny-inflate@1.0.3: @@ -2240,8 +2245,8 @@ packages: yaml: optional: true - vite@7.1.3: - resolution: {integrity: sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==} + vite@7.1.4: + resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2492,12 +2497,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/mdx@4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))': + '@astrojs/mdx@4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))': dependencies: '@astrojs/markdown-remark': 6.3.6 '@mdx-js/mdx': 3.1.0(acorn@8.15.0) acorn: 8.15.0 - astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) + astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) es-module-lexer: 1.7.0 estree-util-visit: 2.0.0 hast-util-to-html: 9.0.5 @@ -2521,9 +2526,9 @@ snapshots: stream-replace-string: 2.0.0 zod: 3.25.76 - '@astrojs/starlight-docsearch@0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)': + '@astrojs/starlight-docsearch@0.6.0(@algolia/client-search@5.36.0)(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)))(search-insights@2.17.3)': dependencies: - '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + '@astrojs/starlight': 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) '@docsearch/css': 3.9.0 '@docsearch/js': 3.9.0(@algolia/client-search@5.36.0)(search-insights@2.17.3) transitivePeerDependencies: @@ -2533,17 +2538,17 @@ snapshots: - react-dom - search-insights - '@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))': + '@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))': dependencies: '@astrojs/markdown-remark': 6.3.6 - '@astrojs/mdx': 4.3.4(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + '@astrojs/mdx': 4.3.4(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) '@astrojs/sitemap': 3.5.0 '@pagefind/default-ui': 1.3.0 '@types/hast': 3.0.4 '@types/js-yaml': 4.0.9 '@types/mdast': 4.0.4 - astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) - astro-expressive-code: 0.41.3(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) + astro-expressive-code: 0.41.3(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) bcp-47: 2.1.0 hast-util-from-html: 2.0.3 hast-util-select: 6.0.4 @@ -2566,12 +2571,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/svelte@7.1.0(@types/node@24.3.0)(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.2)(typescript@5.9.2)': + '@astrojs/svelte@7.1.0(@types/node@24.3.0)(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))(jiti@2.5.1)(lightningcss@1.30.1)(svelte@5.38.6)(typescript@5.9.2)': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) - astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) - svelte: 5.38.2 - svelte2tsx: 0.7.42(svelte@5.38.2)(typescript@5.9.2) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) + astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) + svelte: 5.38.6 + svelte2tsx: 0.7.42(svelte@5.38.6)(typescript@5.9.2) typescript: 5.9.2 vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) transitivePeerDependencies: @@ -2987,28 +2992,28 @@ snapshots: '@oxlint-tsgolint/win32-x64@0.0.4': optional: true - '@oxlint/darwin-arm64@1.12.0': + '@oxlint/darwin-arm64@1.14.0': optional: true - '@oxlint/darwin-x64@1.12.0': + '@oxlint/darwin-x64@1.14.0': optional: true - '@oxlint/linux-arm64-gnu@1.12.0': + '@oxlint/linux-arm64-gnu@1.14.0': optional: true - '@oxlint/linux-arm64-musl@1.12.0': + '@oxlint/linux-arm64-musl@1.14.0': optional: true - '@oxlint/linux-x64-gnu@1.12.0': + '@oxlint/linux-x64-gnu@1.14.0': optional: true - '@oxlint/linux-x64-musl@1.12.0': + '@oxlint/linux-x64-musl@1.14.0': optional: true - '@oxlint/win32-arm64@1.12.0': + '@oxlint/win32-arm64@1.14.0': optional: true - '@oxlint/win32-x64@1.12.0': + '@oxlint/win32-x64@1.14.0': optional: true '@pagefind/darwin-arm64@1.3.0': @@ -3133,25 +3138,25 @@ snapshots: dependencies: acorn: 8.15.0 - '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))': + '@sveltejs/vite-plugin-svelte-inspector@4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))': dependencies: - '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) + '@sveltejs/vite-plugin-svelte': 5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) debug: 4.4.1 - svelte: 5.38.2 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) + svelte: 5.38.6 + vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))': + '@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.2)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.2)(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) + '@sveltejs/vite-plugin-svelte-inspector': 4.0.1(@sveltejs/vite-plugin-svelte@5.1.1(svelte@5.38.6)(vite@6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)))(svelte@5.38.6)(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) debug: 4.4.1 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.17 - svelte: 5.38.2 - vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) - vitefu: 1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) + svelte: 5.38.6 + vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) + vitefu: 1.1.1(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)) transitivePeerDependencies: - supports-color @@ -3255,12 +3260,12 @@ snapshots: astring@1.9.0: {} - astro-expressive-code@0.41.3(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)): + astro-expressive-code@0.41.3(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)): dependencies: - astro: 5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) + astro: 5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2) rehype-expressive-code: 0.41.3 - astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2): + astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2): dependencies: '@astrojs/compiler': 2.12.2 '@astrojs/internal-helpers': 0.7.2 @@ -4492,16 +4497,16 @@ snapshots: '@oxlint-tsgolint/win32-arm64': 0.0.4 '@oxlint-tsgolint/win32-x64': 0.0.4 - oxlint@1.12.0: + oxlint@1.14.0(oxlint-tsgolint@0.0.4): optionalDependencies: - '@oxlint/darwin-arm64': 1.12.0 - '@oxlint/darwin-x64': 1.12.0 - '@oxlint/linux-arm64-gnu': 1.12.0 - '@oxlint/linux-arm64-musl': 1.12.0 - '@oxlint/linux-x64-gnu': 1.12.0 - '@oxlint/linux-x64-musl': 1.12.0 - '@oxlint/win32-arm64': 1.12.0 - '@oxlint/win32-x64': 1.12.0 + '@oxlint/darwin-arm64': 1.14.0 + '@oxlint/darwin-x64': 1.14.0 + '@oxlint/linux-arm64-gnu': 1.14.0 + '@oxlint/linux-arm64-musl': 1.14.0 + '@oxlint/linux-x64-gnu': 1.14.0 + '@oxlint/linux-x64-musl': 1.14.0 + '@oxlint/win32-arm64': 1.14.0 + '@oxlint/win32-x64': 1.14.0 oxlint-tsgolint: 0.0.4 p-limit@6.2.0: @@ -4893,9 +4898,9 @@ snapshots: space-separated-tokens@2.0.2: {} - starlight-theme-rapide@0.5.1(@astrojs/starlight@0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))): + starlight-theme-rapide@0.5.1(@astrojs/starlight@0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2))): dependencies: - '@astrojs/starlight': 0.35.2(astro@5.13.2(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) + '@astrojs/starlight': 0.35.2(astro@5.13.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)(rollup@4.46.3)(typescript@5.9.2)) stream-replace-string@2.0.0: {} @@ -4936,14 +4941,14 @@ snapshots: dependencies: s.color: 0.0.15 - svelte2tsx@0.7.42(svelte@5.38.2)(typescript@5.9.2): + svelte2tsx@0.7.42(svelte@5.38.6)(typescript@5.9.2): dependencies: dedent-js: 1.0.1 pascal-case: 3.1.2 - svelte: 5.38.2 + svelte: 5.38.6 typescript: 5.9.2 - svelte@5.38.2: + svelte@5.38.6: dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 @@ -5107,7 +5112,7 @@ snapshots: jiti: 2.5.1 lightningcss: 1.30.1 - vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1): + vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1): dependencies: esbuild: 0.25.9 fdir: 6.5.0(picomatch@4.0.3) @@ -5125,9 +5130,9 @@ snapshots: optionalDependencies: vite: 6.3.5(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) - vitefu@1.1.1(vite@7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)): + vitefu@1.1.1(vite@7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1)): optionalDependencies: - vite: 7.1.3(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) + vite: 7.1.4(@types/node@24.3.0)(jiti@2.5.1)(lightningcss@1.30.1) web-namespaces@2.0.1: {} diff --git a/src/components/Card.astro b/src/components/Card.astro index f2791f1..72ba87b 100644 --- a/src/components/Card.astro +++ b/src/components/Card.astro @@ -1,12 +1,10 @@ --- import { Icon } from '@astrojs/starlight/components'; import type { StarlightIcon } from '@astrojs/starlight/types'; - interface Props { icon?: StarlightIcon; title: string; } - const { icon, title } = Astro.props; --- @@ -17,7 +15,6 @@ const { icon, title } = Astro.props;

- diff --git a/src/components/CardGrid.astro b/src/components/CardGrid.astro new file mode 100644 index 0000000..0462240 --- /dev/null +++ b/src/components/CardGrid.astro @@ -0,0 +1,38 @@ +--- +interface Props { + stagger?: boolean; +} + +const { stagger = false } = Astro.props; +--- + +
+ + diff --git a/src/content/docs/creating-a-mod/creating-a-project.mdx b/src/content/docs/creating-a-mod/creating-a-project.mdx new file mode 100644 index 0000000..a141dd2 --- /dev/null +++ b/src/content/docs/creating-a-mod/creating-a-project.mdx @@ -0,0 +1,187 @@ +--- +title: Creating a Project +description: Set up a new Resonite BepInEx mod project using the official template. +sidebar: + order: 1 +--- + +import { LinkCard, LinkButton, FileTree } from '@astrojs/starlight/components'; + +Creating a mod for Resonite is simple using the official BepInEx template. This guide covers installing the template, generating a project, and configuring it for development. + +## Installing + +.NET templates must be installed before they can be used. This means that when you install the template, it doesn't create a new project for you, but you will get the ability to do that. + +Once you have the template installed, you don't need to install it again, through it's a good idea to update it if there are updates. + + + See the BepInEx Template repository + + +:::caution +You must use .NET SDK 9 or newer. Older versions are unsupported. +::: + +### From NuGet (Recommended) + +Install the template from the Resonite modding NuGet feed: + +```bash +dotnet new install BepInEx.Templates::2.0.0-be.* --nuget-source https://nuget-modding.resonite.net/v3/index.json +``` + +### Manual Install + +If you're contributing to the template or prefer manual installation: + +1. Clone or download [this repository](https://github.com/ResoniteModding/BepInEx.Templates) +2. Navigate to the `BepInEx.Templates` folder +3. Run: + +```bash +cd BepInEx.Templates +dotnet new install . +``` + +To update: + +```bash +git pull +dotnet new install . --force +``` + +To uninstall: + +```bash +dotnet new uninstall . +``` + +Once installed, the template will be available as `BepInEx 6 Resonite Plugin` with the short name `bep6resonite`. + +## Creating a New Mod + +Run the following command in your Resonite modding directory: + +:::note +By default, the first value in `--authors` is used as your Thunderstore team name. If this doesn't match your actual Thunderstore team, you'll need to manually update the `namespace` field in `thunderstore.toml`. + +A Thunderstore "team" is simply the author name your mods are published under - it can be just your username. + +Create your Thunderstore team here: https://thunderstore.io/settings/teams/create/ +::: + +```bash +dotnet new bep6resonite --name MyPluginName --authors "MyName" --packageId net.myname.mypluginmame --repositoryUrl "https://github.com/myuser/mymod" +``` + +This will create a new folder called `MyPluginName` with your mod's project. + +### Template Options + +You can customize your project with these options: + +- `-ve|--version` - Plugin version (default: 1.0.0) +- `-au|--authors` - Comma-separated list of plugin authors (default: YourName) +- `-r|--repositoryUrl` - Repository URL (auto-generated as `https://github.com/[FirstAuthor]/[ProjectName]` if empty) +- `-p|--packageId` - Package ID (auto-generated as `[FirstAuthor].[ProjectName]` if empty) +- `-g|--gitInit` - Initialize a git repository (default: true) + +:::tip +Use `dotnet new bep6resonite --help` to see all available options. +::: + +## Project Structure + +This example demonstrates creating a project with the template: + +```bash +~/Workspace/Resonite$ dotnet new bep6resonite -n ResoniteMod +The template "BepInEx 6 Resonite Plugin (.NET 9, Thunderstore Ready)" was created successfully. +``` + +After creation, you'll see helpful next steps instructions. Now let's look at the project structure: + +```bash +~/Workspace/Resonite$ cd ResoniteMod/ +``` + +The file structure in `ResoniteMod/` should look like this: + + +- .gitignore +- CHANGELOG.md +- Directory.Build.targets +- icon.png +- LICENSE +- README.md +- ResoniteMod.sln +- thunderstore.toml +- .config/ + - dotnet-tools.json +- src/ + - ResoniteMod/ + - Plugin.cs + - ResoniteMod.csproj + + +Key points: + +- Your mod code is in `./src//` +- `Directory.Build.targets` file defines `PackTS` target, see the [Packaging and Publishing](/creating-a-mod/packaging-and-publishing) guide +- `.sln` is your project solution + +The project is configured so that it's easy to add new projects into your project solution. Even if you don't need that, it's good to follow this standard project structure. + +### Post-Creation Setup + +After creating your project, the template provides helpful instructions: + +1. **Set up game path**: Either set `ResonitePath` environment variable or update `GamePath` in the .csproj +2. **Review metadata**: Update project metadata in the .csproj file (Version, Authors, etc.) +3. **Replace TODOs**: Search for `TODO` comments in the generated template and replace them with your actual values +4. **Build**: Run `dotnet build` - this automatically copies the plugin to BepInEx/plugins folder + +### Automatic Game Path Detection + +The template automatically finds your Resonite installation: + +1. First checks the `ResonitePath` environment variable +2. Falls back to Steam installation paths +3. Uses NuGet package for game references if local install not found + +### Build Configuration + +Your plugin metadata is automatically generated from `.csproj` properties: + +- `PackageID` → Plugin GUID +- `Product` → Plugin Name +- `Version` → Plugin Version +- `Authors` → Plugin Authors +- `RepositoryUrl` → Repository URL + +### Thunderstore Packaging + +The template includes built-in Thunderstore packaging support. Your project comes with: + +- `thunderstore.toml` - Package configuration +- `icon.png` - Your mod's icon (replace with your own 256x256 image) +- Build targets for creating and publishing packages + +For detailed packaging and publishing instructions, see the [Packaging and Publishing](/creating-a-mod/packaging-and-publishing) guide. + + + + diff --git a/src/content/docs/creating-a-mod/initial-setup.mdx b/src/content/docs/creating-a-mod/initial-setup.mdx new file mode 100644 index 0000000..feaa205 --- /dev/null +++ b/src/content/docs/creating-a-mod/initial-setup.mdx @@ -0,0 +1,70 @@ +--- +title: Initial Setup +description: Learn to set up your environment to get started with making Resonite mods! +sidebar: + order: 0 +--- + +import { LinkCard, Tabs, TabItem, Steps } from '@astrojs/starlight/components'; + +Modding might sound complicated, but it's much easier if you start with the right mindset and a simple mod. + +## Install the Requirements + +Before you can start modding Resonite, you'll need to install two essential tools: + +- **.NET SDK 9.0** – _This is needed so you can compile C# code._ + - [Download .NET here](https://dotnet.microsoft.com/en-us/download) +- **IDE** – _This is where you'll write and build your code. Choosing one can depend on your preferences and system._ + - [Visual Studio Code](https://code.visualstudio.com) (A lightweight, fast, and highly customizable editor with a wide range of extensions.) + - [Visual Studio](https://visualstudio.microsoft.com/vs/community/) (A powerful, feature-rich IDE widely used for C# and .NET development.) + - [Rider](https://www.jetbrains.com/rider/#) (A full-featured, IDE optimized for C# and .NET development.) + +Now that you have .NET and an IDE, we can move on to creating your first mod. + +:::caution +This guide will not cover setting up your IDE. If you're stuck at this point, try watching a video tutorial. +::: + +## Installing BepInEx + +You'll need BepInEx (via BepisLoader) installed to develop mods. Follow our [installation guide](/getting-started/installation/) to set it up using either: + +- **Mod Manager** (recommended) - Easy automatic installation +- **Manual installation** - For custom configurations + +:::note[Console Window] +If you've used BepInEx before, you may notice the console window doesn't appear — this is disabled by default in BepisLoader. + +You can enable the console by opening `BepInEx/config/BepInEx.cfg` and in the `[Logging.Console]` section, setting `Enabled = true` +::: + +## Installing a Decompiler + +:::note +This step is optional but highly recommended if you want to understand or debug Resonite's code. +::: + +A decompiler allows you to inspect the game’s internal code. This helps you discover useful classes and methods that can be modified using Harmony. + +You only need one decompiler. Recommended options: + +- [ILSpy](https://github.com/icsharpcode/ILSpy) (best decompilation) + - [ILSpyCmd](https://github.com/icsharpcode/ILSpy/tree/master/ICSharpCode.ILSpyCmd) (CLI option) + - [ilspy-vscode](https://github.com/icsharpcode/ilspy-vscode) (Visual Studio Code extension) +- [dnSpy](https://github.com/dnSpyEx/dnSpy) +- [dotPeek](https://www.jetbrains.com/decompiler/#) + +:::caution +Many of these options are not natively supported on Linux. [ILSpyCmd](https://github.com/icsharpcode/ILSpy/tree/master/ICSharpCode.ILSpyCmd) is recommended in this case as it can output a full C# project which can be viewed in any IDE, which for pure C# viewing can be a better experience than any other option. If you are using Visual Studio Code, [ilspy-vscode](https://github.com/icsharpcode/ilspy-vscode) can be used for viewing IL, although a standalone app would be better for this. + +An [ILSpy Avalonia frontend](https://github.com/icsharpcode/AvaloniaILSpy) also exists that supports Linux, however it doesn't seem to be maintained as of writing and is buggy. +::: + +You’re now ready to move on: + + diff --git a/src/content/docs/creating-a-mod/packaging-and-publishing.mdx b/src/content/docs/creating-a-mod/packaging-and-publishing.mdx new file mode 100644 index 0000000..938fc05 --- /dev/null +++ b/src/content/docs/creating-a-mod/packaging-and-publishing.mdx @@ -0,0 +1,244 @@ +--- +title: Packaging and Publishing +description: Step 3 of making a mod is publishing it! +sidebar: + order: 3 +--- + +import { LinkCard, FileTree } from '@astrojs/starlight/components'; + +The most preferred way to publish Resonite mods is through [Thunderstore](https://thunderstore.io/c/resonite/). + +Before uploading your mod, you need to have built it into a `.dll`. + +## Packaging With TCLI + +The [Resonite BepInEx Template](https://github.com/ResoniteModding/BepInEx.Templates) comes with Thunderstore packaging built-in, using [TCLI](https://github.com/thunderstore-io/thunderstore-cli). + +If you used the template, you have two options for building packages: + +### Using TCLI directly + +```bash +dotnet tcli build +``` + +### Using the PackTS target + +```bash +dotnet build -c Release -t:PackTS -v d +``` + +The PackTS target will automatically build your mod and create a Thunderstore package in one step. The built package will be found at `./build/`. + +:::note +You can learn about different build options with `dotnet build --help`. +`-c` is short for `--configuration`, `-t` is short for `--target`, and `-v d` is `--verbosity detailed`. +::: + +### Publishing with PackTS target + +The PublishTS property will build, package, and publish to Thunderstore all in one command: + +```bash +# Set environment variable first +export TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # Linux/Mac +# or +set TCLI_AUTH_TOKEN=YOUR_API_TOKEN # Windows CMD +# or +$env:TCLI_AUTH_TOKEN="YOUR_API_TOKEN" # PowerShell + +# Then run the build +dotnet build -c Release -t:PackTS -p:PublishTS=true +``` + +:::note +When using the PackTS target with PublishTS, authentication only works via environment variable. The `--token` flag is not supported with this method. There's an [open issue](https://github.com/thunderstore-io/thunderstore-cli/issues/105) to add `.env` file support for easier token management. +::: + +### Publishing with TCLI directly + +```bash +# Using --token flag +dotnet tcli publish --token YOUR_API_TOKEN + +# Or use environment variable (see above) +dotnet tcli publish +``` + +### Authentication + +A Thunderstore API token is required to publish packages with TCLI. To acquire an API token: + +1. Log in to [thunderstore.io](https://thunderstore.io) +2. Navigate to your team page: Settings → Teams → [Your team name] +3. From the left sidebar, select **Service Accounts** +4. Select **Add service account** and fill the name of the account into the form +5. The API token is shown on the following confirmation page + +:::caution +Save your API token immediately - it's only shown once! Keep it secret and never commit it to version control. +::: + +An API token is required only for the publish command. There's two ways to configure it: + +1. Set it as `TCLI_AUTH_TOKEN` environment variable (e.g. for GitHub Actions) +2. Pass it as a parameter to the command: `tcli publish --token tss_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx` + +If both methods are used, the command parameter takes precedence. + +Once you have the ZIP package, you can jump straight into [Uploading to Thunderstore](#uploading-to-thunderstore)! + +## Manual Packaging + +Create a new folder. Here we want to create a few files and one folder. +Your new mod folder should look like this: + + +- LICENSE (optional) +- manifest.json +- README.md +- CHANGELOG.md (optional) +- icon.png +- plugins + - YourMod + - YourMod.dll + - YourMod.pdb (optional) + + +### `manifest.json` + +Your manifest is crucial — without it, your mod won't work on Thunderstore. + +Here’s an example of what it should look like: + +```json title="manifest.json" +{ + "name": "Your_mod_name", + "version_number": "1.0.0", + "website_url": "https://resonitemodding.github.io", + "description": "A mod description", + "dependencies": ["ResoniteModding-BepisLoader-1.3.1"] +} +``` + +The manifest is fragile. Use this tool to validate it: +[Thunderstore Manifest Validator](https://thunderstore.io/tools/manifest-v1-validator/) + +**Notes:** + +- Underscores in `name` will appear as spaces on the site. +- `version_number` must increase with every release. +- `website_url` is optional, but linking your source page is recommended. (e.g. Github) +- You can include any number of dependencies. + +**Example with dependencies:** + +```json title="manifest.json" +{ + ... + "dependencies": [ + "ResoniteModding-BepisLoader-1.3.1", + "ResoniteModding-BepisLocaleLoader-1.0.0" + ] +} +``` + +Dependency strings can be found on the individual mod’s page on Thunderstore. + +### `README.md` & `CHANGELOG.md` + +- `README.md` becomes your mod’s description on Thunderstore. +- `CHANGELOG.md` is optional, but useful for showing update history. + +Both files support Markdown formatting. Helpful resource: [Markdown Cheat Sheet](https://www.markdownguide.org/cheat-sheet/) + +### `icon.png` + +Your icon must be exactly **256x256** pixels. + +Transparency is supported, although if used, it is recommended the icon has clear borders that work with any background color as icons might be displayed in a variety of themes (e.g. with 3rd party mod managers). + +APNG is technically valid, but only the first frame will currently be displayed on the site. + +### LICENSE + +Choosing a license can feel overwhelming, but here’s a simple guide: + +1. **Do you want others to use your code in their mods?** +2. **Do you want credit for your work?** +3. **Do you care if others use it in commercial/closed-source projects?** + +Common license options: + +- **MIT License** — Very permissive. Others can reuse your code with attribution, even commercially. +- **GPL-3.0** — Requires others to also open-source their projects if they use your code. +- **CC0 / Unlicense** — No rights reserved. Anyone can use your code however they want, no credit needed. + +Generate one here: [choosealicense.com](https://choosealicense.com/) + +:::tip +If you're unsure, **MIT** is a safe and popular choice for mods. +::: + +:::danger +Not including a LICENSE file means your mod defaults to **All Rights Reserved** — others cannot legally use, share, or remix it. +::: + +### Making a ZIP + +Now zip up your contents. + +**Do NOT zip the folder itself.** +Instead, select all files inside and compress them. + +On Windows: + +- Select all files +- Right-click → Send to → Compressed (zipped) folder + +## Uploading to Thunderstore + +To upload a mod, first create a Thunderstore team by logging in and going here: +https://thunderstore.io/settings/teams/create/ + +:::tip +Once a mod is uploaded, your Thunderstore team **cannot** be deleted or renamed — choose carefully! +::: + +Then go to: [Thunderstore Upload Page](https://thunderstore.io/c/resonite/create/) + +- Upload your `.zip` +- Select your team +- Choose **Resonite** as the community +- Select relevant categories +- Submit! + +If your mod is NSFW, make sure to mark it. + +:::caution +Uploaded packages can not be deleted, but they can be deprecated which will hide the package. To fully delete a package, you must reach out to Thunderstore staff. +::: +:::danger +Skipping steps can cause your mod upload to fail. +If it's rejected by moderation, visit the `#rejected-uploads` channel in the Discord server to appeal. +::: + +## Discord Mod Releases + +Want that shiny **Mod Developer** role in the [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm)? + +Here's how to get it: + +1. Join the server +2. Go to `#mod-development` channel +3. Mention that you want the Mod Developer role and link your published mod +4. Wait for the role to be assigned + +Once you have the Mod Developer role, you can advertise your mod in the `#resonite-mod-releases` channel to let the community know about your creation! + + diff --git a/src/content/docs/creating-a-mod/updating.mdx b/src/content/docs/creating-a-mod/updating.mdx new file mode 100644 index 0000000..be87380 --- /dev/null +++ b/src/content/docs/creating-a-mod/updating.mdx @@ -0,0 +1,60 @@ +--- +title: Updating Your Package +description: Step 4 of making a mod is updating it! +sidebar: + order: 4 +--- + +You have published your mod, great! But now you want to update it, but it's not obvious how to do so. + +To update your mod, you need to simply change the version number in the Thunderstore package and upload the package, and it will be uploaded as a new version. + +## Updating Version (TCLI) + +If you used the [Resonite Modding BepInEx Template](https://github.com/ResoniteModding/BepInEx.Templates), you can update the `Version` property in your `csproj` file: + +```xml title="csproj" {7} del="1.0.0" ins="1.1.0" + + + + netstandard2.1 + com.github.YourAccount.ModName + ModName + 1.0.01.1.0 + + ... + + +``` + +This property is used in the template when calling [TCLI](https://github.com/thunderstore-io/thunderstore-cli) to build or publish the package so the package always gets the correct version: + +```xml title="Directory.Build.targets" "Version" + + ... + + ... + + + +``` + +## Updating Version Manually + +Edit your `manifest.json` file and change the version number: + +```json title="manifest.json" {3} del="1.0.0" ins="1.1.0" +{ + "name": "Your_mod_name", + "version_number": "1.0.01.1.0", + "website_url": "https://resonitemodding.github.io", + "description": "A mod description", + "dependencies": [] +} +``` + +Then, rezip the mod like before and upload it! Super duper simple! + +:::caution +The mod must be under the same community and team! You do not need to fill in the tags. +::: diff --git a/src/content/docs/creating-a-mod/writing-code.mdx b/src/content/docs/creating-a-mod/writing-code.mdx new file mode 100644 index 0000000..5370d24 --- /dev/null +++ b/src/content/docs/creating-a-mod/writing-code.mdx @@ -0,0 +1,111 @@ +--- +title: Writing Code +description: Step 2 of making a mod is coding it! +sidebar: + order: 2 +--- + +import { LinkCard, LinkButton, FileTree } from '@astrojs/starlight/components'; + +:::note +Make sure you have [created a project](/creating-a-mod/creating-a-project). Once you have a project, you can start coding! +::: + +You should have a project that looks like this: + + +- .gitignore +- CHANGELOG.md +- Directory.Build.targets +- icon.png +- LICENSE +- README.md +- ResoniteMod.sln +- thunderstore.toml +- .config/ + - dotnet-tools.json +- src/ + - ResoniteMod/ + - Plugin.cs + - ResoniteMod.csproj + + +:::tip +The `Plugin.cs` file contains your code while the `csproj` files are for build configuration. You can look inside all of the files and look for comments that explain what everything does. +::: + +Open the project in your IDE of choice where the `.sln` file is, and then open the `Plugin.cs` file. It should look something like this: + +```cs title="Plugin.cs" +using BepInEx; +using BepInEx.Logging; +using BepInEx.NET.Common; +using BepInExResoniteShim; + +namespace ResoniteMod; + +[ResonitePlugin(PluginMetadata.GUID, PluginMetadata.NAME, PluginMetadata.VERSION, PluginMetadata.AUTHORS, PluginMetadata.REPOSITORY_URL)] +[BepInDependency(BepInExResoniteShim.PluginMetadata.GUID, BepInDependency.DependencyFlags.HardDependency)] +public class Plugin : BasePlugin +{ + internal static new ManualLogSource? Log; + + public override void Load() + { + // Plugin startup logic + Log = base.Log; + Log.LogInfo($"Plugin {PluginMetadata.GUID} is loaded!"); + } +} + +``` + +This is a very basic BepInEx 6 plugin. + +Work in progress documentation, more will be added. For now, for more info, see BepInEx's own documentation: + + + Creating a new plugin project—Plugin structure + + +You can also follow the links to learn more about each thing mentioned: + + + Logging: lethal.wiki + + + Custom Configs: lethal.wiki + + + Patching Code: lethal.wiki + + +For patching/hooking methods, you can use [MonoMod](https://github.com/MonoMod/MonoMod) or [HarmonyX](https://github.com/BepInEx/HarmonyX). See [lethal.wiki](https://lethal.wiki/dev/fundamentals/patching-code) for more in-depth introductions on using them. + +:::note +[MonoDetour](https://github.com/MonoDetour/MonoDetour) is also an option for hooking, but it's in pre-release state and therefore is not fit for production usage yet. You can find its documentation at https://monodetour.github.io/ +::: + +All of these libraries are compatible with each other as HarmonyX and MonoDetour simply use MonoMod.RuntimeDetour under the hood. + +## Writing Your First Patch + +work in progress. + + diff --git a/src/content/docs/getting-started/first-mod.mdx b/src/content/docs/getting-started/first-mod.mdx deleted file mode 100644 index 1da8a84..0000000 --- a/src/content/docs/getting-started/first-mod.mdx +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Your First Mod -description: Step-by-step guide to creating your first Resonite mod ---- - -work in progress - -## Next Steps - -- Join the [Discord community](https://discord.gg/vCDJK9xyvm) for help diff --git a/src/content/docs/getting-started/installation.mdx b/src/content/docs/getting-started/installation.mdx index 03b68a8..4117ab5 100644 --- a/src/content/docs/getting-started/installation.mdx +++ b/src/content/docs/getting-started/installation.mdx @@ -1,11 +1,15 @@ --- -title: Installation Guide +title: Installation description: Get started with Resonite modding using mod managers +sidebar: + order: 1 --- -import { Card, CardGrid, LinkButton } from '@astrojs/starlight/components'; +import { LinkButton, Tabs, TabItem } from '@astrojs/starlight/components'; +import Card from '@components/Card.astro'; +import CardGrid from '@components/CardGrid.astro'; -Get started with Resonite modding by installing a mod manager. BepisLoader will be installed automatically as a dependency when you install your first mod. +Get started with Resonite modding by installing a mod loader. **BepisLoader** is the recommended and most widely supported option - it will be installed automatically when you use a mod manager. ## Using a Mod Manager (Recommended) @@ -58,18 +62,111 @@ Only use manual installation if you need custom configurations or are developing If you need manual control: -1. **Download** [BepisLoader-full.zip](https://github.com/art0007i/BepisLoader/releases/latest) -2. **Extract** directly into your Resonite folder (next to `Resonite.exe`) -3. **Launch Resonite** - you should see BepInEx logs in the console +1. **Download** BepisLoader from [Thunderstore](https://thunderstore.io/c/resonite/p/ResoniteModding/BepisLoader/) or [GitHub releases](https://github.com/ResoniteModding/BepisLoader/releases/latest) +2. **Extract** the ZIP file +3. **Copy** the contents of the `BepInExPack` folder to your Resonite installation root directory +4. **Launch Resonite** - BepInEx will generate configuration files on first run -**File locations:** (it may vary based on your Steam library location) +**Find your Resonite folder:** +- Via Steam: `Steam > Library > Resonite > Manage > Browse local files` - **Windows**: `C:\Program Files (x86)\Steam\steamapps\common\Resonite` -- **Linux**: `~/.local/share/Steam/steamapps/common/Resonite` +- **Linux**: `~/.steam/steam/steamapps/common/Resonite` + +## Alternative Mod Loaders + +While BepisLoader is the recommended option (and the only one supported on Thunderstore), there are other mod loaders available for Resonite: + + + + +**BepisLoader** - Lightweight and modular loader + +- Based on mature BepInEx framework (used by many games) +- Full Thunderstore support (massive modding repository) +- Windows: Uses [HookFxr](https://github.com/ResoniteModding/hookfxr) to inject +- Linux: Modifies LinuxBootstrap.sh to load BepisLoader.dll +- Lightweight core with features added via libraries: + - [BepisLocaleLoader](https://github.com/ResoniteModding/BepisLocaleLoader) for localization + - [BepisModSettings](https://github.com/ResoniteModding/BepisModSettings) for in-game config UI +- Simple and flexible for developers + +[GitHub Repository](https://github.com/ResoniteModding/BepisLoader) + + + + +**ResoniteModLoader (RML)** - The original basic mod loader + +- Fork of [NeosModLoader](https://github.com/neos-modding-group/NeosModLoader) from NeosVR days +- Oldest and most established in the Resonite community +- Largest existing mod ecosystem for Resonite +- Very basic - no advanced features +- Uses Resonite's official `-LoadAssembly` plugin loader (no injection) +- JSON manifest system for mod discovery +- Supported by Resolute mod manager + +Installation: Place DLL in Libraries folder and add launch option + +[GitHub Repository](https://github.com/resonite-modding-group/ResoniteModLoader) | [Resolute Manager](https://github.com/Gawdl3y/Resolute) + + + + +**MonkeyLoader** - Feature-heavy all-in-one loader + +- Everything built-in: hot reloading, localization, pre-patching +- Windows: Uses [HookFxr](https://github.com/ResoniteModding/hookfxr) to inject +- Linux: Modifies LinuxBootstrap.sh to load MonkeyLoader +- Opinionated development workflow +- Requires NuGet registry for distribution (still WIP) +- GamePack system for extensibility +- More complex setup and development + +Installation: Download MonkeyLoader and Resonite GamePack ZIP, extract to Resonite folder + +[GitHub Repository](https://github.com/MonkeyModdingTroop/MonkeyLoader) + + + + +## Mod Loader Comparison + +| Feature | BepisLoader | ResoniteModLoader | MonkeyLoader | +| ------------------------- | --------------------- | --------------------- | --------------------------- | +| **Philosophy** | Lightweight & modular | Basic & minimal | Feature-heavy all-in-one | +| **Release Status** | Newest | Oldest | Recent | +| **Ecosystem Size** | Growing rapidly | Large | Small | +| **Thunderstore Support** | ✅ | ❌ | ❌ | +| **Mod Distribution** | Thunderstore, Manual | JSON manifest, Manual | ~~NuGet~~ (Planned), Manual | +| **Windows Hooking** | HookFxr | `-LoadAssembly` | HookFxr | +| **Linux Hooking** | Bootstrap script | `-LoadAssembly` | Bootstrap script | +| **Installation Method** | Mod managers, Manual | Manual | Manual | +| **Mod Manager** | ✅ r2modman, Gale | ✅ Resolute | ❌ | +| **In-game Config UI** | ✅ Via libraries | ✅ Via libraries | ✅ Built-in | +| **Harmony Patching** | ✅ | ✅ | ✅ | +| **Pre-patching** | ✅ | ❌ | ✅ | +| **Hot Reloading** | ❌ Planned | ✅ Via libraries | ✅ Built-in | +| **Localization** | ✅ Via libraries | ❌ | ✅ Built-in | +| **Dependency Management** | ✅ Via Thunderstore | ✅ Via Resolute | ❌ Manual | +| **Developer Experience** | Simple & flexible | Very basic | Complex & opinionated | +| **Learning Curve** | Easy | Easy | Steep | + +:::tip[Why BepisLoader?] +BepisLoader is recommended for new users because: + +- **Thunderstore integration** - Access to a massive, established mod repository +- **Mod manager support** - Easy installation and updates with r2modman/Gale +- **BepInEx foundation** - Built on proven technology used across many games +- **Works alongside RML** - Can use both BepisLoader and RML mods together + +Note: BepisLoader and ResoniteModLoader can be used side-by-side! This gives you access to both Thunderstore mods (via BepisLoader) and the existing RML mod ecosystem. Only BepisLoader mods are managed through Thunderstore mod managers. +::: ## Next Steps -Now that you have a mod manager installed: +Now that you have a mod loader installed: -- [Create your first mod](/getting-started/first-mod/) to start coding +- [Use mods](/getting-started/using-mods/) from the community +- [Create your first mod](/creating-a-mod/initial-setup/) to start developing - [Browse mods on Thunderstore](https://thunderstore.io/c/resonite/) to find existing mods diff --git a/src/content/docs/getting-started/overview.mdx b/src/content/docs/getting-started/overview.mdx new file mode 100644 index 0000000..dd79c79 --- /dev/null +++ b/src/content/docs/getting-started/overview.mdx @@ -0,0 +1,72 @@ +--- +title: Overview +description: Your guide to using and creating mods for Resonite +sidebar: + order: 0 +--- + +import { LinkCard } from '@astrojs/starlight/components'; +import CardGrid from '@components/CardGrid.astro'; +import { LinkButton } from '@astrojs/starlight/components'; + +Welcome to the Resonite Modding Wiki! Whether you want to **use mods** to enhance your Resonite experience or **create your own mods**, this wiki has you covered. + +## I want to use mods + +If you're looking to install and use mods created by the community: + + + + + + + +## I want to create mods + +Ready to develop your own mods for Resonite? + + + + + + + + + + + +## Community & Resources + + diff --git a/src/content/docs/getting-started/troubleshooting.mdx b/src/content/docs/getting-started/troubleshooting.mdx index 2c030b7..8da1bde 100644 --- a/src/content/docs/getting-started/troubleshooting.mdx +++ b/src/content/docs/getting-started/troubleshooting.mdx @@ -1,10 +1,57 @@ --- -title: Troubleshooting Guide -description: Solutions to common Resonite modding issues +title: Troubleshooting +description: Solutions to common Resonite modding issues\ +sidebar: + order: 3 --- This guide covers solutions to common problems when setting up and using Resonite mods. -## Common Issues +## Mod Loading Issues -work in progress +### Mods not loading? + +- Check BepInEx console for errors +- Verify all dependencies are installed +- Ensure mod is compatible with your Resonite version +- Check that the mod files are in the correct folder (`BepInEx/plugins/`) + +### Performance problems? + +- Disable mods one by one to find the culprit +- Check mod descriptions for known issues +- Some mods may conflict with each other +- Monitor RAM and CPU usage + +### Game crashes? + +- Remove recently added mods +- Check for mod updates +- Verify game files through Steam +- Check crash logs in `BepInEx/LogOutput.log` + +## Getting Help + +### Where to get support + +- Check the mod's Thunderstore page for documentation +- Ask in [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) +- Search for existing issues on the mod's GitHub or other platforms +- Check the mod's README for known issues + +### Information to provide when asking for help + +- Your Resonite version +- List of installed mods and versions +- Error messages from BepInEx console +- Steps to reproduce the issue + +## Safety Reminders + +:::caution + +- Only download mods from Thunderstore or trusted sources +- Be cautious with mods requesting unusual permissions +- Avoid new or unreviewed mods if you're unsure they can be trusted +- Some mods may impact game performance + ::: diff --git a/src/content/docs/getting-started/using-mods.mdx b/src/content/docs/getting-started/using-mods.mdx new file mode 100644 index 0000000..563bab7 --- /dev/null +++ b/src/content/docs/getting-started/using-mods.mdx @@ -0,0 +1,142 @@ +--- +title: Using Mods +description: Find, install, and manage mods for Resonite +sidebar: + order: 2 +--- + +import { LinkCard, Tabs, TabItem } from '@astrojs/starlight/components'; +import CardGrid from '@components/CardGrid.astro'; +import { LinkButton } from '@astrojs/starlight/components'; + +This guide covers everything you need to know about using mods in Resonite after you've [installed BepisLoader](/getting-started/installation/). + +## Finding Mods + +### Thunderstore Repository + +Resonite mods are hosted on Thunderstore, a community mod repository: + + + Browse Resonite Mods on Thunderstore + + +### Evaluating Mods + +Before installing, check: + +- **Last Updated** - Is it actively maintained? +- **Downloads & Likes** - Popular mods are usually well-tested +- **Dependencies** - What other mods are required? + +## Installing Mods + + + + +If you're using Gale or r2modmanPlus: + +1. **Browse** the mod list in your manager +2. **Click Install** on the mods you want +3. **Dependencies** are handled automatically +4. **Launch Resonite** through the manager + + + + +For manual installation: + +1. **Download** the mod from Thunderstore +2. **Extract** the ZIP file +3. **Copy files** to your Resonite installation: + - Most mods → `BepInEx/plugins/` + - Preloader patches → `BepInEx/patchers/` +4. **Install dependencies** manually if needed + + + + +## Managing Your Mods + +### Mod Locations + +``` +Resonite/ +├── BepInEx/ +│ ├── plugins/ # Most mods go here +│ ├── patchers/ # Preloader patches +│ └── config/ # Mod configuration files +``` + +### Configuring Mods + +Many mods have configuration options in `BepInEx/config/`: + +1. **Open** the `.cfg` file in a text editor +2. **Modify settings** as needed +3. **Save** the file +4. **Restart Resonite** if needed (some mods can reload configs dynamically) + +:::tip +Some mods automatically reload when their config changes - no restart needed! +::: + +### Updating Mods + + + + +- Click **Check for Updates** in your manager +- **Update all** or select specific mods +- Manager handles everything automatically + + + + +1. Check for updates: + - Mod's Thunderstore page + - Check `#resonite-mod-releases` channel in [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) + - GitHub releases page + - Other distribution platforms +2. Download the new version +3. Replace old files in `BepInEx/plugins/` +4. Update any dependencies if needed + + + + +### Disabling/Removing Mods + +**To disable temporarily:** + +- In mod manager: Toggle the mod off +- Manual: Move the mod file out of `BepInEx/plugins/` + +**To remove completely:** + +- In mod manager: Uninstall the mod +- Manual: Delete from `BepInEx/plugins/` and optionally from `BepInEx/config/` + +## Using Profiles + +Mod managers allow you to create different profiles for different mod setups. You can switch between profiles to quickly change your entire mod configuration - useful for testing, different situations like being in VR or Desktop, or keeping a clean vanilla setup. + +## Having Issues? + +If you're experiencing problems with your mods, check out our [Troubleshooting Guide](/getting-started/troubleshooting/) for solutions to common issues. + +## Next Steps + + + + + + diff --git a/src/content/docs/guides/configuration.mdx b/src/content/docs/guides/configuration.mdx new file mode 100644 index 0000000..a81d00d --- /dev/null +++ b/src/content/docs/guides/configuration.mdx @@ -0,0 +1,17 @@ +--- +title: Custom Config +description: Create mod configurations for your mods +sidebar: + order: 2 +--- + +import { LinkCard } from '@astrojs/starlight/components'; + +work in progress. + + diff --git a/src/content/docs/guides/debugging.mdx b/src/content/docs/guides/debugging.mdx deleted file mode 100644 index d5c9d1e..0000000 --- a/src/content/docs/guides/debugging.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Debugging & Development Environment -description: Set up your development environment and learn debugging techniques for Resonite mods ---- - -This guide covers setting up your development environment and debugging techniques for Resonite mod development. - -work in progress diff --git a/src/content/docs/guides/dependancy.mdx b/src/content/docs/guides/dependancy.mdx new file mode 100644 index 0000000..9b1deb9 --- /dev/null +++ b/src/content/docs/guides/dependancy.mdx @@ -0,0 +1,8 @@ +--- +title: Dependancies +description: -- +sidebar: + order: 5 +--- + +work in progress. diff --git a/src/content/docs/guides/hot-reload.mdx b/src/content/docs/guides/hot-reload.mdx new file mode 100644 index 0000000..3db1842 --- /dev/null +++ b/src/content/docs/guides/hot-reload.mdx @@ -0,0 +1,8 @@ +--- +title: Hot Reloading +description: -- +sidebar: + order: 6 +--- + +work in progress. diff --git a/src/content/docs/guides/logging.mdx b/src/content/docs/guides/logging.mdx new file mode 100644 index 0000000..b18e29f --- /dev/null +++ b/src/content/docs/guides/logging.mdx @@ -0,0 +1,17 @@ +--- +title: Logging +description: Logging is a very useful debugging tool for developers. You can look at the console or the log file to see if everything ran correctly, or if errors occured. +sidebar: + order: 1 +--- + +import { LinkCard } from '@astrojs/starlight/components'; + +work in progress. + + diff --git a/src/content/docs/guides/mod-basics.mdx b/src/content/docs/guides/mod-basics.mdx deleted file mode 100644 index 497c9cc..0000000 --- a/src/content/docs/guides/mod-basics.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Mod Development Basics -description: Core concepts and best practices for Resonite mod development ---- - -This guide covers essential concepts for developing Resonite mods with BepInEx. - -work in progress diff --git a/src/content/docs/guides/patching.mdx b/src/content/docs/guides/patching.mdx new file mode 100644 index 0000000..c1e7693 --- /dev/null +++ b/src/content/docs/guides/patching.mdx @@ -0,0 +1,8 @@ +--- +title: Patching +description: -- +sidebar: + order: 3 +--- + +work in progress. diff --git a/src/content/docs/guides/prepatching.mdx b/src/content/docs/guides/prepatching.mdx new file mode 100644 index 0000000..2de7822 --- /dev/null +++ b/src/content/docs/guides/prepatching.mdx @@ -0,0 +1,8 @@ +--- +title: Prepatching +description: -- +sidebar: + order: 4 +--- + +work in progress. diff --git a/src/content/docs/index.mdx b/src/content/docs/index.mdx index e6a47bc..3ba3a50 100644 --- a/src/content/docs/index.mdx +++ b/src/content/docs/index.mdx @@ -1,46 +1,76 @@ --- title: Welcome to Resonite Modding -description: Your comprehensive guide to modding Resonite with BepInEx +description: Your comprehensive guide to using and creating mods for Resonite template: splash hero: - tagline: Learn how to create, install, and manage mods for Resonite using BepInEx and BepisLoader + tagline: The complete resource for mod users and developers - Install mods to enhance your experience or create your own image: file: ../../../public/assets/favicon.svg actions: - - text: Get Started + - text: I Want to Use Mods link: /getting-started/installation/ - icon: right-arrow + icon: rocket variant: primary - - text: View on GitHub - link: https://github.com/ResoniteModding - icon: external + - text: I Want to Create Mods + link: /creating-a-mod/initial-setup/ + icon: pencil variant: secondary --- -import { CardGrid, LinkButton, Badge, Tabs, TabItem } from '@astrojs/starlight/components'; +import { LinkButton, Badge, Tabs, TabItem } from '@astrojs/starlight/components'; import Card from '@components/Card.astro'; +import CardGrid from '@components/CardGrid.astro'; import { Icon } from '@astrojs/starlight/components'; -## Quick Start +## For Mod Users - -

Set up your Resonite modding environment with BepisLoader and BepInEx.

+ +

Set up the mod loader to run community mods in Resonite.

- Get Started + Installation Guide
- -

Create your first Resonite mod with our step-by-step tutorial.

- Learn More (WIP) + +

Find, install, configure, and manage your mods.

+ + Complete Guide + +
+ +

Explore community-created mods on Thunderstore.

+ + Visit Thunderstore + +
+ +

Fix common issues with mod installation and usage.

+ + Get Help + +
+
+ +## For Mod Developers + + + +

Configure your development environment for creating mods.

+ + Setup Guide +
- -

Find code snippets and patterns for common modding tasks.

- Browse Recipes (WIP) + +

Step-by-step tutorial to build your first Resonite mod.

+ + Start Coding +
- -

BepInEx documentation.

- Browse Docs + +

Share your creation with the Resonite community.

+ + Publishing Guide +
@@ -55,7 +85,11 @@ import { Icon } from '@astrojs/starlight/components';

Contribute to BepisLoader development

- + View on GitHub
diff --git a/src/content/docs/resources/faq.mdx b/src/content/docs/resources/faq.mdx new file mode 100644 index 0000000..9ee27b1 --- /dev/null +++ b/src/content/docs/resources/faq.mdx @@ -0,0 +1,8 @@ +--- +title: Frequently Asked Questions +description: -- +sidebar: + order: 1 +--- + +work in progress. diff --git a/src/content/docs/resources/links.mdx b/src/content/docs/resources/links.mdx index b27c46c..6650b13 100644 --- a/src/content/docs/resources/links.mdx +++ b/src/content/docs/resources/links.mdx @@ -10,13 +10,15 @@ import { Card, CardGrid, LinkButton, Badge, Icon } from '@astrojs/starlight/comp - [Steam Page](https://store.steampowered.com/app/2519830/Resonite/) - [Website](https://resonite.com/) - [Official Wiki](https://wiki.resonite.com/) +- [Mod and Plugin Policy](https://resonite.com/policies/ModAndPlugin.html) - [Yellow Dog Man Studios](https://yellowdogman.com/) +- [Official Discord](https://discord.gg/resonite) ## Community ### Discord Servers -- [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) - Primary modding community +- [FrooxEngine Modding Discord](https://discord.gg/vCDJK9xyvm) - Primary modding discord ### Forums & Discussion diff --git a/src/content/docs/resources/tools.mdx b/src/content/docs/resources/tools.mdx deleted file mode 100644 index c3e6220..0000000 --- a/src/content/docs/resources/tools.mdx +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: Tools & Utilities -description: Essential tools and utilities for Resonite mod development ---- - -This page covers the essential tools and utilities you'll need for effective Resonite mod development. - -work in progress diff --git a/src/content/docs/resources/translating.mdx b/src/content/docs/resources/translating.mdx new file mode 100644 index 0000000..026e86d --- /dev/null +++ b/src/content/docs/resources/translating.mdx @@ -0,0 +1,8 @@ +--- +title: Contributing Translations +description: -- +sidebar: + order: 2 +--- + +work in progress. diff --git a/src/styles/theme.css b/src/styles/theme.css index 75874c3..b578512 100644 --- a/src/styles/theme.css +++ b/src/styles/theme.css @@ -77,3 +77,63 @@ sl-doc-search { } } } + +/* table scrolling */ +.sl-markdown-content { + table { + display: block; + overflow-x: auto; + width: 100%; + border-collapse: collapse; + border-spacing: 0; + -webkit-overflow-scrolling: touch; + touch-action: pan-x pan-y; + + & thead, + & tbody { + min-width: 100%; + } + + & th, + & td { + white-space: nowrap; + padding: 0.5rem 0.75rem; + vertical-align: top; + border-bottom: 1px solid var(--sl-color-gray-5); + text-align: left; + } + + & th { + background: var(--sl-color-gray-6); + font-weight: 600; + border-bottom: 2px solid var(--sl-color-gray-4); + position: sticky; + top: 0; + z-index: 1; + } + + & .wrap, + & .text-wrap { + white-space: normal; + word-break: break-word; + min-width: 150px; + } + + @media (max-width: 768px) { + & th, + & td { + padding: 0.375rem 0.5rem; + font-size: 0.875rem; + } + } + + @media (max-width: 480px) { + & th, + & td { + padding: 0.25rem 0.375rem; + font-size: 0.8rem; + min-width: 60px; + } + } + } +}