The Last of Us: Difference between revisions

From RPCS3 Wiki
No edit summary
 
(164 intermediate revisions by 16 users not shown)
Line 1: Line 1:
<!-- please read the wiki conventions page and documentation for templates before creating a new game page -->{{vginfobox
<!-- please read the wiki conventions page and documentation for templates before creating a new game page -->{{vginfobox
|image    = [[File:{{#setmainimage:TLOUcover.jpg}}|300px]]
|developer = Naughty Dog
|developer = Naughty Dog
|publisher = Sony Computer Entertainment
|publisher = Sony Computer Entertainment
|date      = June 14, 2013
|date      = June 14, 2013
|release  = PlayStation exclusive <!-- PS3 and PS4 (Remastered version) -->
|release  = PlayStation exclusive<!-- PS3 and PS4 (Remastered version) -->
|genre    = Action, Adventure, Survival horror
|genre    = Action, Adventure, Survival horror
|modes    = Single-player, Multiplayer <!-- Choose all relevant options: Single-player, Co-op, Multiplayer -->
|modes    = Single-player, Multiplayer<!-- Choose all relevant options: Single-player, Co-op, Multiplayer -->
|gameid    = {{gameid|id=BCES01584, BCES01585, BCUS98174, NPEA00435|oid=BCAS20270, BCJS37010, NPJA00096, NPUA80960|ird=Yes}}<br>'''''Left Behind'''''<br>{{gameid|oid=NPEA00521, NPJA00129, NPUA81175, NPHA80279|ird=No}}<br>'''''Demo'''''<br>{{gameid|id=NPHA80206, NPUA70257|ird=NA}}
|gameid    = {{gameid|id=BCES01584, BCES01585, BCUS98174, BCJS37010, NPEA00435, NPHA80243|oid=BCAS20270, NPJA00096, NPUA80960|ird=Yes}}<br>'''''Left Behind'''''<br>{{gameid|id=NPEA00521, NPUA81175|oid=NPJA00129, NPHA80279|ird=No}}<br>'''''Demo'''''<br>{{gameid|id=NPEA90122, NPUA70257, NPHA80246|ird=NA}}<br>'''''Bonus Video'''''<br>{{gameid|id=NPJM00012|ird=NA}}<br>'''''Soundtrack'''''<br>{{gameid|id=NPEA00454, NPUA30134|ird=NA}}<br>'''''Survival Guide'''''<br>{{gameid|id=NPUO30130|ird=NA}}
|internal resolution = 1280x720
}}
}}


Line 18: Line 20:
<!-- Enter mandatory non-default settings to be used. Recommendatory or default settings can be entered only on exceptional basis. -->{{config
<!-- Enter mandatory non-default settings to be used. Recommendatory or default settings can be entered only on exceptional basis. -->{{config
<!-- CPU configuration -->
<!-- CPU configuration -->
|ppu decoder                          = <!-- Interpreter (precise), Interpreter (fast), Recompiler (LLVM) -->
|ppu decoder                          = <!-- Interpreter (static), Interpreter (dynamic), Recompiler (LLVM) -->
|ppu decoder notes                    =  
|ppu decoder notes                    =  
|spu decoder                          = <!-- Interpreter (precise), Interpreter (fast), Recompiler (ASMJIT), Recompiler (LLVM) -->
|spu decoder                          = <!-- Interpreter (static), Interpreter (dynamic), Recompiler (ASMJIT), Recompiler (LLVM) -->
|spu decoder notes                    =  
|spu decoder notes                    =  
|preferred spu threads                = <!-- Auto, Single digit between 1 to 6 (e.g. 3), Range between 1 to 6 (e.g. 1 - 3) -->
|preferred spu threads                = <!-- Auto, Single digit between 1 to 6 (e.g. 3), Range between 1 to 6 (e.g. 1 - 3) -->
|preferred spu threads notes          =  
|preferred spu threads notes          =  
|enable thread scheduler               = <!-- On, Off -->
|thread scheduler                     = <!-- Operating System, RPCS3 Scheduler, RPCS3 Alternative Scheduler -->
|enable thread scheduler notes         =
|thread scheduler notes               =  
|lower spu thread priority            = <!-- On, Off -->
|lower spu thread priority notes      =  
|enable spu loop detection            = <!-- On, Off -->
|enable spu loop detection            = <!-- On, Off -->
|enable spu loop detection notes      =  
|enable spu loop detection notes      =  
|spu cache                            = <!-- On, Off -->
|spu xfloat accuracy                  = <!-- Accurate, Approximate, Relaxed -->
|spu cache notes                      =
|spu xfloat accuracy notes             =  
|accurate xfloat                      = <!-- On, Off -->
|accurate xfloat notes                 =  
|spu block size                        = <!-- Safe, Mega, Giga -->
|spu block size                        = <!-- Safe, Mega, Giga -->
|spu block size notes                  =  
|spu block size notes                  =  
Line 43: Line 41:
|aspect ratio                          = <!-- 4:3, 16:9 -->
|aspect ratio                          = <!-- 4:3, 16:9 -->
|aspect ratio notes                    =  
|aspect ratio notes                    =  
|framelimit                            = 60 <!-- Off, 59.94, 50, 60, 30, Auto -->
|framelimit                            = 60<!-- Off, 50, 60, 30, Auto, PS3 Native, Infinite -->
|framelimit notes                      = Enabling framelimit prevents rare crashes during loading screens when framerate may exceed 500FPS. Alternatively, enable VSync on a 60Hz monitor for the same effect.
|framelimit notes                      = Enabling framelimit prevents rare crashes during loading screens when framerate may exceed 500 FPS. Alternatively, enable VSync on a 60Hz monitor for the same effect.
|anisotropic filter                    = <!-- Auto, 2x, 4x, 8x, 16x -->
|anisotropic filter                    = <!-- Auto, 2x, 4x, 8x, 16x -->
|anisotropic filter notes              =  
|anisotropic filter notes              =  
|anti-aliasing                        = <!-- Auto, Disabled -->
|anti-aliasing                        = <!-- Auto, Disabled -->
|anti-aliasing notes                  =  
|anti-aliasing notes                  =  
|zcull accuracy                        = Relaxed<!-- Precise, Approximate, Relaxed -->
|zcull accuracy notes                  = Improves performance.
|default resolution                    = <!-- 1920x1080, 1280x720, 720x480, 720x576, 1600x1080, 1440x1080, 1280x1080, 960x1080 -->
|default resolution                    = <!-- 1920x1080, 1280x720, 720x480, 720x576, 1600x1080, 1440x1080, 1280x1080, 960x1080 -->
|default resolution notes              =  
|default resolution notes              =  
|resolution scale                      = 100 <!-- Value between 50% to 800% -->
|resolution scale                      = 100<!-- Value between 50% to 800% -->
|resolution scale notes                = Resolution scaling is only supported when the MLAA patch is enabled.
|resolution scale notes                = Resolution scaling only works with the MLAA patch.
|resolution scale threshold            = 1x1 <!-- Value between 1 to 1024 in the format 16 x 16 -->
|resolution scale threshold            = 1 x 1<!-- Value between 1 to 1024 in the format 16 x 16 -->
|resolution scale threshold notes      = When using Resolution scaling above 100%, this must be set to 1x1 otherwise some effects like lens flare wil be missing.
|resolution scale threshold notes      = When using Resolution scaling above 100%, this must be set to 1 x 1 otherwise some effects like lens flares will be missing.
|shader mode                          = <!-- Legacy (singlethreaded), Async (multithreaded), Async with Shader Interpreter, Shader Interpreter only -->
|shader mode                          = <!-- Legacy (singlethreaded), Async (multithreaded), Async with Shader Interpreter, Shader Interpreter only -->
|shader mode notes                    =  
|shader mode notes                    =  
|write color buffers                  = On <!-- On, Off -->
|write color buffers                  = On<!-- On, Off -->
|write color buffers notes            = Only needed if you're not using MLAA patch. Fixes Green Rain and particle issues. Slightly reduces performance.
|write color buffers notes            = Needed if you're not using the MLAA patch. Fixes green rain and particle issues. Slightly reduces performance.
|strict rendering mode                = <!-- On, Off -->
|strict rendering mode                = <!-- On, Off -->
|strict rendering mode notes          =  
|strict rendering mode notes          =  
Line 65: Line 65:
|stretch to display area              = <!-- On, Off -->
|stretch to display area              = <!-- On, Off -->
|stretch to display area notes        =  
|stretch to display area notes        =  
|enable 3d                            = <!-- On, Off -->
|enable 3d notes                      =
|disable vertex cache                  = <!-- On, Off -->
|disable vertex cache notes            =
|multithreaded rsx                    = <!-- On, Off -->
|multithreaded rsx                    = <!-- On, Off -->
|multithreaded rsx notes              =  
|multithreaded rsx notes              =  
|asynchronous texture streaming        = <!-- On, Off -->
|asynchronous texture streaming notes  =
<!-- Audio configuration -->
<!-- Audio configuration -->
|audio out windows                    = <!-- XAudio2, OpenAL, Disabled -->
|audio out windows                    = <!-- Cubeb, XAudio2, Disabled -->
|audio out windows notes              =  
|audio out windows notes              =  
|audio out linux                      = <!-- OpenAL, PulseAudio, ALSA, Disabled -->
|audio out linux                      = <!-- Cubeb, FAudio, Disabled -->
|audio out linux notes                =  
|audio out linux notes                =  
|audio channels                        = <!-- Surround 7.1, Downmix to Stereo, Downmix to 5.1 -->
|audio format                          = <!-- Stereo, Surround 5.1, Surround 7.1, Automatic, Manual -->
|audio channels notes                 =  
|audio format notes                   =  
|dump to file                          = <!-- On, Off -->
|dump to file                          = <!-- On, Off -->
|dump to file notes                    =  
|dump to file notes                    =  
Line 101: Line 99:
|camera input                          = <!-- Unknown, EyeToy, PS Eye, UVC 1.1 -->
|camera input                          = <!-- Unknown, EyeToy, PS Eye, UVC 1.1 -->
|camera input notes                    =  
|camera input notes                    =  
|camera settings                      = <!-- Null, Fake -->
|camera settings                      = <!-- Null, Fake, Qt -->
|camera settings notes                =  
|camera settings notes                =  
|move handler                          = <!-- Null, Fake, Mouse -->
|move handler                          = <!-- Null, Fake, Mouse -->
|move handler notes                    =  
|move handler notes                    =  
<!-- Network configuration -->
|network status                        = <!-- Disconnected, Connected -->
|network status notes                  =
|psn status                            = <!-- Disconnected, Simulated, RPCN -->
|psn status notes                      =
<!-- Advanced configuration -->
<!-- Advanced configuration -->
|debug console mode                    = <!-- On, Off -->
|debug console mode                    = <!-- On, Off -->
Line 110: Line 113:
|accurate llvm dfma                    = <!-- On, Off -->
|accurate llvm dfma                    = <!-- On, Off -->
|accurate llvm dfma notes              =  
|accurate llvm dfma notes              =  
|accurate rsx reservation access      = On <!-- On, Off -->
|accurate rsx reservation access      = On<!-- On, Off -->
|accurate rsx reservation access notes = To be enabled on systems that do not have TSX.
|accurate rsx reservation access notes = Prevents random freezing/crashing while playing the game.
|ppu llvm accurate vector nans        = <!-- On, Off -->
|ppu llvm accurate vector nans        = <!-- On, Off -->
|ppu llvm accurate vector nans notes  =  
|ppu llvm accurate vector nans notes  =  
Line 120: Line 123:
|maximum spurs threads                = <!-- Unlimited, Single digit between 0 to 5 (e.g. 3) -->
|maximum spurs threads                = <!-- Unlimited, Single digit between 0 to 5 (e.g. 3) -->
|maximum spurs threads notes          =  
|maximum spurs threads notes          =  
|firmware settings                    = <!-- Manually load selected libraries, Load automatic and manual selection, Load liblv2.sprx only, Load liblv2.sprx and manual selection, Load liblv2.sprx and strict selection -->
|firmware libraries                    = <!-- Switch to LLE, Switch to HLE -->
|firmware settings notes               = <!-- Where libraries are manually selected, mention the list of libraries to be selected here -->
|firmware libraries notes             = <!-- Mention the libraries to be manually selected here -->
|read depth buffers                    = <!-- On, Off -->
|read depth buffers                    = <!-- On, Off -->
|read depth buffers notes              =  
|read depth buffers notes              =  
|write depth buffers                  = <!-- On, Off -->
|write depth buffers                  = <!-- On, Off -->
|write depth buffers notes            =  
|write depth buffers notes            =  
|read color buffers                    = On <!-- On, Off -->
|read color buffers                    = On<!-- On, Off -->
|read color buffers notes              = Fixes graphical issues when certain patches are enabled.
|read color buffers notes              = Fixes graphical issues when certain patches are enabled.
|handle rsx memory tiling              = On<!-- On, Off -->
|handle rsx memory tiling notes        = Fixes black squares if playing unpatched.
|rsx fifo accuracy                    = Atomic<!-- Fast, Atomic, Ordered & Atomic -->
|rsx fifo accuracy notes              = Helps with stability.
|disable on-disk shader cache          = <!-- On, Off -->
|disable on-disk shader cache          = <!-- On, Off -->
|disable on-disk shader cache notes    =  
|disable on-disk shader cache notes    =  
Line 136: Line 143:
|driver wake-up delay                  = <!-- Value between 0 to 7000 -->
|driver wake-up delay                  = <!-- Value between 0 to 7000 -->
|driver wake-up delay notes            =  
|driver wake-up delay notes            =  
|vblank rate                          = 120 <!-- Value between 1 to 500 -->
|vblank rate                          = <!-- Value between 1 to 500 -->
|vblank rate notes                    = Vblank rate should be double of the target framerate. Hence, setting Vblank to 120Hz will raise the FPS cap to 60.
|vblank rate notes                    =  
|vblank ntsc fixup                    = <!-- On, Off -->
|vblank ntsc fixup notes              =
|clocks scale                          = <!-- Value between 10 to 1000 -->
|clocks scale                          = <!-- Value between 10 to 1000 -->
|clocks scale notes                    =  
|clocks scale notes                    =  
Line 145: Line 154:
|force cpu blit emulation              = <!-- On, Off -->
|force cpu blit emulation              = <!-- On, Off -->
|force cpu blit emulation notes        =  
|force cpu blit emulation notes        =  
|use gpu texture scaling               = <!-- On, Off -->
|force gpu texture scaling             = <!-- On, Off -->
|use gpu texture scaling notes         =
|force gpu texture scaling notes       =  
|accurate getllar                      = <!-- On, Off -->
|accurate getllar notes                =  
|hook static functions                = <!-- On, Off -->
|hook static functions                = <!-- On, Off -->
|hook static functions notes          =  
|hook static functions notes          =  
|accurate ppu 128 reservations        = <!-- Always Enabled, Disabled, Value between 1 to 8 -->
|accurate ppu 128 reservations        = <!-- Always Enabled, Disabled, Value between 1 to 8 -->
|accurate ppu 128 reservations notes  =  
|accurate ppu 128 reservations notes  =  
|ppu llvm java mode handling          = <!-- On, Off -->
|ppu llvm java mode handling notes    =
<!-- Recommended patches -->
|highly recommended patch              = Depth border fix, Bug Fix: Infected Severed Head Crash, Bug Fix: University Nailbomb Softlock Fix, Disable in-built MLAA, Disable Mesh Trimming, Enable GPU Lighting, Speedboost<!-- Mention patch names -->
|highly recommended patch notes        = Improves performance, allows Resolution Scaling to work properly and fixes game bugs.
|recommended patch                    = Disable Bloom, Disable Depth of Field, Disable Motion Blur, Disable SSAO, Skip Intro, Infinite Flashlight Battery<!-- Mention patch names -->
|recommended patch notes              =
}}
}}


==Known Issues==
==Known Issues==
<!-- Mention any known issues relating to the game. Use the issue and PR template if necessary. If no notable issues are present, mention "There are no reported issues with this title." -->
<!-- Mention any known issues relating to the game. Use the issue and PR template if necessary. If no notable issues are present, mention "There are no reported issues with this title." -->
This game is currently not playable.


==Special Notes==
==Special Notes==
<!-- Mention any additional notes if necessary. If no special notes are required, remove this section -->
The Last of Us can be played from start to finish, but requires a good CPU and using RPCS3's patches (especially the MLAA patch) for serviceable performance.
 
On systems running macOS, to get past the PPU Trap on the loading screen, find your configuration file (should typically be in <code>~/Library/Application Support/rpcs3/custom_configs</code>), open it in a text editor, then search for the configuration key named "Stub PPU Traps". This value will normally show as <code>0</code>. Change it to <code>1</code> and save the configuration file. The PPU Traps should no longer appear during the loading screen, and during gameplay.
 
{{netplay
|gamever        = 1.11
|rpcs3 version  = N/A
|connect        = No<!-- Yes, No, Partial, Untested, N/A -->
|lobbies        = No<!-- Yes, No, Partial, Untested, N/A -->
|match          = No<!-- Yes, No, Partial, Untested, N/A -->
|features      = No<!-- Yes, No, Partial, Untested, N/A -->
|custom servers = Not available<!-- Available, Not available, Not required, Untested -->
|notes    =
}}
 
{{patch
{{patch
|type    = PPU
|type    = PPU
|version = 1.2
|version = 1.2
|content =  
|content =
Anchors:
Anchors:
 
  # Since we only change store reg and branch, we don't need to patch last 2 bytes again.
   tlou100_mlaa: &tlou100_mlaa
   tlou100_mlaa: &tlou100_mlaa
     - [ be32, 0x00a51a8c, 0x48000a64 ] # unconditonally branch to disable MLAA
     - [ be16, 0x00a7a514, 0x9b83 ]    # store 0
     - [ be32, 0x0092ddac, 0x4800002c ] # Skip memory check function
  #  - [ be16, 0x00a51a8c, 0x4800 ]     # unconditonally branch to disable MLAA
     - [ be16, 0x0092ddac, 0x4800 ]     # Skip memory check function
     - [ be32, 0x00ae5d4c, 0x38000000 ] # Green rain
     - [ be32, 0x00ae5d4c, 0x38000000 ] # Green rain
     - [ be32, 0x00a2c4f0, 0x38000000 ] # Green rain
     - [ be32, 0x00a2c4f0, 0x38000000 ] # Green rain
     - [ be32, 0x00a2c4fc, 0x38000000 ] # Green rain
     - [ be32, 0x00a2c4fc, 0x38000000 ] # Green rain
     - [ be32, 0x00a58da8, 0x60000000 ] # assert: x + w <= width && y + h <= height
     - [ be32, 0x00a58da8, 0x60000000 ] # skip assert: x + w <= width && y + h <= height
    - [ be32, 0x0093e30c, 0xc1890990 ] # Cargo fix
    - [ be32, 0x0093e394, 0xc0090990 ] # Reticle bloom
  # Dof patch
    - [ be32, 0x0093dd64, 0x48113d2d ] # Call1
    - [ be32, 0x0093dd88, 0x48113d19 ] # Call2
    - [ be32, 0x00a0ae2c, 0x48046c85 ] # Call3
  # Func 1 Overall DoF 1
    - [ be32, 0x00a51a90, 0xc09c0aa4 ] # Load f4
    - [ be32, 0x00a51a94, 0xc27e04d4 ] # f19 = 0.3
    - [ be32, 0x00a51a98, 0xec8404f2 ] # f4*f19
    - [ be32, 0x00a51a9c, 0x4e800020 ] # Return
  # Func 2 Cutscene Dof
    - [ be32, 0x00a51aa0, 0xc01c0aac ] # Load f0
    - [ be32, 0x00a51aa4, 0xc17e1d34 ] # f11 = 0.75
    - [ be32, 0x00a51aa8, 0xec0002f2 ] # f0*f11
    - [ be32, 0x00a51aac, 0x4e800020 ] # Return
  # Func 3 Overall Dof 2
    - [ be32, 0x00a51ab0, 0x3d200146 ] # r9 = 1460000
    - [ be32, 0x00a51ab4, 0x3929481c ] # r9 = 146481c
    - [ be32, 0x00a51ab8, 0x80080014 ] # Load pattern to r0
    - [ be32, 0x00a51abc, 0x7f804800 ] # Compare r0 to r9
    - [ be32, 0x00a51ac0, 0x409e0010 ]
    - [ be32, 0x00a51ac4, 0xc01e10a0 ] # f0 = 0.3
    - [ be32, 0x00a51ac8, 0xd008000c ] # Store f0
    - [ be32, 0x00a51acc, 0x48000008 ]
    - [ be32, 0x00a51ad0, 0xd3e8000c ] # Default store
    - [ be32, 0x00a51ad4, 0x4e800020 ] # Return
  # Bloom correction patch v2.2
    - [ be32, 0x0093e308, 0x481137d1 ] # Call
    - [ be32, 0x00a51ad8, 0xc1a909a4 ] # Load f13
    - [ be32, 0x00a51adc, 0xc19e064c ] # f12 = 0.69
    - [ be32, 0x00a51ae0, 0x808909a8 ] # r4 unique value e198
    - [ be32, 0x00a51ae4, 0x2f840000 ] # if r4 <= 0
    - [ be32, 0x00a51ae8, 0x409d0058 ] # Skip to Main menu
  # Bills town Bloater and escape (2)
    - [ be32, 0x00a51aec, 0x3ca03ba4 ] # r5 = 3ba40000
    - [ be32, 0x00a51af0, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51af4, 0x419c0074 ] # go to Patch if less
  # Bills town Cemetery (1)
    - [ be32, 0x00a51af8, 0x808909a4 ] # r4 unique value e194
    - [ be32, 0x00a51afc, 0x3ca03e80 ] # r5 = 3e800000
    - [ be32, 0x00a51b00, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b04, 0x419c0068 ] # go to Patch if less
  # Bills town main street (2)
    - [ be32, 0x00a51b08, 0x3ca04026 ] # r5 = 40260000
    - [ be32, 0x00a51b0c, 0x38a56666 ] # r5 = 40266666
    - [ be32, 0x00a51b10, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b14, 0x419e0054 ] # go to Patch if ==
  # Bills town Trap (2)
    - [ be32, 0x00a51b18, 0x3ca0403d ] # r5 = 403d0000
    - [ be32, 0x00a51b1c, 0x38a5e4e2 ] # r5 = 403ce4e2
    - [ be32, 0x00a51b20, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b24, 0x419e0044 ] # go to Patch if ==
  # Bills Town intro check (2)
    - [ be32, 0x00a51b28, 0x808909bc ] # r4 unique value e1ac
    - [ be32, 0x00a51b2c, 0x3ca04007 ] # r5 = 40070000
    - [ be32, 0x00a51b30, 0x38a50a3d ] # r5 = 40070a3d
    - [ be32, 0x00a51b34, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b38, 0x419e0030 ] # go to Patch if ==
    - [ be32, 0x00a51b3c, 0x4e800020 ] # Return
  # Patch Menu/Ending level
    - [ be32, 0x00a51b40, 0x808909a0 ] # r4 unique value e190
    - [ be32, 0x00a51b44, 0x3ca03f8d ] # r5 = 3f8d0000
    - [ be32, 0x00a51b48, 0x38a52f6f ] # r5 = 3f8d2f6f
    - [ be32, 0x00a51b4c, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b50, 0x419e0010 ] # Patch menu
    - [ be32, 0x00a51b54, 0x80a909a4 ] # r5 unique value e194
    - [ be32, 0x00a51b58, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b5c, 0x4c9e0020 ] # Return (bnelr)
    - [ be32, 0x00a51b60, 0xc19e03fc ] # f12 = 0.5
    - [ be32, 0x00a51b64, 0x48000008 ] # go to Patch
  # Patch function
    - [ be32, 0x00a51b68, 0xedad0332 ] # f13=f13*f12
    - [ be32, 0x00a51b6c, 0xec000332 ] # f0=f0*f12
    - [ be32, 0x00a51b70, 0x4e800020 ] # Return


   # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming  
   # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming
   # address. Without them this patch wouldn't have been possible.
   # address. Without them this patch wouldn't have been possible.
   # This patch cycles through various post-processing modes. Values accepted are:
   # This patch cycles through various post-processing modes. Values accepted are:
Line 181: Line 284:
   #    1 = Bloom
   #    1 = Bloom
   #    2 = Depth of Field
   #    2 = Depth of Field
   #    3 = ??? (Tonemapping)
   #    3 = Tonemapping // reversed from orbis version confirmed this exists
   #    4 = Bloom & Depth of Field
   #    4 = Bloom & Depth of Field
   #    5 = Bloom & Depth of Field & Tonemapping (Default)
   #    5 = Bloom & Depth of Field & Tonemapping (Default)
 
 
   tlou100_post: &tlou100_post
   tlou100_post: &tlou100_post
  #- [ be32, 0x00a7991c, 0x38000003 ] # Post-processing modes                    (mem address: 0x14C79C7)
  # - [ be32, 0x00a7991c, 0x38000003 ] # Post-processing modes                    (mem address: 0x14c79c7)
     - [ be32, 0x0093e300, 0xc0090990 ] # load e190 with 0
     - [ be32, 0x0093e300, 0xc0090990 ] # load e190 with 0
     - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
     - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
Line 192: Line 295:


   tlou100_mesh: &tlou100_mesh
   tlou100_mesh: &tlou100_mesh
     - [ be32, 0x00923a94, 0x98090004 ] # Disable Mesh trimming      (r3  => r0 ) (mem address: 0x142C584)
     - [ be16, 0x00923a94, 0x9809 ]     # Disable Mesh trimming      (r3  => r0 ) (mem address: 0x142c584)
 
 
   # Many settings below are enabled/disabled in sub_A7A340. In this subroutine,
   # Many settings below are enabled/disabled in sub_A7A340. In this subroutine,
   #    r6  = 2
   #    r6  = 2
Line 200: Line 303:
   # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
   # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
   # source register from one to the other, though some are words and some are bytes, so be careful.
   # source register from one to the other, though some are words and some are bytes, so be careful.
 
 
   tlou100_ssao: &tlou100_ssao
   tlou100_ssao: &tlou100_ssao
     - [ be32, 0x00a7a470, 0x9b830067 ] # Disable SSAO                (r27 => r28) (mem address: 0x14C7C0F)
     - [ be16, 0x00a7a470, 0x9b83 ]     # Disable SSAO                (r27 => r28) (mem address: 0x14c7c0f)
 
 
   tlou100_mb: &tlou100_mb
   tlou100_mb: &tlou100_mb
     - [ be32, 0x00a7a4d4, 0x9b830086 ] # Disable motion blur        (r27 => r28) (mem address: 0x14C7C2E)
     - [ be16, 0x00a7a4d4, 0x9b83 ]     # Disable motion blur        (r27 => r28) (mem address: 0x14c7c2e)
 
 
   tlou100_dof: &tlou100_dof
   tlou100_dof: &tlou100_dof
     - [ be32, 0x00a7a4e0, 0x9b830089 ] # Disable depth of field      (r27 => r28) (mem address: 0x14C7C31)
     - [ be16, 0x00a7a4e0, 0x9b83 ]     # Disable depth of field      (r27 => r28) (mem address: 0x14c7c31)
 
 
   tlou100_dbv: &tlou100_dbv
   tlou100_dbv: &tlou100_dbv
     - [ be32, 0x00a7a760, 0x9b6302f5 ] # Depth buffer viewport      (r28 => r27) (mem address: 0x14C7E9D)
     - [ be16, 0x00a7a760, 0x9b63 ]     # Depth buffer viewport      (r28 => r27) (mem address: 0x14c7e9d)
 
 
   tlou100_dbf: &tlou100_dbf
   tlou100_dbf: &tlou100_dbf
     - [ be32, 0x00a7a7ac, 0x9b830319 ] # Depth border fix            (r27 => r28) (mem address: 0x14C7EC1)
     - [ be16, 0x00a7a7ac, 0x9b83 ]     # Depth border fix            (r27 => r28) (mem address: 0x14c7ec1)
 
 
   tlou100_db: &tlou100_db
   tlou100_db: &tlou100_db
     - [ be32, 0x00a7a7b8, 0x90e303e8 ] # Depth buffer                (r27 => r6 ) (mem address: 0x14C7F93)
     - [ be16, 0x00a7a7b8, 0x90e3 ]     # Depth buffer                (r27 => r6 ) (mem address: 0x14c7f93)
     - [ be32, 0x00a516ec, 0x480001a4 ] # Cabin resort crash fix
     - [ be16, 0x00a516ec, 0x4800 ]     # Cabin resort crash fix


   tlou100_speed: &tlou100_speed
   tlou100_speed: &tlou100_speed
     - [ be32, 0x00a7a6b8, 0x938302b4 ] # Speedboost                              (mem address: 0x14c7e5f)
     - [ be16, 0x00a7a6b8, 0x9383 ]     # Speedboost                              (mem address: 0x14c7e5f)
 
 
   tlou100_spulighting: &tlou100_spulighting
   tlou100_devmenu: &tlou100_devmenu
     - [ be32, 0x00afeb24, 0x48000010 ]
    # debug menu
 
    - [ be32, 0x000399c8, 0x39c00001 ]
    - [ be16, 0x009ace36, 0x2db6 ]
    - [ be16, 0x009ace3e, 0x2db6 ]
    # pak arg
    - [ be32, 0x004ea8ac, 0x4897451c ]
    - [ be32, 0x00e5edc8, 0x90be82e4 ]
    - [ be32, 0x00e5edcc, 0x88050000 ]
    - [ be32, 0x00e5edd0, 0x4b68bae0 ]
    # menu start
    - [ be32, 0x004e94f8, 0x39ef0020 ]
    - [ be32, 0x004e94fc, 0x48c96f34 ]
    - [ be32, 0x01180430, 0x3c800117 ]
    - [ be32, 0x01180434, 0x6084fe25 ]
    - [ be32, 0x01180438, 0x7c847a14 ]
     - [ be32, 0x0118043c, 0x4b3690c4 ]
    - [ utf8, 0x0117fe45, "shiv                          \x00" ]
    - [ utf8, 0x0117fe65, "pistol-uber-t1                \x00" ]
    - [ utf8, 0x0117fe85, "NO_ART_GROUP                  \x00" ]
    - [ utf8, 0x0117fea5, "nail-bomb                      \x00" ]
    - [ utf8, 0x0117fec5, "two-by-four                    \x00" ]
    - [ utf8, 0x0117fee5, "nail-bomb                      \x00" ]
    - [ utf8, 0x0117ff05, "turret-sniper                  \x00" ]
    - [ utf8, 0x0117ff25, "pistol-uber-t1                \x00" ]
    - [ utf8, 0x0117ff45, "shiv                          \x00" ]
    - [ utf8, 0x0117ff65, "radio                          \x00" ]
    - [ utf8, 0x0117ff85, "molotov                        \x00" ]
    - [ utf8, 0x0117ffa5, "bandage-apply                  \x00" ]
    - [ utf8, 0x0117ffc5, "mp-parcel                      \x00" ]
    - [ utf8, 0x0117ffe5, "machete-blade                  \x00" ]
    - [ utf8, 0x01180005, "bow-dark                      \x00" ]
    - [ utf8, 0x01180025, "mini-14-rifle                  \x00" ]
    - [ utf8, 0x01180045, "two-by-four                    \x00" ]
    - [ utf8, 0x01180065, "pistol-shotgun                \x00" ]
    - [ utf8, 0x01180085, "beer-bottle                    \x00" ]
    - [ utf8, 0x011800a5, "lead-pipe                      \x00" ]
    - [ utf8, 0x011800c5, "lead-pipe                      \x00" ]
    - [ utf8, 0x011800e5, "flashlight                    \x00" ]
    - [ utf8, 0x01180105, "rifle-sniper                  \x00" ]
    - [ utf8, 0x01180125, "m4-rifle-t1                    \x00" ]
    - [ utf8, 0x01180145, "smoke-bomb                    \x00" ]
    - [ utf8, 0x01180165, "throw-brick                    \x00" ]
    - [ utf8, 0x01180185, "shotgun-pump-stock            \x00" ]
    - [ utf8, 0x011801a5, "NO_ART_GROUP                  \x00" ]
    - [ utf8, 0x011801c5, "bloater-pustule                \x00" ]
    - [ utf8, 0x011801e5, "taurus-66b4-revolver          \x00" ]
    - [ utf8, 0x01180205, "nail-bomb                      \x00" ]
    - [ utf8, 0x01180225, "throwing-knife                \x00" ]
    - [ utf8, 0x01180245, "rifle-bolt                    \x00" ]
    - [ utf8, 0x01180265, "beretta-jaguar-pistol          \x00" ]
    - [ utf8, 0x01180285, "bow                            \x00" ]
    - [ utf8, 0x011802a5, "molotov                        \x00" ]
    - [ utf8, 0x011802c5, "bill-knife                    \x00" ]
    - [ utf8, 0x011802e5, "baseball-bat                  \x00" ]
    - [ utf8, 0x01180305, "pistol-9mm                    \x00" ]
    - [ utf8, 0x01180325, "machete-blade                  \x00" ]
    - [ utf8, 0x01180345, "none                          \x00" ]
    - [ utf8, 0x01180365, "rifle-improvised-assault      \x00" ]
    - [ utf8, 0x01180385, "switchblade                    \x00" ]
    - [ utf8, 0x011803a5, "baseball-bat                  \x00" ]
    - [ utf8, 0x011803c5, "hatchet                        \x00" ]
    - [ utf8, 0x011803e5, "NO_ART_GROUP                  \x00" ]
    - [ utf8, 0x01180405, "flamethrower                  \x00" ]
    # debug draw renderer on 2d
    - [ be32, 0x005f8b48, 0x7fa3eb78 ]
    - [ be32, 0x005f8b4c, 0x4bd551dd ]
    - [ be32, 0x005f8b50, 0x7fa3eb78 ]
    - [ be32, 0x005f8b54, 0x4844df29 ]
    - [ be32, 0x005f8b58, 0x7fa3eb78 ]
    - [ be32, 0x005f8b5c, 0x484b2695 ]
    - [ be32, 0x00033c5c, 0x60000000 ]
    # DC printing
    - [ be32, 0x007681e8, 0x38600001 ]
    - [ be32, 0x007681ec, 0x482b9de1 ]
    - [ be32, 0x007681f0, 0x7fa3eb78 ]
    - [ be32, 0x007681f4, 0x482b9e2d ]
    - [ be32, 0x007681f8, 0x7fa3eb78 ]
    - [ be32, 0x007681fc, 0x486de265 ]
    - [ be32, 0x00768200, 0x48000010 ]
    - [ be32, 0x007f7370, 0x48002708 ] # native-printf
    - [ be32, 0x007f7384, 0x480026f4 ] # native-print-string
    # msgout to msgcon (debug text)
    - [ be32, 0x01293838, 0x013bdab0 ] # msgcon buffer
    # start
    - [ be32, 0x00a46b70, 0x3cc00132 ]
    - [ be32, 0x00a46b74, 0x60c63220 ]
    - [ be32, 0x00a46b78, 0x3ce041b0 ]
    - [ be32, 0x00a46b7c, 0x90e60000 ]
    - [ be32, 0x00a46b80, 0xc0060000 ]
    - [ be32, 0x00a46b84, 0xc0460000 ]
    - [ be32, 0x00a46b88, 0x3ce04204 ]
    - [ be32, 0x00a46b8c, 0x90e60000 ]
    - [ be32, 0x00a46b90, 0xc0260000 ]
    - [ be32, 0x00a46b94, 0x38c0ffff ]
    - [ be32, 0x00a46b98, 0x80fe8098 ]
    - [ be32, 0x00a46b9c, 0x480656e5 ]
    - [ be32, 0x00a46ba0, 0x3cc00132 ]
    - [ be32, 0x00a46ba4, 0x60c63220 ]
    - [ be32, 0x00a46ba8, 0x3ce04422 ]
    - [ be32, 0x00a46bac, 0x60e70080 ]
    - [ be32, 0x00a46bb0, 0x90e60000 ]
    - [ be32, 0x00a46bb4, 0xc0060000 ]
    - [ be32, 0x00a46bb8, 0xc0460000 ]
    - [ be32, 0x00a46bbc, 0x3ce04204 ]
    - [ be32, 0x00a46bc0, 0x90e60000 ]
    - [ be32, 0x00a46bc4, 0xc0260000 ]
    - [ be32, 0x00a46bc8, 0x38c0ffff ]
    - [ be32, 0x00a46bcc, 0x80fe809c ]
    - [ be32, 0x00a46bd0, 0x480656b1 ]
    - [ be32, 0x00a46bd4, 0x807e809c ]
    - [ be32, 0x00a46bd8, 0x88830000 ]
    - [ be32, 0x00a46bdc, 0x2f840000 ] # check
    - [ be32, 0x00a46be0, 0x419e0010 ]
    - [ be32, 0x00a46be4, 0x38800000 ]
    - [ be32, 0x00a46be8, 0x38a00080 ]
    - [ be32, 0x00a46bec, 0x48402c2d ]
    - [ be32, 0x00a46bf0, 0x807e8098 ]
    - [ be32, 0x00a46bf4, 0x88830000 ]
    - [ be32, 0x00a46bf8, 0x2f840000 ] # check
    - [ be32, 0x00a46bfc, 0x419e0010 ]
    - [ be32, 0x00a46c00, 0x38800000 ]
    - [ be32, 0x00a46c04, 0x38a01000 ]
    - [ be32, 0x00a46c08, 0x48402c11 ]
    - [ be32, 0x00a46c0c, 0x48000080 ]
    # taskmgr
    - [ be32, 0x00819e5c, 0x807effec ]
    - [ be32, 0x0128cddc, 0x01323250 ] # our taskmgr buffer
    - [ be32, 0x0129383c, 0x01323250 ] # our taskmgr buffer
    # msgcon buffer in single area
    - [ be32, 0x00a22c20, 0x4848b340 ]
    - [ be32, 0x00eadf60, 0x3d20013b ]
    - [ be32, 0x00eadf64, 0x6129dab0 ]
    - [ be32, 0x00eadf68, 0x4bb74cbc ]
 
   tlou111_mlaa: &tlou111_mlaa
   tlou111_mlaa: &tlou111_mlaa
     - [ be32, 0x00a80350, 0x48000ab8 ] # unconditonally branch to disable MLAA
  #  - [ be16, 0x00aaa040, 0x9b83 ]    # store 0
     - [ be32, 0x0095b8f8, 0x4800002c ] # Skip memory check function
     - [ be16, 0x00a80350, 0x4800 ]     # unconditonally branch to disable MLAA
     - [ be16, 0x0095b8f8, 0x4800 ]     # Skip memory check function
     - [ be32, 0x00b0e140, 0x38000000 ] # Green rain
     - [ be32, 0x00b0e140, 0x38000000 ] # Green rain
     - [ be32, 0x00a5bc38, 0x38000000 ] # Green rain
     - [ be32, 0x00a5bc38, 0x38000000 ] # Green rain
     - [ be32, 0x00a5bc44, 0x38000000 ] # Green rain
     - [ be32, 0x00a5bc44, 0x38000000 ] # Green rain
     - [ be32, 0x00a877e0, 0x60000000 ] # assert: x + w <= width && y + h <= height
     - [ be32, 0x00a877e0, 0x60000000 ] # skip assert: x + w <= width && y + h <= height
    - [ be32, 0x0096be58, 0xc1890990 ] # Cargo fix
  # Dof correction patch
    - [ be32, 0x0096b8b0, 0x48114aa5 ] # Call1
    - [ be32, 0x0096b8d4, 0x48114a91 ] # Call2
    - [ be32, 0x00a3a588, 0x48045ded ] # Call3
  # Func 1 Overall DoF 1
    - [ be32, 0x00a80354, 0xc09c0aa4 ] # Load f4 e294
    - [ be32, 0x00a80358, 0xc27e0424 ] # f19 = 0.3
    - [ be32, 0x00a8035c, 0xec8404f2 ] # f4*f19
    - [ be32, 0x00a80360, 0x4e800020 ] # Return
  # Func 2 Cutscene Dof
    - [ be32, 0x00a80364, 0xc01c0aac ] # Load f0 e29c
    - [ be32, 0x00a80368, 0xc17e1b64 ] # f11 = 0.75
    - [ be32, 0x00a8036c, 0xec0002f2 ] # f0*f11
    - [ be32, 0x00a80370, 0x4e800020 ] # Return
  # Func 3 Overall Dof 2
    - [ be32, 0x00a80374, 0x3d200151 ] # r9 = 1510000
    - [ be32, 0x00a80378, 0x3929e29c ] # r9 = 150e29c
    - [ be32, 0x00a8037c, 0x80080014 ] # r0 = key addr
    - [ be32, 0x00a80380, 0x7f804800 ] # Compare r0 to r9
    - [ be32, 0x00a80384, 0x409e000c ]
    - [ be32, 0x00a80388, 0xc01e137c ] # f0 = 0.3
    - [ be32, 0x00a8038c, 0xd008000c ] # Store f0
    - [ be32, 0x00a80390, 0xc0050000 ] # Restore f0
    - [ be32, 0x00a80394, 0x4e800020 ] # Return
  # Bloom correction patch
    - [ be32, 0x0096be54, 0x48114549 ] # Call
    - [ be32, 0x00a8039c, 0xc1a909a4 ] # Load f13
    - [ be32, 0x00a803a0, 0xc19e059c ] # f12 = 0.69
    - [ be32, 0x00a803a4, 0x808909a8 ] # r4 unique value e198
    - [ be32, 0x00a803a8, 0x2f840000 ] # if r4 <= 0
    - [ be32, 0x00a803ac, 0x409d0058 ] # Skip to Main menu
  # Bills town Bloater and escape(2)
    - [ be32, 0x00a803b0, 0x3ca03ba4 ] # r5 = 3ba40000
    - [ be32, 0x00a803b4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803b8, 0x419c0074 ] # go to Patch if less
  # Bills town Cemetery(1)
    - [ be32, 0x00a803bc, 0x808909a4 ] # r4 unique value e194
    - [ be32, 0x00a803c0, 0x3ca03e80 ] # r5 = 3e800000
    - [ be32, 0x00a803c4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803c8, 0x419c0068 ] # go to Patch if less
  # Bills town main street(2)
    - [ be32, 0x00a803cc, 0x3ca04026 ] # r5 = 40260000
    - [ be32, 0x00a803d0, 0x38a56666 ] # r5 = 40266666
    - [ be32, 0x00a803d4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803d8, 0x419e0054 ] # go to Patch if ==
  # Bills town Trap(2)
    - [ be32, 0x00a803dc, 0x3ca0403d ] # r5 = 403d0000
    - [ be32, 0x00a803e0, 0x38a5e4e2 ] # r5 = 403ce4e2
    - [ be32, 0x00a803e4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803e8, 0x419e0044 ] # go to Patch if ==
  # Bills Town intro check(2)
    - [ be32, 0x00a803ec, 0x808909bc ] # r4 unique value e1ac
    - [ be32, 0x00a803f0, 0x3ca04007 ] # r5 = 40070000
    - [ be32, 0x00a803f4, 0x38a50a3d ] # r5 = 40070a3d
    - [ be32, 0x00a803f8, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803fc, 0x419e0030 ] # go to Patch if ==
    - [ be32, 0x00a80400, 0x4e800020 ] # Return
  # Patch Menu/Ending level
    - [ be32, 0x00a80404, 0x808909a0 ] # r4 unique value e190
    - [ be32, 0x00a80408, 0x3ca03f8d ] # r5 = 3f8d0000
    - [ be32, 0x00a8040c, 0x38a52f6f ] # r5 = 3f8d2f6f
    - [ be32, 0x00a80410, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a80414, 0x419e0010 ] # Patch menu
    - [ be32, 0x00a80418, 0x80a909a4 ] # r5 unique value e194
    - [ be32, 0x00a8041c, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a80420, 0x4c9e0020 ] # Return (bnelr)
    - [ be32, 0x00a80424, 0xc19e034c ] # f12 = 0.5
    - [ be32, 0x00a80428, 0x48000008 ] # go to Patch
  # Patch function
    - [ be32, 0x00a8042c, 0xedad0332 ] # f13=f13*f12
    - [ be32, 0x00a80430, 0xec000332 ] # f0=f0*f12
    - [ be32, 0x00a80434, 0x4e800020 ] # Return


   # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming  
   # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming
   # address. Without them this patch wouldn't have been possible.
   # address. Without them this patch wouldn't have been possible.
   # This patch cycles through various post-processing modes. Values accepted are:
   # This patch cycles through various post-processing modes. Values accepted are:
Line 240: Line 549:
   #    1 = Bloom
   #    1 = Bloom
   #    2 = Depth of Field
   #    2 = Depth of Field
   #    3 = ??? (Tonemapping)
   #    3 = Tonemapping // reversed from orbis version confirmed this exists
   #    4 = Bloom & Depth of Field
   #    4 = Bloom & Depth of Field
   #    5 = Bloom & Depth of Field & Tonemapping (Default)
   #    5 = Bloom & Depth of Field & Tonemapping (Default)
 
 
   tlou111_post: &tlou111_post
   tlou111_post: &tlou111_post
  #- [ be32, 0x00aa944c, 0x38000003 ] # Post-processing modes                    (mem address: 0x1571867)
  # - [ be32, 0x00aa944c, 0x38000003 ] # Post-processing modes                    (mem address: 0x1571867)
     - [ be32, 0x0096be4c, 0xc0090990 ] # load e190 with 0
     - [ be32, 0x0096be4c, 0xc0090990 ] # load e190 with 0
     - [ be32, 0x0096BE58, 0xc1890990 ] # load e198 with 0
     - [ be32, 0x0096be58, 0xc1890990 ] # load e198 with 0
     - [ be32, 0x0096BEE0, 0xc0090990 ] # load e1a0 with 0
     - [ be32, 0x0096bee0, 0xc0090990 ] # load e1a0 with 0


   tlou111_mesh: &tlou111_mesh
   tlou111_mesh: &tlou111_mesh
     - [ be32, 0x009515d8, 0x98090004 ] # Disable Mesh trimming      (r3  => r0 ) (mem address: 0x14A9604)
     - [ be16, 0x009515d8, 0x9809 ]     # Disable Mesh trimming      (r3  => r0 ) (mem address: 0x14a9604)
 
 
   # Many settings below are enabled/disabled in sub_AA9E6C. In this subroutine,
   # Many settings below are enabled/disabled in sub_AA9E6C. In this subroutine,
   #    r6  = 2
   #    r6  = 2
Line 259: Line 568:
   # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
   # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
   # source register from one to the other, though some are words and some are bytes, so be careful.
   # source register from one to the other, though some are words and some are bytes, so be careful.
 
 
   tlou111_ssao: &tlou111_ssao
   tlou111_ssao: &tlou111_ssao
     - [ be32, 0x00aa9f9c, 0x9b830067 ] # Disable SSAO               (r27 => r28) (mem address: 0x1571AAF)
     - [ be16, 0x00aa9f9c, 0x9b83 ]     # Disable SSAO
 
 
   tlou111_mb: &tlou111_mb
   tlou111_mb: &tlou111_mb
     - [ be32, 0x00aaa000, 0x9b830086 ] # Disable motion blur         (r27 => r28) (mem address: 0x1571ACE)
     - [ be32, 0x0096aa94, 0x480000e0 ] # Disable motion blur
 
 
   tlou111_dof: &tlou111_dof
   tlou111_dof: &tlou111_dof
     - [ be32, 0x00aaa00c, 0x9b830089 ] # Disable depth of field      (r27 => r28) (mem address: 0x1571AD1)
     - [ be16, 0x00aaa00c, 0x9b83 ]     # Disable depth of field      (r27 => r28) (mem address: 0x1571ad1)
 
 
  tlou111_dbv: &tlou111_dbv
    - [ be32, 0x00aaa290, 0x9b6302f9 ] # Depth buffer viewport      (r28 => r27) (mem address: 0x1571D41)
 
   tlou111_dbf: &tlou111_dbf
   tlou111_dbf: &tlou111_dbf
     - [ be32, 0x00aaa2d8, 0x9b83031d ] # Depth border fix            (r27 => r28) (mem address: 0x1571D65)
     - [ be16, 0x00aaa2d8, 0x9b83 ]     # Depth border fix            (r27 => r28) (mem address: 0x1571d65)
 
 
   tlou111_db: &tlou111_db
   tlou111_db: &tlou111_db
     - [ be32, 0x00aaa2e4, 0x90c303ec ] # Depth buffer                (r27 => r6 ) (mem address: 0x1571E37)
     - [ be16, 0x00aaa2e4, 0x90c3 ]     # Depth buffer                (r27 => r6 ) (mem address: 0x1571e37)
     - [ be32, 0x00a7ffac, 0x480001a4 ] # Cabin resort crash fix
    - [ be16, 0x00aaa290, 0x9b63 ]    # Depth buffer viewport      (r28 => r27) (mem address: 0x1571d41)
     - [ be32, 0x00ab9ec8, 0x38000001 ] # Depth buffer viewport      (r28 => r27) (mem address: 0x1571d41)
  # Cabin resort fix
    - [ be64, 0x01572020, 0x1070fd7d7973c900 ] # first line
    - [ be64, 0x01572030, 0x674da76646c80092 ] # second line p.1
    - [ be32, 0x01572039, 0x2bfb00a3 ]        # second line p.2
    - [ be64, 0x01572040, 0x00003f8000014034 ] # third line p.1
    - [ be64, 0x01572048, 0x0000403400013f80 ] # third line p.2
    - [ be64, 0x01572052, 0x3f80000000a3a588 ] # Initial Current result
  # Alpha pass func
    - [ be32, 0x00a7ffac, 0x419e0020 ] # Go to Alpha pass check
    - [ be32, 0x00a7ffb0, 0x3d200157 ] # r9 = 0x1570000
  # Check Task id
    - [ be32, 0x00a7ffb4, 0x3880201f ] # r4 = 0x201f
    - [ be32, 0x00a7ffb8, 0x4800018d ] # Task id func Call
    - [ be32, 0x00a7ffbc, 0x419e0010 ] # beq to Alpha pass check
    - [ be32, 0x00a7ffc0, 0x98091d41 ] # stb Disable Alpha pass
    - [ be32, 0x00a7ffc4, 0xb0092028 ] # sth Store flag (0x1572028)
    - [ be32, 0x00a7ffc8, 0x480001a8 ] # Go to a80170
  # Alpha pass check
    - [ be32, 0x00a7ffcc, 0x88691d41 ] # lbz r3 = Alpha pass
    - [ be32, 0x00a7ffd0, 0x7f801800 ] # cmpw r0 vs r3
    - [ be32, 0x00a7ffd4, 0x409e019c ] # Skip to a80170
    - [ be32, 0x00a7ffd8, 0x2f800000 ] # cmpwi r0 vs 0
    - [ be32, 0x00a7ffdc, 0x419e0010 ] # beq
    - [ be32, 0x00a7ffe0, 0x38800000 ] # li r4 = 0
    - [ be32, 0x00a7ffe4, 0xb0892028 ] # sth Store flag (0x1572028)
    - [ be32, 0x00a7ffe8, 0x48000008 ]
    - [ be32, 0x00a7ffec, 0x38800001 ] # li r4 = 1
    - [ be32, 0x00a7fff0, 0x98891d41 ] # stb r4 Store Alpha pass
    - [ be32, 0x00a7fff4, 0x4800017c ] # Go to a80170
  # Task id func
    - [ be32, 0x00a80144, 0x7ca92214 ] # add r5 = r9 + r4
    - [ be32, 0x00a80148, 0x3c800142 ] # lis r4 = 0x1420000
    - [ be32, 0x00a8014c, 0x88649ef4 ] # lbz r3 = Task id first byte
    - [ be32, 0x00a80150, 0x8c850001 ] # lbzu r4 table byte
    - [ be32, 0x00a80154, 0x2f840000 ] # r4 vs 0 (Default case)
    - [ be32, 0x00a80158, 0x419e000c ] # beq (r4 = 0)
    - [ be32, 0x00a8015c, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a80160, 0x409efff0 ] # Go back
    - [ be32, 0x00a80164, 0x2f840000 ] # cmpwi r4 vs 0
    - [ be32, 0x00a80168, 0x4e800020 ] # Return
  # The Main function
    - [ be32, 0x00a3a584, 0x48045a75 ] # Function Call
    - [ be32, 0x00a7fff8, 0x3d200157 ] # lis r9 = 0x1570000
    - [ be32, 0x00a7fffc, 0x90692060 ] # stw Store r3
    - [ be32, 0x00a80000, 0x90a92064 ] # stw Store r5
    - [ be32, 0x00a80004, 0x3ca00151 ] # lis r5 = 0x1510000
    - [ be32, 0x00a80008, 0x38a5db24 ] # subi r5 = 0x150db24
    - [ be32, 0x00a8000c, 0x80050aec ] # lwz r0 = blizzard byte
    - [ be32, 0x00a80010, 0x2f800000 ] # cmpwi r0 vs 0
    - [ be32, 0x00a80014, 0x419e0114 ] # beq to Default store (a80128)
    - [ be32, 0x00a80018, 0xa0092028 ] # lhz r0 = Alpha pass flag
    - [ be32, 0x00a8001c, 0x2f800001 ] # cmpwi r0 vs 1
    - [ be32, 0x00a80020, 0x419e0108 ] # beq to Default store (a80128)
  # Check key addrs
    - [ be32, 0x00a80024, 0x80080014 ] # lwz r0 = key addr
    - [ be32, 0x00a80028, 0x7f802800 ] # cmpw r0 vs r5(0x150db24)
    - [ be32, 0x00a8002c, 0x38803f00 ] # li r4 = 3f00 Final Result
    - [ be32, 0x00a80030, 0x419e00f0 ] # Go to store result (a80120)
    - [ be32, 0x00a80034, 0x38a50030 ] # addi r5 = 0x150db54
    - [ be32, 0x00a80038, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a8003c, 0x419e00e4 ] # Go to store result (a80120)
    - [ be32, 0x00a80040, 0x38a5ffe4 ] # subi r5 = 0x150db38
    - [ be32, 0x00a80044, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a80048, 0x419e0024 ] # Go to 0x150db38 case (a8006c)
    - [ be32, 0x00a8004c, 0x38a5fff8 ] # subi r5 = 0x150db30
    - [ be32, 0x00a80050, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a80054, 0x409e00d4 ] # Go to Default store (a80128)
  # 0x150db30 case
    - [ be32, 0x00a80058, 0x3880203b ] # li r4 = 0x203b(case a3)
    - [ be32, 0x00a8005c, 0x480000e9 ] # Task id func Call
    - [ be32, 0x00a80060, 0x419e00c8 ] # Go to Default store (a80128)
    - [ be32, 0x00a80064, 0x38803f00 ] # li r4 = 3f00
    - [ be32, 0x00a80068, 0x480000b8 ] # Go to Store result (a80120)
  # 0x150db38 Special cases
    - [ be32, 0x00a8006c, 0x3880203b ] # li r4 = 0x203b(case a3)
    - [ be32, 0x00a80070, 0x480000d5 ] # Task id func Call
    - [ be32, 0x00a80074, 0x419e000c ] # Go to next check
    - [ be32, 0x00a80078, 0x38803f00 ] # li r4 = 0x3f00 Final result
    - [ be32, 0x00a8007c, 0x480000a4 ] # Go to Store result (a80120)
    - [ be32, 0x00a80080, 0x38802036 ] # li r4 0x2036(case 92)
    - [ be32, 0x00a80084, 0x480000c1 ] # Task id func Call
    - [ be32, 0x00a80088, 0x419e000c ] # Go to next check
    - [ be32, 0x00a8008c, 0x38804040 ] # li r4 = 0x4040 Final result
    - [ be32, 0x00a80090, 0x48000090 ] # Go to Store result (a80120)
    - [ be32, 0x00a80094, 0x38802038 ] # li r4 = 0x2038 (cases 2b/fb)
    - [ be32, 0x00a80098, 0x480000ad ] # Task id func Call
    - [ be32, 0x00a8009c, 0x419e000c ] # Skip to usual cases
    - [ be32, 0x00a800a0, 0x38003f80 ] # li r0 = 0x3f80 Final Result
    - [ be32, 0x00a800a4, 0x4800007c ] # Go to Store result (a80120)
    - [ be32, 0x00a800a8, 0x3880202f ] # r4 = 0x202f(main cases)
    - [ be32, 0x00a800ac, 0x48000099 ] # Task id func Call
    - [ be32, 0x00a800b0, 0x419e0014 ] # to Joel cases
    - [ be32, 0x00a800b4, 0x3c60013d ] # lis r3 = 0x13d0000
    - [ be32, 0x00a800b8, 0x886371b4 ] # lbz r3 = Inside/outside byte (13d71b4) (r3)
    - [ be32, 0x00a800bc, 0x38a9203c ] # addi r5 = r9+0x203c(0x157203c Ellie cases)
    - [ be32, 0x00a800c0, 0x48000010 ] #
    - [ be32, 0x00a800c4, 0x3c600151 ] # lis r3 = 0x1510000
    - [ be32, 0x00a800c8, 0x8063e600 ] # lbz r3 = Inside/outside byte (150e600) (r3)
    - [ be32, 0x00a800cc, 0x38a92044 ] # addi r5 = r9+0x2044(0x1572044 Joel cases)
  # Main cases
    - [ be32, 0x00a800d0, 0xa4850004 ] # lhzu r4 from r5
    - [ be32, 0x00a800d4, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a800d8, 0x409efff8 ] # Go back
    - [ be32, 0x00a800dc, 0xa0892050 ] # lhz r4 = Main byte(0x1502050)
    - [ be32, 0x00a800e0, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a800e4, 0xa0850002 ] # lhz r4 = eq-Current/neq-Target result
    - [ be32, 0x00a800e8, 0x419e0028 ] # beq to Store current result
    - [ be32, 0x00a800ec, 0xa0092052 ] # lhz r0 = Current result
    - [ be32, 0x00a800f0, 0x7f802000 ] # cmpw r0 vs r4
    - [ be32, 0x00a800f4, 0x419e0024 ] # beq to Store main byte
  # Switcher (spends 30 frames)
    - [ be32, 0x00a800f8, 0x2f843f80 ] # cmpwi r4 vs 0x3f80
    - [ be32, 0x00a800fc, 0x7c040378 ] # mr r4 = r0
    - [ be32, 0x00a80100, 0x419e000c ] # beq
    - [ be32, 0x00a80104, 0x38840006 ] # addi r4 = r4 + 6
    - [ be32, 0x00a80108, 0x48000008 ] #
    - [ be32, 0x00a8010c, 0x3884fffa ] # subi r4 = r4 - 6
    - [ be32, 0x00a80110, 0xb0892052 ] # sth r4 Store new current result
    - [ be32, 0x00a80114, 0x4800000c ] # b to Store final result
  # Store main byte
    - [ be32, 0x00a80118, 0xb0692050 ] # sth r3 Store main byte  (r9)
  # Store results
    - [ be32, 0x00a8011c, 0xa0892052 ] # sth r4 = Current resullt  (r9)
    - [ be32, 0x00a80120, 0xb088000c ] # sth r4 Store final result (r8)
    - [ be32, 0x00a80124, 0x48000008 ] # Go to return
    - [ be32, 0x00a80128, 0xd3e8000c ] # Default store
  # Returning
    - [ be32, 0x00a8012c, 0x80092056 ] # lwz Load r0 as LR
    - [ be32, 0x00a80130, 0x7c0803a6 ] # mtlr LR = r0
    - [ be32, 0x00a80134, 0x80692060 ] # Restore r3
    - [ be32, 0x00a80138, 0x80a92064 ] # Restore r5
    - [ be32, 0x00a8013c, 0x38920001 ] # Restore r4
    - [ be32, 0x00a80140, 0x4e800020 ] # Return


   tlou111_speed: &tlou111_speed
   tlou111_speed: &tlou111_speed
     - [ be32, 0x00aaa1e8, 0x938302b8 ] # Speedboost                              (mem address: 0x1571d03)
     - [ be16, 0x00aaa1e8, 0x9383 ]     # Speedboost                              (mem address: 0x1571d03)
    
 
   tlou111_spulighting: &tlou111_spulighting
   tlou111_devplus: &tlou111_devplus
     - [ be32, 0x00b294ec, 0x48000010 ]
    - [ be32, 0x012850e8, 0x00e8c3e7 ] # str ptr
    
    - [ be32, 0x0128515c, 0x00e8c57f ] # str ptr
   spulightingnotes: &spulightingnotes "Removes some broken effects and improve performance.\nThis patch can always be enabled."
    - [ be16, 0x00e8c318, 0x202b ] # _+
    
    - [ byte, 0x00e8c3e7, 42 ] # * in int
   debugmenunotes: &debugmenunotes "L3 + Start = Dev Menu\nL3 + Select = Quick Menu\nL3 + Triangle = Debug Text\nL3 + R3 = Debug Fly"
    - [ byte, 0x00e8c57f, 42 ] # * in int
  # useless memory option replace with rendering
  # point addr from [] to [], this offsets 002dcc40 store 00 and onwards.
  # i.e [] now becomes [] and so on
    - [ be32, 0x0129732c, 0x015715f0 ] # pointer
    - [ be32, 0x002dcc40, 0x38bc00be ] # disable vis
    - [ be32, 0x012973fc, 0x00ee0490 ]
    - [ be16, 0x00ee0498, 0x5669 ]    # capitalise visibility for
    - [ be32, 0x002dcc74, 0x38bc06d9 ] # wireframe
    - [ be32, 0x01297400, 0x00ee01d8 ]
    - [ be32, 0x002dcca8, 0x38bc06da ] # see through
    - [ be32, 0x01297404, 0x00ee01f0 ]
    - [ be32, 0x002dccdc, 0x38bc06db ] # point mode
    - [ be32, 0x01297408, 0x00ee0210 ]
    - [ be32, 0x002dcd10, 0x38bc04f4 ] # post on spu
    - [ be32, 0x0129740c, 0x00f05a48 ]
    - [ be32, 0x002dcd44, 0x38bc04de ] # motion blur
    - [ be32, 0x01297410, 0x00f05618 ]
    - [ be32, 0x002dcd78, 0x38bc04e1 ] # dof
    - [ be32, 0x01297414, 0x00f05410 ]
    - [ be32, 0x012974e4, 0x0135bfe8 ] # ptr
    - [ be64, 0x00ea8ba0, 0x456e61626c652050 ] # rename string
    - [ be32, 0x00ea8ba8, 0x61757365 ]
    - [ byte, 0x00ea8bac, 0x00 ]      # term str
    - [ be32, 0x01297418, 0x00e8d580 ]
    - [ byte, 0x00eeeef8, 0x00 ]
    - [ byte, 0x00eeef10, 0x00 ]
    - [ byte, 0x00eeef28, 0x00 ]
    - [ byte, 0x00eeef50, 0x00 ]
    - [ be32, 0x012bf4a4, 0x00e8d520 ]
    - [ be32, 0x012bf4a8, 0x00e8d550 ]
  # str, perhaps use utf8 here?
    - [ be64, 0x00e8d520, 0x437265646974733a ]
    - [ be64, 0x00e8d550, 0x4d61646520627920 ]
    - [ be64, 0x00e8d558, 0x696c6c7573696f6e ]
    - [ be64, 0x00e8d560, 0x2c20467265616b6f ]
    - [ be64, 0x00e8d568, 0x20616e6420536d61 ]
    - [ be64, 0x00e8d570, 0x7368657232343800 ]
  # vram stats
    - [ be64, 0x00e8d580, 0x53686f7720437265 ]
    - [ be32, 0x00e8d588, 0x64697473 ]
  # console exclusive code, we don't need this due to post on spu off
    - [ be32, 0x0129741c, 0x0157186e ] # ptr
  #  - [ be32, 0x00aa9444, 0x38600001 ] # remove branch and set r3 to 1
  #  - [ be16, 0x00aa9464, 0x9869 ]    # load from r3
 
  tlou111_cparts: &tlou111_cparts
    - [ utf8, 0x00e8d600, "Infinite Everything (Ammo, Items, Skills, Parts)" ]
    #- [ be64, 0x00e8d600, 0x496e66696e697465 ] # str Infinite Everything (Ammo, Items, Skills, Parts)
    #- [ be64, 0x00e8d608, 0x2045766572797468 ]
    #- [ be64, 0x00e8d610, 0x696e672028416d6d ]
    #- [ be64, 0x00e8d618, 0x6f2c204974656d73 ]
    #- [ be64, 0x00e8d620, 0x2c20536b696c6c73 ]
    #- [ be64, 0x00e8d628, 0x2c20506172747329 ]
    - [ be32, 0x01286780, 0x00e8d600 ] # point addr to e8e490
    - [ be32, 0x01286784, 0x014f3412 ] # point addr to 014f3412
# add
    - [ be32, 0x0003495c, 0x48e58c35 ] # bl 00e8d590
    - [ be32, 0x00e8d590, 0x3fa0014f ] # r29 14f0000
    - [ be32, 0x00e8d594, 0x881d3412 ] # lbz r0, 0x3412, (r29)
    - [ be32, 0x00e8d598, 0x2f800000 ] # cmp r0, 0x0
    - [ be32, 0x00e8d59c, 0x409e0008 ] # bne 0xe8d5a4
    - [ be32, 0x00e8d5a0, 0x7f7fd22e ] # og lhzx
    - [ be32, 0x00e8d5a4, 0x4e800020 ] # ret
    - [ be32, 0x00034968, 0x2f9d096f ] # r29 to 512
    - [ be32, 0x00034970, 0x3ba0096f ] # li r29 512
# sub
    - [ be32, 0x000336c0, 0x7e2802a6 ] # mflr r17,LR
    - [ be32, 0x000336c4, 0x48e59f01 ] # call 3
    - [ be32, 0x000336c8, 0x7e2803a6 ] # mtlr LR,r17
    - [ be32, 0x000336cc, 0x3a200000 ] # r17 = 0
    - [ be32, 0x00e8d5c4, 0x7c0b4a2e ] # og lhzx
    - [ be32, 0x00e8d5c8, 0x5408043e ] # og rlwinm
    - [ be32, 0x00e8d5cc, 0x3e00014f ] # r16 = 14f0000
    - [ be32, 0x00e8d5d0, 0x89f03412 ] # lbz r15,0x3412,r16
    - [ be32, 0x00e8d5d4, 0x2f8f0000 ] # r15 vs 0
    - [ be32, 0x00e8d5d8, 0x409e0008 ] # bne
    - [ be32, 0x00e8d5dc, 0x7c050050 ] # og sub
    - [ be32, 0x00e8d5e0, 0x7f882800 ] # og cmpw
    - [ be32, 0x00e8d5e4, 0x39e00000 ] # r15 = 0
    - [ be32, 0x00e8d5e8, 0x3a000000 ] # r16 = 0
    - [ be32, 0x00e8d5ec, 0x4e800020 ] # ret
 
   tlou111_nailbombsoftlockfix: &tlou111_nailbombsoftlockfix
    - [ be32, 0x0069f7ac, 0x4b9c012d ] # bl SUB_0005f8d8
    - [ be32, 0x0005f8d8, 0x3c800142 ] # lis r4,0x142
    - [ be32, 0x0005f8dc, 0xa0849ef4 ] # lhz r4,-0x610c(r4)
    - [ be32, 0x0005f8e0, 0x70847fff ] # andi r4,r4,0x7fff
     - [ be32, 0x0005f8e4, 0x2f8440bc ] # cmpwi cr7,r4,0x40bc
    - [ be32, 0x0005f8e8, 0x419e0028 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8ec, 0x2f842466 ] # cmpwi cr7,r4,0x2466
    - [ be32, 0x0005f8f0, 0x419e0020 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8f4, 0x2f841ab6 ] # cmpwi cr7,r4,0x1ab6
    - [ be32, 0x0005f8f8, 0x419e0018 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8fc, 0x2f841181 ] # cmpwi cr7,r4,0x1181
    - [ be32, 0x0005f900, 0x419e0010 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f904, 0x2f844ad3 ] # cmpwi cr7,r4,0x4ad3
    - [ be32, 0x0005f908, 0x419e0008 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f90c, 0x48000008 ] # b   LAB_0005f914
    - [ be32, 0x0005f910, 0x38000001 ] # li  r0,0x1
    - [ be32, 0x0005f914, 0x389b0070 ] # addiparam_2,r27,0x70
    - [ be32, 0x0005f918, 0x4e800020 ] # blr
 
  tlou111_devmenu: &tlou111_devmenu
    - [ be32, 0x0003a69c, 0x39e00001 ]
    - [ be16, 0x009da99a, 0x2db6 ]
    - [ be16, 0x009da9a2, 0x2db6 ]
    - [ be32, 0x00a1a200, 0x60000000 ] # Remove "!" model render
    - [ be32, 0x0004113c, 0x48000028 ] # No double line in Gameplay Menu
    # str lookup
    - [ utf8, 0x011b4145, "shiv                          " ]
    - [ utf8, 0x011b4165, "pistol-uber-t1                " ]
    - [ utf8, 0x011b4185, "baseball-bat                  " ]
    - [ utf8, 0x011b41a5, "hatchet                        " ]
    - [ utf8, 0x011b41c5, "NO_ART_GROUP                  " ]
    - [ utf8, 0x011b41e5, "nail-bomb                      " ]
    - [ utf8, 0x011b4205, "two-by-four                    " ]
    - [ utf8, 0x011b4225, "nail-bomb                      " ]
    - [ utf8, 0x011b4245, "turret-sniper                  " ]
    - [ utf8, 0x011b4265, "rifle-lever-action            " ]
    - [ utf8, 0x011b4285, "pistol-uber-t1                " ]
    - [ utf8, 0x011b42a5, "shiv                          " ]
    - [ utf8, 0x011b42c5, "radio                          " ]
    - [ utf8, 0x011b42e5, "molotov                        " ]
    - [ utf8, 0x011b4305, "bandage-apply                  " ]
    - [ utf8, 0x011b4325, "mp-parcel                      " ]
    - [ utf8, 0x011b4345, "gren-launcher-improvised      " ]
    - [ utf8, 0x011b4365, "shotgun-dbl-barrel            " ]
    - [ utf8, 0x011b4385, "machete-blade                  " ]
    - [ utf8, 0x011b43a5, "bow-dark                      " ]
    - [ utf8, 0x011b43c5, "rifle-variable                " ]
    - [ utf8, 0x011b43e5, "mini-14-rifle                  " ]
    - [ utf8, 0x011b4405, "two-by-four                    " ]
    - [ utf8, 0x011b4425, "pistol-shotgun                " ]
    - [ utf8, 0x011b4445, "rifle-improvised-fullauto      " ]
    - [ utf8, 0x011b4465, "super-soaker                  " ]
    - [ utf8, 0x011b4485, "NO_ART_GROUP                  " ]
    - [ utf8, 0x011b44a5, "beer-bottle                    " ]
    - [ utf8, 0x011b44c5, "crossbow-dlc                  " ]
    - [ utf8, 0x011b44e5, "lead-pipe                      " ]
    - [ utf8, 0x011b4505, "lead-pipe                      " ]
    - [ utf8, 0x011b4525, "flamethrower                  " ]
    - [ utf8, 0x011b4545, "desert-eagle-t1                " ]
    - [ utf8, 0x011b4565, "flashlight                    " ]
    - [ utf8, 0x011b4585, "rifle-sniper                  " ]
    - [ utf8, 0x011b45a5, "m4-rifle-t1                    " ]
    - [ utf8, 0x011b45c5, "smoke-bomb                    " ]
    - [ utf8, 0x011b45e5, "throw-brick                    " ]
    - [ utf8, 0x011b4605, "shotgun-pump-stock            " ]
    - [ utf8, 0x011b4625, "silenced-galil-rifle          " ]
    - [ utf8, 0x011b4645, "NO_ART_GROUP                  " ]
    - [ utf8, 0x011b4665, "bloater-pustule                " ]
    - [ utf8, 0x011b4685, "taurus-66b4-revolver          " ]
    - [ utf8, 0x011b46a5, "nail-bomb                      " ]
    - [ utf8, 0x011b46c5, "rifle-improvised-assault      " ]
    - [ utf8, 0x011b46e5, "throwing-knife                " ]
    - [ utf8, 0x011b4705, "rifle-bolt                    " ]
    - [ utf8, 0x011b4725, "beretta-jaguar-pistol          " ]
    - [ utf8, 0x011b4745, "bow                            " ]
    - [ utf8, 0x011b4765, "molotov                        " ]
    - [ utf8, 0x011b4785, "bill-knife                    " ]
    - [ utf8, 0x011b47a5, "baseball-bat                  " ]
    - [ utf8, 0x011b47c5, "mini-14-rifle                  " ]
    - [ utf8, 0x011b47e5, "pistol-glock-burst            " ]
    - [ utf8, 0x011b4805, "pistol-9mm                    " ]
    - [ utf8, 0x011b4825, "shotgun-tactical              " ]
    - [ utf8, 0x011b4845, "mal-gas-can                    " ]
    - [ utf8, 0x011b4865, "machete-blade                  " ]
    - [ utf8, 0x011b4885, "none                          " ]
    - [ utf8, 0x011b48a5, "rifle-improvised-assault      " ]
    - [ utf8, 0x011b48c5, "binoculars                    " ]
    - [ utf8, 0x011b48e5, "switchblade                    " ]
    - [ utf8, 0x011b4905, "rifle-improvised-fullauto      " ]
    # write str to menu init
    - [ be32, 0x004f1690, 0x39ef0020 ] #    addi      r15,r15,0x20
    - [ be32, 0x004f1694, 0x489c5b99 ] #    bl        SUB_00eb722c
    - [ be32, 0x00eb722c, 0x3c80011b ] #    lis        r4,0x11b
    - [ be32, 0x00eb7230, 0x60844125 ] #    ori        r4,r4,0x4125
    - [ be32, 0x00eb7234, 0x7c847a14 ] #    add        r4,r4,r15
    - [ be32, 0x00eb7238, 0x4e800020 ] #    blr
    # wrtie ptr for pak arg
    - [ be32, 0x004f2a0c, 0x489b08bc ] #    b          LAB_00ea32c8
    - [ be32, 0x00ea32c8, 0x90be82e4 ] #    stw        r5,-0x7d1c(r30) store pointer to null
    - [ be32, 0x00ea32cc, 0x88050000 ] #    lbz        r0,0x0(r5) og
    - [ be32, 0x00ea32d0, 0x4b64f740 ] #    b          LAB_004f2a10
    - [ be32, 0x00574e3c, 0x38600064 ]
    - [ be32, 0x00574e40, 0x907c0000 ]
    - [ be32, 0x00574e44, 0x807c0000 ]
    - [ be32, 0x00574e48, 0x60000000 ]
      # control page
    - [ be32, 0x0034d24c, 0x48b8f27c ] # get page ptr (start)
    - [ be32, 0x00edc4c8, 0x2f890000 ] # check if page ptr is null
    - [ be32, 0x00edc4cc, 0x419e0018 ] # do original code
    - [ be32, 0x00edc4d0, 0x7fc4f378 ] # save working register
    - [ be32, 0x00edc4d4, 0x3bdef51c ] # partially resolve page ptr
    - [ be32, 0x00edc4d8, 0x80a90000 ] # get ptr
    - [ be32, 0x00edc4dc, 0x90be8030 ] # store ptr
    - [ be32, 0x00edc4e0, 0x7c9e2378 ] # restore working register
    - [ be32, 0x00edc4e4, 0x4b470d6c ] # return
    # script print
    # Gameplay Menu bool
    - [ utf8, 0x00e902d8, "SS Printout to Msgcon\x00" ]
    - [ be32, 0x01286784, 0x0150cfe0 ]
    - [ be32, 0x00a5228c, 0x39200001 ] # force mode 1
    - [ be32, 0x00a23ed0, 0x4802e330 ]
    - [ utf8, 0x00efc158, "%x" ]      # branch in hex
    - [ utf8, 0x00efc173, "%x" ]      # branch in hex
    - [ utf8, 0x00efc177, "%x" ]      # branch in hex
    - [ utf8, 0x00efc197, "%x" ]      # branch in hex
    - [ utf8, 0x00efc19b, "%x" ]      # branch in hex
    - [ utf8, 0x00efc7fe, "%x" ]      # imm in hex
    # debug renderer
    - [ be32, 0x0061cf10, 0x7fa3eb78 ]
    - [ be32, 0x0061cf14, 0x4bd47aad ]
    - [ be32, 0x0061cf18, 0x7fa3eb78 ]
    - [ be32, 0x0061cf1c, 0x484bb6b9 ]
    - [ be32, 0x0061cf20, 0x7fa3eb78 ]
    - [ be32, 0x0061cf24, 0x484756c9 ]
    - [ be32, 0x00036a04, 0x60000000 ]
    # msgcon buff
    - [ be32, 0x012c6650, 0x013f1340 ]
    - [ be32, 0x00a92720, 0x60000000 ]
    # msgout to msgcon start
    - [ be32, 0x00a92724, 0x3cc00135 ]
    - [ be32, 0x00a92728, 0x60c67130 ]
    - [ be32, 0x00a9272c, 0x3ce041b0 ]
    - [ be32, 0x00a92730, 0x90e60000 ]
    - [ be32, 0x00a92734, 0xc0060000 ]
    - [ be32, 0x00a92738, 0xc0460000 ]
    - [ be32, 0x00a9273c, 0x3ce04204 ]
    - [ be32, 0x00a92740, 0x90e60000 ]
    - [ be32, 0x00a92744, 0xc0260000 ]
    - [ be32, 0x00a92748, 0x38c0ffff ]
    - [ be32, 0x00a9274c, 0x80fe8098 ]
    - [ be32, 0x00a92750, 0x48047821 ]
    - [ be32, 0x00a92754, 0x807e8098 ]
    - [ be32, 0x00a92758, 0x38800000 ]
    - [ be32, 0x00a9275c, 0x38a01000 ]
    - [ be32, 0x00a92760, 0x483e8fe1 ]
    - [ be32, 0x00a92764, 0x3cc00135 ]
    - [ be32, 0x00a92768, 0x60c67130 ]
    - [ be32, 0x00a9276c, 0x3ce04248 ]
    - [ be32, 0x00a92770, 0x90e60000 ]
    - [ be32, 0x00a92774, 0xc0260000 ]
    - [ be32, 0x00a92778, 0x3ce04422 ]
    - [ be32, 0x00a9277c, 0x60e70080 ]
    - [ be32, 0x00a92780, 0x90e60000 ]
    - [ be32, 0x00a92784, 0xc0460000 ]
    - [ be32, 0x00a92788, 0x3ce00135 ]
    - [ be32, 0x00a9278c, 0x60e77148 ]
    - [ be32, 0x00a92790, 0x38c0ffff ]
    - [ be32, 0x00a92794, 0x480477dd ]
    - [ be32, 0x00a92798, 0x48000064 ]
    # msgcon buffer in single area
    - [ be32, 0x00a519f8, 0x4848a738 ]
    - [ be32, 0x00edc130, 0x3d20013f ]
    - [ be32, 0x00edc134, 0x61291340 ]
    - [ be32, 0x00edc138, 0x4bb758c4 ]
    # taskmgr
    - [ be32, 0x0083f9c0, 0x807eff84 ]
    - [ be32, 0x012befe8, 0x01357148 ]
    # display-msg
    - [ be32, 0x008529f8, 0x60000000 ]
    - [ be32, 0x00852a04, 0x60000000 ]
    # DC printing
    - [ be32, 0x0081c060, 0x48002cbc ] # printf
    - [ be32, 0x0081c074, 0x48002ca8 ] # print-string
    - [ be32, 0x0078c5a4, 0x38600001 ]
    - [ be32, 0x0078c5a8, 0x482c5c05 ]
    - [ be32, 0x0078c5ac, 0x7fa3eb78 ]
    - [ be32, 0x0078c5b0, 0x482c5c51 ]
    - [ be32, 0x0078c5b4, 0x48000018 ]
 
   tlou_gpulighting_notes: &tlou_gpulighting_notes
    "Uses GPU (RSX) path for lighting effects instead of SPU.\nFixes rendering of lightning effects that are being rendered broken via SPU path and greatly improves performance over it.\nThis path is incomplete and results in some missing effects such as Volumetric lighting.\nVersion 2.0 - Fixes Cabin Resort level crashes/artifacts without removing the fog (1.11 only)"
 
   tlou_speed_notes: &tlou_speed_notes
    "Improves performance in certain areas. May cause issues."
 
   tlou_debugmenu_notes: &tlou_debugmenu_notes
    "L3 + Start = Dev Menu\nL3 + Select = Quick Menu\nL3 + Triangle = FPS Text\nL3 + R3 = Debug Fly"
 
  tlou_infiniteflashlight_notes: &tlou_infiniteflashlight_notes
    "This patch is useful for people who play with something other than DualShock3/4.\nNormaly flashlight battery drains after ~3600 frames, patch disables battery drain, Infinite flashlight battery no controller shake."
 
  tlou_nocamshake_notes: &tlou_nocamshake_notes
    "Disables camera shake during gameplay.\nIn-Game cinematics remain unaffected."
 
  tlou_localmp_notes: &tlou_localmp_notes
    "Matchmaking does not work."
 
  tlou_dbgtasks_notes: &tlou_dbgtasks_notes
    "Only enable this if you know what you are doing!"
 
  tlou_headcrash_notes: &tlou_headcrash_notes
    "Fixes a bug where throwing an object at an Infected Severed Head causes a game crash."
 
  tlou_ar_notes: &tlou_ar_notes
    "Requires \"Stretch To Display Area\" checked in the GPU settings. UI elements will be stretched."
 
  tlou_fps_notes: &tlou_fps_notes
    "Unlocks FPS without any special settings.\nGame may crash above 500 FPS in loading screens."


   fpsnotes: &fpsnotes "Unlocks the FPS without any special settings.\nGame may crash above 500FPS in loading screen."
   tlou_mlaa_notes: &tlou_mlaa_notes
    "Allows for the use of Resolution Scaling and improves performance.\nVersion 2.0 - Fixes crashes introduced in the original patch.\nVersion 3.0 - Fixes the Green Rain in more areas.\nVersion 4.0 - Fixes high levels of Bloom in some areas.\n\nKnown issues: Listen mode does not work."


   tloumlaanotes: &tloumlaanotes "Allows for the use of Resolution Scaling and improves performance.\n Version 2.0 fixes crashes introduced in earlier patch versions.\nVersion 3.0 Fixes the Green Rain in more areas.\nIncorrect bloom can be addressed by using the Bloom patches below.\nKnown issues: Non working listen mode"
   tloulb100_title: &tloulb100_title
    "The Last of Us Left Behind":
      NPUA81175: [ 01.00 ]
      NPEA00521: [ 01.00 ]


   tlou100_title: &tlou100_title
   tlou100_title: &tlou100_title
Line 300: Line 1,045:
       BCJS37010: [ 01.00 ]
       BCJS37010: [ 01.00 ]
       BCAS20270: [ 01.00 ]
       BCAS20270: [ 01.00 ]
      NPEA00435: [ 01.00 ]
      NPUA80960: [ 01.00 ]


   tlou111_title: &tlou111_title
   tlou111_title: &tlou111_title
Line 308: Line 1,055:
       BCJS37010: [ 01.11 ]
       BCJS37010: [ 01.11 ]
       BCAS20270: [ 01.11 ]
       BCAS20270: [ 01.11 ]
      NPEA00435: [ 01.11 ]
      NPUA80960: [ 01.11 ]
      NPHA80243: [ 01.11 ]


PPU-9df60dc1aa5005a0c80e9066e4951dc0471553e6:
PPU-9df60dc1aa5005a0c80e9066e4951dc0471553e6:
   Disable in-built MLAA:
   "Disable in-built MLAA":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: Whatcookie
     Author: "Whatcookie"
     Notes: *tloumlaanotes
     Notes: *tlou_mlaa_notes
     Patch Version: 1.0
     Patch Version: 4.0
     Patch:
     Patch:
       - [ load, *tlou100_mlaa ]
       - [ load, *tlou100_mlaa ]
   No Bloom:
   "Disable Bloom":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ load, *tlou100_post ]
       - [ load, *tlou100_post ]
   Disable Mesh trimming:
   "Disable Mesh trimming":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_mesh ]
       - [ load, *tlou100_mesh ]
   Disable SSAO:
   "Disable SSAO":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_ssao ]
       - [ load, *tlou100_ssao ]
   Disable Motion Blur:
   "Disable Motion Blur":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_mb ]
       - [ load, *tlou100_mb ]
   Disable Depth of Field:
   "Disable Depth of Field":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_dof ]
       - [ load, *tlou100_dof ]
   Depth buffer viewport:
   "Depth buffer viewport":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_dbv ]
       - [ load, *tlou100_dbv ]
   Depth border fix:
   "Depth border fix":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_dbf ]
       - [ load, *tlou100_dbf ]
   Depth buffer:
   "Enable GPU Lighting":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes: *tlou_gpulighting_notes
     Patch Version: 1.0
     Patch Version: 2.0
     Patch:
     Patch:
       - [ load, *tlou100_db ]
       - [ load, *tlou100_db ]
   Speedboost:
   "Speedboost":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZEROx, illusion
     Author: "ZEROx, illusion"
     Notes: Improves performance in certain areas. May cause issues.
     Notes: *tlou_speed_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_speed ]
       - [ load, *tlou100_speed ]
   Disable SPU lighting:
   "Debug Menu":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZeroX
     Author: "dron_3, HdHereidme, illusion"
     Notes: *spulightingnotes
     Notes: *tlou_debugmenu_notes
    Patch Version: 1.01
    Patch:
      - [ load, *tlou100_devmenu ]
  "Bug Fix: Infected Severed Head Crash":
    Games: *tlou100_title
    Author: "illusion, ZEROx"
    Notes: *tlou_headcrash_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_spulighting ]
       - [ be32, 0x006b06a8, 0x483a4b95 ] # Branch
   Debug Menu:
      - [ be32, 0x00a5523c, 0x3d400001 ] # r10 = 0x10000
      - [ be32, 0x00a55240, 0x7f9d5000 ] # r29 vs r10
      - [ be32, 0x00a55244, 0x409d0008 ] # Skip if r29<=r10 // If r29 less or equal to r10 then do nothing
      - [ be32, 0x00a55248, 0x813d0040 ] # lwz r9,0x40(r29) // load as normal
      - [ be32, 0x00a5524c, 0x4e800020 ] # Return
   "21:9 Aspect Ratio":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: dron_3, HdHereidme
     Author: "illusion"
     Notes: *debugmenunotes
     Notes: *tlou_ar_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x00a46ad0, 0x38000001 ]
       - [ be32, 0x000325b8, 0x60000000 ] # nop write for ar float
       - [ be32, 0x00a46ad4, 0x980b2db0 ]
       - [ bef32, 0x014aebd0, 0.42 ]      # ar float
   21:9 Aspect Ratio:
      - [ bef32, 0x0128f2f4, 0.75 ]
   "16:10 Aspect Ratio":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: illusion
     Author: "mavethee"
     Notes: HUD Elements will be stretched. Users need to enable the "Stretch to Display Area" option in RPCS3 for this patch to work.
     Notes: *tlou_ar_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x000325B8, 0x60000000 ] # nop write for ar float
       - [ be32, 0x000325b8, 0x60000000 ]
       - [ be32, 0x14AEBD0, 0x3ED70A3D ] # ar float
       - [ bef32, 0x014aebd0, 0.55 ]
       - [ be32, 0x128F2F4, 0x3F400000 ]
       - [ bef32, 0x0128f2f4, 0.7 ]
   Unlock FPS:
   "Unlock FPS":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: illusion
     Author: "illusion"
     Notes: *fpsnotes
     Notes: *tlou_fps_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x00036AB8, 0x38A00000 ]
       - [ be32, 0x00036ab8, 0x38a00000 ]
   Bloom High:
   "Infinite flashlight battery":
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZEROx, illusion
     Author: "bungholio, ZEROx"
     Notes:  
     Notes: *tlou_infiniteflashlight_notes
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ be32, 0x0093e300, 0xc01e1b64 ] # load e190 with 0.75f
       - [ be32, 0x0068eb38, 0x60000000 ]
      - [ be32, 0x0093e308, 0xc1be072c ] # load e194 with 0.1f
   "Disable Camera Shake":
      - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
      - [ be32, 0x0093e310, 0xc16909a4 ] # load e19c with 1.1f
      - [ be32, 0x0093e394, 0xc0090990 ] # load e1a0 with 0f
   Bloom Medium:
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZEROx, illusion
     Author: "illusion"
     Notes:  
     Notes: *tlou_nocamshake_notes
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ be32, 0x0093e300, 0xc01e034c ] # load e190 with 0.5f
       - [ be16, 0x00966784, 0x997d ]
      - [ be32, 0x0093e308, 0xc1be072c ] # load e194 with 0.1f
   "Enable Local Multiplayer":
      - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
      - [ be32, 0x0093e310, 0xc16909a4 ] # load e19c with 0f
      - [ be32, 0x0093e394, 0xc0090990 ] # load e1a0 with 0f
   Bloom Low:
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZEROx, illusion
     Author: "icemesh, illusion"
     Notes:  
     Notes: *tlou_localmp_notes
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ be32, 0x0093e300, 0xc01e0e14 ] # load e190 with 0.25f
       - [ be32, 0x00353e7c, 0x3b800001 ] # (icemesh)
       - [ be32, 0x0093e308, 0xc1be072c ] # load e194 with 0.1f
       - [ be32, 0x00a0fbc8, 0x38600000 ] # (illusion) # For RPCS3 only, bypass connecting screen
      - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
       - [ be32, 0x01268210, 0x0132f628 ] # (illusion)
       - [ be32, 0x0093e310, 0xc16909a4 ] # load e19c with 0f
       - [ be32, 0x00356830, 0x38600000 ] # (illusion)
       - [ be32, 0x0093e394, 0xc0090990 ] # load e1a0 with 0f
   "Skip Intro":
   Bloom Default:
     Games: *tlou100_title
     Games: *tlou100_title
     Author: ZEROx, illusion
     Author: "illusion"
     Notes: Replicates Bloom settings with MLAA Enabled.
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ be32, 0x0093e308, 0xc1be072c ] # load e194 with 0.1f
       - [ be32, 0x00038ea4, 0x38600001 ]
       - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
  "DEBUG: Replace Task With Test Tasks":
       - [ be32, 0x0093e310, 0xc16909a4 ] # load e19c with 0f
    Games: *tlou100_title
       - [ be32, 0x0093e394, 0xc0090990 ] # load e1a0 with 0f
    Author: "illusion, icemesh" # SID Utils
    Notes: *tlou_dbgtasks_notes
    Patch Version: 1.0
    Patch:
      # test-tasks begin!!
      - [ be32, 0x009f9064, 0x484b023c ]
      - [ be32, 0x00ea92a0, 0x81490000 ]
      - [ be32, 0x00ea92a4, 0x3d006772 ]
      - [ be32, 0x00ea92a8, 0x61083261 ]
      - [ be32, 0x00ea92ac, 0x7f885000 ]
      - [ be32, 0x00ea92b0, 0x409e0014 ]
      - [ be32, 0x00ea92b4, 0x3d002203 ]
      - [ be32, 0x00ea92b8, 0x6108c98c ]
      - [ be32, 0x00ea92bc, 0x91090000 ]
      - [ be32, 0x00ea92c0, 0x7d284b78 ]
      - [ be32, 0x00ea92c4, 0x81490000 ]
       - [ be32, 0x00ea92c8, 0x4bb4fda0 ]
      # *test-task-graph*
      - [ be16, 0x008203a2, 0xf0f3 ]
      - [ be16, 0x008203aa, 0xd6c8 ]
      - [ be16, 0x0081d2fa, 0xf0f3 ]
      - [ be16, 0x0081d302, 0xd6c8 ]
      # crash fix
       - [ be32, 0x000390b0, 0x48000068 ]
      # no artGroup assert
       - [ be32, 0x0048731c, 0x60000000 ]


PPU-120fb71f7352d62521c639b0e99f960018c10a56:
PPU-120fb71f7352d62521c639b0e99f960018c10a56:
   Disable in-built MLAA:
   "Disable in-built MLAA":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: Whatcookie, illusion, ZEROx
     Author: "Whatcookie, illusion, ZEROx"
     Notes: *tloumlaanotes
     Notes: *tlou_mlaa_notes
     Patch Version: 2.0
     Patch Version: 4.0
     Patch:
     Patch:
       - [ load, *tlou111_mlaa ]
       - [ load, *tlou111_mlaa ]
   No Bloom:
   "Disable Bloom":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ load, *tlou111_post ]
       - [ load, *tlou111_post ]
   Disable Mesh trimming:
   "Disable Mesh trimming":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_mesh ]
       - [ load, *tlou111_mesh ]
   Disable SSAO:
   "Disable SSAO":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.1
     Patch:
     Patch:
       - [ load, *tlou111_ssao ]
       - [ load, *tlou111_ssao ]
   Disable Motion Blur:
   "Disable Motion Blur":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_mb ]
       - [ load, *tlou111_mb ]
   Disable Depth of Field:
   "Disable Depth of Field":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "JohnHolmesII, ZEROx, illusion, Juhn"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_dof ]
       - [ load, *tlou111_dof ]
   Depth buffer viewport:
   "Depth border fix":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_dbf ]
  "Enable GPU Lighting":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes: *tlou_gpulighting_notes
    Patch Version: 2.0
    Patch:
      - [ load, *tlou111_db ]
  "WCB/WDB Performance fix":
    Games: *tlou111_title
    Author: "ZEROx"
    Notes: "Disables Depth Buffer Reload, reduces performance penalty using WCB/WDB."
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa030, 0x9b83 ] # Speedup 1571ad8 (WCB)
      - [ be32, 0x00a974f4, 0x4bfd4ef1 ] # Call
      - [ be32, 0x00a6c3e4, 0x3c600142 ] # r3 = 0x1420000
      - [ be32, 0x00a6c3e8, 0xa0639ef4 ] # lhz r3,0x9ef4(r3)
      - [ be32, 0x00a6c3ec, 0x2f83080c ] # r3 vs 0x80c
      - [ be32, 0x00a6c3f0, 0x419e000c ] # beq
      - [ be32, 0x00a6c3f4, 0xc1a9038c ] # f13 original load
      - [ be32, 0x00a6c3f8, 0x48000008 ]
      - [ be32, 0x00a6c3fc, 0xc1be8100 ] # f13 == f0
      - [ be32, 0x00a6c400, 0x4e800020 ] # ret
  "Speedboost":
    Games: *tlou111_title
    Author: "ZEROx, illusion"
    Notes: *tlou_speed_notes
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_speed ]
  "Debug Menu":
    Games: *tlou111_title
    Author: "illusion, ZEROx, dron_3, HdHereidme"
    Notes: *tlou_debugmenu_notes
    Patch Version: 1.2
    Patch:
      - [ load, *tlou111_devmenu ]
  "Infinite flashlight battery":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "bungholio, ZEROx"
     Notes:  
     Notes: *tlou_infiniteflashlight_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_dbv ]
       - [ be32, 0x006acbc8, 0x60000000 ]
   Depth border fix:
   "Bug Fix: Infected Severed Head Crash":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "illusion, ZEROx"
     Notes:  
     Notes: *tlou_headcrash_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_dbf ]
      - [ be32, 0x006d9368, 0x483aa7ed ] # Call
   Depth buffer:
      - [ be32, 0x00a83b54, 0x3d400001 ] # r10 = 0x10000
      - [ be32, 0x00a83b58, 0x7f9d5000 ] # r29 vs r10
      - [ be32, 0x00a83b5c, 0x409d0008 ] # Skip if r29<=r10 // If r29 less or equal to r10 then do nothing
      - [ be32, 0x00a83b60, 0x813d0040 ] # lwz r9,0x40(r29) // load as normal
      - [ be32, 0x00a83b64, 0x4e800020 ] # Return
  "21:9 Aspect Ratio":
    Games: *tlou111_title
    Author: "illusion"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0003556c, 0x60000000 ] # nop write for ar float
      - [ bef32, 0x01558a50, 0.42 ]      # ar float
      - [ bef32, 0x012c1964, 0.75 ]
  "16:10 Aspect Ratio":
    Games: *tlou111_title
    Author: "mavethee"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0003556c, 0x60000000 ]
      - [ bef32, 0x01558a50, 0.55 ]
      - [ bef32, 0x012c1964, 0.7 ]
  "Unlock FPS":
    Games: *tlou111_title
    Author: "illusion"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00039d08, 0x38a00000 ]
  "Dev Menu Plus":
    Games: *tlou111_title
    Author: "illusion, Freako, Smasher248"
    Notes: "Replaces some useless options in Memory Tab with rendering features.\nWireframe modes currently do not work on the emulator."
    Patch Version: 1.0
    Patch:
       - [ load, *tlou111_devplus ]
  "Disable Pause in Dev Menu":
    Games: *tlou111_title
    Author: "illusion, Freako"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x009d2114, 0x9803 ]
   "NPC Model Scale in Clock Menu":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: JohnHolmesII, ZEROx, illusion, Juhn
     Author: "illusion"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_db ]
       - [ be32, 0x012850f8, 0x0148ae18 ]        # ptr
   Speedboost:
      - [ be16, 0x0135dcac, 0x3f80 ]            # avoid assertion
      - [ be64, 0x00e8c418, 0x4e5043204d6f6465 ] # string replace
      - [ be32, 0x00e8c420, 0x6c205363 ]
      - [ be16, 0x00e8c424, 0x616c ]
      - [ be64, 0x00e8c426, 0x653a000000000000 ] # 1 byte overlap
   "Disable Camera Shake":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZEROx, illusion
     Author: "illusion"
     Notes: Improves performance in certain areas. May cause issues.
     Notes: *tlou_nocamshake_notes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_speed ]
       - [ be16, 0x00994234, 0x997d ]
   Disable SPU Lighting:
   "Infinite Everything (Parts, Pills, Crafting items)":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZeroX
     Author: "Medo, Randy97Killa, illusion"
     Notes: *spulightingnotes
     Notes: "Pick up any amount of parts or items to activate the cheat.\nReplaces 'SS Printout to Msgcon' in Debug Menu Gameplay tab"
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_spulighting ]
       - [ load, *tlou111_cparts ]
   Debug Menu:
   "Tool Always Level 5":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: dron_3, HdHereidme
     Author: "illusion, ZEROx"
     Notes: *debugmenunotes
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x00a92640, 0x38000001 ]
       - [ be32, 0x00082960, 0x38000005 ] # tools level load
       - [ be32, 0x00a92644, 0x980b2db0 ]
       - [ be32, 0x00082788, 0x60000000 ] # tools gain pickup, result will be
   21:9 Aspect Ratio:
   "Bug Fix: University Nailbomb Softlock Fix":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: illusion
     Author: "illusion, ZEROx"
     Notes: HUD Elements will be stretched. Users need to enable the "Stretch to Display Area" option in RPCS3 for this patch to work.
     Notes: "Fixes a softlock at the end of the university chapter."
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x0003556C, 0x60000000 ] # nop write for ar float
       - [ load, *tlou111_nailbombsoftlockfix ]
      - [ be32, 0x1558A50,  0x3ED70A3D ] # ar float
   "Skip Intro":
      - [ be32, 0x12C1964,  0x3F400000 ]
   Unlock FPS:
     Games: *tlou111_title
     Games: *tlou111_title
     Author: illusion
     Author: "illusion"
     Notes: *fpsnotes
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ be32, 0x00039D08, 0x38A00000 ]
       - [ be16, 0x0003dd9c, 0x4800 ]
   Bloom High:
   "Enable Local Multiplayer":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZEROx, illusion
     Author: "icemesh, illusion"
     Notes:  
     Notes: *tlou_localmp_notes
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
        - [ be32, 0x0096BE4c, 0xc01e1b64 ] # load e190 with 0.75f
      - [ be32, 0x0036ad6c, 0x3be00001 ] # (icemesh)
        - [ be32, 0x0096BE54, 0xc1be072c ] # load e194 with 0.1f
      - [ be32, 0x0036baa4, 0x4800002c ] # (illusion)
        - [ be32, 0x0096BE58, 0xc1890990 ] # load e198 with 0f
      - [ be32, 0x0129a01c, 0x01363538 ] # (illusion)
        - [ be32, 0x0096BE5C, 0xc16909a4 ] # load e19c with 0f
      - [ be32, 0x00a3f320, 0x38600000 ] # (illusion)
        - [ be32, 0x0096BEE0, 0xc0090990 ] # load e1a0 with 0f
      - [ be32, 0x0036dad0, 0x38600000 ] # (illusion)
   Bloom Medium:
   "DEBUG: Replace Task With Test Tasks":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZEROx, illusion
     Author: "illusion, icemesh" # SID Utils
     Notes:  
     Notes: *tlou_dbgtasks_notes
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
        - [ be32, 0x0096BE4c, 0xc01e034c ] # load e190 with 0.5f
      # test-tasks begin!!
        - [ be32, 0x0096BE54, 0xc1be072c ] # load e194 with 0.1f
      - [ be32, 0x00a29fb0, 0x484b2038 ]
        - [ be32, 0x0096BE58, 0xc1890990 ] # load e198 with 0f
      - [ be32, 0x00edbfe8, 0x81490000 ]
        - [ be32, 0x0096BE5C, 0xc16909a4 ] # load e19c with 0f
      - [ be32, 0x00edbfec, 0x3d006772 ]
        - [ be32, 0x0096BEE0, 0xc0090990 ] # load e1a0 with 0f
      - [ be32, 0x00edbff0, 0x61083261 ]
   Bloom Low:
      - [ be32, 0x00edbff4, 0x7f885000 ]
      - [ be32, 0x00edbff8, 0x409e0014 ]
      - [ be32, 0x00edbffc, 0x3d002203 ]
      - [ be32, 0x00edc000, 0x6108c98c ]
      - [ be32, 0x00edc004, 0x91090000 ]
      - [ be32, 0x00edc008, 0x7d284b78 ]
      - [ be32, 0x00edc00c, 0x81490000 ]
      - [ be32, 0x00edc010, 0x4bb4dfa4 ]
      # *test-task-graph*
      - [ be32, 0x008461a8, 0x3c80f0f3 ]
      - [ be32, 0x008461b0, 0x6084d6c8 ]
      - [ be32, 0x00841e64, 0x3ca0f0f3 ]
      - [ be32, 0x00841e6c, 0x60a5d6c8 ]
      # crash fix
      - [ be32, 0x0003df68, 0x480000a0 ]
      - [ be32, 0x0057cfe8, 0x60000000 ]
   "Infinite Ammo":
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZEROx, illusion
     Author: "Medo, Randy97Killa"
     Notes:  
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
        - [ be32, 0x0096BE4c, 0xc01e0e14 ] # load e190 with 0.25f
      - [ be32, 0x006b1d94, 0x60000000 ]
        - [ be32, 0x0096BE54, 0xc1be072c ] # load e194 with 0.1f
   "Infinite Health":
        - [ be32, 0x0096BE58, 0xc1890990 ] # load e198 with 0f
        - [ be32, 0x0096BE5C, 0xc16909a4 ] # load e19c with 0f
        - [ be32, 0x0096BEE0, 0xc0090990 ] # load e1a0 with 0f
   Bloom Default:
     Games: *tlou111_title
     Games: *tlou111_title
     Author: ZEROx, illusion
     Author: "Medo, Randy97Killa"
     Notes: Replicates Bloom settings with MLAA Enabled.
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
    Group: Bloom
     Patch:
     Patch:
       - [ be32, 0x0096BE54, 0xc1be072c ] # load e194 with 0.1f
       - [ be32, 0x007caf50, 0x486c0d24 ]
       - [ be32, 0x0096BE58, 0xc1890990 ] # load e198 with 0f
       - [ be32, 0x00e8bc74, 0x3a20008c ]
       - [ be32, 0x0096BE5C, 0xc16909a4 ] # load e19c with 0f
       - [ be32, 0x00e8bc78, 0x923f0030 ]
       - [ be32, 0x0096BEE0, 0xc0090990 ] # load e1a0 with 0f
       - [ be32, 0x00e8bc7c, 0x923f0038 ]
}}
      - [ be32, 0x00e8bc80, 0x923f0044 ]
      - [ be32, 0x00e8bc84, 0x4b93f2d0 ]


{{patch
PPU-9e5c67eaf69077c591b7c503bed2b48617643134:
|type    = Canary
  "Debug Menu":
|version = 1.2
    Games: *tloulb100_title
|content =
    Author: "dron_3, HdHereidme, FlexBy"
Anchors:
    Notes: *tlou_debugmenu_notes
   tlou100_spucrashfix: &tlou100_spucrashfix
    Patch Version: 1.0
     - [ be16, 0x1291C0C, 0x3F00 ]     # set float to 0.5 for sun pos(?)
    Patch:
     - [ be32, 0x0093E8B4, 0xC0490E57 ] # Dev Menu -> Rendering -> HDR Tonemapping -> display brightness -1.404
      - [ be32, 0x00a92d94, 0x38000001 ]
     - [ be32, 0x00335DB8, 0x60000000 ] # nop reset in option menu
      - [ be32, 0x00a92d98, 0x980b2db0 ]
  "Unlock FPS":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00039d1c, 0x38a00000 ]
  "Skip Intro":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x0003ddb0, 0x4800 ]
   "Speedboost":
     Games: *tloulb100_title
    Author: "ZEROx, illusion, FlexBy"
    Notes: *tlou_speed_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa93c, 0x9383 ]
  "Disable SSAO":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa6f0, 0x9b83 ]
  "Disable Motion Blur":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes:
    Patch Version: 1.0
     Patch:
      - [ be32, 0x0096b1e8, 0x480000e0 ]
  "Disable Mesh trimming":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00951d2c, 0x9809 ]
  "Disable in-built MLAA":
    Games: *tloulb100_title
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
    Notes: *tlou_mlaa_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa794, 0x9b83 ]
  "Disable Depth of Field":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa760, 0x9b83 ]
  "Depth border fix":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaaa2c, 0x9b83 ]
  "Disable Bloom":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      #- [ be32, 0x00aa9ba0, 0x38000003 ]
      - [ be32, 0x0096c5a0, 0xc0090990 ]
      - [ be32, 0x0096c5ac, 0xc1890990 ]
      - [ be32, 0x0096c634, 0xc0090990 ]
  "Disable Camera Shake":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes: *tlou_nocamshake_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00994988, 0x997d ]
  "Infinite flashlight battery":
    Games: *tloulb100_title
    Author: "bungholio, ZEROx, FlexBy"
    Notes: *tlou_infiniteflashlight_notes
    Patch Version: 1.0
     Patch:
      - [ be32, 0x006ad230, 0x60000000 ]
  "Enable GPU Lighting":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes: *tlou_gpulighting_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaaa38, 0x90c3 ]
      - [ be16, 0x00aaa9e4, 0x9b63 ]


   tlou111_spucrashfix: &tlou111_spucrashfix
PPU-e71d82fa70d09b7df9493f0336717dd9a4977216:
     - [ be16, 0x12C41A4, 0x3F00 ]     # set float to 0.5 for sun pos(?)
   "Disable in-built MLAA":
     - [ be32, 0x0096C400, 0xC0490E57 ] # Dev Menu -> HDR Tonemapping -> display brightness -1.404
     Games:
     - [ be32, 0x0034AFB8, 0x60000000 ] # nop reset in option menu
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
    Notes: *tlou_mlaa_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00a7a164, 0x9b83 ]
  "Unlock FPS":
    Games:
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "illusion, FlexBy"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
     Patch:
      - [ be32, 0x00036848, 0x38a00000 ]
  "Debug Menu":
    Games:
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "dron_3, HdHereidme, FlexBy"
    Notes:
    Patch Version: 1.0
     Patch:
      - [ be32, 0x00a46720, 0x38000001 ]
      - [ be32, 0x00a46724, 0x980b2db0 ]


   spucrashnotes: &spucrashnotes "This patch is now obsolete. Better implementation has been implemented into MLAA Patch.\nOld description:\nThis patch attempts to addresses issues caused by the MLAA patch causing crashes during the following subchapters:\nBill's Town: High School Escape\nPittsburgh: Financial District, Escape the City\nUniversity: Go Big Horns\n\nKnown Issues:\nMenu too dark.\nSun in wrong position.\nLighting flickers during sun position change."
PPU-f293e177971243b66bc3fd62621ce4b246726a4a:
 
   "Disable in-built MLAA":
  tlou100_title: &tlou100_title
    Games:
    "The Last of Us":
      "The Last of Us Demo":
      BCES01584: [ 01.00 ]
        NPHA80246: [ 01.00 ]
      BCES01585: [ 01.00 ]
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
      BCUS98174: [ 01.00 ]
    Notes:
      BCJS37010: [ 01.00 ]
    Patch Version: 1.0
       BCAS20270: [ 01.00 ]
    Patch:
 
       - [ be16, 0x00a7a164, 0x9b83 ]
   tlou111_title: &tlou111_title
   "Unlock FPS":
     "The Last of Us":
     Games:
      BCES01584: [ 01.11 ]
      "The Last of Us Demo":
      BCES01585: [ 01.11 ]
        NPHA80246: [ 01.00 ]
      BCUS98174: [ 01.11 ]
     Author: "illusion, FlexBy"
      BCJS37010: [ 01.11 ]
     Notes:
      BCAS20270: [ 01.11 ]
 
PPU-9df60dc1aa5005a0c80e9066e4951dc0471553e6:
  SPU Crash Workaround:
    Games: *tlou100_title
     Author: illusion, ZEROx
     Notes: *spucrashnotes
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou100_spucrashfix ]
       - [ be32, 0x00036848, 0x38a00000 ]
 
  "Debug Menu":
PPU-120fb71f7352d62521c639b0e99f960018c10a56:
    Games:
  SPU Crash Workaround:
      "The Last of Us Demo":
    Games: *tlou111_title
        NPHA80246: [ 01.00 ]
     Author: illusion, ZEROx
     Author: "dron_3, HdHereidme, FlexBy"
     Notes: *spucrashnotes
     Notes:
     Patch Version: 1.0
     Patch Version: 1.0
     Patch:
     Patch:
       - [ load, *tlou111_spucrashfix ]
       - [ be32, 0x00a46720, 0x38000001 ]
      - [ be32, 0x00a46724, 0x980b2db0 ]
}}
}}

Latest revision as of 08:17, 19 June 2024

The Last of Us
TLOUcover.jpg
Developer(s) Naughty Dog
Publisher(s) Sony Computer Entertainment
Release date(s) June 14, 2013
Release type PlayStation exclusive
Genre(s) Action, Adventure, Survival horror
Mode(s) Single-player, Multiplayer
GameID(s) BCES01584 (IRD), BCES01585 (IRD), BCUS98174 (IRD), BCJS37010 (IRD), NPEA00435, NPHA80243, BCAS20270 (IRD), NPJA00096, NPUA80960
Left Behind
NPEA00521, NPUA81175, NPJA00129, NPHA80279
Demo
NPEA90122, NPUA70257, NPHA80246
Bonus Video
NPJM00012
Soundtrack
NPEA00454, NPUA30134
Survival Guide
NPUO30130
Internal resolution 1280x720
Quick links Check Compatibility
Open Issues
Search Google
Wikipedia Page

The Last of Us is a game where players control Joel, a smuggler tasked with escorting a teenage girl, Ellie, across a post-apocalyptic United States. The Last of Us is played from a third-person perspective. Players use firearms and improvised weapons, and can use stealth to defend against hostile humans and cannibalistic creatures infected by a mutated strain of the Cordyceps fungus. In the online multiplayer mode, up to eight players engage in cooperative and competitive gameplay.

Development of The Last of Us began in 2009, soon after the release of Naughty Dog's previous game, Uncharted 2: Among Thieves. For the first time in the company's history, Naughty Dog split into two teams; while one team developed Uncharted 3: Drake's Deception, the other half developed The Last of Us. The relationship between Joel and Ellie became the central focus of the game, with all other elements developed around it. Actors Troy Baker and Ashley Johnson portrayed Joel and Ellie respectively through voice and motion capture, and assisted creative director Neil Druckmann with the development of the characters and story. The original score was composed and performed by Gustavo Santaolalla.

Following its announcement in December 2011, The Last of Us was widely anticipated. Upon release, it received critical acclaim, with praise directed at its narrative, gameplay, visual and sound design, characterization, and depiction of female characters. The Last of Us became one of the best-selling games on the PlayStation 3, selling over 1.3 million units in its first week and 17 million by April 2018. After the game's release, Naughty Dog released several downloadable content additions. The Last of Us: Left Behind adds a single-player campaign following Ellie and her best friend Riley.

Configuration

Options that deviate from RPCS3's default settings and provide the best experience with this title are listed below.

GPU configuration

Setting Option Notes
Framelimit 60 Enabling framelimit prevents rare crashes during loading screens when framerate may exceed 500 FPS. Alternatively, enable VSync on a 60Hz monitor for the same effect.
ZCULL accuracy Relaxed Improves performance.
Resolution scale 100 Resolution scaling only works with the MLAA patch.
Resolution scale threshold 1 x 1 When using Resolution scaling above 100%, this must be set to 1 x 1 otherwise some effects like lens flares will be missing.
Write color buffers On Needed if you're not using the MLAA patch. Fixes green rain and particle issues. Slightly reduces performance.

Advanced configuration

Setting Option Notes
Accurate RSX reservation access On Prevents random freezing/crashing while playing the game.
Read color buffers On Fixes graphical issues when certain patches are enabled.
Handle RSX memory tiling On Fixes black squares if playing unpatched.
RSX FIFO accuracy Atomic Helps with stability.

Recommended patches

Game patches are available through the RPCS3 Patch Manager. To enable them, right-click a game in RPCS3 then select "Manage Game Patches". Game Patches are created by RPCS3's community, and can alter how a game runs. More information can be found here.

Recommendation Patch name Notes
Highly recommended patch Depth border fix, Bug Fix: Infected Severed Head Crash, Bug Fix: University Nailbomb Softlock Fix, Disable in-built MLAA, Disable Mesh Trimming, Enable GPU Lighting, Speedboost Improves performance, allows Resolution Scaling to work properly and fixes game bugs.
Recommended patch Disable Bloom, Disable Depth of Field, Disable Motion Blur, Disable SSAO, Skip Intro, Infinite Flashlight Battery

Known Issues

Special Notes

The Last of Us can be played from start to finish, but requires a good CPU and using RPCS3's patches (especially the MLAA patch) for serviceable performance.

On systems running macOS, to get past the PPU Trap on the loading screen, find your configuration file (should typically be in ~/Library/Application Support/rpcs3/custom_configs), open it in a text editor, then search for the configuration key named "Stub PPU Traps". This value will normally show as 0. Change it to 1 and save the configuration file. The PPU Traps should no longer appear during the loading screen, and during gameplay.

Netplay testing

For the complete list of games tested with RPCN, please check the RPCN Compatibility List.

Game Version RPCS3 Version Connects? Create/Join lobbies? Match with others? Online features working? Requires custom servers? Notes
1.11 N/A No No No No Not available

Patches

Anchors:
  # Since we only change store reg and branch, we don't need to patch last 2 bytes again.
  tlou100_mlaa: &tlou100_mlaa
    - [ be16, 0x00a7a514, 0x9b83 ]     # store 0
  #  - [ be16, 0x00a51a8c, 0x4800 ]     # unconditonally branch to disable MLAA
    - [ be16, 0x0092ddac, 0x4800 ]     # Skip memory check function
    - [ be32, 0x00ae5d4c, 0x38000000 ] # Green rain
    - [ be32, 0x00a2c4f0, 0x38000000 ] # Green rain
    - [ be32, 0x00a2c4fc, 0x38000000 ] # Green rain
    - [ be32, 0x00a58da8, 0x60000000 ] # skip assert: x + w <= width && y + h <= height
    - [ be32, 0x0093e30c, 0xc1890990 ] # Cargo fix
    - [ be32, 0x0093e394, 0xc0090990 ] # Reticle bloom
  # Dof patch
    - [ be32, 0x0093dd64, 0x48113d2d ] # Call1
    - [ be32, 0x0093dd88, 0x48113d19 ] # Call2
    - [ be32, 0x00a0ae2c, 0x48046c85 ] # Call3
  # Func 1 Overall DoF 1
    - [ be32, 0x00a51a90, 0xc09c0aa4 ] # Load f4
    - [ be32, 0x00a51a94, 0xc27e04d4 ] # f19 = 0.3
    - [ be32, 0x00a51a98, 0xec8404f2 ] # f4*f19
    - [ be32, 0x00a51a9c, 0x4e800020 ] # Return
  # Func 2 Cutscene Dof
    - [ be32, 0x00a51aa0, 0xc01c0aac ] # Load f0
    - [ be32, 0x00a51aa4, 0xc17e1d34 ] # f11 = 0.75
    - [ be32, 0x00a51aa8, 0xec0002f2 ] # f0*f11
    - [ be32, 0x00a51aac, 0x4e800020 ] # Return
  # Func 3 Overall Dof 2
    - [ be32, 0x00a51ab0, 0x3d200146 ] # r9 = 1460000
    - [ be32, 0x00a51ab4, 0x3929481c ] # r9 = 146481c
    - [ be32, 0x00a51ab8, 0x80080014 ] # Load pattern to r0
    - [ be32, 0x00a51abc, 0x7f804800 ] # Compare r0 to r9
    - [ be32, 0x00a51ac0, 0x409e0010 ]
    - [ be32, 0x00a51ac4, 0xc01e10a0 ] # f0 = 0.3
    - [ be32, 0x00a51ac8, 0xd008000c ] # Store f0
    - [ be32, 0x00a51acc, 0x48000008 ]
    - [ be32, 0x00a51ad0, 0xd3e8000c ] # Default store
    - [ be32, 0x00a51ad4, 0x4e800020 ] # Return
  # Bloom correction patch v2.2
    - [ be32, 0x0093e308, 0x481137d1 ] # Call
    - [ be32, 0x00a51ad8, 0xc1a909a4 ] # Load f13
    - [ be32, 0x00a51adc, 0xc19e064c ] # f12 = 0.69
    - [ be32, 0x00a51ae0, 0x808909a8 ] # r4 unique value e198
    - [ be32, 0x00a51ae4, 0x2f840000 ] # if r4 <= 0
    - [ be32, 0x00a51ae8, 0x409d0058 ] # Skip to Main menu
  # Bills town Bloater and escape (2)
    - [ be32, 0x00a51aec, 0x3ca03ba4 ] # r5 = 3ba40000
    - [ be32, 0x00a51af0, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51af4, 0x419c0074 ] # go to Patch if less
  # Bills town Cemetery (1)
    - [ be32, 0x00a51af8, 0x808909a4 ] # r4 unique value e194
    - [ be32, 0x00a51afc, 0x3ca03e80 ] # r5 = 3e800000
    - [ be32, 0x00a51b00, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b04, 0x419c0068 ] # go to Patch if less
  # Bills town main street (2)
    - [ be32, 0x00a51b08, 0x3ca04026 ] # r5 = 40260000
    - [ be32, 0x00a51b0c, 0x38a56666 ] # r5 = 40266666
    - [ be32, 0x00a51b10, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b14, 0x419e0054 ] # go to Patch if ==
  # Bills town Trap (2)
    - [ be32, 0x00a51b18, 0x3ca0403d ] # r5 = 403d0000
    - [ be32, 0x00a51b1c, 0x38a5e4e2 ] # r5 = 403ce4e2
    - [ be32, 0x00a51b20, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b24, 0x419e0044 ] # go to Patch if ==
  # Bills Town intro check (2)
    - [ be32, 0x00a51b28, 0x808909bc ] # r4 unique value e1ac
    - [ be32, 0x00a51b2c, 0x3ca04007 ] # r5 = 40070000
    - [ be32, 0x00a51b30, 0x38a50a3d ] # r5 = 40070a3d
    - [ be32, 0x00a51b34, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b38, 0x419e0030 ] # go to Patch if ==
    - [ be32, 0x00a51b3c, 0x4e800020 ] # Return
  # Patch Menu/Ending level
    - [ be32, 0x00a51b40, 0x808909a0 ] # r4 unique value e190
    - [ be32, 0x00a51b44, 0x3ca03f8d ] # r5 = 3f8d0000
    - [ be32, 0x00a51b48, 0x38a52f6f ] # r5 = 3f8d2f6f
    - [ be32, 0x00a51b4c, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b50, 0x419e0010 ] # Patch menu
    - [ be32, 0x00a51b54, 0x80a909a4 ] # r5 unique value e194
    - [ be32, 0x00a51b58, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a51b5c, 0x4c9e0020 ] # Return (bnelr)
    - [ be32, 0x00a51b60, 0xc19e03fc ] # f12 = 0.5
    - [ be32, 0x00a51b64, 0x48000008 ] # go to Patch
  # Patch function
    - [ be32, 0x00a51b68, 0xedad0332 ] # f13=f13*f12
    - [ be32, 0x00a51b6c, 0xec000332 ] # f0=f0*f12
    - [ be32, 0x00a51b70, 0x4e800020 ] # Return

  # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming
  # address. Without them this patch wouldn't have been possible.
  # This patch cycles through various post-processing modes. Values accepted are:
  #    0 = None
  #    1 = Bloom
  #    2 = Depth of Field
  #    3 = Tonemapping // reversed from orbis version confirmed this exists
  #    4 = Bloom & Depth of Field
  #    5 = Bloom & Depth of Field & Tonemapping (Default)

  tlou100_post: &tlou100_post
  #  - [ be32, 0x00a7991c, 0x38000003 ] # Post-processing modes                    (mem address: 0x14c79c7)
    - [ be32, 0x0093e300, 0xc0090990 ] # load e190 with 0
    - [ be32, 0x0093e30c, 0xc1890990 ] # load e198 with 0f
    - [ be32, 0x0093e394, 0xc0090990 ] # load e1a0 with 0f

  tlou100_mesh: &tlou100_mesh
    - [ be16, 0x00923a94, 0x9809 ]     # Disable Mesh trimming       (r3  => r0 ) (mem address: 0x142c584)

  # Many settings below are enabled/disabled in sub_A7A340. In this subroutine,
  #    r6  = 2
  #    r27 = 1
  #    r28 = 0
  # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
  # source register from one to the other, though some are words and some are bytes, so be careful.

  tlou100_ssao: &tlou100_ssao
    - [ be16, 0x00a7a470, 0x9b83 ]     # Disable SSAO                (r27 => r28) (mem address: 0x14c7c0f)

  tlou100_mb: &tlou100_mb
    - [ be16, 0x00a7a4d4, 0x9b83 ]     # Disable motion blur         (r27 => r28) (mem address: 0x14c7c2e)

  tlou100_dof: &tlou100_dof
    - [ be16, 0x00a7a4e0, 0x9b83 ]     # Disable depth of field      (r27 => r28) (mem address: 0x14c7c31)

  tlou100_dbv: &tlou100_dbv
    - [ be16, 0x00a7a760, 0x9b63 ]     # Depth buffer viewport       (r28 => r27) (mem address: 0x14c7e9d)

  tlou100_dbf: &tlou100_dbf
    - [ be16, 0x00a7a7ac, 0x9b83 ]     # Depth border fix            (r27 => r28) (mem address: 0x14c7ec1)

  tlou100_db: &tlou100_db
    - [ be16, 0x00a7a7b8, 0x90e3 ]     # Depth buffer                (r27 => r6 ) (mem address: 0x14c7f93)
    - [ be16, 0x00a516ec, 0x4800 ]     # Cabin resort crash fix

  tlou100_speed: &tlou100_speed
    - [ be16, 0x00a7a6b8, 0x9383 ]     # Speedboost                               (mem address: 0x14c7e5f)

  tlou100_devmenu: &tlou100_devmenu
    # debug menu
    - [ be32, 0x000399c8, 0x39c00001 ]
    - [ be16, 0x009ace36, 0x2db6 ]
    - [ be16, 0x009ace3e, 0x2db6 ]
    # pak arg
    - [ be32, 0x004ea8ac, 0x4897451c ]
    - [ be32, 0x00e5edc8, 0x90be82e4 ]
    - [ be32, 0x00e5edcc, 0x88050000 ]
    - [ be32, 0x00e5edd0, 0x4b68bae0 ]
    # menu start
    - [ be32, 0x004e94f8, 0x39ef0020 ]
    - [ be32, 0x004e94fc, 0x48c96f34 ]
    - [ be32, 0x01180430, 0x3c800117 ]
    - [ be32, 0x01180434, 0x6084fe25 ]
    - [ be32, 0x01180438, 0x7c847a14 ]
    - [ be32, 0x0118043c, 0x4b3690c4 ]
    - [ utf8, 0x0117fe45, "shiv                           \x00" ]
    - [ utf8, 0x0117fe65, "pistol-uber-t1                 \x00" ]
    - [ utf8, 0x0117fe85, "NO_ART_GROUP                   \x00" ]
    - [ utf8, 0x0117fea5, "nail-bomb                      \x00" ]
    - [ utf8, 0x0117fec5, "two-by-four                    \x00" ]
    - [ utf8, 0x0117fee5, "nail-bomb                      \x00" ]
    - [ utf8, 0x0117ff05, "turret-sniper                  \x00" ]
    - [ utf8, 0x0117ff25, "pistol-uber-t1                 \x00" ]
    - [ utf8, 0x0117ff45, "shiv                           \x00" ]
    - [ utf8, 0x0117ff65, "radio                          \x00" ]
    - [ utf8, 0x0117ff85, "molotov                        \x00" ]
    - [ utf8, 0x0117ffa5, "bandage-apply                  \x00" ]
    - [ utf8, 0x0117ffc5, "mp-parcel                      \x00" ]
    - [ utf8, 0x0117ffe5, "machete-blade                  \x00" ]
    - [ utf8, 0x01180005, "bow-dark                       \x00" ]
    - [ utf8, 0x01180025, "mini-14-rifle                  \x00" ]
    - [ utf8, 0x01180045, "two-by-four                    \x00" ]
    - [ utf8, 0x01180065, "pistol-shotgun                 \x00" ]
    - [ utf8, 0x01180085, "beer-bottle                    \x00" ]
    - [ utf8, 0x011800a5, "lead-pipe                      \x00" ]
    - [ utf8, 0x011800c5, "lead-pipe                      \x00" ]
    - [ utf8, 0x011800e5, "flashlight                     \x00" ]
    - [ utf8, 0x01180105, "rifle-sniper                   \x00" ]
    - [ utf8, 0x01180125, "m4-rifle-t1                    \x00" ]
    - [ utf8, 0x01180145, "smoke-bomb                     \x00" ]
    - [ utf8, 0x01180165, "throw-brick                    \x00" ]
    - [ utf8, 0x01180185, "shotgun-pump-stock             \x00" ]
    - [ utf8, 0x011801a5, "NO_ART_GROUP                   \x00" ]
    - [ utf8, 0x011801c5, "bloater-pustule                \x00" ]
    - [ utf8, 0x011801e5, "taurus-66b4-revolver           \x00" ]
    - [ utf8, 0x01180205, "nail-bomb                      \x00" ]
    - [ utf8, 0x01180225, "throwing-knife                 \x00" ]
    - [ utf8, 0x01180245, "rifle-bolt                     \x00" ]
    - [ utf8, 0x01180265, "beretta-jaguar-pistol          \x00" ]
    - [ utf8, 0x01180285, "bow                            \x00" ]
    - [ utf8, 0x011802a5, "molotov                        \x00" ]
    - [ utf8, 0x011802c5, "bill-knife                     \x00" ]
    - [ utf8, 0x011802e5, "baseball-bat                   \x00" ]
    - [ utf8, 0x01180305, "pistol-9mm                     \x00" ]
    - [ utf8, 0x01180325, "machete-blade                  \x00" ]
    - [ utf8, 0x01180345, "none                           \x00" ]
    - [ utf8, 0x01180365, "rifle-improvised-assault       \x00" ]
    - [ utf8, 0x01180385, "switchblade                    \x00" ]
    - [ utf8, 0x011803a5, "baseball-bat                   \x00" ]
    - [ utf8, 0x011803c5, "hatchet                        \x00" ]
    - [ utf8, 0x011803e5, "NO_ART_GROUP                   \x00" ]
    - [ utf8, 0x01180405, "flamethrower                   \x00" ]
    # debug draw renderer on 2d
    - [ be32, 0x005f8b48, 0x7fa3eb78 ]
    - [ be32, 0x005f8b4c, 0x4bd551dd ]
    - [ be32, 0x005f8b50, 0x7fa3eb78 ]
    - [ be32, 0x005f8b54, 0x4844df29 ]
    - [ be32, 0x005f8b58, 0x7fa3eb78 ]
    - [ be32, 0x005f8b5c, 0x484b2695 ]
    - [ be32, 0x00033c5c, 0x60000000 ]
    # DC printing
    - [ be32, 0x007681e8, 0x38600001 ]
    - [ be32, 0x007681ec, 0x482b9de1 ]
    - [ be32, 0x007681f0, 0x7fa3eb78 ]
    - [ be32, 0x007681f4, 0x482b9e2d ]
    - [ be32, 0x007681f8, 0x7fa3eb78 ]
    - [ be32, 0x007681fc, 0x486de265 ]
    - [ be32, 0x00768200, 0x48000010 ]
    - [ be32, 0x007f7370, 0x48002708 ] # native-printf
    - [ be32, 0x007f7384, 0x480026f4 ] # native-print-string
    # msgout to msgcon (debug text)
    - [ be32, 0x01293838, 0x013bdab0 ] # msgcon buffer
    # start
    - [ be32, 0x00a46b70, 0x3cc00132 ]
    - [ be32, 0x00a46b74, 0x60c63220 ]
    - [ be32, 0x00a46b78, 0x3ce041b0 ]
    - [ be32, 0x00a46b7c, 0x90e60000 ]
    - [ be32, 0x00a46b80, 0xc0060000 ]
    - [ be32, 0x00a46b84, 0xc0460000 ]
    - [ be32, 0x00a46b88, 0x3ce04204 ]
    - [ be32, 0x00a46b8c, 0x90e60000 ]
    - [ be32, 0x00a46b90, 0xc0260000 ]
    - [ be32, 0x00a46b94, 0x38c0ffff ]
    - [ be32, 0x00a46b98, 0x80fe8098 ]
    - [ be32, 0x00a46b9c, 0x480656e5 ]
    - [ be32, 0x00a46ba0, 0x3cc00132 ]
    - [ be32, 0x00a46ba4, 0x60c63220 ]
    - [ be32, 0x00a46ba8, 0x3ce04422 ]
    - [ be32, 0x00a46bac, 0x60e70080 ]
    - [ be32, 0x00a46bb0, 0x90e60000 ]
    - [ be32, 0x00a46bb4, 0xc0060000 ]
    - [ be32, 0x00a46bb8, 0xc0460000 ]
    - [ be32, 0x00a46bbc, 0x3ce04204 ]
    - [ be32, 0x00a46bc0, 0x90e60000 ]
    - [ be32, 0x00a46bc4, 0xc0260000 ]
    - [ be32, 0x00a46bc8, 0x38c0ffff ]
    - [ be32, 0x00a46bcc, 0x80fe809c ]
    - [ be32, 0x00a46bd0, 0x480656b1 ]
    - [ be32, 0x00a46bd4, 0x807e809c ]
    - [ be32, 0x00a46bd8, 0x88830000 ]
    - [ be32, 0x00a46bdc, 0x2f840000 ] # check
    - [ be32, 0x00a46be0, 0x419e0010 ]
    - [ be32, 0x00a46be4, 0x38800000 ]
    - [ be32, 0x00a46be8, 0x38a00080 ]
    - [ be32, 0x00a46bec, 0x48402c2d ]
    - [ be32, 0x00a46bf0, 0x807e8098 ]
    - [ be32, 0x00a46bf4, 0x88830000 ]
    - [ be32, 0x00a46bf8, 0x2f840000 ] # check
    - [ be32, 0x00a46bfc, 0x419e0010 ]
    - [ be32, 0x00a46c00, 0x38800000 ]
    - [ be32, 0x00a46c04, 0x38a01000 ]
    - [ be32, 0x00a46c08, 0x48402c11 ]
    - [ be32, 0x00a46c0c, 0x48000080 ]
    # taskmgr
    - [ be32, 0x00819e5c, 0x807effec ]
    - [ be32, 0x0128cddc, 0x01323250 ] # our taskmgr buffer
    - [ be32, 0x0129383c, 0x01323250 ] # our taskmgr buffer
    # msgcon buffer in single area
    - [ be32, 0x00a22c20, 0x4848b340 ]
    - [ be32, 0x00eadf60, 0x3d20013b ]
    - [ be32, 0x00eadf64, 0x6129dab0 ]
    - [ be32, 0x00eadf68, 0x4bb74cbc ]

  tlou111_mlaa: &tlou111_mlaa
  #  - [ be16, 0x00aaa040, 0x9b83 ]     # store 0
    - [ be16, 0x00a80350, 0x4800 ]     # unconditonally branch to disable MLAA
    - [ be16, 0x0095b8f8, 0x4800 ]     # Skip memory check function
    - [ be32, 0x00b0e140, 0x38000000 ] # Green rain
    - [ be32, 0x00a5bc38, 0x38000000 ] # Green rain
    - [ be32, 0x00a5bc44, 0x38000000 ] # Green rain
    - [ be32, 0x00a877e0, 0x60000000 ] # skip assert: x + w <= width && y + h <= height
    - [ be32, 0x0096be58, 0xc1890990 ] # Cargo fix
  # Dof correction patch
    - [ be32, 0x0096b8b0, 0x48114aa5 ] # Call1
    - [ be32, 0x0096b8d4, 0x48114a91 ] # Call2
    - [ be32, 0x00a3a588, 0x48045ded ] # Call3
  # Func 1 Overall DoF 1
    - [ be32, 0x00a80354, 0xc09c0aa4 ] # Load f4 e294
    - [ be32, 0x00a80358, 0xc27e0424 ] # f19 = 0.3
    - [ be32, 0x00a8035c, 0xec8404f2 ] # f4*f19
    - [ be32, 0x00a80360, 0x4e800020 ] # Return
  # Func 2 Cutscene Dof
    - [ be32, 0x00a80364, 0xc01c0aac ] # Load f0 e29c
    - [ be32, 0x00a80368, 0xc17e1b64 ] # f11 = 0.75
    - [ be32, 0x00a8036c, 0xec0002f2 ] # f0*f11
    - [ be32, 0x00a80370, 0x4e800020 ] # Return
  # Func 3 Overall Dof 2
    - [ be32, 0x00a80374, 0x3d200151 ] # r9 = 1510000
    - [ be32, 0x00a80378, 0x3929e29c ] # r9 = 150e29c
    - [ be32, 0x00a8037c, 0x80080014 ] # r0 = key addr
    - [ be32, 0x00a80380, 0x7f804800 ] # Compare r0 to r9
    - [ be32, 0x00a80384, 0x409e000c ]
    - [ be32, 0x00a80388, 0xc01e137c ] # f0 = 0.3
    - [ be32, 0x00a8038c, 0xd008000c ] # Store f0
    - [ be32, 0x00a80390, 0xc0050000 ] # Restore f0
    - [ be32, 0x00a80394, 0x4e800020 ] # Return
  # Bloom correction patch
    - [ be32, 0x0096be54, 0x48114549 ] # Call
    - [ be32, 0x00a8039c, 0xc1a909a4 ] # Load f13
    - [ be32, 0x00a803a0, 0xc19e059c ] # f12 = 0.69
    - [ be32, 0x00a803a4, 0x808909a8 ] # r4 unique value e198
    - [ be32, 0x00a803a8, 0x2f840000 ] # if r4 <= 0
    - [ be32, 0x00a803ac, 0x409d0058 ] # Skip to Main menu
  # Bills town Bloater and escape(2)
    - [ be32, 0x00a803b0, 0x3ca03ba4 ] # r5 = 3ba40000
    - [ be32, 0x00a803b4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803b8, 0x419c0074 ] # go to Patch if less
  # Bills town Cemetery(1)
    - [ be32, 0x00a803bc, 0x808909a4 ] # r4 unique value e194
    - [ be32, 0x00a803c0, 0x3ca03e80 ] # r5 = 3e800000
    - [ be32, 0x00a803c4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803c8, 0x419c0068 ] # go to Patch if less
  # Bills town main street(2)
    - [ be32, 0x00a803cc, 0x3ca04026 ] # r5 = 40260000
    - [ be32, 0x00a803d0, 0x38a56666 ] # r5 = 40266666
    - [ be32, 0x00a803d4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803d8, 0x419e0054 ] # go to Patch if ==
  # Bills town Trap(2)
    - [ be32, 0x00a803dc, 0x3ca0403d ] # r5 = 403d0000
    - [ be32, 0x00a803e0, 0x38a5e4e2 ] # r5 = 403ce4e2
    - [ be32, 0x00a803e4, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803e8, 0x419e0044 ] # go to Patch if ==
  # Bills Town intro check(2)
    - [ be32, 0x00a803ec, 0x808909bc ] # r4 unique value e1ac
    - [ be32, 0x00a803f0, 0x3ca04007 ] # r5 = 40070000
    - [ be32, 0x00a803f4, 0x38a50a3d ] # r5 = 40070a3d
    - [ be32, 0x00a803f8, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a803fc, 0x419e0030 ] # go to Patch if ==
    - [ be32, 0x00a80400, 0x4e800020 ] # Return
  # Patch Menu/Ending level
    - [ be32, 0x00a80404, 0x808909a0 ] # r4 unique value e190
    - [ be32, 0x00a80408, 0x3ca03f8d ] # r5 = 3f8d0000
    - [ be32, 0x00a8040c, 0x38a52f6f ] # r5 = 3f8d2f6f
    - [ be32, 0x00a80410, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a80414, 0x419e0010 ] # Patch menu
    - [ be32, 0x00a80418, 0x80a909a4 ] # r5 unique value e194
    - [ be32, 0x00a8041c, 0x7f842800 ] # compare r4 to r5
    - [ be32, 0x00a80420, 0x4c9e0020 ] # Return (bnelr)
    - [ be32, 0x00a80424, 0xc19e034c ] # f12 = 0.5
    - [ be32, 0x00a80428, 0x48000008 ] # go to Patch
  # Patch function
    - [ be32, 0x00a8042c, 0xedad0332 ] # f13=f13*f12
    - [ be32, 0x00a80430, 0xec000332 ] # f0=f0*f12
    - [ be32, 0x00a80434, 0x4e800020 ] # Return

  # Special thanks to HdHereidme for debug menu, Smasher248 for inital memory addresses and Skye Mods for mesh trimming
  # address. Without them this patch wouldn't have been possible.
  # This patch cycles through various post-processing modes. Values accepted are:
  #    0 = None
  #    1 = Bloom
  #    2 = Depth of Field
  #    3 = Tonemapping // reversed from orbis version confirmed this exists
  #    4 = Bloom & Depth of Field
  #    5 = Bloom & Depth of Field & Tonemapping (Default)

  tlou111_post: &tlou111_post
  #  - [ be32, 0x00aa944c, 0x38000003 ] # Post-processing modes                    (mem address: 0x1571867)
    - [ be32, 0x0096be4c, 0xc0090990 ] # load e190 with 0
    - [ be32, 0x0096be58, 0xc1890990 ] # load e198 with 0
    - [ be32, 0x0096bee0, 0xc0090990 ] # load e1a0 with 0

  tlou111_mesh: &tlou111_mesh
    - [ be16, 0x009515d8, 0x9809 ]     # Disable Mesh trimming       (r3  => r0 ) (mem address: 0x14a9604)

  # Many settings below are enabled/disabled in sub_AA9E6C. In this subroutine,
  #    r6  = 2
  #    r27 = 1
  #    r28 = 0
  # and these are stored into some memory blob to represent settings. Most values can be switched by just changing the
  # source register from one to the other, though some are words and some are bytes, so be careful.

  tlou111_ssao: &tlou111_ssao
    - [ be16, 0x00aa9f9c, 0x9b83 ]     # Disable SSAO

  tlou111_mb: &tlou111_mb
    - [ be32, 0x0096aa94, 0x480000e0 ] # Disable motion blur

  tlou111_dof: &tlou111_dof
    - [ be16, 0x00aaa00c, 0x9b83 ]     # Disable depth of field      (r27 => r28) (mem address: 0x1571ad1)

  tlou111_dbf: &tlou111_dbf
    - [ be16, 0x00aaa2d8, 0x9b83 ]     # Depth border fix            (r27 => r28) (mem address: 0x1571d65)

  tlou111_db: &tlou111_db
    - [ be16, 0x00aaa2e4, 0x90c3 ]     # Depth buffer                (r27 => r6 ) (mem address: 0x1571e37)
    - [ be16, 0x00aaa290, 0x9b63 ]     # Depth buffer viewport       (r28 => r27) (mem address: 0x1571d41)
    - [ be32, 0x00ab9ec8, 0x38000001 ] # Depth buffer viewport       (r28 => r27) (mem address: 0x1571d41)
  # Cabin resort fix
    - [ be64, 0x01572020, 0x1070fd7d7973c900 ] # first line
    - [ be64, 0x01572030, 0x674da76646c80092 ] # second line p.1
    - [ be32, 0x01572039, 0x2bfb00a3 ]         # second line p.2
    - [ be64, 0x01572040, 0x00003f8000014034 ] # third line p.1
    - [ be64, 0x01572048, 0x0000403400013f80 ] # third line p.2
    - [ be64, 0x01572052, 0x3f80000000a3a588 ] # Initial Current result
  # Alpha pass func
    - [ be32, 0x00a7ffac, 0x419e0020 ] # Go to Alpha pass check
    - [ be32, 0x00a7ffb0, 0x3d200157 ] # r9 = 0x1570000
  # Check Task id
    - [ be32, 0x00a7ffb4, 0x3880201f ] # r4 = 0x201f
    - [ be32, 0x00a7ffb8, 0x4800018d ] # Task id func Call
    - [ be32, 0x00a7ffbc, 0x419e0010 ] # beq to Alpha pass check
    - [ be32, 0x00a7ffc0, 0x98091d41 ] # stb Disable Alpha pass
    - [ be32, 0x00a7ffc4, 0xb0092028 ] # sth Store flag (0x1572028)
    - [ be32, 0x00a7ffc8, 0x480001a8 ] # Go to a80170
  # Alpha pass check
    - [ be32, 0x00a7ffcc, 0x88691d41 ] # lbz r3 = Alpha pass
    - [ be32, 0x00a7ffd0, 0x7f801800 ] # cmpw r0 vs r3
    - [ be32, 0x00a7ffd4, 0x409e019c ] # Skip to a80170
    - [ be32, 0x00a7ffd8, 0x2f800000 ] # cmpwi r0 vs 0
    - [ be32, 0x00a7ffdc, 0x419e0010 ] # beq
    - [ be32, 0x00a7ffe0, 0x38800000 ] # li r4 = 0
    - [ be32, 0x00a7ffe4, 0xb0892028 ] # sth Store flag (0x1572028)
    - [ be32, 0x00a7ffe8, 0x48000008 ]
    - [ be32, 0x00a7ffec, 0x38800001 ] # li r4 = 1
    - [ be32, 0x00a7fff0, 0x98891d41 ] # stb r4 Store Alpha pass
    - [ be32, 0x00a7fff4, 0x4800017c ] # Go to a80170
  # Task id func
    - [ be32, 0x00a80144, 0x7ca92214 ] # add r5 = r9 + r4
    - [ be32, 0x00a80148, 0x3c800142 ] # lis r4 = 0x1420000
    - [ be32, 0x00a8014c, 0x88649ef4 ] # lbz r3 = Task id first byte
    - [ be32, 0x00a80150, 0x8c850001 ] # lbzu r4 table byte
    - [ be32, 0x00a80154, 0x2f840000 ] # r4 vs 0 (Default case)
    - [ be32, 0x00a80158, 0x419e000c ] # beq (r4 = 0)
    - [ be32, 0x00a8015c, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a80160, 0x409efff0 ] # Go back
    - [ be32, 0x00a80164, 0x2f840000 ] # cmpwi r4 vs 0
    - [ be32, 0x00a80168, 0x4e800020 ] # Return
  # The Main function
    - [ be32, 0x00a3a584, 0x48045a75 ] # Function Call
    - [ be32, 0x00a7fff8, 0x3d200157 ] # lis r9 = 0x1570000
    - [ be32, 0x00a7fffc, 0x90692060 ] # stw Store r3
    - [ be32, 0x00a80000, 0x90a92064 ] # stw Store r5
    - [ be32, 0x00a80004, 0x3ca00151 ] # lis r5 = 0x1510000
    - [ be32, 0x00a80008, 0x38a5db24 ] # subi r5 = 0x150db24
    - [ be32, 0x00a8000c, 0x80050aec ] # lwz r0 = blizzard byte
    - [ be32, 0x00a80010, 0x2f800000 ] # cmpwi r0 vs 0
    - [ be32, 0x00a80014, 0x419e0114 ] # beq to Default store (a80128)
    - [ be32, 0x00a80018, 0xa0092028 ] # lhz r0 = Alpha pass flag
    - [ be32, 0x00a8001c, 0x2f800001 ] # cmpwi r0 vs 1
    - [ be32, 0x00a80020, 0x419e0108 ] # beq to Default store (a80128)
  # Check key addrs
    - [ be32, 0x00a80024, 0x80080014 ] # lwz r0 = key addr
    - [ be32, 0x00a80028, 0x7f802800 ] # cmpw r0 vs r5(0x150db24)
    - [ be32, 0x00a8002c, 0x38803f00 ] # li r4 = 3f00 Final Result
    - [ be32, 0x00a80030, 0x419e00f0 ] # Go to store result (a80120)
    - [ be32, 0x00a80034, 0x38a50030 ] # addi r5 = 0x150db54
    - [ be32, 0x00a80038, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a8003c, 0x419e00e4 ] # Go to store result (a80120)
    - [ be32, 0x00a80040, 0x38a5ffe4 ] # subi r5 = 0x150db38
    - [ be32, 0x00a80044, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a80048, 0x419e0024 ] # Go to 0x150db38 case (a8006c)
    - [ be32, 0x00a8004c, 0x38a5fff8 ] # subi r5 = 0x150db30
    - [ be32, 0x00a80050, 0x7f802800 ] # cmpw r0 vs r5
    - [ be32, 0x00a80054, 0x409e00d4 ] # Go to Default store (a80128)
  # 0x150db30 case
    - [ be32, 0x00a80058, 0x3880203b ] # li r4 = 0x203b(case a3)
    - [ be32, 0x00a8005c, 0x480000e9 ] # Task id func Call
    - [ be32, 0x00a80060, 0x419e00c8 ] # Go to Default store (a80128)
    - [ be32, 0x00a80064, 0x38803f00 ] # li r4 = 3f00
    - [ be32, 0x00a80068, 0x480000b8 ] # Go to Store result (a80120)
  # 0x150db38 Special cases
    - [ be32, 0x00a8006c, 0x3880203b ] # li r4 = 0x203b(case a3)
    - [ be32, 0x00a80070, 0x480000d5 ] # Task id func Call
    - [ be32, 0x00a80074, 0x419e000c ] # Go to next check
    - [ be32, 0x00a80078, 0x38803f00 ] # li r4 = 0x3f00 Final result
    - [ be32, 0x00a8007c, 0x480000a4 ] # Go to Store result (a80120)
    - [ be32, 0x00a80080, 0x38802036 ] # li r4 0x2036(case 92)
    - [ be32, 0x00a80084, 0x480000c1 ] # Task id func Call
    - [ be32, 0x00a80088, 0x419e000c ] # Go to next check
    - [ be32, 0x00a8008c, 0x38804040 ] # li r4 = 0x4040 Final result
    - [ be32, 0x00a80090, 0x48000090 ] # Go to Store result (a80120)
    - [ be32, 0x00a80094, 0x38802038 ] # li r4 = 0x2038 (cases 2b/fb)
    - [ be32, 0x00a80098, 0x480000ad ] # Task id func Call
    - [ be32, 0x00a8009c, 0x419e000c ] # Skip to usual cases
    - [ be32, 0x00a800a0, 0x38003f80 ] # li r0 = 0x3f80 Final Result
    - [ be32, 0x00a800a4, 0x4800007c ] # Go to Store result (a80120)
    - [ be32, 0x00a800a8, 0x3880202f ] # r4 = 0x202f(main cases)
    - [ be32, 0x00a800ac, 0x48000099 ] # Task id func Call
    - [ be32, 0x00a800b0, 0x419e0014 ] # to Joel cases
    - [ be32, 0x00a800b4, 0x3c60013d ] # lis r3 = 0x13d0000
    - [ be32, 0x00a800b8, 0x886371b4 ] # lbz r3 = Inside/outside byte (13d71b4) (r3)
    - [ be32, 0x00a800bc, 0x38a9203c ] # addi r5 = r9+0x203c(0x157203c Ellie cases)
    - [ be32, 0x00a800c0, 0x48000010 ] #
    - [ be32, 0x00a800c4, 0x3c600151 ] # lis r3 = 0x1510000
    - [ be32, 0x00a800c8, 0x8063e600 ] # lbz r3 = Inside/outside byte (150e600) (r3)
    - [ be32, 0x00a800cc, 0x38a92044 ] # addi r5 = r9+0x2044(0x1572044 Joel cases)
  # Main cases
    - [ be32, 0x00a800d0, 0xa4850004 ] # lhzu r4 from r5
    - [ be32, 0x00a800d4, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a800d8, 0x409efff8 ] # Go back
    - [ be32, 0x00a800dc, 0xa0892050 ] # lhz r4 = Main byte(0x1502050)
    - [ be32, 0x00a800e0, 0x7f832000 ] # cmpw r3 vs r4
    - [ be32, 0x00a800e4, 0xa0850002 ] # lhz r4 = eq-Current/neq-Target result
    - [ be32, 0x00a800e8, 0x419e0028 ] # beq to Store current result
    - [ be32, 0x00a800ec, 0xa0092052 ] # lhz r0 = Current result
    - [ be32, 0x00a800f0, 0x7f802000 ] # cmpw r0 vs r4
    - [ be32, 0x00a800f4, 0x419e0024 ] # beq to Store main byte
  # Switcher (spends 30 frames)
    - [ be32, 0x00a800f8, 0x2f843f80 ] # cmpwi r4 vs 0x3f80
    - [ be32, 0x00a800fc, 0x7c040378 ] # mr r4 = r0
    - [ be32, 0x00a80100, 0x419e000c ] # beq
    - [ be32, 0x00a80104, 0x38840006 ] # addi r4 = r4 + 6
    - [ be32, 0x00a80108, 0x48000008 ] #
    - [ be32, 0x00a8010c, 0x3884fffa ] # subi r4 = r4 - 6
    - [ be32, 0x00a80110, 0xb0892052 ] # sth r4 Store new current result
    - [ be32, 0x00a80114, 0x4800000c ] # b to Store final result
  # Store main byte
    - [ be32, 0x00a80118, 0xb0692050 ] # sth r3 Store main byte  (r9)
  # Store results
    - [ be32, 0x00a8011c, 0xa0892052 ] # sth r4 = Current resullt  (r9)
    - [ be32, 0x00a80120, 0xb088000c ] # sth r4 Store final result (r8)
    - [ be32, 0x00a80124, 0x48000008 ] # Go to return
    - [ be32, 0x00a80128, 0xd3e8000c ] # Default store
  # Returning
    - [ be32, 0x00a8012c, 0x80092056 ] # lwz Load r0 as LR
    - [ be32, 0x00a80130, 0x7c0803a6 ] # mtlr LR = r0
    - [ be32, 0x00a80134, 0x80692060 ] # Restore r3
    - [ be32, 0x00a80138, 0x80a92064 ] # Restore r5
    - [ be32, 0x00a8013c, 0x38920001 ] # Restore r4
    - [ be32, 0x00a80140, 0x4e800020 ] # Return

  tlou111_speed: &tlou111_speed
    - [ be16, 0x00aaa1e8, 0x9383 ]     # Speedboost                               (mem address: 0x1571d03)

  tlou111_devplus: &tlou111_devplus
    - [ be32, 0x012850e8, 0x00e8c3e7 ] # str ptr
    - [ be32, 0x0128515c, 0x00e8c57f ] # str ptr
    - [ be16, 0x00e8c318, 0x202b ] # _+
    - [ byte, 0x00e8c3e7, 42 ] # * in int
    - [ byte, 0x00e8c57f, 42 ] # * in int
  # useless memory option replace with rendering
  # point addr from [] to [], this offsets 002dcc40 store 00 and onwards.
  # i.e [] now becomes [] and so on
    - [ be32, 0x0129732c, 0x015715f0 ] # pointer
    - [ be32, 0x002dcc40, 0x38bc00be ] # disable vis
    - [ be32, 0x012973fc, 0x00ee0490 ]
    - [ be16, 0x00ee0498, 0x5669 ]     # capitalise visibility for
    - [ be32, 0x002dcc74, 0x38bc06d9 ] # wireframe
    - [ be32, 0x01297400, 0x00ee01d8 ]
    - [ be32, 0x002dcca8, 0x38bc06da ] # see through
    - [ be32, 0x01297404, 0x00ee01f0 ]
    - [ be32, 0x002dccdc, 0x38bc06db ] # point mode
    - [ be32, 0x01297408, 0x00ee0210 ]
    - [ be32, 0x002dcd10, 0x38bc04f4 ] # post on spu
    - [ be32, 0x0129740c, 0x00f05a48 ]
    - [ be32, 0x002dcd44, 0x38bc04de ] # motion blur
    - [ be32, 0x01297410, 0x00f05618 ]
    - [ be32, 0x002dcd78, 0x38bc04e1 ] # dof
    - [ be32, 0x01297414, 0x00f05410 ]
    - [ be32, 0x012974e4, 0x0135bfe8 ] # ptr
    - [ be64, 0x00ea8ba0, 0x456e61626c652050 ] # rename string
    - [ be32, 0x00ea8ba8, 0x61757365 ]
    - [ byte, 0x00ea8bac, 0x00 ]       # term str
    - [ be32, 0x01297418, 0x00e8d580 ]
    - [ byte, 0x00eeeef8, 0x00 ]
    - [ byte, 0x00eeef10, 0x00 ]
    - [ byte, 0x00eeef28, 0x00 ]
    - [ byte, 0x00eeef50, 0x00 ]
    - [ be32, 0x012bf4a4, 0x00e8d520 ]
    - [ be32, 0x012bf4a8, 0x00e8d550 ]
  # str, perhaps use utf8 here?
    - [ be64, 0x00e8d520, 0x437265646974733a ]
    - [ be64, 0x00e8d550, 0x4d61646520627920 ]
    - [ be64, 0x00e8d558, 0x696c6c7573696f6e ]
    - [ be64, 0x00e8d560, 0x2c20467265616b6f ]
    - [ be64, 0x00e8d568, 0x20616e6420536d61 ]
    - [ be64, 0x00e8d570, 0x7368657232343800 ]
  # vram stats
    - [ be64, 0x00e8d580, 0x53686f7720437265 ]
    - [ be32, 0x00e8d588, 0x64697473 ]
  # console exclusive code, we don't need this due to post on spu off
    - [ be32, 0x0129741c, 0x0157186e ] # ptr
  #  - [ be32, 0x00aa9444, 0x38600001 ] # remove branch and set r3 to 1
  #  - [ be16, 0x00aa9464, 0x9869 ]     # load from r3

  tlou111_cparts: &tlou111_cparts
    - [ utf8, 0x00e8d600, "Infinite Everything (Ammo, Items, Skills, Parts)" ]
    #- [ be64, 0x00e8d600, 0x496e66696e697465 ] # str Infinite Everything (Ammo, Items, Skills, Parts)
    #- [ be64, 0x00e8d608, 0x2045766572797468 ]
    #- [ be64, 0x00e8d610, 0x696e672028416d6d ]
    #- [ be64, 0x00e8d618, 0x6f2c204974656d73 ]
    #- [ be64, 0x00e8d620, 0x2c20536b696c6c73 ]
    #- [ be64, 0x00e8d628, 0x2c20506172747329 ]
    - [ be32, 0x01286780, 0x00e8d600 ] # point addr to e8e490
    - [ be32, 0x01286784, 0x014f3412 ] # point addr to 014f3412
# add
    - [ be32, 0x0003495c, 0x48e58c35 ] # bl 00e8d590
    - [ be32, 0x00e8d590, 0x3fa0014f ] # r29 14f0000
    - [ be32, 0x00e8d594, 0x881d3412 ] # lbz r0, 0x3412, (r29)
    - [ be32, 0x00e8d598, 0x2f800000 ] # cmp r0, 0x0
    - [ be32, 0x00e8d59c, 0x409e0008 ] # bne 0xe8d5a4
    - [ be32, 0x00e8d5a0, 0x7f7fd22e ] # og lhzx
    - [ be32, 0x00e8d5a4, 0x4e800020 ] # ret
    - [ be32, 0x00034968, 0x2f9d096f ] # r29 to 512
    - [ be32, 0x00034970, 0x3ba0096f ] # li r29 512
# sub
    - [ be32, 0x000336c0, 0x7e2802a6 ] # mflr r17,LR
    - [ be32, 0x000336c4, 0x48e59f01 ] # call 3
    - [ be32, 0x000336c8, 0x7e2803a6 ] # mtlr LR,r17
    - [ be32, 0x000336cc, 0x3a200000 ] # r17 = 0
    - [ be32, 0x00e8d5c4, 0x7c0b4a2e ] # og lhzx
    - [ be32, 0x00e8d5c8, 0x5408043e ] # og rlwinm
    - [ be32, 0x00e8d5cc, 0x3e00014f ] # r16 = 14f0000
    - [ be32, 0x00e8d5d0, 0x89f03412 ] # lbz r15,0x3412,r16
    - [ be32, 0x00e8d5d4, 0x2f8f0000 ] # r15 vs 0
    - [ be32, 0x00e8d5d8, 0x409e0008 ] # bne
    - [ be32, 0x00e8d5dc, 0x7c050050 ] # og sub
    - [ be32, 0x00e8d5e0, 0x7f882800 ] # og cmpw
    - [ be32, 0x00e8d5e4, 0x39e00000 ] # r15 = 0
    - [ be32, 0x00e8d5e8, 0x3a000000 ] # r16 = 0
    - [ be32, 0x00e8d5ec, 0x4e800020 ] # ret

  tlou111_nailbombsoftlockfix: &tlou111_nailbombsoftlockfix
    - [ be32, 0x0069f7ac, 0x4b9c012d ] # bl SUB_0005f8d8
    - [ be32, 0x0005f8d8, 0x3c800142 ] # lis r4,0x142
    - [ be32, 0x0005f8dc, 0xa0849ef4 ] # lhz r4,-0x610c(r4)
    - [ be32, 0x0005f8e0, 0x70847fff ] # andi r4,r4,0x7fff
    - [ be32, 0x0005f8e4, 0x2f8440bc ] # cmpwi cr7,r4,0x40bc
    - [ be32, 0x0005f8e8, 0x419e0028 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8ec, 0x2f842466 ] # cmpwi cr7,r4,0x2466
    - [ be32, 0x0005f8f0, 0x419e0020 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8f4, 0x2f841ab6 ] # cmpwi cr7,r4,0x1ab6
    - [ be32, 0x0005f8f8, 0x419e0018 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f8fc, 0x2f841181 ] # cmpwi cr7,r4,0x1181
    - [ be32, 0x0005f900, 0x419e0010 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f904, 0x2f844ad3 ] # cmpwi cr7,r4,0x4ad3
    - [ be32, 0x0005f908, 0x419e0008 ] # beq cr7,LAB_0005f910
    - [ be32, 0x0005f90c, 0x48000008 ] # b   LAB_0005f914
    - [ be32, 0x0005f910, 0x38000001 ] # li  r0,0x1
    - [ be32, 0x0005f914, 0x389b0070 ] # addiparam_2,r27,0x70
    - [ be32, 0x0005f918, 0x4e800020 ] # blr

  tlou111_devmenu: &tlou111_devmenu
    - [ be32, 0x0003a69c, 0x39e00001 ]
    - [ be16, 0x009da99a, 0x2db6 ]
    - [ be16, 0x009da9a2, 0x2db6 ]
    - [ be32, 0x00a1a200, 0x60000000 ] # Remove "!" model render
    - [ be32, 0x0004113c, 0x48000028 ] # No double line in Gameplay Menu
    # str lookup
    - [ utf8, 0x011b4145, "shiv                           " ]
    - [ utf8, 0x011b4165, "pistol-uber-t1                 " ]
    - [ utf8, 0x011b4185, "baseball-bat                   " ]
    - [ utf8, 0x011b41a5, "hatchet                        " ]
    - [ utf8, 0x011b41c5, "NO_ART_GROUP                   " ]
    - [ utf8, 0x011b41e5, "nail-bomb                      " ]
    - [ utf8, 0x011b4205, "two-by-four                    " ]
    - [ utf8, 0x011b4225, "nail-bomb                      " ]
    - [ utf8, 0x011b4245, "turret-sniper                  " ]
    - [ utf8, 0x011b4265, "rifle-lever-action             " ]
    - [ utf8, 0x011b4285, "pistol-uber-t1                 " ]
    - [ utf8, 0x011b42a5, "shiv                           " ]
    - [ utf8, 0x011b42c5, "radio                          " ]
    - [ utf8, 0x011b42e5, "molotov                        " ]
    - [ utf8, 0x011b4305, "bandage-apply                  " ]
    - [ utf8, 0x011b4325, "mp-parcel                      " ]
    - [ utf8, 0x011b4345, "gren-launcher-improvised       " ]
    - [ utf8, 0x011b4365, "shotgun-dbl-barrel             " ]
    - [ utf8, 0x011b4385, "machete-blade                  " ]
    - [ utf8, 0x011b43a5, "bow-dark                       " ]
    - [ utf8, 0x011b43c5, "rifle-variable                 " ]
    - [ utf8, 0x011b43e5, "mini-14-rifle                  " ]
    - [ utf8, 0x011b4405, "two-by-four                    " ]
    - [ utf8, 0x011b4425, "pistol-shotgun                 " ]
    - [ utf8, 0x011b4445, "rifle-improvised-fullauto      " ]
    - [ utf8, 0x011b4465, "super-soaker                   " ]
    - [ utf8, 0x011b4485, "NO_ART_GROUP                   " ]
    - [ utf8, 0x011b44a5, "beer-bottle                    " ]
    - [ utf8, 0x011b44c5, "crossbow-dlc                   " ]
    - [ utf8, 0x011b44e5, "lead-pipe                      " ]
    - [ utf8, 0x011b4505, "lead-pipe                      " ]
    - [ utf8, 0x011b4525, "flamethrower                   " ]
    - [ utf8, 0x011b4545, "desert-eagle-t1                " ]
    - [ utf8, 0x011b4565, "flashlight                     " ]
    - [ utf8, 0x011b4585, "rifle-sniper                   " ]
    - [ utf8, 0x011b45a5, "m4-rifle-t1                    " ]
    - [ utf8, 0x011b45c5, "smoke-bomb                     " ]
    - [ utf8, 0x011b45e5, "throw-brick                    " ]
    - [ utf8, 0x011b4605, "shotgun-pump-stock             " ]
    - [ utf8, 0x011b4625, "silenced-galil-rifle           " ]
    - [ utf8, 0x011b4645, "NO_ART_GROUP                   " ]
    - [ utf8, 0x011b4665, "bloater-pustule                " ]
    - [ utf8, 0x011b4685, "taurus-66b4-revolver           " ]
    - [ utf8, 0x011b46a5, "nail-bomb                      " ]
    - [ utf8, 0x011b46c5, "rifle-improvised-assault       " ]
    - [ utf8, 0x011b46e5, "throwing-knife                 " ]
    - [ utf8, 0x011b4705, "rifle-bolt                     " ]
    - [ utf8, 0x011b4725, "beretta-jaguar-pistol          " ]
    - [ utf8, 0x011b4745, "bow                            " ]
    - [ utf8, 0x011b4765, "molotov                        " ]
    - [ utf8, 0x011b4785, "bill-knife                     " ]
    - [ utf8, 0x011b47a5, "baseball-bat                   " ]
    - [ utf8, 0x011b47c5, "mini-14-rifle                  " ]
    - [ utf8, 0x011b47e5, "pistol-glock-burst             " ]
    - [ utf8, 0x011b4805, "pistol-9mm                     " ]
    - [ utf8, 0x011b4825, "shotgun-tactical               " ]
    - [ utf8, 0x011b4845, "mal-gas-can                    " ]
    - [ utf8, 0x011b4865, "machete-blade                  " ]
    - [ utf8, 0x011b4885, "none                           " ]
    - [ utf8, 0x011b48a5, "rifle-improvised-assault       " ]
    - [ utf8, 0x011b48c5, "binoculars                     " ]
    - [ utf8, 0x011b48e5, "switchblade                    " ]
    - [ utf8, 0x011b4905, "rifle-improvised-fullauto      " ]
    # write str to menu init
    - [ be32, 0x004f1690, 0x39ef0020 ] #     addi       r15,r15,0x20
    - [ be32, 0x004f1694, 0x489c5b99 ] #     bl         SUB_00eb722c
    - [ be32, 0x00eb722c, 0x3c80011b ] #     lis        r4,0x11b
    - [ be32, 0x00eb7230, 0x60844125 ] #     ori        r4,r4,0x4125
    - [ be32, 0x00eb7234, 0x7c847a14 ] #     add        r4,r4,r15
    - [ be32, 0x00eb7238, 0x4e800020 ] #     blr
    # wrtie ptr for pak arg
    - [ be32, 0x004f2a0c, 0x489b08bc ] #     b          LAB_00ea32c8
    - [ be32, 0x00ea32c8, 0x90be82e4 ] #     stw        r5,-0x7d1c(r30) store pointer to null
    - [ be32, 0x00ea32cc, 0x88050000 ] #     lbz        r0,0x0(r5) og
    - [ be32, 0x00ea32d0, 0x4b64f740 ] #     b          LAB_004f2a10
    - [ be32, 0x00574e3c, 0x38600064 ]
    - [ be32, 0x00574e40, 0x907c0000 ]
    - [ be32, 0x00574e44, 0x807c0000 ]
    - [ be32, 0x00574e48, 0x60000000 ]
      # control page
    - [ be32, 0x0034d24c, 0x48b8f27c ] # get page ptr (start)
    - [ be32, 0x00edc4c8, 0x2f890000 ] # check if page ptr is null
    - [ be32, 0x00edc4cc, 0x419e0018 ] # do original code
    - [ be32, 0x00edc4d0, 0x7fc4f378 ] # save working register
    - [ be32, 0x00edc4d4, 0x3bdef51c ] # partially resolve page ptr
    - [ be32, 0x00edc4d8, 0x80a90000 ] # get ptr
    - [ be32, 0x00edc4dc, 0x90be8030 ] # store ptr
    - [ be32, 0x00edc4e0, 0x7c9e2378 ] # restore working register
    - [ be32, 0x00edc4e4, 0x4b470d6c ] # return
    # script print
    # Gameplay Menu bool
    - [ utf8, 0x00e902d8, "SS Printout to Msgcon\x00" ]
    - [ be32, 0x01286784, 0x0150cfe0 ]
    - [ be32, 0x00a5228c, 0x39200001 ] # force mode 1
    - [ be32, 0x00a23ed0, 0x4802e330 ]
    - [ utf8, 0x00efc158, "%x" ]       # branch in hex
    - [ utf8, 0x00efc173, "%x" ]       # branch in hex
    - [ utf8, 0x00efc177, "%x" ]       # branch in hex
    - [ utf8, 0x00efc197, "%x" ]       # branch in hex
    - [ utf8, 0x00efc19b, "%x" ]       # branch in hex
    - [ utf8, 0x00efc7fe, "%x" ]       # imm in hex
    # debug renderer
    - [ be32, 0x0061cf10, 0x7fa3eb78 ]
    - [ be32, 0x0061cf14, 0x4bd47aad ]
    - [ be32, 0x0061cf18, 0x7fa3eb78 ]
    - [ be32, 0x0061cf1c, 0x484bb6b9 ]
    - [ be32, 0x0061cf20, 0x7fa3eb78 ]
    - [ be32, 0x0061cf24, 0x484756c9 ]
    - [ be32, 0x00036a04, 0x60000000 ]
    # msgcon buff
    - [ be32, 0x012c6650, 0x013f1340 ]
    - [ be32, 0x00a92720, 0x60000000 ]
    # msgout to msgcon start
    - [ be32, 0x00a92724, 0x3cc00135 ]
    - [ be32, 0x00a92728, 0x60c67130 ]
    - [ be32, 0x00a9272c, 0x3ce041b0 ]
    - [ be32, 0x00a92730, 0x90e60000 ]
    - [ be32, 0x00a92734, 0xc0060000 ]
    - [ be32, 0x00a92738, 0xc0460000 ]
    - [ be32, 0x00a9273c, 0x3ce04204 ]
    - [ be32, 0x00a92740, 0x90e60000 ]
    - [ be32, 0x00a92744, 0xc0260000 ]
    - [ be32, 0x00a92748, 0x38c0ffff ]
    - [ be32, 0x00a9274c, 0x80fe8098 ]
    - [ be32, 0x00a92750, 0x48047821 ]
    - [ be32, 0x00a92754, 0x807e8098 ]
    - [ be32, 0x00a92758, 0x38800000 ]
    - [ be32, 0x00a9275c, 0x38a01000 ]
    - [ be32, 0x00a92760, 0x483e8fe1 ]
    - [ be32, 0x00a92764, 0x3cc00135 ]
    - [ be32, 0x00a92768, 0x60c67130 ]
    - [ be32, 0x00a9276c, 0x3ce04248 ]
    - [ be32, 0x00a92770, 0x90e60000 ]
    - [ be32, 0x00a92774, 0xc0260000 ]
    - [ be32, 0x00a92778, 0x3ce04422 ]
    - [ be32, 0x00a9277c, 0x60e70080 ]
    - [ be32, 0x00a92780, 0x90e60000 ]
    - [ be32, 0x00a92784, 0xc0460000 ]
    - [ be32, 0x00a92788, 0x3ce00135 ]
    - [ be32, 0x00a9278c, 0x60e77148 ]
    - [ be32, 0x00a92790, 0x38c0ffff ]
    - [ be32, 0x00a92794, 0x480477dd ]
    - [ be32, 0x00a92798, 0x48000064 ]
    # msgcon buffer in single area
    - [ be32, 0x00a519f8, 0x4848a738 ]
    - [ be32, 0x00edc130, 0x3d20013f ]
    - [ be32, 0x00edc134, 0x61291340 ]
    - [ be32, 0x00edc138, 0x4bb758c4 ]
    # taskmgr
    - [ be32, 0x0083f9c0, 0x807eff84 ]
    - [ be32, 0x012befe8, 0x01357148 ]
    # display-msg
    - [ be32, 0x008529f8, 0x60000000 ]
    - [ be32, 0x00852a04, 0x60000000 ]
    # DC printing
    - [ be32, 0x0081c060, 0x48002cbc ] # printf
    - [ be32, 0x0081c074, 0x48002ca8 ] # print-string
    - [ be32, 0x0078c5a4, 0x38600001 ]
    - [ be32, 0x0078c5a8, 0x482c5c05 ]
    - [ be32, 0x0078c5ac, 0x7fa3eb78 ]
    - [ be32, 0x0078c5b0, 0x482c5c51 ]
    - [ be32, 0x0078c5b4, 0x48000018 ]

  tlou_gpulighting_notes: &tlou_gpulighting_notes
    "Uses GPU (RSX) path for lighting effects instead of SPU.\nFixes rendering of lightning effects that are being rendered broken via SPU path and greatly improves performance over it.\nThis path is incomplete and results in some missing effects such as Volumetric lighting.\nVersion 2.0 - Fixes Cabin Resort level crashes/artifacts without removing the fog (1.11 only)"

  tlou_speed_notes: &tlou_speed_notes
    "Improves performance in certain areas. May cause issues."

  tlou_debugmenu_notes: &tlou_debugmenu_notes
    "L3 + Start = Dev Menu\nL3 + Select = Quick Menu\nL3 + Triangle = FPS Text\nL3 + R3 = Debug Fly"

  tlou_infiniteflashlight_notes: &tlou_infiniteflashlight_notes
    "This patch is useful for people who play with something other than DualShock3/4.\nNormaly flashlight battery drains after ~3600 frames, patch disables battery drain, Infinite flashlight battery no controller shake."

  tlou_nocamshake_notes: &tlou_nocamshake_notes
    "Disables camera shake during gameplay.\nIn-Game cinematics remain unaffected."

  tlou_localmp_notes: &tlou_localmp_notes
    "Matchmaking does not work."

  tlou_dbgtasks_notes: &tlou_dbgtasks_notes
    "Only enable this if you know what you are doing!"

  tlou_headcrash_notes: &tlou_headcrash_notes
    "Fixes a bug where throwing an object at an Infected Severed Head causes a game crash."

  tlou_ar_notes: &tlou_ar_notes
    "Requires \"Stretch To Display Area\" checked in the GPU settings. UI elements will be stretched."

  tlou_fps_notes: &tlou_fps_notes
    "Unlocks FPS without any special settings.\nGame may crash above 500 FPS in loading screens."

  tlou_mlaa_notes: &tlou_mlaa_notes
    "Allows for the use of Resolution Scaling and improves performance.\nVersion 2.0 - Fixes crashes introduced in the original patch.\nVersion 3.0 - Fixes the Green Rain in more areas.\nVersion 4.0 - Fixes high levels of Bloom in some areas.\n\nKnown issues: Listen mode does not work."

  tloulb100_title: &tloulb100_title
    "The Last of Us Left Behind":
      NPUA81175: [ 01.00 ]
      NPEA00521: [ 01.00 ]

  tlou100_title: &tlou100_title
    "The Last of Us":
      BCES01584: [ 01.00 ]
      BCES01585: [ 01.00 ]
      BCUS98174: [ 01.00 ]
      BCJS37010: [ 01.00 ]
      BCAS20270: [ 01.00 ]
      NPEA00435: [ 01.00 ]
      NPUA80960: [ 01.00 ]

  tlou111_title: &tlou111_title
    "The Last of Us":
      BCES01584: [ 01.11 ]
      BCES01585: [ 01.11 ]
      BCUS98174: [ 01.11 ]
      BCJS37010: [ 01.11 ]
      BCAS20270: [ 01.11 ]
      NPEA00435: [ 01.11 ]
      NPUA80960: [ 01.11 ]
      NPHA80243: [ 01.11 ]

PPU-9df60dc1aa5005a0c80e9066e4951dc0471553e6:
  "Disable in-built MLAA":
    Games: *tlou100_title
    Author: "Whatcookie"
    Notes: *tlou_mlaa_notes
    Patch Version: 4.0
    Patch:
      - [ load, *tlou100_mlaa ]
  "Disable Bloom":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_post ]
  "Disable Mesh trimming":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_mesh ]
  "Disable SSAO":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_ssao ]
  "Disable Motion Blur":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_mb ]
  "Disable Depth of Field":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_dof ]
  "Depth buffer viewport":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_dbv ]
  "Depth border fix":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_dbf ]
  "Enable GPU Lighting":
    Games: *tlou100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes: *tlou_gpulighting_notes
    Patch Version: 2.0
    Patch:
      - [ load, *tlou100_db ]
  "Speedboost":
    Games: *tlou100_title
    Author: "ZEROx, illusion"
    Notes: *tlou_speed_notes
    Patch Version: 1.0
    Patch:
      - [ load, *tlou100_speed ]
  "Debug Menu":
    Games: *tlou100_title
    Author: "dron_3, HdHereidme, illusion"
    Notes: *tlou_debugmenu_notes
    Patch Version: 1.01
    Patch:
      - [ load, *tlou100_devmenu ]
  "Bug Fix: Infected Severed Head Crash":
    Games: *tlou100_title
    Author: "illusion, ZEROx"
    Notes: *tlou_headcrash_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x006b06a8, 0x483a4b95 ] # Branch
      - [ be32, 0x00a5523c, 0x3d400001 ] # r10 = 0x10000
      - [ be32, 0x00a55240, 0x7f9d5000 ] # r29 vs r10
      - [ be32, 0x00a55244, 0x409d0008 ] # Skip if r29<=r10 // If r29 less or equal to r10 then do nothing
      - [ be32, 0x00a55248, 0x813d0040 ] # lwz r9,0x40(r29) // load as normal
      - [ be32, 0x00a5524c, 0x4e800020 ] # Return
  "21:9 Aspect Ratio":
    Games: *tlou100_title
    Author: "illusion"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x000325b8, 0x60000000 ] # nop write for ar float
      - [ bef32, 0x014aebd0, 0.42 ]      # ar float
      - [ bef32, 0x0128f2f4, 0.75 ]
  "16:10 Aspect Ratio":
    Games: *tlou100_title
    Author: "mavethee"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x000325b8, 0x60000000 ]
      - [ bef32, 0x014aebd0, 0.55 ]
      - [ bef32, 0x0128f2f4, 0.7 ]
  "Unlock FPS":
    Games: *tlou100_title
    Author: "illusion"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00036ab8, 0x38a00000 ]
  "Infinite flashlight battery":
    Games: *tlou100_title
    Author: "bungholio, ZEROx"
    Notes: *tlou_infiniteflashlight_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0068eb38, 0x60000000 ]
  "Disable Camera Shake":
    Games: *tlou100_title
    Author: "illusion"
    Notes: *tlou_nocamshake_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00966784, 0x997d ]
  "Enable Local Multiplayer":
    Games: *tlou100_title
    Author: "icemesh, illusion"
    Notes: *tlou_localmp_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00353e7c, 0x3b800001 ] # (icemesh)
      - [ be32, 0x00a0fbc8, 0x38600000 ] # (illusion) # For RPCS3 only, bypass connecting screen
      - [ be32, 0x01268210, 0x0132f628 ] # (illusion)
      - [ be32, 0x00356830, 0x38600000 ] # (illusion)
  "Skip Intro":
    Games: *tlou100_title
    Author: "illusion"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00038ea4, 0x38600001 ]
  "DEBUG: Replace Task With Test Tasks":
    Games: *tlou100_title
    Author: "illusion, icemesh" # SID Utils
    Notes: *tlou_dbgtasks_notes
    Patch Version: 1.0
    Patch:
      # test-tasks begin!!
      - [ be32, 0x009f9064, 0x484b023c ]
      - [ be32, 0x00ea92a0, 0x81490000 ]
      - [ be32, 0x00ea92a4, 0x3d006772 ]
      - [ be32, 0x00ea92a8, 0x61083261 ]
      - [ be32, 0x00ea92ac, 0x7f885000 ]
      - [ be32, 0x00ea92b0, 0x409e0014 ]
      - [ be32, 0x00ea92b4, 0x3d002203 ]
      - [ be32, 0x00ea92b8, 0x6108c98c ]
      - [ be32, 0x00ea92bc, 0x91090000 ]
      - [ be32, 0x00ea92c0, 0x7d284b78 ]
      - [ be32, 0x00ea92c4, 0x81490000 ]
      - [ be32, 0x00ea92c8, 0x4bb4fda0 ]
      # *test-task-graph*
      - [ be16, 0x008203a2, 0xf0f3 ]
      - [ be16, 0x008203aa, 0xd6c8 ]
      - [ be16, 0x0081d2fa, 0xf0f3 ]
      - [ be16, 0x0081d302, 0xd6c8 ]
      # crash fix
      - [ be32, 0x000390b0, 0x48000068 ]
      # no artGroup assert
      - [ be32, 0x0048731c, 0x60000000 ]

PPU-120fb71f7352d62521c639b0e99f960018c10a56:
  "Disable in-built MLAA":
    Games: *tlou111_title
    Author: "Whatcookie, illusion, ZEROx"
    Notes: *tlou_mlaa_notes
    Patch Version: 4.0
    Patch:
      - [ load, *tlou111_mlaa ]
  "Disable Bloom":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_post ]
  "Disable Mesh trimming":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_mesh ]
  "Disable SSAO":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.1
    Patch:
      - [ load, *tlou111_ssao ]
  "Disable Motion Blur":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_mb ]
  "Disable Depth of Field":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_dof ]
  "Depth border fix":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_dbf ]
  "Enable GPU Lighting":
    Games: *tlou111_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn"
    Notes: *tlou_gpulighting_notes
    Patch Version: 2.0
    Patch:
      - [ load, *tlou111_db ]
  "WCB/WDB Performance fix":
    Games: *tlou111_title
    Author: "ZEROx"
    Notes: "Disables Depth Buffer Reload, reduces performance penalty using WCB/WDB."
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa030, 0x9b83 ] # Speedup 1571ad8 (WCB)
      - [ be32, 0x00a974f4, 0x4bfd4ef1 ] # Call
      - [ be32, 0x00a6c3e4, 0x3c600142 ] # r3 = 0x1420000
      - [ be32, 0x00a6c3e8, 0xa0639ef4 ] # lhz r3,0x9ef4(r3)
      - [ be32, 0x00a6c3ec, 0x2f83080c ] # r3 vs 0x80c
      - [ be32, 0x00a6c3f0, 0x419e000c ] # beq
      - [ be32, 0x00a6c3f4, 0xc1a9038c ] # f13 original load
      - [ be32, 0x00a6c3f8, 0x48000008 ]
      - [ be32, 0x00a6c3fc, 0xc1be8100 ] # f13 == f0
      - [ be32, 0x00a6c400, 0x4e800020 ] # ret
  "Speedboost":
    Games: *tlou111_title
    Author: "ZEROx, illusion"
    Notes: *tlou_speed_notes
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_speed ]
  "Debug Menu":
    Games: *tlou111_title
    Author: "illusion, ZEROx, dron_3, HdHereidme"
    Notes: *tlou_debugmenu_notes
    Patch Version: 1.2
    Patch:
      - [ load, *tlou111_devmenu ]
  "Infinite flashlight battery":
    Games: *tlou111_title
    Author: "bungholio, ZEROx"
    Notes: *tlou_infiniteflashlight_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x006acbc8, 0x60000000 ]
  "Bug Fix: Infected Severed Head Crash":
    Games: *tlou111_title
    Author: "illusion, ZEROx"
    Notes: *tlou_headcrash_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x006d9368, 0x483aa7ed ] # Call
      - [ be32, 0x00a83b54, 0x3d400001 ] # r10 = 0x10000
      - [ be32, 0x00a83b58, 0x7f9d5000 ] # r29 vs r10
      - [ be32, 0x00a83b5c, 0x409d0008 ] # Skip if r29<=r10 // If r29 less or equal to r10 then do nothing
      - [ be32, 0x00a83b60, 0x813d0040 ] # lwz r9,0x40(r29) // load as normal
      - [ be32, 0x00a83b64, 0x4e800020 ] # Return
  "21:9 Aspect Ratio":
    Games: *tlou111_title
    Author: "illusion"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0003556c, 0x60000000 ] # nop write for ar float
      - [ bef32, 0x01558a50, 0.42 ]      # ar float
      - [ bef32, 0x012c1964, 0.75 ]
  "16:10 Aspect Ratio":
    Games: *tlou111_title
    Author: "mavethee"
    Notes: *tlou_ar_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0003556c, 0x60000000 ]
      - [ bef32, 0x01558a50, 0.55 ]
      - [ bef32, 0x012c1964, 0.7 ]
  "Unlock FPS":
    Games: *tlou111_title
    Author: "illusion"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00039d08, 0x38a00000 ]
  "Dev Menu Plus":
    Games: *tlou111_title
    Author: "illusion, Freako, Smasher248"
    Notes: "Replaces some useless options in Memory Tab with rendering features.\nWireframe modes currently do not work on the emulator."
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_devplus ]
  "Disable Pause in Dev Menu":
    Games: *tlou111_title
    Author: "illusion, Freako"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x009d2114, 0x9803 ]
  "NPC Model Scale in Clock Menu":
    Games: *tlou111_title
    Author: "illusion"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x012850f8, 0x0148ae18 ]         # ptr
      - [ be16, 0x0135dcac, 0x3f80 ]             # avoid assertion
      - [ be64, 0x00e8c418, 0x4e5043204d6f6465 ] # string replace
      - [ be32, 0x00e8c420, 0x6c205363 ]
      - [ be16, 0x00e8c424, 0x616c ]
      - [ be64, 0x00e8c426, 0x653a000000000000 ] # 1 byte overlap
  "Disable Camera Shake":
    Games: *tlou111_title
    Author: "illusion"
    Notes: *tlou_nocamshake_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00994234, 0x997d ]
  "Infinite Everything (Parts, Pills, Crafting items)":
    Games: *tlou111_title
    Author: "Medo, Randy97Killa, illusion"
    Notes: "Pick up any amount of parts or items to activate the cheat.\nReplaces 'SS Printout to Msgcon' in Debug Menu Gameplay tab"
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_cparts ]
  "Tool Always Level 5":
    Games: *tlou111_title
    Author: "illusion, ZEROx"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00082960, 0x38000005 ] # tools level load
      - [ be32, 0x00082788, 0x60000000 ] # tools gain pickup, result will be
  "Bug Fix: University Nailbomb Softlock Fix":
    Games: *tlou111_title
    Author: "illusion, ZEROx"
    Notes: "Fixes a softlock at the end of the university chapter."
    Patch Version: 1.0
    Patch:
      - [ load, *tlou111_nailbombsoftlockfix ]
  "Skip Intro":
    Games: *tlou111_title
    Author: "illusion"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x0003dd9c, 0x4800 ]
  "Enable Local Multiplayer":
    Games: *tlou111_title
    Author: "icemesh, illusion"
    Notes: *tlou_localmp_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0036ad6c, 0x3be00001 ] # (icemesh)
      - [ be32, 0x0036baa4, 0x4800002c ] # (illusion)
      - [ be32, 0x0129a01c, 0x01363538 ] # (illusion)
      - [ be32, 0x00a3f320, 0x38600000 ] # (illusion)
      - [ be32, 0x0036dad0, 0x38600000 ] # (illusion)
  "DEBUG: Replace Task With Test Tasks":
    Games: *tlou111_title
    Author: "illusion, icemesh" # SID Utils
    Notes: *tlou_dbgtasks_notes
    Patch Version: 1.0
    Patch:
      # test-tasks begin!!
      - [ be32, 0x00a29fb0, 0x484b2038 ]
      - [ be32, 0x00edbfe8, 0x81490000 ]
      - [ be32, 0x00edbfec, 0x3d006772 ]
      - [ be32, 0x00edbff0, 0x61083261 ]
      - [ be32, 0x00edbff4, 0x7f885000 ]
      - [ be32, 0x00edbff8, 0x409e0014 ]
      - [ be32, 0x00edbffc, 0x3d002203 ]
      - [ be32, 0x00edc000, 0x6108c98c ]
      - [ be32, 0x00edc004, 0x91090000 ]
      - [ be32, 0x00edc008, 0x7d284b78 ]
      - [ be32, 0x00edc00c, 0x81490000 ]
      - [ be32, 0x00edc010, 0x4bb4dfa4 ]
      # *test-task-graph*
      - [ be32, 0x008461a8, 0x3c80f0f3 ]
      - [ be32, 0x008461b0, 0x6084d6c8 ]
      - [ be32, 0x00841e64, 0x3ca0f0f3 ]
      - [ be32, 0x00841e6c, 0x60a5d6c8 ]
      # crash fix
      - [ be32, 0x0003df68, 0x480000a0 ]
      - [ be32, 0x0057cfe8, 0x60000000 ]
  "Infinite Ammo":
    Games: *tlou111_title
    Author: "Medo, Randy97Killa"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x006b1d94, 0x60000000 ]
  "Infinite Health":
    Games: *tlou111_title
    Author: "Medo, Randy97Killa"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x007caf50, 0x486c0d24 ]
      - [ be32, 0x00e8bc74, 0x3a20008c ]
      - [ be32, 0x00e8bc78, 0x923f0030 ]
      - [ be32, 0x00e8bc7c, 0x923f0038 ]
      - [ be32, 0x00e8bc80, 0x923f0044 ]
      - [ be32, 0x00e8bc84, 0x4b93f2d0 ]

PPU-9e5c67eaf69077c591b7c503bed2b48617643134:
  "Debug Menu":
    Games: *tloulb100_title
    Author: "dron_3, HdHereidme, FlexBy"
    Notes: *tlou_debugmenu_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00a92d94, 0x38000001 ]
      - [ be32, 0x00a92d98, 0x980b2db0 ]
  "Unlock FPS":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00039d1c, 0x38a00000 ]
  "Skip Intro":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x0003ddb0, 0x4800 ]
  "Speedboost":
    Games: *tloulb100_title
    Author: "ZEROx, illusion, FlexBy"
    Notes: *tlou_speed_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa93c, 0x9383 ]
  "Disable SSAO":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa6f0, 0x9b83 ]
  "Disable Motion Blur":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x0096b1e8, 0x480000e0 ]
  "Disable Mesh trimming":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00951d2c, 0x9809 ]
  "Disable in-built MLAA":
    Games: *tloulb100_title
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
    Notes: *tlou_mlaa_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa794, 0x9b83 ]
  "Disable Depth of Field":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaa760, 0x9b83 ]
  "Depth border fix":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaaa2c, 0x9b83 ]
  "Disable Bloom":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      #- [ be32, 0x00aa9ba0, 0x38000003 ]
      - [ be32, 0x0096c5a0, 0xc0090990 ]
      - [ be32, 0x0096c5ac, 0xc1890990 ]
      - [ be32, 0x0096c634, 0xc0090990 ]
  "Disable Camera Shake":
    Games: *tloulb100_title
    Author: "illusion, FlexBy"
    Notes: *tlou_nocamshake_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00994988, 0x997d ]
  "Infinite flashlight battery":
    Games: *tloulb100_title
    Author: "bungholio, ZEROx, FlexBy"
    Notes: *tlou_infiniteflashlight_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x006ad230, 0x60000000 ]
  "Enable GPU Lighting":
    Games: *tloulb100_title
    Author: "JohnHolmesII, ZEROx, illusion, Juhn, FlexBy"
    Notes: *tlou_gpulighting_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00aaaa38, 0x90c3 ]
      - [ be16, 0x00aaa9e4, 0x9b63 ]

PPU-e71d82fa70d09b7df9493f0336717dd9a4977216:
  "Disable in-built MLAA":
    Games:
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
    Notes: *tlou_mlaa_notes
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00a7a164, 0x9b83 ]
  "Unlock FPS":
    Games:
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "illusion, FlexBy"
    Notes: *tlou_fps_notes
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00036848, 0x38a00000 ]
  "Debug Menu":
    Games:
      "The Last of Us Demo":
        NPUA70257: [ 01.00 ]
    Author: "dron_3, HdHereidme, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00a46720, 0x38000001 ]
      - [ be32, 0x00a46724, 0x980b2db0 ]

PPU-f293e177971243b66bc3fd62621ce4b246726a4a:
  "Disable in-built MLAA":
    Games:
      "The Last of Us Demo":
        NPHA80246: [ 01.00 ]
    Author: "Whatcookie, illusion, ZEROx, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be16, 0x00a7a164, 0x9b83 ]
  "Unlock FPS":
    Games:
      "The Last of Us Demo":
        NPHA80246: [ 01.00 ]
    Author: "illusion, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00036848, 0x38a00000 ]
  "Debug Menu":
    Games:
      "The Last of Us Demo":
        NPHA80246: [ 01.00 ]
    Author: "dron_3, HdHereidme, FlexBy"
    Notes:
    Patch Version: 1.0
    Patch:
      - [ be32, 0x00a46720, 0x38000001 ]
      - [ be32, 0x00a46724, 0x980b2db0 ]