The error preventing it from compiling is a missing right brace after CR_LIFE; although if you fix that, it'll hang ZC when you use it.
Every
while loop does not need Waitframe() : Only
infinite loops need that.
That doesn't matter here, as item scripts run only for
one frame, so an infinite loop in one is pointless.
Game->Counter[] will truncate -= 0.25 to -= 0. It's a short, and you can only use whole numbers.
Nothing in ZC is a double. We're 32b.
item script Poison
{
void run()
{
Game->DCounter[CR_LIFE] -= Game->MCounter[CR_LIFE];
}
}
Try using DCounter for a 'drain until expended'effect.