I don't think anyone with any sense would make something from scratch, unless you are extremely ambitious and never give up.
I'm not a kid anymore so if it takes too much effort I could care less.
I like ZC, which I stumbled across AGN about 2003 but never formally joined.
ZC, in earnest, is a joke of a game engine in my opinion.
It's good for beginners though who like the tediousness.
Programming is easier than scripting for me.
I only script for cross compatibility, fix some outdated applications, resource files (mainly pictures). Which are normally done in Assembly or XML. The only thing I can find scripting good for in a game engine is for AI, for which the base structure of enemy and NPC objects do not change. The only thing that changes is how they move, how they act, react. Events can be scripted as well, yet I would prefer a more real time situation. The best AI structure I have ever come across is Radiant AI which is used in Skyrim. It is so complex it is as if the NPC/Enemy is alive.
Why OOP is Important
Instead of having "Enemy" as one object, which it is insinuated, you could have a class for every enemy through inheritance. You can further increase it's capacity with encapsulation and polymorphism which are OOP basics.
Enemy Class Examples: Moblin, Goriya, Darknut, etc.
Then you can go further by making even more subclasses for specifics, and once the evolution has finnished, scripting is required.
Normally scripting is only needed for phase-out, which all patch work has ceased for a particular version (servicing/No Development/No Evolution)