diff --git a/docs/contributors/monorepo-target-layout.md b/docs/contributors/monorepo-target-layout.md index 3cf1899..eed54bd 100644 --- a/docs/contributors/monorepo-target-layout.md +++ b/docs/contributors/monorepo-target-layout.md @@ -13,7 +13,7 @@ The repository **stays one Git repo**. The goal is **clear boundaries** between | 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) | | `plugins/` | FFM plugins (`FFM.Plugin.*`) | | `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 | | **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 | ## 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] 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) diff --git a/docs/contributors/repo-inventory.md b/docs/contributors/repo-inventory.md index 45ad0b3..4e50162 100644 --- a/docs/contributors/repo-inventory.md +++ b/docs/contributors/repo-inventory.md @@ -15,7 +15,7 @@ These folders typically sit **next to each other** in a developer workspace (see | 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./` (directly under `gregFramework/`) | Standalone gameplay mods (`FMF.*` assemblies); **not** nested under a `gregMods/` umbrella | | **Extensions / framework plugins (split repos)** | `gregExt./` (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/` | @@ -32,7 +32,7 @@ These folders typically sit **next to each other** in a developer workspace (see | 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./` (e.g. `gregExt.AssetExporter/`) | | Plugins — optional mirrors | `gregCore/plugins/greg.Plugin.*` (und ältere `FFM.Plugin.*`-Spiegel je nach Branch) | | Mod sources (`FMF.*`) | `gregMod./` | @@ -45,19 +45,19 @@ Documentation is maintained in this repository under `docs/`; historical GitHub ## .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./`** (assembly `FFM.Plugin.*.dll`); duplicates under `gregCore/plugins/` for all-in-one builds. - **Mods:** **`gregMod./`** at workspace root (`FMF.*.csproj` names vary). - **GregModManager:** `gregModmanager/WorkshopUploader.csproj` (separate from the MelonLoader framework solution). ## 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. -## `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. @@ -85,15 +85,15 @@ Documentation is maintained in this repository under `docs/`; historical GitHub ## 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). -- **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) -- **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/`. -- **`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 diff --git a/docs/framework/greg-hooks-and-events.md b/docs/framework/greg-hooks-and-events.md index e25d952..e920528 100644 --- a/docs/framework/greg-hooks-and-events.md +++ b/docs/framework/greg-hooks-and-events.md @@ -6,7 +6,7 @@ description: greg.* hooks, GregEventDispatcher, GregNativeEventHooks, greg_hooks # 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 | |---------|------|----------------| @@ -21,20 +21,20 @@ New **documentation** identifiers still follow **`FMF..*`** — see [FMF | Path | Role | |------|------| | **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. ## `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. ## Native events (`EventIds`) -- **`EventIds` and `EventDispatcher`:** `gregCore/framework/src/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. +- **`EventIds` and `EventDispatcher`:** `gregCore/framework/ModLoader/EventDispatcher.cs` (numeric ids aligned with Rust). +- **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`). ## Lua event & hook subscriptions diff --git a/docs/getting-started.md b/docs/getting-started.md index 00619bf..b05374c 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -8,39 +8,62 @@ The workspace is **multi-repo**: several Git checkouts live **side by side** und | 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./`** | Gameplay mods (often `FMF.*` assemblies), **flat** next to `gregCore/` (umbrella **`gregMods/`** is deprecated) | | **`gregExt./`** | Framework plugins (`FFM.Plugin.*` / `greg.Plugin.*`), also flat (**`gregExtensions/`** deprecated) | | **`gregModmanager/`** | GregModManager / Workshop UI (`WorkshopUploader.csproj`) | | **`gregDataCenterExporter/`** | Exporter, templates, mirrors | | **`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 ```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. +### 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 | Topic | Where | |-------|--------| | **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) | | **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 1. Create **`gregMod./`** 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`, …). 4. Templates: **`gregCore/Templates/greg.BasedModTemplate/`** or mirrored templates under **`gregDataCenterExporter/Templates/`**. diff --git a/docs/guides/contributors/contributor-workshop.md b/docs/guides/contributors/contributor-workshop.md index 0130b25..553f3ad 100644 --- a/docs/guides/contributors/contributor-workshop.md +++ b/docs/guides/contributors/contributor-workshop.md @@ -26,7 +26,7 @@ Paths are relative to the **`gregFramework/`** workspace root (split repos clone | 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) | | `gregMod.*/` | Standalone gameplay mods (`FMF.*` assemblies) | | `gregModmanager/WorkshopUploader.csproj` | GregModManager MAUI app | @@ -38,7 +38,7 @@ Paths are relative to the **`gregFramework/`** workspace root (split repos clone ### Build everything (solution) ```bash -dotnet build gregCore/FrikaMF.sln -c Release +dotnet build gregCore/gregCore.sln -c Release ``` ### Build standalone mods (per split repo) @@ -65,7 +65,7 @@ Each mod/plugin gets its own folder under `/workshop/`: ├── FrikaModFramework/ │ ├── content/ │ │ └── Mods/ -│ │ └── FrikaModdingFramework.dll +│ │ └── gregCore.dll │ ├── metadata.json │ └── preview.png ├── FFM.Plugin.Multiplayer/ diff --git a/docs/guides/contributors/release.md b/docs/guides/contributors/release.md index cc1784d..961e5c0 100644 --- a/docs/guides/contributors/release.md +++ b/docs/guides/contributors/release.md @@ -18,7 +18,7 @@ The following components are built and packaged for Steam Workshop distribution: | 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 @@ -57,7 +57,7 @@ The following components are built and packaged for Steam Workshop distribution: ### Manual installation 1. Download the DLL from the Workshop or a release. -2. Framework: place `FrikaModdingFramework.dll` in `/Mods/`. +2. Framework: place `gregCore.dll` in `/Mods/`. 3. Plugins: place `FFM.Plugin.*.dll` in `/FMF/Plugins/`. 4. Mods: place `FMF.*.dll` in `/Mods/`. 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 Data Center/ ├── Mods/ -│ ├── FrikaModdingFramework.dll +│ ├── gregCore.dll │ ├── FMF.ConsoleInputGuard.dll │ ├── FMF.GregifyEmployees.dll │ ├── FMF.HexLabelMod.dll @@ -85,7 +85,7 @@ Data Center/ │ └── ModCfg/ └── workshop/ ├── FrikaModFramework/ - │ ├── content/Mods/FrikaModdingFramework.dll + │ ├── content/Mods/gregCore.dll │ └── metadata.json ├── FFM.Plugin.Multiplayer/ │ ├── 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 | 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) | diff --git a/docs/guides/mod-developers/greg-hooks-showcase.md b/docs/guides/mod-developers/greg-hooks-showcase.md index e8756f6..545f67b 100644 --- a/docs/guides/mod-developers/greg-hooks-showcase.md +++ b/docs/guides/mod-developers/greg-hooks-showcase.md @@ -18,7 +18,7 @@ Runtime names look like `greg..`. Always build them with `GregHo ## 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. diff --git a/docs/guides/players/enduser-workshop.md b/docs/guides/players/enduser-workshop.md index bd8c8b7..cafb318 100644 --- a/docs/guides/players/enduser-workshop.md +++ b/docs/guides/players/enduser-workshop.md @@ -98,7 +98,7 @@ If anything is missing, follow the instructions shown. ### Mod does not load in-game - Check `MelonLoader/Latest.log` in the game directory. -- Ensure `FrikaModdingFramework.dll` is in `/Mods/`. +- Ensure `gregCore.dll` is in `/Mods/`. - Verify the mod DLL is also in `/Mods/` or `/FMF/Plugins/`. ### Subscription does not appear diff --git a/docs/guides/players/newbies.md b/docs/guides/players/newbies.md index 040b82b..0d0fbed 100644 --- a/docs/guides/players/newbies.md +++ b/docs/guides/players/newbies.md @@ -6,13 +6,13 @@ slug: /audiences/newbies ## Goal -Get FrikaMF running safely and understand the minimum concepts. +Get gregCore 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. +2. Copy `gregCore.dll` into `Data Center/Mods`. +3. Add the mod that depends on gregCore. 4. Check `MelonLoader/Latest.log`. ## Read next diff --git a/docs/meta/Steam-Workshop-and-Tooling.md b/docs/meta/Steam-Workshop-and-Tooling.md index bea4df6..151de9d 100644 --- a/docs/meta/Steam-Workshop-and-Tooling.md +++ b/docs/meta/Steam-Workshop-and-Tooling.md @@ -35,5 +35,5 @@ Do not redistribute game binaries or extracted assets. Workshop packages should ## 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). diff --git a/docs/meta/devserver-betas.md b/docs/meta/devserver-betas.md index c8aa371..c9757ed 100644 --- a/docs/meta/devserver-betas.md +++ b/docs/meta/devserver-betas.md @@ -1,6 +1,6 @@ # 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 diff --git a/docs/meta/system-architecture-principles.md b/docs/meta/system-architecture-principles.md index 9702eb2..4728c19 100644 --- a/docs/meta/system-architecture-principles.md +++ b/docs/meta/system-architecture-principles.md @@ -17,7 +17,7 @@ Describe the runtime as a **layered system**, not a flat list of DLLs: | 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`). | -| **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./`**. | | **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./`**. | @@ -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. - **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). -- **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 diff --git a/docs/mods/framework.md b/docs/mods/framework.md index bd36e4f..4e3ab85 100644 --- a/docs/mods/framework.md +++ b/docs/mods/framework.md @@ -3,16 +3,16 @@ title: 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). -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 -- Event dispatch and stable event contracts -- Native bridge for Rust modules -- Shared game API abstractions for mod authors +- Event dispatch and stable event contracts (`greg.*`) +- Language bridges (C# direct, **Lua** via `LuaLanguageBridge`, **Rust** via `FFIBridge` / `RustLanguageBridgeAdapter`) +- Shared game API abstractions for mod authors (C# SDK and Lua `greg.*` modules) ## Core references diff --git a/docs/reference/fmf-hook-naming.md b/docs/reference/fmf-hook-naming.md index e812ae5..0a7163b 100644 --- a/docs/reference/fmf-hook-naming.md +++ b/docs/reference/fmf-hook-naming.md @@ -46,9 +46,9 @@ Harmony patches in **gregFramework** emit stable **`greg..`** st ## 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** diff --git a/docs/reference/fmf-hooks-catalog.md b/docs/reference/fmf-hooks-catalog.md index 1bc45cf..782d174 100644 --- a/docs/reference/fmf-hooks-catalog.md +++ b/docs/reference/fmf-hooks-catalog.md @@ -15,8 +15,8 @@ The old table generated from **`HookNames.cs`** has been **removed**. Runtime ma | 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` | -| **Il2Cpp hook registry (JSON)** | `greg_hooks.json` at repo root; copied next to `FrikaModdingFramework.dll` on build | +| **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 `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) | ## Regenerate the wiki table diff --git a/docs/reference/greg-hooks-registry.md b/docs/reference/greg-hooks-registry.md index a050d8c..4299970 100644 --- a/docs/reference/greg-hooks-registry.md +++ b/docs/reference/greg-hooks-registry.md @@ -21,22 +21,31 @@ greg.. 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` | Ort | Rolle | |-----|--------| | **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) | Pfad | Zweck | |------|--------| -| **`gregCore/framework/src/Sdk/`** | **`gregFramework.Core`**: `GregEventDispatcher`, `GregHookName`, `GregDomain`, `GregPayload`, `GregCompatBridge`, **`GregNativeEventHooks`** | -| **`gregCore/framework/src/ModLoader/`** | `EventDispatcher`, `HarmonyPatches`, FFI, `GregHookIntegration`, Services | +| **`gregCore/framework/Sdk/`** | **`gregFramework.Core`**: `GregEventDispatcher`, `GregHookName`, `GregDomain`, `GregPayload`, `GregCompatBridge`, **`GregNativeEventHooks`** | +| **`gregCore/framework/ModLoader/`** | `EventDispatcher`, `HarmonyPatches`, FFI, `GregHookIntegration`, Services | | **`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 @@ -44,12 +53,12 @@ Das Projekt **`gregCore/framework/FrikaMF.csproj`** fasst diese Quellen zusammen pwsh -NoProfile -File gregCore/scripts/Generate-GregHooksFromIl2CppDump.ps1 ``` -Anschließend **FrikaMF** neu bauen. +Anschließend **gregCore** neu bauen. ### Generator (Kurz) - 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 diff --git a/docs/releases/mods/fmf-lang-compat-bridge-release.mdx b/docs/releases/mods/fmf-lang-compat-bridge-release.mdx index 18bd809..8361df5 100644 --- a/docs/releases/mods/fmf-lang-compat-bridge-release.mdx +++ b/docs/releases/mods/fmf-lang-compat-bridge-release.mdx @@ -11,7 +11,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.JoniMLCompatMod.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Mod" dependencies={['MelonLoader']} codeLanguages={['C#']} diff --git a/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx b/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx index 2e94d47..db39513 100644 --- a/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx +++ b/docs/releases/plugins/ffm-plugin-asset-exporter-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.AssetExporter.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregCore']} codeLanguages={['C#']} description="Provides export-focused tooling for asset-related workflows in Data Center modding pipelines." banner="Asset exporter plugin release" diff --git a/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx b/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx index 52f9398..e14c53a 100644 --- a/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx +++ b/docs/releases/plugins/ffm-plugin-multiplayer-release.mdx @@ -11,11 +11,11 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.Multiplayer.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregCore']} codeLanguages={['C#']} - description="Contains multiplayer-oriented plugin functionality for FrikaMF ecosystems." + description="Contains multiplayer-oriented plugin functionality for gregCore ecosystems." banner="Multiplayer plugin release" releaseNotesPath="/wiki/plugins/ffm-plugin-multiplayer" /> diff --git a/docs/releases/plugins/ffm-plugin-player-models-release.mdx b/docs/releases/plugins/ffm-plugin-player-models-release.mdx index bf29b4b..463f1f7 100644 --- a/docs/releases/plugins/ffm-plugin-player-models-release.mdx +++ b/docs/releases/plugins/ffm-plugin-player-models-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.PlayerModels.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregCore']} codeLanguages={['C#']} description="Extends player model handling and related rendering/gameplay presentation behavior." banner="Player models plugin release" diff --git a/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx b/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx index 07d4759..7c2adac 100644 --- a/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx +++ b/docs/releases/plugins/ffm-plugin-sysadmin-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.Sysadmin.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregCore']} codeLanguages={['C#']} description="Provides sysadmin-focused controls and quality-of-life command utilities." banner="Sysadmin plugin release" diff --git a/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx b/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx index 4f35607..053c0b7 100644 --- a/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx +++ b/docs/releases/plugins/ffm-plugin-web-ui-bridge-release.mdx @@ -11,9 +11,9 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FFM.Plugin.WebUIBridge.dll" releaseReady={false} version="NotReleasedYet" - author="mleem97 / FrikaMF Community" + author="mleem97 / gregCore Community" category="Plugin" - dependencies={['MelonLoader', 'FrikaMF']} + dependencies={['MelonLoader', 'gregCore']} codeLanguages={['C#']} description="Bridges runtime data to web interfaces for dashboards and remote overlays." banner="Web UI bridge plugin release" diff --git a/docs/releases/plugins/fmf-modpathredirector-release.mdx b/docs/releases/plugins/fmf-modpathredirector-release.mdx index ac80c8a..a5a9dc5 100644 --- a/docs/releases/plugins/fmf-modpathredirector-release.mdx +++ b/docs/releases/plugins/fmf-modpathredirector-release.mdx @@ -12,7 +12,7 @@ import ModReleasePage from '@site/src/components/ModReleasePage'; dllName="FMF.ModPathRedirector.dll" releaseReady={true} version="1.5.0" - author="DataCenterExporter / FrikaMF Community" + author="DataCenterExporter / gregCore Community" category="MelonLoader plugin" dependencies={['MelonLoader', 'Steam (client)', 'Data Center']} codeLanguages={['C#']} diff --git a/docs/topics/reference/overview.md b/docs/topics/reference/overview.md index 2c7723e..7c47a0f 100644 --- a/docs/topics/reference/overview.md +++ b/docs/topics/reference/overview.md @@ -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. - [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 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. diff --git a/docs/workspace/index.mdx b/docs/workspace/index.mdx index 0694527..546d75e 100644 --- a/docs/workspace/index.mdx +++ b/docs/workspace/index.mdx @@ -10,7 +10,7 @@ The **gregFramework** folder groups several repositories (split layout). Use thi | 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./` | Standalone mods (`FMF.*`) — **directly under `gregFramework/`** (the `gregMods/` umbrella is deprecated) | | **Framework plugins** | `gregExt./` | 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). | @@ -23,6 +23,8 @@ The **gregFramework** folder groups several repositories (split layout). Use thi | **Examples** | `exGregFramework/` | Example / bootstrap layout | | **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).