src/eat.cのeatcorpse()より。
1565行目あたりで腐敗度(rotted)の計算をしている。
---
long age = peek_at_iced_corpse_age(otmp);

rotted = (monstermoves - age)/(10L + rn2(20));
if (otmp->cursed) rotted += 2L;
else if (otmp->blessed) rotted -= 2L;
---
rotted = (死体になってからのターン数) / (10 + 0から19のランダムな数)
で計算しているようだ。
ただし、『死体になってからのターン数』は、氷の上にあった期間は時間の進みが1/2になる。
そのあと、呪われていれば+2、祝福されていれば-2される。

その後、食事の判定。
rotted > 5なら "オェ!この%sは腐っている!" で病気フラグ。
rotted > 3なら、80%の確率で "あなたは%s気分が悪い." になりHPがへる。