Let’s make the MU community active again!
Thanks to everyone who has selflessly shared their fixes in the past. I hope more people will join and contribute their solutions.
https://ibb.co/kVhk9Tx4https://ibb.co/qM5v2rRdhttps://ibb.co/LDZSh2Kzhttps://ibb.co/p6xrdh0Shttps://ibb.co/DHJx9W1whttps://ibb.co/0RWs1WYdhttps://ibb.co/rRq6FKJKGOBoid.cpp

ZzzCharacter.cpp
Search for:
void RenderLinkObject(float x, float y, float z, CHARACTER* c, PART_t* f, int Type, int Level, int Option1, bool Link, bool Translate, int RenderType, bool bRightHandItem)
Add the following below:
CreateSprite(BITMAP_LIGHT_MARKS, Position, fSize + 0.3f, vLight, Object, rand() % 360);
}
break;
}
if (gMapManager.WorldActive != WD_10HEAVEN &&!gMapManager.InHellas() &&!g_Direction.m_CKanturu.IsMayaScene())
{
bool handled = false; // 标记:是否已经在 switch 里专门处理过
switch (Type)
{
//================= 各种翅膀:不带布料 =================
case MODEL_WINGS_OF_ELF: // Wings of Elf
case MODEL_WINGS_OF_HEAVEN: // Wings of Heaven
case MODEL_WINGS_OF_SATAN: // Wings of Satan
case MODEL_WING_OF_CURSE: // Wing of Curse
case MODEL_WINGS_OF_SPIRITS: // Wings of Spirits
case MODEL_WINGS_OF_SOUL: // Wings of Soul
case MODEL_WINGS_OF_DRAGON: // Wings of Dragon
case MODEL_WINGS_OF_DARKNESS: // Wings of Darkness
case MODEL_WINGS_OF_DESPAIR: // Wings of Despair
case MODEL_WING_OF_STORM: // Wing of Storm
case MODEL_WING_OF_ETERNAL: // Wing of Eternal
case MODEL_WING_OF_ILLUSION: // Wing of Illusion
case MODEL_WING_OF_RUIN: // Wing of Ruin
case MODEL_WING_OF_DIMENSION: // Wing of Dimension
case MODEL_WING + 131: // Small Wing of Curse
case MODEL_WING + 132: // Small Wings of Elf
case MODEL_WING + 133: // Small Wings of Heaven
case MODEL_WING + 134: // Small Wings of Satan
b->RenderBodyShadow(); // 普通阴影
handled = true;
break;
//================= 披风:带物理布料的阴影 =================
case MODEL_CAPE_OF_LORD: // Cape of Lord
case MODEL_CAPE_OF_FIGHTER: // Cape of Fighter
case MODEL_CAPE_OF_EMPEROR: // Cape of Emperor
case MODEL_CAPE_OF_OVERRULE: // Cape of Overrule
case MODEL_WING + 130: // Small Cape of Lord
case MODEL_WING + 135: // Little Warrior's Cloak
b->RenderBodyShadow(-1, -1, -1, -1, o->m_pCloth, o->m_byNumCloth);
handled = true;
break;
}
//================= 默认情况(武器 / 盾牌 / 防具 / 其它) =================
if (!handled)
{
// 如果这个模型有布料,就按披风那套画,不然就普通阴影
if (o->m_pCloth && o->m_byNumCloth > 0)
{
b->RenderBodyShadow(-1, -1, -1, -1, o->m_pCloth, o->m_byNumCloth);
}
else
{
b->RenderBodyShadow();
}
}
}
ZzzCharacter.cpp
Search for:
void RenderCharacter(CHARACTER* c, OBJECT* o, int Select)
Find the block:
if (o->Alpha >= 0.5f && c->HideShadow == false)
Replace the entire block with your fixed shadow logic.
if (o->Alpha >= 0.5f && c->HideShadow == false)
{
if (gMapManager.WorldActive != WD_10HEAVEN&& (o->Type == MODEL_PLAYER)&& gMapManager.InHellas() == false)
{
if (gMapManager.InBloodCastle() && o->m_bActionStart && c->Dead > 0)
{
float height = RequestTerrainHeight(o->Position[0], o->Position[1]);
if (height < o->Position[2])
{
o->Position[2] = height;
}
}
o->EnableShadow = true;
for (int i = MAX_BODYPART - 1; i >= 0; i--)
{
PART_t* p = &c->BodyPart[i];
if (p->Type != -1)
{
int Type = p->Type;
RenderPartObject(&c->Object, Type, p, c->Light, o->Alpha, 0, 0, 0, false, false, Translate);
}
else
{
RenderPartObject(&c->Object, MODEL_SHADOW_BODY, NULL, c->Light, o->Alpha, 0, 0, 0, false, false, Translate);
}
}
o->EnableShadow = false;
}
}
Of course, you can also add a shadow toggle option to the Settings menu (opened with the O key).