// SPDX-License-Identifier: MIT // Copyright (c) 2026 Incoprea // Eight-character physical sign // Not compiled or tested in-world // Setup: Name children char1 through char8. Root owner-touch arms; root script sends code8065 with up to8 basic ASCII characters. // Stop / restore: Owner-touch restores all original child labels. // Notes: Use a spare modifiable build. Snapshot state is held only in script memory; restore before reset/removal. Do not relink during a preview. Uses hover labels, not texture glyphs. Author child positions to set visual letter spacing; missing characters become blank. // License: see LICENSE in this distribution. // Original Incoprea. MIT. Not compiled or tested in-world. list links; list saved; integer active; integer valid=TRUE; default { state_entry() { integer i; for(i=1;i<=8;++i) { integer j; integer found; integer count; for(j=2;j<=llGetObjectPrimCount(llGetKey());++j)if(llGetLinkName(j)=="char"+(string)i) { found=j; ++count; } if(count!=1) { valid=FALSE; return; } links+=[found]; saved+=llGetLinkPrimitiveParams(found,[PRIM_TEXT]); } } touch_start(integer n) { if(llDetectedKey(0)!=llGetOwner()||llGetLinkNumber()>1||!valid)return; active=!active; if(!active) { integer i; for(i=0;i<8;++i)llSetLinkPrimitiveParamsFast(llList2Integer(links,i),[PRIM_TEXT]+llList2List(saved,i*3,i*3+2)); } } link_message(integer sender,integer code,string s,key data) { if(!active||!valid||sender!=1||code!=8065||llStringLength(s)>8)return; integer i; for(i=0;i,1.0]); } } changed(integer change) { if(change&CHANGED_LINK) { active=FALSE; valid=FALSE; } } }