30-06-2008, 07:08 PM
This isn't really an optimization, more of a help when changing things in the CanMove function. If you ever had to change something in the CanMove function you know that you have to change every direction - Adding this CheckDirection function - you'll only need to edit the CheckDirection.
modGameLogic
Add the following:
Replace Function CanMove with the following:
If there are any problems please let me know.
modGameLogic
Add the following:
Code:
Function CheckDirection(ByVal Direction As Byte) As Boolean
Dim X As Long, Y As Long, i As Long
CheckDirection = False
Select Case Direction
Case DIR_UP
X = GetPlayerX(MyIndex)
Y = GetPlayerY(MyIndex) - 1
Case DIR_DOWN
X = GetPlayerX(MyIndex)
Y = GetPlayerY(MyIndex) + 1
Case DIR_LEFT
X = GetPlayerX(MyIndex) - 1
Y = GetPlayerY(MyIndex)
Case DIR_RIGHT
X = GetPlayerX(MyIndex) + 1
Y = GetPlayerY(MyIndex)
End Select
' Check to see if the map tile is blocked or not
If Map.Tile(X, Y).Type = TILE_TYPE_BLOCKED Then
CheckDirection = True
Exit Function
End If
' Check to see if the key door is open or not
If Map.Tile(X, Y).Type = TILE_TYPE_KEY Then
' This actually checks if its open or not
If TempTile(X, Y).DoorOpen = NO Then
CheckDirection = True
Exit Function
End If
End If
' Check to see if a player is already on that tile
For i = 1 To MAX_PLAYERS
If IsPlaying(i) Then
If GetPlayerMap(i) = GetPlayerMap(MyIndex) Then
If (GetPlayerX(i) = X) And (GetPlayerY(i) = Y) Then
CheckDirection = True
Exit Function
End If
End If
End If
Next i
' Check to see if a npc is already on that tile
For i = 1 To MAX_MAP_NPCS
If MapNpc(i).Num > 0 Then
If (MapNpc(i).X = X) And (MapNpc(i).Y = Y) Then
CheckDirection = True
Exit Function
End If
End If
Next i
End Function
Replace Function CanMove with the following:
Code:
Function CanMove() As Boolean
Dim i As Long, d As Long
CanMove = True
' Make sure they aren't trying to move when they are already moving
If Player(MyIndex).Moving 0 Then
CanMove = False
Exit Function
End If
' Make sure they haven't just casted a spell
If Player(MyIndex).CastedSpell = YES Then
If GetTickCount > Player(MyIndex).AttackTimer + 1000 Then
Player(MyIndex).CastedSpell = NO
Else
CanMove = False
Exit Function
End If
End If
d = GetPlayerDir(MyIndex)
If DirUp Then
Call SetPlayerDir(MyIndex, DIR_UP)
' Check to see if they are trying to go out of bounds
If GetPlayerY(MyIndex) > 0 Then
If CheckDirection(DIR_UP) Then
CanMove = False
' Set the new direction if they weren't facing that direction
If d DIR_UP Then
Call SendPlayerDir
End If
Exit Function
End If
Else
' Check if they can warp to a new map
If Map.Up > 0 Then
Call SendPlayerRequestNewMap
GettingMap = True
End If
CanMove = False
Exit Function
End If
End If
If DirDown Then
Call SetPlayerDir(MyIndex, DIR_DOWN)
' Check to see if they are trying to go out of bounds
If GetPlayerY(MyIndex) < MAX_MAPY Then
If CheckDirection(DIR_DOWN) Then
CanMove = False
' Set the new direction if they weren't facing that direction
If d DIR_DOWN Then
Call SendPlayerDir
End If
Exit Function
End If
Else
' Check if they can warp to a new map
If Map.Down > 0 Then
Call SendPlayerRequestNewMap
GettingMap = True
End If
CanMove = False
Exit Function
End If
End If
If DirLeft Then
Call SetPlayerDir(MyIndex, DIR_LEFT)
' Check to see if they are trying to go out of bounds
If GetPlayerX(MyIndex) > 0 Then
If CheckDirection(DIR_LEFT) Then
CanMove = False
' Set the new direction if they weren't facing that direction
If d DIR_LEFT Then
Call SendPlayerDir
End If
Exit Function
End If
Else
' Check if they can warp to a new map
If Map.Left > 0 Then
Call SendPlayerRequestNewMap
GettingMap = True
End If
CanMove = False
Exit Function
End If
End If
If DirRight Then
Call SetPlayerDir(MyIndex, DIR_RIGHT)
' Check to see if they are trying to go out of bounds
If GetPlayerX(MyIndex) < MAX_MAPX Then
If CheckDirection(DIR_RIGHT) Then
CanMove = False
' Set the new direction if they weren't facing that direction
If d DIR_RIGHT Then
Call SendPlayerDir
End If
Exit Function
End If
Else
' Check if they can warp to a new map
If Map.Right > 0 Then
Call SendPlayerRequestNewMap
GettingMap = True
End If
CanMove = False
Exit Function
End If
End If
End Function
If there are any problems please let me know.