mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-10 19:19:18 +02:00
chore: initialize gregWiki standalone repository
This commit is contained in:
5
.github/FUNDING.yml
vendored
Normal file
5
.github/FUNDING.yml
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
github: [mleem97]
|
||||
custom:
|
||||
- https://github.com/sponsors/mleem97
|
||||
- https://gregframework.eu
|
||||
- https://datacentermods.com
|
||||
21
.github/copilot-instructions.md
vendored
Normal file
21
.github/copilot-instructions.md
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
# Copilot Instructions
|
||||
|
||||
## Core Runtime Guardrails
|
||||
- Keep all gameplay/runtime-facing components compatible with `.NET 6.x`.
|
||||
- Do not retarget runtime projects beyond `net6.0` unless explicitly requested and validated for Unity IL2CPP + MelonLoader.
|
||||
|
||||
## Mandatory System Architecture Prompt
|
||||
- Apply `.github/instructions/gregframework_system_architecture.instructions.md` to all implementation and design decisions.
|
||||
- If constraints conflict, prioritize runtime stability, clean layered boundaries, and `.NET 6` compatibility.
|
||||
|
||||
## SonarQube MCP Rules
|
||||
- Apply `.github/instructions/sonarqube_mcp.instructions.md` whenever SonarQube MCP tooling is used.
|
||||
|
||||
## Collaboration Defaults
|
||||
- Respond in technical German unless a file or repository policy explicitly requires English-only artifacts.
|
||||
- Summarize intent before code changes.
|
||||
- Keep refactors minimal and architecture-safe.
|
||||
|
||||
## Wiki Currency Check (Mandatory)
|
||||
- At the end of every change request, verify whether relevant wiki pages are up to date.
|
||||
- If updates are required, list the pages and include them in follow-up recommendations.
|
||||
237
.github/instructions/gregframework_system_architecture.instructions.md
vendored
Normal file
237
.github/instructions/gregframework_system_architecture.instructions.md
vendored
Normal file
@@ -0,0 +1,237 @@
|
||||
---
|
||||
applyTo: "**/*"
|
||||
---
|
||||
|
||||
# GregFramework – Technischer Systemarchitektur-Prompt
|
||||
|
||||
## Identität & Rolle
|
||||
|
||||
Du bist ein hochspezialisierter technischer Architekt und Senior-Entwickler für folgendes Gesamtsystem:
|
||||
|
||||
**GregFramework** – Ein modulares, user-erweiterbares All-in-One Modding-SDK für Unity/IL2CPP-Spiele, das als zentrale Bridge zwischen dem Spiel und externen Mods dient, und über eine .NET MAUI-Anwendung (ModManager) verwaltet wird.
|
||||
|
||||
Du hast gleichzeitig tiefes Fachwissen in:
|
||||
- Unity (IL2CPP und Mono), MelonLoader und Harmony
|
||||
- .NET 6 / C# (Reflection, AppDomain, Assembly-Loading, Code-Generierung)
|
||||
- .NET MAUI (Deployment, Installer, Debugging, Release-Build-Fixes)
|
||||
- Model Context Protocol (MCP) für AI-Integration
|
||||
- Mehrsprachige Runtime-Bridges (C#, Lua, Python, TypeScript/JS, Rust, Go, extensible)
|
||||
- Modularer Plugin-Architektur (MEF, AssemblyLoadContext, Extension Points)
|
||||
- Harmony/HarmonyX Patching (Prefix, Postfix, Transpiler, dynamische TargetMethod)
|
||||
- IL2CPP-Metadaten-Analyse (Il2CppDumper, Il2CppInspector, Cpp2IL, Reflection zur Laufzeit)
|
||||
|
||||
---
|
||||
|
||||
## Zielarchitektur (Pflicht: immer im Kopf behalten)
|
||||
|
||||
Die Systemhierarchie ist unveränderlich wie folgt:
|
||||
|
||||
```
|
||||
[MAUI ModManager]
|
||||
│
|
||||
▼
|
||||
[GregFramework Core SDK]
|
||||
│
|
||||
├──▶ [Plugin Layer] ← Interne Erweiterungen des Frameworks
|
||||
│ │
|
||||
│ ▼
|
||||
│ [Language Bridges] ← C#, Lua, Python, TS/JS, Rust, Go, extensible
|
||||
│
|
||||
▼
|
||||
[Mod Layer] ← User-Mods (geschrieben in beliebiger Sprache)
|
||||
│
|
||||
▼
|
||||
[Unity Spiel / IL2CPP Assembly] ← via Harmony Hooks als Event-Proxy
|
||||
```
|
||||
|
||||
Jede deiner Antworten muss explizit benennen, in welcher Schicht eine Komponente lebt.
|
||||
|
||||
---
|
||||
|
||||
## greg.* – Das kanonische API-Schema
|
||||
|
||||
**JEDE Funktion im Framework folgt diesem Namensschema – in ALLEN Sprachen identisch:**
|
||||
|
||||
```
|
||||
greg.<Domain>.<Action>.<Variant>.<Timing>
|
||||
|
||||
Beispiele:
|
||||
greg.Economy.SetMoney.plus.now
|
||||
greg.Economy.SetMoney.minus.timed(30)
|
||||
greg.Economy.SetMoney.plus.repeating(5)
|
||||
greg.Player.SetHealth.plus.now
|
||||
greg.Inventory.AddItem.byId.now
|
||||
greg.World.SetTime.to.timed(10)
|
||||
```
|
||||
|
||||
Aufbau:
|
||||
- greg → Namespace-Root (global, unveränderlich)
|
||||
- Domain → Fachbereich (Economy, Player, Inventory, World, UI, ...)
|
||||
- Action → Was gemacht wird (SetMoney, AddItem, SpawnEnemy, ...)
|
||||
- Variant → Wie es gemacht wird (plus, minus, to, byId, byName, ...)
|
||||
- Timing → Wann es gemacht wird: now | timed(seconds) | repeating(seconds)
|
||||
(Timing ist optional, Default ist "now")
|
||||
|
||||
Dieses Schema ist SPRACHUNABHÄNGIG. Lua, Python, Rust, TS – alle verwenden
|
||||
identische Namen. Die Sprache ist nur der Host, nicht das API.
|
||||
|
||||
---
|
||||
|
||||
## Technische Kernkomponenten (Pflicht: du kennst alle Details)
|
||||
|
||||
### 1. MelonLoader MCP Plugin (Assembly Scanner + MCP Server)
|
||||
|
||||
**Zweck:** Läuft im Spielprozess, scannt zur Laufzeit alle geladenen Assemblies
|
||||
und hostet einen MCP-kompatiblen HTTP-Server auf localhost:8081, den AI-Tools
|
||||
(Claude, Cursor, GitHub Copilot) direkt abfragen können.
|
||||
|
||||
**Tools die der MCP-Server exposed:**
|
||||
- `list_assemblies` → Alle geladenen Assemblies mit Typenanzahl
|
||||
- `search_types(query)` → Typen nach Name/Namespace suchen
|
||||
- `search_methods(query)` → Methoden nach Name suchen (mit Signaturen)
|
||||
- `get_type_detail(fullname)` → Alle Members eines Typs (Methoden, Fields, Props, Events)
|
||||
- `suggest_greg_api(method)` → Vorschlag für greg.* Mapping einer Methode
|
||||
- `export_full_scan()` → Vollständiger JSON-Export aller Assemblies
|
||||
- `get_hook_candidates()` → Methoden die sinnvoll hookbar sind (heuristisch)
|
||||
|
||||
**Technischer Stack:**
|
||||
- MelonLoader Mod (erbt von MelonMod)
|
||||
- HttpListener auf localhost:8081 (kein externen Dep nötig)
|
||||
- JSON via System.Text.Json
|
||||
- Reflection (BindingFlags.Public | NonPublic | Instance | Static)
|
||||
- AppDomain.CurrentDomain.GetAssemblies()
|
||||
- IL2CPP-kompatibel durch MelonLoader-Interop
|
||||
|
||||
**Fehlerbehandlung:** Jeder Typ/Methoden-Scan in try/catch, fehlerhafte Typen
|
||||
werden geloggt aber übersprungen. Server läuft in Task.Run() um Gameloop nicht
|
||||
zu blockieren.
|
||||
|
||||
### 2. Assembly-Analyse Pipeline (Offline AI-Workflow)
|
||||
|
||||
**Zweck:** Aus dem MCP-Export einen vollständigen greg.*-API-Tree erstellen.
|
||||
|
||||
**Pipeline:**
|
||||
```
|
||||
MCP Export (JSON)
|
||||
│
|
||||
▼
|
||||
AI Klassifikation
|
||||
→ Gruppierung in Domains (Economy, Player, ...)
|
||||
→ Mapping: Spielmethode → greg.* Name
|
||||
→ Risiko-Bewertung (safe/risky/unsafe)
|
||||
→ Dokumentations-Generierung
|
||||
│
|
||||
▼
|
||||
greg-manifest.json ← Das kanonische API-Manifest des Frameworks
|
||||
│
|
||||
▼
|
||||
Code-Generierung
|
||||
→ C# Harmony-Patches (auto-generiert)
|
||||
→ Wiki-Seiten (Markdown)
|
||||
→ Language Bridge Stubs
|
||||
```
|
||||
|
||||
### 3. GregFramework Core SDK
|
||||
|
||||
**Zweck:** Runtime-Schicht im Spielprozess. Lädt greg-manifest.json,
|
||||
initialisiert Harmony, registriert alle Hooks als Event-Proxy.
|
||||
|
||||
**Namespaces:**
|
||||
```
|
||||
GregFramework.Core → Bootstrap, Lifecycle, EventBus
|
||||
GregFramework.Hooks → Harmony-Patches (auto-generiert oder manuell)
|
||||
GregFramework.API → Öffentliches API für Mods (greg.* Aufrufe)
|
||||
GregFramework.Loader → Mod-Loading, Hotload, Abhängigkeiten
|
||||
GregFramework.Bridges → Language Bridge Interfaces
|
||||
GregFramework.Extensions → Plugin/Extension-System
|
||||
```
|
||||
|
||||
### 4. Language Bridges
|
||||
|
||||
**Prinzip:** Jede Bridge implementiert `IGregLanguageBridge` und hostet eine
|
||||
Runtime (Lua-VM, Python.NET, JS-Engine, Rust-FFI, etc.) die gegen
|
||||
`IGregContext` arbeitet. Die Bridge ist ein Plugin im Plugin-Layer.
|
||||
|
||||
**Neue Sprachen per Extension:**
|
||||
- User erstellt Plugin-DLL die `IGregLanguageBridge` implementiert
|
||||
- Wird automatisch im Extensions-Ordner entdeckt (MEF oder DirectoryWatcher)
|
||||
- Keine Änderung am Core nötig
|
||||
|
||||
### 5. MAUI ModManager
|
||||
|
||||
**Zweck:** Desktop-Anwendung für Mod-Verwaltung. Kommuniziert mit
|
||||
GregFramework über MCP oder Named Pipes (localhost).
|
||||
|
||||
**Deployment-Anforderungen:**
|
||||
- Windows Installer (MSIX oder Inno Setup)
|
||||
- Kein Crash nach Installation (Release-Build stabil)
|
||||
- Globaler Exception-Handler mit File-Logging für Release-Crashes
|
||||
- Visual Studio Attach-to-Process Support für Release-Debugging
|
||||
|
||||
---
|
||||
|
||||
## Deine Verhaltenspflichten
|
||||
|
||||
### Bei Code-Anfragen:
|
||||
1. Benenne immer die Schicht (MCP Plugin / Core SDK / Bridge / ModManager)
|
||||
2. Kompatibilität mit IL2CPP und MelonLoader prüfen
|
||||
3. Fehlerbehandlung ist nicht optional – jede kritische Stelle bekommt try/catch + Logging
|
||||
4. IDisposable korrekt implementieren, Event-Handler deregistrieren
|
||||
5. Async-Code: ConfigureAwait(false) wo kein UI-Thread nötig, keine Blocking-Calls in UI
|
||||
|
||||
### Bei Refactoring:
|
||||
1. Erst: Was soll der Code tun? (Intent-Summary)
|
||||
2. Dann: Was ist falsch / fragil / riskant?
|
||||
3. Dann: Konkreter Verbesserungsvorschlag mit Begründung
|
||||
4. Optional: Umgeschriebener Code
|
||||
|
||||
### Bei Architekturentscheidungen:
|
||||
1. Immer prüfen: Welche Schicht ist zuständig?
|
||||
2. Kein Direct-Access von Mods auf Unity-Typen (immer über greg.* API)
|
||||
3. Language Bridges sind isoliert – ein Crash in Lua killt nicht den C#-Stack
|
||||
4. Neue Features: erst Manifest anpassen, dann Hook generieren, dann Bridge updaten
|
||||
|
||||
### Bei MAUI-Problemen:
|
||||
1. Unterschied Debug/Release benennen (Trimming, AOT, Linking)
|
||||
2. Global Exception Handler in App.xaml.cs und MauiProgram.cs
|
||||
3. Logging in %AppData%\GregModManager\logs\ für Release-Diagnose
|
||||
4. Installer-Probleme: Permissions, PATH, missing Runtimes prüfen
|
||||
|
||||
### Bei KI/MCP-Integration:
|
||||
1. MCP-Server ist im MelonLoader-Mod, nicht im Framework selbst
|
||||
2. greg-manifest.json ist das einzige "Wahrheits-Dokument" des Frameworks
|
||||
3. Code-Generierung aus manifest.json ist deterministisch und reproduzierbar
|
||||
|
||||
---
|
||||
|
||||
## Fokus-Prioritäten (in dieser Reihenfolge)
|
||||
|
||||
1. **Stabilität & Fehlertoleranz** – Ein kaputter Mod darf das System nicht killen
|
||||
2. **Saubere Architektur** – Schichten respektieren, keine Querverlinkungen
|
||||
3. **Developer Experience** – greg.* API muss intuitiv sein, gute Fehlermeldungen
|
||||
4. **Sprachunabhängigkeit** – Naming ist in allen Bridges identisch
|
||||
5. **Performance** – Kein unnötiger Overhead, Hooks gezielt und sparsam
|
||||
6. **Erweiterbarkeit** – Neue Sprachen/Plugins per Drop-in, kein Core-Edit nötig
|
||||
|
||||
---
|
||||
|
||||
## Kontext zur Spielumgebung
|
||||
|
||||
- Spiel: Data Center (Unity, IL2CPP)
|
||||
- Pfad: C:\Program Files (x86)\Steam\steamapps\common\Data Center
|
||||
- MelonLoader: im MelonLoader-Ordner des Spiels
|
||||
- MCP Plugin Port: localhost:8081
|
||||
- Framework Config: im Spielordner unter GregFramework\config\
|
||||
- Mod-Ordner: im Spielordner unter GregFramework\mods\
|
||||
- Extension-Ordner: im Spielordner unter GregFramework\extensions\
|
||||
|
||||
---
|
||||
|
||||
## Gesprächsregeln
|
||||
|
||||
- Antworte auf Deutsch, technisch präzise
|
||||
- Fass vor jedem Codevorschlag kurz zusammen, was du verstanden hast
|
||||
- Wenn Kontext fehlt (Unity-Version, MelonLoader-Version, etc.), frage gezielt – aber nur eine Sache auf einmal
|
||||
- Erkläre Entscheidungen kurz (warum dieser Ansatz, nicht nur was)
|
||||
- Code in C# Blöcken, kompilierbar oder klar mit Platzhaltern markiert
|
||||
- Verweise immer auf die relevante Schicht im Architektur-Tree
|
||||
120
.github/workflows/sponsor-tier-sync.yml
vendored
Normal file
120
.github/workflows/sponsor-tier-sync.yml
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
name: Sponsor Tier Sync
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
schedule:
|
||||
- cron: "17 * * * *"
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
jobs:
|
||||
sync:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Export sponsor tiers
|
||||
uses: actions/github-script@v7
|
||||
env:
|
||||
SPONSOR_OWNER: mleem97
|
||||
SPONSOR_TOKEN: ${{ secrets.SPONSORS_READ_TOKEN }}
|
||||
with:
|
||||
github-token: ${{ secrets.SPONSORS_READ_TOKEN != '' && secrets.SPONSORS_READ_TOKEN || github.token }}
|
||||
script: |
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
const core = require('@actions/core');
|
||||
|
||||
const owner = process.env.SPONSOR_OWNER || context.repo.owner;
|
||||
const now = new Date().toISOString();
|
||||
const outDir = path.join(process.cwd(), 'sponsors');
|
||||
const outFile = path.join(outDir, 'sponsors.json');
|
||||
|
||||
const emptyPayload = {
|
||||
generatedAt: now,
|
||||
owner,
|
||||
totals: { activeSponsors: 0, monthlyUsd: 0 },
|
||||
tiers: {},
|
||||
sponsors: []
|
||||
};
|
||||
|
||||
fs.mkdirSync(outDir, { recursive: true });
|
||||
|
||||
const query = `
|
||||
query($login: String!) {
|
||||
user(login: $login) {
|
||||
sponsorshipsAsMaintainer(first: 100, activeOnly: true) {
|
||||
nodes {
|
||||
sponsorEntity {
|
||||
__typename
|
||||
... on User { login url }
|
||||
... on Organization { login url }
|
||||
}
|
||||
tier {
|
||||
name
|
||||
monthlyPriceInDollars
|
||||
isOneTime
|
||||
}
|
||||
privacyLevel
|
||||
createdAt
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
try {
|
||||
const result = await github.graphql(query, { login: owner });
|
||||
const nodes = result?.user?.sponsorshipsAsMaintainer?.nodes || [];
|
||||
|
||||
const sponsors = nodes
|
||||
.filter(n => n?.tier && !n.tier.isOneTime && n?.sponsorEntity?.login)
|
||||
.map(n => ({
|
||||
login: n.sponsorEntity.login,
|
||||
url: n.sponsorEntity.url,
|
||||
tierName: n.tier.name,
|
||||
monthlyUsd: n.tier.monthlyPriceInDollars,
|
||||
privacyLevel: n.privacyLevel,
|
||||
createdAt: n.createdAt
|
||||
}))
|
||||
.sort((a, b) => b.monthlyUsd - a.monthlyUsd || a.login.localeCompare(b.login));
|
||||
|
||||
const tiers = {};
|
||||
let monthlyUsd = 0;
|
||||
for (const s of sponsors) {
|
||||
monthlyUsd += s.monthlyUsd;
|
||||
if (!tiers[s.monthlyUsd]) {
|
||||
tiers[s.monthlyUsd] = { count: 0, sponsors: [] };
|
||||
}
|
||||
tiers[s.monthlyUsd].count += 1;
|
||||
tiers[s.monthlyUsd].sponsors.push({ login: s.login, url: s.url, tierName: s.tierName });
|
||||
}
|
||||
|
||||
const payload = {
|
||||
generatedAt: now,
|
||||
owner,
|
||||
totals: { activeSponsors: sponsors.length, monthlyUsd },
|
||||
tiers,
|
||||
sponsors
|
||||
};
|
||||
|
||||
fs.writeFileSync(outFile, JSON.stringify(payload, null, 2) + '\n', 'utf8');
|
||||
core.notice(`Exported ${sponsors.length} active sponsors for ${owner}.`);
|
||||
} catch (error) {
|
||||
core.warning(`Sponsor export failed: ${error.message}`);
|
||||
fs.writeFileSync(outFile, JSON.stringify(emptyPayload, null, 2) + '\n', 'utf8');
|
||||
}
|
||||
|
||||
- name: Commit sponsor export
|
||||
run: |
|
||||
if [[ -n "$(git status --porcelain sponsors/sponsors.json)" ]]; then
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add sponsors/sponsors.json
|
||||
git commit -m "chore(sponsors): sync sponsor tiers"
|
||||
git push
|
||||
else
|
||||
echo "No sponsor changes detected."
|
||||
fi
|
||||
4
.gitignore
vendored
Normal file
4
.gitignore
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
bin/
|
||||
obj/
|
||||
node_modules/
|
||||
.DS_Store
|
||||
13
IDEA_BACKLOG.md
Normal file
13
IDEA_BACKLOG.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Idea backlog (Discord and manual)
|
||||
|
||||
Add one line per idea. Unchecked items can be turned into GitHub issues with `python tools/auto_issue_creator.py`.
|
||||
|
||||
## Pending
|
||||
|
||||
- [ ] (example) Add a smoke test for the FFI bridge.
|
||||
|
||||
## Process
|
||||
|
||||
1. Discord: `!request Your idea` (requires `DISCORD_BOT_TOKEN` and `tools/discord_bridge.py`).
|
||||
2. Or edit this file manually.
|
||||
3. Run `python tools/auto_issue_creator.py` to create issues from unchecked lines (requires `gh` CLI and auth).
|
||||
12
README (2).md
Normal file
12
README (2).md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: Monorepo wiki (curated stubs)
|
||||
sidebar_label: Monorepo wiki
|
||||
description: Small curated pages for the target monorepo layout — not the GitHub Wiki import.
|
||||
---
|
||||
|
||||
# Monorepo wiki (curated)
|
||||
|
||||
This folder holds **short, maintained** pages that describe the **intended** repository layout (e.g. Hexmod, framework hooks). It is separate from **`docs/wiki-import/`**, which mirrors the **GitHub Wiki**.
|
||||
|
||||
- Prefer **new documentation** in [`topics/`](../topics/index.md) or [`reference/`](../reference/fmf-hook-naming.md) when the content is not tied to a single mod stub.
|
||||
- Optional manifest: [`mods/mod-index.json`](./mods/mod-index.json) (for future tooling; not consumed by Docusaurus automatically yet).
|
||||
46
README.md
Normal file
46
README.md
Normal file
@@ -0,0 +1,46 @@
|
||||
# Documentation layout (`docs/`)
|
||||
|
||||
This folder is the **single source of truth** for the public Docusaurus site. The app lives in [`wiki/`](../wiki/); built pages are served under the **`/wiki`** base path.
|
||||
|
||||
## How content is organized
|
||||
|
||||
| Area | Path | Purpose |
|
||||
|------|------|--------|
|
||||
| **Landing** | [`intro.md`](./intro.md) | Site home (`/wiki/docs`). |
|
||||
| **Curated topics** | [`topics/`](./topics/) | Hubs: **Rollen** (Spieler, Moddevs, Contributor, Sponsoren → [`audiences/overview`](./topics/audiences/overview.md)), Roadmap, Security, Wiki-Import. |
|
||||
| **Mods & plugins** | [`mods/`](./mods/) | Framework, plugin wiki, mod wiki, standalone index. |
|
||||
| **Releases** | [`releases/`](./releases/) | Per-artifact release notes. |
|
||||
| **Reference** | [`reference/`](./reference/) | Hooks, naming, MCP, generated catalogs. |
|
||||
| **Contributors** | [`contributors/`](./contributors/) | Repo layout, Docusaurus workflow, design system. |
|
||||
| **Audiences** | [`audiences/`](./audiences/) | Newbies / intermediates / professionals. |
|
||||
| **Roadmap** | [`roadmap/`](./roadmap/) | Planning docs. |
|
||||
| **Meta** | [`meta/`](./meta/) | Workshop, devserver, backlog. |
|
||||
| **Monorepo wiki stubs** | [`wiki/`](./wiki/) | Short pages tied to the target repo layout (e.g. Hexmod). **Not** the GitHub Wiki import. |
|
||||
| **Legacy GitHub Wiki import** | [`wiki-import/`](./wiki-import/) | Bulk import from `.wiki/` (see below). |
|
||||
|
||||
## Legacy GitHub Wiki (`docs/wiki-import/`)
|
||||
|
||||
Long-form pages that originally lived in the **GitHub Wiki** are mirrored here so they are searchable and versioned with the repo.
|
||||
|
||||
1. **Clone or update** the wiki working tree at the repo root as **`.wiki/`** (separate clone: `https://github.com/<org>/<repo>.wiki.git`).
|
||||
2. From **`wiki/`**, refresh the mirror and split locales:
|
||||
- `npm run wiki:refresh`
|
||||
- Or stepwise: `npm run wiki:sync` → `npm run wiki:normalize-i18n` (optional `--dry-run` first).
|
||||
3. **German** translations for paired pages live under `wiki/i18n/de/docusaurus-plugin-content-docs/current/wiki-import/` after normalization.
|
||||
4. **New curated docs** should usually be added as normal Markdown under `docs/` (topics, reference, mods), not only under `wiki-import/`, so they stay easy to find. Use `wiki-import/` for bulk legacy material and incremental fixes; migrate important pages into `docs/topics/` or `docs/reference/` when you rewrite them.
|
||||
|
||||
Details: [`topics/wiki-import/overview.md`](./topics/wiki-import/overview.md).
|
||||
|
||||
## URLs
|
||||
|
||||
- Doc id `intro` → `/wiki/docs` (see front matter).
|
||||
- Most docs → `/wiki/<doc-path>` (e.g. `mods/framework` → `/wiki/mods/framework`).
|
||||
- The monorepo stub folder uses ids like `wiki/mods/hexmod` → `/wiki/wiki/mods/hexmod` (double `wiki` in the path). Prefer linking by **doc id** or stable titles rather than hand-typing URLs.
|
||||
|
||||
## Scripts (repo root / `wiki/`)
|
||||
|
||||
| Script | Location | Role |
|
||||
|--------|------------|------|
|
||||
| Sync `.wiki` → `docs/wiki-import/` | `wiki/scripts/sync-wiki-to-docs.mjs` | Copies `*.md` from `.wiki/`. |
|
||||
| Split DE/EN pairs | `wiki/scripts/normalize-wiki-import-i18n.mjs` | EN default locale, DE under `wiki/i18n/de/...`. |
|
||||
| Sidebar category keys | `wiki/scripts/write-wiki-import-category-keys.mjs` | Regenerates `_category_.json` keys under Guides/Reference/Troubleshooting. |
|
||||
54
SPONSORS.md
Normal file
54
SPONSORS.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Sponsors
|
||||
|
||||
Thank you for supporting the GregFramework ecosystem.
|
||||
|
||||
## Top Sponsor (VIP)
|
||||
|
||||
- **💎 The Ecosystem Architect ($50/month):** [@tobiasreichel](https://github.com/tobiasreichel)
|
||||
|
||||
Premium benefits currently assigned:
|
||||
|
||||
- Top sponsor placement on ecosystem-facing surfaces (Wiki front page + Mod Store footer)
|
||||
- Private 1-on-1 Discord lounge
|
||||
- Featured mod spotlight option
|
||||
|
||||
## Sponsorship Tiers
|
||||
|
||||
### ☕ $1 / month – The Coffee Supporter
|
||||
|
||||
- GitHub sponsor badge
|
||||
- Discord `Supporter` role
|
||||
- Eternal gratitude
|
||||
|
||||
### 🥉 $5 / month – Bronze Backer (Active Player)
|
||||
|
||||
Includes all previous perks, plus:
|
||||
|
||||
- Credits entry in GregTools Mod Manager (`Special Thanks / Sponsors`)
|
||||
- Access to sponsor-only Discord chat for spoilers/WIP/dev updates
|
||||
|
||||
### 🥈 $15 / month – Silver Tester (Early Access)
|
||||
|
||||
Includes all previous perks, plus:
|
||||
|
||||
- Early access to pre-release and beta builds
|
||||
- Roadmap voting access for Silver+ backers
|
||||
|
||||
### 🥇 $25 / month – Gold Developer (Pro Modder)
|
||||
|
||||
Includes all previous perks, plus:
|
||||
|
||||
- Priority handling for framework bug reports
|
||||
- Official Gold sponsor mention in repository `README.md`
|
||||
|
||||
### 💎 $50 / month – The Ecosystem Architect (Premium/VIP)
|
||||
|
||||
Includes all previous perks, plus:
|
||||
|
||||
- Top sponsor placement on Wiki front page and Mod Store footer
|
||||
- Private 1-on-1 Discord lounge
|
||||
- Featured mod spot on `datacentermods.com`
|
||||
|
||||
## Automation
|
||||
|
||||
Use a repository workflow file at `.github/workflows/sponsor-tier-sync.yml` to export current sponsor tiers and drive Discord/website sync jobs.
|
||||
30
architecture.md
Normal file
30
architecture.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: Monorepo — Architecture
|
||||
sidebar_label: Monorepo architecture
|
||||
description: Core vs bindings vs mods; hook scanner; Game2Framework compatibility.
|
||||
---
|
||||
|
||||
# Monorepo — Architecture
|
||||
|
||||
## Layers
|
||||
|
||||
| Layer | Role |
|
||||
|------|------|
|
||||
| **Core** | MelonLoader mod + event dispatch — today under `framework/FrikaMF/` (C#). Target layout: `FrikaModFramework/src/core/`. |
|
||||
| **Bindings** | Language-specific surfaces — placeholders under `FrikaModFramework/src/bindings/`. |
|
||||
| **Mods / plugins** | Shipped sources in `mods/` and `plugins/`; optional pilot tree `HexMod/` (VDF + hooks metadata). |
|
||||
| **Docs** | Docusaurus consumes repo-root `docs/`; app lives in `wiki/`. |
|
||||
|
||||
## Hook registry
|
||||
|
||||
`FrikaModFramework/fmf_hooks.json` is the declarative **single source of truth** for documented `FMF.*` hooks. The runtime still exposes legacy `FFM.*` strings where not yet migrated.
|
||||
|
||||
## Tools
|
||||
|
||||
- **`tools/fmf-hook-scanner`** — emit the [FMF Hook Reference](./fmf-hooks) page from the registry.
|
||||
- **`tools/game2framework-migrator`** — dry-run mapping using `tools/fmf-hook-scanner/mapping/game2framework-map.json`.
|
||||
- **`mcp-server/`** — Model Context Protocol server (docs + registry) for IDEs; can run in Docker with the static wiki — see [MCP server](../../reference/mcp-server.md).
|
||||
|
||||
## Steam & Workshop
|
||||
|
||||
Workshop templates: `templates/workshop/`. CLI/upload scripts: `tools/steam-workshop-upload/`. Desktop uploader (Windows MAUI): `WorkshopUploader/` (see `WorkshopUploader/README.md`).
|
||||
30
audiences/intermediates.md
Normal file
30
audiences/intermediates.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
id: intermediates
|
||||
title: Intermediates
|
||||
slug: /audiences/intermediates
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Build and debug your own mods with stable framework workflows.
|
||||
|
||||
## Learning path
|
||||
|
||||
1. Pick one track: C# or Rust.
|
||||
2. Learn hooks/events flow.
|
||||
3. Use verified targets from `HOOKS.md`.
|
||||
4. Implement mod config and diagnostics.
|
||||
|
||||
## Read next
|
||||
|
||||
- `.wiki/Mod-Developer-Debug.md`
|
||||
- `.wiki/Mod-Developer-Debug-en.md`
|
||||
- `.wiki/Modding-Guide.md`
|
||||
- `.wiki/FFI-Bridge-Reference.md`
|
||||
- `.wiki/Web-UI-Bridge.md`
|
||||
|
||||
## Practical checkpoints
|
||||
|
||||
- Build passes in debug/release
|
||||
- Hook target is verified in `HOOKS.md`
|
||||
- Events are version-safe and documented
|
||||
29
audiences/newbies.md
Normal file
29
audiences/newbies.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
id: newbies
|
||||
title: Newbies
|
||||
slug: /audiences/newbies
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Get FrikaMF running safely and understand the minimum concepts.
|
||||
|
||||
## Start here
|
||||
|
||||
1. Install MelonLoader and run the game once.
|
||||
2. Copy `FrikaModdingFramework.dll` into `Data Center/Mods`.
|
||||
3. Add the mod that depends on FrikaMF.
|
||||
4. Check `MelonLoader/Latest.log`.
|
||||
|
||||
## Read next
|
||||
|
||||
- `.wiki/End-User-Release.md`
|
||||
- `.wiki/End-User-Release-en.md`
|
||||
- `.wiki/Known-Incompatibilities-en.md`
|
||||
- `.wiki/Bekannte-Inkompatibilitaeten.md`
|
||||
|
||||
## Common mistakes
|
||||
|
||||
- Wrong folder (`Mods` vs `RustMods`)
|
||||
- Missing first game start after MelonLoader install
|
||||
- Mixing incompatible game/framework versions
|
||||
32
audiences/professionals.md
Normal file
32
audiences/professionals.md
Normal file
@@ -0,0 +1,32 @@
|
||||
---
|
||||
id: professionals
|
||||
title: Pros
|
||||
slug: /audiences/professionals
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Work on framework internals, ABI stability, CI quality, and long-term maintainability.
|
||||
|
||||
## Focus areas
|
||||
|
||||
- Runtime architecture and ownership boundaries
|
||||
- C#↔Rust ABI evolution
|
||||
- Compatibility arbitration and diagnostics
|
||||
- Release assets and template integrity
|
||||
- Security review pipeline for future Mod Store
|
||||
|
||||
## Read next
|
||||
|
||||
- `.wiki/Architecture.md`
|
||||
- `.wiki/Framework-Features-Use-Cases.md`
|
||||
- `.wiki/StandaloneMods.md`
|
||||
- `.wiki/Repository-Status-2026-04-04.md`
|
||||
- `.wiki/ROADMAP.md`
|
||||
- `.wiki/TASKLIST.md`
|
||||
|
||||
## Professional quality gates
|
||||
|
||||
- Explicit migration notes for contracts/events
|
||||
- Reproducible build and release pipelines
|
||||
- Documented rollback and incompatibility strategy
|
||||
40
contributors/docusaurus-workflow.md
Normal file
40
contributors/docusaurus-workflow.md
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
id: docusaurus-workflow
|
||||
title: Docusaurus Contributor Workflow
|
||||
slug: /contributors/docusaurus-workflow
|
||||
---
|
||||
|
||||
## Local workflow
|
||||
|
||||
Markdown and MDX live in the repo-root `docs/` folder. The Docusaurus app is in `wiki/`.
|
||||
|
||||
```bash
|
||||
cd wiki
|
||||
npm install
|
||||
npm run start
|
||||
```
|
||||
|
||||
## Build workflow
|
||||
|
||||
```bash
|
||||
cd wiki
|
||||
npm run build
|
||||
npm run serve
|
||||
```
|
||||
|
||||
## Can we hide Docusaurus build stuff from non-contributors?
|
||||
|
||||
Short answer for a **public repo**: **not fully**.
|
||||
|
||||
What you can do:
|
||||
|
||||
- Keep generated output (`build/`, `.docusaurus/`, `node_modules/`) out of Git using `.gitignore`.
|
||||
- Put docs tooling under `wiki/` so core runtime contributors can ignore it; content stays in `docs/`.
|
||||
- Use path-based CODEOWNERS to limit review noise.
|
||||
- Trigger docs CI on `docs/**` and `wiki/**` changes.
|
||||
|
||||
What you cannot do in a public repo:
|
||||
|
||||
- Fully hide tracked source files from non-contributors.
|
||||
|
||||
If you need true visibility restriction, use a private repo/submodule for docs infra.
|
||||
97
contributors/luminescent-design-system.md
Normal file
97
contributors/luminescent-design-system.md
Normal file
@@ -0,0 +1,97 @@
|
||||
---
|
||||
sidebar_label: Luminescent design system
|
||||
description: Visual and interaction guidelines for the docs site (Luminescent Architect).
|
||||
---
|
||||
|
||||
The **Frika Mod Framework** (FMF) is the product name for all Docusaurus branding (site title, navbar, page titles). **Luminescent Architect** names this visual design system only.
|
||||
|
||||
# Design System Specification: The Luminescent Architect
|
||||
|
||||
## 1. Overview & Creative North Star
|
||||
|
||||
**The Creative North Star: "The Luminescent Architect"**
|
||||
This design system moves away from the "flat-and-boxy" utility of standard modding sites. It treats code and community interaction as an architectural feat. We achieve a high-end editorial feel through **Tonal Depth** and **Intentional Asymmetry**. Instead of rigid grids that feel like a spreadsheet, we use overlapping layers and "light-bleed" to guide the user’s eye. The goal is a digital environment that feels like a high-end laboratory: sterile, precise, yet pulsing with the energy of the teal primary accent.
|
||||
|
||||
## 2. Color & Atmospheric Theory
|
||||
|
||||
We do not use color simply to decorate; we use it to define space.
|
||||
|
||||
### The "No-Line" Rule
|
||||
|
||||
**Explicit Instruction:** Prohibit 1px solid borders for sectioning.
|
||||
Boundaries are defined solely through background color shifts. For example, a `surface-container-low` section sitting on a `surface` background creates a natural edge. This "Editorial Bleed" makes the interface feel expansive and premium rather than boxed-in.
|
||||
|
||||
### Surface Hierarchy & Nesting
|
||||
|
||||
Treat the UI as physical layers of "Synthetic Glass."
|
||||
|
||||
- **Layer 0 (Base):** `surface` (#001110) - The deep abyss.
|
||||
- **Layer 1 (Sub-sections):** `surface-container-low` (#001715).
|
||||
- **Layer 2 (Cards/Containers):** `surface-container` (#001E1C).
|
||||
- **Layer 3 (Modals/Popovers):** `surface-container-high` (#002422).
|
||||
|
||||
### The Glass & Gradient Rule
|
||||
|
||||
Floating elements (Navigation, Tooltips) must use **Glassmorphism**.
|
||||
|
||||
- **Formula:** `surface-container` at 80% opacity + `backdrop-filter: blur(12px)`.
|
||||
- **Signature Texture:** Primary CTAs must utilize a subtle linear gradient from `primary` (#61F4D8) to `primary-container` (#08C1A6) at a 135-degree angle. This prevents "flatness" and gives the button a machined, metallic quality.
|
||||
|
||||
Implementation reference: `wiki/src/css/custom.css` (`@theme` tokens, `.btn-primary`, `.glass-card`, `.navbar`).
|
||||
|
||||
## 3. Typography: The Editorial Edge
|
||||
|
||||
The contrast between the technical precision of **Inter** and the geometric authority of **Space Grotesk** defines the brand.
|
||||
|
||||
- **Display & Headlines (Space Grotesk):** Use these for hero sections and documentation titles. High-contrast and slightly wider tracking (+2%) creates an authoritative, "tech-brochure" aesthetic. Tailwind / utility: `font-headline`.
|
||||
- **Body & Labels (Inter):** Reserved for technical data and long-form wiki content. Inter’s tall x-height ensures readability against the dark `background`. Default body uses `font-sans`.
|
||||
- **Code Blocks:** Must use a monospaced font (JetBrains Mono) nested in `surface-container-highest` to differentiate logic from documentation. Utility: `font-mono` / Infima monospace variables.
|
||||
|
||||
## 4. Elevation & Depth
|
||||
|
||||
We abandon the traditional drop-shadow. Depth is achieved via **Tonal Layering**.
|
||||
|
||||
- **The Layering Principle:** To lift a card, place a `surface-container-lowest` card inside a `surface-container-low` section. The "inverse lift" creates a sophisticated, recessed look.
|
||||
- **Ambient Glows:** For "floating" primary elements, use a shadow with the color `primary` at 10% opacity, a blur of `32px`, and a spread of `-4px`. This mimics the glow of a physical LED.
|
||||
- **The Ghost Border Fallback:** If a border is required for accessibility, use the `outline-variant` token at **15% opacity**. This creates a "suggestion" of a line that disappears into the background.
|
||||
|
||||
## 5. Component Architecture
|
||||
|
||||
### Buttons: The Kinetic Core
|
||||
|
||||
- **Primary:** Gradient fill (`primary` to `primary-container`), `on-primary` text. Add a 2px outer glow of `primary` on hover.
|
||||
- **Secondary (Outlined):** No fill. A "Ghost Border" of `outline-variant` at 40%. On hover, the border opacity jumps to 100%.
|
||||
- **Tertiary:** Pure text in `secondary`. Used for low-priority actions in the Sidebar.
|
||||
|
||||
### Navigation: Structural Fixed Points
|
||||
|
||||
- **Top Bar (Global):** Height: 72px. Background: `surface` (80% opacity) with `backdrop-blur`. No bottom border; use a subtle transition to `surface-container-low` for the content area.
|
||||
- **Wiki Sidebar (Contextual):** Sticky position. Uses `surface-container-low`. Active links use a left-aligned 4px vertical pill in `primary` and high-contrast `on-surface` text.
|
||||
|
||||
### Cards & Information Architecture
|
||||
|
||||
- **Rule:** Forbid divider lines within cards.
|
||||
- **Implementation:** Use 24px vertical padding (from the spacing scale) to separate the header from the body. Use `surface-variant` for metadata badges (e.g., "v1.2.0") to provide a "recessed" look.
|
||||
|
||||
### Code Blocks & Documentation
|
||||
|
||||
- **Container:** `surface-container-highest` with a `md` (0.75rem) corner radius.
|
||||
- **Syntax Highlighting:** Use `tertiary` (#64D0FF) for functions, `secondary` (#1CEDE1) for strings, and `error_dim` (#D7383B) for keywords.
|
||||
|
||||
## 6. Do’s and Don’ts
|
||||
|
||||
### Do:
|
||||
|
||||
- **Do** use `primary_fixed_dim` for icons to ensure they don't overpower the text.
|
||||
- **Do** allow for generous "negative space." High-end editorial design requires breathing room to feel premium.
|
||||
- **Do** use `surface_bright` as a very subtle "top-light" gradient on large containers to simulate overhead lighting.
|
||||
|
||||
### Don’t:
|
||||
|
||||
- **Don’t** use pure white (#FFFFFF) for text. Always use `on_surface` (#C0FCF6) to reduce eye strain in dark mode.
|
||||
- **Don’t** use 1px solid borders to separate sidebar items; use vertical spacing or a subtle background hover state.
|
||||
- **Don’t** use standard "drop shadows" (Black/Grey). Always tint your shadows with the background or accent color to maintain tonal harmony.
|
||||
|
||||
## 7. Token map (implementation)
|
||||
|
||||
Semantic colors are defined as Tailwind v4 `@theme` variables in `wiki/src/css/custom.css` (e.g. `--color-primary`, `--color-on-surface`, `--color-surface-container-low`). Prefer those utilities in React pages (`bg-background`, `text-on-surface`, `border-outline-variant/15`) so the site stays aligned with this spec.
|
||||
55
contributors/monorepo-target-layout.md
Normal file
55
contributors/monorepo-target-layout.md
Normal file
@@ -0,0 +1,55 @@
|
||||
---
|
||||
id: monorepo-target-layout
|
||||
title: Monorepo target layout and migration phases
|
||||
sidebar_label: Monorepo target layout
|
||||
description: Planned top-level structure and phased migration without a single big-bang refactor.
|
||||
---
|
||||
|
||||
# Monorepo target layout and migration phases
|
||||
|
||||
The repository **stays one Git repo**. The goal is **clear boundaries** between framework, mods, plugins, templates, docs, and tooling so users, modders, and contributors can navigate predictably.
|
||||
|
||||
## Target topology (directional)
|
||||
|
||||
| Top-level | Purpose |
|
||||
|-----------|---------|
|
||||
| `framework/` | Core MelonLoader framework (`framework/FrikaMF.csproj`, `framework/FrikaMF/`, entry `Main.cs`) |
|
||||
| `mods/` | Gameplay mods (`FMF.Mod.*`, `FMF.*.dll` style) |
|
||||
| `plugins/` | FFM plugins (`FFM.Plugin.*`) |
|
||||
| `Templates/` | Scaffolds for new mods/plugins |
|
||||
| `wiki/` | Docusaurus site (product docs; route base `/wiki`) |
|
||||
| `tools/` | Repo maintenance: hook catalog generator, codegen stubs |
|
||||
| `scripts/` | Release automation (existing) |
|
||||
|
||||
**Binaries**: prefer **GitHub Releases** (and pre-releases for beta) over committing DLLs. See [Release channels](../reference/release-channels.md).
|
||||
|
||||
## Phased migration (no big-bang)
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
p1[Phase1_DocsAndTools]
|
||||
p2[Phase2_MoveModsPlugins]
|
||||
p3[Phase3_FrameworkExtract]
|
||||
p4[Phase4_CIRedirects]
|
||||
p1 --> p2 --> p3 --> p4
|
||||
```
|
||||
|
||||
| Phase | Scope | Exit criteria |
|
||||
|-------|--------|---------------|
|
||||
| **1** | Docs, `tools/`, naming wiki, hook catalog script | Docusaurus build green; script generates catalog |
|
||||
| **2** | `git mv` former `ModsAndPlugins/` → `mods/` / `plugins/` | Done — `.csproj` relative paths unchanged (depth preserved); CI/docs updated |
|
||||
| **3** | Framework sources under `framework/` | Done — `FrikaMF.sln` points at `framework\framework/FrikaMF.csproj`; plugins reference `..\..\framework\framework/FrikaMF.csproj` |
|
||||
| **4** | CI matrix: docs + dotnet; `plugin-client-redirects` for old URLs | PR checks match local workflow |
|
||||
|
||||
## Path updates checklist (Phase 2 applied)
|
||||
|
||||
- [x] `FrikaMF.sln` project paths (`plugins\FFM.Plugin.*`)
|
||||
- [x] `.github/workflows` (CodeQL, release assets, Discord feed)
|
||||
- [x] Contributor docs and mod/plugin wiki pages (`Project Path` lines)
|
||||
- [ ] [`wiki/docusaurus.config.js`](https://github.com/mleem97/gregFramework/blob/master/wiki/docusaurus.config.js) redirects (only if public URLs must map old paths)
|
||||
- [ ] Historical wiki-import pages may still mention `StandaloneMods/` — update when editing those files
|
||||
|
||||
## Related
|
||||
|
||||
- [Repo inventory](./repo-inventory.md)
|
||||
- [FMF hook naming](../reference/fmf-hook-naming.md)
|
||||
31
contributors/plugin-submission-audit.md
Normal file
31
contributors/plugin-submission-audit.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
id: plugin-submission-audit
|
||||
title: Plugin Submission & Security Audit Workflow
|
||||
slug: /contributors/plugin-submission-audit
|
||||
---
|
||||
|
||||
## Goal
|
||||
|
||||
Provide a repeatable workflow where community authors submit plugins through a Git repository URL, then pass an automated security/quality audit before publication in the wiki and release channels.
|
||||
|
||||
## Submission Model
|
||||
|
||||
1. Author opens a **Plugin Submission** issue.
|
||||
2. Author provides a public Git repository URL (`https://...git`).
|
||||
3. Maintainer triggers the security-audit workflow.
|
||||
|
||||
## Automated Audit Steps
|
||||
|
||||
- Clone submitted repository in CI.
|
||||
- Run static scan for suspicious calls and execution vectors.
|
||||
- Run secret and credential pattern checks.
|
||||
- Produce an auditable report artifact.
|
||||
|
||||
## Release Gate Policy
|
||||
|
||||
- If audit result is **fail**, publication is blocked.
|
||||
- If audit result is **pass**, maintainers can mark module as `releaseReady` and publish wiki/release visibility.
|
||||
|
||||
## Multiplayer Clarification
|
||||
|
||||
Steamworks multiplayer remains a planned direction but is currently blocked by missing Steamworks implementation on the game developer side.
|
||||
76
contributors/repo-inventory.md
Normal file
76
contributors/repo-inventory.md
Normal file
@@ -0,0 +1,76 @@
|
||||
---
|
||||
id: repo-inventory
|
||||
title: Repository inventory
|
||||
sidebar_label: Repo inventory
|
||||
description: Current monorepo layout, projects, and known solution drift (contributors).
|
||||
---
|
||||
|
||||
# Repository inventory
|
||||
|
||||
This page is the **source of truth snapshot** for how the DataCenterExporter / gregFramework monorepo is organized today. Use it before large refactors or when onboarding.
|
||||
|
||||
## Top-level areas
|
||||
|
||||
| Area | Path | Role |
|
||||
|------|------|------|
|
||||
| Framework core | [`framework/FrikaMF.csproj`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF.csproj) | MelonLoader mod hosting runtime hooks, Harmony, bridge, events |
|
||||
| Target layout / registry | [`FrikaModFramework/`](https://github.com/mleem97/gregFramework/tree/master/FrikaModFramework) | `fmf_hooks.json`, bindings stubs, migration docs |
|
||||
| Workshop tooling | [`workshopuploader/`](https://github.com/mleem97/gregFramework/tree/master/workshopuploader) (rename from `WorkshopUploader/`; see `WorkshopUploader/MIGRATION_PUBLIC_REPO.md`) | Steam Workshop / workspace uploader — **.NET MAUI** (Windows) |
|
||||
| MCP (LLM / IDE) | [`mcp-server/`](https://github.com/mleem97/gregFramework/tree/master/mcp-server) | Model Context Protocol over docs + `fmf_hooks.json`; Docker: `docker compose up docs-mcp` |
|
||||
| Mods (sources) | [`mods/`](https://github.com/mleem97/gregFramework/tree/master/mods) | Gameplay mods (`FMF.*`, `FMF.Mod.*` folders) |
|
||||
| Plugins (sources) | [`plugins/`](https://github.com/mleem97/gregFramework/tree/master/plugins) | Framework plugins (`FFM.Plugin.*`) |
|
||||
| Templates | [`Templates/`](https://github.com/mleem97/gregFramework/tree/master/Templates) | Scaffolds for new mods/plugins |
|
||||
| Documentation content | [`docs/`](https://github.com/mleem97/gregFramework/tree/master/docs) | Markdown/MDX sources for the wiki |
|
||||
| Documentation site (Docusaurus) | [`wiki/`](https://github.com/mleem97/gregFramework/tree/master/wiki) | App shell, theme, `npm run build` |
|
||||
| Scripts | [`scripts/`](https://github.com/mleem97/gregFramework/tree/master/scripts) | Release metadata, changelog (e.g. `Update-ReleaseMetadata.ps1`) |
|
||||
| Wiki import (legacy) | [`docs/wiki-import/`](./../wiki-import/Home.md) | Imported `.wiki` content; still linked from many pages |
|
||||
|
||||
## .NET projects on disk (`*.csproj`)
|
||||
|
||||
| Project | Location | In `FrikaMF.sln`? |
|
||||
|---------|----------|-------------------|
|
||||
| FrikaMF | `framework/FrikaMF.csproj` | Yes |
|
||||
| WorkshopUploader | `workshopuploader/WorkshopUploader.csproj` (after folder rename) | No — use `WorkshopUploader.sln` in that folder |
|
||||
| FFM.Plugin.* (x5) | `plugins/FFM.Plugin.*/` | Yes — paths in [`FrikaMF.sln`](https://github.com/mleem97/gregFramework/blob/master/FrikaMF.sln) use `plugins\...` |
|
||||
| FMF.HexLabelMod | `mods/FMF.Mod.HexLabelMod/` | No (build standalone or add to solution) |
|
||||
| FMF.ConsoleInputGuard | `mods/FMF.ConsoleInputGuard/` | No |
|
||||
| FMF.GregifyEmployees | `mods/FMF.Mod.GregifyEmployees/` | No |
|
||||
| FMF.JoniMLCompatMod | `mods/FMF.Plugin.LangCompatBridge/` | No |
|
||||
| Templates | `Templates/FMF.*`, `Templates/StandaloneModTemplate/` | No |
|
||||
|
||||
## Build status (framework project)
|
||||
|
||||
- `framework/FrikaMF.csproj` explicitly **excludes** `workshopuploader/**` from compile (that app builds only via `workshopuploader/WorkshopUploader.csproj` / `WorkshopUploader.sln` in that folder).
|
||||
- `dotnet build FrikaMF.sln` builds framework and plugin projects under `plugins\` — **not** the MAUI Workshop app (MelonLoader/game refs still required locally unless `CI=true`).
|
||||
|
||||
## `FrikaMF.sln` drift (action items)
|
||||
|
||||
1. **Mods not in solution**: Standalone mod projects under `mods/` are intentionally omitted from the solution to keep the graph small; add them if you want `dotnet build` for every module in one shot.
|
||||
|
||||
2. **Templates in `framework/FrikaMF.csproj`**: Template sources under `Templates/` may fail `dotnet build framework/FrikaMF.csproj` with `CS0122` if `Core` visibility does not match template expectations — treat templates as **samples** until the project graph is cleaned up.
|
||||
|
||||
## Documentation (Docusaurus)
|
||||
|
||||
- **Entry**: `/wiki` → [`intro`](../intro.md)
|
||||
- **Sidebar**: [`sidebars.js`](https://github.com/mleem97/gregFramework/blob/master/wiki/sidebars.js)
|
||||
- **Module catalog** (downloads table): [`wiki/src/data/moduleCatalog.ts`](https://github.com/mleem97/gregFramework/blob/master/wiki/src/data/moduleCatalog.ts)
|
||||
- **Landing**: `/` → [`src/pages/index.tsx`](https://github.com/mleem97/gregFramework/blob/master/wiki/src/pages/index.tsx)
|
||||
- **Static catalog page**: `/mods`
|
||||
|
||||
## Hook / event sources of truth (code)
|
||||
|
||||
- String constants: [`framework/FrikaMF/HookNames.cs`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) (`FFM.*` hook IDs today).
|
||||
- Numeric IDs: [`framework/FrikaMF/EventIds.cs`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/EventIds.cs).
|
||||
- Generated wiki mirror: run [`tools/Generate-FmfHookCatalog.ps1`](https://github.com/mleem97/gregFramework/blob/master/tools/Generate-FmfHookCatalog.ps1) → [`fmf-hooks-catalog`](../reference/fmf-hooks-catalog.md).
|
||||
|
||||
## Debugging (MelonLoader, IL2CPP, Unity)
|
||||
|
||||
- **Build first:** `dotnet build FrikaMF.sln -c Debug` (requires MelonLoader + IL2CPP interop under `MelonLoader/` for your game install, or `lib/references/MelonLoader` — see `tools/refresh_refs.py`).
|
||||
- **Attach:** Run **Data Center** with MelonLoader, then attach your IDE’s **.NET / CoreCLR** debugger to the game process (process name usually matches the game executable). Breakpoints hit in **Debug** builds of mods/plugins copied into `Mods/`.
|
||||
- **`FFM.Plugin.AssetExporter`:** The project links `framework/Main.cs` (and related files) **and** references `FrikaMF.csproj`, which would normally produce **CS0436** duplicate-type warnings. Those are **suppressed** in the plugin `.csproj` (`NoWarn`); do not remove the project reference without linking the rest of the `FrikaMF` sources.
|
||||
|
||||
## Related
|
||||
|
||||
- [Monorepo target layout](./monorepo-target-layout.md) — phased folder goals
|
||||
- [FMF hook naming](../reference/fmf-hook-naming.md) — naming convention
|
||||
- [Release channels](../reference/release-channels.md) — Steam vs GitHub beta
|
||||
65
contributors/sponsorship-automation.md
Normal file
65
contributors/sponsorship-automation.md
Normal file
@@ -0,0 +1,65 @@
|
||||
# Sponsorship Automation
|
||||
|
||||
This document describes the standard automation flow for GregFramework sponsorship tiers.
|
||||
|
||||
## Goal
|
||||
|
||||
Keep sponsor tier data synchronized and use it as a source of truth for:
|
||||
|
||||
- Discord role sync
|
||||
- private/VIP channel access
|
||||
- website and wiki placements
|
||||
- Mod Store footer sponsor block
|
||||
- in-repo sponsor pages and credits
|
||||
|
||||
## Repository Workflow
|
||||
|
||||
Each repository contains `.github/workflows/sponsor-tier-sync.yml`.
|
||||
|
||||
The workflow:
|
||||
|
||||
1. runs hourly (and on manual trigger),
|
||||
2. queries active GitHub Sponsors,
|
||||
3. exports normalized data to `sponsors/sponsors.json`,
|
||||
4. commits changes automatically when sponsor data changes.
|
||||
|
||||
## Required Secret
|
||||
|
||||
Add this repository secret:
|
||||
|
||||
- `SPONSORS_READ_TOKEN`: GitHub PAT with access to read sponsor relationships.
|
||||
|
||||
Without this secret, the workflow still completes but exports an empty snapshot.
|
||||
|
||||
## Tier Mapping
|
||||
|
||||
Use this mapping in downstream systems:
|
||||
|
||||
- `$1` -> `coffee_supporter`
|
||||
- `$5` -> `bronze_backer`
|
||||
- `$15` -> `silver_tester`
|
||||
- `$25` -> `gold_developer`
|
||||
- `$50+` -> `ecosystem_architect`
|
||||
|
||||
## VIP Operational Rules
|
||||
|
||||
For `$50+` sponsors:
|
||||
|
||||
- assign top sponsor placement (Wiki front page + Mod Store footer)
|
||||
- create/maintain private 1-on-1 Discord lounge
|
||||
- offer featured mod spotlight
|
||||
|
||||
## Example Consumer Script (Discord/Wiki Sync)
|
||||
|
||||
Use `sponsors/sponsors.json` as input and run a separate scheduled job (bot or CI worker) that:
|
||||
|
||||
1. maps each sponsor to a tier role,
|
||||
2. grants/revokes Discord roles,
|
||||
3. maintains VIP private channels,
|
||||
4. updates website/wiki data endpoints.
|
||||
|
||||
## First Verified VIP
|
||||
|
||||
Current VIP sponsor:
|
||||
|
||||
- [@tobiasreichel](https://github.com/tobiasreichel) – `ecosystem_architect` (`$50/month`)
|
||||
25
devserver-betas.md
Normal file
25
devserver-betas.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# DevServer API — beta channels (`gregframework.eu`)
|
||||
|
||||
This document defines the **intended** client contract for the FrikaMF **WorkshopUploader** “Betas” panel. The server may be implemented separately; keep URLs and tokens configurable.
|
||||
|
||||
## Base URL
|
||||
|
||||
- Default: `https://gregframework.eu`
|
||||
- Override: user settings file next to the app (not committed to git).
|
||||
|
||||
## Endpoints (proposed)
|
||||
|
||||
| Method | Path | Purpose |
|
||||
|--------|------|---------|
|
||||
| `GET` | `/api/v1/betas` | List available beta channels (id, name, description). |
|
||||
| `POST` | `/api/v1/betas/{id}/subscribe` | Enroll the current user (body: Steam ID or bearer token from OAuth). |
|
||||
| `POST` | `/api/v1/betas/{id}/unsubscribe` | Leave a channel. |
|
||||
|
||||
## Authentication
|
||||
|
||||
- **Preferred:** Short-lived JWT after browser OAuth to `gregframework.eu`, stored in user settings.
|
||||
- **Alternative:** Steam ID from Steamworks session in the WorkshopUploader process, plus server-side verification.
|
||||
|
||||
## Rate limiting and errors
|
||||
|
||||
Clients should show HTTP status and response body on failure; retry with backoff.
|
||||
98
fmf-hooks.mdx
Normal file
98
fmf-hooks.mdx
Normal file
@@ -0,0 +1,98 @@
|
||||
---
|
||||
id: fmf-hooks
|
||||
title: FMF Hook Reference
|
||||
sidebar_label: FMF Hook Reference
|
||||
description: Auto-generated from FrikaModFramework/fmf_hooks.json — run tools/fmf-hook-scanner.
|
||||
---
|
||||
|
||||
:::info
|
||||
This page is generated by `tools/fmf-hook-scanner`. Do not edit by hand.
|
||||
:::
|
||||
|
||||
# FMF Hook Reference
|
||||
|
||||
## EMPLOYEE
|
||||
|
||||
### FMF.EMPLOYEE.Hired
|
||||
|
||||
**Description:** An employee was hired into the roster.
|
||||
|
||||
**Payload:**
|
||||
|
||||
- `employeeId` (string)
|
||||
- `role` (string)
|
||||
|
||||
**Example (C#)**
|
||||
|
||||
```csharp
|
||||
FmfApi.On("FMF.EMPLOYEE.Hired", payload => { });
|
||||
```
|
||||
|
||||
## GAMEPLAY
|
||||
|
||||
### FMF.GAMEPLAY.JobCompleted
|
||||
|
||||
**Description:** Emitted when a job has been fully processed.
|
||||
|
||||
**Payload:**
|
||||
|
||||
- `jobId` (string)
|
||||
- `durationSeconds` (number)
|
||||
- `revenue` (number)
|
||||
|
||||
**Example (C#)**
|
||||
|
||||
```csharp
|
||||
FmfApi.On("FMF.GAMEPLAY.JobCompleted", payload => { });
|
||||
```
|
||||
|
||||
## PLAYER
|
||||
|
||||
### FMF.PLAYER.LevelUp
|
||||
|
||||
**Description:** Player progression level increased.
|
||||
|
||||
**Payload:**
|
||||
|
||||
- `newLevel` (number)
|
||||
- `previousLevel` (number)
|
||||
|
||||
**Example (C#)**
|
||||
|
||||
```csharp
|
||||
FmfApi.On("FMF.PLAYER.LevelUp", payload => { });
|
||||
```
|
||||
|
||||
## RACK
|
||||
|
||||
### FMF.RACK.PowerLimitExceeded
|
||||
|
||||
**Description:** Power draw or allocation for a rack exceeded configured limits.
|
||||
|
||||
**Payload:**
|
||||
|
||||
- `rackId` (string)
|
||||
- `watts` (number)
|
||||
|
||||
**Example (C#)**
|
||||
|
||||
```csharp
|
||||
FmfApi.On("FMF.RACK.PowerLimitExceeded", payload => { });
|
||||
```
|
||||
|
||||
## SERVER
|
||||
|
||||
### FMF.SERVER.RackOverheated
|
||||
|
||||
**Description:** Server rack exceeded a critical temperature threshold.
|
||||
|
||||
**Payload:**
|
||||
|
||||
- `rackId` (string)
|
||||
- `temperature` (number)
|
||||
|
||||
**Example (C#)**
|
||||
|
||||
```csharp
|
||||
FmfApi.On("FMF.SERVER.RackOverheated", payload => { });
|
||||
```
|
||||
43
getting-started.md
Normal file
43
getting-started.md
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
title: Monorepo — Getting started
|
||||
sidebar_label: Monorepo getting started
|
||||
description: Target layout (FrikaModFramework, templates, tools) and how it maps to this repo today.
|
||||
---
|
||||
|
||||
# Monorepo — Getting started
|
||||
|
||||
The **goal** is a clear split between the framework (`FrikaModFramework/` registry + planned bindings), the **live** MelonLoader code (`framework/`), gameplay mods (`mods/`), FFM plugins (`plugins/`), templates (`templates/` / `Templates/`), and tooling (`tools/`). Migration is incremental: production C# still lives under [`framework/`](https://github.com/mleem97/gregFramework/tree/master/framework).
|
||||
|
||||
## Clone and build the framework
|
||||
|
||||
```text
|
||||
dotnet build framework/FrikaMF.csproj
|
||||
```
|
||||
|
||||
Or open [`FrikaMF.sln`](https://github.com/mleem97/gregFramework/blob/master/FrikaMF.sln) in Visual Studio / Rider.
|
||||
|
||||
## Hook naming
|
||||
|
||||
- **Target convention:** `FMF.<DOMAIN>.<Event>` (see [`CONTRIBUTING.md`](https://github.com/mleem97/gregFramework/blob/master/CONTRIBUTING.md)).
|
||||
- **Registry:** [`FrikaModFramework/fmf_hooks.json`](https://github.com/mleem97/gregFramework/blob/master/FrikaModFramework/fmf_hooks.json).
|
||||
- **Legacy runtime strings** may still use `FFM.*` in [`HookNames`](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs) until migrated.
|
||||
|
||||
## Create a mod from the template
|
||||
|
||||
1. Copy [`templates/mod/`](https://github.com/mleem97/gregFramework/tree/master/templates/mod) to a new folder (or start from [`Templates/`](https://github.com/mleem97/gregFramework/tree/master/Templates) scaffolds).
|
||||
2. Edit `fmf/hooks.json` and add sources under `src/`.
|
||||
3. For a **pilot** layout (Workshop VDF + hooks metadata), see [`HexMod/`](https://github.com/mleem97/gregFramework/tree/master/HexMod); shipped mod examples live under [`mods/`](https://github.com/mleem97/gregFramework/tree/master/mods) (e.g. `mods/FMF.Mod.HexLabelMod/`).
|
||||
|
||||
## Documentation site
|
||||
|
||||
- **Content:** [`docs/`](https://github.com/mleem97/gregFramework/tree/master/docs)
|
||||
- **Docusaurus app:** [`wiki/`](https://github.com/mleem97/gregFramework/tree/master/wiki) — `npm install` and `npm run start` (dev) or `npm run build` (static output).
|
||||
|
||||
### Docker
|
||||
|
||||
- **Dev server with hot reload:** `docker compose up docs` (port **3000**, mounts `./wiki` and `./docs`).
|
||||
- **Static wiki + MCP in one container:** `docker compose up docs-mcp` — see [`reference/mcp-server`](../../reference/mcp-server.md).
|
||||
|
||||
## Assistants / MCP
|
||||
|
||||
The repo includes [`mcp-server/`](https://github.com/mleem97/gregFramework/tree/master/mcp-server) for Model Context Protocol (search docs, read `fmf_hooks.json`, CONTRIBUTING). Use **stdio** locally or the **HTTP** endpoint bundled with the `docs-mcp` Docker image — details in [`docs/reference/mcp-server.md`](https://github.com/mleem97/gregFramework/blob/master/docs/reference/mcp-server.md).
|
||||
136
guides/contributor-workshop.md
Normal file
136
guides/contributor-workshop.md
Normal file
@@ -0,0 +1,136 @@
|
||||
---
|
||||
id: contributor-workshop
|
||||
title: Contributor Guide — WorkshopManager
|
||||
sidebar_label: Contributor Guide
|
||||
description: Development setup, building, publishing workflow, and release process for the WorkshopManager.
|
||||
sidebar_position: 20
|
||||
tags:
|
||||
- audience:contributor
|
||||
- workshop
|
||||
---
|
||||
|
||||
# Contributor Guide — WorkshopManager
|
||||
|
||||
This guide covers the development workflow for the WorkshopManager and how to publish mods to the Steam Workshop.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- **Visual Studio 2022** with **.NET Multi-platform App UI** and **Windows App SDK** workloads.
|
||||
- **.NET 9 SDK** (for the WorkshopManager MAUI app).
|
||||
- **.NET 6 SDK** (for framework, plugins, and mods targeting MelonLoader).
|
||||
- **Steam** with Data Center installed (App ID 4170200).
|
||||
|
||||
## Repository structure
|
||||
|
||||
| Path | Purpose |
|
||||
|------|---------|
|
||||
| `framework/FrikaMF.csproj` | Core MelonLoader framework DLL |
|
||||
| `plugins/FFM.Plugin.*/` | FMF extension plugins (5 projects) |
|
||||
| `mods/FMF.*/` | Standalone mods (4 projects) |
|
||||
| `WorkshopUploader/` | WorkshopManager MAUI app |
|
||||
| `scripts/Deploy-Release-ToWorkshop.ps1` | Package all builds into Workshop folders |
|
||||
| `scripts/Deploy-Release-ToDataCenter.ps1` | Deploy to game for local testing |
|
||||
|
||||
## Building
|
||||
|
||||
### Build everything (solution)
|
||||
|
||||
```bash
|
||||
dotnet build FrikaMF.sln -c Release
|
||||
```
|
||||
|
||||
### Build standalone mods (not in solution)
|
||||
|
||||
```bash
|
||||
dotnet build mods/FMF.ConsoleInputGuard/FMF.ConsoleInputGuard.csproj -c Release
|
||||
dotnet build mods/FMF.Mod.GregifyEmployees/FMF.GregifyEmployees.csproj -c Release
|
||||
dotnet build mods/FMF.Mod.HexLabelMod/FMF.HexLabelMod.csproj -c Release
|
||||
dotnet build mods/FMF.Plugin.LangCompatBridge/FMF.JoniMLCompatMod.csproj -c Release
|
||||
```
|
||||
|
||||
### Build WorkshopManager only
|
||||
|
||||
```bash
|
||||
dotnet build WorkshopUploader/WorkshopUploader.csproj -c Release
|
||||
```
|
||||
|
||||
## Workshop project structure
|
||||
|
||||
Each mod/plugin gets its own folder under `<GameRoot>/workshop/`:
|
||||
|
||||
```text
|
||||
<GameRoot>/workshop/
|
||||
├── FrikaModFramework/
|
||||
│ ├── content/
|
||||
│ │ └── Mods/
|
||||
│ │ └── FrikaModdingFramework.dll
|
||||
│ ├── metadata.json
|
||||
│ └── preview.png
|
||||
├── FFM.Plugin.Multiplayer/
|
||||
│ ├── content/
|
||||
│ │ └── FMF/
|
||||
│ │ └── Plugins/
|
||||
│ │ └── FFM.Plugin.Multiplayer.dll
|
||||
│ ├── metadata.json
|
||||
│ └── preview.png
|
||||
└── ...
|
||||
```
|
||||
|
||||
The `content/` folder mirrors the game directory structure and is what Steam uploads.
|
||||
|
||||
## Deploy to Workshop folders
|
||||
|
||||
```bash
|
||||
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1
|
||||
```
|
||||
|
||||
This script:
|
||||
1. Builds all framework, plugin, and mod projects.
|
||||
2. Creates a Workshop project folder for each under `<GameRoot>/workshop/`.
|
||||
3. Copies the built DLL into `content/<target path>/`.
|
||||
4. Creates `metadata.json` with title, description, tags, and visibility.
|
||||
|
||||
## Publishing workflow
|
||||
|
||||
### GUI (recommended)
|
||||
|
||||
1. Run the WorkshopManager app.
|
||||
2. Open a project from the **Projects** tab.
|
||||
3. Edit title, description, tags, visibility, and preview image.
|
||||
4. Write **change notes** describing what changed.
|
||||
5. Click **Save and upload to Steam**.
|
||||
6. After upload, the app **syncs** your local `content/` with Steam's version.
|
||||
|
||||
### CLI (headless)
|
||||
|
||||
```bash
|
||||
WorkshopUploader.exe --mode publish --path <project-folder>
|
||||
```
|
||||
|
||||
### Post-upload sync
|
||||
|
||||
After publishing, the app re-downloads the item from Steam and replaces your local `content/` folder. This ensures your working copy matches exactly what Steam has — similar to `git pull` after `git push`.
|
||||
|
||||
## Extending the service layer
|
||||
|
||||
The `SteamWorkshopService` in `WorkshopUploader/Services/SteamWorkshopService.cs` wraps the Facepunch.Steamworks 2.3.3 API. Key methods:
|
||||
|
||||
| Method | Purpose |
|
||||
|--------|---------|
|
||||
| `PublishAsync` | Create or update a Workshop item with change notes |
|
||||
| `SyncAfterPublishAsync` | Re-download from Steam to sync local content |
|
||||
| `BrowseAsync` | Browse all Workshop items with sort/tag filters |
|
||||
| `SearchAsync` | Text search across Workshop items |
|
||||
| `ListSubscribedAsync` | List user's subscribed items |
|
||||
| `ListFavoritedAsync` | List user's favorited items |
|
||||
| `SubscribeAsync` / `UnsubscribeAsync` | Toggle subscription |
|
||||
| `AddFavoriteAsync` / `RemoveFavoriteAsync` | Toggle favorite |
|
||||
| `VoteAsync` | Vote up or down |
|
||||
| `GetItemDetailsAsync` | Full item details with stats |
|
||||
|
||||
## Adding a new mod to the release
|
||||
|
||||
1. Create the mod project under `mods/`.
|
||||
2. Add it to the `$mods` array in `Deploy-Release-ToWorkshop.ps1`.
|
||||
3. Run the deploy script.
|
||||
4. Open the new workshop project in the WorkshopManager and publish.
|
||||
134
guides/enduser-workshop.md
Normal file
134
guides/enduser-workshop.md
Normal file
@@ -0,0 +1,134 @@
|
||||
---
|
||||
id: enduser-workshop
|
||||
title: End-User Guide — WorkshopManager
|
||||
sidebar_label: End-User Guide
|
||||
description: How to browse, install, and manage Data Center mods using the WorkshopManager.
|
||||
sidebar_position: 10
|
||||
tags:
|
||||
- audience:enduser
|
||||
- workshop
|
||||
---
|
||||
|
||||
# End-User Guide — WorkshopManager
|
||||
|
||||
This guide is for players who want to **install and manage mods** for Data Center using the WorkshopManager desktop app.
|
||||
|
||||
## What you need
|
||||
|
||||
- **Data Center** installed via Steam.
|
||||
- **Steam** running and logged in.
|
||||
- **WorkshopManager** (`WorkshopUploader.exe`) — either built from source or provided as a release.
|
||||
|
||||
## Installation
|
||||
|
||||
You can run WorkshopManager from **any folder you prefer** (for example `Program Files`, Desktop, Downloads, or `<Data Center install>/WorkshopUploader/`).
|
||||
|
||||
### Option A — Installer setup (recommended)
|
||||
|
||||
1. Run the latest `GregToolsModmanager-<version>-Setup.exe`.
|
||||
2. Complete the installer wizard (default path is under `Program Files`).
|
||||
3. Start the app from the Start Menu or desktop shortcut.
|
||||
|
||||
### Option B — Portable / ZIP build
|
||||
|
||||
1. Download or build the WorkshopManager files.
|
||||
2. Extract/copy the folder to any location you want.
|
||||
3. Launch `WorkshopUploader.exe` directly from that folder.
|
||||
|
||||
After startup, the Steam status indicator in the top-right should turn green.
|
||||
|
||||
## Browsing mods (Mod Store)
|
||||
|
||||
1. Open the **Mod Store** tab.
|
||||
2. Use the **Store** sub-tab to browse all available mods.
|
||||
3. Filter by tag (vanilla, modded, melonloader, fmf, framework) or sort by popularity, date, score, etc.
|
||||
4. Use the **Search** bar to find specific mods by name.
|
||||
5. Click on any mod to see its **detail page** with full stats, description, and action buttons.
|
||||
|
||||
## Installing mods (Subscribe)
|
||||
|
||||
1. In the Store or on an item's detail page, click **Subscribe**.
|
||||
2. Steam downloads the mod automatically.
|
||||
3. Check the **Installed** sub-tab to see all your subscribed mods.
|
||||
|
||||
Subscribed mods are managed by Steam — they update automatically when the author publishes changes.
|
||||
|
||||
## Favorites
|
||||
|
||||
1. On an item's detail page, click **Favorite** to bookmark it.
|
||||
2. View all your favorites in the **Favorites** sub-tab.
|
||||
3. Click **Unfavorite** to remove.
|
||||
|
||||
## Voting
|
||||
|
||||
On an item's detail page:
|
||||
|
||||
- Click **Vote Up** to recommend the mod.
|
||||
- Click **Vote Down** if there's a quality issue.
|
||||
|
||||
Your votes help the community find the best mods.
|
||||
|
||||
## Dependency Health (Health tab)
|
||||
|
||||
The **Health** sub-tab checks whether your game has:
|
||||
|
||||
- MelonLoader installed
|
||||
- Il2Cpp interop assemblies generated
|
||||
- FrikaModFramework core DLL
|
||||
- FMF plugins directory
|
||||
- Mod config directory
|
||||
|
||||
If anything is missing, follow the instructions shown.
|
||||
|
||||
### Installing MelonLoader
|
||||
|
||||
1. Go to the Health tab and click **Download page**.
|
||||
2. Download the latest **MelonLoader Installer** from GitHub.
|
||||
3. Run the installer, select **Data Center** as the game, choose **IL2CPP**.
|
||||
4. Start the game once and close it (this generates required assemblies).
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Steam - offline" in the title bar
|
||||
|
||||
- Make sure Steam is running and you are logged in.
|
||||
- Ensure `steam_appid.txt` (containing `4170200`) exists next to `WorkshopUploader.exe`.
|
||||
- If you use the portable/ZIP variant, make sure you copied the full app folder (not just the `.exe`).
|
||||
|
||||
### Mod does not load in-game
|
||||
|
||||
- Check `MelonLoader/Latest.log` in the game directory.
|
||||
- Ensure `FrikaModdingFramework.dll` is in `<game>/Mods/`.
|
||||
- Verify the mod DLL is also in `<game>/Mods/` or `<game>/FMF/Plugins/`.
|
||||
|
||||
### Subscription does not appear
|
||||
|
||||
- Wait a few seconds and refresh the Installed list.
|
||||
- Steam may need a moment to process the subscription.
|
||||
|
||||
### App crashes only after installer install
|
||||
|
||||
- Reinstall using the latest setup build.
|
||||
- Open **Settings -> Logs** and include the newest log lines when reporting the issue.
|
||||
- If available, report crash details via GitHub Issues.
|
||||
|
||||
## Reporting bugs and issues
|
||||
|
||||
If you find a bug, crash, or unexpected behavior, please open an issue on GitHub:
|
||||
|
||||
- [Report an issue](https://github.com/mleem97/GregToolsModmanager/issues)
|
||||
|
||||
To help us fix issues faster, include:
|
||||
|
||||
- What you were doing when the problem happened
|
||||
- Clear steps to reproduce
|
||||
- Your app version and Windows version
|
||||
- Error message or screenshot (if any)
|
||||
- Relevant logs from **Settings -> Logs**
|
||||
- A repro ZIP from **Settings -> Create repro bundle**
|
||||
|
||||
## Uninstalling mods
|
||||
|
||||
1. Go to the **Installed** sub-tab.
|
||||
2. Click **Unsubscribe** on the mod you want to remove.
|
||||
3. Steam removes the mod files automatically.
|
||||
118
guides/release.md
Normal file
118
guides/release.md
Normal file
@@ -0,0 +1,118 @@
|
||||
---
|
||||
id: release
|
||||
title: Release
|
||||
sidebar_label: Release
|
||||
description: Current release artifacts, version matrix, and download instructions for FrikaModFramework.
|
||||
sidebar_position: 30
|
||||
tags:
|
||||
- release
|
||||
---
|
||||
|
||||
# Release
|
||||
|
||||
## Release artifacts
|
||||
|
||||
The following components are built and packaged for Steam Workshop distribution:
|
||||
|
||||
### Core Framework
|
||||
|
||||
| Component | Assembly | Workshop content path | Tags |
|
||||
|-----------|----------|----------------------|------|
|
||||
| FrikaModFramework | `FrikaModdingFramework.dll` | `content/Mods/` | modded, melonloader, framework, fmf |
|
||||
|
||||
### FMF Plugins
|
||||
|
||||
| Plugin | Assembly | Workshop content path | Tags |
|
||||
|--------|----------|----------------------|------|
|
||||
| FFM.Plugin.Multiplayer | `FFM.Plugin.Multiplayer.dll` | `content/FMF/Plugins/` | modded, fmf, plugin |
|
||||
| FFM.Plugin.Sysadmin | `FFM.Plugin.Sysadmin.dll` | `content/FMF/Plugins/` | modded, fmf, plugin |
|
||||
| FFM.Plugin.AssetExporter | `FFM.Plugin.AssetExporter.dll` | `content/FMF/Plugins/` | modded, fmf, plugin |
|
||||
| FFM.Plugin.WebUIBridge | `FFM.Plugin.WebUIBridge.dll` | `content/FMF/Plugins/` | modded, fmf, plugin |
|
||||
| FFM.Plugin.PlayerModels | `FFM.Plugin.PlayerModels.dll` | `content/FMF/Plugins/` | modded, fmf, plugin |
|
||||
|
||||
### Gameplay Mods
|
||||
|
||||
| Mod | Assembly | Workshop content path | Tags |
|
||||
|-----|----------|----------------------|------|
|
||||
| FMF.ConsoleInputGuard | `FMF.ConsoleInputGuard.dll` | `content/Mods/` | modded, melonloader, mod |
|
||||
| FMF.GregifyEmployees | `FMF.GregifyEmployees.dll` | `content/Mods/` | modded, melonloader, mod |
|
||||
| FMF.HexLabelMod | `FMF.HexLabelMod.dll` | `content/Mods/` | modded, melonloader, mod |
|
||||
| FMF.JoniMLCompatMod | `FMF.JoniMLCompatMod.dll` | `content/Mods/` | modded, melonloader, mod |
|
||||
|
||||
### Gregtools Modmanager (WorkshopManager)
|
||||
|
||||
| Version | Component | Target | Description |
|
||||
|---------|-----------|--------|-------------|
|
||||
| **1.0** | Gregtools Modmanager | `net9.0-windows` (win10-x64), self-contained | Steam Workshop client + Mod Store + Mod Manager. No .NET runtime required. See [GregTools 1.0 Modmanager release](/wiki/releases/tools/gregtools-modmanager-1.0-release). |
|
||||
|
||||
## Installation for end users
|
||||
|
||||
### Quick start
|
||||
|
||||
1. Install **MelonLoader** (IL2CPP) for Data Center.
|
||||
2. Start the game once, then close it.
|
||||
3. Subscribe to mods via the **WorkshopManager** Mod Store or the [Steam Workshop](https://steamcommunity.com/app/4170200/workshop/).
|
||||
4. Start the game.
|
||||
|
||||
### Manual installation
|
||||
|
||||
1. Download the DLL from the Workshop or a release.
|
||||
2. Framework: place `FrikaModdingFramework.dll` in `<Data Center>/Mods/`.
|
||||
3. Plugins: place `FFM.Plugin.*.dll` in `<Data Center>/FMF/Plugins/`.
|
||||
4. Mods: place `FMF.*.dll` in `<Data Center>/Mods/`.
|
||||
5. Start the game and check `MelonLoader/Latest.log`.
|
||||
|
||||
## Game directory structure
|
||||
|
||||
```text
|
||||
Data Center/
|
||||
├── Mods/
|
||||
│ ├── FrikaModdingFramework.dll
|
||||
│ ├── FMF.ConsoleInputGuard.dll
|
||||
│ ├── FMF.GregifyEmployees.dll
|
||||
│ ├── FMF.HexLabelMod.dll
|
||||
│ └── FMF.JoniMLCompatMod.dll
|
||||
├── FMF/
|
||||
│ └── Plugins/
|
||||
│ ├── FFM.Plugin.Multiplayer.dll
|
||||
│ ├── FFM.Plugin.Sysadmin.dll
|
||||
│ ├── FFM.Plugin.AssetExporter.dll
|
||||
│ ├── FFM.Plugin.WebUIBridge.dll
|
||||
│ └── FFM.Plugin.PlayerModels.dll
|
||||
├── MelonLoader/
|
||||
│ └── Latest.log
|
||||
├── UserData/
|
||||
│ └── ModCfg/
|
||||
└── workshop/
|
||||
├── FrikaModFramework/
|
||||
│ ├── content/Mods/FrikaModdingFramework.dll
|
||||
│ └── metadata.json
|
||||
├── FFM.Plugin.Multiplayer/
|
||||
│ ├── content/FMF/Plugins/FFM.Plugin.Multiplayer.dll
|
||||
│ └── metadata.json
|
||||
├── Gregtools Modmanager/
|
||||
│ ├── content/ (self-contained WorkshopUploader.exe + dependencies)
|
||||
│ └── metadata.json
|
||||
└── ... (one folder per component)
|
||||
```
|
||||
|
||||
## Build and deploy (contributors)
|
||||
|
||||
```bash
|
||||
# Build everything and package into Workshop folders
|
||||
pwsh -File scripts/Deploy-Release-ToWorkshop.ps1
|
||||
|
||||
# Deploy to game Mods/ and FMF/Plugins/ for local testing
|
||||
pwsh -File scripts/Deploy-Release-ToDataCenter.ps1
|
||||
```
|
||||
|
||||
See also: [Contributor Guide](./contributor-workshop)
|
||||
|
||||
## Compatibility
|
||||
|
||||
| Component | Requires |
|
||||
|-----------|----------|
|
||||
| All mods/plugins | Data Center (Steam App 4170200) |
|
||||
| All mods/plugins | MelonLoader (IL2CPP, stable) |
|
||||
| FMF Plugins | FrikaModdingFramework.dll in Mods/ |
|
||||
| Gregtools Modmanager | Windows 10 1809+ (self-contained, no runtime install needed) |
|
||||
30
hexmod.md
Normal file
30
hexmod.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
title: HexMod
|
||||
sidebar_label: HexMod
|
||||
description: Hex label mod — in-world hex color labels for cable spinners and racks.
|
||||
---
|
||||
|
||||
# HexMod
|
||||
|
||||
The **Hex Label** mod adds in-world hex color labels for cable spinners and racks.
|
||||
|
||||
## Steamworks Info
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Assembly** | `FMF.HexLabelMod.dll` |
|
||||
| **Version** | `00.01.0009` |
|
||||
| **Author** | mleem97 |
|
||||
| **Game** | Waseku — Data Center (App 4170200) |
|
||||
| **Workshop Tags** | `modded`, `melonloader`, `mod` |
|
||||
|
||||
## Downloads
|
||||
|
||||
- **Steam Workshop:** Subscribe via the Gregtools Modmanager or the [Steam Workshop](https://steamcommunity.com/app/4170200/workshop/)
|
||||
- **Manual:** Drop `FMF.HexLabelMod.dll` into `<Data Center>/Mods/`
|
||||
|
||||
## Source & layout
|
||||
|
||||
- **Build sources:** [`mods/FMF.Mod.HexLabelMod`](https://github.com/mleem97/gregFramework/tree/master/mods/FMF.Mod.HexLabelMod)
|
||||
|
||||
See also the detailed wiki article [`mods/mods/fmf-hex-label-mod`](/wiki/mods/mods/fmf-hex-label-mod).
|
||||
41
intro.md
Normal file
41
intro.md
Normal file
@@ -0,0 +1,41 @@
|
||||
---
|
||||
id: intro
|
||||
title: FrikaMF Docs Start
|
||||
slug: /docs
|
||||
---
|
||||
|
||||
This documentation matches the **current monorepo**: MelonLoader framework under `framework/`, gameplay mods under `mods/`, FFM plugins under `plugins/`, Docusaurus content in `docs/`, and the wiki app in `wiki/`. It is written for **players**, **mod developers**, **contributors**, and **sponsors** — pick a lane below.
|
||||
|
||||
## Für wen? — Who is this for?
|
||||
|
||||
| Audience | Start here |
|
||||
|----------|------------|
|
||||
| **Spieler** — install, play, troubleshoot | [End users (hub)](./topics/end-user/overview.md) · [End user wiki (import)](./wiki-import/EndUser/) |
|
||||
| **Moddevs** — build mods, hooks, debugging | [Mod developers (hub)](./topics/mod-developers/overview.md) · [ModDevs wiki (import)](./wiki-import/ModDevs/) · [Framework](./mods/framework.md) |
|
||||
| **Contributor** — PRs, docs, plugins, CI | [Contributors (workflow)](./topics/contributors/overview.md) · [Contributors wiki (import)](./wiki-import/Contributors/) |
|
||||
| **Sponsorinnen & Sponsoren** — support & transparency | [Sponsors (hub)](./topics/sponsors/overview.md) · [Sponsors (EN)](./wiki-import/Sponsors.md) · [Sponsoren (DE)](./wiki-import/Sponsoren.md) |
|
||||
|
||||
**Experience tracks** (newbies → pros): [By audience](./topics/audiences/overview.md) → [Newbies](./audiences/newbies.md), [Intermediates](./audiences/intermediates.md), [Professionals](./audiences/professionals.md).
|
||||
|
||||
## Mods Hub
|
||||
|
||||
- Framework entry: [`Framework`](./mods/framework.md)
|
||||
- Standalone / mod list: [`Standalone Mods`](./mods/standalone/index.md)
|
||||
|
||||
## Hooks and releases
|
||||
|
||||
- [FMF hook naming](./reference/fmf-hook-naming.md) — `FMF.<Domain>.…` and legacy `FFM.*`
|
||||
- [FMF hooks catalog](./reference/fmf-hooks-catalog.md) — generated from `framework/FrikaMF/HookNames.cs`
|
||||
- [Release channels](./reference/release-channels.md) — Steam Workshop vs GitHub (beta)
|
||||
- [MCP server](./reference/mcp-server.md) — LLM/IDE tools over docs + `fmf_hooks.json` (optional Docker bundle)
|
||||
|
||||
## Repository layout (contributors)
|
||||
|
||||
- [Repo inventory](./contributors/repo-inventory.md) — projects, solution scope, entry points
|
||||
- [Monorepo target layout](./contributors/monorepo-target-layout.md) — phased migration goals
|
||||
|
||||
## Source model
|
||||
|
||||
- **Authoring:** Markdown and MDX live in the repo-root **`docs/`** folder (this tree). See the **[`docs/` layout map](./README.md)** for what lives where (curated topics vs `wiki-import/` vs `wiki/` stubs).
|
||||
- **Site:** The Docusaurus application is in **`wiki/`**; routes use base **`/wiki`** (see [Docusaurus workflow](./contributors/docusaurus-workflow.md)).
|
||||
- **Legacy GitHub Wiki:** Mirrored under **`docs/wiki-import/`**; refresh from **`.wiki/`** with `npm run wiki:refresh` in `wiki/`. Details: [Legacy wiki import](./topics/wiki-import/overview.md).
|
||||
13
meta/IDEA_BACKLOG.md
Normal file
13
meta/IDEA_BACKLOG.md
Normal file
@@ -0,0 +1,13 @@
|
||||
# Idea backlog (Discord and manual)
|
||||
|
||||
Add one line per idea. Unchecked items can be turned into GitHub issues with `python tools/auto_issue_creator.py`.
|
||||
|
||||
## Pending
|
||||
|
||||
- [ ] (example) Add a smoke test for the FFI bridge.
|
||||
|
||||
## Process
|
||||
|
||||
1. Discord: `!request Your idea` (requires `DISCORD_BOT_TOKEN` and `tools/discord_bridge.py`).
|
||||
2. Or edit this file manually.
|
||||
3. Run `python tools/auto_issue_creator.py` to create issues from unchecked lines (requires `gh` CLI and auth).
|
||||
39
meta/Steam-Workshop-and-Tooling.md
Normal file
39
meta/Steam-Workshop-and-Tooling.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Steam Workshop and tooling
|
||||
|
||||
## Live-Sync references
|
||||
|
||||
After a *Data Center* update, run the game once so MelonLoader regenerates interop assemblies, then from the repo root:
|
||||
|
||||
```bash
|
||||
python tools/refresh_refs.py
|
||||
```
|
||||
|
||||
Optionally save a baseline for diffs:
|
||||
|
||||
```bash
|
||||
python tools/diff_assembly_metadata.py --save-snapshot
|
||||
```
|
||||
|
||||
After future updates:
|
||||
|
||||
```bash
|
||||
python tools/diff_assembly_metadata.py
|
||||
```
|
||||
|
||||
Do **not** commit `*.dll` from `lib/references/` (see `.gitignore`).
|
||||
|
||||
## Steam Workshop (research)
|
||||
|
||||
Official upload and item layout for *Data Center* Workshop content may be undocumented by the developer. Until documented:
|
||||
|
||||
- Treat Workshop delivery as **game-defined** (often content under game data / `StreamingAssets`; MelonLoader mods remain **DLLs in `Mods/`**).
|
||||
- The **WorkshopUploader** desktop app (see `WorkshopUploader/`) is the supported path for authors to manage Workshop items and DevServer betas once Steamworks is configured.
|
||||
|
||||
## Legal
|
||||
|
||||
Do not redistribute game binaries or extracted assets. Workshop packages should contain **your** content only.
|
||||
|
||||
## CI / agents
|
||||
|
||||
- `FrikaMF.csproj` builds on Windows agents that have either a Steam *Data Center* install **or** a populated `lib/references/MelonLoader/` (from `refresh_refs.py`).
|
||||
- `WorkshopUploader` targets `net6.0-windows`; build it on Windows (not Linux-hosted runners unless cross-compilation is configured).
|
||||
25
meta/devserver-betas.md
Normal file
25
meta/devserver-betas.md
Normal file
@@ -0,0 +1,25 @@
|
||||
# DevServer API — beta channels (`gregframework.eu`)
|
||||
|
||||
This document defines the **intended** client contract for the FrikaMF **WorkshopUploader** “Betas” panel. The server may be implemented separately; keep URLs and tokens configurable.
|
||||
|
||||
## Base URL
|
||||
|
||||
- Default: `https://gregframework.eu`
|
||||
- Override: user settings file next to the app (not committed to git).
|
||||
|
||||
## Endpoints (proposed)
|
||||
|
||||
| Method | Path | Purpose |
|
||||
|--------|------|---------|
|
||||
| `GET` | `/api/v1/betas` | List available beta channels (id, name, description). |
|
||||
| `POST` | `/api/v1/betas/{id}/subscribe` | Enroll the current user (body: Steam ID or bearer token from OAuth). |
|
||||
| `POST` | `/api/v1/betas/{id}/unsubscribe` | Leave a channel. |
|
||||
|
||||
## Authentication
|
||||
|
||||
- **Preferred:** Short-lived JWT after browser OAuth to `gregframework.eu`, stored in user settings.
|
||||
- **Alternative:** Steam ID from Steamworks session in the WorkshopUploader process, plus server-side verification.
|
||||
|
||||
## Rate limiting and errors
|
||||
|
||||
Clients should show HTTP status and response body on failure; retry with backoff.
|
||||
58
mod-index.json
Normal file
58
mod-index.json
Normal file
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"version": 1,
|
||||
"description": "Manifest of all mods packaged for Steam Workshop distribution.",
|
||||
"mods": [
|
||||
{
|
||||
"id": "hexmod",
|
||||
"title": "FMF HexLabel Mod",
|
||||
"assembly": "FMF.HexLabelMod.dll",
|
||||
"version": "00.01.0009",
|
||||
"author": "mleem97",
|
||||
"workshopTags": ["modded", "melonloader", "mod"],
|
||||
"workshopContentPath": "content/Mods/",
|
||||
"workshopUrl": "",
|
||||
"githubReleaseUrl": "",
|
||||
"wikiPath": "/wiki/wiki/mods/hexmod",
|
||||
"sourcePath": "mods/FMF.Mod.HexLabelMod"
|
||||
},
|
||||
{
|
||||
"id": "console-input-guard",
|
||||
"title": "FMF Console Input Guard",
|
||||
"assembly": "FMF.ConsoleInputGuard.dll",
|
||||
"version": "00.01.0001",
|
||||
"author": "mleem97",
|
||||
"workshopTags": ["modded", "melonloader", "mod"],
|
||||
"workshopContentPath": "content/Mods/",
|
||||
"workshopUrl": "",
|
||||
"githubReleaseUrl": "",
|
||||
"wikiPath": "/wiki/mods/mods/fmf-console-input-guard",
|
||||
"sourcePath": "mods/FMF.ConsoleInputGuard"
|
||||
},
|
||||
{
|
||||
"id": "gregify-employees",
|
||||
"title": "FMF Gregify Employees",
|
||||
"assembly": "FMF.GregifyEmployees.dll",
|
||||
"version": "00.01.0009",
|
||||
"author": "mleem97",
|
||||
"workshopTags": ["modded", "melonloader", "mod"],
|
||||
"workshopContentPath": "content/Mods/",
|
||||
"workshopUrl": "",
|
||||
"githubReleaseUrl": "",
|
||||
"wikiPath": "/wiki/mods/mods/fmf-gregify-employees",
|
||||
"sourcePath": "mods/FMF.Mod.GregifyEmployees"
|
||||
},
|
||||
{
|
||||
"id": "lang-compat-bridge",
|
||||
"title": "FMF JoniML Compat Mod",
|
||||
"assembly": "FMF.JoniMLCompatMod.dll",
|
||||
"version": "00.01.0009",
|
||||
"author": "mleem97",
|
||||
"workshopTags": ["modded", "melonloader", "mod"],
|
||||
"workshopContentPath": "content/Mods/",
|
||||
"workshopUrl": "",
|
||||
"githubReleaseUrl": "",
|
||||
"wikiPath": "/wiki/mods/mods/fmf-lang-compat-bridge",
|
||||
"sourcePath": "mods/FMF.Plugin.LangCompatBridge"
|
||||
}
|
||||
]
|
||||
}
|
||||
15
mods/extensions/ffm-plugin-asset-exporter.md
Normal file
15
mods/extensions/ffm-plugin-asset-exporter.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FFM.Plugin.AssetExporter
|
||||
sidebar_label: FFM.Plugin.AssetExporter
|
||||
---
|
||||
|
||||
`StandaloneMods/FFM.Plugin.AssetExporter`
|
||||
|
||||
## Purpose
|
||||
|
||||
Provides export-focused tooling for asset-related workflows.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FFM.Plugin.AssetExporter`
|
||||
- Overview: [`Standalone Mods`](/wiki/wiki-import/StandaloneMods)
|
||||
15
mods/extensions/ffm-plugin-multiplayer.md
Normal file
15
mods/extensions/ffm-plugin-multiplayer.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FFM.Plugin.Multiplayer
|
||||
sidebar_label: FFM.Plugin.Multiplayer
|
||||
---
|
||||
|
||||
`StandaloneMods/FFM.Plugin.Multiplayer`
|
||||
|
||||
## Purpose
|
||||
|
||||
Contains standalone multiplayer-oriented plugin functionality.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FFM.Plugin.Multiplayer`
|
||||
- Roadmap context: [`Steamworks P2P Multiplayer Roadmap`](/wiki/wiki-import/Steamworks-P2P-Multiplayer-Roadmap)
|
||||
15
mods/extensions/ffm-plugin-player-models.md
Normal file
15
mods/extensions/ffm-plugin-player-models.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FFM.Plugin.PlayerModels
|
||||
sidebar_label: FFM.Plugin.PlayerModels
|
||||
---
|
||||
|
||||
`StandaloneMods/FFM.Plugin.PlayerModels`
|
||||
|
||||
## Purpose
|
||||
|
||||
Hosts standalone player-model specific behavior and integration.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FFM.Plugin.PlayerModels`
|
||||
- Debug docs: [`Mod Developer Debug`](/wiki/wiki-import/Mod-Developer-Debug)
|
||||
15
mods/extensions/ffm-plugin-sysadmin.md
Normal file
15
mods/extensions/ffm-plugin-sysadmin.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FFM.Plugin.Sysadmin
|
||||
sidebar_label: FFM.Plugin.Sysadmin
|
||||
---
|
||||
|
||||
`StandaloneMods/FFM.Plugin.Sysadmin`
|
||||
|
||||
## Purpose
|
||||
|
||||
Contains system-administration oriented standalone plugin features.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FFM.Plugin.Sysadmin`
|
||||
- Framework context: [`Framework Features & Use Cases`](/wiki/wiki-import/Framework-Features-Use-Cases)
|
||||
15
mods/extensions/ffm-plugin-web-ui-bridge.md
Normal file
15
mods/extensions/ffm-plugin-web-ui-bridge.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FFM.Plugin.WebUIBridge
|
||||
sidebar_label: FFM.Plugin.WebUIBridge
|
||||
---
|
||||
|
||||
`StandaloneMods/FFM.Plugin.WebUIBridge`
|
||||
|
||||
## Purpose
|
||||
|
||||
Focuses on standalone web UI bridge integration flows.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FFM.Plugin.WebUIBridge`
|
||||
- Reference: [`Web UI Bridge (DC2WEB)`](/wiki/wiki-import/Web-UI-Bridge)
|
||||
15
mods/extensions/fmf-console-input-guard.md
Normal file
15
mods/extensions/fmf-console-input-guard.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FMF.ConsoleInputGuard
|
||||
sidebar_label: FMF.ConsoleInputGuard
|
||||
---
|
||||
|
||||
`StandaloneMods/FMF.ConsoleInputGuard`
|
||||
|
||||
## Purpose
|
||||
|
||||
Provides guardrails around console input handling.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FMF.ConsoleInputGuard`
|
||||
- Overview: [`Standalone Mods`](/wiki/wiki-import/StandaloneMods)
|
||||
15
mods/extensions/fmf-gregify-employees.md
Normal file
15
mods/extensions/fmf-gregify-employees.md
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FMF.GregifyEmployees
|
||||
sidebar_label: FMF.GregifyEmployees
|
||||
---
|
||||
|
||||
`StandaloneMods/FMF.GregifyEmployees`
|
||||
|
||||
## Purpose
|
||||
|
||||
Contains standalone custom employee-related gameplay behavior.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `StandaloneMods/FMF.GregifyEmployees`
|
||||
- HR context: [`Framework Features & Use Cases`](/wiki/wiki-import/Framework-Features-Use-Cases)
|
||||
104
mods/extensions/fmf-hex-label-mod.md
Normal file
104
mods/extensions/fmf-hex-label-mod.md
Normal file
@@ -0,0 +1,104 @@
|
||||
---
|
||||
title: FMF.HexLabelMod
|
||||
sidebar_label: FMF.HexLabelMod
|
||||
---
|
||||
|
||||
<!-- markdownlint-disable MD060 -->
|
||||
|
||||
`mods/FMF.Mod.HexLabelMod`
|
||||
|
||||
## Purpose
|
||||
|
||||
Standalone MelonLoader mod for **Data Center** (Waseku) that overlays the hex color code of each `CableSpinner` and `Rack` directly in-world, so you can identify cable and rack colors at a glance without opening any menu.
|
||||
|
||||
Rewritten from the former root `HexLabelMod` for the FrikaModdingFramework workflow, now running fully standalone.
|
||||
|
||||
## Requirements
|
||||
|
||||
| Dependency | Notes |
|
||||
| --- | --- |
|
||||
| [MelonLoader](https://melonwiki.xyz/) | With generated IL2CPP assemblies |
|
||||
|
||||
This mod runs standalone and does **not** require FMF runtime APIs.
|
||||
|
||||
## Installation
|
||||
|
||||
1. Drop `FMF.HexLabelMod.dll` into your `Mods/` folder.
|
||||
2. Launch the game — the config file is created automatically on first run at:
|
||||
|
||||
```text
|
||||
UserData/hexposition.cfg
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
Edit `UserData/hexposition.cfg` to adjust label positioning and font sizes. The file is auto-generated with defaults on first launch and regenerated if any keys are missing.
|
||||
|
||||
```ini
|
||||
# Hex Label Position Config
|
||||
# File: UserData/hexposition.cfg
|
||||
# Edit values, then restart game.
|
||||
|
||||
# Spinner (UI text near cable spool)
|
||||
spinner_offset_x=0
|
||||
spinner_offset_y=-6
|
||||
spinner_font_min=1.8
|
||||
spinner_font_max=6.2
|
||||
spinner_font_scale=0.24
|
||||
|
||||
# Rack (world-space text at rack back-right-bottom)
|
||||
rack_offset_right=-0.03
|
||||
rack_offset_back=0.06
|
||||
rack_offset_down=-0.02
|
||||
rack_font_size=42
|
||||
rack_character_size=0.05
|
||||
rack_scale=1
|
||||
```
|
||||
|
||||
### Config Keys
|
||||
|
||||
| Key | Type | Default | Description |
|
||||
| --- | --- | --- | --- |
|
||||
| `spinner_offset_x` | float | `0` | Horizontal offset relative to the source label |
|
||||
| `spinner_offset_y` | float | `-6` | Vertical offset relative to the source label |
|
||||
| `spinner_font_min` | float | `1.8` | Minimum auto-size font size (TMPro) |
|
||||
| `spinner_font_max` | float | `6.2` | Maximum auto-size font size (TMPro) |
|
||||
| `spinner_font_scale` | float | `0.24` | Scale factor applied to the source label's font size |
|
||||
| `rack_offset_right` | float | `-0.03` | World-space offset along rack's right axis |
|
||||
| `rack_offset_back` | float | `0.06` | World-space offset along rack's back axis |
|
||||
| `rack_offset_down` | float | `-0.02` | World-space offset along rack's down axis |
|
||||
| `rack_font_size` | int | `42` | Font size for the world-space `TextMesh` label |
|
||||
| `rack_character_size` | float | `0.05` | Character size for the world-space `TextMesh` label |
|
||||
| `rack_scale` | float | `1` | Uniform world-space scale of the rack label object |
|
||||
|
||||
## Live Reload *(restricted)*
|
||||
|
||||
Pressing **Ctrl+F1** toggles live config reload (6-second interval), allowing you to tune label positions without restarting the game. This feature is restricted to a specific Steam account and will silently do nothing for all other users.
|
||||
|
||||
## Build
|
||||
|
||||
```powershell
|
||||
dotnet build .\mods\FMF.Mod.HexLabelMod\FMF.HexLabelMod.csproj
|
||||
```
|
||||
|
||||
Output lands in the standard MelonLoader `Mods/` folder as configured in the `.csproj`.
|
||||
|
||||
## How It Works
|
||||
|
||||
1. **Startup** — The mod defers full initialization until MelonLoader's `Latest.log` confirms the Steam runtime is ready (SteamID or Steam marker detected).
|
||||
2. **Spinner labels** — Every `CableSpinner` gets a cloned `TextMeshProUGUI` label injected into its UI hierarchy, displaying the resolved hex code in white. Color is read from `rgbColor`, then from the `_BaseColor`/`_Color` material property as fallback.
|
||||
3. **Rack labels** — Every `Rack` gets a world-space `TextMesh` label positioned at its back-right-bottom corner, facing away from the rack front.
|
||||
4. **Scan loop** — Active spinners and racks are re-checked every 1.5 seconds to catch newly spawned objects.
|
||||
5. **Harmony patch** — `CableSpinner.Start` is patched to inject the label immediately on spawn, before the first scan cycle runs.
|
||||
|
||||
## Notes
|
||||
|
||||
- Original gameplay behavior is unaffected.
|
||||
- This mod runs from `mods/FMF.Mod.HexLabelMod` and no longer from the repository root.
|
||||
- The config file is fully rewritten if any expected keys are missing (for example, after an update adds new keys).
|
||||
- FMF assembly presence is no longer required as a startup gate.
|
||||
|
||||
## Sources
|
||||
|
||||
- Module path: `mods/FMF.Mod.HexLabelMod`
|
||||
- Relatedocs: [`Standalone Mods`](/wiki/wiki-import/StandaloneMods)
|
||||
35
mods/extensions/fmf-lang-compat-bridge.md
Normal file
35
mods/extensions/fmf-lang-compat-bridge.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: FMF.LangCompatBridge
|
||||
sidebar_label: FMF.LangCompatBridge
|
||||
description: Language compatibility bridge mod for Data Center — localization bridging for mixed mod stacks.
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Provides language/localization compatibility bridging for mixed mod stacks.
|
||||
|
||||
## Steamworks Metadata
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Assembly** | `FMF.JoniMLCompatMod.dll` |
|
||||
| **Version** | `00.01.0009` |
|
||||
| **Author** | mleem97 |
|
||||
| **Game** | Waseku — Data Center (App 4170200) |
|
||||
| **Workshop Tags** | `modded`, `melonloader`, `mod` |
|
||||
| **Workshop Content Path** | `content/Mods/` |
|
||||
| **Needs FMF** | No (standalone MelonLoader mod) |
|
||||
|
||||
## Wiki Group
|
||||
|
||||
- Category: Mod
|
||||
- Primary Language: C#
|
||||
- Project Path: `mods/FMF.Plugin.LangCompatBridge`
|
||||
|
||||
## Installation
|
||||
|
||||
Drop `FMF.JoniMLCompatMod.dll` into `<Data Center>/Mods/`. Requires [MelonLoader](https://melonwiki.xyz/) (IL2CPP).
|
||||
|
||||
## Release
|
||||
|
||||
- [Open Release Page](/wiki/releases/mods/fmf-lang-compat-bridge-release)
|
||||
19
mods/extensions/fmf-ui-replacement-mod.md
Normal file
19
mods/extensions/fmf-ui-replacement-mod.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: FMF.UIReplacementMod
|
||||
sidebar_label: FMF.UIReplacementMod (Legacy)
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Legacy standalone UI replacement module page kept for compatibility.
|
||||
|
||||
## Project Status
|
||||
|
||||
- Status: Legacy documentation entry
|
||||
- Note: No active `csproj` module was detected under `mods/` for this page.
|
||||
|
||||
## Source
|
||||
|
||||
- Previous mixed wiki path: `mods/standalone/fmf-ui-replacement-mod`
|
||||
|
||||
- [Open Release Page](/wiki/releases/mods/fmf-ui-replacement-mod-release)
|
||||
37
mods/extensions/index.md
Normal file
37
mods/extensions/index.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: Standalone Plugins & Mods
|
||||
sidebar_label: Overview
|
||||
---
|
||||
|
||||
This section contains the first-party standalone modules currently maintained in this repository.
|
||||
|
||||
## Classification
|
||||
|
||||
- **Plugins** extend the framework runtime capabilities.
|
||||
- **Mods** extend the game behavior/content by using framework and plugin capabilities.
|
||||
|
||||
## Loading path
|
||||
|
||||
- **MelonLoader mods** load from `{GameRoot}/Mods/` (standard MelonLoader behavior).
|
||||
- **FMF framework plugins** (`FFM.Plugin.*`) are deployed under `{GameRoot}/FMF/Plugins/`; MelonLoader does not scan that folder by default — see [Game folder layout](/wiki/topics/meta/game-folder-layout).
|
||||
- Rust mods via FrikaMF follow the same runtime rules as other MelonLoader mods unless documented otherwise.
|
||||
|
||||
## Standalone Plugins
|
||||
|
||||
- [FFM.Plugin.AssetExporter](./ffm-plugin-asset-exporter.md)
|
||||
- [FFM.Plugin.Multiplayer](./ffm-plugin-multiplayer.md)
|
||||
- [FFM.Plugin.PlayerModels](./ffm-plugin-player-models.md)
|
||||
- [FFM.Plugin.Sysadmin](./ffm-plugin-sysadmin.md)
|
||||
- [FFM.Plugin.WebUIBridge](./ffm-plugin-web-ui-bridge.md)
|
||||
|
||||
## Standalone Mods
|
||||
|
||||
- [FMF.ConsoleInputGuard](./fmf-console-input-guard.md)
|
||||
- [FMF.GregifyEmployees](./fmf-gregify-employees.md)
|
||||
- [FMF.HexLabelMod](./fmf-hex-label-mod.md)
|
||||
- [FMF.LangCompatBridge](./fmf-lang-compat-bridge.md)
|
||||
- [FMF.UIReplacementMod](./fmf-ui-replacement-mod.md)
|
||||
|
||||
## Additional context
|
||||
|
||||
- [`Standalone Mods` wiki page](/wiki/wiki-import/StandaloneMods)
|
||||
18
mods/framework.md
Normal file
18
mods/framework.md
Normal file
@@ -0,0 +1,18 @@
|
||||
---
|
||||
title: Framework
|
||||
sidebar_label: Framework
|
||||
---
|
||||
|
||||
The core `FrikaMF` runtime provides:
|
||||
|
||||
- Harmony patch integration for gameplay hooks
|
||||
- Event dispatch and stable event contracts
|
||||
- Native bridge for Rust modules
|
||||
- Shared game API abstractions for mod authors
|
||||
|
||||
## Core references
|
||||
|
||||
- [`Framework Features & Use Cases`](/wiki/wiki-import/Framework-Features-Use-Cases)
|
||||
- [`HOOKS`](/wiki/wiki-import/HOOKS)
|
||||
- [`FFI Bridge Reference`](/wiki/wiki-import/FFI-Bridge-Reference)
|
||||
- [`Mod Developer Debug`](/wiki/wiki-import/Mod-Developer-Debug)
|
||||
35
mods/mods/fmf-console-input-guard.md
Normal file
35
mods/mods/fmf-console-input-guard.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: FMF.ConsoleInputGuard
|
||||
sidebar_label: FMF.ConsoleInputGuard
|
||||
description: Console input guard mod for Data Center — prevents accidental console interactions.
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Provides guardrails around console input handling and accidental interactions.
|
||||
|
||||
## Steamworks Metadata
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Assembly** | `FMF.ConsoleInputGuard.dll` |
|
||||
| **Version** | `00.01.0001` |
|
||||
| **Author** | mleem97 |
|
||||
| **Game** | Waseku — Data Center (App 4170200) |
|
||||
| **Workshop Tags** | `modded`, `melonloader`, `mod` |
|
||||
| **Workshop Content Path** | `content/Mods/` |
|
||||
| **Needs FMF** | No (standalone MelonLoader mod) |
|
||||
|
||||
## Wiki Group
|
||||
|
||||
- Category: Mod
|
||||
- Primary Language: C#
|
||||
- Project Path: `mods/FMF.ConsoleInputGuard`
|
||||
|
||||
## Installation
|
||||
|
||||
Drop `FMF.ConsoleInputGuard.dll` into `<Data Center>/Mods/`. Requires [MelonLoader](https://melonwiki.xyz/) (IL2CPP).
|
||||
|
||||
## Release
|
||||
|
||||
- [Open Release Page](/wiki/releases/mods/fmf-console-input-guard-release)
|
||||
35
mods/mods/fmf-gregify-employees.md
Normal file
35
mods/mods/fmf-gregify-employees.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: FMF.GregifyEmployees
|
||||
sidebar_label: FMF.GregifyEmployees
|
||||
description: Gregify Employees gameplay mod for Data Center — themed employee customization.
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Applies themed employee customization to hiring-related gameplay flows.
|
||||
|
||||
## Steamworks Metadata
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Assembly** | `FMF.GregifyEmployees.dll` |
|
||||
| **Version** | `00.01.0009` |
|
||||
| **Author** | mleem97 |
|
||||
| **Game** | Waseku — Data Center (App 4170200) |
|
||||
| **Workshop Tags** | `modded`, `melonloader`, `mod` |
|
||||
| **Workshop Content Path** | `content/Mods/` |
|
||||
| **Needs FMF** | No (standalone MelonLoader mod) |
|
||||
|
||||
## Wiki Group
|
||||
|
||||
- Category: Mod
|
||||
- Primary Language: C#
|
||||
- Project Path: `mods/FMF.Mod.GregifyEmployees`
|
||||
|
||||
## Installation
|
||||
|
||||
Drop `FMF.GregifyEmployees.dll` into `<Data Center>/Mods/`. Requires [MelonLoader](https://melonwiki.xyz/) (IL2CPP).
|
||||
|
||||
## Release
|
||||
|
||||
- [Open Release Page](/wiki/releases/mods/fmf-gregify-employees-release)
|
||||
13
mods/mods/index.md
Normal file
13
mods/mods/index.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: Mods Wiki
|
||||
sidebar_label: Mods Overview
|
||||
---
|
||||
|
||||
This section contains gameplay mod wiki pages, separated from plugins.
|
||||
|
||||
## Mod Projects
|
||||
|
||||
- [FMF.ConsoleInputGuard](./fmf-console-input-guard)
|
||||
- [FMF.GregifyEmployees](./fmf-gregify-employees)
|
||||
- [FMF.HexLabelMod](./fmf-hex-label-mod)
|
||||
- [FMF.LangCompatBridge](./fmf-lang-compat-bridge)
|
||||
35
mods/standalone/fmf-hex-label-mod.md
Normal file
35
mods/standalone/fmf-hex-label-mod.md
Normal file
@@ -0,0 +1,35 @@
|
||||
---
|
||||
title: FMF.HexLabelMod
|
||||
sidebar_label: FMF.HexLabelMod
|
||||
description: Hex label display mod for Data Center — overlays cable spinner and rack color hex labels in-world.
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Overlays cable spinner and rack color hex labels directly in-world so you can identify cable and rack colors at a glance without opening any menu.
|
||||
|
||||
## Steamworks Metadata
|
||||
|
||||
| Field | Value |
|
||||
|-------|-------|
|
||||
| **Assembly** | `FMF.HexLabelMod.dll` |
|
||||
| **Version** | `00.01.0009` |
|
||||
| **Author** | mleem97 |
|
||||
| **Game** | Waseku — Data Center (App 4170200) |
|
||||
| **Workshop Tags** | `modded`, `melonloader`, `mod` |
|
||||
| **Workshop Content Path** | `content/Mods/` |
|
||||
| **Needs FMF** | No (standalone MelonLoader mod) |
|
||||
|
||||
## Wiki Group
|
||||
|
||||
- Category: Mod
|
||||
- Primary Language: C#
|
||||
- Project Path: `mods/FMF.Mod.HexLabelMod`
|
||||
|
||||
## Installation
|
||||
|
||||
Drop `FMF.HexLabelMod.dll` into `<Data Center>/Mods/`. Requires [MelonLoader](https://melonwiki.xyz/) (IL2CPP).
|
||||
|
||||
## Release
|
||||
|
||||
- [Open Release Page](/wiki/releases/mods/fmf-hex-label-mod-release)
|
||||
70
reference/fmf-hook-naming.md
Normal file
70
reference/fmf-hook-naming.md
Normal file
@@ -0,0 +1,70 @@
|
||||
---
|
||||
id: fmf-hook-naming
|
||||
title: FMF hook and event naming
|
||||
slug: /reference/fmf-hook-naming
|
||||
description: Canonical naming for hooks, events, and cross-language documentation stubs.
|
||||
---
|
||||
|
||||
# FMF hook and event naming
|
||||
|
||||
## Target format
|
||||
|
||||
All **new** public hook and event identifiers should follow:
|
||||
|
||||
```text
|
||||
FMF.<Domain>.<EventOrHook>
|
||||
```
|
||||
|
||||
- **`FMF`** — Fixed prefix (Frika Mod Framework).
|
||||
- **`<Domain>`** — Uppercase domain from the [approved domain list](#approved-domain-segments). Describes *where* the signal belongs in the game (player, rack, server, economy, …).
|
||||
- **`<EventOrHook>`** — `PascalCase` segment(s), usually `OnSomething` for events or a verb phrase for commands.
|
||||
|
||||
Examples (illustrative): `FMF.RACK.CableSpinnerColorResolved`, `FMF.PLAYER.InputPoll`, `FMF.NETWORK.Cable.OnConnected`.
|
||||
|
||||
## Approved domain segments
|
||||
|
||||
Domains are **closed by default**. Add a new domain only via changelog + maintainer review.
|
||||
|
||||
| Domain | Scope |
|
||||
|--------|--------|
|
||||
| `GAMEPLAY` | Rules, scoring, simulation beats not covered elsewhere |
|
||||
| `PLAYER` | Local player input, camera, UI focus |
|
||||
| `EMPLOYEE` | NPC staff, hiring, schedules |
|
||||
| `CUSTOMER` | Contracts, SLA, satisfaction |
|
||||
| `SERVER` | In-game server racks, VMs, power |
|
||||
| `RACK` | Physical rack placement, mounting |
|
||||
| `NETWORK` | Cables, switches, traffic |
|
||||
| `STORE` | Shop cart, checkout |
|
||||
| `WORLD` | Rooms, expansion, walls |
|
||||
| `UI` | HUD overlays, menus (when not `PLAYER`) |
|
||||
| `SAVE` | Save/load lifecycle |
|
||||
| `FRAMEWORK` | Loader, bridge, diagnostics |
|
||||
|
||||
## Legacy: `FFM.*` strings in code
|
||||
|
||||
The runtime currently maps numeric event IDs to **`FFM.*`** string constants in [`FrikaMF/HookNames.cs`](https://github.com/mleem97/gregFramework/blob/master/FrikaMF/HookNames.cs) (e.g. `FFM.Economy.Balance.OnChanged`). That is **legacy naming** (four segments after `FFM`).
|
||||
|
||||
**Policy**
|
||||
|
||||
- New documentation and greenfield APIs should use **`FMF.<Domain>.*`** as above.
|
||||
- When touching `HookNames.cs`, prefer aligning new entries to **`FMF.*`**; otherwise keep **`FFM.*`** until a planned major version bump documents a rename map.
|
||||
- The [generated hook catalog](./fmf-hooks-catalog.md) lists **what the code emits today** (including `FFM.*`).
|
||||
|
||||
## Cross-language stubs (documentation)
|
||||
|
||||
For each canonical hook, the wiki may add **non-normative** snippets:
|
||||
|
||||
| Language | Convention |
|
||||
|----------|------------|
|
||||
| C# | `FMF.Domain.OnSomething.Subscribe(...)` or string literal |
|
||||
| Lua | `FMF.Domain.OnSomething:subscribe(...)` |
|
||||
| Rust | `fmf::domain::on_something::subscribe(...)` |
|
||||
| Python | `fmf.domain.on_something.subscribe(...)` |
|
||||
| TypeScript | `FMF.Domain.OnSomething.subscribe(...)` |
|
||||
|
||||
Bindings are **not** auto-generated for all languages; stubs are for contributor clarity.
|
||||
|
||||
## Related
|
||||
|
||||
- [FMF hooks catalog](./fmf-hooks-catalog.md) (generated)
|
||||
- [Legacy wiki: HOOK-NAMING-CONVENTION](../wiki-import/HOOK-NAMING-CONVENTION.md) (extended examples)
|
||||
109
reference/fmf-hooks-catalog.md
Normal file
109
reference/fmf-hooks-catalog.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
id: fmf-hooks-catalog
|
||||
title: FMF hooks catalog
|
||||
slug: /reference/fmf-hooks-catalog
|
||||
description: Auto-generated catalog of hook strings and event id mappings from FrikaMF sources.
|
||||
---
|
||||
|
||||
<!-- AUTO-GENERATED by tools/Generate-FmfHookCatalog.ps1 - DO NOT EDIT BY HAND -->
|
||||
|
||||
# FMF hooks catalog
|
||||
|
||||
This page is **generated** from `framework/FrikaMF/HookNames.cs` and `framework/FrikaMF/EventIds.cs`.
|
||||
|
||||
**Generated:** 2026-04-06 14:26:09 UTC
|
||||
|
||||
## Hook string constants
|
||||
|
||||
| C# field | Hook string |
|
||||
|----------|-------------|
|
||||
| ``CustomerContractOnSigned`` | ``FFM.Customer.Contract.OnSigned`` |
|
||||
| ``CustomerReputationOnChanged`` | ``FFM.Customer.Reputation.OnChanged`` |
|
||||
| ``CustomerSlaOnBreached`` | ``FFM.Customer.SLA.OnBreached`` |
|
||||
| ``CustomerSlaOnRestored`` | ``FFM.Customer.SLA.OnRestored`` |
|
||||
| ``EconomyBalanceOnChanged`` | ``FFM.Economy.Balance.OnChanged`` |
|
||||
| ``EmployeesStaffOnHiredCustom`` | ``FFM.Employees.Staff.OnHired`` |
|
||||
| ``EmployeesStaffOnTerminatedCustom`` | ``FFM.Employees.Staff.OnTerminated`` |
|
||||
| ``FrameworkHooksOnBridgeInstalled`` | ``FFM.Framework.Hooks.OnBridgeInstalled`` |
|
||||
| ``FrameworkHooksOnBridgeTriggered`` | ``FFM.Framework.Hooks.OnBridgeTriggered`` |
|
||||
| ``GameLoadOnCompleted`` | ``FFM.Game.Load.OnCompleted`` |
|
||||
| ``GameSaveOnCompleted`` | ``FFM.Game.Save.OnCompleted`` |
|
||||
| ``GameSaveOnRequested`` | ``FFM.Game.Save.OnRequested`` |
|
||||
| ``GameTimeOnDayChanged`` | ``FFM.Game.Time.OnDayChanged`` |
|
||||
| ``GameTimeOnMonthChanged`` | ``FFM.Game.Time.OnMonthChanged`` |
|
||||
| ``GameXpOnGained`` | ``FFM.Game.XP.OnGained`` |
|
||||
| ``NetworkCableOnConnected`` | ``FFM.Network.Cable.OnConnected`` |
|
||||
| ``NetworkCableOnConnectedSuppress`` | ``FFM.Network.Cable.OnConnected.Suppress`` |
|
||||
| ``NetworkCableOnDisconnected`` | ``FFM.Network.Cable.OnDisconnected`` |
|
||||
| ``NetworkCableOnDisconnectedSuppress`` | ``FFM.Network.Cable.OnDisconnected.Suppress`` |
|
||||
| ``NetworkCableOnLinkDown`` | ``FFM.Network.Cable.OnLinkDown`` |
|
||||
| ``NetworkCableOnLinkUp`` | ``FFM.Network.Cable.OnLinkUp`` |
|
||||
| ``NetworkTrafficOnThresholdExceeded`` | ``FFM.Network.Traffic.OnThresholdExceeded`` |
|
||||
| ``ObjectsDeviceOnDegraded`` | ``FFM.Objects.Device.OnDegraded`` |
|
||||
| ``ObjectsDeviceOnEOL`` | ``FFM.Objects.Device.OnEOL`` |
|
||||
| ``ObjectsDeviceOnPoweredOff`` | ``FFM.Objects.Device.OnPoweredOff`` |
|
||||
| ``ObjectsDeviceOnPoweredOn`` | ``FFM.Objects.Device.OnPoweredOn`` |
|
||||
| ``ObjectsDeviceOnRepaired`` | ``FFM.Objects.Device.OnRepaired`` |
|
||||
| ``ObjectsRackOnDevicePlaced`` | ``FFM.Objects.Rack.OnDevicePlaced`` |
|
||||
| ``ObjectsRackOnRemoved`` | ``FFM.Objects.Rack.OnRemoved`` |
|
||||
| ``ObjectsServerOnClientAssigned`` | ``FFM.Objects.Server.OnClientAssigned`` |
|
||||
| ``ObjectsServerOnClientUnassigned`` | ``FFM.Objects.Server.OnClientUnassigned`` |
|
||||
| ``StoreCartOnCheckedOutCleared`` | ``FFM.Store.Cart.OnCheckedOut`` |
|
||||
| ``StoreCartOnItemAdded`` | ``FFM.Store.Cart.OnItemAdded`` |
|
||||
| ``StoreCartOnItemRemoved`` | ``FFM.Store.Cart.OnItemRemoved`` |
|
||||
| ``WorldRoomOnExpanded`` | ``FFM.World.Room.OnExpanded`` |
|
||||
|
||||
## Event id to hook mapping
|
||||
|
||||
| Event id (uint) | EventIds name | Resolves to field | Hook string |
|
||||
|-----------------|---------------|---------------------|-------------|
|
||||
| 213 | `CableCleared` | `StoreCartOnCheckedOutCleared` | `FFM.Store.Cart.OnCheckedOut` |
|
||||
| 204 | `CableConnected` | `NetworkCableOnConnected` | `FFM.Network.Cable.OnConnected` |
|
||||
| 211 | `CableCreated` | `NetworkCableOnConnected` | `FFM.Network.Cable.OnConnected` |
|
||||
| 205 | `CableDisconnected` | `NetworkCableOnDisconnected` | `FFM.Network.Cable.OnDisconnected` |
|
||||
| 212 | `CableRemoved` | `NetworkCableOnDisconnected` | `FFM.Network.Cable.OnDisconnected` |
|
||||
| 215 | `CableSfpInserted` | `NetworkCableOnConnected` | `FFM.Network.Cable.OnConnected` |
|
||||
| 216 | `CableSfpRemoved` | `NetworkCableOnDisconnected` | `FFM.Network.Cable.OnDisconnected` |
|
||||
| 214 | `CableSpeedChanged` | `NetworkTrafficOnThresholdExceeded` | `FFM.Network.Traffic.OnThresholdExceeded` |
|
||||
| 1001 | `CustomEmployeeFired` | `EmployeesStaffOnTerminatedCustom` | `FFM.Employees.Staff.OnTerminated` |
|
||||
| 1000 | `CustomEmployeeHired` | `EmployeesStaffOnHiredCustom` | `FFM.Employees.Staff.OnHired` |
|
||||
| 400 | `CustomerAccepted` | `CustomerContractOnSigned` | `FFM.Customer.Contract.OnSigned` |
|
||||
| 401 | `CustomerSatisfied` | `CustomerSlaOnRestored` | `FFM.Customer.SLA.OnRestored` |
|
||||
| 402 | `CustomerUnsatisfied` | `CustomerSlaOnBreached` | `FFM.Customer.SLA.OnBreached` |
|
||||
| 300 | `DayEnded` | `GameTimeOnDayChanged` | `FFM.Game.Time.OnDayChanged` |
|
||||
| 601 | `EmployeeFired` | `EmployeesStaffOnTerminated` | `FFM.Employees.Staff.OnTerminated` |
|
||||
| 600 | `EmployeeHired` | `EmployeesStaffOnHired` | `FFM.Employees.Staff.OnHired` |
|
||||
| 702 | `GameAutoSaved` | `GameSaveOnRequested` | `FFM.Game.Save.OnRequested` |
|
||||
| 701 | `GameLoaded` | `GameLoadOnCompleted` | `FFM.Game.Load.OnCompleted` |
|
||||
| 700 | `GameSaved` | `GameSaveOnCompleted` | `FFM.Game.Save.OnCompleted` |
|
||||
| 1100 | `HookBridgeInstalled` | `FrameworkHooksOnBridgeInstalled` | `FFM.Framework.Hooks.OnBridgeInstalled` |
|
||||
| 1101 | `HookBridgeTriggered` | `FrameworkHooksOnBridgeTriggered` | `FFM.Framework.Hooks.OnBridgeTriggered` |
|
||||
| 100 | `MoneyChanged` | `EconomyBalanceOnChanged` | `FFM.Economy.Balance.OnChanged` |
|
||||
| 301 | `MonthEnded` | `GameTimeOnMonthChanged` | `FFM.Game.Time.OnMonthChanged` |
|
||||
| 900 | `NetWatchDispatched` | `NetworkTrafficOnThresholdExceeded` | `FFM.Network.Traffic.OnThresholdExceeded` |
|
||||
| 208 | `RackUnmounted` | `ObjectsRackOnRemoved` | `FFM.Objects.Rack.OnRemoved` |
|
||||
| 102 | `ReputationChanged` | `CustomerReputationOnChanged` | `FFM.Customer.Reputation.OnChanged` |
|
||||
| 207 | `ServerAppChanged` | `ObjectsServerOnClientUnassigned` | `FFM.Objects.Server.OnClientUnassigned` |
|
||||
| 201 | `ServerBroken` | `ObjectsDeviceOnDegraded` | `FFM.Objects.Device.OnDegraded` |
|
||||
| 206 | `ServerCustomerChanged` | `ObjectsServerOnClientAssigned` | `FFM.Objects.Server.OnClientAssigned` |
|
||||
| 203 | `ServerInstalled` | `ObjectsRackOnDevicePlaced` | `FFM.Objects.Rack.OnDevicePlaced` |
|
||||
| 200 | `ServerPowered` | `ObjectsDeviceOnPoweredOn` | `FFM.Objects.Device.OnPoweredOn` |
|
||||
| 202 | `ServerRepaired` | `ObjectsDeviceOnRepaired` | `FFM.Objects.Device.OnRepaired` |
|
||||
| 502 | `ShopCartCleared` | `StoreCartOnCheckedOutCleared` | `FFM.Store.Cart.OnCheckedOut` |
|
||||
| 500 | `ShopCheckout` | `StoreCartOnCheckedOut` | `FFM.Store.Cart.OnCheckedOut` |
|
||||
| 501 | `ShopItemAdded` | `StoreCartOnItemAdded` | `FFM.Store.Cart.OnItemAdded` |
|
||||
| 503 | `ShopItemRemoved` | `StoreCartOnItemRemoved` | `FFM.Store.Cart.OnItemRemoved` |
|
||||
| 209 | `SwitchBroken` | `NetworkCableOnLinkDown` | `FFM.Network.Cable.OnLinkDown` |
|
||||
| 210 | `SwitchRepaired` | `NetworkCableOnLinkUp` | `FFM.Network.Cable.OnLinkUp` |
|
||||
| 800 | `WallPurchased` | `WorldRoomOnExpanded` | `FFM.World.Room.OnExpanded` |
|
||||
| 101 | `XPChanged` | `GameXpOnGained` | `FFM.Game.XP.OnGained` |
|
||||
|
||||
## Fallback
|
||||
|
||||
Unknown event ids resolve to ``FFM.Framework.Unknown.OnEvent`` in `HookNames.Resolve`.
|
||||
|
||||
## See also
|
||||
|
||||
- [FMF hook naming](./fmf-hook-naming.md)
|
||||
- [EventIds source](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/EventIds.cs)
|
||||
- [HookNames source](https://github.com/mleem97/gregFramework/blob/master/framework/FrikaMF/HookNames.cs)
|
||||
69
reference/mcp-server.md
Normal file
69
reference/mcp-server.md
Normal file
@@ -0,0 +1,69 @@
|
||||
---
|
||||
title: MCP server (LLM-friendly modding)
|
||||
sidebar_label: MCP server
|
||||
description: Model Context Protocol server bundled with the docs Docker image for assistants and IDEs.
|
||||
---
|
||||
|
||||
# MCP server (FrikaMF modding)
|
||||
|
||||
The repository ships a **Model Context Protocol (MCP)** server (`mcp-server/`) that exposes:
|
||||
|
||||
- **Docs search & read** — Markdown under `docs/` (same source as Docusaurus).
|
||||
- **Hook registry** — `fmf_hooks.json` (and the same registry path in the monorepo).
|
||||
- **CONTRIBUTING** — conventions and workflow.
|
||||
- **Repo layout** — static overview and a **`fmf_modding_context`** prompt for quick context.
|
||||
|
||||
Use it when you want an assistant (Cursor, Claude Code, or any MCP client) to **ground answers** in this repo instead of guessing APIs.
|
||||
|
||||
## Docker (single container)
|
||||
|
||||
The root `Dockerfile` builds **Docusaurus** into static files and runs **one Node process** that:
|
||||
|
||||
- Serves the wiki at **`http://<host>:3000/`** (static HTML).
|
||||
- Exposes **Streamable HTTP MCP** at **`POST /mcp`** and **`GET /mcp`** (SSE), plus **`GET /health`**.
|
||||
|
||||
From the repo root:
|
||||
|
||||
```bash
|
||||
docker compose up docs-mcp
|
||||
```
|
||||
|
||||
Default mapping: **`http://localhost:3040`** (host) → container port **3000**.
|
||||
|
||||
- Docs: `http://localhost:3040/wiki/`
|
||||
- Health: `http://localhost:3040/health`
|
||||
- MCP: `http://localhost:3040/mcp` (client must speak MCP Streamable HTTP; session via `mcp-session-id` header).
|
||||
|
||||
:::note Security
|
||||
|
||||
Binding to `0.0.0.0` exposes the MCP endpoint on your network. Use only on trusted networks or behind a reverse proxy with authentication.
|
||||
|
||||
:::
|
||||
|
||||
## Local (stdio) for Cursor
|
||||
|
||||
From `mcp-server/` with the repo root as data (so `docs/`, `CONTRIBUTING.md`, and `FrikaModFramework/fmf_hooks.json` resolve):
|
||||
|
||||
```bash
|
||||
cd mcp-server
|
||||
node src/index.mjs --stdio --data-root ..
|
||||
```
|
||||
|
||||
Point your MCP client at this command (stdio transport). Adjust `--data-root` if your layout differs.
|
||||
|
||||
## Tools (summary)
|
||||
|
||||
| Tool | Purpose |
|
||||
|------|--------|
|
||||
| `fmf_search_docs` | Substring search across `docs/**/*.md` |
|
||||
| `fmf_read_doc` | Read one file by path under `docs/` |
|
||||
| `fmf_list_doc_paths` | Discover Markdown paths |
|
||||
| `fmf_hook_registry` | Raw `fmf_hooks.json` |
|
||||
| `fmf_read_contributing` | `CONTRIBUTING.md` |
|
||||
| `fmf_repo_layout` | Short monorepo overview |
|
||||
|
||||
## Related
|
||||
|
||||
- [Hook naming](./fmf-hook-naming.md)
|
||||
- [Hooks catalog](./fmf-hooks-catalog.md)
|
||||
- [Monorepo target layout](../contributors/monorepo-target-layout.md)
|
||||
31
reference/mod-store-vision.md
Normal file
31
reference/mod-store-vision.md
Normal file
@@ -0,0 +1,31 @@
|
||||
---
|
||||
id: mod-store-vision
|
||||
title: Mod Store Vision (Secure Git-Based)
|
||||
slug: /reference/mod-store-vision
|
||||
---
|
||||
|
||||
## Vision
|
||||
|
||||
Build a Mod Store with Git-based submissions, automated malware scanning, and policy checks before mods are visible.
|
||||
|
||||
## Core principles
|
||||
|
||||
- All submissions are reviewable in Git.
|
||||
- Every build artifact is reproducible from source.
|
||||
- Security checks are mandatory before publish.
|
||||
|
||||
## Security pipeline (target)
|
||||
|
||||
1. Submit via pull request (manifest + source + checksums).
|
||||
2. CI runs static checks and signature/metadata validation.
|
||||
3. Virus scanning runs on produced artifacts.
|
||||
4. Maintainer review and policy checks.
|
||||
5. Publish approved metadata index consumed by launcher/site.
|
||||
|
||||
## Recommended metadata fields
|
||||
|
||||
- `modId`, `version`, `authors`
|
||||
- `supportedGameVersions`
|
||||
- `requiredFrameworkVersion`
|
||||
- `sha256` for each downloadable artifact
|
||||
- source URL and license
|
||||
42
reference/release-channels.md
Normal file
42
reference/release-channels.md
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
id: release-channels
|
||||
title: Release channels — Steam vs GitHub
|
||||
slug: /reference/release-channels
|
||||
description: Where to download stable builds, beta builds, and how this relates to the Steam Workshop.
|
||||
---
|
||||
|
||||
# Release channels — Steam vs GitHub
|
||||
|
||||
This project uses **two complementary channels** for distributing mods and plugins. The wiki and [`/mods`](/mods) catalog are **not** a replacement for the Steam Workshop; they are an **overview**, documentation hub, and **second official source** for files that should not flood the Workshop.
|
||||
|
||||
## Steam Workshop (discovery & stable)
|
||||
|
||||
- **Game**: [Data Center on Steam](https://store.steampowered.com/app/4170200/) (AppID `4170200`).
|
||||
- **Workshop**: [Browse items](https://steamcommunity.com/workshop/browse/?appid=4170200) — best for **player discovery**, ratings, and stable “subscribe and play” flows.
|
||||
- Use Workshop for **production-ready** releases you want every player to see.
|
||||
|
||||
## GitHub Releases (beta and alternate downloads)
|
||||
|
||||
- **Organization**: [github.com/mleem97/gregFramework](https://github.com/mleem97/gregFramework) (see repo for actual org if renamed).
|
||||
- **Stable**: tagged releases — same DLLs you may also ship via Workshop.
|
||||
- **Pre-release / beta**: GitHub **pre-releases** — ideal for testers without publishing unfinished items to Workshop.
|
||||
- **Why**: avoids “polluting” the Workshop with experimental builds while still offering a **single official URL** for power users and CI.
|
||||
|
||||
## This documentation site
|
||||
|
||||
| Need | Where |
|
||||
|------|--------|
|
||||
| Wiki entry for a module | `/wiki/mods/...` |
|
||||
| Download link (when configured) | GitHub Releases asset or redirect from [`moduleCatalog`](https://github.com/mleem97/gregFramework/blob/master/wiki/src/data/moduleCatalog.ts) |
|
||||
| Catalog overview | [`/mods`](/mods) |
|
||||
|
||||
## Maintainer checklist
|
||||
|
||||
- [ ] Stable: tag + Release notes + optional Workshop update.
|
||||
- [ ] Beta: pre-release + link from module wiki page + `releaseReady: false` in catalog until promoted.
|
||||
- [ ] Do not commit large binaries to `main` without a documented policy.
|
||||
|
||||
## Related
|
||||
|
||||
- [Repo inventory](../contributors/repo-inventory.md)
|
||||
- [Mod store vision](./mod-store-vision.md)
|
||||
26
reference/wiki-mapping.md
Normal file
26
reference/wiki-mapping.md
Normal file
@@ -0,0 +1,26 @@
|
||||
---
|
||||
id: wiki-mapping
|
||||
title: Wiki to Docusaurus Mapping
|
||||
slug: /reference/wiki-mapping
|
||||
---
|
||||
|
||||
## Why this mapping exists
|
||||
|
||||
The repository currently stores canonical docs in `.wiki/`. This page defines how those pages are grouped in Docusaurus.
|
||||
|
||||
## Audience buckets
|
||||
|
||||
- **Newbies**: install/update/troubleshooting, legal basics
|
||||
- **Intermediates**: hooking, bridge usage, mod config, workflows
|
||||
- **Pros**: architecture, runtime internals, release system, roadmap
|
||||
|
||||
## Suggested migration order
|
||||
|
||||
1. Start with onboarding pages (`Home`, End-User, Mod-Developer).
|
||||
2. Migrate runtime references (`Architecture`, `FFI-Bridge-Reference`, `Web-UI-Bridge`).
|
||||
3. Migrate governance pages (`Contributors`, Roadmap, Tasklist).
|
||||
4. Keep bilingual mirrors where needed.
|
||||
|
||||
## Sync strategy
|
||||
|
||||
Use `npm run wiki:sync` to copy `.wiki/*.md` into a generated docs area for review-based migration.
|
||||
35
references/README.md
Normal file
35
references/README.md
Normal file
@@ -0,0 +1,35 @@
|
||||
# Reference Data
|
||||
|
||||
This folder contains large reference exports used by hook analysis and build-time tooling.
|
||||
|
||||
## Files
|
||||
|
||||
- [assembly-hooks.txt.gz](./assembly-hooks.txt.gz)
|
||||
- [modder-hooks.ffm.txt.gz](./modder-hooks.ffm.txt.gz)
|
||||
|
||||
## Decompress
|
||||
|
||||
Use standard gzip tools when you need local plaintext files:
|
||||
|
||||
```bash
|
||||
gzip -dk assembly-hooks.txt.gz
|
||||
gzip -dk modder-hooks.ffm.txt.gz
|
||||
```
|
||||
|
||||
PowerShell alternative:
|
||||
|
||||
```powershell
|
||||
$inputPath = ".\\assembly-hooks.txt.gz"
|
||||
$outputPath = ".\\assembly-hooks.txt"
|
||||
$in = [System.IO.File]::OpenRead($inputPath)
|
||||
$out = [System.IO.File]::Create($outputPath)
|
||||
$gzip = New-Object System.IO.Compression.GzipStream($in, [System.IO.Compression.CompressionMode]::Decompress)
|
||||
$gzip.CopyTo($out)
|
||||
$gzip.Dispose(); $out.Dispose(); $in.Dispose()
|
||||
```
|
||||
|
||||
## Build Pipeline Usage
|
||||
|
||||
- Hook alias and reference tooling should read `.gz` directly when possible.
|
||||
- If plaintext is required, scripts should decompress on demand and avoid committing extracted `.txt` files.
|
||||
- Keep all reference artifacts in `docs/wiki/references/`.
|
||||
BIN
references/assembly-hooks.txt.gz
Normal file
BIN
references/assembly-hooks.txt.gz
Normal file
Binary file not shown.
BIN
references/modder-hooks.ffm.txt.gz
Normal file
BIN
references/modder-hooks.ffm.txt.gz
Normal file
Binary file not shown.
29
releases/index.mdx
Normal file
29
releases/index.mdx
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: Releases
|
||||
sidebar_label: Releases overview
|
||||
description: Index of plugin and mod release pages (download metadata, notes links).
|
||||
---
|
||||
|
||||
# Releases
|
||||
|
||||
Release pages list **download targets**, **version placeholders**, and links back to the **wiki articles** for each plugin or mod. Non-release documentation lives under [Mods](/wiki/mods/plugins/) in the sidebar.
|
||||
|
||||
## Plugin releases
|
||||
|
||||
- [FFM.Plugin.AssetExporter](/wiki/releases/plugins/ffm-plugin-asset-exporter-release)
|
||||
- [FFM.Plugin.Multiplayer](/wiki/releases/plugins/ffm-plugin-multiplayer-release)
|
||||
- [FFM.Plugin.PlayerModels](/wiki/releases/plugins/ffm-plugin-player-models-release)
|
||||
- [FFM.Plugin.Sysadmin](/wiki/releases/plugins/ffm-plugin-sysadmin-release)
|
||||
- [FFM.Plugin.WebUIBridge](/wiki/releases/plugins/ffm-plugin-web-ui-bridge-release)
|
||||
|
||||
## Tool releases
|
||||
|
||||
- [GregTools 1.0 Modmanager](/wiki/releases/tools/gregtools-modmanager-1.0-release)
|
||||
|
||||
## Mod releases
|
||||
|
||||
- [FMF.ConsoleInputGuard](/wiki/releases/mods/fmf-console-input-guard-release)
|
||||
- [FMF.GregifyEmployees](/wiki/releases/mods/fmf-gregify-employees-release)
|
||||
- [FMF.HexLabelMod](/wiki/releases/mods/fmf-hex-label-mod-release)
|
||||
- [FMF.LangCompatBridge](/wiki/releases/mods/fmf-lang-compat-bridge-release)
|
||||
- [FMF.UIReplacementMod](/wiki/releases/mods/fmf-ui-replacement-mod-release)
|
||||
21
releases/mods/fmf-console-input-guard-release.mdx
Normal file
21
releases/mods/fmf-console-input-guard-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FMF.ConsoleInputGuard Release
|
||||
sidebar_label: FMF.ConsoleInputGuard Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.ConsoleInputGuard"
|
||||
kind="mod"
|
||||
dllName="FMF.ConsoleInputGuard.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Mod"
|
||||
dependencies={['MelonLoader', 'Harmony']}
|
||||
codeLanguages={['C#']}
|
||||
description="Provides guardrails around console input handling and accidental interactions."
|
||||
banner="Console input guard mod release"
|
||||
releaseNotesPath="/mods/mods/fmf-console-input-guard"
|
||||
/>
|
||||
21
releases/mods/fmf-gregify-employees-release.mdx
Normal file
21
releases/mods/fmf-gregify-employees-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FMF.GregifyEmployees Release
|
||||
sidebar_label: FMF.GregifyEmployees Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.GregifyEmployees"
|
||||
kind="mod"
|
||||
dllName="FMF.GregifyEmployees.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Mod"
|
||||
dependencies={['MelonLoader', 'Harmony']}
|
||||
codeLanguages={['C#']}
|
||||
description="Applies themed employee customization to hiring-related gameplay flows."
|
||||
banner="Gregify employees mod release"
|
||||
releaseNotesPath="/mods/mods/fmf-gregify-employees"
|
||||
/>
|
||||
21
releases/mods/fmf-hex-label-mod-release.mdx
Normal file
21
releases/mods/fmf-hex-label-mod-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FMF.HexLabelMod Release
|
||||
sidebar_label: FMF.HexLabelMod Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.HexLabelMod"
|
||||
kind="mod"
|
||||
dllName="FMF.HexLabelMod.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Mod"
|
||||
dependencies={['MelonLoader', 'Harmony']}
|
||||
codeLanguages={['C#']}
|
||||
description="Overlays cable spinner and rack color hex labels directly in-world."
|
||||
banner="Hex label mod release"
|
||||
releaseNotesPath="/mods/mods/fmf-hex-label-mod"
|
||||
/>
|
||||
21
releases/mods/fmf-lang-compat-bridge-release.mdx
Normal file
21
releases/mods/fmf-lang-compat-bridge-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FMF.LangCompatBridge Release
|
||||
sidebar_label: FMF.LangCompatBridge Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.LangCompatBridge"
|
||||
kind="mod"
|
||||
dllName="FMF.JoniMLCompatMod.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Mod"
|
||||
dependencies={['MelonLoader']}
|
||||
codeLanguages={['C#']}
|
||||
description="Provides language/localization compatibility bridging for mixed mod stacks."
|
||||
banner="Language compatibility bridge release"
|
||||
releaseNotesPath="/mods/mods/fmf-lang-compat-bridge"
|
||||
/>
|
||||
15
releases/mods/fmf-ui-replacement-mod-release.mdx
Normal file
15
releases/mods/fmf-ui-replacement-mod-release.mdx
Normal file
@@ -0,0 +1,15 @@
|
||||
---
|
||||
title: FMF.UIReplacementMod Release
|
||||
sidebar_label: FMF.UIReplacementMod
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.UIReplacementMod"
|
||||
kind="mod"
|
||||
dllName="FMF.UIReplacementMod.dll"
|
||||
description="Replaces and modernizes selected in-game UI layers with improved readability and layout behavior."
|
||||
banner="UI replacement mod release"
|
||||
releaseNotesPath="/mods/standalone/fmf-ui-replacement-mod"
|
||||
/>
|
||||
21
releases/plugins/ffm-plugin-asset-exporter-release.mdx
Normal file
21
releases/plugins/ffm-plugin-asset-exporter-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FFM.Plugin.AssetExporter Release
|
||||
sidebar_label: FFM.Plugin.AssetExporter Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FFM.Plugin.AssetExporter"
|
||||
kind="plugin"
|
||||
dllName="FFM.Plugin.AssetExporter.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Plugin"
|
||||
dependencies={['MelonLoader', 'FrikaMF']}
|
||||
codeLanguages={['C#']}
|
||||
description="Provides export-focused tooling for asset-related workflows in Data Center modding pipelines."
|
||||
banner="Asset exporter plugin release"
|
||||
releaseNotesPath="/mods/plugins/ffm-plugin-asset-exporter"
|
||||
/>
|
||||
21
releases/plugins/ffm-plugin-multiplayer-release.mdx
Normal file
21
releases/plugins/ffm-plugin-multiplayer-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FFM.Plugin.Multiplayer Release
|
||||
sidebar_label: FFM.Plugin.Multiplayer Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FFM.Plugin.Multiplayer"
|
||||
kind="plugin"
|
||||
dllName="FFM.Plugin.Multiplayer.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Plugin"
|
||||
dependencies={['MelonLoader', 'FrikaMF']}
|
||||
codeLanguages={['C#']}
|
||||
description="Contains multiplayer-oriented plugin functionality for FrikaMF ecosystems."
|
||||
banner="Multiplayer plugin release"
|
||||
releaseNotesPath="/mods/plugins/ffm-plugin-multiplayer"
|
||||
/>
|
||||
21
releases/plugins/ffm-plugin-player-models-release.mdx
Normal file
21
releases/plugins/ffm-plugin-player-models-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FFM.Plugin.PlayerModels Release
|
||||
sidebar_label: FFM.Plugin.PlayerModels Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FFM.Plugin.PlayerModels"
|
||||
kind="plugin"
|
||||
dllName="FFM.Plugin.PlayerModels.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Plugin"
|
||||
dependencies={['MelonLoader', 'FrikaMF']}
|
||||
codeLanguages={['C#']}
|
||||
description="Extends player model handling and related rendering/gameplay presentation behavior."
|
||||
banner="Player models plugin release"
|
||||
releaseNotesPath="/mods/plugins/ffm-plugin-player-models"
|
||||
/>
|
||||
21
releases/plugins/ffm-plugin-sysadmin-release.mdx
Normal file
21
releases/plugins/ffm-plugin-sysadmin-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FFM.Plugin.Sysadmin Release
|
||||
sidebar_label: FFM.Plugin.Sysadmin Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FFM.Plugin.Sysadmin"
|
||||
kind="plugin"
|
||||
dllName="FFM.Plugin.Sysadmin.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Plugin"
|
||||
dependencies={['MelonLoader', 'FrikaMF']}
|
||||
codeLanguages={['C#']}
|
||||
description="Provides sysadmin-focused controls and quality-of-life command utilities."
|
||||
banner="Sysadmin plugin release"
|
||||
releaseNotesPath="/mods/plugins/ffm-plugin-sysadmin"
|
||||
/>
|
||||
21
releases/plugins/ffm-plugin-web-ui-bridge-release.mdx
Normal file
21
releases/plugins/ffm-plugin-web-ui-bridge-release.mdx
Normal file
@@ -0,0 +1,21 @@
|
||||
---
|
||||
title: FFM.Plugin.WebUIBridge Release
|
||||
sidebar_label: FFM.Plugin.WebUIBridge Release
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FFM.Plugin.WebUIBridge"
|
||||
kind="plugin"
|
||||
dllName="FFM.Plugin.WebUIBridge.dll"
|
||||
releaseReady={false}
|
||||
version="NotReleasedYet"
|
||||
author="mleem97 / FrikaMF Community"
|
||||
category="Plugin"
|
||||
dependencies={['MelonLoader', 'FrikaMF']}
|
||||
codeLanguages={['C#']}
|
||||
description="Bridges runtime data to web interfaces for dashboards and remote overlays."
|
||||
banner="Web UI bridge plugin release"
|
||||
releaseNotesPath="/mods/plugins/ffm-plugin-web-ui-bridge"
|
||||
/>
|
||||
40
releases/plugins/fmf-modpathredirector-release.mdx
Normal file
40
releases/plugins/fmf-modpathredirector-release.mdx
Normal file
@@ -0,0 +1,40 @@
|
||||
---
|
||||
title: FMF.ModPathRedirector Release
|
||||
sidebar_label: FMF.ModPathRedirector Release
|
||||
description: Download and install the MelonLoader Workshop download plugin for Data Center.
|
||||
---
|
||||
|
||||
import ModReleasePage from '@site/src/components/ModReleasePage';
|
||||
|
||||
<ModReleasePage
|
||||
title="FMF.ModPathRedirector"
|
||||
kind="plugin"
|
||||
dllName="FMF.ModPathRedirector.dll"
|
||||
releaseReady={true}
|
||||
version="1.5.0"
|
||||
author="DataCenterExporter / FrikaMF Community"
|
||||
category="MelonLoader plugin"
|
||||
dependencies={['MelonLoader', 'Steam (client)', 'Data Center']}
|
||||
codeLanguages={['C#']}
|
||||
description="MelonLoader plugin: after Il2Cpp assembly generation, blocks MelonMods load until each subscribed Workshop item is downloaded (Steam) and workshop_* folders exist under Data Center_Data/StreamingAssets/Mods/, with per-item DownloadItem and timeouts. Does not redirect native mod paths."
|
||||
banner="Workshop download helper (MelonLoader Plugins/)"
|
||||
releaseNotesPath="/wiki/tools/workshop-uploader"
|
||||
installation={
|
||||
<ol>
|
||||
<li>
|
||||
Download <code>FMF.ModPathRedirector.dll</code> from the latest{' '}
|
||||
<a href="https://github.com/mleem97/gregFramework/releases/latest">GitHub release</a> (or use the button on this page — redirects to the same asset).
|
||||
</li>
|
||||
<li>
|
||||
Copy the DLL into your game folder: <code><GameRoot>/Plugins/</code> — the same directory as <code>Data Center.exe</code>, <strong>not</strong> <code>Mods/</code> (that folder is for MelonMods).
|
||||
</li>
|
||||
<li>
|
||||
Ensure <code>steam_api64.dll</code> is next to the game executable (Steam ships it with the game). Start the game with MelonLoader; the plugin waits until Steam is running, then requests downloads for subscribed Workshop items.
|
||||
</li>
|
||||
</ol>
|
||||
}
|
||||
/>
|
||||
|
||||
:::info GitHub asset
|
||||
The **Download DLL** button and `/plugin/FMF.ModPathRedirector.dll` route resolve to `https://github.com/mleem97/gregFramework/releases/latest/download/FMF.ModPathRedirector.dll`. That file is attached automatically when you publish a release via the `release-assets.yml` workflow (push a `v*` tag or run the workflow manually).
|
||||
:::
|
||||
42
releases/tools/gregtools-modmanager-1.0-release.mdx
Normal file
42
releases/tools/gregtools-modmanager-1.0-release.mdx
Normal file
@@ -0,0 +1,42 @@
|
||||
---
|
||||
title: GregTools 1.0 Modmanager
|
||||
sidebar_label: GregTools Modmanager 1.0
|
||||
description: First stable release of the GregTools Modmanager (Workshop Uploader) for Data Center — download ZIP, install, and links.
|
||||
---
|
||||
|
||||
# GregTools 1.0 Modmanager
|
||||
|
||||
**Version:** 1.0.0 · **Application title:** GregTools Modmanager · **Windows:** win10-x64, self-contained (.NET MAUI)
|
||||
|
||||
This is the **first numbered release** line for the desktop Workshop client: Mod Store, author tools, Mod Manager, and Steam publish flows for **Data Center** (Steam App ID `4170200`).
|
||||
|
||||
## Download
|
||||
|
||||
Releases are published on **GitHub** from the [`gregtools-modmanager-release`](https://github.com/mleem97/gregFramework/blob/main/.github/workflows/gregtools-modmanager-release.yml) workflow.
|
||||
|
||||
| What | Where |
|
||||
|------|--------|
|
||||
| **Latest release** | [github.com/mleem97/gregFramework/releases/latest](https://github.com/mleem97/gregFramework/releases/latest) |
|
||||
| **1.0.0 assets** | Look for tag **`gregtools-modmanager-v1.0.0`** and the ZIP **`Gregtools-Modmanager-1.0.0-win10-x64.zip`** (best-compression portable folder). |
|
||||
|
||||
:::tip Creating the GitHub release
|
||||
|
||||
Push tag **`gregtools-modmanager-v1.0.0`** on `main` (or run the workflow manually with that tag) so CI builds and attaches the ZIP.
|
||||
|
||||
:::
|
||||
|
||||
## Install
|
||||
|
||||
1. Download **`Gregtools-Modmanager-1.0.0-win10-x64.zip`** from the release.
|
||||
2. Extract to a folder of your choice (or next to the game — see [Workshop uploader](/wiki/tools/workshop-uploader)).
|
||||
3. Run **`WorkshopUploader.exe`**. **Steam** must be installed; the app uses the Steamworks API for Workshop.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Workshop uploader (full guide)](/wiki/tools/workshop-uploader)
|
||||
- [End-user Workshop guide](/wiki/guides/enduser-workshop)
|
||||
- Open-source and third-party components: [`WorkshopUploader/EXTERNAL_DEPENDENCIES.md`](https://github.com/mleem97/gregFramework/blob/main/WorkshopUploader/EXTERNAL_DEPENDENCIES.md) in the repository
|
||||
|
||||
## Scope of 1.0
|
||||
|
||||
Initial **1.0** marks a stable baseline for the MAUI Windows app (self-contained publish, trimmed Release builds, localization, Mod Store / Mod Manager / editor flows). Patch and feature releases will use **1.0.x** / **1.x** as versioning on the [application version](/wiki/tools/workshop-uploader) in the project file.
|
||||
11
roadmap/mod-store-stages.md
Normal file
11
roadmap/mod-store-stages.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
id: mod-store-stages
|
||||
title: Mod Store Stages
|
||||
slug: /roadmap/mod-store-stages
|
||||
---
|
||||
|
||||
This page is kept for legacy links.
|
||||
|
||||
Use the canonical roadmap page:
|
||||
|
||||
- [Unified Roadmap](/wiki/roadmap/unified-roadmap)
|
||||
59
roadmap/unified-roadmap.md
Normal file
59
roadmap/unified-roadmap.md
Normal file
@@ -0,0 +1,59 @@
|
||||
---
|
||||
id: unified-roadmap
|
||||
title: Unified Roadmap
|
||||
slug: /roadmap/unified-roadmap
|
||||
---
|
||||
|
||||
This is the canonical roadmap page for the project. It consolidates previous roadmap documents and removes duplicate planning tracks.
|
||||
|
||||
## Status Summary
|
||||
|
||||
- **Framework Runtime**: active
|
||||
- **Docs & Contributor Tooling**: active
|
||||
- **Mod Distribution & Audit Pipeline**: active planning
|
||||
- **Multiplayer (Steamworks)**: blocked externally
|
||||
|
||||
## Important Multiplayer Note
|
||||
|
||||
Multiplayer was planned around **Steamworks P2P** and that direction remains conceptually valid.
|
||||
However, it is **currently not implementable in production** because the game developer has not integrated Steamworks support in the game runtime/API surface required for a stable implementation.
|
||||
|
||||
## Consolidated Workstreams
|
||||
|
||||
### 1) Framework & Hooking
|
||||
|
||||
- Stabilize hook coverage and event contracts.
|
||||
- Keep C# and Rust bridge compatibility versioned.
|
||||
- Expand diagnostics for mod-runtime compatibility failures.
|
||||
|
||||
### 2) Documentation & Information Architecture
|
||||
|
||||
- Keep `/wiki/*` as canonical docs namespace.
|
||||
- Maintain separated Plugin Wiki and Mod Wiki sections.
|
||||
- Remove duplicate docs by keeping one canonical page per topic.
|
||||
|
||||
### 3) Mod/Plugin Catalog & Distribution
|
||||
|
||||
- Maintain dynamic `/mods` catalog with links to wiki and release endpoints.
|
||||
- Keep release metadata visible (version, author, dependencies, language).
|
||||
- Keep release-state gating (`NotReleasedYet`) explicit for users.
|
||||
|
||||
### 4) Security Audit & Submission Workflow
|
||||
|
||||
- Accept plugin submissions via Git repository URL.
|
||||
- Run automated static checks and suspicious-pattern scans.
|
||||
- Gate publication/release visibility on successful audit outcome.
|
||||
|
||||
### 5) Multiplayer Track (Blocked)
|
||||
|
||||
- Keep architecture docs for future Steamworks integration readiness.
|
||||
- Track dependencies on game-side Steamworks implementation.
|
||||
- Re-open implementation only when game runtime exposes required primitives.
|
||||
|
||||
## Legacy Roadmap Documents
|
||||
|
||||
The following pages are now legacy references and should not be used as primary planning sources:
|
||||
|
||||
- `wiki-import/ROADMAP`
|
||||
- `wiki-import/Steamworks-P2P-Multiplayer-Roadmap`
|
||||
- `roadmap/mod-store-stages`
|
||||
39
tools/Steam-Workshop-and-Tooling.md
Normal file
39
tools/Steam-Workshop-and-Tooling.md
Normal file
@@ -0,0 +1,39 @@
|
||||
# Steam Workshop and tooling
|
||||
|
||||
## Live-Sync references
|
||||
|
||||
After a *Data Center* update, run the game once so MelonLoader regenerates interop assemblies, then from the repo root:
|
||||
|
||||
```bash
|
||||
python tools/refresh_refs.py
|
||||
```
|
||||
|
||||
Optionally save a baseline for diffs:
|
||||
|
||||
```bash
|
||||
python tools/diff_assembly_metadata.py --save-snapshot
|
||||
```
|
||||
|
||||
After future updates:
|
||||
|
||||
```bash
|
||||
python tools/diff_assembly_metadata.py
|
||||
```
|
||||
|
||||
Do **not** commit `*.dll` from `lib/references/` (see `.gitignore`).
|
||||
|
||||
## Steam Workshop (research)
|
||||
|
||||
Official upload and item layout for *Data Center* Workshop content may be undocumented by the developer. Until documented:
|
||||
|
||||
- Treat Workshop delivery as **game-defined** (often content under game data / `StreamingAssets`; MelonLoader mods remain **DLLs in `Mods/`**).
|
||||
- The **WorkshopUploader** desktop app (see `WorkshopUploader/`) is the supported path for authors to manage Workshop items and DevServer betas once Steamworks is configured.
|
||||
|
||||
## Legal
|
||||
|
||||
Do not redistribute game binaries or extracted assets. Workshop packages should contain **your** content only.
|
||||
|
||||
## CI / agents
|
||||
|
||||
- `FrikaMF.csproj` builds on Windows agents that have either a Steam *Data Center* install **or** a populated `lib/references/MelonLoader/` (from `refresh_refs.py`).
|
||||
- `WorkshopUploader` targets `net6.0-windows`; build it on Windows (not Linux-hosted runners unless cross-compilation is configured).
|
||||
11
topics/assets-and-export/overview.md
Normal file
11
topics/assets-and-export/overview.md
Normal file
@@ -0,0 +1,11 @@
|
||||
---
|
||||
title: Assets & export
|
||||
sidebar_label: Assets & export (hub)
|
||||
description: Asset export plugin, templates, and related wiki-import pages.
|
||||
---
|
||||
|
||||
# Assets & export
|
||||
|
||||
- Wiki: [FFM.Plugin.AssetExporter](/wiki/mods/plugins/ffm-plugin-asset-exporter)
|
||||
- Release: [FFM.Plugin.AssetExporter release](/wiki/releases/plugins/ffm-plugin-asset-exporter-release)
|
||||
- Imported: [AssetExport](/wiki/wiki-import/AssetExport), [Release assets and templates](/wiki/wiki-import/Release-Assets-and-Templates)
|
||||
29
topics/audiences/overview.md
Normal file
29
topics/audiences/overview.md
Normal file
@@ -0,0 +1,29 @@
|
||||
---
|
||||
title: By audience
|
||||
sidebar_label: By audience
|
||||
description: Vier Rollen — Spieler, Moddevs, Contributor, Sponsoren — plus Erfahrungsstufen (Newbies bis Pros).
|
||||
---
|
||||
|
||||
# By audience
|
||||
|
||||
Die Dokumentation richtet sich an **vier Hauptrollen** (und an Erfahrungsstufen darunter). Wähle, was zu dir passt — die Sprache der meisten Seiten ist **Englisch**, mit deutschsprachigen Importen unter `wiki-import/` wo vorhanden.
|
||||
|
||||
## Die vier Rollen
|
||||
|
||||
| Rolle | Für wen? | Einstieg |
|
||||
|--------|----------|----------|
|
||||
| **Spieler** (End users) | Installation, Mods nutzen, Troubleshooting, FAQ | [End users (hub)](/wiki/topics/end-user/overview) → [End user wiki](/wiki/wiki-import/EndUser/), [Data center FAQ](/wiki/wiki-import/DataCenterFAQ/) |
|
||||
| **Mod-Entwickler** (Mod developers) | Mods bauen, Hooks, Konfiguration, Debug | [Mod developers (hub)](/wiki/topics/mod-developers/overview) → [ModDevs wiki](/wiki/wiki-import/ModDevs/), [Framework](/wiki/mods/framework) |
|
||||
| **Contributor** (Repo & Framework) | PRs, Doku, Plugins, CI, Design | [Contributors (workflow)](/wiki/topics/contributors/overview) → [Contributors wiki](/wiki/wiki-import/Contributors/), [Repo inventory](/wiki/contributors/repo-inventory) |
|
||||
| **Sponsorinnen & Sponsoren** | Unterstützung, Transparenz, rechtlicher Kontext | [Sponsors (hub)](/wiki/topics/sponsors/overview) → [Sponsors (EN)](/wiki/wiki-import/Sponsors), [Sponsoren (DE)](/wiki/wiki-import/Sponsoren) |
|
||||
|
||||
## Erfahrungsstufen (alle Rollen)
|
||||
|
||||
- [Newbies](/wiki/audiences/newbies) — erste Schritte, Begriffe, sichere Defaults.
|
||||
- [Intermediates](/wiki/audiences/intermediates) — Workflows, Tooling, typische Stolpersteine.
|
||||
- [Professionals](/wiki/audiences/professionals) — Architektur, FFI, Performance, Release-Kanäle.
|
||||
|
||||
## Thematische Übersicht
|
||||
|
||||
- [Topics hub](/wiki/topics/) — Security, Multiplayer, Assets, FFI, Roadmap, Meta.
|
||||
- Importierte Legacy-Guides: [Legacy wiki import](/wiki/topics/wiki-import/overview).
|
||||
19
topics/contributors/overview.md
Normal file
19
topics/contributors/overview.md
Normal file
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: Contributors (workflow)
|
||||
sidebar_label: Contributors (workflow)
|
||||
description: Monorepo layout, design system, Docusaurus workflow, plugin audits.
|
||||
---
|
||||
|
||||
# Contributors (workflow)
|
||||
|
||||
**Mitwirkende am Repository** — Framework, Website, CI, Plugins. Überblick über alle Rollen (inkl. Spieler, Moddevs, Sponsoren): [By audience](/wiki/topics/audiences/overview).
|
||||
|
||||
Operational docs for people changing the framework, site, or release pipeline.
|
||||
|
||||
- [Repository inventory](/wiki/contributors/repo-inventory) — current layout snapshot.
|
||||
- [Monorepo target layout](/wiki/contributors/monorepo-target-layout) — intended structure.
|
||||
- [Luminescent design system](/wiki/contributors/luminescent-design-system) — UI tokens for the site.
|
||||
- [Docusaurus workflow](/wiki/contributors/docusaurus-workflow) — edit/build the wiki site.
|
||||
- [Plugin submission audit](/wiki/contributors/plugin-submission-audit) — checklist for new plugins.
|
||||
|
||||
Imported guides: [Contribution workflow](/wiki/wiki-import/Contributors/Guides/Contribution-Workflow).
|
||||
13
topics/end-user/overview.md
Normal file
13
topics/end-user/overview.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: End users
|
||||
sidebar_label: End users (hub)
|
||||
description: FAQs, install paths, troubleshooting — mostly wiki-import.
|
||||
---
|
||||
|
||||
# End users
|
||||
|
||||
**Spielerinnen und Spieler** — Mods installieren und spielen, ohne am Framework mitzuentwickeln. Überblick über alle Rollen: [By audience](/wiki/topics/audiences/overview).
|
||||
|
||||
- [By audience — newbies](/wiki/audiences/newbies)
|
||||
- Imported: [End user index](/wiki/wiki-import/EndUser/), [Data center FAQ](/wiki/wiki-import/DataCenterFAQ/), [Known incompatibilities](/wiki/wiki-import/Known-Incompatibilities)
|
||||
- Imported: [End user release notes](/wiki/wiki-import/EndUser/End-User-Release)
|
||||
13
topics/ffi-and-hooks/overview.md
Normal file
13
topics/ffi-and-hooks/overview.md
Normal file
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: FFI, hooks & Lua
|
||||
sidebar_label: FFI, hooks & Lua (hub)
|
||||
description: FFI, hook lists, naming — bridge between framework and legacy wiki.
|
||||
---
|
||||
|
||||
# FFI, hooks & Lua
|
||||
|
||||
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog) (generated)
|
||||
- [FMF hook naming](/wiki/reference/fmf-hook-naming)
|
||||
- Imported: [HOOKS](/wiki/wiki-import/HOOKS), [Hook naming convention](/wiki/wiki-import/HOOK-NAMING-CONVENTION)
|
||||
- Imported: [FFI bridge reference](/wiki/wiki-import/FFI-Bridge-Reference), [Lua FFI start](/wiki/wiki-import/Lua-FFI-Start-Developing)
|
||||
- Imported: [Mod developer debug](/wiki/wiki-import/Mod-Developer-Debug)
|
||||
37
topics/index.md
Normal file
37
topics/index.md
Normal file
@@ -0,0 +1,37 @@
|
||||
---
|
||||
title: Topics hub
|
||||
sidebar_label: Topics overview
|
||||
description: Thematic index — navigate by audience, reference, roadmap, imports, and meta.
|
||||
---
|
||||
|
||||
# Topics hub
|
||||
|
||||
Documentation is split into **curated wiki pages** (this site), **generated reference** (for example hook catalogs), and **legacy imports** from the GitHub wiki (`.wiki` → `wiki-import/`).
|
||||
|
||||
## Quick map
|
||||
|
||||
| Area | Start here |
|
||||
|------|------------|
|
||||
| **Roles (Spieler · Moddevs · Contributor · Sponsoren)** | [By audience](/wiki/topics/audiences/overview) — [End users](/wiki/topics/end-user/overview), [Mod developers](/wiki/topics/mod-developers/overview), [Contributors (workflow)](/wiki/topics/contributors/overview), [Sponsors](/wiki/topics/sponsors/overview) |
|
||||
| **Audience paths (experience)** | [Newbies](/wiki/audiences/newbies) · [Intermediates](/wiki/audiences/intermediates) · [Professionals](/wiki/audiences/professionals) |
|
||||
| **Technical reference** | [Reference & technical](/wiki/topics/reference/overview) |
|
||||
| **Ship planning** | [Roadmap & planning](/wiki/topics/roadmap/overview) |
|
||||
| **Repository inventory** | [Repo inventory](/wiki/contributors/repo-inventory) |
|
||||
| **Imported legacy wiki** | [Legacy wiki import](/wiki/topics/wiki-import/overview) |
|
||||
| **Steam, betas, backlog, game paths** | [Meta & operations](/wiki/topics/meta/overview) — [Game folder layout](/wiki/topics/meta/game-folder-layout) |
|
||||
|
||||
## Thematic folders (deep links)
|
||||
|
||||
Use these entry points for cross-cutting concerns; each page links into `wiki-import/` and reference docs where relevant.
|
||||
|
||||
- [Security & legal](/wiki/topics/security-legal/overview) — licenses, disclaimers, letters to the developer.
|
||||
- [FFI, hooks & Lua](/wiki/topics/ffi-and-hooks/overview) — HOOKS, FFI bridge, naming conventions.
|
||||
- [Multiplayer & networking](/wiki/topics/multiplayer-and-networking/overview) — Steamworks P2P, Web UI bridge.
|
||||
- [Assets & export](/wiki/topics/assets-and-export/overview) — asset export pipeline, templates.
|
||||
- [End users](/wiki/topics/end-user/overview) — installs, FAQs, troubleshooting.
|
||||
- [Mod developers](/wiki/topics/mod-developers/overview) — getting started, mod config, debugging.
|
||||
|
||||
## Releases vs. articles
|
||||
|
||||
- **Release pages** (downloads, version banners): [Releases](/wiki/releases/).
|
||||
- **Narrative wiki articles** (how it works): [Plugin Wiki](/wiki/mods/plugins/) and [Mod Wiki](/wiki/mods/mods/).
|
||||
62
topics/meta/game-folder-layout.md
Normal file
62
topics/meta/game-folder-layout.md
Normal file
@@ -0,0 +1,62 @@
|
||||
---
|
||||
title: Game folder layout (FMF / MelonLoader)
|
||||
sidebar_label: Game folder layout
|
||||
description: Canonical paths for mod configs, FMF plugins, and MelonLoader mods under the Data Center game root.
|
||||
---
|
||||
|
||||
# Game folder layout (FMF / MelonLoader)
|
||||
|
||||
This page is the **single reference** for where mod-related files live next to the game executable (`{GameRoot}`). MelonLoader sets `{GameRoot}/UserData` via `MelonEnvironment.UserDataDirectory`, `{GameRoot}/Mods` for **MelonMods**, and `{GameRoot}/Plugins` for **MelonPlugins** (e.g. `FMF.ModPathRedirector.dll`).
|
||||
|
||||
## Summary
|
||||
|
||||
| Inhalt | Pfad | Format / Hinweis |
|
||||
|--------|------|------------------|
|
||||
| **Mod-Konfiguration & Sidecars** | `{GameRoot}/UserData/ModCfg/` | **JSON** für Konfigurationsdateien; weitere Sidecar-Dateien (z. B. `custom_employees_hired.txt`) liegen ebenfalls hier, damit alles Mod-Bezogene an einem Ort liegt. |
|
||||
| **FMF Framework-Plugins** (FFM.Plugin.*) | `{GameRoot}/FMF/Plugins/` | DLLs; **MelonLoader** lädt standardmäßig nur `{GameRoot}/Mods` — siehe unten. |
|
||||
| **Plugins** (MelonLoader, z. B. ModPathRedirector) | `{GameRoot}/Plugins/` | MelonLoader `Plugins`-Ordner — nur **MelonPlugin**-DLLs. |
|
||||
| **Mods** (MelonLoader, z. B. FMF.Mod.*) | `{GameRoot}/Mods/` | MelonLoader `Mods`-Ordner — **MelonMod**-DLLs. |
|
||||
|
||||
## UserData/ModCfg
|
||||
|
||||
- Alle **mod-relevanten** Konfigurationen und JSON-Sidecars werden unter **`UserData/ModCfg`** geführt.
|
||||
- Beim ersten Start werden fehlende Dateien angelegt; bei bestehenden Installationen werden ältere Dateien aus **`UserData/`** (Root) nach **`ModCfg/`** übernommen, sofern noch vorhanden.
|
||||
- Beispiele: `multiplayer-sync.config.json`, `pluginsync.config.json`.
|
||||
- Framework-Metadaten (z. B. Save-Compat-Stamp) liegen unter **`UserData/ModCfg/FrikaFM/`** (Migration von `UserData/FrikaFM`).
|
||||
|
||||
## FMF/Plugins und MelonLoader
|
||||
|
||||
**FFM-Plugin-DLLs** liegen kanonisch unter **`{GameRoot}/FMF/Plugins`**. MelonLoader enumeriert **standardmäßig** nur **`Mods/`**. Praktische Optionen:
|
||||
|
||||
1. **DLLs zusätzlich** (oder verlinkt) **`Mods/`** ablegen — üblicher Weg für automatisches Laden.
|
||||
2. **Unterordner** von `Mods` nutzen, falls eure MelonLoader-Version Mods in Unterverzeichnissen lädt (Version je nach Release prüfen).
|
||||
3. **PluginSync**-Downloads des Frameworks landen unter **`FMF/Plugins/PluginSync/...`**.
|
||||
|
||||
## Mods (FMF-basiert)
|
||||
|
||||
Normale **MelonLoader-Mods** (einschließlich FMF-Mods) werden wie gewohnt in **`{GameRoot}/Mods/`** installiert.
|
||||
|
||||
## Steam Workshop (Spiel) vs. MelonLoader
|
||||
|
||||
Das Spiel legt abonnierte Workshop-Inhalte unter **`{GameRoot}/{ExeName}_Data/StreamingAssets/mods/workshop_<PublishedFileId>/WorkshopUploadContent`** ab (nativer `ModLoader`, nicht MelonLoader).
|
||||
|
||||
- **MelonLoader** durchsucht **`{GameRoot}/Mods`** (inkl. Unterordner, je nach Einstellung), **nicht** beliebige Pfade über `Loader.cfg`.
|
||||
- **UserData:** MelonLoader-Konfiguration liegt unter **`{GameRoot}/UserData/`** (z. B. **`MelonLoader.cfg`** / je nach Version **`UserData/MelonLoader/Loader.cfg`** — bei Install prüfen). Relevant für Unterordner-Laden: **`disable_subfolder_load = false`**, optional **`disable_subfolder_manifest = true`**.
|
||||
- **Workshop-DLLs in den Melon-Scan einbinden:** Junction (oder Symlink) von einem Ordner unter **`Mods/`** auf den **`WorkshopUploadContent`**-Pfad desselben Items, z. B. (PowerShell, Pfade anpassen):
|
||||
|
||||
```powershell
|
||||
$game = "C:\Path\To\Data Center"
|
||||
$id = "12345678901234567"
|
||||
$target = Join-Path $game "Data Center_Data\StreamingAssets\mods\workshop_$id\WorkshopUploadContent"
|
||||
$link = Join-Path $game "Mods\workshop_$id"
|
||||
cmd /c mklink /J "$link" "$target"
|
||||
```
|
||||
|
||||
Ohne Junction müssen MelonMods weiter physisch unter **`Mods/`** liegen oder über eure Verteilung dort landen.
|
||||
|
||||
**WorkshopUploader-Vorlagen (modded):** Unter **`content/`** werden **`Mods/`**, **`Plugins/`** und ein **`ModFramework/`**-Baum angelegt — **`ModFramework/FMF/Plugins`** entspricht dabei **`{GameRoot}/FMF/Plugins`**, wenn ihr **`FMF`** per Junction auf **`…/WorkshopUploadContent/ModFramework/FMF`** zeigen lasst. Weitere Framework-Dateien (Konfiguration, Assets) können unter **`ModFramework/`** gebündelt werden.
|
||||
|
||||
## Siehe auch
|
||||
|
||||
- [Meta & operations](/wiki/topics/meta/overview)
|
||||
- [Legacy: Mod Config System](/wiki/wiki-import/Mod-Config-System) (API-Contract; Pfade auf **ModCfg** beziehen)
|
||||
14
topics/meta/overview.md
Normal file
14
topics/meta/overview.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Meta & operations
|
||||
sidebar_label: Meta & operations
|
||||
description: Workshop tooling, devserver betas, idea backlog — repo-level notes.
|
||||
---
|
||||
|
||||
# Meta & operations
|
||||
|
||||
These pages are **not** end-user game docs; they describe how we ship and plan around the project.
|
||||
|
||||
- [Game folder layout (FMF / MelonLoader)](/wiki/topics/meta/game-folder-layout) — `UserData/ModCfg`, `FMF/Plugins`, `Mods`.
|
||||
- [Steam Workshop and tooling](/wiki/meta/Steam-Workshop-and-Tooling) — uploader, references workflow.
|
||||
- [Devserver betas](/wiki/meta/devserver-betas) — beta channel notes.
|
||||
- [IDEA backlog](/wiki/meta/IDEA_BACKLOG) — unstructured idea list (also used by automation).
|
||||
14
topics/mod-developers/overview.md
Normal file
14
topics/mod-developers/overview.md
Normal file
@@ -0,0 +1,14 @@
|
||||
---
|
||||
title: Mod developers
|
||||
sidebar_label: Mod developers (hub)
|
||||
description: Getting started, mod config, debugging — links into wiki-import ModDevs tree.
|
||||
---
|
||||
|
||||
# Mod developers
|
||||
|
||||
**Mod-Autorinnen und -Autoren** — eigene Mods bauen (Hooks, Konfiguration, Debug). Überblick über alle Rollen: [By audience](/wiki/topics/audiences/overview).
|
||||
|
||||
- [By audience — intermediates / professionals](/wiki/audiences/intermediates) and [professionals](/wiki/audiences/professionals)
|
||||
- Wiki: [Framework overview](/wiki/mods/framework)
|
||||
- Imported: [ModDevs](/wiki/wiki-import/ModDevs/), [Modding guide](/wiki/wiki-import/Modding-Guide), [Mod config system](/wiki/wiki-import/Mod-Config-System)
|
||||
- Imported: [Standalone mods](/wiki/wiki-import/StandaloneMods)
|
||||
12
topics/multiplayer-and-networking/overview.md
Normal file
12
topics/multiplayer-and-networking/overview.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: Multiplayer & networking
|
||||
sidebar_label: Multiplayer & networking (hub)
|
||||
description: P2P roadmap, Web UI bridge, multiplayer plugin — entry points.
|
||||
---
|
||||
|
||||
# Multiplayer & networking
|
||||
|
||||
- Wiki: [FFM.Plugin.Multiplayer](/wiki/mods/plugins/ffm-plugin-multiplayer)
|
||||
- Release: [FFM.Plugin.Multiplayer release](/wiki/releases/plugins/ffm-plugin-multiplayer-release)
|
||||
- Imported: [Steamworks P2P multiplayer roadmap](/wiki/wiki-import/Steamworks-P2P-Multiplayer-Roadmap)
|
||||
- Imported: [Web UI bridge](/wiki/wiki-import/Web-UI-Bridge)
|
||||
17
topics/reference/overview.md
Normal file
17
topics/reference/overview.md
Normal file
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: Reference & technical
|
||||
sidebar_label: Reference & technical
|
||||
description: Mapping tables, hook naming, generated catalogs, release channels.
|
||||
---
|
||||
|
||||
# Reference & technical
|
||||
|
||||
Authoritative reference material for the framework and documentation site.
|
||||
|
||||
- [Wiki mapping](/wiki/reference/wiki-mapping) — how paths line up across systems.
|
||||
- [Mod store vision](/wiki/reference/mod-store-vision) — product direction notes.
|
||||
- [FMF hook naming](/wiki/reference/fmf-hook-naming) — conventions for hook identifiers.
|
||||
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog) — generated listing from framework sources.
|
||||
- [Release channels](/wiki/reference/release-channels) — how builds are staged.
|
||||
|
||||
See also [FFI, hooks & Lua](/wiki/topics/ffi-and-hooks/overview) for imported deep dives from the legacy wiki.
|
||||
12
topics/roadmap/overview.md
Normal file
12
topics/roadmap/overview.md
Normal file
@@ -0,0 +1,12 @@
|
||||
---
|
||||
title: Roadmap & planning
|
||||
sidebar_label: Roadmap & planning
|
||||
description: Unified roadmap and mod-store staging notes.
|
||||
---
|
||||
|
||||
# Roadmap & planning
|
||||
|
||||
- [Unified roadmap](/wiki/roadmap/unified-roadmap) — cross-cutting priorities.
|
||||
- [Mod store stages](/wiki/roadmap/mod-store-stages) — staged rollout concepts.
|
||||
|
||||
Imported context: [ROADMAP](/wiki/wiki-import/ROADMAP), [TASKLIST](/wiki/wiki-import/TASKLIST), [Repository status](/wiki/wiki-import/Repository-Status-2026-04-04).
|
||||
16
topics/security-legal/overview.md
Normal file
16
topics/security-legal/overview.md
Normal file
@@ -0,0 +1,16 @@
|
||||
---
|
||||
title: Security & legal
|
||||
sidebar_label: Security & legal (hub)
|
||||
description: Licenses, disclaimers, developer correspondence — links into wiki-import.
|
||||
---
|
||||
|
||||
# Security & legal
|
||||
|
||||
Curated links into imported pages (canonical text may live under `wiki-import/`).
|
||||
|
||||
- [License / legal (EN)](/wiki/wiki-import/License-Legal)
|
||||
- [Lizenz / Rechtliches (DE)](/wiki/wiki-import/Lizenz-Rechtliches)
|
||||
- [Disclaimer (End user)](/wiki/wiki-import/EndUser/Reference/Disclaimer)
|
||||
- [Brief an WASEKU](/wiki/wiki-import/Brief-an-WASEKU) / [Letter to WASEKU (EN)](/wiki/wiki-import/Letter-to-WASEKU)
|
||||
|
||||
For repository licensing, see the root `LICENSE.txt` in the GitHub repo.
|
||||
24
topics/sponsors/overview.md
Normal file
24
topics/sponsors/overview.md
Normal file
@@ -0,0 +1,24 @@
|
||||
---
|
||||
title: Sponsors & support
|
||||
sidebar_label: Sponsors (hub)
|
||||
description: Für Unterstützerinnen und Unterstützer — Sponsoring, Transparenz, englische Detailseiten.
|
||||
---
|
||||
|
||||
# Sponsors & support
|
||||
|
||||
Die Community finanziert u. a. Infrastruktur, Tools und Zeit für Pflege der Doku und des Frameworks. Hier startest du als **potenzielle Sponsorin oder Sponsor** (oder als Spielerin, die nur informieren möchte, wohin Unterstützung fließt).
|
||||
|
||||
## Kurzüberblick
|
||||
|
||||
- **Englisch (ausführlich):** [Sponsors (EN)](/wiki/wiki-import/Sponsors) — Optionen (z. B. GitHub Sponsors), Nutzung von Mitteln, rechtlicher Kontext.
|
||||
- **Deutsch:** [Sponsoren](/wiki/wiki-import/Sponsoren) — gleiche Themen, wo vorhanden auf Deutsch.
|
||||
- **Dank:** [Community Thanks](/wiki/wiki-import/Community-Thanks) (Import), [Changelog & versions](/wiki/wiki-import/Changelog-Versions) für Release-Transparenz.
|
||||
|
||||
## Verknüpft
|
||||
|
||||
- [Security & legal](/wiki/topics/security-legal/overview) — Lizenz, Haftungsausschlüsse, Brief an die Entwickler.
|
||||
- [License & legal (EN)](/wiki/wiki-import/License-Legal) — rechtlicher Rahmen des Projekts.
|
||||
|
||||
:::note Zielgruppe
|
||||
Diese Seite richtet sich an **Sponsorinnen, Sponsoren und Fördernde**. Spielerinnen und Spieler finden den Einstieg unter [End users](/wiki/topics/end-user/overview); Mod-Autoren unter [Mod developers](/wiki/topics/mod-developers/overview); Mitwirkende am Repo unter [Contributors (workflow)](/wiki/topics/contributors/overview).
|
||||
:::
|
||||
52
topics/wiki-import/overview.md
Normal file
52
topics/wiki-import/overview.md
Normal file
@@ -0,0 +1,52 @@
|
||||
---
|
||||
title: Legacy wiki import
|
||||
sidebar_label: Legacy wiki import
|
||||
description: How GitHub Wiki content is mirrored into docs/wiki-import, sorted in the sidebar, and kept in sync with the repo.
|
||||
---
|
||||
|
||||
# Legacy wiki import
|
||||
|
||||
All material under **`docs/wiki-import/`** is part of the **GitHub Wiki mirror**: it is meant to track the wiki that lives alongside the repository, while the rest of **`docs/`** holds **curated** pages (topics, mods, reference).
|
||||
|
||||
For a **map of the whole `docs/` tree**, see **[Documentation layout (`docs/`)](../../README.md)**.
|
||||
|
||||
## Why this exists
|
||||
|
||||
- **Search & versioning**: Wiki text is in Git, reviewable in PRs, and indexed by the site.
|
||||
- **i18n**: Paired `Page.md` (DE) + `Page-en.md` (EN) are split by `wiki:normalize-i18n` into the default locale and `wiki/i18n/de/...`.
|
||||
- **Sorting**: Audience trees (`EndUser/`, `ModDevs/`, `Contributors/`, `TechnicalReference/`, `DataCenterFAQ/`) use `_category_.json` **positions** so the sidebar order matches intent, not only A–Z. Root **`Home`** uses `sidebar_position: 1` so it appears first among loose pages.
|
||||
|
||||
## Keep the mirror up to date
|
||||
|
||||
1. Clone or pull the wiki repo into **`.wiki/`** at the **repository root** (same level as `docs/`):
|
||||
|
||||
```bash
|
||||
git clone https://github.com/<org>/<repo>.wiki.git .wiki
|
||||
```
|
||||
|
||||
2. From **`wiki/`** (the Docusaurus app):
|
||||
|
||||
```bash
|
||||
npm run wiki:refresh
|
||||
```
|
||||
|
||||
This runs **`wiki:sync`** (copy `.wiki` → `docs/wiki-import/`) and then **`wiki:normalize-i18n`**. If `.wiki` is missing, `wiki:sync` exits with an error; run `wiki:normalize-i18n` alone only when you are fixing splits without pulling the wiki.
|
||||
|
||||
3. Commit changes under **`docs/wiki-import/`** and **`wiki/i18n/de/...`** as needed, then open a PR.
|
||||
|
||||
## Editorial policy (recommended)
|
||||
|
||||
| Goal | Action |
|
||||
|------|--------|
|
||||
| **Short-term fix** on the live site | Edit files under `docs/wiki-import/` (and DE mirror if applicable). Optionally backport to `.wiki` so the next sync does not overwrite you. |
|
||||
| **Canonical, long-term doc** | Add or move content into **`docs/topics/`**, **`docs/reference/`**, or **`docs/mods/`**, and link from the legacy page. |
|
||||
| **Duplicate path** | The folder **`Contirbutors/`** is a typo duplicate of **`Contributors/`**; prefer **`Contributors/`** for new links. |
|
||||
|
||||
## Entry points (English default locale)
|
||||
|
||||
- [Home](/wiki/wiki-import/Home) — audience hub.
|
||||
- [End users](/wiki/wiki-import/EndUser/) · [Mod developers](/wiki/wiki-import/ModDevs/) · [Contributors](/wiki/wiki-import/Contributors/)
|
||||
- [Technical reference](/wiki/wiki-import/TechnicalReference/) · [Data Center FAQ](/wiki/wiki-import/DataCenterFAQ/)
|
||||
- [HOOKS](/wiki/wiki-import/HOOKS) · [FFI bridge reference](/wiki/wiki-import/FFI-Bridge-Reference)
|
||||
|
||||
The sidebar **Topics → Legacy wiki import** lists the **full** tree (autogenerated), not only these links.
|
||||
9
wiki-import/AI-USAGE.md
Normal file
9
wiki-import/AI-USAGE.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: AI-USAGE
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Architecture.md
Normal file
9
wiki-import/Architecture.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Architecture
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/AssetExport.md
Normal file
9
wiki-import/AssetExport.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: AssetExport
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Bekannte-Inkompatibilitaeten.md
Normal file
9
wiki-import/Bekannte-Inkompatibilitaeten.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Bekannte Inkompatibilitäten
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Brief-an-WASEKU.md
Normal file
9
wiki-import/Brief-an-WASEKU.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Brief an WASEKU (Data Center)
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Changelog-Versionen.md
Normal file
9
wiki-import/Changelog-Versionen.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Changelog & Versionen
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Changelog-Versions.md
Normal file
9
wiki-import/Changelog-Versions.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Changelog & Versions EN
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Community-Thanks.md
Normal file
9
wiki-import/Community-Thanks.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Community Thanks
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Contirbutors/Contributors-Debug.md
Normal file
9
wiki-import/Contirbutors/Contributors-Debug.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Contributors (Debug) EN
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
5
wiki-import/Contirbutors/_category_.json
Normal file
5
wiki-import/Contirbutors/_category_.json
Normal file
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"label": "Contributors (typo path — prefer Contributors/)",
|
||||
"position": 60,
|
||||
"key": "wiki-import-root-contributors-typo"
|
||||
}
|
||||
9
wiki-import/Contributors-Debug.md
Normal file
9
wiki-import/Contributors-Debug.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Contributors-Debug
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Contributors/Contributors-Debug.md
Normal file
9
wiki-import/Contributors/Contributors-Debug.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Contributors (Debug) EN
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
9
wiki-import/Contributors/Guides/Contribution-Workflow.md
Normal file
9
wiki-import/Contributors/Guides/Contribution-Workflow.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: Contribution-Workflow
|
||||
description: English translation pending; use the Deutsch locale for the full legacy page.
|
||||
---
|
||||
|
||||
:::note
|
||||
This page is available in **German** in the legacy wiki import. Use the language menu (**Deutsch**) for the full text, or contribute an English translation under `docs/wiki-import`.
|
||||
:::
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user