thanks for all the tips already guys, some more info:
the a* code I use is a piece of code written by someone else, and I changed all 2d maps into 3d maps.
(and since i'm still playing arounf the actual pathfinding atm is only at the first 3d index)
the base data, is not really known in advance because the player can change the terrain, however I would say that usually a lot of space will not be walkable (either underground or in the air) , having said that I would like to add some flying creatures eventually.. (but maybe they should be using other techniques)
another point is that the original code was build for large groups of characters, (with logic to avoid collision, look for temporary unavailable paths (because of other units))
oh wait i could show this to be hopefully clearer:
Field walkability :Byte[,,],.. 'array that holds wall/obstacle information
openList :Int[ ],.. 'array holding ID# of open list items
whichList :Int[,,] 'array used To record
Field openX :Short[ ],.. 'array stores the x location of an item on the open list
openZ :Short[ ],.. 'array stores the y location of an item on the open list
parentX :Short[,,],.. 'array To store parent of each cell (x)
parentZ :Short[,,],.. 'array To store parent of each cell (z)
Fcost :Byte[ ],.. 'array To store F cost of a cell on the open list
Gcost :Byte[,,],.. 'array To store G cost For each cell.
Hcost :Byte[ ],.. 'array To store H cost of a cell on the open list
tempUnwalkability :Int[,,],.. 'array that holds info about adjacent units
nearBzPath :Short[,,],..
claimedNode :TUnit[,,],.. ' array that stores claimed nodes
gGroupUnit :TUnit[],.. 'used To sort a selected group of units
island :Int[,],..
gDiagonalBlockage :Int,..
gPathCost :Int,..
unitList :TList,..
onClosedList :Int,..
useDijkstras :Int
and this is how and how big they are initialized:
Method Init(tw:Int, th:Int, mw:Int, md:Int)
tileWidth = tw
tileDepth = th
tileSize = TileWidth
mapWidth = mw
mapDepth = md
walkability = New Byte[mapHeight,mapWidth,mapDepth]
openList = New Int[mapHeight*mapWidth*mapDepth]
whichList = New Int[mapHeight,mapWidth,mapDepth]
openX = New Short[mapHeight*mapWidth*mapDepth]
openZ = New Short[mapHeight*mapWidth*mapDepth]
parentX = New Short[mapHeight,mapWidth,mapDepth]
parentZ = New Short[mapHeight,mapWidth,mapDepth]
Fcost = New Byte[mapHeight*mapWidth*mapDepth]
Gcost = New Byte[mapHeight,mapWidth,mapDepth]
Hcost = New Byte[mapHeight*mapWidth*mapDepth]
tempUnwalkability = New Int[mapHeight,mapWidth,mapDepth]
nearBzPath = New Short[mapHeight,mapWidth,mapDepth]
claimedNode = New TUnit[mapHeight,mapWidth,mapDepth]
gGroupUnit = New TUnit[1]
island = New Int[mapWidth,mapDepth]
unitList = New TList
onClosedList = 10
useDijkstras = False
End Method
as you can see most of the cost come from : tempUnwalkability, openList, whichList..
i stop typing now, (i fell off a racingcycle and hurt my wrist badly, i'm in pain..)
ps
Look up Hierarchical A*.
i did, it sounds like a solution but i only managed to find 2 academic pdf's (without pseudo code) and many video's without (pseudo)code , have you got a link or something perhaps ?