Giter Club home page Giter Club logo

rom-detective's Introduction

đŸ•ĩī¸ Rom Detective 🕹ī¸


A tool to automatically index ROMs and create shortcuts to them. Allowing you to physically store your ROMs wherever you'd like, while still treating them like individual ROMs for launchers like LaunchBox.

How

The application only works on Windows. The destination drive must be formatted to support symlinks for ROMs (NTFS or UDF, see https://docs.microsoft.com/en-us/windows/win32/fileio/filesystem-functionality-comparison)

Your system must either have Developer Mode enabled or the application must be run as admin. If your files are stored on a NAS and you're running as admin, make sure the system user has access to the network drives.

Setup

The binary can be downloaded here, create a folder for it and just plonk it in.

Add your ROM folder (or individual folders) and hit "Create Shortcuts" - and you're off to the races

For RPCS3 & LaunchBox you need to remove the emulator from the ROMs, so it will launch the generated .bat file instead. (This is a limitation of RPCS3 only looking for game data where the symlink is, and not the actual EBOOT.BIN)

Why?

In order to more easily update the library inside an emulation launcher (such as LaunchBox), proper naming schemes & file structure is key for good results, but not always permitted depending on the ROM type.

Some ROMs require specific naming schemes to work at all, such as Playstation 3's EBOOT.BIN ROMs. By creating a shortcut to EBOOT.BIN using the proper game title as the filename will however allow LaunchBox to interpret the ROM correctly.

This also allows LaunchBox to watch for added/removed ROMs, without physically having to move the ROM files, meaning they can be stored wherever without losing that benefit.

Development

Running from python

pip install -r requirements.txt
python src/main.py

The binary can be built using

pyinstaller main.spec

Classes

ROMs or Games are indexed as an Item dataclass object:

@dataclass
class Item:
    source: str  # Path to original ROM or Game file/executable
    platform: Platform  # Global variable PLATFORMS[<platform_id>] (PLATFORMS['n64'])
    filename: str  # Does some re-formatting and searching, but it's not an indexer for all ROM types.
    title: str  # Same as filename, but without an extension
    extension: str  # Just the file extension (.url generates internet shortcuts)

Different subclasses are used for some ROM or game types to automatically fetch the correct ROM file and metadata:

PS3Item(Item)  # Targets <folder>\PS3_GAME\USRDIR\EBOOT.BIN and gets title from a database
WiiUItem(Item)  # Reads a meta.xml for any given *.rpx file, also blacklists DLC or Update directories
SteamItem(Item)  # Reads libraryfolders.vdf in primary steam installation folder and gets installed games (blacklists software)

Platform objects get derived from src/data/platforms.yaml.

TO-DO:

  • Complete platforms / default extensions in src/data/
  • Add more sources
  • Tidy up UI, write tests
  • Watch for new/deleted ROMs & update automatically (compare log to console)
  • Move logs to appdata?

rom-detective's People

Contributors

sondregronas avatar dependabot[bot] avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤ī¸ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.