Good news everybody! (HMW mainly...)
Thread derailment preventative...
||So I was thinking about what you said about the placement helpers, and wrote a quick script to debug them..
So we know that info_placement_helpers belonging to env_portal_lasers are just disabled when the laser is off, and stick around for the life of the laser... But it turns out that when you interrupt the beam with a reflecto cube, it just disables it too.. but creates a new temporary one that is killed when the cube loses its laser source.
I also noticed that an info_target is placed at the mouth of every laser, and another at the start of the cube's laser. There's some weird issues whereby these move as the player does.. but from what I can see, the instant they're created, they're in the right place.
It's still not perfect, and it's not a huge help when tracing the path of the laser, but hopefully having target\helper pairs saves you a bunch of time 
(Can't nest [bigspoiler]s, so the code's at the end...
Love the outline btw (so optimistic!)- never thought of using a logic_measure_movement like that! May there be no unforseen circumstances 
Super curious as to how you grabbed a handle to the sprites at map spawn though... mind sending me a rough outline?
Oh yeah, the tiny writing.. something like this.
**point at george
ent_fire !picker addoutput "targetname george"
ent_fire george disablemotion
ent_fire george addoutput "angles 0 0 0"
**point at emitter
ent_fire !picker setparent george
ent_fire george addoutput "angles 0 0 0"
**point at harry
ent_fire !picker addoutput "targetname harry"
**point at barbra (button)
ent_fire !picker addoutput "targetname barbra"
**stood next to cube
ent_fire !player setparent harry
ent_fire barbra press
And the nut script
```
//Remember to place a copy of the entity in the map before running to avoid precache error (crash) .
function setup(){
ent <- null
while((ent = Entities.FindByClassname(ent,"info_placement_helper")) != null){
newName <- UniqueString();
EntFireByHandle( ent, "addoutput" "targetname " + newName, 0, null, null );
tempCube <- CreateProp("prop_physics", Vector(50,50,0), "models/props/lab_chair/lab_chair.mdl", 1 );
EntFireByHandle( tempCube, "addoutput" "targetname " + newName + "_cube", 0, null, null );
tempCube.SetOrigin( ent.GetOrigin() + Vector( 0, 0 , 50) );
EntFireByHandle( tempCube, "setparent", newName, 0, null, null);
EntFireByHandle( tempCube, "addoutput", "rendercolor 255 12 12", 0, null, null);
printl("Found a placement helper at " + ent.GetOrigin() + " called " + newName);
}
ent <- null
while((ent = Entities.FindByClassname(ent,"info_target")) != null){
newName <- UniqueString();
EntFireByHandle( ent, "addoutput" "targetname " + newName, 0, null, null );
tempCube <- CreateProp("prop_physics", Vector(50,50,0), "models/props_bts/bts_chair.mdl", 1 );
EntFireByHandle( tempCube, "addoutput" "targetname " + newName + "_cube", 0, null, null );
tempCube.SetOrigin( ent.GetOrigin() + Vector( 0, 0 , 50) );
EntFireByHandle( tempCube, "setparent", newName, 0, null, null);
EntFireByHandle( tempCube, "addoutput", "rendercolor 12 12 255", 0, null, null);
printl("Found a placement target at " + ent.GetOrigin() + " called " + newName);
}
}
setup();
```||
I should stop distracting you from the next installment... world ends in 231 days, hurry!