it's not necessary to hard code such things (as in level specific stuff) into the games controller code. Rather the controller uses a state machine styled structure (or via pointer). So different character classes are handled through a common interface.
This allows new character types to plug into the existing infrastructure. So building levels doesn't require re-compiling the game engine every time.
basic styled pseudo code
Function Handle_Logic()
For each Character()
Select Character.Type
case Car
; do stuff for cars
case Human
; do stuff for people
case Boat
; do stuff for boats
case Dog
; do stuff for dogs
endselect
next
EndFunction