{
  "schemaVersion": 1,
  "game": "Streets of Rage / Bare Knuckle (JUE)",
  "romSha256": "dd44f120446654bb91c448762f3e0cd0d9b034f35d0e3266a4dc34402ada95c0",
  "wasmSha256": "cfec0e5915c4b3d03336482e990a7809f16b37909992f94631c2cad8e92b5aae",
  "defaults": "All four options off, per page session; no toggle selection stored in portable snapshots.",
  "application": "Reversible native-core ROM patches; original supplied SMD and normalized .md files remain unchanged. Disabling options restores original instruction words.",
  "sources": [
    {
      "url": "https://github.com/gsaurus/sor-disassemblies/tree/4dd719f3ed5c24c86deee616b56cea885e3113d7",
      "kind": "Original-ROM assembly labels and control flow; target instruction words checked in this exact cartridge"
    },
    {
      "url": "https://github.com/RuiNelson/StreetsOfRageRecompilation/tree/370414b422130a248736b35a07a2006e51e6a92e",
      "kind": "Supplementary player health, police, timer and life accounting analysis; verified against cartridge instructions and actual native execution"
    },
    {
      "url": "https://github.com/ekeeke/Genesis-Plus-GX/blob/master/libretro/libretro.c",
      "kind": "Native patch-code parser and reversible ROM patch mechanism"
    }
  ],
  "patches": [
    {
      "id": "timer",
      "code": "010C88:4E75",
      "original": "4A38",
      "meaning": "Return from round-clock update without consuming countdown ticks."
    },
    {
      "id": "health",
      "code": "003538:7E00",
      "original": "4447",
      "meaning": "Replace signed incoming damage negation with zero; original hit animation and health-bar path remain. Applies to both player slots. Falls can still cause death."
    },
    {
      "id": "specials",
      "code": "00402C:4E71+00402E:4E71",
      "original": [
        "6776",
        "5311"
      ],
      "meaning": "Skip empty-stock return and stock subtraction in shared police activation; original action gates and full police sequence remain."
    },
    {
      "id": "lives",
      "code": "003448:4E75",
      "original": "4DF8",
      "meaning": "Return from shared death life-deduction routine, preserving remaining lives before original respawn/game-over test."
    }
  ],
  "verification": {
    "method": "Actual retained WASM paired native gameplay branches, identical saved encounter. Original ROM file untouched. Narrow generated health fixture only for reproducible lethal enemy hit.",
    "timer": {
      "normal": {
        "before": "39",
        "after": "38"
      },
      "enabled": {
        "before": "39",
        "after": "39"
      },
      "afterDisable": "38"
    },
    "p1": {
      "health": {
        "normal": 72,
        "enabled": 80,
        "afterDisable": 72
      },
      "specialCallsEnabled": [
        {
          "started": true,
          "frames": 637,
          "stock": 1
        },
        {
          "started": true,
          "frames": 636,
          "stock": 1
        },
        {
          "started": true,
          "frames": 636,
          "stock": 1
        }
      ],
      "lives": {
        "normal": 2,
        "enabled": 3,
        "afterDisable": 2
      }
    },
    "p2": {
      "normalHit": {
        "frame": 1206,
        "gameState": 22,
        "mode": 3,
        "p1type": 1,
        "p2type": 1,
        "hp": 80,
        "hp2": 72,
        "lives": 3,
        "lives2": 3,
        "special": 1,
        "special2": 1,
        "timer": 55,
        "x": 1025,
        "action": 6,
        "police": 0
      },
      "protectedHit": {
        "frame": 1387,
        "gameState": 22,
        "mode": 3,
        "p1type": 1,
        "p2type": 1,
        "hp": 80,
        "hp2": 80,
        "lives": 3,
        "lives2": 3,
        "special": 1,
        "special2": 1,
        "timer": 55,
        "x": 1025,
        "action": 6,
        "police": 0
      },
      "normalDeath": {
        "frame": 1868,
        "gameState": 22,
        "mode": 3,
        "p1type": 1,
        "p2type": 1,
        "hp": 64,
        "hp2": 80,
        "lives": 3,
        "lives2": 2,
        "special": 1,
        "special2": 1,
        "timer": 57,
        "x": 989,
        "action": 2,
        "police": 0
      },
      "protectedDeath": {
        "frame": 2349,
        "gameState": 22,
        "mode": 3,
        "p1type": 1,
        "p2type": 1,
        "hp": 64,
        "hp2": 80,
        "lives": 3,
        "lives2": 3,
        "special": 1,
        "special2": 1,
        "timer": 57,
        "x": 989,
        "action": 2,
        "police": 0
      },
      "normalSpecial": {
        "started": true,
        "caller": 1,
        "frames": 824,
        "completed": true,
        "stock": 0
      },
      "unlimitedSpecials": [
        {
          "started": true,
          "caller": 1,
          "frames": 824,
          "completed": true,
          "stock": 1
        },
        {
          "started": true,
          "caller": 1,
          "frames": 824,
          "completed": true,
          "stock": 1
        }
      ],
      "lethalFixture": "Only the P2 health word was set to1 in an otherwise native round snapshot. Enemy damage, death resolution, life accounting and respawn ran through original native code."
    },
    "zeroStockPolice": {
      "started": true,
      "completed": true,
      "frames": 637,
      "stock": 0
    },
    "combined": {
      "gameplay": {
        "frame": 362,
        "gameState": 22,
        "mode": 1,
        "p1type": 1,
        "p2type": 0,
        "hp": 80,
        "hp2": 0,
        "lives": 3,
        "lives2": 3,
        "special": 1,
        "special2": 0,
        "timer": 57,
        "x": 1015,
        "action": 96,
        "police": 0
      },
      "timer": 57,
      "snapshotExactWithActivePatches": true,
      "snapshotDoesNotStoreToggleSelection": true,
      "restartReapplyWorks": true,
      "offRestoresOriginalDamageAndClock": true
    },
    "romTargetsVerified": [
      {
        "offset": 68744,
        "expected": 19000,
        "value": 20085
      },
      {
        "offset": 13624,
        "expected": 17479,
        "value": 32256
      },
      {
        "offset": 16428,
        "expected": 26486,
        "value": 20081
      },
      {
        "offset": 16430,
        "expected": 21265,
        "value": 20081
      },
      {
        "offset": 13384,
        "expected": 19960,
        "value": 20085
      }
    ],
    "sourceUnchanged": true,
    "allPassed": true
  },
  "limits": [
    "Paired tests cover round-one encounters, genuine hits, native KO/death/respawn and full police sequences, plus narrowly stated1HP lethal fixtures. They are not a complete-campaign playthrough.",
    "Infinite HP blocks hit damage; stage falls can still kill. No life loss preserves remaining lives, and does not create a life if none remain.",
    "With unlimited specials enabled, the original HUD may show zero while a call remains available."
  ]
}
