2017-03-14 20:32:40 +01:00
<!DOCTYPE html>
2018-04-23 20:41:21 +02:00
< html >
2017-03-14 20:32:40 +01:00
< head >
2018-04-28 15:57:54 +02:00
< title > Rom Patcher JS< / title >
2017-03-14 20:32:40 +01:00
< meta http-equiv = "content-Type" content = "text/html; charset=UTF-8" / >
2019-04-17 21:43:53 +02:00
< meta name = "description" content = "An online web-based ROM patcher. Supported formats: IPS, BPS, UPS, APS, RUP, PPF and xdelta." / >
< meta name = "keywords" content = "ips,ups,aps,bps,rup,ninja,ppf,xdelta,patcher,online,html5,web,rom,patch,hack,translation" / >
2017-03-14 20:32:40 +01:00
< meta name = "viewport" content = "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" / >
2018-04-28 15:57:54 +02:00
< link rel = "manifest" href = "./manifest.json" / >
2018-04-29 11:12:54 +02:00
< link rel = "shortcut icon" href = "./favicon.png" type = "image/png" sizes = "16x16" / >
< link rel = "shortcut icon" href = "./logo192.png" type = "image/png" sizes = "192x192" / >
2019-05-31 21:00:39 +02:00
<!-- iOS icons -->
< link rel = "apple-touch-icon" sizes = "57x57" href = "./logo114.png" / >
< link rel = "apple-touch-icon" sizes = "114x114" href = "./logo114.png" / >
< link rel = "apple-touch-icon" sizes = "72x72" href = "./logo144.png" / >
< link rel = "apple-touch-icon" sizes = "144x144" href = "./logo144.png" / >
< link rel = "apple-touch-icon" href = "./logo192.png" / >
2017-07-22 11:58:52 +02:00
< link type = "text/css" rel = "stylesheet" href = "./RomPatcher.css" media = "all" / >
2019-04-17 21:43:53 +02:00
< script type = "text/javascript" src = "./locale.js" > < / script >
2017-07-22 11:58:52 +02:00
< script type = "text/javascript" src = "./RomPatcher.js" > < / script >
2019-05-31 21:00:39 +02:00
< script type = "text/javascript" src = "./libs/MarcFile.js" > < / script >
< script type = "text/javascript" src = "./zip.js" > < / script >
2019-04-17 21:43:53 +02:00
< script type = "text/javascript" src = "./crc.js" > < / script >
2017-07-22 11:58:52 +02:00
< script type = "text/javascript" src = "./ips.js" > < / script >
< script type = "text/javascript" src = "./ups.js" > < / script >
2017-07-23 12:33:13 +02:00
< script type = "text/javascript" src = "./aps.js" > < / script >
2017-11-03 09:43:29 +01:00
< script type = "text/javascript" src = "./bps.js" > < / script >
2019-04-17 21:43:53 +02:00
< script type = "text/javascript" src = "./rup.js" > < / script >
< script type = "text/javascript" src = "./ppf.js" > < / script >
2020-03-02 20:28:42 +01:00
< script type = "text/javascript" src = "./pmsr.js" > < / script >
2019-04-17 21:43:53 +02:00
< script type = "text/javascript" src = "./vcdiff.js" > < / script >
2019-05-31 21:00:39 +02:00
< script type = "text/javascript" src = "./libs/zip.js" > < / script >
2019-04-17 21:43:53 +02:00
< script type = "text/javascript" > < ! - -
2020-03-02 20:28:42 +01:00
/*
2019-05-31 21:00:39 +02:00
// PREDEFINED PATCHES EXAMPLE
// uncomment this to enable predefined patches, Rom Patcher JS will fetch patches hosted in your server
2020-03-02 20:28:42 +01:00
// - format should be self explanatory
// - you can add provide crc for source files, allowing IPS to have validation!
// - this could be also dynamically generated by your server backend, allowing you to build your own patcher for your projects
var PREDEFINED_PATCHES=[
//zip includes a single patch (recommended)
{patch:'./_example/SONICDX.zip',name:'Sonic 3D Blast Director\'s Cut v1.1',crc:0x44a2ca44},
//if providing a zipped file, multiple patch files within it can be specified (recommended)
2019-05-31 21:00:39 +02:00
{patch:'./_example/SML2DXv181.zip#SML2DXv181.ips',name:'Super Mario Land 2 DX v1.8.1 (USA/Europe)',crc:0xd5ec24e4},
{patch:'./_example/SML2DXv181.zip#SML2DXv181_jap.ips',name:'Super Mario Land 2 DX v1.8.1 (Japan)',crc:0xa715daf5},
2020-03-02 20:28:42 +01:00
//if a patch file is not specified in a zipped file, user will be able to choose the desired patch file in a popup (not recommended, also only a single crc for all patches could be provided)
2019-05-31 21:00:39 +02:00
{patch:'./_example/SML2DXv181.zip',name:'Super Mario Land 2 DX v1.8.1 (All regions)'},
//uncompressed patch (not recommended because of bandwidth purposes)
{patch:'./_example/MarvelousATI_EN_v1.07.xdelta',name:'Marvelous (SFC) ENG Translation v1.07',crc:0xcedf3ba7}
2020-03-02 20:28:42 +01:00
];
*/
2019-04-17 21:43:53 +02:00
-->< / script >
2017-03-14 20:32:40 +01:00
< / head >
2018-05-11 12:58:11 +02:00
< body > < div id = "column" >
2017-03-14 20:32:40 +01:00
2017-07-22 19:57:15 +02:00
2017-03-14 20:32:40 +01:00
<!-- HEADER -->
2019-04-17 21:43:53 +02:00
< header > < img src = "logo192.png" / > < h1 > Rom Patcher JS< / h1 > < / header >
2017-03-14 20:32:40 +01:00
2017-07-22 19:57:15 +02:00
<!-- APP -->
2018-04-28 15:57:54 +02:00
< div id = "wrapper" >
2019-04-17 21:43:53 +02:00
< div id = "switch-container" > < span id = "switch-create-button" onclick = "setCreatorMode(!/enabled/.test(el('switch-create').className));" > < span data-localize = "creator_mode" > Creator mode< / span > < span id = "switch-create" class = "switch disabled" > < / span > < / span > < / div >
2018-04-28 15:57:54 +02:00
< div id = "tab0" class = "tab" >
2017-03-14 20:32:40 +01:00
< div class = "row" >
2019-04-17 21:43:53 +02:00
< div class = "leftcol" > < label for = "input-file-rom" data-localize = "rom_file" > ROM file:< / label > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2019-04-17 21:43:53 +02:00
< input type = "file" id = "input-file-rom" class = "enabled" / >
2017-11-12 16:29:14 +01:00
< / div >
< / div >
2018-04-28 15:57:54 +02:00
< div class = "row" id = "rom-info" >
< div class = "leftcol" > CRC32:< / div > < div class = "rightcol" > < span id = "crc32" > < / span > < / div >
< div class = "leftcol" > MD5:< / div > < div class = "rightcol" > < span id = "md5" > < / span > < / div >
< div class = "leftcol" > SHA-1:< / div > < div class = "rightcol" > < span id = "sha1" > < / span > < / div >
< / div >
2017-11-12 16:29:14 +01:00
< div class = "row" id = "row-removeheader" style = "display:none" >
2019-05-31 21:00:39 +02:00
< div class = "leftcol" > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2019-05-31 21:00:39 +02:00
< input type = "checkbox" id = "checkbox-removeheader" / > < label for = "checkbox-removeheader" data-localize = "remove_header" > Remove header before patching< / label >
2017-03-14 20:32:40 +01:00
< / div >
< / div >
2018-04-23 20:41:21 +02:00
< div class = "row" id = "row-addheader" style = "display:none" >
2019-05-31 21:00:39 +02:00
< div class = "leftcol" > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2019-05-31 21:00:39 +02:00
< input type = "checkbox" id = "checkbox-addheader" / > < label for = "checkbox-addheader" data-localize = "add_header" > Add temporary header:< / label > < small > (< label id = "headersize" for = "checkbox-addheader" > < / label > )< / small >
2018-04-23 20:41:21 +02:00
< / div >
< / div >
2017-03-14 20:32:40 +01:00
2019-04-17 21:43:53 +02:00
< div class = "row" id = "row-file-patch" >
< div class = "leftcol" > < label for = "input-file-patch" data-localize = "patch_file" > Patch file:< / label > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2020-03-02 20:28:42 +01:00
< input type = "file" id = "input-file-patch" accept = ".ips,.ups,.bps,.aps,.rup,.ppf,.mod,.xdelta,.zip" / >
2017-03-14 20:32:40 +01:00
< / div >
< / div >
< div class = "buttons" >
2019-04-17 21:43:53 +02:00
< span id = "message-apply" class = "message" > < / span >
2019-05-31 21:00:39 +02:00
< button id = "button-apply" data-localize = "apply_patch" class = "disabled" disabled onclick = "applyPatch(patch, romFile, false)" > Apply patch< / button >
2017-03-14 20:32:40 +01:00
< / div >
< / div >
2018-04-28 15:57:54 +02:00
< div id = "tab1" class = "tab" >
2017-03-14 20:32:40 +01:00
< div class = "row" >
2019-04-17 21:43:53 +02:00
< div class = "leftcol" > < label for = "input-file-rom1" data-localize = "original_rom" > Original ROM:< / label > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2017-07-22 11:58:52 +02:00
< input type = "file" id = "input-file-rom1" / >
2017-03-14 20:32:40 +01:00
< / div >
< / div >
< div class = "row" >
2019-04-17 21:43:53 +02:00
< div class = "leftcol" > < label for = "input-file-rom2" data-localize = "modified_rom" > Modified ROM:< / label > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2017-07-22 11:58:52 +02:00
< input type = "file" id = "input-file-rom2" / >
< / div >
< / div >
< div class = "row" >
2019-04-17 21:43:53 +02:00
< div class = "leftcol" data-localize = "patch_type" > Patch type:< / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2019-04-17 21:43:53 +02:00
< select id = "select-patch-type" >
2018-04-28 15:57:54 +02:00
< option value = "ips" > IPS< / option >
2019-04-17 21:43:53 +02:00
< option value = "bps" > BPS< / option >
< option value = "ppf" > PPF< / option >
2018-04-28 15:57:54 +02:00
< option value = "ups" > UPS< / option >
< option value = "aps" > APS< / option >
2019-04-17 21:43:53 +02:00
< option value = "rup" > RUP< / option >
2018-04-28 15:57:54 +02:00
< / select >
2017-03-14 20:32:40 +01:00
< / div >
< / div >
< div class = "buttons" >
2019-04-17 21:43:53 +02:00
< span id = "message-create" class = "message" > < / span >
< button id = "button-create" class = "disabled" disabled onclick = "createPatch(romFile1, romFile2, el('select-patch-type').value)" data-localize = "create_patch" > Create patch< / button >
2017-03-14 20:32:40 +01:00
< / div >
2017-07-22 19:57:15 +02:00
< / div >
2017-03-14 20:32:40 +01:00
< / div >
2019-04-17 21:43:53 +02:00
< div id = "snackbar" class = "closed" > < / div >
2019-05-31 21:00:39 +02:00
2018-04-28 15:57:54 +02:00
<!-- FOOTER -->
< footer >
2020-03-02 20:28:42 +01:00
Rom Patcher JS < small > v2.2< / small > by < a href = "/" > Marc Robledo< / a >
2018-09-18 16:41:00 +02:00
< br / >
2018-04-28 15:57:54 +02:00
< i class = "icon github" > < / i > < a href = "https://github.com/marcrobledo/RomPatcher.js/" target = "_blank" > See on GitHub< / a >
< i class = "icon heart" > < / i > < a href = "https://www.paypal.me/marcrobledo/5" target = "_blank" rel = "nofollow" > Donate< / a >
< / footer >
2017-03-14 20:32:40 +01:00
2018-04-28 15:57:54 +02:00
< / div > < / body > < / html >