In my opinion:
Underscores are for seperating concepts, while uppercase is for seperating words.
MyMod_SomeCode
Also, each concept should start uppercase unless the first word of it is a verb.
Thus:
isEnabled_SubFunction_elseCra sh
if you wand a convoluted and unrealistic example.
In variable names, though, they can be from a n-dimensional array, with n >= 2, so _ doesn't work as well in variables.
PlayerSlow doesn't feel right, SlowPlayer and Player_Slow do.
Summary: In my opinion, for naming (especially function names), an uppercase letter is like a space, and an underscore is like a comma or a semicolon, a small pause between groups of words that don't flow together with just a space but clarify each other. "Arthur Dent" and "Dent, Arthur" make sense, but "Dent Arthur" doesn't.