You could use an array.
Let's say your map is 20x30 tiles, and that each tile could have up to 5 properties.
Then if you have an array of 20x30x5, let's call it "TileProperties", you could decide that, in this array :
- TileProperties.At(X,Y,0) = the defense of the tile at X,Y in the tilemap.
- TileProperties.At(X,Y,1) = the movement cost of the tile at X,Y in the tilemap.
- TileProperties.At(X,Y,3) = the property you want of that same tile at X,Y
...
To do this, once the map is loaded, you should check every tile to store the properties in the array. Something like this.
Once this is done, you can then know what is the property value for each property of each tile on the map with a single Array.At.
Sorry but when you say 20x30 do you mean 20x30 pixels per tile? Or 20x30 tiles per map?