Tutorial Unity How To Uncensor (Almost) Any Unity Game

spokkimax

Member
Sep 19, 2022
399
137
It's a .

Edit: I had uncesored version(v2.01). I copied above files, It's not works. May be for another version ?
I What I had. Cooy above patch and overwrite with What I uploaded.

Edit 2 : Not All CGs are uncensored. hm..
Thank you very much. It seems that only 2 scenes are not correctly uncensored: the first and the last.
While there is the "white spot" in the first one, the rest in it is fine. While the last h-scene is completely censored.
Take a look.
Out of curiosity, where did you find that patch? Because if a download from the site where the uncensored patch is located it still gives me the game censored, while if I download yours (uncensored data) most of the scenes are uncensored (so, it works as it should)
 

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
Thank you very much. It seems that only 2 scenes are not correctly uncensored: the first and the last.
While there is the "white spot" in the first one, the rest in it is fine. While the last h-scene is completely censored.
Take a look.
Out of curiosity, where did you find that patch? Because if a download from the site where the uncensored patch is located it still gives me the game censored, while if I download yours (uncensored data) most of the scenes are uncensored (so, it works as it should)
I Uploaded some files of "Data" folder what I had. (ver 2.01)
Gallery's images are in the "cg.data" file.
All CGs are uncensored except "CG_End".

U can download at
 
Nov 22, 2018
265
235
I need help on decensoring .
Tried editing the materials and the shader(the 840th in resources.assets), but nothing changed.

Here is my game, with decompress pw: f95
The game is only in Japanese.
 
Last edited:

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
I need help on decensoring .
Tried editing the materials and the shader(the 840th in resources.assets), but nothing changed.

Here is , with decompress pw: f95
The game is only in Japanese.
This game has uncensored images.
It's a dlsite. as you knew, almost dlsite games are censored.
At this game is run, setting the censor mode belong to publisher(dlsite).
I made a uncensored plugin(for BepInEx). No needed edit asset files.
It works on this game only. and works on next game updated. (game version independent)

Game version was updated to v1.2.2
At v1.2.0, game was used Unity 2021.1 + IL2CPP. I was made uncensor plugin for BepInEx v5. It was worked on BepInEx 6.0.0-pre.1.
Now, latest game version is v1.2.2. It used Unity 2021.3 + IL2CPP. After Unity 2021.2 + IL2CPP, must use BepInEx v6( ) #6xx.
#6xx is not compatible with BepInEx v5 plugins.
I made new uncensor plugin. old version was not decensored on anime-parts. But it's resolved.

Install
  • Install BepInEx. It's an IL2CPP type. use #6xx version. if you're using x64 game client, use the
  • Run game once. (takes some time at first run time)
  • Extract uncensor plugin file to BepInEx\plugins\ folder. If BepInEx\plugins\ folder is not exists, move game to another folder. (ex. "c:\Games\PantyCard\") and retry.
 
Last edited:

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
Can you tell me more about how this plugin do the job?
In fact I have no skill on writing plugins, and this author's other games usually have the same problem.
Maybe I can do the job myself if I know the theory.
Even using plungin, the insert(piston) scene is censored. is right working?

hm.. This game is IL2CPP type unity. So if you want mod app, there are 2 options.
  1. edit hex bytes.
  2. make plugin of BepInEx(or other framework(ex. MelonLoader, etc))

Both methods are needed to study... assembly, c#, etc...

flow making plugin of this game.(making plugin)
Analyze app
Make a dummy Assembly-CSharp.dll with Il2CppDumper to analyze.
Decompile with IDA Pro.

Find Mosaic (open Assembly-CSharp.dll with dnSpy)
1666030346329.png

At Start(), calls SetValue(blahblah)
C:
public unsafe void SetValue(bool off, float size, float penisSize)
{
    IL2CPP.Il2CppObjectBaseToPtrNotNull(this);
    IntPtr* ptr;
    checked
    {
        ptr = stackalloc IntPtr[unchecked((UIntPtr)3) * (UIntPtr)sizeof(IntPtr)];
        *ptr = ref off;
    }
    ptr[checked(unchecked((UIntPtr)1) * (UIntPtr)sizeof(IntPtr)) / (UIntPtr)sizeof(IntPtr)] = ref size;
    ptr[checked(unchecked((UIntPtr)2) * (UIntPtr)sizeof(IntPtr)) / (UIntPtr)sizeof(IntPtr)] = ref penisSize;
    IntPtr intPtr2;
    IntPtr intPtr = IL2CPP.il2cpp_runtime_invoke(R18Mosaic.NativeMethodInfoPtr_SetValue_Private_Void_Boolean_Single_Single_0, IL2CPP.Il2CppObjectBaseToPtrNotNull(this), (void**)ptr, ref intPtr2);
    Il2CppException.RaiseExceptionIfNecessary(intPtr2);
}
Guess parameters
1666030550976.png
View at IDA
C:
void __stdcall MyLibrary_R18Mosaic__SetValue(MyLibrary_R18Mosaic_o *this, bool off, float size, float penisSize, const MethodInfo *method)
...
      if ( !off )
      {
        UnityEngine_Material__SetFloat((UnityEngine_Material_o *)v17, str__Mosa_On, 1.0, 0i64);
        UnityEngine_Material__SetFloat((UnityEngine_Material_o *)v17, str__MosaPixSize2, v19, 0i64);
        goto LABEL_20;
      }
      UnityEngine_Material__SetFloat((UnityEngine_Material_o *)v17, str__Mosa_On, 0.0, 0i64);
...
Parameter "bool off" may be means "NoMosaic". If the value is true, "_Mosa_On"(Material) set to 0.0.

Making plugin
It's hard to explain how to make a plugin. Let's see the just code.
C:
using System;
using BepInEx;
using BepInEx.IL2CPP;
using BepInEx.Logging;
using HarmonyLib;
using UnhollowerRuntimeLib;
using UnityEngine;

namespace PantyCard_unc
{
    [BepInPlugin(GUID, MODNAME, VERSION)]
    public class Loader : BasePlugin
    {
        public const string
            MODNAME = "PantyCard_unc",
            AUTHOR = "kumarin",
            GUID = "com." + AUTHOR + "." + MODNAME,
            VERSION = "1.0.0.0";

        internal static ManualLogSource log;
        public override void Load()
        {
            log = base.Log;
            ClassInjector.RegisterTypeInIl2Cpp<PantyCard_unc>();
            AddComponent<PantyCard_unc>();
        }

    }
    public class PantyCard_unc : MonoBehaviour
    {
        public void Awake()
        {
            Harmony harmony = new Harmony(Loader.GUID + ".patch");
            harmony.PatchAll();
        }

        [HarmonyPatch(typeof(MyLibrary.R18Mosaic), "SetValue", new Type[] { typeof(bool), typeof(float), typeof(float) })]
        public class R18Mosaic_SetValue
        {
            [HarmonyPrefix]
            public static void Prefix(ref bool off, float size, float penisSize)
            {
                off = true;
            }
        }
    }
}
Important line is just
off = true;
It change the value of parameter "bool off" to "true" before enter the "SetValue" method.

generally unity game's uncensor is 2 type. soft and hard.
soft uncensor is recommend to use UniversalUnityDemosaics(not ManlyMarco's original)
one of hard uncensor is use Texture Replacer. some games are using it. (ex. Imouto Uncensor & Cheats plugin, Beat Refle Cheats + Decensor plugin Pack, and so on) of course, needed graphic designer(?)
 

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
Hi, would you mind checking out if RJ140155 can be decensored? I looked at the files and there are a bunch of files named mosaic and modifying the shader content does not yield anything
check a this post.
 

Zheoda

Newbie
Aug 23, 2022
35
9
How to uncensore Ecchi and Craft, really I waste 2 hours to find a screept, or something else that censoure a game, but I can't find it, please help me
 

Prick

Engaged Member
Jul 17, 2017
2,006
1,754
From what was discussed over on ULMF, this game causes a memory leak with Manly Marco's plugin. Each frame creates a new mosaic and the plugin deletes it.

Also, if you are struggling to find a material, you can actually skip that step by hunting the shader with UAS.
UAS can read the names of shaders, unlike UABE.
U.png

Confirmed working uncensor, colmask method for sharedassets2 > pathid 2382
 
Last edited:

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
From what was discussed over on ULMF, this game causes a memory leak with Manly Marco's plugin. Each frame creates a new mosaic and the plugin deletes it.

Also, if you are struggling to find a material, you can actually skip that step by hunting the shader with UAS.
UAS can read the names of shaders, unlike UABE.
View attachment 2122469

Confirmed working uncensor, colmask method for sharedassets2 > pathid 2382
My plugin is different from Manly Marco's.
It's same way that entering "Update()" method every frame. But work on when renders are changed. Little bit faster.
Of course, HardCode, edit sharer(asset file) method makes no lag.
But use SceneLoaded inject way(soft method), just little bit lag on scene loaded, not every frame. (ex. Lillian Night Succubus Exclusive Contract)
If game is updated rapidly, It's good for use soft method.
 

Prick

Engaged Member
Jul 17, 2017
2,006
1,754
My plugin is different from Manly Marco's.
I see, I merely hovered the link you provided and read universal demosaic, assumed you were referencing his.
I'm too lazy with bepinex, it's a seriously powerful tool I need to look into more.
 

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
I see, I merely hovered the link you provided and read universal demosaic, assumed you were referencing his.
I'm too lazy with bepinex, it's a seriously powerful tool I need to look into more.
BepInEx is not slow. Uncensor method(call Update() every frame) makes slow.
Another not slow sample.(Leona and Maam) It uses texture_replacer plugin tool. But not slow. (Checked with FPS)
But this method cannot be applied to all games. I will make plugin with this method.
 
Sep 24, 2017
36
78
Just a heads up, the original has been updated in April, and there's also a but not included in April release, so you need to download it as well and replace the file in the main UABE folder.
 

Prick

Engaged Member
Jul 17, 2017
2,006
1,754
Just a heads up, the original has been updated in April, and there's also a but not included in April release, so you need to download it as well and replace the file in the main UABE folder.
UABE-A is more stable most of the time, I primarily use it instead

 

Zheoda

Newbie
Aug 23, 2022
35
9
Well, I download everything BepInEx and your RendererDemosaic but I don't know what to do next
 

kumarin

Well-Known Member
Feb 19, 2022
1,574
2,144
Well, I download everything BepInEx and your RendererDemosaic but I don't know what to do next
Some unity games are the soft-censored. for example, Taco Refle(The Sweetest Salon ~OctoMassage~) has soft + hard censored.
RendererDemosaic plugin is a possibility to work(removes soft censor). To use plugins of BepInEx, you must install the right type BepInEx.
  • mone/IL2CPP
  • x64/x32
There are 4 types of combination belong to exe type of game.
If BepInEx is working right, BepInEx\plugins\ folder will be created. Put the plugins to that folder. That's all.
 
  • Like
Reactions: TNT_Blitz