The mframe_t sequences tells the monsters when to fire. When the proper sequence is chosen as current move, the monster will fire in one frame or another. One or several frames point at a proper firing function for that particular type of monster. The firing function relies on a few functions in g_monster.c, which in turn relies on the weapon functions of g_weapon.c. Note that the monsters never need to worry about weapon kicks, ammo and weapon animation. They only send network messages about muzzleflashes and fire the bullets.