After reading this post on mouse cursor looping (https://www.adventuregamestudio.co.uk/forums/index.php?topic=49845.msg636478495#msg636478495) I went ahead and tried to replicate the same behaviour using the latest build of AGS 3.5.1. It no longer appears to work - the mouse wait cursor continues to reset itself to the first frame when a new Wait(x) is called.
I also noticed that when the animation runs, it "hiccups" and skips between frames. It appears as if the engine is competing with itself for the View's graphic property - sometimes the (below script's) scripting code "wins" and sets the graphic property, other times the view's default animation "wins" and sets the graphic property. Is there a chance that the engine's graphics execution order (or script execution order?), or something else has changed since this code was written in 2014?
Have I missed something obvious?
Update: cause of the problem found. See my response below.
Code below. I have ensured that the correct View is being used, as well as wait delay, frames and sprite numbers.
(at top of script)
// mouse wait cursor
int cursorWaitView = MOUSEWAIT; //view of your cursor
int cursorWaitDelay = 5; //animation delay of your cursor
int cursorWaitFrames = 8; //number of animated frames
int cursorWaitFirstSlot = 21; //ID of the first frame
int cursorWaitCounter; // maintain a counter for the cursor
function UpdateMouseWaitCursor()
{
if (!IsInterfaceEnabled())
{
cursorWaitCounter = (cursorWaitCounter + 1) % (cursorWaitDelay * cursorWaitFrames);
ViewFrame* vf = Game.GetViewFrame(cursorWaitView, 0, 0);
vf.Graphic = cursorWaitFirstSlot + cursorWaitCounter / cursorWaitDelay;
}
}
function repeatedly_execute_always()
{
UpdateMouseWaitCursor();
}
Trying this code in a test project seem to produce desired effect. Maybe there's something else in your game interfering with the mouse looks?
Here's the test project based on sierra template:
https://www.dropbox.com/s/3q9hh49emif0ohh/test--animcursor.zip?dl=0
I test this by having a blocking walk on pressing Space, and calling Wait() in a loop on pressing Enter/Return.
Thank you CW. Your example project allowed me to do a side-by-side comparison with mine, and I pinned down the exact cause: I had all 8 frames of my MOUSEWAIT View populated with graphics in the editor! I deleted all but the first frame, then set its image to zero, and voila - perfect looping behaviour.
So for anyone else who wants to use this little mouse cursor looping trick: your View in the editor must have only one frame with no image in it.
This was mentioned in Khris's original post "-remove all frames from the view but one", but I somehow missed that critical point!
Something I am missing about this, but why do you need to animate your cursor manually at all, could not you use plain view animation?
I am simulating an operating system, which uses a Macintosh-like wristwatch for a wait cursor. It is visually distracting when the hands reset themselves due to a new Wait().