Add body type selection for nonbinary characters and reduce preview rotation sensitivity

Nonbinary characters can now choose between masculine and feminine body types in character creation, with real-time preview updates and full appearance customization. Body type preference is saved to character config and persists across sessions. Also reduces character preview drag-to-rotate sensitivity from 0.5 to 0.2 for better control.
This commit is contained in:
Kelsi 2026-02-09 17:56:04 -08:00
parent ebac7eb135
commit 7c28b80135
8 changed files with 50 additions and 11 deletions

View file

@ -114,6 +114,7 @@ struct Character {
Race race; // Character race
Class characterClass; // Character class (renamed from 'class' keyword)
Gender gender; // Character gender
bool useFemaleModel = false; // For nonbinary: body type preference (client-side only)
uint8_t level; // Character level (1-80)
// Appearance
@ -167,8 +168,14 @@ const char* getGenderName(Gender gender);
/**
* Get M2 model path for a given race and gender
* useFemaleModel allows nonbinary characters to choose body type
*/
std::string getPlayerModelPath(Race race, Gender gender);
std::string getPlayerModelPath(Race race, Gender gender, bool useFemaleModel = false);
/**
* Get M2 model path for a character (uses character's body type preference)
*/
std::string getPlayerModelPath(const Character& character);
} // namespace game
} // namespace wowee

View file

@ -234,6 +234,7 @@ struct CharCreateData {
uint8_t hairStyle = 0;
uint8_t hairColor = 0;
uint8_t facialHair = 0;
bool useFemaleModel = false; // For nonbinary: choose body type
};
class CharCreatePacket {

View file

@ -23,7 +23,7 @@ public:
bool loadCharacter(game::Race race, game::Gender gender,
uint8_t skin, uint8_t face,
uint8_t hairStyle, uint8_t hairColor,
uint8_t facialHair);
uint8_t facialHair, bool useFemaleModel = false);
void update(float deltaTime);
void render();

View file

@ -33,6 +33,7 @@ private:
int raceIndex = 0;
int classIndex = 0;
int genderIndex = 0;
int bodyTypeIndex = 0; // For nonbinary: 0=masculine, 1=feminine
int skin = 0, face = 0, hairStyle = 0, hairColor = 0, facialHair = 0;
int maxSkin = 9, maxFace = 9, maxHairStyle = 11, maxHairColor = 9, maxFacialHair = 8;
std::string statusMessage;
@ -49,6 +50,7 @@ private:
pipeline::AssetManager* assetManager_ = nullptr;
int prevRaceIndex_ = -1;
int prevGenderIndex_ = -1;
int prevBodyTypeIndex_ = -1;
int prevSkin_ = -1;
int prevFace_ = -1;
int prevHairStyle_ = -1;