The sprite polygon shape only supports up to 12 points so trying to represent a country's outline with with such a rough approximation probably wont give great results but might just be enough depending on your country shapes.
The method of using a colour channel (alpha value for instance) works ok. I used a single image for a map where the country code was embedded in another image of the same size. Then a lookup of the pixel value for the colour gave you the country.
I used a memblock to look up the pixel value at an x/y coordinate. It was in teir 1 but would work in teir 2 also...
function GetPixelColourFromImageMemblock(Id as integer, x as integer, y as integer,ColOption as integer)
// ColOption
// R=0, G=1,B=2,A=3
// Get the dimensions of the image in the memblock
Width = GetMemblockInt(Id,0)
Height = GetMemblockInt(Id,4)
Off = 12 + (4*x) + (4*y*Width) + ColOption
// Sanity check the input values so we dont cause an out of bounds error
if x>Width then exitfunction 0
if x<0 then exitfunction 0
if y>Height then exitfunction 0
if y<0 then exitfunction 0
if ColOption>3 then exitfunction 0
// Get the colour
Col = GetMemblockByte(Id,Off)
endfunction Col
Look up the alpha...index that into a Country array and it was done.
In teir 2 there are a few extra functions which return a pointer to an image so you can do the lookup into the image data in C instead of using GetMemblockByte() etc...
In your case you would be checking if the sprite colour was white and then cancelling the sprite hit. Thats would mean you might need to lookup into memblocks for all your countries though.