Create and Fuck your AI Cum Slut –70% OFF
x

Mod Unity [Secret Flasher Manaka] Cosplay Loader Mod 2.2.1

AACID

New Member
Nov 22, 2025
3
0
1
Hello,I meet a question when I try to import my own clothes. I want to import a skirt into the game, but I found that only the buttons on the skirt were displayed, and the materials were all displayed on the buttons. up to now I can't figure out what's wrong with this.
1764175195772.png 1764175464378.png
1764175506173.png
 

biwajimadono

Member
Jul 27, 2021
129
147
53
Maybe the reason the costume wasn't added to the slot was because I didn't buy it from the shop...
If that's the only reason, I was careless.

Also, when you change an arranged costume to a different category (e.g., Glossy → SuitLuxe), the existing costume is pushed aside.
Alphabetical order takes priority.
I made the mistake of even changing the costumes I had already purchased into a different category.
I ended up confusing the mod system.
 
Last edited:
  • Like
Reactions: LeoVincent69

ExoFifth

New Member
Nov 26, 2023
6
11
87
hiddenPartsType (string or int, default 0)
I believe setting this prevents NPCs from seeing the part - TBD.
Enum: HiddenBodyPartsByCostumeType
Example to hide boobs?: "effectType": "Boobs"
public enum HiddenBodyPartsByCostumeType
{
Boobs = 1,
Hip = 2,
Genitals = 4,
SideOrBackUpperBody = 8,
HipCrouch = 0x10
}
You're correct, but it needs to be set up so that multiple parts can be hidden (assuming I didn't just miss something in my fiddling around). Under the hood, it's a series of binary flags, each corresponding to a body part, and each can be toggled independently:

StringDecimalBinary
Boobs100001
Genitals400100
SideOrBackUpperBody801000
Boobs + Genitals500101
Boobs + Genitals + SideOrBackUpperBody1301101

The public release of my old Cosplay Patcher mod still works on cosplays imported with your mod. If my cludgy code is useful to you, feel free to use it.

Code:
using System.Text.Json;
using System.Collections.Generic;

using UnityEngine;
using BepInEx.Logging;
using HarmonyLib;

using ExposureUnnoticed2.Master.Cosplay;
using ExposureUnnoticed2.Object3D.Player.Scripts;


namespace SFM_CosplayPatch;

public class CosplayPatcher : MonoBehaviour
{
    internal static ManualLogSource Log;

    private enum binaryMode
    {
        Subtract = 0,
        Add = 1
    }
    private Dictionary<string, Dictionary<string, dynamic>> PatchDict;
    private List<int> PatchedParts = new();


    public CosplayPatcher(Dictionary<string, Dictionary<string, dynamic>> inputPatchDict, ManualLogSource logger)
    {
        PatchDict = inputPatchDict;
        Log = logger;
    }


    public void ReRunPatch()
    {
        int[] tempPartArray = PatchedParts.ToArray();
        PatchedParts.Clear();

        foreach (int part in tempPartArray)
        {
            PatchCosplayPartById(part);
        }
    }


    public void PatchCosplayPartById(int uniqueId)
    {
        var cosplayPart = ExposureUnnoticed2.Master.Cosplay.MCosplay.GetParts(uniqueId);
        if (!PatchedParts.Contains(uniqueId))
        {
            PatchCosplayPart(cosplayPart);
            PatchedParts.Add(uniqueId);
        }
    }


    public void PatchCosplayPart(RCosplayParts cosplayPart)
    {
        Traverse trav = Traverse.Create(cosplayPart);
        PlayerStateModel.HiddenBodyPartsByCostumeType hiddenParts = trav.Property("HiddenPartsType").GetValue<PlayerStateModel.HiddenBodyPartsByCostumeType>();

        if (PatchDict.ContainsKey(cosplayPart.NameKey))
        {
            Dictionary<string, dynamic> patch = PatchDict[cosplayPart.NameKey];

            if (patch != null)
            {
                foreach (KeyValuePair<string, dynamic> prop in patch)
                {
                    if (prop.Key == "HiddenPartsType") SetPropertyHiddenPartsType(trav, prop);
                    else SetPropertyOther(trav, prop);
                }
            }
        }
    }


    private PlayerStateModel.HiddenBodyPartsByCostumeType HiddenPartsBinaryOp(
        PlayerStateModel.HiddenBodyPartsByCostumeType oldFlags, PlayerStateModel.HiddenBodyPartsByCostumeType newFlag, binaryMode mode)
    {
        if (mode == binaryMode.Add) return (oldFlags | newFlag);
        else return (oldFlags ^ newFlag);
    }


    private void SetPropertyOther(Traverse trav, KeyValuePair<string, dynamic> prop)
    {
        var target = trav.Property(prop.Key);
        if (target == null)
        var targetVal = target.GetValue();

        if (targetVal is int)
        {
            int value = JsonSerializer.Deserialize<int>(prop.Value);
            trav.Property(prop.Key).SetValue(value);
        }
        else if (targetVal is float)
        {
            float value = JsonSerializer.Deserialize<float>(prop.Value);
            trav.Property(prop.Key).SetValue(value);
        }
        else if (targetVal is double)
        {
            double value = JsonSerializer.Deserialize<double>(prop.Value);
            trav.Property(prop.Key).SetValue(value);
        }
        else if (targetVal is bool)
        {
            bool value = JsonSerializer.Deserialize<bool>(prop.Value);
            trav.Property(prop.Key).SetValue(value);
        }
    }


    private void SetPropertyHiddenPartsType(Traverse trav, KeyValuePair<string, dynamic> prop)
    {
        PlayerStateModel.HiddenBodyPartsByCostumeType newFlags = trav.Property(prop.Key).GetValue<PlayerStateModel.HiddenBodyPartsByCostumeType>();
        string[] flags = JsonSerializer.Deserialize<string[]>(prop.Value);

        foreach (string f in flags)
        {
            string flag;
            binaryMode mode = binaryMode.Add;

            if (f.StartsWith('-'))
            {
                mode = binaryMode.Subtract;
                flag = f.Trim('-');
            }
            else flag = f;

            switch (flag)
            {
                case "Boobs":
                    newFlags = HiddenPartsBinaryOp(newFlags, PlayerStateModel.HiddenBodyPartsByCostumeType.Boobs, mode);
                    break;
                case "Hip":
                    newFlags = HiddenPartsBinaryOp(newFlags, PlayerStateModel.HiddenBodyPartsByCostumeType.Hip, mode);
                    break;
                case "Genitals":
                    newFlags = HiddenPartsBinaryOp(newFlags, PlayerStateModel.HiddenBodyPartsByCostumeType.Genitals, mode);
                    break;
                case "SideOrBackUpper":
                    newFlags = HiddenPartsBinaryOp(newFlags, PlayerStateModel.HiddenBodyPartsByCostumeType.SideOrBackUpperBody, mode);
                    break;
                case "HipCrouch":
                    newFlags = HiddenPartsBinaryOp(newFlags, PlayerStateModel.HiddenBodyPartsByCostumeType.HipCrouch, mode);
                    break;
                default:
                    Log.LogWarning($"JSON error in patching {trav.Property("NameKey").GetValue<string>()}: {flag} is not a valid HiddenPartsType");
                    break;
            }
        }

        trav.Property(prop.Key).SetValue(newFlags);
    }
}
 
  • Like
Reactions: edward0628

LeoVincent69

New Member
Aug 19, 2025
9
19
3
I want as many people as possible to experience the author's great efforts and great kindness.
All I can do is introduce.
I would like to express my heartfelt respect to everyone who is working to evolve MANAKA.
View attachment 5476100
Welp, I just come back online after a long while... sorry if I didn't reply you in your past few messages, but seem like you know how to change clothes texture PNG, change the material name, move clothes to other category etc., and resolved the issues, so good job to you bro.

Alphabetical order takes priority.
Yes, all added clothes are arranged in alphabetical order after the default base game clothes and I want to elaborate a bit more based on what I observed.

The game, instead of recording the exact clothes you have brought from the store, the game recorded the ID Number of the clothes you brought, so if new modded clothes are inserted in the middle of the a bunch of already brought modded clothes, the game will assume you have brought them. This will sometime cause the modded clothes you are equipping to change and the lowest alphabet clothes to become "not brought": (Hope the very barebone demonstration below help what I am trying to explain)

Initially, let say you have 2 modded clothes, Cloth A and C. You brought both and equipped Cloth C.
ID Number
(The game recognize what you brough based on this value)
Alphabetical Order
(The game arrange all clothes in this order)
Initially:
1Cloth ABrought
2Cloth CBrought and equipped
The game will record that you have brought clothes ID number 1 and 2 while equipping clothes ID number 2.

Let say you inserted a Cloth B afterward. Cloth B got assigned with ID number 2 based on the alphabetical order, so this will happen:
ID NumberAlphabetical OrderWhat happened after you inserted Cloth B in the middle:
1Cloth ABrought
2Cloth BAutomatically brought and equipped
3Cloth CAutomatically "not brought" and unequipped
When you load the game, what happen is the game STILL think you brought clothes ID number 1 and 2 while equipping clothes ID number 2. Therefore, based on the alphabetical order, clothes ID number 2 now is Cloth B instead Cloth C that you originally equipped. And Cloth C, now with ID number 3, become a "not brought" clothes in the store. Hope this make it clearer...

EXTRA: regarding clothes limit
Of course, all category keep track of the ID number separately. As for the clothes limit per category, I think the limit is 10,000 per category, 210,000 total INCLUSIVE of the base game clothes.

Based on the attached picture, I saved a set of clothes with the 1st base game clothes in Sweater category, the 2nd base game clothes in Glossy category, and the last alphabetical order modded clothes in Glossy category. Then in the decrypted save file, this is the clothes ID that pop up is 170000, 180001, and 180031, this mean one clothes ID number is made up of 6 digit where the first 2 digit (00 to 20 in game) is the category number while the last 4 digit (0000 to 9999) is the clothes ID number in the specific category. This mean you can theoretically load approximately 210,000 minus the number of available base game clothes, which is a lot...

Anyway, sorry for late reply and technically didn't manage to help you XD, you resolved on your own.
 
  • Like
Reactions: biwajimadono

LeoVincent69

New Member
Aug 19, 2025
9
19
3
i have a question
it seems the mod version i have has either body clipping on the cloth or the cloth mesh does not have something that's similar to manaka's body adjustment sliders to automatically fit into her

did anyone got a workaround on those issues or is it really like that?
im using the pre-patched v1.1.3 with BE +738
I don't really know much about Unity and Blender, but from what I know:
1. Manaka body is VRChat Selestia body, so clothes that is designed not for Selestia might not properly fit with Manaka.
2. Some Selestia clothes either do not have shape key (please refer to the google docs in the main post:
Want to create your own custom outfits or load one you found?
). If this is the issue... So far I haven't seen anyone come out with a workaround yet sadly... I once managed to insert the shape key in Blender and scale it accordingly to Selestia body but it didn't work after I import it in-game... :/

Sorry can't help much man...
 

LeoVincent69

New Member
Aug 19, 2025
9
19
3
Hello,I meet a question when I try to import my own clothes. I want to import a skirt into the game, but I found that only the buttons on the skirt were displayed, and the materials were all displayed on the buttons. up to now I can't figure out what's wrong with this.
View attachment 5473448 View attachment 5473457
View attachment 5473458
I am new to Blender so I might not know much, but is it possible that the problem is because there is multiple material assigned to the skirt? From what I have done, I think the current mod can only assign 1 material into each clothes in game, so maybe deleting the material for the buttons in the Blender might solve your problem.

Extra: Of course, if that really is the case, after simply deleting the buttons' material, I think your buttons might be invisible in game? I not so sure... It been a while since I last import any clothes so I kind of forgot what I observed XD. Hope this comment help.
 

LeoVincent69

New Member
Aug 19, 2025
9
19
3
Hmmmmm, I think that is the best I can help so far? Also this is my second round of commenting so much in F95zone... Not sure will I break any rules or not... but I have question regarding a website call forum.ripper.store, from what I know so far, it seem like a website that I can download VRC assets (including Selestia's clothes that other people shared) but to join the website, an invitation from a member of the website is required... So if anyone here is a member of the website and the website is safe to join, is it ok to maybe extend me an invitation... I just want to browse more Selestia's clothes to import them into SFM... Only if it is ok and it didn't break any F95zone rules of course...
 
  • Like
Reactions: biwajimadono

LeoVincent69

New Member
Aug 19, 2025
9
19
3
@biwajimadono, thank for starting a conversation with me to inform me about my personal request, but I realize I can't reply a private conversation yet because I haven't post enough comments in F95zone XD. Hahaha, sorry for disturbing you like this man. Back to the topic, yea, all of the Celestia's outfits that I imported into the game is downloaded from the Mega folder shared, I think the Mega folder is also originated from forum.ripper.store. Well, I guess I will just have to wait and maybe ask for the invitation in SFM post once in a while. Hopefully one day someone saw it and extend me an invite so maybe I can check out more outfits and import more into the game.
 
  • Like
Reactions: biwajimadono

LeoVincent69

New Member
Aug 19, 2025
9
19
3
By the way, what should I do about it being split into Part 1 and Part 2?(三ω三)
You need to download all the parts for the specific outfits, put all of them into one folder first (all parts MUST be in the same folder), then right click any of them (personally, I always right click on part 1) and extract. We archive and split the outfits into multiple parts simply because the file size is bigger than the allowable size for one file XD.

(Edit: just change some wording...)
 
  • Like
Reactions: biwajimadono

LeoVincent69

New Member
Aug 19, 2025
9
19
3
Oh yea, one extra thing, in case Manaka's nipple clip through any outfits that does not support chikubi shape key, do use the
Code:
"isFlattenTit": true
code in descriptor.json of the specific outfits in the ModCosplays. That code hide the nipple so that it won't clip through the outfits. Not sure had anyone mentioned it before or not, but oh well. For example:
 
  • Like
Reactions: edward0628

biwajimadono

Member
Jul 27, 2021
129
147
53
By the way, what should I do about it being split into Part 1 and Part 2?(三ω三)
Download all the consecutive numbers.
Then, double-click "XXX.part1.rar" and it will automatically combine them.
But be careful: F95 can be cranky at times.
Sometimes they won't be combined and a data error will occur...
Or there will be no errors and everything will go smoothly, but then an abnormality will occur in the game.
(For example, a large number of the same costumes will appear, or no error message will appear even though the file size is less than half.)
If you experience any strange problems, we recommend downloading again.
 
Last edited: