At that age it looks like it would be an approx. 1 in 8400 chance per day that he would die, lol.
Good point. You can see how the old age death probablility is calculated in the CalculateHeroDeathProbabilityInternal method. I made a graph of the chances
here. Those are daily chances.
True, but I'm also basing my conclusion on the fact that I've "simulated" a 1.5.0 game out to about 400 days by just letting it run, and not a single npc hero has died from battle. I've also sprinkled some breakpoints around in the code that deals with death in battle and none of them trigger unless it's in a real time battle with the player. I'm pretty confident it doesn't happen. Whether that's due to a bug or is intentional is another subject.
Decompiling the .dlls with dnSpy. It's coded in C#. The method that kills heroes is ApplyInternal in the KillCharacterAction class. That's a different block of code than the one in the screenshot above (which deals with autobattle casualties), and the two are not connected by function calls in any way that I can tell.
Edit: Here is the method that calculates survival chances. It actually
is called by the above method, but only in the part of the code that deals with regular troop casualties (not for heroes). This same method is also used for real time battle casualty survival odds as well.