I apologize in advance if this is in the wrong section. This is my first time actually posting here. Basically this seems to be a weird bug that I noticed in Game Maker 8.0.
Right now, I'm working on building a fighting game in Game Maker 8.0. I've basically completed the engine, and everything is working pretty well. Except for one issue that seems minor, but is actually a big issue in terms of fighting games; the fact that between different characters, sometimes the alarms, which I use to determine how long a character remains in a "hit" state (and this extends to custom alarms as well not just game maker's built-in ones) will be one "frame," or "tick" off. Like Character A will be in the hit state for 18 frames, while Character B will be in the hit state for 17 frames (oddly enough, these inconsistencies are pretty consistent, no matter how many times I reboot the game the same characters are affected the same way). This doesn't sound like a big deal, but it actually is; that one frame difference can be the difference between whether a combo even works or not. So this becomes a big problem.
Basically, I use instance_activate/instance_deactivate in game maker in order to handle the "hit-freeze." Essentially, "hit-freeze" is a very short pause when an attack connects with an opponent (usually only lasts 8-14 "frames" or "ticks," this is present in pretty much all fighting games from Street Fighter to Super Smash Brothers). This helps the game to flow better and helps with move-buffering which makes combos easier overall. In my hit-freeze event, I deactivate all relevant objects in the room (characters and projectiles), immediately create a series of temporary objects that take the sprite_index, image_index, depth etc. of the characters/projectiles at the time that the freeze occurs (so the characters and such don't disappear during the hit-freeze period). This seems overly complicated, but it seemed easier than essentially making a custom instance_deactivate/instance_activate event. Anyways, things were working well; then when I was checking the frame data for each character to make sure that I was recording it correctly and that it was how I wanted it, I noticed that between certain characters, the amount of hitstun/blockstun was off by a frame. I tried several different things to fix the problem, between flipping the order where the alarm is set (either having the alarm set before the hit-freeze occurs or after it ends) or creating custom alarms. Both of these only served to switch which characters were affected by the proper amount of hitstun/blockstun and which ones were off by a frame. However, once I removed the hit-freeze, the problem seemed to go away (I'm gonna double check this for every one of my characters once I get the chance to confirm this).
So in conclusion, it appears that with the instance_activate/instance_deactivate events, it'll sometimes skip a frame for an alarm event or do an extra step for a step event (such as with a custom alarm).
Now, does anyone know if this got fixed in Game Maker 8.1 or Game Maker Studio? I haven't upgraded to Game Maker 8.1 yet, and I'm not ready to get Game Maker Studio, so it'd be nice to know if this got fixed at all in either before I'm forced to completely recode the hit-freeze in my game to fix this seemingly minor issue...