iddevnet/quake4/Placing_a_GUI_In_a_Map.html

247 lines
15 KiB
HTML
Raw Permalink Normal View History

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8">
<meta name="robots" content="index,nofollow">
<title>Placing a GUI In a Map - Quake 4 SDK Documentation</title>
<script type="text/javascript" src="wiki/common/js/common.js"></script>
<script type="text/javascript">
<!--// common functions
// We keep here the state of the search box
searchIsDisabled = false;
function searchChange(e) {
// Update search buttons status according to search box content.
// Ignore empty or whitespace search term.
var value = e.value.replace(/\s+/, '');
if (value == '' || searchIsDisabled) {
searchSetDisabled(true);
} else {
searchSetDisabled(false);
}
}
function searchSetDisabled(flag) {
// Enable or disable search
document.getElementById('fullsearch').disabled = flag;
document.getElementById('titlesearch').disabled = flag;
}
function searchFocus(e) {
// Update search input content on focus
if (e.value == 'Search') {
e.value = '';
e.className = '';
searchIsDisabled = false;
}
}
function searchBlur(e) {
// Update search input content on blur
if (e.value == '') {
e.value = 'Search';
e.className = 'disabled';
searchIsDisabled = true;
}
}
function actionsMenuInit(title) {
// Initialize action menu
for (i = 0; i < document.forms.length; i++) {
var form = document.forms[i];
if (form.className == 'actionsmenu') {
// Check if this form needs update
var div = form.getElementsByTagName('div')[0];
var label = div.getElementsByTagName('label')[0];
if (label) {
// This is the first time: remove label and do buton.
div.removeChild(label);
var dobutton = div.getElementsByTagName('input')[0];
div.removeChild(dobutton);
// and add menu title
var select = div.getElementsByTagName('select')[0];
var item = document.createElement('option');
item.appendChild(document.createTextNode(title));
item.value = 'show';
select.insertBefore(item, select.options[0]);
select.selectedIndex = 0;
}
}
}
}
//-->
</script>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="wiki/modern/css/common.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="screen" href="wiki/modern/css/screen.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="print" href="wiki/modern/css/print.css">
<link rel="stylesheet" type="text/css" charset="utf-8" media="projection" href="wiki/modern/css/projection.css">
<!-- css only for MSIE browsers -->
<!--[if IE]>
<link rel="stylesheet" type="text/css" charset="utf-8" media="all" href="wiki/modern/css/msie.css">
<![endif]-->
<link rel="Start" href="./Quake4SDK.html">
2021-04-10 13:40:18 +00:00
<link rel="Alternate" title="Wiki Markup" href="./Placing_a_GUI_In_a_Map?action=raw">
<link rel="Alternate" media="print" title="Print View" href="./Placing_a_GUI_In_a_Map?action=print">
<link rel="Search" href="./FindPage.html">
<link rel="Index" href="./TitleIndex.html">
<link rel="Glossary" href="./WordIndex.html">
<link rel="Help" href="./HelpOnFormatting.html">
</head>
<body lang="en" dir="ltr">
<div id="header">
<div id="logo"><a href="./Quake4SDK.html"><img src="wiki/common/moinmoin.png" alt="MoinMoin Logo"></a></div>
<form id="searchform" method="get" action="">
<div>
<input type="hidden" name="action" value="fullsearch">
<input type="hidden" name="context" value="180">
<label for="searchinput">Search:</label>
<input id="searchinput" type="text" name="value" value="" size="20"
onfocus="searchFocus(this)" onblur="searchBlur(this)"
onkeyup="searchChange(this)" onchange="searchChange(this)" alt="Search">
<input id="titlesearch" name="titlesearch" type="submit"
value="Titles" alt="Search Titles">
<input id="fullsearch" name="fullsearch" type="submit"
value="Text" alt="Search Full Text">
</div>
</form>
<script type="text/javascript">
<!--// Initialize search form
var f = document.getElementById('searchform');
f.getElementsByTagName('label')[0].style.display = 'none';
var e = document.getElementById('searchinput');
searchChange(e);
searchBlur(e);
//-->
</script>
2021-04-10 13:40:18 +00:00
<ul id="username"><li><a href="./Placing_a_GUI_In_a_Map?action=login" id="login">Login</a></li></ul>
<div id="locationline">
<ul id="pagelocation">
2021-04-10 13:40:18 +00:00
<li><a class="backlink" title="Click to do a full-text search for this title" href="./Placing_a_GUI_In_a_Map?action=fullsearch&amp;value=linkto%3A%22Placing+a+GUI+In+a+Map%22&amp;context=180">Placing a GUI In a Map</a></li>
</ul>
</div>
<ul id="navibar">
<li class="wikilink"><a href="./GettingStarted.html">GettingStarted</a></li><li class="wikilink"><a href="./ScriptFile.html">ScriptFile</a></li><li class="wikilink"><a href="./MakeAMod.html">MakeAMod</a></li><li class="wikilink"><a href="./LevelEditor.html">LevelEditor</a></li><li class="wikilink"><a href="./FXEditor.html">FXEditor</a></li><li class="wikilink"><a href="./GUIEditor.html">GUIEditor</a></li><li class="wikilink"><a href="./Sounds.html">Sounds</a></li><li class="wikilink"><a href="./Animations.html">Animations</a></li><li class="wikilink"><a href="./ArtReference.html">ArtReference</a></li><li class="wikilink"><a href="./DownloadableContent.html">DownloadableContent</a></li><li class="wikilink"><a href="./RecentChanges.html">RecentChanges</a></li><li class="wikilink"><a href="./FindPage.html">FindPage</a></li><li class="wikilink"><a href="./HelpContents.html">HelpContents</a></li><li class="current"><a href="./Placing_a_GUI_In_a_Map.html">Placing a GUI In a Map</a></li>
</ul>
<div id="pageline"><hr style="display:none;"></div>
2021-04-10 13:40:18 +00:00
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="./Placing_a_GUI_In_a_Map?action=info">Info</a></li><li><a href="./Placing_a_GUI_In_a_Map?action=AttachFile">Attachments</a></li><li>
<form class="actionsmenu" method="get" action="">
<div>
<label>More Actions:</label>
<select name="action"
onchange="if ((this.selectedIndex != 0) &&
(this.options[this.selectedIndex].disabled == false)) {
this.form.submit();
}
this.selectedIndex = 0;">
<option value="raw">Raw Text</option>
<option value="print">Print View</option>
<option value="RenderAsDocbook">Render as Docbook</option>
<option value="refresh">Delete Cache</option>
<option value="show" disabled class="disabled">------------</option>
<option value="SpellCheck">Check Spelling</option>
<option value="LikePages">Like Pages</option>
<option value="LocalSiteMap">Local Site Map</option>
<option value="show" disabled class="disabled">------------</option>
<option value="RenamePage" disabled class="disabled">Rename Page</option>
<option value="DeletePage" disabled class="disabled">Delete Page</option>
<option value="show" disabled class="disabled">------------</option>
<option value="MyPages">My Pages</option>
<option value="SubscribeUser">Subscribe User</option>
<option value="show" disabled class="disabled">------------</option>
<option value="Despam">Remove Spam</option>
<option value="PackagePages">Package Pages</option>
</select>
<input type="submit" value="Do">
</div>
<script type="text/javascript">
<!--// Init menu
actionsMenuInit('More Actions:');
//-->
</script>
</form>
</li></ul>
</div>
<div id="page" lang="en" dir="ltr">
<div dir="ltr" id="content" lang="en"><span class="anchor" id="top"></span>
<span class="anchor" id="line-1"></span><p class="line862">Placing GUIs into a map is an easy process. We won't go into extensive detail about creating a puzzle that's activated by a GUI as that's more the scope of the <a href="./LevelEditor.html">LevelEditor</a> help documents, but we'll outline the basic process of placing a GUI into a level here. <span class="anchor" id="line-2"></span><span class="anchor" id="line-3"></span><p class="line862">For simple puzzle GUIs that run a script, a <a class="nonexistent" href="./Entity_FuncStatic.html">func_static</a> is bound to a GUI with the "gui" key in the <a href="./LevelEditor_EntityReference.html">Entity</a> properties in the <a href="./LevelEditor.html">LevelEditor</a>, with the key being set to the path of the GUI (for more about working with the <a href="./LevelEditor.html">LevelEditor</a>, see the other help documents on this site). <span class="anchor" id="line-4"></span><span class="anchor" id="line-5"></span><p class="line862">Some GUIs, such as lift GUIs, require a little more work. We'll use <strong>GUIs/movers/strogg/call_lift.gui</strong> as an example. <span class="anchor" id="line-6"></span><span class="anchor" id="line-7"></span><p class="line862">Create a simple box map and place a brush to act as a simple second floor. Place a <a href="./Entity_FuncElevator.html">func_elevator</a> in the map and place its position at the second floor. There are several monitor models to choose from in Quake 4. <strong>models/mapobjects/strogg/monitors/medium/med_just_screen.lwo</strong> is a common choice. Place one of these at the first floor. This will be the elevator call GUI that moves the elevator onto your floor if it isn't already there. <span class="anchor" id="line-8"></span><span class="anchor" id="line-9"></span><p class="line862">Select the monitor. In the <a href="./LevelEditor_EntityReference.html">Entity</a> editor, add the "gui" key and make its value the path to the call_lift gui, which is "guis/movers/strogg/call_lift.gui". Next, unselect your monitor and select your elevator. Copy the name of the elevator (i.e., "<a href="./Entity_FuncElevator.html">func_elevator_3</a>"), and then unselect your elevator and select your monitor. In the monitor's <a href="./LevelEditor_EntityReference.html">Entity</a> properties, put this name into the "target" key. <span class="anchor" id="line-10"></span><span class="anchor" id="line-11"></span><p class="line874">Now you must set the GUI parms that tell the GUI what floor it's on so that when the script is activated it knows which animations to run and what values to set (so that if the elevator is already on that floor, it knows not to call it again). Looking in the call_lift.gui file, you'll see a comment in the Desktop: <span class="anchor" id="line-12"></span><span class="anchor" id="line-13"></span><pre> windowDef Desktop
<span class="anchor" id="line-14"></span> {
<span class="anchor" id="line-15"></span> comment "gui_parm_floor = to 1 or 2 to indicate the floor the liftcall gui itself (not the lift) is on. 1 for the bottom floor, 2 for the top floor. gui_parm_strogg == 1 sets the lift gui to use non readable strogg text. Can also run a 'gui_parm_script' set to the name of your script and/or activate a trigger."
<span class="anchor" id="line-16"></span>
<span class="anchor" id="line-17"></span> (...)
<span class="anchor" id="line-18"></span></pre><span class="anchor" id="line-19"></span><p class="line862">Since our monitor is on the first floor, enter a new key into the monitor's <a href="./LevelEditor_EntityReference.html">Entity</a> properties, "<a href="./GUI_Parms.html">gui_parm_floor</a>" and set it to 1. Copy this monitor and paste it at the second floor. Change the value for "<a href="./GUI_Parms.html">gui_parm_floor</a>" from 1 to 2 since this one is on the second floor. <span class="anchor" id="line-20"></span><span class="anchor" id="line-21"></span><p class="line862">To finish making the elevator functional, select the elevator and make its "gui" <a href="./LevelEditor_EntityReference.html">entity</a> key set to "guis/movers/strogg/activate_lift.gui". Set three more <a href="./LevelEditor_EntityReference.html">entity</a> keys for the elevator: "floorPos_2" (the 3-coordinate position of the elevator when it's sitting at Floor 2), "floorPos_1" (the 3-coordinate position when it's sitting at Floor 1), and "floor", which is the floor it's going to be stopped at by default. If the two call_lift.gui monitors are the equivalent of the elevator call buttons outside of an elevator, the activate_lift.gui on the elevator itself is the equivalent of the row of buttons inside the elevator to make it move once you're inside. <span class="anchor" id="line-22"></span><span class="anchor" id="line-23"></span><p class="line874">Now you've placed three GUIs in your map: two that call the elevator to whatever floor you're on if the elevator isn't already on that floor, and one on the elevator itself to move the elevator between floors. This is one of the more complex uses of world GUIs in Quake 4, but the range of what GUIs can do in a map certainly isn't limited to this level of complexity. World GUIs are a way for mod authors and level designers to place interesting and complex puzzles into their levels. <span class="anchor" id="line-24"></span><span class="anchor" id="bottom"></span></div><p id="pageinfo" class="info" lang="en" dir="ltr">Placing a GUI In a Map (last edited 2005-11-07 19:45:20 by <span title="MattVainio @ 67.129.250.254[67.129.250.254]"><a class="nonexistent" href="./MattVainio.html" title="MattVainio @ 67.129.250.254[67.129.250.254]">MattVainio</a></span>)</p>
<div id="pagebottom"></div>
</div>
<div id="footer">
2021-04-10 13:40:18 +00:00
<ul class="editbar"><li><span class="disabled">Immutable Page</span></li><li><a href="./Placing_a_GUI_In_a_Map?action=info">Info</a></li><li><a href="./Placing_a_GUI_In_a_Map?action=AttachFile">Attachments</a></li><li>
<form class="actionsmenu" method="get" action="">
<div>
<label>More Actions:</label>
<select name="action"
onchange="if ((this.selectedIndex != 0) &&
(this.options[this.selectedIndex].disabled == false)) {
this.form.submit();
}
this.selectedIndex = 0;">
<option value="raw">Raw Text</option>
<option value="print">Print View</option>
<option value="RenderAsDocbook">Render as Docbook</option>
<option value="refresh">Delete Cache</option>
<option value="show" disabled class="disabled">------------</option>
<option value="SpellCheck">Check Spelling</option>
<option value="LikePages">Like Pages</option>
<option value="LocalSiteMap">Local Site Map</option>
<option value="show" disabled class="disabled">------------</option>
<option value="RenamePage" disabled class="disabled">Rename Page</option>
<option value="DeletePage" disabled class="disabled">Delete Page</option>
<option value="show" disabled class="disabled">------------</option>
<option value="MyPages">My Pages</option>
<option value="SubscribeUser">Subscribe User</option>
<option value="show" disabled class="disabled">------------</option>
<option value="Despam">Remove Spam</option>
<option value="PackagePages">Package Pages</option>
</select>
<input type="submit" value="Do">
</div>
<script type="text/javascript">
<!--// Init menu
actionsMenuInit('More Actions:');
//-->
</script>
</form>
</li></ul>
<ul id="credits">
<li><a href="http://moinmoin.wikiwikiweb.de/">MoinMoin Powered</a></li><li><a href="http://www.python.org/">Python Powered</a></li><li><a href="http://validator.w3.org/check?uri=referer">Valid HTML 4.01</a></li>
</ul>
</div>
</body>
</html>