Ever since I first started using DBP scaling has caused me nothing but trouble. Despite the improvements scaling can still cause problems. Worst of all, I think, is that there is no easy way to fix the scale of the object.
Here it is, courtesy of Lost in Thought. He wrote the bulk of the code, I just packaged it into a friendly function. It uses the DBP vertex commands to scale the object permanently by whatever scale you wish on each axis. You pass it percentages, just like the native Scale Object command takes. So, 200=2x.
It will work on animated and non animated object alike. You can permanently scale and object then save it too. Interestinly, this function will also correctly update the bounding box, unlike scaling the object. I inserted a 'Calculate Object Bounds' command in order to do so and it worked correctly. That should mean that permanently scaled objects will cull correctly, unlike the default behavior which is unpredictable at best with heavily scaled objects. Test it out and let me know if the bounding boxes are correct for the scaled objects.
Warning -
it's slow, so use it sparingly. I don't use it in Geisha House at all, I pre-scale and save.
function fixObjectScale(obj, scaleX#, scaleY#, scaleZ#)
scaleX#=scaleX#/100.0
scaleY#=scaleY#/100.0
scaleZ#=scaleZ#/100.0
`get number of limbs in object
perform checklist for object limbs obj
numlimbs = checklist quantity()
empty checklist
`scale each limb up double size
for A = 0 to numlimbs-1
`use flag of 2 for the last parameter to update the object's internal data
`so the animations use it as well
LOCK VERTEXDATA FOR LIMB obj, A, 2
for V=0 to GET VERTEXDATA VERTEX COUNT()-1
`get the positions and multiply by 2 for double scale
X#=GET VERTEXDATA POSITION X(V)*scaleX#
Y#=GET VERTEXDATA POSITION Y(V)*scaleY#
Z#=GET VERTEXDATA POSITION Z(V)*scaleZ#
`set changes
SET VERTEXDATA POSITION V, X#, Y#, Z#
next V
UNLOCK VERTEXDATA
sync
next A
calculate object bounds obj
endfunction
Come see the WIP!