

<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.zeroy.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Novemberdobby</id>
	<title>COD Modding &amp; Mapping Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.zeroy.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Novemberdobby"/>
	<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Special:Contributions/Novemberdobby"/>
	<updated>2026-04-30T08:04:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=5177</id>
		<title>Call of Duty 4: Custom Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=5177"/>
		<updated>2009-05-05T22:09:57Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Advanced Editing]]&lt;br /&gt;
{{warning_forpro}}&lt;br /&gt;
[[Image:Nutshell.png]] This tutorial will show you how to add a new custom texture to the game, to be used in Radiant.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;By NovemberDobby&#039;&#039;&lt;br /&gt;
 [[Image:warning.png]] Custom textures will show as white unless you are running a mod, as textures must be stored in an IWD archive. &lt;br /&gt;
[[Image:rgn_warning.png|right]]&lt;br /&gt;
    The game won&#039;t read custom IWD&#039;s at all unless a mod is running.&lt;br /&gt;
&lt;br /&gt;
Note: Custom textures will show as white unless you are running a mod, as textures must be stored in an IWD archive. COD4 won&#039;t read custom IWD&#039;s at all unless a mod is running.&lt;br /&gt;
&lt;br /&gt;
First of all, you&#039;ll need a texture file. This can be a .dds, .tga, or .jpg image - no other extensions will work with the converter.&lt;br /&gt;
&lt;br /&gt;
Open Asset Manager through the Cod4CompileTools, or by finding it in COD4\bin\asset_manager.exe.&lt;br /&gt;
&lt;br /&gt;
In the list box at the top left, select &#039;material&#039;, and click &#039;New Entry&#039;. Pick a relevant name for the material, and make sure there are no spaces in it.&lt;br /&gt;
&lt;br /&gt;
Set the first four settings at the top of the options to:&lt;br /&gt;
&lt;br /&gt;
 materialType: world phong&lt;br /&gt;
&lt;br /&gt;
 sort: &amp;lt;default&amp;gt;*&lt;br /&gt;
&lt;br /&gt;
 surfaceType: whatever you want, this will determine how bullets hit the material. Be sure to change it from &#039;error&#039;.&lt;br /&gt;
&lt;br /&gt;
 usage: this can be anything, but it&#039;ll help you sort the texture into a group with similar other materials in Radiant.&lt;br /&gt;
&lt;br /&gt;
In the &#039;Locales&#039; section, pick one or more locales to access the texture from. Picking an appropriate locale is not vitally important, but make sure you pick at least one so you can find it in Radiant later. &lt;br /&gt;
&lt;br /&gt;
In the &#039;Color Map&#039; option section, click the ellipses (...) button on the right of the text box. Navigate to your dds/jpg/tga texture and open it. This should be somewhere inside a sub-directory of COD4, as Asset Manager won&#039;t let you use one from any other location.&lt;br /&gt;
&lt;br /&gt;
If you have a Normal Map (AKA a bumpmap) for your texture, click the ellipses next to the Normal Map box, and navigate to that file. It must be in an uncompressed RGB format, such as .tga.&lt;br /&gt;
&lt;br /&gt;
Go to File&amp;gt;Save, and put the GDT file in \Call of Duty 4\source_data. Give it any name, bearing in mind you&#039;ll have to open this file again if you want to change/reconvert this texture.&lt;br /&gt;
&lt;br /&gt;
Go to PC Convert&amp;gt;Current Asset only, or hit F10. Choosing to convert all assets would convert every single stock asset that came with the mod tools, which can take quite a while and cause problems if interrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You should see something like this:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 [[Image:custom_669.png]]&lt;br /&gt;
&lt;br /&gt;
 [[Image:warning.png]] But if there are any errors, the compiler will warn you.&lt;br /&gt;
&lt;br /&gt;
It will only re-convert if you have changed the input texture filename, changed the texture itself, or any other material option in Asset Manager.&lt;br /&gt;
&lt;br /&gt;
You should now be able to find your texture in Radiant, by going to textures&amp;gt;locales and selecting your chosen locales, or by using the material/surfaceType. &lt;br /&gt;
&lt;br /&gt;
If your texture appears gritty at a distance, then open up the image editing program you used to save it in, and make sure Mipmaps are generated (and reconvert).&lt;br /&gt;
&lt;br /&gt;
Distortion textures can be added by setting the materialType to distortion, and finding a colour map. &lt;br /&gt;
&lt;br /&gt;
-NovemberDobby&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=5176</id>
		<title>Call of Duty 4: Custom Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=5176"/>
		<updated>2009-05-05T22:09:30Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: updated a bit&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Advanced Editing]]&lt;br /&gt;
{{warning_forpro}}&lt;br /&gt;
[[Image:Nutshell.png]] This tutorial will show you how to add a new custom texture to the game, to be used in Radiant.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;By NovemberDobby&#039;&#039;&lt;br /&gt;
 [[Image:warning.png]] Custom textures will show as white unless you are running a mod, as textures must be stored in an IWD archive. &lt;br /&gt;
[[Image:rgn_warning.png|right]]&lt;br /&gt;
    The game won&#039;t read custom IWD&#039;s at all unless a mod is running.&lt;br /&gt;
&lt;br /&gt;
Note: Custom textures will show as white unless you are running a mod, as textures must be stored in an IWD archive. COD4 won&#039;t read custom IWD&#039;s at all unless a mod is running.&lt;br /&gt;
&lt;br /&gt;
First of all, you&#039;ll need a texture file. This can be a .dds, .tga, or .jpg image - no other extensions will work with the converter.&lt;br /&gt;
&lt;br /&gt;
Open Asset Manager through the Cod4CompileTools, or by finding it in COD4\bin\asset_manager.exe.&lt;br /&gt;
&lt;br /&gt;
In the list box at the top left, select &#039;material&#039;, and click &#039;New Entry&#039;. Pick a relevant name for the material, and make sure there are no spaces in it.&lt;br /&gt;
&lt;br /&gt;
Set the first four settings at the top of the options to:&lt;br /&gt;
&lt;br /&gt;
 materialType: world phong&lt;br /&gt;
&lt;br /&gt;
 sort: &amp;lt;default&amp;gt;*&lt;br /&gt;
&lt;br /&gt;
 surfaceType: whatever you want, this will determine how bullets hit the material. Be sure to change it from &#039;error&#039;.&lt;br /&gt;
&lt;br /&gt;
 usage: this can be anything, but it&#039;ll help you sort the texture into a group with similar other materials in Radiant.&lt;br /&gt;
&lt;br /&gt;
In the &#039;Locales&#039; section, pick one or more locales to access the texture from. Picking an appropriate locale is not vitally important, but make sure you pick at least one so you can find it in Radiant later. &lt;br /&gt;
&lt;br /&gt;
In the &#039;Color Map&#039; option section, click the ellipses (...) button on the right of the text box. Navigate to your dds/jpg/tga texture and open it. This should be somewhere inside a sub-directory of COD4, as Asset Manager won&#039;t let you use one from any other location.&lt;br /&gt;
&lt;br /&gt;
If you have a Normal Map (AKA a bumpmap) for your texture, click the ellipses next to the Normal Map box, and navigate to that file. It must be in an uncompressed RGB format, such as .tga.&lt;br /&gt;
&lt;br /&gt;
 Go to File&amp;gt;Save, and put the GDT file in \Call of Duty 4\source_data. Give it any name, bearing in mind you&#039;ll have to open this file again if you want to change/reconvert this texture.&lt;br /&gt;
&lt;br /&gt;
 Go to PC Convert&amp;gt;Current Asset only, or hit F10. Choosing to convert all assets would convert every single stock asset that came with the mod tools, which can take quite a while and cause problems if interrupted.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You should see something like this:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 [[Image:custom_669.png]]&lt;br /&gt;
&lt;br /&gt;
 [[Image:warning.png]] But if there are any errors, the compiler will warn you.&lt;br /&gt;
&lt;br /&gt;
 It will only re-convert if you have changed the input texture filename, changed the texture itself, or any other material option in Asset Manager.&lt;br /&gt;
&lt;br /&gt;
You should now be able to find your texture in Radiant, by going to textures&amp;gt;locales and selecting your chosen locales, or by using the material/surfaceType. &lt;br /&gt;
&lt;br /&gt;
If your texture appears gritty at a distance, then open up the image editing program you used to save it in, and make sure Mipmaps are generated (and reconvert).&lt;br /&gt;
&lt;br /&gt;
 Distortion textures can be added by setting the materialType to distortion, and finding a colour map. &lt;br /&gt;
&lt;br /&gt;
-NovemberDobby&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Multiplayer_Perks&amp;diff=3281</id>
		<title>Call of Duty 5: Multiplayer Perks</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Multiplayer_Perks&amp;diff=3281"/>
		<updated>2008-11-21T22:37:23Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 5]]&lt;br /&gt;
[[Category:Perks]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Nutshell.png]] All of the perks that are in the World at War game:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perk Set 1 ==&lt;br /&gt;
&lt;br /&gt;
* Special Grenades x3&lt;br /&gt;
* Satchel Charge x2&lt;br /&gt;
* M9A1 Bazooka x2&lt;br /&gt;
* Bomb Squad&lt;br /&gt;
* Bouncing Betty x2 (similar to claymores)&lt;br /&gt;
* Bandolier&lt;br /&gt;
* Primary Grenades x2&lt;br /&gt;
* M2 Flamethrower&lt;br /&gt;
&lt;br /&gt;
[[Image:perks_32.png]][[Image:perks_18.png]][[Image:perks_5.png]][[Image:perks_11.png]][[Image:perks_26.png]][[Image:perks_3.png]][[Image:perks_20.png]][[Image:perks_33.png]]&lt;br /&gt;
&lt;br /&gt;
== Perk Set 2 ==&lt;br /&gt;
&lt;br /&gt;
* Stopping Power&lt;br /&gt;
* Fireworks (explosives cause more damage)&lt;br /&gt;
* Flak Jacket (decreases damage taken by explosives)&lt;br /&gt;
* Gas Mask&lt;br /&gt;
* Juggernaut&lt;br /&gt;
* Camouflage&lt;br /&gt;
* Sleight of Hand&lt;br /&gt;
* Shades (decreases intensity of signal flares)&lt;br /&gt;
* Double Tap&lt;br /&gt;
* Overkill&lt;br /&gt;
&lt;br /&gt;
[[Image:perks_27.png]][[Image:perks_28.png]][[Image:perks_29.png]][[Image:perks_4.png]][[Image:perks_1.png]][[Image:perks_13.png]][[Image:perks_12.png]][[Image:perks_25.png]][[Image:perks_16.png]][[Image:perks_8.png]]&lt;br /&gt;
&lt;br /&gt;
== Perk Set 3 ==&lt;br /&gt;
&lt;br /&gt;
* Deep Impact&lt;br /&gt;
* Extreme Conditioning&lt;br /&gt;
* Steady Aim&lt;br /&gt;
* Toss Back (resets fuse on tossing back enemy grenade)&lt;br /&gt;
* Second Chance (ability to revive allies)&lt;br /&gt;
* Martyrdom&lt;br /&gt;
* Fireproof&lt;br /&gt;
* Dead Silence&lt;br /&gt;
* Iron Lungs&lt;br /&gt;
* Reconnaissance (shows artillery and tanks on map)&lt;br /&gt;
&lt;br /&gt;
[[Image:perks_2.png]][[Image:perks_23.png]][[Image:perks_15.png]][[Image:perks_24.png]][[Image:perks_30.png]][[Image:perks_21.png]][[Image:perks_31.png]][[Image:perks_19.png]][[Image:perks_7.png]]&lt;br /&gt;
&lt;br /&gt;
== Vehicle Perk ==&lt;br /&gt;
&lt;br /&gt;
* Water Cooler (less overheat on tank machine guns)&lt;br /&gt;
* Greased Bearings (quicker turret rotational speed)&lt;br /&gt;
* Ordinance Training (faster tank main turret reloading)&lt;br /&gt;
* Leadfoot (faster moving tanks)&lt;br /&gt;
* Coaxial Machine Gun (driver gets a machine gun too)&lt;br /&gt;
&lt;br /&gt;
[[Image:perks_17.png]][[Image:perks_22.png]][[Image:perks_6.png]][[Image:perks_14.png]][[Image:perks_10.png]]&lt;br /&gt;
&lt;br /&gt;
==For modders==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;In script/stringtables names of the perks&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
specialty_bulletaccuracy	:Steady Aim&lt;br /&gt;
specialty_doublegrenade		:Primary grenade x2&lt;br /&gt;
specialty_fireproof		:Reduce the effects of the flamethrower&lt;br /&gt;
specialty_greased_bearings	:Speed up the rate of rotation of tank turrets&lt;br /&gt;
specialty_longersprint		:Sprint for longer&lt;br /&gt;
specialty_pistoldeath		:Last stand&lt;br /&gt;
specialty_shades		:Reduces the effects of flares/stun grenades&lt;br /&gt;
specialty_weapon_betty		:Bouncing Betty x2&lt;br /&gt;
specialty_bulletdamage		:Stopping Power&lt;br /&gt;
specialty_explosivedamage	:Fireworks - Increase explosive damage&lt;br /&gt;
specialty_flak_jacket		:Reduce damage taken from explosives&lt;br /&gt;
specialty_grenadepulldeath	:Martyrdom&lt;br /&gt;
specialty_quieter		:Dead Silence&lt;br /&gt;
specialty_specialgrenade	:Specials Grenades x3&lt;br /&gt;
specialty_weapon_flamethrower	:M2 Flamethrower&lt;br /&gt;
specialty_armorvest		:Juggernaut&lt;br /&gt;
specialty_bulletpenetration	:Deep Impact&lt;br /&gt;
specialty_extraammo		:Bandolier&lt;br /&gt;
specialty_gas_mask		:Reduces the effects of gas grenade attacks&lt;br /&gt;
specialty_holdbreath		:Iron lungs&lt;br /&gt;
specialty_ordinance		:Faster firing main tank gun&lt;br /&gt;
specialty_recon			:Reconnaissance (shows artillery and tanks on map)&lt;br /&gt;
specialty_twoprimaries		:Overkill&lt;br /&gt;
specialty_weapon_rpg		:2x Rocket Propelled Grenades&lt;br /&gt;
specialty_boost			:Coaxial Machine Gun(driver gets a machine gun too)&lt;br /&gt;
specialty_detectexplosives	:Bomb Squad&lt;br /&gt;
specialty_fastreload		:Sleight of hand (faster reload)&lt;br /&gt;
specialty_gpsjammer		:Conceal yourself from radar&lt;br /&gt;
specialty_leadfoot		:Increase the drive speed of tanks&lt;br /&gt;
specialty_pin_back		:Toss back - resets timer on throwing back grenades&lt;br /&gt;
specialty_rof			:Double tap&lt;br /&gt;
specialty_water_cooled		:Decreases tank MG overheat rate&lt;br /&gt;
specialty_weapon_satchel	:Satchel Charges x2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Some comments from _class.gsc&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;quot;perk_bulletDamage&amp;quot;, &amp;quot;40&amp;quot;		// increased bullet damage by this %&lt;br /&gt;
&amp;quot;perk_fireproof&amp;quot;, &amp;quot;55&amp;quot;			// reduced flame damage by this %&lt;br /&gt;
&amp;quot;perk_armorVest&amp;quot;, &amp;quot;75&amp;quot;			// multipy damage by this %	&lt;br /&gt;
&amp;quot;perk_explosiveDamage&amp;quot;, &amp;quot;25&amp;quot;		// increased explosive damage by this %&lt;br /&gt;
&amp;quot;perk_flakJacket&amp;quot;, &amp;quot;75&amp;quot;			// explosive damage is this % of original&lt;br /&gt;
&amp;quot;perk_flakJacketMaxDamage&amp;quot;, &amp;quot;75&amp;quot;	// max damage caused by grenade in %&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Zeroy|Zeroy.]] 12:20, 13 November 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Create_Custom_Textures&amp;diff=3228</id>
		<title>Call of Duty 5: Create Custom Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Create_Custom_Textures&amp;diff=3228"/>
		<updated>2008-11-21T14:28:12Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: specular detail thing&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:rgn_warning.png|right]]&lt;br /&gt;
===Export from Photoshop===&lt;br /&gt;
You can use any program that will save an image as either a .tga or .dds, Photoshop is the industry standard so I&#039;ll start in there.&lt;br /&gt;
&lt;br /&gt;
If your using Photoshop then download this plug in and install:&lt;br /&gt;
&lt;br /&gt;
*[http://developer.nvidia.com/object/photoshop_dds_plugins.html Nvidia Plugin] &lt;br /&gt;
*[http://ati.amd.com/developer/sdk/radeonsdk/html/tools/toolsplugins.html ATI Normal map generators]&lt;br /&gt;
&lt;br /&gt;
 [[Image:Information.png]] The ATI Normal map generators is the easiest to use, it converts premade .tga files.  &lt;br /&gt;
    You can use your color map or a bump map.&lt;br /&gt;
The Nvidia plugin can do normal maps too in the &amp;quot;Normal map settings&amp;quot; button in the picture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;1.&#039;&#039;&#039;  First resize your image as (n^2)x(n^2) and &amp;quot;n&amp;quot; can be any number.&amp;lt;/font&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
IE:  (8^2)x(16^2) = 64 x 256 pixels, this would be useful for trim.&lt;br /&gt;
&lt;br /&gt;
*Some other sizes:  64 x 64, 512 x 512, 1024 x 512, 256 x 128, ect...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;2.&#039;&#039;&#039;  Save as either .tga or .dds.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*TGA is only useful for opaque textures, this is easiest to use as there are no options.&lt;br /&gt;
*DDS can be used for textures that have transparency like windows.&lt;br /&gt;
**DXT1 has only 1 bit alpha, like an on / off switch.  There is no fading and a pixel is either opaque or see through.&lt;br /&gt;
**DXT5 has the most detailed alpha so fading between opaque and transparent looks good, good for dirty glass.&lt;br /&gt;
**DXT3 has a less detailed alpha channel so its good for fading but only if there&#039;s a little of it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;3.&#039;&#039;&#039;  Save into your raw/images folder.&amp;lt;/font&amp;gt;&lt;br /&gt;
*I suggest you save a copy elsewhere too but when we go to Asset Manager it will only consider images in the &amp;quot;raw/images&amp;quot; folder.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:teximport1.jpg]]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Asset Manager===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;1.&#039;&#039;&#039; Create the Material&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Once you open asset manager there is a menu to the left and select &amp;quot;Material&amp;quot;.&lt;br /&gt;
*Once &amp;quot;material&amp;quot; is highlighted then click on New Entry and fill in the name of your texture.&lt;br /&gt;
*Click on OK and your material should show up like in the picture.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:teximport2.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;2.&#039;&#039;&#039; Filling in the rest of the information.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*materialType - Select &amp;quot;world phong&amp;quot; for a texture.&lt;br /&gt;
*surfaceType - Select the proper surface type to use stock settings for the type of material.&lt;br /&gt;
**Stock settings include impact effects, sounds, and penetration ability.&lt;br /&gt;
*sort - Leave as &amp;quot;&amp;lt;default&amp;gt;*&amp;quot;.&lt;br /&gt;
*usage - Select the intended use for your texture.&lt;br /&gt;
*Locales - Intended theme or location for your texture.&lt;br /&gt;
*Framebuffer operations - Leave alone unless you are an advanced user.&lt;br /&gt;
**If creating an alpha blending texture then change &amp;quot;blendFunc&amp;quot; to &amp;quot;blend&amp;quot;.&lt;br /&gt;
*Color Map - This is the image file that you created, this is also what the player will see.&lt;br /&gt;
*Normal Map - This section can accept a bump map or normal map to show height.&lt;br /&gt;
**A bump map is a Grey scale image of your texture showing height.&lt;br /&gt;
***Black is low, white is high, values in between are relative height.&lt;br /&gt;
**A normal map is provided by converting a bump map with a plug in.&lt;br /&gt;
***while most of your image may be purple there are different colors that represent height.&lt;br /&gt;
**A bump map only shows height in an image, a normal map shows height and direction of a bump.&lt;br /&gt;
*Detail Normal Map - This is the same as a normal map but only shows when the player is close to the texture, usually only small bumps or holes.&lt;br /&gt;
*Specular color map - Same rules as a bump map but white is shiny and black is no shine. This will only be visible if r_specular is set to 1.&lt;br /&gt;
*Cosine power map - Adjustments to Specular color map.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:teximport3.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:teximport4.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=&amp;quot;yellow&amp;quot;&amp;gt;&#039;&#039;&#039;3.&#039;&#039;&#039; Convert your file.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Once everything is setup go to &amp;quot;PC Convert -&amp;gt; Current Assets Only&amp;quot;&lt;br /&gt;
**You can use the convert all option but any errors may be lost in scrolling log.&lt;br /&gt;
*Once successful you will have 3 files to keep in mind when packing your map or mod.&lt;br /&gt;
**raw/materials/texturename &amp;lt;no file type&amp;gt;&lt;br /&gt;
**raw/material_properties/texturename &amp;lt;no file type&amp;gt;&lt;br /&gt;
**raw/images/texturename.iwi&lt;br /&gt;
&lt;br /&gt;
===Viewing===&lt;br /&gt;
To be sure your custom texture has been successfully imported, you can open up radiant and find your texture setup by the filters you specified.  If you can view it in radiant then you will be able to use it anywhere.  If you created a model phong then you can view your texture on your model in asset viewer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Sources: [http://wiki.treyarch.com/wiki/Creating_A_Custom_Texture Treyarch&#039;s Wiki]&lt;br /&gt;
&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
[[Category:Mapping]]&lt;br /&gt;
[[Category:Call of Duty 5]]&lt;br /&gt;
[[Category:Textures]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Modding_Files&amp;diff=3050</id>
		<title>Call of Duty 5: Modding Files</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Modding_Files&amp;diff=3050"/>
		<updated>2008-11-13T21:56:32Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;Thanks to Gagarin &amp;amp; Novemberdobby, here are the files rip from Call Of Duty : World at War version 1.1&lt;br /&gt;
&lt;br /&gt;
[[Image:Data.png]] [http://wiki.modsrepository.com/codww_files/codww_fullrip2.zip Gagarin&#039;s Rip - Without Sounds, 5Mb]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]] [http://wiki.modsrepository.com/codww_files/codww_fullrip.zip Dobby&#039;s Rip - 2.8Mb]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Thanks to NovemberDobby, here are String tables missing from rip:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rankTable.csv&lt;br /&gt;
rankicontable.csv&lt;br /&gt;
statsTable.csv&lt;br /&gt;
classtable.csv&lt;br /&gt;
offline_classtable.csv&lt;br /&gt;
attachmentTable.csv&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Data.png]] [http://wiki.modsrepository.com/codww_files/codww_missingcsvs.zip HERE]&lt;br /&gt;
[[Category:Call of Duty 5]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Multiplayer_Perks&amp;diff=2484</id>
		<title>Call of Duty 5: Multiplayer Perks</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Multiplayer_Perks&amp;diff=2484"/>
		<updated>2008-11-08T14:39:10Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 5]]&lt;br /&gt;
[[Category:Perks]]&lt;br /&gt;
&amp;lt;br&amp;gt;[[Image:Nutshell.png]] COD has announced all of the perks that will be in the World at War game:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perk Set 1 ==&lt;br /&gt;
&lt;br /&gt;
* Special Grenades x3&lt;br /&gt;
* Satchel Charge x2&lt;br /&gt;
* M9A1 Bazooka x2&lt;br /&gt;
* Bomb Squad&lt;br /&gt;
* Bouncing Betty x2 (similar to claymores)&lt;br /&gt;
* Bandolier&lt;br /&gt;
* Primary Grenades x2&lt;br /&gt;
* M2 Flamethrower&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perk Set 2 ==&lt;br /&gt;
&lt;br /&gt;
* Stopping Power&lt;br /&gt;
* Fireworks (explosives cause more damage)&lt;br /&gt;
* Flak Jacket (decreases damage taken by explosives)&lt;br /&gt;
* Gas Mask&lt;br /&gt;
* Juggernaut&lt;br /&gt;
* Camouflage&lt;br /&gt;
* Sleight of Hand&lt;br /&gt;
* Shades (decreases intensity of signal flares)&lt;br /&gt;
* Double Tap&lt;br /&gt;
* Overkill&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Perk Set 3 ==&lt;br /&gt;
&lt;br /&gt;
* Deep Impact&lt;br /&gt;
* Extreme Conditioning&lt;br /&gt;
* Steady Aim&lt;br /&gt;
* Toss Back (resets fuse on tossing back enemy grenade)&lt;br /&gt;
* Second Chance (ability to revive allies)&lt;br /&gt;
* Martyrdom&lt;br /&gt;
* Fireproof&lt;br /&gt;
* Dead Silence&lt;br /&gt;
* Iron Lungs&lt;br /&gt;
* Reconnaissance (shows artillery and tanks on map)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Vehicle Perk ==&lt;br /&gt;
&lt;br /&gt;
* Water Cooler (less overheat on tank machine guns)&lt;br /&gt;
* Greased Bearings (quicker turret rotational speed)&lt;br /&gt;
* Ordinance Training (faster tank main turret reloading)&lt;br /&gt;
* Leadfoot (faster moving tanks)&lt;br /&gt;
* Coaxial Machine Gun (driver gets a machine gun too)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;[http://www.worthplaying.com/article.php?sid=56148 Sources]&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Tips&amp;diff=2483</id>
		<title>Call of Duty 4: Tips</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Tips&amp;diff=2483"/>
		<updated>2008-11-08T14:33:00Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Common Errors &amp;amp; Solutions ==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Help! My map is shining all red!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need to add [Call of Duty 4: Reflection Probes|Reflection Probes]. &lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Help! My guns and random stuff are shining rainbow!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
First stop smokin the good stuff, then create a [Call of Duty 4: Gridfile|Grid File].&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;While compiling the BSP, I get an error that .d3dbsp cannot be loaded!:&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
The editor automatically tries to load a previous version of a compiled map if it runs into errors while compiling. If for some reason the previously compiled files are missing, it gives that error. If you scroll up the DOS window, i&#039;m sure another error will display itself, and that&#039;s the real reason you aren&#039;t compiling.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;I&#039;ve added destructible cars to my map, and now when compiling reflections I get &amp;quot;CANNOT SWITCH ON UNDEFINED&amp;quot;:&amp;lt;/font&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[http://www.modsonline.com/Tutorials-read-457.html Fix Here].&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;While compiling the BSP, I get errors about lights leaking or *******Leaking*******&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This happens when your skybox is not completely closed and the player has the possibility to see the infinity! Close the compile, go to the editor, and go to File &amp;gt;&amp;gt; PointFile. It will show you where it&#039;s leaking. This can also be the cause of Portals not being in an enclosed space. Learn about portals and re-implement! Links above!&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Surface partially floating or needs to be aligned&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can, most of the time ignore this warning but to be sure, load the map in Radiant and use the Error File to check that patches are properlly alighend toghether.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;WARNING: Attempting to meld model, but root part &#039;j_spine4&#039; of model &#039;blah blah&#039; not found in model &#039;blah blah&#039; or any of its descendant.&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://www.mycallofduty.com/modules.php?name=Forums&amp;amp;file=viewtopic&amp;amp;t=1626 Fix thread here]. &lt;br /&gt;
&lt;br /&gt;
Basically, add &amp;quot;include,mptypes_woodland&amp;quot; into your map CSV. &amp;quot;include,mptypes_desert&amp;quot; if you are using desert style players. Update zone file and build new FF and map works fine with extreme and ace and awe.&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;font color=&amp;quot;orange&amp;quot;&amp;gt;Screen is completely red (can&#039;t see anything) or red FX signs over bodies&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Read the above and do it.&lt;br /&gt;
&lt;br /&gt;
== Useful commands ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In Console:&lt;br /&gt;
&lt;br /&gt;
If mp_backlot automatically loads when you try to run your map, type in these commands to load into your map even with errors, allowing you to shift+tilde (~) and see what is wrong.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /sv_mapRotation &amp;quot;&amp;quot;&lt;br /&gt;
 /sv_mapRotationCurrent &amp;quot;&amp;quot;&lt;br /&gt;
 /devmap [yourmapname]&lt;br /&gt;
Change to any map without dev mode.&lt;br /&gt;
&lt;br /&gt;
 /map [themap]&lt;br /&gt;
Third person view (first load with /devmap [mapname])&lt;br /&gt;
&lt;br /&gt;
 /cg_thirdperson 1&lt;br /&gt;
&lt;br /&gt;
More Usefull ServerCommands:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;only available in devmap mode.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 \give airstrike_mp&lt;br /&gt;
 \give helicopter_mp&lt;br /&gt;
 \give radar_mp&lt;br /&gt;
&lt;br /&gt;
In CoD4Tools Custom Command Line Options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;+set scr_game_matchstarttime 0 +set scr_game_playerwaittime 0 +set fs_game mods/modWarfare&amp;lt;/pre&amp;gt;&lt;br /&gt;
This one line takes off the wait timers at the beginning of the game when you load in, as well as loads you into ModWarfare from the start.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Console_usage&amp;diff=2482</id>
		<title>Call of Duty 4: Console usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Console_usage&amp;diff=2482"/>
		<updated>2008-11-08T14:23:45Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modtools]]&lt;br /&gt;
[[Category:Call of Duty 4]]&lt;br /&gt;
[[Image:Information.png]] To open the console, simply press the tilde key (&#039;~&#039;) while you are in-game, this should bring up a minimal console. To get a full console, to see any game output, press Shift + tilde (Shift + &#039;~&#039;). The tilde key is above your tab key, normally.&lt;br /&gt;
&lt;br /&gt;
If nothing happens when you press any of the above key combinations, you don&#039;t have the console enabled. To enable it, open CoD4 multiplayer, then go to Options -&amp;gt; Game Options -&amp;gt; Enable Console and switch it to Yes.&lt;br /&gt;
&lt;br /&gt;
The variable &#039;monkeytoy&#039;can be set to 1 to disable the console, or 0 to allow it.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
I have a small list of the most useful commands [http://daevius.com/archive/call-of-duty-4/commands Here]&lt;br /&gt;
&lt;br /&gt;
You can get a full list, by entering &#039;/cmdlist&#039; in the console.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Console_usage&amp;diff=2481</id>
		<title>Call of Duty 4: Console usage</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Console_usage&amp;diff=2481"/>
		<updated>2008-11-08T14:22:33Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: monkeytoy&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modtools]]&lt;br /&gt;
[[Category:Call of Duty 4]]&lt;br /&gt;
[[Image:Information.png]] To open the console, simply press the tilde key (&#039;~&#039;) while you are in-game, this should bring up a minimal console. To get a full console, to see any game output, press Shift + tilde (Shift + &#039;~&#039;). The tilde key is above your tab key, normally.&lt;br /&gt;
&lt;br /&gt;
If nothing happens when you press any of the above key combinations, you don&#039;t have the console enabled. To enable it, open CoD4 multiplayer, then go to Options -&amp;gt; Game Options -&amp;gt; Enable Console and switch it to Yes.&lt;br /&gt;
&lt;br /&gt;
The variable &#039;monkeytoy&#039;can be set to 1 to disable the console, or 0 to allow it.&lt;br /&gt;
&lt;br /&gt;
==Commands==&lt;br /&gt;
I have a small list of the most usable commands [http://daevius.com/archive/call-of-duty-4/commands Here]&lt;br /&gt;
&lt;br /&gt;
You can get a full list, by entering &#039;/cmdlist&#039; in the console.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Equipment&amp;diff=2480</id>
		<title>Call of Duty 4: Equipment</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Equipment&amp;diff=2480"/>
		<updated>2008-11-08T14:10:01Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: lined up images better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Weapons]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;br /&gt;
[[Image:Nutshell.png]] In depth CoD4 Equipment stats.&lt;br /&gt;
&lt;br /&gt;
Welcome to the equipment section of CoD4 Central. Here you will find information regarding the explosives and other equipment in CoD4 such as grenades, and some stats/information about them. &lt;br /&gt;
&lt;br /&gt;
Note: All grenades do a small amount of damage to enemies if they hit before exploding, just as if you had thrown a rock at your opponent. You can use this to kill wounded opponents and fulfill some of the Humiliation challenges unlocked at ranks 47 and 48! It&#039;s also really funny, so try it if the opportunity arises.&lt;br /&gt;
&lt;br /&gt;
==Frag Grenades==&lt;br /&gt;
[[Image:cod4frag.jpg|right]]&lt;br /&gt;
When you press the grenade key, you&#039;ll lob a grenade with a 5-second fuse on it. Unless you want to flush enemies out of hiding or get the nade lobbed back at you, this isn&#039;t a good idea. Instead, hold the key down. Your crosshairs will start pulsing, and the grenade will explode at the fifth pulse. For best results, lob the grenade at your opponent at the third or fourth pulse (fourth if they&#039;re close) and they won&#039;t have time to react. You can throw any frag grenade you&#039;re standing on by hitting the grenade key. This takes a second or two, so unless you have no other choice, run instead of going for the throw. Also, you can kill yourself by throwing a friend&#039;s grenade even if friendly fire is off. &lt;br /&gt;
&lt;br /&gt;
 Damage: 300-75 / 15 Direct Impact&lt;br /&gt;
 Range: 0-256&lt;br /&gt;
 Fuse/Detonator: 5 seconds / 2.5 Martdrom&lt;br /&gt;
 Other: &amp;quot;Cooking&amp;quot;, synchronized, beats to seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Flashbang Grenades ==&lt;br /&gt;
[[Image:cod4flash.jpg|right]]&lt;br /&gt;
Has no timer. Sets off a loud bang and a bright flash about two seconds after it is thrown, blinding anyone facing it (including you but not your teammates if FF is off) for several seconds. Blinded players can still move and fire freely, so be careful of wild fire when you flash and enter an area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Damage: 0 / 15 Direct Impact&lt;br /&gt;
 Range: 200-800&lt;br /&gt;
 Fuse/Detonator: 1 second&lt;br /&gt;
 Other: Detonates at exactly one second&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stun Grenades ==&lt;br /&gt;
[[Image:cod4stun.jpg|right]]&lt;br /&gt;
Has no timer; goes off two seconds after thrown. Momentarily blinds those in its radius and slows their motion and turning for several seconds. You don&#039;t have to be facing it for it to stun you. Ideally you should use this on enemies with their backs to you so you can take a leisurely headshot or backstab. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Damage: 40-1 / 15 Direct Impact&lt;br /&gt;
 Range: 0-512&lt;br /&gt;
 Fuse/Detonator: 1 second&lt;br /&gt;
 Other: Only detonates after touching ground &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Smoke Grenades ==&lt;br /&gt;
[[Image:cod4smoke.jpg|right]]&lt;br /&gt;
The smoke grenades in CoD4 are very effective when compared to other fps games. After tossing one, you will notice the area really becomes impossible to see, and therefore proving great cover for getting across an area with snipers, or campers. It is also great for taking over an objective. Toss one down and move around a bit in the smoke, the enemy won&#039;t be able to spot you. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Damage: 0 / 15 Direct Impact&lt;br /&gt;
 Range: 200-800&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Knife ==&lt;br /&gt;
[[Image:cod4knife.jpg|right]]&lt;br /&gt;
Hit melee to whip out the knife regardless of how impossible it is to carry your potentially heavy gun in one hand and slash quickly and effectively with the other. The combat knife one-shot kills any target, unless you&#039;re on a feedback FF server where the damage you inflict on friendlies goes to you instead. In that case, you take damage to within one point of death. I&#039;m not sure on how the game decides to have you stab or slash someone... perhaps you slash if you&#039;re strafing. Slashing is rather quick, whereas stabbing has a recovery time of a couple seconds, which can be perilous if you miss your target but the stab animation happens anyway.&lt;br /&gt;
&lt;br /&gt;
 Damage: 400&lt;br /&gt;
 Range: 0-20&lt;br /&gt;
 Other: Great for quiet kills &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Camouflage ==&lt;br /&gt;
[[Image:cod4cam.jpg|right]]&lt;br /&gt;
Paint your gun! In some cases having the proper camo on your gun will actually disguise you better, but don&#039;t sweat this too much because you can&#039;t change camo in the middle of a round. Mainly you use camo to make your gun look cool and for prestige. All primary weapons that you have unlocked automatically come with desert and woodlands camo. The following camos are unlocked for all weapons by completing their respective Expert Challenges (headshot quotas):&lt;br /&gt;
&lt;br /&gt;
*Digital Camouflage: (25 headshots): gray, blocky micropattern camo good in concrete-filled maps like Countdown, Pipeline and Vacant, as well as Wet Work. &lt;br /&gt;
&lt;br /&gt;
*Blue Tiger Camouflage: (75 headshots): blue and dark gray tigerstriped camo, most likely to blend in in Wet Work and the concrete maps. &lt;br /&gt;
&lt;br /&gt;
*Red Tiger Camouflage: (150 headshots): red and dark gray tigerstriped camo. &lt;br /&gt;
&lt;br /&gt;
*Gold: Available for the AK-47, Mini-Uzi, M60E4, M1014, and Dragunov when you complete all Marksman and Expert challenges for every gun in their respective classes. Shiny and easily noticeable by everyone, but you should be proud to show it off!&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Perks_Icons&amp;diff=2479</id>
		<title>Call of Duty 5: Perks Icons</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Perks_Icons&amp;diff=2479"/>
		<updated>2008-11-08T13:52:11Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;Br&amp;gt;[[Image:codww_perks1.png]]  [[Image:codww_perks2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 specialty_bulletaccuracy: Steady Aim&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_doublegrenade: Primary grenade x 2&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_fireproof: Reduce the effects of the flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_greased_bearings: Speed up the rotational speed of a tank&#039;s turret&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_longersprint: Sprint for longer&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_pistoldeath: Last stand&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_shades: Reduces the effects of flares/stun grenades&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_weapon_betty: Bouncing Betty x 2&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_bulletdamage: Stopping Power&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_explosivedamage: Fireworks - like sonic boom in COD4&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_flak_jacket: Reduce damage taken from explosives&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_grenadepulldeath: Martyrdom&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_quieter: Dead Silence&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_specialgrenade: Specials Grenades x 3&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_weapon_flamethrower: M2 Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_armorvest: Juggernaut&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_bulletpenetration: Deep Impact&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_extraammo: Bandolier&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_gas_mask: Reduces the effects of gas grenade attacks&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_holdbreath: Iron lungs&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_ordinance: Faster firing main tank gun&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_recon: ?&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_twoprimaries: Overkill&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_weapon_rpg: 2 x Rocket Propelled Grenades&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_boost: ?&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_detectexplosives: Bomb Squad&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_fastreload: Sleight of hand&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_gpsjammer: Conceal yourself from radar&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_leadfoot: Increase tank&#039;s drive speed&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_pin_back: Toss back - resets timer on throwing back grenades&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_rof: Double tap&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_water_cooled: Slows the overheating of tank guns&amp;lt;br&amp;gt;&lt;br /&gt;
 specialty_weapon_satchel: Satchel Charges x 2&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Perks_Icons&amp;diff=2478</id>
		<title>Call of Duty 5: Perks Icons</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Perks_Icons&amp;diff=2478"/>
		<updated>2008-11-08T13:51:34Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: added perk names/descriptions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br&amp;gt;&amp;lt;Br&amp;gt;[[Image:codww_perks1.png]]  [[Image:codww_perks2.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
specialty_bulletaccuracy: Steady Aim&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_doublegrenade: Primary grenade x 2&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_fireproof: Reduce the effects of the flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_greased_bearings: Speed up the rotational speed of a tank&#039;s turret&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_longersprint: Sprint for longer&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_pistoldeath: Last stand&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_shades: Reduces the effects of flares/stun grenades&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_weapon_betty: Bouncing Betty x 2&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_bulletdamage: Stopping Power&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_explosivedamage: Fireworks - like sonic boom in COD4&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_flak_jacket: Reduce damage taken from explosives&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_grenadepulldeath: Martyrdom&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_quieter: Dead Silence&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_specialgrenade: Specials Grenades x 3&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_weapon_flamethrower: M2 Flamethrower&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_armorvest: Juggernaut&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_bulletpenetration: Deep Impact&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_extraammo: Bandolier&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_gas_mask: Reduces the effects of gas grenade attacks&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_holdbreath: Iron lungs&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_ordinance: Faster firing main tank gun&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_recon: ?&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_twoprimaries: Overkill&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_weapon_rpg: 2 x Rocket Propelled Grenades&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_boost: ?&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_detectexplosives: Bomb Squad&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_fastreload: Sleight of hand&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_gpsjammer: Conceal yourself from radar&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_leadfoot: Increase tank&#039;s drive speed&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_pin_back: Toss back - resets timer on throwing back grenades&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_rof: Double tap&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_water_cooled: Slows the overheating of tank guns&amp;lt;br&amp;gt;&lt;br /&gt;
specialty_weapon_satchel: Satchel Charges x 2&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Attachments&amp;diff=2477</id>
		<title>Call of Duty 4: Attachments</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Attachments&amp;diff=2477"/>
		<updated>2008-11-08T13:16:08Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: moved images to line up better&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Weapons]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;br /&gt;
[[Image:Nutshell.png]] These items can be attached to the specified weapon classes with the exceptions of the Desert Eagle and MP44. All equipment except for the grenade launcher and pistol silencer must be unlocked for each individual weapon by completing the Marksman (kill quota) challenges for that weapon. The kills needed to unlock the equipment are listed next to the equipment names.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grenade Launcher ==&lt;br /&gt;
[[Image:cod4noob.jpg|right]]&lt;br /&gt;
(assault rifles) (replaces Tier One perk): The n00b tube! Equip this attachment with 5 to bring up the grenade reticule, and fire. The impact grenade won&#039;t arm until a second or two after leaving the barrel, so aim for at least medium-distance targets. The exception is impact kills. If you can hit someone up close with an undetonated grenade, they die instantly! The kill icon is rather amusing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Damage: 155-25 / 135 Direct Impact&lt;br /&gt;
 Range: 0-300&lt;br /&gt;
 Fuse/Detonator: 375 Range To Activate&lt;br /&gt;
 Other: Will not detonate under 375 range &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Silencer ==&lt;br /&gt;
[[Image:cod4silencer.jpg|right]]&lt;br /&gt;
(assault rifles 75, SMGs 75, pistols): A silenced weapon suffers a 2+ penalty to range and an unspecified minor penalty to damage, but when fired it won&#039;t appear on enemy radar. I believe the silencer reduces recoil somewhat as well. Use if you don&#039;t want to be detected as easily. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Damage: Minor Penalty&lt;br /&gt;
 Range: 2+ Penalty&lt;br /&gt;
 Other: Allows to player to go undetected, but can still be seen by UAV if not using UAV jammer &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Red Dot Sight ==&lt;br /&gt;
[[Image:cod4reddot.jpg|right]]&lt;br /&gt;
(assault rifles 25, SMGs 25, LMGs 25, shotguns 25): Replaces your weapon&#039;s iron sights with a battery-powered laser red dot sight. If you have trouble lining up shots easily with the iron sights, switch to the red dot. The laser dot will obscure your target at long range, but it&#039;s bright and easy to aim quickly. I always use this if I don&#039;t need any other attachment for my primary weapon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Type: Precision Reflex Sight&lt;br /&gt;
 Other: Great attachment for any weapon that can use it. Allows the use of perk 1, unlike some other attachments. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Grip ==&lt;br /&gt;
[[Image:cod4grip.jpg|right]]&lt;br /&gt;
(LMGs 75, shotguns 75) (replaces Tier One perk): Increases weapon accuracy by 3 and therefore decreases recoil. A considerable benefit for high-recoil weapons if you don&#039;t mind losing the Tier One perk; not really necessary for the relatively low-recoil SAW LMG. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Pro: +3 Accuracy&lt;br /&gt;
 Con: Cannot use perk 1.&lt;br /&gt;
 Other: This is a great attachment for the M60. The M60 has the most powerful shot out of all of the LMGs, &lt;br /&gt;
 but has a problem with recoil and not being so accurate. If you put grip, stopping power and deep impact, the M60 &lt;br /&gt;
 turns into a monster if played correctly.&lt;br /&gt;
&lt;br /&gt;
== ACOG Scope ==&lt;br /&gt;
[[Image:cod4acog.jpg|right]]&lt;br /&gt;
(assault rifles 150, SMGs 150, LMGs 150, sniper rifles 100) Advanced Combat Optical Gunsight. A telescopic sight intermediate between the iron sight/red dot zoom and the sniper scope zoom, with a reticule illuminated by radioactive tritium. Decreases accuracy by 1 and increases range by 2+. Use with fairly accurate weapons that you prefer to use at long range if you can&#039;t line up or reach enemies with the iron/red dot sights. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Accuracy: -1&lt;br /&gt;
 Range: +2&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_Server_Config&amp;diff=2476</id>
		<title>Call of Duty 5: Beta Server Config</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_Server_Config&amp;diff=2476"/>
		<updated>2008-11-08T13:12:12Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 5 Beta]]&lt;br /&gt;
[[Category:Server Help]]&lt;br /&gt;
&#039;&#039;By Bullet-Worm and Zeroy&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Port Forwarding ==&lt;br /&gt;
&lt;br /&gt;
In order to run your own server and open it up to internet users, you need to do some port forwarding in your Router. &#039;&#039;The ports to forwards are as follow:&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 UDP 20800&lt;br /&gt;
 UDP 20810&lt;br /&gt;
 UDP 28960-28970&lt;br /&gt;
&lt;br /&gt;
For a detailed How-to setup port forwarding on your router, see [http://www.portforward.com/english/routers/port_forwarding/routerindex.htm Portforward.com]&lt;br /&gt;
&lt;br /&gt;
[[Image:Warning.png]] &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;Make sure your Windows Firewall has either added rules for those ports or/and CoDWaWbeta.exe is unblocked from it!&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Allowed Gametypes ==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellpadding=0 cellspacing=0 width=369&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6615909 width=77 style=&#039;height:15.0pt;width:58pt&#039; | &amp;amp;nbsp;&lt;br /&gt;
| class=xl6415909 width=72 style=&#039;border-left:none;width:54pt&#039; |  mp_castle&lt;br /&gt;
| class=xl6415909 width=110 style=&#039;border-left:none;width:83pt&#039; |  mp_makin&lt;br /&gt;
| class=xl6415909 width=110 style=&#039;border-left:none;width:83pt&#039; |  mp_roundhouse&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  Gametypes&lt;br /&gt;
| class=xl6315909 style=&#039;border-top:none;border-left:none&#039; | &amp;amp;nbsp;&lt;br /&gt;
| class=xl6315909 style=&#039;border-top:none;border-left:none&#039; | &amp;amp;nbsp;&lt;br /&gt;
| class=xl6315909 style=&#039;border-top:none;border-left:none&#039; | &amp;amp;nbsp;&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  DM&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  TWAR&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  TDM&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  SD&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  SAB&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  DOM&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  KOTH&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  CTF&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  Yes&lt;br /&gt;
|- height=20 style=&#039;height:15.0pt&#039;&lt;br /&gt;
| height=20 class=xl6315909 style=&#039;height:15.0pt;border-top:none&#039; |  SUR&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  No&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  No&lt;br /&gt;
| class=xl6515909 style=&#039;border-top:none;border-left:none&#039; |  No&lt;br /&gt;
|- height=0 style=&#039;display:none&#039;&lt;br /&gt;
| width=77 style=&#039;width:58pt&#039; | &lt;br /&gt;
| width=72 style=&#039;width:54pt&#039; | &lt;br /&gt;
| width=110 style=&#039;width:83pt&#039; | &lt;br /&gt;
| width=110 style=&#039;width:83pt&#039; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Server Config ==&lt;br /&gt;
&lt;br /&gt;
This next section will give you a base server config, a more detailed Server Config can be found [[Call of Duty 5: Advanced Server Config|HERE]]&lt;br /&gt;
&lt;br /&gt;
Now Create a file called &#039;&#039;&#039;server.cfg&#039;&#039;&#039; and place in /Main -- &#039;&#039;&#039;Server.cfg&#039;&#039;&#039; can contains (change passwords of course):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
seta sv_punkbuster 1&lt;br /&gt;
wait&lt;br /&gt;
pb_sv_enable&lt;br /&gt;
&lt;br /&gt;
// Server name&lt;br /&gt;
set sv_hostname &amp;quot;MY CoDWW Beta Server&amp;quot; &lt;br /&gt;
&lt;br /&gt;
// Server password&lt;br /&gt;
set g_password &amp;quot;&amp;quot; // blank means NO password&lt;br /&gt;
&lt;br /&gt;
// Rconpassword&lt;br /&gt;
set rcon_password &amp;quot;changeme&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Maximum Clients&lt;br /&gt;
//set sv_privateclients &amp;quot;6&amp;quot;&lt;br /&gt;
set sv_maxclients &amp;quot;32&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Max Ping&lt;br /&gt;
set sv_maxping &amp;quot;225&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Rate&lt;br /&gt;
set sv_maxRate &amp;quot;25000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
// Map_rotation&lt;br /&gt;
set g_gametype &amp;quot;tdm&amp;quot;&lt;br /&gt;
&lt;br /&gt;
set sv_mapRotation &amp;quot;gametype tdm map mp_castle gametype tdm map mp_makin gametype tdm map mp_roundhouse&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting Server ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Warning.png]] Windows ONLY and not for servers from Game Servers Providers!&lt;br /&gt;
&lt;br /&gt;
*Right-click your Shorcut for CoDWaWbeta.exe and add this at the end:&lt;br /&gt;
&lt;br /&gt;
 +set dedicated 2 +set net_ip xxx.xxx.xxx.xxx +set net_port 28960 +exec server.cfg +map_rotate&lt;br /&gt;
&lt;br /&gt;
[[Image:Warning.png]] Make sure that &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt; are present in the Shorcut around  CoDWaWbeta.exe. Example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt;C:/Program Files/Activision/Call of Duty- World at War Beta\CoDWaWbeta.exe&amp;lt;font color=&amp;quot;red&amp;quot;&amp;gt;&amp;quot;&amp;lt;/font&amp;gt; +set dedicated 2 +set net_ip xxx.xxx.xxx.xxx +set net_port 28960 +exec server.cfg +map_rotate&lt;br /&gt;
&lt;br /&gt;
[[Image:Information.png]] Replace xxx.xxx.xxx.xxx by your Public IP adress. If unsure of your Public IP Address you can go [http://www.whatismyip.com HERE] to check it out.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:codww_server_1.png]]&lt;br /&gt;
&lt;br /&gt;
*Once the server starts you should get the console:&lt;br /&gt;
&lt;br /&gt;
[[Image:codww_server_2.png]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2356</id>
		<title>Call of Duty 4: ModTools Content</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2356"/>
		<updated>2008-11-04T17:48:45Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modtools]]&lt;br /&gt;
[[Category:Call of Duty 4]]&lt;br /&gt;
==What&#039;s included==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xmodels: After the Modtools are installed, &#039;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\main\xmodel\&#039; should contain all the extracted model files.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4Radiant.exe&lt;br /&gt;
Level editor. Create custom .map files for single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
On running CoD4Radiant for the first time, you will need to load the included cod4.prj project file which is located in &amp;quot;\bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: all files below are in the specified subfolder of the Call Of Duty 4 folder.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bin\CoD4_EffectsEd.exe&lt;br /&gt;
The CoD4 effect editor. Create and modify your own effects.&lt;br /&gt;
&lt;br /&gt;
On running CoD4_EffectsEd for the first time, you will be asked to browse to the location the game is installed. The default location is &amp;quot;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare&amp;quot;. For Steam users, this directory is: &amp;quot;C:\steam\steamapps\common\call of duty 4\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4CompileTools\CoD4CompileTools.exe&lt;br /&gt;
Graphical UI tool that is handy for compiling and running maps.&lt;br /&gt;
&lt;br /&gt;
On running CoD4CompileTools for the first time you must click the &amp;quot;browse&amp;quot; button in the upper left corner and browse to the location the game is installed. The default location is &amp;quot;Program Files\Activision\Call of Duty 4 Modern Warfare&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\asset_manager.exe&lt;br /&gt;
&lt;br /&gt;
Tool used for adding/modifying assets to the game. See the [[Call of Duty 4: Maya|Maya documentation]] for sample usage.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4map.exe&lt;br /&gt;
Compiles the .map file and creates a .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad.exe&lt;br /&gt;
Calculates lighting for a map and writes to the .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad64.exe&lt;br /&gt;
64-bits version of the above.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\converter.exe&lt;br /&gt;
Converts data from asset manager to game data. If you add something to asset_manager, you must then run converter before seeing your assets in the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\linker_pc.exe&lt;br /&gt;
Linker PC is the piece of software that will process the required resources for a mod/map and compress them into a FastFile (.ff).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\maya\&lt;br /&gt;
In here you will find the Maya 8 model and animation export Plugins. See the [[Call of Duty 4: Maya|Maya documentation]] for information on how to setup these Plugins with Maya 7 or 8.5.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 collmaps\&lt;br /&gt;
This is where collision map files are stored. Their filenames correspond to the xmodel name in the xmodel folder. By default, static models do not have collision, they get their collision data from these collmaps that we have made.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 devraw\&lt;br /&gt;
CoD4EffectsEd.exe looks in this folder for effectsEd_box.d3dbsp which is the bsp the editor loads. You can replace this bsp with another if you&#039;d like CoD4EffectsEd.exe to use a different bsp.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 map_source\&lt;br /&gt;
Included is the source for two official maps (Blackout - Single-player &amp;amp; Backlot - Multi-player) and this is where they are located, along with all the prefabs they reference. There is also a multiplayer test map (mp_test.map) included which contains the basics for any multiplayer map that can be helpful for testing. Finally a test map for single player is also included for your benefit (test_traverses.map)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 xmodel_export\&lt;br /&gt;
The base character and hotbox  model is located here. See included [[Call of Duty 4: Maya|Maya documentation]] for explanation of this.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2355</id>
		<title>Call of Duty 4: ModTools Content</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2355"/>
		<updated>2008-11-04T17:48:30Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modtools]]&lt;br /&gt;
[[Category:Call of Duty 4]]&lt;br /&gt;
==What&#039;s included==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xmodels: After the Modtools are installed, &#039;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\main\xmodel\&#039; should contain all the extracted model files.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4Radiant.exe&lt;br /&gt;
Level editor. Create custom .map files for single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
On running CoD4Radiant for the first time, you will need to load the included cod4.prj project file which is located in &amp;quot;\bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note: all files below are in the specified subfolder of the Call Of Duty 4 main folder.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bin\CoD4_EffectsEd.exe&lt;br /&gt;
The CoD4 effect editor. Create and modify your own effects.&lt;br /&gt;
&lt;br /&gt;
On running CoD4_EffectsEd for the first time, you will be asked to browse to the location the game is installed. The default location is &amp;quot;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare&amp;quot;. For Steam users, this directory is: &amp;quot;C:\steam\steamapps\common\call of duty 4\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4CompileTools\CoD4CompileTools.exe&lt;br /&gt;
Graphical UI tool that is handy for compiling and running maps.&lt;br /&gt;
&lt;br /&gt;
On running CoD4CompileTools for the first time you must click the &amp;quot;browse&amp;quot; button in the upper left corner and browse to the location the game is installed. The default location is &amp;quot;Program Files\Activision\Call of Duty 4 Modern Warfare&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\asset_manager.exe&lt;br /&gt;
&lt;br /&gt;
Tool used for adding/modifying assets to the game. See the [[Call of Duty 4: Maya|Maya documentation]] for sample usage.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4map.exe&lt;br /&gt;
Compiles the .map file and creates a .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad.exe&lt;br /&gt;
Calculates lighting for a map and writes to the .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad64.exe&lt;br /&gt;
64-bits version of the above.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\converter.exe&lt;br /&gt;
Converts data from asset manager to game data. If you add something to asset_manager, you must then run converter before seeing your assets in the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\linker_pc.exe&lt;br /&gt;
Linker PC is the piece of software that will process the required resources for a mod/map and compress them into a FastFile (.ff).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\maya\&lt;br /&gt;
In here you will find the Maya 8 model and animation export Plugins. See the [[Call of Duty 4: Maya|Maya documentation]] for information on how to setup these Plugins with Maya 7 or 8.5.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 collmaps\&lt;br /&gt;
This is where collision map files are stored. Their filenames correspond to the xmodel name in the xmodel folder. By default, static models do not have collision, they get their collision data from these collmaps that we have made.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 devraw\&lt;br /&gt;
CoD4EffectsEd.exe looks in this folder for effectsEd_box.d3dbsp which is the bsp the editor loads. You can replace this bsp with another if you&#039;d like CoD4EffectsEd.exe to use a different bsp.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 map_source\&lt;br /&gt;
Included is the source for two official maps (Blackout - Single-player &amp;amp; Backlot - Multi-player) and this is where they are located, along with all the prefabs they reference. There is also a multiplayer test map (mp_test.map) included which contains the basics for any multiplayer map that can be helpful for testing. Finally a test map for single player is also included for your benefit (test_traverses.map)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 xmodel_export\&lt;br /&gt;
The base character and hotbox  model is located here. See included [[Call of Duty 4: Maya|Maya documentation]] for explanation of this.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2350</id>
		<title>Call of Duty 4: ModTools Content</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_ModTools_Content&amp;diff=2350"/>
		<updated>2008-11-04T17:36:41Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Added full directories &amp;amp; Steam folder location&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Modtools]]&lt;br /&gt;
[[Category:Call of Duty 4]]&lt;br /&gt;
==What&#039;s included==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Xmodels: After the Modtools are installed, &#039;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare\main\xmodel\&#039; should contain all the extracted model files.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Inside &#039;&#039;&#039;bin\&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4Radiant.exe&lt;br /&gt;
Level editor. Create custom .map files for single player or multiplayer.&lt;br /&gt;
&lt;br /&gt;
On running CoD4Radiant for the first time, you will need to load the included cod4.prj project file which is located in &amp;quot;\bin&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 Note: all files below are in the specified subfolder of the Call Of Duty 4 main folder.&lt;br /&gt;
&lt;br /&gt;
 bin\CoD4_EffectsEd.exe&lt;br /&gt;
The CoD4 effect editor. Create and modify your own effects.&lt;br /&gt;
&lt;br /&gt;
On running CoD4_EffectsEd for the first time, you will be asked to browse to the location the game is installed. The default location is &amp;quot;C:\Program Files\Activision\Call of Duty 4 - Modern Warfare&amp;quot;. For Steam users, this directory is: &amp;quot;C:\steam\steamapps\common\call of duty 4\&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\CoD4CompileTools\CoD4CompileTools.exe&lt;br /&gt;
Graphical UI tool that is handy for compiling and running maps.&lt;br /&gt;
&lt;br /&gt;
On running CoD4CompileTools for the first time you must click the &amp;quot;browse&amp;quot; button in the upper left corner and browse to the location the game is installed. The default location is &amp;quot;Program Files\Activision\Call of Duty 4 Modern Warfare&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\asset_manager.exe&lt;br /&gt;
&lt;br /&gt;
Tool used for adding/modifying assets to the game. See the [[Call of Duty 4: Maya|Maya documentation]] for sample usage.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4map.exe&lt;br /&gt;
Compiles the .map file and creates a .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad.exe&lt;br /&gt;
Calculates lighting for a map and writes to the .d3dbsp. Referenced by CoD4CompileTools.exe, but can be called manually as well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\cod4rad64.exe&lt;br /&gt;
64-bits version of the above.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 bin\converter.exe&lt;br /&gt;
Converts data from asset manager to game data. If you add something to asset_manager, you must then run converter before seeing your assets in the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\linker_pc.exe&lt;br /&gt;
Linker PC is the piece of software that will process the required resources for a mod/map and compress them into a FastFile (.ff).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 bin\maya\&lt;br /&gt;
In here you will find the Maya 8 model and animation export Plugins. See the [[Call of Duty 4: Maya|Maya documentation]] for information on how to setup these Plugins with Maya 7 or 8.5.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 collmaps\&lt;br /&gt;
This is where collision map files are stored. Their filenames correspond to the xmodel name in the xmodel folder. By default, static models do not have collision, they get their collision data from these collmaps that we have made.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 devraw\&lt;br /&gt;
CoD4EffectsEd.exe looks in this folder for effectsEd_box.d3dbsp which is the bsp the editor loads. You can replace this bsp with another if you&#039;d like CoD4EffectsEd.exe to use a different bsp.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 map_source\&lt;br /&gt;
Included is the source for two official maps (Blackout - Single-player &amp;amp; Backlot - Multi-player) and this is where they are located, along with all the prefabs they reference. There is also a multiplayer test map (mp_test.map) included which contains the basics for any multiplayer map that can be helpful for testing. Finally a test map for single player is also included for your benefit (test_traverses.map)&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 xmodel_export\&lt;br /&gt;
The base character and hotbox  model is located here. See included [[Call of Duty 4: Maya|Maya documentation]] for explanation of this.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_mapping_mp&amp;diff=2345</id>
		<title>Call of Duty 4: mapping mp</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_mapping_mp&amp;diff=2345"/>
		<updated>2008-11-04T17:26:03Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: more sorting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Call-of-duty-4.gif|right]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Design.png|left]]&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
[[Image:Tutorials.png|right]]&lt;br /&gt;
* [[Call of Duty 4: needed|What&#039;s needed]]&lt;br /&gt;
* [[Call of Duty 4: ModTools Content|ModTools Content]]&lt;br /&gt;
* [[Call of Duty 4: Your First Map|Building your first map in Radiant]]&lt;br /&gt;
&lt;br /&gt;
== Basic Editing == &lt;br /&gt;
[[Image:Design.png|right]]&lt;br /&gt;
* [[Call of Duty 4: First Room|Making Your First Room + Texturing]]&lt;br /&gt;
* [[Call of Duty 4: Prefab|Creating and Using Prefabs]]&lt;br /&gt;
* [[Call of Duty 4: Lighting|Adding Light]]&lt;br /&gt;
* [[Call of Duty 4: Adding Entities|Adding Entities (like MP Spawns)]]&lt;br /&gt;
* [[Call of Duty 4: Placing Models|Adding Models]]&lt;br /&gt;
* [[Call of Duty 4: Skybox|Adding a Skybox]]&lt;br /&gt;
* [[Call of Duty 4: Building Stairs|Building Stairs]]&lt;br /&gt;
* [[Call of Duty 4: Water|Using Water]]&lt;br /&gt;
* [[Call of Duty 4: Patches|Curve and Terrain Patches]]&lt;br /&gt;
* [[Call of Duty 4: Arches|Creating Arches]]&lt;br /&gt;
* [[Call of Duty 4: Adding Decals|Adding Decals]]&lt;br /&gt;
* [[Call of Duty 4: Reflection Probes|Adding Reflection Probes]]&lt;br /&gt;
* [[Call of Duty 4: Gridfile|Create a Gridfile]]&lt;br /&gt;
* [[Call of Duty 4: Compile Tools|Using Compile Tools]]&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Tool Textures Explained|Tool Textures Explained]]&lt;br /&gt;
** [[Call of Duty 4: Mantles|Mantles]]&lt;br /&gt;
** [[Call of Duty 4: Ladders|Ladders]]&lt;br /&gt;
** [[Call of Duty 4: Clip|Clip]]&lt;br /&gt;
&lt;br /&gt;
== Advanced Editing ==&lt;br /&gt;
[[Image:Design.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Advanced Lighting|Advanced Lighting]]&lt;br /&gt;
* [[Call of Duty 4: Portals|Portals, How-to]]&lt;br /&gt;
** [[Call of Duty 4: Portals1|Portals tutorial #1]]&lt;br /&gt;
** [[Call of Duty 4: Portals2|Portals tutorial #2]]&lt;br /&gt;
** [[Call of Duty 4: Portals3|Portals tutorial #3]]&lt;br /&gt;
* [[Call of Duty 4: Detailing|The Art of Detailing]]&lt;br /&gt;
* [[Call of Duty 4: Decals|The Art of Decals]]&lt;br /&gt;
* [[Call of Duty 4: Sounds|Ambient and map Sounds]]&lt;br /&gt;
* [[Call of Duty 4: Sun|Adding Sun/Moon]]&lt;br /&gt;
* [[Call of Duty 4: Custom Textures|Custom Textures]]&lt;br /&gt;
* [[Call of Duty 4: transparent Minimap|Create a Transparent Minimap]]&lt;br /&gt;
* [[Call of Duty 4: Custom Skyboxes|Create a Custom Skybox]]&lt;br /&gt;
* [[Call of Duty 4: Create a mp burg like map#Making a tunnel|Making a Tunnel (Like mp_burg)]]&lt;br /&gt;
* [[Call of Duty 4: .vision file|Create a Vision File]]&lt;br /&gt;
* [[Call of Duty 4: Hint Brushes|Using Hint Brushes]]&lt;br /&gt;
* [[Call of Duty 4: Minefields|Create Minefields]]&lt;br /&gt;
* [[Call of Duty 4: Breakable Brushes|Breakable Brushes]]&lt;br /&gt;
* [[Call of Duty 4: Godrays|Adding Godrays]]&lt;br /&gt;
* [[Call of Duty 4: Video Mapicted Tutorials|Mapicted Videos Tutorials]]&lt;br /&gt;
----&lt;br /&gt;
[[Image:Tutorials.png|right]]&lt;br /&gt;
* [[Call of Duty 4: FXs|Special Effects - FXs]]&lt;br /&gt;
** [[Call of Duty 4: FXs|Place FXs in Map]]&lt;br /&gt;
** [[Call of Duty 4: destruct model|Destructable Models]]&lt;br /&gt;
** [[Call of Duty 4: RainFX|Adding Rain]]&lt;br /&gt;
** [[Call of Duty 4: Editing Stock FX|Editing Stock FXs]]&lt;br /&gt;
&lt;br /&gt;
== Modelling / Skinning ==&lt;br /&gt;
[[Image:Design.png|right]]&lt;br /&gt;
* [[Call of duty 4: Import models|Import models in game]]&lt;br /&gt;
* [[Call of Duty 4: Import COD2 Models|Import COD2 Models]]&lt;br /&gt;
* [[Call of Duty 4: Maya|Modelling/Skining]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Maya 8 plugin setup|Maya setup]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Setting up, skinning and exporting a character model|General setup]]&lt;br /&gt;
**[[Call of Duty 4: Maya#IW Dev conventions|Conventions]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Creating a Rig|Create a Rig]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Rigging|Rigging]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Materials|Materials]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Animations|Animations]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Working with and exporting animations|Exporting Animations]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Asset Manager|AssMan]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Models|Models]]&lt;br /&gt;
**[[Call of Duty 4: Maya#Converting models and animations|Convert Models/Anims]]&lt;br /&gt;
&lt;br /&gt;
== Scripts &amp;amp; Mapping ==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Rotating Models|Scripting: Rotating Brushes/Models]]&lt;br /&gt;
* [[Call of Duty 4: Moving Brushes|Scripting: Moving Brushes]]&lt;br /&gt;
* [[Call of Duty 4: Bobbing Models|Scripting: Bobbing Models]]&lt;br /&gt;
* [[Call of Duty 4: Elevator Brushes|Scripting: Elevators]]&lt;br /&gt;
* [[Call of Duty 4: Breakable Windows|Scripting: Breakable Windows]]&lt;br /&gt;
* [[Call of Duty 4: Teleporter|Scripting: Teleporters]]&lt;br /&gt;
* [[Call of Duty 4: Jumppads|Scripting: Jump Pads]]&lt;br /&gt;
* [[Call of Duty 4: Vending Machine|Scripting: Vending Machines]]&lt;br /&gt;
* [[Call of Duty 4: Flapping Shutters|Scripting: Flapping Shutters]]&lt;br /&gt;
* [[Call of Duty 4: Switches Primary Light|Scripting: Primary Light Switch]]&lt;br /&gt;
&lt;br /&gt;
== Gametypes==&lt;br /&gt;
[[Image:Tutorials.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Adding Entities#Setting up gameplay modes|Adding Stock Gametypes]]&lt;br /&gt;
* [[Call of Duty 4: Gametypes |Adding CTF/CTFB to your map]]&lt;br /&gt;
* [[Call of Duty 4: Retrieval |Adding Retrieval Gametype to your map]]&lt;br /&gt;
&lt;br /&gt;
==Releasing a Map==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Test the map|Test your map]]&lt;br /&gt;
* [[Call of Duty 4: Minimap|Create a Minimap ]]&lt;br /&gt;
* [[Call of Duty 4: Loadscreen Creation|Create a Loadscreen]]&lt;br /&gt;
* [[Call of Duty 4: Helipaths|Create Helipath]]&lt;br /&gt;
* [[Call of Duty 4: Map naming|Map naming]]&lt;br /&gt;
* [[Call of Duty 4: Readme file|Create a Readme]]&lt;br /&gt;
* [[Call of Duty 4: Releasing General|Releasing a Map]]&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Troubleshooting ==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Tips|Tips]]&lt;br /&gt;
* [[Call of Duty 4: Troubleshooting|Troubleshooting]]&lt;br /&gt;
* [[Call of Duty 4: Compile Errors|Compile Errors]]&lt;br /&gt;
&lt;br /&gt;
==Technical References==&lt;br /&gt;
[[Image:Information.png|right]]&lt;br /&gt;
* [[Call of Duty 4: d3dbsp|D3DBSP File format by Daevius]]&lt;br /&gt;
* [[Call of Duty 4: Demo Player|Demo Player]]&lt;br /&gt;
* [[Call of Duty 4: Gameplay standards|Gameplay standards]]&lt;br /&gt;
* [[Call of Duty 4: MAP file structure|.MAP file structure by Daevius]]&lt;br /&gt;
* [[Call of Duty 4: Map Overhead|MP Maps Overhead - COD4]]&lt;br /&gt;
* [[Call of Duty 4: MP Lights Settings|MP Maps Worldspawn]]&lt;br /&gt;
* [[Call of Duty 4: MP Weapons|MP Weapons]]&lt;br /&gt;
* [[Objects]]&lt;br /&gt;
** [[Call of Duty 4: Items|Items (weapons, pickups)]]&lt;br /&gt;
** [[Call of Duty 4: World Models|World Models]]&lt;br /&gt;
* [[Call of Duty 4: Partial Fastfile Decompile|Partial Fastfile Decompile by Sprinter]]&lt;br /&gt;
* [[Radiant Editor]]&lt;br /&gt;
** [[Call of Duty 4: Radiant|FAQs]]&lt;br /&gt;
** [[Call of Duty 4: Radiant Hotkey Reference|Hotkey Reference]]&lt;br /&gt;
** [[Call of Duty 4: Toolbar|The Toolbar]]&lt;br /&gt;
* [[Call of Duty 4: Scripting Reference|Scripting Reference Cod4]]&lt;br /&gt;
* [[Call of Duty 4: Skinning Tools|Skinning/Image Tool]]&lt;br /&gt;
* [[Call of Duty 4: Stock .vision files|Stock Vision Files]]&lt;br /&gt;
* [[Call of Duty 4: Tool Textures|Tool Textures]]&lt;br /&gt;
* [[Call of Duty 4: Update Zone File|Zone File]]&lt;br /&gt;
* [[Call of Duty 4: Xmodel Exporter|Xmodel Exporter]]&lt;br /&gt;
&lt;br /&gt;
== Upload Sites ==&lt;br /&gt;
[[Image:Online.png|right|32px]]&lt;br /&gt;
* [[Call of Duty 4: File Hosting Sites|File Hosting Sites]] - A list of reliable websites that host user created maps&lt;br /&gt;
* [[Call of Duty 4: News Site List|News Site List]] - A list of websites for hype/advertisement and discussion&lt;br /&gt;
&lt;br /&gt;
== About Cod4 and its creators ==&lt;br /&gt;
[[Image:Infinityward.png|right]]&lt;br /&gt;
&#039;&#039;&#039;Infinity Ward&#039;&#039;&#039;, located in Encino, California, is a computer game developer founded in 2002 by 22 former employees of 2015, developers of Medal of Honor: Allied Assault. Infinity Ward was acquired by Activision in October 2003.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Call of Duty 4: Modern Warfare&#039;&#039;&#039; is a first-person shooter video game developed by Infinity Ward and published by Activision for the PlayStation 3, Windows, and the Xbox 360. It was released on September 30, 2008 for Mac OS X. It is the fourth installment of the Call of Duty video game series, excluding expansion packs. The game breaks away from the World War II setting of previous games in the series and is instead set in modern times. &lt;br /&gt;
The game is the first in the series to be rated Mature in North America. The title and game details were announced on April 25, 2007, and the game was released worldwide between November 6, 2007 and November 9, 2007. It became available on Steam on November 6, 2007 for pre-purchase, and was available to play on November 12, 2007. The game was in development for two years. It uses a proprietary game engine, and includes features that include true world-dynamic lightning, HDR lighting effects, dynamics shadows, and depth of field.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Geographylogo.png]][http://www.infinityward.com/ IW Official Website]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2344</id>
		<title>Call of Duty 4: Radiant Hotkey Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2344"/>
		<updated>2008-11-04T17:20:16Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;br /&gt;
[[Image:Nutshell.png]] These are the default hot key commands for &#039;&#039;Call of Duty 4&#039;&#039; Radiant level editing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AddTerrainRow&#039;&#039;&#039;  Shift + Control + A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;AdvancedCurveEdit&#039;&#039;&#039;  Y&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ApplyPatchCap&#039;&#039;&#039;  Shift + Control + P&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;AssociateEntities&#039;&#039;&#039;  Shift + G&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;AutoCaulk&#039;&#039;&#039;  Alt + C&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;AutoEdgeTurn&#039;&#039;&#039;  Alt + F2&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraAngleDown&#039;&#039;&#039;  Z&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraAngleUp&#039;&#039;&#039;  A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraBack&#039;&#039;&#039;  Down&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraDown&#039;&#039;&#039;  C&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraForward&#039;&#039;&#039;  Up&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraLeft&#039;&#039;&#039;  Left&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraRight&#039;&#039;&#039;  Right&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeLeft&#039;&#039;&#039;  Comma&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeRight&#039;&#039;&#039;  Period&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CameraUp&#039;&#039;&#039;  D&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CapCurrentCurve&#039;&#039;&#039;  Shift + C&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Center2DOnCamera&#039;&#039;&#039;  Alt + X&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CenterView&#039;&#039;&#039;  End&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ClipSelected&#039;&#039;&#039;  Return&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CloneSelection&#039;&#039;&#039;  Space&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ConnectSelection&#039;&#039;&#039;  W&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Copy&#039;&#039;&#039;  Control + C&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CSGMerge&#039;&#039;&#039;  Control + U&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomIn&#039;&#039;&#039;  Control + [&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomOut&#039;&#039;&#039;  Control + ]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CycleCapTexturePatch&#039;&#039;&#039;  Shift + Control + N&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightDown&#039;&#039;&#039;  Alt + Comma&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightUp&#039;&#039;&#039;  Alt + Period&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DecPatchColumn&#039;&#039;&#039;  Shift + Control + Subtract&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DecPatchRow&#039;&#039;&#039;  Control + Subtract&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DeleteSelection&#039;&#039;&#039;  Backspace&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DisassociateEntities&#039;&#039;&#039;  Shift + Control + G&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DownFloor&#039;&#039;&#039;  PageDown&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DragEdges&#039;&#039;&#039;  E&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DragVertices&#039;&#039;&#039;  V&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DropVertices&#039;&#039;&#039;  Shift + Alt + Control + D&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;DynEntities&#039;&#039;&#039;  Shift + Y&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;EnterPrefab&#039;&#039;&#039;  Alt + PageDown&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;EntityColor&#039;&#039;&#039;  K&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ExtrudeTerrainRow&#039;&#039;&#039;  Alt + O&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FileOpen&#039;&#039;&#039;  Control + O&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FileSave&#039;&#039;&#039;  Control + S&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FitBrush&#039;&#039;&#039;  Shift + B&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;FlipClip&#039;&#039;&#039;  Control + Return&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GetDistance&#039;&#039;&#039;  Alt + F1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GridDown&#039;&#039;&#039;  [&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;GridUp&#039;&#039;&#039;  ]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;HideByClassname&#039;&#039;&#039;  Shift + Alt + Control + H&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;HideSelected&#039;&#039;&#039;  H&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;HideUnSelected&#039;&#039;&#039;  Alt + H&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;IncPatchColumn&#039;&#039;&#039;  Shift + Control + Plus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;IncPatchRow&#039;&#039;&#039;  Control + Plus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;InvertCurve&#039;&#039;&#039;  Control + I&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureX&#039;&#039;&#039;  Shift + Control + I&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureY&#039;&#039;&#039;  Shift + I&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;InvertSelection&#039;&#039;&#039;  I&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LeavePrefab&#039;&#039;&#039;  Alt + PageUp&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewClear&#039;&#039;&#039;  Alt + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewRegions&#039;&#039;&#039;  Shift + Control + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStart&#039;&#039;&#039;  Shift + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStop&#039;&#039;&#039;  Shift + Alt + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewSun&#039;&#039;&#039;  Control + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightPreviewToggle&#039;&#039;&#039;  F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightShiftDown&#039;&#039;&#039;  Alt + [&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LightShiftUp&#039;&#039;&#039;  Alt + ]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LinkSelected&#039;&#039;&#039;  Alt + Q&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;LinkSelectionToggle&#039;&#039;&#039;  Shift + O&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MakeDetail&#039;&#039;&#039;  Shift + Control + D&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MakeNonColliding&#039;&#039;&#039;  Shift + Control + Minus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MakeStructural&#039;&#039;&#039;  Shift + Control + S&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MakeWeaponClip&#039;&#039;&#039;  Shift + Control + W&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MapInfo&#039;&#039;&#039;  M&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MaxLightIntensity&#039;&#039;&#039;  Alt + Control + F8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MouseRotate&#039;&#039;&#039;  R&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionDOWN&#039;&#039;&#039;  Subtract&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionUP&#039;&#039;&#039;  Plus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NaturalizePatch&#039;&#039;&#039;  Control + N&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NextLeakSpot&#039;&#039;&#039;  Shift + Control + K&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;NextView Control&#039;&#039;&#039;  + Tab&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftDown&#039;&#039;&#039;  Shift + [&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftUp&#039;&#039;&#039;  Shift + ]&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Paste&#039;&#039;&#039;  Control + V&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Shift + Tab&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Tab&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PatchInspector&#039;&#039;&#039;  Shift + S&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PatchMatrixTranspose&#039;&#039;&#039;  Shift + Control + M&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Preferences&#039;&#039;&#039;  P&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PrevLeakSpot&#039;&#039;&#039;  Shift + Control + L&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RedisperseCols&#039;&#039;&#039;  Shift + Control + E&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RedisperseRows&#039;&#039;&#039;  Shift + E&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RedisperseVertices&#039;&#039;&#039;  Shift + F&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Redo Control&#039;&#039;&#039;  + Y&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RefreshTextures&#039;&#039;&#039;  F5&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RemoveColorNode&#039;&#039;&#039;  Control + R&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RemoveTerrainRow&#039;&#039;&#039;  Shift + Control + Q&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;RotateZ&#039;&#039;&#039;  Shift + D&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SameTarget&#039;&#039;&#039;  Control + B&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SameTargetname&#039;&#039;&#039;  B&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfType&#039;&#039;&#039;  Shift + A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfTypeRecurse&#039;&#039;&#039;  Alt + A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectConnectedEntities&#039;&#039;&#039;  Alt + Control + E&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectedAssociated&#039;&#039;&#039;  Control + X&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectionKeyValue&#039;&#039;&#039;  Shift + Control + F&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectNext&#039;&#039;&#039;  Shift + Period&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeDown&#039;&#039;&#039;  Alt + Down&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeLeft&#039;&#039;&#039;  Alt + Left&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeRight&#039;&#039;&#039;  Alt + Right&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeUp&#039;&#039;&#039;  Alt + Up&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectPrev&#039;&#039;&#039;  Shift + Comma&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectSnapPointsToGrid&#039;&#039;&#039;  Control + G&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SelectTargettedEntities&#039;&#039;&#039;  Control + E&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid1&#039;&#039;&#039;  1&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid16&#039;&#039;&#039;  5&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid2&#039;&#039;&#039;  2&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid256&#039;&#039;&#039;  8&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid32&#039;&#039;&#039;  6&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid4&#039;&#039;&#039;  3&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid512&#039;&#039;&#039;  9&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid64&#039;&#039;&#039;  7&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGrid8&#039;&#039;&#039;  4&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetGridPointFive&#039;&#039;&#039;  ~&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SetViewToEntity&#039;&#039;&#039;  F6&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ShowAllTextures&#039;&#039;&#039;  Control + A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ShowHidden&#039;&#039;&#039;  Shift + H&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ShowLastHidden&#039;&#039;&#039;  Shift + Control + H&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ShowTexturesInUse&#039;&#039;&#039;  U&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SplaySelection&#039;&#039;&#039;  Alt + W&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SplitPatch&#039;&#039;&#039;  Shift + Control + X&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SplitSelected&#039;&#039;&#039;  Shift + Return&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;SurfaceInspector&#039;&#039;&#039;  S&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexDecrement&#039;&#039;&#039;  Shift + Subtract&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexIncrement&#039;&#039;&#039;  Shift + Plus&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexLayerCycle&#039;&#039;&#039;  Shift + L&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexRotateClock&#039;&#039;&#039;  Control + Left&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexRotateCounter&#039;&#039;&#039;  Control + Right&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexScaleLeft&#039;&#039;&#039;  Control + Left&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexScaleRight&#039;&#039;&#039;  Control + Right&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexShiftDown&#039;&#039;&#039;  Shift + Down&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexShiftLeft&#039;&#039;&#039;  Shift + Left&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexShiftRight&#039;&#039;&#039;  Shift + Right&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TexShiftUp&#039;&#039;&#039;  Shift + Up&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TextureFit&#039;&#039;&#039;  Control + F&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TextureFitAll&#039;&#039;&#039;  Alt + Control + F&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ThickenPatch&#039;&#039;&#039;  Shift + Control + T&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleCamera&#039;&#039;&#039;  Shift + Control + C&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleClipper&#039;&#039;&#039;  X&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleCrosshairs&#039;&#039;&#039;  Shift + X&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleCubicClip&#039;&#039;&#039;  Control + \&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleGrid&#039;&#039;&#039;  0&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleLayeredMaterialWnd&#039;&#039;&#039;  F4&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleLayers&#039;&#039;&#039;  L&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleLockPatchVertices&#039;&#039;&#039;  Control + Period&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleOutlineDraw&#039;&#039;&#039;  J&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TogglePatchWireframes&#039;&#039;&#039;  Shift + W&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleSnapToGrid&#039;&#039;&#039;  Alt + Control + G&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleTexMoveLock&#039;&#039;&#039;  Shift + T&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleTexRotateLock&#039;&#039;&#039;  Shift + R&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleTintDraw Shift&#039;&#039;&#039;  + J&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleTurnTerrainEdges&#039;&#039;&#039;  Control + ¿&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleUnlockPatchVertices&#039;&#039;&#039;  Shift + Control + Period&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleView&#039;&#039;&#039;  Shift + Control + V&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ToggleZ&#039;&#039;&#039;  Shift + Control + Z&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;TolerantWeld&#039;&#039;&#039;  Shift + Control + J&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Undo&#039;&#039;&#039;  Control + Z&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;UnSelectSelection&#039;&#039;&#039;  Escape&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;UpFloor&#039;&#039;&#039;  PageUp&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VehicleGroup&#039;&#039;&#039;  Shift + V&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;VertEdit&#039;&#039;&#039;  G&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Down&#039;&#039;&#039;  Control + Down&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Up&#039;&#039;&#039;  Control + Up&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ViewConsole&#039;&#039;&#039;  O&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ViewEntityInfo&#039;&#039;&#039;  N&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ViewFilters&#039;&#039;&#039;  F&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ViewTextures&#039;&#039;&#039;  T&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ZoomIn&#039;&#039;&#039;  Delete&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ZoomOut&#039;&#039;&#039;  Insert&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ZZoomIn&#039;&#039;&#039;  Control + Delete&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;ZZoomOut&#039;&#039;&#039;  Control + Insert&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2343</id>
		<title>Call of Duty 4: Radiant Hotkey Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2343"/>
		<updated>2008-11-04T17:17:46Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Removed some unused shortcuts, sorted alphabetically.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;br /&gt;
[[Image:Nutshell.png]] These are the default hot key commands for &#039;&#039;Call of Duty 4&#039;&#039; Radiant level editing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AddTerrainRow&#039;&#039;&#039;  Shift + Control + A&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;AdvancedCurveEdit&#039;&#039;&#039;  Y&lt;br /&gt;
&#039;&#039;&#039;ApplyPatchCap&#039;&#039;&#039;  Shift + Control + P&lt;br /&gt;
&#039;&#039;&#039;AssociateEntities&#039;&#039;&#039;  Shift + G&lt;br /&gt;
&#039;&#039;&#039;AutoCaulk&#039;&#039;&#039;  Alt + C&lt;br /&gt;
&#039;&#039;&#039;AutoEdgeTurn&#039;&#039;&#039;  Alt + F2&lt;br /&gt;
&#039;&#039;&#039;CameraAngleDown&#039;&#039;&#039;  Z&lt;br /&gt;
&#039;&#039;&#039;CameraAngleUp&#039;&#039;&#039;  A&lt;br /&gt;
&#039;&#039;&#039;CameraBack&#039;&#039;&#039;  Down&lt;br /&gt;
&#039;&#039;&#039;CameraDown&#039;&#039;&#039;  C&lt;br /&gt;
&#039;&#039;&#039;CameraForward&#039;&#039;&#039;  Up&lt;br /&gt;
&#039;&#039;&#039;CameraLeft&#039;&#039;&#039;  Left&lt;br /&gt;
&#039;&#039;&#039;CameraRight&#039;&#039;&#039;  Right&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeLeft&#039;&#039;&#039;  Comma&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeRight&#039;&#039;&#039;  Period&lt;br /&gt;
&#039;&#039;&#039;CameraUp&#039;&#039;&#039;  D&lt;br /&gt;
&#039;&#039;&#039;CapCurrentCurve&#039;&#039;&#039;  Shift + C&lt;br /&gt;
&#039;&#039;&#039;Center2DOnCamera&#039;&#039;&#039;  Alt + X&lt;br /&gt;
&#039;&#039;&#039;CenterView&#039;&#039;&#039;  End&lt;br /&gt;
&#039;&#039;&#039;ClipSelected&#039;&#039;&#039;  Return&lt;br /&gt;
&#039;&#039;&#039;CloneSelection&#039;&#039;&#039;  Space&lt;br /&gt;
&#039;&#039;&#039;ConnectSelection&#039;&#039;&#039;  W&lt;br /&gt;
&#039;&#039;&#039;Copy&#039;&#039;&#039;  Control + C&lt;br /&gt;
&#039;&#039;&#039;CSGMerge&#039;&#039;&#039;  Control + U&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomIn&#039;&#039;&#039;  Control + [&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomOut&#039;&#039;&#039;  Control + ]&lt;br /&gt;
&#039;&#039;&#039;CycleCapTexturePatch&#039;&#039;&#039;  Shift + Control + N&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightDown&#039;&#039;&#039;  Alt + Comma&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightUp&#039;&#039;&#039;  Alt + Period&lt;br /&gt;
&#039;&#039;&#039;DecPatchColumn&#039;&#039;&#039;  Shift + Control + Subtract&lt;br /&gt;
&#039;&#039;&#039;DecPatchRow&#039;&#039;&#039;  Control + Subtract&lt;br /&gt;
&#039;&#039;&#039;DeleteSelection&#039;&#039;&#039;  Backspace&lt;br /&gt;
&#039;&#039;&#039;DisassociateEntities&#039;&#039;&#039;  Shift + Control + G&lt;br /&gt;
&#039;&#039;&#039;DownFloor&#039;&#039;&#039;  PageDown&lt;br /&gt;
&#039;&#039;&#039;DragEdges&#039;&#039;&#039;  E&lt;br /&gt;
&#039;&#039;&#039;DragVertices&#039;&#039;&#039;  V&lt;br /&gt;
&#039;&#039;&#039;DropVertices&#039;&#039;&#039;  Shift + Alt + Control + D&lt;br /&gt;
&#039;&#039;&#039;DynEntities&#039;&#039;&#039;  Shift + Y&lt;br /&gt;
&#039;&#039;&#039;EnterPrefab&#039;&#039;&#039;  Alt + PageDown&lt;br /&gt;
&#039;&#039;&#039;EntityColor&#039;&#039;&#039;  K&lt;br /&gt;
&#039;&#039;&#039;ExtrudeTerrainRow&#039;&#039;&#039;  Alt + O&lt;br /&gt;
&#039;&#039;&#039;FileOpen&#039;&#039;&#039;  Control + O&lt;br /&gt;
&#039;&#039;&#039;FileSave&#039;&#039;&#039;  Control + S&lt;br /&gt;
&#039;&#039;&#039;FitBrush&#039;&#039;&#039;  Shift + B&lt;br /&gt;
&#039;&#039;&#039;FlipClip&#039;&#039;&#039;  Control + Return&lt;br /&gt;
&#039;&#039;&#039;GetDistance&#039;&#039;&#039;  Alt + F1&lt;br /&gt;
&#039;&#039;&#039;GridDown&#039;&#039;&#039;  [&lt;br /&gt;
&#039;&#039;&#039;GridUp&#039;&#039;&#039;  ]&lt;br /&gt;
&#039;&#039;&#039;HideByClassname&#039;&#039;&#039;  Shift + Alt + Control + H&lt;br /&gt;
&#039;&#039;&#039;HideSelected&#039;&#039;&#039;  H&lt;br /&gt;
&#039;&#039;&#039;HideUnSelected&#039;&#039;&#039;  Alt + H&lt;br /&gt;
&#039;&#039;&#039;IncPatchColumn&#039;&#039;&#039;  Shift + Control + Plus&lt;br /&gt;
&#039;&#039;&#039;IncPatchRow&#039;&#039;&#039;  Control + Plus&lt;br /&gt;
&#039;&#039;&#039;InvertCurve&#039;&#039;&#039;  Control + I&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureX&#039;&#039;&#039;  Shift + Control + I&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureY&#039;&#039;&#039;  Shift + I&lt;br /&gt;
&#039;&#039;&#039;InvertSelection&#039;&#039;&#039;  I&lt;br /&gt;
&#039;&#039;&#039;LeavePrefab&#039;&#039;&#039;  Alt + PageUp&lt;br /&gt;
&#039;&#039;&#039;LightPreviewClear&#039;&#039;&#039;  Alt + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewRegions&#039;&#039;&#039;  Shift + Control + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStart&#039;&#039;&#039;  Shift + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStop&#039;&#039;&#039;  Shift + Alt + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewSun&#039;&#039;&#039;  Control + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewToggle&#039;&#039;&#039;  F8&lt;br /&gt;
&#039;&#039;&#039;LightShiftDown&#039;&#039;&#039;  Alt + [&lt;br /&gt;
&#039;&#039;&#039;LightShiftUp&#039;&#039;&#039;  Alt + ]&lt;br /&gt;
&#039;&#039;&#039;LinkSelected&#039;&#039;&#039;  Alt + Q&lt;br /&gt;
&#039;&#039;&#039;LinkSelectionToggle&#039;&#039;&#039;  Shift + O&lt;br /&gt;
&#039;&#039;&#039;MakeDetail&#039;&#039;&#039;  Shift + Control + D&lt;br /&gt;
&#039;&#039;&#039;MakeNonColliding&#039;&#039;&#039;  Shift + Control + Minus&lt;br /&gt;
&#039;&#039;&#039;MakeStructural&#039;&#039;&#039;  Shift + Control + S&lt;br /&gt;
&#039;&#039;&#039;MakeWeaponClip&#039;&#039;&#039;  Shift + Control + W&lt;br /&gt;
&#039;&#039;&#039;MapInfo&#039;&#039;&#039;  M&lt;br /&gt;
&#039;&#039;&#039;MaxLightIntensity&#039;&#039;&#039;  Alt + Control + F8&lt;br /&gt;
&#039;&#039;&#039;MouseRotate&#039;&#039;&#039;  R&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionDOWN&#039;&#039;&#039;  Subtract&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionUP&#039;&#039;&#039;  Plus&lt;br /&gt;
&#039;&#039;&#039;NaturalizePatch&#039;&#039;&#039;  Control + N&lt;br /&gt;
&#039;&#039;&#039;NextLeakSpot&#039;&#039;&#039;  Shift + Control + K&lt;br /&gt;
&#039;&#039;&#039;NextView Control&#039;&#039;&#039;  + Tab&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftDown&#039;&#039;&#039;  Shift + [&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftUp&#039;&#039;&#039;  Shift + ]&lt;br /&gt;
&#039;&#039;&#039;Paste&#039;&#039;&#039;  Control + V&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Shift + Tab&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Tab&lt;br /&gt;
&#039;&#039;&#039;PatchInspector&#039;&#039;&#039;  Shift + S&lt;br /&gt;
&#039;&#039;&#039;PatchMatrixTranspose&#039;&#039;&#039;  Shift + Control + M&lt;br /&gt;
&#039;&#039;&#039;Preferences&#039;&#039;&#039;  P&lt;br /&gt;
&#039;&#039;&#039;PrevLeakSpot&#039;&#039;&#039;  Shift + Control + L&lt;br /&gt;
&#039;&#039;&#039;RedisperseCols&#039;&#039;&#039;  Shift + Control + E&lt;br /&gt;
&#039;&#039;&#039;RedisperseRows&#039;&#039;&#039;  Shift + E&lt;br /&gt;
&#039;&#039;&#039;RedisperseVertices&#039;&#039;&#039;  Shift + F&lt;br /&gt;
&#039;&#039;&#039;Redo Control&#039;&#039;&#039;  + Y&lt;br /&gt;
&#039;&#039;&#039;RefreshTextures&#039;&#039;&#039;  F5&lt;br /&gt;
&#039;&#039;&#039;RemoveColorNode&#039;&#039;&#039;  Control + R&lt;br /&gt;
&#039;&#039;&#039;RemoveTerrainRow&#039;&#039;&#039;  Shift + Control + Q&lt;br /&gt;
&#039;&#039;&#039;RotateZ&#039;&#039;&#039;  Shift + D&lt;br /&gt;
&#039;&#039;&#039;SameTarget&#039;&#039;&#039;  Control + B&lt;br /&gt;
&#039;&#039;&#039;SameTargetname&#039;&#039;&#039;  B&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfType&#039;&#039;&#039;  Shift + A&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfTypeRecurse&#039;&#039;&#039;  Alt + A&lt;br /&gt;
&#039;&#039;&#039;SelectConnectedEntities&#039;&#039;&#039;  Alt + Control + E&lt;br /&gt;
&#039;&#039;&#039;SelectedAssociated&#039;&#039;&#039;  Control + X&lt;br /&gt;
&#039;&#039;&#039;SelectionKeyValue&#039;&#039;&#039;  Shift + Control + F&lt;br /&gt;
&#039;&#039;&#039;SelectNext&#039;&#039;&#039;  Shift + Period&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeDown&#039;&#039;&#039;  Alt + Down&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeLeft&#039;&#039;&#039;  Alt + Left&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeRight&#039;&#039;&#039;  Alt + Right&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeUp&#039;&#039;&#039;  Alt + Up&lt;br /&gt;
&#039;&#039;&#039;SelectPrev&#039;&#039;&#039;  Shift + Comma&lt;br /&gt;
&#039;&#039;&#039;SelectSnapPointsToGrid&#039;&#039;&#039;  Control + G&lt;br /&gt;
&#039;&#039;&#039;SelectTargettedEntities&#039;&#039;&#039;  Control + E&lt;br /&gt;
&#039;&#039;&#039;SetGrid1&#039;&#039;&#039;  1&lt;br /&gt;
&#039;&#039;&#039;SetGrid16&#039;&#039;&#039;  5&lt;br /&gt;
&#039;&#039;&#039;SetGrid2&#039;&#039;&#039;  2&lt;br /&gt;
&#039;&#039;&#039;SetGrid256&#039;&#039;&#039;  8&lt;br /&gt;
&#039;&#039;&#039;SetGrid32&#039;&#039;&#039;  6&lt;br /&gt;
&#039;&#039;&#039;SetGrid4&#039;&#039;&#039;  3&lt;br /&gt;
&#039;&#039;&#039;SetGrid512&#039;&#039;&#039;  9&lt;br /&gt;
&#039;&#039;&#039;SetGrid64&#039;&#039;&#039;  7&lt;br /&gt;
&#039;&#039;&#039;SetGrid8&#039;&#039;&#039;  4&lt;br /&gt;
&#039;&#039;&#039;SetGridPointFive&#039;&#039;&#039;  ~&lt;br /&gt;
&#039;&#039;&#039;SetViewToEntity&#039;&#039;&#039;  F6&lt;br /&gt;
&#039;&#039;&#039;ShowAllTextures&#039;&#039;&#039;  Control + A&lt;br /&gt;
&#039;&#039;&#039;ShowHidden&#039;&#039;&#039;  Shift + H&lt;br /&gt;
&#039;&#039;&#039;ShowLastHidden&#039;&#039;&#039;  Shift + Control + H&lt;br /&gt;
&#039;&#039;&#039;ShowTexturesInUse&#039;&#039;&#039;  U&lt;br /&gt;
&#039;&#039;&#039;SplaySelection&#039;&#039;&#039;  Alt + W&lt;br /&gt;
&#039;&#039;&#039;SplitPatch&#039;&#039;&#039;  Shift + Control + X&lt;br /&gt;
&#039;&#039;&#039;SplitSelected&#039;&#039;&#039;  Shift + Return&lt;br /&gt;
&#039;&#039;&#039;SurfaceInspector&#039;&#039;&#039;  S&lt;br /&gt;
&#039;&#039;&#039;TexDecrement&#039;&#039;&#039;  Shift + Subtract&lt;br /&gt;
&#039;&#039;&#039;TexIncrement&#039;&#039;&#039;  Shift + Plus&lt;br /&gt;
&#039;&#039;&#039;TexLayerCycle&#039;&#039;&#039;  Shift + L&lt;br /&gt;
&#039;&#039;&#039;TexRotateClock&#039;&#039;&#039;  Control + Left&lt;br /&gt;
&#039;&#039;&#039;TexRotateCounter&#039;&#039;&#039;  Control + Right&lt;br /&gt;
&#039;&#039;&#039;TexScaleLeft&#039;&#039;&#039;  Control + Left&lt;br /&gt;
&#039;&#039;&#039;TexScaleRight&#039;&#039;&#039;  Control + Right&lt;br /&gt;
&#039;&#039;&#039;TexShiftDown&#039;&#039;&#039;  Shift + Down&lt;br /&gt;
&#039;&#039;&#039;TexShiftLeft&#039;&#039;&#039;  Shift + Left&lt;br /&gt;
&#039;&#039;&#039;TexShiftRight&#039;&#039;&#039;  Shift + Right&lt;br /&gt;
&#039;&#039;&#039;TexShiftUp&#039;&#039;&#039;  Shift + Up&lt;br /&gt;
&#039;&#039;&#039;TextureFit&#039;&#039;&#039;  Control + F&lt;br /&gt;
&#039;&#039;&#039;TextureFitAll&#039;&#039;&#039;  Alt + Control + F&lt;br /&gt;
&#039;&#039;&#039;ThickenPatch&#039;&#039;&#039;  Shift + Control + T&lt;br /&gt;
&#039;&#039;&#039;ToggleCamera&#039;&#039;&#039;  Shift + Control + C&lt;br /&gt;
&#039;&#039;&#039;ToggleClipper&#039;&#039;&#039;  X&lt;br /&gt;
&#039;&#039;&#039;ToggleCrosshairs&#039;&#039;&#039;  Shift + X&lt;br /&gt;
&#039;&#039;&#039;ToggleCubicClip&#039;&#039;&#039;  Control + \&lt;br /&gt;
&#039;&#039;&#039;ToggleGrid&#039;&#039;&#039;  0&lt;br /&gt;
&#039;&#039;&#039;ToggleLayeredMaterialWnd&#039;&#039;&#039;  F4&lt;br /&gt;
&#039;&#039;&#039;ToggleLayers&#039;&#039;&#039;  L&lt;br /&gt;
&#039;&#039;&#039;ToggleLockPatchVertices&#039;&#039;&#039;  Control + Period&lt;br /&gt;
&#039;&#039;&#039;ToggleOutlineDraw&#039;&#039;&#039;  J&lt;br /&gt;
&#039;&#039;&#039;TogglePatchWireframes&#039;&#039;&#039;  Shift + W&lt;br /&gt;
&#039;&#039;&#039;ToggleSnapToGrid&#039;&#039;&#039;  Alt + Control + G&lt;br /&gt;
&#039;&#039;&#039;ToggleTexMoveLock&#039;&#039;&#039;  Shift + T&lt;br /&gt;
&#039;&#039;&#039;ToggleTexRotateLock&#039;&#039;&#039;  Shift + R&lt;br /&gt;
&#039;&#039;&#039;ToggleTintDraw Shift&#039;&#039;&#039;  + J&lt;br /&gt;
&#039;&#039;&#039;ToggleTurnTerrainEdges&#039;&#039;&#039;  Control + ¿&lt;br /&gt;
&#039;&#039;&#039;ToggleUnlockPatchVertices&#039;&#039;&#039;  Shift + Control + Period&lt;br /&gt;
&#039;&#039;&#039;ToggleView&#039;&#039;&#039;  Shift + Control + V&lt;br /&gt;
&#039;&#039;&#039;ToggleZ&#039;&#039;&#039;  Shift + Control + Z&lt;br /&gt;
&#039;&#039;&#039;TolerantWeld&#039;&#039;&#039;  Shift + Control + J&lt;br /&gt;
&#039;&#039;&#039;Undo&#039;&#039;&#039;  Control + Z&lt;br /&gt;
&#039;&#039;&#039;UnSelectSelection&#039;&#039;&#039;  Escape&lt;br /&gt;
&#039;&#039;&#039;UpFloor&#039;&#039;&#039;  PageUp&lt;br /&gt;
&#039;&#039;&#039;VehicleGroup&#039;&#039;&#039;  Shift + V&lt;br /&gt;
&#039;&#039;&#039;VertEdit&#039;&#039;&#039;  G&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Down&#039;&#039;&#039;  Control + Down&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Up&#039;&#039;&#039;  Control + Up&lt;br /&gt;
&#039;&#039;&#039;ViewConsole&#039;&#039;&#039;  O&lt;br /&gt;
&#039;&#039;&#039;ViewEntityInfo&#039;&#039;&#039;  N&lt;br /&gt;
&#039;&#039;&#039;ViewFilters&#039;&#039;&#039;  F&lt;br /&gt;
&#039;&#039;&#039;ViewTextures&#039;&#039;&#039;  T&lt;br /&gt;
&#039;&#039;&#039;ZoomIn&#039;&#039;&#039;  Delete&lt;br /&gt;
&#039;&#039;&#039;ZoomOut&#039;&#039;&#039;  Insert&lt;br /&gt;
&#039;&#039;&#039;ZZoomIn&#039;&#039;&#039;  Control + Delete&lt;br /&gt;
&#039;&#039;&#039;ZZoomOut&#039;&#039;&#039;  Control + Insert&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2342</id>
		<title>Call of Duty 4: Radiant Hotkey Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Radiant_Hotkey_Reference&amp;diff=2342"/>
		<updated>2008-11-04T17:17:18Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Removed some unused shortcuts, sorted alphabetically.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Technical Reference]]&lt;br /&gt;
[[Image:Nutshell.png]] These are the default hot key commands for &#039;&#039;Call of Duty 4&#039;&#039; Radiant level editing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;AddTerrainRow&#039;&#039;&#039;  Shift + Control + A&lt;br /&gt;
&#039;&#039;&#039;AdvancedCurveEdit&#039;&#039;&#039;  Y&lt;br /&gt;
&#039;&#039;&#039;ApplyPatchCap&#039;&#039;&#039;  Shift + Control + P&lt;br /&gt;
&#039;&#039;&#039;AssociateEntities&#039;&#039;&#039;  Shift + G&lt;br /&gt;
&#039;&#039;&#039;AutoCaulk&#039;&#039;&#039;  Alt + C&lt;br /&gt;
&#039;&#039;&#039;AutoEdgeTurn&#039;&#039;&#039;  Alt + F2&lt;br /&gt;
&#039;&#039;&#039;CameraAngleDown&#039;&#039;&#039;  Z&lt;br /&gt;
&#039;&#039;&#039;CameraAngleUp&#039;&#039;&#039;  A&lt;br /&gt;
&#039;&#039;&#039;CameraBack&#039;&#039;&#039;  Down&lt;br /&gt;
&#039;&#039;&#039;CameraDown&#039;&#039;&#039;  C&lt;br /&gt;
&#039;&#039;&#039;CameraForward&#039;&#039;&#039;  Up&lt;br /&gt;
&#039;&#039;&#039;CameraLeft&#039;&#039;&#039;  Left&lt;br /&gt;
&#039;&#039;&#039;CameraRight&#039;&#039;&#039;  Right&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeLeft&#039;&#039;&#039;  Comma&lt;br /&gt;
&#039;&#039;&#039;CameraStrafeRight&#039;&#039;&#039;  Period&lt;br /&gt;
&#039;&#039;&#039;CameraUp&#039;&#039;&#039;  D&lt;br /&gt;
&#039;&#039;&#039;CapCurrentCurve&#039;&#039;&#039;  Shift + C&lt;br /&gt;
&#039;&#039;&#039;Center2DOnCamera&#039;&#039;&#039;  Alt + X&lt;br /&gt;
&#039;&#039;&#039;CenterView&#039;&#039;&#039;  End&lt;br /&gt;
&#039;&#039;&#039;ClipSelected&#039;&#039;&#039;  Return&lt;br /&gt;
&#039;&#039;&#039;CloneSelection&#039;&#039;&#039;  Space&lt;br /&gt;
&#039;&#039;&#039;ConnectSelection&#039;&#039;&#039;  W&lt;br /&gt;
&#039;&#039;&#039;Copy&#039;&#039;&#039;  Control + C&lt;br /&gt;
&#039;&#039;&#039;CSGMerge&#039;&#039;&#039;  Control + U&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomIn&#039;&#039;&#039;  Control + [&lt;br /&gt;
&#039;&#039;&#039;CubicClipZoomOut&#039;&#039;&#039;  Control + ]&lt;br /&gt;
&#039;&#039;&#039;CycleCapTexturePatch&#039;&#039;&#039;  Shift + Control + N&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightDown&#039;&#039;&#039;  Alt + Comma&lt;br /&gt;
&#039;&#039;&#039;CyclinderHeightUp&#039;&#039;&#039;  Alt + Period&lt;br /&gt;
&#039;&#039;&#039;DecPatchColumn&#039;&#039;&#039;  Shift + Control + Subtract&lt;br /&gt;
&#039;&#039;&#039;DecPatchRow&#039;&#039;&#039;  Control + Subtract&lt;br /&gt;
&#039;&#039;&#039;DeleteSelection&#039;&#039;&#039;  Backspace&lt;br /&gt;
&#039;&#039;&#039;DisassociateEntities&#039;&#039;&#039;  Shift + Control + G&lt;br /&gt;
&#039;&#039;&#039;DownFloor&#039;&#039;&#039;  PageDown&lt;br /&gt;
&#039;&#039;&#039;DragEdges&#039;&#039;&#039;  E&lt;br /&gt;
&#039;&#039;&#039;DragVertices&#039;&#039;&#039;  V&lt;br /&gt;
&#039;&#039;&#039;DropVertices&#039;&#039;&#039;  Shift + Alt + Control + D&lt;br /&gt;
&#039;&#039;&#039;DynEntities&#039;&#039;&#039;  Shift + Y&lt;br /&gt;
&#039;&#039;&#039;EnterPrefab&#039;&#039;&#039;  Alt + PageDown&lt;br /&gt;
&#039;&#039;&#039;EntityColor&#039;&#039;&#039;  K&lt;br /&gt;
&#039;&#039;&#039;ExtrudeTerrainRow&#039;&#039;&#039;  Alt + O&lt;br /&gt;
&#039;&#039;&#039;FileOpen&#039;&#039;&#039;  Control + O&lt;br /&gt;
&#039;&#039;&#039;FileSave&#039;&#039;&#039;  Control + S&lt;br /&gt;
&#039;&#039;&#039;FitBrush&#039;&#039;&#039;  Shift + B&lt;br /&gt;
&#039;&#039;&#039;FlipClip&#039;&#039;&#039;  Control + Return&lt;br /&gt;
&#039;&#039;&#039;GetDistance&#039;&#039;&#039;  Alt + F1&lt;br /&gt;
&#039;&#039;&#039;GridDown&#039;&#039;&#039;  [&lt;br /&gt;
&#039;&#039;&#039;GridUp&#039;&#039;&#039;  ]&lt;br /&gt;
&#039;&#039;&#039;HideByClassname&#039;&#039;&#039;  Shift + Alt + Control + H&lt;br /&gt;
&#039;&#039;&#039;HideSelected&#039;&#039;&#039;  H&lt;br /&gt;
&#039;&#039;&#039;HideUnSelected&#039;&#039;&#039;  Alt + H&lt;br /&gt;
&#039;&#039;&#039;IncPatchColumn&#039;&#039;&#039;  Shift + Control + Plus&lt;br /&gt;
&#039;&#039;&#039;IncPatchRow&#039;&#039;&#039;  Control + Plus&lt;br /&gt;
&#039;&#039;&#039;InvertCurve&#039;&#039;&#039;  Control + I&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureX&#039;&#039;&#039;  Shift + Control + I&lt;br /&gt;
&#039;&#039;&#039;InvertCurveTextureY&#039;&#039;&#039;  Shift + I&lt;br /&gt;
&#039;&#039;&#039;InvertSelection&#039;&#039;&#039;  I&lt;br /&gt;
&#039;&#039;&#039;LeavePrefab&#039;&#039;&#039;  Alt + PageUp&lt;br /&gt;
&#039;&#039;&#039;LightPreviewClear&#039;&#039;&#039;  Alt + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewRegions&#039;&#039;&#039;  Shift + Control + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStart&#039;&#039;&#039;  Shift + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewStop&#039;&#039;&#039;  Shift + Alt + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewSun&#039;&#039;&#039;  Control + F8&lt;br /&gt;
&#039;&#039;&#039;LightPreviewToggle&#039;&#039;&#039;  F8&lt;br /&gt;
&#039;&#039;&#039;LightShiftDown&#039;&#039;&#039;  Alt + [&lt;br /&gt;
&#039;&#039;&#039;LightShiftUp&#039;&#039;&#039;  Alt + ]&lt;br /&gt;
&#039;&#039;&#039;LinkSelected&#039;&#039;&#039;  Alt + Q&lt;br /&gt;
&#039;&#039;&#039;LinkSelectionToggle&#039;&#039;&#039;  Shift + O&lt;br /&gt;
&#039;&#039;&#039;MakeDetail&#039;&#039;&#039;  Shift + Control + D&lt;br /&gt;
&#039;&#039;&#039;MakeNonColliding&#039;&#039;&#039;  Shift + Control + Minus&lt;br /&gt;
&#039;&#039;&#039;MakeStructural&#039;&#039;&#039;  Shift + Control + S&lt;br /&gt;
&#039;&#039;&#039;MakeWeaponClip&#039;&#039;&#039;  Shift + Control + W&lt;br /&gt;
&#039;&#039;&#039;MapInfo&#039;&#039;&#039;  M&lt;br /&gt;
&#039;&#039;&#039;MaxLightIntensity&#039;&#039;&#039;  Alt + Control + F8&lt;br /&gt;
&#039;&#039;&#039;MouseRotate&#039;&#039;&#039;  R&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionDOWN&#039;&#039;&#039;  Subtract&lt;br /&gt;
&#039;&#039;&#039;MoveSelectionUP&#039;&#039;&#039;  Plus&lt;br /&gt;
&#039;&#039;&#039;NaturalizePatch&#039;&#039;&#039;  Control + N&lt;br /&gt;
&#039;&#039;&#039;NextLeakSpot&#039;&#039;&#039;  Shift + Control + K&lt;br /&gt;
&#039;&#039;&#039;NextView Control&#039;&#039;&#039;  + Tab&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftDown&#039;&#039;&#039;  Shift + [&lt;br /&gt;
&#039;&#039;&#039;OverBrightShiftUp&#039;&#039;&#039;  Shift + ]&lt;br /&gt;
&#039;&#039;&#039;Paste&#039;&#039;&#039;  Control + V&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Shift + Tab&lt;br /&gt;
&#039;&#039;&#039;Patch TAB&#039;&#039;&#039;  Tab&lt;br /&gt;
&#039;&#039;&#039;PatchInspector&#039;&#039;&#039;  Shift + S&lt;br /&gt;
&#039;&#039;&#039;PatchMatrixTranspose&#039;&#039;&#039;  Shift + Control + M&lt;br /&gt;
&#039;&#039;&#039;Preferences&#039;&#039;&#039;  P&lt;br /&gt;
&#039;&#039;&#039;PrevLeakSpot&#039;&#039;&#039;  Shift + Control + L&lt;br /&gt;
&#039;&#039;&#039;RedisperseCols&#039;&#039;&#039;  Shift + Control + E&lt;br /&gt;
&#039;&#039;&#039;RedisperseRows&#039;&#039;&#039;  Shift + E&lt;br /&gt;
&#039;&#039;&#039;RedisperseVertices&#039;&#039;&#039;  Shift + F&lt;br /&gt;
&#039;&#039;&#039;Redo Control&#039;&#039;&#039;  + Y&lt;br /&gt;
&#039;&#039;&#039;RefreshTextures&#039;&#039;&#039;  F5&lt;br /&gt;
&#039;&#039;&#039;RemoveColorNode&#039;&#039;&#039;  Control + R&lt;br /&gt;
&#039;&#039;&#039;RemoveTerrainRow&#039;&#039;&#039;  Shift + Control + Q&lt;br /&gt;
&#039;&#039;&#039;RotateZ&#039;&#039;&#039;  Shift + D&lt;br /&gt;
&#039;&#039;&#039;SameTarget&#039;&#039;&#039;  Control + B&lt;br /&gt;
&#039;&#039;&#039;SameTargetname&#039;&#039;&#039;  B&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfType&#039;&#039;&#039;  Shift + A&lt;br /&gt;
&#039;&#039;&#039;SelectAllOfTypeRecurse&#039;&#039;&#039;  Alt + A&lt;br /&gt;
&#039;&#039;&#039;SelectConnectedEntities&#039;&#039;&#039;  Alt + Control + E&lt;br /&gt;
&#039;&#039;&#039;SelectedAssociated&#039;&#039;&#039;  Control + X&lt;br /&gt;
&#039;&#039;&#039;SelectionKeyValue&#039;&#039;&#039;  Shift + Control + F&lt;br /&gt;
&#039;&#039;&#039;SelectNext&#039;&#039;&#039;  Shift + Period&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeDown&#039;&#039;&#039;  Alt + Down&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeLeft&#039;&#039;&#039;  Alt + Left&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeRight&#039;&#039;&#039;  Alt + Right&lt;br /&gt;
&#039;&#039;&#039;SelectNudgeUp&#039;&#039;&#039;  Alt + Up&lt;br /&gt;
&#039;&#039;&#039;SelectPrev&#039;&#039;&#039;  Shift + Comma&lt;br /&gt;
&#039;&#039;&#039;SelectSnapPointsToGrid&#039;&#039;&#039;  Control + G&lt;br /&gt;
&#039;&#039;&#039;SelectTargettedEntities&#039;&#039;&#039;  Control + E&lt;br /&gt;
&#039;&#039;&#039;SetGrid1&#039;&#039;&#039;  1&lt;br /&gt;
&#039;&#039;&#039;SetGrid16&#039;&#039;&#039;  5&lt;br /&gt;
&#039;&#039;&#039;SetGrid2&#039;&#039;&#039;  2&lt;br /&gt;
&#039;&#039;&#039;SetGrid256&#039;&#039;&#039;  8&lt;br /&gt;
&#039;&#039;&#039;SetGrid32&#039;&#039;&#039;  6&lt;br /&gt;
&#039;&#039;&#039;SetGrid4&#039;&#039;&#039;  3&lt;br /&gt;
&#039;&#039;&#039;SetGrid512&#039;&#039;&#039;  9&lt;br /&gt;
&#039;&#039;&#039;SetGrid64&#039;&#039;&#039;  7&lt;br /&gt;
&#039;&#039;&#039;SetGrid8&#039;&#039;&#039;  4&lt;br /&gt;
&#039;&#039;&#039;SetGridPointFive&#039;&#039;&#039;  ~&lt;br /&gt;
&#039;&#039;&#039;SetViewToEntity&#039;&#039;&#039;  F6&lt;br /&gt;
&#039;&#039;&#039;ShowAllTextures&#039;&#039;&#039;  Control + A&lt;br /&gt;
&#039;&#039;&#039;ShowHidden&#039;&#039;&#039;  Shift + H&lt;br /&gt;
&#039;&#039;&#039;ShowLastHidden&#039;&#039;&#039;  Shift + Control + H&lt;br /&gt;
&#039;&#039;&#039;ShowTexturesInUse&#039;&#039;&#039;  U&lt;br /&gt;
&#039;&#039;&#039;SplaySelection&#039;&#039;&#039;  Alt + W&lt;br /&gt;
&#039;&#039;&#039;SplitPatch&#039;&#039;&#039;  Shift + Control + X&lt;br /&gt;
&#039;&#039;&#039;SplitSelected&#039;&#039;&#039;  Shift + Return&lt;br /&gt;
&#039;&#039;&#039;SurfaceInspector&#039;&#039;&#039;  S&lt;br /&gt;
&#039;&#039;&#039;TexDecrement&#039;&#039;&#039;  Shift + Subtract&lt;br /&gt;
&#039;&#039;&#039;TexIncrement&#039;&#039;&#039;  Shift + Plus&lt;br /&gt;
&#039;&#039;&#039;TexLayerCycle&#039;&#039;&#039;  Shift + L&lt;br /&gt;
&#039;&#039;&#039;TexRotateClock&#039;&#039;&#039;  Control + Left&lt;br /&gt;
&#039;&#039;&#039;TexRotateCounter&#039;&#039;&#039;  Control + Right&lt;br /&gt;
&#039;&#039;&#039;TexScaleLeft&#039;&#039;&#039;  Control + Left&lt;br /&gt;
&#039;&#039;&#039;TexScaleRight&#039;&#039;&#039;  Control + Right&lt;br /&gt;
&#039;&#039;&#039;TexShiftDown&#039;&#039;&#039;  Shift + Down&lt;br /&gt;
&#039;&#039;&#039;TexShiftLeft&#039;&#039;&#039;  Shift + Left&lt;br /&gt;
&#039;&#039;&#039;TexShiftRight&#039;&#039;&#039;  Shift + Right&lt;br /&gt;
&#039;&#039;&#039;TexShiftUp&#039;&#039;&#039;  Shift + Up&lt;br /&gt;
&#039;&#039;&#039;TextureFit&#039;&#039;&#039;  Control + F&lt;br /&gt;
&#039;&#039;&#039;TextureFitAll&#039;&#039;&#039;  Alt + Control + F&lt;br /&gt;
&#039;&#039;&#039;ThickenPatch&#039;&#039;&#039;  Shift + Control + T&lt;br /&gt;
&#039;&#039;&#039;ToggleCamera&#039;&#039;&#039;  Shift + Control + C&lt;br /&gt;
&#039;&#039;&#039;ToggleClipper&#039;&#039;&#039;  X&lt;br /&gt;
&#039;&#039;&#039;ToggleCrosshairs&#039;&#039;&#039;  Shift + X&lt;br /&gt;
&#039;&#039;&#039;ToggleCubicClip&#039;&#039;&#039;  Control + \&lt;br /&gt;
&#039;&#039;&#039;ToggleGrid&#039;&#039;&#039;  0&lt;br /&gt;
&#039;&#039;&#039;ToggleLayeredMaterialWnd&#039;&#039;&#039;  F4&lt;br /&gt;
&#039;&#039;&#039;ToggleLayers&#039;&#039;&#039;  L&lt;br /&gt;
&#039;&#039;&#039;ToggleLockPatchVertices&#039;&#039;&#039;  Control + Period&lt;br /&gt;
&#039;&#039;&#039;ToggleOutlineDraw&#039;&#039;&#039;  J&lt;br /&gt;
&#039;&#039;&#039;TogglePatchWireframes&#039;&#039;&#039;  Shift + W&lt;br /&gt;
&#039;&#039;&#039;ToggleSnapToGrid&#039;&#039;&#039;  Alt + Control + G&lt;br /&gt;
&#039;&#039;&#039;ToggleTexMoveLock&#039;&#039;&#039;  Shift + T&lt;br /&gt;
&#039;&#039;&#039;ToggleTexRotateLock&#039;&#039;&#039;  Shift + R&lt;br /&gt;
&#039;&#039;&#039;ToggleTintDraw Shift&#039;&#039;&#039;  + J&lt;br /&gt;
&#039;&#039;&#039;ToggleTurnTerrainEdges&#039;&#039;&#039;  Control + ¿&lt;br /&gt;
&#039;&#039;&#039;ToggleUnlockPatchVertices&#039;&#039;&#039;  Shift + Control + Period&lt;br /&gt;
&#039;&#039;&#039;ToggleView&#039;&#039;&#039;  Shift + Control + V&lt;br /&gt;
&#039;&#039;&#039;ToggleZ&#039;&#039;&#039;  Shift + Control + Z&lt;br /&gt;
&#039;&#039;&#039;TolerantWeld&#039;&#039;&#039;  Shift + Control + J&lt;br /&gt;
&#039;&#039;&#039;Undo&#039;&#039;&#039;  Control + Z&lt;br /&gt;
&#039;&#039;&#039;UnSelectSelection&#039;&#039;&#039;  Escape&lt;br /&gt;
&#039;&#039;&#039;UpFloor&#039;&#039;&#039;  PageUp&lt;br /&gt;
&#039;&#039;&#039;VehicleGroup&#039;&#039;&#039;  Shift + V&lt;br /&gt;
&#039;&#039;&#039;VertEdit&#039;&#039;&#039;  G&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Down&#039;&#039;&#039;  Control + Down&lt;br /&gt;
&#039;&#039;&#039;Vertex Select Up&#039;&#039;&#039;  Control + Up&lt;br /&gt;
&#039;&#039;&#039;ViewConsole&#039;&#039;&#039;  O&lt;br /&gt;
&#039;&#039;&#039;ViewEntityInfo&#039;&#039;&#039;  N&lt;br /&gt;
&#039;&#039;&#039;ViewFilters&#039;&#039;&#039;  F&lt;br /&gt;
&#039;&#039;&#039;ViewTextures&#039;&#039;&#039;  T&lt;br /&gt;
&#039;&#039;&#039;ZoomIn&#039;&#039;&#039;  Delete&lt;br /&gt;
&#039;&#039;&#039;ZoomOut&#039;&#039;&#039;  Insert&lt;br /&gt;
&#039;&#039;&#039;ZZoomIn&#039;&#039;&#039;  Control + Delete&lt;br /&gt;
&#039;&#039;&#039;ZZoomOut&#039;&#039;&#039;  Control + Insert&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Partial_Fastfile_Decompile&amp;diff=2341</id>
		<title>Call of Duty 4: Partial Fastfile Decompile</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Partial_Fastfile_Decompile&amp;diff=2341"/>
		<updated>2008-11-04T17:04:29Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Added By Sprinter&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Unpack.png|center]]&lt;br /&gt;
&lt;br /&gt;
This tutorial allows you to extract any file from a fastfile that was compressed using the rawfile,filename format. That includes:&lt;br /&gt;
&lt;br /&gt;
 .gsc (gametype script)&lt;br /&gt;
 .txt (e.g gametype definitions file)&lt;br /&gt;
 .script (e.g playeranim.script)&lt;br /&gt;
 .vision (map/mod vision files)&lt;br /&gt;
 .shock (shellshock files)&lt;br /&gt;
 .atr (animtrees)&lt;br /&gt;
&lt;br /&gt;
[[Image:Data.png]][http://mh-nexus.de/en/hxd/ HxD]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]][https://www.simplyzip.com/ SimplyZip]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Sprinter|Sprinter]] 20:13, 16 October 2008 (UTC)&lt;br /&gt;
--[[User:Novemberdobby|Novemberdobby]] 17:04, 4 November 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Partial_Fastfile_Decompile&amp;diff=2340</id>
		<title>Call of Duty 4: Partial Fastfile Decompile</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Partial_Fastfile_Decompile&amp;diff=2340"/>
		<updated>2008-11-04T17:04:06Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: added rawfile info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;Added By Sprinter&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Unpack.png|center]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Data.png]][http://mh-nexus.de/en/hxd/ HxD]&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]][https://www.simplyzip.com/ SimplyZip]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This tutorial allows you to extract any file from a fastfile that was compressed using the rawfile,filename format. That includes:&lt;br /&gt;
&lt;br /&gt;
 .gsc (gametype script)&lt;br /&gt;
 .txt (e.g gametype definitions file)&lt;br /&gt;
 .script (e.g playeranim.script)&lt;br /&gt;
 .vision (map/mod vision files)&lt;br /&gt;
 .shock (shellshock files)&lt;br /&gt;
 .atr (animtrees)&lt;br /&gt;
&lt;br /&gt;
--[[User:Sprinter|Sprinter]] 20:13, 16 October 2008 (UTC)&lt;br /&gt;
--[[User:Novemberdobby|Novemberdobby]] 17:04, 4 November 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_GSCRip&amp;diff=2107</id>
		<title>Call of Duty 5: Beta GSCRip</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_GSCRip&amp;diff=2107"/>
		<updated>2008-10-29T13:50:17Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 5 Beta]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
&#039;&#039;By NovemberDobby&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the files I&#039;ve been able to get out of the demo. Organised in folders by the names of the fastfiles, and I&#039;ll work on getting the csv&#039;s out too (challenge names and rank tables).&lt;br /&gt;
&lt;br /&gt;
[[Image:dobby_rip.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]] [http://www.novemberdobby.com/files/rips/strings.txt Localised strings]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]] [http://wiki.modsrepository.com/codww_betafiles/WWrip.zip Rip#1]&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]] [http://www.novemberdobby.com/files/rips/WWrip.zip MIRROR - been updated a few times]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_GSCRip&amp;diff=2004</id>
		<title>Call of Duty 5: Beta GSCRip</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_5:_Beta_GSCRip&amp;diff=2004"/>
		<updated>2008-10-28T19:36:05Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: added strings file&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;By NovemberDobby&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Here are the files I&#039;ve been able to get out of the demo. Organised in folders by the names of the fastfiles, and I&#039;ll work on getting the csv&#039;s out too (challenge names and rank tables).&lt;br /&gt;
&lt;br /&gt;
[[Image:dobby_rip.png|500px]]&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
[http://www.novemberdobby.com/files/rips/strings.txt Localised strings] &lt;br /&gt;
&lt;br /&gt;
[[Image:Data.png]] [http://wiki.modsrepository.com/codww_betafiles/WWrip.zip HERE]&amp;lt;br&amp;gt;&lt;br /&gt;
Mirror:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Data.png]] [http://www.novemberdobby.com/files/rips/WWrip.zip HERE]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=1895</id>
		<title>Call of Duty 4: Custom Textures</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Custom_Textures&amp;diff=1895"/>
		<updated>2008-10-25T12:18:07Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Advanced Editing]]&lt;br /&gt;
{{warning_forpro}}&lt;br /&gt;
&#039;&#039;By NovemberDobbby&#039;&#039;&lt;br /&gt;
[[Image:Nutshell.png]] This tutorial will show you how to add a new custom texture to the game, that can be used in Radiant.&lt;br /&gt;
&lt;br /&gt;
 [[Image:warning.png]] Custom textures will show as white unless you are running a mod, as textures must be stored in an IWD archive. &lt;br /&gt;
[[Image:rgn_warning.png|right]]&lt;br /&gt;
    The game won&#039;t read custom IWD&#039;s at all unless a mod is running.&lt;br /&gt;
&lt;br /&gt;
* First, you need a texture to work with. the compiler can use dds, tga, jpg, and jpeg extensions, NOT iwi&#039;s.&lt;br /&gt;
&lt;br /&gt;
* Open the Cod4CompileTools, go to the Applications tab and launcher the Asset Manager.&lt;br /&gt;
&lt;br /&gt;
* In Asset Manager&#039;s scrolling menu, go to material, and select new entry. Think of a name without any spaces, something which has meaning like vcod_snow_1.&lt;br /&gt;
&lt;br /&gt;
* Make sure the material type &#039;world phong&#039; is selected. It should be selected by default. Leave the &#039;sort&#039; drop-down box on *default for now. Pick any surfaceType - this determines how your texture will react to bulllets hitting it and stuff (sounds/fx). &#039;Error&#039; won&#039;t work, and picking &#039;none&#039; is inadvisable.&lt;br /&gt;
&lt;br /&gt;
* The Usage drop-down menu will be where you can find your texture in Radiant, when you go to Textures&amp;gt;Usage.&lt;br /&gt;
&lt;br /&gt;
* In the &#039;locales&#039; section, you can pick a &#039;folder&#039; from which you&#039;ll be able to access the texture in Radiant&#039;s texture menu. (Textures&amp;gt;Locale&amp;gt;Name). You can pick as many of these as you want, or none. You dno&#039;t have to however, because you can still get to your texture through Textures&amp;gt;Usage.&lt;br /&gt;
&lt;br /&gt;
* In the &#039;Color Map&#039; option box, click the ellipses (...) button on the right of the text box. Navigate to your dds/jpg/tga texture and open it. You should put this texture in a \Call of Duty 4\subdirectory, for example, Call of Duty 4\source_data.&lt;br /&gt;
&lt;br /&gt;
* If you have a Normal Map (makes it look 3d/bumpy) for your texture, click the ellipses next to the Normal Map box, and navigate to that file. It must be an uncompressed RGB format, such as a .tga.&lt;br /&gt;
&lt;br /&gt;
* Go to File&amp;gt;Save, and put the GDT file in \Call of Duty 4\source_data. Give it any name, bearing in mind you will have to open this file again if you want to change/reconvert this texture.&lt;br /&gt;
&lt;br /&gt;
 Note: The .gdt will only compile from /source_data. Any other folder will just give a &#039;conversion complete&#039; message.&lt;br /&gt;
&lt;br /&gt;
* Go to PC Convert&amp;gt;Current Asset only, or hit F10. You only convert the current entry because you don&#039;t want to be converting every single stock asset that came with the mod tools.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;You should see something like this:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:custom_669.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 [[Image:warning.png]] if there are any errors, do what it says.&lt;br /&gt;
&lt;br /&gt;
It will only re-convert if you have changed the input texture filename, changed the texture itself, or any other option in Asset Manager.&lt;br /&gt;
&lt;br /&gt;
You can now use your texture in Radiant, by finding it under your chosen materialType/usage. If your texture appears gritty at a distance, then open up the image editing program you used to save it in, and make sure Mipmaps are generated (and reconvert).&lt;br /&gt;
&lt;br /&gt;
Distortion textures can be added by setting the materialType to distortion, and finding a colour map.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Skinning&amp;diff=1890</id>
		<title>Call of Duty 4: Skinning</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Skinning&amp;diff=1890"/>
		<updated>2008-10-24T13:59:19Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Nutshell.png]] This tutorial will explain how to replace Stock Skins for any models in the game.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
*Adobe Photoshop (or other graphics program that supports the DDS plugin)&lt;br /&gt;
*Winrar&lt;br /&gt;
*The [[Call of Duty 4: Skinning Tools|Skinning Tools]] &lt;br /&gt;
*Call of Duty 4 Modern Warfare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Initial Setup ==&lt;br /&gt;
*Open up cod4_converters.zip and extract the dds.8bi file (DDS plugin) into adobe\photoshop\plug-ins\File Formats (If the plugin is not installed you will be unable to open or save a .dds file)&lt;br /&gt;
&lt;br /&gt;
*Create a new folder on your desktop and call it “Skinning Tools”&lt;br /&gt;
&lt;br /&gt;
*Copy the two converters (iwi2dds.exe and dds2iwi.exe) into this new folder&lt;br /&gt;
&lt;br /&gt;
== File selection ==&lt;br /&gt;
Go to &lt;br /&gt;
 &lt;br /&gt;
 Activision\Call of Duty 4 – Modern Warfare\main&lt;br /&gt;
In this folder you should see 14 IW_ files going from IW_00 up to IW_13 the skins are located inside IW_00 – IW_04 (IW_12 stores IWI files used in the map mp_crash_snow and IW_13 stores IWI files used in the 4 maps released in patch 1.6) if you open up these archives you will see a folder called “images” this is where the IWI files are stored.&lt;br /&gt;
&lt;br /&gt;
The IWI image files have been compiled in alphabetical order:&lt;br /&gt;
&lt;br /&gt;
 IW_00.iwd contains files beginning with # to Ch &lt;br /&gt;
 IW_01.iwd contains files beginning with Ch to Ma &lt;br /&gt;
 IW_02.iwd contains files beginning with Ma to Sa &lt;br /&gt;
 IW_03.iwd contains files beginning with Sa to Ve &lt;br /&gt;
 IW_04.iwd contains files beginning with Ve to Z &lt;br /&gt;
&lt;br /&gt;
*Once you have decided upon which file you are wanting to skin, extract it from the .iwd to your “Skinning Tools” folder you created earlier. This should create a folder inside there called “Images”. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Conversion 1==&lt;br /&gt;
Take the file from the folder “images” and drag and drop it onto the &#039;&#039;iwi2dds.exe&#039;&#039; file.&lt;br /&gt;
&lt;br /&gt;
This will create a second file with an almost identical name however it will have _out.dds at the end of it.This file can now be edited in photoshop.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File editing ==&lt;br /&gt;
Double click on the new file and it should open it in photoshop. When photoshop loads up a number of boxes may appear asking certain questions.&lt;br /&gt;
&lt;br /&gt;
It may ask you to choose the size of the image if so choose “normal default sizes”&lt;br /&gt;
&lt;br /&gt;
It may ask you if you would like to display MIP maps with the image, select “no” if this message appears&lt;br /&gt;
&lt;br /&gt;
Now this is open you can edit the skin.&lt;br /&gt;
&lt;br /&gt;
Useful tools to use in Photoshop for the editing are:&lt;br /&gt;
&lt;br /&gt;
 Opacity level &lt;br /&gt;
 Eraser tool &lt;br /&gt;
 Blending options &lt;br /&gt;
 Magic Pen &lt;br /&gt;
 Alpha Channels &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Saving ==&lt;br /&gt;
Now that you have the file edited you now need to save it. To do this go to File &amp;gt; save as and then select to save as a .dds file.&lt;br /&gt;
&lt;br /&gt;
*Once you have done that a window should appear asking you how you would like to save the .dds file. The only two options you should be interested in unless you are experienced with it are:&lt;br /&gt;
&lt;br /&gt;
 Save format&lt;br /&gt;
 MIP Maps &lt;br /&gt;
&lt;br /&gt;
*Save format should be set to DXT5 and MIP Maps should be set to Generate MIP Maps&lt;br /&gt;
&lt;br /&gt;
*Once this is done click save in the bottom right corner of the window&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== File Conversion 2 ==&lt;br /&gt;
Now you have your file saved and edited it is now time to convert the file back to an IWI file.&lt;br /&gt;
&lt;br /&gt;
*To do this take your .dds file and drag and drop it onto dds2iwi.exe this will then produce a new file which is your new skin in a format that Call of Duty 4 can use&lt;br /&gt;
&lt;br /&gt;
*Before you archive the file however you need to ensure that the name is correct. You should rename the file back to what it originally was called before you started to edit it. This will normally be something like “weapons_ak47_c.iwi”&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Archiving the file ==&lt;br /&gt;
To archieve the file and create a working skin you need to copy your newly renamed IWI file into activision\Call of Duty 4 – Modern Warfare\mods\Modwarfare\images then once thast is done you need to go into the modwarfare folder and double click the makemod icon.&lt;br /&gt;
&lt;br /&gt;
This will create two files. One called mod.ff and another called modwarfare.iwd copy both of these files into a new mod folder (call it what you like so long as there are no spaces in the folder name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Checking the skins work ==&lt;br /&gt;
To check the skins work you now need to load up Call of Duty 4 Multiplayer and then on the Main Menu you need to select Mods and then find the folder name you chose and select it again.&lt;br /&gt;
&lt;br /&gt;
When the mod screen loads, bring up the console ( ` key) and then run /devmap (map name e.g. mp_crash) to run the map in developer mode this will then allow you to change the viewpoint you see your skin at etc.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Models_imports&amp;diff=1888</id>
		<title>Call of Duty 4: Models imports</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Models_imports&amp;diff=1888"/>
		<updated>2008-10-24T13:54:25Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Advanced Editing]]&lt;br /&gt;
[[Category:Import]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
{{warning_forpro}}&lt;br /&gt;
[[Image:rgn_warning.png|right]]&lt;br /&gt;
[[Image:Nutshell.png]] This tutorial will explain how you can import Call of Duty 2 models into Cod4 to use in your custom maps.&lt;br /&gt;
&lt;br /&gt;
Result:&lt;br /&gt;
&lt;br /&gt;
[[Image:jeep.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
==Required==&lt;br /&gt;
&lt;br /&gt;
First you will need a few programs:&lt;br /&gt;
&lt;br /&gt;
*XModel Creator for CoD2 V0.6, get it [http://www.zeroy.com/br/other/cod4/tutorials/model_export/xmodel_Creator_v0.6.zip here]&lt;br /&gt;
*XModel Exporter V5.0.0.3, get it [http://www.diegologic.net/CoD/XmodelExporter.htm here]&lt;br /&gt;
*IrfanView, get it [http://www.irfanview.com here]&lt;br /&gt;
&lt;br /&gt;
 Note: the programs above are freely available.&lt;br /&gt;
&lt;br /&gt;
*A legal copy of Call of Duty 2 by Activision&lt;br /&gt;
&lt;br /&gt;
*Get Call of duty 2 installed on your PC and extract &#039;&#039;&#039;all&#039;&#039;&#039; the .iwd found in /main/ to \Call of Duty 2\raw (if raw folder isnt there then create it). Not sure if they are required but to be on the safe side install the Cod2 mod tools as well, get them [http://callofduty.filefront.com/file/CoD2_Updated_MapMod_Tools;61008 here]&lt;br /&gt;
&lt;br /&gt;
Of course this also assume you have Call of Duty 4 [[Call of Duty 4: needed#Modtools|Modtools]] installed&lt;br /&gt;
&lt;br /&gt;
==Exporting the chosen model to .OBJ==&lt;br /&gt;
&lt;br /&gt;
A - Open XModel Exporter and point to \Call of Duty 2\raw\xmodels, a list of model will show up, pick the one you wish to import in Cod4&lt;br /&gt;
&lt;br /&gt;
B - Export Material images as dds by clicking on each .iwi file in the three and using the &amp;quot;convert to DDS&amp;quot; button&lt;br /&gt;
&lt;br /&gt;
Once done, you can pick the first model in list, its usually either _high or _lod10 and hit &amp;quot;Preview Surface&amp;quot; to see the textured model:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:importcod2_01.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
C - When happy with the Model to export click the &amp;quot;Export .OBJ&amp;quot; Button&lt;br /&gt;
&lt;br /&gt;
D - Keep XModel Exporter open on that same model as you will need it again later&lt;br /&gt;
&lt;br /&gt;
==Convert Material(s) to .TGA==&lt;br /&gt;
&lt;br /&gt;
A - Browse to \Call of Duty 2\raw\images and look for the most recent files modified you should find the newly converted .dds:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:importcod2_02.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
B - Open the DDS files one at the time using IrFanview (if you converted more than one) and save the file as .TGA in \Call of Duty 4 - Modern Warfare\texture_assets (create texture_assets if not already there) NOTE: dont touch any options when saving as .TGA&lt;br /&gt;
&lt;br /&gt;
C - Open up IW Cod4 Asset Manager and select material from drop down list and hit &amp;quot;New Entry&amp;quot;, for the name it is VERY important to select the same as the original name used in Cod2 for the chosen Model, in my example its &#039;&#039;mtl_detail_lantern&#039;&#039; - Use Xmodel Exporter (still open) to double check &#039;&#039;mtl_ name&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Use the settings sen in screenshot below for each .tga you need to import in cod4, changing the Surface Type to appropriate in your case (Metal in my example):&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:importcod2_03.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once ready, hit F10 to convert the asset, repeat if there is more than one material to create (some models have several)&lt;br /&gt;
&lt;br /&gt;
==Convert .OBJ back to xmodel_export==&lt;br /&gt;
&lt;br /&gt;
A - Browse to \Call of Duty 2\raw\obj\ where you should find 3 files created earlier, in my case they are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;lantern_exterior_on_lod10.mtl&lt;br /&gt;
lantern_exterior_on_lod10.obj&lt;br /&gt;
light_lantern_on_tags.txt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Copy all 3 files over to \Call of Duty 4 - Modern Warfare\model_export\custom\ (create custom folder is not present)&lt;br /&gt;
&lt;br /&gt;
B - Open XModel Creator (Midi file plays quite loud!) , in &amp;quot;input&amp;quot; browse and select the .obj in \Call of Duty 4 - Modern Warfare\model_export\custom\&lt;br /&gt;
&lt;br /&gt;
Click &amp;quot;import&amp;quot; then &amp;quot;More options&amp;quot; and &amp;quot;Materials&amp;quot;, you should see the previously created material on the left hand side. Finally hit the &amp;quot;export&amp;quot; button and close XModel Creator&lt;br /&gt;
&lt;br /&gt;
==Convert xmodel_export to usuable textured Model==&lt;br /&gt;
&lt;br /&gt;
A - Copy the folder \Call of Duty 4 - Modern Warfare\raw\physic\ and all its file into \Call of Duty 4 - Modern Warfare\share\main\ ( create \share\main first)&lt;br /&gt;
&lt;br /&gt;
B - Open up the Asset Manager again but this time select xmodel from list and click &amp;quot;New Entry&amp;quot; select any name you want&lt;br /&gt;
&lt;br /&gt;
On the left hand side window go and browse the newly created .modelexport file in \Call of Duty 4 - Modern Warfare\model_export\custom\ (in my example its lantern_exterior_on_lod10.xmodel_export), select the physic from list that suit the best to your model:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:importcod2_04.jpg|500px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hit F10 when ready and everything going well the AssMan will convert your model without errors  ;D&lt;br /&gt;
&lt;br /&gt;
Et Voila! The model will now be accessible in COD4 Radiant, dont forget to add a clip for it or it will have no collision!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Zeroy|Zeroy.]] 14:48, 21 October 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1850</id>
		<title>Call of Duty 4: Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1850"/>
		<updated>2008-10-23T23:42:53Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
 Here is a very good tutorial on COD coding that my mate Danny Redford (hence - Drofder, as its Redford&lt;br /&gt;
 backwards :))&lt;br /&gt;
 wrote back in 2006, which is a succint introduction to a very complex thing. &#039;&#039;&#039;Tally;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|left]] &lt;br /&gt;
&#039;&#039;&#039;By Drofder2004&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ok, this is my own guide for scripting, it is incomplete and lacks a lot of formatting (I will try and get round to that soon). It was written in 2.5 hours and contains a lot of basic and slightly advanced guides on several base topics. Some areas contain more detail than others depending on relevance and difficulty.&lt;br /&gt;
&lt;br /&gt;
When I get more time, I will add to this guide. Once I have pretty much finished the majority of the guide I will provide several new scripts using several advanced functions.&lt;br /&gt;
&lt;br /&gt;
This guide should be used as a small starting guide for people new to scripting, and reference for those who know some scripting. This will provide an insight into how script can improve the fun of maps, and hopefully will help answer questions for those who are stuck.&lt;br /&gt;
&lt;br /&gt;
If you find any problems (be it wrong syntax, spelling or etc) then post.&lt;br /&gt;
If you want to request/criticise/compliment or whatever, again post.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
== [[Getting Started]] ==&lt;br /&gt;
&lt;br /&gt;
This section will include several things you need to know before you start scripting.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] All scripts are contained within simple text files that contain no formatting, so programs such as Word are not to be used. The file format used for scripts within the Call of Duty series is &#039;GSC&#039; (.gsc). It is recommended you use a simple but effective editor for programming, such programs include [http://www.crimsoneditor.com/ Crimson Editor], [http://http://www.pnotepad.org/ Programmers Notepad] and [http://www.editplus.com/ Editplus].&lt;br /&gt;
&lt;br /&gt;
A few things you need to know before reading any further are a few common words used within scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables:&#039;&#039;&#039; variables are data storage locations which are assigned a name. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 integerthing = 1; //by the way, comments like this can be made using //, and are ignored by the game.&lt;br /&gt;
 floatthing = 0.5; &lt;br /&gt;
 stringthing = &amp;quot;Text and symbols 1234567890&amp;quot;;&lt;br /&gt;
 booleanthing = true; //another thing, almost every line must have a ; at the end or the script won&#039;t work. More on that later.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The variables are declared on the left, and assigned a value such as an integer (whole number), a float (a number containing a decimal), a string (text and symbols) or a boolean (true/false).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entities:&#039;&#039;&#039; These are objects that are used in maps, and can be referenced in the script. Entities include players, dropped guns, objectives, script_models, etc.&lt;br /&gt;
&lt;br /&gt;
They can be referenced using their their targetname or classname that has been set within the map.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Functions:&#039;&#039;&#039; an action or procedure that can be called or threaded and can return a value. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 funcMove()&lt;br /&gt;
 {&lt;br /&gt;
   self moveY(320, 3);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main function in the above code is &#039;&#039;&#039;funcMove()&#039;&#039;&#039;, and it will perform the actions inside the curly braces when it runs. There is also another function, &#039;&#039;&#039;moveY&#039;&#039;&#039;, which is a built-in function inside COD4, and moves an entity on the Y axis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguements:&#039;&#039;&#039; These are key piece of information that are passed along to functions, and can be any type of object (entity, string, boolean etc). The function that was passed the arguments can then reference them.&lt;br /&gt;
&lt;br /&gt;
For example, if a function is shown as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(arg1, arg2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The function is asking for two arguements to be sent to the function. An example of this in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 someotherstuff()&lt;br /&gt;
 {&lt;br /&gt;
   ent function(320, 5);&lt;br /&gt;
   thing function(320, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function(distance, time)&lt;br /&gt;
 {&lt;br /&gt;
   ent moveZ(distance, time);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As you can see, function() is called on both &#039;ent&#039; and &#039;thing&#039;, and the two arguments &#039;320&#039; and &#039;5&#039; are passed to the new function as &#039;distance&#039; and &#039;time&#039;. Then moveZ is called on the entities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Calling/Threading:&#039;&#039;&#039; these are used with functions. Functions can be threaded or called sequentially.&lt;br /&gt;
&lt;br /&gt;
If a function is threaded, then that function is performed while the script continues, whereas if a function is called sequentially, the script waits until the function is completed before it continues. Examples...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(); //the script will stop at this line and carry out function() before going down to...&lt;br /&gt;
 thread function(); //this will start function() and carry on to execute &#039;ent moveZ&#039;&lt;br /&gt;
 ent moveZ(350, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Self:&#039;&#039;&#039; If you call a function on an entity e.g &#039;unnamedent thread dostuff()&#039;, then within the function dostuff(), you can refer to unnamedent as &#039;self&#039;.&lt;br /&gt;
&lt;br /&gt;
For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 something()&lt;br /&gt;
 {&lt;br /&gt;
  ent = getent(&amp;quot;ent&amp;quot;,&amp;quot;targetname&amp;quot;);&lt;br /&gt;
  ent function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function()&lt;br /&gt;
 {&lt;br /&gt;
  self moveZ(150, 5);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[Using Variables]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Variables can be used in several ways, but in all cases they are used to store some data for the duration of the game. Variables come in different forms: integers, floats, entities, strings, arrays and booleans, there are also several different ways variables can be stored.&lt;br /&gt;
&lt;br /&gt;
A simple variable is simply declared using&lt;br /&gt;
&lt;br /&gt;
 variable = data;&lt;br /&gt;
&lt;br /&gt;
This variable can be used in the current function and any function that passes it as an argument, or is called on it (so it&#039;d be used as &#039;self&#039;).&lt;br /&gt;
&lt;br /&gt;
Variables can be global (which can be used in all threads without needing to be called) by using the&lt;br /&gt;
&lt;br /&gt;
 level.variable = data;&lt;br /&gt;
&lt;br /&gt;
or they can be assigned to entities individually&lt;br /&gt;
&lt;br /&gt;
 entity.variable = data;&lt;br /&gt;
&lt;br /&gt;
for things like player.health (integer, already built-in, but can be modified) and level.teamBased (boolean).&lt;br /&gt;
&lt;br /&gt;
== [[Maths &amp;amp; Operators]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Maths is used throughout scripting to get many different values, be it the distance between two objects or to calculate an equation.&lt;br /&gt;
&lt;br /&gt;
For example, a variable can be given data from an equation.&lt;br /&gt;
&lt;br /&gt;
 variable = 5 + 1;&lt;br /&gt;
&lt;br /&gt;
Although the above example is pretty pointless, as it adds one constant to another to make a constant, and you can just calculate it yourself and use the answer i.e.&lt;br /&gt;
&lt;br /&gt;
 variable = 6;&lt;br /&gt;
&lt;br /&gt;
But variables can be calculated using other variables, for example...&lt;br /&gt;
&lt;br /&gt;
 varAnswer = var1 + var2;&lt;br /&gt;
&lt;br /&gt;
varAnswer will be equal to the value of var1 plus the value of var2.&lt;br /&gt;
&lt;br /&gt;
There are several operators that can be used in maths...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ :: Addition&lt;br /&gt;
- :: Subtraction&lt;br /&gt;
* :: Multiplication&lt;br /&gt;
/ :: Division&lt;br /&gt;
% :: Modulus&lt;br /&gt;
= :: Equals&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also some more little-known operators such as... &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
++ :: Increment (+1)&lt;br /&gt;
-- :: Decrement (-1)&lt;br /&gt;
+= :: Incrementation (requires number)&lt;br /&gt;
-= :: Decrementation (requires number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example of these in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 var++; //Set var to var + 1&lt;br /&gt;
 var--; //Set var to var - 1&lt;br /&gt;
 var += int; //Set var to var + int&lt;br /&gt;
 var -= int; //Set var to var - int&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[IFs, Loops &amp;amp; Logic]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] This section will go into a little more detail of how to use &#039;if&#039; statements and loops.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement is used to verify whether some data satisfies certain conditions, and then to execute code depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
To understand this section, you must first know the operators used to compare data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
== :: Equal To&lt;br /&gt;
!= :: Not Equal To&lt;br /&gt;
!  :: Negation (Not equal to)&lt;br /&gt;
&amp;lt;  :: Less than&lt;br /&gt;
&amp;gt;  :: Greater than&lt;br /&gt;
&amp;lt;= :: Less or Equal to&lt;br /&gt;
&amp;gt;= :: Greater or Equal to&lt;br /&gt;
&amp;amp;&amp;amp; :: And&lt;br /&gt;
|| :: Or&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok, now that we have some operators, lets get started on the statement.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement, requires a minimum of one arguement and usually one operator.&lt;br /&gt;
&lt;br /&gt;
Here are some examples...notice the lack of semicolons at the end of the statements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(variable) //If variable is true&lt;br /&gt;
 if(!variable) //If variable is not true&lt;br /&gt;
 if(variable1 == variable2) //If variable1 is equal to variable2&lt;br /&gt;
 if(variable1 != variable2) //If variable1 is not equal to variable2&lt;br /&gt;
 if(integer1 &amp;lt; integer2) //If integer1 is less than integer2&lt;br /&gt;
 if(integer1 &amp;gt; integer2) //If integer1 is greater than integer2&lt;br /&gt;
 if(integer1 &amp;lt;= integer2) //If integer1 is less than or equal to integer2&lt;br /&gt;
 if(integer1 &amp;gt;= integer2) //If integer1 is greater or equal to integer2&lt;br /&gt;
 if((var1 == var2) &amp;amp;&amp;amp; (var3 != var4)) //If var1 is equal to var2 AND var3 is not equal to var4&lt;br /&gt;
 if((int1 &amp;gt; int2) || (var1 == var2)) //If int1 is greater than int2 OR var1 is equal to var2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To use an if statement to determine the movement of the script, you need to use the arguements to move the script in certain directions...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 equals var2, do this code&lt;br /&gt;
   //everything inside these curly braces&lt;br /&gt;
 }&lt;br /&gt;
 //then do this code regardless of the result&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the statement above is true, the code inside the curly brackets is processed, if it is not true, the code inside the brackets are skipped.&lt;br /&gt;
&lt;br /&gt;
Whether or not the statement is true, the code outside of the brackets is going to be processed. If this is not what you want, you need to use &amp;quot;Else&amp;quot; after the statement, for example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s true then do this&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s false then do this&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use an &amp;quot;else if&amp;quot; in the statement. This is used in a scenario where you want to check multiple comparisons.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if above arguement is true&lt;br /&gt;
 }&lt;br /&gt;
 else if(!var1 &amp;amp;&amp;amp; var3)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 is false but var3 is true&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if all other if statements were false&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Thats the basics of if&#039;s, so let move on to loops.&lt;br /&gt;
&lt;br /&gt;
Loops come in different forms...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; :: A while loop is a loop that keeps looping WHILE the arguement is true.&lt;br /&gt;
&#039;&#039;&#039;For&#039;&#039;&#039; :: A for loop is a loop that loops a set amount of times&lt;br /&gt;
&lt;br /&gt;
To use a while loop, a condition/some conditions must be stated: &amp;quot;while(conditions)&amp;quot;&lt;br /&gt;
Often, this loop is used for infinite loops, which last forever unless specifically stopped. This is done using the arguement of 1 or true (1 is the integer of true)&lt;br /&gt;
&lt;br /&gt;
 while(1)&lt;br /&gt;
 while(true)&lt;br /&gt;
&lt;br /&gt;
A while loop can also be used as a normal loop that loops while the arguement is true, when the arguement becomes false the loop exits automatically (or rather, doesn&#039;t begin executing the commands in the loop again but just finishes the loop in progress).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int = 0;&lt;br /&gt;
&lt;br /&gt;
 while(int &amp;lt; 10)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  int++;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code will loop while &#039;int&#039; is less than 10. The loop waits 1 second, and then the loop increments &#039;int&#039;. Once &#039;int&#039; is not less than 10, the loop breaks.&lt;br /&gt;
&lt;br /&gt;
The same applies for FOR loops.&lt;br /&gt;
&lt;br /&gt;
A FOR loop requires 3 arguements.&lt;br /&gt;
&lt;br /&gt;
for(declare; while; do)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Declare&#039;&#039;&#039; is the section which declares a variable for the loop to use. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; is what determines when the loop breaks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do&#039;&#039;&#039; is what the loop should do after each loop.&lt;br /&gt;
&lt;br /&gt;
A common FOR loop looks like this...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; int; i++)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code means: (i is 0, while i is smaller than int, add one to i).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s replace int with an actual number:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the sequence of events...&lt;br /&gt;
&lt;br /&gt;
- &#039;i&#039; = 0&lt;br /&gt;
- while i is less than 10, continue the loop&lt;br /&gt;
- perform code (wait 1; and function())&lt;br /&gt;
- increment &#039;i&#039; (i++)&lt;br /&gt;
&lt;br /&gt;
The FOR loop can also be used as an &amp;quot;infinite loop&amp;quot; using the &amp;quot;forever loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
&lt;br /&gt;
The above will simply keep repeating the code until manually terminated.&lt;br /&gt;
&lt;br /&gt;
The problem with infinite loops is that they will give you an error if you don&#039;t allow them to pause at any point - so all infinite loops require a wait statement somewhere in the executed code.&lt;br /&gt;
&lt;br /&gt;
To finish off, we need to know how to manually exit these loops. A common way to exit an infinite loop is to use an IF statement to determine when to &#039;break&#039; (break is the keyword used to exit a loop) - here is an example of an IF statement breaking an infinite loop...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(;;)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   if(var1 == var2)&lt;br /&gt;
   {&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above sequence simply goes...&lt;br /&gt;
&lt;br /&gt;
- wait 1 second&lt;br /&gt;
- check if statement...&lt;br /&gt;
- if var1 is equal to var2, break out of the loop&lt;br /&gt;
- else continue the loop&lt;br /&gt;
&lt;br /&gt;
== [[Creating Functions]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] A custom function is a good way to use repeat sections of code more efficiently. For example, if you often use the same sequence of code, you can template them into a custom function. Imagine this is your code...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush1 moveZ(320, 5);&lt;br /&gt;
 brush1 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush2 moveZ(540, 3);&lt;br /&gt;
 brush2 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This can be simplified using a custom function, lets call this function &amp;quot;_moveEnt&amp;quot; (it is common practice to use an underscore as the first character of a function)&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
&lt;br /&gt;
As the above shows, we are going to need 3 arguements, ent (entity), dist (distance) and time.&lt;br /&gt;
&lt;br /&gt;
Now lets look at the full code with custom function in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   _moveEnt(brush1, 320, 5);&lt;br /&gt;
   _moveEnt(brush2, 540, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   ent moveZ(dist, time);&lt;br /&gt;
   ent waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As the above code shows, the custom function can simply be called using the required arguements, which are passed along and used in the new function.&lt;br /&gt;
&lt;br /&gt;
Once the custom function has finished, the script returns to the original location from where it was called.&lt;br /&gt;
&lt;br /&gt;
Functions can also return values to the original script, or even entities.&lt;br /&gt;
&lt;br /&gt;
A simple function to calculate volume from the width, height and depth:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   area = _areaEquation(2, 4, 6);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _areaEquation(x, y, z)&lt;br /&gt;
 {&lt;br /&gt;
   answer = x * y * z;&lt;br /&gt;
   return answer;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the code calls the function &#039;_areaEquation&#039; the function works out the &#039;answer&#039;, &#039;answer&#039; is the returned.&lt;br /&gt;
This declares a new variable (area). The variable area, is the answer that is returned by the function.&lt;br /&gt;
&lt;br /&gt;
The two lines:&lt;br /&gt;
&lt;br /&gt;
 answer = x * y * z;&lt;br /&gt;
 return answer;&lt;br /&gt;
&lt;br /&gt;
could be replace by&lt;br /&gt;
&lt;br /&gt;
   return x * y * z;&lt;br /&gt;
&lt;br /&gt;
for the same effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Arrays]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Arrays are objects that store several variables. These can be integers, strings, entities or even other arrays.&lt;br /&gt;
&lt;br /&gt;
Arrays are extremely helpful when it comes to doing the same thing to several different objects, such as moving a few platforms by a certain amount in a map, or storing lots of related variables.&lt;br /&gt;
&lt;br /&gt;
To create an array we simply type...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 arrayName = [];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, to add an object/variable to this array, we can simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 array(array.size) = &amp;quot;a string variable&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whenever you see array.size, the .size does not mean it&#039;s dimensions, but the amount of items in the array. So if an array contains 1 piece of data, the array.size is 1. To retrieve an items from an array, you can use array[0] for the first object/var stored in it, and then array[1] and so on for successive items.&lt;br /&gt;
&lt;br /&gt;
Going back to the example above, we could retrieve the data by using array[0]. The first item in an array is listed as 0, the second as 1, and so on. This means that by using array(array.size) = &amp;quot;blah&amp;quot;;, we can add new items to it because of the offset of 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A common use for an array is to call a function on all of the players in the game. This can be done by using an array with a FOR loop.&lt;br /&gt;
To start with we must get our array of players, and instead of using the above method of defining an array and adding custom data, we can use a builtin function.&lt;br /&gt;
&lt;br /&gt;
 players = getEntArray(&amp;quot;player&amp;quot;, &amp;quot;classname&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
So, our array has been defined as &amp;quot;players&amp;quot;, or more accurately, &amp;quot;players[]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Inside &amp;quot;players[]&amp;quot; is every player on the server, and now all we need to do is use the array to thread a function to each player.&lt;br /&gt;
So, here we have a for loop to do such a thing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; players.size; i++)&lt;br /&gt;
 {&lt;br /&gt;
   players[i] thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
That&#039;s our loop to go through every player and call function(); on them.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;i&#039; is a variable not a letter, so &#039;i&#039; is substitued with the number of the loop.&lt;br /&gt;
In the first loop, &#039;i&#039; equals 0, so:&lt;br /&gt;
&lt;br /&gt;
 players[0] thread function();&lt;br /&gt;
&lt;br /&gt;
is executed.&lt;br /&gt;
&lt;br /&gt;
Arrays are a complicated part of scripting, but once you have them understood, they are one of the most useful things in the game.&lt;br /&gt;
&lt;br /&gt;
== [[Switch]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Switch is often used instead of multiple if statements, as it is more efficient and doesn&#039;t require you to type as much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to use &amp;quot;Switch&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch can be quite hard to understand at first glance, but after using it, it will become easier.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how it is used. This is taken from the menu scripts, which handles the ingame menus, I have cut the code and also added the commented lines myself.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;allies&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_allies&amp;quot;]);&lt;br /&gt;
   else if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;axis&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_axis&amp;quot;]);&lt;br /&gt;
 break;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_team&amp;quot;]);&lt;br /&gt;
 break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_muteplayer&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_callvote&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first part of the code is where the variable is defined. The game waits until a menu has been activated. The variables recieved are &amp;quot;menu&amp;quot; (the name of the menu activated) and &amp;quot;response&amp;quot; (what option was chosen from the menu). &amp;quot;Response&amp;quot; is the key variable for the &#039;Switch&#039;.&lt;br /&gt;
&lt;br /&gt;
After the variables have been defined, the Switch function is called. It then checks every &amp;quot;Case&amp;quot; (case is the term used for the possible outcomes of the variable) to find a match, if no match is found, the &amp;quot;Default&amp;quot; case is used. (if you do not have a default case, the script will crash - you can just add an empty one.)&lt;br /&gt;
&lt;br /&gt;
If a match is found, then the function will do ALL the events from that point onwards, which is why you MUST add &amp;quot;break;&amp;quot; at the end of every case, if the break is not existent, then all other case functions will run also.&lt;br /&gt;
&lt;br /&gt;
To use the above example, I shall input my own values to show how the example works...&lt;br /&gt;
&lt;br /&gt;
When I open the menu ingame, I choose the option &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The code kicks in and the variable &amp;quot;response&amp;quot; becomes equal to &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The switch statement will now look at every case for a positive match.&lt;br /&gt;
&lt;br /&gt;
Once the match is found, everything after the case will happen:&lt;br /&gt;
* self closeMenu(); //current menu closes&lt;br /&gt;
* self closeInGameMenu(); //close any other ingame menus&lt;br /&gt;
* self openMenu(game[&amp;quot;menu_team&amp;quot;]); //will open the team menu&lt;br /&gt;
* break; //the rest of the switch statement is ended and the code continues&lt;br /&gt;
&lt;br /&gt;
You can also make the script perform the same actions in multiple cases. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   function();&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that if the response variable is: &#039;changeweapon&#039;, &#039;changeteam&#039;, &#039;muteplayer&#039; or &#039;callvote&#039;, function(); will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Notify / Endon / Waittill]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] These 3 functions allow you to make a script wait for specific events and then trigger those events in different parts of the scripts.&lt;br /&gt;
&lt;br /&gt;
This one ends the function it is inside when &#039;thread_restart&#039; is triggered on &#039;level&#039;:&lt;br /&gt;
&lt;br /&gt;
 level endon (&amp;quot;thread_restart&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
and this triggers the &#039;killed_player&#039; notification on &#039;self&#039; (which is a player in this case):&lt;br /&gt;
&lt;br /&gt;
 self notify(&amp;quot;killed_player&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
If you use &#039;player waittill(&amp;quot;x&amp;quot;)&#039; or &#039;player endon(&amp;quot;x&amp;quot;)&#039;, then using a &#039;level notify(&amp;quot;x&amp;quot;)&#039; will not trigger either of them - level is not the same entity as player, and all entities&#039; triggers are independant.&lt;br /&gt;
&lt;br /&gt;
Using the functions is easy. Firstly, decide which entity you want to wait for the trigger on. This is a player most of the time, but if you want a global trigger then use &#039;level&#039;.&lt;br /&gt;
&lt;br /&gt;
Then you must decide which trigger to use. You can choose either &amp;quot;endon&amp;quot; or &amp;quot;waittill&amp;quot; - they are both self explanatory, one will end the function it is running in when triggered, and the other will &#039;wait&#039; until the specified trigger.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next you decide on a unique name for the trigger. For example...&lt;br /&gt;
&lt;br /&gt;
 level endon(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
And to activate this trigger, you use notify on the same entity (level):&lt;br /&gt;
&lt;br /&gt;
 level notify(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
You can use as many waittill and endon functions as you want on an entity, in different functions. They will all be triggered by a notify.&lt;br /&gt;
&lt;br /&gt;
Here is a quick example of it in use in multiple threads in the DM gametype...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 spawnPlayer()&lt;br /&gt;
 {&lt;br /&gt;
   self notify(&amp;quot;spawned&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   /*... Code snipped ... this is another type of &lt;br /&gt;
   comment that can span multiple lines. */&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Callback_PlayerKilled(attacker, some other arguments)&lt;br /&gt;
 {&lt;br /&gt;
   self endon(&amp;quot;spawned&amp;quot;); //this makes callback_playerkilled() terminate when &amp;quot;spawned&amp;quot; is triggered in spawnplayer().&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Scripting hints]] ==&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Novemberdobby|Novemberdobby]] 23:42, 23 October 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Geographylogo.png]][http://www.codjumper.com/forums/viewtopic.php?t=4011&amp;amp;sid=ed58d3b3f5bfa32350d4670d35c9f781 From CoDJumper.com]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Scripting_hints&amp;diff=1849</id>
		<title>Scripting hints</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Scripting_hints&amp;diff=1849"/>
		<updated>2008-10-23T23:42:13Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Scripting hints]] ==&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[User:Novemberdobby|Novemberdobby]] 23:42, 23 October 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Scripting_hints&amp;diff=1848</id>
		<title>Scripting hints</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Scripting_hints&amp;diff=1848"/>
		<updated>2008-10-23T23:41:19Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: New page: == Scripting hints ==  A few useful commands:  To print a large message on the screen:  &amp;#039;&amp;#039;&amp;#039;iprintlnbold(stringMessage);&amp;#039;&amp;#039;&amp;#039; or to a specific player: &amp;#039;&amp;#039;&amp;#039;player iprintlnbold(stringMessage...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Scripting hints]] ==&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1847</id>
		<title>Call of Duty 4: Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1847"/>
		<updated>2008-10-23T23:41:08Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
 Here is a very good tutorial on COD coding that my mate Danny Redford (hence - Drofder, as its Redford&lt;br /&gt;
 backwards :))&lt;br /&gt;
 wrote back in 2006, which is a succint introduction to a very complex thing. &#039;&#039;&#039;Tally;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|left]] &lt;br /&gt;
&#039;&#039;&#039;By Drofder2004&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ok, this is my own guide for scripting, it is incomplete and lacks a lot of formatting (I will try and get round to that soon). It was written in 2.5 hours and contains a lot of basic and slightly advanced guides on several base topics. Some areas contain more detail than others depending on relevance and difficulty.&lt;br /&gt;
&lt;br /&gt;
When I get more time, I will add to this guide. Once I have pretty much finished the majority of the guide I will provide several new scripts using several advanced functions.&lt;br /&gt;
&lt;br /&gt;
This guide should be used as a small starting guide for people new to scripting, and reference for those who know some scripting. This will provide an insight into how script can improve the fun of maps, and hopefully will help answer questions for those who are stuck.&lt;br /&gt;
&lt;br /&gt;
If you find any problems (be it wrong syntax, spelling or etc) then post.&lt;br /&gt;
If you want to request/criticise/compliment or whatever, again post.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
== [[Getting Started]] ==&lt;br /&gt;
&lt;br /&gt;
This section will include several things you need to know before you start scripting.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] All scripts are contained within simple text files that contain no formatting, so programs such as Word are not to be used. The file format used for scripts within the Call of Duty series is &#039;GSC&#039; (.gsc). It is recommended you use a simple but effective editor for programming, such programs include [http://www.crimsoneditor.com/ Crimson Editor], [http://http://www.pnotepad.org/ Programmers Notepad] and [http://www.editplus.com/ Editplus].&lt;br /&gt;
&lt;br /&gt;
A few things you need to know before reading any further are a few common words used within scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables:&#039;&#039;&#039; variables are data storage locations which are assigned a name. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 integerthing = 1; //by the way, comments like this can be made using //, and are ignored by the game.&lt;br /&gt;
 floatthing = 0.5; &lt;br /&gt;
 stringthing = &amp;quot;Text and symbols 1234567890&amp;quot;;&lt;br /&gt;
 booleanthing = true; //another thing, almost every line must have a ; at the end or the script won&#039;t work. More on that later.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The variables are declared on the left, and assigned a value such as an integer (whole number), a float (a number containing a decimal), a string (text and symbols) or a boolean (true/false).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entities:&#039;&#039;&#039; These are objects that are used in maps, and can be referenced in the script. Entities include players, dropped guns, objectives, script_models, etc.&lt;br /&gt;
&lt;br /&gt;
They can be referenced using their their targetname or classname that has been set within the map.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Functions:&#039;&#039;&#039; an action or procedure that can be called or threaded and can return a value. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 funcMove()&lt;br /&gt;
 {&lt;br /&gt;
   self moveY(320, 3);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main function in the above code is &#039;&#039;&#039;funcMove()&#039;&#039;&#039;, and it will perform the actions inside the curly braces when it runs. There is also another function, &#039;&#039;&#039;moveY&#039;&#039;&#039;, which is a built-in function inside COD4, and moves an entity on the Y axis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguements:&#039;&#039;&#039; These are key piece of information that are passed along to functions, and can be any type of object (entity, string, boolean etc). The function that was passed the arguments can then reference them.&lt;br /&gt;
&lt;br /&gt;
For example, if a function is shown as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(arg1, arg2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The function is asking for two arguements to be sent to the function. An example of this in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 someotherstuff()&lt;br /&gt;
 {&lt;br /&gt;
   ent function(320, 5);&lt;br /&gt;
   thing function(320, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function(distance, time)&lt;br /&gt;
 {&lt;br /&gt;
   ent moveZ(distance, time);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As you can see, function() is called on both &#039;ent&#039; and &#039;thing&#039;, and the two arguments &#039;320&#039; and &#039;5&#039; are passed to the new function as &#039;distance&#039; and &#039;time&#039;. Then moveZ is called on the entities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Calling/Threading:&#039;&#039;&#039; these are used with functions. Functions can be threaded or called sequentially.&lt;br /&gt;
&lt;br /&gt;
If a function is threaded, then that function is performed while the script continues, whereas if a function is called sequentially, the script waits until the function is completed before it continues. Examples...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(); //the script will stop at this line and carry out function() before going down to...&lt;br /&gt;
 thread function(); //this will start function() and carry on to execute &#039;ent moveZ&#039;&lt;br /&gt;
 ent moveZ(350, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Self:&#039;&#039;&#039; If you call a function on an entity e.g &#039;unnamedent thread dostuff()&#039;, then within the function dostuff(), you can refer to unnamedent as &#039;self&#039;.&lt;br /&gt;
&lt;br /&gt;
For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 something()&lt;br /&gt;
 {&lt;br /&gt;
  ent = getent(&amp;quot;ent&amp;quot;,&amp;quot;targetname&amp;quot;);&lt;br /&gt;
  ent function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function()&lt;br /&gt;
 {&lt;br /&gt;
  self moveZ(150, 5);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[Using Variables]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Variables can be used in several ways, but in all cases they are used to store some data for the duration of the game. Variables come in different forms: integers, floats, entities, strings, arrays and booleans, there are also several different ways variables can be stored.&lt;br /&gt;
&lt;br /&gt;
A simple variable is simply declared using&lt;br /&gt;
&lt;br /&gt;
 variable = data;&lt;br /&gt;
&lt;br /&gt;
This variable can be used in the current function and any function that passes it as an argument, or is called on it (so it&#039;d be used as &#039;self&#039;).&lt;br /&gt;
&lt;br /&gt;
Variables can be global (which can be used in all threads without needing to be called) by using the&lt;br /&gt;
&lt;br /&gt;
 level.variable = data;&lt;br /&gt;
&lt;br /&gt;
or they can be assigned to entities individually&lt;br /&gt;
&lt;br /&gt;
 entity.variable = data;&lt;br /&gt;
&lt;br /&gt;
for things like player.health (integer, already built-in, but can be modified) and level.teamBased (boolean).&lt;br /&gt;
&lt;br /&gt;
== [[Maths &amp;amp; Operators]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Maths is used throughout scripting to get many different values, be it the distance between two objects or to calculate an equation.&lt;br /&gt;
&lt;br /&gt;
For example, a variable can be given data from an equation.&lt;br /&gt;
&lt;br /&gt;
 variable = 5 + 1;&lt;br /&gt;
&lt;br /&gt;
Although the above example is pretty pointless, as it adds one constant to another to make a constant, and you can just calculate it yourself and use the answer i.e.&lt;br /&gt;
&lt;br /&gt;
 variable = 6;&lt;br /&gt;
&lt;br /&gt;
But variables can be calculated using other variables, for example...&lt;br /&gt;
&lt;br /&gt;
 varAnswer = var1 + var2;&lt;br /&gt;
&lt;br /&gt;
varAnswer will be equal to the value of var1 plus the value of var2.&lt;br /&gt;
&lt;br /&gt;
There are several operators that can be used in maths...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ :: Addition&lt;br /&gt;
- :: Subtraction&lt;br /&gt;
* :: Multiplication&lt;br /&gt;
/ :: Division&lt;br /&gt;
% :: Modulus&lt;br /&gt;
= :: Equals&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also some more little-known operators such as... &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
++ :: Increment (+1)&lt;br /&gt;
-- :: Decrement (-1)&lt;br /&gt;
+= :: Incrementation (requires number)&lt;br /&gt;
-= :: Decrementation (requires number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example of these in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 var++; //Set var to var + 1&lt;br /&gt;
 var--; //Set var to var - 1&lt;br /&gt;
 var += int; //Set var to var + int&lt;br /&gt;
 var -= int; //Set var to var - int&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[IFs, Loops &amp;amp; Logic]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] This section will go into a little more detail of how to use &#039;if&#039; statements and loops.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement is used to verify whether some data satisfies certain conditions, and then to execute code depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
To understand this section, you must first know the operators used to compare data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
== :: Equal To&lt;br /&gt;
!= :: Not Equal To&lt;br /&gt;
!  :: Negation (Not equal to)&lt;br /&gt;
&amp;lt;  :: Less than&lt;br /&gt;
&amp;gt;  :: Greater than&lt;br /&gt;
&amp;lt;= :: Less or Equal to&lt;br /&gt;
&amp;gt;= :: Greater or Equal to&lt;br /&gt;
&amp;amp;&amp;amp; :: And&lt;br /&gt;
|| :: Or&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok, now that we have some operators, lets get started on the statement.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement, requires a minimum of one arguement and usually one operator.&lt;br /&gt;
&lt;br /&gt;
Here are some examples...notice the lack of semicolons at the end of the statements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(variable) //If variable is true&lt;br /&gt;
 if(!variable) //If variable is not true&lt;br /&gt;
 if(variable1 == variable2) //If variable1 is equal to variable2&lt;br /&gt;
 if(variable1 != variable2) //If variable1 is not equal to variable2&lt;br /&gt;
 if(integer1 &amp;lt; integer2) //If integer1 is less than integer2&lt;br /&gt;
 if(integer1 &amp;gt; integer2) //If integer1 is greater than integer2&lt;br /&gt;
 if(integer1 &amp;lt;= integer2) //If integer1 is less than or equal to integer2&lt;br /&gt;
 if(integer1 &amp;gt;= integer2) //If integer1 is greater or equal to integer2&lt;br /&gt;
 if((var1 == var2) &amp;amp;&amp;amp; (var3 != var4)) //If var1 is equal to var2 AND var3 is not equal to var4&lt;br /&gt;
 if((int1 &amp;gt; int2) || (var1 == var2)) //If int1 is greater than int2 OR var1 is equal to var2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To use an if statement to determine the movement of the script, you need to use the arguements to move the script in certain directions...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 equals var2, do this code&lt;br /&gt;
   //everything inside these curly braces&lt;br /&gt;
 }&lt;br /&gt;
 //then do this code regardless of the result&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the statement above is true, the code inside the curly brackets is processed, if it is not true, the code inside the brackets are skipped.&lt;br /&gt;
&lt;br /&gt;
Whether or not the statement is true, the code outside of the brackets is going to be processed. If this is not what you want, you need to use &amp;quot;Else&amp;quot; after the statement, for example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s true then do this&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s false then do this&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use an &amp;quot;else if&amp;quot; in the statement. This is used in a scenario where you want to check multiple comparisons.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if above arguement is true&lt;br /&gt;
 }&lt;br /&gt;
 else if(!var1 &amp;amp;&amp;amp; var3)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 is false but var3 is true&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if all other if statements were false&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Thats the basics of if&#039;s, so let move on to loops.&lt;br /&gt;
&lt;br /&gt;
Loops come in different forms...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; :: A while loop is a loop that keeps looping WHILE the arguement is true.&lt;br /&gt;
&#039;&#039;&#039;For&#039;&#039;&#039; :: A for loop is a loop that loops a set amount of times&lt;br /&gt;
&lt;br /&gt;
To use a while loop, a condition/some conditions must be stated: &amp;quot;while(conditions)&amp;quot;&lt;br /&gt;
Often, this loop is used for infinite loops, which last forever unless specifically stopped. This is done using the arguement of 1 or true (1 is the integer of true)&lt;br /&gt;
&lt;br /&gt;
 while(1)&lt;br /&gt;
 while(true)&lt;br /&gt;
&lt;br /&gt;
A while loop can also be used as a normal loop that loops while the arguement is true, when the arguement becomes false the loop exits automatically (or rather, doesn&#039;t begin executing the commands in the loop again but just finishes the loop in progress).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int = 0;&lt;br /&gt;
&lt;br /&gt;
 while(int &amp;lt; 10)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  int++;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code will loop while &#039;int&#039; is less than 10. The loop waits 1 second, and then the loop increments &#039;int&#039;. Once &#039;int&#039; is not less than 10, the loop breaks.&lt;br /&gt;
&lt;br /&gt;
The same applies for FOR loops.&lt;br /&gt;
&lt;br /&gt;
A FOR loop requires 3 arguements.&lt;br /&gt;
&lt;br /&gt;
for(declare; while; do)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Declare&#039;&#039;&#039; is the section which declares a variable for the loop to use. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; is what determines when the loop breaks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do&#039;&#039;&#039; is what the loop should do after each loop.&lt;br /&gt;
&lt;br /&gt;
A common FOR loop looks like this...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; int; i++)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code means: (i is 0, while i is smaller than int, add one to i).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s replace int with an actual number:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the sequence of events...&lt;br /&gt;
&lt;br /&gt;
- &#039;i&#039; = 0&lt;br /&gt;
- while i is less than 10, continue the loop&lt;br /&gt;
- perform code (wait 1; and function())&lt;br /&gt;
- increment &#039;i&#039; (i++)&lt;br /&gt;
&lt;br /&gt;
The FOR loop can also be used as an &amp;quot;infinite loop&amp;quot; using the &amp;quot;forever loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
&lt;br /&gt;
The above will simply keep repeating the code until manually terminated.&lt;br /&gt;
&lt;br /&gt;
The problem with infinite loops is that they will give you an error if you don&#039;t allow them to pause at any point - so all infinite loops require a wait statement somewhere in the executed code.&lt;br /&gt;
&lt;br /&gt;
To finish off, we need to know how to manually exit these loops. A common way to exit an infinite loop is to use an IF statement to determine when to &#039;break&#039; (break is the keyword used to exit a loop) - here is an example of an IF statement breaking an infinite loop...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(;;)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   if(var1 == var2)&lt;br /&gt;
   {&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above sequence simply goes...&lt;br /&gt;
&lt;br /&gt;
- wait 1 second&lt;br /&gt;
- check if statement...&lt;br /&gt;
- if var1 is equal to var2, break out of the loop&lt;br /&gt;
- else continue the loop&lt;br /&gt;
&lt;br /&gt;
== [[Creating Functions]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] A custom function is a good way to use repeat sections of code more efficiently. For example, if you often use the same sequence of code, you can template them into a custom function. Imagine this is your code...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush1 moveZ(320, 5);&lt;br /&gt;
 brush1 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush2 moveZ(540, 3);&lt;br /&gt;
 brush2 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This can be simplified using a custom function, lets call this function &amp;quot;_moveEnt&amp;quot; (it is common practice to use an underscore as the first character of a function)&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
&lt;br /&gt;
As the above shows, we are going to need 3 arguements, ent (entity), dist (distance) and time.&lt;br /&gt;
&lt;br /&gt;
Now lets look at the full code with custom function in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   _moveEnt(brush1, 320, 5);&lt;br /&gt;
   _moveEnt(brush2, 540, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   ent moveZ(dist, time);&lt;br /&gt;
   ent waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As the above code shows, the custom function can simply be called using the required arguements, which are passed along and used in the new function.&lt;br /&gt;
&lt;br /&gt;
Once the custom function has finished, the script returns to the original location from where it was called.&lt;br /&gt;
&lt;br /&gt;
Functions can also return values to the original script, or even entities.&lt;br /&gt;
&lt;br /&gt;
A simple function to calculate volume from the width, height and depth:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   area = _areaEquation(2, 4, 6);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _areaEquation(x, y, z)&lt;br /&gt;
 {&lt;br /&gt;
   answer = x * y * z;&lt;br /&gt;
   return answer;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the code calls the function &#039;_areaEquation&#039; the function works out the &#039;answer&#039;, &#039;answer&#039; is the returned.&lt;br /&gt;
This declares a new variable (area). The variable area, is the answer that is returned by the function.&lt;br /&gt;
&lt;br /&gt;
The two lines:&lt;br /&gt;
&lt;br /&gt;
 answer = x * y * z;&lt;br /&gt;
 return answer;&lt;br /&gt;
&lt;br /&gt;
could be replace by&lt;br /&gt;
&lt;br /&gt;
   return x * y * z;&lt;br /&gt;
&lt;br /&gt;
for the same effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Arrays]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Arrays are objects that store several variables. These can be integers, strings, entities or even other arrays.&lt;br /&gt;
&lt;br /&gt;
Arrays are extremely helpful when it comes to doing the same thing to several different objects, such as moving a few platforms by a certain amount in a map, or storing lots of related variables.&lt;br /&gt;
&lt;br /&gt;
To create an array we simply type...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 arrayName = [];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, to add an object/variable to this array, we can simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 array(array.size) = &amp;quot;a string variable&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whenever you see array.size, the .size does not mean it&#039;s dimensions, but the amount of items in the array. So if an array contains 1 piece of data, the array.size is 1. To retrieve an items from an array, you can use array[0] for the first object/var stored in it, and then array[1] and so on for successive items.&lt;br /&gt;
&lt;br /&gt;
Going back to the example above, we could retrieve the data by using array[0]. The first item in an array is listed as 0, the second as 1, and so on. This means that by using array(array.size) = &amp;quot;blah&amp;quot;;, we can add new items to it because of the offset of 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A common use for an array is to call a function on all of the players in the game. This can be done by using an array with a FOR loop.&lt;br /&gt;
To start with we must get our array of players, and instead of using the above method of defining an array and adding custom data, we can use a builtin function.&lt;br /&gt;
&lt;br /&gt;
 players = getEntArray(&amp;quot;player&amp;quot;, &amp;quot;classname&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
So, our array has been defined as &amp;quot;players&amp;quot;, or more accurately, &amp;quot;players[]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Inside &amp;quot;players[]&amp;quot; is every player on the server, and now all we need to do is use the array to thread a function to each player.&lt;br /&gt;
So, here we have a for loop to do such a thing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; players.size; i++)&lt;br /&gt;
 {&lt;br /&gt;
   players[i] thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
That&#039;s our loop to go through every player and call function(); on them.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;i&#039; is a variable not a letter, so &#039;i&#039; is substitued with the number of the loop.&lt;br /&gt;
In the first loop, &#039;i&#039; equals 0, so:&lt;br /&gt;
&lt;br /&gt;
 players[0] thread function();&lt;br /&gt;
&lt;br /&gt;
is executed.&lt;br /&gt;
&lt;br /&gt;
Arrays are a complicated part of scripting, but once you have them understood, they are one of the most useful things in the game.&lt;br /&gt;
&lt;br /&gt;
== [[Switch]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Switch is often used instead of multiple if statements, as it is more efficient and doesn&#039;t require you to type as much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to use &amp;quot;Switch&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch can be quite hard to understand at first glance, but after using it, it will become easier.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how it is used. This is taken from the menu scripts, which handles the ingame menus, I have cut the code and also added the commented lines myself.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;allies&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_allies&amp;quot;]);&lt;br /&gt;
   else if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;axis&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_axis&amp;quot;]);&lt;br /&gt;
 break;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_team&amp;quot;]);&lt;br /&gt;
 break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_muteplayer&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_callvote&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first part of the code is where the variable is defined. The game waits until a menu has been activated. The variables recieved are &amp;quot;menu&amp;quot; (the name of the menu activated) and &amp;quot;response&amp;quot; (what option was chosen from the menu). &amp;quot;Response&amp;quot; is the key variable for the &#039;Switch&#039;.&lt;br /&gt;
&lt;br /&gt;
After the variables have been defined, the Switch function is called. It then checks every &amp;quot;Case&amp;quot; (case is the term used for the possible outcomes of the variable) to find a match, if no match is found, the &amp;quot;Default&amp;quot; case is used. (if you do not have a default case, the script will crash - you can just add an empty one.)&lt;br /&gt;
&lt;br /&gt;
If a match is found, then the function will do ALL the events from that point onwards, which is why you MUST add &amp;quot;break;&amp;quot; at the end of every case, if the break is not existent, then all other case functions will run also.&lt;br /&gt;
&lt;br /&gt;
To use the above example, I shall input my own values to show how the example works...&lt;br /&gt;
&lt;br /&gt;
When I open the menu ingame, I choose the option &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The code kicks in and the variable &amp;quot;response&amp;quot; becomes equal to &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The switch statement will now look at every case for a positive match.&lt;br /&gt;
&lt;br /&gt;
Once the match is found, everything after the case will happen:&lt;br /&gt;
* self closeMenu(); //current menu closes&lt;br /&gt;
* self closeInGameMenu(); //close any other ingame menus&lt;br /&gt;
* self openMenu(game[&amp;quot;menu_team&amp;quot;]); //will open the team menu&lt;br /&gt;
* break; //the rest of the switch statement is ended and the code continues&lt;br /&gt;
&lt;br /&gt;
You can also make the script perform the same actions in multiple cases. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   function();&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that if the response variable is: &#039;changeweapon&#039;, &#039;changeteam&#039;, &#039;muteplayer&#039; or &#039;callvote&#039;, function(); will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Notify / Endon / Waittill]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] These 3 functions allow you to make a script wait for specific events and then trigger those events in different parts of the scripts.&lt;br /&gt;
&lt;br /&gt;
This one ends the function it is inside when &#039;thread_restart&#039; is triggered on &#039;level&#039;:&lt;br /&gt;
&lt;br /&gt;
 level endon (&amp;quot;thread_restart&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
and this triggers the &#039;killed_player&#039; notification on &#039;self&#039; (which is a player in this case):&lt;br /&gt;
&lt;br /&gt;
 self notify(&amp;quot;killed_player&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
If you use &#039;player waittill(&amp;quot;x&amp;quot;)&#039; or &#039;player endon(&amp;quot;x&amp;quot;)&#039;, then using a &#039;level notify(&amp;quot;x&amp;quot;)&#039; will not trigger either of them - level is not the same entity as player, and all entities&#039; triggers are independant.&lt;br /&gt;
&lt;br /&gt;
Using the functions is easy. Firstly, decide which entity you want to wait for the trigger on. This is a player most of the time, but if you want a global trigger then use &#039;level&#039;.&lt;br /&gt;
&lt;br /&gt;
Then you must decide which trigger to use. You can choose either &amp;quot;endon&amp;quot; or &amp;quot;waittill&amp;quot; - they are both self explanatory, one will end the function it is running in when triggered, and the other will &#039;wait&#039; until the specified trigger.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next you decide on a unique name for the trigger. For example...&lt;br /&gt;
&lt;br /&gt;
 level endon(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
And to activate this trigger, you use notify on the same entity (level):&lt;br /&gt;
&lt;br /&gt;
 level notify(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
You can use as many waittill and endon functions as you want on an entity, in different functions. They will all be triggered by a notify.&lt;br /&gt;
&lt;br /&gt;
Here is a quick example of it in use in multiple threads in the DM gametype...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 spawnPlayer()&lt;br /&gt;
 {&lt;br /&gt;
   self notify(&amp;quot;spawned&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   /*... Code snipped ... this is another type of &lt;br /&gt;
   comment that can span multiple lines. */&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Callback_PlayerKilled(attacker, some other arguments)&lt;br /&gt;
 {&lt;br /&gt;
   self endon(&amp;quot;spawned&amp;quot;); //this makes callback_playerkilled() terminate when &amp;quot;spawned&amp;quot; is triggered in spawnplayer().&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Scripting hints]] ==&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Geographylogo.png]][http://www.codjumper.com/forums/viewtopic.php?t=4011&amp;amp;sid=ed58d3b3f5bfa32350d4670d35c9f781 From CoDJumper.com]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Notify_/_Endon_/_Waittill&amp;diff=1846</id>
		<title>Notify / Endon / Waittill</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Notify_/_Endon_/_Waittill&amp;diff=1846"/>
		<updated>2008-10-23T23:40:29Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Notify / Endon / Waittill]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] These 3 functions allow you to make a script wait for specific events and then trigger those events in different parts of the scripts.&lt;br /&gt;
&lt;br /&gt;
This one ends the function it is inside when &#039;thread_restart&#039; is triggered on &#039;level&#039;:&lt;br /&gt;
&lt;br /&gt;
 level endon (&amp;quot;thread_restart&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
and this triggers the &#039;killed_player&#039; notification on &#039;self&#039; (which is a player in this case):&lt;br /&gt;
&lt;br /&gt;
 self notify(&amp;quot;killed_player&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
If you use &#039;player waittill(&amp;quot;x&amp;quot;)&#039; or &#039;player endon(&amp;quot;x&amp;quot;)&#039;, then using a &#039;level notify(&amp;quot;x&amp;quot;)&#039; will not trigger either of them - level is not the same entity as player, and all entities&#039; triggers are independant.&lt;br /&gt;
&lt;br /&gt;
Using the functions is easy. Firstly, decide which entity you want to wait for the trigger on. This is a player most of the time, but if you want a global trigger then use &#039;level&#039;.&lt;br /&gt;
&lt;br /&gt;
Then you must decide which trigger to use. You can choose either &amp;quot;endon&amp;quot; or &amp;quot;waittill&amp;quot; - they are both self explanatory, one will end the function it is running in when triggered, and the other will &#039;wait&#039; until the specified trigger.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next you decide on a unique name for the trigger. For example...&lt;br /&gt;
&lt;br /&gt;
 level endon(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
And to activate this trigger, you use notify on the same entity (level):&lt;br /&gt;
&lt;br /&gt;
 level notify(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
You can use as many waittill and endon functions as you want on an entity, in different functions. They will all be triggered by a notify.&lt;br /&gt;
&lt;br /&gt;
Here is a quick example of it in use in multiple threads in the DM gametype...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 spawnPlayer()&lt;br /&gt;
 {&lt;br /&gt;
   self notify(&amp;quot;spawned&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   /*... Code snipped ... this is another type of &lt;br /&gt;
   comment that can span multiple lines. */&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Callback_PlayerKilled(attacker, some other arguments)&lt;br /&gt;
 {&lt;br /&gt;
   self endon(&amp;quot;spawned&amp;quot;); //this makes callback_playerkilled() terminate when &amp;quot;spawned&amp;quot; is triggered in spawnplayer().&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Switch&amp;diff=1845</id>
		<title>Switch</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Switch&amp;diff=1845"/>
		<updated>2008-10-23T23:39:55Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Switch]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Switch is often used instead of multiple if statements, as it is more efficient and doesn&#039;t require you to type as much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to use &amp;quot;Switch&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch can be quite hard to understand at first glance, but after using it, it will become easier.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how it is used. This is taken from the menu scripts, which handles the ingame menus, I have cut the code and also added the commented lines myself.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;allies&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_allies&amp;quot;]);&lt;br /&gt;
   else if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;axis&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_axis&amp;quot;]);&lt;br /&gt;
 break;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_team&amp;quot;]);&lt;br /&gt;
 break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_muteplayer&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_callvote&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first part of the code is where the variable is defined. The game waits until a menu has been activated. The variables recieved are &amp;quot;menu&amp;quot; (the name of the menu activated) and &amp;quot;response&amp;quot; (what option was chosen from the menu). &amp;quot;Response&amp;quot; is the key variable for the &#039;Switch&#039;.&lt;br /&gt;
&lt;br /&gt;
After the variables have been defined, the Switch function is called. It then checks every &amp;quot;Case&amp;quot; (case is the term used for the possible outcomes of the variable) to find a match, if no match is found, the &amp;quot;Default&amp;quot; case is used. (if you do not have a default case, the script will crash - you can just add an empty one.)&lt;br /&gt;
&lt;br /&gt;
If a match is found, then the function will do ALL the events from that point onwards, which is why you MUST add &amp;quot;break;&amp;quot; at the end of every case, if the break is not existent, then all other case functions will run also.&lt;br /&gt;
&lt;br /&gt;
To use the above example, I shall input my own values to show how the example works...&lt;br /&gt;
&lt;br /&gt;
When I open the menu ingame, I choose the option &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The code kicks in and the variable &amp;quot;response&amp;quot; becomes equal to &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The switch statement will now look at every case for a positive match.&lt;br /&gt;
&lt;br /&gt;
Once the match is found, everything after the case will happen:&lt;br /&gt;
* self closeMenu(); //current menu closes&lt;br /&gt;
* self closeInGameMenu(); //close any other ingame menus&lt;br /&gt;
* self openMenu(game[&amp;quot;menu_team&amp;quot;]); //will open the team menu&lt;br /&gt;
* break; //the rest of the switch statement is ended and the code continues&lt;br /&gt;
&lt;br /&gt;
You can also make the script perform the same actions in multiple cases. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   function();&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that if the response variable is: &#039;changeweapon&#039;, &#039;changeteam&#039;, &#039;muteplayer&#039; or &#039;callvote&#039;, function(); will be called.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Arrays&amp;diff=1844</id>
		<title>Arrays</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Arrays&amp;diff=1844"/>
		<updated>2008-10-23T23:39:41Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Arrays]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Arrays are objects that store several variables. These can be integers, strings, entities or even other arrays.&lt;br /&gt;
&lt;br /&gt;
Arrays are extremely helpful when it comes to doing the same thing to several different objects, such as moving a few platforms by a certain amount in a map, or storing lots of related variables.&lt;br /&gt;
&lt;br /&gt;
To create an array we simply type...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 arrayName = [];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, to add an object/variable to this array, we can simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 array(array.size) = &amp;quot;a string variable&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whenever you see array.size, the .size does not mean it&#039;s dimensions, but the amount of items in the array. So if an array contains 1 piece of data, the array.size is 1. To retrieve an items from an array, you can use array[0] for the first object/var stored in it, and then array[1] and so on for successive items.&lt;br /&gt;
&lt;br /&gt;
Going back to the example above, we could retrieve the data by using array[0]. The first item in an array is listed as 0, the second as 1, and so on. This means that by using array(array.size) = &amp;quot;blah&amp;quot;;, we can add new items to it because of the offset of 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A common use for an array is to call a function on all of the players in the game. This can be done by using an array with a FOR loop.&lt;br /&gt;
To start with we must get our array of players, and instead of using the above method of defining an array and adding custom data, we can use a builtin function.&lt;br /&gt;
&lt;br /&gt;
 players = getEntArray(&amp;quot;player&amp;quot;, &amp;quot;classname&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
So, our array has been defined as &amp;quot;players&amp;quot;, or more accurately, &amp;quot;players[]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Inside &amp;quot;players[]&amp;quot; is every player on the server, and now all we need to do is use the array to thread a function to each player.&lt;br /&gt;
So, here we have a for loop to do such a thing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; players.size; i++)&lt;br /&gt;
 {&lt;br /&gt;
   players[i] thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
That&#039;s our loop to go through every player and call function(); on them.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;i&#039; is a variable not a letter, so &#039;i&#039; is substitued with the number of the loop.&lt;br /&gt;
In the first loop, &#039;i&#039; equals 0, so:&lt;br /&gt;
&lt;br /&gt;
 players[0] thread function();&lt;br /&gt;
&lt;br /&gt;
is executed.&lt;br /&gt;
&lt;br /&gt;
Arrays are a complicated part of scripting, but once you have them understood, they are one of the most useful things in the game.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Creating_Functions&amp;diff=1843</id>
		<title>Creating Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Creating_Functions&amp;diff=1843"/>
		<updated>2008-10-23T23:39:09Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Creating Functions]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] A custom function is a good way to use repeat sections of code more efficiently. For example, if you often use the same sequence of code, you can template them into a custom function. Imagine this is your code...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush1 moveZ(320, 5);&lt;br /&gt;
 brush1 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush2 moveZ(540, 3);&lt;br /&gt;
 brush2 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This can be simplified using a custom function, lets call this function &amp;quot;_moveEnt&amp;quot; (it is common practice to use an underscore as the first character of a function)&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
&lt;br /&gt;
As the above shows, we are going to need 3 arguements, ent (entity), dist (distance) and time.&lt;br /&gt;
&lt;br /&gt;
Now lets look at the full code with custom function in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   _moveEnt(brush1, 320, 5);&lt;br /&gt;
   _moveEnt(brush2, 540, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   ent moveZ(dist, time);&lt;br /&gt;
   ent waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As the above code shows, the custom function can simply be called using the required arguements, which are passed along and used in the new function.&lt;br /&gt;
&lt;br /&gt;
Once the custom function has finished, the script returns to the original location from where it was called.&lt;br /&gt;
&lt;br /&gt;
Functions can also return values to the original script, or even entities.&lt;br /&gt;
&lt;br /&gt;
A simple function to calculate volume from the width, height and depth:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   area = _areaEquation(2, 4, 6);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _areaEquation(x, y, z)&lt;br /&gt;
 {&lt;br /&gt;
   answer = x * y * z;&lt;br /&gt;
   return answer;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the code calls the function &#039;_areaEquation&#039; the function works out the &#039;answer&#039;, &#039;answer&#039; is the returned.&lt;br /&gt;
This declares a new variable (area). The variable area, is the answer that is returned by the function.&lt;br /&gt;
&lt;br /&gt;
The two lines:&lt;br /&gt;
&lt;br /&gt;
 answer = x * y * z;&lt;br /&gt;
 return answer;&lt;br /&gt;
&lt;br /&gt;
could be replace by&lt;br /&gt;
&lt;br /&gt;
   return x * y * z;&lt;br /&gt;
&lt;br /&gt;
for the same effect.&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=IFs,_Loops_%26_Logic&amp;diff=1842</id>
		<title>IFs, Loops &amp; Logic</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=IFs,_Loops_%26_Logic&amp;diff=1842"/>
		<updated>2008-10-23T23:38:53Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[IFs, Loops &amp;amp; Logic]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] This section will go into a little more detail of how to use &#039;if&#039; statements and loops.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement is used to verify whether some data satisfies certain conditions, and then to execute code depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
To understand this section, you must first know the operators used to compare data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
== :: Equal To&lt;br /&gt;
!= :: Not Equal To&lt;br /&gt;
!  :: Negation (Not equal to)&lt;br /&gt;
&amp;lt;  :: Less than&lt;br /&gt;
&amp;gt;  :: Greater than&lt;br /&gt;
&amp;lt;= :: Less or Equal to&lt;br /&gt;
&amp;gt;= :: Greater or Equal to&lt;br /&gt;
&amp;amp;&amp;amp; :: And&lt;br /&gt;
|| :: Or&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok, now that we have some operators, lets get started on the statement.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement, requires a minimum of one arguement and usually one operator.&lt;br /&gt;
&lt;br /&gt;
Here are some examples...notice the lack of semicolons at the end of the statements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(variable) //If variable is true&lt;br /&gt;
 if(!variable) //If variable is not true&lt;br /&gt;
 if(variable1 == variable2) //If variable1 is equal to variable2&lt;br /&gt;
 if(variable1 != variable2) //If variable1 is not equal to variable2&lt;br /&gt;
 if(integer1 &amp;lt; integer2) //If integer1 is less than integer2&lt;br /&gt;
 if(integer1 &amp;gt; integer2) //If integer1 is greater than integer2&lt;br /&gt;
 if(integer1 &amp;lt;= integer2) //If integer1 is less than or equal to integer2&lt;br /&gt;
 if(integer1 &amp;gt;= integer2) //If integer1 is greater or equal to integer2&lt;br /&gt;
 if((var1 == var2) &amp;amp;&amp;amp; (var3 != var4)) //If var1 is equal to var2 AND var3 is not equal to var4&lt;br /&gt;
 if((int1 &amp;gt; int2) || (var1 == var2)) //If int1 is greater than int2 OR var1 is equal to var2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To use an if statement to determine the movement of the script, you need to use the arguements to move the script in certain directions...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 equals var2, do this code&lt;br /&gt;
   //everything inside these curly braces&lt;br /&gt;
 }&lt;br /&gt;
 //then do this code regardless of the result&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the statement above is true, the code inside the curly brackets is processed, if it is not true, the code inside the brackets are skipped.&lt;br /&gt;
&lt;br /&gt;
Whether or not the statement is true, the code outside of the brackets is going to be processed. If this is not what you want, you need to use &amp;quot;Else&amp;quot; after the statement, for example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s true then do this&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s false then do this&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use an &amp;quot;else if&amp;quot; in the statement. This is used in a scenario where you want to check multiple comparisons.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if above arguement is true&lt;br /&gt;
 }&lt;br /&gt;
 else if(!var1 &amp;amp;&amp;amp; var3)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 is false but var3 is true&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if all other if statements were false&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Thats the basics of if&#039;s, so let move on to loops.&lt;br /&gt;
&lt;br /&gt;
Loops come in different forms...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; :: A while loop is a loop that keeps looping WHILE the arguement is true.&lt;br /&gt;
&#039;&#039;&#039;For&#039;&#039;&#039; :: A for loop is a loop that loops a set amount of times&lt;br /&gt;
&lt;br /&gt;
To use a while loop, a condition/some conditions must be stated: &amp;quot;while(conditions)&amp;quot;&lt;br /&gt;
Often, this loop is used for infinite loops, which last forever unless specifically stopped. This is done using the arguement of 1 or true (1 is the integer of true)&lt;br /&gt;
&lt;br /&gt;
 while(1)&lt;br /&gt;
 while(true)&lt;br /&gt;
&lt;br /&gt;
A while loop can also be used as a normal loop that loops while the arguement is true, when the arguement becomes false the loop exits automatically (or rather, doesn&#039;t begin executing the commands in the loop again but just finishes the loop in progress).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int = 0;&lt;br /&gt;
&lt;br /&gt;
 while(int &amp;lt; 10)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  int++;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code will loop while &#039;int&#039; is less than 10. The loop waits 1 second, and then the loop increments &#039;int&#039;. Once &#039;int&#039; is not less than 10, the loop breaks.&lt;br /&gt;
&lt;br /&gt;
The same applies for FOR loops.&lt;br /&gt;
&lt;br /&gt;
A FOR loop requires 3 arguements.&lt;br /&gt;
&lt;br /&gt;
for(declare; while; do)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Declare&#039;&#039;&#039; is the section which declares a variable for the loop to use. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; is what determines when the loop breaks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do&#039;&#039;&#039; is what the loop should do after each loop.&lt;br /&gt;
&lt;br /&gt;
A common FOR loop looks like this...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; int; i++)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code means: (i is 0, while i is smaller than int, add one to i).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s replace int with an actual number:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the sequence of events...&lt;br /&gt;
&lt;br /&gt;
- &#039;i&#039; = 0&lt;br /&gt;
- while i is less than 10, continue the loop&lt;br /&gt;
- perform code (wait 1; and function())&lt;br /&gt;
- increment &#039;i&#039; (i++)&lt;br /&gt;
&lt;br /&gt;
The FOR loop can also be used as an &amp;quot;infinite loop&amp;quot; using the &amp;quot;forever loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
&lt;br /&gt;
The above will simply keep repeating the code until manually terminated.&lt;br /&gt;
&lt;br /&gt;
The problem with infinite loops is that they will give you an error if you don&#039;t allow them to pause at any point - so all infinite loops require a wait statement somewhere in the executed code.&lt;br /&gt;
&lt;br /&gt;
To finish off, we need to know how to manually exit these loops. A common way to exit an infinite loop is to use an IF statement to determine when to &#039;break&#039; (break is the keyword used to exit a loop) - here is an example of an IF statement breaking an infinite loop...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(;;)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   if(var1 == var2)&lt;br /&gt;
   {&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above sequence simply goes...&lt;br /&gt;
&lt;br /&gt;
- wait 1 second&lt;br /&gt;
- check if statement...&lt;br /&gt;
- if var1 is equal to var2, break out of the loop&lt;br /&gt;
- else continue the loop&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Maths_%26_Operators&amp;diff=1841</id>
		<title>Maths &amp; Operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Maths_%26_Operators&amp;diff=1841"/>
		<updated>2008-10-23T23:38:06Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Maths &amp;amp; Operators]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Maths is used throughout scripting to get many different values, be it the distance between two objects or to calculate an equation.&lt;br /&gt;
&lt;br /&gt;
For example, a variable can be given data from an equation.&lt;br /&gt;
&lt;br /&gt;
 variable = 5 + 1;&lt;br /&gt;
&lt;br /&gt;
Although the above example is pretty pointless, as it adds one constant to another to make a constant, and you can just calculate it yourself and use the answer i.e.&lt;br /&gt;
&lt;br /&gt;
 variable = 6;&lt;br /&gt;
&lt;br /&gt;
But variables can be calculated using other variables, for example...&lt;br /&gt;
&lt;br /&gt;
 varAnswer = var1 + var2;&lt;br /&gt;
&lt;br /&gt;
varAnswer will be equal to the value of var1 plus the value of var2.&lt;br /&gt;
&lt;br /&gt;
There are several operators that can be used in maths...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ :: Addition&lt;br /&gt;
- :: Subtraction&lt;br /&gt;
* :: Multiplication&lt;br /&gt;
/ :: Division&lt;br /&gt;
% :: Modulus&lt;br /&gt;
= :: Equals&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also some more little-known operators such as... &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
++ :: Increment (+1)&lt;br /&gt;
-- :: Decrement (-1)&lt;br /&gt;
+= :: Incrementation (requires number)&lt;br /&gt;
-= :: Decrementation (requires number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example of these in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 var++; //Set var to var + 1&lt;br /&gt;
 var--; //Set var to var - 1&lt;br /&gt;
 var += int; //Set var to var + int&lt;br /&gt;
 var -= int; //Set var to var - int&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Using_Variables&amp;diff=1840</id>
		<title>Using Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Using_Variables&amp;diff=1840"/>
		<updated>2008-10-23T23:37:15Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== [[Using Variables]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Variables can be used in several ways, but in all cases they are used to store some data for the duration of the game. Variables come in different forms: integers, floats, entities, strings, arrays and booleans, there are also several different ways variables can be stored.&lt;br /&gt;
&lt;br /&gt;
A simple variable is simply declared using&lt;br /&gt;
&lt;br /&gt;
 variable = data;&lt;br /&gt;
&lt;br /&gt;
This variable can be used in the current function and any function that passes it as an argument, or is called on it (so it&#039;d be used as &#039;self&#039;).&lt;br /&gt;
&lt;br /&gt;
Variables can be global (which can be used in all threads without needing to be called) by using the&lt;br /&gt;
&lt;br /&gt;
 level.variable = data;&lt;br /&gt;
&lt;br /&gt;
or they can be assigned to entities individually&lt;br /&gt;
&lt;br /&gt;
 entity.variable = data;&lt;br /&gt;
&lt;br /&gt;
for things like player.health (integer, already built-in, but can be modified) and level.teamBased (boolean).&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Getting_Started&amp;diff=1839</id>
		<title>Getting Started</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Getting_Started&amp;diff=1839"/>
		<updated>2008-10-23T23:35:53Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== [[Getting Started]] ==&lt;br /&gt;
&lt;br /&gt;
This section will include several things you need to know before you start scripting.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] All scripts are contained within simple text files that contain no formatting, so programs such as Word are not to be used. The file format used for scripts within the Call of Duty series is &#039;GSC&#039; (.gsc). It is recommended you use a simple but effective editor for programming, such programs include [http://www.crimsoneditor.com/ Crimson Editor], [http://http://www.pnotepad.org/ Programmers Notepad] and [http://www.editplus.com/ Editplus].&lt;br /&gt;
&lt;br /&gt;
A few things you need to know before reading any further are a few common words used within scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables:&#039;&#039;&#039; variables are data storage locations which are assigned a name. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 integerthing = 1; //by the way, comments like this can be made using //, and are ignored by the game.&lt;br /&gt;
 floatthing = 0.5; &lt;br /&gt;
 stringthing = &amp;quot;Text and symbols 1234567890&amp;quot;;&lt;br /&gt;
 booleanthing = true; //another thing, almost every line must have a ; at the end or the script won&#039;t work. More on that later.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The variables are declared on the left, and assigned a value such as an integer (whole number), a float (a number containing a decimal), a string (text and symbols) or a boolean (true/false).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entities:&#039;&#039;&#039; These are objects that are used in maps, and can be referenced in the script. Entities include players, dropped guns, objectives, script_models, etc.&lt;br /&gt;
&lt;br /&gt;
They can be referenced using their their targetname or classname that has been set within the map.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Functions:&#039;&#039;&#039; an action or procedure that can be called or threaded and can return a value. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 funcMove()&lt;br /&gt;
 {&lt;br /&gt;
   self moveY(320, 3);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main function in the above code is &#039;&#039;&#039;funcMove()&#039;&#039;&#039;, and it will perform the actions inside the curly braces when it runs. There is also another function, &#039;&#039;&#039;moveY&#039;&#039;&#039;, which is a built-in function inside COD4, and moves an entity on the Y axis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguements:&#039;&#039;&#039; These are key piece of information that are passed along to functions, and can be any type of object (entity, string, boolean etc). The function that was passed the arguments can then reference them.&lt;br /&gt;
&lt;br /&gt;
For example, if a function is shown as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(arg1, arg2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The function is asking for two arguements to be sent to the function. An example of this in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 someotherstuff()&lt;br /&gt;
 {&lt;br /&gt;
   ent function(320, 5);&lt;br /&gt;
   thing function(320, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function(distance, time)&lt;br /&gt;
 {&lt;br /&gt;
   ent moveZ(distance, time);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As you can see, function() is called on both &#039;ent&#039; and &#039;thing&#039;, and the two arguments &#039;320&#039; and &#039;5&#039; are passed to the new function as &#039;distance&#039; and &#039;time&#039;. Then moveZ is called on the entities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Calling/Threading:&#039;&#039;&#039; these are used with functions. Functions can be threaded or called sequentially.&lt;br /&gt;
&lt;br /&gt;
If a function is threaded, then that function is performed while the script continues, whereas if a function is called sequentially, the script waits until the function is completed before it continues. Examples...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(); //the script will stop at this line and carry out function() before going down to...&lt;br /&gt;
 thread function(); //this will start function() and carry on to execute &#039;ent moveZ&#039;&lt;br /&gt;
 ent moveZ(350, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Self:&#039;&#039;&#039; If you call a function on an entity e.g &#039;unnamedent thread dostuff()&#039;, then within the function dostuff(), you can refer to unnamedent as &#039;self&#039;.&lt;br /&gt;
&lt;br /&gt;
For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 something()&lt;br /&gt;
 {&lt;br /&gt;
  ent = getent(&amp;quot;ent&amp;quot;,&amp;quot;targetname&amp;quot;);&lt;br /&gt;
  ent function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function()&lt;br /&gt;
 {&lt;br /&gt;
  self moveZ(150, 5);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1838</id>
		<title>Call of Duty 4: Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1838"/>
		<updated>2008-10-23T23:34:14Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
 Here is a very good tutorial on COD coding that my mate Danny Redford (hence - Drofder, as its Redford&lt;br /&gt;
 backwards :))&lt;br /&gt;
 wrote back in 2006, which is a succint introduction to a very complex thing. &#039;&#039;&#039;Tally;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|left]] &lt;br /&gt;
&#039;&#039;&#039;By Drofder2004&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ok, this is my own guide for scripting, it is incomplete and lacks a lot of formatting (I will try and get round to that soon). It was written in 2.5 hours and contains a lot of basic and slightly advanced guides on several base topics. Some areas contain more detail than others depending on relevance and difficulty.&lt;br /&gt;
&lt;br /&gt;
When I get more time, I will add to this guide. Once I have pretty much finished the majority of the guide I will provide several new scripts using several advanced functions.&lt;br /&gt;
&lt;br /&gt;
This guide should be used as a small starting guide for people new to scripting, and reference for those who know some scripting. This will provide an insight into how script can improve the fun of maps, and hopefully will help answer questions for those who are stuck.&lt;br /&gt;
&lt;br /&gt;
If you find any problems (be it wrong syntax, spelling or etc) then post.&lt;br /&gt;
If you want to request/criticise/compliment or whatever, again post.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
== [[Getting Started]] ==&lt;br /&gt;
&lt;br /&gt;
This section will include several things you need to know before you start scripting.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] All scripts are contained within simple text files that contain no formatting, so programs such as Word are not to be used. The file format used for scripts within the Call of Duty series is &#039;GSC&#039; (.gsc). It is recommended you use a simple but effective editor for programming, such programs include [http://www.crimsoneditor.com/ Crimson Editor], [http://http://www.pnotepad.org/ Programmers Notepad] and [http://www.editplus.com/ Editplus].&lt;br /&gt;
&lt;br /&gt;
A few things you need to know before reading any further are a few common words used within scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables:&#039;&#039;&#039; variables are data storage locations which are assigned a name. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 integerthing = 1; //by the way, comments like this can be made using //, and are ignored by the game.&lt;br /&gt;
 floatthing = 0.5; &lt;br /&gt;
 stringthing = &amp;quot;Text and symbols 1234567890&amp;quot;;&lt;br /&gt;
 booleanthing = true; //another thing, almost every line must have a ; at the end or the script won&#039;t work. More on that later.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The variables are declared on the left, and assigned a value such as an integer (whole number), a float (a number containing a decimal), a string (text and symbols) or a boolean (true/false).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entities:&#039;&#039;&#039; These are objects that are used in maps, and can be referenced in the script. Entities include players, dropped guns, objectives, script_models, etc.&lt;br /&gt;
&lt;br /&gt;
They can be referenced using their their targetname or classname that has been set within the map.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Functions:&#039;&#039;&#039; an action or procedure that can be called or threaded and can return a value. For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 funcMove()&lt;br /&gt;
 {&lt;br /&gt;
   self moveY(320, 3);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The main function in the above code is &#039;&#039;&#039;funcMove()&#039;&#039;&#039;, and it will perform the actions inside the curly braces when it runs. There is also another function, &#039;&#039;&#039;moveY&#039;&#039;&#039;, which is a built-in function inside COD4, and moves an entity on the Y axis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguements:&#039;&#039;&#039; These are key piece of information that are passed along to functions, and can be any type of object (entity, string, boolean etc). The function that was passed the arguments can then reference them.&lt;br /&gt;
&lt;br /&gt;
For example, if a function is shown as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(arg1, arg2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The function is asking for two arguements to be sent to the function. An example of this in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 someotherstuff()&lt;br /&gt;
 {&lt;br /&gt;
   ent function(320, 5);&lt;br /&gt;
   thing function(320, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function(distance, time)&lt;br /&gt;
 {&lt;br /&gt;
   ent moveZ(distance, time);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As you can see, function() is called on both &#039;ent&#039; and &#039;thing&#039;, and the two arguments &#039;320&#039; and &#039;5&#039; are passed to the new function as &#039;distance&#039; and &#039;time&#039;. Then moveZ is called on the entities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Calling/Threading:&#039;&#039;&#039; these are used with functions. Functions can be threaded or called sequentially.&lt;br /&gt;
&lt;br /&gt;
If a function is threaded, then that function is performed while the script continues, whereas if a function is called sequentially, the script waits until the function is completed before it continues. Examples...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 function(); //the script will stop at this line and carry out function() before going down to...&lt;br /&gt;
 thread function(); //this will start function() and carry on to execute &#039;ent moveZ&#039;&lt;br /&gt;
 ent moveZ(350, 5);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Self:&#039;&#039;&#039; If you call a function on an entity e.g &#039;unnamedent thread dostuff()&#039;, then within the function dostuff(), you can refer to unnamedent as &#039;self&#039;.&lt;br /&gt;
&lt;br /&gt;
For example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 something()&lt;br /&gt;
 {&lt;br /&gt;
  ent = getent(&amp;quot;ent&amp;quot;,&amp;quot;targetname&amp;quot;);&lt;br /&gt;
  ent function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function()&lt;br /&gt;
 {&lt;br /&gt;
  self moveZ(150, 5);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[Using Variables]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Variables can be used in several ways, but in all cases they are used to store some data for the duration of the game. Variables come in different forms: integers, floats, entities, strings, arrays and booleans, there are also several different ways variables can be stored.&lt;br /&gt;
&lt;br /&gt;
A simple variable is simply declared using&lt;br /&gt;
&lt;br /&gt;
 variable = data;&lt;br /&gt;
&lt;br /&gt;
This variable can be used in the current function and any function that passes it as an argument, or is called on it (so it&#039;d be used as &#039;self&#039;).&lt;br /&gt;
&lt;br /&gt;
Variables can be global (which can be used in all threads without needing to be called) by using the&lt;br /&gt;
&lt;br /&gt;
 level.variable = data;&lt;br /&gt;
&lt;br /&gt;
or they can be assigned to entities individually&lt;br /&gt;
&lt;br /&gt;
 entity.variable = data;&lt;br /&gt;
&lt;br /&gt;
for things like player.health (integer, already built-in, but can be modified) and level.teamBased (boolean).&lt;br /&gt;
&lt;br /&gt;
== Maths &amp;amp; Operators ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Maths is used throughout scripting to get many different values, be it the distance between two objects or to calculate an equation.&lt;br /&gt;
&lt;br /&gt;
For example, a variable can be given data from an equation.&lt;br /&gt;
&lt;br /&gt;
 variable = 5 + 1;&lt;br /&gt;
&lt;br /&gt;
Although the above example is pretty pointless, as it adds one constant to another to make a constant, and you can just calculate it yourself and use the answer i.e.&lt;br /&gt;
&lt;br /&gt;
 variable = 6;&lt;br /&gt;
&lt;br /&gt;
But variables can be calculated using other variables, for example...&lt;br /&gt;
&lt;br /&gt;
 varAnswer = var1 + var2;&lt;br /&gt;
&lt;br /&gt;
varAnswer will be equal to the value of var1 plus the value of var2.&lt;br /&gt;
&lt;br /&gt;
There are several operators that can be used in maths...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ :: Addition&lt;br /&gt;
- :: Subtraction&lt;br /&gt;
* :: Multiplication&lt;br /&gt;
/ :: Division&lt;br /&gt;
% :: Modulus&lt;br /&gt;
= :: Equals&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also some more little-known operators such as... &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
++ :: Increment (+1)&lt;br /&gt;
-- :: Decrement (-1)&lt;br /&gt;
+= :: Incrementation (requires number)&lt;br /&gt;
-= :: Decrementation (requires number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example of these in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 var++; //Set var to var + 1&lt;br /&gt;
 var--; //Set var to var - 1&lt;br /&gt;
 var += int; //Set var to var + int&lt;br /&gt;
 var -= int; //Set var to var - int&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== [[IFs, Loops &amp;amp; Logic]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] This section will go into a little more detail of how to use &#039;if&#039; statements and loops.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement is used to verify whether some data satisfies certain conditions, and then to execute code depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
To understand this section, you must first know the operators used to compare data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
== :: Equal To&lt;br /&gt;
!= :: Not Equal To&lt;br /&gt;
!  :: Negation (Not equal to)&lt;br /&gt;
&amp;lt;  :: Less than&lt;br /&gt;
&amp;gt;  :: Greater than&lt;br /&gt;
&amp;lt;= :: Less or Equal to&lt;br /&gt;
&amp;gt;= :: Greater or Equal to&lt;br /&gt;
&amp;amp;&amp;amp; :: And&lt;br /&gt;
|| :: Or&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok, now that we have some operators, lets get started on the statement.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement, requires a minimum of one arguement and usually one operator.&lt;br /&gt;
&lt;br /&gt;
Here are some examples...notice the lack of semicolons at the end of the statements.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(variable) //If variable is true&lt;br /&gt;
 if(!variable) //If variable is not true&lt;br /&gt;
 if(variable1 == variable2) //If variable1 is equal to variable2&lt;br /&gt;
 if(variable1 != variable2) //If variable1 is not equal to variable2&lt;br /&gt;
 if(integer1 &amp;lt; integer2) //If integer1 is less than integer2&lt;br /&gt;
 if(integer1 &amp;gt; integer2) //If integer1 is greater than integer2&lt;br /&gt;
 if(integer1 &amp;lt;= integer2) //If integer1 is less than or equal to integer2&lt;br /&gt;
 if(integer1 &amp;gt;= integer2) //If integer1 is greater or equal to integer2&lt;br /&gt;
 if((var1 == var2) &amp;amp;&amp;amp; (var3 != var4)) //If var1 is equal to var2 AND var3 is not equal to var4&lt;br /&gt;
 if((int1 &amp;gt; int2) || (var1 == var2)) //If int1 is greater than int2 OR var1 is equal to var2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To use an if statement to determine the movement of the script, you need to use the arguements to move the script in certain directions...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 equals var2, do this code&lt;br /&gt;
   //everything inside these curly braces&lt;br /&gt;
 }&lt;br /&gt;
 //then do this code regardless of the result&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If the statement above is true, the code inside the curly brackets is processed, if it is not true, the code inside the brackets are skipped.&lt;br /&gt;
&lt;br /&gt;
Whether or not the statement is true, the code outside of the brackets is going to be processed. If this is not what you want, you need to use &amp;quot;Else&amp;quot; after the statement, for example...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s true then do this&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s false then do this&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You can also use an &amp;quot;else if&amp;quot; in the statement. This is used in a scenario where you want to check multiple comparisons.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if above arguement is true&lt;br /&gt;
 }&lt;br /&gt;
 else if(!var1 &amp;amp;&amp;amp; var3)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 is false but var3 is true&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if all other if statements were false&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Thats the basics of if&#039;s, so let move on to loops.&lt;br /&gt;
&lt;br /&gt;
Loops come in different forms...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; :: A while loop is a loop that keeps looping WHILE the arguement is true.&lt;br /&gt;
&#039;&#039;&#039;For&#039;&#039;&#039; :: A for loop is a loop that loops a set amount of times&lt;br /&gt;
&lt;br /&gt;
To use a while loop, a condition/some conditions must be stated: &amp;quot;while(conditions)&amp;quot;&lt;br /&gt;
Often, this loop is used for infinite loops, which last forever unless specifically stopped. This is done using the arguement of 1 or true (1 is the integer of true)&lt;br /&gt;
&lt;br /&gt;
 while(1)&lt;br /&gt;
 while(true)&lt;br /&gt;
&lt;br /&gt;
A while loop can also be used as a normal loop that loops while the arguement is true, when the arguement becomes false the loop exits automatically (or rather, doesn&#039;t begin executing the commands in the loop again but just finishes the loop in progress).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 int = 0;&lt;br /&gt;
&lt;br /&gt;
 while(int &amp;lt; 10)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  int++;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code will loop while &#039;int&#039; is less than 10. The loop waits 1 second, and then the loop increments &#039;int&#039;. Once &#039;int&#039; is not less than 10, the loop breaks.&lt;br /&gt;
&lt;br /&gt;
The same applies for FOR loops.&lt;br /&gt;
&lt;br /&gt;
A FOR loop requires 3 arguements.&lt;br /&gt;
&lt;br /&gt;
for(declare; while; do)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Declare&#039;&#039;&#039; is the section which declares a variable for the loop to use. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; is what determines when the loop breaks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do&#039;&#039;&#039; is what the loop should do after each loop.&lt;br /&gt;
&lt;br /&gt;
A common FOR loop looks like this...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; int; i++)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above code means: (i is 0, while i is smaller than int, add one to i).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s replace int with an actual number:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This is the sequence of events...&lt;br /&gt;
&lt;br /&gt;
- &#039;i&#039; = 0&lt;br /&gt;
- while i is less than 10, continue the loop&lt;br /&gt;
- perform code (wait 1; and function())&lt;br /&gt;
- increment &#039;i&#039; (i++)&lt;br /&gt;
&lt;br /&gt;
The FOR loop can also be used as an &amp;quot;infinite loop&amp;quot; using the &amp;quot;forever loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
&lt;br /&gt;
The above will simply keep repeating the code until manually terminated.&lt;br /&gt;
&lt;br /&gt;
The problem with infinite loops is that they will give you an error if you don&#039;t allow them to pause at any point - so all infinite loops require a wait statement somewhere in the executed code.&lt;br /&gt;
&lt;br /&gt;
To finish off, we need to know how to manually exit these loops. A common way to exit an infinite loop is to use an IF statement to determine when to &#039;break&#039; (break is the keyword used to exit a loop) - here is an example of an IF statement breaking an infinite loop...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(;;)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   if(var1 == var2)&lt;br /&gt;
   {&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The above sequence simply goes...&lt;br /&gt;
&lt;br /&gt;
- wait 1 second&lt;br /&gt;
- check if statement...&lt;br /&gt;
- if var1 is equal to var2, break out of the loop&lt;br /&gt;
- else continue the loop&lt;br /&gt;
&lt;br /&gt;
== [[Creating Functions]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] A custom function is a good way to use repeat sections of code more efficiently. For example, if you often use the same sequence of code, you can template them into a custom function. Imagine this is your code...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush1 moveZ(320, 5);&lt;br /&gt;
 brush1 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush2 moveZ(540, 3);&lt;br /&gt;
 brush2 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This can be simplified using a custom function, lets call this function &amp;quot;_moveEnt&amp;quot; (it is common practice to use an underscore as the first character of a function)&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
&lt;br /&gt;
As the above shows, we are going to need 3 arguements, ent (entity), dist (distance) and time.&lt;br /&gt;
&lt;br /&gt;
Now lets look at the full code with custom function in use...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   _moveEnt(brush1, 320, 5);&lt;br /&gt;
   _moveEnt(brush2, 540, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   ent moveZ(dist, time);&lt;br /&gt;
   ent waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
As the above code shows, the custom function can simply be called using the required arguements, which are passed along and used in the new function.&lt;br /&gt;
&lt;br /&gt;
Once the custom function has finished, the script returns to the original location from where it was called.&lt;br /&gt;
&lt;br /&gt;
Functions can also return values to the original script, or even entities.&lt;br /&gt;
&lt;br /&gt;
A simple function to calculate volume from the width, height and depth:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {&lt;br /&gt;
   area = _areaEquation(2, 4, 6);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _areaEquation(x, y, z)&lt;br /&gt;
 {&lt;br /&gt;
   answer = x * y * z;&lt;br /&gt;
   return answer;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Once the code calls the function &#039;_areaEquation&#039; the function works out the &#039;answer&#039;, &#039;answer&#039; is the returned.&lt;br /&gt;
This declares a new variable (area). The variable area, is the answer that is returned by the function.&lt;br /&gt;
&lt;br /&gt;
The two lines:&lt;br /&gt;
&lt;br /&gt;
 answer = x * y * z;&lt;br /&gt;
 return answer;&lt;br /&gt;
&lt;br /&gt;
could be replace by&lt;br /&gt;
&lt;br /&gt;
   return x * y * z;&lt;br /&gt;
&lt;br /&gt;
for the same effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Arrays]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Arrays are objects that store several variables. These can be integers, strings, entities or even other arrays.&lt;br /&gt;
&lt;br /&gt;
Arrays are extremely helpful when it comes to doing the same thing to several different objects, such as moving a few platforms by a certain amount in a map, or storing lots of related variables.&lt;br /&gt;
&lt;br /&gt;
To create an array we simply type...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 arrayName = [];&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, to add an object/variable to this array, we can simply use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 array(array.size) = &amp;quot;a string variable&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Whenever you see array.size, the .size does not mean it&#039;s dimensions, but the amount of items in the array. So if an array contains 1 piece of data, the array.size is 1. To retrieve an items from an array, you can use array[0] for the first object/var stored in it, and then array[1] and so on for successive items.&lt;br /&gt;
&lt;br /&gt;
Going back to the example above, we could retrieve the data by using array[0]. The first item in an array is listed as 0, the second as 1, and so on. This means that by using array(array.size) = &amp;quot;blah&amp;quot;;, we can add new items to it because of the offset of 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A common use for an array is to call a function on all of the players in the game. This can be done by using an array with a FOR loop.&lt;br /&gt;
To start with we must get our array of players, and instead of using the above method of defining an array and adding custom data, we can use a builtin function.&lt;br /&gt;
&lt;br /&gt;
 players = getEntArray(&amp;quot;player&amp;quot;, &amp;quot;classname&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
So, our array has been defined as &amp;quot;players&amp;quot;, or more accurately, &amp;quot;players[]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Inside &amp;quot;players[]&amp;quot; is every player on the server, and now all we need to do is use the array to thread a function to each player.&lt;br /&gt;
So, here we have a for loop to do such a thing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for(i = 0; i &amp;lt; players.size; i++)&lt;br /&gt;
 {&lt;br /&gt;
   players[i] thread function();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
That&#039;s our loop to go through every player and call function(); on them.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;i&#039; is a variable not a letter, so &#039;i&#039; is substitued with the number of the loop.&lt;br /&gt;
In the first loop, &#039;i&#039; equals 0, so:&lt;br /&gt;
&lt;br /&gt;
 players[0] thread function();&lt;br /&gt;
&lt;br /&gt;
is executed.&lt;br /&gt;
&lt;br /&gt;
Arrays are a complicated part of scripting, but once you have them understood, they are one of the most useful things in the game.&lt;br /&gt;
&lt;br /&gt;
== [[Switch]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Switch is often used instead of multiple if statements, as it is more efficient and doesn&#039;t require you to type as much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to use &amp;quot;Switch&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch can be quite hard to understand at first glance, but after using it, it will become easier.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how it is used. This is taken from the menu scripts, which handles the ingame menus, I have cut the code and also added the commented lines myself.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;allies&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_allies&amp;quot;]);&lt;br /&gt;
   else if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;axis&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_axis&amp;quot;]);&lt;br /&gt;
 break;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_team&amp;quot;]);&lt;br /&gt;
 break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_muteplayer&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_callvote&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The first part of the code is where the variable is defined. The game waits until a menu has been activated. The variables recieved are &amp;quot;menu&amp;quot; (the name of the menu activated) and &amp;quot;response&amp;quot; (what option was chosen from the menu). &amp;quot;Response&amp;quot; is the key variable for the &#039;Switch&#039;.&lt;br /&gt;
&lt;br /&gt;
After the variables have been defined, the Switch function is called. It then checks every &amp;quot;Case&amp;quot; (case is the term used for the possible outcomes of the variable) to find a match, if no match is found, the &amp;quot;Default&amp;quot; case is used. (if you do not have a default case, the script will crash - you can just add an empty one.)&lt;br /&gt;
&lt;br /&gt;
If a match is found, then the function will do ALL the events from that point onwards, which is why you MUST add &amp;quot;break;&amp;quot; at the end of every case, if the break is not existent, then all other case functions will run also.&lt;br /&gt;
&lt;br /&gt;
To use the above example, I shall input my own values to show how the example works...&lt;br /&gt;
&lt;br /&gt;
When I open the menu ingame, I choose the option &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The code kicks in and the variable &amp;quot;response&amp;quot; becomes equal to &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The switch statement will now look at every case for a positive match.&lt;br /&gt;
&lt;br /&gt;
Once the match is found, everything after the case will happen:&lt;br /&gt;
* self closeMenu(); //current menu closes&lt;br /&gt;
* self closeInGameMenu(); //close any other ingame menus&lt;br /&gt;
* self openMenu(game[&amp;quot;menu_team&amp;quot;]); //will open the team menu&lt;br /&gt;
* break; //the rest of the switch statement is ended and the code continues&lt;br /&gt;
&lt;br /&gt;
You can also make the script perform the same actions in multiple cases. For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   function();&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This means that if the response variable is: &#039;changeweapon&#039;, &#039;changeteam&#039;, &#039;muteplayer&#039; or &#039;callvote&#039;, function(); will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Notify / Endon / Waittill]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] These 3 functions allow you to make a script wait for specific events and then trigger those events in different parts of the scripts.&lt;br /&gt;
&lt;br /&gt;
This one ends the function it is inside when &#039;thread_restart&#039; is triggered on &#039;level&#039;:&lt;br /&gt;
&lt;br /&gt;
 level endon (&amp;quot;thread_restart&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
and this triggers the &#039;killed_player&#039; notification on &#039;self&#039; (which is a player in this case):&lt;br /&gt;
&lt;br /&gt;
 self notify(&amp;quot;killed_player&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
If you use &#039;player waittill(&amp;quot;x&amp;quot;)&#039; or &#039;player endon(&amp;quot;x&amp;quot;)&#039;, then using a &#039;level notify(&amp;quot;x&amp;quot;)&#039; will not trigger either of them - level is not the same entity as player, and all entities&#039; triggers are independant.&lt;br /&gt;
&lt;br /&gt;
Using the functions is easy. Firstly, decide which entity you want to wait for the trigger on. This is a player most of the time, but if you want a global trigger then use &#039;level&#039;.&lt;br /&gt;
&lt;br /&gt;
Then you must decide which trigger to use. You can choose either &amp;quot;endon&amp;quot; or &amp;quot;waittill&amp;quot; - they are both self explanatory, one will end the function it is running in when triggered, and the other will &#039;wait&#039; until the specified trigger.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next you decide on a unique name for the trigger. For example...&lt;br /&gt;
&lt;br /&gt;
 level endon(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
And to activate this trigger, you use notify on the same entity (level):&lt;br /&gt;
&lt;br /&gt;
 level notify(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
You can use as many waittill and endon functions as you want on an entity, in different functions. They will all be triggered by a notify.&lt;br /&gt;
&lt;br /&gt;
Here is a quick example of it in use in multiple threads in the DM gametype...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 spawnPlayer()&lt;br /&gt;
 {&lt;br /&gt;
   self notify(&amp;quot;spawned&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   /*... Code snipped ... this is another type of &lt;br /&gt;
   comment that can span multiple lines. */&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Callback_PlayerKilled(attacker, some other arguments)&lt;br /&gt;
 {&lt;br /&gt;
   self endon(&amp;quot;spawned&amp;quot;); //this makes callback_playerkilled() terminate when &amp;quot;spawned&amp;quot; is triggered in spawnplayer().&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[Random stuff]] ==&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Geographylogo.png]][http://www.codjumper.com/forums/viewtopic.php?t=4011&amp;amp;sid=ed58d3b3f5bfa32350d4670d35c9f781 From CoDJumper.com]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1837</id>
		<title>Call of Duty 4: Introduction</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Introduction&amp;diff=1837"/>
		<updated>2008-10-23T23:28:22Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Lots of changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modding]]&lt;br /&gt;
 Here is a very good tutorial on COD coding that my mate Danny Redford (hence - Drofder, as its Redford&lt;br /&gt;
 backwards :))&lt;br /&gt;
 wrote back in 2006, which is a succint introduction to a very complex thing. &#039;&#039;&#039;Tally;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|left]] &lt;br /&gt;
&#039;&#039;&#039;By Drofder2004&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ok, this is my own guide for scripting, it is incomplete and lacks a lot of formatting (I will try and get round to that soon). It was written in 2.5 hours and contains a lot of basic and slightly advanced guides on several base topics. Some areas contain more detail than others depending on relevance and difficulty.&lt;br /&gt;
&lt;br /&gt;
When I get more time, I will add to this guide. Once I have pretty much finished the majority of the guide I will provide several new scripts using several advanced functions.&lt;br /&gt;
&lt;br /&gt;
This guide should be used as a small starting guide for people new to scripting, and reference for those who know some scripting. This will provide an insight into how script can improve the fun of maps, and hopefully will help answer questions for those who are stuck.&lt;br /&gt;
&lt;br /&gt;
If you find any problems (be it wrong syntax, spelling or etc) then post.&lt;br /&gt;
If you want to request/criticise/compliments or whatever, again post.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
== [[Getting Started]] ==&lt;br /&gt;
&lt;br /&gt;
This section will include serveral things you need to know before you start scripting.&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] All scripts are contained within simple text files that contain no formatting, so programs such as Word are not to be used. The file format used for scripts within the Call of Duty series is &#039;GSC&#039; (.gsc). It is recommended you use a simple but effective editor for programming, such programs include [http://www.crimsoneditor.com/ Crimson Editor], [http://http://www.pnotepad.org/ Programmers Notepad] and [http://www.editplus.com/ Editplus].&lt;br /&gt;
&lt;br /&gt;
A few things you need to know before reading any further are a few common words used within scripting.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Variables:&#039;&#039;&#039; variables are data storage locations which are assigned a name. For example...&lt;br /&gt;
&lt;br /&gt;
 integerthing = 1; //by the way, comments like this can be made using //, and are ignored by the game.&lt;br /&gt;
 floatthing = 0.5; &lt;br /&gt;
 stringthing = &amp;quot;Text and symbols 1234567890&amp;quot;;&lt;br /&gt;
 booleanthing = true; //another thing, almost every line must have a ; at the end or the script won&#039;t work. More on that later.&lt;br /&gt;
&lt;br /&gt;
The variables are declared on the left, and assigned a value such as an integer (whole number), a float (a number containing a decimal), a string (text and symbols) or a boolean (true/false).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Entities:&#039;&#039;&#039; These are objects that are used in maps, and can be referenced in the script. Entities include players, dropped guns, objectives, script_models, etc.&lt;br /&gt;
&lt;br /&gt;
They can be referenced using their their targetname or classname that has been set within the map.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Functions:&#039;&#039;&#039; an action or procedure that can be called or threaded and can return a value. For example...&lt;br /&gt;
&lt;br /&gt;
 funcMove()&lt;br /&gt;
 {&lt;br /&gt;
   self moveY(320, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The main function in the above code is &#039;&#039;&#039;funcMove()&#039;&#039;&#039;, and it will perform the actions inside the curly braces when it runs. There is also another function, &#039;&#039;&#039;moveY&#039;&#039;&#039;, which is a built-in function inside COD4, and moves an entity on the Y axis.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Arguements:&#039;&#039;&#039; These are key piece of information that are passed along to functions, and can be any type of object (entity, string, boolean etc). The function that was passed the arguments can then reference them.&lt;br /&gt;
&lt;br /&gt;
For example, if a function is shown as&lt;br /&gt;
&lt;br /&gt;
 function(arg1, arg2)&lt;br /&gt;
&lt;br /&gt;
The function is asking for two arguements to be sent to the function. An example of this in use...&lt;br /&gt;
&lt;br /&gt;
 someotherstuff()&lt;br /&gt;
 {&lt;br /&gt;
   ent function(320, 5);&lt;br /&gt;
   thing function(320, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function(distance, time)&lt;br /&gt;
 {&lt;br /&gt;
   ent moveZ(distance, time);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As you can see, function() is called on both &#039;ent&#039; and &#039;thing&#039;, and the two arguments &#039;320&#039; and &#039;5&#039; are passed to the new function as &#039;distance&#039; and &#039;time&#039;. Then moveZ is called on the entities.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Calling/Threading:&#039;&#039;&#039; these are used with functions. Functions can be threaded or called sequentially.&lt;br /&gt;
&lt;br /&gt;
If a function is threaded, then that function is performed while the script continues, whereas if a function is called sequentially, the script waits until the function is completed before it continues. Examples...&lt;br /&gt;
&lt;br /&gt;
 function(); //the script will stop at this line and carry out function() before going down to...&lt;br /&gt;
 thread function(); //this will start function() and carry on to execute &#039;ent moveZ&#039;&lt;br /&gt;
 ent moveZ(350, 5);&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Self:&#039;&#039;&#039; If you call a function on an entity e.g &#039;unnamedent thread dostuff()&#039;, then within the function dostuff(), you can refer to unnamedent as &#039;self&#039;.&lt;br /&gt;
&lt;br /&gt;
For example...&lt;br /&gt;
&lt;br /&gt;
 something()&lt;br /&gt;
 {&lt;br /&gt;
  ent = getent(&amp;quot;ent&amp;quot;,&amp;quot;targetname&amp;quot;);&lt;br /&gt;
  ent function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 function()&lt;br /&gt;
 {&lt;br /&gt;
  self moveZ(150, 5);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== [[Using Variables]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Variables can be used in several ways, but in all cases they are used to store some data for the duration of the game. Variables come in different forms: integers, floats, entities, strings, arrays and booleans, there are also several different ways variables can be stored.&lt;br /&gt;
&lt;br /&gt;
A simple variable is simply declared using&lt;br /&gt;
&lt;br /&gt;
 variable = data;&lt;br /&gt;
&lt;br /&gt;
This variable can be used in the current function and any function that passes it as an argument, or is called on it (so it&#039;d be used as &#039;self&#039;).&lt;br /&gt;
&lt;br /&gt;
Variables can be global (which can be used in all threads without needing to be called) by using the&lt;br /&gt;
&lt;br /&gt;
 level.variable = data;&lt;br /&gt;
&lt;br /&gt;
or they can be assigned to entities individually&lt;br /&gt;
&lt;br /&gt;
 entity.variable = data;&lt;br /&gt;
&lt;br /&gt;
for things like player.health (integer, already built-in, but can be modified) and level.teamBased (boolean).&lt;br /&gt;
&lt;br /&gt;
== Maths &amp;amp; Operators ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Maths is used throughout scripting to get many different values, be it the distance between two objects or to calculate an equation.&lt;br /&gt;
&lt;br /&gt;
For example, a variable can be given data from an equation.&lt;br /&gt;
&lt;br /&gt;
 variable = 5 + 1;&lt;br /&gt;
&lt;br /&gt;
Although the above example is pretty pointless, as it adds one constant to another to make a constant, and you can just calculate it yourself and use the answer i.e.&lt;br /&gt;
&lt;br /&gt;
 variable = 6;&lt;br /&gt;
&lt;br /&gt;
But variables can be calculated using other variables, for example...&lt;br /&gt;
&lt;br /&gt;
 varAnswer = var1 + var2;&lt;br /&gt;
&lt;br /&gt;
varAnswer will be equal to the value of var1 plus the value of var2.&lt;br /&gt;
&lt;br /&gt;
There are several operators that can be used in maths...&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+ :: Addition&lt;br /&gt;
- :: Subtraction&lt;br /&gt;
* :: Multiplication&lt;br /&gt;
/ :: Division&lt;br /&gt;
% :: Modulus&lt;br /&gt;
= :: Equals&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
There are also some more little-known operators such as... &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
++ :: Increment (+1)&lt;br /&gt;
-- :: Decrement (-1)&lt;br /&gt;
+= :: Incrementation (requires number)&lt;br /&gt;
-= :: Decrementation (requires number)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Example of these in use...&lt;br /&gt;
&lt;br /&gt;
 var++; //Set var to var + 1&lt;br /&gt;
 var--; //Set var to var - 1&lt;br /&gt;
 var += int; //Set var to var + int&lt;br /&gt;
 var -= int; //Set var to var - int&lt;br /&gt;
&lt;br /&gt;
== [[IFs, Loops &amp;amp; Logic]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] This section will go into a little more detail of how to use &#039;if&#039; statements and loops.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement is used to verify whether some data satisfies certain conditions, and then to execute code depending on the outcome.&lt;br /&gt;
&lt;br /&gt;
To understand this section, you must first know the operators used to compare data:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
== :: Equal To&lt;br /&gt;
!= :: Not Equal To&lt;br /&gt;
!  :: Negation (Not equal to)&lt;br /&gt;
&amp;lt;  :: Less than&lt;br /&gt;
&amp;gt;  :: Greater than&lt;br /&gt;
&amp;lt;= :: Less or Equal to&lt;br /&gt;
&amp;gt;= :: Greater or Equal to&lt;br /&gt;
&amp;amp;&amp;amp; :: And&lt;br /&gt;
|| :: Or&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ok, now that we have some operators, lets get started on the statement.&lt;br /&gt;
&lt;br /&gt;
An &#039;if&#039; statement, requires a minimum of one arguement and usually one operator.&lt;br /&gt;
&lt;br /&gt;
Here are some examples...notice the lack of semicolons at the end of the statements.&lt;br /&gt;
&lt;br /&gt;
 if(variable) //If variable is true&lt;br /&gt;
 if(!variable) //If variable is not true&lt;br /&gt;
 if(variable1 == variable2) //If variable1 is equal to variable2&lt;br /&gt;
 if(variable1 != variable2) //If variable1 is not equal to variable2&lt;br /&gt;
 if(integer1 &amp;lt; integer2) //If integer1 is less than integer2&lt;br /&gt;
 if(integer1 &amp;gt; integer2) //If integer1 is greater than integer2&lt;br /&gt;
 if(integer1 &amp;lt;= integer2) //If integer1 is less than or equal to integer2&lt;br /&gt;
 if(integer1 &amp;gt;= integer2) //If integer1 is greater or equal to integer2&lt;br /&gt;
 if((var1 == var2) &amp;amp;&amp;amp; (var3 != var4)) //If var1 is equal to var2 AND var3 is not equal to var4&lt;br /&gt;
 if((int1 &amp;gt; int2) || (var1 == var2)) //If int1 is greater than int2 OR var1 is equal to var2&lt;br /&gt;
&lt;br /&gt;
To use an if statement to determine the movement of the script, you need to use the arguements to move the script in certain directions...&lt;br /&gt;
&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 equals var2, do this code&lt;br /&gt;
   //everything inside these curly braces&lt;br /&gt;
 }&lt;br /&gt;
 //then do this code regardless of the result&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
If the statement above is true, the code inside the curly brackets is processed, if it is not true, the code inside the brackets are skipped.&lt;br /&gt;
&lt;br /&gt;
Whether or not the statement is true, the code outside of the brackets is going to be processed. If this is not what you want, you need to use &amp;quot;Else&amp;quot; after the statement, for example...&lt;br /&gt;
&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s true then do this&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if it&#039;s false then do this&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You can also use an &amp;quot;else if&amp;quot; in the statement. This is used in a scenario where you want to check multiple comparisons.&lt;br /&gt;
&lt;br /&gt;
 if(var1 == var2)&lt;br /&gt;
 {&lt;br /&gt;
   //if above arguement is true&lt;br /&gt;
 }&lt;br /&gt;
 else if(!var1 &amp;amp;&amp;amp; var3)&lt;br /&gt;
 {&lt;br /&gt;
   //if var1 is false but var3 is true&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
   //if all other if statements were false&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Thats the basics of if&#039;s, so let move on to loops.&lt;br /&gt;
&lt;br /&gt;
Loops come in different forms...&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; :: A while loop is a loop that keeps looping WHILE the arguement is true.&lt;br /&gt;
&#039;&#039;&#039;For&#039;&#039;&#039; :: A for loop is a loop that loops a set amount of times&lt;br /&gt;
&lt;br /&gt;
To use a while loop, a condition/some conditions must be stated: &amp;quot;while(conditions)&amp;quot;&lt;br /&gt;
Often, this loop is used for infinite loops, which last forever unless specifically stopped. This is done using the arguement of 1 or true (1 is the integer of true)&lt;br /&gt;
&lt;br /&gt;
 while(1)&lt;br /&gt;
 while(true)&lt;br /&gt;
&lt;br /&gt;
A while loop can also be used as a normal loop that loops while the arguement is true, when the arguement becomes false the loop exits automatically (or rather, doesn&#039;t begin executing the commands in the loop again but just finishes the loop in progress).&lt;br /&gt;
&lt;br /&gt;
 int = 0;&lt;br /&gt;
&lt;br /&gt;
 while(int &amp;lt; 10)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  int++;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above code will loop while &#039;int&#039; is less than 10. The loop waits 1 second, and then the loop increments &#039;int&#039;. Once &#039;int&#039; is not less than 10, the loop breaks.&lt;br /&gt;
&lt;br /&gt;
The same applies for FOR loops.&lt;br /&gt;
&lt;br /&gt;
A FOR loop requires 3 arguements.&lt;br /&gt;
&lt;br /&gt;
for(declare; while; do)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Declare&#039;&#039;&#039; is the section which declares a variable for the loop to use. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;While&#039;&#039;&#039; is what determines when the loop breaks&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do&#039;&#039;&#039; is what the loop should do after each loop.&lt;br /&gt;
&lt;br /&gt;
A common FOR loop looks like this...&lt;br /&gt;
&lt;br /&gt;
 for(i = 0; i &amp;lt; int; i++)&lt;br /&gt;
&lt;br /&gt;
The above code means: (i is 0, while i is smaller than int, add one to i).&lt;br /&gt;
&lt;br /&gt;
Let&#039;s replace int with an actual number:&lt;br /&gt;
&lt;br /&gt;
 for(i = 0; i &amp;lt; 10; i++)&lt;br /&gt;
 {&lt;br /&gt;
  wait 1;&lt;br /&gt;
  thread function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This is the sequence of events...&lt;br /&gt;
&lt;br /&gt;
- &#039;i&#039; = 0&lt;br /&gt;
- while i is less than 10, continue the loop&lt;br /&gt;
- perform code (wait 1; and function())&lt;br /&gt;
- increment &#039;i&#039; (i++)&lt;br /&gt;
&lt;br /&gt;
The FOR loop can also be used as an &amp;quot;infinite loop&amp;quot; using the &amp;quot;forever loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
&lt;br /&gt;
The above will simply keep repeating the code until manually terminated.&lt;br /&gt;
&lt;br /&gt;
The problem with infinite loops is that they will give you an error if you don&#039;t allow them to pause at any point - so all infinite loops require a wait statement somewhere in the executed code.&lt;br /&gt;
&lt;br /&gt;
To finish off, we need to know how to manually exit these loops. A common way to exit an infinite loop is to use an IF statement to determine when to &#039;break&#039; (break is the keyword used to exit a loop) - here is an example of an IF statement breaking an infinite loop...&lt;br /&gt;
&lt;br /&gt;
 for(;;)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   if(var1 == var2)&lt;br /&gt;
   {&lt;br /&gt;
     break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The above sequence simply goes...&lt;br /&gt;
&lt;br /&gt;
- wait 1 second&lt;br /&gt;
- check if statement...&lt;br /&gt;
- if var1 is equal to var2, break out of the loop&lt;br /&gt;
- else continue the loop&lt;br /&gt;
&lt;br /&gt;
== [[Creating Functions]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] A custom function is a good way to use repeat sections of code more efficiently. For example, if you often use the same sequence of code, you can template them into a custom function. Imagine this is your code...&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush1 moveZ(320, 5);&lt;br /&gt;
 brush1 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 wait 1;&lt;br /&gt;
 brush2 moveZ(540, 3);&lt;br /&gt;
 brush2 waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
This can be simplified using a custom function, lets call this function &amp;quot;_moveEnt&amp;quot; (it is common practice to use an underscore as the first character of a function)&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
&lt;br /&gt;
As the above shows, we are going to need 3 arguements, ent (entity), dist (distance) and time.&lt;br /&gt;
&lt;br /&gt;
Now lets look at the full code with custom function in use...&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   _moveEnt(brush1, 320, 5);&lt;br /&gt;
   _moveEnt(brush2, 540, 3);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _moveEnt(ent, dist, time)&lt;br /&gt;
 {&lt;br /&gt;
   wait 1;&lt;br /&gt;
   ent moveZ(dist, time);&lt;br /&gt;
   ent waittill(&amp;quot;movedone&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
As the above code shows, the custom function can simply be called using the required arguements, which are passed along and used in the new function.&lt;br /&gt;
&lt;br /&gt;
Once the custom function has finished, the script returns to the original location from where it was called.&lt;br /&gt;
&lt;br /&gt;
Functions can also return values to the original script, or even entities.&lt;br /&gt;
&lt;br /&gt;
A simple function to calculate volume from the width, height and depth:&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
   area = _areaEquation(2, 4, 6);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 _areaEquation(x, y, z)&lt;br /&gt;
 {&lt;br /&gt;
   answer = x * y * z;&lt;br /&gt;
   return answer;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Once the code calls the function &#039;_areaEquation&#039; the function works out the &#039;answer&#039;, &#039;answer&#039; is the returned.&lt;br /&gt;
This declares a new variable (area). The variable area, is the answer that is returned by the function.&lt;br /&gt;
&lt;br /&gt;
The two lines:&lt;br /&gt;
&lt;br /&gt;
 answer = x * y * z;&lt;br /&gt;
 return answer;&lt;br /&gt;
&lt;br /&gt;
could be replace by&lt;br /&gt;
&lt;br /&gt;
   return x * y * z;&lt;br /&gt;
&lt;br /&gt;
for the same effect.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Arrays]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Arrays are objects that store several variables. These can be integers, strings, entities or even other arrays.&lt;br /&gt;
&lt;br /&gt;
Arrays are extremely helpful when it comes to doing the same thing to several different objects, such as moving a few platforms by a certain amount in a map, or storing lots of related variables.&lt;br /&gt;
&lt;br /&gt;
To create an array we simply type...&lt;br /&gt;
&lt;br /&gt;
 arrayName = [];&lt;br /&gt;
&lt;br /&gt;
Now, to add an object/variable to this array, we can simply use:&lt;br /&gt;
&lt;br /&gt;
 array(array.size) = &amp;quot;a string variable&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
Whenever you see array.size, the .size does not mean it&#039;s dimensions, but the amount of items in the array. So if an array contains 1 piece of data, the array.size is 1. To retrieve an items from an array, you can use array[0] for the first object/var stored in it, and then array[1] and so on for successive items.&lt;br /&gt;
&lt;br /&gt;
Going back to the example above, we could retrieve the data by using array[0]. The first item in an array is listed as 0, the second as 1, and so on. This means that by using array(array.size) = &amp;quot;blah&amp;quot;;, we can add new items to it because of the offset of 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A common use for an array is to call a function on all of the players in the game. This can be done by using an array with a FOR loop.&lt;br /&gt;
To start with we must get our array of players, and instead of using the above method of defining an array and adding custom data, we can use a builtin function.&lt;br /&gt;
&lt;br /&gt;
 players = getEntArray(&amp;quot;player&amp;quot;, &amp;quot;classname&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
So, our array has been defined as &amp;quot;players&amp;quot;, or more accurately, &amp;quot;players[]&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Inside &amp;quot;players[]&amp;quot; is every player on the server, and now all we need to do is use the array to thread a function to each player.&lt;br /&gt;
So, here we have a for loop to do such a thing:&lt;br /&gt;
&lt;br /&gt;
 for(i = 0; i &amp;lt; players.size; i++)&lt;br /&gt;
 {&lt;br /&gt;
   players[i] thread function();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
That&#039;s our loop to go through every player and call function(); on them.&lt;br /&gt;
&lt;br /&gt;
Remember, &#039;i&#039; is a variable not a letter, so &#039;i&#039; is substitued with the number of the loop.&lt;br /&gt;
In the first loop, &#039;i&#039; equals 0, so:&lt;br /&gt;
&lt;br /&gt;
 players[0] thread function();&lt;br /&gt;
&lt;br /&gt;
is executed.&lt;br /&gt;
&lt;br /&gt;
Arrays are a complicated part of scripting, but once you have them understood, they are one of the most useful things in the game.&lt;br /&gt;
&lt;br /&gt;
== [[Switch]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] Switch is often used instead of multiple if statements, as it is more efficient and doesn&#039;t require you to type as much.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;How to use &amp;quot;Switch&amp;quot;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Switch can be quite hard to understand at first glance, but after using it, it will become easier.&lt;br /&gt;
&lt;br /&gt;
Here is an example of how it is used. This is taken from the menu scripts, which handles the ingame menus, I have cut the code and also added the commented lines myself.&lt;br /&gt;
&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;allies&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_allies&amp;quot;]);&lt;br /&gt;
   else if(self.pers[&amp;quot;team&amp;quot;] == &amp;quot;axis&amp;quot;)&lt;br /&gt;
      self openMenu(game[&amp;quot;menu_weapon_axis&amp;quot;]);&lt;br /&gt;
 break;   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_team&amp;quot;]);&lt;br /&gt;
 break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_muteplayer&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   self closeMenu();&lt;br /&gt;
   self closeInGameMenu();&lt;br /&gt;
   self openMenu(game[&amp;quot;menu_callvote&amp;quot;]);&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The first part of the code is where the variable is defined. The game waits until a menu has been activated. The variables recieved are &amp;quot;menu&amp;quot; (the name of the menu activated) and &amp;quot;response&amp;quot; (what option was chosen from the menu). &amp;quot;Response&amp;quot; is the key variable for the &#039;Switch&#039;.&lt;br /&gt;
&lt;br /&gt;
After the variables have been defined, the Switch function is called. It then checks every &amp;quot;Case&amp;quot; (case is the term used for the possible outcomes of the variable) to find a match, if no match is found, the &amp;quot;Default&amp;quot; case is used. (if you do not have a default case, the script will crash - you can just add an empty one.)&lt;br /&gt;
&lt;br /&gt;
If a match is found, then the function will do ALL the events from that point onwards, which is why you MUST add &amp;quot;break;&amp;quot; at the end of every case, if the break is not existent, then all other case functions will run also.&lt;br /&gt;
&lt;br /&gt;
To use the above example, I shall input my own values to show how the example works...&lt;br /&gt;
&lt;br /&gt;
When I open the menu ingame, I choose the option &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The code kicks in and the variable &amp;quot;response&amp;quot; becomes equal to &amp;quot;changeteam&amp;quot;.&lt;br /&gt;
The switch statement will now look at every case for a positive match.&lt;br /&gt;
&lt;br /&gt;
Once the match is found, everything after the case will happen:&lt;br /&gt;
* self closeMenu(); //current menu closes&lt;br /&gt;
* self closeInGameMenu(); //close any other ingame menus&lt;br /&gt;
* self openMenu(game[&amp;quot;menu_team&amp;quot;]); //will open the team menu&lt;br /&gt;
* break; //the rest of the switch statement is ended and the code continues&lt;br /&gt;
&lt;br /&gt;
You can also make the script perform the same actions in multiple cases. For example:&lt;br /&gt;
&lt;br /&gt;
 self waittill(&amp;quot;menuresponse&amp;quot;, menu, response);&lt;br /&gt;
&lt;br /&gt;
 switch(response)&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;changeweapon&amp;quot;:&lt;br /&gt;
 case &amp;quot;changeteam&amp;quot;:&lt;br /&gt;
 case &amp;quot;muteplayer&amp;quot;:&lt;br /&gt;
 case &amp;quot;callvote&amp;quot;:&lt;br /&gt;
   function();&lt;br /&gt;
   break;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
 default:&lt;br /&gt;
   //add default action here&lt;br /&gt;
   break;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This means that is the response variable is: &#039;changeweapon&#039;, &#039;changeteam&#039;, &#039;muteplayer&#039; or &#039;callvote&#039;, function(); will be called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[Notify / Endon / Waittill]] ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Nutshell.png]] These 3 functions allow you to make a script wait for specific events and then trigger those events in different parts of the scripts.&lt;br /&gt;
&lt;br /&gt;
This one ends the function it is inside when &#039;thread_restart&#039; is triggered on &#039;level&#039;:&lt;br /&gt;
&lt;br /&gt;
 level endon (&amp;quot;thread_restart&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
and this triggers the &#039;killed_player&#039; notification on &#039;self&#039; (which is a player in this case):&lt;br /&gt;
&lt;br /&gt;
 self notify(&amp;quot;killed_player&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
If you use &#039;player waittill(&amp;quot;x&amp;quot;)&#039; or &#039;player endon(&amp;quot;x&amp;quot;)&#039;, then using a &#039;level notify(&amp;quot;x&amp;quot;)&#039; will not trigger either of them - level is not the same entity as player, and all entities&#039; triggers are independant.&lt;br /&gt;
&lt;br /&gt;
Using the functions is easy. Firstly, decide which entity you want to wait for the trigger on. This is a player most of the time, but if you want a global trigger then use &#039;level&#039;.&lt;br /&gt;
&lt;br /&gt;
Then you must decide which trigger to use. You can choose either &amp;quot;endon&amp;quot; or &amp;quot;waittill&amp;quot; - they are both self explanatory, one will end the function it is running in when triggered, and the other will &#039;wait&#039; until the specified trigger.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Next you decide on a unique name for the trigger. For example...&lt;br /&gt;
&lt;br /&gt;
 level endon(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
And to activate this trigger, you use notify on the same entity (level):&lt;br /&gt;
&lt;br /&gt;
 level notify(&amp;quot;a_unique_call&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
You can use as many waittill and endon functions as you want on an entity, in different functions. They will all be triggered by a notify.&lt;br /&gt;
&lt;br /&gt;
Here is a quick example of it in use in multiple threads in the DM gametype...&lt;br /&gt;
&lt;br /&gt;
 spawnPlayer()&lt;br /&gt;
 {&lt;br /&gt;
   self notify(&amp;quot;spawned&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
   /*... Code snipped ... this is another type of &lt;br /&gt;
   comment that can span multiple lines. */&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
 Callback_PlayerKilled(attacker, some other arguments)&lt;br /&gt;
 {&lt;br /&gt;
   self endon(&amp;quot;spawned&amp;quot;); //this makes callback_playerkilled() terminate when &amp;quot;spawned&amp;quot; is triggered in spawnplayer().&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
== Random stuff ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A few useful commands:&lt;br /&gt;
&lt;br /&gt;
To print a large message on the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
or to a specific player:&lt;br /&gt;
&#039;&#039;&#039;player iprintlnbold(stringMessage);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
To print a small message on the bottom left of the screen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;iprintln(stringMessage);&lt;br /&gt;
same as iprintlnbold() to a specific player&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To check whether a variable or entity exists:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;if(isdefined(timetowait))&#039;&#039;&#039;&lt;br /&gt;
  &#039;&#039;&#039;wait (timetowait);&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can also use functions in if statements, by the returned value:&lt;br /&gt;
&lt;br /&gt;
if(checksomething())&lt;br /&gt;
  //code here&lt;br /&gt;
&lt;br /&gt;
checksomething()&lt;br /&gt;
{&lt;br /&gt;
  if(var == &amp;quot;hi there!&amp;quot;) //remember to use == in if statements to check equality, but var1 = var2 to set equality outside them.&lt;br /&gt;
    return true;&lt;br /&gt;
  else&lt;br /&gt;
    return false;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Geographylogo.png]][http://www.codjumper.com/forums/viewtopic.php?t=4011&amp;amp;sid=ed58d3b3f5bfa32350d4670d35c9f781 From CoDJumper.com]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1836</id>
		<title>Call of Duty 4: Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1836"/>
		<updated>2008-10-23T20:44:27Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call of Duty 4 Modern Warfare Modding ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Introduction|Introduction to Scripting By Drofder2004]]&lt;br /&gt;
**[[Getting Started]]&lt;br /&gt;
**[[Using Variables]]&lt;br /&gt;
**[[Maths &amp;amp;amp; Operators]]&lt;br /&gt;
**[[IFs, Loops &amp;amp;amp; Logic]]&lt;br /&gt;
**[[Creating Functions]]&lt;br /&gt;
**[[Arrays]]&lt;br /&gt;
**[[Switch]]&lt;br /&gt;
**[[Notify / Endon / Waittill]]&lt;br /&gt;
* [[Call of Duty 4: Models imports|Models Imports]]&lt;br /&gt;
* [[Call of Duty 4: Skinning|Skinning]]&lt;br /&gt;
* [[Call of Duty 4: Custom Dvars|Custom Dvars]]&lt;br /&gt;
&lt;br /&gt;
== Modding Utils ==&lt;br /&gt;
[[Image:Data.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Rank Creator|Dobby&#039;s Rank Creator]]&lt;br /&gt;
* [[Call of Duty 4: Demo Player|Demo Player]]&lt;br /&gt;
* [[Call of Duty 4: Skinning Tools|Skinning/Image Tool]]&lt;br /&gt;
* [[Call of Duty 4: Xmodel Exporter|Xmodel Exporter]]&lt;br /&gt;
&lt;br /&gt;
== Technical References COD series ==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Scripting Reference|Scripting Reference]]&lt;br /&gt;
* [[Call of Duty 4: d3dbsp|The D3DBSP File format]]&lt;br /&gt;
* [[Call of Duty 4: MAP file structure|.MAP file structure]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1835</id>
		<title>Call of Duty 4: Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1835"/>
		<updated>2008-10-23T20:43:37Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Undo revision 1834 by Novemberdobby (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call of Duty 4 Modern Warfare Modding ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Introduction|Introduction to Modding By Drofder2004]]&lt;br /&gt;
**[[Getting Started]]&lt;br /&gt;
**[[Using Variables]]&lt;br /&gt;
**[[Maths &amp;amp;amp; Operators]]&lt;br /&gt;
**[[IFs, Loops &amp;amp;amp; Logic]]&lt;br /&gt;
**[[Creating Functions]]&lt;br /&gt;
**[[Arrays]]&lt;br /&gt;
**[[Switch]]&lt;br /&gt;
**[[Notify / Endon / Waittill]]&lt;br /&gt;
* [[Call of Duty 4: Models imports|Models Imports]]&lt;br /&gt;
* [[Call of Duty 4: Skinning|Skinning]]&lt;br /&gt;
* [[Call of Duty 4: Custom Dvars|Custom Dvars]]&lt;br /&gt;
&lt;br /&gt;
== Modding Utils ==&lt;br /&gt;
[[Image:Data.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Rank Creator|Dobby&#039;s Rank Creator]]&lt;br /&gt;
* [[Call of Duty 4: Demo Player|Demo Player]]&lt;br /&gt;
* [[Call of Duty 4: Skinning Tools|Skinning/Image Tool]]&lt;br /&gt;
* [[Call of Duty 4: Xmodel Exporter|Xmodel Exporter]]&lt;br /&gt;
&lt;br /&gt;
== Technical References COD series ==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Scripting Reference|Scripting Reference]]&lt;br /&gt;
* [[Call of Duty 4: d3dbsp|The D3DBSP File format]]&lt;br /&gt;
* [[Call of Duty 4: MAP file structure|.MAP file structure]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1834</id>
		<title>Call of Duty 4: Modding</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Modding&amp;diff=1834"/>
		<updated>2008-10-23T20:42:04Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Call of Duty 4 Modern Warfare Modding ==&lt;br /&gt;
&lt;br /&gt;
[[Image:Code.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Introduction|Introduction to Scripting By Drofder2004]]&lt;br /&gt;
**[[Getting Started]]&lt;br /&gt;
**[[Using Variables]]&lt;br /&gt;
**[[Maths &amp;amp;amp; Operators]]&lt;br /&gt;
**[[IFs, Loops &amp;amp;amp; Logic]]&lt;br /&gt;
**[[Creating Functions]]&lt;br /&gt;
**[[Arrays]]&lt;br /&gt;
**[[Switch()]]&lt;br /&gt;
**[[Notify / Endon / Waittill]]&lt;br /&gt;
* [[Call of Duty 4: Importing models|Importing models]]&lt;br /&gt;
* [[Call of Duty 4: Skinning|Skinning]]&lt;br /&gt;
* [[Call of Duty 4: Custom Dvars|Custom Dvars]]&lt;br /&gt;
&lt;br /&gt;
== Modding Utils ==&lt;br /&gt;
[[Image:Data.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Rank Maker|Dobby&#039;s Rank Maker]]&lt;br /&gt;
* [[Call of Duty 4: Demo Player|Demo Player]]&lt;br /&gt;
* [[Call of Duty 4: Skinning Tools|Skinning/Image Tool]]&lt;br /&gt;
* [[Call of Duty 4: Xmodel Exporter|Xmodel Exporter]]&lt;br /&gt;
&lt;br /&gt;
== Technical References COD series ==&lt;br /&gt;
[[Image:Articles.png|right]]&lt;br /&gt;
* [[Call of Duty 4: Scripting Reference|Scripting Reference]]&lt;br /&gt;
* [[Call of Duty 4: d3dbsp|The D3DBSP File format]]&lt;br /&gt;
* [[Call of Duty 4: MAP file structure|.MAP file structure]]&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
	<entry>
		<id>https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Bobbing_Models&amp;diff=1832</id>
		<title>Call of Duty 4: Bobbing Models</title>
		<link rel="alternate" type="text/html" href="https://wiki.zeroy.com/index.php?title=Call_of_Duty_4:_Bobbing_Models&amp;diff=1832"/>
		<updated>2008-10-23T18:37:13Z</updated>

		<summary type="html">&lt;p&gt;Novemberdobby: Fixed some stuff and a crash in the code.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Call of Duty 4]]&lt;br /&gt;
[[Category:Modtools]]&lt;br /&gt;
[[Category:Radiant]]&lt;br /&gt;
[[Category:Advanced Editing]]&lt;br /&gt;
[[Category:Scripting]]&lt;br /&gt;
{{warning_forpro}}&lt;br /&gt;
[[Image:Nutshell.png]] This tutorial shows how to create &#039;bobbing&#039; models in water to give a floating movement impression. I got the script from a COD2 tutorials by &#039;&#039;BR3NT&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 models are animated in this example:&lt;br /&gt;
&lt;br /&gt;
 com_bottle4&lt;br /&gt;
 me_plastic_crate1&lt;br /&gt;
&lt;br /&gt;
[[Image:bobbing_1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
== In Radiant ==&lt;br /&gt;
&lt;br /&gt;
Place the 2 models how we want them with their top surface slightly (2/3 units) over the water patch.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:bobbing_4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select the first model, right clic in the 2D window and select &#039;&#039;Script&#039;&#039; then &#039;&#039;Script_model&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:bobbing_5.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then witht the first model still selected press &#039;n&#039; to bring up the entity window and enter the following key/values:&lt;br /&gt;
&lt;br /&gt;
 targetname bobbing_obj&lt;br /&gt;
&lt;br /&gt;
Do the same steps for the second model using those:&lt;br /&gt;
&lt;br /&gt;
 targetname bobbing_obj2&lt;br /&gt;
&lt;br /&gt;
The result should be:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:bobbing_2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:bobbing_3.png]]&lt;br /&gt;
&lt;br /&gt;
== In Script ==&lt;br /&gt;
&lt;br /&gt;
* Create a new file under /raw/maps/mp/ called _bobbing_obj.gsc and insert the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
main()&lt;br /&gt;
{&lt;br /&gt;
	thread bobbing_think();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
bobbing_think()&lt;br /&gt;
{&lt;br /&gt;
	obj1 = getent(&amp;quot;bobbing_obj&amp;quot;,&amp;quot;targetname&amp;quot;); //get the script_model entity&lt;br /&gt;
	obj2 = getent(&amp;quot;bobbing_obj2&amp;quot;,&amp;quot;targetname&amp;quot;); //get the other script_model entity&lt;br /&gt;
	&lt;br /&gt;
	wait (randomfloat (1.5)); //generate a random number of seconds between bobs&lt;br /&gt;
	&lt;br /&gt;
	org1 = (-83, -895, 688); //define origin or location of your boat/script_model&lt;br /&gt;
	org2 = (29, -897.1, 683); //define origin or location of your boat/script_model&lt;br /&gt;
	timer = 1; //bobbing speed - higher number = slower bobbing&lt;br /&gt;
	&lt;br /&gt;
	while (1)&lt;br /&gt;
	{&lt;br /&gt;
		obj1 moveto (org1 + (0,0,2), timer, timer * 0.5, timer * 0.5); // 2 is num. of units to go over Orig.&lt;br /&gt;
		obj2 moveto (org2 + (0,0,-1), timer, timer * 0.5, timer * 0.5);&lt;br /&gt;
		wait (timer);&lt;br /&gt;
		obj1 moveto (org1 + (0,0,-2), timer, timer * 0.5, timer * 0.5); // 2 is num. of units to go over Orig.&lt;br /&gt;
		obj2 moveto (org2 + (0,0,1), timer, timer * 0.5, timer * 0.5);&lt;br /&gt;
		wait (timer);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In your main mp GSC, after &#039;&#039;maps\mp\_load::main();&#039;&#039; add this line:&lt;br /&gt;
&lt;br /&gt;
	maps\mp\_bobbing_obj::main();&lt;br /&gt;
&lt;br /&gt;
Now, add this to your Zone File:&lt;br /&gt;
&lt;br /&gt;
	rawfile,maps/mp/_bobbing_obj.gsc&lt;br /&gt;
&lt;br /&gt;
Compile and test!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--[[User:Zeroy|Zeroy.]] 14:18, 16 October 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Novemberdobby</name></author>
	</entry>
</feed>