Skip to content

Add ability to apply multiple patches to same ROM #422

@chainsawsalad

Description

@chainsawsalad

Is your feature request related to a problem?

No response

Describe the solution you'd like

Many ROMs have addendum patches that have patch dependencies; they assume the core ROM has already been patched. It seems that igir will produce a unique ROM for each patch file it finds, and does not combine them. Also for some patches, order of being applied matters.

Examples:

Kaeru no Tame ni Kane wa Naru: (order matters)
Translation: https://www.romhacking.net/translations/1623/
Addendum (fix title screen): https://www.romhacking.net/translations/6517/

Final Fantasy II: (order doesn't matter)
Ultima (contains multiple optional patches): https://www.romhacking.net/hacks/4134/

Additional context

For ips patches I've tried adding the CRC32 checksum of the dependency ROM for each successive patch, but it didn't make a difference. It only lead to the later patches failing to be applied because igir seems to be unaware of the matching checksum of a new ROM it generated after applying a patch.

Example

> ls $INPUT
Kaeru no Tame ni Kane wa Naru (Japan).gb

> ls $PATCHES
"Frog_v1.0.ips"
"The Frog for Whom the Bell Tolls.ips"

> crc32 $INPUT/"Kaeru no Tame ni Kane wa Naru (Japan).gb"
c18cd57a
> mv $PATCHES/"Frog_v1.0.ips" $PATCHES/"Frog_v1.0 c18cd57a.ips"

> crc32 Frog_v1.0.gb (obtained after manually patching)
630193e8
> mv $PATCHES/"The Frog for Whom the Bell Tolls.ips" $PATCHES/"The Frog for Whom the Bell Tolls 630193e8.ips"

> ls $PATCHES
"Frog_v1.0 c18cd57a.ips"
"The Frog for Whom the Bell Tolls 630193e8.ips"

> npx igir@latest copy --input $INPUT --output $OUTPUT --patch $PATCHES

...

> ls $OUTPUT/Kaeru no Tame ni Kane wa Naru (Japan)/
"Frog_v1.0.gb"
"Kaeru no Tame ni Kane wa Naru (Japan).gb"
(no "The Frog for Whom the Bell Tolls.gb")

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions