Years back I started writing multi-format shellcode, which required me to learn 4 different OS and 3 different chip architectures to the point where I could get assembly running across all of them. That was an insane project that started out as get shellcode that worked on Linux and Freebsd/x86 and just ran and ran as I found more things to add in and tweak. Then I'd sleep through the whole of sunday and turn up for work on monday.
On the other hand I've worked on projects in my work time that are so mind numbingly dull that I've spent 4-6 hours a day actual programming, come home and collapsed in a heap.
It sounds to me like you're going past your wall and it's not flexible. You need to qualify and stick to your limits. The gym, diet and smoking side of things is a good idea, but not enough.
How's your sleep? I find that's the biggest factor in my day.