I think this must be a very common problem in game programming where you have lots of characters with various capabilities.
I am using protocols to define actions for characters wherever feasible and inheritance when I need objects to share large blocks of code. The problem with protocols is that they only define the interface, so implementation is often duplicate code. Is there a better approach to this problem, or in this case is it acceptable to have some code duplication? There's no multiple inheritance in Objective-C, so that's out of the question.