diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 82043249..0e2813df 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -9615,7 +9615,14 @@ void CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, SKIN_BOX *SkinBoxA, D { EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance; EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr; - Model *pModel = renderer ? renderer->getModel() : nullptr; + unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID); + Model *pModel; + if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel)) + pModel = renderer ? renderer->getModel(2) : nullptr; + else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel)) + pModel = renderer ? renderer->getModel(1) : nullptr; + else + pModel = renderer ? renderer->getModel(0) : nullptr; vector *pvModelPart = new vector; vector *pvSkinBoxes = new vector; @@ -9648,7 +9655,14 @@ vector * CMinecraftApp::SetAdditionalSkinBoxes(DWORD dwSkinID, vect { EntityRenderDispatcher *dispatcher = EntityRenderDispatcher::instance; EntityRenderer *renderer = dispatcher ? dispatcher->getRenderer(eTYPE_PLAYER) : nullptr; - Model *pModel = renderer ? renderer->getModel() : nullptr; + unsigned int m_uiAnimOverrideBitmask = GetAnimOverrideBitmask(dwSkinID); + Model *pModel; + if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_SlimModel)) + pModel = renderer ? renderer->getModel(2) : nullptr; + else if (m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_WideModel)) + pModel = renderer ? renderer->getModel(1) : nullptr; + else + pModel = renderer ? renderer->getModel(0) : nullptr; vector *pvModelPart = new vector; EnterCriticalSection( &csAdditionalModelParts ); diff --git a/Minecraft.Client/Common/DLC/DLCSkinFile.cpp b/Minecraft.Client/Common/DLC/DLCSkinFile.cpp index fb5282af..4723392e 100644 --- a/Minecraft.Client/Common/DLC/DLCSkinFile.cpp +++ b/Minecraft.Client/Common/DLC/DLCSkinFile.cpp @@ -120,9 +120,9 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring #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", wchBodyPart, + swscanf(value.c_str(), L"%10ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart, #else - swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f", wchBodyPart,10, + swscanf_s(value.c_str(), L"%9ls%f%f%f%f%f%f%f%f%f%f%f", wchBodyPart,10, #endif &pSkinBox->fX, &pSkinBox->fY, @@ -131,7 +131,10 @@ void DLCSkinFile::addParameter(DLCManager::EDLCParameterType type, const wstring &pSkinBox->fH, &pSkinBox->fD, &pSkinBox->fU, - &pSkinBox->fV); + &pSkinBox->fV, + &pSkinBox->fA, + &pSkinBox->fM, + &pSkinBox->fS); if(wcscmp(wchBodyPart,L"HEAD")==0) { diff --git a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp index 39432370..8a549637 100644 --- a/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp +++ b/Minecraft.Client/Common/UI/UIControl_PlayerSkinPreview.cpp @@ -8,7 +8,6 @@ #include "../../ModelPart.h" #include "../../Options.h" #include "../../../Minecraft.World/net.minecraft.world.entity.player.h" -#include "Skins.h" #include "UIControl_PlayerSkinPreview.h" #include @@ -309,24 +308,8 @@ void UIControl_PlayerSkinPreview::render(EntityRenderer *renderer, double x, dou glPushMatrix(); glDisable(GL_CULL_FACE); - HumanoidModel *model = static_cast(renderer->getModel()); - Textures *textures = Minecraft::GetInstance()->textures; - int skinId = textures->loadMemTexture(m_customTextureUrl, m_backupTexture) - 37; - - if (slim[skinId] == true) - { - if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64) - model = static_cast(renderer->getNewModelSlim()); - else - model = static_cast(renderer->getModelSlim()); - } - else - { - if (textures->getHeight(m_customTextureUrl, m_backupTexture) == 64) - model = static_cast(renderer->getNewModel()); - else - model = static_cast(renderer->getModel()); - } + Textures *t = Minecraft::GetInstance()->textures; + HumanoidModel *model = static_cast(renderer->getModel(Player::GetModelTypeFromTextureId(t->loadMemTexture(m_customTextureUrl, m_backupTexture))+Player::GetModelTypeFromAnimBitmask(m_uiAnimOverrideBitmask))); //getAttackAnim(mob, a); //if (armor != nullptr) armor->attackTime = model->attackTime; diff --git a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp index 590de54f..af3bead9 100644 --- a/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SkinSelectMenu.cpp @@ -24,16 +24,16 @@ const WCHAR *UIScene_SkinSelectMenu::wchDefaultNamesA[]= L"Prisoner Steve", L"Cyclist Steve", L"Boxer Steve", - L"Developer Steve", L"Alex", - L"Tuxedo Alex", - L"Boxer Alex", - L"Prisoner Alex", L"Tennis Alex", - L"Cyclist Alex", + L"Tuxedo Alex", L"Athlete Alex", L"Swedish Alex", + L"Prisoner Alex", + L"Cyclist Alex", + L"Boxer Alex", L"Developer Alex", + L"Developer Steve", }; UIScene_SkinSelectMenu::UIScene_SkinSelectMenu(int iPad, void *initData, UILayer *parentLayer) : UIScene(iPad, parentLayer) @@ -1004,34 +1004,34 @@ TEXTURE_NAME UIScene_SkinSelectMenu::getTextureId(int skinIndex) texture = TN_MOB_CHAR7; break; case eDefaultSkins_Skin8: - texture = TN_MOB_CHAR8; + texture = TN_MOB_ALEX; break; case eDefaultSkins_Skin9: - texture = TN_MOB_CHAR9; + texture = TN_MOB_ALEX1; break; case eDefaultSkins_Skin10: - texture = TN_MOB_CHAR10; + texture = TN_MOB_ALEX2; break; case eDefaultSkins_Skin11: - texture = TN_MOB_CHAR11; + texture = TN_MOB_ALEX3; break; case eDefaultSkins_Skin12: - texture = TN_MOB_CHAR12; + texture = TN_MOB_ALEX4; break; case eDefaultSkins_Skin13: - texture = TN_MOB_CHAR13; + texture = TN_MOB_ALEX5; break; case eDefaultSkins_Skin14: - texture = TN_MOB_CHAR14; + texture = TN_MOB_ALEX6; break; case eDefaultSkins_Skin15: - texture = TN_MOB_CHAR15; + texture = TN_MOB_ALEX7; break; case eDefaultSkins_Skin16: - texture = TN_MOB_CHAR16; + texture = TN_MOB_DEVALEX; break; case eDefaultSkins_Skin17: - texture = TN_MOB_CHAR17; + texture = TN_MOB_DEVSTEVE; break; }; diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char17.png b/Minecraft.Client/Common/res/1_2_2/mob/DevAlex.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char17.png rename to Minecraft.Client/Common/res/1_2_2/mob/DevAlex.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char8.png b/Minecraft.Client/Common/res/1_2_2/mob/DevSteve.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char8.png rename to Minecraft.Client/Common/res/1_2_2/mob/DevSteve.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/alex.png b/Minecraft.Client/Common/res/1_2_2/mob/alex.png new file mode 100644 index 00000000..b643fe2d Binary files /dev/null and b/Minecraft.Client/Common/res/1_2_2/mob/alex.png differ diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char13.png b/Minecraft.Client/Common/res/1_2_2/mob/alex1.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char13.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex1.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char10.png b/Minecraft.Client/Common/res/1_2_2/mob/alex2.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char10.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex2.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char15.png b/Minecraft.Client/Common/res/1_2_2/mob/alex3.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char15.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex3.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char16.png b/Minecraft.Client/Common/res/1_2_2/mob/alex4.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char16.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex4.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char12.png b/Minecraft.Client/Common/res/1_2_2/mob/alex5.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char12.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex5.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char14.png b/Minecraft.Client/Common/res/1_2_2/mob/alex6.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char14.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex6.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char11.png b/Minecraft.Client/Common/res/1_2_2/mob/alex7.png similarity index 100% rename from Minecraft.Client/Common/res/1_2_2/mob/char11.png rename to Minecraft.Client/Common/res/1_2_2/mob/alex7.png diff --git a/Minecraft.Client/Common/res/1_2_2/mob/char9.png b/Minecraft.Client/Common/res/1_2_2/mob/char9.png deleted file mode 100644 index da205681..00000000 Binary files a/Minecraft.Client/Common/res/1_2_2/mob/char9.png and /dev/null differ diff --git a/Minecraft.Client/Common/res/mob/char17.png b/Minecraft.Client/Common/res/mob/DevAlex.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char17.png rename to Minecraft.Client/Common/res/mob/DevAlex.png diff --git a/Minecraft.Client/Common/res/mob/char8.png b/Minecraft.Client/Common/res/mob/DevSteve.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char8.png rename to Minecraft.Client/Common/res/mob/DevSteve.png diff --git a/Minecraft.Client/Common/res/mob/alex.png b/Minecraft.Client/Common/res/mob/alex.png new file mode 100644 index 00000000..b643fe2d Binary files /dev/null and b/Minecraft.Client/Common/res/mob/alex.png differ diff --git a/Minecraft.Client/Common/res/mob/char13.png b/Minecraft.Client/Common/res/mob/alex1.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char13.png rename to Minecraft.Client/Common/res/mob/alex1.png diff --git a/Minecraft.Client/Common/res/mob/char10.png b/Minecraft.Client/Common/res/mob/alex2.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char10.png rename to Minecraft.Client/Common/res/mob/alex2.png diff --git a/Minecraft.Client/Common/res/mob/char15.png b/Minecraft.Client/Common/res/mob/alex3.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char15.png rename to Minecraft.Client/Common/res/mob/alex3.png diff --git a/Minecraft.Client/Common/res/mob/char16.png b/Minecraft.Client/Common/res/mob/alex4.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char16.png rename to Minecraft.Client/Common/res/mob/alex4.png diff --git a/Minecraft.Client/Common/res/mob/char12.png b/Minecraft.Client/Common/res/mob/alex5.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char12.png rename to Minecraft.Client/Common/res/mob/alex5.png diff --git a/Minecraft.Client/Common/res/mob/char14.png b/Minecraft.Client/Common/res/mob/alex6.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char14.png rename to Minecraft.Client/Common/res/mob/alex6.png diff --git a/Minecraft.Client/Common/res/mob/char11.png b/Minecraft.Client/Common/res/mob/alex7.png similarity index 100% rename from Minecraft.Client/Common/res/mob/char11.png rename to Minecraft.Client/Common/res/mob/alex7.png diff --git a/Minecraft.Client/Common/res/mob/char9.png b/Minecraft.Client/Common/res/mob/char9.png deleted file mode 100644 index da205681..00000000 Binary files a/Minecraft.Client/Common/res/mob/char9.png and /dev/null differ diff --git a/Minecraft.Client/EntityRenderer.cpp b/Minecraft.Client/EntityRenderer.cpp index 22698db3..46fc2687 100644 --- a/Minecraft.Client/EntityRenderer.cpp +++ b/Minecraft.Client/EntityRenderer.cpp @@ -19,9 +19,8 @@ ResourceLocation EntityRenderer::SHADOW_LOCATION = ResourceLocation(TN__CLAMP__M EntityRenderer::EntityRenderer() { model = nullptr; + modelWide = nullptr; modelSlim = nullptr; - newModel = nullptr; - newModelSlim = nullptr; tileRenderer = new TileRenderer(); shadowRadius = 0; shadowStrength = 1.0f; @@ -407,6 +406,13 @@ void EntityRenderer::registerTerrainTextures(IconRegister *iconRegister) { } +Model *EntityRenderer::getModel(int modelType) +{ + if (modelType == 2) return modelSlim; + else if (modelType == 1) return modelWide; + else return model; +} + ResourceLocation *EntityRenderer::getTextureLocation(shared_ptr mob) { diff --git a/Minecraft.Client/EntityRenderer.h b/Minecraft.Client/EntityRenderer.h index 6cdb1d86..c91f807c 100644 --- a/Minecraft.Client/EntityRenderer.h +++ b/Minecraft.Client/EntityRenderer.h @@ -31,9 +31,8 @@ private: protected: Model *model; // TODO 4J: Check why exactly this is here, it seems to get shadowed by classes inheriting from this by their own + Model *modelWide; Model *modelSlim; - Model *newModel; - Model *newModelSlim; protected: TileRenderer *tileRenderer; // 4J - changed to protected so derived classes can use instead of shadowing their own @@ -71,10 +70,7 @@ public: public: // 4J Added - virtual Model *getModel() { return model; } - virtual Model *getModelSlim() { return modelSlim; } - virtual Model *getNewModel() { return newModel; } - virtual Model *getNewModelSlim() { return newModelSlim; } + virtual Model *getModel(int modelType = 0); virtual void SetItemFrame(bool bSet) {} virtual bool shouldRender(shared_ptr entity, float camX, float camY, float camZ) { return true; } diff --git a/Minecraft.Client/HumanoidModel.cpp b/Minecraft.Client/HumanoidModel.cpp index c363f528..d6de0915 100644 --- a/Minecraft.Client/HumanoidModel.cpp +++ b/Minecraft.Client/HumanoidModel.cpp @@ -9,6 +9,7 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox) { ModelPart *pAttachTo=nullptr; + float scale=0; switch(pBox->ePart) { @@ -32,21 +33,29 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox) break; case eBodyPart_Jacket: pAttachTo=jacket; + scale=0.25; break; case eBodyPart_Sleeve0: pAttachTo=sleeve0; + scale=0.25; break; case eBodyPart_Sleeve1: pAttachTo=sleeve1; + scale=0.25; break; case eBodyPart_Pants0: pAttachTo=pants0; + scale=0.25; break; case eBodyPart_Pants1: pAttachTo=pants1; + scale=0.25; break; } + // check if this box has a declared scale then add it + if (pBox->fS != 0) scale = pBox->fS; + // first check this box doesn't already exist ModelPart *pNewBox = pAttachTo->retrieveChild(pBox); @@ -64,6 +73,8 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox) pNewBox = new ModelPart(this, static_cast(pBox->fU), static_cast(pBox->fV)); pNewBox->visible=false; + if (pBox->fM > 0) pNewBox->bMirror = true; // check if this box has the mirror flag + pNewBox->hideWithArmor = (unsigned int)pBox->fA; // add the "hide when armor is worn" bit flags pNewBox->addHumanoidBox(pBox->fX, pBox->fY, pBox->fZ, pBox->fW, pBox->fH, pBox->fD, 0); // 4J-PB - don't compile here, since the lighting isn't set up. It'll be compiled on first use. //pNewBox->compile(1.0f/16.0f); @@ -73,7 +84,7 @@ ModelPart * HumanoidModel::AddOrRetrievePart(SKIN_BOX *pBox) return pNewBox; } -void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32) +void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32, bool isArmor) { this->texWidth = texWidth; this->texHeight = texHeight; @@ -113,7 +124,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b if ((texWidth == 64 && texHeight == 64) && !force32) { jacket = new ModelPart(this, 16, 32); - jacket->addHumanoidBox(-4, 0, -2, 8, 12, 4, g + 0.5); + jacket->addHumanoidBox(-4, 0, -2, 8, 12, 4, g + 0.25); jacket->setPos(0, 0 + yOffset, 0); } @@ -131,13 +142,13 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b if (slimHands == false) { - sleeve0->addHumanoidBox(-3, -2, -2, 4, 12, 4, g + 0.5); - sleeve1->addHumanoidBox(-1, -2, -2, 4, 12, 4, g + 0.5); + sleeve0->addHumanoidBox(-3, -2, -2, 4, 12, 4, g + 0.25); + sleeve1->addHumanoidBox(-1, -2, -2, 4, 12, 4, g + 0.25); } else if (slimHands == true) { - sleeve0->addHumanoidBox(-2, -2, -2, 3, 12, 4, g + 0.5); - sleeve1->addHumanoidBox(-1, -2, -2, 3, 12, 4, g + 0.5); + sleeve0->addHumanoidBox(-2, -2, -2, 3, 12, 4, g + 0.25); + sleeve1->addHumanoidBox(-1, -2, -2, 3, 12, 4, g + 0.25); } sleeve0->setPos(-5, 2 + yOffset, 0); @@ -172,11 +183,11 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b leg1 = new ModelPart(this, 16, 48); pants0 = new ModelPart(this, 0, 32); - pants0->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.5); + pants0->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.25); pants0->setPos(-1.9, 12 + yOffset, 0); pants1 = new ModelPart(this, 0, 48); - pants1->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.5); + pants1->addHumanoidBox(-2, 0, -2, 4, 12, 4, g + 0.25); pants1->setPos(1.9, 12 + yOffset, 0); } else if ((texWidth == 64 && texHeight == 32) || force32) @@ -226,6 +237,7 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b bowAndArrow=false; elytraFlying = false; elytraCrouching = false; + m_isArmor = isArmor; // 4J added @@ -238,32 +250,37 @@ void HumanoidModel::_init(float g, float yOffset, int texWidth, int texHeight, b HumanoidModel::HumanoidModel() : Model() { - _init(0, 0, 64, 32, false, true, false); + _init(0, 0, 64, 32, false, true, false, false); } HumanoidModel::HumanoidModel(float g) : Model() { - _init(g, 0, 64, 32, false, true, false); + _init(g, 0, 64, 32, false, true, false, false); +} + +HumanoidModel::HumanoidModel(float g, bool isArmor) : Model() +{ + _init(g, 0, 64, 32, false, true, false, isArmor); } HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight) : Model() { - _init(g,yOffset,texWidth,texHeight, false, true, false); + _init(g,yOffset,texWidth,texHeight, false, true, false, false); } HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands) : Model() { - _init(g,yOffset,texWidth,texHeight, slimHands, true, false); + _init(g,yOffset,texWidth,texHeight, slimHands, true, false, false); } HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror) : Model() { - _init(g,yOffset,texWidth,texHeight, slimHands, mirror, false); + _init(g,yOffset,texWidth,texHeight, slimHands, mirror, false, false); } HumanoidModel::HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror, bool force32) : Model() { - _init(g,yOffset,texWidth,texHeight, slimHands, mirror, force32); + _init(g,yOffset,texWidth,texHeight, slimHands, mirror, force32, false); } void HumanoidModel::render(shared_ptr entity, float time, float r, float bob, float yRot, float xRot, float scale, bool usecompiled) @@ -308,12 +325,12 @@ void HumanoidModel::render(shared_ptr entity, float time, float r, float } else { - head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); - leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); + head->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + body->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + arm0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + arm1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + leg0->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); + leg1->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0&&(!(m_uiAnimOverrideBitmask&(1<0||!m_isArmor)); hair->render(scale, usecompiled,(m_uiAnimOverrideBitmask&(1<0); if (jacket) diff --git a/Minecraft.Client/HumanoidModel.h b/Minecraft.Client/HumanoidModel.h index 4c7f95f5..525ae32e 100644 --- a/Minecraft.Client/HumanoidModel.h +++ b/Minecraft.Client/HumanoidModel.h @@ -15,6 +15,7 @@ public: float eating_swing; bool elytraFlying; bool elytraCrouching; + bool m_isArmor; unsigned int m_uiAnimOverrideBitmask; float m_fYOffset; enum animbits @@ -37,11 +38,20 @@ public: eAnim_DisableRenderLeg1, eAnim_DisableRenderHair, eAnim_SmallModel, - eAnim_DisableRenderJacket, - eAnim_DisableRenderSleeve0, - eAnim_DisableRenderSleeve1, - eAnim_DisableRenderPants0, - eAnim_DisableRenderPants1 + eAnim_WideModel, + eAnim_SlimModel, + eAnim_DisableRenderSleeve1, + eAnim_DisableRenderSleeve0, + eAnim_DisableRenderPants1, + eAnim_DisableRenderPants0, + eAnim_DisableRenderJacket, + eAnim_RenderArmorHead, + eAnim_RenderArmorArm0, + eAnim_RenderArmorArm1, + eAnim_RenderArmorTorso, + eAnim_RenderArmorLeg0, + eAnim_RenderArmorLeg1, + eAnim_Dinnerbone }; @@ -60,10 +70,11 @@ public: (1 << HumanoidModel::eAnim_DisableRenderPants1); void _init(float g, float yOffset, int texWidth, int texHeight, - bool slimHands, bool mirror, bool force32); + bool slimHands, bool mirror, bool force32, bool isArmor = false); HumanoidModel(); HumanoidModel(float g); + HumanoidModel(float g, bool isArmor); HumanoidModel(float g, float yOffset, int texWidth, int texHeight); HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands); HumanoidModel(float g, float yOffset, int texWidth, int texHeight, bool slimHands, bool mirror); diff --git a/Minecraft.Client/LivingEntityRenderer.cpp b/Minecraft.Client/LivingEntityRenderer.cpp index c6e7687e..8fe27fc7 100644 --- a/Minecraft.Client/LivingEntityRenderer.cpp +++ b/Minecraft.Client/LivingEntityRenderer.cpp @@ -8,29 +8,23 @@ #include "../Minecraft.World/Arrow.h" #include "../Minecraft.World/Mth.h" #include "../Minecraft.World/Player.h" -#include "Skins.h" - ResourceLocation LivingEntityRenderer::ENCHANT_GLINT_LOCATION = ResourceLocation(TN__BLUR__MISC_GLINT); int LivingEntityRenderer::MAX_ARMOR_LAYERS = 4; -LivingEntityRenderer::LivingEntityRenderer(Model *model, float shadow, bool slimHands, bool createNewVar) +LivingEntityRenderer::LivingEntityRenderer(Model *model, float shadow, bool isPlayer) { this->model = model; - if (slimHands == true) - this->modelSlim = new HumanoidModel(0, 0, 64, 32, true); - - if (createNewVar) + if (isPlayer) { - this->newModel = new HumanoidModel(0, 0, 64, 64, false, false); - - if (slimHands == true) - this->newModelSlim = new HumanoidModel(0, 0, 64, 64, true, false); + this->modelWide = new HumanoidModel(0, 0, 64, 64, false); + this->modelSlim = new HumanoidModel(0, 0, 64, 64, true); } shadowRadius = shadow; armor = nullptr; + resModel = model; } void LivingEntityRenderer::setArmor(Model *armor) @@ -38,6 +32,11 @@ void LivingEntityRenderer::setArmor(Model *armor) this->armor = armor; } +void LivingEntityRenderer::setPlayerModelType(Model *humanoidModel) +{ + resModel = humanoidModel; +} + float LivingEntityRenderer::rotlerp(float from, float to, float a) { float diff = to - from; @@ -56,8 +55,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d } shared_ptr mob = dynamic_pointer_cast(_mob); - shared_ptr player = dynamic_pointer_cast(_mob); - Model *resModel = static_cast(model); if (mob == nullptr) { @@ -67,30 +64,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d glPushMatrix(); glDisable(GL_CULL_FACE); - if (player != nullptr) - { - Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModelSlim); - else - resModel = static_cast(modelSlim); - } - else - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModel); - else - resModel = static_cast(model); - } - } - else - resModel = static_cast(model); - resModel->attackTime = getAttackAnim(mob, a); if (armor != nullptr) armor->attackTime = resModel->attackTime; resModel->riding = mob->isRiding(); @@ -281,33 +254,6 @@ void LivingEntityRenderer::render(shared_ptr _mob, double x, double y, d void LivingEntityRenderer::renderModel(shared_ptr mob, float wp, float ws, float bob, float headRotMinusBodyRot, float headRotx, float scale) { - shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel = static_cast(model); - - if (player != nullptr) - { - Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModelSlim); - else - resModel = static_cast(modelSlim); - } - else - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModel); - else - resModel = static_cast(model); - } - } - else - resModel = static_cast(model); - bindTexture(mob); if (!mob->isInvisible()) { @@ -351,7 +297,7 @@ void LivingEntityRenderer::setupRotations(shared_ptr mob, float bo else { wstring name = mob->getAName(); - if (name == L"Dinnerbone" || name == L"Grumm") + if (name == L"Dinnerbone" || name == L"Grumm" || mob->getAnimOverrideBitmask() & (1 << HumanoidModel::eAnim_Dinnerbone)) { if ( !mob->instanceof(eTYPE_PLAYER) || !dynamic_pointer_cast(mob)->isCapeHidden() ) { @@ -379,33 +325,6 @@ void LivingEntityRenderer::additionalRendering(shared_ptr mob, flo void LivingEntityRenderer::renderArrows(shared_ptr mob, float a) { - shared_ptr player = dynamic_pointer_cast(mob); - Model *resModel = static_cast(model); - - if (player != nullptr) - { - Textures *textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModelSlim); - else - resModel = static_cast(modelSlim); - } - else - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newModel); - else - resModel = static_cast(model); - } - } - else - resModel = static_cast(model); - int arrowCount = mob->getArrowCount(); if (arrowCount > 0) diff --git a/Minecraft.Client/LivingEntityRenderer.h b/Minecraft.Client/LivingEntityRenderer.h index ba2aa330..5c564e37 100644 --- a/Minecraft.Client/LivingEntityRenderer.h +++ b/Minecraft.Client/LivingEntityRenderer.h @@ -17,11 +17,13 @@ class LivingEntityRenderer : public EntityRenderer protected: //Model *model; // 4J Stu - This shadows the one in EntityRenderer Model *armor; + Model *resModel; public: - LivingEntityRenderer(Model *model, float shadow, bool slimHands = 0, bool createNewVar = 0); + LivingEntityRenderer(Model *model, float shadow, bool isPlayer = false); virtual void render(shared_ptr mob, double x, double y, double z, float rot, float a); virtual void setArmor(Model *armor); + virtual void setPlayerModelType(Model *humanoidModel); private: float rotlerp(float from, float to, float a); diff --git a/Minecraft.Client/ModelPart.cpp b/Minecraft.Client/ModelPart.cpp index 07d3bc17..152dc000 100644 --- a/Minecraft.Client/ModelPart.cpp +++ b/Minecraft.Client/ModelPart.cpp @@ -14,6 +14,7 @@ void ModelPart::_init() bMirror = false; visible = true; neverRender = false; + hideWithArmor = 0L; x=y=z = 0.0f; xRot=yRot=zRot = 0.0f; translateX = translateY = translateZ = 0.0f; diff --git a/Minecraft.Client/ModelPart.h b/Minecraft.Client/ModelPart.h index 61e26ab9..5e605aa9 100644 --- a/Minecraft.Client/ModelPart.h +++ b/Minecraft.Client/ModelPart.h @@ -17,6 +17,7 @@ public: bool bMirror; bool visible; bool neverRender; + unsigned int hideWithArmor; vector cubes; vector children; static const float RAD; diff --git a/Minecraft.Client/PlayerRenderer.cpp b/Minecraft.Client/PlayerRenderer.cpp index 8ff3bf85..5c033874 100644 --- a/Minecraft.Client/PlayerRenderer.cpp +++ b/Minecraft.Client/PlayerRenderer.cpp @@ -16,7 +16,6 @@ #include "../Minecraft.World/StringHelpers.h" #include "SkeletonHeadModel.h" #include "Textures.h" -#include "Skins.h" ResourceLocation PlayerRenderer::SKELETON_LOCATION = ResourceLocation(TN_MOB_SKELETON); ResourceLocation PlayerRenderer::WITHER_SKELETON_LOCATION = ResourceLocation(TN_MOB_WITHER_SKELETON); @@ -64,16 +63,22 @@ static unsigned int nametagColorForIndex(int index) ResourceLocation PlayerRenderer::DEFAULT_LOCATION = ResourceLocation(TN_MOB_CHAR); -PlayerRenderer::PlayerRenderer() : LivingEntityRenderer(new HumanoidModel(0), 0.5f, true, true) +PlayerRenderer::PlayerRenderer() : LivingEntityRenderer( new HumanoidModel(0), 0.5f, true ) { - humanoidModel = static_cast(model); - humanoidModelSlim = static_cast(modelSlim); - newHumanoidModel = static_cast(newModel); - newHumanoidModelSlim = static_cast(newModelSlim); + humanoidModel = static_cast(model); + humanoidModelWide = static_cast(modelWide); + humanoidModelSlim = static_cast(modelSlim); - armorParts1 = new HumanoidModel(1.0f); - armorParts2 = new HumanoidModel(0.5f); - armorParts3 = new HumanoidModel(0.5f); + armorParts1 = new HumanoidModel(1.0f, true); + armorParts2 = new HumanoidModel(0.5f, true); + armorParts3 = new HumanoidModel(0.5f, true); +} + +void PlayerRenderer::setModelType(shared_ptr player) +{ + if (Player::GetModelTypeFromTextureId(player->getCustomSkin()) == 1 || Player::GetModelTypeFromAnimBitmask(player->getAnimOverrideBitmask()) == 1) resModel = humanoidModelWide; + else if (Player::GetModelTypeFromTextureId(player->getCustomSkin()) == 2 || Player::GetModelTypeFromAnimBitmask(player->getAnimOverrideBitmask()) == 2) resModel = humanoidModelSlim; + else resModel = humanoidModel; } unsigned int PlayerRenderer::getNametagColour(int index) @@ -87,6 +92,7 @@ int PlayerRenderer::prepareArmor(shared_ptr _player, int layer, fl { // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr player = dynamic_pointer_cast(_player); + setModelType(player); // 4J-PB - need to disable rendering armour for some special skins (Daleks) unsigned int uiAnimOverrideBitmask = player->getAnimOverrideBitmask(); @@ -116,9 +122,9 @@ int PlayerRenderer::prepareArmor(shared_ptr _player, int layer, fl armor->leg1->visible = layer == 2 || layer == 3; setArmor(armor); - if (armor != nullptr) armor->attackTime = model->attackTime; - if (armor != nullptr) armor->riding = model->riding; - if (armor != nullptr) armor->young = model->young; + if (armor != nullptr) armor->attackTime = resModel->attackTime; + if (armor != nullptr) armor->riding = resModel->riding; + if (armor != nullptr) armor->young = resModel->young; float brightness = SharedConstants::TEXTURE_LIGHTING ? 1 : player->getBrightness(a); if (armorItem->getMaterial() == ArmorItem::ArmorMaterial::CLOTH) @@ -221,38 +227,12 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel* resModel = static_cast(model); if (mob == nullptr) return; if (mob->hasInvisiblePrivilege()) return; - if (mob != nullptr) - { - Textures* textures = Minecraft::GetInstance()->textures; - int skinId = mob->getPlayerDefaultSkin() - 1; - int defaultSkin = mob->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModelSlim); - else - resModel = static_cast(humanoidModelSlim); - } - else - { - if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModel); - else - resModel = static_cast(humanoidModel); - } - } - else - resModel = static_cast(model); - - /*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; - else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel; - else resModel = humanoidModel;*/ + setModelType(mob); + setPlayerModelType(resModel); shared_ptr item = mob->inventory->getSelected(); @@ -341,6 +321,12 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double armorParts2->idle = false; } + // Get armor in armor slot so we can hide the armor layer of the skin - Langtanium + shared_ptr itemHelmet = mob->inventory->getArmor(3); + shared_ptr itemChestplate = mob->inventory->getArmor(2); + shared_ptr itemLeggings = mob->inventory->getArmor(1); + shared_ptr itemBoots = mob->inventory->getArmor(0); + // 4J-PB - any additional parts to turn on for this player (skin dependent) vector* pAdditionalModelParts = mob->GetAdditionalModelParts(); //turn them on @@ -348,7 +334,16 @@ void PlayerRenderer::render(shared_ptr _mob, double x, double y, double { for (ModelPart* pModelPart : *pAdditionalModelParts) { - pModelPart->visible = true; + if (itemHelmet != nullptr && pModelPart->hideWithArmor & (1 << 0)) // Hide the skin boxes that have the "hide when helmet is worn" bit flag - Langtanium + pModelPart->visible = false; + else if (itemChestplate != nullptr && pModelPart->hideWithArmor & (1 << 1)) // Hide the skin boxes that have the "hide when chestplate is worn" bit flag - Langtanium + pModelPart->visible = false; + else if (itemLeggings != nullptr && pModelPart->hideWithArmor & (1 << 2)) // Hide the skin boxes that have the "hide when leggings are worn" bit flag - Langtanium + pModelPart->visible = false; + else if (itemBoots != nullptr && pModelPart->hideWithArmor & (1 << 3)) // Hide the skin boxes that have the "hide when boots are worn" bit flag - Langtanium + pModelPart->visible = false; + else + pModelPart->visible = true; } } @@ -379,35 +374,7 @@ void PlayerRenderer::additionalRendering(shared_ptr _mob, float a) // 4J - dynamic cast required because we aren't using templates/generics in our version shared_ptr mob = dynamic_pointer_cast(_mob); - HumanoidModel* resModel = static_cast(model); - - if (mob != nullptr) - { - Textures* textures = Minecraft::GetInstance()->textures; - int skinId = mob->getPlayerDefaultSkin() - 1; - int defaultSkin = mob->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModelSlim); - else - resModel = static_cast(humanoidModelSlim); - } - else - { - if (textures->getHeight(mob->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModel); - else - resModel = static_cast(humanoidModel); - } - } - else - resModel = static_cast(model); - - /*if (mob != nullptr && newHumanoidModelSlim != nullptr && (mob->getCustomSkin() >= 10 && mob->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; - else if (mob != nullptr && newHumanoidModel != nullptr && (mob->getCustomSkin() >= 2 && mob->getCustomSkin() <= 9)) resModel = newHumanoidModel; - else resModel = humanoidModel;*/ + setModelType(mob); shared_ptr headGear = mob->inventory->getArmor(3); if (headGear != nullptr) @@ -741,35 +708,7 @@ void PlayerRenderer::scale(shared_ptr player, float a) void PlayerRenderer::renderHand() { shared_ptr player = dynamic_pointer_cast(Minecraft::GetInstance()->player); - HumanoidModel* resModel = static_cast(model); - - if (player != nullptr) - { - Textures* textures = Minecraft::GetInstance()->textures; - int skinId = player->getPlayerDefaultSkin() - 1; - int defaultSkin = player->getPlayerDefaultSkin() + 35; - - if (slim[skinId] == true) - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModelSlim); - else - resModel = static_cast(humanoidModelSlim); - } - else - { - if (textures->getHeight(player->customTextureUrl, defaultSkin) == 64) - resModel = static_cast(newHumanoidModel); - else - resModel = static_cast(humanoidModel); - } - } - else - resModel = static_cast(model); - - /*if (player != nullptr && newHumanoidModelSlim != nullptr && (player->getCustomSkin() >= 10 && player->getCustomSkin() <= 18)) resModel = newHumanoidModelSlim; - else if (player != nullptr && newHumanoidModel != nullptr && (player->getCustomSkin() >= 2 && player->getCustomSkin() <= 9)) resModel = newHumanoidModel; - else resModel = humanoidModel;*/ + setModelType(player); float brightness = 1; glColor3f(brightness, brightness, brightness); @@ -781,9 +720,12 @@ void PlayerRenderer::renderHand() // 4J-PB - does this skin have its arm0 disabled? (Dalek, etc) if ((resModel->m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_DisableRenderArm0)) == 0) resModel->arm0->render(1 / 16.0f, true); + // Does this skin have its sleeve0 disabled? + if ((resModel->m_uiAnimOverrideBitmask & (1 << HumanoidModel::eAnim_DisableRenderSleeve0)) == 0 && resModel->sleeve0 != nullptr) + resModel->sleeve0->render(1 / 16.0f, true); //Render custom skin boxes on viewmodel - Botch - vector* additionalModelParts = Minecraft::GetInstance()->player->GetAdditionalModelParts(); + vector* additionalModelParts = player->GetAdditionalModelParts(); if (!additionalModelParts) return; //If there are no custom boxes, return. This fixes bug where the game will crash if you select a skin with no additional boxes. vector armchildren = resModel->arm0->children; std::unordered_set additionalModelPartSet(additionalModelParts->begin(), additionalModelParts->end()); @@ -801,6 +743,25 @@ void PlayerRenderer::renderHand() } } } + //Render custom skin boxes on viewmodel for sleeve0 + if (resModel->sleeve0!=nullptr) + { + vector sleevechildren = resModel->sleeve0->children; + for (const auto& x : sleevechildren) { + if (x) { + if (additionalModelPartSet.find(x) != additionalModelPartSet.end()) { //This is to verify box is still actually on current skin + glPushMatrix(); + //We need to transform to match offset of arm/sleeve + glTranslatef(-5 * 0.0625f, 2 * 0.0625f, 0); + glRotatef(0.1 * (180.0f / PI), 0, 0, 1); + x->visible = true; + x->render(1.0f / 16.0f, true); + x->visible = false; + glPopMatrix(); + } + } + } + } } void PlayerRenderer::setupPosition(shared_ptr _mob, double x, double y, double z) @@ -857,7 +818,7 @@ void PlayerRenderer::setupRotations(shared_ptr _mob, float bob, fl } } - else + else { LivingEntityRenderer::setupRotations(mob, bob, bodyRot, a); } diff --git a/Minecraft.Client/PlayerRenderer.h b/Minecraft.Client/PlayerRenderer.h index 8accdc7f..fb655ec7 100644 --- a/Minecraft.Client/PlayerRenderer.h +++ b/Minecraft.Client/PlayerRenderer.h @@ -14,9 +14,9 @@ public: private: HumanoidModel *humanoidModel; + HumanoidModel *humanoidModelWide; HumanoidModel *humanoidModelSlim; - HumanoidModel *newHumanoidModel; - HumanoidModel *newHumanoidModelSlim; + HumanoidModel *resModel; HumanoidModel *armorParts1; HumanoidModel *armorParts2; @@ -38,6 +38,7 @@ private: static const wstring MATERIAL_NAMES[5]; protected: + virtual void setModelType(shared_ptr player); virtual int prepareArmor(shared_ptr _player, int layer, float a); virtual void prepareSecondPassArmor(shared_ptr mob, int layer, float a); diff --git a/Minecraft.Client/SkinBox.h b/Minecraft.Client/SkinBox.h index b4600f1d..08b3073a 100644 --- a/Minecraft.Client/SkinBox.h +++ b/Minecraft.Client/SkinBox.h @@ -19,6 +19,6 @@ enum eBodyPart typedef struct { eBodyPart ePart; - float fX,fY,fZ,fW,fH,fD,fU,fV; + float fX,fY,fZ,fW,fH,fD,fU,fV,fA,fM,fS; } SKIN_BOX; diff --git a/Minecraft.Client/Skins.h b/Minecraft.Client/Skins.h deleted file mode 100644 index 7596fa7f..00000000 --- a/Minecraft.Client/Skins.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include -using namespace std; - -class AABB; -class Recipy; -class Object; - -static std::map slim = { - { 0, false }, - { 1, false }, - { 2, false }, - { 3, false }, - { 4, false }, - { 5, false }, - { 6, false }, - { 7, false }, - { 8, false }, - { 9, true }, - { 10, true }, - { 11, true }, - { 12, true }, - { 13, true }, - { 14, true }, - { 15, true }, - { 16, true }, - { 17, true }, - { 18, true }, -}; \ No newline at end of file diff --git a/Minecraft.Client/Textures.cpp b/Minecraft.Client/Textures.cpp index 627255b6..82cdf81e 100644 --- a/Minecraft.Client/Textures.cpp +++ b/Minecraft.Client/Textures.cpp @@ -72,16 +72,16 @@ const wchar_t *Textures::preLoaded[TN_COUNT] = L"mob/char5", L"mob/char6", L"mob/char7", - L"mob/char8", - L"mob/char9", - L"mob/char10", - L"mob/char11", - L"mob/char12", - L"mob/char13", - L"mob/char14", - L"mob/char15", - L"mob/char16", - L"mob/char17", + L"mob/alex", + L"mob/alex1", + L"mob/alex2", + L"mob/alex3", + L"mob/alex4", + L"mob/alex5", + L"mob/alex6", + L"mob/alex7", + L"mob/DevAlex", + L"mob/DevSteve", L"terrain/moon", L"terrain/sun", L"armor/power", @@ -1697,16 +1697,16 @@ TEXTURE_NAME OriginalImages[] = TN_MOB_CHAR5, TN_MOB_CHAR6, TN_MOB_CHAR7, - TN_MOB_CHAR8, - TN_MOB_CHAR9, - TN_MOB_CHAR10, - TN_MOB_CHAR11, - TN_MOB_CHAR12, - TN_MOB_CHAR13, - TN_MOB_CHAR14, - TN_MOB_CHAR15, - TN_MOB_CHAR16, - TN_MOB_CHAR17, + TN_MOB_ALEX, + TN_MOB_ALEX1, + TN_MOB_ALEX2, + TN_MOB_ALEX3, + TN_MOB_ALEX4, + TN_MOB_ALEX5, + TN_MOB_ALEX6, + TN_MOB_ALEX7, + TN_MOB_DEVALEX, + TN_MOB_DEVSTEVE, TN_MISC_MAPBG, diff --git a/Minecraft.Client/Textures.h b/Minecraft.Client/Textures.h index 5f08fe57..48eec6a4 100644 --- a/Minecraft.Client/Textures.h +++ b/Minecraft.Client/Textures.h @@ -63,16 +63,16 @@ typedef enum _TEXTURE_NAME TN_MOB_CHAR5, TN_MOB_CHAR6, TN_MOB_CHAR7, - TN_MOB_CHAR8, - TN_MOB_CHAR9, - TN_MOB_CHAR10, - TN_MOB_CHAR11, - TN_MOB_CHAR12, - TN_MOB_CHAR13, - TN_MOB_CHAR14, - TN_MOB_CHAR15, - TN_MOB_CHAR16, - TN_MOB_CHAR17, + TN_MOB_ALEX, + TN_MOB_ALEX1, + TN_MOB_ALEX2, + TN_MOB_ALEX3, + TN_MOB_ALEX4, + TN_MOB_ALEX5, + TN_MOB_ALEX6, + TN_MOB_ALEX7, + TN_MOB_DEVALEX, + TN_MOB_DEVSTEVE, TN_TERRAIN_MOON, TN_TERRAIN_SUN, TN_POWERED_CREEPER, diff --git a/Minecraft.World/Player.cpp b/Minecraft.World/Player.cpp index 8dd4930a..97d6e198 100644 --- a/Minecraft.World/Player.cpp +++ b/Minecraft.World/Player.cpp @@ -727,6 +727,22 @@ void Player::setCustomSkin(DWORD skinId) } +int Player::GetModelTypeFromAnimBitmask(unsigned int uiAnimOverrideBitmask) +{ + if (uiAnimOverrideBitmask&(1< 8 && textureId < 18) return 2; + else if (textureId == 18) return 1; + else if (textureId > 44 && textureId < 54) return 2; + else if (textureId == 54) return 1; + else return 0; +} + unsigned int Player::getSkinAnimOverrideBitmask(DWORD skinId) { unsigned long bitmask = 0L; @@ -2903,25 +2919,25 @@ int Player::getTexture() case eDefaultSkins_Skin7: return TN_MOB_CHAR7; // 4J - was L"/mob/char7.png"; case eDefaultSkins_Skin8: - return TN_MOB_CHAR8; // 4J - was L"/mob/char8.png"; + return TN_MOB_ALEX; // 4J - was L"/mob/alex.png"; case eDefaultSkins_Skin9: - return TN_MOB_CHAR9; // 4J - was L"/mob/char9.png"; + return TN_MOB_ALEX1; // 4J - was L"/mob/alex1.png"; case eDefaultSkins_Skin10: - return TN_MOB_CHAR10; // 4J - was L"/mob/char10.png"; + return TN_MOB_ALEX2; // 4J - was L"/mob/alex2.png"; case eDefaultSkins_Skin11: - return TN_MOB_CHAR11; // 4J - was L"/mob/char11.png"; + return TN_MOB_ALEX3; // 4J - was L"/mob/alex3.png"; case eDefaultSkins_Skin12: - return TN_MOB_CHAR12; // 4J - was L"/mob/char12.png"; + return TN_MOB_ALEX4; // 4J - was L"/mob/alex4.png"; case eDefaultSkins_Skin13: - return TN_MOB_CHAR13; // 4J - was L"/mob/char13.png"; + return TN_MOB_ALEX5; // 4J - was L"/mob/alex5.png"; case eDefaultSkins_Skin14: - return TN_MOB_CHAR14; // 4J - was L"/mob/char14.png"; + return TN_MOB_ALEX6; // 4J - was L"/mob/alex6.png"; case eDefaultSkins_Skin15: - return TN_MOB_CHAR15; // 4J - was L"/mob/char15.png"; + return TN_MOB_ALEX7; // 4J - was L"/mob/alex7.png"; case eDefaultSkins_Skin16: - return TN_MOB_CHAR16; // 4J - was L"/mob/char16.png"; + return TN_MOB_DEVALEX; // 4J - was L"/mob/DevAlex.png"; case eDefaultSkins_Skin17: - return TN_MOB_CHAR17; // 4J - was L"/mob/char17.png"; + return TN_MOB_DEVSTEVE; // 4J - was L"/mob/DevSteve.png"; default: return TN_MOB_CHAR; // 4J - was L"/mob/char.png"; diff --git a/Minecraft.World/Player.h b/Minecraft.World/Player.h index 61413adc..ecaddafa 100644 --- a/Minecraft.World/Player.h +++ b/Minecraft.World/Player.h @@ -442,6 +442,8 @@ public: static DWORD getCapeIdFromPath(const wstring &cape); static wstring getCapePathFromId(DWORD capeId); static unsigned int getSkinAnimOverrideBitmask(DWORD skinId); + static int GetModelTypeFromAnimBitmask(unsigned int uiAnimOverrideBitmask); + static int GetModelTypeFromTextureId(int textureId); // 4J Added void setXuid(PlayerUID xuid); diff --git a/Minecraft.World/TextureAndGeometryPacket.cpp b/Minecraft.World/TextureAndGeometryPacket.cpp index 1c920ee7..41fe933f 100644 --- a/Minecraft.World/TextureAndGeometryPacket.cpp +++ b/Minecraft.World/TextureAndGeometryPacket.cpp @@ -177,6 +177,9 @@ void TextureAndGeometryPacket::read(DataInputStream *dis) //throws IOException this->BoxDataA[i].fD = dis->readFloat(); this->BoxDataA[i].fU = dis->readFloat(); this->BoxDataA[i].fV = dis->readFloat(); + this->BoxDataA[i].fA = dis->readFloat(); + this->BoxDataA[i].fM = dis->readFloat(); + this->BoxDataA[i].fS = dis->readFloat(); } } @@ -203,6 +206,9 @@ void TextureAndGeometryPacket::write(DataOutputStream *dos) //throws IOException dos->writeFloat(this->BoxDataA[i].fD); dos->writeFloat(this->BoxDataA[i].fU); dos->writeFloat(this->BoxDataA[i].fV); + dos->writeFloat(this->BoxDataA[i].fA); + dos->writeFloat(this->BoxDataA[i].fM); + dos->writeFloat(this->BoxDataA[i].fS); } }