Sprites are made with D・紅茶's PSD resources. https://d-koutya.fanbox.cc ===== Shortly about naming On game load each sprite is initialized under certain category within a multi-level resource dictionary SPRITE_RES. Subcategories are defined via converting filename to path splitted by "-" symbol. I.e. "face-brows-normal" would create a key "face" inside SPRITE_RES and assign another empty dictionary to it, then add "brows" entry in it with another empty dictionary as a value and finally add "normal" item under "brows" under "face". SPRITE_RES = {"face" : {"brows" : {"normal" : {}}}} Any subsequent sprites will be added inside existing categories or create a new ones. Every sprite name must match intended path in order for the game to find it. ===== Instruments and sprite set generation When preparing a PSD, particular structure must persist as well for an easy batch export: this can be arranged with custom scripts. For photoshop I advise using this one: https://github.com/antipalindrome/Photoshop-Export-Layers-to-Files-Fast Download last release, extract .jsm and .json files from there and place them inside your photoshop directory under . To use it, navigate to File -> Scripts and choose following settings: ・ Export -> Ignore Layers Starting With: ! ・ Filenames -> Use layer and parent group names ・ Filenames -> Use custom delimiter: - ・ Export As -> PNG-24 with Transparency checked ・ Modify Layers -> Scale: 50% Click "Save and Close". Now you just need a PSD with correct layout to prepare entire sprite set with only couple clicks. ===== Steps for creating a formalized PSD Please follow next steps to minimize possible issues and excessive work. Keep in mind that these PSDs may be used by artists to complete character's sets in the future so everything must be of original size with transparent layout. ▌Open this txt and pin it on top of other windows using Notepad++; ▌Make a copy of PSD file and name it corresponding to character's .tsc file; ▌Open PSD and get rid of the root folder with character name so there are only 4-5 subfolders present on top level; ▌It would be helpful to disable layer thumbnails by clicking RMB on layers panel, there will be a LOT of them; ▌Delete 漫符 folder with stickers, rename other folders to "face", "wear" and "body" accordingly. Put 顔色 under "face" and create new "vanity" group; ▌Inside "face" there must be 4 groups: "emo", "brows", "eyes" and "mouth"; ▌You may notice that there are multiple groups for the eyes, name two of them as "!opened" and "!half" accordingly, delete group with winking expressions (make it yourself later), move everything from the group with closed eyes and delete it too; ▌Rename unique expressions like "happy" or "angry" in "eyes" folder right away; ▌Find tears layer inside one of the groups, name it "tears" and move to "emo" group, tears in other groups should be the same so just delete them; ▌Back in "!opened" and "!half" folders, rename eyelashes layer to "lashes", find whites layer and rename to "whites"; ▌Rename groups to "big", "big avert", "small", "small avert" like in example below both in "!opened" and "!half" folders; ▌Optionally, rename irises, sparkles and highlights layers inside each group as well for better clarity; ▌Next you're gonna combine these layers but keep the originals intact for future use: - Select "lashes" and "whites" layers; - Drag them while holding Alt to duplicate them, do this 12 times for any "big" group and 8 times for "small" groups; - Duplicate each folder with irises 3 and 2 times accordingly and place it between "lashes" and "whites"; - Inside each copy hide both stars and highlights, only stars and keep both accordingly; - Combine these sets; ▌Name each set according to the list, i.e. "normal" or "stars-avert-half" and move to "eyes" root folder; -[eyes] └ -[!opened] // keep this for reference, won't be exported └ lashes // duplicate this to combine in a new layer └ -[big] // duplicate this to combine in a new layer └ stars // better rename for clarity └ spec // better rename for clarity └ iris // better rename for clarity └ +[big avert] // keep this for reference └ +[small] // keep this for reference └ +[small avert] // keep this for reference └ whites // duplicate this to combine in a new layer └ +[!half] // keep this for reference, won't be exported └ closed // these must be already present, just rename └ happy // these must be already present, just rename └ normal // place combined layers here └ stars-avert-half // place combined layers here ▌Once main expressions are ready, hide "!opened" and "!half" folders, hopefully won't need them anymore; ▌Combine existing layers to make "wink" and "drunk" expressions; ▌Now proceed to eyebrows and mouth sprites, that should be much easier; ▌Rename 4 eyebrows layers to "normal", "sad", "angry" and "surprised", duplicate normal one and move few pixels higher, call it "raised"; ▌It may be difficult to match all mouths with listed expressions, name every unused layer as "!pending" and place them to the top of "mouth" group; ▌If nothing left for "normal" expression, just duplicate one you think character is more proned to; ▌For wear layers try to split them when possible, i.e. split bikini to "swim-top" and "swim-bot", if set has no underwear - name it "bra" and "panties" instead; ▌[!!!] Now important part: every PSD must be cropped/expanded to a power of 100px with head centered horizontally. You can use the scale from an example to see how much pixels to cut or add from each side. If you set up export script correctly, outcoming layers will have half size with 0 at the end: 1730x1180 -> 1700x1200 -> 850x600 1380x830 -> 1800x900 -> 900x450 (oversized due to head X position) ===== Notes ・ Below is the list of allowed filenames that are recognized by the engine. ・ Mandatory layers are marked with , any other are optional but the more the better. ・ Addition of "-backdrop" to the end of a filename will load that piece along with a base sprite but it will be drawn behind anything else, useful for garments and some hats (wings/tails have negative z-order already). ・ Addition of "-foredrop" will draw the sprite with body z-order, useful for shadows. ・ Some sprites may have a variation number in the end, i.e. pubic hair style/growth stage or clothes deterioration. If a sprite with no number exists, game will consider it as the only one. face-emo-blush use the most intense one face-emo-shade [?] face shadow face-emo-tears [?] for use only with opened eyes face-emo-tears-closed [?] for use only with closed eyes face-brows-normal - - face-brows-sad [?] / \ face-brows-angry [?] \ / face-brows-surprised [?] - \ might need to make this one yourself face-brows-raised - - but little higher face-eyes-normal ( Э)(Э ) regular eyes face-eyes-empty [?] ( O)(O ) no highlight face-eyes-stars [?] ( ✧)(✧ ) starred eyes face-eyes-normal-avert [?] (Э )(Э ) regular eyes, looking aside face-eyes-stars-avert [?] (✧ )(✧ ) starred eyes, looking aside face-eyes-empty-avert [?] (O )(O ) no highlight, looking aside face-eyes-normal-small [?] ( э)(э ) small irises face-eyes-empty-small [?] ( o)(o ) no highlight face-eyes-normal-small-avert [?] (э )(э ) small irises, looking aside face-eyes-empty-small-avert [?] (o )(o ) no highlight, looking aside face-eyes-normal-half [?] same as above but half-closed face-eyes-empty-half [?] same as above but half-closed face-eyes-normal-avert-half [?] same as above but half-closed face-eyes-empty-avert-half [?] same as above but half-closed face-eyes-normal-small-half [?] same as above but half-closed face-eyes-empty-small-half [?] same as above but half-closed face-eyes-normal-small-avert-half [?] same as above but half-closed face-eyes-empty-small-avert-half [?] same as above but half-closed face-eyes-closed - - face-eyes-wink [?] - o face-eyes-drunk [?] o O face-eyes-happy [?] ^ ^ face-eyes-angry [?] > < face-eyes-funny [?] @ @ face-eyes-goofy [?] σ σ / ● ● - confused or surprised face-eyes-smirk [?] ● ● / σ σ - incase of smug face-mouth-normal neutral expression or smile face-mouth-smile [?] kinda must have too face-mouth-sad [?] kinda must have too face-mouth-open [?] any open, better neutral expression face-mouth-wide [?] wide open face-mouth-happy [?] open smile face-mouth-timid [?] little opened (saying o) face-mouth-shy [?] a "~" like shape face-mouth-clench [?] teeth visible face-mouth-grin [?] sinister smile face-mouth-meh [?] annoyed or tired face-mouth-tongue [?] tongue out, not present in psds vanity-headdress [?] persistent head accessory (not a hat) vanity-hairdress [?] persistent hair accessory (secondary) vanity-glasses vanity-ears vanity-wings vanity-tail vanity-vibrator [?] pink egg vanity-gag [?] mouth gag vanity-item [?] something else (Satori eye?) vanity-weapon [?] stopwatch on Sakuya, spear on Remilia etc. wear-?????-backdrop [?] background addition to any piece, behind everything wear-?????-foredrop [?] background addition to any piece, behind other wears wear-?????-torn [?] damaged variation wear-?????-sleep [?] pajama variant, preferable for "upper" and "lower" wear-?????-swim [?] swimming gear, preferable for "bra" and "panties" wear-?????-parade [?] holiday variant wear-?????-winter [?] warm variant wear-hat [?] do not confuse with headwear wear-garment [?] cloak, coat, can cover entire body wear-uppest wear-lowest wear-upper wear-lower wear-bra wear-panties wear-belt wear-gloves wear-pantyhose wear-socks wear-boots wear-towel-full [?] bathing set, full coverage wear-towel-top [?] bathing set, lifted wear-towel-bot [?] bathing set, wear on hips (topless) wear-bandaids-top [?] alternate underwear wear-bandaids-bot [?] alternate underwear wear-bondage [?] ropes body-base just a body+hair with no visible nipples body-mask [?] bitmap mask for skin only (no hair included) body-wetness [?] overlay for stat body-dirtiness [?] overlay for stat body-genitals-female-0 [WIP] vagina; arousal stage 0 or default body-genitals-male-0 [WIP] penis + balls; erection stage 0 or default body-genitals-futa-0 [WIP] penis only; erection stage 0 or default body-nipples-0 [WIP] pregnancy stage 0 or default body-hair-pubic-0 [WIP] growth stage 0 or default body-hair-pubic-16 [WIP] thin lane body-hair-pubic-32 [WIP] trimmed stage 0 body-hair-pubic-48 [WIP] triangle stage 0 body-hair-pubic-64 [WIP] heart-shaped stage 0 body-hair-armpit-0 [WIP] growth stage 0 or default