Git Product home page Git Product logo

euan-forrester / save-file-converter Goto Github PK

View Code? Open in Web Editor NEW
138.0 6.0 5.0 17.79 MB

Converter for retro console save files to and from MiSTer, flash cartridges, Nintendo Switch Online, and save states from online emulation websites. Convert files found around the Internet: All common formats for NES/SNES/GBA/N64/TG16/SMS/Genesis/Neo Geo/PS1 supported. Decrypt PSP saves.

Home Page: https://savefileconverter.com

License: GNU General Public License v3.0

JavaScript 52.91% HTML 22.44% Vue 22.07% HCL 2.36% Python 0.21%
retrogaming retron5 savegame save-files gba gameshark converter action-replay gamesharksp wii

save-file-converter's Introduction

Save File Converter

Web-based tool to convert save files from retro game consoles to different formats

Save file conversion

Available at https://savefileconverter.com

Upcoming features

Contact

If you have questions, need help, or have comments or suggestions, please hop on Discord: https://discord.gg/wtJ7xUKKTR

Or email savefileconverter (at) gmail (dot) com

Donations

Everything on this site is free and open source with no advertising. If you find the site helpful and want to donate you can here:

Donate

Emulators with incompatible save formats

Save file formats

Cart reader notes

  • Retrode2
    • Genesis: SRAM/FRAM saves are byte expanded by doubling: "HELLO" becomes "HHEELLLLOO" rather than " H E L L O" like in many emulators/flash carts
  • Retroblaster
    • Same as Retrode2

GBA save file size difficulty

Real-Time Clock save format

Some platforms (e.g. some MiSTer cores) append RTC data to the end of a save file. The above link describes a common format for RTC data.

Offline use

Occassionally there's a need to use the tool offline, such as when you'll be without an Internet connection for an extended period. There's 2 methods to achieve this:

Method 1: Use a website saving tool

You can't just right click on the page and select Save As... because the site is divided internally into many different files, and that will only download some of them.

Google website saving tool or something similar to find an up-to-date list of such tools.

Method 2: Build it locally (for people comfortable with the command line and development tools)

You may need to modify some of these steps depending on your development environment, but this should give you the general idea.

MacOS/Linux

Install homebrew: https://brew.sh/

brew install yarn
brew install git

Then proceed to the Common section

Windows

Find an equivalent package manager to homebrew, and use it to install git and yarn (or install them and their dependencies manually: git: https://github.com/git-guides/install-git, yarn: https://yarnpkg.com/getting-started/install)

Then proceed to the Common section

Common

git clone [email protected]:euan-forrester/save-file-converter.git
cd save-file-converter/frontend
yarn install
yarn serve

Then open http://localhost:8080/ in your browser.

Note that you'll have to keep the command line window open with yarn serve running for as long as you want to access the site.

Internet archive

If you need to, you can also access the site via the Internet archive here: https://web.archive.org/web/https://savefileconverter.com/

save-file-converter's People

Contributors

dependabot[bot] avatar euan-forrester avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

save-file-converter's Issues

Add in the ability to add a cart save as a gameshark save to an N64 mempack file

We can currently extract these, but we can't take a cart save and convert it and/or add it to a mempack file.

Might be easier to convert it to its own mempack file rather than having the ability to add it. How would be differentiate which are regular saves and which are cart saves? Need to think here.

We'd need to truncate any empty pages from the end of the cart save

This would let people use their gameshark to write saves downloaded from the internet to their carts

Refactor flash cart tests

Refactor tests/unit/save-formats/FlashCarts to be closer to the directory structure of the source files

Also add tests for the passthrough conversions like NES/SNES etc

Improve handling of .wasm files

Currently, .wasm files are loaded in a very hacky way, particularly in development and production modes on a remote server. We look inside the Webpack stuff stored in window to pull out the hashed filename, which clearly is not the intended method.

It's probably worth upgrading to Webpack 5 to solve this, as it apparently has built-in support for wasm files. We may even want to upgrade to Vue 3 at the same time.

The 4 environments in which loading .wasm files needs to work are:

  • In tests running locally (e.g. yarn test:unit)
  • When running a development server locally (i.e. yarn serve)
  • When running a development build on a remote server (i.e. yarn build --mode=development && yarn deploy --mode=development)
  • When running a production build on a remote server (i.e. yarn build --mode=production && yarn deploy --mode=production)

Consider adding a command line version of the tool

It would be easier to make work offline, and would allow batch processing of files.

How to make it work with node easily? Would need node installed, and what else? Might not be super user friendly if there's a bunch of deps to manage. Especially as they need upgraded as time goes on.

Again, because so few people would want this (and it goes against the site goal of being easy-to-use for everyone), maybe consider making this a paid service. Although then the dependency issue would really need to be solved in a clean way for the user.

Send more stats to Google Tag Manager

Ideas:

  • Conversion direction
  • Convert a whole file (PS1/N64) or just extract a file?
  • Which platform for Wii VC conversion
  • Differences seen between problematic and known good files in Troubleshooting tool
  • Game title/ID for save file

Prod build is too large

When building for prod, we see a warning that the size of chunk-vendors is > 1 MB when it should be < 244kB. Even compressed, it's > 350kB.

SMSAdvance/PocketNES/Goomba: Consider using the raw save filename to populate the game title field

Right now we populate that field with:

  • Made with savefileconverter.com: SMSAdvance
  • SAVE: PocketNES (consistent with how it appears when running in standalone mode on an EZ Flash ODE)
  • The internal name from the game ROM: Goomba

We could consider unifying this to contain the filename of the raw file it was converted from (assuming that Goomba doesn't use the internal ROM name to verify the save is for the correct ROM. It also has the checksum for that. More code reading needed here).

I don't believe that these names appear anywhere in the emulator UI, but if we did #134 then it would be nice to have something better to display in our UI.

Improve Troubleshooting tool

Example save from Zelda Minish cap from EZ Flash V has 16 byte header added on.

Issue 1: Current Troubleshooting tool barfs on this file, finding a negative padding size.

Issue 2: Consider adding a rule to the tool to get the diff in size between the known good a troublesome files, and if known good < troublesome then try cutting that from the start (and end?) of the troublesome file. See if there are any matching characters at the beginning of the files then (in case of GBA then there appears to be some plaintext info about the game)

It may be better to handle the plethora of EZ Flash cart type using this tool (or making a similar tool and just calling it EZ Flash so it's easier to find) since I'll bet they all have simple headers like this.

Missing 32kB option for GBA save size

From a user:

on the drop down box for the file size you want the created save file to be, i couldn't see 32kb as an option. and the save file I was replacing was that size, so that was what I ideally wanted to go with. but I went with 64kb instead and it worked fine, so no big deal.

it was Drill Dozer. my own .sav file for it is 32kb and so that's why I was trying to make the game save I found online be that same size when I converted it to .sav with your site

Add support for multiple saves in GBA emulator files (Goomba/PocketNES/SMSAdvance)

These emulators can run on the GBA in "bundled" mode, where you select a list of game ROMs on your PC and then a program creates a single executable that runs on the GBA and allows you to select between these games.

The save file for that executable contains save info for all of the games.

Right now, we only support extracting one game's save data from the file, but we could make a dropdown menu to display all of them with their associated game title, similar to how N64/PS1 memory cards are done.

My goal for this site is to just support built in emulators on flash carts, and not get sucked into supporting every emulator ever, so it's not a priority to include this. When run from the flash cart OS directly, an individual save file for each game is created.

But it would be easy to add this ability. If there's enough demand we should consider adding it.

Rework UI for selecting flash cart type

The dropdown is getting cluttered, and it may be confusing to find and select what someone is looking for (do I want NES or NES on Genesis?)

Consider breaking it into 2 dropdowns where we first select the flash cart type, then the type of save. Or is it possible to have a hierarchical list within a single dropdown?

It would still be a single component, which would return the same string.

Add support for splitting/recombining Sega CD save files

Currently the system can only resize the files, which at least makes them transferable between different platforms. Ideally though we'd like to be able to split apart the individual saves within the files, like we can with N64/PS1 memory card images.

All parsing of these files is apparently done by the Sega CD BIOS, and there's no documentation about how the files are laid out.

There's a tool by Krikzz that can parse these files, savesplitter.exe, but there's no source: https://krikzz.com/pub/support/mega-everdrive/pro-series/

I tried looking at the executable in a disassembler but the results didn't make a lot of sense to me. I think the next step here would be to step through it in a debugger.

Add config file to choose whether to test ISO files or not

It's really slow to run the unit tests on the various ISO files for PSP. So I added a switch in code to skip them for desktop devving (and another switch to skip testing retail ISOs because obviously those can't be committed to the repo).

But it's annoying to have changes to that file that can't be committed. And it's an error waiting to happen to accidentally commit a change with that flag set to false.

So it should be in some sort of a local config file instead.

Add in an output size dropdown when converting from the MiSTer

The MiSTer pads out saves to be pretty large, and when converting them back they may not fit on an original cart. I'm a little nervous about just truncating the file blindly, but having a dropdown that defaults to the file's current size seems like a good solution.

e.g. Phantasy Star IV Genesis MiSTer save is 64kB (reduces to 32kB after un-padding the bytes), but the cart can only hold 16kB and some cart dumpers (e.g. the Retrode) won't write that big a file to it.

Add default filenames when converting to PS1/N64 formats

In order to avoid confusion about why the Convert button doesn't become enabled, we should add a default filename to these conversions:

  • PS1: individual saves -> emulator/ps3/dexdrive
  • N64: individual saves -> emulator/dexdrive

Consider adding an Advanced tab to allow people to manually select certain transformations

For example:

  • Resizing a save by adding/removing padding (allow user to select 0x00 or 0xFF padding)
  • Endian swapping (allow the user to select 16, 32, 64 byte endian swapping)
  • Byte expanding/contracting Genesis files (allow user to select byte expansion byte: 0x00, 0xFF, or double byte e.g. 0xA -> 0xAA)
  • Remove a header/footer (allow user to specify number of bytes, or attempt to autodetect based on making the file a size that's a power of 2)
  • Add a header/footer by copying it from another save file
  • Allow people to select a certain range of offsets to slice out, for example to allow: https://www.reddit.com/r/AnaloguePocket/comments/10ampwi/solution_for_extracting_pokemon_emerald_cartridge/
  • Maybe decompressing the data using a common compression scheme like .zip or .lzo

See here for ideas: https://forums.launchbox-app.com/topic/66417-n64-save-converter-tools/

Update version of terraform

We're currently on version 0.13, and it's up to 1.0. Also have lots of outdated syntax that needs fixing.

Use tfenv to manage different versions of terraform installed on the local machine

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.