The problem is not with naming, the problem is with OOP, specifically inheritance and encapsulation.
You could have separate entities for horses, donkeys, mules, zebras and functions that work on them. Maybe less code reuse but state is kept separately, code is very easy to understand, modify and implement. And also is faster to implement.
If you have too many ifs in some functions you have to ask yourself if you architected the code well.