Any effect which can be scripted can be timed. There are global variables GameHour, Day, Month and Year which always have the current date and time. So if the effect is to take place an hour from when the player eats the mushroom, the script attached to the mushroom might contain something like this:
If (State == 0) If (OnPCEquip == 1) Set OnPCEquip to 0 Set StartTime to GameHour Set State to 1 Return EndIfElse if (State ==1) If (GameHour != StartTime);An hour or more has passed since mushroom was eaten Set State to 0 [Put scripted effects here] StopScript "name of mushroom script" Return EndIfEndIf
If you want to test for 2 or more game hours passing, it gets a little more complicated, because if the mushroom is eaten at hour 23, the effect would take place at, say, hour 1 of the next day, so you'd have to set up your Ifs to cover that case.