I suggest HookEntityRendering a function while the player is poisoned.
Demonstration of what I mean:
//Function for coloring entities. w00t!
//Includes bonus lucency factor!!!!!
void ColorChr(int entity, int color, int lucency)
{
int mask=NewImage(100,100) //Until there is a way of discerning the entity's frame width and height, this'll do.
int RectFill(0,ImageWidth(mask),0,ImageHeight(mask),
RGB(255,0,255),mask); //ImageWidth and ImageHeight in case you want to change the mask's size.
BlitEntityFrame(0,0,entity,entity.frame[entity],mask); //entity.frame is sorta risky, since I don't know too much about that variable, but it should work. Or else, just use what you typically use.
If(!lucency)
{
Silhouette(entity.x[entity]-xwin,
entity.y[entity]-ywin,color,mask,screen);
}
Else
{
BlitEntityFrame(entity.x[entity]-xwin,
entity.y[entity]-ywin,entity,
entity.frame[entity],screen); //Blit the entity onto screen
SetLucent(lucency);
Silhouette(entity.x[entity]-xwin,
entity.y[entity]-ywin,color,mask,screen); //Blit the lucent silhouette over the entity
SetLucent(0);
}
FreeImage(mask); //Very important. Never forget.
}
//Use the above function to make custom functions for your purpose, such as...
void PoisonChr()
{
ColorChr(event.entity, RGB(141,67,152), systemtime % 100); //Cool lucency effect ;D
}
//And then....
HookEntityRender(entity, 'PoisonChr') //do this while the entity is poisoned, and replace 'entity' with your character handle.
Hope that helped.