For some background, I'm working on my map loading/saving system which uses chunks to load specific parts of it at a time. When a chunk is loaded object plains are created for each tile in a grid, and when a chunk is unloaded those objects are supposed to be deleted. I have a single array which stores the ID and location of every object created, which is called arr_Instance_MasterList in the code below.
The first two code sections below are what runs when a chunk is loaded. The program loops through every tile in the array which stores world data (arr_World_Create_AllData) and then plugs that information into the object creation function.
func_Chunk_Load
`Load chunks.
FUNCTION func_Chunk_Load(var_ChunkX, var_ChunkY)
var_Chunk_Load_Flag = 1
var_ChunkX_Min = var_ChunkX * var_Chunk_Size
var_ChunkX_Max = (var_ChunkX * var_Chunk_Size) + var_Chunk_Size - 1
var_ChunkY_Min = var_ChunkY * var_Chunk_Size
var_ChunkY_Max = (var_ChunkY * var_Chunk_Size) + var_Chunk_Size - 1
FOR var_Array_PositionX = var_ChunkX_Min TO var_ChunkX_Max
FOR var_Array_PositionY = var_ChunkY_Min TO var_ChunkY_Max
FOR var_Array_PositionZ = 0 TO 3
IF arr_World_Create_AllData(var_Array_PositionX, var_Array_PositionY, var_Array_PositionZ) > 0
func_Object_Create_Tile(arr_World_Create_AllData(var_Array_PositionX, var_Array_PositionY, var_Array_PositionZ), var_Array_PositionX * var_Tile_Size, var_Array_PositionY * var_Tile_Size, var_Array_PositionZ)
ENDIF
NEXT var_Array_PositionZ
NEXT var_Array_PositionY
NEXT var_Array_PositionX
var_Chunk_Load_Flag = 0
ENDFUNCTION
func_Object_Create_Tile
`Create tile objects.
FUNCTION func_Object_Create_Tile(var_ObjectID, var_PositionX, var_PositionY, var_PositionZ)
`Match the object ID called in the function with that in the data list.
var_ObjectFound = 0
var_Array_Position = -1
REPEAT
INC var_Array_Position
IF var_ObjectID = arr_Object_Worldblock_Data(var_Array_Position).atr_ObjectID
var_ObjectFound = 1
ENDIF
UNTIL var_ObjectFound = 1
`Change the position variable values so they snap to a tile.
var_PositionX = (var_PositionX / var_Tile_Size) * var_Tile_Size
var_PositionY = (var_PositionY / var_Tile_Size) * var_Tile_Size
`Get an ID for this particular instance of the object.
var_InstanceID = 0
var_Found = 0
REPEAT
var_RandomNumber = RND (2999999) + 1
IF OBJECT EXIST (var_RandomNumber) = 0
var_InstanceID = var_RandomNumber
var_Found = 1
ENDIF
UNTIL var_Found = 1
`Add the instance information to arr_Instance_MasterList.
ARRAY INSERT AT BOTTOM (arr_Instance_MasterList())
arr_Instance_MasterList().atr_InstanceID = var_InstanceID
arr_Instance_MasterList().atr_PositionX = var_PositionX
arr_Instance_MasterList().atr_PositionY = var_PositionY
arr_Instance_MasterList().atr_PositionZ = var_PositionZ
`Create the visual depiction of the object.
MAKE OBJECT PLAIN var_InstanceID, var_Tile_Size, var_Tile_Size
POSITION OBJECT var_InstanceID, var_PositionX, var_PositionY, arr_Object_WorldBlock_Data(var_Array_Position).atr_PositionZ
TEXTURE OBJECT var_InstanceID, arr_Object_WorldBlock_Data(var_Array_Position).atr_ImageNumber
ENDFUNCTION
The next two code sections are what happens when a chunk is unloaded. You'll notice that the first function below is almost identical to the first one above, the only difference being that it calls the function func_Object_Delete_Tile instead of func_Object_Create_Tile.
func_Chunk_Unload
`Unload chunks.
FUNCTION func_Chunk_Unload(var_ChunkX, var_ChunkY)
var_Chunk_UnLoad_Flag = 1
var_ChunkX_Min = var_ChunkX * var_Chunk_Size
var_ChunkX_Max = (var_ChunkX * var_Chunk_Size) + var_Chunk_Size - 1
var_ChunkY_Min = var_ChunkY * var_Chunk_Size
var_ChunkY_Max = (var_ChunkY * var_Chunk_Size) + var_Chunk_Size - 1
FOR var_Array_PositionX = var_ChunkX_Min TO var_ChunkX_Max
FOR var_Array_PositionY = var_ChunkY_Min TO var_ChunkY_Max
FOR var_Array_PositionZ = 0 TO 3
IF arr_World_Create_AllData(var_Array_PositionX, var_Array_PositionY, var_Array_PositionZ) > 0
func_Object_Delete_Tile(var_Array_PositionX * var_Tile_Size, var_Array_PositionY * var_Tile_Size, var_Array_PositionZ)
ENDIF
NEXT var_Array_PositionZ
NEXT var_Array_PositionY
NEXT var_Array_PositionX
var_Chunk_UnLoad_Flag = 0
ENDFUNCTION
func_Object_Delete_Tile
`Deletes tile objects.
FUNCTION func_Object_Delete_Tile(var_PositionX, var_PositionY, var_PositionZ)
`Change the position variable values so they snap to a tile.
var_PositionX = (var_PositionX / var_Tile_Size) * var_Tile_Size
var_PositionY = (var_PositionY / var_Tile_Size) * var_Tile_Size
`Find the instance in arr_Instance_MasterList that has position data matching with the tile.
var_ObjectFound = 0
var_Array_Position = -1
REPEAT
INC var_Array_Position
IF var_PositionX = arr_Instance_MasterList(var_Array_Position).atr_PositionX
IF var_PositionY = arr_Instance_MasterList(var_Array_Position).atr_PositionY
IF var_PositionZ = arr_Instance_MasterList(var_Array_Position).atr_PositionZ
var_ObjectFound = 1
ENDIF
ENDIF
ENDIF
UNTIL var_ObjectFound = 1
`Delete the visual representation of the object.
DELETE OBJECT var_InstanceID
`Removes the instance from arr_Instance_MasterList.
ARRAY DELETE ELEMENT (arr_Instance_MasterList(var_Array_Position))
ENDFUNCTION
Now to my problem. When I run the function func_Chunk_Load a 32x32 grid of blocks (each 32x32 pixels) appears, which is functioning correctly. When I run the function func_Chunk_Unload the program tells me that the first array in the code below (taken from func_Object_Delete_Tile) is out of bounds. If I'm correct this means that it has gone through every single item in the array and can not find an instance where all of the location data (X, Y and Z) matches up.
`Find the instance in arr_Instance_MasterList that has position data matching with the tile.
var_ObjectFound = 0
var_Array_Position = -1
REPEAT
INC var_Array_Position
IF var_PositionX = arr_Instance_MasterList(var_Array_Position).atr_PositionX
IF var_PositionY = arr_Instance_MasterList(var_Array_Position).atr_PositionY
IF var_PositionZ = arr_Instance_MasterList(var_Array_Position).atr_PositionZ
var_ObjectFound = 1
ENDIF
ENDIF
ENDIF
UNTIL var_ObjectFound = 1
I've gone over everything multiple times and can't track down why I'm getting this error. Using ARRAY COUNT I can see that the correct number of elements exist in the array arr_Instance_MasterList (32 x 32 + 1 = 1025), so somewhere the location data is getting messed up. Hopefully a fresh pair of eyes can sort out what I'm missing.