Polyobjs are one-sided lines that are built somewhere else on the map, and then later translated to the desired start spot on the map at level load.
In building polyobjs, two different line specials can be used to determine the line drawing order:
Polyobj_ExplicitLine(polyNumber, orderNumber, polyMirror, sound);
Polyobj_StartLine (polyNumber, polyMirror, sound);
Each polyobj should have a unique polyNumber, which is used in poly line specials to refer to a particular polyobj.
polyMirror refers to a second polyobj that will "mirror" all actions of the first polyobj. For instance, if a polyobj is rotated to the right by 90 degrees, then that polyobj's mirror will rotate left 90 degrees.
Note that having two polyobjs mirror each other is not considered to be a good thing, but in general won't cause problems because a poly can only do one particular action at a time.
Meaning: if that poly that rotated left by 90 degrees then mirrored the right-turning polyobj, the right-turning poly would ignore any attempt to rotate it again, as it would already be being acted upon.
The last parameter to these specials refers to a particular door sound sequence that should play when the poly is moved/rotated. See the section on sound sequences for more info.
The rendering order for all other lines are determined by iterating through to the next line that has a first point identical to the start line's second point. The third line rendered will be the next line that has a first point identical to the second line's second point, and so on and so forth.
This method works well for polyobjs that are convex, and has the advantage of leaving all but one line free for other line specials.
This defines the rendering order for the lines, with a 1 being the first line rendered, and so on. Useful for non-convex polyobjs, but has the disadvantage of utilizing all line specials on the poly.
Bottom line: The anchor point is the point near the polyobj, and the startSpot is the point on the actual map that defines the location of the poly.
There are two different types of startSpots: crushing and non-crushing. Pretty obvious what the difference is:)
If the poly strikes an object, it'll first attempt to move it. If that fails, it will either try to damage the object, or just stop moving depending upon the type of startSpot.
Please note that the ANGLE field of the startSpot and anchor points should be equal to the polyNumber that was previously defined for that particular polyobj. The polyobj stuff was done before any of the TID/thing special code was implemented, so Raven did this temporary hack, which turned permanent, as the designers had already done a ton of polyobjs, and didn't want to have to go back and replace them. [And I'm keeping it that way for compatibility with Hexen maps.]