Add mod development environment, docs, and example modlet
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# Lynda's 7D2D Mod Agent
|
||||
|
||||
## Project Context
|
||||
|
||||
This repository is for Lynda to build 7 Days to Die mods. The current target game version is **3.x**.
|
||||
|
||||
## Environment Summary
|
||||
|
||||
- **Username**: lynda
|
||||
- **IDE**: VS Code (installed, with Kilo Code extension)
|
||||
- **Git**: Installed and configured
|
||||
- **Repo**: `lyndas_mod` with origin remote pointing to Gitea server
|
||||
- **Game**: 7 Days to Die (Steam App ID: 251570)
|
||||
- **Mod Launcher**: 7D2DModLauncherV5 v5.1.8.2
|
||||
|
||||
## Paths
|
||||
|
||||
| Component | Path |
|
||||
|-----------|------|
|
||||
| Repo root | `C:\Users\lynda\Git\lyndas_mod` |
|
||||
| Steam install | `C:\Steam\steamapps\common\7 Days To Die` |
|
||||
| Mod launcher install | `C:\Program Files (x86)\7D2DModLauncherV5` |
|
||||
| Mod launcher config | `C:\Users\lynda\AppData\Roaming\7D2DModLauncher\ModLauncher.txt` |
|
||||
| Mod staging root | `C:\7D2D` |
|
||||
|
||||
## Existing Mods in Mod Launcher
|
||||
|
||||
### v1 Mods (installed under `C:\7D2D\v1\`)
|
||||
- Darkness Falls (v6.0.0.20) — `C:\7D2D\v1\Darkness_Falls\Darkness_Falls`
|
||||
- War of the Walkers (v1.x.x.x Stable) — `C:\7D2D\v1\War_of_the_Walkers\War_of_the_Walkers_v1.x.x.x_Stable`
|
||||
|
||||
### v2 Mods (installed under `C:\7D2D\v2\`)
|
||||
- Echoes from the Afterlife
|
||||
- Forsaken Trail
|
||||
- Greys Prophecy V1 Experimental
|
||||
- NordArmy XMAS UPDATE
|
||||
- Old West Migration (V1)
|
||||
- Ravenhearst (v10.4.1b1)
|
||||
- Tongo 2.0
|
||||
- VIKINGSMOD
|
||||
- War3zuk FarmLife 5.6
|
||||
- Welcome to Purgatory
|
||||
- Winterween
|
||||
- 5thDay
|
||||
- Asia Mod V1.1 Stable
|
||||
- Experimental Recipes v1.0+
|
||||
- The Wasteland
|
||||
- The Wasteland(Testing)
|
||||
|
||||
### Custom Mod
|
||||
- Asylum 2.5.4 — `C:\7D2D\Custom\Asylum_2.5.4`
|
||||
|
||||
## Available v3 Mods
|
||||
|
||||
The following v3 mods are available in the mod launcher (under `C:\7D2D\v3\`):
|
||||
- 7DVR
|
||||
- Aircraft Carrier Challenge High Seas V.3
|
||||
- Area 7 Challenge
|
||||
- Backpacker Challenge
|
||||
- Black Forrest
|
||||
- Destroyer of Dreams High Seas
|
||||
- Dishong Tower 2.5
|
||||
- District Zero
|
||||
- EndZ Remastered
|
||||
- NordArmy
|
||||
- Old West Migration
|
||||
- Outback Roadies
|
||||
- Preppocalypse
|
||||
- Project Praxis
|
||||
- VIKINGSMOD
|
||||
- Welcome to Purgatory
|
||||
- Wild West Mod
|
||||
|
||||
## Notes
|
||||
|
||||
- v3 mods are now available in the mod launcher.
|
||||
- The ModLauncher config has stale `SteamPaths` pointing to `e:\steam\steamapps\common\7 Days To Die\` but the actual Steam install is at `C:\Steam\steamapps\common\7 Days To Die`.
|
||||
- Game saves are stored in `C:\Users\lynda\AppData\Roaming\7DaysToDie\Saves\` for vanilla and within each mod's directory for modded play.
|
||||
- Mod backups are stored in `C:\7D2D\Saves\Backups\`.
|
||||
@@ -0,0 +1,33 @@
|
||||
# 7D2D Modding Commands
|
||||
|
||||
## Game Paths
|
||||
- Steam install: `C:\Steam\steamapps\common\7 Days To Die`
|
||||
- Mod staging: `C:\7D2D`
|
||||
- Mod launcher: `C:\Program Files (x86)\7D2DModLauncherV5\ModLauncherV5.exe`
|
||||
- Mod launcher config: `C:\Users\lynda\AppData\Roaming\7D2DModLauncher\ModLauncher.txt`
|
||||
|
||||
## Launching the Game
|
||||
1. Open `7D2DModLauncherV5` from Start Menu or run `C:\Program Files (x86)\7D2DModLauncherV5\ModLauncherV5.exe`
|
||||
2. Select desired mod/profile
|
||||
3. Click Play
|
||||
|
||||
## Mod Development Workflow
|
||||
|
||||
### Simple Modlets (vanilla folder)
|
||||
1. Create/update modlet files in `mods/` in this repo
|
||||
2. Run `.kilo/scripts/modlet.ps1 -Action enable` to copy modlets to the Steam `Mods` folder
|
||||
3. Launch the game and start a new save to test
|
||||
4. Run `.kilo/scripts/modlet.ps1 -Action disable` to remove modlets when done
|
||||
5. Run `.kilo/scripts/modlet.ps1 -Action sync` to update already-enabled modlets after making changes
|
||||
|
||||
### Full Mods (mod launcher)
|
||||
1. Create/update mod files in this repo
|
||||
2. Copy or sync modified files to the mod launcher's game copy under `C:\7D2D\v3\<mod_name>\`
|
||||
3. Launch via Mod Launcher to test
|
||||
|
||||
## Current Installed Mods
|
||||
See `ENVIRONMENT.md` for the full list of installed mods and their paths.
|
||||
|
||||
## Notes
|
||||
- Current target version is 3.x
|
||||
- v3 mods are available in the mod launcher under `C:\7D2D\v3\`
|
||||
@@ -0,0 +1,111 @@
|
||||
# Enable/disable modlets for vanilla 7 Days to Die testing
|
||||
# Copies modlets to/from the Steam Mods folder
|
||||
|
||||
param(
|
||||
[Parameter(Mandatory=$true)]
|
||||
[ValidateSet("enable", "disable", "status", "sync")]
|
||||
[string]$Action
|
||||
)
|
||||
|
||||
$steamModsPath = "C:\Steam\steamapps\common\7 Days To Die\Mods"
|
||||
$repoModsPath = "C:\Users\lynda\Git\lyndas_mod\mods"
|
||||
|
||||
if (-not (Test-Path $steamModsPath)) {
|
||||
Write-Error "Steam Mods folder not found: $steamModsPath"
|
||||
exit 1
|
||||
}
|
||||
|
||||
if (-not (Test-Path $repoModsPath)) {
|
||||
Write-Error "Repo mods folder not found: $repoModsPath"
|
||||
exit 1
|
||||
}
|
||||
|
||||
function Get-Modlets {
|
||||
Get-ChildItem -Path $repoModsPath -Directory | Where-Object { $_.Name -ne "README.md" }
|
||||
}
|
||||
|
||||
function Enable-Modlets {
|
||||
$modlets = Get-Modlets
|
||||
if ($modlets.Count -eq 0) {
|
||||
Write-Host "No modlets found in $repoModsPath"
|
||||
return
|
||||
}
|
||||
|
||||
foreach ($modlet in $modlets) {
|
||||
$targetPath = Join-Path $steamModsPath $modlet.Name
|
||||
$sourcePath = $modlet.FullName
|
||||
|
||||
if (Test-Path $targetPath) {
|
||||
Write-Warning "Already exists (skipping): $targetPath"
|
||||
continue
|
||||
}
|
||||
|
||||
Copy-Item -Path $sourcePath -Destination $targetPath -Recurse -Force
|
||||
Write-Host "Enabled: $($modlet.Name)"
|
||||
}
|
||||
}
|
||||
|
||||
function Disable-Modlets {
|
||||
$modlets = Get-Modlets
|
||||
if ($modlets.Count -eq 0) {
|
||||
Write-Host "No modlets found in $repoModsPath"
|
||||
return
|
||||
}
|
||||
|
||||
foreach ($modlet in $modlets) {
|
||||
$targetPath = Join-Path $steamModsPath $modlet.Name
|
||||
|
||||
if (-not (Test-Path $targetPath)) {
|
||||
Write-Warning "Not found (skipping): $targetPath"
|
||||
continue
|
||||
}
|
||||
|
||||
Remove-Item -LiteralPath $targetPath -Recurse -Force
|
||||
Write-Host "Disabled: $($modlet.Name)"
|
||||
}
|
||||
}
|
||||
|
||||
function Sync-Modlets {
|
||||
$modlets = Get-Modlets
|
||||
if ($modlets.Count -eq 0) {
|
||||
Write-Host "No modlets found in $repoModsPath"
|
||||
return
|
||||
}
|
||||
|
||||
foreach ($modlet in $modlets) {
|
||||
$targetPath = Join-Path $steamModsPath $modlet.Name
|
||||
$sourcePath = $modlet.FullName
|
||||
|
||||
if (-not (Test-Path $targetPath)) {
|
||||
Write-Host "Not enabled, skipping: $($modlet.Name)"
|
||||
continue
|
||||
}
|
||||
|
||||
Copy-Item -Path $sourcePath -Destination $targetPath -Recurse -Force
|
||||
Write-Host "Synced: $($modlet.Name)"
|
||||
}
|
||||
}
|
||||
|
||||
function Show-Status {
|
||||
$modlets = Get-Modlets
|
||||
if ($modlets.Count -eq 0) {
|
||||
Write-Host "No modlets found in $repoModsPath"
|
||||
return
|
||||
}
|
||||
|
||||
Write-Host "`nModlet Status:"
|
||||
Write-Host "--------------"
|
||||
foreach ($modlet in $modlets) {
|
||||
$targetPath = Join-Path $steamModsPath $modlet.Name
|
||||
$status = if (Test-Path $targetPath) { "ENABLED" } else { "disabled" }
|
||||
Write-Host "$($modlet.Name): $status"
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
switch ($Action) {
|
||||
"enable" { Enable-Modlets }
|
||||
"disable" { Disable-Modlets }
|
||||
"status" { Show-Status }
|
||||
"sync" { Sync-Modlets }
|
||||
}
|
||||
Reference in New Issue
Block a user