So... Long story short I had to convert a gigantic interior into an exterior world space, because otherwise the place would either be much much much uglier, or have game breakingly severe memory problems.
On the upside... It's going to look even better this way. Also on the upside, I have a VERY SIMILAR but different script, that only moves things up and down slightly, the OTHER script doesn't seem to have any problems, and NEITHER script had any problems with everything in an INTERIOR... But moved to an exterior, and the script that moves objects much further seems to be having problems.
The upside of an exterior version vastly outweigh the downsides, so I'm gonna have to roll with whatever sacrifices come with it.
I suppose it's because the script that moves objects further causes them to enter other cells... So... Now I am trying to figure out what to do to try to remedy this as best as I can. Included in this all, is a ship, which uses to float forward and backwards quite far, it looked very distinctively magical, and I missed that effect, but it appears I might have to sacrifice that for a movement script to function in an exterior world space. I highly doubt the problem is a script flaw, I suspect it's something unique to world space exteriors, limiting the potential of movement scrips, and just want outside confirmation from people who understand the Creation Kit better than me, as always any advice is appreciated.
If all of this ends up being true, I guess I'll just give the ship the levitate script that doesn't make it much nearly as much, but that's only as a last resort, if nobody here has any other solutions.
Scriptname ALectraShipLevitateForward extends ObjectReference {Object will drift up and down}Import UtilityImport GameBool Property bStartAtBottom = False Auto{Set True if drifting down would cause the object to clip through its starting point}Float Property fVel = 500.0 Auto{Base speed at which to drift}Float Property fDriftX = 0.0 Auto{Random drift along X axis}Float Property fDriftY = 7255.0 Auto{Random drift along Y axis}Float Property fDriftZ = 15.0 Auto{How far to drift along Z axis}Float fPosX = 0.0Float fPosY = 0.0Float fPosZ = 0.0Float fAngX = 0.0Float fAngY = 0.0Float fAngZ = 0.0Float fTDriftZ = 0.0Event OnLoad() ;Store object's starting position fPosX = GetPositionX() fPosY = GetPositionY() fPosZ = GetPositionZ() fAngX = GetAngleX() fAngY = GetAngleY() fAngZ = GetAngleZ() If bStartAtBottom ;Set the path center to above the starting point fPosZ += fDriftZ / 2 EndIf ; TranslateTo will fail if object's 3d is not completely loaded While !Is3DLoaded() Wait(0.01) EndWhile UpdateTranslation()EndEvent;Use this instead of OnTranslationComplete, otherwise there will be a pause before the object moves again.Event OnTranslationAlmostComplete() UpdateTranslation()EndEventEvent OnCellDetach() CleanUp()EndEventEvent OnUnload() CleanUp()EndEventFunction UpdateTranslation() Float fCPosZ = GetPositionZ() If fCPosZ < fPosZ ;We are below the center point If fDriftX || fDriftY ; We need to drift X and Y as well TranslateTo(fPosX + RandomFloat(-fDriftX,fDriftX), fPosY + RandomFloat(-fDriftY,fDriftY), fPosZ + (fDriftZ / 2),fAngX,fAngY,fAngZ,fVel) Else ; No X or Y drift, RandomFloat is slow so skip it if we don't need it TranslateTo(fPosX, fPosY, fPosZ + (fDriftZ / 2),fAngX,fAngY,fAngZ,fVel) EndIf Else ;We are at or above the center point If fDriftX || fDriftY ; We need to drift X and Y as well TranslateTo(fPosX + RandomFloat(-fDriftX,fDriftX), fPosY + RandomFloat(-fDriftY,fDriftY), fPosZ - (fDriftZ / 2),fAngX,fAngY,fAngZ,fVel) Else ; No X or Y drift, RandomFloat is slow so skip it if we don't need it TranslateTo(fPosX, fPosY, fPosZ - (fDriftZ / 2),fAngX,fAngY,fAngZ,fVel) EndIf EndIfEndFunctionFunction CleanUp() StopTranslation() ; This should keep the object from getting progressively farther from its starting point if the cell is loaded repeatedly MoveToMyEditorLocation()EndFunction