Added more skin offset code

Added another offset enum for the helmet offset, fixed renderUIOffset() function not rendering skins that didn't have an offset, and added more code for offsets.
This commit is contained in:
Langtanium 2026-04-21 12:26:24 -07:00
parent cef65c8df3
commit e0cf6f23c1
4 changed files with 281 additions and 128 deletions

View file

@ -113,7 +113,7 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
WCHAR wchBodyPart[10];
SKIN_BOX *pSkinBox = new SKIN_BOX;
ZeroMemory(pSkinBox,sizeof(SKIN_BOX));
#ifdef __PS3__
// 4J Stu - The Xbox version used swscanf_s which isn't available in GCC.
swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,
@ -305,6 +305,10 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring
{
pSkinOffset->ePart=eBodyOffset_Pants1;
}
else if(wcscmp(wchBodyPart,L"HELMET")==0)
{
pSkinOffset->ePart=eBodyOffset_Helmet;
}
else if(wcscmp(wchBodyPart,L"WAIST")==0)
{
pSkinOffset->ePart=eBodyOffset_Waist;

View file

@ -367,10 +367,8 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou
glEnable(GL_ALPHA_TEST);
//model->prepareMobModel(mob, wp, ws, a);
if (m_pvModelOffsets != nullptr) // If the skin has offsets use a modified version of the render function
model->renderUIOffset(wp, ws, bob, headRot - bodyRot, headRotx, _scale, true, m_pvModelOffsets);
else // If the skin has no offsets use the default render function (without this all skins that don't have an offset won't render)
model->render(nullptr, wp, ws, bob, headRot - bodyRot, headRotx, _scale, true);
// Using a modified version of the render function to render offsts is skin select menu
model->renderUIOffset(wp, ws, bob, headRot - bodyRot, headRotx, _scale, true, m_pvModelOffsets);
/*for (int i = 0; i < MAX_ARMOR_LAYERS; i++)
{
if (prepareArmor(mob, i, a))

View file

@ -402,85 +402,54 @@ void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float
{
case eBodyOffset_Head:
if(pModelOffset->fD == 1)
headOffsets[0] = pModelOffset->fO / 16.0f;
headOffsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
headOffsets[1] = pModelOffset->fO / 16.0f;
headOffsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
headOffsets[2] = pModelOffset->fO / 16.0f;
headOffsets[2] += pModelOffset->fO / 16.0f;
break;
case eBodyOffset_Body:
if(pModelOffset->fD == 1)
bodyOffsets[0] = pModelOffset->fO / 16.0f;
bodyOffsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
bodyOffsets[1] = pModelOffset->fO / 16.0f;
bodyOffsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
bodyOffsets[2] = pModelOffset->fO / 16.0f;
bodyOffsets[2] += pModelOffset->fO / 16.0f;
break;
case eBodyOffset_Arm0:
if(pModelOffset->fD == 1)
arm0Offsets[0] = pModelOffset->fO / 16.0f;
arm0Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
arm0Offsets[1] = pModelOffset->fO / 16.0f;
arm0Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
arm0Offsets[2] = pModelOffset->fO / 16.0f;
arm0Offsets[2] += pModelOffset->fO / 16.0f;
break;
case eBodyOffset_Arm1:
if(pModelOffset->fD == 1)
arm1Offsets[0] = pModelOffset->fO / 16.0f;
arm1Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
arm1Offsets[1] = pModelOffset->fO / 16.0f;
arm1Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
arm1Offsets[2] = pModelOffset->fO / 16.0f;
arm1Offsets[2] += pModelOffset->fO / 16.0f;
break;
case eBodyOffset_Leg0:
if(pModelOffset->fD == 1)
leg0Offsets[0] = pModelOffset->fO / 16.0f;
leg0Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
leg0Offsets[1] = pModelOffset->fO / 16.0f;
leg0Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
leg0Offsets[2] = pModelOffset->fO / 16.0f;
leg0Offsets[2] += pModelOffset->fO / 16.0f;
break;
case eBodyOffset_Leg1:
if(pModelOffset->fD == 1)
leg1Offsets[0] = pModelOffset->fO / 16.0f;
leg1Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
leg1Offsets[1] = pModelOffset->fO / 16.0f;
leg1Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
leg1Offsets[2] = pModelOffset->fO / 16.0f;
leg1Offsets[2] += pModelOffset->fO / 16.0f;
break;
}
}
if (m_isArmor) // Set offsets for armor
{
for( SKIN_OFFSET *pModelOffset : *pModelOffsets )
{
switch (pModelOffset->ePart)
{
case eBodyOffset_Boot0:
if (leg0->isArmorPart1)
{
if(pModelOffset->fD == 1)
leg0Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
leg0Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
leg0Offsets[2] += pModelOffset->fO / 16.0f;
}
break;
case eBodyOffset_Boot1:
if (leg1->isArmorPart1)
{
if(pModelOffset->fD == 1)
leg1Offsets[0] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 2)
leg1Offsets[1] += pModelOffset->fO / 16.0f;
else if(pModelOffset->fD == 3)
leg1Offsets[2] += pModelOffset->fO / 16.0f;
}
break;
}
}
}
}
glPushMatrix();
@ -549,25 +518,65 @@ void HumanoidModel::render(shared_ptr<Entity> entity, float time, float r, float
if (waist != 0)
waist->render(scale, usecompiled);
if (belt != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
belt->render(scale, usecompiled);
glPopMatrix();
}
if (bodyArmor != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
bodyArmor->render(scale, usecompiled);
glPopMatrix();
}
if (armArmor0 != 0)
{
glPushMatrix();
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
armArmor0->render(scale, usecompiled);
glPopMatrix();
}
if (armArmor1 != 0)
{
glPushMatrix();
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
armArmor1->render(scale, usecompiled);
glPopMatrix();
}
if (legging0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
legging0->render(scale, usecompiled);
glPopMatrix();
}
if (legging1 != 0)
{
glPushMatrix();
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
legging1->render(scale, usecompiled);
glPopMatrix();
}
if (sock0 != 0)
sock0->render(scale, usecompiled);
if (sock1 != 0)
sock1->render(scale, usecompiled);
if (boot0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
boot0->render(scale, usecompiled);
glPopMatrix();
}
if (boot1 != 0)
{
glPushMatrix();
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
boot1->render(scale, usecompiled);
glPopMatrix();
}
}
}
@ -641,93 +650,134 @@ void HumanoidModel::renderUIOffset(float time, float r, float bob, float yRot, f
break;
}
}
}
glPushMatrix();
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorHead))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHead))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorHead))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorTorso))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm0))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm1))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg0))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg1))>0||!m_isArmor));
glPopMatrix();
glPushMatrix();
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHair))>0);
glPopMatrix();
if (jacket != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderTorso))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorTorso))>0||!m_isArmor));
jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderJacket))>0);
glPopMatrix();
}
if (sleeve0 != 0)
{
glPushMatrix();
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm0))>0||!m_isArmor));
sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve0))>0);
glPopMatrix();
}
if (sleeve1 != 0)
{
glPushMatrix();
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderArm1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorArm1))>0||!m_isArmor));
sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve1))>0);
glPopMatrix();
}
if (pants0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg0))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg0))>0||!m_isArmor));
pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants0))>0);
glPopMatrix();
}
if (pants1 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants1))>0);
glPopMatrix();
}
if (waist != 0)
waist->render(scale, usecompiled);
if (belt != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
belt->render(scale, usecompiled);
glPopMatrix();
}
if (bodyArmor != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
bodyArmor->render(scale, usecompiled);
glPopMatrix();
}
if (armArmor0 != 0)
{
glPushMatrix();
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
armArmor0->render(scale, usecompiled);
glPopMatrix();
}
if (armArmor1 != 0)
{
glPushMatrix();
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
armArmor1->render(scale, usecompiled);
glPopMatrix();
}
if (legging0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
legging0->render(scale, usecompiled);
glPopMatrix();
}
if (legging1 != 0)
{
glPushMatrix();
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderLeg1))>0&&(!(m_uiAnimOverrideBitmask&(1<<eAnim_RenderArmorLeg1))>0||!m_isArmor));
legging1->render(scale, usecompiled);
glPopMatrix();
glPushMatrix();
glTranslatef(headOffsets[0], headOffsets[1], headOffsets[2]);
hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderHair))>0);
glPopMatrix();
if (jacket != 0)
{
glPushMatrix();
glTranslatef(bodyOffsets[0], bodyOffsets[1], bodyOffsets[2]);
jacket->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderJacket))>0);
glPopMatrix();
}
if (sleeve0 != 0)
{
glPushMatrix();
glTranslatef(arm0Offsets[0], arm0Offsets[1], arm0Offsets[2]);
sleeve0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve0))>0);
glPopMatrix();
}
if (sleeve1 != 0)
{
glPushMatrix();
glTranslatef(arm1Offsets[0], arm1Offsets[1], arm1Offsets[2]);
sleeve1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderSleeve1))>0);
glPopMatrix();
}
if (pants0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
pants0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants0))>0);
glPopMatrix();
}
if (pants1 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
pants1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<<eAnim_DisableRenderPants1))>0);
glPopMatrix();
}
if (waist != 0)
waist->render(scale, usecompiled);
if (belt != 0)
belt->render(scale, usecompiled);
if (bodyArmor != 0)
bodyArmor->render(scale, usecompiled);
if (armArmor0 != 0)
armArmor0->render(scale, usecompiled);
if (armArmor1 != 0)
armArmor1->render(scale, usecompiled);
if (legging0 != 0)
legging0->render(scale, usecompiled);
if (legging1 != 0)
legging1->render(scale, usecompiled);
if (sock0 != 0)
sock0->render(scale, usecompiled);
if (sock1 != 0)
sock1->render(scale, usecompiled);
if (boot0 != 0)
boot0->render(scale, usecompiled);
if (boot1 != 0)
boot1->render(scale, usecompiled);
}
if (sock0 != 0)
sock0->render(scale, usecompiled);
if (sock1 != 0)
sock1->render(scale, usecompiled);
if (boot0 != 0)
{
glPushMatrix();
glTranslatef(leg0Offsets[0], leg0Offsets[1], leg0Offsets[2]);
boot0->render(scale, usecompiled);
glPopMatrix();
}
if (boot1 != 0)
{
glPushMatrix();
glTranslatef(leg1Offsets[0], leg1Offsets[1], leg1Offsets[2]);
boot1->render(scale, usecompiled);
glPopMatrix();
}
}
void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float xRot, float scale, shared_ptr<Entity> entity, unsigned int uiBitmaskOverrideAnim)
@ -735,6 +785,99 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
//bool bIsAttacking = (attackTime > -9990.0f);
{
/* Code to get armor offsets, not fully implemented yet. Directly applying the offsets
causes the armor pivot points to not aline with the player model pivot points. Some math
is requied to properly rotate the armor pivot points around the player model pivot points - Langtanium*/
vector<float> headOffsets = {0, 0, 0};
vector<float> bodyOffsets = {0, 0, 0};
vector<float> arm0Offsets = {0, 0, 0};
vector<float> arm1Offsets = {0, 0, 0};
vector<float> leg0Offsets = {0, 0, 0};
vector<float> leg1Offsets = {0, 0, 0};
if (m_isArmor)
{
shared_ptr<Player> player = dynamic_pointer_cast<Player>(entity);
vector<SKIN_OFFSET *>* pModelOffsets = nullptr;
if (player != nullptr)
pModelOffsets = player->GetModelOffsets();
if (pModelOffsets != nullptr)
{
for( SKIN_OFFSET *pModelOffset : *pModelOffsets )
{
switch (pModelOffset->ePart)
{
case eBodyOffset_Helmet:
if(pModelOffset->fD == 1)
headOffsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
headOffsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
headOffsets[2] += pModelOffset->fO;
case eBodyOffset_Belt:
if (!body->isArmorPart1)
{
if(pModelOffset->fD == 1)
bodyOffsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
bodyOffsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
bodyOffsets[2] += pModelOffset->fO;
}
break;
case eBodyOffset_BodyArmor:
if (body->isArmorPart1)
{
if(pModelOffset->fD == 1)
bodyOffsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
bodyOffsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
bodyOffsets[2] += pModelOffset->fO;
}
break;
case eBodyOffset_ArmArmor0:
if(pModelOffset->fD == 1)
arm0Offsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
arm0Offsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
arm0Offsets[2] += pModelOffset->fO;
break;
case eBodyOffset_ArmArmor1:
if(pModelOffset->fD == 1)
arm1Offsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
arm1Offsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
arm1Offsets[2] += pModelOffset->fO;
break;
case eBodyOffset_Boot0:
if (leg0->isArmorPart1)
{
if(pModelOffset->fD == 1)
leg0Offsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
leg0Offsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
leg0Offsets[2] += pModelOffset->fO;
}
break;
case eBodyOffset_Boot1:
if (leg1->isArmorPart1)
{
if(pModelOffset->fD == 1)
leg1Offsets[0] += pModelOffset->fO;
else if(pModelOffset->fD == 2)
leg1Offsets[1] += pModelOffset->fO;
else if(pModelOffset->fD == 3)
leg1Offsets[2] += pModelOffset->fO;
}
break;
}
}
}
}
head->yRot = yRot / (float) (180.0f / PI);
head->xRot = xRot / (float) (180.0f / PI);
hair->yRot = head->yRot;
@ -959,6 +1102,13 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
body->y = 0.0f;
arm0->y = 2.0f;
arm1->y = 2.0f;
/*if (m_isArmor) // If armor apply helmet offset using some math, needs to be refined - Langtanium
{
head->x = headOffsets[1] * sin(yRot / (float) (180.0f / PI)) * sin(xRot / (float) (180.0f / PI));
head->y = headOffsets[1] * cos(xRot / (float) (180.0f / PI));
head->z = headOffsets[1] * sin(xRot / (float) (180.0f / PI)) - headOffsets[1] * abs(sin(yRot / (float) (180.0f / PI))) * sin(xRot / (float) (180.0f / PI));
}
else*/
head->y = 0.0f;
hair->y = 0.0f;
ear->y = 1.0f;
@ -998,7 +1148,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
jacket->z = body->z;
jacket->xRot = body->xRot;
jacket->yRot = body->yRot;
jacket->zRot = body->zRot;
}
if (sleeve0 != 0)
{
@ -1043,7 +1192,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
waist->z = body->z;
waist->xRot = body->xRot;
waist->yRot = body->yRot;
waist->zRot = body->zRot;
}
if (belt != 0)
{
@ -1052,7 +1200,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
belt->z = body->z;
belt->xRot = body->xRot;
belt->yRot = body->yRot;
belt->zRot = body->zRot;
}
if (bodyArmor != 0)
{
@ -1061,7 +1208,6 @@ void HumanoidModel::setupAnim(float time, float r, float bob, float yRot, float
bodyArmor->z = body->z;
bodyArmor->xRot = body->xRot;
bodyArmor->yRot = body->yRot;
bodyArmor->zRot = body->zRot;
}
if (armArmor0 != 0)
{
@ -1178,18 +1324,22 @@ void HumanoidModel::render(HumanoidModel *model, float scale, bool usecompiled)
arm0->zRot = model->arm0->zRot;
if (sleeve0 != 0)
{
sleeve0->xRot = model->arm0->xRot;
sleeve0->yRot = model->arm0->yRot;
sleeve0->zRot = model->arm0->zRot;
}
arm1->xRot = model->arm1->xRot;
arm1->yRot = model->arm1->yRot;
arm1->zRot = model->arm1->zRot;
if (sleeve1 != 0)
{
sleeve1->xRot = model->arm1->xRot;
sleeve1->yRot = model->arm1->yRot;
sleeve1->zRot = model->arm1->zRot;
}
leg0->xRot = model->leg0->xRot;
if (pants0 != 0)

View file

@ -15,6 +15,7 @@ enum eBodyOffset
eBodyOffset_Sleeve1,
eBodyOffset_Pants0,
eBodyOffset_Pants1,
eBodyOffset_Helmet,
eBodyOffset_Waist,
eBodyOffset_Legging0,
eBodyOffset_Legging1,