# anosu/muvluvmod architecture

> Architecture diagram of the GitHub repository anosu/muvluvmod, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/anosu/muvluvmod
- Repository: https://github.com/anosu/muvluvmod

## Overview

MuvluvMod is a BepInEx plugin for the DMM Windows game client. On startup, the plugin initializes configuration and services, installs Harmony patches, and loads translations; patched game scenario and master-data paths apply those translations during play. Translation resources are manifest-checked and cached, while optional missing-scene reporting and update checks use remote services. Other patches provide the documented mosaic, skip-button, voice, and battle-skip controls. The README documents these capabilities; links for unsampled service internals are limited to what the tree and sampled callers support.

Main entry points: [`src/MuvluvMod/Core/Plugin.cs`](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Plugin.cs) (Plugin entry), [`src/MuvluvMod/Patches/PatchManager.cs`](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/PatchManager.cs) (Patch manager), [`src/MuvluvMod/Patches/TranslationPatch.cs`](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/TranslationPatch.cs) (Scenario translation), [`src/MuvluvMod/Services/TranslationCache.cs`](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationCache.cs) (Translation cache)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_startup["Plugin runtime"]
  node_plugin["Plugin entry<br/>[Plugin.cs]"]
  node_config["Configuration<br/>[Config.cs]"]
  node_hotkey["Hotkeys<br/>[Hotkey.cs]"]
  node_patchmgr["Patch manager<br/>[PatchManager.cs]"]
end

subgraph group_translation["Translation"]
  node_translationpatch["Scenario translation"]
  node_manager["Translation manager"]
  node_cache["Translation cache"]
  node_hash["Content hashing<br/>[TranslationHash.cs]"]
  node_master["Master-data translator"]
  node_font["Fallback font asset"]
  node_disk[("Translation files")]
end

subgraph group_gameplay["Gameplay patches"]
  node_enhancepatch["Gameplay enhancements<br/>[EnhancePatch.cs]"]
end

subgraph group_integrations["Remote services"]
  node_missingpatch["Scene request capture"]
  node_cdn(("Translation host"))
  node_reporter["Missing-scene reporter"]
  node_debugservice(("Missing-scene service"))
  node_update["Update checker<br/>[UpdateChecker.cs]"]
  node_updateservice(("Update service"))
end

node_player(("Player"))
node_game(("Game client"))

node_player -->|"starts"| node_game
node_game -->|"loads plugin"| node_plugin
node_plugin -->|"initializes"| node_config
node_plugin -->|"creates"| node_hotkey
node_plugin -->|"installs patches"| node_patchmgr
node_plugin -->|"initializes"| node_manager
node_plugin -->|"initializes"| node_reporter
node_plugin -.->|"checks updates"| node_update
node_config -->|"provides settings"| node_hotkey
node_config -->|"controls"| node_enhancepatch
node_patchmgr -->|"registers"| node_translationpatch
node_patchmgr -->|"registers"| node_enhancepatch
node_patchmgr -->|"registers"| node_missingpatch
node_game -->|"invokes hooks"| node_translationpatch
node_game -->|"invokes hooks"| node_enhancepatch
node_game -->|"invokes hooks"| node_missingpatch
node_translationpatch -->|"reads scene state"| node_patchmgr
node_translationpatch -->|"requests translations"| node_manager
node_translationpatch -->|"translates data"| node_master
node_manager -->|"loads resources"| node_cache
node_cache -->|"computes hashes"| node_hash
node_cache -->|"reads and writes"| node_disk
node_cache -->|"refreshes resources"| node_cdn
node_manager -->|"loads fallback font"| node_font
node_missingpatch -->|"submits scene URL"| node_reporter
node_reporter -.->|"loads list and submits"| node_debugservice
node_update -.->|"checks version"| node_updateservice

click node_plugin "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Plugin.cs"
click node_config "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Config.cs"
click node_hotkey "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Hotkey.cs"
click node_patchmgr "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/PatchManager.cs"
click node_translationpatch "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/TranslationPatch.cs"
click node_enhancepatch "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/EnhancePatch.cs"
click node_missingpatch "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/MissingScenePatch.cs"
click node_manager "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationManager.cs"
click node_cache "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationCache.cs"
click node_hash "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationHash.cs"
click node_master "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/MasterDataTranslator.cs"
click node_font "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationManager.cs"
click node_reporter "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/MissingSceneReporter.cs"
click node_update "https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/UpdateChecker.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_plugin,node_config,node_hotkey,node_patchmgr,node_game toneBlue
class node_translationpatch,node_manager,node_cache,node_hash,node_master,node_font,node_disk toneAmber
class node_enhancepatch toneMint
class node_missingpatch,node_cdn,node_reporter,node_debugservice,node_update,node_updateservice toneRose
class node_player toneIndigo
```

## Components

### Plugin runtime

- [Plugin entry](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Plugin.cs): `src/MuvluvMod/Core/Plugin.cs`
- [Configuration](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Config.cs): `src/MuvluvMod/Core/Config.cs`
- [Hotkeys](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Core/Hotkey.cs): `src/MuvluvMod/Core/Hotkey.cs`
- [Patch manager](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/PatchManager.cs): `src/MuvluvMod/Patches/PatchManager.cs`

### Translation

- [Scenario translation](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/TranslationPatch.cs): `src/MuvluvMod/Patches/TranslationPatch.cs`
- [Translation manager](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationManager.cs): `src/MuvluvMod/Services/TranslationManager.cs`
- [Translation cache](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationCache.cs): `src/MuvluvMod/Services/TranslationCache.cs`
- [Content hashing](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationHash.cs): `src/MuvluvMod/Services/TranslationHash.cs`
- [Master-data translator](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/MasterDataTranslator.cs): `src/MuvluvMod/Services/MasterDataTranslator.cs`
- [Fallback font asset](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/TranslationManager.cs): `src/MuvluvMod/Services/TranslationManager.cs`
- **Translation files**

### Gameplay patches

- [Gameplay enhancements](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/EnhancePatch.cs): `src/MuvluvMod/Patches/EnhancePatch.cs`

### Remote services

- [Scene request capture](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Patches/MissingScenePatch.cs): `src/MuvluvMod/Patches/MissingScenePatch.cs`
- **Translation host**
- [Missing-scene reporter](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/MissingSceneReporter.cs): `src/MuvluvMod/Services/MissingSceneReporter.cs`
- **Missing-scene service**
- [Update checker](https://github.com/anosu/muvluvmod/blob/main/src/MuvluvMod/Services/UpdateChecker.cs): `src/MuvluvMod/Services/UpdateChecker.cs`
- **Update service**

### Other components

- **Player**
- **Game client**

## Connections

- Player → Game client: starts
- Game client → Plugin entry: loads plugin
- Plugin entry → Configuration: initializes
- Plugin entry → Hotkeys: creates
- Plugin entry → Patch manager: installs patches
- Plugin entry → Translation manager: initializes
- Plugin entry → Missing-scene reporter: initializes
- Plugin entry → Update checker: checks updates
- Configuration → Hotkeys: provides settings
- Configuration → Gameplay enhancements: controls
- Patch manager → Scenario translation: registers
- Patch manager → Gameplay enhancements: registers
- Patch manager → Scene request capture: registers
- Game client → Scenario translation: invokes hooks
- Game client → Gameplay enhancements: invokes hooks
- Game client → Scene request capture: invokes hooks
- Scenario translation → Patch manager: reads scene state
- Scenario translation → Translation manager: requests translations
- Scenario translation → Master-data translator: translates data
- Translation manager → Translation cache: loads resources
- Translation cache → Content hashing: computes hashes
- Translation cache → Translation files: reads and writes
- Translation cache → Translation host: refreshes resources
- Translation manager → Fallback font asset: loads fallback font
- Scene request capture → Missing-scene reporter: submits scene URL
- Missing-scene reporter → Missing-scene service: loads list and submits
- Update checker → Update service: checks version
