Editing Polyobject

From Eternity Wiki
Jump to navigationJump to search
Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then publish the changes below to finish undoing the edit.

Latest revision Your text
Line 1: Line 1:
PolyObjects are special sets of one-sided linedefs which, unlike any other lines, can be moved on the map during gameplay. Unlike the Hexen implementation of PolyObjects, Eternity does not restrict these objects to one per subsector, and they are also allowed to move any distance from their spawn point, even across subsector boundaries.  
PolyObjects are special sets of one-sided linedefs which, unlike any other lines, can be moved on the map during gameplay. Unlike the Hexen and ZDoom implementation of PolyObjects, Eternity does not restrict these objects to one per subsector, and they are also allowed to move any distance from their spawn point, even across subsector boundaries.  


PolyObjects fully clip normal objects such as the player and enemies, optionally doing crushing damage depending upon the type of spawn spot used. They also block bullet tracers and monsters' lines of sight. They do not, however, clip sound propagation, so it may be necessary to use sound blocking lines near areas where PolyObjects are meant to function as a normal wall until they move.  
PolyObjects fully clip normal objects such as the player and enemies, optionally doing crushing damage depending upon the type of spawn spot used. They also block bullet tracers and monsters' lines of sight. They do not, however, clip sound propagation, so it may be necessary to use sound blocking lines near areas where PolyObjects are meant to function as a normal wall until they move.  
Line 5: Line 5:
Although Eternity does allow PolyObjects to move between different subsectors, this will only work properly if the subsectors on both sides of a line have the same properties (floor & ceiling heights, light level, and flat). However, since the implementation of [[dynaseg]]s, Eternity does not require a "PolyObject-aware" node builder.  
Although Eternity does allow PolyObjects to move between different subsectors, this will only work properly if the subsectors on both sides of a line have the same properties (floor & ceiling heights, light level, and flat). However, since the implementation of [[dynaseg]]s, Eternity does not require a "PolyObject-aware" node builder.  


Finally, Eternity allows PolyObjects to be used in DOOM-format maps via the use of [[ExtraData]]. See the subsections below for more information on how to create and move PolyObjects.  
Finally, unlike ZDoom, Eternity allows PolyObjects to be used in DOOM-format maps via the use of [[ExtraData]]. See the subsections below for more information on how to create and move PolyObjects.  
 
'''NOTE:''' Polyobjects must be convex, to be rendered properly.
 
{{Backto|Linedef types}}
{{Backto|Linedef types}}


Line 17: Line 14:
==='''Method 1: The <code>Polyobj_StartLine</code> Special'''===
==='''Method 1: The <code>Polyobj_StartLine</code> Special'''===


:The <code>348:Polyobj_StartLine('''polyobj_id''', '''mirror_id''')</code> special marks the first line in a PolyObject which is made up of a cyclic set of linedefs (that is, each line "points toward" the next line, ending at the first vertex of the first line).  
:The <code>Polyobj_StartLine('''polyobj_id''', '''mirror_id''')</code> special marks the first line in a PolyObject which is made up of a cyclic set of linedefs (that is, each line "points toward" the next line, ending at the first vertex of the first line).  


:Diagrammatic Example:  
:Diagrammatic Example:  
Line 31: Line 28:
:Note that when you use this method, the other lines belonging to the PolyObject can be given their own line specials, including ones which affect the PolyObject itself. When the player presses the PolyObject, the specials will work as expected.  
:Note that when you use this method, the other lines belonging to the PolyObject can be given their own line specials, including ones which affect the PolyObject itself. When the player presses the PolyObject, the specials will work as expected.  


:The complete arguments to <code>Polyobj_StartLine('''polyobj_id''', '''mirror_id''')</code> are as follows:  
:The complete arguments to <code>Polyobj_StartLine</code> are as follows:  
:* ''polyobj_id'' : the unique ID number (greater than zero) of the PolyObject  
:* ''polyobj_id'' : the unique ID number (greater than zero) of the PolyObject  
:* ''mirror_id'' : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject's own ID.  
:* ''mirror_id'' : the ID number of a PolyObject that you want to mirror every action that affects this PolyObject. This number cannot be the same as the PolyObject's own ID.  
Line 39: Line 36:
==='''Method 2: The <code>Polyobj_ExplicitLine</code> Special'''===
==='''Method 2: The <code>Polyobj_ExplicitLine</code> Special'''===


:The <code>349:Polyobj_ExplicitLine('''linedef_tag''', '''linedef_tag''', '''mirror_id''')</code> special demarcates every line that will be added to a PolyObject and the exact order in which the lines will be added. This affords a bit more flexibility in the construction of PolyObjects at the price of not allowing any other line specials to be placed on the object itself.  
:The <code>Polyobj_ExplicitLine('''linedef_tag''', '''linedef_tag''', '''mirror_id''')</code> special demarcates every line that will be added to a PolyObject and the exact order in which the lines will be added. This affords a bit more flexibility in the construction of PolyObjects at the price of not allowing any other line specials to be placed on the object itself.  


:Diagrammatic Example:  
:Diagrammatic Example:  
Line 51: Line 48:
:* '''C''': This is the PolyObject's spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the ExplicitLines' first argument and the anchor point's angle field. There must be one and only one of these objects for each '''PolyObject ID'''. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion.  
:* '''C''': This is the PolyObject's spawn point (one of EEPolyObjSpawnSpot [9301] or EEPolyObjSpawnSpotCrush [9302]). It defines the point where the PolyObject will initially spawn on the map. The anchor point will be translated to this exact location, and all lines in the PolyObject will maintain their relative positions to it. This object must also have its angle field set to the same value as both the ExplicitLines' first argument and the anchor point's angle field. There must be one and only one of these objects for each '''PolyObject ID'''. Use 9302 to cause the PolyObject to do crushing damage to things that block it while it is in motion.  


:The complete arguments to <code>Polyobj_ExplicitLine('''linedef_tag''', '''linedef_tag''', '''mirror_id''')</code> are as follows:  
:The complete arguments to <code>Polyobj_ExplicitLine('''linedef_tag''', '''linedef_tag''', '''mirror_id''') are as follows:  
:* ''polyobj_id'' : the unique ID number (greater than zero) of the PolyObject  
:* ''polyobj_id'' : the unique ID number (greater than zero) of the PolyObject  
:* ''linedef_tag'' : specifies the order in which the line will be added to the PolyObject. This number should be unique amongst all lines to be added to the same object, and must be a value greater than zero.  
:* ''linedef_tag'' : specifies the order in which the line will be added to the PolyObject. This number should be unique amongst all lines to be added to the same object, and must be a value greater than zero.  
Line 207: Line 204:
}  (...)
}  (...)
</pre>
</pre>
==Polyobjects with portals==
:See [[Linked_portals#Polyobject_portals | Polyobject portals]]


[[category:Editing reference]]
[[category:Editing reference]]
Please note that all contributions to Eternity Wiki are considered to be released under the GNU Free Documentation License 1.2 (see Eternity Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!
Cancel Editing help (opens in new window)

Template used on this page: