From b0642131339633c731b73b6b271bf7912b7d4e32 Mon Sep 17 00:00:00 2001 From: vagnercruz Date: Thu, 13 Jun 2024 13:57:37 -0300 Subject: [PATCH 1/3] docs: Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 31deb5d..f1e6b7e 100644 --- a/README.md +++ b/README.md @@ -26,3 +26,4 @@ A ROM patcher made in HTML5. * [Radical Red](https://patch.radicalred.net/) * [Rocket Edition](https://rocket-edition.com/download/) * [SnapCameraPreservation](https://snapchatreverse.jaku.tv/snap/) +* [Pokemon Clover](https://poclo.net/download) From cc3c5b971c5c266b5104b37183ec91da2de478ab Mon Sep 17 00:00:00 2001 From: vagnercruz Date: Tue, 18 Jun 2024 18:32:56 -0300 Subject: [PATCH 2/3] BSP Support --- js/RomPatcher.js | 5 ++- js/formats/BSP.js | 101 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 104 insertions(+), 2 deletions(-) create mode 100644 js/formats/BSP.js diff --git a/js/RomPatcher.js b/js/RomPatcher.js index f174c74..76c0558 100644 --- a/js/RomPatcher.js +++ b/js/RomPatcher.js @@ -648,6 +648,8 @@ function _getHeaderChecksumInfo(file){ } +const BPS_MAGIC = "BPS1"; // Verifique o valor correto para a mágica do BPS + function _readPatchFile(){ setTabApplyEnabled(false); patchFile.littleEndian=false; @@ -679,9 +681,8 @@ function _readPatchFile(){ patch=parseVCDIFF(patchFile); }else{ patch=null; - setMessage('apply', 'error_invalid_patch', 'error'); + setMessage('apply', 'Unsupported patch format', 'error'); } - validateSource(); setTabApplyEnabled(true); } diff --git a/js/formats/BSP.js b/js/formats/BSP.js new file mode 100644 index 0000000..171a07c --- /dev/null +++ b/js/formats/BSP.js @@ -0,0 +1,101 @@ +/* BSP module for Rom Patcher JS v20220417 - Vagner Matheus 2016-2024 */ +const BSP_MAGIC = 'BSP'; +const BSP_VERSION = 1; +const BSP_MAX_SIZE = 0x1000000; // 16 megabytes + +function BSP() { + this.records = []; +} + +BSP.prototype.addRecord = function(o, d) { + this.records.push({offset: o, data: d}); +}; + +BSP.prototype.toString = function() { + let s = 'Records: ' + this.records.length; + return s; +}; + +BSP.prototype.export = function(fileName) { + let patchFileSize = 8; // BSP magic + version + for (let i = 0; i < this.records.length; i++) { + patchFileSize += 4 + this.records[i].data.length; // offset + data length + } + + let tempFile = new MarcFile(patchFileSize); + tempFile.fileName = fileName + '.bsp'; + tempFile.writeString(BSP_MAGIC); + tempFile.writeU32(BSP_VERSION); + + for (let i = 0; i < this.records.length; i++) { + let rec = this.records[i]; + tempFile.writeU32(rec.offset); + tempFile.writeBytes(rec.data); + } + + return tempFile; +}; + +BSP.prototype.apply = function(romFile) { + let tempFile = new MarcFile(romFile.fileSize); + romFile.copyToFile(tempFile, 0); + + for (let i = 0; i < this.records.length; i++) { + tempFile.seek(this.records[i].offset); + tempFile.writeBytes(this.records[i].data); + } + + return tempFile; +}; + +function parseBSPFile(file) { + let patchFile = new BSP(); + file.seek(4); // Skip magic + let version = file.readU32(); + + if (version !== BSP_VERSION) { + throw new Error('Unsupported BSP version'); + } + + while (!file.isEOF()) { + let offset = file.readU32(); + let length = file.fileSize - file.offset; // remaining bytes + let data = file.readBytes(length); + patchFile.addRecord(offset, data); + } + + return patchFile; +} + +function createBSPFromFiles(original, modified) { + let patch = new BSP(); + + while (!modified.isEOF()) { + let b1 = original.isEOF() ? 0x00 : original.readU8(); + let b2 = modified.readU8(); + + if (b1 !== b2) { + let differentData = []; + let startOffset = modified.offset - 1; + + while (b1 !== b2 && differentData.length < 0xffff) { + differentData.push(b2); + if (modified.isEOF() || differentData.length === 0xffff) { + break; + } + + b1 = original.isEOF() ? 0x00 : original.readU8(); + b2 = modified.readU8(); + } + + if (startOffset >= BSP_MAX_SIZE) { + throw new Error('Files are too big for BSP format'); + return null; + } + + patch.addRecord(startOffset, differentData); + } + } + + return patch; +} From 3863c9a877d62c3adc7cc62af8016fce0b0c99f0 Mon Sep 17 00:00:00 2001 From: Marc Robledo Date: Sat, 20 Jul 2024 16:19:45 +0200 Subject: [PATCH 3/3] reverted regressions --- js/RomPatcher.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/js/RomPatcher.js b/js/RomPatcher.js index 76c0558..fe8551c 100644 --- a/js/RomPatcher.js +++ b/js/RomPatcher.js @@ -648,8 +648,6 @@ function _getHeaderChecksumInfo(file){ } -const BPS_MAGIC = "BPS1"; // Verifique o valor correto para a mágica do BPS - function _readPatchFile(){ setTabApplyEnabled(false); patchFile.littleEndian=false; @@ -681,7 +679,7 @@ function _readPatchFile(){ patch=parseVCDIFF(patchFile); }else{ patch=null; - setMessage('apply', 'Unsupported patch format', 'error'); + setMessage('apply', 'error_invalid_patch', 'error'); } validateSource(); setTabApplyEnabled(true);