<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.thedarkmod.com/index.php?action=history&amp;feed=atom&amp;title=GUI_Scripting%3A_Limitations_of_On-Surface_GUIs</id>
	<title>GUI Scripting: Limitations of On-Surface GUIs - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.thedarkmod.com/index.php?action=history&amp;feed=atom&amp;title=GUI_Scripting%3A_Limitations_of_On-Surface_GUIs"/>
	<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=GUI_Scripting:_Limitations_of_On-Surface_GUIs&amp;action=history"/>
	<updated>2026-04-18T07:30:59Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=GUI_Scripting:_Limitations_of_On-Surface_GUIs&amp;diff=30090&amp;oldid=prev</id>
		<title>Geep: Add category tag</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=GUI_Scripting:_Limitations_of_On-Surface_GUIs&amp;diff=30090&amp;oldid=prev"/>
		<updated>2022-11-04T17:36:02Z</updated>

		<summary type="html">&lt;p&gt;Add category tag&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 17:36, 4 November 2022&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l21&quot;&gt;Line 21:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 21:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can use a frob_action_script to call either a global script function, or one in a script object that is attached to the entity with the &amp;quot;scriptobject&amp;quot; spawnarg. In most cases, there is little advantage to using a script object just for frobbing.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;You can use a frob_action_script to call either a global script function, or one in a script object that is attached to the entity with the &amp;quot;scriptobject&amp;quot; spawnarg. In most cases, there is little advantage to using a script object just for frobbing.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-deleted&quot;&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{GUI}}&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On the other hand, if you want to make the surface show visual changes without player frobbing (or in addition to responding to player frobbing), then a script object running an endless loop is perfect.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;On the other hand, if you want to make the surface show visual changes without player frobbing (or in addition to responding to player frobbing), then a script object running an endless loop is perfect.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Geep</name></author>
	</entry>
	<entry>
		<id>https://wiki.thedarkmod.com/index.php?title=GUI_Scripting:_Limitations_of_On-Surface_GUIs&amp;diff=29927&amp;oldid=prev</id>
		<title>Geep: create this article</title>
		<link rel="alternate" type="text/html" href="https://wiki.thedarkmod.com/index.php?title=GUI_Scripting:_Limitations_of_On-Surface_GUIs&amp;diff=29927&amp;oldid=prev"/>
		<updated>2022-10-20T19:44:45Z</updated>

		<summary type="html">&lt;p&gt;create this article&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;#039;&amp;#039;This is a part of a series, whose hub is [[GUI Scripting Language]]&amp;#039;&amp;#039;&lt;br /&gt;
==Introduction==&lt;br /&gt;
&amp;#039;&amp;#039;These limitations apply to GUIs on in-game surfaces, NOT necessarily to in-game full-screen or partial-screen overlays.&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Unlike Doom3, TDM does not support direct interactivity on GUIs applied to surfaces, what you might need to play a game on an anchronistic in-world computer. This is on purpose; Doom3 code was removed or disabled in order to build out reliable TDM frob support, &lt;br /&gt;
[https://forums.thedarkmod.com/index.php?/topic/21464-gui-on-a-world-object/&amp;amp;do=findComment&amp;amp;comment=475923 indicates greebo].&lt;br /&gt;
&lt;br /&gt;
==Details and Implications==&lt;br /&gt;
* Game-related key-binding, including mouse-button-binding and mouse-motion handling, remain in place.&lt;br /&gt;
* Consequently, a cursor - if shown - is dead. So an on-surface GUI should have &amp;quot;nocursor 1&amp;quot;.&lt;br /&gt;
* Key- and mouse-related events will never reach the GUI, so onAction, onActionRelease, onEnter, onEnterRelease, onMouseEnter, and onMouseExit event handlers are never fired.&lt;br /&gt;
* And of course onEsc is not pertinent because Escape jumps to the main menu.&lt;br /&gt;
* Still useful: onTime and onNamedEvent.&lt;br /&gt;
* GUI &amp;quot;buttons&amp;quot; on an entity cannot be individually touched, whether created by:&lt;br /&gt;
** child windowDefs; or&lt;br /&gt;
** multiple &amp;quot;Entity GUI&amp;quot;s on different surfaces of an entity, with separate GUIs.&lt;br /&gt;
* Touching (at the whole-entity level) is just by frobbing, and is done indirectly through a frob_action_script.&lt;br /&gt;
* As feedback, frob highlighting must take the place of mouse-over event handlers.&lt;br /&gt;
* The frob action script function can change what individual child windowDefs (including on multiple Entity GUI surfaces) show. So text, images, colors can be altered.&lt;br /&gt;
* As for guiDefs other than windowDefs, these cannot get needed key inputs. So editDef is useless. Others (like choiceDef and renderDef) can be driven by script. For choiceDef, this results in adequate if somewhat-reduced functionality; see [[GUI Scripting: On-Surface Menu Example#Spiders]] for details.&lt;br /&gt;
&lt;br /&gt;
You can use a frob_action_script to call either a global script function, or one in a script object that is attached to the entity with the &amp;quot;scriptobject&amp;quot; spawnarg. In most cases, there is little advantage to using a script object just for frobbing.&lt;br /&gt;
&lt;br /&gt;
On the other hand, if you want to make the surface show visual changes without player frobbing (or in addition to responding to player frobbing), then a script object running an endless loop is perfect.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;Other Ideas&amp;quot; section of [[GUI Scripting: In-World Menu Examples]] explores some possibilities.&lt;br /&gt;
&lt;br /&gt;
==The &amp;quot;gui_noninteractive&amp;quot; Spawnarg==&lt;br /&gt;
Doom3 provided this Boolean spawnarg to set on an entity with surface GUI(s). It was designed to indicate whether any of the GUIs on the entity are interactive. [https://modwiki.dhewm3.org/doom3world/index.php?thread_id=20799 In 2007, Tetzlaff in a modwiki post] described it this way for Doom 3:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;GUIs that are just eye candy should be set non-interactive (gui_noninteractive 1), or else they can get in the way in the middle of a fight.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, for TDM, entity-based GUIs are all effectively &amp;quot;non-interactive&amp;quot; in the classic sense anyway, so this spawnarg, while parsed and internally set, seems to have no actual effect.&lt;/div&gt;</summary>
		<author><name>Geep</name></author>
	</entry>
</feed>