as released 2002-04-09

This commit is contained in:
archive 2002-04-09 00:00:00 +00:00
commit 3c1aaae445
76 changed files with 108507 additions and 0 deletions

BIN
BASIC SCRIPTS.doc Normal file

Binary file not shown.

BIN
LEGAL READ ME.doc Normal file

Binary file not shown.

5
MOHAATools/INSTALL.TXT Normal file
View File

@ -0,0 +1,5 @@
1. Unzip to the location of your choice.
2. Ensure that your paths (basepath, mapspath, autosave) in the project properly point to your MOHAA installation. This information is stored in the qe4 file. You can set these from File->Project Settings.
3. Copy entdefs.pk3 to your MOHAA/main directory.

BIN
MOHAATools/MOHlight.exe Normal file

Binary file not shown.

160
MOHAATools/aidialog.cfg Normal file
View File

@ -0,0 +1,160 @@
// behavior-specific key pairs have the following syntax:
//
// <keyname> string "<default_string>" ? help_text
// <keyname> value <default> <min> <max> <slow_spin> <fast_spin> ? help_text
//
// min, max, slow_spin, and fast_spin must be integers
// keys for curious should be placed in type_idle
type_idle
{
idle
{
sound_awareness value 100 0 100 1 10 ? percent chance to notice a sound within half the sound's range, fades to zero outside range
noticescale value 100 1 500 5 10 ? multiplier in time to notice an enemy (default 100, half as big notices twice as fast)
fixedleash value 0 0 1 1 1 ? if non-zero, the leash will never auto-reset; if zero, the leash may auto-reset
enemysharerange value 0 0 16384 16 256 ? sets the range outside which the AI will not receive notification that a teammate has a new enemy
voicetype string "" ? letter for the AI's voice type; leave blank for a random voice each map
}
patrol
{
patrolpath string "" ? name of a pathnode or waypoint to use as the patrol path
waittrigger value 0 0 1 1 1 ? set to 1 to wait until triggered
sound_awareness value 100 0 100 1 10 ? percent chance to notice a sound within half the sound's range, fades to zero outside range
noticescale value 100 1 500 5 10 ? multiplier in time to notice an enemy (default 100, half as big notices twice as fast)
fixedleash value 0 0 1 1 1 ? if non-zero, the leash will never auto-reset; if zero, the leash may auto-reset
enemysharerange value 0 0 16384 16 256 ? sets the range outside which the AI will not receive notification that a teammate has a new enemy
voicetype string "" ? letter for the AI's voice type; leave blank for a random voice each map
}
runner
{
patrolpath string "" ? name of a pathnode or waypoint to use as the patrol path
waittrigger value 0 0 1 1 1 ? set to 1 to wait until triggered
sound_awareness value 100 0 100 1 10 ? percent chance to notice a sound within half the sound's range, fades to zero outside range
noticescale value 100 1 500 5 10 ? multiplier in time to notice an enemy (default 100, half as big notices twice as fast)
fixedleash value 0 0 1 1 1 ? if non-zero, the leash will never auto-reset; if zero, the leash may auto-reset
enemysharerange value 0 0 16384 16 256 ? sets the range outside which the AI will not receive notification that a teammate has a new enemy
voicetype string "" ? letter for the AI's voice type; leave blank for a random voice each map
}
machinegunner
{
turret string "" ? name of turret being used
sound_awareness value 100 0 100 1 10 ? percent chance to notice a sound within half the sound's range, fades to zero outside range
noticescale value 100 1 500 5 10 ? multiplier in time to notice an enemy (default 100, half as big notices twice as fast)
fixedleash value 0 0 1 1 1 ? if non-zero, the leash will never auto-reset; if zero, the leash may auto-reset
enemysharerange value 0 0 16384 16 256 ? sets the range outside which the AI will not receive notification that a teammate has a new enemy
voicetype string "" ? letter for the AI's voice type; leave blank for a random voice each map
}
balcony_idle
{
sound_awareness value 100 0 100 1 10 ? percent chance to notice a sound within half the sound's range, fades to zero outside range
noticescale value 100 1 500 5 10 ? multiplier in time to notice an enemy (default 100, half as big notices twice as fast)
fixedleash value 0 0 1 1 1 ? if non-zero, the leash will never auto-reset; if zero, the leash may auto-reset
enemysharerange value 0 0 16384 16 256 ? sets the range outside which the AI will not receive notification that a teammate has a new enemy
voicetype string "" ? letter for the AI's voice type; leave blank for a random voice each map
balconyheight value 128 0 1024 16 64 ? minimum height AI must fall to do a balcony death
}
}
type_attack
{
turret
{
accuracy value 20 0 100 1 10 ? percent chance to hit
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
cover
{
accuracy value 20 0 100 1 10 ? percent chance to hit
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
alarm
{
alarmnode string "" ? name of entity to use as alarm node
alarmthread string "" ? thread to call when actor reaches alarm node
accuracy value 20 0 100 1 10 ? percent chance to hit
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
machinegunner
{
turret string "" ? name of turret being used
accuracy value 100 0 100 1 10 ? percent chance to hit
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
balcony_attack
{
accuracy value 100 0 100 1 10 ? percent chance to hit
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
weaponless
{
ammo_grenade value 0 0 4 1 1 ? number of grenades the guy starts with
}
}
type_disguise
{
salute
{
disguise_range value 256 32 16384 32 128 ? maximum distance AI can be for them to do disguise behavior
disguise_period value 15 1 3600 1 10 ? minimum time between repititions of disguise behavior
}
sentry
{
disguise_range value 256 32 16384 32 128 ? maximum distance AI can be for them to do disguise behavior
disguise_accept_thread string "" ? thread to call when actor reaches alarm node
disguise_period value 15 1 3600 1 10 ? minimum time between repititions of disguise behavior
disguise_level value 1 1 2 1 1 ? level of papers required for success
}
officer
{
disguise_range value 256 32 16384 32 128 ? maximum distance AI can be for them to do disguise behavior
disguise_period value 15 1 3600 1 10 ? minimum time between repititions of disguise behavior
}
rover
{
disguise_range value 256 32 16384 32 128 ? maximum distance AI can be for them to do disguise behavior
disguise_period value 15 1 3600 1 10 ? minimum time between repititions of disguise behavior
}
none
{
}
machinegunner
{
}
balcony_disguise
{
}
}
type_grenade
{
grenade
{
gren_awareness value 10 0 100 1 10 ? chance that an AI will notice a grenade when they can see it
}
machinegunner
{
}
balcony_grenade
{
}
}

18
MOHAATools/default.qe4 Normal file
View File

@ -0,0 +1,18 @@
{
"brush_primit" "0"
"basepath" "c:\program files\ea games\mohaa\"
"rshcmd" ""
"autosave" "c:\program files\ea games\mohaa\maps\"
"mapspath" "c:\program files\ea games\mohaa\maps\"
"remotebasepath" ""
"modelmask" "*.tik"
"entitydir" "code/"
"moddir" "main"
"bsp_BSP" "! q3map -v -gamedir ../mohaa/ $"
"bsp_Vis (fast)" "! q3map -vis -v -fast -gamedir ../mohaa/ $"
"bsp_Vis" "! q3map -vis -v -gamedir ../mohaa/ $"
"bsp_Light (fast)" "! mohlight -v -fast -gamedir ../mohaa/ $"
"bsp_Light" "! mohlight -v -gamedir ../mohaa/ $"
"bsp_Light (final)" "! mohlight -v -final -gamedir ../mohaa/ $"
}

BIN
MOHAATools/docs/AI tips.doc Normal file

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,784 @@
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<link rel=File-List href="./Getting%20Started%20Tutorial_files/filelist.xml">
<link rel=Edit-Time-Data
href="./Getting%20Started%20Tutorial_files/editdata.mso">
<link rel=OLE-Object-Data
href="./Getting%20Started%20Tutorial_files/oledata.mso">
<!--[if !mso]>
<style>
v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style>
<![endif]-->
<title>This tutorial assumes that youve successfully installed and set up
MOHRadiant and have all the path information set correctly</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>Nate</o:Author>
<o:LastAuthor>EA</o:LastAuthor>
<o:Revision>2</o:Revision>
<o:TotalTime>11</o:TotalTime>
<o:Created>2002-02-11T23:13:00Z</o:Created>
<o:LastSaved>2002-02-11T23:13:00Z</o:LastSaved>
<o:Pages>12</o:Pages>
<o:Words>1383</o:Words>
<o:Characters>7884</o:Characters>
<o:Company>2015</o:Company>
<o:Lines>65</o:Lines>
<o:Paragraphs>15</o:Paragraphs>
<o:CharactersWithSpaces>9682</o:CharactersWithSpaces>
<o:Version>9.3821</o:Version>
</o:DocumentProperties>
</xml><![endif]-->
<style>
<!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
h1
{mso-style-next:Normal;
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:1;
font-size:12.0pt;
font-family:"Times New Roman";
mso-font-kerning:0pt;}
p.MsoTitle, li.MsoTitle, div.MsoTitle
{margin:0in;
margin-bottom:.0001pt;
text-align:center;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";
font-weight:bold;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
</head>
<body lang=EN-US style='tab-interval:.5in'>
<div class=Section1>
<p class=MsoTitle>Building a Room</p>
<p class=MsoNormal><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>This tutorial assumes that youve successfully installed and
set up MOHRadiant and have all the path information set correctly. This
tutorial also assumes that you have no previous experience editing Quake Levels</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Section 1</b>: Intro to brushes and the camera</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span>Brushes are
the building block for worlds in Quake engine games such as MOH.<span
style="mso-spacerun: yes">  </span>Brushes can only be convex shapes.<span
style="mso-spacerun: yes">  </span>In order to build a concave object you will
use multiple brushes.<span style="mso-spacerun: yes">  </span>This is for
efficient collision detection in the game.</p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span>To create a
new brush simply drag a box in the 2d view like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shapetype id="_x0000_t75" coordsize="21600,21600"
o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f"
stroked="f">
<v:stroke joinstyle="miter"/>
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0"/>
<v:f eqn="sum @0 1 0"/>
<v:f eqn="sum 0 0 @1"/>
<v:f eqn="prod @2 1 2"/>
<v:f eqn="prod @3 21600 pixelWidth"/>
<v:f eqn="prod @3 21600 pixelHeight"/>
<v:f eqn="sum @0 0 1"/>
<v:f eqn="prod @6 1 2"/>
<v:f eqn="prod @7 21600 pixelWidth"/>
<v:f eqn="sum @8 21600 0"/>
<v:f eqn="prod @7 21600 pixelHeight"/>
<v:f eqn="sum @10 21600 0"/>
</v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
<o:lock v:ext="edit" aspectratio="t"/>
</v:shapetype><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:293.25pt;
height:220.5pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image001.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=391 height=294
src="./Getting%20Started%20Tutorial_files/image002.jpg" v:shapes="_x0000_i1025"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1025"
DrawAspect="Content" ObjectID="_1074952783">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span>Now pull
the edges out by clicking outside of the box and dragging outward.<span
style="mso-spacerun: yes">  </span></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1026" type="#_x0000_t75"
style='width:298.5pt;height:213.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image003.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=398 height=285
src="./Getting%20Started%20Tutorial_files/image004.jpg" v:shapes="_x0000_i1026"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1026"
DrawAspect="Content" ObjectID="_1074952784">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal style='text-indent:.5in'>When youve got the box in the
shape that you want press the escape button.<span style="mso-spacerun: yes"> 
</span>Notice the brush is no longer highlighted.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span>To select a
brush for modifications, hold down shift and click in the center of the
brush.<span style="mso-spacerun: yes">   </span>You can also deselect a brush
the same way.<span style="mso-spacerun: yes">  </span>Pressing escape deselects
all of the selected brushes.<span style='mso-tab-count:1'>        </span></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style="mso-spacerun: yes">   </span><!--[if gte vml 1]><v:shape
id="_x0000_i1027" type="#_x0000_t75" style='width:304.5pt;height:236.25pt'
o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image005.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=406 height=315
src="./Getting%20Started%20Tutorial_files/image006.jpg" v:shapes="_x0000_i1027"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1027"
DrawAspect="Content" ObjectID="_1074952785">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span>This is
basic brush manipulation.<span style="mso-spacerun: yes">  </span>Now youll
learn how to focus the camera on the brush.<span style="mso-spacerun: yes"> 
</span>This is the camera:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><span style="mso-spacerun: yes"> </span><!--[if gte vml 1]><v:shape
id="_x0000_i1028" type="#_x0000_t75" style='width:84pt;height:81.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image007.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=112 height=109
src="./Getting%20Started%20Tutorial_files/image008.jpg" v:shapes="_x0000_i1028"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1028"
DrawAspect="Content" ObjectID="_1074952786">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>If you cant find the camera scroll
the 2dmap around by holding the right click and moving the mouse.<span
style="mso-spacerun: yes">  </span>Use the Mouse-wheel to zoom in and out.<span
style="mso-spacerun: yes">  </span>If you dont have a mouse wheel use the
insert and delete keys.<span style="mso-spacerun: yes">  </span>Pressing Alt+x
will center the 2d view on the current selected brush.<span
style="mso-spacerun: yes">  </span>Since you dont have any brushes selected
pressing Alt+x will center the 2d view on the camera.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>Notice the two lines coming out of
the camera.<span style="mso-spacerun: yes">  </span>These lines show the
cameras field of view.<span style="mso-spacerun: yes">  </span>You can point
your camera by middle-clicking in the 2d view.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'><!--[if gte vml 1]><v:shape id="_x0000_i1029"
type="#_x0000_t75" style='width:293.25pt;height:244.5pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image009.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=391 height=326
src="./Getting%20Started%20Tutorial_files/image010.jpg" v:shapes="_x0000_i1029"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1029"
DrawAspect="Content" ObjectID="_1074952787">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>Notice your cameras Field of view
lines change.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'><!--[if gte vml 1]><v:shape id="_x0000_i1030"
type="#_x0000_t75" style='width:289.5pt;height:235.5pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image011.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=386 height=314
src="./Getting%20Started%20Tutorial_files/image012.jpg" v:shapes="_x0000_i1030"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1030"
DrawAspect="Content" ObjectID="_1074952788">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>And your 3d view is now updated.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'><!--[if gte vml 1]><v:shape id="_x0000_i1031"
type="#_x0000_t75" style='width:327pt;height:110.25pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image013.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=436 height=147
src="./Getting%20Started%20Tutorial_files/image014.jpg" v:shapes="_x0000_i1031"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1031"
DrawAspect="Content" ObjectID="_1074952789">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>If at any point your camera is off
looking at gray (void) space you can reposition it in the 2d view.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>Youre going to control your camera
mostly within the 3d view but when starting a map its easiest to first
position the camera in the 2d view.<span style="mso-spacerun: yes">  </span>Now
youll move on to 3d camera manipulation.</p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal style='text-indent:.5in'>There are a few different camera
modes they can be selected by clicking on the camera eye icon in the tool bar.
Click on it and watch it cycle through the different modes.<span
style="mso-spacerun: yes">  </span></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1032" type="#_x0000_t75"
style='width:373.5pt;height:29.25pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image015.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=498 height=39
src="./Getting%20Started%20Tutorial_files/image016.jpg" v:shapes="_x0000_i1032"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1032"
DrawAspect="Content" ObjectID="_1074952790">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal style='text-indent:.5in'><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1033" type="#_x0000_t75"
style='width:23.25pt;height:21.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image017.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=31 height=29
src="./Getting%20Started%20Tutorial_files/image018.jpg" v:shapes="_x0000_i1033"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1033"
DrawAspect="Content" ObjectID="_1074952791">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal>Default mode with the eye and no numbers is classic Q3
Radiant mode. Those who have used Q3radiant will be familiar with the camera
controls in this mode.</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1034" type="#_x0000_t75"
style='width:23.25pt;height:21.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image019.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=31 height=29
src="./Getting%20Started%20Tutorial_files/image020.jpg" v:shapes="_x0000_i1034"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1034"
DrawAspect="Content" ObjectID="_1074952792">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal>The mode with a “1” over the eye is “game mode” and requires
button rebinding to work.</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1035" type="#_x0000_t75"
style='width:23.25pt;height:21.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image021.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=31 height=29
src="./Getting%20Started%20Tutorial_files/image022.jpg" v:shapes="_x0000_i1035"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1035"
DrawAspect="Content" ObjectID="_1074952793">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal>The mode with a “2” over the eye is the “mode with no name”
mode and this is the one I will use for this tutorial since its the one that I
prefer.<span style="mso-spacerun: yes">  </span></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>In the 3d view click and hold your right mouse button, now
move the mouse around and see what happens to the camera.<span
style="mso-spacerun: yes">  </span>Forward and back move the camera forward and
back side-to-side turns the camera view from left to right.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now hold down the control button and the right mouse button
while moving the mouse.<span style="mso-spacerun: yes">  </span>Moving up and
down will move the camera up and down moving side-to-side will strafe the
camera.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Hold down the control button the shift button and the right
button and move the camera around. This will be like looking around in the game</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>If your ever lost in the gray void you can re-position your
camera in the 2d view by CTRL+MIDDLE clicking.<span style="mso-spacerun: yes"> 
</span>Combine that with the middle click to point the camera and you can
quickly set your camera anywhere.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>You can edit within the 3d view the same way that you edit
in the 2d view.<span style="mso-spacerun: yes">  </span>Just Shift-click the
brush to select and pull away from edges.<span style="mso-spacerun: yes"> 
</span>When you want precision or just plain ease of use youll edit in the 2d
window.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>To edit 3d geometry youll need to switch sides in the 2d
view. Notice the words “XY Top” in the top left corner of the 2d view</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1036" type="#_x0000_t75"
style='width:147pt;height:81pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image023.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=196 height=108
src="./Getting%20Started%20Tutorial_files/image024.jpg" v:shapes="_x0000_i1036"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1036"
DrawAspect="Content" ObjectID="_1074952794">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Select the brush and Press CTRL+TAB to switch the 2d view to
a different side.<span style="mso-spacerun: yes">  </span>When the view
switches it will center on the current selected brush or brushes.<span
style="mso-spacerun: yes">  </span>If nothing is selected the 2d view will
center on the 3d camera.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now youre looking at the front view and it should look
something like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1037" type="#_x0000_t75"
style='width:312pt;height:232.5pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image025.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=416 height=310
src="./Getting%20Started%20Tutorial_files/image026.jpg" v:shapes="_x0000_i1037"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1037"
DrawAspect="Content" ObjectID="_1074952795">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><span style='mso-tab-count:1'>            </span></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Click and drag the edges as you did earlier in the tutorial
to make the brush taller.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Section 2</b>: Hollowing a room</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now that youve learned the basics of brush and camera manipulation
you can build a room.<span style="mso-spacerun: yes">  </span>Go to the file
menu and select New.<span style="mso-spacerun: yes">  </span>If it asks you to
copy the selection click on no. </p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Start by making your grid size 128 units, do this by
pressing the “8” key.<span style="mso-spacerun: yes">  </span>Notice the status
window changing at the bottom of the window.<span style="mso-spacerun: yes"> 
</span>It should say “Grid 128”.<span style="mso-spacerun: yes">  </span>The
numbers 1-9 change the grid size 1=1, 2=2, 3=4, 4=8, 5=16 etc.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Switch your view to the top view.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Draw a box that is 512 x 512 units.<span
style="mso-spacerun: yes">  </span>You can use the grid numbers on top and on
the side or you can go by how many times the box “snaps”, each snap being the
distance of the grid size.<span style="mso-spacerun: yes">  </span>An easier
way to measure a brush is to check the “<b>paint sizing info</b>” box in the
preferences dialog box.<span style="mso-spacerun: yes">  </span>Find the
preferences in the “<b>edit</b>” menu.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1038" type="#_x0000_t75"
style='width:407.25pt;height:99pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image027.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=543 height=132
src="./Getting%20Started%20Tutorial_files/image028.jpg" v:shapes="_x0000_i1038"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1038"
DrawAspect="Content" ObjectID="_1074952796">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Youll now see the measurements on the selected brush or
brushes. </p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Stretch the brush out until you see this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1039" type="#_x0000_t75"
style='width:307.5pt;height:243pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image029.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=410 height=324
src="./Getting%20Started%20Tutorial_files/image030.jpg" v:shapes="_x0000_i1039"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1039"
DrawAspect="Content" ObjectID="_1074952798">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal>The numbers on the bottom and right sides are the size of
the box; the number on the top is the coordinate for the top left corner.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Switch youre 2d view (CTRL+TAB) and make the brush 512
units tall.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now change the grid size to 8 (press 4).</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Press the “<b>hollow</b>” Icon that looks like this:</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1040" type="#_x0000_t75"
style='width:23.25pt;height:21.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image031.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=31 height=29
src="./Getting%20Started%20Tutorial_files/image032.jpg" v:shapes="_x0000_i1040"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1040"
DrawAspect="Content" ObjectID="_1074952799">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Your brush will split into 6 brushes and looks like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1041" type="#_x0000_t75"
style='width:296.25pt;height:262.5pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image033.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=395 height=350
src="./Getting%20Started%20Tutorial_files/image034.jpg" v:shapes="_x0000_i1041"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1041"
DrawAspect="Content" ObjectID="_1074952800">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>This is the quick and dirty way of creating a room and is
fine for this example.<span style="mso-spacerun: yes">  </span>In creating
buildings and such youll never use the hollow tool because the hollow tool
doesnt layout the brushes properly.<span style="mso-spacerun: yes">  </span>At
each of the edges the brushes overlap. For this example thats fine because you
wont see the sides of the brush that overlap, but in a level where this room
might be visible from outside this will create a problem because two surfaces
will be on the same plane. </p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Move the camera inside the box (CONTROL+MIDDLE CLICK in the
2d view) </p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now the room needs a texture. Go to the <b>Textures</b> menu
and select <b>barrel</b>. Im using Barrel for the tutorial because its the
smallest texture directory and loads quickly.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>You should see the texture window to the right of the screen
fill up with barrel textures.<span style="mso-spacerun: yes">  </span>Chose a
texture to place on the wall and left-click it. This is the room, all it needs
is a player start position and a light to run it in the game.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><b>Section 3</b>: Adding a player start and a light</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>First deselect everything (press Escape).</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>After deselecting everything right Click in the 2d window to
bring up the entity selection menu.<span style="mso-spacerun: yes">  </span>The
menu looks like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1042" type="#_x0000_t75"
style='width:189pt;height:213.75pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image035.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=252 height=285
src="./Getting%20Started%20Tutorial_files/image036.jpg" v:shapes="_x0000_i1042"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1042"
DrawAspect="Content" ObjectID="_1074952801">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Select Info&gt;Player&gt;Start:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1043" type="#_x0000_t75"
style='width:317.25pt;height:164.25pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image037.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=423 height=219
src="./Getting%20Started%20Tutorial_files/image038.jpg" v:shapes="_x0000_i1043"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1043"
DrawAspect="Content" ObjectID="_1074952802">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>This places a player starting position where you click.<span
style="mso-spacerun: yes">  </span>Now youll rearrange that entity.<span
style="mso-spacerun: yes">  </span>In the 3d view turn the camera so its
looking at the ground.<span style="mso-spacerun: yes">  </span>Now hold
CTRL+ALT and middle click in the center of the ground surface in the 3d
view.<span style="mso-spacerun: yes">  </span></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1044" type="#_x0000_t75"
style='width:269.25pt;height:185.25pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image039.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=359 height=247
src="./Getting%20Started%20Tutorial_files/image040.jpg" v:shapes="_x0000_i1044"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1044"
DrawAspect="Content" ObjectID="_1074952803">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Deselect the player start position (press Escape).<span
style="mso-spacerun: yes">  </span>Right-Click in the 2d view and select “<b>Light”</b>
from the menu.<span style="mso-spacerun: yes">  </span>Place the light in the
3d view the same way as you placed the player start. You should end up with
something that looks like this.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1045" type="#_x0000_t75"
style='width:315pt;height:213pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image041.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=420 height=284
src="./Getting%20Started%20Tutorial_files/image042.jpg" v:shapes="_x0000_i1045"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1045"
DrawAspect="Content" ObjectID="_1074952804">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Save this level and youll be ready to compile and play in
the game.</p>
<p class=MsoNormal><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>
<p class=MsoNormal><b>Section 4</b>: Compiling and playing</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Compiling is a 3-step process. <b>BSP</b>, <b>VIS</b>, and <b>LIGHT</b>
</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Q3map is a command line utility that is used to compile BSP
and VIS the map.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Open a command prompt and run q3map like this</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Q3map gamedir &lt;base directory of the game&gt; &lt;name
of the map&gt;</p>
<p class=MsoNormal>On a machine with MOHAA installed to <b>c:/mohaa</b> and the
map named <b>tutorial.map</b> placed in the <b>c:/mohaa/map_source</b>
directory the command would look like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<h1>Q3map gamedir c:/mohaa c:/mohaa/map_source/tutorial</h1>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>This compiles the BSP for the map</p>
<p class=MsoNormal>Compiling Vis is much the same way but with a vis command
attached like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<h1>Q3map vis gamedir c:/mohaa c:/mohaa/map_source/tutorial</h1>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Compiling Light is done with a separate program called
mohlight; mohlight is run much the same, like this:</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<h1>Mohlight gamedir c:/mohaa c:/mohaa/map_source/tutorial</h1>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Now copy the resulting .bsp (in this case tutorial.bsp, should
be in the same place as the .map file) to your <b>mohaa/main/maps</b> folder. </p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>Once the .bsp file is in the maps folder it is ready to
run.<span style="mso-spacerun: yes">  </span>Youll have to load MOH in
developer mode so that you can use the special developer mode tools.<span
style="mso-spacerun: yes">  </span>Load moh from the run menu or a command line
like this.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal><b>mohaa +set developer 1 +set thereisnomonkey 1 +set cheats
1 +set ui_console 1<o:p></o:p></b></p>
<p class=MsoNormal><b><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></b></p>
<p class=MsoNormal>Once in the game you should see the console, it looks like
this:</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1046" type="#_x0000_t75"
style='width:463.5pt;height:326.25pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image043.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=618 height=435
src="./Getting%20Started%20Tutorial_files/image044.jpg" v:shapes="_x0000_i1046"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1046"
DrawAspect="Content" ObjectID="_1074952805">
</o:OLEObject>
</xml><![endif]--></p>
<p class=MsoNormal>If you dont see the console press the Tilde (`) key to
bring it down.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>In the console type “map” followed by a space and then the
name of your map, like this:</p>
<p class=MsoNormal><!--[if gte vml 1]><v:shape id="_x0000_i1047" type="#_x0000_t75"
style='width:316.5pt;height:54pt' o:ole="">
<v:imagedata src="./Getting%20Started%20Tutorial_files/image045.png" o:title=""/>
</v:shape><![endif]--><![if !vml]><img width=422 height=72
src="./Getting%20Started%20Tutorial_files/image046.jpg" v:shapes="_x0000_i1047"><![endif]><!--[if gte mso 9]><xml>
<o:OLEObject Type="Embed" ProgID="Photoshop.Image.5" ShapeID="_x0000_i1047"
DrawAspect="Content" ObjectID="_1074952806">
</o:OLEObject>
</xml><![endif]--><b><o:p></o:p></b></p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>After pressing enter you will be able to walk around in the
room.</p>
<p class=MsoNormal><![if !supportEmptyParas]>&nbsp;<![endif]><o:p></o:p></p>
<p class=MsoNormal>These are the basic steps to getting a map up and running in
the game.<span style="mso-spacerun: yes">  </span>From here you should be able
to build a simple map.</p>
</div>
</body>
</html>

View File

@ -0,0 +1,49 @@
/filelist.xml/1.1/Mon Feb 11 23:15:46 2002//
/image001.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image002.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image003.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image004.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image005.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image006.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image007.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image008.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image009.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image010.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image011.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image012.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image013.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image014.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image015.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image016.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image017.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image018.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image019.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image020.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image021.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image022.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image023.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image024.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image025.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image026.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image027.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image028.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image029.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image030.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image031.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image032.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image033.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image034.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image035.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image036.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image037.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image038.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image039.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image040.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image041.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image042.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image043.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image044.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image045.png/1.1/Mon Feb 11 23:16:02 2002/-kb/
/image046.jpg/1.1/Mon Feb 11 23:16:02 2002/-kb/
/oledata.mso/1.1/Mon Feb 11 23:16:02 2002/-kb/
D

View File

@ -0,0 +1 @@
mohta/docs/LD_docs/Getting Started Tutorial_files

View File

@ -0,0 +1 @@
:pserver:jason@qix:/repository

View File

@ -0,0 +1,51 @@
<xml xmlns:o="urn:schemas-microsoft-com:office:office">
<o:MainFile HRef="../Getting%20Started%20Tutorial.htm"/>
<o:File HRef="image001.png"/>
<o:File HRef="image002.jpg"/>
<o:File HRef="oledata.mso"/>
<o:File HRef="image003.png"/>
<o:File HRef="image004.jpg"/>
<o:File HRef="image005.png"/>
<o:File HRef="image006.jpg"/>
<o:File HRef="image007.png"/>
<o:File HRef="image008.jpg"/>
<o:File HRef="image009.png"/>
<o:File HRef="image010.jpg"/>
<o:File HRef="image011.png"/>
<o:File HRef="image012.jpg"/>
<o:File HRef="image013.png"/>
<o:File HRef="image014.jpg"/>
<o:File HRef="image015.png"/>
<o:File HRef="image016.jpg"/>
<o:File HRef="image017.png"/>
<o:File HRef="image018.jpg"/>
<o:File HRef="image019.png"/>
<o:File HRef="image020.jpg"/>
<o:File HRef="image021.png"/>
<o:File HRef="image022.jpg"/>
<o:File HRef="image023.png"/>
<o:File HRef="image024.jpg"/>
<o:File HRef="image025.png"/>
<o:File HRef="image026.jpg"/>
<o:File HRef="image027.png"/>
<o:File HRef="image028.jpg"/>
<o:File HRef="image029.png"/>
<o:File HRef="image030.jpg"/>
<o:File HRef="image031.png"/>
<o:File HRef="image032.jpg"/>
<o:File HRef="image033.png"/>
<o:File HRef="image034.jpg"/>
<o:File HRef="image035.png"/>
<o:File HRef="image036.jpg"/>
<o:File HRef="image037.png"/>
<o:File HRef="image038.jpg"/>
<o:File HRef="image039.png"/>
<o:File HRef="image040.jpg"/>
<o:File HRef="image041.png"/>
<o:File HRef="image042.jpg"/>
<o:File HRef="image043.png"/>
<o:File HRef="image044.jpg"/>
<o:File HRef="image045.png"/>
<o:File HRef="image046.jpg"/>
<o:File HRef="filelist.xml"/>
</xml>

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 631 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 309 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 672 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 660 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,50 @@
Description of the use of the huddraw set of script commands
------------------------------------------------------------
The huddraw script commands allow you to draw up to 256 different graphic icons on the player's hud.
The element to adjust with each command is specified by an index number in the range of 0 to 255.
They currently broadcast to all players, but that could be changed if the need arises.
Commands Summary
----------------
huddraw_shader <index> <shader name>
This sets the shader to use for a particular huddraw element.
huddraw_align <index> <horizontal> <vertical>
This sets the alignment of the huddraw element.
Valid values for horizontal alignment are "left", "center", and "right".
Valid values for vertical alignment are "top", "center", and "bottom".
huddraw_rect <index> <X position> <Y position> <width> <height>
This sets the position and size of the huddraw element. X and Y specify the position of
the upper left corner position. Higher values of X move it to the right, and higher
values of Y move it down. When you set the alignment, the XY position specified is
relative to that alignment. For example, if you align it to the right edge of the hud,
the X position should be less than zero so that it the upper left corner will be brough
back to the left onto the screen.
huddraw_virtualsize <index> <virtual>
This let's you set the huddraw element's size and position according to a virtual screen
resolution of 640x480. What this means is that it lets you treat the hud like it's always
at 640x480, and it will be properly resized and positioned according to the actual resolution.
huddraw_color <index> <red> <green> <blue>
This set the color of the huddraw element. Each color channel should be between 0 and 1.
huddraw_alpha <index> <alpha>
This set the alpha of the huddraw element. It should be set between 0 and 1. This is also
used to turn off a huddraw element that is no longer wanted by setting the alpha to 0.
huddraw_string <index> <string>
This sets the huddraw element to display a string instead of a shader graphic. The size
of the font can not be adjusted, but the color and alpha settings do affect the text.
The width and height parameters of huddraw_rect are only used for alignment centering,
Not for setting the size of the string.
huddraw_font <index> <fontname>
This sets the font for a string displaying huddraw element to use. The names of available
font can be gotten from the game/main/fonts folder. The file names of the .ritualfont files
in there are the names used for the fonts.

View File

@ -0,0 +1,559 @@
Syntax Summary
==============
program:
--------
statement_list
statement_list:
---------------
statement statement ... statement
statement:
----------
identifier event_parameter_list :
case integer event_parameter_list :
case identifier event_parameter_list :
compound_statement
if prim_expr statement
if prim_expr statement else statement
while prim_expr statement
for ( statement ; expr ; statement_list ) statement
try compound_statement catch compound_statement
switch prim_expr compound_statement
break
continue
identifier event_parameter_list
nonident_prim_expr identifier event_parameter_list
nonident_prim_expr = expr
nonident_prim_expr += expr
nonident_prim_expr -= expr
nonident_prim_expr ++
nonident_prim_expr --
;
compound_statement:
-------------------
{ statement_list }
expr:
-----
expr && expr
expr || expr
expr & expr
expr | expr
expr ^ expr
expr == expr
expr != expr
expr < expr
expr > expr
expr <= expr
expr >= expr
expr + expr
expr - expr
expr * expr
expr / expr
expr % expr
nonident_prim_expr
func_prim_expr
func_prim_expr:
---------------
identifier event_parameter_list
nonident_prim_expr identifier event_parameter_list
- func_prim_expr
~ func_prim_expr
! func_prim_expr
identifier :: prim_expr
nonident_prim_expr :: prim_expr
event_parameter_list:
---------------------
prim_expr prim_expr ... prim_expr
prim_expr:
----------
nonident_prim_expr
identifier_prim
prim_expr :: prim_expr
nonident_prim_expr:
-------------------
$ prim_expr
nonident_prim_expr . identifier
nonident_prim_expr . size
nonident_prim_expr [ expr ]
string
integer
float
( number number number )
game
level
local
parm
self
group
( expr )
- nonident_prim_expr
~ nonident_prim_expr
! nonident_prim_expr
NULL
NIL
number:
-------
float
integer
Automatically started scripts
=============================
1) maps/mapname.scr
A level script is associated with each map, and is loaded and started at the start of that map (and not for subsequent starts from a saved game). This script is used for triggering all map related dynamic objects such as doors, elevators, AI, etc. maps/mapname.scr corresponds to maps/mapname.bsp. A level script is optional.
2) maps/mapname_precache.scr
A level precache script is associated with each map, and is loaded and started whenever the map is loaded (even from a saved game). This script is used for precaching map specific resources. maps/mapname_precache.scr corresponds to maps/mapname.bsp. A level precache script is optional.
3) Scripts in the anim directory are executed to carry out animation behavior of AI characters. Which script is executed is determined by internal AI state or scripts such as global/shoot.scr.
Threads
=======
A thread executes commands in a script one at a time in order. Multiple threads can exist. The automatically started scripts start execution with a single thread at the start of the file.
All threads belong to a group of threads, denoted "group". The current thread is denoted "local". The group of threads that a thread belongs to will be discussed in the next section.
Methods of creation of threads
------------------------------
1) Automatic
The new thread initially is the only thread in its group.
2) Command: thread label
The new thread belongs to the same group of threads as the original thread.
3) Command: thread filename::label
The new thread initially is the only thread in its group.
4) Command: object thread label
The new thread initially is the only thread in its group.
5) Command: object thread filename::label
The new thread initially is the only thread in its group.
Predefined object references
============================
1) game
Refers to the unique game object which maintains its state across levels. Only primitive values (integers/floats/strings/vectors) will persist across levels.
2) level
Refers to the unique level object which maintains its state for the duration of a level.
3) local
Refers to the thread executing the current command.
4) parm
Refers to the unique parm object which can be used to pass parameters to new threads.
Note that any use of this variable could be coded "better" by using parameters in the creation of new threads.
5) self
Refers to the object that the thread is processing for. This object is the same for all threads in a group of threads.
6) group
Refers to the object representing the group of threads the thread executing the current command belongs to.
self object
===========
The "self" object has its value set at the creation of a group of threads. The following are some such situations:
1) Automatically started scripts
self is NULL for level scripts. self is the character for animation scripts.
2) Command: thread label
Since the new thread has the same group as the original thread, self in the new thread is equal to self in the original thread.
3) Command: thread filename::label
self in the new thread is set equal to self in the original thread.
4) Command: object thread label
self in the new thread is set equal to object.
5) Command: object thread filename::label
self in the new thread is set equal to object.
6) If a thread is initiated in response to an event of an object, then self is set equal to this object.
switch (selection) statement
============================
Standard usage
--------------
switch (expr)
{
label1:
statement
...
statement
break
label2:
statement
...
statement
break
case 0:
statement
...
statement
break
case 1:
statement
...
statement
break
default:
statement
...
statement
break
}
The expression expr is evaluated and cast to a string. Code execution tranfers to the matching label or to the optional default label if there is no match. The case prefix is required for integers, and optional for strings. The break command makes the switch statement finish.
if (conditional) statement
==========================
Standard usage
--------------
if (expr)
statement
if (expr)
statement
else
statement
if (expr)
{
statement
...
statement
}
if (expr)
{
statement
...
statement
}
else
{
statement
...
statement
}
arithmetic binary operators
===========================
precedence
----------
The operators are listed in order of later evaluation to sooner evaluation:
||
&&
|
^
&
== !=
< > <= >=
+ -
* / %
descriptions
------------
|| logical or (outputs 0 or 1)
&& logical and (outputs 0 or 1)
| bitwise or (outputs integer)
^ bitwise exclusive or (outputs integer)
& bitwise and (outputs integer)
== equality (outputs 0 or 1)
!= inequality (outputs 0 or 1)
< less than (outputs 0 or 1)
> gretaer than (outputs 0 or 1)
<= less than or equal (outputs 0 or 1)
>= greater than or equal (outputs 0 or 1)
+ plus (numeric or string types)
- minus
* multiply
/ divide
% modulus (remainder after division by integer)
while statement
===============
Standard usage
--------------
while (expr)
statement
while (expr)
{
statement
...
statement
}
At the start of a cycle of the loop the expression expr is evaluated and cast to boolean (true or false). While the expression evaluates to true the statement(s) are executed.
A continue placed inside such a loop will move the code execution point to the end of the current cycle of the loop.
A break placed inside such a loop will terminate execution of the loop (code execution will continue sfter the loop).
Example
-------
local.n = 1
while (local.n <= 10)
{
println local.n
local.n++
}
for statement
=============
Standard usage
--------------
for ( statement1 ; expr ; statement2 )
statement
for ( statement1 ; expr ; statement2 )
{
statement
...
statement
}
At the start of execution of this entire statement, statement1 is executed. At the start of a cycle of the loop the expression expr is evaluated and cast to boolean (true or false). While the expression evaluates to true the statement(s) are executed. At the end of each cycle of the loop, statement2 is executed.
A continue placed inside such a loop will move the code execution point to the end of the current cycle of the loop.
A break placed inside such a loop will terminate execution of the loop (code execution will continue after the loop).
Example
-------
for (local.n = 1; local.n <= 10; local.n++)
{
println local.n
local.n++
}
Vectors (coordinates)
=====================
Standard usage
--------------
( number number number )
Example
-------
(1.1 23.2 -15.5) is preferable to "1.1 23.2 -15.5" since the latter is a string which would be cast to a vector each time it is interpretted as a vector.
Note
----
Due to a parsing deficiency, vectors like (-1 2 3) should be written ( -1 2 3). That is, a space must be between the "(" and the "-".
Targetname operator $
=====================
The targetname operator $ converts a string to the object with targetname equal to that string.
Examples
--------
$my_targetname // object with targetname "my_targetname"
local.t = "my_targetname2"
$(local.t) // object with targetname "my_targetname2"
Variables
=========
Any object in the game can have variables in its variable list.
Examples
--------
game.a // variable a for game object
level.b // variable b for level object
local.c // variable c for local object
parm.d // variable d for parm object
self.e // variable e for self object
group.f // variable f for group object
$my_targetname.g // variable g for object with targetname "my_targetname"
self.enemy.health // for this to make sense self.enemy would be an object and self.enemy.health would be the health variable of this object
Arrays
======
Standard usage
--------------
nonident_prim_expr [ expr ]
nonident_prim_expr is a non-identify primitive expression and expr is an arbitrary expression.
nonident_prim_expr [ expr ] interprets nonident_prim_expr as an array and accesses the element at the position at which expr evaluates to.
Indexing of arrays can be by integers or strings.
Types of arrays
---------------
1) Constant array
Created by expression of the form entry_1::entry_2::entry_3:: ... :: entry_n
Constant arrays start their indexing at 1.
Once created a constant array can not be changed but it can be read for its values.
2) Hash table array
Unitialised entries evaluate to NIL. Any new entry can be set.
3) Targetname array
Created by the $ targetname operator if more than one entity exists for that targetname.
For example, $player is an array if more than one player is in the game.
Targetname arrays start their indexing at 1.
Examples
--------
println local.n[10] // prints the element at position 10 of the local.n array
local.n[1][3] = 10 // sets the element at position (1, 3) of the local.n array equal to 10 (Hash table array)
local.n = hello::world::this::is::a::test::123 // consant array
println local.n[1] // prints hello
println local.n[7] // prints 123
println local.n[8] // results in Script Error: const array index '8' out of range
println local.n[hello] // results in Script Error: const array index '0' out of range
local.n[hello][world][5] = 23
local.a = local.n[hello]
local.b = local.a[world]
println local.b[5] // prints 23
for (local.n = 1; local.n <= 10; local.n++)
println game.stats[game.stats_name[local.n]] // print out element in game.stats array at position game.stats_name[local.n]
local.a = (a::b)::c
println local.a[1][1] // prints a
println local.a[1][2] // prints b
println local.a[2] // prints c
Vector Examples
---------------
Vectors are accessed like arrays in the indices 0, 1, 2.
A vector could be set like
local.my_vector = (10 -2 60.1)
Then this vector could be accessed like:
println local.n[2]
which would print 60.1 to the console.
Example
-------
$player.origin += (5 6 7) // offset the player's origin by (5 6 7).
Make Array Example
------------------
local.Path1 = makeArray
t1 300 10 200
t2
t3
t4
t5
t6
t7 NIL 10 200
t8
t9
t10
t11
t12
t13
t14 0 10 200
endArray
println local.Path1[1][2]
println local.Path1[1][3]
println local.Path1[1][4]
println local.Path1[1][5]
println local.Path1[14][1]
println local.Path1[15][1]
end
results in:
300
10
200
NIL
t14
NIL
printed to console.
Automatic casting
=================
If a parameter in a statement is required to be of some type, then an automatic cast will be attempted.
Accessing characters of a string
================================
Characters of a string are accessed by the [] array operator. Indexing starts at 0.
For example, "abc"[2] evaluates to the string "c".
There is no character type, so characters are just strings of length 1.

View File

@ -0,0 +1,26 @@
In Game Surface Types
Note: The in game surface types are not the same as the search keywords material types.
The surface type for a shader is specified via a "surfaceparm type" line, where type is the surface type to use.
Example:
surfaceparm wood
Note that only one surface type can be used at a time, and so only one should be specified in a shader.
Here's a list of each of the surface types that can be specified:
wood - wooden surface
metal - metal surface (like metal plating)
stone - stone or rock surface
dirt - dirt surface
grill - metal grill surface
grass - grass covered surface
mud - muddy or squishy sounding surface
puddle - water puddle surface
glass - glass surface
gravel - rocky gravel surface
sand - sandy surface
foliage - tree tops, bushes, or leaf covered surface
snow - snow covered surface
carpet - carpeted surface

File diff suppressed because it is too large Load Diff

241
MOHAATools/docs/radiant.ini Normal file
View File

@ -0,0 +1,241 @@
; Command mapping for QERadiant
;
; Syntax is as follows:
; Command name=<keystroke>+modifier+modifier
;
; Use +ALT, +SHIFT, and +CTRL to modify the keys
;
; Example:
; FileNew=N+CTRL
;
; Valid keys are:
;
; A-Z
; 0-9
; ESCAPE
; TAB
; SPACE
; BACKSPACE
; RETURN
; INSERT
; DELETE
; HOME
; END
; PAGEUP
; PAGEDOWN
; UP
; DOWN
; LEFT
; RIGHT
; PLUS
; MINUS
; MULTIPLY
; DIVIDE
; COMMA
; PERIOD
; LBRACKET
; RBRACKET
; TILDE
; BKSLASH
; FWSLASH
; SEMICOLON
; QUOTE
; F1
; F2
; F3
; F4
; F5
; F6
; F7
; F8
; F9
; F10
; F11
; F12
; NUMPAD0
; NUMPAD1
; NUMPAD2
; NUMPAD3
; NUMPAD4
; NUMPAD5
; NUMPAD6
; NUMPAD7
; NUMPAD8
; NUMPAD9
[Commands]
;file menu
FileNew=N+CTRL
FileOpen=O+CTRL
FileSave=S+CTRL
;Exit=
; edit menu
Undo=Z+CTRL
Copy=C+CTRL
Paste=V+CTRL
;Preferences=
; view menu
NextView=TAB+CTRL
;ToggleCamera=
;ToggleConsole=
;ToggleEntity=
;ToggleZ=
CenterView=END
UpFloor=PAGEUP
DownFloor=PAGEDOWN
ZoomOut=INSERT
ZoomIn=DELETE
ZZoomOut=INSERT+CTRL
ZZoomIn=DELETE+CTRL
FilterWorldBrushes=1+ALT
FilterEntities=2+ALT
FilterPatches=3+ALT
FilterTranslucent4+ALT
FilterLiquids=5+ALT
FilterCaulk=6+ALT
FilterClips=7+ALT
FilterPaths=8+ALT
FilterAINodes=9+ALT
FilterLights=0+ALT
FilterDetails=D+CTRL
FilterHintsSkips=H+CTRL
FilterModels=M+CTRL
FilterAreaportals=P+CTRL
FilterTriggers=T+CTRL
CameraFromEntity=J+CTRL
CameraToEntity=J+CTRL+SHIFT
CameraGridMove=FWSLASH
;ToggleCubicClip=
CubicClipZoomOut=RBRACKET
CubicClipZoomIn=LBRACKET
ToggleSizePaint=Q+SHIFT
CenterXYFromCamera=X+ALT
; select menu
DragEdges=E
DragVertices=V
CloneSelection=SPACE
CloneSelectionExact=SPACE+CTRL
UnSelectSelection=ESCAPE
DeleteSelection=BACKSPACE
SelectCompleteEntity=E+CTRL
;SelectNextTarget=
;SelectAllOfType=
SelectSnapPointsToGrid=G+CTRL
SelectClampPlanePoints=G+CTRL+SHIFT
IncreaseLightmapDensity=RBRACKET+CTRL
DecreaseLightmapDensity=LBRACKET+CTRL
MouseRotate=R
MouseScale=L
;SelectScale=
ToggleClipper=X
FlipClip=TILDE
ClipSelected=RETURN
SplitSelected=RETURN+SHIFT
EntityColor=K
ConnectSelection=K+CTRL
MakeDetail=D+CTRL+SHIFT
MakeStructural=D+CTRL+ALT
ToggleDetail=D+CTRL+ALT+SHIFT
; grid menu
SetGrid1=1
SetGrid2=2
SetGrid4=3
SetGrid8=4
SetGrid16=5
SetGrid32=6
SetGrid64=7
;ToggleGrid=
;GridUp=
;GridDown=
; texture menu
ShowAllTextures=A+CTRL
ShowInUseTextures=U
SurfaceInspector=S
CloseSurfDialog=ESCAPE+SHIFT
PatchInspector=P
TextureFit=F+CTRL
ToggleMoveLock=M+SHIFT
ToggleRotateLock=R+SHIFT
; misc menu
NextLeakSpot=L+CTRL
PrevLeakSpot=L+SHIFT
; brush menu
Brush3Sided=3+CTRL
Brush4Sided=4+CTRL
Brush5Sided=5+CTRL
Brush6Sided=6+CTRL
Brush7Sided=7+CTRL
Brush8Sided=8+CTRL
Brush9Sided=9+CTRL
; curve menu
InvertCurve=I+CTRL
BendMode=B+CTRL
PatchTAB=TAB
TogglePatchOverlay=Y+CTRL
;MakeOverlayPatch=
;ClearPatchOverlays=
;RedisperseRows=
;RedisperseCols=
ThickenPatch=T+CTRL
;IncPatchColumn=
;IncPatchRow=
;DecPatchColumn=
;DecPatchRow=
IncreaseComplexity=RBRACKET+SHIFT
DecreaseComplexity=LBRACKET+SHIFT
; commands not on the menu
ViewEntityInfo=N
ViewConsole=O
ViewTextures=T
ToggleCurveSelection=U+CTRL
CameraForward=UP
CameraBack=DOWN
CameraLeft=LEFT
CameraRight=RIGHT
CameraUp=D
CameraDown=C
CameraAngleUp=A
CameraAngleDown=Z
CameraStrafeRight=PERIOD
CameraStrafeLeft=COMMA
CameraGridForward=UP+CTRL
CameraGridBack=DOWN+CTRL
;CameraGridUp=
;CameraGridDown=
CameraGridStrafeRight=PERIOD+CTRL
CameraGridStrafeLeft=COMMA+CTRL
CameraFastForward=UP+SHIFT
CameraFastBack=DOWN+SHIFT
CameraFastUp=D+SHIFT
CameraFastDown=C+SHIFT
CameraFastStrafeRight=PERIOD+SHIFT
CameraFastStrafeLeft=COMMA+SHIFT
IncreaseLightRadius=RBRACKET+ALT
DecreaseLightRadius=LBRACKET+ALT
;TexShiftLeft=
;TexShiftRight=
;TexShiftUp=
;TexShiftDown=
;TexScaleLeft=
;TexScaleRight=
;TexScaleUp=
;TexScaleDown=
TexRotateClock=PAGEDOWN+SHIFT
TexRotateCounter=PAGEUP+SHIFT
TexDecrement=SUBTRACT+SHIFT
TexIncrement=ADD+SHIFT
MoveSelectionDown=SUBTRACT
MoveSelectionUp=ADD
SelectNudgeLeft=LEFT+ALT
SelectNudgeRight=RIGHT+ALT
SelectNudgeUp=UP+ALT
SelectNudgeDown=DOWN+ALT

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,59 @@
Usage of texture:
wall - vertical wall textures, natural or man-made
floor - floor textures, either natural(ground) or man-made
ceiling - anything that was made to be used as a ceiling
roof - rooftop textures for buildings
door - any door texture, including gates
window - any window texture, including the window frames
sky - sky's....DUHHHHHH ;)p
signs - anything that has verbage on it, posters, signs
road - road, paths and trails
pipe - pipe textures, valves for pipes, also includes wires
flat - anything that produces an even, non-bordered pattern in all directions
special - made for brush objects ONLY (i.e. crates, boxcars)
indoor - pictures, misc household items
trim - all trim, including ibeams, endcaps, etc...
masked - any texture that has alpha'd areas (like handrails, grates, etc...)
damaged - anything that's been damaged (has blast marks, burns, etc...)
utility - textures like nodraw, caulk, trigger, etc.... ONLY!
terrain - only put this on textures made specifically for the terrain system
panel - paneled type textures (like the library ones)
light - light emmiting textures
Material types:
metal - all types of metal
rusted - rusted, weathered metal
corrugated - corrugated materials
gravel - gravel textures
sand - sand textures
rock - naturally occuring rock formations (walls, floors, etc...)
stone - man-altered rocks like stone walls, cobblestone streets, also tile
brick - brick textures
concrete - concrete textures
wood - wood textured
plaster - plaster textures
carpet - carpet and cloth type textures
liquid - all liquids, including oceans, rivers, puddles, etc....
river - river textures, or other flowing water types
ocean - ocean textures
glass - glass textures
tudor - used in french/german towns with plaster sandwiched between wooden beams
natural - non man-made materials
dirt - all dirt textures, including transitional textures with dirt
grass - all grass texture, including transitional textures with grass
tree - textures relating to trees
bush - textures relating to bushes
folliage - vines, forest canopy, underbrush
snow - if the texture has any snow or ice on it
mud - if the texture is, or has mud on it
Level Reference: - meaning the texture was made for a particular mission
m1 - North Africa
m2 - D-Day, Normandy, Nebelwerfer
m3 - OSS mission in France, blow train rails, manor house
m4 - Brest France, Artillery missions, sniper hunt
m5 - snow forrest, snow town/train station, schmertzen
m6 - Hunt artillery, Ramagen
m7 - U-Boats in Norway
intro - opening cinematic
ending - ending cinematic

BIN
MOHAATools/entdefs.pk3 Normal file

Binary file not shown.

BIN
MOHAATools/mohradiant.exe Normal file

Binary file not shown.

BIN
MOHAATools/q3map.exe Normal file

Binary file not shown.

241
MOHAATools/radiant.ini Normal file
View File

@ -0,0 +1,241 @@
; Command mapping for QERadiant
;
; Syntax is as follows:
; Command name=<keystroke>+modifier+modifier
;
; Use +ALT, +SHIFT, and +CTRL to modify the keys
;
; Example:
; FileNew=N+CTRL
;
; Valid keys are:
;
; A-Z
; 0-9
; ESCAPE
; TAB
; SPACE
; BACKSPACE
; RETURN
; INSERT
; DELETE
; HOME
; END
; PAGEUP
; PAGEDOWN
; UP
; DOWN
; LEFT
; RIGHT
; PLUS
; MINUS
; MULTIPLY
; DIVIDE
; COMMA
; PERIOD
; LBRACKET
; RBRACKET
; TILDE
; BKSLASH
; FWSLASH
; SEMICOLON
; QUOTE
; F1
; F2
; F3
; F4
; F5
; F6
; F7
; F8
; F9
; F10
; F11
; F12
; NUMPAD0
; NUMPAD1
; NUMPAD2
; NUMPAD3
; NUMPAD4
; NUMPAD5
; NUMPAD6
; NUMPAD7
; NUMPAD8
; NUMPAD9
[Commands]
;file menu
FileNew=N+CTRL
FileOpen=O+CTRL
FileSave=S+CTRL
;Exit=
; edit menu
Undo=Z+CTRL
Copy=C+CTRL
Paste=V+CTRL
;Preferences=
; view menu
NextView=TAB+CTRL
;ToggleCamera=
;ToggleConsole=
;ToggleEntity=
;ToggleZ=
CenterView=END
UpFloor=PAGEUP
DownFloor=PAGEDOWN
ZoomOut=INSERT
ZoomIn=DELETE
ZZoomOut=INSERT+CTRL
ZZoomIn=DELETE+CTRL
FilterWorldBrushes=1+ALT
FilterEntities=2+ALT
FilterPatches=3+ALT
FilterTranslucent4+ALT
FilterLiquids=5+ALT
FilterCaulk=6+ALT
FilterClips=7+ALT
FilterPaths=8+ALT
FilterAINodes=9+ALT
FilterLights=0+ALT
FilterDetails=D+CTRL
FilterHintsSkips=H+CTRL
FilterModels=M+CTRL
FilterAreaportals=P+CTRL
FilterTriggers=T+CTRL
CameraFromEntity=J+CTRL
CameraToEntity=J+CTRL+SHIFT
CameraGridMove=FWSLASH
;ToggleCubicClip=
CubicClipZoomOut=RBRACKET
CubicClipZoomIn=LBRACKET
ToggleSizePaint=Q+SHIFT
CenterXYFromCamera=X+ALT
; select menu
DragEdges=E
DragVertices=V
CloneSelection=SPACE
CloneSelectionExact=SPACE+CTRL
UnSelectSelection=ESCAPE
DeleteSelection=BACKSPACE
SelectCompleteEntity=E+CTRL
;SelectNextTarget=
;SelectAllOfType=
SelectSnapPointsToGrid=G+CTRL
SelectClampPlanePoints=G+CTRL+SHIFT
IncreaseLightmapDensity=RBRACKET+CTRL
DecreaseLightmapDensity=LBRACKET+CTRL
MouseRotate=R
MouseScale=L
;SelectScale=
ToggleClipper=X
FlipClip=TILDE
ClipSelected=RETURN
SplitSelected=RETURN+SHIFT
EntityColor=K
ConnectSelection=K+CTRL
MakeDetail=D+CTRL+SHIFT
MakeStructural=D+CTRL+ALT
ToggleDetail=D+CTRL+ALT+SHIFT
; grid menu
SetGrid1=1
SetGrid2=2
SetGrid4=3
SetGrid8=4
SetGrid16=5
SetGrid32=6
SetGrid64=7
;ToggleGrid=
;GridUp=
;GridDown=
; texture menu
ShowAllTextures=A+CTRL
ShowInUseTextures=U
SurfaceInspector=S
CloseSurfDialog=ESCAPE+SHIFT
PatchInspector=P
TextureFit=F+CTRL
ToggleMoveLock=M+SHIFT
ToggleRotateLock=R+SHIFT
; misc menu
NextLeakSpot=L+CTRL
PrevLeakSpot=L+SHIFT
; brush menu
Brush3Sided=3+CTRL
Brush4Sided=4+CTRL
Brush5Sided=5+CTRL
Brush6Sided=6+CTRL
Brush7Sided=7+CTRL
Brush8Sided=8+CTRL
Brush9Sided=9+CTRL
; curve menu
InvertCurve=I+CTRL
BendMode=B+CTRL
PatchTAB=TAB
TogglePatchOverlay=Y+CTRL
;MakeOverlayPatch=
;ClearPatchOverlays=
;RedisperseRows=
;RedisperseCols=
ThickenPatch=T+CTRL
;IncPatchColumn=
;IncPatchRow=
;DecPatchColumn=
;DecPatchRow=
IncreaseComplexity=RBRACKET+SHIFT
DecreaseComplexity=LBRACKET+SHIFT
; commands not on the menu
ViewEntityInfo=N
ViewConsole=O
ViewTextures=T
ToggleCurveSelection=U+CTRL
CameraForward=UP
CameraBack=DOWN
CameraLeft=LEFT
CameraRight=RIGHT
CameraUp=D
CameraDown=C
CameraAngleUp=A
CameraAngleDown=Z
CameraStrafeRight=PERIOD
CameraStrafeLeft=COMMA
CameraGridForward=UP+CTRL
CameraGridBack=DOWN+CTRL
;CameraGridUp=
;CameraGridDown=
CameraGridStrafeRight=PERIOD+CTRL
CameraGridStrafeLeft=COMMA+CTRL
CameraFastForward=UP+SHIFT
CameraFastBack=DOWN+SHIFT
CameraFastUp=D+SHIFT
CameraFastDown=C+SHIFT
CameraFastStrafeRight=PERIOD+SHIFT
CameraFastStrafeLeft=COMMA+SHIFT
IncreaseLightRadius=RBRACKET+ALT
DecreaseLightRadius=LBRACKET+ALT
;TexShiftLeft=
;TexShiftRight=
;TexShiftUp=
;TexShiftDown=
;TexScaleLeft=
;TexScaleRight=
;TexScaleUp=
;TexScaleDown=
TexRotateClock=PAGEDOWN+SHIFT
TexRotateCounter=PAGEUP+SHIFT
TexDecrement=SUBTRACT+SHIFT
TexIncrement=ADD+SHIFT
MoveSelectionDown=SUBTRACT
MoveSelectionUp=ADD
SelectNudgeLeft=LEFT+ALT
SelectNudgeRight=RIGHT+ALT
SelectNudgeUp=UP+ALT
SelectNudgeDown=DOWN+ALT

View File

@ -0,0 +1,21 @@
// this defines all the preset key-pair values in the ai dialog in radiant
// the syntax is "rootmenu_submenu_menuitem", followed by a "{", a list of key-pairs, and a "}"
german_wehrmacht_officer
{
targetname "enemy"
health 120
}
german_wehrmacht_soldier
{
targetname "enemy"
health 80
}
allied_captain
{
targetname "friend"
health 100
accuracy 100
}

94209
m4l0/m4l0.map Normal file

File diff suppressed because it is too large Load Diff

343
m4l0/m4l0.scr Normal file
View File

@ -0,0 +1,343 @@
// FARM HOUSE
// ARCHITECTURE: TODD/AC
// SCRIPTING: AC/MACKEY/Z
exec global/ai.scr
exec global/loadout.scr maps/m4l0.scr
exec global/exploder.scr
main:
level waittill prespawn
local.tempstring = "0.25 0.15 0.1"
setcvar cg_playermodel 0
level.farplane = 25000
level.farplanecolor = local.tempstring
fadeout 0.1 0 0 0 1
huddraw_alpha 100 0
exec global/bomber.scr
exec global/ambient.scr m4l0
// exec global/weather.scr 3500 (0.333 0.333 0.359)
exec global/friendly.scr
exec global/door_locked.scr
level waittill spawn
fadein 2 0 0 0 1
wait 2
thread dogs
println "disabling AI"
level.frienddebug = 1
level.friendly1 exec global/disable_ai.scr
level.friendly2 exec global/disable_ai.scr
level.friendly3 exec global/disable_ai.scr
level.friendly4 exec global/disable_ai.scr
// level.friendly1 scale 5
level.friendly1.health = 755
level.friendly2.health = 750
level.friendly3.health = 750
level.friendly4.health = 750
for (local.i=1;local.i<level.enemys+1;local.i++)
{
println local.i
// level.enemy[local.i] exec global/disable_ai.scr
}
level.script = "maps/m4l0.scr"
level.flyplane = 1
waitthread global/objectives.scr::add_objectives 1 2 "Find allied soldiers." $obj1.origin
waitthread global/objectives.scr::add_objectives 2 2 "Take secret German documents." $obj2.origin
waitthread global/objectives.scr::add_objectives 3 1 "Exfiltrate." $obj3.origin
waitthread global/objectives.scr::current_objectives 1
// $player.origin = ( 5192.00 1168.00 502.00 )
end
dogspawn local.origin local.set:
local.ent = spawn animal/german_shepherd
local.ent model "animal/german_shepherd.tik"
local.ent.origin = local.origin
local.ent.targetname = "dogspawn"
local.ent.set = local.set
end
killself:
wait 1
self delete
end
dogs:
level.spawneddogs = 0
local.origin1 = (1064 -3576 136)
local.origin2 = ( -544 720 280)
local.origin3 = ( -3040 6448 -16)
thread dogspawn local.origin1 1
thread dogspawn local.origin2 2
thread dogspawn local.origin3 3
local.doghealth = 25
for (local.i=1;local.i<$dogspawn.size + 1;local.i++)
{
level.dogs = 1
if ($dogspawn[local.i].set != NIL)
{
local.ent = spawn script_origin
local.ent.origin = $dogspawn[local.i].origin
local.ent.set = $dogspawn[local.i].set
level.dogspawner[local.i] = local.ent
$dogspawn[local.i] thread killself
}
else
println ("dogspawn at " + $dogspawn[local.i].origin + " has no #set")
}
local.count = 0
while (1)
{
if (level.spawneddogs < 1)
{
if (local.count == 0)
{
if (vector_length ($player.origin - local.origin1) > 3000)
{
local.doghealth += 5
thread global/ai.scr::spawndog 1 local.doghealth
}
else
local.count++
}
else
if (local.count == 1)
{
if (vector_length ($player.origin - local.origin2) > 3000)
{
local.doghealth += 5
thread global/ai.scr::spawndog 2 local.doghealth
}
else
local.count++
}
else
{
if (vector_length ($player.origin - local.origin3) > 3000)
{
local.doghealth += 5
thread global/ai.scr::spawndog 3 local.doghealth
}
}
}
wait 1
}
end
/////////////////////////////////////////////////////////////////////
// Enables AI: Hear gun fire in the distance//
////////////////////////////////////////////////////////////////////
trigger1:
for (local.i=1;local.i<level.enemys+1;local.i++)
{
println local.i
level.enemy[local.i] exec global/enable_ai.scr
}
level.friendly1 exec global/enable_ai.scr
level.friendly2 exec global/enable_ai.scr
level.friendly3 exec global/enable_ai.scr
level.friendly4 exec global/enable_ai.scr
level.friendly1.friendtype = 5
level.friendly2.friendtype = 0
level.friendly3.friendtype = 0
level.friendly4.friendtype = 0
level.friendly1 thread global/friendly.scr::friendlythink
level.friendly2 thread global/friendly.scr::friendlythink
level.friendly3 thread global/friendly.scr::friendlythink
level.friendly4 thread global/friendly.scr::friendlythink
level.friendly1.mins = 50
level.friendly1.maxs = 150
level.friendly2.mins = 50
level.friendly2.maxs = 150
level.friendly3.mins = 50
level.friendly3.maxs = 150
level.friendly4.mins = 50
level.friendly4.maxs = 150
level.friendly3.destination = level.friendly1
level.friendly4.destination = level.friendly2
// level.friendly3.dist = 400
// level.friendly4.dist = 300
thread enemythread1
end
////////////////////////////////////////////////////////////
// Changes friendly max and min dist//
///////////////////////////////////////////////////////////
trigger2:
level.friendly1 maxdist 2000
level.friendly1 mindist 128
level.friendly2 maxdist 2000
level.friendly2 mindist 128
level.friendly3 maxdist 2000
level.friendly3 mindist 128
level.friendly4 maxdist 2000
level.friendly4 mindist 128
end
/////////////////////////////////////////////////////////
//Scene 2: Follow the Yellow Brick Road//
//Spawn enemies in on left hill side, run to destinations//
//////////////////////////////////////////////////////////
charge1:
//thread global/ai.scr:: 11
end
charge2:
//thread global/ai.scr:: 12
end
//////////////////////////////////////////////////////////
//Scene 3: The House//
//Kill all enemies in the house, door opens//
/////////////////////////////////////////////////////////
enemythread1:
waitthread global/objectives.scr::add_objectives 1 3 "Find allied soldiers." $obj1.origin
// waitthread global/objectives.scr::current_objectives 2
// waitthread global/objectives.scr::add_objectives 2 2 "Take secret German documents." $obj2.origin
// trigger $obj1_door
// trigger $nco1
// trigger $nco2
end
////////////////////////////////////////////////////////
//Scene 4: German siege//
//Enemyspawners spawn in once papers have been taken//
///////////////////////////////////////////////////////
objective2:
waitthread global/objectives.scr::add_objectives 2 3 "Take secret German documents." $obj2.origin
waitthread global/objectives.scr::current_objectives 3
waitthread global/objectives.scr::add_objectives 3 2 "Exfiltrate." $obj3.origin
if (isalive level.friendly2)
level.friendly2.friendtype = 1
if (isalive level.friendly3)
level.friendly3.friendtype = 1
if (isalive level.friendly4)
level.friendly4.friendtype = 1
$documents remove
$level_end_so remove
$level_end_trigger remove
// thread global/ai.scr::spawn 3
// thread global/ai.scr::spawn 4 4
// thread global/ai.scr::spawn 5 8
// thread global/ai.scr::spawn 6 12
end
/////////////////////////////////////////////////////
//Scene 5: Open Field Battle//
//Enemyspawners, make way to end of level//
////////////////////////////////////////////////////
objective3:
waitthread global/objectives.scr::add_objectives 3 3 "Exfiltrate" $obj3.origin
exec global/missioncomplete.scr m4l0
end
mass_ending1:
// thread global/ai.scr::spawn 7
end
mass_ending2:
// thread global/ai.scr::spawn 8 5
end
mass_ending3:
// thread global/ai.scr::spawn 9 10
end
mass_ending4:
// thread global/ai.scr::spawn 10 15
end
level_end_trigger:
iprintln "You have not completed all of your Objectives."
end
t:
println ">>>>>>>>>>>>>"
for (local.i=1;local.i<level.friendlys+1;local.i++)
{
// if (level.friendly[local.i].destination.targetname == "friendly")
// println ("friendly" + level.friendly[local.i].fnum + " goes to " + level.friendly[local.i].destination + "/" + level.friendly[local.i].destination.fnum)
// else
// println ("friendly" + level.friendly[local.i].fnum + " goes to player")
// if (level.friendly[local.i].destination.fnum == NIL)
// println ("friendly" + level.friendly[local.i].fnum + " : Type " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].areapast + " : Destination Node " + level.friendly[local.i].destination.set)
// else
// println ("friendly" + level.friendly[local.i].fnum + " : Type " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].areapast + " : Destination Entity " + level.friendly[local.i].destination.fnum)
// println level.playernodeset
if (level.friendly[local.i].destination != NIL)
if (level.friendly[local.i].destination.set == NIL)
println ("friendly" + level.friendly[local.i].fnum + " : Type " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].areapast + " : destination " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].destination )
else
println ("friendly" + level.friendly[local.i].fnum + " : Type " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].areapast + " : destination " + level.friendly[local.i].friendtype + " : Area " + level.friendly[local.i].area + " : AreaPast " + level.friendly[local.i].destination.set )
}
println "<<<<<<<<<<<<<"
wait 4
goto t
end
// Exploder for showin off exploders
kablam:
thread global/exploder.scr::explode 5
end