1. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    Okay, I don't understand why there's no tutorial about this. I am really thanked to @KillzXGaming and @gdkchan for helping me with this issue and of course, for making this possible.

    Not all shaders work, but for most of them, you can get the code in a few steps.

    upload_2019-8-22_1-48-6.png

    What do you need?

    - Ryujinx.ShaderTools: Download link (You can easily compile Ryujinx yourself too: https://github.com/Ryujinx/Ryujinx)
    - Switch Toolbox (method 1): https://github.com/KillzXGaming/Switch-Toolbox
    - HxD or your favourite hex editor (method 2): https://mh-nexus.de/en/hxd/
    - Text Editor like Sublime Text: https://www.sublimetext.com/
    - Decrypted switch games (RomFS format)

    Step 1: Prepare your game

    - Get the desired game (In this case Pokémon Let's Go Pikachu)
    - Decrypt the game with your favourite method.
    I recommend taking a look to these tutorials if you don't know how to do it: https://gbatemp.net/threads/decrypt...backup-loading-ryujinx-yuzu-in-1-click.506954 or https://gbatemp.net/threads/extract-nsp-nca-xci-update-all-in-one-tool-for-layeredfs.511156/

    Step 2: Method 1 - Switch Toolbox

    - Download Switch Toolbox from github and place it anywhere in your computer (you may have to install some packages. For more info, take a look to the github release info).
    - Open Switch Toolbox. Click on File > Open.
    - The files with extension .bnsh are shaders, so look for the .bnsh you wanna see the code and open it.
    It's okay if the shader is called "name.bnsh_fsh" or "name.bnsh_vsh". "fsh" stands for Fragment Shader and "vsh" stands for Vertex Shader.
    -
    Open the visual folder structure by clicking on the "+" until you can see the Vertex Shader or Fragment Shader folder (after Shader Variation).

    upload_2019-8-22_2-0-1.png

    - Right click on the last one > Export Shader1.bin > save it anywhere in your computer. The name doesn't matter but it is recommended to save this file in ShaderTools folder (See step 3). Sometimes it's not shader1 but shader0, if one gives you error, try the other.

    Step 2: Method 2 - HxD and manual file editing

    - Open the .bnsh file with the hex editor (HxD in this case).
    - All the shaders start with the hex values 78 56 34 12. Look for them.

    upload_2019-8-22_2-13-48.png

    - Count 0x30 bytes from that point.The shader code starts from there.

    upload_2019-8-22_2-23-33.png

    - Copy the data from there to the all zeros (can be the end of the file) to other new hex file.
    - Save it as .bin. The name doesn't matter but it is recommended to save this file in ShaderTools folder (See step 3).

    Step 3: See the code

    - Go to the folder where you have the Ryujinx.ShaderTools.
    - Open the cmd window with Windows + R > cmd or Shift + Right Click > Open CMD Prompt here.
    - In the cmd window use the command:

    (For FragmentShader) Ryujinx.ShaderTools f path/to/shader1.bin/relative/to/Ryujinx.ShaderTools folder.
    (For VertexShader) Ryujinx.ShaderTools v path/to/shader1.bin/relative/to/Ryujinx.ShaderTools folder.

    e.g, if the binary is in the Ryujinx Shader Tools folder:

    Ryujinx.ShaderTools f fragmentShader.bin
    Ryujinx.ShaderTools v vertexShader.bin

    - if everything went well, the cmd window will display the code and you can copy it to your favourite text editor.
    -Enjoy

    Is there anything missing?

    Leave a comment to know what I missed so we can help others too ^^

    Credits:

    - @KillzXGaming: Switch Toolbox
    - @gdkchan: Ryujinx and huge help
    - @PRAGMA: Romfs decrypting tutorial
    - @huma_dawii: Other decrypting tutorial
     

    Attached Files:

    Last edited by Manurocker95, Aug 22, 2019
  2. Humanity

    Humanity GBAtemp Regular
    Member

    Joined:
    Aug 9, 2019
    Messages:
    155
    Country:
    Norway
    What is the usefulness of this?

    Is it useful?
     
  3. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    Well, if you wanna know how does it work, it is useful. If, not... nope

    — Posts automatically merged - Please don't double post! —

    For example, I am recreating Pokemon Lets Go in Unity. For me, it is useful.
     
  4. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    +1000 views. I guess I am not the only one that finds this useful
     
    KiiWii likes this.
  5. designgears

    designgears GBAtemp Regular
    Member

    Joined:
    Aug 8, 2016
    Messages:
    289
    Country:
    United States
    How can I edit the shader and put it back in the file for use with layeredfs?
     
  6. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    I think there are not tools to repack bnsh files, but lets summon @KillzXGaming who can clarify this
     
    designgears likes this.
  7. KillzXGaming

    KillzXGaming GBAtemp Advanced Maniac
    Member

    Joined:
    Jan 2, 2016
    Messages:
    1,629
    Country:
    United States
    I don't have bnsh saving finished, but it is quite a simple format i could get that done. I am not sure on compiling back or if Yuzu or Ryujinx can compile these back as a switch shader binary.

    Also i appreciate the tutorial, i didn't know the code offset to 0x30, so i'll fix it to read off that so it can decompile within the tool properly.
     
    Last edited by KillzXGaming, Sep 22, 2019
    Coolsonickirby and Manurocker95 like this.
  8. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    we can check that if you can get the repack working. You did a really good work there.
     
  9. kiddy

    kiddy Newbie
    Newcomer

    Joined:
    Oct 14, 2019
    Messages:
    3
    Country:
    China
    Hey, I want to ask a question. I don't know much about the third step in the tutorial on cracking shaders. Can you elaborate?
     
    Last edited by kiddy, Oct 14, 2019
  10. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    If you got to that step, just open the cmd window (the regular black windows command window) and write the command with the name of the shader you exported and it will show the code
     
  11. kiddy

    kiddy Newbie
    Newcomer

    Joined:
    Oct 14, 2019
    Messages:
    3
    Country:
    China
    Seems to only see a part of the code
     
  12. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    I can extract full shader code. Check you are not deleting extra bytes
     
  13. kiddy

    kiddy Newbie
    Newcomer

    Joined:
    Oct 14, 2019
    Messages:
    3
    Country:
    China
    Thank you, friend.
     
  14. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    Did you manage to extract full shader code?
     
  15. Nick3421421

    Nick3421421 Member
    Newcomer

    Joined:
    Dec 24, 2019
    Messages:
    19
    Country:
    Germany
    hey so i dont know how i can get those .bnsh files i decrypt it but i dont have .bnsh

    — Posts automatically merged - Please don't double post! —

    Hey there. So in my case i dont find those .bnsh files. I dump my game correcty but i dont can find them
     
  16. masagrator

    masagrator The patches guy
    Member

    Joined:
    Oct 14, 2018
    Messages:
    4,062
    Country:
    Poland
    Not all games are using bnsh. There are various shader formats. bnsh is just Nintendo Switch native format.
     
    Nick3421421 likes this.
  17. Nick3421421

    Nick3421421 Member
    Newcomer

    Joined:
    Dec 24, 2019
    Messages:
    19
    Country:
    Germany
    all right so how i can find those for my game
     
  18. masagrator

    masagrator The patches guy
    Member

    Joined:
    Oct 14, 2018
    Messages:
    4,062
    Country:
    Poland
    Well, custom means you need to find it yourself by hex viewing and determining if this is it or not.
    Each engine = different method.

    — Posts automatically merged - Please don't double post! —

    You should start from at least sharing what game are you editing.
     
  19. Nick3421421

    Nick3421421 Member
    Newcomer

    Joined:
    Dec 24, 2019
    Messages:
    19
    Country:
    Germany
    I Just need to dump the Standard shader of fire Emblem three Houses to fix the stutering on yuzu enulator
     
  20. Manurocker95

    OP Manurocker95 Game Developer & Pokémon Master
    Member

    Joined:
    May 29, 2016
    Messages:
    1,451
    Country:
    Spain
    Yuzu doesn't use same decompilation as Ryujinx, so that sounds pretty useless... What's the format used there?
     
Draft saved Draft deleted
Loading...

Hide similar threads Similar threads with keywords - [Tutorial], Fragment, Nintendo