Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
5b57e0c39b
|
|||
|
e36994be55
|
72
README.md
72
README.md
@@ -1,3 +1,73 @@
|
||||
# SeaLoader
|
||||
|
||||
A Modloader based off of the workshop
|
||||
SeaLoader is a minimal, dark-themed helper app for Sea Power that fetches a scenario’s required Steam Workshop mods, resolves names, checks for transitive dependencies, and enables matching mods in your `usersettings.ini`. It also supports subscribing to missing mods, scanning the Steam Workshop folder for installed content, and self-updating.
|
||||
|
||||
## Features
|
||||
- Fetch required mods from a Workshop URL and resolve their names
|
||||
- Recursive dependency expansion: also fetches each required mod’s own requirements
|
||||
- Two-pane UI:
|
||||
- Installed Mods (from Steam Workshop folder) with status: Enabled, Disabled, or Disabled (Not in INI)
|
||||
- Scenario Required Mods with Installed/Missing status
|
||||
- Enable Matching Mods: writes to `[LoadOrder]` and appends missing workshop IDs as new `ModNDirectory=<id>,True`
|
||||
- Subscribe Missing Mods: opens Steam deep links per mod; step-by-step flow with remaining count
|
||||
- Refresh: reload Installed Mods and re-fetch Required Mods (if URL provided)
|
||||
- Guided flashing to lead the user through steps (URL → Fetch → Subscribe/Refresh → Enable)
|
||||
- Game Path persistence: remembers the Steam game path next to `usersettings.ini`
|
||||
- Version display and update check (Gitea API + RSS fallback), with clickable link
|
||||
- Auto-update install (EXE only): download zip, replace EXE safely, relaunch
|
||||
|
||||
## Requirements
|
||||
- Windows 10+
|
||||
- Python 3.10+ (for running from source) or the packaged EXE
|
||||
- Steam client installed and logged in (for Subscribe Missing Mods)
|
||||
|
||||
## Run from source
|
||||
```bash
|
||||
python -m pip install -r requirements.txt
|
||||
python sealoader_gui.py
|
||||
```
|
||||
|
||||
## Usage
|
||||
1. Game Path: Click Browse and select your Sea Power install folder (e.g., `.../steamapps/common/Sea Power`).
|
||||
- If previously saved, SeaLoader loads it automatically on start.
|
||||
2. Paste a Workshop URL and click Fetch Required Mods.
|
||||
- The right list shows all required Workshop IDs and names, including transitive dependencies.
|
||||
3. If some are Missing:
|
||||
- Click Subscribe Missing Mods. A per-mod dialog will open; it shows how many remain.
|
||||
- After subscribing, click Refresh to reload Installed Mods and re-fetch required.
|
||||
4. Click Enable Matching Mods to enable all installed required mods.
|
||||
- A backup `usersettings.ini.bak` is created.
|
||||
|
||||
Statuses in Installed Mods:
|
||||
- Enabled: Present in INI and enabled
|
||||
- Disabled: Present in INI but disabled
|
||||
- Disabled (Not in INI): Found in workshop folder but no INI entry yet (Enable adds it)
|
||||
|
||||
## Self-update
|
||||
- SeaLoader shows current and latest versions in the footer.
|
||||
- If a newer version exists, a modal dialog appears with options:
|
||||
- Download: opens the release page
|
||||
- Auto-Install (EXE only): downloads `SeaLoader_Windows_x64.zip`, replaces `SeaLoader.exe`, and relaunches
|
||||
- Latest version is discovered via Gitea API with RSS fallback: `releases.rss`.
|
||||
|
||||
## Build (Gitea Actions)
|
||||
- Workflow: `.gitea/workflows/release.yml`
|
||||
- On release: stamps `sealoader_version.py` with the tag, bundles PNGs, and builds onefile EXE via PyInstaller
|
||||
- Uploads `SeaLoader_Windows_x64.zip` as the release asset
|
||||
- Runner: Windows; steps use `powershell`
|
||||
|
||||
## Files
|
||||
- `sealoader_gui.py`: GUI application
|
||||
- `steam_required_ids.py`: Workshop scraping, ID resolution, recursive expansion
|
||||
- `sealoader_version.py`: version stamp used by the update checker
|
||||
- `requirements.txt`: dependencies (requests, beautifulsoup4)
|
||||
- `.gitea/workflows/release.yml`: release build pipeline
|
||||
|
||||
## Troubleshooting
|
||||
- Footer icons not visible in EXE: ensure `SeaLoader.png` and `hrsys.png` are present at build; the workflow includes them via `--add-data`.
|
||||
- Update checker says unavailable: RSS fallback is in place; ensure `SEALOADER_GITEA` and `SEALOADER_REPO` env vars are correct if using a mirror.
|
||||
- Subscribe Missing Mods not opening Steam: ensure Steam client is running and you’re signed in.
|
||||
- INI not updated: verify `usersettings.ini` path and that `[LoadOrder]` exists. SeaLoader will append new entries if needed.
|
||||
|
||||
## Credits
|
||||
Created by HudsonRiggs.Systems.
|
||||
@@ -13,7 +13,7 @@ from typing import Dict, List, Tuple
|
||||
import tkinter as tk
|
||||
from tkinter import messagebox, ttk, filedialog
|
||||
|
||||
from steam_required_ids import extract_required_item_ids, resolve_workshop_names, expand_required_ids_recursive
|
||||
from steam_required_ids import extract_required_item_ids, resolve_workshop_names
|
||||
from sealoader_version import __version__
|
||||
|
||||
|
||||
@@ -452,7 +452,7 @@ class SeaLoaderApp(tk.Tk):
|
||||
def task():
|
||||
try:
|
||||
base_ids = extract_required_item_ids(url)
|
||||
ids = expand_required_ids_recursive(base_ids)
|
||||
ids = base_ids
|
||||
# Reuse installed cache to reduce API calls
|
||||
names_map = {i: self.installed_names_map[i] for i in ids if i in self.installed_names_map}
|
||||
ids_to_lookup = [i for i in ids if i not in names_map]
|
||||
|
||||
Reference in New Issue
Block a user