1
0
Fork 0
mirror of https://github.com/marcrobledo/RomPatcher.js.git synced 2025-06-27 16:25:54 +00:00

version 3.0

This commit is contained in:
Marc Robledo 2024-08-09 19:30:49 +02:00
parent 20a97ae39f
commit f7014075ec
86 changed files with 7587 additions and 238 deletions

View file

@ -7,14 +7,14 @@
<meta name="keywords" content="ips,ups,aps,bps,rup,ninja,ppf,xdelta,patcher,online,html5,web,rom,patch,hack,translation"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
<link rel="manifest" href="./manifest.json"/>
<link rel="shortcut icon" href="./style/app_icon_16.png" type="image/png" sizes="16x16"/>
<link rel="shortcut icon" href="./style/app_icon_192.png" type="image/png" sizes="192x192"/>
<link rel="shortcut icon" href="./webapp/app_icon_16.png" type="image/png" sizes="16x16"/>
<link rel="shortcut icon" href="./webapp/app_icon_192.png" type="image/png" sizes="192x192"/>
<!-- iOS icons -->
<link rel="apple-touch-icon" sizes="57x57" href="./style/app_icon_114.png" />
<link rel="apple-touch-icon" sizes="114x114" href="./style/app_icon_114.png" />
<link rel="apple-touch-icon" sizes="72x72" href="./style/app_icon_144.png" />
<link rel="apple-touch-icon" sizes="144x144" href="./style/app_icon_144.png" />
<link rel="apple-touch-icon" href="./style/app_icon_192.png" />
<link rel="apple-touch-icon" sizes="57x57" href="./webapp/app_icon_114.png" />
<link rel="apple-touch-icon" sizes="114x114" href="./webapp/app_icon_114.png" />
<link rel="apple-touch-icon" sizes="72x72" href="./webapp/app_icon_144.png" />
<link rel="apple-touch-icon" sizes="144x144" href="./webapp/app_icon_144.png" />
<link rel="apple-touch-icon" href="./webapp/app_icon_192.png" />
<!-- cache -->
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
@ -28,147 +28,132 @@
<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 property="og:image" content="https://www.marcrobledo.com/RomPatcher.js/card_thumbnail.jpg">
<meta name="twitter:image" content="https://www.marcrobledo.com/RomPatcher.js/card_thumbnail.jpg">
<meta name="twitter:card" content="photo">
<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_n64.js"></script>
<script type="text/javascript" src="./js/formats/aps_gba.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>
<link type="text/css" rel="stylesheet" href="./webapp/style.css" media="all"/>
<script type="text/javascript" src="./js/zip.js/zip.js"></script>
<!-- <script type="text/javascript" src="js/libunrar/rpc.js"></script> -->
<script type="text/javascript"><!--
// CUSTOM PATCHER EXAMPLE
// uncomment this to build your own custom exclusive patcher for your hacks/translations
// user will only need to provide the ROM file, as patches will be fetched from your server!
// a crc (or various crcs) can be provided for source files, allowing old formats like IPS to have validation!
/*var CUSTOM_PATCHER=[
{ //example: uncompressed file
file:'./_example/SML2DXv181.ips',
name:'Super Mario Land 2 DX v1.8.1 (USA/Europe)',
crc:0xd5ec24e4
},{ //example: uncompressed file
file:'./_example/SML2DXv181_jap.ips',
name:'Super Mario Land 2 DX v1.8.1 (Japan)',
crc:0xa715daf5
},{ //example: compressed file
file:'./_example/SML2DXv181.zip',
name:'Super Mario Land 2 DX v1.8.1 (World)',
crc:[0xd5ec24e4,0xa715daf5]
},{ //example: compressed file containing several patches, separate patches provided (recommended)
file:'./_example/SML2DXv181.zip',
patches:[{
file:'SML2DXv181.ips',
name:'Super Mario Land 2 DX v1.8.1 (USA/Europe)',
crc:0xd5ec24e4
},{
file:'SML2DXv181_jap.ips',
name:'Super Mario Land 2 DX v1.8.1 (Japan)',
crc:0xa715daf5
}]
}
];*/
--></script>
<script type="text/javascript" src="./rom-patcher-js/modules/BinFile.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/HashCalculator.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.ips.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.ups.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.aps_n64.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.aps_gba.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.bps.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.rup.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.ppf.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.pmsr.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/RomPatcher.format.vcdiff.js"></script>
<script type="text/javascript" src="./rom-patcher-js/modules/zip.js/zip.min.js"></script>
<script type="text/javascript" src="./rom-patcher-js/RomPatcher.js"></script>
<script type="text/javascript" src="./rom-patcher-js/RomPatcher.webapp.js"></script>
<script type="text/javascript" src="./webapp/webapp.js"></script>
</head>
<body><div id="column">
<!-- HEADER -->
<header><img src="./style/logo.png" /><h1>Rom Patcher JS</h1></header>
<header><img src="./webapp/logo.png" loading="lazy" /><h1>Rom Patcher JS</h1></header>
<!-- APP -->
<div id="wrapper">
<div id="switch-container"><span id="switch-create-button" class="button-outer"><span data-localize="creator_mode">Creator mode</span> <span id="switch-create" class="switch disabled"></span></span></div>
<div id="switch-container"><span id="switch-create-button" class="btn-transparent"><span data-localize="yes">Creator mode</span> <span id="switch-create" class="switch disabled"></span></span></div>
<div id="tab0" class="tab">
<div class="row m-b">
<div class="leftcol text-right"><label for="input-file-rom" data-localize="rom_file">ROM file:</label></div>
<div class="rightcol">
<input type="file" id="input-file-rom" class="enabled" />
<div class="tab">
<div id="rom-patcher-container">
<div class="row m-b" id="rom-patcher-row-file-rom">
<div class="text-right"><label for="rom-patcher-input-file-rom" data-localize="yes">ROM file:</label></div>
<div class="rom-patcher-container-input">
<input type="file" id="rom-patcher-input-file-rom" class="w100 empty" />
</div>
</div>
</div>
<div class="row m-b" id="rom-info">
<div class="leftcol text-right">CRC32:</div><div class="rightcol"><span id="crc32"></span></div>
<div class="leftcol text-right">MD5:</div><div class="rightcol"><span id="md5"></span></div>
<div class="leftcol text-right">SHA-1:</div><div class="rightcol"><span id="sha1"></span></div>
</div>
<div class="row m-b hide" id="row-removeheader">
<div class="leftcol text-right"></div>
<div class="rightcol">
<input type="checkbox" id="checkbox-removeheader" /> <label for="checkbox-removeheader" data-localize="remove_header">Remove header before patching</label>
<div class="row m-b" id="rom-patcher-row-alter-header">
<div></div>
<div>
<label><input type="checkbox" id="rom-patcher-checkbox-alter-header" class="styled" /> <span id="rom-patcher-span-alter-header"></span></label>
</div>
</div>
</div>
<div class="row m-b hide" id="row-addheader">
<div class="leftcol text-right"></div>
<div class="rightcol">
<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>
<div class="m-b text-selectable text-mono" id="rom-patcher-rom-info">
<div class="row">
<div class="text-right">CRC32:</div>
<div class="text-truncate"><span id="rom-patcher-span-crc32"></span></div>
</div>
<div class="row">
<div class="text-right">MD5:</div>
<div class="text-truncate"><span id="rom-patcher-span-md5"></span></div>
</div>
<div class="row">
<div class="text-right">SHA-1:</div>
<div class="text-truncate"><span id="rom-patcher-span-sha1"></span></div>
</div>
<div class="row" id="rom-patcher-row-info-rom">
<div class="text-right">ROM:</div>
<div class="text-truncate"><span id="rom-patcher-span-rom-info"></span></div>
</div>
</div>
<div class="row m-b" id="rom-patcher-row-file-patch">
<div class="text-right"><label for="rom-patcher-input-file-patch" data-localize="yes">Patch file:</label></div>
<div class="rom-patcher-container-input">
<input type="file" id="rom-patcher-input-file-patch" class="w100 empty" accept=".ips,.ups,.bps,.aps,.rup,.ppf,.mod,.xdelta,.vcdiff,.zip" />
</div>
</div>
<div class="row m-b" id="rom-patcher-row-patch-description">
<div class="text-right text-mono" data-localize="yes">Description:</div>
<div class="text-truncate" id="rom-patcher-patch-description"></div>
</div>
<div class="row m-b text-selectable text-mono" id="rom-patcher-row-patch-requirements">
<div class="text-right text-mono" id="rom-patcher-patch-requirements-type">ROM requirements:</div>
<div class="text-truncate" id="rom-patcher-patch-requirements-value"></div>
</div>
<div class="buttons text-center">
<div id="rom-patcher-row-error-message" class="m-b"><span id="rom-patcher-error-message"></span></div>
<button id="rom-patcher-button-apply" data-localize="yes" disabled>Apply patch</button>
</div>
</div>
<div class="row m-b" id="row-file-patch">
<div class="leftcol text-right"><label for="input-file-patch" data-localize="patch_file">Patch file:</label></div>
<div class="rightcol">
<input type="file" id="input-file-patch" accept=".ips,.ups,.bps,.aps,.rup,.ppf,.mod,.xdelta,.vcdiff,.zip"/>
<div id="patch-builder-container" style="display:none">
<div class="row m-b">
<div class="text-right"><label for="patch-builder-input-file-original" data-localize="yes" >Original ROM:</label></div>
<div>
<input type="file" id="patch-builder-input-file-original" class="w100 empty" />
</div>
</div>
</div>
<div class="row m-b hide" id="row-expected-source-info"></div>
<div class="buttons">
<span id="message-apply" class="message"></span>
<button id="button-apply" data-localize="apply_patch" class="disabled" disabled>Apply patch</button>
<div class="row m-b">
<div class="text-right"><label for="patch-builder-input-file-modified" data-localize="yes">Modified ROM:</label></div>
<div>
<input type="file" id="patch-builder-input-file-modified" class="w100 empty" />
</div>
</div>
<div class="row m-b">
<div class="text-right"><label for="patch-builder-select-patch-type" data-localize="yes">Patch type:</label></div>
<div>
<select id="patch-builder-select-patch-type">
<option value="ips">IPS</option>
<option value="bps">BPS</option>
<option value="ppf">PPF</option>
<option value="ups">UPS</option>
<option value="aps">APS</option>
<option value="rup">RUP</option>
</select>
</div>
</div>
<div class="buttons text-center">
<div id="patch-builder-row-error-message" class="m-b"><span id="patch-builder-error-message"></span></div>
<button id="patch-builder-button-create" disabled data-localize="yes">Create patch</button>
</div>
</div>
</div>
<div id="tab1" class="tab">
<div class="row m-b">
<div class="leftcol text-right"><label for="input-file-rom1" data-localize="original_rom" >Original ROM:</label></div>
<div class="rightcol">
<input type="file" id="input-file-rom1" />
</div>
</div>
<div class="row m-b">
<div class="leftcol text-right"><label for="input-file-rom2" data-localize="modified_rom">Modified ROM:</label></div>
<div class="rightcol">
<input type="file" id="input-file-rom2" />
</div>
</div>
<div class="row m-b">
<div class="leftcol text-right" data-localize="patch_type">Patch type:</div>
<div class="rightcol">
<select id="select-patch-type">
<option value="ips">IPS</option>
<option value="bps">BPS</option>
<option value="ppf">PPF</option>
<option value="ups">UPS</option>
<option value="aps">APS</option>
<option value="rup">RUP</option>
</select>
</div>
</div>
<div class="buttons">
<span id="message-create" class="message"></span>
<button id="button-create" class="disabled" disabled data-localize="create_patch">Create patch</button>
</div>
</div>
</div>
@ -178,64 +163,59 @@
<!-- FOOTER -->
<footer>
<div>
<button id="button-settings" class="button-outer"><img src="style/icon_settings.svg" class="icon settings" /> <span data-localize="settings">Settings</span></button>
<button id="button-settings" class="btn-transparent"><img src="./webapp/icon_settings.svg" loading="lazy" class="icon settings" /> <span data-localize="yes">Settings</span></button>
</div>
Rom Patcher JS <small>v2.9.1</small> by <a href="/">Marc Robledo</a>
Rom Patcher JS <small>v3.0 <a style="color:rgb(255, 197, 7)" href="legacy/" rel="nofollow">Beta 1</a></small> by <a href="/">Marc Robledo</a>
<br />
<img src="style/icon_github.svg" class="icon github" /> <a href="https://github.com/marcrobledo/RomPatcher.js/" target="_blank">See on GitHub</a>
<img src="style/icon_heart.svg" class="icon heart" /> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
<img src="./webapp/icon_github.svg" loading="lazy" class="icon github" /> <a href="https://github.com/marcrobledo/RomPatcher.js/" target="_blank">See on GitHub</a>
<img src="./webapp/icon_heart.svg" loading="lazy" class="icon heart" /> <a href="https://www.paypal.me/marcrobledo/5" target="_blank" rel="nofollow">Donate</a>
</footer>
</div>
<!-- SETTINGS DIALOG -->
<div id="dialog-backdrop">
<div id="zip-dialog" class="dialog">
<div id="zip-dialog-message" class="text-center"></div>
<ul id="zip-dialog-file-list"></ul>
<dialog id="dialog-settings" class="rom-patcher-dialog">
<div class="text-right m-b"><img id="dialog-settings-button-close" src="./webapp/icon_close.svg" loading="lazy" /></div>
<div class="row m-b">
<div><label for="settings-language">Language</label></div>
<div class="text-right">
<select id="settings-language" class="enabled">
<option value="en">English</option>
<option value="fr">Français</option>
<option value="de">Deutsch</option>
<option value="it">Italiano</option>
<option value="es">Español</option>
<option value="nl">Nederlands</option>
<option value="sv">Svenska</option>
<option value="ca">Català</option>
<option value="ca-va">Valencià</option>
<option value="pt-br">Português Brasileiro</option>
<option value="ru">Russian</option>
<option value="ja">日本語</option>
<option value="zh-cn">中文(简体)</option>
<option value="zh-tw">中文(正體)</option>
</select>
</div>
</div>
<div id="settings-dialog" class="dialog">
<div class="text-right m-b"><img id="settings-close-dialog" src="style/icon_close.svg" /></div>
<div class="row row-lg m-b">
<div><label data-localize="yes" for="settings-output-suffix">Use patch name for output</label></div>
<div class="text-right"><input type="checkbox" id="settings-output-suffix" class="styled" /></div>
</div>
<div class="row m-b">
<div class="leftcol"><label for="select-language">Language</label></div>
<div class="rightcol text-right">
<select id="select-language" class="enabled w100">
<option value="en">English</option>
<option value="fr">Français</option>
<option value="de">Deutsch</option>
<option value="it">Italiano</option>
<option value="es">Español</option>
<option value="nl">Nederlands</option>
<option value="sv">Svenska</option>
<option value="ca">Català</option>
<option value="ca-va">Valencià</option>
<option value="pt-br">Português Brasileiro</option>
<option value="ru">Russian</option>
<option value="ja">日本語</option>
<option value="zh-cn">中文(简体)</option>
<option value="zh-tw">中文(正體)</option>
</select>
</div>
</div>
<div class="row row-lg m-b">
<div><label data-localize="yes" for="settings-fix-checksum">Fix ROM checksum</label></div>
<div class="text-right"><input type="checkbox" id="settings-fix-checksum" class="styled" /></div>
</div>
<div class="row m-b">
<div class="leftcol-lg"><label data-localize="alternate_output_name">Use patch name for output</label></div>
<div class="rightcol-lg text-right"><span id="switch-output-name" class="switch disabled"></span></div>
</div>
<div class="row m-b">
<div class="leftcol-lg"><label data-localize="fix_checksum">Fix ROM checksum</label></div>
<div class="rightcol-lg text-right"><span id="switch-fix-checksum" class="switch disabled"></span></div>
</div>
<div class="row">
<div class="leftcol-lg"><label data-localize="light_theme">Light theme</label></div>
<div class="rightcol-lg text-right"><span id="switch-theme" class="switch disabled"></span></div>
</div>
<div class="row row-lg">
<div><label data-localize="yes" for="settings-light-theme">Light theme</label></div>
<div class="text-right"><input type="checkbox" id="settings-light-theme" class="styled" /></div>
</div>
</div>
</body></html>