Skip to content

Dynamic Cosmetics Editor for Custom Models#1617

Open
Jameriquiah wants to merge 5 commits intoHarbourMasters:developfrom
Jameriquiah:dynamic-cosmetics-editor
Open

Dynamic Cosmetics Editor for Custom Models#1617
Jameriquiah wants to merge 5 commits intoHarbourMasters:developfrom
Jameriquiah:dynamic-cosmetics-editor

Conversation

@Jameriquiah
Copy link
Copy Markdown
Contributor

@Jameriquiah Jameriquiah commented Mar 25, 2026

been working on this for a minute... basically this allows custom models to have their own set cosmetics editor entries.

the way a modder would use this is by adding a tag into the primitive or environment color line in the material xml, like so

<SetPrimColor M="0" L="0" R="255" G="255" B="255" A="255" CosmeticEntry="Entry Name"/>

if this is merged i'll add a way to automate this in my fast64 branch so manually editing wont be necessary.
this will also disable the vanilla cosmetics editor options when custom models are used for those forms, due to them just causing visual bugs or straight up crashing the game.

the entries that modders set can be named whatever the modder in question chooses, the default color the entry uses will be whatever the materials prim color is set as.

it should in theory work with any model in the game, but i dont have the patience to test replacing every single model in the entire game. thoroughly tested with replacements of all link's forms.

models set up for this for testing purposes:
cosmeticseditortestmod.zip

Build Artifacts

@Jameriquiah Jameriquiah reopened this Mar 25, 2026
@Malkierian
Copy link
Copy Markdown
Contributor

Yo, this actually sounds sick.

@Jameriquiah
Copy link
Copy Markdown
Contributor Author

Yo, this actually sounds sick.

thanks :3 worked hard, also my bad lol didnt mean to close and reopen

@Jameriquiah
Copy link
Copy Markdown
Contributor Author

ok that should work i think

Comment on lines +92 to +130
return 0;
}
if (materialPath.starts_with("objects/object_link_nuts/")) {
return 1;
}
if (materialPath.starts_with("objects/object_link_goron/")) {
return 2;
}
if (materialPath.starts_with("objects/object_link_zora/")) {
return 3;
}
if (materialPath.starts_with("objects/object_link_boy/")) {
return 4;
}
if (materialPath.starts_with("objects/object_test3/")) {
return 5;
}

return 6;
}

static void MarkDynamicCosmeticsAvailable(const std::string& materialPath) {
switch (GetDynamicMaterialFormSortOrder(materialPath)) {
case 0:
customHumanCosmeticsAvailable = true;
break;
case 1:
customDekuCosmeticsAvailable = true;
break;
case 2:
customGoronCosmeticsAvailable = true;
break;
case 3:
customZoraCosmeticsAvailable = true;
break;
case 4:
customFierceDeityCosmeticsAvailable = true;
break;
case 5:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For readability's sake, these two functions could use an enum to represent form cosmetic availability.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

alright :3

@Jameriquiah
Copy link
Copy Markdown
Contributor Author

Jameriquiah commented Apr 7, 2026

actually can someone slap a do not merge or something on this for the time being lol

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants