# Is there an easy way to read an image file to create ingame map data?

For my game I would like to create an impass map from an image-file, so I don't have to manually set every cell to passable or impassable, but I just cannot figure out any way of reading an image file to feed a library.

I would have guessed the VideoTexture module is the way to go, but even the simplest experiments couldn't give me any results:

print(bge.texture.ImageFFmpeg(logic.expandPath('//image.png')).valid)


This only prints False even though the image.png is in the same folder like the .blend file. Am I doing it wrong? Or would you recommend a completely different approach for this matter?

EDIT: I need a method to create a dynamically changable map where my characters find their way through with path-finding.

I realize you're kinda asking for a scripting answer, but hopefully this will be of use.

First start out with a map (white is wall, black is no wall). This one is 16x16:

That's all it is. A 16x16 png file. Now go into blender, create a plane, TAB into edit mode, and add ringcuts in both directions equal to the size of the map minus one. Since my map is 16x16, I should add 15x15 ringcuts. The shortcut for that would be CTRL + R15. You'll end up with:

Press A to select everything, and then ALT + E to extrude each face individually. If a little window pops up, click on Individual Faces. Press Esc to save the extrude, but keep the new faces in the same place as the old faces.

Keeping the new faces selected, press CTRL + G and click Assign to New Group to assign these extruded faces to their own group. We'll be using this a bit later.

Still with these same faces selected, press CTRL + . to cause each face to scale around it's own center, and then press S and scale all the faces down ever so slightly. Seriously. Just barely.

One last step. You can come back into object mode with Tab, go to the modifiers panel (it looks like this: ) and add a new displacement modifier.

Click New under Texture, then go to the texture panel (), click Open, and browse to your map png.

IMPORTANT: Under Image Sampling, uncheck Interpolation!

Finally, go back to the modifier panel, select the vertex group we created, and set the Midlevel to 0. And viola!

You can change the image map and then refresh it in the texture panel, and it will instantly update the model.

Simply make the mesh invisible in your game, and have the walls sticking up through your floor. I'm sure there's a way to script this, I'm just not very proficient with blender scripting :)

• Well thats quite the solution here, but there's a reason I was looking for a script solution: I need to generate a library of the map that says which field is passable and which is impassable so my pathfinding script will find its way through. Also the scripting solution can be modified during the game, while a displaced mesh can't. (I guess..) – HeaX Dec 2 '14 at 17:34
• @HeaX Ahh... you didn't include the purpose in your question so I had to make assumptions :) Well I think you can set the image for the displace modifier during the script, so that will let you change the map, but I doubt I can help with the pathfinding. What pathfinding method are you using? – Entity Dec 2 '14 at 17:41
• Sorry I didn't include the purpose in my question, I'll fix that to avoid further confusion. I'm currently using a script I wrote myself based on the "Sample Algorithm" from this wikipedia article: en.wikipedia.org/wiki/Pathfinding – HeaX Dec 2 '14 at 18:11
• @HeaX Hm... maybe this link can help? blender.stackexchange.com/questions/3673/… – Entity Dec 2 '14 at 18:31
• BTW you can use [W] > subdivide and then hit [F6] and change the number of subdivisions to 15 instead of adding loop cuts. – PGmath Dec 3 '14 at 23:56