Here's how to do what you asked on my bit of code, although I think the code can be improved, more efficient:
global _mouseclick as integer
global _oldMouseclick as integer
global _picked as integer
global _oldPicked as integer
global _selectedObject as integer
sync on : sync rate 60
autocam off
// setup objects to select
for n = 1 to 50
make object cube n,2
position object n,rnd(42)-21,rnd(42)-21,rnd(36)+20
rotate object n,rnd(360),rnd(360),rnd(360)
next
do
// update input
_oldMouseclick = _mouseclick
_mouseclick = mouseclick()
_oldPicked = _picked
_picked = pick object(mousex(), mousey(), 1, 50)
// update selection
if _picked <> 0
show object bounds _picked,1
if _mouseclick <> 0 and _oldMouseclick <> _mouseclick
if _selectedObject
if _selectedObject = _picked
hide object bounds _selectedObject
set object emissive _selectedObject,rgb(0, 0, 0)
_selectedObject = 0
else
hide object bounds _selectedObject
set object emissive _selectedObject,rgb(0, 0, 0)
set object emissive _picked,rgb(0, 255, 64)
_selectedObject = _picked
endif
else
set object emissive _picked,rgb(0, 255, 64)
_selectedObject = _picked
endif
endif
else
// if theres no pick but a mouse call, reset last selected object
if _selectedObject
if _mouseclick <> 0 and _oldMouseclick <> _mouseclick
hide object bounds _selectedObject
set object emissive _selectedObject,rgb(0, 0, 0)
_selectedObject = 0
endif
endif
endif
// unselect objects that the mouse had just been over unless already selected
if _oldPicked <> 0 and _oldPicked <> _picked
if _oldPicked <> _selectedObject
hide object bounds _oldPicked
endif
endif
text 0,0,"Selected Object: "+str$(_selectedObject)
text 0,12,"Picked Object: "+str$(_picked)
sync
loop
A dream is a fantasy, if you achieve that fantasy it was never a dream to begin with.