diff --git a/README.md b/README.md index 1dd7c31..2b2b328 100644 --- a/README.md +++ b/README.md @@ -9,39 +9,72 @@ Because existing mod managers (Mod Organizer 2 / Fluorine) have problems on Linu - **FUSE VFS** blocks file access and causes crashes - **Wine prefix** management is fragile and complex -Neon Mod Manager takes a simpler approach: **directly manage files in `archive/pc/mod/`**. No VFS, no staging, no REDmod, no FUSE. +Neon Mod Manager takes a simpler approach: **directly manage files in the game directory**. No VFS, no staging, no REDmod, no FUSE. ## Features +### v0.2 — Current + | Feature | How it works | |---|---| | **Enable/Disable Mods** | Renames `.archive` ↔ `.archive.disabled` — no staging, no VFS | | **Load Order** | Numeric filename prefixes (`000_`, `010_`, `020_`...) — higher number = loaded later = overrides earlier | -| **Add Mods** | Copy `.archive` files directly to mod directory | -| **Conflict Detection** | Scans for duplicate file patterns across enabled mods | +| **Add Mods** | Copy files directly, or drag & drop onto the window | +| **Archive Parsing** | Reads internal file paths from `.archive` files (RDAR format) | +| **Deep Conflict Scan** | Compares internal file paths across all enabled mods — finds *real* conflicts, not just name matches | +| **Quick Conflict Scan** | Fast name-based conflict detection | +| **Script Mod Support** | Manages redscript, TweakXL, CET, red4ext, ArchiveXL mods | +| **Auto-Extract Downloads** | `.7z` / `.zip` / `.rar` files are extracted and contents installed to correct paths automatically | +| **Drag & Drop** | Drop mod files (.archive, .zip, .7z) onto the window to install | +| **Internal File Viewer** | Right-click a mod → "Show Internal Files" to see what's inside the .archive | | **Profiles** | Save/load mod configurations (e.g. "NSFW", "Vanilla+", "Minimal") | -| **Nexus Mods Integration** | Paste `nxm://` URLs to download, or register as browser protocol handler | -| **Drag & Drop** | Drop `.archive` files onto the window to install | +| **Nexus Mods Integration** | Paste `nxm://` URLs to download + auto-install, or register as browser protocol handler | | **No Wine needed** | Pure Python + Qt, runs natively on Linux | +### Auto-Extract Install Paths + +When you add a `.zip` or `.7z` mod, files are automatically routed to the correct location: + +| File Type | Destination | Mod Framework | +|---|---|---| +| `.archive` | `archive/pc/mod/` | Base game textures/meshes | +| `.xl` | `archive/pc/mod/` | ArchiveXL | +| `.yaml` / `.yml` | `r6/tweaks/` | TweakXL | +| `.reds` | `r6/scripts/` | redscript | +| `.dll` | `red4ext/plugins//` | red4ext | +| `.lua` | `bin/x64/plugins/cyber_engine_tweaks/mods//` | Cyber Engine Tweaks | +| `.ini` | `engine/config/` | Engine configuration | + +### Script Mods Tab + +The **📜 Script Mods** tab automatically scans your game directory and shows all installed script-based mods, grouped by type: + +- 🔴 **REDSCRIPT** — `.reds` files in `r6/scripts/` +- ⚙️ **TWEAKXL** — `.yaml` files in `r6/tweaks/` +- 🔧 **CET** — Lua mods in `bin/x64/plugins/cyber_engine_tweaks/mods/` +- 📦 **RED4EXT** — `.dll` plugins in `red4ext/plugins/` +- 🗂️ **ARCHIVEXL** — `.xl` files in `archive/pc/mod/` + ## Installation ### Prerequisites ```bash # Arch Linux / EndeavourOS -sudo pacman -S python-pyqt6 +sudo pacman -S python-pyqt6 p7zip unrar # Ubuntu / Debian -sudo apt install python3-pyqt6 +sudo apt install python3-pyqt6 p7zip unrar # Fedora -sudo dnf install python3-pyqt6 +sudo dnf install python3-pyqt6 p7zip unrar -# Or via pip +# Or via pip (PyQt6 only) pip install PyQt6 ``` +> **Note:** `p7zip` and `unrar` are needed for auto-extracting `.7z` and `.rar` downloads. The Settings tab shows which tools are installed. + ### Download ```bash @@ -63,16 +96,16 @@ python3 mod_manager.py ### Adding Mods -1. Click **➕ Add Mod** and select `.archive` files, **OR** -2. Drag & drop `.archive` files onto the window, **OR** -3. Download from Nexus Mods (see below) +1. Click **➕ Add Mod** and select files (`.archive`, `.zip`, `.7z`, `.rar`, `.yaml`, `.reds`, `.xl`), **OR** +2. **Drag & drop** mod files onto the window, **OR** +3. Download from **Nexus Mods** (see below) ### Load Order - Mods are sorted by numeric prefix: `000_` loads first, `999_` loads last -- Later mods **override** earlier ones (same texture/file = last one wins) +- Later mods **override** earlier ones (same internal file = last one wins) - Click **🔢 Auto-Sort** to auto-assign prefixes based on current list order -- Right-click a mod → **Move Up/Down** to reorder +- Right-click a mod → **Move Up/Down** to reorder manually ### Enabling / Disabling @@ -80,6 +113,19 @@ python3 mod_manager.py - **Enable All / Disable All** buttons for bulk actions - Disabled mods get `.archive.disabled` extension (not deleted!) +### Conflict Detection + +- **⚡ Quick Scan** — fast name-based check for duplicate mod names +- **🔍 Deep Scan** — parses all `.archive` files and compares internal file paths + - Shows which internal files (textures, meshes, etc.) are overridden by multiple mods + - Files in 3+ mods are highlighted red, 2 mods in orange + - Progress bar shows scan status + +### Viewing Internal Files + +- Right-click any mod → **📋 Show Internal Files** +- Shows version, file count, and up to 50 internal file paths from the .archive + ### Profiles 1. Set up your mods the way you want them @@ -91,21 +137,24 @@ python3 mod_manager.py 1. Get your API key from [Nexus Mods](https://www.nexusmods.com/users/myaccount?tab=api%20keys) 2. Go to **🌐 Nexus Mods** tab and paste your key -3. **Option A:** Paste `nxm://` URLs manually and click Download -4. **Option B:** Click **🔗 Register nxm:// Protocol Handler** — then clicking "Download" on Nexus Mods will automatically send the mod to Neon Mod Manager +3. **Option A:** Paste `nxm://` URLs manually and click **Download & Install** + - Downloads the mod, auto-extracts if needed, and installs to correct paths +4. **Option B:** Click **🔗 Register nxm:// Protocol Handler** + - Then clicking "Download" on Nexus Mods website automatically sends the mod to Neon Mod Manager + - Downloads and installs silently in the background ## How It Works (Technical) ### No VFS / No Staging -Unlike MO2/Fluorine which use a virtual filesystem (FUSE on Linux), Neon Mod Manager copies files directly to the game's `archive/pc/mod/` directory. This avoids: +Unlike MO2/Fluorine which use a virtual filesystem (FUSE on Linux), Neon Mod Manager copies files directly to the game directory. This avoids: - FUSE mount permission issues - REDmod deployment failures - Wine prefix corruption ### Load Order via Filename -Cyberpunk 2077 loads `.archive` files in alphabetical order. Neon Mod Manager uses numeric prefixes to control this: +Cyberpunk 2077 loads `.archive` files in alphabetical order. Neon Mod Manager uses numeric prefixes: ``` 000_MyBodyMod.archive → loads first 010_MyTextureMod.archive → loads second @@ -114,12 +163,30 @@ Cyberpunk 2077 loads `.archive` files in alphabetical order. Neon Mod Manager us ### Enable/Disable -Instead of moving files in/out of a staging directory, mods are renamed: +Mods are renamed in-place: - **Enable:** `MyMod.archive.disabled` → `MyMod.archive` - **Disable:** `MyMod.archive` → `MyMod.archive.disabled` The game ignores `.disabled` files completely. +### Archive Parsing + +`.archive` files use the RDAR format: +- Magic: `RDAR` (4 bytes) +- Version (uint32) +- File table offset (uint64) +- File count (uint32) + +The file table contains entries with hash, offset, size, and null-terminated UTF-8 path strings. Neon Mod Manager reads these to detect which internal files (textures, meshes) are overridden by multiple mods. + +### Auto-Extract + +When a `.zip` or `.7z` is added: +1. File is extracted to `/tmp/neon-mod-extract/` +2. Files are scanned and routed to correct game paths based on extension +3. Directory structure from the archive is preserved (e.g. `r6/scripts/MyMod/` stays intact) +4. Temporary extraction directory is cleaned up + ## Configuration Config is stored at `~/.config/neon-mod-manager/config.json`: @@ -141,10 +208,12 @@ MIT — do whatever you want. ## Roadmap -- [ ] Archive file parsing (read internal file list for real conflict detection) +- [x] ~~Archive file parsing (read internal file list for real conflict detection)~~ ✅ v0.2 +- [x] ~~REDmod script mod support (r6/tweaks)~~ ✅ v0.2 +- [x] ~~Auto-extract `.7z` / `.zip` downloads~~ ✅ v0.2 - [ ] Nexus Mods search (browse mods without leaving the app) - [ ] Mod update detection (compare versions) -- [ ] REDmod script mod support (r6/tweaks) -- [ ] Auto-extract `.7z` / `.zip` downloads - [ ] Mod categories and tags -- [ ] Dark/light theme switcher \ No newline at end of file +- [ ] Dark/light theme switcher +- [ ] Backup/restore vanilla files +- [ ] Mod dependency checker \ No newline at end of file