Here's a fixed MoveCharacter routine. Before, the character would move about 5-6 spaces until he stopped. This will make him only move one:
VB Code:
  1. Private Sub MoveCharacter()
  2. If SpeedCount Mod 3 = 0 Then
  3. 'move the character
  4. If Key(vbKeyUp) = True Then
  5. 'move the character up on plain grass
  6. Key(vbKeyUp) = False
  7. If MapArray(uCharacter.x, uCharacter.y - 1) = "G" Then
  8.     uCharacter.y = uCharacter.y - 1
  9.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  10.     picGameArea.Refresh
  11.     Exit Sub
  12. End If
  13. 'move the character up and fight monster
  14. If MapArray(uCharacter.x, uCharacter.y - 1) = "M" Then
  15.     uCharacter.y = uCharacter.y - 1
  16.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  17.     picGameArea.Refresh
  18. End If
  19. End If
  20. If Key(vbKeyDown) = True Then
  21. 'move the character down on plain grass
  22. Key(vbKeyDown) = False
  23. If MapArray(uCharacter.x, uCharacter.y + 1) = "G" Then
  24.     uCharacter.y = uCharacter.y + 1
  25.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  26.     picGameArea.Refresh
  27.     Exit Sub
  28. End If
  29. 'move the character down and fight monster
  30. If MapArray(uCharacter.x, uCharacter.y + 1) = "M" Then
  31.     uCharacter.y = uCharacter.y + 1
  32.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  33.     picGameArea.Refresh
  34.     Key(vbKeyDown) = False
  35.     picFight.ZOrder 0
  36.     picFight.Visible = True
  37.     picFight.SetFocus
  38.     FightInit
  39. End If
  40. End If
  41. If Key(vbKeyLeft) = True Then
  42. 'move the character left on plain grass
  43. Key(vbKeyLeft) = False
  44. If MapArray(uCharacter.x - 1, uCharacter.y) = "G" Then
  45.     uCharacter.x = uCharacter.x - 1
  46.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  47.     picGameArea.Refresh
  48.     Exit Sub
  49. End If
  50. 'move the character left and fight monster
  51. If MapArray(uCharacter.x - 1, uCharacter.y) = "M" Then
  52.     uCharacter.x = uCharacter.x - 1
  53.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  54.     picGameArea.Refresh
  55. End If
  56. End If
  57. If Key(vbKeyRight) = True Then
  58. Key(vbKeyRight) = False
  59. 'move character right on plain grass
  60. If MapArray(uCharacter.x + 1, uCharacter.y) = "G" Then
  61.     uCharacter.x = uCharacter.x + 1
  62.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  63.     picGameArea.Refresh
  64.     Exit Sub
  65. End If
  66. 'move the character right and fight monster
  67. If MapArray(uCharacter.x + 1, uCharacter.y) = "M" Then
  68.     uCharacter.x = uCharacter.x + 1
  69.     BitBlt picGameArea.hDC, uCharacter.x * 32, uCharacter.y * 32, 32, 32, picCharacter.hDC, 0, 0, vbSrcCopy
  70.     picGameArea.Refresh
  71. End If
  72. End If
  73.  
  74. 'show information sign
  75. If Key(13) = True And MapArray(uCharacter.x, uCharacter.y - 1) = "S" Then
  76.     DoSign uCharacter.x, uCharacter.y - 1
  77.     picSign.ZOrder 0
  78.     picSign.Visible = True
  79.     picSign.SetFocus
  80.     Key(13) = False
  81. End If
  82. End If
  83.  
  84. End Sub
I made them false once they had been validated so they wouldn't be again.