Linedefs mode, Help panel: replaced info about "Flip Sidedef" action with info about "Flip Linedef" action.

Find and Replace Mode: renamed "Linedef Actions" search mode to "Linedef Action and Arguments".
Find and Replace Mode: renamed "Thing Action" search mode to "Thing Action and Arguments".
Cosmetic layout changes in Find and Replace window.
Updated documentation.

Changes in "Linedef Action and Arguments" and "Thing Action and Arguments" search modes:
Changed arguments search syntax from "action;arg0,arg1,arg2,arg3,arg4" to "action arg0 arg1 arg2 arg3 arg4"
You can now find ACS script actions with named scripts using "action arg0str ..." syntax.
You can now replace arguments using the same syntax as in the "Find what" field.
This commit is contained in:
MaxED 2015-04-04 22:11:36 +00:00
parent 5668cfec10
commit 43ff16caa9
7 changed files with 372 additions and 302 deletions

View file

@ -7,17 +7,10 @@
<script type="text/javascript" src="../../scripts.js"></script>
<style type="text/css">
<!--
.style1 {
color: #990000
}
.style3 {
color: #336600;
font-weight: bold;
}
.style5 {
color: #990000;
font-weight: bold;
}
.style7 {
color: #6600CC
}
@ -39,40 +32,40 @@
<li>
<h3><a name="general" id="general"></a>General interface:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> <strong>Help</strong> side panel, which shows most of actions, available in current mode.</li>
<li><span class="style1"><strong>[new]</strong></span> Maps can now be loaded by dragging wad files on top of GZDB's main window.</li>
<li><span class="style1"><strong>[new]</strong></span> Open Map Options, Map Options and Game Configurations forms: resources can be added by dragging them on top of resources list.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>Game Configurations form</strong>: game configurations can be disabled. This setting is mostly cosmetic. When a game configuration is disabled, it won't be shown in the &quot;game configuration&quot; drop downs in New\Open Map Options and Map Options windows. If a map's .dbs file specifies a disabled configuration, it will be picked as a map configuration anyway.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>Game Configurations form</strong>: game configurations can be copied and pasted (a context menu is now available in the game configurations list).</li>
<li><span class="style1"><strong>[new]</strong></span> Numeric textboxes: in addition to '++NN' and '--NN' to increment or decrement by given value, you can use '*NN' and '/NN' to multiply or divide by given value.</li>
<li><span class="style1"><strong>[new]</strong></span> Toolbar button groups can be toggled using context menu. Hold &quot;Shift&quot; to toggle several button groups at once.
<li><span class="red">[new]</span> <strong>Help</strong> side panel, which shows most of actions, available in current mode.</li>
<li><span class="red">[new]</span> Maps can now be loaded by dragging wad files on top of GZDB's main window.</li>
<li><span class="red">[new]</span> Open Map Options, Map Options and Game Configurations forms: resources can be added by dragging them on top of resources list.</li>
<li><span class="red">[new]</span> <strong>Game Configurations form</strong>: game configurations can be disabled. This setting is mostly cosmetic. When a game configuration is disabled, it won't be shown in the &quot;game configuration&quot; drop downs in New\Open Map Options and Map Options windows. If a map's .dbs file specifies a disabled configuration, it will be picked as a map configuration anyway.</li>
<li><span class="red">[new]</span> <strong>Game Configurations form</strong>: game configurations can be copied and pasted (a context menu is now available in the game configurations list).</li>
<li><span class="red">[new]</span> Numeric textboxes: in addition to '++NN' and '--NN' to increment or decrement by given value, you can use '*NN' and '/NN' to multiply or divide by given value.</li>
<li><span class="red">[new]</span> Toolbar button groups can be toggled using context menu. Hold &quot;Shift&quot; to toggle several button groups at once.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/toolbarmenu.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> You can save screenshots using <strong>Tools -&gt; Save Screenshot</strong> (default key is F12) and <strong>Tools -&gt; Save Screenshot (editing area)</strong> (default key is Ctrl-F12) menu commands.</li>
<li><span class="style1"><strong>[new]</strong></span> You can save shortcut reference to html file using <strong>Help -&gt; Export Shortcut Reference</strong> menu command.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Open Map in current WAD</strong>&quot;, available as <strong>File -&gt; Open Map in current WAD</strong> and via Ctrl-Shift-O shortcut.</li>
<li><span class="red">[new]</span> You can save screenshots using <strong>Tools -&gt; Save Screenshot</strong> (default key is F12) and <strong>Tools -&gt; Save Screenshot (editing area)</strong> (default key is Ctrl-F12) menu commands.</li>
<li><span class="red">[new]</span> You can save shortcut reference to html file using <strong>Help -&gt; Export Shortcut Reference</strong> menu command.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Open Map in current WAD</strong>&quot;, available as <strong>File -&gt; Open Map in current WAD</strong> and via Ctrl-Shift-O shortcut.</li>
<li><strong><span class="style1">[new]</span></strong> New action: &quot;Export to Wavefront .obj&quot;, available as <strong>File -&gt; Export -&gt; Selection to Wavefront .obj</strong>. It will export selected sectors (or the whole map, if no sectors are selected) to Wavefront .obj model.</li>
<li>New action: &quot;<strong>Reload MODELDEF/VOXELDEF</strong>&quot; (<strong>Tools -&gt; Reload MODELDEF/VOXELDEF</strong>).</li>
<li>New action: &quot;<strong>Reload GLDEFS</strong>&quot; (<strong>Tools -&gt; Reload GLDEFS</strong>).</li>
<li>New action: &quot;<strong>Reload MAPINFO</strong>&quot; (<strong>Tools -&gt; Reload MAPINFO</strong>).</li>
<li><span class="style1"><strong>[new]</strong></span> Info about current selection is shown at the bottom of program's window.
<li><span class="red">[new]</span> Info about current selection is shown at the bottom of program's window.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/selection_info.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> Texture size is now shown in texture previews. You can disable this feature by unchecking &quot;<strong>Preferences -&gt; Interface -&gt; Show texture and flat sizes in browsers</strong>&quot; checkbox.
<li><span class="red">[new]</span> Texture size is now shown in texture previews. You can disable this feature by unchecking &quot;<strong>Preferences -&gt; Interface -&gt; Show texture and flat sizes in browsers</strong>&quot; checkbox.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/texturesize_preview.jpg" alt="" /></div>
</li>
<li><a href="general/multi_engines.html">Several game engines can be used per game configuration</a>.</li>
<li>Size of vertex handles in 2D modes can be changed in <a href="../preferences.html">preferences</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>Script editor</strong>: pressing &quot;F1&quot; opens keyword help instead of program manual.</li>
<li><span class="style1"><strong>[new]</strong></span> Side panel auto hiding can be now toggled much easier.
<li><span class="red">[new]</span> <strong>Script editor</strong>: pressing &quot;F1&quot; opens keyword help instead of program manual.</li>
<li><span class="red">[new]</span> Side panel auto hiding can be now toggled much easier.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/pinsidepanel.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> Things can be filtered in Thing Edit form.</li>
<li><span class="style1"><strong>[new]</strong></span> Added &quot;<strong>Hints</strong>&quot; side panel, which shows the list of actions, available in current editing mode.</li>
<li><span class="red">[new]</span> Things can be filtered in Thing Edit form.</li>
<li><span class="red">[new]</span> Added &quot;<strong>Hints</strong>&quot; side panel, which shows the list of actions, available in current editing mode.</li>
<li>Actions and Effects can be filtered (useful when you remember action/effect name, but don't remember it's number or category).
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/actions_filter.jpg" alt="" /></div>
@ -85,10 +78,10 @@
<h3><a name="scripting" id="scripting"></a>Scripting:</h3>
<ul>
<li><a href="scripting/acs.html">Enhanced scripting workflow</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> <a href="scripting/snippets.html">Code snippets.</a></li>
<li><span class="style1"><strong>[new]</strong></span> Added support for multiple ACC compilers.</li>
<li><span class="style1"><strong>[new]</strong></span> BCC script compiler (<a href="https://github.com/wormt/bcc/">https://github.com/wormt/bcc/</a>) is bundled with GZDB.</li>
<li><span class="style1"><strong>[new]</strong></span> Script type can be chosen when creating or opening a map, and can be changed in Map Options form.</li>
<li><span class="red">[new]</span> <a href="scripting/snippets.html">Code snippets.</a></li>
<li><span class="red">[new]</span> Added support for multiple ACC compilers.</li>
<li><span class="red">[new]</span> BCC script compiler (<a href="https://github.com/wormt/bcc/">https://github.com/wormt/bcc/</a>) is bundled with GZDB.</li>
<li><span class="red">[new]</span> Script type can be chosen when creating or opening a map, and can be changed in Map Options form.</li>
</ul>
</li>
<li>
@ -97,21 +90,21 @@
<li><span class="style3">[changed]</span> &quot;<strong>Toggle Full Brightness&quot; </strong>action works in Classic modes.</li>
<li><span class="style3">[changed]</span> &quot;<strong>Toggle Highlight&quot; </strong>action works in Classic modes.</li>
<li><span class="style3">[changed]</span> &quot;<strong>Increase Brightness by 8</strong>&quot; and &quot;<strong>Decrease Brightness by 8</strong>&quot; actions work in Sectors mode.</li>
<li><span class="style1"><strong>[new]</strong></span> <a href="all_modes/tag_support.html">Enhanced Tag support</a>.</li>
<li><span class="red">[new]</span> <a href="all_modes/tag_support.html">Enhanced Tag support</a>.</li>
<li><a href="all_modes/event_lines.html">Event lines</a>.</li>
<li>Map can be tested from camera position in Visual mode and from cursor position in Classic modes. <a href="all_modes/test_from_view.html">More info</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> Selection can be synchronized between Classic and Visual modes. <a href="all_modes/synch_selection.html">More info</a>.</li>
<li><span class="red">[new]</span> Selection can be synchronized between Classic and Visual modes. <a href="all_modes/synch_selection.html">More info</a>.</li>
<li>Camera position can be synchronized between Classic and Visual modes. <a href="all_modes/synch_camera.html">More info</a>.</li>
<li>You can use <a href="all_modes/colorpicker.html">Color Picker plugin </a> to edit dynamic light properties and sector's fog and tint colors in Classic and Visual modes.</li>
<li>You can use <a href="all_modes/tagexplorer.html">Tag Explorer plugin</a> to view all tags and actions used in current map.</li>
<li><span class="style1"><strong>[new]</strong></span> You can pick, which properties are pasted by &quot;<strong>Paste Properties</strong>&quot; action using &quot;Paste Properties Options&quot; window.
<li><span class="red">[new]</span> You can pick, which properties are pasted by &quot;<strong>Paste Properties</strong>&quot; action using &quot;Paste Properties Options&quot; window.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="all_modes/paste_properties_options.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> You can apply <a href="all_modes/jitter.html">randomized transformations</a> to any map element.</li>
<li><span class="red">[new]</span> You can apply <a href="all_modes/jitter.html">randomized transformations</a> to any map element.</li>
<li>Image browser shows directory structure of Folder, PK3 and PK7 resources and can filter images by texture type and size. <a href="all_modes/texture_browser.html">More info</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> Most controls of Edit Sector/Linedef/Thing forms now work in realtime (e.g. you can immediately see texture offset/scale/rotation changes while you are changing appropriate values). Action and Tag changes are still applied only after you press &quot;OK&quot; button.</li>
<li><span class="style1"><strong>[new]</strong></span><strong> [UDMF] </strong>All UDMF properties (except &quot;comment&quot;) can be edited using Edit Sector/Linedef/Thing/Vertex forms user interface.</li>
<li><span class="red">[new]</span> Most controls of Edit Sector/Linedef/Thing forms now work in realtime (e.g. you can immediately see texture offset/scale/rotation changes while you are changing appropriate values). Action and Tag changes are still applied only after you press &quot;OK&quot; button.</li>
<li><span class="red">[new]</span><strong> [UDMF] </strong>All UDMF properties (except &quot;comment&quot;) can be edited using Edit Sector/Linedef/Thing/Vertex forms user interface.</li>
<li>Thing Edit Form has &quot;Random angle&quot; checkbox.</li>
<li><strong>[UDMF] </strong>Sector, Linedef and Vertex info panels show additional info if a map is in UDMF format.</li>
</ul>
@ -123,38 +116,38 @@
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="general/menu_drawmodes.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span><a href="classic_modes/selection.html"> </a>Thing sprites are rendered in classic modes.</li>
<li><span class="red">[new]</span><a href="classic_modes/selection.html"> </a>Thing sprites are rendered in classic modes.</li>
<li>You can assign custom color to any combination of linedef flags, actions and/or activation. <a href="classic_modes/linedef_color_presets.html">More info</a>.</li>
<li><span class="style1"><strong>[new]</strong></span><a href="classic_modes/selection.html"> Enhanced rectangular selection</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Go To Coordinates</strong>&quot;, available in <strong>View</strong> menu and by clicking on cursor coordinates in the lower-right corner of UI.</li>
<li><span class="style1"><strong>[new]</strong></span> You can use <strong>Paint selection </strong>action to select map elements easier.</li>
<li><span class="red">[new]</span><a href="classic_modes/selection.html"> Enhanced rectangular selection</a>.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Go To Coordinates</strong>&quot;, available in <strong>View</strong> menu and by clicking on cursor coordinates in the lower-right corner of UI.</li>
<li><span class="red">[new]</span> You can use <strong>Paint selection </strong>action to select map elements easier.</li>
<li><a href="classic_modes/mode_drawrect.html">Draw Rectangle mode</a>.</li>
<li><a href="classic_modes/mode_drawellipse.html">Draw Ellipse mode</a>.</li>
<li><a href="classic_modes/mode_drawcurve.html"><span class="style1"><strong>[new]</strong></span> Draw Curve mode</a>.</li>
<li><a href="classic_modes/mode_drawgrid.html"><span class="style1"><strong>[new]</strong></span> Draw Grid mode</a>.</li>
<li><a href="classic_modes/mode_drawcurve.html"><span class="style1"><strong>[new]</strong></span> </a><a href="../classic_modes/mode_importterrain.html">Terrain Importer mode</a>.</li>
<li><a href="classic_modes/mode_drawcurve.html"><span class="red">[new]</span> Draw Curve mode</a>.</li>
<li><a href="classic_modes/mode_drawgrid.html"><span class="red">[new]</span> Draw Grid mode</a>.</li>
<li><a href="classic_modes/mode_drawcurve.html"><span class="red">[new]</span> </a><a href="../classic_modes/mode_importterrain.html">Terrain Importer mode</a>.</li>
<li><a href="classic_modes/mode_drawbridge.html">Bridge mode</a>.</li>
<li><a href="classic_modes/mode_snapelements.html">Snap map elements mode</a>.</li>
<li><span class="style5"><strong>[new]</strong></span> Selected things are now dragged while dragging vertices, linedefs and sectors.</li>
<li><span class="style5"><strong>[new]</strong></span> You can hold the <strong>Alt</strong> key while dragging map elements to snap them to grid increments relative to their initial position.</li>
<li><span class="style5">[new]</span> You can place things on top of selected vertices in Vertices and Linedefs modes and inside of selected sectors in Sectors mode using &quot;<strong>Place Things</strong>&quot; action.</li>
<li><span class="style5">[new]</span> You can view all loaded thing types and some additional info using Thing Statistics form (<strong>Edit -&gt; View Thing Types...</strong>).
<li><span class="red">[new]</span> Selected things are now dragged while dragging vertices, linedefs and sectors.</li>
<li><span class="red">[new]</span> You can hold the <strong>Alt</strong> key while dragging map elements to snap them to grid increments relative to their initial position.</li>
<li><span class="red">[new]</span> You can place things on top of selected vertices in Vertices and Linedefs modes and inside of selected sectors in Sectors mode using &quot;<strong>Place Things</strong>&quot; action.</li>
<li><span class="red">[new]</span> You can view all loaded thing types and some additional info using Thing Statistics form (<strong>Edit -&gt; View Thing Types...</strong>).
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="classic_modes/thing_statistics.jpg" alt="" /></div>
</li>
<li><span class="style5">[new]</span> You can override default sector properties, which are used to create new geometry, using &quot;<strong><a href="classic_modes/drawsettingspanel.html">Draw Settings</a></strong>&quot; panel (by default, when the new sector overlaps or touches existing sector, the editor uses textures, brighntess and floor/ceiling heights from that sector when drawing the new one).</li>
<li><span class="style1"><strong>[new]</strong></span> You can disable Doom Builder's auto-clear textures behaviour by using this button in the toolbar: <img src="general/autoclear_textures.jpg"/></li>
<li><span class="style5">[new]</span> You can change default sector brightness and floor/ceiling height (<strong>Preferences -&gt; Editing -&gt; Default sector settings</strong>). These settings are used when the new sector doesn't touch or overlap already existing sectors.</li>
<li><span class="style5">[new]</span> 3D floor indication (color can be changed in <strong>Preferences -&gt; Appearance -&gt; 3D Floors</strong>, the setting can be disabled in <a href="../preferences.html#markextrafloors">Preferences</a>).
<li><span class="red">[new]</span> You can override default sector properties, which are used to create new geometry, using &quot;<strong><a href="classic_modes/drawsettingspanel.html">Draw Settings</a></strong>&quot; panel (by default, when the new sector overlaps or touches existing sector, the editor uses textures, brighntess and floor/ceiling heights from that sector when drawing the new one).</li>
<li><span class="red">[new]</span> You can disable Doom Builder's auto-clear textures behaviour by using this button in the toolbar: <img src="general/autoclear_textures.jpg"/></li>
<li><span class="red">[new]</span> You can change default sector brightness and floor/ceiling height (<strong>Preferences -&gt; Editing -&gt; Default sector settings</strong>). These settings are used when the new sector doesn't touch or overlap already existing sectors.</li>
<li><span class="red">[new]</span> 3D floor indication (color can be changed in <strong>Preferences -&gt; Appearance -&gt; 3D Floors</strong>, the setting can be disabled in <a href="../preferences.html#markextrafloors">Preferences</a>).
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"> <img src="classic_modes/3dfloor_marks.jpg" alt="" /></div>
</li>
<li>Line angle and front side direction are displayed when a line is drawn in Draw Geometry mode.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> Floor/ceiling texture offsets can be pinned using this button in the toolbar: <img src="general/pin_textures.jpg"/>. When pinned, textures will be aligned to a sector while it is dragged.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>Tag Range plugin</strong>: custom increment can now be set.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>Tag Range plugin:</strong> tags can be set in relative mode (when this mode is enabled, generated values are added to existing tags instead of replacing them).</li>
<li><span class="style1"><strong>[new]</strong></span> You can clear selection groups (default shortcuts are Ctrl-Shift-1 ... 0).</li>
<li><span class="style1"><strong>[new]</strong></span> You can add selection to groups, select and clear groups using <strong>Edit</strong> menu.
<li><span class="red">[new]</span> <strong>[UDMF]</strong> Floor/ceiling texture offsets can be pinned using this button in the toolbar: <img src="general/pin_textures.jpg"/>. When pinned, textures will be aligned to a sector while it is dragged.</li>
<li><span class="red">[new]</span> <strong>Tag Range plugin</strong>: custom increment can now be set.</li>
<li><span class="red">[new]</span> <strong>Tag Range plugin:</strong> tags can be set in relative mode (when this mode is enabled, generated values are added to existing tags instead of replacing them).</li>
<li><span class="red">[new]</span> You can clear selection groups (default shortcuts are Ctrl-Shift-1 ... 0).</li>
<li><span class="red">[new]</span> You can add selection to groups, select and clear groups using <strong>Edit</strong> menu.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="general/menu_selectiongroups.jpg" alt="" /></div>
</li>
@ -164,45 +157,45 @@
<li>
<h3><a name="sectors" id="sectors"></a>Sectors mode:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> Sector Edit Form now has "<strong>Slopes</strong>" tab.</li>
<li><span class="style1"><strong>[new]</strong></span> Things inside of selected Sectors can be moved when dragging Sectors. This toolbar button toggles this mode: <img src="sectors_mode/drag_things.jpg"/>. When enabled, all things inside of selected sectors will be dragged when dragging sectors. Otherwise, selected things will be dragged.</li>
<li><span class="style1"><strong>[new]</strong></span> Sector Tag and Effect can now be shown on top of sectors. You can use &quot;<strong>View Tags and Effects</strong>&quot; button to toggle this overlay.
<li><span class="red">[new]</span> <strong>[UDMF]</strong> Sector Edit Form now has "<strong>Slopes</strong>" tab.</li>
<li><span class="red">[new]</span> Things inside of selected Sectors can be moved when dragging Sectors. This toolbar button toggles this mode: <img src="sectors_mode/drag_things.jpg"/>. When enabled, all things inside of selected sectors will be dragged when dragging sectors. Otherwise, selected things will be dragged.</li>
<li><span class="red">[new]</span> Sector Tag and Effect can now be shown on top of sectors. You can use &quot;<strong>View Tags and Effects</strong>&quot; button to toggle this overlay.
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="sectors_mode/toggle_effect_overlay.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> Create Brightness Gradient option can work in 5 modes:
<li><span class="red">[new]</span> <strong>[UDMF]</strong> Create Brightness Gradient option can work in 5 modes:
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="sectors_mode/gradientmodes.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> Sector Info panel shows the number of sector's sidedefs as well as light and fade colors (UDMF only):
<li><span class="red">[new]</span> Sector Info panel shows the number of sector's sidedefs as well as light and fade colors (UDMF only):
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="sectors_mode/sector_info.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> &quot;<strong>Flip Linedefs</strong>&quot; action is now available from Sectors mode. It will try to align linedefs, so their front (or back) point towards the same sector.</li>
<li><span class="red">[new]</span> &quot;<strong>Flip Linedefs</strong>&quot; action is now available from Sectors mode. It will try to align linedefs, so their front (or back) point towards the same sector.</li>
</ul>
</li>
<li>
<h3><a name="linedefs" id="linedefs"></a>Linedefs mode:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> New actions: &quot;<strong>Align Ceiling Texture to Back Side</strong>&quot;, &quot;<strong>Align Ceiling Texture to Front Side</strong>&quot;, &quot;<strong>Align Floor Texture to Back Side</strong>&quot; and &quot;<strong>Align Floor Texture to Front Side</strong>&quot; (available in <strong>Linedefs -&gt; Align Textures</strong> menu).</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> &quot;<strong>Make brightness gradient</strong>&quot; command is available in Linedefs mode.</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> New actions: &quot;<strong>Align Ceiling Texture to Back Side</strong>&quot;, &quot;<strong>Align Ceiling Texture to Front Side</strong>&quot;, &quot;<strong>Align Floor Texture to Back Side</strong>&quot; and &quot;<strong>Align Floor Texture to Front Side</strong>&quot; (available in <strong>Linedefs -&gt; Align Textures</strong> menu).</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> &quot;<strong>Make brightness gradient</strong>&quot; command is available in Linedefs mode.</li>
<li><strong>[UDMF]</strong> Linedef info panel: relative UDMF light values are shown like this: <span class="style7">16</span> (<span class="style9">128</span>), which means &quot;<span class="style7">UDMF light value</span>&quot; (&quot;<span class="style9">total surface brightness</span>&quot;). Total surface brightness is UDMF light value + sector brightness.</li>
<li><span class="style1"><strong>[new]</strong></span> Split Linedefs preview (a rectangle, colored using Info line color) is shown in this mode.</li>
<li><span class="style1"><strong>[new]</strong></span> &quot;<strong>Flip Linedefs</strong>&quot; action will try to align linedefs, so their front (or back) point towards the same sector.</li>
<li><span class="red">[new]</span> Split Linedefs preview (a rectangle, colored using Info line color) is shown in this mode.</li>
<li><span class="red">[new]</span> &quot;<strong>Flip Linedefs</strong>&quot; action will try to align linedefs, so their front (or back) point towards the same sector.</li>
</ul>
</li>
<li>
<h3><a name="things" id="things"></a>Things mode:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> Several thing types can now be selected at once in Thing Edit form. If you do so, a type randomly chosen from selected ones will be assigned to each selected thing. <a href="things_mode/multiple_thing_types.html">More info</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> You can filter selected things by type using Filter Things form (<strong>Things -&gt; Filter Things...</strong>).
<li><span class="red">[new]</span> Several thing types can now be selected at once in Thing Edit form. If you do so, a type randomly chosen from selected ones will be assigned to each selected thing. <a href="things_mode/multiple_thing_types.html">More info</a>.</li>
<li><span class="red">[new]</span> You can filter selected things by type using Filter Things form (<strong>Things -&gt; Filter Things...</strong>).
<input class="spoilerbutton" type="button" onclick="ToggleSpoiler(this);" href="javascript:void(0);" value="Show image"/>
<div style="display: none; margin: 0px; padding: 6px; border: 1px inset;"><img src="things_mode/filter_selection.jpg" alt="" /></div>
</li>
<li><span class="style1"><strong>[new]</strong></span> You can clone selected/highlighted things by holding &quot;Shift&quot; before starting to drag them.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Point Thing to cursor</strong>&quot;. <a href="things_mode/pointthing.html">More info</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Select Things in Selected Sectors</strong>&quot; (Default key is Shift+T).</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Align Things To Linedef</strong>&quot;.</li>
<li><span class="red">[new]</span> You can clone selected/highlighted things by holding &quot;Shift&quot; before starting to drag them.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Point Thing to cursor</strong>&quot;. <a href="things_mode/pointthing.html">More info</a>.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Select Things in Selected Sectors</strong>&quot; (Default key is Shift+T).</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Align Things To Linedef</strong>&quot;.</li>
<li>Z-height of a thing can be changed in absolute and relative mode in Thing Edit form.</li>
<li>Thing's X and Y position can be edited in Edit Thing form.</li>
</ul>
@ -211,7 +204,7 @@
<h3><a name="vertices" id="vertices"></a>Vertices mode:</h3>
<ul>
<li><strong>[UDMF]</strong> Vertical offsets of a vertex can be edited in Vertex Edit form and are shown in Vertex Info panel.</li>
<li><span class="style1"><strong>[new]</strong></span> Split Linedefs preview (a rectangle, colored using Info line color) is shown in this mode.</li>
<li><span class="red">[new]</span> Split Linedefs preview (a rectangle, colored using Info line color) is shown in this mode.</li>
</ul>
</li>
<li>
@ -249,34 +242,34 @@
<li style="list-style-type:none;"><strong><br />
New editing features available in this mode:</strong>
<ul>
<li><span class="style1"><strong>[new]</strong></span> You can <strong>Shift-Select</strong> (usually Select action = LMB) to select all adjacent surfaces with same texture, <strong>Ctrl-Select</strong> to select all adjacent surfaces with same height. <strong>Ctrl-Shift-Select</strong> will also work as expected.</li>
<li><span class="red">[new]</span> You can <strong>Shift-Select</strong> (usually Select action = LMB) to select all adjacent surfaces with same texture, <strong>Ctrl-Select</strong> to select all adjacent surfaces with same height. <strong>Ctrl-Shift-Select</strong> will also work as expected.</li>
<li><strong>[UDMF]</strong> Vertex height offsets (&quot;zfloor&quot; and &quot;zceiling&quot;) <a href="visual_mode/visual_verts.html">can be edited</a>.</li>
<li><strong>[UDMF]</strong> Using &quot;<strong>Increase/Decrease brightness</strong>&quot; actions (bound to Ctrl+Mouse Wheel by default) on walls and ceilings will change sidedef/ceiling brightness, using them on floors will change sector brightness, using them on 3D floors will change brightness of 3D floor.</li>
<li>You can use &quot;<strong>Toggle geometry effects</strong>&quot; action (default key is Tab) to toggle GZDoom's geometry effects, such as slopes, 3D floors, transfer brightness effects etc.</li>
<li><span class="style1"><strong>[new]</strong></span> You can hold <strong>Shift</strong> while dragging a texture to lock movement to horizontal axis, and <strong>Ctrl</strong> to lock it to vertical axis.</li>
<li><span class="style1"><strong>[new]</strong></span> You can hold <strong>Ctrl-Shift</strong> while dragging a texture to snap texture offsets to current grid size.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Align Textures X and Y</strong>&quot; (default key is Ctrl-A).</li>
<li><span class="style1"><strong>[new]</strong></span> &quot;Auto-align Textures Y&quot; action takes surface peg type into account. It also applies vertical scale of first (highlighted) surface to the rest of aligned surfaces (<strong>UDMF</strong> only).</li>
<li><span class="red">[new]</span> You can hold <strong>Shift</strong> while dragging a texture to lock movement to horizontal axis, and <strong>Ctrl</strong> to lock it to vertical axis.</li>
<li><span class="red">[new]</span> You can hold <strong>Ctrl-Shift</strong> while dragging a texture to snap texture offsets to current grid size.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Align Textures X and Y</strong>&quot; (default key is Ctrl-A).</li>
<li><span class="red">[new]</span> &quot;Auto-align Textures Y&quot; action takes surface peg type into account. It also applies vertical scale of first (highlighted) surface to the rest of aligned surfaces (<strong>UDMF</strong> only).</li>
<li><strong>[UDMF]</strong> Auto-align textures actions now affect sides of 3D floors.</li>
<li><strong>[UDMF] </strong><a href="visual_mode/autoalignfloors.html">&quot;Auto-align textures&quot; actions now work on floors and ceilings</a>.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> New action: &quot;<strong>Match Brightness</strong>&quot;: this action makes the brightness of selected surfaces the same as the brightness of highlighted surface.</li>
<li><span class="style1"><strong>[new]</strong></span> New actions: &quot;<strong>Lower Floor/Ceiling to adjacent sector</strong>&quot; and &quot;<strong>Raise Floor/Ceiling to adjacent sector</strong>&quot; (default keys are PageDown and PageUp). By default, they will find next lower/higher surface in sectors, adjacent to selected ones, and lower/raise selected sectors to this height. If you hold Ctrl, they will lower/raise sectors to lowest/highest sector inside selection. And they will also drop selected things to ground or align them to ceiling.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> New actions: &quot;<strong>Increase Scale</strong>&quot; (Num9), &quot;<strong>Decrease Scale</strong>&quot; (Num7), &quot;<strong>Increase Horizontal Scale</strong>&quot; (Num6), &quot;<strong>Decrease Horizontal Scale</strong>&quot; (Num4), &quot;<strong>Increase Vertical Scale</strong>&quot; (Num8), &quot;<strong>Decrease Vertical Scale</strong>&quot; (Num5) actions. These actions can be used to change thing scale and sidedef/floor/ceiling texture scale.<br />
<li><span class="red">[new]</span> <strong>[UDMF]</strong> New action: &quot;<strong>Match Brightness</strong>&quot;: this action makes the brightness of selected surfaces the same as the brightness of highlighted surface.</li>
<li><span class="red">[new]</span> New actions: &quot;<strong>Lower Floor/Ceiling to adjacent sector</strong>&quot; and &quot;<strong>Raise Floor/Ceiling to adjacent sector</strong>&quot; (default keys are PageDown and PageUp). By default, they will find next lower/higher surface in sectors, adjacent to selected ones, and lower/raise selected sectors to this height. If you hold Ctrl, they will lower/raise sectors to lowest/highest sector inside selection. And they will also drop selected things to ground or align them to ceiling.</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> New actions: &quot;<strong>Increase Scale</strong>&quot; (Num9), &quot;<strong>Decrease Scale</strong>&quot; (Num7), &quot;<strong>Increase Horizontal Scale</strong>&quot; (Num6), &quot;<strong>Decrease Horizontal Scale</strong>&quot; (Num4), &quot;<strong>Increase Vertical Scale</strong>&quot; (Num8), &quot;<strong>Decrease Vertical Scale</strong>&quot; (Num5) actions. These actions can be used to change thing scale and sidedef/floor/ceiling texture scale.<br />
</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> New actions: &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture</a></strong>&quot; (default key is Ctrl-Alt-A), &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture's Width</a></strong>&quot; (Alt-A) and &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture's Height</a></strong>&quot; (Alt-Shift-A).</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Toggle slope</strong>&quot; (default key is Alt-S). Select or highlight upper/lower walls then call this action to add slopes. Select or highlight floors or ceilings then call this action to remove slopes.</li>
<li><span class="style1"><strong>[new]</strong></span> New action: &quot;<strong>Look Through Selection</strong>&quot; (default key is &quot;Y&quot;). This action places visual camera at the same position as selected/highlighted thing and rotates it to match thing's angle. Special handling is available if targeted thing is AimingCamera, MovingCamera, SecurityCamera or InterpolationPoint.</li>
<li><span class="style1"><strong>[new]</strong></span> New actions: &quot;<strong><a href="visual_mode/autoalign_to_selection.html">Auto-align Textures to Selection</a> (X)</strong>&quot;, &quot;<strong>Auto-align Textures to Selection (Y)</strong>&quot; and &quot;<strong>Auto-align Textures to Selection (X and Y)</strong>&quot;.</li>
<li>New actions: &quot;<strong>Rotate Clockwise</strong>&quot; and &quot;<strong>Rotate Counterclockwise</strong>&quot;, which can be used to rotate things and <span class="style1"><strong>[new]</strong></span><strong>[UDMF]</strong> floor/ceiling textures.</li>
<li><span class="style1"><strong>[new]</strong></span> New actions: &quot;<strong>Change Pitch Clockwise</strong>&quot;, &quot;<strong>Change Pitch Counterclockwise</strong>&quot;, &quot;<strong>Change Roll Clockwise</strong>&quot; and &quot;<strong>Change Roll Counterclockwise</strong>&quot;, which can be used to change pitch and roll of selected or highlighted things.</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> New actions: &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture</a></strong>&quot; (default key is Ctrl-Alt-A), &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture's Width</a></strong>&quot; (Alt-A) and &quot;<strong><a href="visual_mode/texturefit.html">Fit Texture's Height</a></strong>&quot; (Alt-Shift-A).</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Toggle slope</strong>&quot; (default key is Alt-S). Select or highlight upper/lower walls then call this action to add slopes. Select or highlight floors or ceilings then call this action to remove slopes.</li>
<li><span class="red">[new]</span> New action: &quot;<strong>Look Through Selection</strong>&quot; (default key is &quot;Y&quot;). This action places visual camera at the same position as selected/highlighted thing and rotates it to match thing's angle. Special handling is available if targeted thing is AimingCamera, MovingCamera, SecurityCamera or InterpolationPoint.</li>
<li><span class="red">[new]</span> New actions: &quot;<strong><a href="visual_mode/autoalign_to_selection.html">Auto-align Textures to Selection</a> (X)</strong>&quot;, &quot;<strong>Auto-align Textures to Selection (Y)</strong>&quot; and &quot;<strong>Auto-align Textures to Selection (X and Y)</strong>&quot;.</li>
<li>New actions: &quot;<strong>Rotate Clockwise</strong>&quot; and &quot;<strong>Rotate Counterclockwise</strong>&quot;, which can be used to rotate things and <span class="red">[new]</span><strong>[UDMF]</strong> floor/ceiling textures.</li>
<li><span class="red">[new]</span> New actions: &quot;<strong>Change Pitch Clockwise</strong>&quot;, &quot;<strong>Change Pitch Counterclockwise</strong>&quot;, &quot;<strong>Change Roll Clockwise</strong>&quot; and &quot;<strong>Change Roll Counterclockwise</strong>&quot;, which can be used to change pitch and roll of selected or highlighted things.</li>
<li>Things can be moved horizontally using &quot;<strong>Move Thing Forward/Backward/Left/Right</strong>&quot; actions.</li>
<li>Things can be moved to cursor position using &quot;<strong>Move Thing To Cursor Location</strong>&quot; (default key is Ctrl + Middle mouse) action.</li>
<li>Things can be inserted at cursor position using &quot;<strong>Insert Item</strong>&quot; action (default key is Insert).</li>
<li>Selected things can be deleted using &quot;<strong>Delete Item</strong>&quot; action (default key is Delete).</li>
<li>Selected things can be cut/copied/pasted at cursor position.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> Floor/ceiling texture rotation is now taken into account when moving texture offsets with arrow keys.</li>
<li><span class="style1"><strong>[new] </strong></span><strong>[UDMF] </strong>New action: &quot;<strong>Reset Local Texture Offsets (UDMF)</strong>&quot;. It resets upper/middle/lower texture offsets, scale and brightness of targeted or selected sidedefs, resets texture offsets, rotation, scale and brightness of targeted or selected floors/ceilings and resets scale, pitch and roll of targeted or selected things.</li>
<li><span class="style1"><strong>[new]</strong></span> <strong>[UDMF]</strong> &quot;<strong>Reset Texture Offsets</strong>&quot; action now resets texture offsets of targeted or selected floors and ceilings and also resets scale of targeted or selected things.</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> Floor/ceiling texture rotation is now taken into account when moving texture offsets with arrow keys.</li>
<li><span class="red">[new]</span><strong>[UDMF] </strong>New action: &quot;<strong>Reset Local Texture Offsets (UDMF)</strong>&quot;. It resets upper/middle/lower texture offsets, scale and brightness of targeted or selected sidedefs, resets texture offsets, rotation, scale and brightness of targeted or selected floors/ceilings and resets scale, pitch and roll of targeted or selected things.</li>
<li><span class="red">[new]</span> <strong>[UDMF]</strong> &quot;<strong>Reset Texture Offsets</strong>&quot; action now resets texture offsets of targeted or selected floors and ceilings and also resets scale of targeted or selected things.</li>
</ul>
</li>
</ul>
@ -285,19 +278,19 @@
<h3><a name="fields" id="fields"></a>Custom Fields:</h3>
</li>
<ul>
<li><span class="style1"><strong>[new]</strong></span> <a href="custom_fields/newfieldtypes.html">Integer (Random)</a> custom field type.</li>
<li><span class="style1"><strong>[new]</strong></span> <a href="custom_fields/newfieldtypes.html">Decimal (Random)</a> custom field type.</li>
<li><span class="red">[new]</span> <a href="custom_fields/newfieldtypes.html">Integer (Random)</a> custom field type.</li>
<li><span class="red">[new]</span> <a href="custom_fields/newfieldtypes.html">Decimal (Random)</a> custom field type.</li>
</ul>
<li>
<h3><a name="mapanalysis" id="mapanalysis"></a>Map Analysis mode:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> Analysis results can be hidden per result type and individually via results list's context menu.</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for unconnected vertices.</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for overlapping lines. This will check if 2 lines have the same start and end positions.</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for overlapping vertices. This will check if a vertex is on top of a linedef or another vertex.</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for invalid sectors (sectors with less than 3 sidedefs or sectors without area).</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for unused textures.</li>
<li><span class="style1"><strong>[new]</strong></span> Map Analysis mode can check the map for missing flats.</li>
<li><span class="red">[new]</span> Analysis results can be hidden per result type and individually via results list's context menu.</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for unconnected vertices.</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for overlapping lines. This will check if 2 lines have the same start and end positions.</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for overlapping vertices. This will check if a vertex is on top of a linedef or another vertex.</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for invalid sectors (sectors with less than 3 sidedefs or sectors without area).</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for unused textures.</li>
<li><span class="red">[new]</span> Map Analysis mode can check the map for missing flats.</li>
<li>Map Analysis mode can check the map for unknown things (things, which type is not defined in DECORATE or current game configuration).</li>
<li>Map Analysis window now has &quot;<strong>Apply to all errors of this type</strong>&quot; checkbox.</li>
<li>Analysis results can be saved to a text file or copied to clipboard.</li>
@ -306,23 +299,23 @@
<li>
<h3><a name="findreplace" id="findreplace"></a>Find and Replace mode:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> Find and Replace mode now has &quot;<strong>Sector Brightness</strong>&quot;, &quot;<strong>Sector Floor Height</strong>&quot;, &quot;<strong>Sector Ceiling Height</strong>&quot;, &quot;<strong>Linedef Flags</strong>&quot;, &quot;<strong>Thing Flags</strong>&quot;, &quot;<strong>Sidedef Flags</strong>&quot; and &quot;<strong>Sector Flags</strong>&quot; search modes.</li>
<li><span class="style1"><strong>[new]</strong></span> &quot;<strong>Any Texture or Flat</strong>&quot;, &quot;<strong>Sector Flat</strong>&quot; and &quot;<strong>Sidedef Texture</strong>&quot; search modes now support &quot;<strong>*</strong>&quot; (match any number of characters) and &quot;<strong>?</strong>&quot; (match any single character) wildcards.</li>
<li>Find and Replace Mode can find Action with specific arguments. Syntax is &quot;[Action]; [arg1] [...]&quot;.</li>
<li><span class="red">[new]</span> Find and Replace mode now has &quot;<strong>Sector Brightness</strong>&quot;, &quot;<strong>Sector Floor Height</strong>&quot;, &quot;<strong>Sector Ceiling Height</strong>&quot;, &quot;<strong>Linedef Flags</strong>&quot;, &quot;<strong>Thing Flags</strong>&quot;, &quot;<strong>Sidedef Flags</strong>&quot; and &quot;<strong>Sector Flags</strong>&quot; search modes.</li>
<li><span class="red">[new]</span> &quot;<strong>Any Texture or Flat</strong>&quot;, &quot;<strong>Sector Flat</strong>&quot; and &quot;<strong>Sidedef Texture</strong>&quot; search modes now support &quot;<strong>*</strong>&quot; (match any number of characters) and &quot;<strong>?</strong>&quot; (match any single character) wildcards.</li>
<li><span class="red">[new]</span> Find and Replace Mode can find and replace Thing and Linedef Actions with specific arguments. Syntax is &quot;[Action] [arg1] [...]&quot;. Script names used by ACS actions can be replaced this way as well (<strong>UDMF only</strong>).</li>
</ul>
</li>
<li>
<h3><a name="misc" id="formats"></a>Misc. features:</h3>
<ul>
<li><span class="style1"><strong>[new]</strong></span> Nodes Viewer plugin supports ZNODES in &quot;XNOD&quot;, &quot;XGLN&quot;, &quot;XGL2&quot; and &quot;XGL3&quot; formats.</li>
<li><span class="style1"><strong>[new]</strong></span> Selection groups are saved the map's .dbs file.</li>
<li><span class="red">[new]</span> Nodes Viewer plugin supports ZNODES in &quot;XNOD&quot;, &quot;XGLN&quot;, &quot;XGL2&quot; and &quot;XGL3&quot; formats.</li>
<li><span class="red">[new]</span> Selection groups are saved the map's .dbs file.</li>
</ul>
</li>
<li>
<h3><a name="formats" id="formats"></a>(G)ZDoom features support:</h3>
<ul>
<li><a href="../gldefs.html">MD2 and MD3 models</a> rendering in 2D and 3D modes.</li>
<li><span class="style1"><strong>[new]</strong></span> VOXLEDEF support.</li>
<li><span class="red">[new]</span> VOXLEDEF support.</li>
<li>More complete <a href="../textures.html">TEXTURES</a> support.</li>
<li>Partial<a href="../mapinfo.html"> MAPINFO</a> support.</li>
<li>ACS scripts with #include directives are compiled properly.</li>

View file

@ -19,15 +19,17 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CodeImp.DoomBuilder.GZBuilder;
using CodeImp.DoomBuilder.Map;
using System.Drawing;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Types;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
[FindReplace("Linedef Actions", BrowseButton = true)]
[FindReplace("Linedef Action and Arguments", BrowseButton = true)]
internal class FindLinedefTypes : BaseFindLinedef
{
#region ================== Constants
@ -89,10 +91,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Interpret the replacement
int replaceaction = 0;
string replacearg0str = string.Empty; //mxd
int[] replaceargs = null; //mxd
if(replace)
{
string[] replaceparts = replacewith.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// If it cannot be interpreted, set replacewith to null (not replacing at all)
if(!int.TryParse(replacewith, out replaceaction)) replacewith = null;
if(replaceparts.Length == 0) replacewith = null; //mxd
if(!int.TryParse(replaceparts[0], out replaceaction)) replacewith = null;
if(replaceaction < 0) replacewith = null;
if(replaceaction > Int16.MaxValue) replacewith = null;
if(replacewith == null)
@ -100,34 +107,73 @@ namespace CodeImp.DoomBuilder.BuilderModes
MessageBox.Show("Invalid replace value for this search type!", "Find and Replace", MessageBoxButtons.OK, MessageBoxIcon.Error);
return objs.ToArray();
}
//mxd. Now try parsing the args
if(replaceparts.Length > 1)
{
replaceargs = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, replaceaction) != -1)
{
string possiblescriptname = replaceparts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
replacearg0str = possiblescriptname;
i = 2;
}
}
for(; i < replaceparts.Length && i < replaceargs.Length + 1; i++)
{
int argout;
if(replaceparts[i].Trim() == "*") continue; //mxd. Any arg value support
if(int.TryParse(replaceparts[i].Trim(), out argout)) replaceargs[i - 1] = argout;
}
}
}
// Interpret the number given
int action;
int[] args = null;
string[] parts = value.Split(';');
bool match;
string argtext;
string[] parts = value.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//For the search, the user may make the following query:
// action;arg0,arg1,arg2,arg3,arg4
//For the search, the user may make the following queries:
// action arg0 arg1 arg2 arg3 arg4
// action arg0str arg1 arg2 arg3 arg4
//
//this allows users to search for lines that contain actions with specific arguments.
//useful for locating script lines
//
//Since the Linedef object does not contain a reference to arg0str, this search cannot match named scripts
if(int.TryParse(parts[0], out action))
{
//parse the arg value out
if (parts.Length > 1)
int[] args = null;
string arg0str = string.Empty; //mxd
//parse the arg values out
if(parts.Length > 1)
{
args = new[] {0, 0, 0, 0, 0};
string[] argparts = parts[1].Split(',');
int argout;
for(int i = 0; i < argparts.Length && i < args.Length; i++)
args = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1)
{
if (int.TryParse(argparts[i], out argout)) args[i] = argout;
string possiblescriptname = parts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
arg0str = possiblescriptname;
i = 2;
}
}
for(; i < parts.Length && i < args.Length + 1; i++)
{
int argout;
if(parts[i].Trim() == "*") continue; //mxd. Any arg value support
if(int.TryParse(parts[i].Trim(), out argout)) args[i - 1] = argout;
}
}
@ -141,39 +187,71 @@ namespace CodeImp.DoomBuilder.BuilderModes
foreach(Linedef l in list)
{
// Action matches?
if(l.Action == action || BitsMatch(l.Action, expectedbits))
if(l.Action != action && !BitsMatch(l.Action, expectedbits)) continue;
bool match = true;
string argtext = "";
//if args were specified, then process them
if(args != null)
{
match = true;
argtext = "";
int x = 0;
argtext = " args: (";
//if args were specified, then process them
if (args != null)
//mxd. Check script name...
if(!string.IsNullOrEmpty(arg0str))
{
argtext = " args: (";
for (int x = 0; x < args.Length; x++)
{
if (args[x] != 0 && args[x] != l.Args[x])
{
match = false;
break;
}
argtext += (x == 0 ? "" : ",") + l.Args[x];
}
argtext += ")";
}
if (match)
{
// Replace
if(replace) l.Action = replaceaction;
// Add to list
LinedefActionInfo info = General.Map.Config.GetLinedefActionInfo(l.Action);
if (!info.IsNull)
objs.Add(new FindReplaceObject(l, "Linedef " + l.Index + " (" + info.Title + ")" + argtext));
string s = l.Fields.GetValue("arg0str", string.Empty);
if(s.ToLowerInvariant() != arg0str)
match = false;
else
objs.Add(new FindReplaceObject(l, "Linedef " + l.Index + argtext));
argtext += "\"" + s + "\"";
x = 1;
}
for(; x < args.Length; x++)
{
if(args[x] != int.MinValue && args[x] != l.Args[x])
{
match = false;
break;
}
argtext += (x == 0 ? "" : ",") + l.Args[x];
}
argtext += ")";
}
if(match)
{
// Replace
if(replace)
{
l.Action = replaceaction;
//mxd. Replace args as well?
if(replaceargs != null)
{
int i = 0;
if(!string.IsNullOrEmpty(replacearg0str))
{
l.Fields["arg0str"] = new UniValue(UniversalType.String, replacearg0str);
i = 1;
}
for(; i < replaceargs.Length; i++)
{
if(replaceargs[i] != int.MinValue) l.Args[i] = replaceargs[i];
}
}
}
// Add to list
LinedefActionInfo info = General.Map.Config.GetLinedefActionInfo(l.Action);
if(!info.IsNull)
objs.Add(new FindReplaceObject(l, "Linedef " + l.Index + " (" + info.Title + ")" + argtext));
else
objs.Add(new FindReplaceObject(l, "Linedef " + l.Index + argtext));
}
}
}

View file

@ -19,16 +19,18 @@
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CodeImp.DoomBuilder.GZBuilder;
using CodeImp.DoomBuilder.Map;
using CodeImp.DoomBuilder.Rendering;
using System.Drawing;
using CodeImp.DoomBuilder.Config;
using CodeImp.DoomBuilder.Types;
#endregion
namespace CodeImp.DoomBuilder.BuilderModes
{
[FindReplace("Thing Action", BrowseButton = true)]
[FindReplace("Thing Action and Arguments", BrowseButton = true)]
internal class FindThingAction : BaseFindThing
{
#region ================== Constants
@ -78,10 +80,15 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Interpret the replacement
int replaceaction = 0;
if(replace)
string replacearg0str = string.Empty; //mxd
int[] replaceargs = null; //mxd
if(replace)
{
string[] replaceparts = replacewith.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
// If it cannot be interpreted, set replacewith to null (not replacing at all)
if(!int.TryParse(replacewith, out replaceaction)) replacewith = null;
if(replaceparts.Length == 0) replacewith = null; //mxd
if(!int.TryParse(replaceparts[0], out replaceaction)) replacewith = null;
if(replaceaction < 0) replacewith = null;
if(replaceaction > Int16.MaxValue) replacewith = null;
if(replacewith == null)
@ -89,76 +96,145 @@ namespace CodeImp.DoomBuilder.BuilderModes
MessageBox.Show("Invalid replace value for this search type!", "Find and Replace", MessageBoxButtons.OK, MessageBoxIcon.Error);
return objs.ToArray();
}
//mxd. Now try parsing the args
if(replaceparts.Length > 1)
{
replaceargs = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, replaceaction) != -1)
{
string possiblescriptname = replaceparts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
replacearg0str = possiblescriptname;
i = 2;
}
}
for(; i < replaceparts.Length && i < replaceargs.Length + 1; i++)
{
int argout;
if(replaceparts[i].Trim() == "*") continue; //mxd. Any arg value support
if(int.TryParse(replaceparts[i].Trim(), out argout)) replaceargs[i - 1] = argout;
}
}
}
// Interpret the number given
int findaction;
int[] args = null;
string[] parts = value.Split(';');
bool match;
string argtext;
//For the search, the user may make the following query:
// action;arg0,arg1,arg2,arg3,arg4
int action;
string[] parts = value.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//For the search, the user may make the following queries:
// action arg0 arg1 arg2 arg3 arg4
// action arg0str arg1 arg2 arg3 arg4
//
//this allows users to search for things that contain actions with specific arguments.
//useful for locating enemies that trigger a certain script
//
//Since the Thing object does not contain a reference to arg0str, this search cannot match named scripts
if (int.TryParse(parts[0], out findaction))
//this allows users to search for lines that contain actions with specific arguments.
//useful for locating script lines
if(int.TryParse(parts[0], out action))
{
//parse the arg value out
if (parts.Length > 1)
int[] args = null;
string arg0str = string.Empty; //mxd
//parse the arg values out
if(parts.Length > 1)
{
args = new[] { 0, 0, 0, 0, 0 };
string[] argparts = parts[1].Split(',');
int argout;
for (int i = 0; i < argparts.Length && i < args.Length; i++)
args = new[] { int.MinValue, int.MinValue, int.MinValue, int.MinValue, int.MinValue };
int i = 1;
//mxd. Named script search support...
if(General.Map.UDMF && Array.IndexOf(GZGeneral.ACS_SPECIALS, action) != -1)
{
if (int.TryParse(argparts[i], out argout))
string possiblescriptname = parts[1].Trim().Replace("\"", "").ToLowerInvariant();
int tmp;
if(!string.IsNullOrEmpty(possiblescriptname) && possiblescriptname != "*" && !int.TryParse(possiblescriptname, out tmp))
{
args[i] = argout;
arg0str = possiblescriptname;
i = 2;
}
}
for(; i < parts.Length && i < args.Length + 1; i++)
{
int argout;
if(parts[i].Trim() == "*") continue; //mxd. Any arg value support
if(int.TryParse(parts[i].Trim(), out argout)) args[i - 1] = argout;
}
}
// Where to search?
ICollection<Thing> list = withinselection ? General.Map.Map.GetSelectedThings(true) : General.Map.Map.Things;
// Go for all things
foreach(Thing t in list)
foreach(Thing t in list)
{
// Match?
if(t.Action == findaction)
// Action matches?
if(t.Action != action) continue;
bool match = true;
string argtext = "";
//if args were specified, then process them
if(args != null)
{
match = true;
argtext = "";
int x = 0;
argtext = " args: (";
//if args were specified, then process them
if (args != null)
//mxd. Check script name...
if(!string.IsNullOrEmpty(arg0str))
{
argtext = " args: (";
for (int x = 0; x < args.Length; x++)
string s = t.Fields.GetValue("arg0str", string.Empty);
if(s.ToLowerInvariant() != arg0str)
match = false;
else
argtext += "\"" + s + "\"";
x = 1;
}
for(; x < args.Length; x++)
{
if(args[x] != int.MinValue && args[x] != t.Args[x])
{
if (args[x] != 0 && args[x] != t.Args[x])
{
match = false;
break;
}
argtext += (x == 0 ? "" : ",") + t.Args[x];
match = false;
break;
}
argtext += ")";
argtext += (x == 0 ? "" : ",") + t.Args[x];
}
argtext += ")";
}
if (match)
if(match)
{
// Replace
if(replace)
{
// Replace
if (replace) t.Action = replaceaction;
t.Action = replaceaction;
// Add to list
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
objs.Add(new FindReplaceObject(t, "Thing " + t.Index + " (" + ti.Title + ")" + argtext));
//mxd. Replace args as well?
if(replaceargs != null)
{
int i = 0;
if(!string.IsNullOrEmpty(replacearg0str))
{
t.Fields["arg0str"] = new UniValue(UniversalType.String, replacearg0str);
i = 1;
}
for(; i < replaceargs.Length; i++)
{
if(replaceargs[i] != int.MinValue) t.Args[i] = replaceargs[i];
}
}
}
// Add to list
ThingTypeInfo ti = General.Map.Data.GetThingInfo(t.Type);
objs.Add(new FindReplaceObject(t, "Thing " + t.Index + " (" + ti.Title + ")" + argtext));
}
}
}

View file

@ -30,7 +30,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
{
System.Windows.Forms.Label label1;
System.Windows.Forms.Label label2;
this.replacelabel = new System.Windows.Forms.Label();
this.searchtypes = new System.Windows.Forms.ComboBox();
this.findinput = new CodeImp.DoomBuilder.Controls.AutoSelectTextbox();
this.browsefind = new System.Windows.Forms.Button();
@ -44,18 +43,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.resultspanel = new System.Windows.Forms.Panel();
this.deletebutton = new System.Windows.Forms.Button();
this.editbutton = new System.Windows.Forms.Button();
this.groupreplace = new System.Windows.Forms.GroupBox();
this.doreplace = new System.Windows.Forms.CheckBox();
label1 = new System.Windows.Forms.Label();
label2 = new System.Windows.Forms.Label();
this.resultspanel.SuspendLayout();
this.groupreplace.SuspendLayout();
this.SuspendLayout();
//
// label1
//
label1.AutoSize = true;
label1.Location = new System.Drawing.Point(25, 15);
label1.Location = new System.Drawing.Point(36, 15);
label1.Name = "label1";
label1.Size = new System.Drawing.Size(67, 13);
label1.TabIndex = 0;
@ -64,44 +61,35 @@ namespace CodeImp.DoomBuilder.BuilderModes
// label2
//
label2.AutoSize = true;
label2.Location = new System.Drawing.Point(36, 51);
label2.Location = new System.Drawing.Point(47, 51);
label2.Name = "label2";
label2.Size = new System.Drawing.Size(56, 13);
label2.TabIndex = 2;
label2.Text = "Find what:";
//
// replacelabel
//
this.replacelabel.AutoSize = true;
this.replacelabel.Location = new System.Drawing.Point(12, 28);
this.replacelabel.Name = "replacelabel";
this.replacelabel.Size = new System.Drawing.Size(72, 13);
this.replacelabel.TabIndex = 6;
this.replacelabel.Text = "Replace with:";
//
// searchtypes
//
this.searchtypes.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.searchtypes.FormattingEnabled = true;
this.searchtypes.Location = new System.Drawing.Point(100, 12);
this.searchtypes.Location = new System.Drawing.Point(109, 12);
this.searchtypes.Name = "searchtypes";
this.searchtypes.Size = new System.Drawing.Size(139, 21);
this.searchtypes.Size = new System.Drawing.Size(156, 21);
this.searchtypes.Sorted = true;
this.searchtypes.TabIndex = 0;
this.searchtypes.SelectedIndexChanged += new System.EventHandler(this.searchtypes_SelectedIndexChanged);
//
// findinput
//
this.findinput.Location = new System.Drawing.Point(100, 48);
this.findinput.Location = new System.Drawing.Point(109, 48);
this.findinput.Name = "findinput";
this.findinput.Size = new System.Drawing.Size(106, 20);
this.findinput.Size = new System.Drawing.Size(122, 20);
this.findinput.TabIndex = 1;
this.findinput.TextChanged += new System.EventHandler(this.findinput_TextChanged);
//
// browsefind
//
this.browsefind.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.treeview;
this.browsefind.Location = new System.Drawing.Point(212, 46);
this.browsefind.Location = new System.Drawing.Point(237, 45);
this.browsefind.Name = "browsefind";
this.browsefind.Size = new System.Drawing.Size(28, 25);
this.browsefind.TabIndex = 2;
@ -111,7 +99,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// withinselection
//
this.withinselection.AutoSize = true;
this.withinselection.Location = new System.Drawing.Point(100, 75);
this.withinselection.Location = new System.Drawing.Point(109, 76);
this.withinselection.Name = "withinselection";
this.withinselection.Size = new System.Drawing.Size(137, 17);
this.withinselection.TabIndex = 3;
@ -120,8 +108,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
//
// browsereplace
//
this.browsereplace.Enabled = false;
this.browsereplace.Image = global::CodeImp.DoomBuilder.BuilderModes.Properties.Resources.treeview;
this.browsereplace.Location = new System.Drawing.Point(203, 23);
this.browsereplace.Location = new System.Drawing.Point(237, 97);
this.browsereplace.Name = "browsereplace";
this.browsereplace.Size = new System.Drawing.Size(28, 25);
this.browsereplace.TabIndex = 1;
@ -130,15 +119,16 @@ namespace CodeImp.DoomBuilder.BuilderModes
//
// replaceinput
//
this.replaceinput.Location = new System.Drawing.Point(91, 25);
this.replaceinput.Enabled = false;
this.replaceinput.Location = new System.Drawing.Point(109, 100);
this.replaceinput.Name = "replaceinput";
this.replaceinput.Size = new System.Drawing.Size(106, 20);
this.replaceinput.Size = new System.Drawing.Size(122, 20);
this.replaceinput.TabIndex = 0;
//
// findbutton
//
this.findbutton.Enabled = false;
this.findbutton.Location = new System.Drawing.Point(273, 12);
this.findbutton.Location = new System.Drawing.Point(273, 10);
this.findbutton.Name = "findbutton";
this.findbutton.Size = new System.Drawing.Size(74, 25);
this.findbutton.TabIndex = 7;
@ -149,7 +139,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
// closebutton
//
this.closebutton.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.closebutton.Location = new System.Drawing.Point(273, 43);
this.closebutton.Location = new System.Drawing.Point(273, 39);
this.closebutton.Name = "closebutton";
this.closebutton.Size = new System.Drawing.Size(74, 25);
this.closebutton.TabIndex = 8;
@ -164,7 +154,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
| System.Windows.Forms.AnchorStyles.Right)));
this.resultslist.FormattingEnabled = true;
this.resultslist.IntegralHeight = false;
this.resultslist.ItemHeight = 14;
this.resultslist.Location = new System.Drawing.Point(9, 31);
this.resultslist.Margin = new System.Windows.Forms.Padding(1);
this.resultslist.Name = "resultslist";
@ -190,7 +179,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.resultspanel.Controls.Add(this.editbutton);
this.resultspanel.Controls.Add(this.resultscount);
this.resultspanel.Controls.Add(this.resultslist);
this.resultspanel.Location = new System.Drawing.Point(-1, 188);
this.resultspanel.Location = new System.Drawing.Point(-1, 133);
this.resultspanel.Name = "resultspanel";
this.resultspanel.Size = new System.Drawing.Size(362, 285);
this.resultspanel.TabIndex = 6;
@ -218,27 +207,14 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.editbutton.UseVisualStyleBackColor = true;
this.editbutton.Click += new System.EventHandler(this.editbutton_Click);
//
// groupreplace
//
this.groupreplace.Controls.Add(this.replaceinput);
this.groupreplace.Controls.Add(this.browsereplace);
this.groupreplace.Controls.Add(this.replacelabel);
this.groupreplace.Enabled = false;
this.groupreplace.Location = new System.Drawing.Point(9, 108);
this.groupreplace.Name = "groupreplace";
this.groupreplace.Size = new System.Drawing.Size(256, 64);
this.groupreplace.TabIndex = 5;
this.groupreplace.TabStop = false;
this.groupreplace.Text = " ";
//
// doreplace
//
this.doreplace.AutoSize = true;
this.doreplace.Location = new System.Drawing.Point(24, 105);
this.doreplace.Location = new System.Drawing.Point(12, 102);
this.doreplace.Name = "doreplace";
this.doreplace.Size = new System.Drawing.Size(66, 17);
this.doreplace.Size = new System.Drawing.Size(91, 17);
this.doreplace.TabIndex = 4;
this.doreplace.Text = "Replace";
this.doreplace.Text = "Replace with:";
this.doreplace.UseVisualStyleBackColor = true;
this.doreplace.CheckedChanged += new System.EventHandler(this.doreplace_CheckedChanged);
//
@ -248,9 +224,10 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi;
this.CancelButton = this.closebutton;
this.ClientSize = new System.Drawing.Size(358, 472);
this.ClientSize = new System.Drawing.Size(358, 417);
this.Controls.Add(this.browsereplace);
this.Controls.Add(this.replaceinput);
this.Controls.Add(this.doreplace);
this.Controls.Add(this.groupreplace);
this.Controls.Add(this.closebutton);
this.Controls.Add(this.findbutton);
this.Controls.Add(this.withinselection);
@ -264,6 +241,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "FindReplaceForm";
this.Opacity = 1;
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
@ -274,8 +252,6 @@ namespace CodeImp.DoomBuilder.BuilderModes
this.KeyDown += new System.Windows.Forms.KeyEventHandler(this.FindReplaceForm_KeyDown);
this.resultspanel.ResumeLayout(false);
this.resultspanel.PerformLayout();
this.groupreplace.ResumeLayout(false);
this.groupreplace.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
@ -294,10 +270,8 @@ namespace CodeImp.DoomBuilder.BuilderModes
private System.Windows.Forms.ListBox resultslist;
private System.Windows.Forms.Label resultscount;
private System.Windows.Forms.Panel resultspanel;
private System.Windows.Forms.GroupBox groupreplace;
private System.Windows.Forms.CheckBox doreplace;
private System.Windows.Forms.Button editbutton;
private System.Windows.Forms.Button deletebutton;
private System.Windows.Forms.Label replacelabel;
}
}

View file

@ -101,16 +101,9 @@ namespace CodeImp.DoomBuilder.BuilderModes
// Replace (un)checked
private void doreplace_CheckedChanged(object sender, EventArgs e)
{
if(doreplace.Checked)
{
findbutton.Text = "Replace";
groupreplace.Enabled = true;
}
else
{
findbutton.Text = "Find";
groupreplace.Enabled = false;
}
findbutton.Text = (doreplace.Checked ? "Replace" : "Find");
replaceinput.Enabled = doreplace.Checked;
browsereplace.Enabled = doreplace.Checked;
}
// Search type selected
@ -125,6 +118,7 @@ namespace CodeImp.DoomBuilder.BuilderModes
browsereplace.Enabled = newfinder.Attributes.BrowseButton;
browsereplace.Image = newfinder.BrowseImage;
if(!newfinder.CanReplace()) doreplace.Checked = false;
doreplace_CheckedChanged(this, EventArgs.Empty); //mxd. Update the rest of replace controls
doreplace.Enabled = newfinder.CanReplace();
}

View file

@ -117,67 +117,22 @@
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="label1.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label1.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="label2.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="label2.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<metadata name="replacelabel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="searchtypes.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="findinput.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="browsefind.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="withinselection.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="browsereplace.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="replaceinput.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="findbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="closebutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="resultslist.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="resultscount.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="resultspanel.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="deletebutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="editbutton.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="groupreplace.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="doreplace.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="$this.Locked" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

View file

@ -6,7 +6,7 @@
class VerticesMode
group general
"Hold <k>builder_pan_view</k> to pan the view"
"Hold <k>builder_pan_view</k> and move the mouse to pan the view"
"Press <k>builder_classicselect</k> to select a vertex"
"Hold <k>builder_classicselect</k> and drag to use rectangular selection"
"Press <k>builder_clearselection</k> to clear selection"
@ -26,7 +26,7 @@ group multiselection
class LinedefsMode
group general
"Hold <k>builder_pan_view</k> to pan the view"
"Hold <k>builder_pan_view</k> and move the mouse to pan the view"
"Press <k>builder_classicselect</k> to select a linedef"
"Hold <k>builder_classicselect</k> and drag to use rectangular selection"
"Press <k>builder_clearselection</k> to clear selection"
@ -35,7 +35,7 @@ group general
"Press <k>builder_classicedit</k> to edit properties of current selection"
"Use <k>builder_griddec</k> and <k>builder_gridinc</k> to change grid size"
"Press <k>buildermodes_drawlinesmode</k> or <k>builder_insertitem</k> to start drawing lines"
"Press <k>buildermodes_flipsidedefs</k> to flips the sidedefs on the selected linedefs around"
"Press <k>buildermodes_fliplinedefs</k> to flip the selected linedefs around keeping sidedefs on the correct side"
"Press <k>buildermodes_selectsinglesided</k> to keep only the single-sided lines in your selection selected"
"Press <k>buildermodes_selectdoublesided</k> to keep only the double-sided lines in your selection selected"
"Check <b>'Linedefs'</b> menu for additional actions"
@ -48,7 +48,7 @@ group multiselection
class SectorsMode
group general
"Hold <k>builder_pan_view</k> to pan the view"
"Hold <k>builder_pan_view</k> and move the mouse to pan the view"
"Press <k>builder_classicselect</k> to select a sector. Hold <b>Alt</b> to (de)select things inside of a sector"
"Hold <k>builder_classicselect</k> and drag to use rectangular selection"
"Press <k>builder_clearselection</k> to clear selection"
@ -73,7 +73,7 @@ group multiselection
class ThingsMode
group general
"Hold <k>builder_pan_view</k> to pan the view"
"Hold <k>builder_pan_view</k> and move the mouse to pan the view"
"Press <k>builder_classicselect</k> to select a thing"
"Hold <k>builder_classicedit</k> to drag selected or highlighted things"
"Hold <b>Shift-</b><k>builder_classicedit</k> to clone-drag selected or highlighted things"