Quote: "I just hide the mouse cursor, replace it with a sprite and then position the sprite using GetRawMouseX() and GetRawMouseY().
"
That is the simplest way, and the way I do it too in the main function that has the sync() call, and I use the SetRawMouseVisible(0) right after I create the custom sprite for the cursor before the main function in the initialization part of my program.
Quote: "You can have multiple sprite positioned liked this and show and hide them depending on the whatever "command" has been selected by the player."
I use animation frames for this rather than separate sprites, which is the same idea, just makes it easier for me to keep track by simply setting the frame and having only one sprite to position with the mouse X & Y .
(the example below is using a frame from a small atlas rather than just a single image to compact resources and/or allow for multiple cursor images, so you can ignore that part if you are using a single image)
//create a sprite for the pointer and hide the mouse pointer
CreateSprite(4,4)
SetSpriteAnimation( 4, 8, 8, 4)
SetSpriteFrame(4,4)
SetSpriteDepth(4,5)
SetRawMouseVisible( 0 )
(example below offsets the sprite for the finger on the hand (my sprite image) to be exact.. will depend on your sprite(s))
(this is at the top of that main function that has my sync() call)
// make the custom cursor
SetSpritePosition(4,GetPointerX()-3,GetPointerY()-1)
The only thing to remember is that you will not know where that cursor is when displaying a message.
So, the user may have trouble hitting the okay button on the message dialog if you don't make it visible before the message and hide it again after.
Of course, they can just hit the enter key for that OK confirmation/continue, but I have experienced situations where the Ok may not have focus. (which will make hitting that OK a real hassle sometimes)
Showing the cursor again makes it solid, but you may have a little lag showing and hiding the cursor, but it should not be a problem in most cases since they need time to read the message and/or return to a ready state for play.
Again, just a heads up, not suggesting a 'best' way, just an option to take in consideration, or not, depending on your apps/users needs.
if GetInternetState() = 0
SetRawMouseVisible(1)
Message("Sorry, but it appears you have no internet connection." + chr(13) + chr(13) + "Connect to the world wide web and try again." + chr(13) + chr(13) + "Otherwise, we will match you with an NPC." + chr(13))
SetRawMouseVisible(0)
endif
Coding things my way since 1981 -- Currently using AppGameKit V2 Tier 1