// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Actual child orbit around root // Not compiled or tested in-world // Setup: Place the moving child offset horizontally from the root. Put the script in that child; owner-touch starts. // Stop / restore: Owner-touch to stop and restore the captured starting pose before removing, resetting, or relinking. // Notes: Use a small nonphysical rezzed build with clear space. Actual prim transforms change. Original poses live only in script memory. Do not change physical status or link topology during use. The initial root-local Z is retained. The child orientation turns with the path, preserving its starting tangential alignment. One revolution takes about 63 seconds. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. vector home; rotation rest; integer active; integer valid=TRUE; default { state_entry() { home=llGetLocalPos(); rest=llGetLocalRot(); } touch_start(integer count) { if(llDetectedKey(0)!=llGetOwner()||!valid||llGetLinkNumber()<2||llGetStatus(STATUS_PHYSICS))return; active=!active; if(active) { llResetTime(); float angle=llGetTime()*0.1; rotation turn=llEuler2Rot(<0.0,0.0,angle>); vector p=home*turn; llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,p,PRIM_ROT_LOCAL,rest*turn]); llSetTimerEvent(0.2); } else { llSetTimerEvent(0.0); llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,home,PRIM_ROT_LOCAL,rest]); } } timer() { if(llGetLinkNumber()<2||llGetStatus(STATUS_PHYSICS)) { llSetTimerEvent(0.0); active=FALSE; return; } float angle=llGetTime()*0.1; rotation turn=llEuler2Rot(<0.0,0.0,angle>); vector p=home*turn; llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_POS_LOCAL,p,PRIM_ROT_LOCAL,rest*turn]); } changed(integer change) { if(change&CHANGED_LINK) { valid=FALSE; active=FALSE; llSetTimerEvent(0.0); llOwnerSay("Links changed; stopped without restoring. Reposition and reset before reuse."); } } }