- It's not really from scratch as long as the design goals are known ahead of time. Plus there's always ZC and whatever else for reference. There's a lot of 3rd party code and libs available if you need something in particular. There's really no such thing as "from scratch" nowadays.
- ZC is the best damn LOZ1 engine on the planet Earth and don't you forget it.
- America. Fuck Yeah. ..Also prime rib and bikinis.
That's exactly how ZC does the enemies.
Another approach is to use scripting so that you can have scripted enemies, since you can never add enough polymorphism in c++ to account for all enemy types that users will create themselves at runtime.