Ok, here's an example. It could use a little tweaking but seems to work. At the very least here is a way to cast a fake spot light!
The normal is 90 degrees to a face, so the plane will always try and be flat against a face, this can be a problem on a corner. Play with differnt shapes and positions and the size of the reflection to see if you can get the effect how you want it. You aren't limited to casting 1 ray. You could cast a series in a small area with multiple planes so that they strike multiple surfaces and you have multiple reflections. That would be more like the grid idea I was kicking around. Many small planes could, in theory, contour to the shape of the hull by using the collision normals from several ray casts.
In the example, the sun (sphere) is moving around the cylinder. The shpere's coordinates are calculated to x1#,y1# and z1# and it is positioned accordingly. The cylinder is at 0,0,0 so the ray is cast from x1#,y1#,z1# to 0.0,0.0,0.0 . Were the ray collides with the cylinder is where the plane is positioned. The collision generates a collision normal which is 90 degrees away from the face. Once the plane is positioned, it is pointed towards it's location + the collision normal.
set display mode 800,600,32
sync on
sync rate 60
autocam off
#include "DBCcollisions.dba"
rem relfection
cinc#=255/128.0
for r=0 to 127
c=255-(r*cinc#)
ink rgb(c,c,c),0
circle 128,128,r
circle 128,127,r
next r
get image 1,0,0,256,256
sync
rem plane to hold reflection
make object plain 1,10,10
texture object 1,1
ghost object on 1
`set object rotation zyx 1
rem object to reflect on
make object cylinder 2,25
color object 2,rgb(0,192,0)
ghost object on 2
rem sun
make object sphere 3,5
position object 3,200,0,0
rad=50
y1#=20
setupObjectDBC(2,0,0)
position camera 0,20,-100
do
inc ang,1
if ang > 360 then ang=0
x1#=rad*cos(ang)
z1#=rad*sin(ang)
position object 3,x1#,y1#,z1#
rem cast ray
intersectObjectDBC(2,0,x1#,y1#,z1#,0.0,0.0,0.0,0)
rem get collision position
hitx#=getstaticcollisionx()
hity#=getstaticcollisiony()
hitz#=getstaticcollisionz()
rem align reflection to the collision normal
position object 1,hitx#,hity#,hitz#
`point object 1,getCollisionNormalX(),hity#,getCollisionNormalz()
point object 1,getCollisionNormalX()+hitx#,getCollisionNormaly()+hity#,getCollisionNormalz()+hitz#
rem draw a beam from the sun to the object so we can see the casr ray
line object screen x(3),object screen y(3),object screen x(2),object screen y(2)
sync
loop
Enjoy your day.