mirror of
https://github.com/mleem97/gregWiki.git
synced 2026-04-10 19:19:18 +02:00
docs: update references from FrikaMF to gregCore throughout documentation
Revised multiple documentation files to replace instances of "FrikaMF" with "gregCore," reflecting the updated naming conventions and project structure. This change enhances consistency and clarity across the documentation, ensuring that users and contributors have accurate information regarding the framework and its components.
This commit is contained in:
@@ -13,7 +13,7 @@ The repository **stays one Git repo**. The goal is **clear boundaries** between
|
|||||||
|
|
||||||
| Top-level | Purpose |
|
| Top-level | Purpose |
|
||||||
|-----------|---------|
|
|-----------|---------|
|
||||||
| `gregCore/framework/` | Core MelonLoader framework (`gregCore/framework/FrikaMF.csproj`, `Sdk/`, `ModLoader/`, entry `framework/Main.cs`) |
|
| `gregCore/framework/` | Core MelonLoader framework (`gregCore/framework/gregCore.csproj`, `Sdk/`, `ModLoader/`, entry `framework/Main.cs`) |
|
||||||
| `mods/` | Gameplay mods (`FMF.Mod.*`, `FMF.*.dll` style) |
|
| `mods/` | Gameplay mods (`FMF.Mod.*`, `FMF.*.dll` style) |
|
||||||
| `plugins/` | FFM plugins (`FFM.Plugin.*`) |
|
| `plugins/` | FFM plugins (`FFM.Plugin.*`) |
|
||||||
| `Templates/` | Scaffolds for new mods/plugins |
|
| `Templates/` | Scaffolds for new mods/plugins |
|
||||||
@@ -38,12 +38,12 @@ flowchart LR
|
|||||||
|-------|--------|---------------|
|
|-------|--------|---------------|
|
||||||
| **1** | Docs, `tools/`, naming wiki, hook catalog script | Docusaurus build green; script generates catalog |
|
| **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 |
|
| **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` |
|
| **3** | Framework sources under `framework/` | Done — `gregCore.sln` points at `framework\framework/gregCore.csproj`; plugins reference `..\..\framework\framework/gregCore.csproj` |
|
||||||
| **4** | CI matrix: docs + dotnet; `plugin-client-redirects` for old URLs | PR checks match local workflow |
|
| **4** | CI matrix: docs + dotnet; `plugin-client-redirects` for old URLs | PR checks match local workflow |
|
||||||
|
|
||||||
## Path updates checklist (Phase 2 applied)
|
## Path updates checklist (Phase 2 applied)
|
||||||
|
|
||||||
- [x] `FrikaMF.sln` project paths (`plugins\FFM.Plugin.*`)
|
- [x] `gregCore.sln` project paths (`plugins\FFM.Plugin.*`)
|
||||||
- [x] `.github/workflows` (CodeQL, release assets, Discord feed)
|
- [x] `.github/workflows` (CodeQL, release assets, Discord feed)
|
||||||
- [x] Contributor docs and mod/plugin wiki pages (`Project Path` lines)
|
- [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)
|
- [ ] [`wiki/docusaurus.config.js`](https://github.com/mleem97/gregFramework/blob/master/wiki/docusaurus.config.js) redirects (only if public URLs must map old paths)
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ These folders typically sit **next to each other** in a developer workspace (see
|
|||||||
|
|
||||||
| Area | Path (on disk) | Role |
|
| Area | Path (on disk) | Role |
|
||||||
|------|----------------|------|
|
|------|----------------|------|
|
||||||
| **Framework core** | `gregCore/` | Runtime, hooks, Harmony, bridge — build **`gregCore/FrikaMF.sln`**; main project **`gregCore/framework/FrikaMF.csproj`**; templates under `gregCore/Templates/` |
|
| **Framework core** | `gregCore/` | Runtime, hooks, Harmony, bridge — build **`gregCore/gregCore.sln`**; main project **`gregCore/framework/gregCore.csproj`**; templates under `gregCore/Templates/` |
|
||||||
| **Mods (split repos)** | `gregMod.<Name>/` (directly under `gregFramework/`) | Standalone gameplay mods (`FMF.*` assemblies); **not** nested under a `gregMods/` umbrella |
|
| **Mods (split repos)** | `gregMod.<Name>/` (directly under `gregFramework/`) | Standalone gameplay mods (`FMF.*` assemblies); **not** nested under a `gregMods/` umbrella |
|
||||||
| **Extensions / framework plugins (split repos)** | `gregExt.<Name>/` (directly under `gregFramework/`) | FFM framework plugins (`FFM.Plugin.*`); **not** under legacy `StandaloneMods/` paths |
|
| **Extensions / framework plugins (split repos)** | `gregExt.<Name>/` (directly under `gregFramework/`) | FFM framework plugins (`FFM.Plugin.*`); **not** under legacy `StandaloneMods/` paths |
|
||||||
| **Documentation** | `gregWiki/` ([`mleem97/gregWiki`](https://github.com/mleem97/gregWiki)) | **This site**: Docusaurus app at repo root, all authored pages under `docs/` |
|
| **Documentation** | `gregWiki/` ([`mleem97/gregWiki`](https://github.com/mleem97/gregWiki)) | **This site**: Docusaurus app at repo root, all authored pages under `docs/` |
|
||||||
@@ -32,7 +32,7 @@ These folders typically sit **next to each other** in a developer workspace (see
|
|||||||
|
|
||||||
| Concern | Where to look |
|
| Concern | Where to look |
|
||||||
|---------|----------------|
|
|---------|----------------|
|
||||||
| Framework `.csproj` | `gregCore/framework/FrikaMF.csproj` (solution: `gregCore/FrikaMF.sln`) |
|
| Framework `.csproj` | `gregCore/framework/gregCore.csproj` (solution: `gregCore/gregCore.sln`) |
|
||||||
| Plugins (`FFM.Plugin.*`) — authoring | `gregExt.<Name>/` (e.g. `gregExt.AssetExporter/`) |
|
| Plugins (`FFM.Plugin.*`) — authoring | `gregExt.<Name>/` (e.g. `gregExt.AssetExporter/`) |
|
||||||
| Plugins — optional mirrors | `gregCore/plugins/greg.Plugin.*` (und ältere `FFM.Plugin.*`-Spiegel je nach Branch) |
|
| Plugins — optional mirrors | `gregCore/plugins/greg.Plugin.*` (und ältere `FFM.Plugin.*`-Spiegel je nach Branch) |
|
||||||
| Mod sources (`FMF.*`) | `gregMod.<Name>/` |
|
| Mod sources (`FMF.*`) | `gregMod.<Name>/` |
|
||||||
@@ -45,19 +45,19 @@ Documentation is maintained in this repository under `docs/`; historical GitHub
|
|||||||
|
|
||||||
## .NET projects on disk (`*.csproj`)
|
## .NET projects on disk (`*.csproj`)
|
||||||
|
|
||||||
- **Framework:** `gregCore/framework/FrikaMF.csproj` via **`gregCore/FrikaMF.sln`**.
|
- **Framework:** `gregCore/framework/gregCore.csproj` via **`gregCore/gregCore.sln`**.
|
||||||
- **Plugins:** primary checkouts **`gregExt.<Name>/`** (assembly `FFM.Plugin.*.dll`); duplicates under `gregCore/plugins/` for all-in-one builds.
|
- **Plugins:** primary checkouts **`gregExt.<Name>/`** (assembly `FFM.Plugin.*.dll`); duplicates under `gregCore/plugins/` for all-in-one builds.
|
||||||
- **Mods:** **`gregMod.<Name>/`** at workspace root (`FMF.*.csproj` names vary).
|
- **Mods:** **`gregMod.<Name>/`** at workspace root (`FMF.*.csproj` names vary).
|
||||||
- **GregModManager:** `gregModmanager/WorkshopUploader.csproj` (separate from the MelonLoader framework solution).
|
- **GregModManager:** `gregModmanager/WorkshopUploader.csproj` (separate from the MelonLoader framework solution).
|
||||||
|
|
||||||
## Build status (framework project)
|
## Build status (framework project)
|
||||||
|
|
||||||
- `gregCore/framework/FrikaMF.csproj` does not compile the WorkshopManager app; that builds from `gregModmanager/WorkshopUploader.csproj`.
|
- `gregCore/framework/gregCore.csproj` does not compile the WorkshopManager app; that builds from `gregModmanager/WorkshopUploader.csproj`.
|
||||||
- `dotnet build` on the framework solution (when present under `gregCore/`) builds core + optional `gregCore/plugins/*` — **not** split-repo `gregExt.*` / `gregMod.*` folders unless you add them to the solution.
|
- `dotnet build` on the framework solution (when present under `gregCore/`) builds core + optional `gregCore/plugins/*` — **not** split-repo `gregExt.*` / `gregMod.*` folders unless you add them to the solution.
|
||||||
|
|
||||||
## `FrikaMF.sln` drift (action items)
|
## `gregCore.sln` drift (action items)
|
||||||
|
|
||||||
1. **Mods outside solution**: Standalone mod projects under `gregMod.*` are usually **not** in `FrikaMF.sln`; build them per repo or add them if you want one `dotnet build` for everything.
|
1. **Mods outside solution**: Standalone mod projects under `gregMod.*` are usually **not** in `gregCore.sln`; build them per repo or add them if you want one `dotnet build` for everything.
|
||||||
|
|
||||||
2. **Templates vs framework visibility**: Template projects under `gregCore/Templates/` may fail `dotnet build` with `CS0122` if internal API visibility does not match template expectations — treat templates as **samples** until the project graph is aligned.
|
2. **Templates vs framework visibility**: Template projects under `gregCore/Templates/` may fail `dotnet build` with `CS0122` if internal API visibility does not match template expectations — treat templates as **samples** until the project graph is aligned.
|
||||||
|
|
||||||
@@ -85,15 +85,15 @@ Documentation is maintained in this repository under `docs/`; historical GitHub
|
|||||||
|
|
||||||
## Hook / event sources of truth (code)
|
## Hook / event sources of truth (code)
|
||||||
|
|
||||||
- **Native pipeline (`EventIds` → `greg.*`):** [`gregCore/framework/src/Sdk/GregNativeEventHooks.cs`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/src/Sdk/GregNativeEventHooks.cs) with numeric ids in [`EventDispatcher.cs` (`EventIds`)](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/src/ModLoader/EventDispatcher.cs) — wiki table: [greg hooks catalog](../reference/greg-hooks-catalog.md); generator [`gregCore/tools/Generate-GregHookCatalog.ps1`](https://github.com/mleem97/gregFramework/blob/main/gregCore/tools/Generate-GregHookCatalog.ps1).
|
- **Native pipeline (`EventIds` → `greg.*`):** [`gregCore/framework/Sdk/GregNativeEventHooks.cs`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/Sdk/GregNativeEventHooks.cs) with numeric ids in [`EventDispatcher.cs` (`EventIds`)](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/ModLoader/EventDispatcher.cs) — wiki table: [greg hooks catalog](../reference/greg-hooks-catalog.md); generator [`gregCore/tools/Generate-GregHookCatalog.ps1`](https://github.com/mleem97/gregFramework/blob/main/gregCore/tools/Generate-GregHookCatalog.ps1).
|
||||||
- **Canonical `greg.*` registry (JSON):** `greg_hooks.json` (repo root; mirrored under `gregCore/gregFramework/`) — regenerate with [`scripts/Generate-GregHooksFromIl2CppDump.ps1`](https://github.com/mleem97/gregFramework/blob/main/gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1); overview [Greg hooks & event runtime](../framework/greg-hooks-and-events.md).
|
- **Canonical `greg.*` registry (JSON):** `greg_hooks.json` (repo root; mirrored under `gregCore/gregFramework/`) — regenerate with [`scripts/Generate-GregHooksFromIl2CppDump.ps1`](https://github.com/mleem97/gregFramework/blob/main/gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1); overview [Greg hooks & event runtime](../framework/greg-hooks-and-events.md).
|
||||||
- **Legacy spellings:** [`GregCompatBridge`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/src/Sdk/GregCompatBridge.cs) + optional `legacy` fields in `greg_hooks.json`.
|
- **Legacy spellings:** [`GregCompatBridge`](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/Sdk/GregCompatBridge.cs) + optional `legacy` fields in `greg_hooks.json`.
|
||||||
|
|
||||||
## Debugging (MelonLoader, IL2CPP, Unity)
|
## Debugging (MelonLoader, IL2CPP, Unity)
|
||||||
|
|
||||||
- **Build first:** `dotnet build gregCore/FrikaMF.sln -c Debug` (requires MelonLoader + IL2CPP interop under `MelonLoader/` for your game install, or `lib/references/MelonLoader` — see `tools/refresh_refs.py`).
|
- **Build first:** `dotnet build gregCore/gregCore.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/`.
|
- **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.
|
- **`FFM.Plugin.AssetExporter`:** The project links `framework/Main.cs` (and related files) **and** references `gregCore.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 `gregCore` sources.
|
||||||
|
|
||||||
## Related
|
## Related
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ description: greg.* hooks, GregEventDispatcher, GregNativeEventHooks, greg_hooks
|
|||||||
|
|
||||||
# Greg hooks & event runtime
|
# Greg hooks & event runtime
|
||||||
|
|
||||||
The **`FrikaModdingFramework.dll`** assembly is built from **`gregCore/framework/FrikaMF.csproj`** and combines Harmony patches, C# events (`GregEventDispatcher`), and the Rust/native bridge. Mod authors mainly care about **three surfaces**:
|
The **`gregCore.dll`** assembly is built from **`gregCore/framework/gregCore.csproj`** and combines Harmony patches, C# events (`GregEventDispatcher`), and the Rust/native bridge. Mod authors mainly care about **three surfaces**:
|
||||||
|
|
||||||
| Surface | Role | Typical entry |
|
| Surface | Role | Typical entry |
|
||||||
|---------|------|----------------|
|
|---------|------|----------------|
|
||||||
@@ -21,20 +21,20 @@ New **documentation** identifiers still follow **`FMF.<Domain>.*`** — see [FMF
|
|||||||
| Path | Role |
|
| Path | Role |
|
||||||
|------|------|
|
|------|------|
|
||||||
| **Repo root** `greg_hooks.json` | Source of truth: `name`, `patchTarget`, `strategy`, `payloadSchema`, optional `legacy`. |
|
| **Repo root** `greg_hooks.json` | Source of truth: `name`, `patchTarget`, `strategy`, `payloadSchema`, optional `legacy`. |
|
||||||
| **Next to `FrikaModdingFramework.dll`** | Copied from the monorepo root on build so **`GregCompatBridge`** can resolve legacy names. |
|
| **Next to `gregCore.dll`** | Copied from the monorepo root on build so **`GregCompatBridge`** can resolve legacy names. |
|
||||||
|
|
||||||
Regenerate: `gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1` when Il2Cpp/interop inputs change.
|
Regenerate: `gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1` when Il2Cpp/interop inputs change.
|
||||||
|
|
||||||
## `GregEventDispatcher` / SDK
|
## `GregEventDispatcher` / SDK
|
||||||
|
|
||||||
Implementation: **`gregCore/framework/src/Sdk/GregEventDispatcher.cs`** (`namespace gregFramework.Core`). API: **`On` / `Once` / `Off` / `Emit`**, **`OnCancelable` / `InvokeCancelable`**, **`UnregisterAll(modId)`**.
|
Implementation: **`gregCore/framework/Sdk/GregEventDispatcher.cs`** (`namespace gregFramework.Core`). API: **`On` / `Once` / `Off` / `Emit`**, **`OnCancelable` / `InvokeCancelable`**, **`UnregisterAll(modId)`**.
|
||||||
|
|
||||||
Build stable hook strings with **`GregHookName.Create(GregDomain.*, "Action")`** or **`GregNativeEventHooks.*`** constants.
|
Build stable hook strings with **`GregHookName.Create(GregDomain.*, "Action")`** or **`GregNativeEventHooks.*`** constants.
|
||||||
|
|
||||||
## Native events (`EventIds`)
|
## Native events (`EventIds`)
|
||||||
|
|
||||||
- **`EventIds` and `EventDispatcher`:** `gregCore/framework/src/ModLoader/EventDispatcher.cs` (numeric ids aligned with Rust).
|
- **`EventIds` and `EventDispatcher`:** `gregCore/framework/ModLoader/EventDispatcher.cs` (numeric ids aligned with Rust).
|
||||||
- **Mapping → `greg.*`:** **`GregNativeEventHooks`** (`gregCore/framework/src/Sdk/GregNativeEventHooks.cs`); emission via **`GregHookIntegration`** in the same ModLoader tree.
|
- **Mapping → `greg.*`:** **`GregNativeEventHooks`** (`gregCore/framework/Sdk/GregNativeEventHooks.cs`); emission via **`GregHookIntegration`** in the same ModLoader tree.
|
||||||
- **Wiki table:** [greg hooks catalog](/wiki/reference/greg-hooks-catalog) (generator: `gregCore/tools/Generate-GregHookCatalog.ps1`).
|
- **Wiki table:** [greg hooks catalog](/wiki/reference/greg-hooks-catalog) (generator: `gregCore/tools/Generate-GregHookCatalog.ps1`).
|
||||||
|
|
||||||
## Lua event & hook subscriptions
|
## Lua event & hook subscriptions
|
||||||
|
|||||||
@@ -8,39 +8,62 @@ The workspace is **multi-repo**: several Git checkouts live **side by side** und
|
|||||||
|
|
||||||
| Folder | Role |
|
| Folder | Role |
|
||||||
|--------|--------|
|
|--------|--------|
|
||||||
| **`gregCore/`** | Framework: **`gregCore/FrikaMF.sln`**, main project **`gregCore/framework/FrikaMF.csproj`**; SDK under `framework/src/Sdk/`; MCP under `gregCore/mcp-server/` |
|
| **`gregCore/`** | Framework: **`gregCore/gregCore.sln`**, main project **`gregCore/framework/gregCore.csproj`**; SDK under `framework/Sdk/`; MCP under `gregCore/mcp-server/` |
|
||||||
| **`gregMod.<Name>/`** | Gameplay mods (often `FMF.*` assemblies), **flat** next to `gregCore/` (umbrella **`gregMods/`** is deprecated) |
|
| **`gregMod.<Name>/`** | Gameplay mods (often `FMF.*` assemblies), **flat** next to `gregCore/` (umbrella **`gregMods/`** is deprecated) |
|
||||||
| **`gregExt.<Name>/`** | Framework plugins (`FFM.Plugin.*` / `greg.Plugin.*`), also flat (**`gregExtensions/`** deprecated) |
|
| **`gregExt.<Name>/`** | Framework plugins (`FFM.Plugin.*` / `greg.Plugin.*`), also flat (**`gregExtensions/`** deprecated) |
|
||||||
| **`gregModmanager/`** | GregModManager / Workshop UI (`WorkshopUploader.csproj`) |
|
| **`gregModmanager/`** | GregModManager / Workshop UI (`WorkshopUploader.csproj`) |
|
||||||
| **`gregDataCenterExporter/`** | Exporter, templates, mirrors |
|
| **`gregDataCenterExporter/`** | Exporter, templates, mirrors |
|
||||||
| **`gregWiki/`** | This documentation site (Docusaurus) |
|
| **`gregWiki/`** | This documentation site (Docusaurus) |
|
||||||
|
|
||||||
Rust/native mods are loaded through the core FFI layer; bridge code lives under **`gregCore/framework/src/ModLoader/`**.
|
Rust/native mods are loaded through the core FFI layer; bridge code lives under **`gregCore/framework/ModLoader/`** (including **`LanguageBridges/`** and **`LanguageBridges/LuaModules/`** for the Lua `greg.*` API).
|
||||||
|
|
||||||
## Build the framework
|
## Build the framework
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dotnet build gregCore/FrikaMF.sln -c Release
|
dotnet build gregCore/gregCore.sln -c Release
|
||||||
```
|
```
|
||||||
|
|
||||||
Or open **`gregCore/FrikaMF.sln`** in your IDE. For CI without a local game install, many projects support **`-p:CI=true`** (see each `.csproj`).
|
Or open **`gregCore/gregCore.sln`** in your IDE and build the **`gregCore/framework/gregCore.csproj`** output. A **Release** build produces **`gregCore.dll`** (the MelonLoader framework assembly — not a legacy `FrikaModdingFramework.dll` name).
|
||||||
|
|
||||||
|
For CI without a local game install, many projects support **`-p:CI=true`** (see each `.csproj`).
|
||||||
|
|
||||||
**Prerequisites:** MelonLoader **net6** assemblies and game Il2Cpp interop — either from `{Game}/MelonLoader/` or **`gregCore/lib/references/MelonLoader`** (e.g. `python gregCore/tools/refresh_refs.py`). Set **`DATA_CENTER_GAME_DIR`** if MSBuild should discover the game path.
|
**Prerequisites:** MelonLoader **net6** assemblies and game Il2Cpp interop — either from `{Game}/MelonLoader/` or **`gregCore/lib/references/MelonLoader`** (e.g. `python gregCore/tools/refresh_refs.py`). Set **`DATA_CENTER_GAME_DIR`** if MSBuild should discover the game path.
|
||||||
|
|
||||||
|
### Quick install (matches `gregCore/README.md`)
|
||||||
|
|
||||||
|
1. Build or obtain **`gregCore.dll`**.
|
||||||
|
2. Copy it to **`Data Center/Mods/`** (same folder as other MelonLoader mods).
|
||||||
|
3. **C# mods:** additional managed mods stay under **`Data Center/Mods/`** as usual.
|
||||||
|
4. **Lua mods:** place `.lua` trees under **`Data Center/Mods/ScriptMods/lua/`** (per Language Bridges layout; same `Mods/` root as `gregCore.dll`).
|
||||||
|
5. **Rust / native mods:** place modules under **`Data Center/Mods/RustMods/`**.
|
||||||
|
6. Launch the game and confirm load order in **`MelonLoader/Latest.log`**.
|
||||||
|
|
||||||
|
## Supported modding languages
|
||||||
|
|
||||||
|
gregCore supports **three modding paths** in parallel:
|
||||||
|
|
||||||
|
| Language | Role |
|
||||||
|
|----------|--------|
|
||||||
|
| **C#** | Full MelonLoader / IL2CPP interop, Harmony, plugins, and **`gregFramework.Core`** — the default for framework extensions and heavy mods. |
|
||||||
|
| **Lua** | MoonSharp-hosted scripts via **`LuaLanguageBridge`**; game access through the **`greg.*`** API (events, Harmony bindings, Unity handles). Deploy under **`Data Center/Mods/ScriptMods/lua/`**. |
|
||||||
|
| **Rust / native** | **`FFIBridge`** native pipeline; deploy under **`Data Center/Mods/RustMods/`**. |
|
||||||
|
|
||||||
|
Policy, paths, and trade-offs: [Modding language support](/wiki/reference/modding-language-requirement). Lua API tables: [Language Bridges README](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/ModLoader/LanguageBridges/README.md).
|
||||||
|
|
||||||
## Hooks and registries
|
## Hooks and registries
|
||||||
|
|
||||||
| Topic | Where |
|
| Topic | Where |
|
||||||
|-------|--------|
|
|-------|--------|
|
||||||
| **Canonical `greg.*` (JSON, Il2Cpp)** | Repo root **`greg_hooks.json`**; regenerate: **`gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1`** |
|
| **Canonical `greg.*` (JSON, Il2Cpp)** | Repo root **`greg_hooks.json`**; regenerate: **`gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1`** |
|
||||||
| **EventId → `greg.*` (native / FFI pipeline)** | **`GregNativeEventHooks`** — [greg hooks catalog](/wiki/reference/greg-hooks-catalog), source `gregCore/framework/src/Sdk/GregNativeEventHooks.cs` |
|
| **EventId → `greg.*` (native / FFI pipeline)** | **`GregNativeEventHooks`** — [greg hooks catalog](/wiki/reference/greg-hooks-catalog), source `gregCore/framework/Sdk/GregNativeEventHooks.cs` |
|
||||||
| **`FMF.*` documentation naming** | [FMF hook naming](/wiki/reference/fmf-hook-naming) |
|
| **`FMF.*` documentation naming** | [FMF hook naming](/wiki/reference/fmf-hook-naming) |
|
||||||
| **Architecture** | [Greg hooks & event runtime](/wiki/framework/greg-hooks-and-events) |
|
| **Architecture** | [Greg hooks & event runtime](/wiki/framework/greg-hooks-and-events) |
|
||||||
| **Legacy spellings** | **`GregCompatBridge`** loads **`greg_hooks.json`** next to **`FrikaModdingFramework.dll`** |
|
| **Legacy spellings** | **`GregCompatBridge`** loads **`greg_hooks.json`** next to **`gregCore.dll`** |
|
||||||
|
|
||||||
## Start a new mod
|
## Start a new mod
|
||||||
|
|
||||||
1. Create **`gregMod.<Name>/`** under `gregFramework/` (or clone a template).
|
1. Create **`gregMod.<Name>/`** under `gregFramework/` (or clone a template).
|
||||||
2. Add **`ProjectReference`** to **`gregCore/framework/FrikaMF.csproj`** (see **`mods/GregShowcaseMod/`**).
|
2. Add **`ProjectReference`** to **`gregCore/framework/gregCore.csproj`** (see **`mods/GregShowcaseMod/`**).
|
||||||
3. Use **`gregFramework.Core`** (`GregEventDispatcher`, `GregHookName`, `GregNativeEventHooks`, …).
|
3. Use **`gregFramework.Core`** (`GregEventDispatcher`, `GregHookName`, `GregNativeEventHooks`, …).
|
||||||
4. Templates: **`gregCore/Templates/greg.BasedModTemplate/`** or mirrored templates under **`gregDataCenterExporter/Templates/`**.
|
4. Templates: **`gregCore/Templates/greg.BasedModTemplate/`** or mirrored templates under **`gregDataCenterExporter/Templates/`**.
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Paths are relative to the **`gregFramework/`** workspace root (split repos clone
|
|||||||
|
|
||||||
| Path | Purpose |
|
| Path | Purpose |
|
||||||
|------|---------|
|
|------|---------|
|
||||||
| `gregCore/framework/FrikaMF.csproj` (via `gregCore/FrikaMF.sln`) | Core MelonLoader framework DLL |
|
| `gregCore/framework/gregCore.csproj` (via `gregCore/gregCore.sln`) | Core MelonLoader framework DLL |
|
||||||
| `gregExt.*/` | FFM framework plugins (`FFM.Plugin.*` assemblies — one repo per plugin) |
|
| `gregExt.*/` | FFM framework plugins (`FFM.Plugin.*` assemblies — one repo per plugin) |
|
||||||
| `gregMod.*/` | Standalone gameplay mods (`FMF.*` assemblies) |
|
| `gregMod.*/` | Standalone gameplay mods (`FMF.*` assemblies) |
|
||||||
| `gregModmanager/WorkshopUploader.csproj` | GregModManager MAUI app |
|
| `gregModmanager/WorkshopUploader.csproj` | GregModManager MAUI app |
|
||||||
@@ -38,7 +38,7 @@ Paths are relative to the **`gregFramework/`** workspace root (split repos clone
|
|||||||
### Build everything (solution)
|
### Build everything (solution)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
dotnet build gregCore/FrikaMF.sln -c Release
|
dotnet build gregCore/gregCore.sln -c Release
|
||||||
```
|
```
|
||||||
|
|
||||||
### Build standalone mods (per split repo)
|
### Build standalone mods (per split repo)
|
||||||
@@ -65,7 +65,7 @@ Each mod/plugin gets its own folder under `<GameRoot>/workshop/`:
|
|||||||
├── FrikaModFramework/
|
├── FrikaModFramework/
|
||||||
│ ├── content/
|
│ ├── content/
|
||||||
│ │ └── Mods/
|
│ │ └── Mods/
|
||||||
│ │ └── FrikaModdingFramework.dll
|
│ │ └── gregCore.dll
|
||||||
│ ├── metadata.json
|
│ ├── metadata.json
|
||||||
│ └── preview.png
|
│ └── preview.png
|
||||||
├── FFM.Plugin.Multiplayer/
|
├── FFM.Plugin.Multiplayer/
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ The following components are built and packaged for Steam Workshop distribution:
|
|||||||
|
|
||||||
| Component | Assembly | Workshop content path | Tags |
|
| Component | Assembly | Workshop content path | Tags |
|
||||||
|-----------|----------|----------------------|------|
|
|-----------|----------|----------------------|------|
|
||||||
| FrikaModFramework | `FrikaModdingFramework.dll` | `content/Mods/` | modded, melonloader, framework, fmf |
|
| FrikaModFramework | `gregCore.dll` | `content/Mods/` | modded, melonloader, framework, fmf |
|
||||||
|
|
||||||
### FMF Plugins
|
### FMF Plugins
|
||||||
|
|
||||||
@@ -57,7 +57,7 @@ The following components are built and packaged for Steam Workshop distribution:
|
|||||||
### Manual installation
|
### Manual installation
|
||||||
|
|
||||||
1. Download the DLL from the Workshop or a release.
|
1. Download the DLL from the Workshop or a release.
|
||||||
2. Framework: place `FrikaModdingFramework.dll` in `<Data Center>/Mods/`.
|
2. Framework: place `gregCore.dll` in `<Data Center>/Mods/`.
|
||||||
3. Plugins: place `FFM.Plugin.*.dll` in `<Data Center>/FMF/Plugins/`.
|
3. Plugins: place `FFM.Plugin.*.dll` in `<Data Center>/FMF/Plugins/`.
|
||||||
4. Mods: place `FMF.*.dll` in `<Data Center>/Mods/`.
|
4. Mods: place `FMF.*.dll` in `<Data Center>/Mods/`.
|
||||||
5. Start the game and check `MelonLoader/Latest.log`.
|
5. Start the game and check `MelonLoader/Latest.log`.
|
||||||
@@ -67,7 +67,7 @@ The following components are built and packaged for Steam Workshop distribution:
|
|||||||
```text
|
```text
|
||||||
Data Center/
|
Data Center/
|
||||||
├── Mods/
|
├── Mods/
|
||||||
│ ├── FrikaModdingFramework.dll
|
│ ├── gregCore.dll
|
||||||
│ ├── FMF.ConsoleInputGuard.dll
|
│ ├── FMF.ConsoleInputGuard.dll
|
||||||
│ ├── FMF.GregifyEmployees.dll
|
│ ├── FMF.GregifyEmployees.dll
|
||||||
│ ├── FMF.HexLabelMod.dll
|
│ ├── FMF.HexLabelMod.dll
|
||||||
@@ -85,7 +85,7 @@ Data Center/
|
|||||||
│ └── ModCfg/
|
│ └── ModCfg/
|
||||||
└── workshop/
|
└── workshop/
|
||||||
├── FrikaModFramework/
|
├── FrikaModFramework/
|
||||||
│ ├── content/Mods/FrikaModdingFramework.dll
|
│ ├── content/Mods/gregCore.dll
|
||||||
│ └── metadata.json
|
│ └── metadata.json
|
||||||
├── FFM.Plugin.Multiplayer/
|
├── FFM.Plugin.Multiplayer/
|
||||||
│ ├── content/FMF/Plugins/FFM.Plugin.Multiplayer.dll
|
│ ├── content/FMF/Plugins/FFM.Plugin.Multiplayer.dll
|
||||||
@@ -114,5 +114,5 @@ See also: [Contributor Guide](./contributor-workshop)
|
|||||||
|-----------|----------|
|
|-----------|----------|
|
||||||
| All mods/plugins | Data Center (Steam App 4170200) |
|
| All mods/plugins | Data Center (Steam App 4170200) |
|
||||||
| All mods/plugins | MelonLoader (IL2CPP, stable) |
|
| All mods/plugins | MelonLoader (IL2CPP, stable) |
|
||||||
| FMF Plugins | FrikaModdingFramework.dll in Mods/ |
|
| FMF Plugins | gregCore.dll in Mods/ |
|
||||||
| Gregtools Modmanager | Windows 10 1809+ (self-contained, no runtime install needed) |
|
| Gregtools Modmanager | Windows 10 1809+ (self-contained, no runtime install needed) |
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ Runtime names look like `greg.<DOMAIN>.<Action>`. Always build them with `GregHo
|
|||||||
|
|
||||||
## Registry
|
## Registry
|
||||||
|
|
||||||
**`greg_hooks.json`** at the **gregFramework** repository root is the canonical catalog (`description`, `payloadSchema`, `strategy`, optional `legacy`). A copy is emitted next to **`FrikaModdingFramework.dll`** for `GregCompatBridge` legacy resolution.
|
**`greg_hooks.json`** at the **gregFramework** repository root is the canonical catalog (`description`, `payloadSchema`, `strategy`, optional `legacy`). A copy is emitted next to **`gregCore.dll`** for `GregCompatBridge` legacy resolution.
|
||||||
|
|
||||||
Authoritative documentation: [greg hooks registry (IL2CPP)](/wiki/reference/greg-hooks-registry) — regeneration script, whitelist, and Harmony deduplication rules.
|
Authoritative documentation: [greg hooks registry (IL2CPP)](/wiki/reference/greg-hooks-registry) — regeneration script, whitelist, and Harmony deduplication rules.
|
||||||
|
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ If anything is missing, follow the instructions shown.
|
|||||||
### Mod does not load in-game
|
### Mod does not load in-game
|
||||||
|
|
||||||
- Check `MelonLoader/Latest.log` in the game directory.
|
- Check `MelonLoader/Latest.log` in the game directory.
|
||||||
- Ensure `FrikaModdingFramework.dll` is in `<game>/Mods/`.
|
- Ensure `gregCore.dll` is in `<game>/Mods/`.
|
||||||
- Verify the mod DLL is also in `<game>/Mods/` or `<game>/FMF/Plugins/`.
|
- Verify the mod DLL is also in `<game>/Mods/` or `<game>/FMF/Plugins/`.
|
||||||
|
|
||||||
### Subscription does not appear
|
### Subscription does not appear
|
||||||
|
|||||||
@@ -6,13 +6,13 @@ slug: /audiences/newbies
|
|||||||
|
|
||||||
## Goal
|
## Goal
|
||||||
|
|
||||||
Get FrikaMF running safely and understand the minimum concepts.
|
Get gregCore running safely and understand the minimum concepts.
|
||||||
|
|
||||||
## Start here
|
## Start here
|
||||||
|
|
||||||
1. Install MelonLoader and run the game once.
|
1. Install MelonLoader and run the game once.
|
||||||
2. Copy `FrikaModdingFramework.dll` into `Data Center/Mods`.
|
2. Copy `gregCore.dll` into `Data Center/Mods`.
|
||||||
3. Add the mod that depends on FrikaMF.
|
3. Add the mod that depends on gregCore.
|
||||||
4. Check `MelonLoader/Latest.log`.
|
4. Check `MelonLoader/Latest.log`.
|
||||||
|
|
||||||
## Read next
|
## Read next
|
||||||
|
|||||||
@@ -35,5 +35,5 @@ Do not redistribute game binaries or extracted assets. Workshop packages should
|
|||||||
|
|
||||||
## CI / agents
|
## 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`).
|
- `gregCore.csproj` builds on Windows agents that have either a Steam *Data Center* install **or** a populated `lib/references/MelonLoader/` (from `refresh_refs.py`).
|
||||||
- `gregModmanager/WorkshopUploader.csproj` targets **.NET 9** MAUI (`net9.0-windows…`); build it on Windows (not Linux-hosted runners unless cross-compilation is configured).
|
- `gregModmanager/WorkshopUploader.csproj` targets **.NET 9** MAUI (`net9.0-windows…`); build it on Windows (not Linux-hosted runners unless cross-compilation is configured).
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# DevServer API — beta channels (`gregframework.eu`)
|
# 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.
|
This document defines the **intended** client contract for the gregCore **WorkshopUploader** “Betas” panel. The server may be implemented separately; keep URLs and tokens configurable.
|
||||||
|
|
||||||
## Base URL
|
## Base URL
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Describe the runtime as a **layered system**, not a flat list of DLLs:
|
|||||||
| Layer | Role | Typical workspace artifacts |
|
| Layer | Role | Typical workspace artifacts |
|
||||||
|--------|--------|------------------------------|
|
|--------|--------|------------------------------|
|
||||||
| **1. ModManager (front-end)** | UI to enable/disable mods and plugins, ordering, configuration, game state (e.g. no save loaded, level loading). Talks to the framework through **well-defined** interfaces (shared library, config files, IPC, named pipes, HTTP — depending on implementation). | `gregModmanager/` — **Gregtools Modmanager** (MAUI, e.g. `WorkshopUploader.csproj`). |
|
| **1. ModManager (front-end)** | UI to enable/disable mods and plugins, ordering, configuration, game state (e.g. no save loaded, level loading). Talks to the framework through **well-defined** interfaces (shared library, config files, IPC, named pipes, HTTP — depending on implementation). | `gregModmanager/` — **Gregtools Modmanager** (MAUI, e.g. `WorkshopUploader.csproj`). |
|
||||||
| **2. Modding framework / SDK** | Stable API surface for plugins and mods: lifecycle, events, versioning, dependencies, logging, error handling. Hooks Unity / MelonLoader / IL2CPP and **maps** low-level events to **framework events** (hook proxy). | `gregCore/` — e.g. `framework/` (`FrikaMF`), Harmony integration, **native FFI** (`FfiBridge`), hook registry. |
|
| **2. Modding framework / SDK** | Stable API surface for plugins and mods: lifecycle, events, versioning, dependencies, logging, error handling. Hooks Unity / MelonLoader / IL2CPP and **maps** low-level events to **framework events** (hook proxy). | `gregCore/` — e.g. `framework/` (**`gregCore` runtime**), Harmony integration, **native FFI** (`FfiBridge`), hook registry. |
|
||||||
| **3. Plugins** | Extend the framework (new services, hook types, optional ModManager UI). Clear extension points. | `FFM.Plugin.*`, repos **`gregExt.<Name>/`**. |
|
| **3. Plugins** | Extend the framework (new services, hook types, optional ModManager UI). Clear extension points. | `FFM.Plugin.*`, repos **`gregExt.<Name>/`**. |
|
||||||
| **4. Mods** | User extensions via the **documented** framework API; avoid direct IL2CPP details where possible; load in isolation; soft-fail on errors. | `FMF.*`, repos **`gregMod.<Name>/`**. |
|
| **4. Mods** | User extensions via the **documented** framework API; avoid direct IL2CPP details where possible; load in isolation; soft-fail on errors. | `FMF.*`, repos **`gregMod.<Name>/`**. |
|
||||||
|
|
||||||
@@ -56,7 +56,7 @@ When documentation or API design must choose, use this **order**:
|
|||||||
- **Language:** **English only** for all user-facing documentation in `docs/`, the homepage, and UI strings in this site.
|
- **Language:** **English only** for all user-facing documentation in `docs/`, the homepage, and UI strings in this site.
|
||||||
- **Repos:** Keep paths such as `gregCore/`, `gregMod.*`, `gregExt.*`, `gregModmanager/` consistent with the [Workspace map](/wiki/workspace) and [Repository architecture](/wiki/framework/architecture).
|
- **Repos:** Keep paths such as `gregCore/`, `gregMod.*`, `gregExt.*`, `gregModmanager/` consistent with the [Workspace map](/wiki/workspace) and [Repository architecture](/wiki/framework/architecture).
|
||||||
- **No invented APIs:** New pages must not promise hooks or events that are not evidenced in core/registry — link to [FMF hooks](/wiki/framework/fmf-hooks) and the [Hooks catalog](/wiki/reference/fmf-hooks-catalog).
|
- **No invented APIs:** New pages must not promise hooks or events that are not evidenced in core/registry — link to [FMF hooks](/wiki/framework/fmf-hooks) and the [Hooks catalog](/wiki/reference/fmf-hooks-catalog).
|
||||||
- **Cross-links:** Entry [Developers & contributors](/wiki/developers), architecture [Repository architecture](/wiki/framework/architecture), language rule [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
- **Cross-links:** Entry [Developers & contributors](/wiki/developers), architecture [Repository architecture](/wiki/framework/architecture), language rule [Modding language support](/wiki/reference/modding-language-requirement).
|
||||||
|
|
||||||
## See also
|
## See also
|
||||||
|
|
||||||
|
|||||||
@@ -3,16 +3,16 @@ title: Framework
|
|||||||
sidebar_label: Framework
|
sidebar_label: Framework
|
||||||
---
|
---
|
||||||
|
|
||||||
**Language:** mod, plugin, and extension **logic must be written in C#** — see [Modding language (C# only)](/wiki/reference/modding-language-requirement).
|
**Languages:** gameplay and script mods can be written in **C#**, **Lua** (MoonSharp, `greg.*` API), or **Rust / native** (FFI) — see [Modding language support](/wiki/reference/modding-language-requirement). **Lua API reference** (events, hooks, Unity handles, I/O): [Language Bridges README](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/ModLoader/LanguageBridges/README.md).
|
||||||
|
|
||||||
**Stack position:** gameplay **mods** sit on top of **plugins** and the **framework SDK**; the **ModManager** (MAUI) is the out-of-game front-end — see [System architecture & documentation principles](/wiki/meta/system-architecture-principles).
|
**Stack position:** gameplay **mods** sit on top of **plugins** and the **framework SDK**; the **ModManager** (MAUI) is the out-of-game front-end — see [System architecture & documentation principles](/wiki/meta/system-architecture-principles).
|
||||||
|
|
||||||
The core `FrikaMF` runtime provides:
|
The core runtime ships as **`gregCore.dll`** (MelonLoader loads this assembly; not a legacy **`FrikaModdingFramework.dll`** name). It provides:
|
||||||
|
|
||||||
- Harmony patch integration for gameplay hooks
|
- Harmony patch integration for gameplay hooks
|
||||||
- Event dispatch and stable event contracts
|
- Event dispatch and stable event contracts (`greg.*`)
|
||||||
- Native bridge for Rust modules
|
- Language bridges (C# direct, **Lua** via `LuaLanguageBridge`, **Rust** via `FFIBridge` / `RustLanguageBridgeAdapter`)
|
||||||
- Shared game API abstractions for mod authors
|
- Shared game API abstractions for mod authors (C# SDK and Lua `greg.*` modules)
|
||||||
|
|
||||||
## Core references
|
## Core references
|
||||||
|
|
||||||
|
|||||||
@@ -46,9 +46,9 @@ Harmony patches in **gregFramework** emit stable **`greg.<DOMAIN>.<Action>`** st
|
|||||||
|
|
||||||
## Native pipeline: `GregNativeEventHooks` (replaces `HookNames`)
|
## Native pipeline: `GregNativeEventHooks` (replaces `HookNames`)
|
||||||
|
|
||||||
Numeric **`EventIds`** are mapped to canonical **`greg.*`** strings in **`GregNativeEventHooks`** ([source](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/src/Sdk/GregNativeEventHooks.cs)), aligned with **`greg_hooks.json`** where that file names the patched method. Logging uses **`GregNativeEventHooks.Resolve(uint)`**; unknown ids → **`greg.SYSTEM.UnmappedNativeEvent`**.
|
Numeric **`EventIds`** are mapped to canonical **`greg.*`** strings in **`GregNativeEventHooks`** ([source](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/Sdk/GregNativeEventHooks.cs)), aligned with **`greg_hooks.json`** where that file names the patched method. Logging uses **`GregNativeEventHooks.Resolve(uint)`**; unknown ids → **`greg.SYSTEM.UnmappedNativeEvent`**.
|
||||||
|
|
||||||
**`GregCompatBridge`** ([source](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/src/Sdk/GregCompatBridge.cs)) redirects **deprecated** hook spellings (including older documentation-style names) to the current **`greg.*`** string — see also `legacy` entries in **`greg_hooks.json`**.
|
**`GregCompatBridge`** ([source](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/Sdk/GregCompatBridge.cs)) redirects **deprecated** hook spellings (including older documentation-style names) to the current **`greg.*`** string — see also `legacy` entries in **`greg_hooks.json`**.
|
||||||
|
|
||||||
**Policy**
|
**Policy**
|
||||||
|
|
||||||
|
|||||||
@@ -15,8 +15,8 @@ The old table generated from **`HookNames.cs`** has been **removed**. Runtime ma
|
|||||||
|
|
||||||
| Topic | Where |
|
| Topic | Where |
|
||||||
|-------|--------|
|
|-------|--------|
|
||||||
| **EventId → `greg.*` (FFI / native pipeline)** | [greg hooks catalog](./greg-hooks-catalog.md) — generated from `gregCore/framework/src/Sdk/GregNativeEventHooks.cs` and `EventIds` in `EventDispatcher.cs` |
|
| **EventId → `greg.*` (FFI / native pipeline)** | [greg hooks catalog](./greg-hooks-catalog.md) — generated from `gregCore/framework/Sdk/GregNativeEventHooks.cs` and `EventIds` in `EventDispatcher.cs` |
|
||||||
| **Il2Cpp hook registry (JSON)** | `greg_hooks.json` at repo root; copied next to `FrikaModdingFramework.dll` on build |
|
| **Il2Cpp hook registry (JSON)** | `greg_hooks.json` at repo root; copied next to `gregCore.dll` on build |
|
||||||
| **`FMF.*` documentation policy** | [FMF hook naming](./fmf-hook-naming.md) — naming for new *documentation* IDs (not byte-for-byte every runtime string) |
|
| **`FMF.*` documentation policy** | [FMF hook naming](./fmf-hook-naming.md) — naming for new *documentation* IDs (not byte-for-byte every runtime string) |
|
||||||
|
|
||||||
## Regenerate the wiki table
|
## Regenerate the wiki table
|
||||||
|
|||||||
@@ -21,22 +21,31 @@ greg.<DOMAIN>.<Action>
|
|||||||
|
|
||||||
In Mods vorzugsweise **`GregHookName.Create(GregDomain.*, "Action")`** oder Konstanten aus **`GregNativeEventHooks`** verwenden.
|
In Mods vorzugsweise **`GregHookName.Create(GregDomain.*, "Action")`** oder Konstanten aus **`GregNativeEventHooks`** verwenden.
|
||||||
|
|
||||||
|
### Lua-Zugriff auf dieselben Hooks
|
||||||
|
|
||||||
|
Lua-Skripte (MoonSharp, **`greg.*`**) können dieselben **`greg.*`**-Strings nutzen:
|
||||||
|
|
||||||
|
- **`greg.on(hookName, fn)`** — Callback am **`GregEventDispatcher`** (beliebige registrierte **`greg.*`**-Events).
|
||||||
|
- **`greg.hook.before(hookName, fn)`** / **`greg.hook.after(hookName, fn)`** — Harmony-Prefix bzw. -Postfix über den HookBinder (Patches parallel zur Registry).
|
||||||
|
|
||||||
|
Details zum Laufzeitmodell, Payloads und Katalog: [Greg hooks & event runtime](/wiki/framework/greg-hooks-and-events). API-Tabellen: [Language Bridges README](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/ModLoader/LanguageBridges/README.md).
|
||||||
|
|
||||||
## Registry-Datei `greg_hooks.json`
|
## Registry-Datei `greg_hooks.json`
|
||||||
|
|
||||||
| Ort | Rolle |
|
| Ort | Rolle |
|
||||||
|-----|--------|
|
|-----|--------|
|
||||||
| **Repo-Root** `greg_hooks.json` | Eincheckter Katalog (`name`, `patchTarget`, `strategy`, `payloadSchema`, optional `legacy`). |
|
| **Repo-Root** `greg_hooks.json` | Eincheckter Katalog (`name`, `patchTarget`, `strategy`, `payloadSchema`, optional `legacy`). |
|
||||||
| **Neben `FrikaModdingFramework.dll`** | Build-Kopie für **`GregCompatBridge`**. |
|
| **Neben `gregCore.dll`** | Build-Kopie für **`GregCompatBridge`**. |
|
||||||
|
|
||||||
## Code-Layout (gregFramework-Repo)
|
## Code-Layout (gregFramework-Repo)
|
||||||
|
|
||||||
| Pfad | Zweck |
|
| Pfad | Zweck |
|
||||||
|------|--------|
|
|------|--------|
|
||||||
| **`gregCore/framework/src/Sdk/`** | **`gregFramework.Core`**: `GregEventDispatcher`, `GregHookName`, `GregDomain`, `GregPayload`, `GregCompatBridge`, **`GregNativeEventHooks`** |
|
| **`gregCore/framework/Sdk/`** | **`gregFramework.Core`**: `GregEventDispatcher`, `GregHookName`, `GregDomain`, `GregPayload`, `GregCompatBridge`, **`GregNativeEventHooks`** |
|
||||||
| **`gregCore/framework/src/ModLoader/`** | `EventDispatcher`, `HarmonyPatches`, FFI, `GregHookIntegration`, Services |
|
| **`gregCore/framework/ModLoader/`** | `EventDispatcher`, `HarmonyPatches`, FFI, `GregHookIntegration`, Services |
|
||||||
| **`gregCore/framework/harmony/`** | Optional: generierte Domain-Harmony-Klassen (Skript **`Generate-GregHooksFromIl2CppDump.ps1`**) |
|
| **`gregCore/framework/harmony/`** | Optional: generierte Domain-Harmony-Klassen (Skript **`Generate-GregHooksFromIl2CppDump.ps1`**) |
|
||||||
|
|
||||||
Das Projekt **`gregCore/framework/FrikaMF.csproj`** fasst diese Quellen zusammen; Harmony erkennt alle `[HarmonyPatch]`-Typen in der Assembly.
|
Das Projekt **`gregCore/framework/gregCore.csproj`** fasst diese Quellen zusammen; Harmony erkennt alle `[HarmonyPatch]`-Typen in der Assembly.
|
||||||
|
|
||||||
## Regeneration
|
## Regeneration
|
||||||
|
|
||||||
@@ -44,12 +53,12 @@ Das Projekt **`gregCore/framework/FrikaMF.csproj`** fasst diese Quellen zusammen
|
|||||||
pwsh -NoProfile -File gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1
|
pwsh -NoProfile -File gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1
|
||||||
```
|
```
|
||||||
|
|
||||||
Anschließend **FrikaMF** neu bauen.
|
Anschließend **gregCore** neu bauen.
|
||||||
|
|
||||||
### Generator (Kurz)
|
### Generator (Kurz)
|
||||||
|
|
||||||
- Emittiert Postfix-Stubs mit **`GregEventDispatcher.Emit`**, filtert häufige Unity-Loops und Lärm.
|
- Emittiert Postfix-Stubs mit **`GregEventDispatcher.Emit`**, filtert häufige Unity-Loops und Lärm.
|
||||||
- **Harmony-Ausschluss:** Das Skript wertet **`framework/src/ModLoader/HarmonyPatches.cs`** aus, damit z. B. **`Player.UpdateCoin`** nicht doppelt generiert wird (Hand-Patch + **`InvokeCancelable`** / **`GregHookIntegration`**).
|
- **Harmony-Ausschluss:** Das Skript wertet **`framework/ModLoader/HarmonyPatches.cs`** aus, damit z. B. **`Player.UpdateCoin`** nicht doppelt generiert wird (Hand-Patch + **`InvokeCancelable`** / **`GregHookIntegration`**).
|
||||||
|
|
||||||
## Mod-Autor:innen
|
## Mod-Autor:innen
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FMF.JoniMLCompatMod.dll"
|
dllName="FMF.JoniMLCompatMod.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Mod"
|
category="Mod"
|
||||||
dependencies={['MelonLoader']}
|
dependencies={['MelonLoader']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FFM.Plugin.AssetExporter.dll"
|
dllName="FFM.Plugin.AssetExporter.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Plugin"
|
category="Plugin"
|
||||||
dependencies={['MelonLoader', 'FrikaMF']}
|
dependencies={['MelonLoader', 'gregCore']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
description="Provides export-focused tooling for asset-related workflows in Data Center modding pipelines."
|
description="Provides export-focused tooling for asset-related workflows in Data Center modding pipelines."
|
||||||
banner="Asset exporter plugin release"
|
banner="Asset exporter plugin release"
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FFM.Plugin.Multiplayer.dll"
|
dllName="FFM.Plugin.Multiplayer.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Plugin"
|
category="Plugin"
|
||||||
dependencies={['MelonLoader', 'FrikaMF']}
|
dependencies={['MelonLoader', 'gregCore']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
description="Contains multiplayer-oriented plugin functionality for FrikaMF ecosystems."
|
description="Contains multiplayer-oriented plugin functionality for gregCore ecosystems."
|
||||||
banner="Multiplayer plugin release"
|
banner="Multiplayer plugin release"
|
||||||
releaseNotesPath="/wiki/plugins/ffm-plugin-multiplayer"
|
releaseNotesPath="/wiki/plugins/ffm-plugin-multiplayer"
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FFM.Plugin.PlayerModels.dll"
|
dllName="FFM.Plugin.PlayerModels.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Plugin"
|
category="Plugin"
|
||||||
dependencies={['MelonLoader', 'FrikaMF']}
|
dependencies={['MelonLoader', 'gregCore']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
description="Extends player model handling and related rendering/gameplay presentation behavior."
|
description="Extends player model handling and related rendering/gameplay presentation behavior."
|
||||||
banner="Player models plugin release"
|
banner="Player models plugin release"
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FFM.Plugin.Sysadmin.dll"
|
dllName="FFM.Plugin.Sysadmin.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Plugin"
|
category="Plugin"
|
||||||
dependencies={['MelonLoader', 'FrikaMF']}
|
dependencies={['MelonLoader', 'gregCore']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
description="Provides sysadmin-focused controls and quality-of-life command utilities."
|
description="Provides sysadmin-focused controls and quality-of-life command utilities."
|
||||||
banner="Sysadmin plugin release"
|
banner="Sysadmin plugin release"
|
||||||
|
|||||||
@@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FFM.Plugin.WebUIBridge.dll"
|
dllName="FFM.Plugin.WebUIBridge.dll"
|
||||||
releaseReady={false}
|
releaseReady={false}
|
||||||
version="NotReleasedYet"
|
version="NotReleasedYet"
|
||||||
author="mleem97 / FrikaMF Community"
|
author="mleem97 / gregCore Community"
|
||||||
category="Plugin"
|
category="Plugin"
|
||||||
dependencies={['MelonLoader', 'FrikaMF']}
|
dependencies={['MelonLoader', 'gregCore']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
description="Bridges runtime data to web interfaces for dashboards and remote overlays."
|
description="Bridges runtime data to web interfaces for dashboards and remote overlays."
|
||||||
banner="Web UI bridge plugin release"
|
banner="Web UI bridge plugin release"
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage';
|
|||||||
dllName="FMF.ModPathRedirector.dll"
|
dllName="FMF.ModPathRedirector.dll"
|
||||||
releaseReady={true}
|
releaseReady={true}
|
||||||
version="1.5.0"
|
version="1.5.0"
|
||||||
author="DataCenterExporter / FrikaMF Community"
|
author="DataCenterExporter / gregCore Community"
|
||||||
category="MelonLoader plugin"
|
category="MelonLoader plugin"
|
||||||
dependencies={['MelonLoader', 'Steam (client)', 'Data Center']}
|
dependencies={['MelonLoader', 'Steam (client)', 'Data Center']}
|
||||||
codeLanguages={['C#']}
|
codeLanguages={['C#']}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Authoritative reference material for the framework and documentation site.
|
|||||||
|
|
||||||
- [Wiki mapping](/wiki/reference/wiki-mapping) — how paths line up across systems.
|
- [Wiki mapping](/wiki/reference/wiki-mapping) — how paths line up across systems.
|
||||||
- [Mod store vision](/wiki/reference/mod-store-vision) — product direction notes.
|
- [Mod store vision](/wiki/reference/mod-store-vision) — product direction notes.
|
||||||
- [Modding language (C# only)](/wiki/reference/modding-language-requirement) — mods, plugins, extensions: **C#** only.
|
- [Modding language support](/wiki/reference/modding-language-requirement) — mods, plugins, extensions: **C#** only.
|
||||||
- [FMF hook naming](/wiki/reference/fmf-hook-naming) — conventions for hook identifiers.
|
- [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.
|
- [FMF hooks catalog](/wiki/reference/fmf-hooks-catalog) — generated listing from framework sources.
|
||||||
- [greg hooks registry (IL2CPP)](/wiki/reference/greg-hooks-registry) — `greg.*` Harmony hooks, `greg_hooks.json`, codegen from Il2Cpp unpack.
|
- [greg hooks registry (IL2CPP)](/wiki/reference/greg-hooks-registry) — `greg.*` Harmony hooks, `greg_hooks.json`, codegen from Il2Cpp unpack.
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ The **gregFramework** folder groups several repositories (split layout). Use thi
|
|||||||
|
|
||||||
| Area | Folder | Role |
|
| Area | Folder | Role |
|
||||||
|------|--------|------|
|
|------|--------|------|
|
||||||
| **Framework core** | `gregCore/` | MelonLoader host: **`gregCore/FrikaMF.sln`** / **`gregCore/framework/FrikaMF.csproj`**, templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors |
|
| **Framework core** | `gregCore/` | MelonLoader host: **`gregCore/gregCore.sln`** / **`gregCore/framework/gregCore.csproj`** → runtime **`gregCore.dll`**; **`framework/ModLoader/LanguageBridges/`** (incl. **`LuaModules/`** for Lua `greg.*`); templates, **`gregCore/mcp-server/`**, optional `gregCore/plugins/` mirrors |
|
||||||
| **Gameplay mods** | `gregMod.<Name>/` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) |
|
| **Gameplay mods** | `gregMod.<Name>/` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) |
|
||||||
| **Framework plugins** | `gregExt.<Name>/` | FFM plugins (`FFM.Plugin.*`) — **directly under `gregFramework/`** (the `gregExtensions/` umbrella is deprecated) |
|
| **Framework plugins** | `gregExt.<Name>/` | FFM plugins (`FFM.Plugin.*`) — **directly under `gregFramework/`** (the `gregExtensions/` umbrella is deprecated) |
|
||||||
| **GregModManager (MAUI)** | `gregModmanager/` | **Gregtools Modmanager** — UI for managing mods/plugins; `WorkshopUploader.csproj`, **`WorkshopUploader.exe`**. See [Architecture principles](/wiki/meta/system-architecture-principles). |
|
| **GregModManager (MAUI)** | `gregModmanager/` | **Gregtools Modmanager** — UI for managing mods/plugins; `WorkshopUploader.csproj`, **`WorkshopUploader.exe`**. See [Architecture principles](/wiki/meta/system-architecture-principles). |
|
||||||
@@ -23,6 +23,8 @@ The **gregFramework** folder groups several repositories (split layout). Use thi
|
|||||||
| **Examples** | `exGregFramework/` | Example / bootstrap layout |
|
| **Examples** | `exGregFramework/` | Example / bootstrap layout |
|
||||||
| **Helper** | `siblingRepos/` | Scripts to clone related repos |
|
| **Helper** | `siblingRepos/` | Scripts to clone related repos |
|
||||||
|
|
||||||
**Rust / native FFI:** implementiert im **Framework-Core** (`gregCore/framework/src/ModLoader/FfiBridge.cs`, zusammen mit `Core.cs`).
|
**Rust / native FFI:** implementiert im **Framework-Core** (`gregCore/framework/ModLoader/FfiBridge.cs`, zusammen mit `Core.cs`).
|
||||||
|
|
||||||
|
**Lua script mods (in-game):** nach Build/Install unter **`Data Center/Mods/ScriptMods/lua/`** (Modulordner mit `.lua`-Dateien; siehe [Language Bridges README](https://github.com/mleem97/gregFramework/blob/main/gregCore/framework/ModLoader/LanguageBridges/README.md)).
|
||||||
|
|
||||||
**Detailed inventory** (paths, `.csproj`, hooks): [Repository inventory](../contributors/repo-inventory).
|
**Detailed inventory** (paths, `.csproj`, hooks): [Repository inventory](../contributors/repo-inventory).
|
||||||
|
|||||||
Reference in New Issue
Block a user