In order to create a projector you have to use ray tracing. The problem is that there is only one game that is capable of ray tracing in real time (
http://www.gamershell.com/news/13500.html ). It is impossible to use real time ray tracing in dark basic.
The other way of doing this is creating a static projector. If you don't move the projector, you don't have to calculate its effect in real time. You calculate it during the loading time and the effect stays on during the game. I have worked out a general algorithm to do this:
*select the image to be projected.
*calculate the projection area size accurding to the image size.
*find out the objects to project on by pointing 10-20 vectors from the projection point toward the projection area in key angles (4 outer points, center, etc.). This action will be similar to PICK SCREEN, but the vectors won't begin at the camera position.
*create a copy of all the required objects. The new objects will have exactly the same size, shape and rotation as the original.
*Create new textures for the cloned objects. The textures will be black in the beginning.
*Arrange the object's UV data so that every part of the object will use a different part of the texture. No pixel of the texture will be applied to more than one vertex.
*Do the following for every pixel of the projected image:
*Calculate the angle to project the pixel.
*Find out what is the first object (from the objects found before) the "projected light" hits (using intersect object or something).
*Find out the point on the object where the "projected pixel light" hit, and so find out the matching point in the texture. (I have no idea how to do this. This is the key element of the entire process).
*Calculate the light spread using the distance of the object from the projection point (using the data from the previous intersect object).
*Paint the pixel on the texture in the position found before (It will be more than just a pixel, depending on the light spread).
*After all of the above is done, rebuild the new objects as lightmaps:
*Apply the new textures to the new objects.
*Ghost the new objects.
*Notice that by doing this, only the non-black parts (the parts that were hit by the projected light) will be visible.
*Pray that it won't take 10 minutes to camplete the process.