Ah, that's slightly better at least. Here's the updated V6 template:
PICT CurrentCard
gridlayout$ = ""
area$ = "surface"
northcard = 0
southcard = 0
eastcard = 0
westcard = 0
playerY = gridY * 44
playerY = playerY - 39
playerX = gridX * 44
playerX = playerX - 39
moveY = gridY
moveX = gridX
SPRITE 15 playerX playerY $playersprite$$
'----PLAYER CODE--------------------------------------------------------------------------------
ON KEYDOWN
newtile$ = "empty"
IF keydown$ = "UPARROW" THEN moveY = gridY - 1
IF keydown$ = "DOWNARROW" THEN moveY = gridY + 1
IF keydown$ = "LEFTARROW" THEN moveX = gridX - 1
IF keydown$ = "RIGHTARROW" THEN moveX = gridX + 1
'----GRID CODE-----------------------------------------------------------------------------------
moveXY = 0
moveXY = 7 * moveY
moveXY = moveXY - 7
moveXY = moveXY + moveX
newtile$ = MID$ gridlayout$ moveXY 1
IF newtile$ = "0" THEN newtile$ = "empty"
IF newtile$ = "1" THEN newtile$ = "wall"
IF newtile$ = "2" THEN newtile$ = "portal 1"
'---/GRID CODE-----------------------------------------------------------------------------------
IF moveY < 1 THEN
gridY = 7
GOTOCARD northcard
END IF
IF moveY > 7 THEN
gridY = 1
GOTOCARD southcard
END IF
IF moveX > 7 THEN
gridX = 1
GOTOCARD eastcard
END IF
IF moveX < 1 THEN
gridX = 7
GOTOCARD westcard
END IF
IF newtile$ = "portal 1" THEN
gridY = 0
gridX = 0
GOTOCARD 0
END IF
IF newtile$ = "empty" THEN
IF keydown$ = "UPARROW" THEN playerY = playerY - 44
IF keydown$ = "DOWNARROW" THEN playerY = playerY + 44
IF keydown$ = "LEFTARROW" THEN playerX = playerX - 44
IF keydown$ = "RIGHTARROW" THEN playerX = playerX + 44
gridY = moveY
gridX = moveX
END IF
IF newtile$ = "wall" THEN
moveY = gridY
moveX = gridX
END IF
SPRITE 15 playerX playerY
END KEYDOWN
'---/PLAYER CODE--------------------------------------------------------------------------------
Ok...
Based off of the current V5 Grid Nav example, I have made somthing work like smart nav.
SPRITE 10 playerX playerY player1.gif
CLEAR TEXT
PRINT playerX: $playerX$
PRINT playerY: $playerY$
PRINT
PRINT gridX: $gridX$
PRINT gridY: $gridY$
PRINT
PRINT moveX: $moveX$
PRINT moveY: $moveY$
PRINT
PRINT
PRINT movesuccessful: $movesuccessful$
PRINT keydown$: $keydown$$
ON KEYDOWN
directionkeypressed = 0
movesuccessful = 0
IF keydown$ = "UPARROW" THEN moveY = gridY - 1
IF keydown$ = "DOWNARROW" THEN moveY = gridY + 1
IF keydown$ = "LEFTARROW" THEN moveX = gridX - 1
IF keydown$ = "RIGHTARROW" THEN moveX = gridX + 1
IF keydown$ CONTAINS "ARROW" THEN directionkeypressed = 1
IF moveY < 1 THEN movesuccessful = 1
IF moveY > 7 THEN movesuccessful = 1
IF moveX < 1 THEN movesuccessful = 1
IF moveX > 7 THEN movesuccessful = 1
'----GRID CODE-----------------------------------------------------------------------------------
walls$ = " 54 25 46 17 67 77"
portals$ = ""
mypos = 10 * moveX
mypos = mypos + moveY
mpos$ = STR$ mypos
IF walls$ CONTAINS mpos$ THEN
movesuccessful = 1
END IF
IF portals$ CONTAINS mpos$ THEN
'(portal code)
END IF
'---/GRID CODE-----------------------------------------------------------------------------------
IF movesuccessful = 0 THEN
IF keydown$ = "UPARROW" THEN playerY = playerY - 44
IF keydown$ = "DOWNARROW" THEN playerY = playerY + 44
IF keydown$ = "LEFTARROW" THEN playerX = playerX - 44
IF keydown$ = "RIGHTARROW" THEN playerX = playerX + 44
gridY = moveY
gridX = moveX
SPRITE 10 playerX playerY
END IF
IF movesuccessful = 1 THEN
moveY = gridY
moveX = gridX
END IF
CLEAR TEXT
PRINT playerX: $playerX$
PRINT playerY: $playerY$
PRINT
PRINT gridX: $gridX$
PRINT gridY: $gridY$
PRINT
PRINT moveX: $moveX$
PRINT moveY: $moveY$
PRINT
PRINT
PRINT movesuccessful: $movesuccessful$
PRINT keydown$: $keydown$$
END KEYDOWN
BTW, I know that the walls$ string has a space at the beginning, CONTAINS doesn't like the first character :(
Mist