Again its this ->
if EZro_GetEulerX() < 0
eulerx# = EZro_GetEulerX()
else : if EZro_GetEulerX() > 0
eulerx# = EZro_GetEulerX()
endif : ENDIF
if EZro_GetEulerY() < 0
eulery# = EZro_GetEulerY()
else : if EZro_GetEulery() > 0
eulery# = EZro_GetEulerY()
endif : ENDIF
if EZro_GetEulerZ() < 0
eulerz# = EZro_GetEulerZ()
else : if EZro_GetEulerz() > 0
eulerz# = EZro_GetEulerZ()
endif : ENDIF section of code that is messing with the rotations. I see you've removed the +0.5(s), but it is only updating your values if the new angle isn't equal to zero.
I didn't realize that when dbpro uses the "e-???" notation, that those values would be considered as being equal to zero but it seems to be the case. Completely replace those conditional statements with
eulerx# = EZro_GetEulerX()
eulery# = EZro_GetEulerY()
eulerz# = EZro_GetEulerZ()
and the problems go away.
randomize timer()
sync on : sync rate 60
autoCAM OFF
position camera 0,5,-14.0
point camera 0,0,0
dim _ParticipateFlag(6)
dim _group(6,4)
type _objgroup
objectnumber
group1
group2
group3
ENDTYPE
dim _objects(8) as _objgroup
_putObjectsInGroups()
positionx = -8
for o = 1 to 8
make object cube _objects(o).objectnumber ,1.0
color object _objects(o).objectnumber, rgb(rnd(255),rnd(255),rnd(255))
position object _objects(o).objectnumber, positionx,0,0
inc positionx,2
if positionx = 0 then positionx = positionx+2
NEXT
do
`Find which object is hovered by mouse
hovered_object = pick object (mousex(),mousey(),1,70)
text 0,0, "Enter Group number from 1 to 6"
text 0,20, "hovered_object: "+str$(hovered_object)
if hovered_object <> 0
if object exist(hovered_object) = 1
text 0,40,"Object Angle X: "+str$(Object angle x(hovered_object))
text 0,60,"Object Angle Y: "+str$(Object angle y(hovered_object))
text 0,80,"Object Angle Z: "+str$(Object angle z(hovered_object))
endif
endif
for o = 1 to 8
center text object screen x(o),object screen y(o)-60,"obj " + str$(_objects(o).objectnumber)
center text object screen x(o)-20,object screen y(o)-40,str$(_objects(o).group1)
center text object screen x(o),object screen y(o)-40,str$(_objects(o).group2)
center text object screen x(o)+20,object screen y(o)-40,str$(_objects(o).group3)
NEXT
if inkey$() <> ""
groupnumber = val(inkey$())
repeat until inkey$() = ""
if groupnumber >= 1 and groupnumber <= 8
i = rnd(2)
for frame = 1 to 18
for obj = 1 to 8
if _objects(obj).group1 = groupnumber or _objects(obj).group2 = groupnumber or _objects(obj).group3 = groupnumber
EZRO_SETeuler object angle x(obj),object angle y(obj),object angle z(obj)
EZRO_SETpos object position x(obj),object position y(obj),object position z(obj)
if i = 0
EZro_Orbit 1,-90,0,0,90,0,0,5.0
endif
if i = 1
EZro_Orbit 1,0,-90,0,0,90,0,5.0
endif
if i = 2
EZro_Orbit 1,0,0,-90,0,0,90,5.0
endif
EZro_FindEuler
eulerx# = EZro_GetEulerX()
eulery# = EZro_GetEulerY()
eulerz# = EZro_GetEulerZ()
rotate object obj,eulerx#,eulery#,eulerz#
position object obj,EZro_Getposx(),EZro_Getposy(),EZro_Getposz()
for o = 1 to 8
center text object screen x(o),object screen y(o)-60,"obj " + str$(_objects(o).objectnumber)
center text object screen x(o)-20,object screen y(o)-40,str$(_objects(o).group1)
center text object screen x(o),object screen y(o)-40,str$(_objects(o).group2)
center text object screen x(o)+20,object screen y(o)-40,str$(_objects(o).group3)
NEXT
sync
ENDIF
NEXT
NEXT
ENDIF
ENDIF
sync
loop
end
function _putObjectsInGroups()
for e = 1 to 8
_objects(e).objectnumber = e
for p = 1 to 6 : _ParticipateFlag(p) = 0 : NEXT
for i = 1 to 3
_MoveToanotherGroup = 0
REPEAT
GroupNumber = rnd(5)+1
Participate = rnd(3)+1
if _group(GroupNumber,Participate) = 0 and _ParticipateFlag(GroupNumber) = 0
_group(GroupNumber,Participate) = e
_ParticipateFlag(GroupNumber) = 1
_MoveToanotherGroup = 1
SELECT i
case 1 : _objects(e).group1 = GroupNumber : ENDCASE
case 2 : _objects(e).group2 = GroupNumber : ENDCASE
case 3 : _objects(e).group3 = GroupNumber : ENDCASE
ENDSELECT
ENDIF
UNTIL _MoveToanotherGroup = 1
NEXT
NEXT
ENDFUNCTION