// Erroneous 0.01 block rewards (wrong logic again, but we need to keep it because it's already happened)
else if (nHeight <= 318000)
{
nSubsidy = (3100 - ((nHeight * 0.01) - 310000)) - 300000;
// NOTE: Seriously!? Who came up with this code as the "fix"? It's the same as:
// nSubsidy = 13100 - nHeight * 0.01;
// That's so utterly wrong and confusing to begin with, it's no wonder things broke.
}
If you follow the story, you will understand why we need to keep that ugly and shit code.
Because the new version need to be compartable with the old versions. If there is a logic, which even is wrong as coin spec, but it's already happend, we need to keep it for sure.
That's why removing an existing code from the original code is a very bad bug, so hopefully hallibit will fix this as very soon as possible.
I still do not know why that part (160,000 - 310,000) was removed

But first of all, I need to blame myself for my terrible reviewing skill.
My point wasn't the fact that it gave the wrong block reward and now needed to be there; it was why did anyone write...
nSubsidy = (3100 - ((nHeight * 0.01) - 310000)) - 300000;
...in the first place? It's the same with the line that says:
nSubsidy = (160000 - (nHeight -160000) ) * COIN;
Really, why are we doing such crappy math? (320000 - nHeight) * COIN is not only more concise, but it's also more easily understood, especially with a well-placed comment. Programming should be reduced to the simplest form possible, not expanded with useless additions. Otherwise why don't we write:
nSubsidy = (32 * (nHeight + 5000) - (nHeight -160000))) * COIN - nHeight * 32 COIN;
Or perhaps:
nSubsidy = (32 * (nHeight + 5000 - nThisIsStupid) - (nHeight -160000))) * COIN - (nHeight * 32 + 544 * (nThisIsStupid 17)) COIN;
I don't even know if I did that math properly, but you get the point I hope: adding numbers and complexity to an expression doesn't help.