ROM Properties Page shell extension

Discussion in 'General Gaming Discussion' started by GerbilSoft, Sep 19, 2016.

  1. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    ROM Properties Page v1.1 is now available for download!

    GitHub: https://github.com/GerbilSoft/rom-properties/releases
    Ubuntu PPA: https://launchpad.net/~gerbilsoft/+archive/ubuntu/ppa

    New features:
    • rp-config is now available for KDE4 and KDE5.
    • rp-config now has a Key Manager tab.
    • XFCE: Thumbnailing is now supported using tumblerd.
    New systems:
    • Nintendo 3DS firmware binaries. 1.0-11.4 retail FIRM are identified, as well as a few well-known homebrew titles.
    • Sega 8-bit (Sega Master System, Game Gear)
    New system features:
    • Nintendo 3DS: Support for encrypted DSiWare CIAs, logo section is now checked, application permissions are now listed for CIAs and CCIs.
    • Mega Drive: New "Vector Table" tab, and support for checking the locked-on ROM for Sonic & Knuckles lock-on.
    • PlayStation Saves: Support for more PS1 save file formats.
    • EXE: MS-DOS executables now show more information.
    See CHANGES.md for a full list of changes.

    Download links:
    Note: For Windows, you will need the MSVC 2017 runtime:
    Note 2: For *ubuntu, you can install the individual packages, or rom-properties-all for all frontends.

    ----------------------------------------------------------------

    So, what does this shell extension do?

    Got a USB hard drive with Wii disc images for USB Loader GX or the Dolphin Emulator? Now you can actually see what those discs are:

    [​IMG]

    Or maybe you're using Nintendont for GameCube:

    [​IMG]

    How about some in-depth information on a GameCube save file? (The icon will be animated if your browser supports APNG.)

    [​IMG]
     
    Last edited by GerbilSoft, Jul 4, 2017 - Reason: v1.1 is out.
    DarthDub, chronoss, eduall and 12 others like this.


  2. FAST6191

    FAST6191 Techromancer

    pip Reporter
    23,159
    8,899
    Nov 21, 2005
    I did like having DS icons appear on my PC a while back and this looks like it is going to be a step up. Pity I leave most things zipped these days.
     
    KiiWii likes this.
  3. JaceCearK1

    JaceCearK1 GBAtemp Advanced Fan

    Member
    540
    347
    May 18, 2015
    Gambia, The
    @GerbilSoft
    How does displaying the NDS-icons work?
    Do you extract them from the games first, convert them to .ico-files and store them somewhere like in %appdata%, or is there a simpler method? :)
     
  4. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    The icons are extracted from the ROM image when requested by the file browser. For images built into ROM/disc images, the image is not cached by the extension, but the file browser will usually cache it.

    For external images (e.g. GameTDB downloads), the extension does cache the images in %LOCALAPPDATA%\rom-properties\cache\ .
     
    JaceCearK1 likes this.
  5. migles

    migles Mei the sexiest bae

    Member
    GBAtemp Patron
    migles is a Patron of GBAtemp and is helping us stay independent!

    Our Patreon
    6,620
    4,337
    Sep 19, 2013
    Saint Kitts and Nevis
    my dad works for nintendo.
    OMG thank you....
    usualy theese tools are just for one system like the 3ds...
    and i am not a great fan of rom managers, specially because they are dedicated to 1-2 systems..
     
  6. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    It isn't really a ROM manager per se. It simply adds some useful functionality to the system file browser, e.g. thumbnail previews for certain types and a property page.

    EDIT: I might have misread your post and you were referring to other ROM managers. :V

    EDIT 2: I'm currently working on a test suite for my GameCube FST parser, since I'm not 100% sure of how reliable it is. Need to extract the FSTs from all partitions on all of my Wii games in order to get a decent set of test files. (Already did this for GCN as part of the CISO work for Nintendont.)
     
    Last edited by GerbilSoft, Sep 26, 2016
  7. migles

    migles Mei the sexiest bae

    Member
    GBAtemp Patron
    migles is a Patron of GBAtemp and is helping us stay independent!

    Our Patreon
    6,620
    4,337
    Sep 19, 2013
    Saint Kitts and Nevis
    my dad works for nintendo.
    i know this isn't a rom manager, it's a tab for file propertiles.
    what i meant is, makes managing games directly on the OS much easier.
    there was that 3ds icons windows addon which i never found interest because it only supported 3ds roms, i have a rom collection from all the different systems...
    I am happy that you didn't decided to make this tool just for a couple of recent consoles but you are trying to make it as universal as possible
     
  8. JaceCearK1

    JaceCearK1 GBAtemp Advanced Fan

    Member
    540
    347
    May 18, 2015
    Gambia, The
    How can I tell Windows how to access the data? Are there certain API-calls or Registry-Edits that have to be done?
     
  9. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    ...what are you trying to do, access the Explorer thumbnail database?

    If you just want to extract the icons, there's a work in progress command line interface that will extract the images to BMP (later PNG and/or APNG to preserve transparency information). It won't be included in the initial release, though.

    The 3DS extension is what inspired this one. My tool won't support 3DS yet, but a future version will support extracting the icon from the ROM image (assuming I can figure out all the encryption stuff) and/or downloading covers from GameTDB.

    The main reason why I decided to write this extension is because I got tired of staring at generic icons whenever I was managing my Wii HDD and R4i SD card. There's still a few files it doesn't recognize (a few of my GCN games don't have disc scans on GameTDB, which I plan to resolve once I get a new scanner, and it can't handle the second part of split WBFS files on FAT32), but it's a lot better than nothing.
     
    Last edited by GerbilSoft, Sep 26, 2016
  10. JaceCearK1

    JaceCearK1 GBAtemp Advanced Fan

    Member
    540
    347
    May 18, 2015
    Gambia, The
    I just want Windows to show the DS games' icon when accessing the file via Windows Explorer, just like it is shown here:
    Warning: Spoilers inside!
     
  11. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    That... is kinda what this shell extension does. It's not ready for release yet, but once it is, I'll post it and you'll be able to set it up to do that.

    EDIT: More specifically, it registers itself using several COM interfaces:
    • IExtractIcon
    • IExtractImage
    • IThumbnailProvider (not implemented yet, but will be done before release)

    IExtractIcon provides a native "icon", while the other two provide thumbnails. Currently, IExtractIcon is only used for DS icons, while IExtractImage/IThumbnailProvider are only used for GameCube and Wii disc scans. I'll eventually add support for IExtractIcon for GCN/Wii and other combinations.
     
    Last edited by GerbilSoft, Sep 26, 2016
    JaceCearK1 likes this.
  12. JaceCearK1

    JaceCearK1 GBAtemp Advanced Fan

    Member
    540
    347
    May 18, 2015
    Gambia, The
  13. CheatFreak47

    CheatFreak47 Complex Donut

    Member
    1,335
    886
    Oct 11, 2011
    United States
    Michigan, USA
    This is something I'm super super interested in, how's the progress going on this?
    I literally stand to benefit so much from something like this, it'd make roms so much easier to deal with. :toot:
     
  14. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    This weekend I fixed a bunch of the major issues I filed on GitHub as a progress tracker.
    • Completed the GcnFst test suite. I still need to add some example FSTs and add fuzzing, but it should be good enough for now. It's already helped me spot one minor compatibility issue between Linux and Windows (see below).
    • Implemented an rp_image backend using GDI+ (on Windows). This should reduce some overhead when loading PNG images since I was already using GDI+ for that, so it no longer has to convert it to the default storage backend and then back to GDI+ for display.
    • IThumbnailProvider is now implemented for full alpha transparency support on Windows Vista and later. Unfortunately, IThumbnailProvider doesn't automatically enlarge smaller thumbnails, so I have to work around this by resizing it in the code, which isn't a very good workaround. As a compromise, I've set the default for the initial release to only resize small icons, e.g. Nintendo DS. GameTDB disc scans won't be resized. A future version will allow this to be configured. (This does not affect IExtractImage or the Linux versions.)

    With regards to the compatibility issue: Some of the GameCube discs I've tested (including D87E01) have Shift-JIS filenames. In order to compare these properly, the filenames have to be converted to Unicode. On Windows, this is done using code page 932 as the source encoding; on Linux, this was done using "Shift-JIS" via iconv. It turns out that one character was incorrectly mapped by the Unicode Consortium back in the early 90s: the "wave dash" character.

    In Shift-JIS encoding, wave dash (0x8160) looks like this: ~
    When the Unicode Consortium mapped it to U+301C in Unicode 1.1 (June 1993), they incorrectly inverted it: 〜
    Unicode did finally fix it in Unicode 8.0 (so the above two symbols might look identical on some newer systems), but a lot of older fonts still have the incorrect mapping.

    Windows' code page 932 mapping replaces the wave dash symbol with U+FF5E, FULLWIDTH TILDE. This isn't an accurate mapping logically, but it has the correct symbol. (This is what I used for the first wave dash symbol above.)
    iconv's "Shift-JIS" encoding maps the wave dash symbol to U+301C, so it looks wrong with older fonts.

    Solution: Use iconv's "CP932" encoding, which is identical to Windows. This makes more sense based on the source material, given that most GameCube games were developed on Windows systems in the first place.

    (insert some joke about wave dash exploits here :V)
     
    Last edited by GerbilSoft, Oct 10, 2016 - Reason: +joke
  15. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    So I got a little bit distracted from finishing up the last few blockers and I was getting annoyed that my GameCube save files were all showing unknown file icons.

    [​IMG]

    The ROM Properties extension now supports GameCube save files in GCI, GCS, and SAV formats. (Full memory card dumps aren't supported because they contain multiple files, though I may consider adding something like the folder previews that show multiple files on a single thumbnail later.)

    EDIT: You might notice that the bottom two lines of the Eternal Darkness icon are missing. Turns out I derped a loop unroll optimization that broke CI8 GameCube icons on Windows. It's fixed in git now.
     
    Last edited by GerbilSoft, Oct 12, 2016 - Reason: +Eternal Darkness derp
    JaceCearK1 likes this.
  16. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    Some more distractions. :V (I'll get to the last remaining blockers for Beta 1 this weekend.)

    [​IMG]

    The property sheet now displays the banner and icon for files that have one. Not visible in this screenshot is the fact that it also supports animated icons, which are found in GameCube save files and Nintendo DSi ROM images. (The file browser portion won't show animated icons because neither Windows Explorer nor KDE Dolphin support them AFAIK.)
     
  17. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    Status update: I'm basically done with code changes for the first beta release. Currently working on packaging scripts.
    • CMake's Debian package generator doesn't properly support building multiple DEB packages for different targets. It supports one package per component, but that results in a separate documentation package. So I've decided to just write Debian packaging rules myself. Turns out it's a lot easier now than it was a while back. (Then again, I used dolphin-emu's Debian package as a starting point.)
    • CMake can't build for more than one architecture at the same time, so I have to run at least four builds: Linux 32, Linux 64, Windows 32, and Windows 64.
    • The Windows 32-bit and 64-bit builds will need to be post-processed into a single ZIP file. The 32-bit version is still needed on 64-bit because 32-bit applications can't use 64-bit shell extensions.
    If all goes well, the first beta release should be ready by the end of the week. :)
     
  18. Flame

    Flame Me > You

    Member
    3,826
    4,938
    Jul 15, 2008
    this looks really great.

    any plans for Sony systems?
     
  19. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    I started an initial PS1 save viewer (with the PSV format used by PS1 on PS3), but there was some issue with 16x16 icons on Windows. (The top-half was showing up weird.) I'll look into some more Sony formats later. (Maybe PSP eboots?) [Sidenote: Apparently PS2 save files don't have icons; they have 3D models. I don't think I'm implementing that anytime soon. :V]

    Anyways, v0.8 (Beta 1) is out, and I added download links to the OP.
     
  20. GerbilSoft
    OP

    GerbilSoft GBAtemp Addict

    Member
    2,017
    2,217
    Mar 8, 2012
    United States
    Today's hax:

    [​IMG]

    Support for Dreamcast VMS icons. VMI and DCI files aren't supported yet, nor are ICONDATA_VMS files. (VMI will require some extra work because it has to load the icon from the VMS file.)