I think, if you want to be sure you're getting the player sprite, no matter which sprite it is on the map, you should change this:
Dim Idx
Dim MyState, SprCount
Dim oLayer
Set oLayer = ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
Xcoord = ProjectObj.GamePlayer.PlayerSprite.X
Ycoord = ProjectObj.GamePlayer.PlayerSprite.Y
MyState = ProjectObj.GamePlayer.PlayerSprite.CurState
With ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
SprCount = .SpriteCount
Idx = 0
If .Sprite(Idx) Is ProjectObj.GamePlayer.PlayerSprite Then
oLayer.RemoveSprite(Idx)
End If
Idx = Idx + 1
to this:
Dim Idx
Dim MyState, SprCount
Dim oLayer
Set oLayer = ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
Xcoord = ProjectObj.GamePlayer.PlayerSprite.X
Ycoord = ProjectObj.GamePlayer.PlayerSprite.Y
MyState = ProjectObj.GamePlayer.PlayerSprite.CurState
With ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
SprCount = .SpriteCount - 1
for Idx = 0 to SprCount
If .Sprite(Idx) Is ProjectObj.GamePlayer.PlayerSprite Then
oLayer.RemoveSprite(Idx)
exit for
end if
next
Otherwise, if you only want to remove it if it's zero, just change it to:
Dim MyState
Dim oLayer
Set oLayer = ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
Xcoord = ProjectObj.GamePlayer.PlayerSprite.X
Ycoord = ProjectObj.GamePlayer.PlayerSprite.Y
MyState = ProjectObj.GamePlayer.PlayerSprite.CurState
With ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
If .Sprite(0) Is ProjectObj.GamePlayer.PlayerSprite Then
oLayer.RemoveSprite(0)
End If
Or if you always want to delete it, and are sure that it is always zero:
Dim MyState
Dim oLayer
Set oLayer = ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
Xcoord = ProjectObj.GamePlayer.PlayerSprite.X
Ycoord = ProjectObj.GamePlayer.PlayerSprite.Y
MyState = ProjectObj.GamePlayer.PlayerSprite.CurState
With ProjectObj.GamePlayer.PlayerSprite.rDef.rLayer
oLayer.RemoveSprite(0)
Also, you may want to stick something in at the beginning to make sure it only activates when activating the right special function:
Sub Player_OnSpecialFunction(AddPlayer)
if AddPlayer.Name <> "SpecialFunctionName" then exit sub
or if you have different actions for different functions:
Sub Player_OnSpecialFunction(AddPlayer)
Select Case AddPlayer.Name
Case "SpecialOne"
'DoStuff
Case "SpecialTwo"
'DoOtherStuff
Case "SpecialThree"
'DoEvenMoreStuff
End Select
End Sub