Inscryption

Details

Last Updated
last week
First Uploaded
last week
Downloads
88
Likes
1
Size
87KB
Dependency string
CORE_API_TEAM-Texture_Replacer-1.1.0
Dependants

Texture Replacer

This package is fully open source, meaning anyone that wishes to contribute may, as long as my license is applied to all forks of this project, additionally rights for contributors code still applies, e.g. if code in this mod did not come from me, YOU MUST ASK THE CODE'S AUTHOR FOR USAGE OF THAT SECTION OF CODE. If you wish to contribute or find bugs please send them to the Github found here: https://github.com/Chaosyr/TextureReplacerInscryption, Also if this package ever at any point needs updating DM @thincreator3483 on discord.

What does this mod do?;

A ton for surprising little it shows within the game, allow us to break this into sections of explanation, it should help with understanding exactly what this does.

Deathcards Module

This can be toggled on and off via config property Deathcards Module in the Modules section, if toggled off none of this module will occur, if on all of it will occur based on circumstances.

Loaders

These all load on Launch, and when configs related to the Module changes, Any references to Objects or parsers can be looked at in the code, or when you use the mod in C# for whatever reason, likely not ideal to but code comments are there if you do.

  1. Loads RESERVED-NORIGHT found in TextureReplacer/Deathcards/{Chosen System}, and parses its contents for Subpath = ApplyNoRight = Inverse Apply and |-> ApplyNoRight = Inverse Apply, with this it parses out the Subpath name, and associates it with two bools, one that says "hey do we apply a RESERVED-NoRight.png for this path?" the other asks "Should this be applied in reverse where we switch the black in the given NoRight to cut a hole rather than paste a filling?" Oh yeah and with the |-> it utilizes the subpath from the previously applied subpath properties.
  2. Scans the path tree of TextureReplacer/Deathcards/{Chosen System} to get the subpaths and within those subpaths it defines a List of List<Image<Rgba32>> for each base set, if it spots a Emissive folder within it does the same however its added as a emissive set, technically a emissive set is by default added for each subpath, however if there is no Emissive folder it will be empty, which we handle dont worry.
  3. Loads RESERVED-Presets.csv found in TextureReplacer/Deathcards/{Chosen System}, and parses it into 3 components, one a List of Names, two a Conditions Object that will be associated with the name, and three a Preset Object that will be associated with the name.
  4. Loads RESERVED-Saves.csv if it exists in TextureReplacer/Deathcards/{Chosen System}, and does pretty much the same as step 3, however rather than a Preset Object its a SavedImages Object.

Deathcard Portrait Handlers

There are 3 Portrait Handling systems that we utilize to give the most cutomization possibilities to modders, there is a Portrait Randomizer which randomizes portraits for every deathcard not yet in Saves, and not found in the Presets, there is a Preset Handler which checks if Conditions between the deathcard and the presets conditions match and if they do completely we than apply the specified Preset, and lastly there is a Save Handler which does the same as the Preset Handler however, rather than applying a specified Preset it applies the saved randomized portrait or preset from a saved base64 string, this last one is done to optimize the handling so theres not visible lag every time you look at a deathcard.

Portrait Randomization

Runs when theres not a save and the names not found in Presets.

  1. Choses randomized peices from each Set that was loaded in HandleTrees, tries to choose a associated emission if that fails it continues without causing errors.
  2. Compiles the randomized peices into a Emission and Portrait
  3. Calls and Passes the Emission and Portrait into the LostEye handler, and overwrites the previous Emission and Portrait with the output of the handler.
  4. Sets the Deathcard head to the Portrait, and the Deathcard eyes_emissive to the Emission.
  5. Kills the base games Deathcards base.
  6. Enacts a save of the Deathcards mods to the Portrait and Emission in base64 form
Presets

Runs when theres not a save and the names found as described in step 1.

  1. Checks if the Deathcard name is found in PresetNames.
  2. Checks if the Deathcard Modifications matches the Presets Conditions exactly.
  3. Loads the Preset Portrait and Preset Emission if step 2 evaluates to true.
  4. Enacts a save of the association.
Saves

Runs when theres a save as described in step 1.

  1. Checks if the Deathcard name is found in SaveNames.
  2. Checks if the Deathcard Modifications matches the Presets Conditions exactly.
  3. Loads the Preset Portrait and Preset Emission if step 2 evaluates to true.
  4. Enacts a save of the association.

Lost Eye Handler

This is a seperateish handler that essentially handles how LostEye should be applied.

  1. Looks at the Loaded values for LostEye.
  2. Compiles a paste of each LostEye handling found for the Portrait and Emission in the following ways:
    • If Apply = True
      • Inverse = False and Emission = False
        • Applies a Paste of the RESERVED-NoRight.png to the Portrait.
      • Inverse = True and Emission = False
        • Applies a Inverse of Portrait's Alpha
        • Applies a Paste of the RESERVED-NoRight.png to the Portrait
        • Applies a Inverse of Portrait's Alpha
      • Inverse = True and Emission = True
        • Applies a Inverse of Portrait's R, G, B followed by A.
        • Applies a Paste of the RESERVED-NoRight.png to the Portrait
        • Applies a Inverse of Portrait's A followed by R, G, B.
      • Inverse = False and Emission = True
        • Applies a Paste of the RESERVED-NoRight.png to the Portrait
    • If Apply = False
      • Skip
  3. Repeat Step 2 for every SubPath in the LostEye Subpaths, and LostEye EmissiveSubPaths

Basic Setup;

Simply place the DLL in the Plugins folder, and what BepInEx/config contains into BepInEx/config. MAKE SURE YOU HAVE ALSO INSTALLED ALL DEPENDENCIES OF THIS MOD.

How To Use Modders;

This is going to be a beefy section just like the above section was [e.g. what the mod does], so bare with me as we explain how to make a mod using the Texture Replacer.

Packaging

I wanted to start here first because this is the EXTREMELY IMPORTANT part to making a Texture Replacer mod. As a sort of what you can and can't do and how to bundle this into a thunderstore package.

What May I Do or Not Do with a Setup?

  • What May You Do?
    • You may, create a new folder within each module to contain your contents based upon the default packages within the modules.
  • What Can I Not Do?
    • Overwrite a package that uses this mods files, or the base mods files, why you may ask are we not allowed this? Well thats because the Mod Managers can't handle it, plus once overwritten it can't be rewritten without the origin being updated which will than rewrite your stuff. So if you want to add things to a setup, that are miniscule try asking the mod creator, or change it locally without putting it up on thunderstore, and if you really need to upload it to thunderstore than make your own system, and if a systems creator gives permissions use theirs as a base for yours, just make sure you give them credit when you upload.
  • Anything Else?
    • If its not listed here ask me (@thincreator3483), or whoever is maintaining this mod if you can or cant do X with the package, if its asked enough we will ammend this section.

Structuring

So you may be asking "How do I include my setup within a Thunderstore Package?" well for that its pretty simple. The following steps should help if you need further support reach out to me (@thincreator3483).

  1. Create a BepInEx/config folder within your package setup.
  2. In that setup add TextureReplacer/(INSERT MODULE), and creator.inscryption.TextureReplacerInscryption.cfg <- Make sure this is set to your system under the specified module section.
  3. Within (INSERT MODULE) drag and drop or better yet copy and paste your system to that folder.
  4. Delete RESERVED-Saves.csv if applicable to the module unless its relavent to your setup for whatever reason just if it is ensure to mention that if you reset the act, these will be overwrote.
  5. To test if the package works, zip the contents of your package and try to Import Local Mod for the package in a new profile, if it worked, the setup should be identical to your testing setup without the base texture replacer module stuff.

Deathcards Module

Alright so you want to make a deathcards system now do ya? Well lets dig into how to set these up, it shouldn't be all too complicated. First lets lay some ground works.

  1. Create a new folder in TextureReplacer/Deathcards, it can be called anything as long as its not a pre-existing folder, try and make it something unique so we can reduce chance of a override.
  2. Set creator.inscryption.TextureReplacerInscryption.cfg under Deathcards Portrait system to that created folders name.
  3. Within that folder just so we have it out of the way create the following items RESERVED-Presets; a folder, RESERVED-NoRight; a file, and RESERVED-Presets.csv, NoRight must be filled out, see the Base-Game for an example of how.

Randomization

So this is likely the main part you want to know how to setup. Let's go over it in some detail.

  • All subpaths not affixed with RESERVED- will be deemed as a set component, it is loaded essentially alphabetically.
  • If you want to counteract the Alphabetic system its advised to use something like 1., 2. as soon as you pass 10 for example you'd instead of 1. would do 01. so that order is preserved, I'd reccomend guesstimating how many subpaths there will be prior to setting up so your folder names will be in the right order off the bat.
  • All PNG Files not affixed with RESERVED- will be deemed as a set piece, it is loaded essentially alphabetically.
  • If you add Emissive; a subfolder into the subpath you can garuntee the peice will have a matching emission, HOWEVER, if this is the case the emissions and peices need to be in the same order to prevent mismatching see point 2 for a example of how to do such.
  • If the subpath or emissive is meant to be affected by NoRight/LostEye add a png in the subfolder entitled RESERVED-NoRight.png, it should be a full black square but it should be plausible for it to be something else just note with how current inverse application works color will be lost after LostEye takes affect because inverting a image full transparent kills the color. [if we ever find a way to counteract this point will be updated].

Alright so now how would I setup a basic system for randomization?

  1. Add a subpath called anything you want keep the ordering in mind.
  2. In that folder add your peices they must be PNG files and must be 114x94 in size
  3. If the subpath should affect emissions add Emissive as a folder, and essentially copy the prior peices from the subpath folder into the emission and turn those images into how the emission should look, of course you dont have to do it that way, this is just how I'd do it, the main point is ORDER MUST BE THE EXACT SAME.

Now if you need further assistence with this DM me (@thincreator3483) and lets proceed to the next section.

Presets

Now let's go over the presets setup and some notes.

  • I'm not 100% on this but if Presets have the same name (likely exactly) it will break because dictionarys may not contain 2 of the same key, so beware of that when setting up your presets, dont believe theres case sensitivity either so may be a update in the future for handling the rare case of duplicates.
  • The CSV Header row is needed, maybe not required but if it bugs bring it back in.
  • Attack through Lost Eye are the conditions to check when determining if a preset should be applied note if you need these extended you'll need to wait for a extension mod to be made to have compat with API deathcard stuff.
  • The last two properties should be the PNG names for the presets found in RESERVED-Presets.
  • Presets must be 114x94 images, and there should be a normal and emission for each.

Now how do I set these up?

  1. Open RESERVED-Presets.csv in a text editor, I usually use Visual Studio Code as it gives a rich text editor experience, but you can use anything.

  2. Past the following line into line 1 of the file;

    name,attack,health,abilities[],blood,bones,statIcon,specialAbilities[],lostEye,preset,preset_emission
    
  3. Go to the next line, and than your essentially going to fill out the fields, commas are what seperates fields, and no names and properties may not contain commas or the CSV handling breaks.

    Property What it does? What is it If Applicable
    name This is the name in which we check against for whether its a preset and to see if it matches.
    attack This is the attack stat which we check against for whether the card mods has the same attack value.
    health This is the health stat which we check against for whether the card mods has the same health value.
    abilities[] This is a list of abilities formatted adjacent to [Sharp;SplitStrike;1027] which we check against the mods abilities list. Note an extension may be made to handle sigils added by the API better than just a number.
    blood This is the blood cost which we check against for whether the card mods has the same blood cost value.
    bones This is the bone cost which we check against for whether the card mods has the same bone cost value.
    statIcon This is the stat icon which we check against for whether the card mods has the same stat icon value.
    specialAbilities[] This is setup petty much the same as abilities just instead its special abilities, and again a extension may be made to handle it better.
    lostEye This is the bool that we check against for whether the card mods has the same bool value for lost eye. A check for whether or not the deathcard was made after use of the dagger in the same fight.
    preset The preset that will be applied for the portrait. A PNG file that matches with the given preset found within RESERVED-Presets.
    preset_emission The preset that will be applied for the emission portrait. A PNG file that matches with the given preset found within RESERVED-Presets.

    Nullable fields are; abilities[], statIcon, specialAbilities[] which can all be set to null to be nullified in loading.

  4. Repeat step 3 for each preset you want to add

  5. Add the Preset images into RESERVED-Presets for each entry in RESERVED-Presets.csv.

Sorry if this ones not the most high quality, exhaustions set in from 4 straight days of coding. This and the next will likely be revised. If you need assistence reach out to me (@thincreator3483)

Lost Eye

Now lets get into RESERVED-NORIGHT, theres not really any notes with this one as its pretty straight forward in nature.

  1. Open the RESERVED-NORIGHT file.
  2. Add the reference to the top of the file;
    /-------------------------------------------------------------------------\
    |                                                                         |
    |              FOLDER NAME = LOST EYE = INVERSELY APPLY(?)                |
    |                           |-> = Subpath                                 |
    \-------------------------------------------------------------------------/
    
  3. Hit enter twice after pasting
  4. For each subpath write the following Path Name = {Whether Lost Eye is Applicable to the set} = {INVERSE} for example 1-Heads = False = False
  5. If the path has a Emissive folder do |-> {Whether Lost Eye is Applicable to the set} = {INVERSE}, adjacent to |-> True = True

And thats pretty much it with Lost Eye its really simple, well also if not done already make sure theres a RESERVED-NoRight.png in each subpath you set handling to true for.

Installation;

Installing with a Mod Manager

  1. Download and install Thunderstore Mod Manager, Gale or r2modman.
  2. Click the Install with Mod Manager button on the top of BepInEx's page.
  3. Run the game via the mod manager.

If you have issues with Mod Managers head to one of these discords;

  • Thunderstore/R2ModMan Support Discord: Here
  • Gale Mod Manager Support Discord: Here

Installing Manually

  1. Install BepInEx by pressing 'Manual Download' and extract the contents into a folder. Do not extract into the game folder!
  2. Move the contents of the 'BepInExPack_Inscryption' folder into the game folder (where the game executable is).
  3. Run the game. If everything was done correctly, you will see the BepInEx console appear on your desktop. Close the game after it finishes loading.

Installing on the Steam Deck

  1. Download r2modman on the Steam Deck’s Desktop Mode and open it from its download using its AppImage file.
  2. Download the mods you plan on using and their dependencies..
  3. Go to the setting of the profile you are using for the mods and click Browse Profile Folder.
  4. Copy the BepInEx folder, then go to Steam and open Inscryption's Properties menu
  5. Go to Installed Files click Browse to open the folder containing Inscryption's local files; paste the BepInEx folder there.
  6. Enter Gaming Mode and check 'Force the use of a specific Steam Play compatibility tool' in the Properties menu under Compatibility.
  7. Go to the launch parameters and enter WINEDLLOVERRIDES=“winhttp.dll=n,b” %command%.
  8. Open Inscryption. If everything was done correctly, you should see a console appear on your screen.

Mac & Linux

  1. Follow the steps here first: https://docs.bepinex.dev/articles/user_guide/installation/index.html
  2. Your game should be setup for inscryption modding now

If you have any issues with Mac/Linux, Steam Deck, or Manual head over to the discord for this game:

  • Inscryption Modding Discord: Here

Credits;

  • Professor Eggnog: The comission that started this, the 9th deathcard base they made originally for the Deathcard Generator I made for Leshy IRL's wedding, and some idea fodder, and now the mod icon as well!!! its cute af X3c
  • 157 (Special API): A ton of code help in terms of patching and Unity help.
  • Lily Sylvie: Some of the base code I referenced, none of it is in this project, but they did help with ideas on how to go about our logic for the deathcard portrait replacements.
  • Dark Dragoon: The Image Handlers for Unity used within this mod.
  • Creator: The almost entire code base of the mod itself.

License;

SaxbyMod's License (Branched off of the MIT License)

Copyright 2025 SaxbyMod

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. Additionally, any software that is published, or derived from this project must credit the author(s) of this project. If this is to be published code may not match in a 1:1, there must be some alteration.

Alterations not allowed would be for example changing of comments, stripping of comments, adding of comments, changing variable names, changing variable types, or adding or removing variables that make no change to the code.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.
Thunderstore development is made possible with ads. Please consider making an exception to your adblock.