More random resources instead of actual progress updates: for this one you can input a position and it will output the brick grid position
function tmbi_snaptobrickgrid(%pos, %dtb) //hideous
{
if(!tmbi_isint(%sx = %dtb.bricksizex) || !tmbi_isint(%sz = %dtb.bricksizez))
{
echo("Bad Datablock sent:"@ %dtb);
return;
}
%x = getword(%pos, 0)*2;
%y = getword(%pos, 1)*2;
%mz = getword(%pos, 2)*5;
%dir = tmbi_getghostdirection();
if(!tmbi_isint(%x) && tmbi_isint(%y) && %sx !$= "1")
{
if(%dir $= "1")
%y -= 1;
else if(%dir $= "2" || %dir $= "3")
{
%x += 1;
%y -= 1;
}
}
%z = mceil(%mz);
if(tmbi_isint(%mz) || (!tmbi_isint(%mz) && tmbi_isint(%sz/2)))
%z++;
return mfloor(%x) SPC mfloor(%y) SPC %z;
}
and misc support code:
function tmbi_isint(%x) //I don't trust the sometimes default one
{
if(%x $= mfloor(%x)) //also makes it sure it is a string
return 1;
return 0;
}
function tmbi_getghostdirection()
{
if(isobject($tmbi_ghostbrick))
return $tmbi_ghostbrick.getangleid();
else
return tmbi_getplayerdirection();
}
function tmbi_getplayerdirection()
{
if(isObject(%p = serverconnection.getcontrolobject()))
{
%va = getword(%p.getforwardvector(),0);
%vb = getword(%p.getforwardvector(),1);
if(mabs(%va) > mabs(%vb))
{
if(%va > 0)
return 0;
else
return 2;
}
else
{
if(%vb > 0)
return 1;
else
return 3;
}
}
else
return 4;
}