A more thorough introduction/analysis is available as RomVault, Retool, fixDat & Digital Preservation.
Download & Rclone part removed due to server shutting down. Now this is just a TLDR of ROM update.
This assumes everything is already configured to match No-Intro/Redump romset, only minimal config example is provided in #Config.
TLDR
- Download newer DATs via browser/script
- No-Intro DAT Files, all in one pack (table d’hôte)
- Redump DAT Files, pick & download (à la carte)
- browser: redump-highlight.user.js
- script:
update-dat.sh
- 模拟游戏中文数据站
- Unpack DATs to
ROMVault\DATRoot- No-Intro > pwd, aka.
DATRoot - Redump >
DATRoot\Redump
- No-Intro > pwd, aka.
- Prepare selected DATs via
init-retool-dat.sh(rsync)- Only include necessary romset to speed up retool
- Order matters, see script comment
- Filter DAT in retool
- Add DAT files recursively from quick import folder
- Remove CHS DATs
- Process DAT Files
- Update database in RomVault
- Update DATs
- Scan ROMs
- Find Fixes (do NOT
fix ROMsyet)
- Fix romset
- Round One
- Select romset with missing ROMs, right click and choose
Save fix DATs - Convert ROMVault fix DATs to human/machine readable ROM list via
fixDat.nu - Get missing ROMs manually, and save to
ROMVault\ToSort1 - RomVault: Scan Quick -> Find Fixes -> Fix ROMs
- Select romset with missing ROMs, right click and choose
- Round Two
- Repeat 6.1-6.3 with a newer romset2 somewhere else
- Get last few missing ROMs somehow
- Check
ROMVault\ToSortagain and clean up ROMs
- Round One
- Update playlist in RetroArch
- Refresh playlist
- Clean playlist
- Merge/Sync new romset
TLDR²
- Get newer DATs
- No-Intro DAT Files, unpack to
ROMVault\DATRoot update-dat.sh
- No-Intro DAT Files, unpack to
init-retool-dat.sh- Retool
- Add DAT files recursively from quick import folder
- Remove CHS DATs
- Process DAT Files
- See point 5-8 in #TLDR
Config
RomVault -> Settings:
- RomVault Settings -> Core Settings
- DATRoot:
DATRoot\Retool, NOTDATRoot! - Filenames not to remove:
*BIOS*,*-CH*,*中文游戏合集
- DATRoot:
- Directory Mappings
- Main ROM directory:
RomVault<-path\to\RetroArch\roms - Sub collection:
RomVault\No-Intro\Nintendo - Nintendo 3DS (Decrypted)<-E:\external\disk\path\roms\No-Intro\Nintendo - Nintendo 3DS (Decrypted)
- Main ROM directory:
Retool:
- Paths ->
output folderReplace input DAT files - Exclusions:
AabdepPrv, aka. Applications, Audio, Bad dumps, Demos, Educational, Preproduction, Promotional, Pirate, Video - Options
- Compilation handling: Prefer individual titles
- Output options: originalheader, reprocess
- quick import folder:
$SCOOP\persist\romvault\DATRoot\Retool
RetroArch playlist:
scan_dat_file_path&scan_filter_dat_contentare not enabled as DAT files have timestamp suffix. While it can be easily renamed, I’ve already dedup ROMs in RomVault so using it here would not have much benefit"scan_overwrite_playlist": falseensures ROMs are not deleted as soon as I refresh playlist. This is used as sometimes I don’t want/have full copy of a gigantic romset
// /path/to/RetroArch/playlists/Sega - 32X.lpl
{
"version": "1.5",
"default_core_path": "/path/to/RetroArch/cores/picodrive_libretro.so",
"default_core_name": "Sega - MS/GG/MD/CD/32X (PicoDrive)",
"base_content_directory": "/home/redacted/Game",
"label_display_mode": 0,
"right_thumbnail_mode": 0,
"left_thumbnail_mode": 0,
"thumbnail_match_mode": 0,
"sort_mode": 0,
"scan_content_dir": "/path/to/RetroArch/roms/No-Intro/Sega - 32X",
"scan_file_exts": "",
"scan_dat_file_path": "",
"scan_search_recursively": true,
"scan_search_archives": true,
"scan_filter_dat_content": false,
"scan_overwrite_playlist": false,
"items": [
{}
]
}
- Simple Migration/Mirroring to another platform
- Change path
- Refresh playlist
- Clean playlist
Structure
- No-Intro files (unar)
- No-Intro
- Non-Redump
- Source Code
- Unofficial
- index.txt
- Redump & CHS (wget)
dat-*.list- update-dat.sh
- Retool (rsync)
exclude-*.txtinclude-*.txt- init-retool-dat.sh
$ cd $SCOOP/persist/romvault/DATRoot
$ tree -L 1 ./
./
├── .bak # backup of previous dat
│ ├── CHS
│ ├── No-Intro
│ └── Redump
├── CHS # dat
├── No-Intro
├── Non-Redump
├── Redump
├── Source Code
├── Unofficial
├── Retool # retool processed dat
│ ├── CHS # simple rsync
│ ├── No-Intro
│ └── Redump
├── dat-chs-cm.list # wget list
├── dat-chs-ol.list
├── dat-chs.list -> dat-chs-cm.list # symlink
├── dat-redump.list
├── exclude-nointro.txt # rsync rule
├── exclude-redump.txt
├── include-nointro.txt
├── include-redump.txt
├── index.txt # file tree
├── init-retool-dat.sh # rsync script
├── update-dat.sh # wget script
Script
fixDat.nu
#!/usr/bin/env nu
# Usage: convert ROMVault fix DATs to sensible ROM list
# Tested environment: Linux, Windows, WSL
def dump-list [dat: path] {
let output = ($dat | path basename
# rm redundant prefix
| str replace '[Unnumbered] Chinese Game Dat (Simplified) - ' ''
# rename extension
| str replace '.dat' '.txt')
# parse fixDat file
open $dat --raw
# clean escape symbol
| str replace --all '&' '&'
| str replace --all '"' '"'
| str replace --all '<' '<'
| str replace --all '>' '>'
# match via regex instead of useless "from xml"
# match "<game name", but not "cloneof" or "<rom name"
| parse --regex '<game name="(?<name>[^"]+)"'
| get name
# append .zip suffix
| each { |it| $"($it).zip" }
| uniq
| sort
| save --force $output
}
# iterate
ls fixDat_*.dat | get name | each { |it|
dump-list $it
# rm $it
}
This is important. If you sync inplace with a newer romset, some ROMs would be moved to
ROMVault\ToSort. This does NOT necessarily conclude that they are not the right ROM, sometimes fix ROMs can solve interity issue. ↩︎This is usually not an issue if you don’t care about 100% collection or hardly update your romsets (read: less than once per year). This bothers me because I’m using the lastest DAT files. If you download a romset with accompanied DAT file, it’s almost guaranteed to be complete. ↩︎
