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" / >
2020-05-02 12:10:46 +02:00
< link rel = "shortcut icon" href = "./style/favicon.png" type = "image/png" sizes = "16x16" / >
< link rel = "shortcut icon" href = "./style/logo192.png" type = "image/png" sizes = "192x192" / >
2019-05-31 21:00:39 +02:00
<!-- iOS icons -->
2020-05-02 12:10:46 +02:00
< link rel = "apple-touch-icon" sizes = "57x57" href = "./style/logo114.png" / >
< link rel = "apple-touch-icon" sizes = "114x114" href = "./style/logo114.png" / >
< link rel = "apple-touch-icon" sizes = "72x72" href = "./style/logo144.png" / >
< link rel = "apple-touch-icon" sizes = "144x144" href = "./style/logo144.png" / >
< link rel = "apple-touch-icon" href = "./style/logo192.png" / >
2020-11-06 21:18:54 +01:00
<!-- social network metatags -->
< meta name = "twitter:site" content = "@marc_robledo" >
< meta name = "twitter:creator" content = "@marc_robledo" >
< meta name = "twitter:domain" content = "marcrobledo.com" >
< meta property = "og:title" content = "Rom Patcher JS" >
< meta name = "twitter:title" content = "Rom Patcher JS" >
< meta name = "twitter:description" content = "An online web-based ROM patcher. Supported formats: IPS, BPS, UPS, APS, RUP, PPF and xdelta." >
< meta property = "og:image" content = "https://www.marcrobledo.com/RomPatcher.js/style/thumbnail.jpg" >
< meta name = "twitter:image" content = "https://www.marcrobledo.com/RomPatcher.js/style/thumbnail.jpg" >
< meta name = "twitter:card" content = "photo" >
2020-05-02 12:10:46 +02:00
< link type = "text/css" rel = "stylesheet" href = "./style/RomPatcher.css" media = "all" / >
< script type = "text/javascript" src = "./js/locale.js" > < / script >
< script type = "text/javascript" src = "./js/RomPatcher.js" > < / script >
< script type = "text/javascript" src = "./js/MarcFile.js" > < / script >
< script type = "text/javascript" src = "./js/crc.js" > < / script >
< script type = "text/javascript" src = "./js/formats/zip.js" > < / script >
< script type = "text/javascript" src = "./js/formats/ips.js" > < / script >
< script type = "text/javascript" src = "./js/formats/ups.js" > < / script >
< script type = "text/javascript" src = "./js/formats/aps.js" > < / script >
< script type = "text/javascript" src = "./js/formats/bps.js" > < / script >
< script type = "text/javascript" src = "./js/formats/rup.js" > < / script >
< script type = "text/javascript" src = "./js/formats/ppf.js" > < / script >
< script type = "text/javascript" src = "./js/formats/pmsr.js" > < / script >
< script type = "text/javascript" src = "./js/formats/vcdiff.js" > < / script >
< script type = "text/javascript" src = "./js/zip.js/zip.js" > < / script >
2019-05-31 21:00:39 +02:00
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 >
2020-05-02 12:10:46 +02:00
<!-- custom code for RHDN -->
<!--
< ?php
if(isset($_REQUEST["file"]) & & preg_match("/^(hacks|translations)\/\d+$/", $_REQUEST["file"]) & & isset($_REQUEST["patch_name"])){
$patch="/download/".$_REQUEST["file"];
if(isset($_REQUEST["patch"])){
$patch.='#'+strip_tags(trim($_REQUEST["patch"]))
}
$patch_name=strip_tags(trim($_REQUEST["patch_name"]));
$crc="";
if(isset($_REQUEST["crc"]) & & preg_match("/^[0-9a-fA-F]{8}$/", $_REQUEST["crc"])){
$crc=', crc:0x'.$_REQUEST["crc"];
}
?>
< script type = "text/javascript" >
var PREDEFINED_PATCHES=[{patch:'<?= strip_tags($patch); ?> ', name:'<?= strip_tags($patch_name); ?> '<?= $crc?> }];
< / script >
< ?php
}
?>
-->
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 -->
2020-05-02 12:10:46 +02:00
< header > < img src = "./style/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" >
2020-11-07 19:06:16 +01:00
< div id = "switch-container" > < span id = "switch-create-button" > < 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 >
2020-11-07 19:06:16 +01:00
< div class = "row" id = "row-removeheader" >
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 >
2020-11-07 19:06:16 +01:00
< div class = "row" id = "row-addheader" >
2019-05-31 21:00:39 +02:00
< div class = "leftcol" > < / div >
2018-04-28 15:57:54 +02:00
< div class = "rightcol" >
2020-11-06 21:00:06 +01: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 >
2020-11-07 19:06:16 +01:00
< button id = "button-apply" data-localize = "apply_patch" class = "disabled" disabled > 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 >
2020-11-07 19:06:16 +01:00
< button id = "button-create" class = "disabled" disabled 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
2019-05-31 21:00:39 +02:00
2018-04-28 15:57:54 +02:00
<!-- FOOTER -->
< footer >
2020-11-06 21:00:06 +01:00
< div >
2020-11-07 19:06:16 +01:00
< select id = "select-language" >
2020-11-06 21:00:06 +01:00
< option value = "en" > English< / option >
2021-04-25 09:39:45 +02:00
< option value = "nl" > Nederlands< / option >
< option value = "sv" > Svenska< / option >
2020-11-06 21:00:06 +01:00
< option value = "de" > Deutsch< / option >
< option value = "es" > Español< / option >
< option value = "ca" > Català< / option >
2021-02-15 15:52:12 -03:00
< option value = "ptb" > Português Brasileiro< / option >
2020-11-06 21:00:06 +01:00
< option value = "ru" > Russian< / option >
2021-03-07 20:55:00 -06:00
< option value = "ja" > 日本語< / option >
2020-11-06 21:00:06 +01:00
< / select >
< / div >
Rom Patcher JS < small > v2.4< / 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
2021-02-15 15:52:12 -03:00
< / div > < / body > < / html >