diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index 2f8304b..bf7f84e 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -119,7 +119,11 @@ void InternalShot(Creature* c, } for (auto& tuple : weapon_meta->bullet_born_offset) { a8::Vec2 bullet_born_offset = a8::Vec2(std::get<0>(tuple), std::get<1>(tuple)); - bullet_born_offset.Rotate(c->GetAttackDir().CalcAngle(a8::Vec2::UP)); + float bullet_born_angle = c->GetAttackDir().CalcAngleEx(a8::Vec2::UP); + if (c->GetAttackDir().x > 0.00001f) { + bullet_born_angle = -bullet_born_angle; + } + bullet_born_offset.Rotate(bullet_born_angle); a8::Vec2 bullet_born_pos = c->GetPos() + bullet_born_offset; if (c->room->OverBorder(bullet_born_pos, 0.0f)) { return; @@ -138,7 +142,11 @@ void InternalShot(Creature* c, } for (auto& tuple : weapon_meta->bullet_born_offset) { a8::Vec2 bullet_born_offset = a8::Vec2(std::get<0>(tuple), std::get<1>(tuple)); - bullet_born_offset.Rotate(c->GetAttackDir().CalcAngle(a8::Vec2::UP)); + float bullet_born_angle = c->GetAttackDir().CalcAngleEx(a8::Vec2::UP); + if (c->GetAttackDir().x > 0.00001f) { + bullet_born_angle = -bullet_born_angle; + } + bullet_born_offset.Rotate(bullet_born_angle); a8::Vec2 bullet_born_pos = c->GetPos() + c->shoot_offset + bullet_born_offset; a8::Vec2 bullet_dir = c->GetAttackDir(); float bullet_angle = std::get<2>(tuple);