Jump to content

Recommended Posts

Posted (edited)

Hello, I'm still new to making Mods and I need some help.
I'm trying to make this mod to add new kinder alternative facial expressions for 1.21.
I was able to get the models to show up in the game and appear in the drop down along side the vanilla faces.

image.png.902fbb10565334ee39fcbaef1bf923d7.png
But for the life of me I can not find the Texture file that the vanilla faces are referencing.
This is what the 1.21 vanilla Caring Face references for it's texture
image.png.941dd189347bff36c278fdf7b1b14137.png


I Can't find it in the Game's Texture folders.
I've tried to just copy and past all of the Textures in game/textures/entity/humanoid into my Mods assets/modid/textures folder
and then Copy and past how the Vanilla faces reference it into my Caring Alt Face like this.
image.png.ec51ff5f5a73eb12b11b474cc221e4bb.png

but that won't work and in game it will just render the face all white like this.

image.png.4c5992e2afe14b8f06b5d6d544081e54.png

 

What I was able to do is get another Texture to Work.
I got my faces to use the seraph-naked-hairless texture and have that render in-game

image.png.4129d304b1b0b1f9fa6f0c72d7d6526e.png

 

But as you can see it doesn't look right. there isn't supposed to be White around the Pupil. the Blue for the mouth and eyebrows are not the same as the vanilla 1.21 faces. and the Eye color you choose doesn't actually show up with my Faces and instead is always this bright blue.
1st image is my Caring-Alt using the "wrong" texture. and the 2nd picture is what the Vanilla 1.21 Caring face looks like. Both pics have the Sandy Eye color selected.

image.png.9d16c8301a6bf2f565a895bbc035e84a.pngimage.png.b5ba75efc77605d088c93c143a30b386.png

I don't know what I'm doing wrong or Missing for getting my Faces to use the Same Texture as the Vanilla Faces.

Edited by ArtGnat
  • Like 2
  • ArtGnat changed the title to Can't Find the Texture the game uses for Facial Expression in 1.21
Posted

I think it's due to the vanilla expressions being shapes, rather than plain textures. Vintagestory > assets > game > entities > humanoid will take you to player.json, which contains the code bits for texturing the player model, as well as pulling the correct shape needed for expressions and such. You can find the shape data for expressions by going to Vintagestory > assets > game > shapes > entity > humanoid > seraphskinparts > face

Do note that in the case of shapes, you'll need to be using the VS Model Creator in order to create new parts, or otherwise alter existing ones. You can find the download in the client area, and tutorials on the wiki to help you get started on learning how to use it.

https://wiki.vintagestory.at/Modding:Model_Creator_Portal

  • Like 1
Posted
44 minutes ago, LadyWYT said:

I think it's due to the vanilla expressions being shapes, rather than plain textures. Vintagestory > assets > game > entities > humanoid will take you to player.json, which contains the code bits for texturing the player model, as well as pulling the correct shape needed for expressions and such. You can find the shape data for expressions by going to Vintagestory > assets > game > shapes > entity > humanoid > seraphskinparts > face

Do note that in the case of shapes, you'll need to be using the VS Model Creator in order to create new parts, or otherwise alter existing ones. You can find the download in the client area, and tutorials on the wiki to help you get started on learning how to use it.

https://wiki.vintagestory.at/Modding:Model_Creator_Portal

Hi thanks for the response!
I already have been using the VS Model Creator. that's how I made the altered shape files.
And I also have been using the player.json found in Vintagestory > assets > game > entities > humanoid. Using a patch file for the player.json is what let's me have the game actually make my new face expressions appear in the Character Select screen. but it does not seem to handle what texture the face expressions use from what I can tell.

Instead it seems the texture is defined in the shape's json file like the screenshots I showed in my post

5 hours ago, ArtGnat said:

image.png.941dd189347bff36c278fdf7b1b14137.png


That's how I was able to get the wrong texture to apply to the face by defining it in the shape json file

5 hours ago, ArtGnat said:

image.png.4129d304b1b0b1f9fa6f0c72d7d6526e.png


My issue is that the Texture that the Vanilla Facial expressions seem to define/use in their shape json files is no where to be found. and when I try to use the same texture path as the vanilla shapes have defined but in my Facial expressions it won't work. even if I just to ensure I have the texture, copy over all the humanoid textures to my mod. it still doesn't find anything and just renders white.

Posted
5 hours ago, ArtGnat said:

I've tried to just copy and past all of the Textures in game/textures/entity/humanoid into my Mods assets/modid/textures folder
and then Copy and past how the Vanilla faces reference it into my Caring Alt Face like this.

 

14 minutes ago, ArtGnat said:

My issue is that the Texture that the Vanilla Facial expressions seem to define/use in their shape json files is no where to be found. and when I try to use the same texture path as the vanilla shapes have defined but in my Facial expressions it won't work.

Hmmmm...if you copied the textures into your mod's folder, have you tried setting the file pathing for you custom expressions to reference what's in the mod folder, instead of the vanilla texture path? I'm thinking it's a pathing issue somewhere, or a mislabeled asset, but it's hard to say for sure without having the mod file to dig through and compare. As @Diff says, do you have a .zip file to share, or a draft uploaded to the database that you could share a link to?

The only other thing I can think of is that the white is due to the modded eye model for the expression is slightly too big for what the vanilla texture is, leading to the lighter color around the pupil. On you comparison image, the seraph on the left matches the colors found in the seraph-naked-hairless.png file, and the "white" is the same light turquoise color of the skin. 

Incidently, seraph.png and seraph-naked.png are found in the same place that seraph-naked-hairless.png is found; Vintagestory > assets > game > textures > entity > humanoid

Posted (edited)

What do you mean you can't find the textures?

Like, they're not in any of the texture directories?

image.png.695d434585fe6e9c5bed84e25847138a.png

image.png.0b6866ce1ad8991684db7565c91fc46a.png

 

Or do you mean it does not render when in game?

 

How are your mod structured? Are the new face expression files in your mods namespace, or added to the game namespace?

Have you tried to add game: prefix to the texture paths?

"textures": {
	"seraph": "game:entity/humanoid/seraph-naked"
}

 

Edited by xXx_Ape_xXx
Posted (edited)

SOLVED
Thank you all for your replies! I was able to figure it out.

So I still don't know what the vanilla face shape files are referencing when using "seraph": "entity/humanoid/seraph-naked".
but I figured out why it wasn't working when I used the same texture path in my face shape jsons. and that's because the texture also get's referenced multiple times throughout the shape file as "#seraph". where I had it saying "#seraph-naked-hairless" due to when I had it assigned to that texture since that one rendered before.

after I changed all those to use "#seraph" it worked!
image.thumb.png.40e7a37a880fd1f03e05f1b1f7dc0f9c.png

Edited by ArtGnat
  • Like 2
Posted
6 hours ago, xXx_Ape_xXx said:

What do you mean you can't find the textures?

Like, they're not in any of the texture directories?


So I can make them use the seraph-naked.png or the seraph-naked-hairless.png but when rendered in game like I showed in my Topic post. it would force the eyes to be blue and so the eye color you chose won't affect it. and it had a weird white around the eyes. and the blue for the mouth and eyebrows were not the same as the vanilla faces.

17 hours ago, ArtGnat said:

But as you can see it doesn't look right. there isn't supposed to be White around the Pupil. the Blue for the mouth and eyebrows are not the same as the vanilla 1.21 faces. and the Eye color you choose doesn't actually show up with my Faces and instead is always this bright blue.
1st image is my Caring-Alt using the "wrong" texture. and the 2nd picture is what the Vanilla 1.21 Caring face looks like. Both pics have the Sandy Eye color selected.

image.png.9d16c8301a6bf2f565a895bbc035e84a.pngimage.png.b5ba75efc77605d088c93c143a30b386.png



So when the vanilla faces shape files are referencing "seraph": "entity/humanoid/seraph-naked" they must be doing something funky that allows the right colors to appear and to let the eye color chosen to affect the texture. because when I apply any texture to my shapes using the VSmodelcreator in the file it would end up looking like this "seraph-naked": "entity/humanoid/seraph-naked". where it repeats the name of the texture twice, once at the start and once at the end. but the vanilla's face shapes texture reference has a different name at the beginning and end of it's texture path. "seraph": "entity/humanoid/seraph-naked".

I appreciate the help though! although I still don't understand how "seraph": "entity/humanoid/seraph-naked" works in the vanilla face shapes. I made a reply post showing how I was able to get it to work for my Face Shapes.

Posted

I don't completely understand your question, so apologies if this is completely off base, but I think it's what @xXx_Ape_xXx is referencing with mod domains. Without a prefix, paths will use the same assets folder as the mod they come from, so they're referencing assets/game/textures/entity/humanoid/seraph-naked.png. The existing faces come from the game mod and look for textures also from the game mod. If you want to tap into the same texture, you can either copy those files into assets/yourmod/... or change it to game:entity/humanoid/seraph-naked to reference the original from the game mod.

The "seraph": means that inside this json, it'll be referenced as "#seraph", and the path after that is the path to the texture, inside the textures folder of whatever mod you're referencing. By default, your own mod.

Posted (edited)
On 8/20/2025 at 1:06 PM, Diff said:

I don't completely understand your question, so apologies if this is completely off base, but I think it's what @xXx_Ape_xXx is referencing with mod domains. Without a prefix, paths will use the same assets folder as the mod they come from, so they're referencing assets/game/textures/entity/humanoid/seraph-naked.png. The existing faces come from the game mod and look for textures also from the game mod. If you want to tap into the same texture, you can either copy those files into assets/yourmod/... or change it to game:entity/humanoid/seraph-naked to reference the original from the game mod.

The "seraph": means that inside this json, it'll be referenced as "#seraph", and the path after that is the path to the texture, inside the textures folder of whatever mod you're referencing. By default, your own mod.

Maybe I'm just phrasing it weird, sorry. but I didn't know how else to talk about it.
 

I was able to get it to work in the end. as shown in this post below.
it just confused me that it starts with seraph but then ends with seraph-naked, because when I applied seraph-naked or any other texture to the shape using the VS model creator. the Shape json file would have the same name of the texture at the start and the end. it would say "seraph-naked": "entity/humanoid/seraph-naked" but the vanilla faces texture looked like "seraph": "entity/humanoid/seraph-naked".

On 8/20/2025 at 7:13 AM, ArtGnat said:

SOLVED
Thank you all for your replies! I was able to figure it out.

So I still don't know what the vanilla face shape files are referencing when using "seraph": "entity/humanoid/seraph-naked".
but I figured out why it wasn't working when I used the same texture path in my face shape jsons. and that's because the texture also get's referenced multiple times throughout the shape file as "#seraph". where I had it saying "#seraph-naked-hairless" due to when I had it assigned to that texture since that one rendered before.

after I changed all those to use "#seraph" it worked!
image.thumb.png.40e7a37a880fd1f03e05f1b1f7dc0f9c.png

Edited 22 hours ago by ArtGnat

and I understand domains to some extent. but there is no "seraph" Folder/domain in the vanilla folders for the "seraph-naked" texture to reside. so it just all confused me. even more because when I do just use the textures provided (specifically the seraph-naked.png) and apply it through the VSmodel software it will work and show up in game but it would show with permanent Blue eyes and white around the eye which is not how the vanilla faces look like. like shown below.

image.png.907b5a0c2960128bcd2a2bd759e12843.png

Hopefully I was able to make it more clear where my confusion/question was coming from, but apologizes If I confused you more.

Edited by ArtGnat
Posted
1 hour ago, ArtGnat said:

and I understand domains to some extent. but there is no "seraph" Folder/domain in the vanilla folders for the "seraph-naked" texture to reside. so it just all confused me. even more because when I do just use the textures provided (specifically the seraph-naked.png) and apply it through the VSmodel software it will work and show up in game but it would show with permanent Blue eyes and white around the eye which is not how the vanilla faces look like. like shown below.

Ah, I think that's the misunderstanding. There's two flavors of colon with totally different meanings. Domains always have a : separating them from the rest of the path, but inside the quotes with the rest of the path. For this line in your face files:

"seraph": "entity/humanoid/seraph-naked"

"seraph": isn't the domain, it's the key/name/ID used to refer to this texture later, as "#seraph". Change that, and you'd need to change #theothers. A texture referring to a specific domain might look like this:

"seraph": "game:entity/humanoid/seraph-naked"

Here, "game" is the domain. And like I mentioned earlier, if there's no domain, it defaults to the mod's own domain.

So for the original files from the built-in "game" mod, they default to the "game" domain, and since they're looking for a texture, VS will look for a PNG inside the textures folder inside the domain: "assets/<domain>/textures/<the path you see in the JSON>.png". For the original game files, that ultimately adds up to "assets/game/textures/entity/humanoid/seraph-naked.png" which I do see existing:

Screenshot2025-08-21at11_57_58PM.thumb.png.2af384ed1c6a8f6951aa1dc184cd7adb.png

To reference the same file in your mod, you'd need to use "seraph": "game:entity/humanoid/seraph-naked". If you use the existing paths verbatim, they'd default to the "insertyourmodhere" domain and look inside "assets/insertyourmodhere/textures/entity/humanoid/seraph-naked.png" instead. 

  • Like 1
Posted
1 hour ago, Diff said:

Ah, I think that's the misunderstanding. There's two flavors of colon with totally different meanings. Domains always have a : separating them from the rest of the path, but inside the quotes with the rest of the path. For this line in your face files:

"seraph": "entity/humanoid/seraph-naked"

"seraph": isn't the domain, it's the key/name/ID used to refer to this texture later, as "#seraph". Change that, and you'd need to change #theothers. A texture referring to a specific domain might look like this:

"seraph": "game:entity/humanoid/seraph-naked"

Here, "game" is the domain. And like I mentioned earlier, if there's no domain, it defaults to the mod's own domain.

So for the original files from the built-in "game" mod, they default to the "game" domain, and since they're looking for a texture, VS will look for a PNG inside the textures folder inside the domain: "assets/<domain>/textures/<the path you see in the JSON>.png". For the original game files, that ultimately adds up to "assets/game/textures/entity/humanoid/seraph-naked.png" which I do see existing:

Screenshot2025-08-21at11_57_58PM.thumb.png.2af384ed1c6a8f6951aa1dc184cd7adb.png

To reference the same file in your mod, you'd need to use "seraph": "game:entity/humanoid/seraph-naked". If you use the existing paths verbatim, they'd default to the "insertyourmodhere" domain and look inside "assets/insertyourmodhere/textures/entity/humanoid/seraph-naked.png" instead. 

Thanks I think that helped me understand it a little bit!
So can the "Seraph": be named whatever I want as long as I also replace all the #seraph's in the rest of the shape file with what I changed "Seraph": to?
or is that a no, cuz the game is looking for the "Seraph": ID specifically?

and if that's the case. is that why when I did initially use the seraph-naked.png for my Face shapes but with the "Seraph-naked": at the beginning instead of "Seraph":, it wasn't using it the same way as the other vanilla face shapes?
and causing the weird texturing in the eyes as seen bellow, also locking out the ability for the eye colors to influence it.
image.png.a366aa7ff3ba6c1b9d1d18e32f137bae.png

Posted
11 hours ago, ArtGnat said:

So can the "Seraph": be named whatever I want as long as I also replace all the #seraph's in the rest of the shape file with what I changed "Seraph": to?

Nailed it.

12 hours ago, ArtGnat said:

and if that's the case. is that why when I did initially use the seraph-naked.png for my Face shapes but with the "Seraph-naked": at the beginning instead of "Seraph":, it wasn't using it the same way as the other vanilla face shapes?
and causing the weird texturing in the eyes as seen bellow, also locking out the ability for the eye colors to influence it.

This one I'm not sure. Did some digging in the files on my machine, but I'm not not immediately seeing clues for this. If it's still broken, that's something that a small broken example would be handy in debugging.

  • Like 1
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.