- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "Skip Intro"
  author: "illusion"
  arch: orbis
  patch_list:
        - [ bytes32, 0x04d99138, 0x00000000 ]
        - [ bytes32, 0x04d99154, 0x00000000 ]
        - [ bytes32, 0x04d9916e, 0x00000000 ]

- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "30 FPS Fix (Proper Frame Pacing)"
  author: "illusion, Lance McDonald (manfightdragon)"
  note: "Caps framerate to 30 with proper frame pacing."
  arch: orbis
  patch_list:
        - [ float32, 0x02434883, 0.016666667 ]
        # SceVideoOutFliprate(handle, 1);
        # return;
        - [ bytes, 0x02ad61df, "be010000004989dc9090909090" ]

- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "Disable Chromatic Aberration"
  author: "illusion"
  arch: orbis
  patch_list:
        - [ bytes, 0x0269faa8, "c783ac000000000000009090" ]

- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "Disable Motion Blur"
  author: "illusion"
  arch: orbis
  patch_list:
        - [ bytes, 0x026a057b, "eb16" ]

- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "60 FPS (With Deltatime)"
  author: "Lance McDonald (manfightdragon)"
  arch: orbis
  patch_list:
        # Diff generated from: https://www.patreon.com/posts/47314774
        # Todo: figure out what all these do
        # Every blank line is beginning diff'd areas

        # assertion skip
        - [ bytes, 0x00fbc40f, "eb1d" ]                 # JMP 0x00fbc42e
        # free up code space for next section 
        - [ bytes, 0x013d2e16, "eb19" ]                 # JMP 0x013d2e31
        # multiply something by 2x
        - [ bytes, 0x013d2e18, "4156" ]                 # PUSH R14
        - [ bytes, 0x013d2e1a, "41c746080000003f" ]     # MOV dword ptr [R14 + 0x8],0x3f000000
        - [ bytes, 0x013d2e22, "c4c17a5e4608" ]         # VDIVSS XMM0,XMM0,dword ptr [R14 + 0x8]
        - [ bytes, 0x013d2e28, "415e" ]                 # POP R14
        - [ bytes, 0x013d2e2a, "e933070000" ]           # JMP 0x013d3562
        - [ bytes, 0x013d2e2f, "90" ]                   # NOP
        - [ bytes, 0x013d2e30, "90" ]                   # NOP
        # 0.5 to xmm0
        - [ bytes, 0x013d3557, "c4c17a104608" ]         # VMOVSS XMM0,dword ptr [R14 + 0x8]
        - [ bytes, 0x013d355d, "e9b6f8ffff" ]           # JMP 0x013d2e18
        # deltatime code cave
        - [ bytes, 0x01bf9b71, "e933010000" ]           # JMP 0x01bf9ca9
        - [ bytes, 0x01bf9b76, "90" ]                   # NOP
        - [ bytes, 0x01bf9b77, "90" ]                   # NOP
        # get and write physics deltatime to game logic
        - [ bytes, 0x01bf9ca9, "488d054868d403" ]       # LEA RAX,[0x59404f8]
        - [ bytes, 0x01bf9cb0, "488b00" ]               # MOV RAX,qword ptr [RAX]
        - [ bytes, 0x01bf9cb3, "8b8064020000" ]         # MOV EAX,dword ptr [RAX + 0x264]
        - [ bytes, 0x01bf9cb9, "8945b8" ]               # MOV dword ptr [RBP + -0x48],EAX
        - [ bytes, 0x01bf9cbc, "90" ]                   # NOP
        - [ bytes, 0x01bf9cbd, "90" ]                   # NOP
        - [ bytes, 0x01bf9cbe, "90" ]                   # NOP
        - [ bytes, 0x01bf9cbf, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc0, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc1, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc2, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc3, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc4, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc5, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc6, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc7, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc8, "90" ]                   # NOP
        - [ bytes, 0x01bf9cc9, "90" ]                   # NOP
        - [ bytes, 0x01bf9cca, "90" ]                   # NOP
        - [ bytes, 0x01bf9ccb, "90" ]                   # NOP
        - [ bytes, 0x01bf9ccc, "90" ]                   # NOP
        - [ bytes, 0x01bf9ccd, "90" ]                   # NOP
        - [ bytes, 0x01bf9cce, "90" ]                   # NOP
        - [ bytes, 0x01bf9ccf, "90" ]                   # NOP
        - [ bytes, 0x01bf9cd0, "90" ]                   # NOP
        - [ bytes, 0x01bf9cd1, "90" ]                   # NOP
        - [ bytes, 0x01bf9cd2, "e9a1feffff" ]           # JMP 0x01bf9b78
        # string redirect
        - [ bytes, 0x020367c7, "488d351cd2c702" ]       # LEA RSI,[0x4cb39ea]
        - [ bytes, 0x020369e8, "488d35b5cfc702" ]       # LEA RSI,[0x4cb39a4]
        # write deltatime to something
        - [ bytes, 0x021bc181, "488d3d70437803" ]       # LEA RDI,[0x59404f8]
        - [ bytes, 0x021bc188, "488b3f" ]               # MOV RDI,qword ptr [RDI]
        - [ bytes, 0x021bc18b, "c5fa598764020000" ]     # VMULSS XMM0,XMM0,dword ptr [RDI + 0x264]
        - [ bytes, 0x021bc193, "90" ]                   # NOP
        - [ bytes, 0x021bc194, "90" ]                   # NOP
        - [ bytes, 0x021bc195, "90" ]                   # NOP
        - [ bytes, 0x021bc196, "90" ]                   # NOP
        - [ bytes, 0x021bc197, "90" ]                   # NOP
        - [ bytes, 0x021bc198, "90" ]                   # NOP
        - [ bytes, 0x021bc199, "90" ]                   # NOP
        - [ bytes, 0x021bc19a, "90" ]                   # NOP
        - [ bytes, 0x021bc19b, "90" ]                   # NOP
        - [ bytes, 0x021bc19c, "90" ]                   # NOP
        - [ bytes, 0x021bc19d, "e96e010000" ]           # JMP 0x021bc310
        # deltatime code cave
        - [ bytes, 0x021bc308, "e974feffff" ]           # JMP 0x021bc181
        - [ bytes, 0x021bc30d, "90" ]                   # NOP
        - [ bytes, 0x021bc30e, "90" ]                   # NOP
        - [ bytes, 0x021bc30f, "90" ]                   # NOP
        # write deltatime to something
        - [ bytes, 0x02377cea, "eb24" ]                 # JMP 0x02377d10
        - [ bytes, 0x02377cec, "488d1d05885c03" ]       # LEA RBX,[0x59404f8]
        - [ bytes, 0x02377cf3, "488b1b" ]               # MOV RBX,qword ptr [RBX]
        - [ bytes, 0x02377cf6, "c5fa108364020000" ]     # VMOVSS XMM0,dword ptr [RBX + 0x264]
        - [ bytes, 0x02377cfe, "90" ]                   # NOP
        - [ bytes, 0x02377cff, "90" ]                   # NOP
        - [ bytes, 0x02377d00, "90" ]                   # NOP
        - [ bytes, 0x02377d01, "90" ]                   # NOP
        - [ bytes, 0x02377d02, "90" ]                   # NOP
        - [ bytes, 0x02377d03, "90" ]                   # NOP
        - [ bytes, 0x02377d04, "90" ]                   # NOP
        - [ bytes, 0x02377d05, "90" ]                   # NOP
        - [ bytes, 0x02377d06, "90" ]                   # NOP
        - [ bytes, 0x02377d07, "90" ]                   # NOP
        - [ bytes, 0x02377d08, "90" ]                   # NOP
        - [ bytes, 0x02377d09, "90" ]                   # NOP
        - [ bytes, 0x02377d0a, "90" ]                   # NOP
        - [ bytes, 0x02377d0b, "90" ]                   # NOP
        - [ bytes, 0x02377d0c, "90" ]                   # NOP
        - [ bytes, 0x02377d0d, "90" ]                   # NOP
        - [ bytes, 0x02377d0e, "eb42" ]                 # JMP 0x02377d52
        - [ bytes, 0x02377d48, "eba2" ]                 # JMP 0x02377cec
        # write deltatime to something
        - [ bytes, 0x02418e3d, "8b8364020000" ]         # MOV EAX,dword ptr [RBX + 0x264]
        - [ bytes, 0x02418e43, "8945c8" ]               # MOV dword ptr [RBP + -0x38],EAX
        - [ bytes, 0x02418e46, "90" ]                   # NOP
        - [ bytes, 0x02418e47, "90" ]                   # NOP
        - [ bytes, 0x02418e48, "90" ]                   # NOP
        - [ bytes, 0x02418e49, "90" ]                   # NOP
        - [ bytes, 0x02418e4a, "90" ]                   # NOP
        - [ bytes, 0x02418e4b, "90" ]                   # NOP
        - [ bytes, 0x02418e4c, "90" ]                   # NOP
        - [ bytes, 0x02418e4d, "90" ]                   # NOP
        - [ bytes, 0x02418e4e, "90" ]                   # NOP
        - [ bytes, 0x02418e4f, "90" ]                   # NOP
        - [ bytes, 0x02418e50, "90" ]                   # NOP
        - [ bytes, 0x02418e51, "90" ]                   # NOP
        - [ bytes, 0x02418e52, "90" ]                   # NOP
        - [ bytes, 0x02418e53, "90" ]                   # NOP
        - [ bytes, 0x02418e54, "90" ]                   # NOP
        - [ bytes, 0x02418e55, "90" ]                   # NOP
        - [ bytes, 0x02418e56, "90" ]                   # NOP
        - [ bytes, 0x02418e57, "90" ]                   # NOP
        - [ bytes, 0x02418e58, "90" ]                   # NOP
        - [ bytes, 0x02418e59, "90" ]                   # NOP
        - [ bytes, 0x02418e5a, "90" ]                   # NOP
        - [ bytes, 0x02418e5b, "90" ]                   # NOP
        - [ bytes, 0x02418e5c, "90" ]                   # NOP
        - [ bytes, 0x02418e5d, "90" ]                   # NOP
        - [ bytes, 0x02418e5e, "90" ]                   # NOP
        - [ bytes, 0x02418e5f, "90" ]                   # NOP
        - [ bytes, 0x02418e60, "90" ]                   # NOP
        - [ bytes, 0x02418e61, "90" ]                   # NOP
        - [ bytes, 0x02418e62, "90" ]                   # NOP
        - [ bytes, 0x02418e63, "90" ]                   # NOP
        - [ bytes, 0x02418e64, "488d05a5765203" ]       # LEA RAX,[0x5940510]
        # frame update to 16.67ms
        - [ bytes, 0x0243487e, "41c74424188988883c" ]   # MOV dword ptr [R12 + 0x18],0x3c888889
        - [ bytes, 0x02434887, "48b90000000001000000" ] # MOV RCX,0x100000000

        - [ bytes, 0x02483ec1, "c3" ]                   # RET
        - [ bytes, 0x02483ec2, "90" ]                   # NOP
        - [ bytes, 0x02483ec3, "90" ]                   # NOP
        - [ bytes, 0x02483ec4, "90" ]                   # NOP
        - [ bytes, 0x02483ec5, "90" ]                   # NOP

        - [ bytes, 0x02715d71, "e881090000" ]           # CALL 0x027166f7
        - [ bytes, 0x02715d76, "90" ]                   # NOP
        - [ bytes, 0x02715d77, "90" ]                   # NOP
        - [ bytes, 0x02715d78, "90" ]                   # NOP

        # Text
        - [ utf16, 0x04cb39ea, "This 60fps patch was\x00\x00" ]
        - [ utf16, 0x04cb39a4, "Made with love, by Lance McDonald\x00\x00" ]

- patch:
  title: "Bloodborne"
  app_ver: "01.09"
  app_titleid: [ "CUSA00900", "CUSA00207", "CUSA03173", "CUSA00208", "CUSA01363" ]
  app_elf: "eboot.bin"
  patch_ver: "1.0"
  name: "Resolution Patch (720p)"
  author: "Lance McDonald (manfightdragon)"
  arch: orbis
  patch_list:
        # Render Target
        - [ bytes32, 0x055289f8, 1280 ]
        - [ bytes32, 0x055289fc, 720  ]
        # Reticle Fix
        - [ bytes, 0x01a44c55, "b880070000" ]           # MOV EAX,0x780
        - [ bytes, 0x01a44c5a, "90" ]                   # NOP
        - [ bytes, 0x01a44c5b, "90" ]                   # NOP
        - [ bytes, 0x01a44c5c, "90" ]                   # NOP
        - [ bytes, 0x01a44c5d, "90" ]                   # NOP
        - [ bytes, 0x01a44c5e, "c4e1fa2ac8" ]           # VCVTSI2SS XMM1,XMM0,RAX
        - [ bytes, 0x01a44c63, "b838040000" ]           # MOV EAX,0x438
        - [ bytes, 0x01a44c68, "90" ]                   # NOP
        - [ bytes, 0x01a44c69, "90" ]                   # NOP
        - [ bytes, 0x01a44c6a, "90" ]                   # NOP
        - [ bytes, 0x01a44c6b, "90" ]                   # NOP
        # Reticle Fix
        - [ bytes, 0x01a452c7, "b880070000" ]           # MOV EAX,0x780
        - [ bytes, 0x01a452cc, "90" ]                   # NOP
        - [ bytes, 0x01a452cd, "90" ]                   # NOP
        - [ bytes, 0x01a452ce, "90" ]                   # NOP
        - [ bytes, 0x01a452cf, "90" ]                   # NOP
        - [ bytes, 0x01a452d0, "c4e1fa2ac8" ]           # VCVTSI2SS XMM1,XMM0,RAX
        - [ bytes, 0x01a452d5, "b838040000" ]           # MOV EAX,0x438
        - [ bytes, 0x01a452da, "90" ]                   # NOP
        - [ bytes, 0x01a452db, "90" ]                   # NOP
        - [ bytes, 0x01a452dc, "90" ]                   # NOP
        - [ bytes, 0x01a452dd, "90" ]                   # NOP