-
Notifications
You must be signed in to change notification settings - Fork 1
Home
SardineTail supports two form of package, Release and Development.
Release package is extension modified zip archive and searched from every subdirectories of
sardines
in GameRoot.
Development package is directories under
UserData/plugin/SardineTail/packages
and works as if packaged in zip archive.
Development package is only enabled by configuration.
packageId part is identity of package, then if you change it, save file made in previous versions may lost compatibility.
version part is parsed as System.Version in .net6. So see also it for detail.
If there are multiple version of a package found, only latest one is loaded.
If there are multiple, same latest version of a package like these;
- sardines/sample-1.0.0.stp
- sardines/subdir/sample-1.0.0.stp
- UserData/plugin/SardineTail/packages/sample-1.0.0
one of but unpredictable will be loaded.
packageName = packageId "-" version ".stp"
packageId = 1*(fchar)
varsion = 1*(DIGIT) 1*3vpart
vpart = "." 1*(DIGIT)
fchar = any character possible in directory/file on os.example: sample-1.0.0.stp
packageName = packageId "-" version
packageId = 1*(fchar)
varsion = 1*(DIGIT) 1*3vpart
vpart = "." 1*(DIGIT)
fchar = any character possible in directory/file on os.example: sample-1.0.0
To avoid package id confliction, following naming convention is recommended.
Author name(or something identical).Author's personal package name-version.stp
valid package may contains followings;
- category named directory: only in root of package
-
values.json: only in category named directory or its subdirectory
-
- category named csv: only in root of package
- png format image file: anyware
- asset bundle (except special named one): anyware
-
hardmig.json: only in root of package -
softmig.json: only in root of package
Unlike hard mod or beloved Sideloader's zipmod,
SardineTail does not require list(csv) file, most of those values are provided as predefined defaults.
And remaining values should be represented by directory, files names and optional json file.
A valid SardinTail's Packages (.stp) must contain at least one of category directories.
Each directory name represents ChaListDefine.CategoryNo, aka first line of *.csv in Sideloader's zipmod (*).
(* And distribution number in second line is automatically set to 0 in SardineTail.)
SardineTail is look in to sub directories of each categorry directory until all required (default value is not predefined) keys are assined.
Just like Sideloader's zipmod, asset bundles in SardinTail's Packages (.stp) should be zipped without compression to be able to stream directly. If not, whole asset bundle will be loaded in to memory, resulting in long load time and heavy ram usage.
Each value representation is different from it's Type in Category definition section.
Name type (which is used in game display) is assigned from last directory name when all requirements met.
For example, an minimal mt_face_detail category mod will be following structure.

Name and LineMask is required key for mt_face_detail,
so LineMask.png is assigned as LineMask value and as the last required key,
Name is Your mod name; took from the directory name
Text type is assigned via values.json in directory and it's simple key:value json.
values assigned in intermediate directory are shared in sub directory, so for example following structure is valid.
- example-package-0.0.2.stp
- co_top
- males
- values.json(*1)
- mods for male1
- mods for male2
- mods for male3
- females
- values.json(*2)
- mods for female1
- mods for female2
- mods for female3
- males
- co_top
Content of *1:
{ "Sex": "2" }Content of *2: (it's default, you never need this in fact)
{ "Sex": "3" }Store type is assigned via values.json and must represents asset bundle path in package or
- (GameRoot)/lib
- In Aicomi
- (GameRoot)/abdata
- In SamabakeScramble
Reference to packaged asset bundle must be relative path.
If there are Key.png in directory, it will assigned to correspond Image type Key.
You can also assign a asset in asset bundle (.unity3d) via values.json, when do so corresponding store must be set.
And also, you can reference a packaged .png file via values.json.
for example, if you want to share same thumbnail for a set coordinate, can be represented by below.
- package-0.0.3.stp
- co_top
- my set coordinate top
- values.json (*1)
- MainTex.png
- ColorMaskTex.png
- ThumbTex.png
- my set coordinate top
- co_bot
- my set coordinate bot
- MainTex.png
- ColorMaskTex.png
- values.json (*2)
- my set coordinate bot
- co_top
Content of *1:
{
"MainAB": "bundles/yourbundle.unity3d",
"MainData": "top"
}Content of *2:
{
"MainAB": "bundles/yourbundle.unity3d",
"MainData": "bot",
"ThumbTex:": "co_top/my set coordinate top/ThumbTex.png"
}Asset type is assigned via values.json and corresponding store must be set.
for example:
{
"MainAB": "bundles/yourbundle.unity3d",
"MainData": "yourasset"
}List definition in csv format is also supported.
Each csv must named after category, and its first line must have complete, correctly ordered key sets.
(category name).csv
either double or single, quoting in csv notation is not supported, so you can't also use comma.
To reference packaged png from csv, corresponding ABKey must set to fixed value of sardinetail.unity3d.
For example you can write like this;
Kind,Possess,Name,MainAB,NipTex,ThumbAB,ThumbTex,Image,Attribute,Detail
0,1,MyMod,sardinetail.unity3d,path/from/package/root/your.png,sardinetail.unity3d,path/from/package/root/yourthumb.png,0/1/2/3/4/5,0,0You can reference original (or hard mod's) asset bundle from package by *AB column.
If there are no corresponding asset bundle in package at initialize phase, load call for the asset will be processed normally.
When referencing original asset bundle in category with MainManifest column, MainManifest value should set to same as orginal,
Otherwise original item will be failed to load.
A mod is identified by its packageId which is described in Naming convention of package and its relative path from package root.
So example mod in Name is identified as sample:mt_face_detail/Your mod name.
And examples in Text are these;
- example-package:co_top/males/mod for male1
- example-package:co_top/males/mod for male2
- example-package:co_top/males/mod for male3
- example-package:co_top/females/mod for female1
- example-package:co_top/females/mod for female2
- example-package:co_top/females/mod for female3
By changing directory structure in package without conversion, save file made in previous versions may lost compatibility.
And csv notation mod is identified as packageId:category.csv/(Name column of mod).
So you can't have same name mod in same category within one package.
To migrate old save made in before structure changed version, place a softmig.json at package root.
Content of softmig.json should have following struction:
(package version when structure change occurs) : *(old mod id):(new mod id)
for example:
{
"1.0.1":
{
"co_top/mod for male1" : "co_top/males/mod for male1",
"co_top/mod for male2" : "co_top/males/mod for male2",
"co_top/mod for male3" : "co_top/males/mod for male3"
}
}To migrate old save made in hard mod environment, place a hardmig.json at package root.
Content of hardmig.json should have following structure:
(Category) { *(list id which you assigned in hard mod) : { "ModId": (corresponding mod id in package), "Version": (your package version) } }
for example:
{
"mt_face_detail" {
"100000": { "ModId": "mt_face_detail/Your mod name", "Version": "1.0.0" }
}
}Mod id in hardmig.json is adjusted by softmig.json, so you may need to write hardmig.json only once for your initial package release.
To support migration from hardmod, SardineTail provide conversion function.
To use this function, check Enable hardmod conversion at startup configuration option and restart game.
It will take several minutes, depend on your hardmod quantity, and when title shown up, conversion has completed.
Converted packages are generated in:
UserData/plugin/SardineTail/hardmods
Asset bundles are grouped by its minimal dependent set and packages are named after its containing asset bundle paths.
Packages are generated in structured notation style for compatibility between Aicomi and SamabakeScramble.
Same asset bundle can't loaded twice, so generated package can't coexists with hardmod, because they shares common asset bundle;
(*1) Default value of MainManifest is varies by the game.
- In Aicomi
- lib000_03
- In SamabakeScramble
- abdata

| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ShapeAnimeAB | ShapeAnime | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | ThumbAB | ThumbTex | Preset |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Asset | Store | Image | Store | Image | Store | Image | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | thumb_na |
| Name | - | Kind | Possess | Name | MainAB | NormallMapDetail | LineMask | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 99 | 99 | 99 |
| Name | - | Kind | Possess | Name | MainAB | MoleTex | ThumbAB | ThumbTex | MoleLayoutID | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0 | 99 | 0 | 0 |
| Name | - | Kind | Name | PosX | PosY | Rot | Scale | CenterX | MoveX | CenterY | MoveY | CenterScale | AddScale | ThumbAB | ThumbTex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Name | Text | Text | Text | Text | Text | Text | Text | Text | Text | Text | Store | Image |
| Default | - | 0 | 0 | -0.8 | 0 | 0 | 0 | 0 | -0.8 | 1 | sardinetail.unity3d | thumb_na |

| Name | - | Kind | Possess | Name | MainAB | EyebrowTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyelineUpTex | EyelineShadowTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyelineDownTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyelidTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyeWhiteTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |

| Name | - | Kind | Possess | Name | MainAB | EyeTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyepipilTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | ColorMaskAB | ColorMaskTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyeHiUpTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |

| Name | - | Kind | Possess | Name | MainAB | NoseTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainAB | LipTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 1/2/3/4/5 | 2/3 | 0 |
Treated as a part of coordinate.

| Name | - | Kind | Possess | Name | MainAB | CheekTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 1/2/3/4/5 | 0/1/2 | 0 |
| Name | - | Kind | Possess | Name | MainAB | EyeshadowTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 1/2/3/4/5 | 0/1/2 | 0 |
| Name | - | Kind | Possess | Name | MainAB | LiplineTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 1/2/3/4 | 0 |
| Name | - | Kind | Possess | Name | MainAB | PaintTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Name | PosX | PosY | Rot | Scale | CenterX | MoveX | CenterY | MoveY | CenterScale | AddScale | ThumbAB | ThumbTex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Name | Text | Text | Text | Text | Text | Text | Text | Text | Text | Text | Store | Image |
| Default | - | 0 | 0 | -2.5 | 0 | 0 | 0 | 0 | -2.5 | 3 | sardinetail.unity3d | thumb_na |

| Name | - | Kind | Possess | Name | MainAB | NipTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |

| Name | - | Kind | Possess | Name | MainAB | UnderhairTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |

| Name | - | Kind | Possess | Name | MainAB | NormallMapDetail | LineMask | Sex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Image | Text | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | 3 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |

| Name | - | Kind | Possess | Name | MainAB | SunburnTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 1 | 0 |
Treated as a part of coordinate.

| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
Also used for clothes paint.
| Name | - | Kind | Possess | Name | MainAB | PaintTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Name | PosX | PosY | Rot | Scale | CenterX | MoveX | CenterY | MoveY | CenterScale | AddScale | ThumbAB | ThumbTex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Name | Text | Text | Text | Text | Text | Text | Text | Text | Text | Text | Store | Image |
| Default | - | 0 | 0 | -4 | 0 | 0 | 0 | 0 | -4 | 4.5 | sardinetail.unity3d | thumb_na |

| Rear | Bangs | Side | Hair Extensions |
|---|---|---|---|
| bo_hair_b | bo_hair_F | bo_hair_s | bo_ hair_o |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | SetHair | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text |
| Default | - | 1 | 1 | (*1) | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1 | 0/4 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5 | 0/1/2/3/4/5 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5 | 0/3/4/5 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5 | 0/1/2/3/4/5 |

| Name | - | Kind | Possess | Name | MainTexAB | MainTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5 | 0/1/2/3/4/5 |

| Top | Bottom | Inner(Upper) | Inner(Lower) | Gloves | Stockings | Socks | Shoes |
|---|---|---|---|---|---|---|---|
| co_top | co_bottom | co_bra | co_shorts | co_bloves | co_panst | co_socks | co_shoes |
Also used for accessories pattern.
| Name | - | Kind | Possess | Name | MainTexAB | MainTex | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | sardinetail.unity3d | sardinetail.unity3d | thumb_na | 0 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | NormalData | StateType | Coordinate | NotBra | NoShake | Sex | OverTopMaskAB | OverTopMask | OverBotMaskAB | OverBotMask | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | MainTex03AB | MainTex03 | ColorMask03AB | ColorMask03Tex | PaintMaskAB | PaintMask | NipHide | KokanHide | HalfUndress | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Text | Text | Store | Image | Text | Text | Text |
| Default | - | 4 | 1 | (*1) | sardinetail.unity3d | 0 | 0 | 0 | 0 | 0 | 3 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 1 | 0 | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/3 | 0/1/3 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | Coordinate | HideShorts | NoShake | SkirtType | Sex | OverTopMaskAB | OverTopMask | OverBotMaskAB | OverBotMask | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | MainTex03AB | MainTex03 | ColorMask03AB | ColorMask03Tex | PaintMaskAB | PaintMask | KokanHide | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Store | Image | Text | Text | Text |
| Default | - | 4 | 1 | (*1) | sardinetail.unity3d | 0 | 0 | 1 | 0 | 0 | 3 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 0 | sardinetail.unity3d | thumb_na | 0/1/2 | 0/3 | 0/1/2/3 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | NormalData | StateType | Coordinate | MabUV | Sex | OverTopMaskAB | OverTopMask | OverBotMaskAB | OverBotMask | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | PaintMaskAB | PaintMask | NipHide | KokanHide | HalfUndress | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Text | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 1 | 1 | (*1) | sardinetail.unity3d | 0 | 0 | 0 | 0 | 3 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 1 | 0 | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/3 | 0/1/2/3 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | Sex | OverTopMaskAB | OverTopMask | OverBotMaskAB | OverBotMask | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | PaintMaskAB | PaintMask | KokanHide | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 1 | 1 | (*1) | sardinetail.unity3d | 0 | 3 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 1 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/3 | 0/1/2/3/4 | 5 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | NailHide | Sex | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | PaintMaskAB | PaintMask | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | 1 | 1 | 3 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | Sex | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | PaintMaskAB | PaintMask | KokanHide | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Store | Image | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | 1 | 3 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 0 | sardinetail.unity3d | thumb_na | 99 | 99 | 0/1/2/3 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | SocksDent | Sex | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | DentTexAB | DentTex | PaintMaskAB | PaintMask | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 1 | 1 | (*1) | sardinetail.unity3d | 1 | 0 | 3 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/5/6 | 0/1/2/3 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | StateType | ShoesType | Sex | MainTexAB | MainTex | ColorMaskAB | ColorMaskTex | MainTex02AB | MainTex02 | ColorMask02AB | ColorMask02Tex | PaintMaskAB | PaintMask | ThumbAB | ThumbTex | Image | Attribute | Detail |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Text | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Text | Text |
| Default | - | 1 | 1 | (*1) | sardinetail.unity3d | 1 | 1 | 1 | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | thumb_na | 0/1/2/3/4 | 0 | 0/1/2/3 |


| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_hair_pin | sardinetail.unity3d | thumb_na | 0/1/2/3/4 | 0/1/2/3/4/5/6/7/11 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | HideHair | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_hair_twin_L | 0 | sardinetail.unity3d | thumb_na | 0/1/2/4 | 0 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_megane | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5/6/7/11 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_bust | sardinetail.unity3d | thumb_na | 0/1/2/3/4 | 0/1/2/3/4/5/6/7/9/11 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_back | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/5/6/7 | 1 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_waist_b | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 99 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_leg_L | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/4/11 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_wrist_L | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5/6 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_ind_L | sardinetail.unity3d | thumb_na | 0/1/2/3/4/5 | 0/1/2/3/4/5/6/9/11 | 0 | 0 |
| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainData | Parent | ThumbAB | ThumbTex | Image | Attribute | Detail | Sort |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Asset | Text | Store | Image | Text | Text | Text | Text |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | a_n_kokan | sardinetail.unity3d | thumb_na | 5 | 99 | 1 | 0 |

| Name | - | Kind | Possess | Name | MainManifest | MainAB | MainTexAB | MainTex | MainTex02AB | MainTex02 | MainTex03AB | MainTex03 | ColorMaskAB | ColorMaskTex | ColorMask02AB | ColorMask02Tex | LampTexAB | LampTex | ThumbAB | ThumbTex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Store | Store | Image | Store | Image | Store | Image | Store | Image | Store | Image | Text | Image | Store | Image |
| Default | - | 0 | 1 | (*1) | sardinetail.unity3d | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | sardinetail.unity3d | 0 | 0 | sardinetail.unity3d | thumb_na |

| Name | - | Kind | Possess | Name | Sex | MainManifest | MainAB | MainData | ShapeAnimeAB | ShapeAnime | MainTexAB | MainTex |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Type | - | Text | Text | Name | Text | Text | Store | Asset | Store | Asset | Store | Image |
| Default | - | 0 | 1 | 3 | (*1) | sardinetail.unity3d | sardinetail.unity3d | sardinetail.unity3d |
Texture wrap mode of packaged png images are determined by its name and path.
ThumbTex.png will be wrap mode of U:Clamp, V:Clamp, W:Clamp wherever it ware.
Others are determined by its first path; basically category name.
Textures contained under these directories will be wrap mode of U:Repeat, V:Repeat, W:Repeat;
- bo_body
- bo_head
- co_bot
- co_bra
- co_gloves
- co_panst
- co_shoes
- co_shorts
- co_socks
- co_tops
- mt_body_detail
- mt_eyeshadow
- mt_face_detail
- mt_sunburn
- mt_pattern
Others will be wrap mode of U:Clamp, V:Clamp, W:Clamp.
And like ThumbTex.png, there are special names for specific wrap modes.
| Name | Wrap Mode(U) | Wrap Mode(V) | Wrap Mode(W) |
|---|---|---|---|
| RepeatRepeatRepeat.png | Repeat | Repeat | Repeat |
| RepeatRepeatClamp.png | Repeat | Repeat | Clamp |
| RepeatRepeatMirror.png | Repeat | Repeat | Mirror |
| RepeatRepeatMirrorOnce.png | Repeat | Repeat | Mirror Once |
| RepeatClampRepeat.png | Repeat | Clamp | Repeat |
| RepeatClampClamp.png | Repeat | Clamp | Clamp |
| RepeatClampMirror.png | Repeat | Clamp | Mirror |
| RepeatClampMirrorOnce.png | Repeat | Clamp | Mirror Once |
| RepeatMirrorRepeat.png | Repeat | Mirror | Repeat |
| RepeatMirrorClamp.png | Repeat | Mirror | Clamp |
| RepeatMirrorMirror.png | Repeat | Mirror | Mirror |
| RepeatMirrorMirrorOnce.png | Repeat | Mirror | Mirror Once |
| RepeatMirrorOnceRepeat.png | Repeat | Mirror Once | Repeat |
| RepeatMirrorOnceClamp.png | Repeat | Mirror Once | Clamp |
| RepeatMirrorOnceMirror.png | Repeat | Mirror Once | Mirror |
| RepeatMirrorOnceMirrorOnce.png | Repeat | Mirror Once | Mirror Once |
| ClampRepeatRepeat.png | Clamp | Repeat | Repeat |
| ClampRepeatClamp.png | Clamp | Repeat | Clamp |
| ClampRepeatMirror.png | Clamp | Repeat | Mirror |
| ClampRepeatMirrorOnce.png | Clamp | Repeat | Mirror Once |
| ClampClampRepeat.png | Clamp | Clamp | Repeat |
| ClampClampClamp.png | Clamp | Clamp | Clamp |
| ClampClampMirror.png | Clamp | Clamp | Mirror |
| ClampClampMirrorOnce.png | Clamp | Clamp | Mirror Once |
| ClampMirrorRepeat.png | Clamp | Mirror | Repeat |
| ClampMirrorClamp.png | Clamp | Mirror | Clamp |
| ClampMirrorMirror.png | Clamp | Mirror | Mirror |
| ClampMirrorMirrorOnce.png | Clamp | Mirror | Mirror Once |
| ClampMirrorOnceRepeat.png | Clamp | Mirror Once | Repeat |
| ClampMirrorOnceClamp.png | Clamp | Mirror Once | Clamp |
| ClampMirrorOnceMirror.png | Clamp | Mirror Once | Mirror |
| ClampMirrorOnceMirrorOnce.png | Clamp | Mirror Once | Mirror Once |
| MirrorRepeatRepeat.png | Mirror | Repeat | Repeat |
| MirrorRepeatClamp.png | Mirror | Repeat | Clamp |
| MirrorRepeatMirror.png | Mirror | Repeat | Mirror |
| MirrorRepeatMirrorOnce.png | Mirror | Repeat | Mirror Once |
| MirrorClampRepeat.png | Mirror | Clamp | Repeat |
| MirrorClampClamp.png | Mirror | Clamp | Clamp |
| MirrorClampMirror.png | Mirror | Clamp | Mirror |
| MirrorClampMirrorOnce.png | Mirror | Clamp | Mirror Once |
| MirrorMirrorRepeat.png | Mirror | Mirror | Repeat |
| MirrorMirrorClamp.png | Mirror | Mirror | Clamp |
| MirrorMirrorMirror.png | Mirror | Mirror | Mirror |
| MirrorMirrorMirrorOnce.png | Mirror | Mirror | Mirror Once |
| MirrorMirrorOnceRepeat.png | Mirror | Mirror Once | Repeat |
| MirrorMirrorOnceClamp.png | Mirror | Mirror Once | Clamp |
| MirrorMirrorOnceMirror.png | Mirror | Mirror Once | Mirror |
| MirrorMirrorOnceMirrorOnce.png | Mirror | Mirror Once | Mirror Once |
| MirrorOnceRepeatRepeat.png | Mirror Once | Repeat | Repeat |
| MirrorOnceRepeatClamp.png | Mirror Once | Repeat | Clamp |
| MirrorOnceRepeatMirror.png | Mirror Once | Repeat | Mirror |
| MirrorOnceRepeatMirrorOnce.png | Mirror Once | Repeat | Mirror Once |
| MirrorOnceClampRepeat.png | Mirror Once | Clamp | Repeat |
| MirrorOnceClampClamp.png | Mirror Once | Clamp | Clamp |
| MirrorOnceClampMirror.png | Mirror Once | Clamp | Mirror |
| MirrorOnceClampMirrorOnce.png | Mirror Once | Clamp | Mirror Once |
| MirrorOnceMirrorRepeat.png | Mirror Once | Mirror | Repeat |
| MirrorOnceMirrorClamp.png | Mirror Once | Mirror | Clamp |
| MirrorOnceMirrorMirror.png | Mirror Once | Mirror | Mirror |
| MirrorOnceMirrorMirrorOnce.png | Mirror Once | Mirror | Mirror Once |
| MirrorOnceMirrorOnceRepeat.png | Mirror Once | Mirror Once | Repeat |
| MirrorOnceMirrorOnceClamp.png | Mirror Once | Mirror Once | Clamp |
| MirrorOnceMirrorOnceMirror.png | Mirror Once | Mirror Once | Mirror |
| MirrorOnceMirrorOnceMirrorOnce.png | Mirror Once | Mirror Once | Mirror Once |
Cartesian product of (Repeat,Clamp,Mirror,MirrorOnce) for each (U,V,W). (there might be typo I swear.)
You can utilize these special names via assigning in values.json or csv notation.