Add appearance tint syncing (appearance v3)
Introduce tint syncing for skin/complection/makeup/beard by adding RemoteAppearanceTint and a tints vector, and bump appearance payload version to 3. Parse/emit tints in networking and update fake server/client test payloads. Capture live Player/NPC tintingData during appearance capture. Apply tints to proxies by updating existing entries or reconstructing missing ones via template resolution and MakeTintEntry (game allocator + vtable fixup); unresolved templates are skipped with throttled warnings. Update docs/changelog and add logging for applied tints. Backwards compatible with v1/v2 packets.
This commit is contained in:
@@ -59,9 +59,23 @@ namespace F4T::RemotePlayerState
|
||||
float scale[3]{ 1.0F, 1.0F, 1.0F };
|
||||
};
|
||||
|
||||
// Character tint layer (TESNPC/PlayerCharacter tintingData entry).
|
||||
// Drives skin tone, complexion, makeup, dirt, scars, and beard shade.
|
||||
struct RemoteAppearanceTint
|
||||
{
|
||||
std::uint16_t id{}; // idLink, matches a race tint template uniqueID
|
||||
std::uint32_t type{}; // BGSCharacterTint::EntryType (mask/palette/texture)
|
||||
std::uint8_t value{}; // tingingValue intensity (0-255)
|
||||
std::uint32_t color{}; // ARGB packed color (palette entries only)
|
||||
std::uint16_t swatch{}; // swatchID (palette entries only)
|
||||
bool hasColor{ false }; // whether color/swatch are meaningful
|
||||
|
||||
bool operator==(const RemoteAppearanceTint&) const = default;
|
||||
};
|
||||
|
||||
struct RemoteAppearance
|
||||
{
|
||||
std::uint32_t version{ 2 };
|
||||
std::uint32_t version{ 3 };
|
||||
std::uint32_t raceFormId{};
|
||||
float height{ 1.0F };
|
||||
RemoteAppearanceMorphWeight morphWeight;
|
||||
@@ -72,6 +86,7 @@ namespace F4T::RemotePlayerState
|
||||
std::vector<RemoteAppearanceMorph> morphSliders;
|
||||
std::vector<float> morphRegionSliders;
|
||||
std::vector<RemoteAppearanceFacialBoneMorph> facialBoneMorphs;
|
||||
std::vector<RemoteAppearanceTint> tints;
|
||||
};
|
||||
|
||||
struct RemotePlayerState
|
||||
|
||||
Reference in New Issue
Block a user