Difference between revisions of "Getting started creating mods using GECK"

From Nexus Mods Wiki
Jump to: navigation, search
(NifSkope Mesh Editor: Added 'TIP Attaching a light source to a mesh')
(Packaging Tools: update)
 
(191 intermediate revisions by the same user not shown)
Line 46: Line 46:
  
 
* There are now two wikis devoted to the '''GECK''': the official one by Bethesda, which is not very well supported and a major pain to update (Five CAPCHAs per post!), and a Modding Community '''GECKWiki''' site with everything from the official one but actively updated by the modding community.  While most links to the '''GECK''' wiki are to the official wiki, be sure to check out the Community one to see the latest info on your topic.  Anything related to "Script Extenders" like '''NVSE''' or '''JIP LN NVSE''' functions will be more current on the Community '''GECKWiki''' site.
 
* There are now two wikis devoted to the '''GECK''': the official one by Bethesda, which is not very well supported and a major pain to update (Five CAPCHAs per post!), and a Modding Community '''GECKWiki''' site with everything from the official one but actively updated by the modding community.  While most links to the '''GECK''' wiki are to the official wiki, be sure to check out the Community one to see the latest info on your topic.  Anything related to "Script Extenders" like '''NVSE''' or '''JIP LN NVSE''' functions will be more current on the Community '''GECKWiki''' site.
:* [http://geck.technodeep.net/index.php/Main_Page Community GECKWiki]
+
:* [http://geckwiki.com/index.php?title=Main_Page Community GECKWiki]
 
::* [http://geck.foesmm.org/index.php/Tutorials GECK: Tutorials]
 
::* [http://geck.foesmm.org/index.php/Tutorials GECK: Tutorials]
::* [http://geck.technodeep.net/index.php/Category:Getting_Started#My_First_Vault_Tutorial_Series GECK: 'My first vault' tutorial series] Bethesda's intro to mod creation.
+
::* [http://geckwiki.com/index.php?title=Category:Getting_Started#My_First_Vault_Tutorial_Series GECK: 'My first vault' tutorial series] Bethesda's intro to mod creation.
::* [http://geck.technodeep.net/index.php/Category:FAQ GECK: FAQ] Simple questions with answers.
+
::* [http://geckwiki.com/index.php?title=Category:FAQ GECK: FAQ] Simple questions with answers.
::* [http://geck.technodeep.net/index.php/Category:Advanced_Modding_Techniques GECK: Advanced Modding Techniques] Questions with tricky answers.
+
::* [http://geckwiki.com/index.php?title=Category:Advanced_Modding_Techniques GECK: Advanced Modding Techniques] Questions with tricky answers.
 
:* [http://geck.bethsoft.com/index.php?title=Main_Page Official Bethesda GECK Wiki]
 
:* [http://geck.bethsoft.com/index.php?title=Main_Page Official Bethesda GECK Wiki]
 
:* [http://cs.elderscrolls.com/index.php?title=Category:Solutions TES4 Construction Set Wiki] Older, more fundamental questions and answers.
 
:* [http://cs.elderscrolls.com/index.php?title=Category:Solutions TES4 Construction Set Wiki] Older, more fundamental questions and answers.
Line 66: Line 66:
 
:: "Noob to Pro" PDF tutorial.
 
:: "Noob to Pro" PDF tutorial.
 
:: Check out the "Optional" files section for some additional functionality.  Recommended for FO3/FNV.
 
:: Check out the "Optional" files section for some additional functionality.  Recommended for FO3/FNV.
:* [http://www.nexusmods.com/oblivion/mods/42755 Blender v2.49b Portable] by '''Room207''' is also a "complete" package that is preferred by some for it's convenience.  Includes:
+
:: (Version specific manual linked under the "Portable" version entries.)
 +
:* [http://www.nexusmods.com/oblivion/mods/42755 Blender v2.49b Portable] by '''Room207''' is also a "complete" package that is preferred by some for it's convenience and because it is patched so that vertex normals won't be regenerated when going into ''edit'' mode, which is one of the reasons why a neck seam is produced.  Includes:
 
::: Python 2.6.6
 
::: Python 2.6.6
 
::: Pyffi 2.1.11
 
::: Pyffi 2.1.11
Line 76: Line 77:
 
::: Blender Tools 1.01 by Kormgar
 
::: Blender Tools 1.01 by Kormgar
 
::: [http://www.nexusmods.com/oblivion/mods/45019/? Blender TRI file scripts and Tutorial] by '''Kapaer and Deedes'''
 
::: [http://www.nexusmods.com/oblivion/mods/45019/? Blender TRI file scripts and Tutorial] by '''Kapaer and Deedes'''
 +
:* [https://archive.blender.org/wiki/index.php/Doc:2.4/Manual/ Blender v2.4x Manual] '''This version''' specific original manual.
 +
:: You can now import your ".nif" file without anything interfering with it.
 
:* [[Installation_of_Blender|Installation of Blender]] (Wiki article.)
 
:* [[Installation_of_Blender|Installation of Blender]] (Wiki article.)
* [http://www.mwgfx.co.uk/programs/dxtbmp.htm DXTBmp Texture Tool] (freeware.) Images can be passed to any Paint program for editing in 24 bit and then re-imported and saved in any of the 16/24/32 bit formats.  Transparency (Alpha) channel of textures can be viewed and edited separately from the main image.
+
:* [https://www.nexusmods.com/newvegas/mods/69527 Blender 249b Nif Plugin Tutorial] by '''ACBRadio''' (Mod Description is tutorial with images).
 +
:* See also [[#Blender Mesh Editor|Blender Mesh Editor]] section for other tutorials and tips, such as how to clear the initial screen for loading a '''NIF''' file.
 +
* [http://www.mwgfx.co.uk/programs/dxtbmp.htm DXTBmp Texture Tool] (freeware).  Images can be passed to any Paint program for editing in 24 bit and then re-imported and saved in any of the 16/24/32 bit formats.  Transparency (Alpha) channel of textures can be viewed and edited separately from the main image.
 
* [http://www.gimp.org/ GIMP: GNU Image Manipulation Program] (freeware.) A cross-platform image (texture) editor available for GNU/Linux, OS X, Windows and more operating systems.  Provides extensions through integration with many programming languages including '''Scheme, Python, Perl,''' and more.  The result is a high level of customization as demonstrated by the large number of scripts and plug-ins created by the community.  
 
* [http://www.gimp.org/ GIMP: GNU Image Manipulation Program] (freeware.) A cross-platform image (texture) editor available for GNU/Linux, OS X, Windows and more operating systems.  Provides extensions through integration with many programming languages including '''Scheme, Python, Perl,''' and more.  The result is a high level of customization as demonstrated by the large number of scripts and plug-ins created by the community.  
 
* [http://www.nexusmods.com/newvegas/mods/61538/? Hairs - Eyes - Races Auto - Patcher] (Mod.) Extracts all the hair / eyes / races records from every plugin loaded in your load order - then, it rewrites the list of eyes and hairs for every race found. So, if you untick / unflag a hair mod from your load order, these records won't be loaded by the game itself and consequently won't be found by this mod because they don't exist.
 
* [http://www.nexusmods.com/newvegas/mods/61538/? Hairs - Eyes - Races Auto - Patcher] (Mod.) Extracts all the hair / eyes / races records from every plugin loaded in your load order - then, it rewrites the list of eyes and hairs for every race found. So, if you untick / unflag a hair mod from your load order, these records won't be loaded by the game itself and consequently won't be found by this mod because they don't exist.
 +
* [http://inkscape.org/ Inkscape Vector Graphics Editor] (freeware).  Open source flexible drawing tools, with broad file format compatibility, powerful text tool, and bezier and spiro curves.
 
* [http://web.archive.org/web/20170713081056/http://www.darkcreations.org/testg/wiki/Category:VWD-OB LOD/VWD Overview] TESTG site wiki.
 
* [http://web.archive.org/web/20170713081056/http://www.darkcreations.org/testg/wiki/Category:VWD-OB LOD/VWD Overview] TESTG site wiki.
 
:* [http://www.nexusmods.com/newvegas/mods/58562 FNVLODGen] "View While Distant (VWD)"/"Level Of Detail (LOD)" landscape ''object'' generation tool.
 
:* [http://www.nexusmods.com/newvegas/mods/58562 FNVLODGen] "View While Distant (VWD)"/"Level Of Detail (LOD)" landscape ''object'' generation tool.
Line 98: Line 104:
 
:* [http://www.nexusmods.com/skyrim/mods/6843/? Paint: The Normal Map Tools] by '''Goujosamma''' for Paint.NET.
 
:* [http://www.nexusmods.com/skyrim/mods/6843/? Paint: The Normal Map Tools] by '''Goujosamma''' for Paint.NET.
 
* [http://www.nexusmods.com/newvegas/mods/57245/? Ptolemy Maps for New Vegas] by '''Rocketeer''' and '''Alan Broad''' is a robust suite of tools for creating and organizing 'world map' locations based on their type, faction, importance, etc.
 
* [http://www.nexusmods.com/newvegas/mods/57245/? Ptolemy Maps for New Vegas] by '''Rocketeer''' and '''Alan Broad''' is a robust suite of tools for creating and organizing 'world map' locations based on their type, faction, importance, etc.
 +
* [http://www.nexusmods.com/newvegas/mods/67829 Sniff: S'Lanter's NIF Helper Tool] by '''zilav'''.  A batch NIF processing tool intended for intelligent S'Lanters.
 +
:* Available operations (initial release):
 +
::* Update tangents and binormals - recalculate tangents, binormals and optionally normal vectors in shapes using modified Unity's code.
 +
::* Search and replace assets - perform search and replace on assets paths (textures and other referenced files) in meshes
 +
::* Convert strips to shapes - the same as Triangulation spell in NifSkope
 +
::* Attach parent NiNode - the same as Attach Parent in NifSkope applied to NiNode or it's descendants with defined name
 +
::* Jamilla's anim thing - no idea, made by request
 +
::* Weijiesen's blow up thing - no idea, made by request
 +
::* Copy anim controlled blocks - copy missing controlled blocks between *.kf animation files
 +
::* Update parallax settings - change parallax values in shaders
 +
::* Update MOPP code - update MOPP collision code with the proper working one
 
* [http://www.buckarooshangar.com/flightgear/tut_dds.html Working with DDS/DXT Files] (HTML article) by '''Gary "Buckaroo" Neely'''.
 
* [http://www.buckarooshangar.com/flightgear/tut_dds.html Working with DDS/DXT Files] (HTML article) by '''Gary "Buckaroo" Neely'''.
  
Line 103: Line 120:
 
* [http://www.nexusmods.com/skyrim/mods/4328/? BAIN Archive Tools - BAT] by '''Surazal'''
 
* [http://www.nexusmods.com/skyrim/mods/4328/? BAIN Archive Tools - BAT] by '''Surazal'''
 
* [http://www.nexusmods.com/newvegas/mods/64745 BSArch] (freeware) by '''zilav'''.  A command line tool for ''packing'' and unpacking Bethesda archives.  The most complete support setting the correct flags across the various games.
 
* [http://www.nexusmods.com/newvegas/mods/64745 BSArch] (freeware) by '''zilav'''.  A command line tool for ''packing'' and unpacking Bethesda archives.  The most complete support setting the correct flags across the various games.
 +
:* [https://www.nexusmods.com/newvegas/mods/69145/? BSArch BSA BA2 Batch Extractor and Packer for MO2] Batch file to simplify using '''BSArch'''.  Completely configurable and customizable.  NOTE: MO2 instructions are in a separate ReadMe file.
 
* [http://www.nexusmods.com/oblivion/mods/41042/? BSAOpt] (freeware) Tool for extracting the contents of BSA files.  Note this tool unpacks the entire BSA file.  It does not easily allow for unpacking a single file.
 
* [http://www.nexusmods.com/oblivion/mods/41042/? BSAOpt] (freeware) Tool for extracting the contents of BSA files.  Note this tool unpacks the entire BSA file.  It does not easily allow for unpacking a single file.
 
: {{BSA Extraction Warning}}
 
: {{BSA Extraction Warning}}
Line 117: Line 135:
 
=== <span id="Scripting_Tools"></span>Scripting Tools ===
 
=== <span id="Scripting_Tools"></span>Scripting Tools ===
 
* [http://www.cipscis.com/fallout/utilities/validator.aspx CIPSCIS Script Validator] (freeware.) Allows you to quickly indent your script while simultaneously checking it for several basic errors, many of which are not picked up by the GECK's compiler. It works with Skyrim, Fallout 3, and Fallout New Vegas, but is not "script extender" aware. Includes it's own tutorials.
 
* [http://www.cipscis.com/fallout/utilities/validator.aspx CIPSCIS Script Validator] (freeware.) Allows you to quickly indent your script while simultaneously checking it for several basic errors, many of which are not picked up by the GECK's compiler. It works with Skyrim, Fallout 3, and Fallout New Vegas, but is not "script extender" aware. Includes it's own tutorials.
* [http://nvse.silverlock.org/ New Vegas Script Extender (NVSE)] Site.
+
* [https://www.nexusmods.com/newvegas/mods/70801/? Improved Console (NVSE)] Mod by '''Kormakur'''.  '''xNVSE''' plugin that enhances the in-game console's abilities to be able to execute and print results from ALL available script commands. Full scripting support inside console, including creating variables and evaluating NVSE expressions (arrays, strings) for easy mod development and prototyping. Mouse wheel scrolling included too.
 +
* [http://nvse.silverlock.org/ New Vegas Script Extender (NVSE)] ''Silverlock'' Site.  No longer in development.  Use '''xNVSE''', which is fully backwards compatible and with further extensions.
 +
* [https://github.com/xNVSE/NVSE/releases xNVSE] ''GitHub'' Site.  A recommended "forked" extension of the original ''Silverlock'' NVSE version.
 
:* [http://www.gribbleshnibit.com/projects/NVSEDocs/# NVSE Documentation] by '''gribbleshnibit'''.
 
:* [http://www.gribbleshnibit.com/projects/NVSEDocs/# NVSE Documentation] by '''gribbleshnibit'''.
 
:* [http://www.nexusmods.com/newvegas/mods/58277/? JIP LN NVSE plugin] by '''jazzisparis''' and '''LuthienAnarion'''.
 
:* [http://www.nexusmods.com/newvegas/mods/58277/? JIP LN NVSE plugin] by '''jazzisparis''' and '''LuthienAnarion'''.
Line 123: Line 143:
 
:* [http://geck.bethsoft.com/index.php?title=Category:Functions_(JIP) GECK: JIP Functions] (Wiki.)
 
:* [http://geck.bethsoft.com/index.php?title=Category:Functions_(JIP) GECK: JIP Functions] (Wiki.)
 
:* [http://geck.bethsoft.com/index.php?title=Category:Functions_(Lutana) GECK: Lutana (LN) Functions] (Wiki.)
 
:* [http://geck.bethsoft.com/index.php?title=Category:Functions_(Lutana) GECK: Lutana (LN) Functions] (Wiki.)
* [http://www.nexusmods.com/skyrim/mods/39434/? NMM Installer Tutorial - FOMOD - FOMM] by XunAmarox
+
* [http://www.nexusmods.com/skyrim/mods/39434/? NMM Installer Tutorial - FOMOD - FOMM] by '''XunAmarox'''.
* [http://www.nexusmods.com/skyrim/mods/41440/? NMM ModuleConfig Creator] by Twilightassassin
+
* [http://www.nexusmods.com/skyrim/mods/41440/? NMM ModuleConfig Creator] by '''Twilightassassin'''.
* [http://www.nexusmods.com/skyrim/mods/33797/? NMM Tracelog Help] by Thorne67
+
* [http://www.nexusmods.com/skyrim/mods/33797/? NMM Tracelog Help] by '''Thorne67'''.
 
* [http://notepad-plus-plus.org/ Notepad++] (freeware.) Source code editor.
 
* [http://notepad-plus-plus.org/ Notepad++] (freeware.) Source code editor.
:* [http://www.nexusmods.com/skyrim/mods/33271/? BAIN User Defined Language for Notepad++] by The_Catman
+
:* [http://www.nexusmods.com/skyrim/mods/33271/? BAIN User Defined Language for Notepad++] by '''The_Catman'''.
 
:* [http://www.nexusmods.com/newvegas/mods/62793/? Notepad++ Syntax Highlighter] (freeware) by '''DoctaSax'''. "Language" Plugin for GECK editor syntax.
 
:* [http://www.nexusmods.com/newvegas/mods/62793/? Notepad++ Syntax Highlighter] (freeware) by '''DoctaSax'''. "Language" Plugin for GECK editor syntax.
 +
* [http://www.nexusmods.com/newvegas/mods/67395 RuntimeScriptProfiler] by '''lStewieAl - shadeMe'''.  An NVSE plugin to profile script execution. Ported from '''shadeMe''''s '''Oblivion''' plugin.
 +
* [http://www.nexusmods.com/newvegas/mods/62777 Unlocked MCM - Advanced MCM script templates] by '''DoctaSax'''.  Script templates for complex but lean [http://www.nexusmods.com/newvegas/mods/42507 Mod Configuration Manager (MCM)] menus using array maps. Switches MCM scripting from a static to a dynamic system that can be altered at any time in-game. Minimizes script size and overhead.
  
 
=== <span id="Sound_and_Voice_Tools"></span>Sound and Voice Tools ===
 
=== <span id="Sound_and_Voice_Tools"></span>Sound and Voice Tools ===
Line 137: Line 159:
  
 
=== <span id="Misc_Other_Tools"></span>Misc Other Tools ===
 
=== <span id="Misc_Other_Tools"></span>Misc Other Tools ===
* [http://darnified.net/forums/community/ DarNified Forum Community] site.  Articles and questions on XML for the User Interface (UI) and Menus, primarily about the Oblivion version of DarNUI but there is a section for FO3.
+
* [http://cs.elderscrolls.com/index.php?title=Category:Oblivion_XML Category:Oblivion XML] Basic Bethesda XML documentation.
 +
:* [http://www.nexusmods.com/newvegas/mods/67470 The HUD Editor] Mod by '''IntenseMute'''.
 +
* [https://taleoftwowastelands.com/viewtopic.php?f=55&t=7284 DarNified UI - TTW] (Mod) Fork of the "no longer supported" original.
 +
:* [https://www.nexusmods.com/newvegas/mods/63560 DarNified UI Font Dummies] (Mod) Allows you to use DarNified UI for Fallout 3 or New Vegas without editing INI files.
 +
:* [http://darnified.net/forums/community/ DarNified Forum Community] site.  Articles and questions on XML for the User Interface (UI) and Menus, primarily about the Oblivion version of DarNUI but there is a section for FO3.
 
* [http://www.nexusmods.com/newvegas/mods/62796/? Gamesettings profiler] Mod.  Adds intuitive, app-like, modding tool for debugging, testing, profiling, and dumping\printing to file any numeric GMST (gamesettings) records.
 
* [http://www.nexusmods.com/newvegas/mods/62796/? Gamesettings profiler] Mod.  Adds intuitive, app-like, modding tool for debugging, testing, profiling, and dumping\printing to file any numeric GMST (gamesettings) records.
 
* [http://www.nexusmods.com/skyrim/mods/60733/? Tree LOD billboard creator for xLODGen] by zilav
 
* [http://www.nexusmods.com/skyrim/mods/60733/? Tree LOD billboard creator for xLODGen] by zilav
Line 144: Line 170:
 
:* [http://tes5edit.github.io/docs/index.html Tome of xEdit] Current Online manual for all games.
 
:* [http://tes5edit.github.io/docs/index.html Tome of xEdit] Current Online manual for all games.
 
:* [http://www.nexusmods.com/newvegas/mods/38413/? xEdit/FNVEdit Training Manual] (PDF.) Older docs that generally apply to all '''xEdit''' versions for other games.
 
:* [http://www.nexusmods.com/newvegas/mods/38413/? xEdit/FNVEdit Training Manual] (PDF.) Older docs that generally apply to all '''xEdit''' versions for other games.
 +
:* [https://imgur.com/gallery/AscXD Editing records in FNVEdit] (Photo gallery) tutorial using ''creature alteration'' for the example.
 
:* [http://tes5edit.github.io/fopdoc/ Documentation for the xEdit Fallout plugin file formats]
 
:* [http://tes5edit.github.io/fopdoc/ Documentation for the xEdit Fallout plugin file formats]
  
Line 152: Line 179:
 
* [http://tesalliance.org/forums/index.php?/forum/81-the-enclave/ TESAlliance: The Enclave] for tutorials covering most subjects and tools that apply still to the Fallout series.
 
* [http://tesalliance.org/forums/index.php?/forum/81-the-enclave/ TESAlliance: The Enclave] for tutorials covering most subjects and tools that apply still to the Fallout series.
 
* [http://geck.bethsoft.com/index.php?title=Main_Page Garden of Eden Construction Kit (GECK)] for Fallout 3 (2008) and Fallout: New Vegas} (2010).
 
* [http://geck.bethsoft.com/index.php?title=Main_Page Garden of Eden Construction Kit (GECK)] for Fallout 3 (2008) and Fallout: New Vegas} (2010).
* [http://geck.technodeep.net/index.php/Main_Page Community GECK Wiki] for Fallout 3 (2008) and Fallout: New Vegas} (2010).
+
* [http://geckwiki.com/index.php?title=Main_Page Community GECK Wiki] for Fallout 3 (2008) and Fallout: New Vegas} (2010).
  
 
(TES5: Skyrim came after all of those (2011) and uses a different variation of the game and script engine.)  So, don't neglect those older wikis as resources.  Where there appears to be a conflict, assume the later wiki or the one specific to your game is correct.
 
(TES5: Skyrim came after all of those (2011) and uses a different variation of the game and script engine.)  So, don't neglect those older wikis as resources.  Where there appears to be a conflict, assume the later wiki or the one specific to your game is correct.
Line 221: Line 248:
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Note that there is a 16 MB limit (that no one ever tells you about) for references (i.e. "objects") in mods. If your mod gets larger than 16 MB and you add an object or an NPC, your mod will be permanently broken. It will crash the game and will crash the GECK if you try to load it.
+
">Note that there is a 16 MB limit (that no one ever tells you about) for references (i.e. "objects") in mods. If your mod gets larger than 16 MB and you add an object or an NPC, your mod will be permanently broken. It will crash the game and will crash the '''GECK''' if you try to load it.
  
 
Here's why: Ever notice that all objects in the game have a ref ID that is two digits to refer to the mod number (called the "mod index"), followed by six digits for the actual ref ID? In other words, the ref ID for water is "000151a3", where "00" is the mod index indicating it is from '''Fallout.ESM''' and "0151a3" is apparently the '''''offset''''' into the file. The largest six digit hex number you can have is FFFFFF, which is 16 MB (minus 1). That's where the 16 MB limit comes from.  
 
Here's why: Ever notice that all objects in the game have a ref ID that is two digits to refer to the mod number (called the "mod index"), followed by six digits for the actual ref ID? In other words, the ref ID for water is "000151a3", where "00" is the mod index indicating it is from '''Fallout.ESM''' and "0151a3" is apparently the '''''offset''''' into the file. The largest six digit hex number you can have is FFFFFF, which is 16 MB (minus 1). That's where the 16 MB limit comes from.  
Line 227: Line 254:
 
The two digit "mod index" at the front means that you can theoretically have 256 mods, though this game breaks once you get to about 130-140 or so.  The "FF" mod index is reserved for "dynamically placed" objects in the game and these are preserved in the "save game" files.  You (as a "mod creator") cannot directly address these "FF" references as they only exist in game memory at run time.
 
The two digit "mod index" at the front means that you can theoretically have 256 mods, though this game breaks once you get to about 130-140 or so.  The "FF" mod index is reserved for "dynamically placed" objects in the game and these are preserved in the "save game" files.  You (as a "mod creator") cannot directly address these "FF" references as they only exist in game memory at run time.
  
Anything with a base/ref ID has to be under that 16 MB reference limit or it breaks. Things that don't have a ref ID (navmeshes, landscape textures, etc.) can be placed without regard to the 16 MB limit. Since your ambitious "overhaul" is likely going to be a fairly large mod, you might want to make all of your object/NPC changes first, then add dialog, navmesh, and similar non-reference changes last.
+
Anything with a base/ref ID has to be under that 16 MB reference limit or it breaks. Things that don't have a ref ID (''navmeshes, landscape textures'', etc.) can be placed without regard to the 16 MB limit. Since your ambitious "overhaul" is likely going to be a fairly large mod, you might want to make all of your object/NPC changes first, then add ''dialog'', ''navmesh'', and similar ''non-reference changes'' last.
 +
 
 +
So the big question then becomes how are you creating your ESM? If you are creating an ESP and then are using '''FNVEdit''' to convert it to an ESM, the '''GECK''' will add things to your ESP in the order that you create them. If you are creating ''worldspaces'', the data for a worldspace landscape can easily be more than 10 MB. Add in your ''navmesh'' and other things and you can easily get over 16 MB. Add anything with an ID after that, and your mod breaks completely, with no warning whatsoever from the '''GECK'''. The '''GECK''' will happily save it without warning, but then if you try to load it in the game, it crashes the game. Go back to the '''GECK''' to fix it, and it crashes the '''GECK'''. Better hope you have an older version of your mod to go back to at that point. Otherwise, you're hosed.
 +
 
 +
Things that don't have an ID number (''conversation topics, landscape data, navmesh data'', etc) can all be placed above the 16 MB boundary. Just keep in mind that if you add anything with an ID number once your mod exceeds 16 MB, the '''GECK''' puts it at the end of your file and you permanently break your mod.
 +
 
 +
If you are using the '''GECK''' in ''networked developer mode'' (see [https://geckwiki.com/index.php?title=Version_Control Version Control]) instead of in ''single user mode'' the way that most people use it, and you use ''version control'' to check in your changes, then it automatically puts new things with ID numbers down well below the 16 MB boundary when you check in your changes to the ESM.  The ESP that you are merging in to create or add to your ESM can't have anything with an ID above its 16 MB boundary, but the '''GECK''' will put those IDs in the lower 16 MB of your ESM during check in, so that tends to only be an issue with the ESP that you are merging in, and not an issue with the resultant ESM.
 +
 
 +
Recommend four changes to the '''GECKPrefs.INI''' file settings from those given on the '''GECKWiki''' [https://geckwiki.com/index.php?title=Version_Control Version Control] page:<br>
 +
<div style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
[WhoCanMerge]<br>
 +
UserAccountName=1
 +
</div>
 +
<div style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
[WhoCanForceCheckout]<br>
 +
UserAccountName=1
 +
</div>
 +
<div style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
[SudoWhoCanMerge]<br>
 +
UserAccountName=1
 +
</div>
 +
<div style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
[SudoWhoCanForceCheckout]<br>
 +
UserAccountName=1
 +
</div>
 +
: You will also probably need to run the GECK as an '''administrator''' account.
 +
<span id="Tip-VCNetworkCheck"></span>
 +
==== TIP Version Control network folders check ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">After setting up for [https://geckwiki.com/index.php?title=Version_Control Version Control], if you open up "Windows File Explorer" and type "\\127.0.0.1" in the address field, do you see your '''Merging''' and '''CheckInBackup''' folders?  If it's blank then you don't have your network folders set up correctly.
 +
:* Go to whatever folder where you created your '''Merging''' and '''CheckInBackup''' sub-folders.
 +
:* <Right click> on your '''Merging''' folder, then <click> on '''Properties'''.
 +
:* <Click> on the '''Sharing''' tab.
 +
::: A window should pop up saying '''Choose people to share with'''.
 +
:* In the  '''Choose people to share with''' window, type in "''Everyone''" (without the quotes) and <click> '''Add'''.
 +
::: ''Everyone'' should now appear in the box under where you typed the name. It should say ''Read'' next to it, under '''Permission Level'''.
 +
:* <Click> on where it says ''Read'', and <click> on ''Read/Write'' to select it.
 +
::: Now it should say ''Read/Write'' next to ''Everyone''.
 +
:* Now <click> on '''Share''' on the lower right, then <click> on '''Done''' when that finishes (shouldn't take long).
 +
:* Repeat these steps for your '''CheckInBackup''' folder.
 +
: When you are done, you should see both your '''Merging''' and your '''CheckInBackup''' folders if you go to address "\\127.0.0.1" in "Windows File Explorer".
 +
</div>
 +
16 MB worth of stuff with ID numbers is a HUGE amount of stuff. Experienced modders have never come anywhere close to any limits with it.
 +
 
 +
Aside from the 16 MB limit, we are not aware of any other limit with respect to things like recipes and lists; never having managed to create one that's big enough for it to be an issue. There's a ''formlist'' called "everything" which has over 1500 entries in it, so the limit for ''formlist'' entries is definitely higher than 1500.  Suspect that you'll break things long before you reach the 16 MB limit, though.  Things tend to break on powers of 2, especially at character and short integer size boundaries (255 and 65535), or at exactly half of that due to one bit being used for a sign bit (128 or 32767).
 +
 
 +
Scripts are limited to 32k characters. Comments and whitespace are counted in that size limit.
 +
 
 +
Exterior ''worldspace'' cells are limited to something like 128x64 or maybe 128x128 (don't recall which) or the game engine goes wonky. Again, the '''GECK''' will happily create a ''worldspace'' with more cells than this, and doesn't warn you that things will break. But the game's physics engine will totally fail if anything is placed outside of those limits.
 
</div>
 
</div>
  
Line 276: Line 355:
  
 
Note it is the ''persistent flag'' on the Reference that is mandatory in order for a RefID to become included in the search list for scripts/targets/whatever.  (See [http://geck.foesmm.org/index.php/Creating_a_New_Persistent_Reference GECK: Creating New Persistent Reference].)  Otherwise the list of refs to search through would be way too huge and cause engine lag.
 
Note it is the ''persistent flag'' on the Reference that is mandatory in order for a RefID to become included in the search list for scripts/targets/whatever.  (See [http://geck.foesmm.org/index.php/Creating_a_New_Persistent_Reference GECK: Creating New Persistent Reference].)  Otherwise the list of refs to search through would be way too huge and cause engine lag.
 +
 +
<span id="MapIsNotTerrain"></span>
 +
====The Map is not the Terrain and the ID is not the Record Number====
 +
 +
It is common to refer to the text form of the "IDs" for records ("Editor-ID", "Rec-ID", "Form-ID", and "Base-ID") as if they were the record identifiers used by the engine.  These are "labels" given (or not) by each mod author when they create the record solely for the benefit of us "numerically challenged humans".  For this reason, it is assumed they must be unique between plugins.  While this is a good practice, and something to be encouraged for the benefit of those searching out records by those references in tools such as '''GECK''' or '''xEdit''', it is important to understand that, like a "map", the text labels for those records are not the actual "terrain"; nor the "record number" actually used by the game engine.  It can't afford to leave something that critical up to fallible humans.  The '''GECK''' automatically assigns "record numbers" sequentially when you create a new record, and the "mod index" hexadecimal pair at the beginning of that record, consisting of the "current load order index" of the plugin makes it unique between plugins.  (See [http://fallout.wikia.com/wiki/Help:Form_IDs Help:Form IDs] for an explanation of how to interpret the "mod index" from a Form-ID or record number.)
 +
 +
Think about that for a minute.  The '''GECK''' only knows about plugin files you chose to load for that editting session.  Typically that will consist of the "FalloutNV" EXE and ESM, possibly some DLC if your plugin requires assets from it, and the plugin you are working on.  How is it going to know what other plugin "ID" text labels there are to determine yours are unique?  From one session to another you might load a different series of plugins.  It can't predict that "load order" for certain, and the '''GECK''' itself doesn't care.  Which is why the "mod index" couplet at the beginning of the record number is so clever and crucial to ensure uniqueness between plugins. 
 +
 +
This is proven out by examining any record in '''xEdit''': the "ID" label is a text data field within the record, just like any other "value".  (For example: the "Script" record variable "SLSD - Local Variable Data" identifies each "variable name" based upon it's "index value" within an array of variables specific to that script with the "text name" stored as "SCVR - Name" data.  You have to identify the "record number" before you can determine the "text name"; and not the other way around.)  A test was conducted to confirm that the text "Ref-ID" label did not have to actually be "unique" between plugins.  The same "Ref-ID" label was given to the same object in two different plugins, and the game had no problems differentiating between the two.  Not even when one plugin removed the "persistent object" by the "Ref-ID" they had in common, the same object from the other plugin was unaffected.  It did not matter if one plugin was made dependent upon the other.  Because they were records from different plugins, the engine could tell them apart.
 +
 +
Consequently, always bear in mind that when someone is speaking in terms of one of the forms of "ID", they are often meaning "as a way of identifying the specific record number".
 +
  
 
<span id="Tip-refVar"></span>
 
<span id="Tip-refVar"></span>
 +
 
====TIP Reference Variables explained====
 
====TIP Reference Variables explained====
 
: Thanks to '''vforvic''' of the Nexus "Fallout 3 Mod Talk" forum for the basis of the following:
 
: Thanks to '''vforvic''' of the Nexus "Fallout 3 Mod Talk" forum for the basis of the following:
Line 363: Line 455:
  
 
"According to the layout of this system, the maximum number of additional modules that can be loaded by the game is 254 (256 load order ranges, - 1 for the Savegame FF range, - 1 for the always-mandatory Fallout3.esm/FalloutNV.esm)." - [http://fallout.gamepedia.com/Form_ID Form-ID on The Vault wiki]
 
"According to the layout of this system, the maximum number of additional modules that can be loaded by the game is 254 (256 load order ranges, - 1 for the Savegame FF range, - 1 for the always-mandatory Fallout3.esm/FalloutNV.esm)." - [http://fallout.gamepedia.com/Form_ID Form-ID on The Vault wiki]
 +
 +
: '''FiftyTifty''' added the following advice:
 +
Let's suppose you have a number of Actors you don't want active until your quest reaches a certain "stage".  Then you want a script for them to [http://geckwiki.com/index.php?title=OnLoad Begin OnLoad].  But "OnLoad" will not run on anything "disabled".  (See the "Notes" on that page and also [http://geckwiki.com/index.php?title=Running_an_OnLoad_block_on_a_disabled_item Running an OnLoad block on a disabled item].)  You need some sort of "switch" to enable them.
 +
 +
Rather than enabling each actor individually, set the placed ''actor references'' to have the same ''parent reference'': a dummy trigger object you place in the cell. Then when you want the actors to be enabled, just enable the ''parent reference'' object in your script (as in:
 +
<pre>
 +
actorrefParent.Enable()
 +
</pre>
 +
 +
See the GECKWiki page [http://geckwiki.com/index.php?title=Reference#Enable_Parent Enable Parent] entry.
 
</div>
 
</div>
  
 
<span id="Tip-GlobVar"></span>
 
<span id="Tip-GlobVar"></span>
 +
 
==== TIP Global ref variables '''Player''' and '''PlayerREF''' ====
 
==== TIP Global ref variables '''Player''' and '''PlayerREF''' ====
 
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 376: Line 479:
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">According to the Community GECK site, "[http://geck.technodeep.net/index.php/Player Player] is used to describe several things, sometimes simultaneously."  Among them is: "A scripting keyword that is effectively a global [http://geck.technodeep.net/index.php/Reference_variables reference variable] that resolves to the Actor reference described above."
+
">According to the Community GECK site, "[http://geckwiki.com/index.php?title=Player Player] is used to describe several things, sometimes simultaneously."  Among them is: "A scripting keyword that is effectively a global [http://geckwiki.com/index.php?title=Reference_variables reference variable] that resolves to the Actor reference described above."
  
The [http://geck.technodeep.net/index.php/Ref_Variable Ref Variable] page only uses "'''PlayerREF'''" for checking that a locally defined ref variable is that specific Actor "formid" reference.  It cautions regarding using a base form reference: "Beware that this is still a base form and may not be used as the [http://geck.technodeep.net/index.php/Calling_reference calling reference] to functions that allows this syntax, although it may be passed as the target if the function permits this.
+
The [http://geckwiki.com/index.php?title=Ref_Variable Ref Variable] page only uses "'''PlayerREF'''" for checking that a locally defined ref variable is that specific Actor "formid" reference.  It cautions regarding using a base form reference: "Beware that this is still a base form and may not be used as the [http://geckwiki.com/index.php?title=Calling_reference calling reference] to functions that allows this syntax, although it may be passed as the target if the function permits this.
  
 
The combination of those statements suggest that it is a poor practice to assume the variable "'''Player'''" refers to the PC Actor formid at any given moment without checking first.  And "[PlayerRef].< function >" syntax implies that "[PlayerRef]" is an abstraction of a locally initialized (e.g. "set myPlayerRef = '''PlayerREF'''") variable.  The following hopefully clears this up.
 
The combination of those statements suggest that it is a poor practice to assume the variable "'''Player'''" refers to the PC Actor formid at any given moment without checking first.  And "[PlayerRef].< function >" syntax implies that "[PlayerRef]" is an abstraction of a locally initialized (e.g. "set myPlayerRef = '''PlayerREF'''") variable.  The following hopefully clears this up.
Line 424: Line 527:
 
It is interesting to know that a collider will relate to an object part when it encompasses it, not by the child/parent relation inside a '''Nif'''.
 
It is interesting to know that a collider will relate to an object part when it encompasses it, not by the child/parent relation inside a '''Nif'''.
  
 +
*[https://www.nexusmods.com/newvegas/mods/70791 Editing and combining vanilla armor parts in Blender and then exporting them while cleaning them in Nifskope in a way that works in game] by '''clanky4 '''.  (PDF) tutorial walkthrough of editing/combing vanilla armor parts in blender and exporting them out again. And cleaning them up in Nifskope.
 
*[http://rd.nexusmods.com/newvegas/mods/64390 Different emission Vault Signs tutorial] by '''munnibha'''. Tutorial covering the following points:  
 
*[http://rd.nexusmods.com/newvegas/mods/64390 Different emission Vault Signs tutorial] by '''munnibha'''. Tutorial covering the following points:  
  
Line 498: Line 602:
 
:*Set "Max Linear Velocity" to "1068".  
 
:*Set "Max Linear Velocity" to "1068".  
 
:*Set "Max Angular Velocity" to "31.5700".   
 
:*Set "Max Angular Velocity" to "31.5700".   
:Now the weapon should drop to the ground.  
+
:The weapon should now drop to the ground.  NOTE: If you don't see these options either you are looking under the wrong '''node''' or are using a version of '''NifSkope''' other than the one recommended up under the [[#Programs_and_Tools|Programs and Tools]] section.
 +
:''Mopp shapes'' are used for '''static collisions''' (i.e. anything that doesn't move: like fences, walls, etc.). They can be used for movable objects, but are far more performance intensive (depends on the collision poly count) than '''convex''' or '''box''' shapes.
  
:For other object types, look in NIF.XML located in the '''Blender foundation\blender\.blender\scripts\bpymodules\pyffi\formats\nif\''' folder or the '''NifSkope''' documentation files in the "Doc" folder of it's installation folder. Search for ''bhkRigidBody''. It has a good listing and some simple explanations of the options.  
+
:The ''BSXFlags'' entry is crucial to this behavior.  It must be found / placed under the '''BSFadeNode''' in '''NifSkope'''.  You need to have the '''Use BSFadeNode Root''' option checked in your "paint" type program when exporting the NIF. (It's on the upper right area of the '''NIF Export''' options of '''Blender'''.)
 +
 
 +
:For other object types, look in NIF.XML located in the '''Blender foundation\blender\.blender\scripts\bpymodules\pyffi\formats\nif\''' folder or the '''NifSkope''' documentation files in the "Doc" folder of it's installation folder. Search for ''bhkRigidBody''. It has a good listing and some simple explanations of the options.
 
</div>  
 
</div>  
 
&nbsp;
 
&nbsp;
  
 
<span id="Tip-HeadPartsRotated"></span>
 
<span id="Tip-HeadPartsRotated"></span>
 +
 
==== TIP Head Parts Rotated ====
 
==== TIP Head Parts Rotated ====
 
It's not known why head parts changed between FO3 and FNV, considering that so much else in the game engine is identical, but they did. If you port a head part (hat, glasses, facemask, etc) from FO3 to FNV or from FNV to FO3, or make a new open helmet/hat/head accessory that uses a existing mesh, whether it's a simply a clone or a retexture, it tends to equip sideways (rotated by 90 degrees).
 
It's not known why head parts changed between FO3 and FNV, considering that so much else in the game engine is identical, but they did. If you port a head part (hat, glasses, facemask, etc) from FO3 to FNV or from FNV to FO3, or make a new open helmet/hat/head accessory that uses a existing mesh, whether it's a simply a clone or a retexture, it tends to equip sideways (rotated by 90 degrees).
Line 558: Line 666:
 
<span id="MashingMeshes"></span>
 
<span id="MashingMeshes"></span>
 
==== TIP Mashing Meshes ====
 
==== TIP Mashing Meshes ====
:Thanks to '''madmongo''', '''M48A5''', and 'RoyBatterian'''of the Nexus Fallout "New Vegas Mod Troubleshooters" forum for the basis of the following:'''  
+
:Thanks to '''madmongo''', '''M48A5''', and '''RoyBatterian''' of the Nexus Fallout "New Vegas Mod Troubleshooters" forum for the basis of the following:'''  
 
<div class="boilerplate metadata" id="Notice_Box" style="margin:0px 10px 10px 10px;  border:1px dashed #DAA520;  color: lightgray;  background-color:#333333;  padding:3px;  word-wrap: break-word">Suppose for example you want to place the model of a particular pistol into a holster for display purposes. (This "pistol" will not be usable. It's for aesthetic purposes only.) Some call this process "mashing" two meshes together (e.g. mashing the pistol into the holster). The process is similar for other sorts of "mashing".  
 
<div class="boilerplate metadata" id="Notice_Box" style="margin:0px 10px 10px 10px;  border:1px dashed #DAA520;  color: lightgray;  background-color:#333333;  padding:3px;  word-wrap: break-word">Suppose for example you want to place the model of a particular pistol into a holster for display purposes. (This "pistol" will not be usable. It's for aesthetic purposes only.) Some call this process "mashing" two meshes together (e.g. mashing the pistol into the holster). The process is similar for other sorts of "mashing".  
 
The basic procedure is first go into '''NifSkope''' and remove all of the unneeded "animations" and "collision" and such so that you are left with just the (in this instance: "weapon") source mesh. Save that to some new nif (you can delete this temporary nif later).
 
The basic procedure is first go into '''NifSkope''' and remove all of the unneeded "animations" and "collision" and such so that you are left with just the (in this instance: "weapon") source mesh. Save that to some new nif (you can delete this temporary nif later).
Line 582: Line 690:
 
</div>  
 
</div>  
 
&nbsp;
 
&nbsp;
 +
 +
<span id="Tip-MultiSceneRoots"></span>
 +
==== TIP Mashing Meshes - Fix multiple SceneRoots ====
 +
: Thanks to '''madmongo''', '''M48A5''', and '''AusAllerWelt''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When attempting to "mashup" a custom mesh such as armor from parts of other different meshes, sometimes it looks just fine in '''NifSkope''', but all "stretchy" and "weird" in the '''GECK'''.
 +
 +
This is usually an indication that the "bone weights" of the "mesh rigging" to the "armature" (AKA "skeleton") are off.  This is primarily avoided by ensuring the outfits you are copying bits from all use the same armature/skeleton.
 +
 +
However, you might end up with multiple ''Scene_Root'' nodes (visible in '''NifSkope''') as the result of combining parts from different mesh NIF files in '''Blender''' (or your mesh editor of choice).  This can happen when you copy not just the specific ''blocks'' but the entire ''NiNode'' between meshes.  There should only be one ''Scene_Root'' node and it should be at the top of the NIF in '''NifScope'''.  Make sure you copy ''branches'' (''NiTriShape''s) from one NIF to the other. You should end up with a single ''Scene_Root'' and all of the various bones and mesh bits under that.
 +
 +
You can correct this problem by ensuring you remove all the armatures in the end ("Remove Branch" in '''NifScope''', or similar command in your mesh editor), and import the desired skeleton again so you only have one ''Scene_Root''/armature. If the mesh still has two after the export to a NIF you can just select the ''NiNode'' (in '''NifSkope''') that contains all parts of the mesh and use "Crop to Branch" and then rename it to ''Scene_Root''.
 +
 +
It's generally better to work on your new meshes in your mesh editor of choice, because you have more control over what you want to do and can also fix weighting issues that may arise by mashing parts of different outfits together. If you plan on making more "mashups", it's best to consider learning how to work with your mesh editor.  It's always better to use the correct tool designed for the task instead of trying to force a different one to do something not intended (like driving screws with a hammer: it will ''probably'' work; just not as well).
 +
</div>
  
 
<span id="Tip-MovableObjects"></span>
 
<span id="Tip-MovableObjects"></span>
Line 691: Line 817:
 
</div>
 
</div>
  
=== Worldspaces ===
+
<span id="Tip-TestCells"></span>
If you want to create your own worldspace, then you must be a real glutton for punishment, because this gets you into the buggiest parts of the GECK.  For example. you create a worldspace, then go and edit its heightmap, and when you save your heightmap and exit out of it, the GECK will crash. The only way to avoid this is to create your worldspace, save your mod, exit the GECK, reload your mod, and then edit the heightmap. This isn't explained anywhere in the GECK, but if you create a heightmap that is too low, the GECK will crash. One modder used to create heightmaps with a general offset of about 6000, but then found there's another bug that when you do that: trees don't generate LOD properly. So your heightmap really needs to be above something like 20-25,000 or so.  If your landscape doesn't have trees (or objects that are defined as having tree LOD in the GECK) then you don't need to worry about it and 6000 offset works fine, BUT: the default LOD water height is 10500.
+
==== TIP Test Cells ====
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">The '''Nukapedia Portal''' has a [https://fallout.fandom.com/wiki/Fallout:_New_Vegas_test_cells FNV Test Cells] page listing various location cell Ref-IDs used by the developers for testing a variety things you may find of use with the console '''coc <Ref-ID>''' command.
 +
 
 +
A list of the game cell Ref-IDs (minus the wilderness IDs) can also be found [https://fallout.fandom.com/wiki/Fallout:_New_Vegas_cell_ID#Wasteland here].
 +
</div>
 +
 
 +
=== Worldspaces ===
 +
If you want to create your own worldspace, then you must be a real glutton for punishment, because this gets you into the buggiest parts of the GECK.  For example. you create a worldspace, then go and edit its heightmap, and when you save your heightmap and exit out of it, the GECK will crash. The only way to avoid this is to create your worldspace, save your mod, exit the GECK, reload your mod, and then edit the heightmap. This isn't explained anywhere in the GECK, but if you create a heightmap that is too low, the GECK will crash. One modder used to create heightmaps with a general offset of about 6000, but then found there's another bug that when you do that: trees don't generate LOD properly. So your heightmap really needs to be above something like 20-25,000 or so.  If your landscape doesn't have trees (or objects that are defined as having tree LOD in the GECK) then you don't need to worry about it and 6000 offset works fine, BUT: the default LOD water height is 10500.
  
 
At some point you will try to navmesh your entire new worldspace. It's a really big worldspace with lots of cells, so it's a royal pain to navmesh each cell. Here you find out that the default settings for generating navmeshes will typically navmesh right across a fence, but will block on a piece of road. (Hey GECK, isn't it supposed to be the other way around? Arrgghh.) (As an aside, using heightmap generation mode works a LOT better). Oh, but wait, there's an automatic navmesh generator under the Regions section. Except that it is THE MOST BUGGY THING IN THE ENTIRE GECK. People have had it navmesh the entire area OUTSIDE of the area you want it to navmesh, completely leaving the area you wanted to navmesh untouched. Oh, and by the way, it completely rips out whatever navmeshing you had before in your mod, so hope you saved a backup somewhere because otherwise it's gone. Oh again, but don't worry. The auto navmesher doesn't always navmesh outside where you want it to. No, more often it just completely locks up with an infinite "Get Jean" popup error box that you can't get rid of because it just pops up again. Seriously, the error box just says "Get Jean". After some googling it was learned that "Jean" was the pathing coder and this was a debug message that was never removed from the GECK. The auto-navmesher also completely hangs up when it encounters an SCOL (static collection).  The auto navmesher managed to navmesh a large (and very simple) landscape for a modder once. And only once. These days it's recommended you don't even bother to try and use it.  Just navmesh cell by cell. It's quicker and less frustrating.
 
At some point you will try to navmesh your entire new worldspace. It's a really big worldspace with lots of cells, so it's a royal pain to navmesh each cell. Here you find out that the default settings for generating navmeshes will typically navmesh right across a fence, but will block on a piece of road. (Hey GECK, isn't it supposed to be the other way around? Arrgghh.) (As an aside, using heightmap generation mode works a LOT better). Oh, but wait, there's an automatic navmesh generator under the Regions section. Except that it is THE MOST BUGGY THING IN THE ENTIRE GECK. People have had it navmesh the entire area OUTSIDE of the area you want it to navmesh, completely leaving the area you wanted to navmesh untouched. Oh, and by the way, it completely rips out whatever navmeshing you had before in your mod, so hope you saved a backup somewhere because otherwise it's gone. Oh again, but don't worry. The auto navmesher doesn't always navmesh outside where you want it to. No, more often it just completely locks up with an infinite "Get Jean" popup error box that you can't get rid of because it just pops up again. Seriously, the error box just says "Get Jean". After some googling it was learned that "Jean" was the pathing coder and this was a debug message that was never removed from the GECK. The auto-navmesher also completely hangs up when it encounters an SCOL (static collection).  The auto navmesher managed to navmesh a large (and very simple) landscape for a modder once. And only once. These days it's recommended you don't even bother to try and use it.  Just navmesh cell by cell. It's quicker and less frustrating.
Line 715: Line 852:
  
 
Assuming you want to make your own landscape from scratch, the first step is just creating the world space. Click on "World | World Spaces" in the GECK, and when that form comes up, just click "New" on the left hand side to give your new region a name, and fill in the blanks. Exit out of that, and save your mod, because the next step will usually crash the GECK.
 
Assuming you want to make your own landscape from scratch, the first step is just creating the world space. Click on "World | World Spaces" in the GECK, and when that form comes up, just click "New" on the left hand side to give your new region a name, and fill in the blanks. Exit out of that, and save your mod, because the next step will usually crash the GECK.
 +
 +
<span id="Tip-WorldspaceHiLites"></span>
 +
==== Highlights of the Worldspace ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">This is a summary of various points raised elsewhere in this section for quick reference.  Some details may vary.  Be conservative.
 +
 +
* In FNV, the worldspace size is 128x128 cells with a heightmap for -63 to +63 in both the X and Y directions.  Weird things start to happen if you go over that size.
 +
:* The GECK's heightmap editor only displays +/- 32 in each direction, so it only shows a 64x64 heightmap. The rest of it is blacked out even though you can go to cells beyond that in the render window and see that the cells are both heightmapped and textured (just a uniform brown dirt texture).
 +
:: My GECK tends to want to crash if I get close to the edges of the map, centered on +/- 63 in either the X or Y direction.
 +
 +
* Keep all land height above 14,000 or you can have LOD issues.
 +
 +
* If you are using the landscape editor, be gentle. If you try to shape the landscape too quickly, you tend to create landscape tears.
 +
 +
* If you have water, don't forget to add a water texture in your worldspace. "Data\Textures\Water\wastelandwaterpotomac.dds" tends to work well for many different water types (river, lake, etc). I've never tried to make ocean water with it though.
 +
 +
* Don't ever place water objects in an exterior cell. You can, but that tends to break things.
 +
:* Placed water only sticks to certain Z-axis levels which are the same for every water object in that cell no matter what you do; and there's no way to have water in all 3 levels of the fountain from Dead Money, for example.
 +
:* When you add or adjust the height of a placed water object it changes the height of the water level in that cell. So just '''edit cell''' on the cell in question, reset the water level height to 0 and you're (hopefully) sorted.
 +
::* The way that you adjust water height for a cell is to view that cell in your render window, click on that cell to make sure you have it selected, then click on '''World -> Cells'''...
 +
::* If you selected the cell you want to modify, then that cell will automatically come up selected in the Cell window. From there you can change the water height and the water type.
 +
 +
* If you ever get an error where it says that part of the landscape height is out of bounds, the '''GECK''' will helpfully tell you that it can fix it. It can't. Your landscape is totally hosed at that point. Hopefully you saved an earlier version of your mod to go back to.
 +
 +
* If you make an ESP larger than 16 MB and you add something with a reference ID number of some sort to it, you will break your mod. The '''GECK''' will NOT give you any error whatsoever when you do so. When you try to load your mod, you'll crash the game. When you try to load the mod in the '''GECK''' to fix it, you'll crash the '''GECK'''. Hope you saved an earlier version of your mod somewhere that you can go back to.
 +
 +
* There are several ways to avoid the 16 MB bug.
 +
 +
:* The first is to create your landscape first, then place all objects into the worldspace, create all interiors, etc. After all that is done, then paint your landscape, add navmeshes, conversations/quests, etc. Landscape, navmeshes, and quest things can all be safely added above the 16 MB boundary. This works well enough for fairly simple mods.
 +
:* The second way involves setting your '''GECK''' up in networked developer mode, which is not how most people set it up.  This has instructions for setting your '''GECK''' up in networked mode. There are some errors in these instructions, but as far as I am aware, they are the best instructions you'll find anywhere on the net:
 +
:* [http://geckwiki.com/index.php?title=Version_Control Version Control].
 +
::* In networked mode, the 16 MB bug still applies. So create your worldspace, check that in to version control, then add stuff, and check those changes in. When you do this, the '''GECK''' will automatically place ID values below the 16 MB boundary. I'm sure there are still size limits in there somewhere, but I have yet to hit them using this method, even in mods that contain multiple worldspaces.
 +
::* The '''GECK''' tends to crash when working with larger mods anyway, so keeping the bulk of your mod checked in to version control and only working on small bits of it helps fairly dramatically in preventing '''GECK''' crashes.
 +
 +
* In the regions section of the '''GECK''', there is an option to automatically navmesh the entire region. You may find this tempting, but DO NOT EVER USE THIS FEATURE. It is the most broken thing in the '''GECK''' that I have found yet to date. I did actually get it to correctly navmesh a region once. And only once. It was a fairly simple landscape and there wasn't much on it yet. SCOLS make the navmesher crash. Sometimes it will navmesh inside the region boundaries, sometimes, for no reason whatsoever, it will navmesh OUTSIDE your region boundaries instead of inside. Either way, if it screws up, it completely borks your entire navmesh for the entire worldspace. It also tends to crash in an endless loop constantly popping up a box with the error message "Get Jean!" over and over until you kill the '''GECK''' in the task manager.
 +
 +
* Instead, the best you can do with navmeshing is to use the automatic navmesher for a single cell. When you click on the navmesh toolbar to bring it up, the cell auto navmesher is the first question mark from the left, just to the right of the finalize checkmark button. In the navmesh dialog, click the check box to enable height map generation mode, uncheck remove overlapping and remove thin areas, and you'll get about the best performance that you can out of it. A 64x64 worldspace is 4,096 cells. If you can use the auto navmesher to do 4 cells per minute, that's 1,024 minutes, or a bit over 17 hours just clicking on the navmesh button over and over and over and over. If you don't use heightmap generation mode, the navmesher has a tendency to fail to navmesh across bumpy roads and easily walkable surfaces.  (If you set the auto navmesher to '''Height Map Only''' mode, it works a lot faster and a lot better, and will usually navmesh across roads just fine. It will still navmesh across fences though.)
 +
 +
* The '''GECK''' will not render your worldspace unless there is something in it. But it's really hard to put something in it if you can't see anything. It's kind of a catch 22. I usually drop the little airplane into it, which I delete later. After that, go to an interior cell so you can get the render window to work properly again, then go to your little plane, and now finally you can see your new landscape. When editing your new landscape, always go to a part of your worldspace that has something in it first. If the first thing the '''GECK''' has to render is a section of worldspace with no objects in it, it goes right back to the render bug where you don't see anything except a gray blob (I think it's actually rendering water everywhere, stupid '''GECK'''...).
 +
 +
* If you paint your landscape or use the raise/lower tool in the render window (not the worldspace height editor), you can end up with black squares just outside of the area you were editing. Those black squares will be persistent, in that you can move away from them and they'll still be there when you come back, but they aren't really there. It's just yet another '''GECK''' bug.
 +
 +
Welcome to the buggiest parts of the '''GECK'''. Save often. Keep backups.
 +
</div>
 
   
 
   
 
<span id="Tip-CenterOn"></span>
 
<span id="Tip-CenterOn"></span>
 +
 
====TIP Center_On_Cell '''COC''' Markers====
 
====TIP Center_On_Cell '''COC''' Markers====
 
: Thanks to '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:  
 
: Thanks to '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:  
Line 801: Line 987:
 
</div>
 
</div>
  
Some folks use things like "geological survey data" to generate their heightmaps. See the last couple of threads in the list of tutorials below or poke around on the net.
+
Some folks use things like "geological survey data" to generate their heightmaps. See the last couple of threads in the list of tutorials below (under the [[#Heightmaps|Heightmaps]] section) or poke around on the net.
  
 
If all is well so far, save your heightmap and save your mod. If you didn't restart the GECK earlier, chances are that right here is where the GECK will crash. The second time through this it usually works.
 
If all is well so far, save your heightmap and save your mod. If you didn't restart the GECK earlier, chances are that right here is where the GECK will crash. The second time through this it usually works.
Line 816: Line 1,002:
  
 
<span id="Tip-TerrainEditor"></span>
 
<span id="Tip-TerrainEditor"></span>
 +
 
==== TIP Terrain Editor missing texture ====
 
==== TIP Terrain Editor missing texture ====
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 832: Line 1,019:
 
Reusing cells from one plugin to another is a great time saver, but you have to bear some things in mind.
 
Reusing cells from one plugin to another is a great time saver, but you have to bear some things in mind.
  
:* The Trick is to make your new ESP first, only dependent on the main master file.  Save and close it.
+
:* The Trick is to make your new ESP first, only dependent on the main ''master'' file ("FalloutNV.esm").  Save and close it.
 
:: Best way to make a new ESP file is to drop something in the "Render" window, then save and name the file.  So loading a cell first is needed.  Suggest "Wasteland cell / Good Springs" if you don't have any in particular in mind.  You can of course delete that cell later from your ESP if it's not needed for your purposes.
 
:: Best way to make a new ESP file is to drop something in the "Render" window, then save and name the file.  So loading a cell first is needed.  Suggest "Wasteland cell / Good Springs" if you don't have any in particular in mind.  You can of course delete that cell later from your ESP if it's not needed for your purposes.
 
:* Then open your preferred tool adding the other files from which you want to use assets, (with your new .ESP as the "active file" in GECK).
 
:* Then open your preferred tool adding the other files from which you want to use assets, (with your new .ESP as the "active file" in GECK).
 +
:* If you are creating a "DLC sized" mod with new worldspaces, you definitely need to have the GECK in ''networked developer mode'' instead of the ''single user mode'' that most people use.  (See '''Version Control''' under [[#Tip-ModSize|TIP Limit to Mod Size]].)<br>
 +
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
 +
style="margin:0px 10px 10px 50px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;
 +
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 +
white-space: pre-wrap;      /* css-3 */
 +
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 +
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Once you have version control set up, make sure that your mod's ESM is up to date both in your ''local files'' and in your ''network share''. Make sure that everything is ''checked in'' to version control and make sure that you have copied the network file version back to your local files.
 +
 +
Make sure that the mod with the worldspace that you want to add is an ESP. This won't work if it's an ESM.  Make sure that this mod doesn't depend on any other ''masters'', or else your new "DLC" mod will end up depending on those ''masters'' as well.
 +
 +
Now would be a really good time to back up all of your files, both ''local'' and ''network share''. If something screws up in the next steps, it can totally trash your mod. This is especially important because I am going from memory here and I've only done this a few times.
 +
 +
With ''networked mode'' / ''version control'' enabled, load up the '''GECK''' with your ESM mod and the ESP mod that contains the worldspace that you want to add to your mod. Go into ''version control'' in the '''GECK''' and it should list all of the things that are in the worldspace ESP as being changed since they are not in your ESM.  However, since you did not create this ESP in the '''GECK''' as a dependent mod from your new "DLC" mod, nothing is ''checked out''. So the first thing you need to do is select everything and select ''check out''. Once everything is ''checked out'', you can turn around and immediately ''check it back in'', which will remove it from the ESP and will place it into the ESM.
 +
 +
You might have to exit the '''GECK''' and restart it in between the ''check out'' and ''check in''.
 +
 +
Since your worldspace mod wasn't created with version control in mind, there are some things that can get screwed up doing this, especially if there are any conversations or script references in the ESP. But you'll get the worldspace and most things into your new "DLC" ESM properly.</div>
  
At the moment we don't know of any way to duplicate exterior world spaces in GECK. You can copy cell records between plugins in FNVEdit.  In order to change the FormID of the duplicated Worldspace, you need to work from the bottom up: changing the FormIDs of the children cells before the parent.
+
At least one novice mod creator has had success using '''Mator''''s [https://www.nexusmods.com/skyrim/mods/69905 Merge Plugins Standalone (MPS)] tool to combine two (or more) worldspace ESP plugins without having to utilize the network developer '''GECK Version Control''' approach.  This process automatically merges the selected plugins into a new plugin, which may then require editing. 
 +
 
 +
: Note that the resulting combined plugin still needs to conform to the 16MB file limit for "single user mode" plugins.  The '''GECK''' (but only when using '''Version Control''') re-orders the records, and places things that are accessed via offset down lower into your ESM.  Things that aren't accessed via their offset into the file (landscape, landscape textures, navmeshes, quests, etc) are placed afterwards in the file, enabling larger file sizes.  This re-ordering was not stated as an intended initial purpose of MPS, so caution is indicated.  Please take the time to read all the reasons WHY using '''Version Control''' (under [[#Tip-ModSize|TIP Limit to Mod Size]]) is still recommended.
 +
 
 +
Finally, you can copy cell records between plugins in FNVEdit.  In order to change the FormID of the duplicated Worldspace, you need to work from the bottom up: changing the FormIDs of the children cells before the parent.
  
 
You can use either FNVEdit or GECK to duplicate interior cells, but this is how to use the GECK. In the GECK, load up the ESP with the cell you want but don't make it "active", while loading the ESP that you want the cell to end up in (i.e. your new ESP) as the "active file". Then just right click on the desired cell in the "source" plugin and select "Duplicate Cell". It will give the duplicate a name of whatever the cell name is plus COPY (or something like that). '''If there are any objects in the source cell that are unique to the mod you are copying it from or come from one of its masters that you don't want to include, delete those out of the copied cell.''' Then save your "active file" ESP. Do not add items to the cell or do anything else other than duplicate it or the GECK can sometimes get confused and it will mess everything up. Just duplicate the cell, remove anything you don't want in your "active file" ESP, and save. That's it. Exit and reload, and maybe rename the cell so that it doesn't have the word COPY in it, and then edit it to your heart's desire.
 
You can use either FNVEdit or GECK to duplicate interior cells, but this is how to use the GECK. In the GECK, load up the ESP with the cell you want but don't make it "active", while loading the ESP that you want the cell to end up in (i.e. your new ESP) as the "active file". Then just right click on the desired cell in the "source" plugin and select "Duplicate Cell". It will give the duplicate a name of whatever the cell name is plus COPY (or something like that). '''If there are any objects in the source cell that are unique to the mod you are copying it from or come from one of its masters that you don't want to include, delete those out of the copied cell.''' Then save your "active file" ESP. Do not add items to the cell or do anything else other than duplicate it or the GECK can sometimes get confused and it will mess everything up. Just duplicate the cell, remove anything you don't want in your "active file" ESP, and save. That's it. Exit and reload, and maybe rename the cell so that it doesn't have the word COPY in it, and then edit it to your heart's desire.
  
The GECK only includes a file as a resource if it's a "master file". If you load an ESP, the GECK won't treat it as a master (unless you have configured the GECK PowerUp to allow ESPs to be "masters"). The GECK will automatically add any master files that the other ESP loaded since those will all be loaded into your new editing session when you load both ESP files.
+
The GECK only includes a file as a resource if it's a "master file". If you load an ESP, the GECK won't treat it as a master (unless you have configured the '''GECK PowerUp''' plugin to allow ESPs to be "masters".  The '''GECK Extender''' allows this as well without configuring). The GECK will automatically add any master files that the other ESP loaded since those will all be loaded into your new editing session when you load both ESP files.
  
 
This will end up including "master files" from the "original ESP" in your "new ESP", so if you don't want them: just delete them from the GECK data screen when you select your mod for loading. However, if you accidentally left in something dependent upon one of those masters in your copied cell, deleting the master will screw up your mod.   
 
This will end up including "master files" from the "original ESP" in your "new ESP", so if you don't want them: just delete them from the GECK data screen when you select your mod for loading. However, if you accidentally left in something dependent upon one of those masters in your copied cell, deleting the master will screw up your mod.   
Line 854: Line 1,065:
 
There are a lot of things that FNVEdit and the GECK can both do, they just do it differently. Which one you choose to use is a matter of personal preference, but sometimes one has capabilities the other lacks.
 
There are a lot of things that FNVEdit and the GECK can both do, they just do it differently. Which one you choose to use is a matter of personal preference, but sometimes one has capabilities the other lacks.
  
== Additional Material ==
+
<span id="Tip-SafeContainers"></span>
 +
==== TIP Making ''Safe'' containers ====
 +
: Thanks to '''GamerRick''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you intend to make over an existing Interior cell so it has "safe storage" for the Player, you need to prevent "respawning" (which resets the cell state, including "containers" and encounters, to their original condition after three days by default).  Depending upon your needs, check these points:
 +
* the properties of all "containers" (which includes ''Actors'') to see if they have the ''Respawns'' option enabled, and disable it if supposed to be "safe storage".
 +
* the "ownership" of the Interior cell itself.  (Compare to that of other "player homes", including "factions".)
 +
* set the cell's [https://geckwiki.com/index.php?title=Encounter_Zone Encounter Zone] to one that has the ''Never Resets'' box enabled.  Then, no containers in that cell will ever reset regardless of their individual setting.  But note this also means the state of "defenses" such as traps and creatures will also not reset.
 +
</div>
 +
 
 +
== Additional Material ==
 
The following is not intended to be a complete list, but rather a starting point on articles and videos specific to FNV to assist new mod creators in getting started.  Bear in mind that articles in older games may also be of assistance with basic concepts as long as you adjust to the peculiarities of the syntax in the GECK.
 
The following is not intended to be a complete list, but rather a starting point on articles and videos specific to FNV to assist new mod creators in getting started.  Bear in mind that articles in older games may also be of assistance with basic concepts as long as you adjust to the peculiarities of the syntax in the GECK.
  
Line 938: Line 1,162:
  
 
You should not generally attempt to change anything about a faction's relationship with another faction.  Instead create a new faction, decide which actors or other factions you want to be members of your new faction, and then establish their relationships with other factions.  If you haven't fully mapped out those inter-faction relationships, things get "surprising".
 
You should not generally attempt to change anything about a faction's relationship with another faction.  Instead create a new faction, decide which actors or other factions you want to be members of your new faction, and then establish their relationships with other factions.  If you haven't fully mapped out those inter-faction relationships, things get "surprising".
 +
 +
If a faction follower is not behaving towards others as expected, consider having it ally with itself.  For example, the game vanilla "follower faction" has got the "player faction" and itself as allies.  This appears to override all previous relationships of that follower and replace them with those of the player.
  
 
[http://fallout.gamepedia.com/Fallout:_New_Vegas_reputations Reputation] is about how members of various factions (including your own "Player" faction) feel about your character.  While related, they are separate issues.  Note you can have both positive and negative reputation (fame/infamy) with a given faction at the same time.  The "fame label" attached to your character is the result of a matrix of that positive/negative range, given in the referenced wiki article.  "Reputation" changes only apply to the Player; not to other Actors.
 
[http://fallout.gamepedia.com/Fallout:_New_Vegas_reputations Reputation] is about how members of various factions (including your own "Player" faction) feel about your character.  While related, they are separate issues.  Note you can have both positive and negative reputation (fame/infamy) with a given faction at the same time.  The "fame label" attached to your character is the result of a matrix of that positive/negative range, given in the referenced wiki article.  "Reputation" changes only apply to the Player; not to other Actors.
Line 1,014: Line 1,240:
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">Scn    DisguiseFactionPulseScript
 
">Scn    DisguiseFactionPulseScript
This script belongs to a spell effect [''DisguiseFactionPulseActorEffect''] that removes Faction Sniffers from the "magic" armor faction donned when players use faction disguises.  The spell is set off intermittently, through a pulse, that filters the appropriate references within its radius. This radius is set to 25 (spell units), currently, and it's planned to reach at least 50 units. The pulse is placed on the player every two seconds, timed through a quest script that kicks off/on when players equip a faction disguise. - Jorge
+
This script belongs to a spell effect [''DisguiseFactionPulseActorEffect''] that removes Faction Sniffers from the "magic" armor faction donned when players use faction disguises.  The spell is set off intermittently, through a pulse, that filters the appropriate references within its radius. This radius is set to 25 ([[Fallout 3/NV Game Units|game units]]), currently, and it's planned to reach at least 50 units. The pulse is placed on the player every two seconds, timed through a quest script that kicks off/on when players equip a faction disguise. - Jorge
  
 
Also, the script only addresses NCR relations. It'll eventually consider any faction that has faction disguises. [Editor - It now does, but only for those with "armor"; i.e. "not the WhiteGloveSociety".]
 
Also, the script only addresses NCR relations. It'll eventually consider any faction that has faction disguises. [Editor - It now does, but only for those with "armor"; i.e. "not the WhiteGloveSociety".]
Line 1,045: Line 1,271:
  
 
=== Bethsoft Basic Tutorials ===
 
=== Bethsoft Basic Tutorials ===
* [http://geck.technodeep.net/index.php?search=tutorial&title=Special%3ASearch&go=Go Bethsoft Basic GECK Tutorials]
+
* [http://geckwiki.com/index.php?search=tutorial&title=Special%3ASearch&go=Go Bethsoft Basic GECK Tutorials]
 
* [http://en.uesp.net/w/index.php?title=Special%3ASearch&search=tutorials&button= Basic Oblivion & Skyrim Tutorials]
 
* [http://en.uesp.net/w/index.php?title=Special%3ASearch&search=tutorials&button= Basic Oblivion & Skyrim Tutorials]
  
Line 1,061: Line 1,287:
 
* [http://www.nexusmods.com/newvegas/mods/56203/? Material and Texture Animations in NifSkope - Tutorial] PDF/DOC download.
 
* [http://www.nexusmods.com/newvegas/mods/56203/? Material and Texture Animations in NifSkope - Tutorial] PDF/DOC download.
 
* [http://forums.nexusmods.com/index.php?/topic/984792-tutorial-working-with-the-nicontrollermanager/ NifSkope: Working with the NiControllerManager] Forum Thread.  Alternate images available [http://www.mediafire.com/file/p0srsyrfuaszevp/Tutorial.zip here].
 
* [http://forums.nexusmods.com/index.php?/topic/984792-tutorial-working-with-the-nicontrollermanager/ NifSkope: Working with the NiControllerManager] Forum Thread.  Alternate images available [http://www.mediafire.com/file/p0srsyrfuaszevp/Tutorial.zip here].
 +
* [http://www.nexusmods.com/newvegas/mods/63770/? Nifskope Testing Skeleton] by clanky4. Mod for testing animations in NifSkope only.
 
* [http://www.youtube.com/watch?v=Zijo8ly6pyI One minute tutorial on Shape Keys] Video.
 
* [http://www.youtube.com/watch?v=Zijo8ly6pyI One minute tutorial on Shape Keys] Video.
 +
* [http://www.youtube.com/watch?v=XU9BAXkn_Bs Tutorial For Making Reload Animations work in FNV] Video by '''The Shiny Haxorus'''.
 +
* [http://www.nexusmods.com/newvegas/mods/66968 Weapon Animation Patching Tutorial] PDF with separate "screenshots" file by '''benja'''.
 
* [http://www.nexusmods.com/newvegas/mods/48521/? Weapon Animation Tutorial] PDF by '''Toasty Fresh'''.
 
* [http://www.nexusmods.com/newvegas/mods/48521/? Weapon Animation Tutorial] PDF by '''Toasty Fresh'''.
* [http://www.nexusmods.com/newvegas/mods/63770/? Nifskope Testing Skeleton] by clanky4. Mod for testing animations in NifSkope only.
+
 
* [http://www.nexusmods.com/newvegas/mods/66968 Weapon Animation Patching Tutorial] PDF with separate "screenshots" file by '''benja'''.
+
<span id="TIP-AnimationSounds "></span>
 +
====TIP Animation Sounds====
 +
: Thanks to '''Ashtonlp101''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Animations which play "sounds" have to be set under the "Special Idle" category in order for those respective sounds to get played. Otherwise the animation will be silent.
 +
 
 +
You can just replace the sounds in an existing animation easily using '''NifSkope''':
 +
<div style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
: Thanks to '''theswagnoob4''' for the comment on the Nexus "[https://www.nexusmods.com/newvegas/mods/69773?tab=posts Weapons of The New Millenia and Asurah Reanimation Pack Compatibility Patch]" mod forming the basis of the following:
 +
#  Open '''NifSkope'''.
 +
# Open the ".kf" animation file.
 +
# Navigate to the '''NiTextKeyExtraData''' node.
 +
# Open it by clicking on the arrow on the left.
 +
# Open "Text Keys".
 +
#: In each "Text Key" is a piece of text that defines the reload animation.  In at least one "Text Key" is a piece of text that says something like "Sound: WPN357RevolverCock".
 +
# Rename the "Text Key" to say something like "Sound: WPNPistol10mmReloadOut" (or whatever your replacement sound file is named).
 +
#: This example changes it from the sound of the .357 Revolvers cock sound to the 10mm pistol's "magazine out" noise.  Replace "WPN357RevolverCock" with whatever sound you want.</div>
 +
 
 +
If you are adding your own sound files, ensure they conform to the expected format as described under the [[#Music and Sounds|Music_and_Sounds]] section.
 +
</div>
  
 
<span id="Tip-AnimationSummary"></span>
 
<span id="Tip-AnimationSummary"></span>
 +
 
====TIP Animation Summary====
 
====TIP Animation Summary====
 
: Thanks to '''pluramon''' and '''RoyBatterian''' on the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following summary:
 
: Thanks to '''pluramon''' and '''RoyBatterian''' on the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following summary:
Line 1,168: Line 1,420:
 
endif
 
endif
 
</pre>
 
</pre>
Note that in the GECK, a ref variable may store either a ''reference'' or a ''base form''.  ''Base forms'' may not be used as the [http://geck.technodeep.net/index.php/Calling_reference calling reference] to functions that allow this syntax, although it may be passed as the target if the function permits this.  Hence the "IsActor" check in the example, while not necessary for "PlayerRef" (which is always a ''reference''), is a good practice.
+
Note that in the GECK, a ref variable may store either a ''reference'' or a ''base form''.  ''Base forms'' may not be used as the [http://geckwiki.com/index.php?title=Calling_reference calling reference] to functions that allow this syntax, although it may be passed as the target if the function permits this.  Hence the "IsActor" check in the example, while not necessary for "PlayerRef" (which is always a ''reference''), is a good practice.
  
 
If you want to use the ''console'' to force a particular "idle" (such as when "posing" the Actor), you must be in "3rd Person View", go into "Toggle Free Camera" (TFC) mode, select or reference the target Actor, and then issue the "PlayIdle" command.  Note that the skeleton (armature) in use must be compatible with that required by the animation or it won't work correctly.
 
If you want to use the ''console'' to force a particular "idle" (such as when "posing" the Actor), you must be in "3rd Person View", go into "Toggle Free Camera" (TFC) mode, select or reference the target Actor, and then issue the "PlayIdle" command.  Note that the skeleton (armature) in use must be compatible with that required by the animation or it won't work correctly.
Line 1,181: Line 1,433:
 
* [http://modsreloaded.com/creating-armor-in-fallout-3-with-blender-t3220.html Creating Armor in Fallout 3 with Blender] HTML.
 
* [http://modsreloaded.com/creating-armor-in-fallout-3-with-blender-t3220.html Creating Armor in Fallout 3 with Blender] HTML.
 
* [[Creating_armor_mashups_for_fallout|Creating armor mashups for fallout]] Wiki.
 
* [[Creating_armor_mashups_for_fallout|Creating armor mashups for fallout]] Wiki.
 +
* [https://www.nexusmods.com/newvegas/mods/70791 Editing and combining vanilla armor parts in Blender and then exporting them while cleaning them in Nifskope in a way that works in game] (PDF) Tutorial by '''clanky4'''.
 
* [[How_to_remove_the_BoS_decals_on_custom_Power_Armour|How to remove the BoS decals on custom Power Armour]] Wiki.
 
* [[How_to_remove_the_BoS_decals_on_custom_Power_Armour|How to remove the BoS decals on custom Power Armour]] Wiki.
 
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: Standalone Armor] PDF.
 
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: Standalone Armor] PDF.
Line 1,190: Line 1,443:
 
* [http://www.youtube.com/watch?v=gOTVt-y_2Ws Photoshop Rusted Metal Texture] Video.
 
* [http://www.youtube.com/watch?v=gOTVt-y_2Ws Photoshop Rusted Metal Texture] Video.
 
* [http://gomedia.com/zine/tutorials/tutorial-using-metal-and-rust-textures-to-destroy-a-design/ Using Metal and Rust textures to destroy a design] HTML.
 
* [http://gomedia.com/zine/tutorials/tutorial-using-metal-and-rust-textures-to-destroy-a-design/ Using Metal and Rust textures to destroy a design] HTML.
 +
 +
<span id="TIP-ArmorSkin"></span>
 +
==== TIP Armor Skin Tones ====
 +
: Thanks to '''AusAllerWelt''' of the Nexus "New Vegas Mod Troubleshooting" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Say you wanted some leather armor variations to have the right sleeve cut off exposing the skin of the arm. Suppose you are using a body replacer such as '''Breeze's Males''': so you edited the meshes to get a right arm piece for them and it worked, but now you're having a different skin tone on that armor itself from the rest of the body.
 +
 +
Most likely you didn't set the correct shaders for skin on the arm.
 +
It has to look like this:<br>
 +
{{filepath:NifSkope Armor Skin Shader settings.png}}
 +
</div>
  
 
<span id="Tip-BoneWeighting"></span>
 
<span id="Tip-BoneWeighting"></span>
Line 1,230: Line 1,497:
 
* [http://blenderartists.org/t/rendering-a-cubemap-skybox/528461 Rendering a cubemap/skybox] HTML thread on using Blender v2.49 to create "environment cube map" (AKA cubemap/skybox).  Note first post response misunderstood the problem.  Keep reading.
 
* [http://blenderartists.org/t/rendering-a-cubemap-skybox/528461 Rendering a cubemap/skybox] HTML thread on using Blender v2.49 to create "environment cube map" (AKA cubemap/skybox).  Note first post response misunderstood the problem.  Keep reading.
 
* [[Rigging_skinning_and_dismemberment|Rigging skinning and dismemberment (aka "meatcaps")]] Wiki article by '''Leakingroof'''.
 
* [[Rigging_skinning_and_dismemberment|Rigging skinning and dismemberment (aka "meatcaps")]] Wiki article by '''Leakingroof'''.
 +
 +
<span id="Tip-BlenderExport"></span>
 +
====TIP Blender version NIF export====
 +
: Thanks to '''EPDGaffney''' and '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When attempting to export a model from Blender as a NIF file, you get the "traceback (most recent call last):" error message box (after reporting one or more file lines) saying:
 +
<pre>"io_scene_nif.utility.nif_utils.NiError: non-uniform scaling not supported.  Workaround: apply size and rotations (CTRL-A) on '<object>'".</pre>
 +
Most probably the issue lies in using a newer version of Blender.  These are only minimally compatible with modding the older "Gamebryo engine" games.
 +
:* You want to save your model from the newer version of Blender using ("'''Save As''' | '''Legacy Mesh Format'''") which outputs a legacy ".blend" file, and then open it in a '''v2.49b''' version of the tool.  (See [[#Image_Tools|Image Tools]] above under the "Programs and Tools" section.)  However, some things don't seem to export properly when you do it this way.  The next bullet point is a possible way around such problems, but more likely you will just have to edit it.  For this reason, many people prefer to create new meshes using '''Blender v2.49b''' since everything there just works (except hairs).
 +
:* If you try to import a mesh from a different format (example: '''fbx''') '''Blender v2.49b''' won't import it properly.  (See [[#Tip-BlenderImport|TIP: Blender Import other Model Formats.]])  Instead import it into a newer version of '''Blender''' and then export as an "OBJ" format file.  At that point you can (in the same newer version of '''Blender''') just "'''Save As''' | '''Legacy Mesh Format'''" which outputs a legacy ".blend" file, as the mesh probably doesn't contain anything fancy that wouldn't export back to a ''legacy blend''.
 +
: Most have a lot of success in general when importing "OBJ" files so they tend to use that as an intermediary format.  But it isn't required when modding images from Gambryo games such as FNV and earlier.  Note that an "OBJ" file is a lot like a "text" or "CSV" file and does '''not''' include a ''UV Map''. You will need to generate a new one after importing before you can apply a texture.  (See  4th bullet point in [[#Tip-NoobBlender|TIP: New to Blender.]])
 +
: You should generally <Ctrl+A> (apply size and rotations) to everything before moving from '''Blender''''s default to another format, or rigging, or any big changes.  It doesn't always matter, but it's a good practice.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: green;
 +
background-color:#fff5f5;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">This needs to be done BEFORE creating "collision" or the scaling and rotation will cause the collision to not export properly.</span>  You can avoid that type of ''scaling'' in the first place by ''scaling'' in '''edit mode''' rather than '''object mode'''.</div>
  
 
<span id="Tip-ClearDisplay"></span>
 
<span id="Tip-ClearDisplay"></span>
====TIP Blender Clear the display====
+
====TIP Clear the display====
 
: Thanks to '''M48A5''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
: Thanks to '''M48A5''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
Line 1,245: Line 1,530:
 
</div>
 
</div>
  
<span id="Tip-NoobBlender"></span>
+
<span id="TIP: BlenderExport"></span>
====TIP New to Blender====
+
====TIP Export Settings====
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following.
+
: Thanks to '''AusAllerWelt''' and '''madmongo''' of the Nexus Fallout New Vegas "GECK and Modders" Forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
style="margin:0px 10px 10px 30px;border:1px dashed #DAA520;color: lightgray;
+
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">The '''Blender Noob to Pro''' tutorial included in the Blender v2.49b package under the [[#Programs and Tools|Programs and Tools]] section is a good resource.
+
">For "Fallout New Vegas" (and "Fallout 3") you want to set the default "export" settings for Blender as follows (assuming you are primarily working on '''Armor''' meshes), and then make adjustments as circumstances require.
Some tips that maybe aren't obvious when you are starting:
+
 
* Make sure you select all before exporting. Blender only exports what you have selected. Also, make sure you have the export options set properly for what you are doing. If you are making a static, click on the static button (at the top near the middle) and then below that click on the button for the closest material type (wood, metal, etc). If you are making armor, click on "creature", because armor and human skins and creature skins are all basically the same thing.
+
[[File:BlenderExport_Fig.png|frameless|800px|BlenderExport Figure]] <br clear=all>
* Statics and clutter items need a collision mesh. Armor, clothing, and human and creature skins don't need a collision mesh, but they do need to be parented to an armature (aka "a skeleton").
+
If you start with the default settings (click the "Restore Default Settings for Selected Game" button on the lower left), click on ''Creature'' under '''Collision Options''' (top middle right), then click on either the ''Cloth'' or ''Skin'' setting just below that. Then make sure that the ''Use BSFadeNodeRoot'' setting under '''Shader Options''' (top right) is '''unchecked''' (not selected).  
* Blender tends to export statics and clutter objects fine, but the version recommended as most compatible for FNV (v2.49b) doesn't seem to export the shader flags correctly for skins (armor, clothing, etc.).  If you don't go into NifSkope and fix the shader flags, your skin thing (armor, clothing, creature, etc) will end up invisible in-game.
+
 
* There are two different approaches used for UV mapping. One is to start with the texture and fiddle with the mesh to fit it, and the other is to start with the mesh and let Blender give it a UV map (unwrap using "smart projection") and then fiddle with the texture instead. Either way works, and which is easier depends on what you are making.
+
You can select the ''Shadow Map'' setting under '''Shader Options''' (top right) if you'd like, but you need to go into '''NifSkope''' afterwards anyway so you can set the ''Shadow Map'' '''Shader Option''' setting there, because this version of Blender always gets the following in particular "wrong". Either way works. (Using later versions of Blender brings their own problems.)<br>
* Start by making simple modifications to things. Here's an easy one to start with. There's a coffee table mesh ("SubCoffeeTableDirty01" in the GECK) that has an upper part and a lower part to it. Edit the mesh to get rid of the upper part, and edit the collision mesh to match, then export it and put it in a mod somewhere.
 
  
There are plenty of good tutorials out there.  Blender is a full-function 3-D editing tool that can be used to make everything from cartoon movies to games, so it's got a lot of stuff in there with lots of examples and tips scattered around the internet. The Nexus Mods site has a wiki "category" devoted to [http://wiki.nexusmods.com/index.php/Category:Blender Blender] articles.  Admittedly, there's a bit of a learning curve involved. But as long as you keep plugging away at it, you'll figure it out. It will seem easy once you get used to it.</div>
+
After you export your model, go into '''NifSkope''' to fix the '''Shader''' settings.
 +
* For any '''armor parts''' (i.e. "not human skin"), the '''Shader Type''' needs to be set to ''SHADER_DEFAULT'' and ensure ''SF_SHADOW_MAP'' and ''SF_REMAPABLE_TEXTURES'' are both '''checked''' (selected).
 +
* For any '''visible human skin''' body parts (arms, legs, etc,) the '''Shader Type''' needs to be set to ''SHADER_SKIN'' and ensure ''SF_SHADOW_MAP'' and ''SF_FACEGEN'' are both "checked" (selected). Blender will usually set the rest of the flags correctly.
 +
</div>
  
<span id="Tip-BlenderExport"></span>
+
<span id="Tip-ImportAnimation"></span>
====TIP Blender version NIF export====
+
==== TIP Import Animations ====
: Thanks to '''EPDGaffney''' and '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">When attempting to export a model from Blender as a NIF file, you get the "traceback (most recent call last):" error message box (after reporting one or more file lines) saying:
+
">To create your own, start with the wiki article [[Creating_character_animations|Creating Character Animations]].
<pre>"io_scene_nif.utility.nif_utils.NiError: non-uniform scaling not supported.  Workaround: apply size and rotations (CTRL-A) on '<object>'".</pre>
+
 
Most probably the issue lies in using a newer version of Blender.  These are only minimally compatible with modding the older "Gamebryo engine" games.
+
A couple of things that aren't documented on that page:
:* You want to save your model from the newer version of Blender using ("'''Save As''' | '''Legacy Mesh Format'''") which outputs a legacy ".blend" file, and then open it in a '''v2.49b''' version of the tool.  (See [[#Image_Tools|Image Tools]] above under the "Programs and Tools" section.)  However, some things don't seem to export properly when you do it this way. The next bullet point is a possible way around such problems, but more likely you will just have to edit it. For this reason, many people prefer to create new meshes using '''Blender v2.49b''' since everything there just works (except hairs).
+
 
:* If you try to import a mesh from a different format (example: '''fbx''') '''Blender v2.49b''' won't import it properly. (See [[#Tip-BlenderImport|TIP: Blender Import other Model Formats.]])  Instead import it into a newer version of '''Blender''' and then export as an "OBJ" format file. At that point you can (in the same newer version of '''Blender''') just "'''Save As''' | '''Legacy Mesh Format'''" which outputs a legacy ".blend" file, as the mesh probably doesn't contain anything fancy that wouldn't export back to a ''legacy blend''.
+
* The article makes it seem like it's always best to import an existing animation and then modify that. That has been found to be completely unnecessary if you are creating a new animation. If you just want to load up a model and a skeleton and start animating, that works just fine.
: Most have a lot of success in general when importing "OBJ" files so they tend to use that as an intermediary format.  But it isn't required when modding images from Gambryo games such as FNV and earlier. Note that an "OBJ" file is a lot like a "text" or "CSV" file and does '''not''' include a ''UV Map''. You will need to generate a new one after importing before you can apply a texture. (See  4th bullet point in [[#Tip-NoobBlender|TIP: New to Blender.]])
+
 
: You should generally <Ctrl+A> (apply size and rotations) to everything before moving from '''Blender''''s default to another format, or rigging, or any big changes.  It doesn't always matter, but it's a good practice.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: green;
+
* The '''GECK''' seems to have some hidden settings when you define an animation. For example, if you are creating a looping animation and you accidentally use '''Blender''''s default tags for looping instead of changing them, the '''GECK''' doesn't recognize these tags and the animation will jerk when it loops. If you fix the animation, the game will still have problems. You have to rename the animation, reassign it in the '''GECK''' so that whatever hidden variables it keeps get set properly, and then it will work. Because of this, always give your animations placeholder names like ''test1.kf'', ''test2.kf'', etc. and only give them their final names once you have them working properly.
background-color:#fff5f5;padding:3px;
+
 
 +
* Also found that the '''NIF Tools''' for '''Blender''' tend to rotate things by 90 degrees. Before starting any animation design, put the skeleton into the position that you want them to start in and either play that for 15 seconds or loop it. Then you can adjust things like the height and rotation before doing anything else.
 +
 
 +
* Combat animations are tricky. You can replace existing animations easily enough, but creating custom animations that only the player character will use is definitely not straightforward.  But if you just want to play an animation on command, that's simple.
 +
 
 +
* While most animations seem to import easily into Blender, have had some animations that either went into an infinite loop of some sort and locked Blender up while importing, and had other animations that did not work correctly after importing. Most will import ok though.
 +
</div>
 +
 
 +
<span id="Tip-ImportMesh"></span>
 +
==== TIP Import Mesh ====
 +
: Thanks to '''madmongo''' and '''AusAllerWelt''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">This needs to be done BEFORE creating "collision" or the scaling and rotation will cause the collision to not export properly.</span>  You can avoid that type of ''scaling'' in the first place by ''scaling'' in '''edit mode''' rather than '''object mode'''.</div>
+
">See the thread [https://forums.nexusmods.com/index.php?/topic/8825198-new-meshes-in-new-vegas/ new meshes in new vegas] for full details.  This is merely a summary.
 +
 
 +
Assume you have a basic mesh ".blend" file posed for the skeleton you want to make into a female armor.
 +
 
 +
* First of all, your mesh needs to be UV mapped. Don't use materials for this purpose. FNV requires UV mapping for textures.
 +
 
 +
* Second, make sure that you are using '''Blender''' 2.49b. If you are using a newer version of '''Blender''', you can probably make statics with it, but anything requiring rigging isn't going to work very well. If you want things to actually work with FNV, you need to use '''Blender''' 2.49b.
 +
*: You can find the correct version of '''Blender''' here (under [[#Image_Tools|Image Tools]]). It has all of the NIF tools that you'll need.
 +
*: If you used a newer version of '''Blender''' and haven't rigged the mesh yet, advice is to export your mesh as an ".obj" file and then import it into 2.49b as an ".obj". Exporting it from a newer version of '''Blender''' as a ".blend" doesn't work.
 +
 
 +
Ok, so at this point let's assume that you have your mesh in '''Blender''' 2.49b and that all you have is the armor mesh. The way that armor typically works in FNV is that it includes the human body parts underneath. If you have something that completely covers the human body like power armor, then you don't need the human body underneath. If parts of the body are visible, then you need to include the human body underneath with your mesh. Let's take the extreme example of the typical fantasy bikini chain mail armor. Most of what you see is human skin, not the armor, so basically the entire human body needs to be in the mesh. If you have something in between, like say an armored chest piece that covers the chest and back and includes a skirt of some sort, then you only need the human arms and legs. You can include the entire human body mesh, but most outfits don't since it wastes some time in the game engine drawing polygons that all get covered up by the armor mesh anyway, and if the armor mesh fits too tightly then sometimes you can end up with the human body parts clipping through, which looks bad.
 +
 
 +
* So the first step is to import the female upper body mesh, as this includes both the skeleton and the human body parts.
 +
* Once that is done, remove any human body parts that aren't visible. Again, if it's something like power armor that completely covers the body, then you can remove the entire human body mesh. If it's bikini chain mail or something similarly revealing, you may want to leave the entire body there.
 +
*: If you created the armor separately and didn't have a body to mold it around, you may want to adjust your mesh now so that it fits better over the human body.
 +
*: You also need to add "materials" to your armor, otherwise they won't show up in game because they will lack a shader.
 +
* Now, "parent" your armor mesh to the human skeleton (armature). You have a few different options for the bone weights. You can have '''Blender''' create the bone weights when you parent the mesh, which works reasonably well, but '''Blender''' tends to screw up a few things. Once you get some experience with it you'll be able to predict what parts will get screwed up and you'll have to manually fix them afterwards. Another option is to copy the bone weights from the human body mesh. In my experience this works pretty well for tight-fitting armor and clothing, but fails miserably when the armor or clothing isn't so tight-fitting. The third option is to paint all of the weights manually, which works better for solid armor pieces like a chest plate but doesn't work so well for fabrics and such that are supposed to move and deform with the body.
 +
* Once you have the bone weights done, save your blend so that you can always get back to this point. Then export your NIF file, making sure to use the proper settings. You can get the proper settings by clicking "Restore Default Settings for Selected Game" on the "nif export" screen, then go up to the top and click on "Creature" and then "Skin" under "Collision Options", then make sure "Use BSFadeNodeRoot" is ''de-selected''.
 +
* At this point you now have a mesh that is completely invisible in-game. This is due to '''Blender''' never setting the shader flags correctly. You fix these with [[# NifSkope_Mesh_Editor|Nifskope]].
 +
** For regular armor parts, the type needs to be set to SHADER_DEFAULT, and make sure SF_SHADOW_MAP and SF_REMAPABLE_TEXTURES are both checked.
 +
** For the any visible human skin body parts (arms, legs, etc, or the entire body mesh if you included it) the type needs to be set to SHADER_SKIN, and make sure SF_SHADOW_MAP and SF_FACEGEN are both checked.
 +
*: '''Blender''' usually sets the rest of the flags correctly. If your armor has multiple meshes, you will need to fix these flags in every mesh part.
 +
* Create your new armor in the GECK, and you're done.
 +
 
 +
So basically, the TL:DR short summary version:
 +
# Create your mesh
 +
# UV map your mesh
 +
# Import the human body mesh and skeleton
 +
# Remove any human body parts that aren't visible
 +
# Parent your mesh to the skeleton
 +
# Fix the bone weights
 +
# Export to NIF
 +
# Fix the shader flags in '''NifSkope'''
 +
</div>
  
 
<span id="Tip-BlenderImport"></span>
 
<span id="Tip-BlenderImport"></span>
====TIP Blender Import other Model Formats====
+
====TIP Import other Model Formats====
 
: Thanks to '''madmongo''' and '''user826''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''madmongo''' and '''user826''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
Line 1,292: Line 1,625:
 
</div>
 
</div>
  
=== Collision ===
+
<span id="Tip-ImportTexture"></span>
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
+
====TIP Import Texture====
 +
: Thanks to '''AusAllerWelt''' of the "Fallout New Vegas Mod Talk" forum for the basis of the following.
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">* Select your mesh in ''Edit Mode'' and go to ''Windows Type | UV/Image Editor''. (See Fig-1.)<br>
 +
[[File:BlenderImportTexture Fig-1.jpg|thumb|300px|left|Blender Import Fig-1]]<br clear=all>
 +
* Under ''Image'' you can select ''Open'' and load your texture ".dds" file. You might have to click ''New'' first for the UV of the object to appear and then load your texture again.  (See Fig-2.)<br>
 +
[[File:BlenderImportTexture Fig-2.jpg|thumb|300px|left|Blender Import Fig-2]]<br clear=all>
 +
* Once you're done with that, you only have to change the ''Draw Type'' for the Render Window to ''Textured'' to display the textures. (See Fig-3.)<br>
 +
[[File:BlenderImportTexture Fig-3.jpg|thumb|200px|left|Blender Import Fig-3]]<br clear=all>
 +
</div>
 +
 
 +
<span id="Tip-BlenderBlackTexture"></span>
 +
==== TIP Import Texture NIF appears Black ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Mesh files (*.NIF) internally point to the texture file (*.DDS) designed for them.  The "vanilla" and DLC game art assets (both mesh and texture files) are stored in "Bethesda Software Archive (BSA)" files instead of under the game "Data" folder tree while using the same folder structure.  (Some mod's do this as well.)  As '''Blender''' has no idea what a BSA file is, it can't find the texture file to display it.  If '''Blender''' can't find the texture file, it just shows the image with a "black" texture.  In order to see the textures for your mesh while looking at it in '''Blender''' you will have to extract the texture file(s) from the BSA into the appropriate folder under "Data\textures" first.  Be careful to extract such files to some other location than the game "Data" folder first, and then manually copy them to the correct "Data" folder to avoid accidents.
 +
</div>
 +
 
 +
<span id="Tip-NoobBlender"></span>
 +
====TIP Noob to Pro Tutorial====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following.
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 30px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">The '''Blender Noob to Pro''' tutorial included in the Blender v2.49b package under the [[#Programs and Tools|Programs and Tools]] section is a good resource.
 +
Some tips that maybe aren't obvious when you are starting:
 +
* Make sure you select all before exporting. Blender only exports what you have selected. Also, make sure you have the export options set properly for what you are doing. If you are making a static, click on the static button (at the top near the middle) and then below that click on the button for the closest material type (wood, metal, etc). If you are making armor, click on "creature", because armor and human skins and creature skins are all basically the same thing.
 +
* Statics and clutter items need a collision mesh. Armor, clothing, and human and creature skins don't need a collision mesh, but they do need to be parented to an armature (aka "a skeleton").
 +
* Blender tends to export statics and clutter objects fine, but the version recommended as most compatible for FNV (v2.49b) doesn't seem to export the shader flags correctly for skins (armor, clothing, etc.).  If you don't go into NifSkope and fix the shader flags, your skin thing (armor, clothing, creature, etc) will end up invisible in-game.
 +
* There are two different approaches used for UV mapping. One is to start with the texture and fiddle with the mesh to fit it, and the other is to start with the mesh and let Blender give it a UV map (unwrap using "smart projection") and then fiddle with the texture instead. Either way works, and which is easier depends on what you are making.
 +
* Start by making simple modifications to things. Here's an easy one to start with. There's a coffee table mesh ("SubCoffeeTableDirty01" in the GECK) that has an upper part and a lower part to it. Edit the mesh to get rid of the upper part, and edit the collision mesh to match, then export it and put it in a mod somewhere.
 +
 
 +
There are plenty of good tutorials out there.  Blender is a full-function 3-D editing tool that can be used to make everything from cartoon movies to games, so it's got a lot of stuff in there with lots of examples and tips scattered around the internet.  The Nexus Mods site has a wiki "category" devoted to [http://wiki.nexusmods.com/index.php/Category:Blender Blender] articles.  Admittedly, there's a bit of a learning curve involved. But as long as you keep plugging away at it, you'll figure it out. It will seem easy once you get used to it.</div>
 +
 
 +
<span id="Tip-Unweighted"></span>
 +
==== TIP Unweighted Vertices ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Sometimes '''Blender''' will not allow you to export your NIF because it has "unweighted vertices".
 +
 
 +
You're probably not doing anything wrong. '''Blender''' just can't figure out how to do the bone weights. ('''Blender''' can be a bit mentally challenged at times.)
 +
 
 +
If you are adding a ''static object'' to an Actor, you probably want all of the vertices on that object to be weighted to one bone anyway, otherwise the static object will deform as the creature/person moves. Select your static mesh (after it has been parented), go into ''weight paint'', find the bone you want to weight it to, set the weight to "1" (100 percent) in '''Blender''' (you might need to ''paint'' at least one vertex at this point), then press <F> to go into "face mode", <A> to "select all", and <Shift-K> to assign the weight value to all selected vertices.
 +
 
 +
If you DO want the object to deform as the creature moves, then you'll have to go in and paint the weights yourself. If it's selecting the entire mesh then chances are '''Blender''' is just getting itself confused and is just saying "Here, I give up. You do it yourself."
 +
 
 +
You might try using '''Blender''''s ''Create from Bone Heat'' option when parenting the object. That might do a better job of assigning weights to the vertices than the bone weight copy scripts. Then again, might not. Depends on the mesh.
 +
 
 +
Another trick is that once you get some experience with '''Blender''', you can start to predict what it's going to do right and what it's likely to screw up. You can sometimes resize or deform your mesh so that '''Blender''' will assign all of the weights properly, then edit the mesh after the weights are assigned to put it back into its original size and shape.
 +
</div>
 +
 
 +
=== Collision ===
 +
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
* [http://www.nexusmods.com/oblivion/mods/19739/? Blender Video Tutorial - Convex Collision] Video.
 
* [http://www.nexusmods.com/oblivion/mods/19739/? Blender Video Tutorial - Convex Collision] Video.
 
* [http://youtu.be/sADeZhuv748 Fallout to Blender and back: Collision Meshes - Part 1] Video.
 
* [http://youtu.be/sADeZhuv748 Fallout to Blender and back: Collision Meshes - Part 1] Video.
Line 1,470: Line 1,865:
  
 
* [http://www.nexusmods.com/newvegas/mods/45278/? Advanced Companion creation guide with Companion Wheel] HTML. (Most recommended.)
 
* [http://www.nexusmods.com/newvegas/mods/45278/? Advanced Companion creation guide with Companion Wheel] HTML. (Most recommended.)
 +
* [http://www.nexusmods.com/newvegas/mods/69752 Bringing Life to the Mojave Redux Tutorial] PDF by '''Mindboggles'''. (Techniques and an in-depth look at the process.)
 
* [http://www.nexusmods.com/fallout3/mods/5506 CMF Companion Tutorial] RTF by '''Darkfirebird CMF'''.
 
* [http://www.nexusmods.com/fallout3/mods/5506 CMF Companion Tutorial] RTF by '''Darkfirebird CMF'''.
 
* [http://forums.nexusmods.com/index.php?/topic/900821-fnv-companion-tutorial/ FNV Companion Tutorial] Forum Thread by '''trilioth'''.
 
* [http://forums.nexusmods.com/index.php?/topic/900821-fnv-companion-tutorial/ FNV Companion Tutorial] Forum Thread by '''trilioth'''.
 
* [http://geckwiki.com/index.php/Adding_items_to_vendors GECK: Adding items to vendors] Wiki tutorial.
 
* [http://geckwiki.com/index.php/Adding_items_to_vendors GECK: Adding items to vendors] Wiki tutorial.
 
* [http://www.youtube.com/playlist?list=PLo2FGzSVbkcPedlm9zZ981YvUy7DoSQew GECK: Companion Tutorial playlist by cgy95] Video series.
 
* [http://www.youtube.com/playlist?list=PLo2FGzSVbkcPedlm9zZ981YvUy7DoSQew GECK: Companion Tutorial playlist by cgy95] Video series.
* [http://geck.technodeep.net/index.php/Creating_a_new_vendor GECK: Creating a new vendor] Wiki tutorial.
+
* [http://geckwiki.com/index.php?title=Creating_a_new_vendor GECK: Creating a new vendor] Wiki tutorial.
 
* [http://www.youtube.com/watch?v=O9wnoZ7tKro GECK: Creating an NPC] Video.
 
* [http://www.youtube.com/watch?v=O9wnoZ7tKro GECK: Creating an NPC] Video.
 
* [http://www.youtube.com/watch?v=NuFepoBHptk GECK: Custom NPC and Dialog] Video.
 
* [http://www.youtube.com/watch?v=NuFepoBHptk GECK: Custom NPC and Dialog] Video.
Line 1,480: Line 1,876:
 
* [http://www.nexusmods.com/newvegas/mods/61538/? Hairs - Eyes - Races Auto - Patcher] mod by '''Fallout 2AM'''.
 
* [http://www.nexusmods.com/newvegas/mods/61538/? Hairs - Eyes - Races Auto - Patcher] mod by '''Fallout 2AM'''.
 
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: Quick 'n' Dirty Merchant] PDF.
 
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: Quick 'n' Dirty Merchant] PDF.
* [http://www.nexusmods.com/newvegas/mods/38059/? NCCS - NosCo Companion System] Mod.  Ready-made basic, customizable companions without the "companion wheel" (available as a plugin).  The "companion scripts" make useful examples.  There's a guide that comes with it; it's really a case of loading it up in the GECK, duplicating one of the NCCS NPCs, switching it to one of the premade scripts and dumping it in game.  Ta-da: the basic companion is done and then all you have to do is customise it.
+
* [http://www.nexusmods.com/newvegas/mods/38059/? NCCS - NosCo Companion System] Mod.  Ready-made basic, customizable companions without the "companion wheel" (available as a plugin).  The "companion scripts" make useful examples.  There's a guide that comes with it; it's really a case of loading it up in the GECK, duplicating one of the NCCS NPCs, switching it to one of the premade scripts and dumping it in game.  Ta-da: the basic companion is done and then all you have to do is customize it.
 
* [http://www.nexusmods.com/newvegas/mods/41652/? Rivens Tattoo Flash Sheets] Resource. (Copy-and-paste tattoos.)
 
* [http://www.nexusmods.com/newvegas/mods/41652/? Rivens Tattoo Flash Sheets] Resource. (Copy-and-paste tattoos.)
 
* [http://www.nexusmods.com/newvegas/mods/62261 Tutorial: How to Make a Custom Race] PDF by '''jim_uk'''.
 
* [http://www.nexusmods.com/newvegas/mods/62261 Tutorial: How to Make a Custom Race] PDF by '''jim_uk'''.
Line 1,500: Line 1,896:
 
</div>
 
</div>
  
<span id="Tip-GetDistance"></span>
+
<span id="TIP-AIPackageBasics"></span>
====TIP AI Packages and Distance====
+
==== TIP AI Package Basics ====
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Supposing you want your character to meet up with an NPC at some X-Marker location, but they aren't there when you "fast travel" to that locationYou need to "teleport" them ,but you don't want to just make them "vanish".  Here is one way to handle it.
+
">You need to understand the difference between an [http://geckwiki.com/index.php?title=GetCurrentAIPackage AIPackage] and an [http://geckwiki.com/index.php?title=GetCurrentAIProcedure AIProcedure].  Also, check out the [http://geckwiki.com/index.php?title=Category:AI_Functions Category:AI Functions] to understand the less obvious things you can do with them.  (Take the time to read the linked wiki pages.)
 +
 
 +
First you have to chose the correct type of [http://geckwiki.com/index.php?title=Category:Packages Package] to use; investigating how each is intended to be used and actually functions in practice for your purposes. Remember: only one '''Package''' will run on any given Actor at a time; but that package can have several '''Procedures''' within it to deal with different circumstances.  While there is overlap between the two, note that '''Procedures''' is a longer list.  Don't get ahead of yourself: work on and refine each '''Procedure''' by itself before you attempt to combine them into a comprehensive '''Package'''.  (You will use "condition flags" to control which gets used whenMore on this later.)
  
In the "Dialog Result Script" where you make the NPC start using your "AI Package" to send them to that location, also start a "quest script" (e.g. "ThisQuestName").  This quest should have a processing delay of perhaps one second, and then check for the player to be a certain distance away from the NPC, and for the NPC to not be in the player's view ("Line of Sight": LoS).  Once it's found that both requirements are satisfied, the NPC is teleported to the marker and the quest was ended.  The quest is set to be stopped on proper completion of the AI package as well, in case it's still running.
+
For example: "Stalking" would be a '''Procedure''' that is more than just a simple "follower" script because you want the Actor to try to remain unnoticed. For one thing, you might want to use an "Escort" or "Guard" base package instead of "Follow". "Sneaking" is inherently slower than normal movement, but NPCs "cheat" by "teleporting" when they get too far away from the target they are following.  (You  might not have noticed this unless you checked on companions behind yourself frequently in rough terrain.)  But you might find you need to shift in and out of "sneak" mode.  Various '''Target Followers''' may affect what you need for the effective trailing distance to avoid having aggressive ones attacking your "stalker".
 +
 
 +
Once you get that functional, you might want a "flee" '''Procedure''' that will keep that Actor at a proper distance from the '''Target''' without losing track of them so it can resume "following".  A "special case" to test is if your "stalker" is fleeing while the '''Target''' changes cells.  In which case, what are you going to have your "stalker" do to "pick up the scent" of their '''Target''' again?
 +
 
 +
When the Actor gets far enough from the '''Target''', they then might need a '''Procedure''' to find somewhere to "hide" (break line-of-sight from the '''Target'''), wait a reasonable amount of time for any followers to stop "searching for enemies", and then resume the "Follow" / "Stalk" AI procedure.
 +
 
 +
AI packages are in a [http://geckwiki.com/index.php?title=AI_Packages_Tab priority list] of "conditions".  ("Conditions" are just variables, often called "flags", you define and set to control things.  A common use is a "do once" variable in a "quest" script.  You are going to need to "set" and "clear" a number of them for this to indicate when to use only one procedure or package at a time.)  The first package that meets all of it's conditions as "true" then is used.  While the [http://geckwiki.com/index.php?title=AddScriptPackage AddScriptPackage] and [http://geckwiki.com/index.php?title=RemoveScriptPackage RemoveScriptPackage] functions might seem appropriate to  generally use, they have major limitations.  (See [[#TIP_Using_AI_Packages|TIP Using AI Packages]] and the linked description for more details on this.)  Just adding a package does not place the package within the [http://geckwiki.com/index.php?title=AI_Packages_Tab priority list]; instead it overrides the list for immediate implementation but goes away once completed and won't matter after that as it's conditions are never evaluated after that point.  (And an "AddScriptPackage" package seems to be over when the Actor "teleports", such as "catching-up the distance" when following, or between interior and exterior cells.)  Typically you will want to place your package in the [https://geckwiki.com/index.php?title=AI_Packages_Tab AI Packages Tab] list of packages for your "stalker" Actor, set the appropriate "conditional flag variables", and use the "Evaluate Package" (EVP) function to cause the list to be processed again to determine which is now the "first true" package.  Note that you do not use EVP with '''AddScriptPackage'''.  That function performs the equivalent immediately when called.
 +
 
 +
Each '''Package''' needs to consider that it may encounter conditions that require another '''Package''' or '''Procedure''' to take precedence and execute.  You do not simply "resume" an AI package where you left off.  It starts over, and the evaluation of which package is "true" starts again, whatever the current situation is when it gets invoked.  That could be in a completely different cell than where it left off.  This is why it is important to keep your "condition flags" current and updated as things change.
 +
 
 +
See also:
 +
* [[#TIP_AI_Packages_and_Distance|TIP AI Packages and Distance]]
 +
* [[#TIP_Making_NPCs_move_aka_AI_Packages|TIP Making NPCs move aka AI Packages]]
 +
</div>
 +
 
 +
<span id="Tip-GetDistance"></span>
 +
 
 +
====TIP AI Packages and Distance====
 +
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Supposing you want your character to meet up with an NPC at some X-Marker location, but they aren't there when you "fast travel" to that location?  You need to "teleport" them ,but you don't want to just make them "vanish".  Here is one way to handle it.
 +
 
 +
In the "Dialog Result Script" where you make the NPC start using your "AI Package" to send them to that location, also start a "quest script" (e.g. "ThisQuestName").  This quest should have a processing delay of perhaps one second, and then check for the player to be a certain distance away from the NPC, and for the NPC to not be in the player's view ("Line of Sight": LoS).  Once it's found that both requirements are satisfied, the NPC is teleported to the marker and the quest was ended.  The quest is set to be stopped on proper completion of the AI package as well, in case it's still running.
  
 
The example script below uses the '''JIP LN NVSE''' function ''GetDistance2D'', but it will work fine with the vanilla ''GetDistance'' function as well.
 
The example script below uses the '''JIP LN NVSE''' function ''GetDistance2D'', but it will work fine with the vanilla ''GetDistance'' function as well.
Line 1,551: Line 1,973:
  
 
Alternately, you can use FNVEdit to remove the extra race records. It's a bit less clicking and fiddling to do it in the GECK, but either way works.
 
Alternately, you can use FNVEdit to remove the extra race records. It's a bit less clicking and fiddling to do it in the GECK, but either way works.
 +
</div>
 +
 +
<span id="Tip-CharGenFacePresets"></span>
 +
====TIP CharGen Face Presets====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following.
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you want to take a Actor's (Player or NPC) face data to or from a save game file and turn it into a "CharGen Face Preset":
 +
* [http://www.nexusmods.com/newvegas/mods/35769/ FaceGen Save Face Ripper for FNVEdit] tool to rip face hex data from save files for use in '''FNVEdit'''.
 +
* [http://www.nexusmods.com/newvegas/mods/56009? Jokerine's Misc Resources and Tutorials - FNV] has a step-by-step tutorial on the process.
 +
 +
Once you have the face in the '''GECK''', you can copy the face from one Actor to another by opening both Actors in the '''GECK'''. There is a copy and paste option under the ''Face Advanced'' tab.
 +
 +
There are two bugs you need to be aware of.
 +
* First, you need to copy the hair color over to the target Actor first (the three RGB values under the ''Face'' tab); otherwise when you change the hair color the FaceGen data will change slightly.
 +
* The second thing is that when you do copy and paste from the ''Face Advanced'' tab, whatever option is selected (by default it's the first one, ''Brow Ridge High/Low'') will not be copied. So go to the source Actor, press ''Copy'', go to the target Actor, press ''Paste'', then change the selection from ''Brow Ridge High/Low'' (or whatever is currently selected) to something else and press ''Paste'' again.
 +
 +
The '''Character Gen Preset''' shouldn't have any factions or inventory or anything else. You can open up one of the existing presets (they all have "CG" at the start of their Editor-ID) and save it with a new Editor-ID and it should be set up correctly. If you are making a new one from scratch instead, make sure you check ''Is CharGen Face Preset''. The '''GECK''' is a buggy mess, so if you change any of the flags on the left, save the Actor and re-open before changing tabs and doing something else or your changes to the check boxes can get lost.
 
</div>
 
</div>
  
 
<span id="TIP-CompanionWheel"></span>
 
<span id="TIP-CompanionWheel"></span>
 +
 
====TIP Companion Wheel====
 
====TIP Companion Wheel====
 
: Thanks to '''madmongo''' of the Nexus FalloutNV 'New Vegas GECK and Modders' sub-forum for the following basic summary:
 
: Thanks to '''madmongo''' of the Nexus FalloutNV 'New Vegas GECK and Modders' sub-forum for the following basic summary:
Line 1,570: Line 2,013:
 
</div>
 
</div>
  
span id="Tip-CustomRaceFaces"></span>
+
<span id="Tip-CustomNPCRace"></span>
 +
==== TIP Custom NPC Race ====
 +
: Thanks to '''Armok74''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">So, you have a custom player race (see [[#Tip-CustomRaceFaces|TIP Custom Race and Skin Textures]]) you would like to add to the NPC population and were hoping there would just be a way to add the new race to a list the game picks from.  But it seems every race in every role is a separate entry and you have to make a new entry for Goodsprings settlers, melee Powder Gangers, Fiends with rifles, Vegas gamblers in suits, armoured Rangers, etc., etc..  Is that the only option there is?
 +
 
 +
: Yep. That's the way. Edit some NPC that uses other NPCs as a template and then add your NPC to the corresponding LeveledCharacter List with the "Var-" prefix in it's ID, for example "Fiend1GunAFNV" goes to "VarFiend1GunNV".
 +
 
 +
The race "ST Robot Race" used a script to give the robot a head and "gloves" for hands, makes them an undroppable quest item and equips them.  Can that script just be attached to NPCs too?
 +
 
 +
<div style="margin:0px 10px 10px 20px;color: lightgray;background-color:#333333;padding:3px;>
 +
That script works for player only. You can write a similar Object script that equips head and gloves on spawn but you don't really need to do that. If you have "Old World Blues" (OWB) just look up how '''trauma suits''' work - they are just NPCs that use non-playable armor.
 +
 
 +
Basically what you need is make Non-Playable variants of head and gloves armors that were added by mod and add them to your NPCs. If the NPC uses a template: just uncheck the "Use Inventory" box and edit the inventory. Then you can add your NPC in the corresponding LeveledCharacter list and that's it.
 +
 
 +
But some NPCs have armor with exposed skin so you'll need to make custom armor. Same process as with head and gloves armor.
 +
 
 +
Usually generic NPCs use Leveled Item lists for armor - you can just replace it with your armor or make a leveled list of your custom armor if you want to.  (See [[#Tip-LeveledLists|TIP Adding Items to Actors aka Leveled Lists]].)</div>
 +
</div>
 +
 
 +
<span id="Tip-CustomRaceFaces"></span>
 
====TIP Custom Race and Faces====
 
====TIP Custom Race and Faces====
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 1,651: Line 2,117:
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Hostilities will not immediately break out between two NPCs when they come into proximity simply because they are in "Enemy" [[#Factions|Factions]].  Their actions are influenced by the NPCs personal "aggression" and "[http://geck.technodeep.net/index.php/Confidence confidence]" numbers (on the GECK "[http://geck.technodeep.net/index.php/AI_Data_Tab AI Data Tab]" page and the resulting "Threat Ratio" at the time.   
+
">Hostilities will not immediately break out between two NPCs when they come into proximity simply because they are in "Enemy" [[#Factions|Factions]].  Their actions are influenced by the NPCs personal "aggression" and "[http://geckwiki.com/index.php?title=Confidence confidence]" numbers (on the GECK "[http://geckwiki.com/index.php?title=AI_Data_Tab AI Data Tab]" page and the resulting "Threat Ratio" at the time.   
  
You can use the "[http://geck.technodeep.net/index.php/SetActorValue setav]" command in script to change the "[http://geck.technodeep.net/index.php/ActorValue#User_Defined_Actor_Values Actor Value]" for permanent changes or "[http://geck.technodeep.net/index.php/DamageActorValue DamageActorValue]" and "[http://geck.technodeep.net/index.php/RestoreActorValue RestoreActorValue]" for temporary changes to the "[http://geck.technodeep.net/index.php/Stats_List Stats List]". (See the GECK "[http://geck.technodeep.net/index.php/Actor_Value_Codes Actor Value Code]" list.)  Be careful about the scope of effect of your changes.  Read the warnings under "[http://geck.technodeep.net/index.php/ActorValue Actor Value]" carefully.   
+
You can use the "[http://geckwiki.com/index.php?title=SetActorValue setav]" command in script to change the "[http://geckwiki.com/index.php?title=ActorValue#User_Defined_Actor_Values Actor Value]" for permanent changes or "[http://geckwiki.com/index.php?title=DamageActorValue DamageActorValue]" and "[http://geckwiki.com/index.php?title=RestoreActorValue RestoreActorValue]" for temporary changes to the "[http://geckwiki.com/index.php?title=Stats_List Stats List]". (See the GECK "[http://geckwiki.com/index.php?title=Actor_Value_Codes Actor Value Code]" list.)  Be careful about the scope of effect of your changes.  Read the warnings under "[http://geckwiki.com/index.php?title=ActorValue Actor Value]" carefully.   
  
 
There are ten "user defined/mod actor values". They have no defined game functions, but can be used by quests to establish permanent data on the actor. Keep in mind that setting one of the variables on an actor implicitly defines that variable for ALL actors, not just in your mod.  Using these values to store extra information has the potential to cause conflicts with other mods. <span style="color: red; background-color:#fff5f5;">If you need to store information on an actor, use a token (an unplayable, therefore invisible, piece of armour) instead.</span>
 
There are ten "user defined/mod actor values". They have no defined game functions, but can be used by quests to establish permanent data on the actor. Keep in mind that setting one of the variables on an actor implicitly defines that variable for ALL actors, not just in your mod.  Using these values to store extra information has the potential to cause conflicts with other mods. <span style="color: red; background-color:#fff5f5;">If you need to store information on an actor, use a token (an unplayable, therefore invisible, piece of armour) instead.</span>
Line 1,659: Line 2,125:
  
 
<span id="Tip-InterruptCombat"></span>
 
<span id="Tip-InterruptCombat"></span>
 +
 
====TIP Interrupt combat for dialog====
 
====TIP Interrupt combat for dialog====
 
: Thanks to '''clanky4''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''clanky4''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 1,686: Line 2,153:
 
<span id="Tip-NPCMovement"></span>
 
<span id="Tip-NPCMovement"></span>
 
====TIP Making NPCs move aka AI Packages====
 
====TIP Making NPCs move aka AI Packages====
: Thanks to '''madmongo''', '''EPDGaffney''', and '''FiftyTifty''' of the Nexus FalloutNV 'New Vegas GECK and Modders' and '''kingbeast88''' of the 'New Vegas Mod Troubleshooting' sub-forums for the following basic summary of how to get NPCs to move:
+
: Thanks to '''madmongo''', '''EPDGaffney''', '''FiftyTifty''', and '''UnvalidUserName''' of the Nexus FalloutNV 'New Vegas GECK and Modders' and '''kingbeast88''' of the 'New Vegas Mod Troubleshooting' sub-forums for the following basic summary of how to get NPCs to move:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">An NPC that just stands there typically is doing so because they don't have an [http://geck.technodeep.net/index.php/AI_Packages_Tab GECK: AI package] to run.
+
">An NPC that just stands there typically is doing so because they don't have an [http://geckwiki.com/index.php?title=AI_Packages_Tab GECK: AI package] to run.
  
A typical companion will have a companion script which will have defined a number of [http://geck.technodeep.net/index.php/Category:Packages GECK: Packages]: a '''Follow''' default package, a '''Follow Long''' package, an '''Idle/Wait''' package, and a '''Non-hired''' package (they may use the same package for ''Wait'' and '''Non-hired''', like a ''sandbox'' type package, for example). Each of the packages must have a condition variable, which will typically be the equivalent of "'''if (''IsFollowingDefault'' == 1)'''" for the follow default package, or ''IsFollowingLong'' for the follow long package, or ''HasBeenHired'' is set to zero for the '''Not-hired''' ''sandbox'' (or whatever) package, and "'''if (''waiting'' == 1)'''" for the '''Wait''' package. If you don't have a condition, then the package will want to always run. Those variables (e.g. ''IsFollowingDefault'', ''IsFollowingLong'', etc.) all have to be defined in the NPC's script. You set the various variables to match what you want the character to do as the way you control which package is used, then do an ''[http://geck.bethsoft.com/index.php?title=EvaluatePackage EvaluatePackage] (.EVP)'' function on the NPC to get them to switch.
+
A typical companion will have a companion script which will have defined a number of [http://geckwiki.com/index.php?title=Category:Packages GECK: Packages]: a '''Follow''' default package, a '''Follow Long''' package, an '''Idle/Wait''' package, and a '''Non-hired''' package (they may use the same package for ''Wait'' and '''Non-hired''', like a ''sandbox'' type package, for example). Each of the packages must have a condition variable, which will typically be the equivalent of "'''if (''IsFollowingDefault'' == 1)'''" for the follow default package, or ''IsFollowingLong'' for the follow long package, or ''HasBeenHired'' is set to zero for the '''Not-hired''' ''sandbox'' (or whatever) package, and "'''if (''waiting'' == 1)'''" for the '''Wait''' package. If you don't have a condition, then the package will want to always run. Those variables (e.g. ''IsFollowingDefault'', ''IsFollowingLong'', etc.) all have to be defined in the NPC's script. You set the various variables to match what you want the character to do as the way you control which package is used, then do an ''[http://geck.bethsoft.com/index.php?title=EvaluatePackage EvaluatePackage] (.EVP)'' function on the NPC to get them to switch.
  
 
Function ''[http://geckwiki.com/index.php/ResetAI ResetAI]'' clears all current AI behaviors from an actor. Combat, pathing, and packages are re-evaluated.  This is a severe command that affects all AI behavior.  Usually, you just want to have an actor re-evaluate its current package. In that case, use ''EvaluatePackage'' instead.  (When using the number of "tokens" present in an Actor's inventory to control AI packages, one author found it necessary to use ''ResetAI'' instead of ''EVP'' in order to get their script to function correctly more often than the first time.  The cause behind this behavior is unknown.)
 
Function ''[http://geckwiki.com/index.php/ResetAI ResetAI]'' clears all current AI behaviors from an actor. Combat, pathing, and packages are re-evaluated.  This is a severe command that affects all AI behavior.  Usually, you just want to have an actor re-evaluate its current package. In that case, use ''EvaluatePackage'' instead.  (When using the number of "tokens" present in an Actor's inventory to control AI packages, one author found it necessary to use ''ResetAI'' instead of ''EVP'' in order to get their script to function correctly more often than the first time.  The cause behind this behavior is unknown.)
Line 1,699: Line 2,166:
 
See also [http://geckwiki.com/index.php/How_Are_Packages_Evaluated How Are Packages Evaluated].
 
See also [http://geckwiki.com/index.php/How_Are_Packages_Evaluated How Are Packages Evaluated].
  
 +
===== Following =====
 
So, if you want your NPC to '''Follow''' you, it's necessary to script the following in the NPC's conversation quest (replace "MyNPCREF" with the NPC's actual Ref-ID, obviously):
 
So, if you want your NPC to '''Follow''' you, it's necessary to script the following in the NPC's conversation quest (replace "MyNPCREF" with the NPC's actual Ref-ID, obviously):
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
Line 1,744: Line 2,212:
 
Note that you want to set variables to enable your packages, and also clear variables to stop the other packages from trying to run. You want to set it up so that the only condition that evaluates to '''true''' is the one that's for the package you want the NPC to run. For example: if you want the NPC to follow the "default" package, you need to enable the '''IsFollowingDefault''' variable while disabling both the '''IsFollowingLong''' and the '''Wait''' package variables.
 
Note that you want to set variables to enable your packages, and also clear variables to stop the other packages from trying to run. You want to set it up so that the only condition that evaluates to '''true''' is the one that's for the package you want the NPC to run. For example: if you want the NPC to follow the "default" package, you need to enable the '''IsFollowingDefault''' variable while disabling both the '''IsFollowingLong''' and the '''Wait''' package variables.
  
 +
===== Conversations =====
 
The ''HasBeenHired'' variable would be used to enable or disable various conversation options, and would also be set when the NPC is hired and cleared when the NPC is fired (and again, an ''.EVP'' would be done to get the character to ''sandbox'' when not hired so they don't just stand there like an idiot).
 
The ''HasBeenHired'' variable would be used to enable or disable various conversation options, and would also be set when the NPC is hired and cleared when the NPC is fired (and again, an ''.EVP'' would be done to get the character to ''sandbox'' when not hired so they don't just stand there like an idiot).
  
Line 1,757: Line 2,226:
 
<span style="text-align: left; color: red; background-color:#fff5f5;">(WARNING: There is a bug in '''GECK''' on versions of '''Windows''' after Win7 that causes the columns under the "Conditions" tab to be collapsed to the left and appear to not be present.  Accessing this field in the "AI Package" form consistently causes this bug to trigger, and it then affects other "list box" type fields in other forms.  Please see the [[#Issue:_GECK_is_missing_text_in_fields|Issue: GECK is missing text in fields]] entry for suggestions on dealing with this.)</span>
 
<span style="text-align: left; color: red; background-color:#fff5f5;">(WARNING: There is a bug in '''GECK''' on versions of '''Windows''' after Win7 that causes the columns under the "Conditions" tab to be collapsed to the left and appear to not be present.  Accessing this field in the "AI Package" form consistently causes this bug to trigger, and it then affects other "list box" type fields in other forms.  Please see the [[#Issue:_GECK_is_missing_text_in_fields|Issue: GECK is missing text in fields]] entry for suggestions on dealing with this.)</span>
  
For '''Patrol''' packages your NPC needs to be linked to your first "X marker" in the navmeshed patrol path.  (See the [[#Tip-NavMeshExteriors|TIP: Navmeshing Exterior cells.]])  All "X markers" in the patrol path need a ''unique ID'', need to be ''persistent'', and linked to each other in the succession you wish it traversed. "Idle markers" can be used but need ''duration'' times set and need to be made ''persistent''.  Patrol packages might be buggy with idle markers: they worked in Fallout 3, but in the experience of mod creators have issues in '''New Vegas'''.
+
===== Package Types =====
 +
For '''Patrol''' packages your "Patrol Leader" NPC needs to be linked to your first "X marker" in the navmeshed patrol path.  (See the [[#Tip-NavMeshExteriors|TIP: Navmeshing Exterior cells.]])  All "X markers" in the patrol path need a ''unique ID'', need to be ''persistent'', and linked to each other in the succession you wish it traversed. "Idle markers" can be used but need ''duration'' times set and need to be made ''persistent''.  Patrol packages might be buggy with idle markers: they worked in Fallout 3, but in the experience of mod creators have issues in '''New Vegas'''.  For parties of more than one Actor, the remainder should "Guard" the "Patrol Leader" in order to react to threats to that Leader.
  
 
To make a new '''Patrol''' package with a unique ID: Just edit a base package to your liking; then change the Editor-ID name.  '''GECK''' will create a new form.  Make sure the package type is '''Patrol''', the ''starting location'' is a linked reference (e.g. "X marker"), and flagged ''repeatable''. Then give the NPC the new package and link your NPC to the first marker in the patrol path.
 
To make a new '''Patrol''' package with a unique ID: Just edit a base package to your liking; then change the Editor-ID name.  '''GECK''' will create a new form.  Make sure the package type is '''Patrol''', the ''starting location'' is a linked reference (e.g. "X marker"), and flagged ''repeatable''. Then give the NPC the new package and link your NPC to the first marker in the patrol path.
Line 1,769: Line 2,239:
 
When you send someone away (i.e. "no longer hired" or "go home"), set the "GoHome" package to be a "sandbox" type instead of "travel", and they will automatically run off to the "home" location to sandbox there.  The game scripts often teleport actors to that location first when they want to avoid encountering "hostiles" enroute.  Be sure you first set the conditions you are using as appropriate (i.e. "not hired", "available for hire", etc.) before an ".EVP" command to take immediate effect.
 
When you send someone away (i.e. "no longer hired" or "go home"), set the "GoHome" package to be a "sandbox" type instead of "travel", and they will automatically run off to the "home" location to sandbox there.  The game scripts often teleport actors to that location first when they want to avoid encountering "hostiles" enroute.  Be sure you first set the conditions you are using as appropriate (i.e. "not hired", "available for hire", etc.) before an ".EVP" command to take immediate effect.
  
Be very careful using "[http://geck.technodeep.net/index.php/AddScriptPackage AddScriptPackage] <packagename>". In practice, whenever an NPC teleports (fast travel, goes through a door, etc) they tend to stop running whatever AI package was added through '''AddScriptPackage''', and then use a suitable sandbox package. It's a useful function for some things, but it won't work in cases like this (traversing cells).
+
Be very careful using "[http://geckwiki.com/index.php?title=AddScriptPackage AddScriptPackage] <packagename>". In practice, whenever an NPC teleports (fast travel, goes through a door, etc) they tend to stop running whatever AI package was added through '''AddScriptPackage''', and then use a suitable sandbox package. It's a useful function for some things, but it won't work in cases like this (traversing cells).
  
 
If your NPCs take off for parts unknown when following a package, make sure you have a "North Marker" placed in the cell.
 
If your NPCs take off for parts unknown when following a package, make sure you have a "North Marker" placed in the cell.
Line 1,775: Line 2,245:
 
To make the NPC go back to Goodsprings (for example), you need a package that sends him there. The condition for the package will be similar to "<CompanionREF>.HasBeenHired == 0". You don't necessarily need to make an Xmarker the destination. You can have the package be a sandbox inside the "Goodsprings Saloon" cell if you want. Then he'll just ''sandbox'' around inside the Saloon whenever he isn't hired and he'll go back there if you fire him.
 
To make the NPC go back to Goodsprings (for example), you need a package that sends him there. The condition for the package will be similar to "<CompanionREF>.HasBeenHired == 0". You don't necessarily need to make an Xmarker the destination. You can have the package be a sandbox inside the "Goodsprings Saloon" cell if you want. Then he'll just ''sandbox'' around inside the Saloon whenever he isn't hired and he'll go back there if you fire him.
 
See also [[#TIP-AIPackages|TIP: Using AI Packages.]]
 
See also [[#TIP-AIPackages|TIP: Using AI Packages.]]
 +
 +
===== Teleporting and Following Navmeshes =====
 +
In order  for a companion to ''teleport'' to you when you go through a door (or otherwise ''teleport'' elsewhere, as when using '''Fast Travel'''), all the companion needs is to be set as ''your companion'', i.e. you executed the script command '''SetPlayerTeammate 1'''.
 +
 +
Additionally, for a companion to follow you, the companion needs to have a ''follow package'' and that package needs a conditional variable on it which is "true", and all other packages that the companion has need conditions that are "false" at the same time so that they will not run instead of the ''follow package''.
 +
 +
For example. let's say your NPC has a ''follow package'' and a ''wait package'', and a variable '''npc_following''' and a variable '''npc_waiting'''. The ''follow package'' has the condition '''"if npc_following = 1"''' and the ''wait package'' has the condition '''"if npc_waiting = 1"'''. If you '''"set npc_following to 1"''' and '''"set npc_waiting to 0"''', and then execute an '''EVP''' command on the NPC, then they should follow you. If you want them to ''wait'', '''"set npc_following to 0"''' and '''"set npc_waiting to 1"'''. If you accidentally set both variables to 1 then either package could execute (depending upon their sequence in the packages list), so the NPC might follow you or they might not. If you accidentally set both variables to 0 then the companion will not do anything.
 +
 +
The other thing that might stop a companion from moving is if they aren't on a valid '''Navmesh'''. If the area that they are in isn't '''Navmeshed''', then they will just stand there.
 +
 +
===== Waves of Actors =====
 +
To get "waves" of Actors to move according to a given package, first place the Actors of each wave where you want them to spawn, keeping them initially disabled.  However, instead of disabling the Actors all individually, have an ''xMarker'' for each "wave"; and for all of the Actors in that wave, set their "enable ref" to be the ''xMarker'' for that "wave".  Have all of the waves' ''xMarkers'' initially set to disabled and then enable each wave ''xMarker'' ref with a quest script at intervals as desired each time if the player is in the correct Cell.  The advantage of this method is that your script has one line for each wave and you don't need to keep track of all of the Actor ref-IDs; only your wave ''xMarker'' ref-IDs and you only have as many of them as you have waves.
 
</div>
 
</div>
  
Line 1,834: Line 2,316:
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">It is generally understood that you cannot add Perks to '''Companions''' in the same way as to the Player.  However, according to a [http://fallout.gamepedia.com/Blog:News/New_Vegas_dev_quote_roundup J.E. Sawyer (FNV project director) Q&A roundup]:
+
">It is generally understood that you cannot add Perks to '''Companions''' in the same way as to the Player.  Bethesda's documentation for '''AddPerk''' says that it works on any actor, which is wrong. You can't add a perk to an NPC (well, technically you can, but it doesn't do anything).  However, according to a [http://fallout.gamepedia.com/Blog:News/New_Vegas_dev_quote_roundup J.E. Sawyer (FNV project director) Q&A roundup]:
 
Quote:
 
Quote:
;<blockquote>
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: white;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: white;
 
background-color:#666666;padding:3px;
 
background-color:#666666;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">There is an undocumented feature in F:NV that some modders may find useful. It is the ability to give perks to companions. Or, more accurately, it is the ability to add perks to a special list on the player that will have an effect on any active followers. Here's how it works:
+
">There is an undocumented feature in F:NV that some modders may find useful. It is the ability to give perks to companions. Or, more accurately, it is the ability to add perks to a special list on the player that will have an effect on any active followers.
 +
Here's how it works:
 
<pre>player.addperk XXXXXXXXXXXXX 1</pre>
 
<pre>player.addperk XXXXXXXXXXXXX 1</pre>
 
The "1" means "put this on the special list for companions". Companions will still not store/keep perks, but we give the player a second list of non-displayed perks that only apply to companions. If you want the effect to apply to all companions, you do not need to conditionalize the perk owner conditions for the perk's entry points. If you want the perk to be special for the companion, check the NPC's ID or ref in the perk owner conditions.
 
The "1" means "put this on the special list for companions". Companions will still not store/keep perks, but we give the player a second list of non-displayed perks that only apply to companions. If you want the effect to apply to all companions, you do not need to conditionalize the perk owner conditions for the perk's entry points. If you want the perk to be special for the companion, check the NPC's ID or ref in the perk owner conditions.
Line 1,848: Line 2,330:
  
 
N.B.: The effects will ONLY work while a companion is in the party. So in the above scenario, Raul would no longer have the benefits of RaulShotgunSurgeon if he left the party.</div>
 
N.B.: The effects will ONLY work while a companion is in the party. So in the above scenario, Raul would no longer have the benefits of RaulShotgunSurgeon if he left the party.</div>
;</blockquote>
+
 
 
This tip applies to '''"companions"''' only.  Some test results of using this "feature" are found at the end of this [http://forums.bethsoft.com/topic/1142430-perks-on-companions/?p=16697594&fromsearch=1#entry16697594 Bethsoft 'Perks on Companions' thread].
 
This tip applies to '''"companions"''' only.  Some test results of using this "feature" are found at the end of this [http://forums.bethsoft.com/topic/1142430-perks-on-companions/?p=16697594&fromsearch=1#entry16697594 Bethsoft 'Perks on Companions' thread].
 +
 +
'''Radioactivelad''' contributes:<br>
 +
You may find references on loading screens and wikis to companion's getting a '''Charisma''' based [https://fallout.fandom.com/wiki/Fallout:_New_Vegas_companions#Nerve Nerve] attribute, which was an "engine side" implementation and not something which could be modded.  '''Nerve''' was supposedly completely disabled in a game patch and replaced with the [https://fallout.fandom.com/wiki/Companion_Suite Companion Suite] Perk.  However, '''Charisma''' does indeed still modify how much damage companions do in the vanilla game (1 Charisma seems to be base damage, and every point after that is a bonus).  Supposedly it also increased the "Damage Threshold" (DT) by a percentage, but that doesn't seem to be functional.  Be aware that even the '''Companion Suite''' is not doing everything it's supposed to do according to its description.
 
</div>
 
</div>
  
 
<span id="Tip-FaceFeatures"></span>
 
<span id="Tip-FaceFeatures"></span>
 +
 
====TIP Switching Custom Facial Features====
 
====TIP Switching Custom Facial Features====
: Thanks to '''rikkurikku''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
: Thanks to '''rikkurikku''' and '''Budong''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">For example: Let us say you want to switch between the normal actor's face, and one that is "bloodied".  Set up your "bloody" face version texture as a different race and use the ''[http://geckwiki.com/index.php/SetRace SetRace]'' function to switch, followed by "Update3D" to refresh the display in-game.  This applies to both the Player and NPCs.  See [[#TIP: Custom Race & Skin Textures|TIP: Custom Race & Skin Textures]] regarding creating a "custom race" and the appropriate folders.<br>
+
">For example: Let us say you want to switch between the normal actor's face, and one that is "bloodied".  Set up your "bloody" face version texture as a different race and use the JIP ''[http://geckwiki.com/index.php/SetRace SetRace]'' function to switch, followed by "Update3D" to refresh the display in-game.  This applies to both the Player and NPCs.  See [[#TIP: Custom Race & Skin Textures|TIP: Custom Race & Skin Textures]] regarding creating a "custom race" and the appropriate folders.<br>
When switching among custom facial features (such as eyes or hair), switch to a "vanilla" feature first, and then switch to a new "custom" look.  The GECK gets confused if you try to switch straight from one custom feature to another.
+
 
 +
'''Budong''' added:<br>
 +
If you want to ensure compatibility for everyone, you can accomplish the same thing entirely without needing the JIP NVSE Plugin.  Set up one race for your "healthy" NPC, and another race for the "injured" NPC.  Link them to one another via the ''YoungerRace'' and ''OlderRace'' options in the '''RaceEditor''', then call the ''AgeRace'' function to visually clobber/heal them. Entirely vanilla and will work for everyone.
 +
 
 +
When switching among custom facial features (such as eyes or hair), switch to a "vanilla" feature first, and then switch to a new "custom" look.  The '''GECK''' gets confused if you try to switch straight from one custom feature to another.<br>
 
</div>
 
</div>
  
Line 1,872: Line 2,362:
 
">If you create the NPC in an ESP, you can run into the infamous "head/body mismatch" bug. There are some settings you can change that fix the bug on some computers, but if you want it to work on all systems, define the NPC in an ESM file.
 
">If you create the NPC in an ESP, you can run into the infamous "head/body mismatch" bug. There are some settings you can change that fix the bug on some computers, but if you want it to work on all systems, define the NPC in an ESM file.
 
* See also sections [[#Dialogue & Lip-synch|Dialogue & Lip-synch]] and [[#Scripting|Scripting]] for related info.</div>
 
* See also sections [[#Dialogue & Lip-synch|Dialogue & Lip-synch]] and [[#Scripting|Scripting]] for related info.</div>
 +
 +
<span id="Tip-TempCompanion"></span>
 +
==== TIP Turn a Temporary Companion into a Permanent one ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Supposing you want to turn a "temporary" quest companion into a permanent one (for example '''Corporal Halford''').  How would you go about it?
 +
 +
The recommended tutorial, which includes using a companion wheel, is: [http://www.nexusmods.com/newvegas/mods/45278 Advanced Companion creation guide with Companion Wheel].  Since the NPC already exists and has a quest for hiring, you don't need to make the hiring quest part of the tutorial.  Make sure you use the existing functions as shown in the tutorial instead of creating your own. Those functions are what makes the companion wheel work.  See also [[#TIP_Companion_Wheel|TIP Companion Wheel]].
 +
 +
When I made a companion out of '''Corporal Betsy''' I found it easiest to make a duplicate and then swap out the duplicate <span style="color: red; background-color:#fff5f5;">once the vanilla quests were done</span>. The advantage of this is that you don't have to hack into the existing quests and dialog, other than to add the hiring option (which triggers the swap) at the appropriate conversation stage.
 +
</div>
  
 
<span id="TIP-AIPackages"></span>
 
<span id="TIP-AIPackages"></span>
Line 1,882: Line 2,386:
 
* You can activate dialogue and travel packages by using the [http://geck.bethsoft.com/index.php?title=AddScriptPackage AddScriptPackage] function, usually in a "dialogue result" or "base effect" script.  This has the advantage that a package added in this fashion will take precedence over all other packages until it is done, and terminate as soon as it is able (check the ''Must Complete'' and/or ''Must Reach Location'' flags to prevent premature termination, but be sure you provide the means to determine it '''''IS''''' completed).
 
* You can activate dialogue and travel packages by using the [http://geck.bethsoft.com/index.php?title=AddScriptPackage AddScriptPackage] function, usually in a "dialogue result" or "base effect" script.  This has the advantage that a package added in this fashion will take precedence over all other packages until it is done, and terminate as soon as it is able (check the ''Must Complete'' and/or ''Must Reach Location'' flags to prevent premature termination, but be sure you provide the means to determine it '''''IS''''' completed).
 
* <span style="color: red; background-color:#fff5f5;">An actor can have only one script package active at a time.</span>  When calling the function twice on the same actor, the second package replaces the first one added.  Unless the ''AddScriptPackage'' has some constraint on it (''Must Complete'' and/or ''Must Reach Location''), it will be removed the next time the actor reevaluates his package.
 
* <span style="color: red; background-color:#fff5f5;">An actor can have only one script package active at a time.</span>  When calling the function twice on the same actor, the second package replaces the first one added.  Unless the ''AddScriptPackage'' has some constraint on it (''Must Complete'' and/or ''Must Reach Location''), it will be removed the next time the actor reevaluates his package.
 +
* The ''AddScriptPackage'' can get prematurely terminated when the Actor "teleports", such as when they "catch-up the distance" when following too far behind in exteriors or when moving between interior and exterior cells.  It is preferable to place such packages into the priority list so they get properly evaluated each time the list is processed.
 
* Actors evaluate their packages every 10 seconds. If no packages have true conditions then the actor will just stand there by default, unless they are in combat. So if you want a package to take effect right away, set the conditions for the package and call the [http://geck.bethsoft.com/index.php?title=EvaluatePackage EvaluatePackage] (.EVP) function on the actor: [http://geck.bethsoft.com/index.php?title=EvaluatePackage ActorREF.evp].
 
* Actors evaluate their packages every 10 seconds. If no packages have true conditions then the actor will just stand there by default, unless they are in combat. So if you want a package to take effect right away, set the conditions for the package and call the [http://geck.bethsoft.com/index.php?title=EvaluatePackage EvaluatePackage] (.EVP) function on the actor: [http://geck.bethsoft.com/index.php?title=EvaluatePackage ActorREF.evp].
 
* Sometimes it can be difficult to get the ''AddScriptPackage'' to trigger, or you don't want it to take precedence over all other packages.  The usual method to assign AI packages is to attach the package directly to the actor and give it conditions to trigger or disable activation.  On the NPC/Creature object, the first package from the top of the list ''that has true conditions'' will be the one in effect when packages are evaluated.
 
* Sometimes it can be difficult to get the ''AddScriptPackage'' to trigger, or you don't want it to take precedence over all other packages.  The usual method to assign AI packages is to attach the package directly to the actor and give it conditions to trigger or disable activation.  On the NPC/Creature object, the first package from the top of the list ''that has true conditions'' will be the one in effect when packages are evaluated.
Line 1,888: Line 2,393:
 
* AI Packages attached directly to the actor are activated or deactivated by setting the variables used in the conditional tests.  If they are only in effect in very specific circumstances (such as being in a particular cell or location), then use another variable set in a quest script to determine if the circumstances exist to avoid making the full condition checks unnecessarily.
 
* AI Packages attached directly to the actor are activated or deactivated by setting the variables used in the conditional tests.  If they are only in effect in very specific circumstances (such as being in a particular cell or location), then use another variable set in a quest script to determine if the circumstances exist to avoid making the full condition checks unnecessarily.
 
* If an Actor won't use a particular weapon type, make sure they have a "combat style" appropriate for that weapon in the package; and that the weapon has a "health" greater than zero.  They will always use the "best" weapon in their inventory for the combat situation.
 
* If an Actor won't use a particular weapon type, make sure they have a "combat style" appropriate for that weapon in the package; and that the weapon has a "health" greater than zero.  They will always use the "best" weapon in their inventory for the combat situation.
* If the AI Package has a "schedule" or timing (''start time'' and ''duration'') to it's events, make sure that schedule does not overlap or conflict with any other package assigned to the NPC.  A scheduling conflict will prevent either package from running.
+
* If the AI Package has a "schedule" or timing (''start time'' and ''duration'') to it's events, make sure that schedule does not overlap or conflict with any other package assigned to the Actor.  A scheduling conflict will prevent either package from running.
  
 
* Be aware that for Actors with the "No Low Level Processing (LLP)" flag set: The Actor does not update its AI unless the player is in the same cell as it.
 
* Be aware that for Actors with the "No Low Level Processing (LLP)" flag set: The Actor does not update its AI unless the player is in the same cell as it.
Line 1,915: Line 2,420:
 
Other sections have relevant information to this subject.  The following "Tips" in particular are applicable.
 
Other sections have relevant information to this subject.  The following "Tips" in particular are applicable.
  
* See the [[#Custom NPCs|Custom NPCs]] section regarding scripting "AI Packages".
+
* See the [[#Custom NPCs|Custom NPCs]] section regarding scripting "AI Packages" and "Conversations".
 
:* [[#TIP-CompanionWheel|TIP: Companion Wheel.]]
 
:* [[#TIP-CompanionWheel|TIP: Companion Wheel.]]
 
:* [[#Tip-Hostility|TIP: Hostility between NPCs.]]
 
:* [[#Tip-Hostility|TIP: Hostility between NPCs.]]
 +
:* [[#Tip-InterruptCombat|TIP: Interrupt combat for dialog]]
 
:* [[#Tip-NPCMovement|TIP: Making NPCs move (aka "AI Packages").]]
 
:* [[#Tip-NPCMovement|TIP: Making NPCs move (aka "AI Packages").]]
 
:* [[#Tip-CompanionPerks|TIP: Perks for Companions.]]
 
:* [[#Tip-CompanionPerks|TIP: Perks for Companions.]]
Line 1,938: Line 2,444:
 
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
* [http://forums.nexusmods.com/index.php?/topic/449620-a-very-basic-dialogue-tutorial/ A very basic dialogue tutorial] Thread.
 
* [http://forums.nexusmods.com/index.php?/topic/449620-a-very-basic-dialogue-tutorial/ A very basic dialogue tutorial] Thread.
* [http://www.youtube.com/watch?v=mm_fF4VHhw4&feature=related Crow`s Tutorial on Dialogue] Video.
+
* [http://www.youtube.com/watch?v=mm_fF4VHhw4&feature=related Crow`s FO3 NPC Dialogue Tutorial 1/3] Video series by '''marcus sawyer'''.
 
* [http://www.nexusmods.com/newvegas/mods/63034/? FEEL - Facial Expression Editor (Limited - pfft...) by Fallout 2AM] in-game facial expression editor.
 
* [http://www.nexusmods.com/newvegas/mods/63034/? FEEL - Facial Expression Editor (Limited - pfft...) by Fallout 2AM] in-game facial expression editor.
 
* [http://addons.mozilla.org/en-US/firefox/addon/text-to-voice/ FireFox Text-to-Speech Addon] Firefox plugin w/downloadable audio.
 
* [http://addons.mozilla.org/en-US/firefox/addon/text-to-voice/ FireFox Text-to-Speech Addon] Firefox plugin w/downloadable audio.
 
* [http://www.nexusmods.com/newvegas/mods/61248/? FonixData.cdf ( Easier .Lip Files ) by DingraThePishvaz] Mod. Alternative to either Skyrim or Oblivion Lip-sun generator for FNV.  NOTE: This must be installed under the "Data\Sound\voice\processing" folder.
 
* [http://www.nexusmods.com/newvegas/mods/61248/? FonixData.cdf ( Easier .Lip Files ) by DingraThePishvaz] Mod. Alternative to either Skyrim or Oblivion Lip-sun generator for FNV.  NOTE: This must be installed under the "Data\Sound\voice\processing" folder.
 
* [http://www.youtube.com/watch?v=zK09aDY8FHY GECK: Advanced Dialogue: Topic with multiple sub-topics] Video by Seddon4494.
 
* [http://www.youtube.com/watch?v=zK09aDY8FHY GECK: Advanced Dialogue: Topic with multiple sub-topics] Video by Seddon4494.
* [http://www.youtube.com/watch?v=haHdenMkeOw GECK: Companion Idle Chatter] Video.
+
* [http://www.youtube.com/watch?v=haHdenMkeOw GECK: Companion Idle Chatter] Video by '''Seddon4494'''.
 
* [http://www.moddb.com/mods/explorer/tutorials/geck-custom-holotape-voice GECK: Custom Holotape + Voice] Wiki.
 
* [http://www.moddb.com/mods/explorer/tutorials/geck-custom-holotape-voice GECK: Custom Holotape + Voice] Wiki.
* [http://youtu.be/NWtIRBPVedw GECK: Dialog and Lip Synch] Video.
+
* [http://youtu.be/NWtIRBPVedw GECK: Dialog and Lip Synch Tutorial] Video by '''Seddon4494'''. Covers basics of dialog and lipsynch.
* [http://www.youtube.com/watch?v=NWtIRBPVedw GECK: Dialog and Lip Synch Tutorial] Video by Seddon4494.
+
* [http://geck.bethsoft.com/index.php?title=Quest_and_Dialogue_Tutorial GECK: Quest and Dialogue Tutorial] Wiki.
* [http://www.youtube.com/watch?v=NvQCChzifyQ GECK: Dialogue with Lip Files] Video.
+
* [http://www.youtube.com/watch?v=BQdUQmIdvUc GECK: How to make an NPC with Basic Dialogue] Video by '''MrWoobeee'''.  Covers booth FO3 & FNV.
* [http://geck.bethsoft.com/index.php?title=Quest_and_Dialogue_Tutorial GECK: Dialogue Tutorial] Wiki.
 
* [http://www.youtube.com/watch?v=BQdUQmIdvUc GECK: How to make an NPC with Basic Dialogue] Video.
 
 
* [http://forums.nexusmods.com/index.php?/topic/826465-idle-animation-list/ GECK: Idle Animation List] Forum Thread.
 
* [http://forums.nexusmods.com/index.php?/topic/826465-idle-animation-list/ GECK: Idle Animation List] Forum Thread.
* [http://www.youtube.com/watch?v=rcqbF0zpxtQ GECK: NPCs talk to each other] Video.
+
* [http://www.youtube.com/watch?v=rcqbF0zpxtQ GECK: NPCs talk to each other] Video by '''Seddon4494'''. A way of scripting a conversation between two NPCs.
* [http://www.nexusmods.com/newvegas/mods/48239/? Guide to fix the lip sync function in the GECK by Capt Mitch] Text file, using Skyrim Lip-sync tool.  Oblivion Lip-sync tool will work as well, but is not as good as Skyrim's.
+
* [http://www.nexusmods.com/newvegas/mods/48239/? Guide to fix the lip sync function in the GECK] Text file by '''Capt Mitch''', using Skyrim Lip-sync tool.  Oblivion Lip-sync tool will work as well, but is not as good as Skyrim's.
 
* [http://www.nexusmods.com/newvegas/mods/63317/? Lazy Voice Finder - FInd voice assets just you want] Mod.
 
* [http://www.nexusmods.com/newvegas/mods/63317/? Lazy Voice Finder - FInd voice assets just you want] Mod.
 +
* [https://www.nexusmods.com/newvegas/mods/70815/? NVVA Synth] Mod by '''Dan Ruta '''.  AI based app for creating '''new''' voice lines using neural speech synthesis. The app loads models individually trained on voices from several Bethesda games.
 
* [http://www.oddcast.com/home/demos/tts/tts_example.php?sitepal Online Text to Speech Demo] Web site.
 
* [http://www.oddcast.com/home/demos/tts/tts_example.php?sitepal Online Text to Speech Demo] Web site.
* [http://www.youtube.com/watch?v=NvQCChzifyQ Qenosa's Tutorial on Dialogue and NPC creation] Video.
+
 
 +
<span id="Tip-AnimationDialog"></span>
 +
==== TIP Adding Animation/Video to Dialog ====
 +
: Thanks to '''Radioactivelad''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">[https://geckwiki.com/index.php?title=Animation_Tab Animations] in [https://geckwiki.com/index.php?title=Dialogue Dialogue] are simply assigned in the "Response Dialog" box where you entered the dialogue. You can also have the NPC just play a selection of animations based on the emotion assigned to that dialogue.
 +
 
 +
Unfortunately there is no interface to actually tell what the animations are, but you can "preview"  them in the "idle animations" section of AI packages.
 +
 
 +
Also it can be somewhat unpredictable whether the animations will play. Some will play consistently, others sporadically, and some not at all.  Not sure if the "Use Emotion Animation" has any impact on this. It's probably broken.
 +
 
 +
A "cut scene" is a "Bink (BIK)" video file and can similarly be triggered by [https://geckwiki.com/index.php?title=PlayBink PlayBink] in a "Result Script".  Please see the "[[#Import_Custom_Videos|Import Custom Videos]]" entry.  If you have problems with other sounds while playing the video, see the [https://geckwiki.com/index.php?title=FadeSFX FadeSFX] function.
 +
</div>
  
 
<span id="Tip-GenericDialog"></span>
 
<span id="Tip-GenericDialog"></span>
Line 2,001: Line 2,521:
  
 
====TIP Conversation or Quest system====
 
====TIP Conversation or Quest system====
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the following:
+
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
Line 2,009: Line 2,529:
  
 
What this means for FNV is that some dialog is spread out through a lot of different quests. If you want to edit '''Doc Mitchell''''s dialog during your initial character creation, for example, that's in the various ''VCGxx'' quests (''VCG01'', ''VCG02'', etc). His healing options are in ''VDoctors'', the same quest as for all of the other wasteland doctors. If you right click on '''Doc Mitchell''''s ID in the GECK and select "Use Info", you'll get a list of topics where his ID is used.
 
What this means for FNV is that some dialog is spread out through a lot of different quests. If you want to edit '''Doc Mitchell''''s dialog during your initial character creation, for example, that's in the various ''VCGxx'' quests (''VCG01'', ''VCG02'', etc). His healing options are in ''VDoctors'', the same quest as for all of the other wasteland doctors. If you right click on '''Doc Mitchell''''s ID in the GECK and select "Use Info", you'll get a list of topics where his ID is used.
 +
 +
In many conversation topics, you can easily see what the choices are at that level, since they will be linked in the Choices box to the right on the Topics tab.  If there aren't any choices, the conversation drops back a level, and here is where it gets really tricky, because if it drops all the way back to the top level then conversation options can come from just about anywhere.  This is nice in a way because you can add a quest and have the NPCs dialog options show up right at their greeting, and as long as the NPC is speaking from the top level, the option will be there.
 +
 +
Things CAN organized so that an NPCs conversations are all in one quest, so it is definitely possible to have a nice, neat, organized system using Bethesda's quest system. But Bethesda and Obsidian don't do it that way. In particular, it's been stated that Obsidian has some sort of weird home-grown conversation system that would then translate conversations into something that the GECK can understand, which seems ridiculously and unnecessarily over-complicated and is probably responsible for some of the madness in some conversation quests (*cough* '''Cass''' *cough*).
 +
 +
This should give you a rough idea of how things are organized. Note that different quests were written by different people and are often structured very differently.  It's not known if it was Obsidian's spiffy dialog system or just someone who had a weird way of doing things, but '''Cass''''s dialog is a spaghetti mess that is difficult to sort through, jumps around all over the place, and is almost impossible to mod because she rarely speaks from the top level, and figuring out where she is in her dialog quests is a royal pain.
 +
 +
There is a ''dialog tree'' option in ''Quests'' that you can use to help figure out exactly how things are organized. It seems to be a bit buggy but can be helpful to figure out where different conversations branch to.  (See also [[#Tip-OCE|TIP Obsidian Conversation Editor aka OCE]].)
  
 
Being part of a ''faction'' and using an existing ''voice type'' is enough to trigger a lot of the dialog in-game. If you only want your Actor to say what you have scripted them to say, and only that, then give them a unique ''voice type''.  Otherwise, generic dialog may get triggered unexpectedly
 
Being part of a ''faction'' and using an existing ''voice type'' is enough to trigger a lot of the dialog in-game. If you only want your Actor to say what you have scripted them to say, and only that, then give them a unique ''voice type''.  Otherwise, generic dialog may get triggered unexpectedly
 +
</div>
 +
 +
<span id="Tip-ConvoBtwnNPCs"></span>
 +
==== TIP Conversations between NPCs ====
 +
: Thanks to '''ashtoplp101''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">
 +
* See the [http://www.youtube.com/watch?v=rcqbF0zpxtQ GECK: NPCs talk to each other] Video by '''Seddon4494''' once you know how to create and place NPCs into the world.  ('''Seddon4494''' has made other videos on how to do this ([https://www.youtube.com/c/Seddon4494/videos List of Videos]), including [http://www.youtube.com/watch?v=zK09aDY8FHY GECK: Advanced Dialogue: Topic with multiple sub-topics] and [https://www.youtube.com/watch?v=wuJ8AWwGw9c GECK Tutorial - Location Specific Chatter].)
 +
'''Seddon4494''' missed a key "refinement" point in his tutorial.  In the script of the NPCs you want to talk to each other, ADD the following (similar) block in the script attached to the dialog scripts of the respective NPCs, but with ''[https://geckwiki.com/index.php?title=SayToDone OnSayToDone]'', and the ''[https://geckwiki.com/index.php?title=SayTo Sayto]'' parameters shown, or your trigger won't appear to work:
 +
<div style="margin:0px 0px 0px 50px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
Begin OnSayToDone <TopicID>.
 +
  <test01ref>.sayto <test02ref> <testdialog##> 1 1
 +
END
 +
</div>
 +
: Replace the place-holder elements (within <angle brackets>) with your own Editor-IDs.
 +
: The ''SayToDone'' block is triggered when a ''[https://geckwiki.com/index.php?title=Say Say]'' or ''SayTo'' is complete.  Consequently it can also be used to set variables used by conditions enabling other topics, etc., such as a "DoOnce" flag.
 +
: You don't need to do any "EndIfs" because it only runs after the NPC whose script this is in says that specific dialogue topic.  The "END" terminates the entire script at that point.
 +
 +
So a conversation between NPCRef1 and NPCRef2 triggered by the Player entering a TriggerBox (as in the video) would fundamentally be written as:
 +
<div style="margin:0px 0px 0px 50px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
; This script would be attached to the TriggerBox used to control the distance at which <DialogueTopicA> is introduced.
 +
Begin OnTriggerEnter Player
 +
  NPCRef1.SayTo NPCRef2 <DialogueTopicA> 1 1
 +
END
 +
 +
; This is NPCRef1's script
 +
Begin OnSayToDone <DialogueTopicA>
 +
  NPCRef2.SayTo NPCRef1 <DialogueTopicB> 1 1
 +
END
 +
 +
Begin OnSayToDone <DialogueTopicC>
 +
  SetStage <QuestID> 10 ; (or whatever you want to make it do when the conversation is over)
 +
END
 +
 +
;This is NPCRef2's script
 +
Begin OnSayToDone <DialogueTopicB>
 +
  NPCRef1.SayTo NPCRef2 <DialogueTopicC> 1 1
 +
END
 +
</div>
 +
:: Insert additional "OnSayToDone <DialogTopic#>" blocks for the NPCs as needed.
 +
Note that a TriggerBox is not the only way to initiate the conversation, but other than that "triggering" event the same principles apply to other methods of initiation.
 
</div>
 
</div>
  
Line 2,054: Line 2,626:
 
">There are two parts to '''''Voices''''' in topics: the sound file, which is usually a '''.WAV''' or an '''.OGG''' format file, and the lip file ('''.LIP'''). The sound file has (obviously) the spoken sound, and the lip file has the synchronized lip movements. Without the lip file, the NPC's lips won't move as they speak, which is very weird.
 
">There are two parts to '''''Voices''''' in topics: the sound file, which is usually a '''.WAV''' or an '''.OGG''' format file, and the lip file ('''.LIP'''). The sound file has (obviously) the spoken sound, and the lip file has the synchronized lip movements. Without the lip file, the NPC's lips won't move as they speak, which is very weird.
  
The GECK as it ships is missing its lip file generator. Bethesda has updated the GECK a couple of times since its first release and still hasn't bothered to put the lip generator in it.  (They seem to like making things difficult for us.) You can use the one provided with the Oblivion or Skyrim CK installed on your computer: the same lip generator is in the '''\sound\processing''' folder. Just copy that folder to your FNV directory and you're good to go.  Or there is a "third-party" lip generator: [http://www.nexusmods.com/newvegas/mods/61248/? FonixData.cdf ( Easier .Lip Files )] Mod by '''DingraThePishvaz'''.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: green;
+
The GECK as it ships is missing its lip file generator. Bethesda has updated the GECK a couple of times since its first release and still hasn't bothered to put the lip generator in it.  You can use the one provided with the Oblivion or Skyrim CK installed on your computer: the same lip generator is in the '''\sound\processing''' folder. Just copy that folder to your FNV directory and you're good to go.  Or there is a "third-party" lip generator: [http://www.nexusmods.com/newvegas/mods/61248/? FonixData.cdf ( Easier .Lip Files )] Mod by '''DingraThePishvaz'''.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: green;
 
background-color:#fff5f5;padding:3px;
 
background-color:#fff5f5;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
Line 2,060: Line 2,632:
  
 
Now the question is: where is your sound coming from? If you are going to be speaking into a microphone, just bring up the topic and hit "record" near the bottom of the window. Don't forget to "save" it when you are done. If you don't like what you just said or you made a mistake, flubbed the line, whatever: then don't hit "save", and instead just hit "record" and try another "take". When you click "save" it only saves your last "take". If you have the lip generator installed, the GECK will automatically create both the '''.WAV''' and '''.LIP''' files.
 
Now the question is: where is your sound coming from? If you are going to be speaking into a microphone, just bring up the topic and hit "record" near the bottom of the window. Don't forget to "save" it when you are done. If you don't like what you just said or you made a mistake, flubbed the line, whatever: then don't hit "save", and instead just hit "record" and try another "take". When you click "save" it only saves your last "take". If you have the lip generator installed, the GECK will automatically create both the '''.WAV''' and '''.LIP''' files.
 +
 +
Note:
 +
* if you have multiple sentences in one '''.WAV''' file, the lip sync can be a little off.
 +
* if you use an ellipses ("..."), sometimes the GECK does weird things with lip sync as well.
  
 
If your sound is coming from an already existing '''.WAV''' file, it needs to be in the exact location that the GECK expects it to be in and it has to have the exact name that the GECK wants it to have. If you look down near the bottom of the topic, you'll see the file name that it wants, without the '''.WAV''' extension, which will have the topic name in it and will also have what looks like a bunch of random letters and numbers in it (they aren't random; they are '''hexadecimal'''). Sometimes the easiest way to make sure your file ends up in the right place is to record a quick 2 second ''dummy'' hello or something into the microphone and save it, then go under the '''\sound''' folder and find your mod and voice type (etc.) until you land on the files you just created. If you have to create all of the folders yourself it's very easy to make a mistake. This way (i.e. by recording ''dummy'' files) you make sure that the folder names are right and everything is in the right place. Then delete the '''.WAV''' and '''.LIP''' dummy files that you just generated, and put the actual '''.WAV''' file that you want to use in its place. You can copy the file name from the topic screen and paste that into the file name of the '''.WAV''' file.  The file names are too long and contain too many letters and numbers, so changing the name manually isn't recommended; copy-and-paste is safer.
 
If your sound is coming from an already existing '''.WAV''' file, it needs to be in the exact location that the GECK expects it to be in and it has to have the exact name that the GECK wants it to have. If you look down near the bottom of the topic, you'll see the file name that it wants, without the '''.WAV''' extension, which will have the topic name in it and will also have what looks like a bunch of random letters and numbers in it (they aren't random; they are '''hexadecimal'''). Sometimes the easiest way to make sure your file ends up in the right place is to record a quick 2 second ''dummy'' hello or something into the microphone and save it, then go under the '''\sound''' folder and find your mod and voice type (etc.) until you land on the files you just created. If you have to create all of the folders yourself it's very easy to make a mistake. This way (i.e. by recording ''dummy'' files) you make sure that the folder names are right and everything is in the right place. Then delete the '''.WAV''' and '''.LIP''' dummy files that you just generated, and put the actual '''.WAV''' file that you want to use in its place. You can copy the file name from the topic screen and paste that into the file name of the '''.WAV''' file.  The file names are too long and contain too many letters and numbers, so changing the name manually isn't recommended; copy-and-paste is safer.
Line 2,066: Line 2,642:
 
</div>
 
</div>
  
<span id="Tip-NoDriver"></span>
+
<span id="Tip-LocatingVoices"></span>
 +
 
 +
==== TIP Locating voiced dialog ====
 +
: Thanks to '''clanky4''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you want to edit or replace an existing Actor's voice file, how do you go about locating them?
 +
 
 +
You could try using the [https://www.nexusmod...egas/mods/63317 Lazy Voice Finder].  Its a bit similar to the GECK in that you can load up ESM/ESP files to use dialogue data from.
 +
 
 +
For example, looking for Boone referring to his "beret":
 +
* Select "File | Open | '''FalloutNV.esm'''", and select the "OK" button.
 +
* Once it is done loading, type "beret" in the search bar and it'll show every dialogue line where an NPC says "beret".
 +
*: One of those is Boone, or more specifically "'''maleuniquecraigboone'''" saying "I'd really like my beret back, please."
 +
* <Right-click> on that selection and then select "Copy asset path" to get the proper location for the dialogue file. In this case:
 +
*: <code>sound\voice\falloutnv.esm\maleuniquecraigboone\vdialoguec_vdialoguecraigb_0015f1dd_1.ogg</code>
 +
*: You can also copy the '''dialogue file''' itself, as well as the '''lip file''', if you wanted those for anything.
 +
* Now from here all you'd need to do is place a '''.wav''' or '''.ogg''' file with the name you just located (e.g. "vdialoguec_vdialoguecraigb_0015f1dd_1") at the same location:
 +
*: <code>sound\voice\falloutnv.esm\maleuniquecraigboone</code>
 +
: to replace that bit of audio.
 +
 
 +
To replace the written dialogue bit you'd need to do some work in the GECK as outlined elsewhere in this section.
 +
</div>
 +
 
 +
<span id="TIP-MultipleGreetings"></span>
 +
 
 +
====TIP Multiple Greetings====
 +
: Thanks to '''madmongo''' of the Nexus "Fallout New Vegas Mod Talk" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When deciding what to say, your NPC will go down the list of greetings until it finds the first greeting for which all of the greeting's conditions are true.  If your only condition is that the character ID matches your NPC, then as soon as it hits the ''first'' greeting with that condition on the list, your NPC will always say that line and not any others.
 +
 
 +
There are different ways to make an NPC say different things. Many of the vanilla NPCs have the "say once" flag checked. They'll have a bunch of greetings, each with the say once flag, so the first time they'll say the first greeting, the second time they'll say the second, etc. Eventually they run out of greetings and they will then default to a greeting that doesn't have the say once flag set.
 +
 
 +
There is also a flag for them to say a particular line once per day.
 +
 
 +
If you want them to keep saying a line and not just say it once, another option is to have the line be checked as random. Then they'll pick a random greeting.
 +
 
 +
What is also done for more control in cases of multiple greetings like this is use a variable in the NPC's script. Then every time they say a given line, increment the variable so that they'll say the next line. When they reach the last line, reset the variable to zero (or whatever number starts your list). This guarantees that they'll say every line, but if you don't have many greetings and you speak to the NPC often you might notice the cycle. So there are advantages and disadvantages over using this compared to using a random greeting.
 +
 
 +
Of course you don't have to "walk the list".  The variable value is just another condition check that can be set by other scripts under desired circumstances; for example, after combat ends.
 +
 
 +
You can also add conditions to make them say different things. For example, you can check the time of day and have them say good morning, good afternoon, or good evening, or if your NPC is less pleasant you can make them say that they hate mornings if the hour is earlier than 10 am. If you are in a particular location, you can have the NPC check what cell they are in or you can check their distance to a particular marker. That way you can make them say "I love the smell of jet fuel in the morning!" every time they are in Nellis, for example.
 +
 
 +
Be creative and have fun.
 +
 
 +
See also TIPs [[#TIP_Random_NPC_Comments|Random NPC Comments]], [[#TIP_Say_Once_use|Say Once use]], and [[#TIP_Standard_Dialog|Standard Dialog]].
 +
</div>
 +
 
 +
<span id="Tip-NoDriver"></span>
 +
 
 
==== TIP No sound driver available error message ====
 
==== TIP No sound driver available error message ====
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 2,109: Line 2,739:
 
<span id="TIP-RandomNPCcomments"></span>
 
<span id="TIP-RandomNPCcomments"></span>
 
====Tip Random NPC Comments====
 
====Tip Random NPC Comments====
 +
: Thanks to '''Mktavish''' of the '''Nexus Fallout New Vegas GECK and Modders''' forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
Line 2,117: Line 2,748:
 
If the 150 char limit isn't enough then add another 150 char block in the Response field.
 
If the 150 char limit isn't enough then add another 150 char block in the Response field.
 
On the Topic text (at the top) say something like: "Do you have any info on this place?".  Flag it as a top level dialogue; then the priority will determine where it shows in the list of options after their "Greeting".
 
On the Topic text (at the top) say something like: "Do you have any info on this place?".  Flag it as a top level dialogue; then the priority will determine where it shows in the list of options after their "Greeting".
If you're not within the maximum distance to any marker then that option shouldn't show up as a dialogue option for the player. - Source: Mktavish, Nexus forums
+
If you're not within the maximum distance to any marker then that option shouldn't show up as a dialogue option for the player.
 
</div>
 
</div>
  
<span id="Tip-SayOnce"></span>
+
: '''Budong''' added the following alternative method:
==== TIP '''Say Once''' use ====
 
: Thanks to '''Mktavish''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">The "Say Once" flag is set per "response", not per "Topic".  So basically you take the Topic, and add as many responses to it as you want. Flag them "top level", and set "priority" for what order each response will be presented in.  You can even set conditions that might change when they are used, such as (for example) a "quest stage" or "gateway variable".  Once they have been spoken, the responses you flag as "Say Once" will no longer be considered in the priority list thereafter.
+
">NPC is running this script, which basically waits and does nothing until a random amount of time has passed and then forces the NPC to say something to the Player.
 +
 
 +
<pre>
 +
float m_banterTimer
 +
float m_banterThreshold
 +
 
 +
BEGIN GameMode
 +
  if m_banterTimer < m_banterThreshold
 +
    set m_banterTimer to m_banterTimer + GetSecondsPassed
 +
  else
 +
    set m_banterTimer to 0
 +
    set m_banterThreshold to GetRandomPercent*4
 +
    SayTo player LocationBanter;
 +
  endif ; banterTimer
 +
END</pre>
  
The dialogue tool is pretty versatileBut it is not very intuitive either and one of the harder things to get proficient with in the '''GECK'''.  However, there is no one set way to do things.  See [[#TIP_Obsidian_Conversation_Editor_aka_OCE|TIP Obsidian Conversation Editor aka OCE]].
+
Then put all the NPC's banter dialog into the topic called LocationBanterThe '''location-specific responses''' all have a condition using the '''GetInCell''' function to tie them to specific places and are at the top of the topic's stack so they evaluate first but only trigger when the Player is at a specific location; they're also flagged with "once per day" so you don't get spammed by them. The bonus to this method is that you can have '''generic non-location-specific''' dialog at the BOTTOM of the topic's stack, so if the Player is NOT at a landmark, the NPC still makes amusing observations every now and again. (Plus you are not forced into dropping new objects in cells all over the game; it's just the script and the dialogNice and tidy, easy to manage.)
 
</div>
 
</div>
  
<span id="Tip-DialogTabs"></span>
+
<span id="Tip-RecordVoice"></span>
====TIP Standard Dialog====
+
==== TIP Record new voice files ====
 +
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">NOTE: Dialog ''quests'' must be checkboxed to "start enabled".  If the ''quest'' isn't "active" the ''topics'' will not be available.
+
">Adding original voiced dialog from within the '''GECK''' can make the process less painful.  The '''GECK''' will technically record from (accept as input) any standard '''Windows''' audio '''output''' source, but you do have to also have configured '''Windows''' with an '''input''' source (microphone).  See [https://manual.audacityteam.org/man/windows_accessing_the_windows_sound_controls.html#Accessing_the_Settings_dialog Accessing the Windows Sound Controls].
 +
 
 +
What is the '''GECK''' calling your primary sound driver?  Is that your sound card's output?  What happens if you try to record from that?
 +
 
 +
The problem that you are going to run into is that most sound drivers provided by default with '''Windows''' these days don't export the main audio as a device from which the '''GECK''' can record. If your sound driver can do it, then the '''GECK''' can use it.  (Check the audio vendor website for possible alternative drivers.)  It's often referred to in '''Windows''' as some sort of "loopback device" or "mixer" in the sound driver options and it is usually disabled by defaultThe device name in '''Windows''' may not be obvious (such as "Stereo Mix" or "Wave Out Mix") so experimentation is usually required.
 +
 
 +
Once you have the '''GECK''' recognizing your audio input, you are ready to record.  But you will still need to create "lip files" as described in [[#TIP_Batch_Lip_file_generation|TIP Batch Lip file generation]].
 +
</div>
  
Certain bits of dialog are standard, but have to be added from the correct tab in the '''Quest Stages'''.
+
<span id="Tip-SayOnce"></span>
See the following references:
+
 
* [http://geckwiki.com/index.php/Quest_and_Dialogue_Tutorial Quest and Dialogue Tutorial], in particular the "Dialogue Topics" section.
+
==== TIP '''Say Once''' use ====
* [http://www.youtube.com/watch?v=mm_fF4VHhw4&feature=related Crow`s Tutorial on Dialogue] Video.
+
: Thanks to '''Mktavish''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">The "Say Once" flag is set per "response", not per "Topic".  So basically you take the Topic, and add as many responses to it as you want.  Flag them "top level", and set "priority" for what order each response will be presented in.  You can even set conditions that might change when they are used, such as (for example) a "quest stage" or "gateway variable".  Once they have been spoken, the responses you flag as "Say Once" will no longer be considered in the priority list thereafter.
 +
 
 +
The dialogue tool is pretty versatile.  But it is not very intuitive either and one of the harder things to get proficient with in the '''GECK'''.  However, there is no one set way to do things.  See [[#TIP_Obsidian_Conversation_Editor_aka_OCE|TIP Obsidian Conversation Editor aka OCE]].
 +
</div>
 +
 
 +
<span id="Tip-SayToPlayer"></span>
 +
==== TIP SayTo Player ====
 +
: Thanks to '''ashtonlp101''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">You '''must''' include the parameters regarding "headtracking" and "subtitles" after the target "Player" reference <Dialog Topic> for this to compile correctly.  Ex: "DixieRef.SayTo Player DixieTopicMelody 1 1", where the "1 1" enables headtracking and subtitles.
 +
</div>
 +
 
 +
<span id="Tip-DialogTabs"></span>
 +
 
 +
====TIP Standard Dialog====
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">NOTE: Dialog ''quests'' must be checkboxed to "start enabled".  If the ''quest'' isn't "active" the ''topics'' will not be available.
 +
 
 +
Certain bits of dialog are standard, but have to be added from the correct tab in the '''Quest Stages'''.
 +
See the following references:
 +
* [http://geckwiki.com/index.php/Quest_and_Dialogue_Tutorial Quest and Dialogue Tutorial], in particular the "Dialogue Topics" section.
 +
* [http://www.youtube.com/watch?v=mm_fF4VHhw4&feature=related Crow`s Tutorial on Dialogue] Video.
 
* [http://www.youtube.com/watch?v=NvQCChzifyQ Qenosa's Tutorial on Dialogue and NPC creation] Video.
 
* [http://www.youtube.com/watch?v=NvQCChzifyQ Qenosa's Tutorial on Dialogue and NPC creation] Video.
 
* [http://geckwiki.com/index.php/Creating_a_new_vendor Creating a new vendor] tutorial on creating dialog for a NPC's interaction with the player.
 
* [http://geckwiki.com/index.php/Creating_a_new_vendor Creating a new vendor] tutorial on creating dialog for a NPC's interaction with the player.
 
* [http://geckwiki.com/index.php/StartConversation StartConversation] command forces a conversation between two NPCs, starting with a specified topic.
 
* [http://geckwiki.com/index.php/StartConversation StartConversation] command forces a conversation between two NPCs, starting with a specified topic.
* [http://geck.technodeep.net/index.php/How_to_script_conversation_between_two_or_more_NPCs How to script conversation between two or more NPCs] tutorial.
+
* [http://geckwiki.com/index.php?title=How_to_script_conversation_between_two_or_more_NPCs How to script conversation between two or more NPCs] tutorial.
 
* [http://geckwiki.com/index.php/Category:Dialogue GECK Category: Dialogue] This page has a number of important points to bear in mind, such as flags and:
 
* [http://geckwiki.com/index.php/Category:Dialogue GECK Category: Dialogue] This page has a number of important points to bear in mind, such as flags and:
 
:* '''Prompt:''' This text will be displayed in place of the topic text. If left blank (as is default), the topic text will be used.
 
:* '''Prompt:''' This text will be displayed in place of the topic text. If left blank (as is default), the topic text will be used.
Line 2,155: Line 2,838:
 
The following is intended to help clarify the above GECKWiki pages:
 
The following is intended to help clarify the above GECKWiki pages:
 
* ''GREETING'' only shows up as an option in the ''topics tab'' of your Quest when you < right-click > on the '''Topics''' tab in the left-hand pane of the GECK "Object Window" under the "Actor Data/Quest" section; and then also select/highlight the ''info response'' field in the top right-hand pane: where it shows a piece of the text and conditions.  Then you go to that small "list box" on the right side labeled "Add Topic"  and < right-click > in there to select from the list of existing ''topics'', or select '''New''' to add a completely new one.  In case it isn't clear: this ''GREETING'' is the NPC's first response when the Player first initiates dialog.  If you enable (check) the "SayOnce" box, it does not appear again '''''for that Actor'''''.  It can appear for another Actor which meets any qualifying conditions.  Do not confuse it with ''Hello'' which is all actors' way to start conversations, but usually only between NPCs.
 
* ''GREETING'' only shows up as an option in the ''topics tab'' of your Quest when you < right-click > on the '''Topics''' tab in the left-hand pane of the GECK "Object Window" under the "Actor Data/Quest" section; and then also select/highlight the ''info response'' field in the top right-hand pane: where it shows a piece of the text and conditions.  Then you go to that small "list box" on the right side labeled "Add Topic"  and < right-click > in there to select from the list of existing ''topics'', or select '''New''' to add a completely new one.  In case it isn't clear: this ''GREETING'' is the NPC's first response when the Player first initiates dialog.  If you enable (check) the "SayOnce" box, it does not appear again '''''for that Actor'''''.  It can appear for another Actor which meets any qualifying conditions.  Do not confuse it with ''Hello'' which is all actors' way to start conversations, but usually only between NPCs.
 +
* Don't use the GOODBYE topic for that dialogue directed to the Player. Its for ending a conversation between two NPC's.  Make your own "Farewell" sort of topic on the '''Topics''' tab.  Anything that is ''in dialog'' between an NPC and the Player belongs on the '''Topic''' tab, but be sure to enable the "GoodBye" checkbox under "Info Details" for your terminating line(s) of dialog.  Use the '''Conversation''' tab for conversations between two NPCs, or random comments that your follower can say.  Think '''Topics''' with the Player involved, and '''Conversations''' strictly for NPCs.
 
* Once created, ''Hello'' and ''GOODBYE'' only show up as dialog options upon < right-click > on the '''Conversation''' tab and select ''Add Topic''.  They should be "top level", with a priority of 5.  ''Hello'' is generally used for conversations between two or more NPCs, without the Player.  ''GOODBYE'' is essential to be able to terminate a conversation.  If in the '''Topics''' tab you do not set up any topic flagged as ''GOODBYE'', the dialog will end with one of those ''GOODBYE''s from the '''Conversation''' tab.
 
* Once created, ''Hello'' and ''GOODBYE'' only show up as dialog options upon < right-click > on the '''Conversation''' tab and select ''Add Topic''.  They should be "top level", with a priority of 5.  ''Hello'' is generally used for conversations between two or more NPCs, without the Player.  ''GOODBYE'' is essential to be able to terminate a conversation.  If in the '''Topics''' tab you do not set up any topic flagged as ''GOODBYE'', the dialog will end with one of those ''GOODBYE''s from the '''Conversation''' tab.
 +
* If you want a character to say a GREETING response (the first thing any Actor will say when activating them) without activating '''Dialogue Mode''' (as in "freeze time, zoom in on their face"), check/enable the GOODBYE flag  under the "Info Details" section for the GREETING response.
 +
*: If you have multiple such type responses (for instance: for guards that just say "move along" or "I'm watching you") when the Player tries to talk to them and they shouldn't actually go into full dialog mode, make sure to also check the RANDOM flag.  Or you can use a script variable and a condition to check for it to cycle through a bunch of responses.  Just increment the script variable and make sure to wrap it around to the start when you reach the end of the dialog options. You can also set a variable and create an AI package using the appropriate (e.g. "eating") idle so that the Actor will only say "leave me alone, I'm eating" when they are actually eating.
 +
*  There is a "conditions" box under your entry in the "Conversation" tab on the "Dialogue" tab in the "Quests" object window.  Please see [[#TIP_Basic_conditional_test_syntax|TIP Basic conditional test syntax]].  However, the "conditions" box fields are structured slightly different enough you might be confused.  The values should be selected from the "pick list" presented to you when you click in each field.<br>{{filepath:GECKDialogConditions.png}}
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 50px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">The fields are:
 +
# the "function name" that retrieves the primary value you want to test.  As shown in the image, this will often be the "ActorID"  from function "GetIsID", to whom you wish to limit the line of dialog.
 +
# whom or what you are comparing the returned first value to; i.e. in this instance "Creature: ZRCZaar".  That is: the "ActorID" returned must be "Creature: ZRCZaar".
 +
# the "type of comparison".  In this instance it is "equals to" ("==").  (IIRC "not equal to" is given as "!=", though some languages use "<>" instead.)
 +
# the "desired result of the comparison" which should be regarded as "True".  A "True" result is always "1", and a "False" result is always "0".  But note that you may want to consider a returned "False" result (i.e. "0.00") to be the desired result making the "condition = true"; in which case you would want "0.00" to be used here.  A classic example is when you are testing that the first field is NOT the same as the second field (e.g. "GetIsID", "==", "Creature: ZRCZaar", "0.00" .)  However, it is a best practice to use the correct "logical condition" (i.e. "!=") instead of the "false" value ("0.00") in such a case because the expectation is a "condition" will be met when "true".  The rule is: whatever makes the most/clearest sense reading the statement when you come back to look at it with fresh eyes in a year.
 +
# the "logical combination with the next line" value, which is always going to be present (and equal "AND" by default), but is only meaningful if there is another condition statement following that one.  The other possible "logical combination" is "OR".  This will always be present and ignored on the very last conditional line.
 +
 +
Each condition line following the first is considered in combination with the preceding tests.
 +
* Each pair of lines connected by "AND" must all be "true" for that combination to be "true". (E.g. Only if line1 AND line2 are both "true", then the combination is "true".  If either one is "false", then the combination "false".)
 +
* Any one line or set of "AND" lines which are then connected by a trailing "OR" will be "true" if either set on either side of the "OR" statement is "true".  (E.g. if line1 OR line2 is either one "true", then the combination is "true".  Only if both are "false" is the combination "false".)
 +
* The entire set of combinations is parsed out and tested before the final result of the statement is determined.  If the results are not what you expect, it's because you are not understanding how the groupings are being parsed.  This is addressed in the referenced "Tip".
 +
 +
It helps immensely if you initially block out such a mixture of "AND/OR" conditions using parentheses to group the "AND" line pairs separately from the "OR" lines and perhaps rearrange their order to simplify the groupings before entering them into such fields.  Use parentheses to group pairs of statements to clarify in which order they should be determined: the most nested levels of parentheses first.
 +
</div>
 +
* For '''combat barks''', you need to use the default topics in the COMBAT tab of your quest.
 +
*: Use the vanilla companion control quest (VNPCFollowers) as a reference if you're wondering how to use each topic.
 
* You will need Voice "sound" (and corresponding Lip-Sync ".lip") files for your dialog lines so they take the appropriate amount of time before proceeding to the next line.  Otherwise they may appear to "skip" over some lines or cut each other off.  "Silent" sound files are common for this purpose when the actor is not voiced, but still needed to establish the timing.  See the [[#Sound and Voice Tools|Sound and Voice Tools]] section entries for the necessary tools.
 
* You will need Voice "sound" (and corresponding Lip-Sync ".lip") files for your dialog lines so they take the appropriate amount of time before proceeding to the next line.  Otherwise they may appear to "skip" over some lines or cut each other off.  "Silent" sound files are common for this purpose when the actor is not voiced, but still needed to establish the timing.  See the [[#Sound and Voice Tools|Sound and Voice Tools]] section entries for the necessary tools.
 
* Sort your list of dialog '''Topics''' by ''Priority''.  ("1" is highest, "100" is lowest.)  Place the ''GREETING''  and ''GOODBYE'' Topics at the top of the list.  '''Topics''' are processed from the top down until it finds the first one with all conditions "true".
 
* Sort your list of dialog '''Topics''' by ''Priority''.  ("1" is highest, "100" is lowest.)  Place the ''GREETING''  and ''GOODBYE'' Topics at the top of the list.  '''Topics''' are processed from the top down until it finds the first one with all conditions "true".
Line 2,164: Line 2,871:
 
</div>
 
</div>
  
<span id="Tip-TextDisplay"></span>
+
<span id="Tip-TalkingActivators"></span>
 
+
==== TIP Talking Activators ====
==== TIP Text display timing ====
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Many new mod creators think of "voice" and "lip-sync" files as "optional" when they only intend to display a text message. Then they wonder why sometimes their message only displays briefly in a flash and others wait until something is clicked upon. The latter is because a message displayed under control of a menu block is "paused" until an "input" (key entry or button click) is received(Sometimes this is not as obvious as a "button", such as using an elipsis ("...") instead.  Generally not having an obvious means of proceeding is considered "poor design" unless it is deliberate as a form of "visual puzzle".) This is one way to ensure the message is seen by the Player.
+
">An "[https://geckwiki.com/index.php?title=Activator activator]" has a "trigger boundary" under the '''NavMesh Generation Import Option''' that gets triggered by ''collision'' with the PlayerA "[https://geckwiki.com/index.php?title=Talking_Activator talking activator]" is an object (such as a radio or intercom) with properties related to the conversation, and can be found, created and edited from the Objects window under [https://geckwiki.com/index.php?title=Category:Actors Actors].
  
If you are not getting display of the Dialog response text outside of a menu, most likely it is because the text has no "voice" audio and/or lip-sync file attached(Both are needed.) These files determines how long the text remains on screen before allowing the display to proceedEven if there is no actual voice to be heard, a "silent" audio file of sufficient length is required to determine the length of the display of the textThe mod [http://www.nexusmods.com/newvegas/mods/63052 Silent Voice Generator] by '''Enter_77''' can generate both silent voice and corresponding lip-sync files of up to 30 seconds duration from exported GECK quest and dialog text documents(See "Voices" under the [[#Music_and_Sounds|Music and Sounds]] section.  It is recommended placing your own "silent voice" files under their own sub-folder to avoid the risk of overwriting actual voices used by others.)
+
The thing to remember with ''talking activators'' is they are just extensions of Actors ... if you want them to be.  Hence an Actor speaks for the activator, or vice versa (whichever way you want to think about it), but the topic will be found under the ActorThe confusing part being that a talking activator can also replace an actor(You can use any suitable mesh in place of the NPC as the Actor, such as the typical "intercom" or "radio".) So you can make lines be spoken as if a ghost is talking without a visible point source and you can force a conversation through the "invisible" activator.  The activator just being the focal point of the Player dialogue's "zoom in on the face" feature(If you don't want the "zoom in" feature, enable the "Goodbye" box under "Info Details" in the appropriate GREETING response Topic "Conversation" Tab.  See the image under [[#TIP_Standard_Dialog|TIP Standard Dialog]].)
</div>
 
  
=== FaceGen ''Heads Faces Hairs and Helmets'' ===
+
Some examples of how this has been implemented:
: This information is compiled from a number of threads, guides, and articles by authors such as '''DrakeTheDragon''', '''throttlekitty''', '''Ghogiel''', '''scanti''', and '''Skree000'''.  It is an overview at best.
+
* If you want the quest giver to just give orders over a two way radio or intercom, you can just trigger sounds to play. '''Christine Royce''' in '''Dead Money''' gives you orders in a similar fashion.
 +
:: For another "in-game" example, check out the script "REPCONEnterScript": Lines 26 & 27. Its the quest where you meet '''Jason Bright''', but before that '''Chris Haversam''' talks to you through an intercom.
 +
* If you want the "dialog window" to open and "zoom in" on the focal point object, you are going to need something to talk to. The easiest thing might be an invisible NPC. Just create an invisible outfit that uses all body slots. If the conversation starts at a particular location, like walking down a particular hallway, then you can set up the invisible NPC there and have a trigger start the conversation. If the location isn't fixed, it might be easier to have the invisible NPC in a temp holding cell (place a piece of floor to stand on first, and a [https://geckwiki.com/index.php?title=XMarker XMarker] there if you need to be able to move them back) and then move them to the player's location to initiate the conversation with "<ActivatorRef> [https://geckwiki.com/index.php?title=StartConversation StartConversation] <TargetID>, <TopicID>" (e.g. "MyRadioRef StartConversation Player, MyTopicStage01").
 +
 
 +
* To get an "intercom" to only talk to the Player after the Player has read a note, give the intercom NPC a topic, and under the conditions tab, give a new condition: "Player [https://geckwiki.com/index.php?title=GetHasNote GetHasNote] <YourNoteID> > 0".  Now the intercom will only say that line if the player has the note in his inventory.
 +
:: Please see [[#TIP_Passing_a_Note_to_the_player|TIP Passing a Note to the player]].  The "holotape" or "piece of paper" is just the "artwork/mesh" image associated with the trigger.  You can actually use pretty much anything that has collision.
 +
 
 +
*  '''jazzisparis''' contributes the following from 2014:<br>
 +
: There is no function that would enable you to retrieve the dialogue's target reference directly. There is, however, a workaround. It requires NVSE version 3 (or newer).
 +
: 1. Create a new Quest, tick ''Start Game Enabled'' and set the ''Processing Delay'' to "1.0".
 +
: 2. Create a new Script, set ''Script Type'' to "Quest", and use the following code:
 +
<div style="margin:0px 10px 10px 50px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;">
 +
scn DialogueTargetScript<br>
 +
short bScan<br>
 +
ref rActor<br>
 +
ref rTarget<br>
 +
<br>
 +
begin MenuMode 1009<br>
 +
: if bScan == 0
 +
:: set bScan to 1
 +
:: set rActor to GetFirstRef 200 2 0
 +
:: Label 1
 +
:: if IsFormValid rActor
 +
::: if rActor.GetDialogueTarget == player
 +
:::: set rTarget to rActor ; Found the dialogue target (now stored in rTarget).
 +
:::: ; Do something.
 +
:::: Return
 +
::: endif
 +
::: set rActor to TeddyBear01
 +
::: set rActor to GetNextRef
 +
::: GoTo 1
 +
:: endif
 +
: endif
 +
end<br>
 +
<br>
 +
begin GameMode
 +
: if bScan
 +
:: set bScan to 0
 +
:: set rTarget to 0
 +
: endif
 +
end
 +
</div>
 +
: 3. Return to the Quest from step 1 and select this script from the Script dropbox.
 +
 
 +
: This script runs continuously and retrieves the dialogue target's reference, every time you start a conversation with an NPC.
 +
</div>
 +
 
 +
<span id="Tip-TextDisplay"></span>
 +
 
 +
==== TIP Text display timing ====
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Many new mod creators think of "voice" and "lip-sync" files as "optional" when they only intend to display a text message.  Then they wonder why sometimes their message only displays briefly in a flash and others wait until something is clicked upon. The latter is because a message displayed under control of a menu block is "paused" until an "input" (key entry or button click) is received.  (Sometimes this is not as obvious as a "button", such as using an elipsis ("...") instead.  Generally not having an obvious means of proceeding is considered "poor design" unless it is deliberate as a form of "visual puzzle".)  This is one way to ensure the message is seen by the Player.
 +
 
 +
If you are not getting display of the Dialog response text outside of a menu, most likely it is because the text has no "voice" audio and/or lip-sync file attached.  (Both are needed.)  These files determines how long the text remains on screen before allowing the display to proceed.  Even if there is no actual voice to be heard, a "silent" audio file of sufficient length is required to determine the length of the display of the text.  The mod [http://www.nexusmods.com/newvegas/mods/63052 Silent Voice Generator] by '''Enter_77''' can generate both silent voice and corresponding lip-sync files of up to 30 seconds duration from exported GECK quest and dialog text documents.  (See "Voices" under the [[#Music_and_Sounds|Music and Sounds]] section.  It is recommended placing your own "silent voice" files under their own sub-folder to avoid the risk of overwriting actual voices used by others.)
 +
</div>
 +
 
 +
=== FaceGen ''Heads Faces Hairs and Helmets'' ===
 +
: This information is compiled from a number of threads, guides, and articles by authors such as '''DrakeTheDragon''', '''throttlekitty''', '''Ghogiel''', '''scanti''', and '''Skree000'''.  It is an overview at best.
  
 
* [http://www.nexusmods.com/newvegas/mods/66932 Generating EGM files for Headwear and Hairs] PDF tutorial by '''Roy Batty'''.
 
* [http://www.nexusmods.com/newvegas/mods/66932 Generating EGM files for Headwear and Hairs] PDF tutorial by '''Roy Batty'''.
Line 2,183: Line 2,948:
 
* [[Working with Skyrim head TRIs|Working with Skyrim head TRIs]] (Wiki) for additional tutorials and resources.
 
* [[Working with Skyrim head TRIs|Working with Skyrim head TRIs]] (Wiki) for additional tutorials and resources.
 
* [http://oblivion.nexusmods.com/mods/20166 Head06 Resource] Oblivion Mod by '''Throttlekitty''' as a reference example.
 
* [http://oblivion.nexusmods.com/mods/20166 Head06 Resource] Oblivion Mod by '''Throttlekitty''' as a reference example.
 +
* [http://wiki.tesnexus.com/index.php/Porting_hairs_to_Fallout Porting hairs to Fallout]
  
 
Hair NIFs usually have two models inside of them, one called Hat and one called NoHat. Adjust your alternate hairstyle's Hat model so that it doesn't clip through any hat you want the Actor to wear.  
 
Hair NIFs usually have two models inside of them, one called Hat and one called NoHat. Adjust your alternate hairstyle's Hat model so that it doesn't clip through any hat you want the Actor to wear.  
Line 2,610: Line 3,376:
 
(However, not all game data files are '''Master''' and '''Plugin''' files. Textures, meshes, sounds, videos, etc. are all part of the full game. More about these files elsewhere.)
 
(However, not all game data files are '''Master''' and '''Plugin''' files. Textures, meshes, sounds, videos, etc. are all part of the full game. More about these files elsewhere.)
  
'''Master''' files and '''Plugins''' are largely identical in format, but have some important distinctions in practice. The main practical difference is that '''GECK''' will not (natively) create '''Master''' files. Nor will it allow '''Plugin''' files to modify other '''Plugin''' files.  (The '''Extender''' and '''PowerUp''' addons overcome this limitation.)  However, be aware that when you change an ESP to an ESM, you can only do this properly in '''xEdit/FNVEdit''' so that the '''ONAM''' record is generated; otherwise overrides to cells will not work.  Additionally references by packages to ''markers'' and other scripted objects need to be '''''persistent''''' or they will not work in an ESM.  See the [http://geckwiki.com/index.php/Category:Data_Files GECK: Data Files] entry for more.
+
'''Master''' files and '''Plugins''' are largely identical in format, but have some important distinctions in practice. The main practical difference is that '''GECK''' will not (natively) create '''Master''' files. Nor will it allow '''Plugin''' files to modify other '''Plugin''' files.  (The '''Extender''' and '''PowerUp''' addons overcome this limitation.)  However, be aware that when you change an ESP to an ESM, you can only do this properly by setting the file header "master" flag in '''xEdit/FNVEdit''' (though now with the '''GECK Extender''' you don't need to change the extension so long as the "master" flag is set) so that the '''ONAM''' record is generated; otherwise overrides to cells will not work.  Additionally references by packages to ''markers'' and other scripted objects need to be '''''persistent''''' or they will not work in an ESM.  See the [http://geckwiki.com/index.php/Category:Data_Files GECK: Data Files] entry for more.
  
 
It sometimes helps to think of using ".ESM" files to ''add new things'', and ".ESP" files to ''change existing things or modify existing areas''.  Depending on how you create your "ESM", it might not modify existing things in-game. In other words, if there is an existing navmesh, an "ESP" will overwrite that navmesh, but an "ESM" might not. Similarly, if your "ESM" deletes an object (like a rock) it might work as an "ESP" but the rock might still be there as an "ESM".
 
It sometimes helps to think of using ".ESM" files to ''add new things'', and ".ESP" files to ''change existing things or modify existing areas''.  Depending on how you create your "ESM", it might not modify existing things in-game. In other words, if there is an existing navmesh, an "ESP" will overwrite that navmesh, but an "ESM" might not. Similarly, if your "ESM" deletes an object (like a rock) it might work as an "ESP" but the rock might still be there as an "ESM".
  
It is possible for more than one '''Plugin''' file to ''depend'' upon the same '''Master''' file.  They don't even have to be by the same author.  Such '''Plugins''' are called ''dependencies''.  '''xEdit''' (aka '''FNVEdit''') is the primary tool used to identify such "master/dependent" relationships.  (See the wiki article [[Missing_Masters|Missing Masters]].)  It can also be used to edit the values of specific records, and to create "compatibility" and "merge" patch files.  (See the wiki [[Merged_Plugin_Guidelines_for_Personal_Use|Merged Plugin Guidelines for Personal Use]] article.)
+
It is possible for more than one '''Plugin''' file to ''depend'' upon the same '''Master''' file.  They don't even have to be by the same author.  Such '''Plugins''' are called ''dependencies''.  '''xEdit''' (aka '''FNVEdit''') is the primary tool used to identify and manipulate such "master/dependent" relationships.  (See the wiki article [[Missing_Masters|Missing Masters]].  '''LOOT''' can also detect such dependencies, but not alter them.)  It can also be used to edit the values of specific records, and to create "compatibility" and "merge" patch files.  (See the wiki [[Merged_Plugin_Guidelines_for_Personal_Use|Merged Plugin Guidelines for Personal Use]] article.)
  
 
If you have a problem with navmeshes after converting an ESP to an ESM, the problem likely is the original navmesh was deleted and your edit needs to be changed to an ''override'' (using '''xEdit/FNVEdit'''), then '''refinalized''' in '''GECK'''.  A navmesh in the ESP will also eventually stop working. It is a known bug in the '''Gamebryo Engine''' and was not fixed until later in '''Skyrim''''s life ('''Creator Engine''').
 
If you have a problem with navmeshes after converting an ESP to an ESM, the problem likely is the original navmesh was deleted and your edit needs to be changed to an ''override'' (using '''xEdit/FNVEdit'''), then '''refinalized''' in '''GECK'''.  A navmesh in the ESP will also eventually stop working. It is a known bug in the '''Gamebryo Engine''' and was not fixed until later in '''Skyrim''''s life ('''Creator Engine''').
Line 2,635: Line 3,401:
 
* Once your mod (as an ESP file) is done: if you then convert it to an ESM using '''FNVedit''' (by toggling the "ESM" field flag of the "File Header") and saving, and YOU DO ABSOLUTELY NOTHING ELSE TO IT, it will work. (That's in caps because it's important).
 
* Once your mod (as an ESP file) is done: if you then convert it to an ESM using '''FNVedit''' (by toggling the "ESM" field flag of the "File Header") and saving, and YOU DO ABSOLUTELY NOTHING ELSE TO IT, it will work. (That's in caps because it's important).
  
* Once you change your ESP into an "ESM" in the ''file header'' of '''FNVEdit''', make sure you change the file extension to ESM to match.  '''FNVEdit''' loads files based upon their extension and timestamp, period.  It doesn't care about the internal ESM flag on ESP extension files; they get loaded after other ESMs.  Besides, it confuses your customers: the players.
+
* Once you change your ESP into an "ESM" in the ''file header'' of '''FNVEdit''', make sure you change the file extension to ESM to match.  '''FNVEdit''' loads files based upon their extension and timestamp, period.  (But other games may ignore those same attributes and load based upon the "plugins.txt" file sequence.)  Both '''FNVEdit''' and the game engine don't care about the internal ESM flag on ESP extension files; they get loaded after other ESMs.  Fortunately '''LOOT''' does detect such internally flagged ESP files and sorts them with the rest of the actual ESM files.  And since version 4 of '''xEdit''', it's "Sort Masters" option automatically matches them to the current "load order".  Besides, using a different extension from the purpose of the plugin confuses your customers: the players.
  
* If you have something like an NPC or a package or pretty much anything in an ESM, and something modifies that NPC/package/whatever in another ESP or another ESM, do not ever change the NPC/package/whatever in the original ESM afterwards. That can really corrupt your mod. You'll also save yourself a lot of headaches if you don't modify things in another ESP/ESM. In other words, if you have an NPC defined in an ESM, but then you place the NPC in the game in an ESP, do not modify the original NPC definition (Base-ID form) in the ESP. You can modify your ''reference'' in the ESP all you want. Just don't modify the original NPC definition.  (If that sentence confuses you, please see the [[#GECK_Form-ID,_Base-ID,_Ref-ID,_and_Editor-ID|GECK Form-ID, Base-ID, Ref-ID, and Editor-ID]] section again for the distinctions.)
+
* If you have something like an NPC or an AI package or pretty much anything in an ESM, and something modifies that NPC/package/whatever in another ESP or another ESM, do not ever change the NPC/package/whatever in the original ESM afterwards. That can really corrupt your mod. You'll also save yourself a lot of headaches if you don't modify things in another ESP/ESM. In other words, if you have an NPC defined in an ESM, but then you place the NPC in the game in an ESP, do not modify the original NPC definition (Base-ID form) in the ESP. You can modify your ''reference'' in the ESP all you want. Just don't modify the original NPC definition.  (If that sentence confuses you, please see the [[#GECK_Form-ID,_Base-ID,_Ref-ID,_and_Editor-ID|GECK Form-ID, Base-ID, Ref-ID, and Editor-ID]] section again for the distinctions.)
  
 
* Any NPC you define in an ESP will likely suffer from the infamous "mismatched head/body texture" bug (e.g. a head with one skin texture on a body with a different skin texture). Some people think that all you need to do is edit your INI files and you can fix this bug, but while that works for some mods and people, the solution doesn't work for others. If you don't want your NPCs to have mismatched skin textures, and you want it to be done reliably so it works for everyone, you need to define the NPCs in an ESM, period.  Take the time to plan ahead.
 
* Any NPC you define in an ESP will likely suffer from the infamous "mismatched head/body texture" bug (e.g. a head with one skin texture on a body with a different skin texture). Some people think that all you need to do is edit your INI files and you can fix this bug, but while that works for some mods and people, the solution doesn't work for others. If you don't want your NPCs to have mismatched skin textures, and you want it to be done reliably so it works for everyone, you need to define the NPCs in an ESM, period.  Take the time to plan ahead.
Line 2,677: Line 3,443:
 
==== GIMP Posters and Images ====
 
==== GIMP Posters and Images ====
 
* [[Gimp_create_old_weathered_posters_and_other_images|Gimp: create old weathered posters and other images]] Wiki.
 
* [[Gimp_create_old_weathered_posters_and_other_images|Gimp: create old weathered posters and other images]] Wiki.
 +
<span id="HowToSection"></span>
 
==== How to ''do something'' ====
 
==== How to ''do something'' ====
 +
<span id="HowToAddLoadingScreens"></span>
 +
===== How to add '''''Loading Screens''''' =====
 +
: Thanks to '''jessesDRpepper''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">How do you go about adding your own "loading screen" content to the game?  You know: the images behind the "splash screen" that appear as the game or the main menu or while your "save game" file is loading.
 +
 +
In concept they are simple "texture files" saved as DDS images in DXT1 format.  But getting them to be used by the game is not well documented.  Fortunately now there is the mod [https://www.nexusmods.com/newvegas/mods/69078 DIY Load Screens] (by '''DullCandle29'''), an ESP file which, to use it's own words, provides an:
 +
<blockquote>
 +
Empty template to "add" your own load screens. Not a replacer, nor a wallpaper collection. Simple step by step tutorials for how to do things are in the description. Optional example images provided.
 +
This mod will let you "add" (not replace) up to 1,199 additional loadscreens for you to personalize your loading experience.
 +
</blockquote>
 +
</div>
  
 
<span id="Tip-GMSTs"></span>
 
<span id="Tip-GMSTs"></span>
===== How to change '''Game Settings''' aka '''GMSTs''' =====
+
===== How to change '''''Game Settings''' aka '''GMSTs''''' =====
 
: Thanks to '''punchbattle''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
: Thanks to '''punchbattle''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
Line 2,711: Line 3,493:
 
</div>
 
</div>
  
===== How to create a challenge =====
+
<span id="HowToChallenge"></span>
 +
===== How to create '''''a challenge''''' =====
 
* [[How_to_create_a_challenge|How to create a challenge]] Wiki.
 
* [[How_to_create_a_challenge|How to create a challenge]] Wiki.
  
===== How to create a message =====
+
<span id="HowToMessage"></span>
 +
===== How to create '''''a message''''' =====
 
* [[How_to_create_a_message|How to create a message]] Wiki.
 
* [[How_to_create_a_message|How to create a message]] Wiki.
  
===== How to create a perk =====
+
<span id="HowToPerk"></span>
 +
===== How to create '''''a perk''''' =====
 
* [http://youtu.be/BLRFMVQkpFQ GECK Tutorial - Perk (Ability)] Video by '''Seddon4494'''.
 
* [http://youtu.be/BLRFMVQkpFQ GECK Tutorial - Perk (Ability)] Video by '''Seddon4494'''.
 
* [http://youtu.be/62bHp1_PIdk GECK Tutorial - Perk (Entry Point)] Video by '''Seddon4494'''.
 
* [http://youtu.be/62bHp1_PIdk GECK Tutorial - Perk (Entry Point)] Video by '''Seddon4494'''.
 
* [[How_to_create_a_perk|How to create a perk]] Wiki article.
 
* [[How_to_create_a_perk|How to create a perk]] Wiki article.
  
===== How to create a Primative ''activators'' ''trigger volumes'' ''multibounds and occlusion planes'' =====
+
<span id="HowToPrimative"></span>
 +
===== How to create a '''''Primative'' - activators, trigger volumes, multibounds, and occlusion planes''' =====
 
* [http://geck.bethsoft.com/index.php?title=Creating_Primitives How to create a Primative (activators, trigger volumes, multibounds, and occlusion planes)] Wiki.
 
* [http://geck.bethsoft.com/index.php?title=Creating_Primitives How to create a Primative (activators, trigger volumes, multibounds, and occlusion planes)] Wiki.
 +
 +
<span id="Tip-InteriorOcclusion"></span>
 +
====== Tip Interior Occlusion problem ======
 +
: Thanks to '''FiftyTify''', '''Radioactivelad''', and '''placeholderthesteam''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following.
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Problem: Everything looks fine in the editor, but in game there's a really weird occlusion issue where the room isn't drawn when looking into it; and when inside only some parts of the room appear depending on where you stand and where you're looking.
 +
 +
This is the result of a feature called a [http://geckwiki.com/index.php?title=Room_Bounds_and_Portal_Basics Room Bound]; It's for performance optimization.
 +
 +
NOTE: You may need to enable the '''GECK''' "View" menu "Show/Hide" option to "show" additional options before you will see the "Portals and Rooms" option, which is usually hidden away.
 +
 +
There's a couple of ways to correct this:
 +
 +
* Resize the existing Room Bound to include the new section of your room. (May not be ideal depending on where it is.)
 +
* Add a new Room Bound for your new Room and attach a Portal between it and the existing Room Bound.
 +
* Regenerate the portals, which handles the occlusion culling via visibility of large proxy cubes. 
 +
 +
It might happen that a "Room Bound" on one side extends slightly into the room in question, and one portal alone is not sufficient.  In this case, placing another portal perpendicular to the troublesome one may fix it.
 +
</div>
  
 
<span id="Tip-TransparentActivators"></span>
 
<span id="Tip-TransparentActivators"></span>
 +
 
====== Tip Transparent Activators ======
 
====== Tip Transparent Activators ======
 
: Thanks to '''EPDGaffney''' and '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
: Thanks to '''EPDGaffney''' and '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
Line 2,743: Line 3,552:
 
</div>
 
</div>
  
=====  How to make a working pipboy icon =====
+
<span id="HowToIcon"></span>
 +
=====  How to make '''''a working pipboy icon''''''' =====
 +
* [http://www.nexusmods.com/newvegas/mods/65589?tab=description FNV Icon Tutorial - How to make icons with Inkscape] PDF and resources by '''ZuTheSkunk'''.  '''Inkscape''' is linked in the [[#Image_Tools|Image Tools]] portion of the [[#Programs_and_Tools|Programs and Tools]] section.
 
* [[How_to_make_a_working_pipboy_icon|How to make a working pipboy icon]] Wiki.
 
* [[How_to_make_a_working_pipboy_icon|How to make a working pipboy icon]] Wiki.
  
Line 2,760: Line 3,571:
 
</div>
 
</div>
  
===== How to Move a Quest NPC =====
+
<span id="HowToMoveNPC"></span>
 +
===== How to '''''Move a Quest NPC''''' =====
 
: Thanks to '''madmongo''' and '''kingbeast88''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
: Thanks to '''madmongo''' and '''kingbeast88''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
Line 2,798: Line 3,610:
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Suppose you want an NPC's "home" to be changeable to a new location.  You can either place different xMarkers at the potential sites, or use a "creature" that is initially "disabled" for your Marker.  Static objects like the default XMarker object cannot be moved, but a "persistent creature" set as a "quest object" can be moved and assigned as a "marker".  Then drop the "marker/creature" in the new "home" cell. "Creature" positions are always updated in the game, whereas static objects are not, so you don't need to use the "enable/disable" trick to update their location.  You then assign a "GoHome" travel AI Package to the marker as it's destination, and another "sandbox behavior" AI Package to let it wander the immediate area of the marker.  See the wiki article [http://geck.technodeep.net/index.php/Bethsoft_Tutorial_NPC_population GECK: Bethsoft Tutorial NPC population].</div>
+
">Suppose you want an NPC's "home" to be changeable to a new location.  You can either place different xMarkers at the potential sites, or use a "creature" that is initially "disabled" for your Marker.  Static objects like the default XMarker object cannot be moved, but a "persistent creature" set as a "quest object" can be moved and assigned as a "marker".  Then drop the "marker/creature" in the new "home" cell. "Creature" positions are always updated in the game, whereas static objects are not, so you don't need to use the "enable/disable" trick to update their location.  You then assign a "GoHome" travel AI Package to the marker as it's destination, and another "sandbox behavior" AI Package to let it wander the immediate area of the marker.  See the wiki article [http://geckwiki.com/index.php?title=Bethsoft_Tutorial_NPC_population GECK: Bethsoft Tutorial NPC population].</div>
  
==== PAINTdotNET ''Normal Maps'' ====
+
<span id="NVSEPlugins"></span>
 +
==== NVSE Plugins ====
 +
Unfortunately there is neither documentation nor tutorials on creating an NVSE Plugin.  The only advice is to use the older, freeware '''IDA 5.0 Disassembler''' by [http://www.hex-rays.com/products/decompiler/ Hex-Rays] for 32-bit executables, which is hosted on the [http://www.scummvm.org/news/20180331/ ScummVM] site, and your knowledge of "C-like" programming languages.  From that page:
 +
<blockquote>
 +
    A recent discussion [Mar 2018] about the most recent IDA Disassembler freeware 7.0 revealed that it no longer supports disassembling older DOS and Windows executables. This is obviously a problem for potential contributors, as well as potential GSoC students wanting to reverse engineer an old adventure game or RPG for their project. The obvious solution is to provide an earlier freeware version that still supports them.
 +
    Consulting with Hex-Rays, they're kindly consented for us to host one of the earlier IDA freeware versions, for those in the future who wish to use it.
 +
</blockquote>
 +
 
 +
==== PAINTdotNET ''Normal Maps'' ====
 
* [http://tesalliance.org/forums/index.php?/tutorials/article/119-graphic-artistry-normal-maps-in-paintnet/ Graphic Artistry: Normal Maps in Paint.Net] Tutorial.
 
* [http://tesalliance.org/forums/index.php?/tutorials/article/119-graphic-artistry-normal-maps-in-paintnet/ Graphic Artistry: Normal Maps in Paint.Net] Tutorial.
  
Line 2,827: Line 3,647:
 
* [http://forums.nexusmods.com/index.php?/topic/274194-tutorial-how-to-create-a-new-radio-station/ GECK Tutorial - How to Create A New Radio Station] by '''DorostheConqueror'''.  Forum post. See [[#TIP-CallingFormat|TIP: Format to call a song]].
 
* [http://forums.nexusmods.com/index.php?/topic/274194-tutorial-how-to-create-a-new-radio-station/ GECK Tutorial - How to Create A New Radio Station] by '''DorostheConqueror'''.  Forum post. See [[#TIP-CallingFormat|TIP: Format to call a song]].
 
* [http://www.freesfx.co.uk/ Free Sound Effects] Web site.
 
* [http://www.freesfx.co.uk/ Free Sound Effects] Web site.
 +
* [http://freesound.org/ FreeSound.org] Web site for sharing 'Creative Commons' licensed sounds (including voices).
 
* [http://great78.archive.org/ The Great 78 Project] Web site.  About 78,000 (and growing) old 78 LP's ranging from 1898 till around some time in the 1950's.  But would-be users need to note the [http://archive.org/about/terms.php Terms of Use] required by the Internet Archive organization.  In short, their material is "free to access" but not particularly "free to distribute", and may be subject to various copyright laws.  Access is granted for scholarship and research purposes only.  It is your responsibility to ensure such legalities are complied with for individual titles.
 
* [http://great78.archive.org/ The Great 78 Project] Web site.  About 78,000 (and growing) old 78 LP's ranging from 1898 till around some time in the 1950's.  But would-be users need to note the [http://archive.org/about/terms.php Terms of Use] required by the Internet Archive organization.  In short, their material is "free to access" but not particularly "free to distribute", and may be subject to various copyright laws.  Access is granted for scholarship and research purposes only.  It is your responsibility to ensure such legalities are complied with for individual titles.
 
* [http://www.nexusmods.com/newvegas/mods/63052/? Silent Voice Generator by Enter_77] Mod.
 
* [http://www.nexusmods.com/newvegas/mods/63052/? Silent Voice Generator by Enter_77] Mod.
Line 2,916: Line 3,737:
 
* '''DorostheConqueror'''s text-based guide is slightly more comprehensive than Seddon's if I recall, but suffers from the same ''mono WAV'' file presumption, and the same adjustments apply.
 
* '''DorostheConqueror'''s text-based guide is slightly more comprehensive than Seddon's if I recall, but suffers from the same ''mono WAV'' file presumption, and the same adjustments apply.
 
* NOTE: Radio stations are similar to dialog in that their ''quests'' must be checkboxed to "start enabled".  If the ''quest'' isn't "active" the ''topics/songs'' will not play.
 
* NOTE: Radio stations are similar to dialog in that their ''quests'' must be checkboxed to "start enabled".  If the ''quest'' isn't "active" the ''topics/songs'' will not play.
</div>
 
  
<span id="Tip-BattleMusic"></span>
+
===== Breaking News Flash =====
 +
: '''WarMachineDD7''' adds the following:
 +
 
 +
: The "Radio New Vegas" quest ('''RadioNewVegas''') keeps track of major events by having the quest for them modify a variable used in the '''RadioNewVegas''' quest. So for example, that quest has a variable called ''bKimballMOD'', and if the quest '''You'll Know It When It Happens (VMQ03)''' results with the Vertibird bomb exploding and killing Kimbal, then the '''VMQ03''' quest will change '''RadioNewVegas'''' ''bKimballMOD'' variable to "1".  Alternatively, if the player uses Jeremy Watson to kill Kimbal by placing C4 in his helmet, the '''VMQ03''' quest will change '''RadioNewVegas'''' ''bKimballMOD'' variable to "5", and so on and so forth for all 5 recognized possibilities for '''VMQ03'''. '''RadioNewVegas''' will use a different news report depending on the value of ''bKimballMOD''.
 +
 
 +
: One of the scripts that ends up changing '''RadioNewVegas''''s ''bKimballMOD'' variable is '''VHDKimballVertibirdScript'''. In other words, the vertibird's script will tell you if a bomb went off and killed Kimball.  (Presumably the other scripts that change it have to do with whoever takes the shot at Kimball or blows him up.)
 +
 
 +
: The same goes for the ''nStory'' variable in the '''RadioNewVegas''' quest. Each specific point in the story's quest moves that variable along for '''RadioNewVegas''' to react to. Those are the only two variables used for news flash tracking according to the '''RadioNewVegasSCRIPT'''.
  
====TIP Replacing Battle Music====
+
: The other way to check on world events is with ''[https://geckwiki.com/index.php?title=Globals Global Variables]''. The result of a quest will have a line there at the end changing a global variable according to the result of a quest, which RadioNewVegas will use to see if the news story will trigger (they all start with "VStoryEvent", like ''VStoryEventMonorailDestroyed'' for example).
: Thanks to '''KadoDragon''' and '''DaemonGrin''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">You need to know what ''audio object'' (in the GECK) to edit in the ''audio tab'' which means you need to know the names of the battle songs you want to replace. All you have to do once you have that information is redirect the ''audio object'' to the '''wav, mp3 or ogg''' file of the new one. Or you can find the '''mp3, wav, ogg''' you want to replace with your own music and just rename yours to the same names of the vanilla files (after backing them up of course); making sure to leave them in the correct directory path(s) in the "Data\sound\" folder path.  Not hard at all.  Really the hardest thing to do with sound is creating the ''intro'' and ''outro'' segments: they are super short and need to blend nicely with the fade-in of the battle music.
 
  
The game combines the ''intros'' and ''outros'' from the '''Data\Sound\fx\mus\bttl''' sub-folder and then plays the music from the appropriate '''Data\Music\''' sub-folder.
+
: You can use those same variables for your own radio station if you don't want to add new ones (in other words, when ''RadioNewVegas.bKimballMOD'' changes to "5", your radio mod can read that and play a different news flash, without having to insert your own variable). And you can also make different scripted events to catch something else happening in the world if you want to make another news flash, so you don't have to do it exactly like they did. The point is that something somewhere will change the variable that your radio mod will use to track the outcome of an event, and your radio will react with a news flash once it changes.
 
</div>
 
</div>
  
<span id="Tip-WeaponFiring"></span>
+
<span id="Tip-NavMeshMultiLevels"></span>
<span id="Tip-DetectionEvents"></span>
+
==== TIP Multi-Level Areas ====
==== TIP TCD and Gunfire Detection Events ====
+
: Thanks to '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
: Thanks to '''punchbattle''' of the "New Vegas Mod Talk" forum for the basis of the following.
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">A really helpful command is called [http://geckwiki.com/index.php/ToggleCombatDebug ToggleCombatDebug (TCD)]. Running it in-game adds graphical elements to combat that help give you a better understanding of what's going on under the hood. For instance, one really helpful thing it does is create "teal colored" bubbles (called '''Detection Events''') to mark sounds made by the player and NPCs. If an NPC is close enough to a '''Detection Event''', they'll "hear it" and begin searching for the enemy it belongs to. This revealed something very ... odd. And bad.  
+
">Try to avoid having one area above another in a single cell. Even if you properly navmesh everything, NPCs can jump through the floor to get from one area to the other.  They can also get stuck halfway through the floor.  Even if you have stairs that connect two areas and everything is navmeshed properly, they will still often go through the floor instead of walking down the stairs.
  
The only part of a gunshot that creates a '''Detection Event''' is the '''projectile''', and ''only at the point of impact''. This means NPCs will completely ignore the sound of the gun going off, and instead choose to wander right into the enemy's crosshairs. Bethesda is infamous for their "less than realistic" stealth systems, but learning about this completely ruined stealth for the author and made them want to fix it.
+
NPCs also don't stay put unless you specifically tell them to stay put. If you leave and then re-enter a cell, they can end up anywhere inside that cell that has a proper navmesh, even if that means going through a wall that they can't possibly go through. Locked doors won't stop them either.
  
There's a function that lets you make your own '''Detection Events'''. It's called (strangely enough) [http://geckwiki.com/index.php/CreateDetectionEvent CreateDetectionEvent].
+
If you need an NPC in a specific spot, put something there and give them an AI package that keeps them there. For example, put a "sit marker" on the floor or a "wall marker" next to the wall and give them a travel package that forces them to it. Or put a chair there and give them a travel package to the chair. Or just put an xMarker on the floor and have them travel to that.
  
An initial idea was to attach a script to a gun, and have it create a '''Detection Event''' at the location of the shooter whenever they pull the trigger. This didn't work for a number of reasons. Instead, using a quest that checks for anyone with a gun doing an attack animation, and casting a '''Detection Event''' spell on them works perfectly!
+
Place a "North" marker in the cell so the NPCs orient themselves in it properly.  Please see the "[[#TIP_Center_On_Cell_COC_Markers|TIP Center On Cell COC Markers]]" and "[[#TIP_Finding_cell_North_in_GECK|TIP Finding cell North in GECK]]" entries under the "Worldspaces" section.  Also see the "[[#TIP_Making_NPCs_move_aka_AI_Packages|TIP Making NPCs move aka AI Packages]]" entry under the "Custom NPCs" section.
 +
</div>
  
For anyone reading this who wants to mess around with '''Detection Events''' as well: Any field that asks you to assign a '''Sound Level''' to a weapon or projectile is actually asking you how big you want your weapon's '''Detection Event''' bubble to be. But remember! Weapons don't actually create '''Detection Events''' when '''''fired''''', despite what the '''GECK''' seems to imply: only upon '''''projectile impact'''''!  The size of each "Sound Level" bubble is controlled by these settings:
+
<span id="Tip-MusicAndDialog"></span>
* iSoundLevelLoud - 100
 
* iSoundLevelNormal - 50
 
* iSoundLevelSilent - 10
 
  
People say that '''Detection Events''' can't be larger than 100, but this isn't true. You can assign values into the thousands, and it still works. Also, 100 is ...very small. (As in 128 [http://geckwiki.com/index.php/Units game units] is the equivalent of the default 6 foot tall NPC actor.)  Makes one wonder if that isn't perhaps a percentage multiplier to the "standard" bubble size; whatever that might be?
+
==== TIP Music and Dialog ====
 +
: Thanks to '''Glenrhee''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you have the problem of your added music won't fade or mute during dialog, probably you have not encoded it correctly.
 +
# The music has to be in '''mono .wav''' format.
 +
# It has to be in a CBR (constant bit rate) of 256 or less. Most audio editing programs let you choose to export it this way.
 +
# It'll sound louder '''out-of-game''' than '''in-game''', so don't lower the volume too much on it.
 +
Now your music should automatically get quieter when in dialog.
 
</div>
 
</div>
  
====TIP Weapon firing sounds====
+
<span id="Tip-LiveStreaming"></span>
: Thanks to '''Scott Clemmons''' of the GameAs "Fallout: New Vegas" forum for the basis of the following:
+
==== TIP Music OFF while Streaming ====
 +
: Thanks to '''TheWeekendSlice''' of the Nexus Fallout "Mod Requests" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">In New Vegas, there are two different 3D shooting sounds for many weapons: A normal shooting sound, and a distant shooting sound. As the distance between you and the shooter increases and the normal shooting sound starts to fade, the distant sound should start taking over while the normal sound continues fading away.
+
">The game studios license music and sometimes sounds for use in their games with a license that covers ONLY the game owner playing the game in private. "Streaming" your gameplay constitutes (in the mind of the music publishers lawyers anyway) a "performance", requiring a separate license. If you want to use copyright music/sounds in your streams/videos you need to purchase a license that will allow you to publicly share that content; when you buy a game YOU DO NOT get such a license and the game studio/publisher DOES NOT pay for a such a license when they pay to include copyright music/sounds in their games.
  
The distant sound has a bit of an echo, so the effect of using this different sound for shots from a large distance is nice.  The distant sound doesn't start playing until the normal shooting sound has stopped playing completely.  So as you get further away the normal shooting sound fades until the gun is almost silent. Then, when the sound is completely gone, the distant sound takes over. Usually, this distant sound is disconcertingly louder than the fading at the end of the closer distance sound!
+
People on '''Twitch''' have gotten copyright strikes for in-game music (for example "'''Alan Wake'''" contains a lot of licensed music: music that is now owned by the game studio) and for in-game sounds (the ambulance sound in '''Grand Theft Auto V''' got people strikes).
  
So what happens? You have someone shooting at you, and the further you get away, the less loud the sound gets. But then when you pass a certain distance, the shooting sound goes from nearly silent to relatively loud again.
+
If you get 3 strikes, your '''Twitch''' channel is banned/closed.
  
Using the 'getdistance player' console command, you can track the distance (measured in game units) between the shooting NPC and yourself. Approaching the 2400 unit distance the gunfire sound is almost silent. Then, upon increasing the distance between yourself and the NPC a little more, the louder distant shooting sound takes it's place.
+
People on '''Twitter''' have gotten a warning or even had their accounts disabled for including copyright protected music in videos embedded in their tweets (the detection on '''Twitter''' works at the millisecond level).
  
In the GECK Weapon record Form there are "attack sound" fields on two different tabs: "Art and Sound", and "Mod Info".
+
'''YouTube''' works differently: you can create a video that contains music/sounds for which you don't own the rights or the license to publicly share them, but then your video will get flagged by the copyright owners and they will get every single cent generated by your video. However, there's a very good chance that your channel won't get banned.
* Art and Sound tab: Unmodified weapon attack sounds.
 
* Mod Info tab: Weapon attack sounds when an appropriate "weapon mod" is used: i.e. "suppressor/silencer".
 
  
Testing showed that adding a "Suppressor/Silencer" "weapon mod" seemed to have no effect on the sound heard in most cases.  Turns out a huge part of this is the specific sound files chosen, and for which of the different fields.  Apparently many mod makers use the same sounds for both tabs (probably not understanding the different roles).
+
The '''Fallout 3/New Vegas/4''' radio music IS NOT LICENSED for public display which means it will get flagged by '''Twitch/YouTube''' and on '''Twitch''' there is a very good chance that your channel will get a strike against it. 3 strikes and your channel is gone.
* The "3D" field's sound "attenuates" (fades) as you move from the point of origin starting at approximately 255 units up to 2400 units distance.
 
* The "Dist" sound is a 3D effect that kicks in approximately at 2400 units up to 8500 units.
 
* The 2D field sound does not "attenuate" (fade) with distance.  This is the "1st person" sound: "right in your ear".
 
  
The following choices illustrate the difference of this effect for a .308 caliber weapon (The 'Gobi Desert Sniper Rifle', using WMX to modify it).  The "CCSP" files chosen are from the [http://www.nexusmods.com/newvegas/mods/52633 Combined Community Sound Pack (CCSP)].  Other choices depend upon the mods installed.
+
This is not '''Twitch''''s fault as they have to comply from a legal perspective with the requirements of the music industry or engage in a very expensive lawsuit on user's behalf for little corporate gain.
 +
 
 +
What '''Twitch''' could do (and so far only '''Facebook Gaming''' and '''TikTok''' have done) is to pay out of pocket themselves for a "performance" music license that would cover as much of the music industry as possible and the license would have to be applicable worldwide as '''Twitch''' streamers and viewers are from all over the world. However, such a license is MASSIVELY EXPENSIVE so I doubt '''Twitch''' can afford it as they overall generate considerably, MASSIVELY less profit than '''Facebook''' or '''Google'''.
  
"Art and Sound" tab: (Unmodified weapon attack sounds).
+
Oh, and by the way, '''Twitch''' has already issued a statement in which they advised people to not play copyright/licensed music and sounds on stream. They even went so far as to recommend people stream music with the music disabled.
* Attack Sound (3D): "CCSPsniperrifle3d" (there are several choices and all are generally "loud".)
 
* Attack Sound (Dist): "CCSPsniperrifledistant" (this in particular is a more muffled distant sound than other similar options.)
 
* Attack Sound (2D): "CCSPsniperrifle2d" (there are several choices and all are generally "next to you loud".)
 
  
"Mod Info" tab: (Modified weapon attack sounds).
+
This is down to the music industry who have very capable detection bots that immediately detect if your stream contains copyright music/sounds.
* Attack Sound(s): "CCSPsniperriflesilenced3d" (shorter, quieter 3D shot.)
 
* Attack Sound (2D): "WPNRifleAssaultSilencedFire2D" (shorter, quieter 2D shot.)
 
  
Now an unmodified rifle sounds as expected, and one equipped with a silencer is obviously quieter.  The contrast between the fading 3D sound and the "Dist" sound is something the sound file makers will have to calibrate.  But using a more faded "dist" sound will reduce the jarring effect.
+
At the moment the detection works mostly only for VODs ("Video On Demand" recorded videos), but pretty soon the detection will also work for livestreamed content (so the detection will happen while the video is actually being streamed and before a recording of it is saved).
</div>
 
  
=== Navmeshing ===
+
Some studios publicly allow content creation based on their games, some studios issue permissions to content creators, but most studios allow content creation because it's good marketing in spite of the fact that by law one would need to PURCHASE a license for publicly sharing the game. But you would need to check with and obtain written permission from the studio in question in each and every case to legally protect yourself.
(The process is essentially the same between the '''GECK''' and the '''Creation Kit'''.  See also the [[#Worldspace_Creation|Worldspace Creation]] section.)
 
  
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
+
<p style="text-align: left; color: red; background-color:#fff5f5;">While simply disabling the "play music" game option would seem to be sufficient, it only affects the Pipboy radio and does not also disable music played through "radios" or "jukeboxes" scattered throughout the Wasteland. The Fallout 3 thread "[https://forums.nexusmods.com/index.php?/topic/9516493-mod-to-disable-the-radios-that-are-located-in-the-levelsenvironment/ Mod to disable the radios that are located in the levels/environment]" discusses replacing those music files. The effect of various "Fallout.INI" "[Audio]" section "audio", "dialogue", "music", and "radio" settings is not discussed.</p>
* [http://www.creationkit.com/index.php?title=Bethesda_Tutorial_Navmesh Creation Kit Tutorial: Bethesda Navmesh Tutorial] Wiki.  Generally applies to GECK as well.
+
</div>
* [http://www.youtube.com/watch?v=HSb7TY1ai2w Creation Kit Tutorial: Guide to Bethesda Creation Kit - Navmesh: pathing test and finalizing] Video by '''Hellcat5'''.
 
* [http://youtu.be/5JGpfOLiLic Creation Kit Tutorial: How to Navmesh] Video by '''Darkfox127'''. Specific to Skyrim but compatible essentials.
 
* [http://www.youtube.com/watch?v=qKbOLdzC6-k Creation Kit Tutorial: Linking Cells] Video by '''Darkfox127'''.
 
* [http://geck.bethsoft.com/index.php?title=Bethsoft_Tutorial_Navmesh GECK: Bethsoft Navmesh Tutorial] Wiki.
 
* [http://www.youtube.com/watch?v=q2pZmWgJ0FE&feature=youtu.be GECK: How to edit pre-existing nav-meshs for an exterior worldspace GECK] Video by '''001cf73'''.
 
* [http://www.youtube.com/watch?v=2Vqjwa1fKI4 GECK: NavMesh Tutorial] Video by '''Illusive Man'''.
 
* [http://www.youtube.com/watch?v=8F1A-MPu3gY GECK: NavMesh Tutorial] Video by '''Staring@MyKeyboard'''.
 
* [http://www.nexusmods.com/newvegas/mods/62041/? Navmesh Fixes and Improvements] Mod by '''sandbox6'''.
 
* [http://www.youtube.com/watch?v=QApfS9NRYPY NavMesh Tutorial: Stairs] Video by '''Staring@MyKeyboard'''.
 
* [http://www.creationkit.com/index.php?title=TES5Edit_Documentation TES5Edit: Documentation] Wiki.
 
* [http://www.youtube.com/watch?v=Q-ZQtgveKaM TES5Edit: Fixing Deleted Navmesh with TES5edit] Video by '''soupdragon'''.
 
  
<span id="Tip-NavmeshBug"></span>
+
==== TIP Random Multiple Sounds ====
====TIP Bug extending NavMesh====
+
: Thanks to '''KICHo666''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">There's a massive bug that has a 'cult following' of sorts, in that it doesn't seem to be discussed quite so often as most of the other fundamentals of modding, but when you do find a discussion about it, there is an unmistakable fire at work, and it burns with unmatched vitriol.
+
">Normally you select the specific ".wav" file you want to play in the "new sound" editing window, but what about when you want the game to pick a random file from several possible sounds, such as for when repairing a weapon?
  
It seems that if your plug-in is not a "master file" (.ESM), there's only so much you can do with navmeshes before the game just can't take it and pathing simply breaks.
+
Just select the ''folder'' where the desired sounds reside.  The engine will handle the random file selection process automatically for you.
 +
</div>
  
In my case, I had an interior cell basement with a number of roaches, and they had a very specific 'setpiece' AI.  It all worked perfectly.  Then I built the rest of the area and it still worked.  Finally, when I navmeshed just the adjacent room (extending the same navmesh), I incurred a fully reproducible form of this bug (which takes many forms, though this is my only first-hand experience): everything in the entire space works 100% perfectly -- until I load my save and test it again.  That's right, everything; and the amount of intense scripting and 'scenes' occurring here is extraordinary.  But if anything causes the navmesh to be re-encountered again after any attempt to resume the same game session from a previous save point (load my current save, quit to the main menu and then load my save, load another save, or anything that doesn't involve closing the application and relaunching the ".EXE"), the roaches will just idle there, or sometimes run full-speed into the wall or door perpetually and never get where their package is meant to bring them.  Sometimes they'll even teleport as they idle, gradually materialising closer to the Package Target but not quite getting there.  Leaving and returning to the room without loading a save game appears to work fine.
+
<span id="Tip-BattleMusic"></span>
  
So, I found some information on my trusty Google machine, and decided to try my file as an ".ESM". Flawless results every time.  So try that. Just make sure you back up your file.  ".ESP to .ESM" conversions have a bit of quirkiness unless you understand the "rules" pertaining to them(See [[#Tip-ESMOnly|TIP: When can you use an ESM only mod?]].)
+
====TIP Replacing Battle Music====
 +
: Thanks to '''KadoDragon''' and '''DaemonGrin''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">You need to know what ''audio object'' (in the GECK) to edit in the ''audio tab'' which means you need to know the names of the battle songs you want to replace. All you have to do once you have that information is redirect the ''audio object'' to the '''wav, mp3 or ogg''' file of the new one. Or you can find the '''mp3, wav, ogg''' you want to replace with your own music and just rename yours to the same names of the vanilla files (after backing them up of course); making sure to leave them in the correct directory path(s) in the "Data\sound\" folder path.  Not hard at allReally the hardest thing to do with sound is creating the ''intro'' and ''outro'' segments: they are super short and need to blend nicely with the fade-in of the battle music.
  
Making an ESP file into an ESM can solve some problems with spawning actors appearing "jammed up" in a particular spot instead of where you placed them.
+
The game combines the ''intros'' and ''outros'' from the '''Data\Sound\fx\mus\bttl''' sub-folder and then plays the music from the appropriate '''Data\Music\''' sub-folder.
 +
</div>
  
Toggling "ArchiveInvalidation" seems to sometimes clear up an AI package acting buggy when making changes to your navmesh.  However, this will not satisfactorily resolve the problem for your users.
+
<span id="Tip-WeaponFiring"></span>
 
+
<span id="Tip-DetectionEvents"></span>
<div style="margin:0px 10px 10px 10px;border:1px solid #00C600;color: lightgray; background-color:#424242;padding:3px;
+
==== TIP TCD and Gunfire Detection Events ====
 +
: Thanks to '''punchbattle''' of the "New Vegas Mod Talk" forum for the basis of the following.
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">ONAM records are special records created that allow Master files to communicate with one-another when references need to be passed. '''xEdit''' ensures that as part of the "Plugin to Master" conversion process, these ONAM records are built and correctly ordered. This is why it is better to make the "Plugin to Master" conversion using '''xEdit'''. See the [http://www.creationkit.com/index.php?title=TES5Edit_Documentation TES5Edit Documentation] section on "Converting a Plugin into a Master".
+
">A really helpful command is called [http://geckwiki.com/index.php/ToggleCombatDebug ToggleCombatDebug (TCD)]. Running it in-game adds graphical elements to combat that help give you a better understanding of what's going on under the hood. For instance, one really helpful thing it does is create "teal colored" bubbles (called '''Detection Events''') to mark sounds made by the player and NPCs. If an NPC is close enough to a '''Detection Event''', they'll "hear it" and begin searching for the enemy it belongs to. This revealed something very ... odd. And bad.  
  
Summary from a Skyrim discussion:<br>
+
The only part of a gunshot that creates a '''Detection Event''' is the '''projectile''', and ''only at the point of impact''. This means NPCs will completely ignore the sound of the gun going off, and instead choose to wander right into the enemy's crosshairs. Bethesda is infamous for their "less than realistic" stealth systems, but learning about this completely ruined stealth for the author and made them want to fix it.
Basically when an ESP plugin wants to change something in the base game, it either adds a new object, or has an object that shares it's ID with something in one of it's master files. Since the ID is the same as the one in the master, only the one loaded last is used. This is called an '''override'''.
 
  
ESMs cannot normally do '''overrides'''. If they add something that shares the same FormID, you get a collision error. EXCEPT if you have what's known as an ONAM record. Basically this is a small sub-record in the header of the file that tells the game engine: "This ID is overwritten in this file".
+
There's a function that lets you make your own '''Detection Events'''. It's called (strangely enough) [http://geckwiki.com/index.php/CreateDetectionEvent CreateDetectionEvent].
  
Although the CK won't add an ONAM list [but FNVEdit's "MasterUpdate" function will -Editor], you can still ESM'ify by changing the extension to ESM, opening as "Active", then saving. There's no guarantee it'll fix anything w/o an ONAM list though.
+
An initial idea was to attach a script to a gun, and have it create a '''Detection Event''' at the location of the shooter whenever they pull the trigger. This didn't work for a number of reasons. Instead, using a quest that checks for anyone with a gun doing an attack animation, and casting a '''Detection Event''' spell on them works perfectly!
  
The ONAM lists seem to help the engine's object permanence when an ESM overrides its master(s) cell children, ensuring the overrides A) work properly and B) aren't forgotten when they unload. It's a TES4 (header) subrecord (ACHR, NAVM, LAND, REFR, PHZD). ThePitt.ESM was the first Beth plugin to get an ONAM list and every applicable Beth ESM since has one (save for one iteration of Update.ESM). Not sure exactly how it works but, in Oblivion, if one moved something from Oblivion.ESM around with another ESM flagged plugin, the ground would vanish in game. This is most likely why '''Oblivion's Shivering Isles''' was merged in and its ESP was empty. Currently [2011], the only way to get an ONAM list is with FO3/FNVEdit.
+
For anyone reading this who wants to mess around with '''Detection Events''' as well: Any field that asks you to assign a '''Sound Level''' to a weapon or projectile is actually asking you how big you want your weapon's '''Detection Event''' bubble to be. But remember! Weapons don't actually create '''Detection Events''' when '''''fired''''', despite what the '''GECK''' seems to imply: only upon '''''projectile impact'''''! The size of each "Sound Level" bubble is controlled by these settings:
 +
* iSoundLevelLoud - 100
 +
* iSoundLevelNormal - 50
 +
* iSoundLevelSilent - 10
  
Note though, ESM's are not 100% immune to navmesh related bugs.
+
People say that '''Detection Events''' can't be larger than 100, but this isn't true. You can assign values into the thousands, and it still works. Also, 100 is ...very small(As in 128 [http://geckwiki.com/index.php/Units game units] is the equivalent of the default 6 foot tall NPC actor.)  Makes one wonder if that isn't perhaps a percentage multiplier to the "standard" bubble size; whatever that might be?
 
 
You cannot slave an ESM to an ESP; only the other way aroundYou can split an existing ESP into an ESM/ESP pair: as long as the items in the ESP are "non-edits" of the new ESM (things that exist only in the ESP and do not edit anything from the ESM: i.e. "all new content"Such ESP items will be beginning with "mod index"/form-id 02 when only those two files are loaded.  It will translate into loaded save games properly.  Any records that go directly into the ESM will be treated as a new mod and reset on first load.</div>
 
 
</div>
 
</div>
  
<span id="Tip-NavmeshQuickly"></span>
+
====TIP Weapon firing sounds====
====TIP Draw Navmesh Quickly====
+
: Thanks to '''Scott Clemmons''' of the GameAs "Fallout: New Vegas" forum for the basis of the following:
: Thanks to '''kingbeast88''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">To quickly draw your extended navmesh boundaries:
+
">In New Vegas, there are two different 3D shooting sounds for many weapons: A normal shooting sound, and a distant shooting sound. As the distance between you and the shooter increases and the normal shooting sound starts to fade, the distant sound should start taking over while the normal sound continues fading away.
* Make your first triangle. (See any of the above tutorials.)
 
* Then hold <Ctrl> and <Right-Click> your mouse at each of the next vertice locations.  The nearest boundary line will automatically redraw to include that vertice.
 
* Press <Tab> when you need to switch sides of the two vertices of the boundary line currently selected to extend in a different direction.
 
</div>
 
  
<span id="Tip-NavMeshBoundaries"></span>
+
The distant sound has a bit of an echo, so the effect of using this different sound for shots from a large distance is nice. The distant sound doesn't start playing until the normal shooting sound has stopped playing completelySo as you get further away the normal shooting sound fades until the gun is almost silent. Then, when the sound is completely gone, the distant sound takes over. Usually, this distant sound is disconcertingly louder than the fading at the end of the closer distance sound!
====TIP Navmesh Boundaries====
 
: Thanks to '''madmongo''' and '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">NPCs will stray slightly outside the bounds of a navmesh, so you don't have to be super-precise in laying down their boundariesIf you're a bit sloppy the NPCs will still usually manage to figure out how to go where they should.
 
  
"Off-screen" NPCs do not require any navmeshing.  An NPC was set to run his script even when the Player wasn't in the area (meaning: unlike the majority of NPCs, his ''No Low-Level Processing'' box was not ticked in the G.E.C.K.) but without any navmeshing.  He acted "funny" when on-screen with the Player, but the game updated his task to "completed" once the Player left the area.
+
So what happens? You have someone shooting at you, and the further you get away, the less loud the sound gets. But then when you pass a certain distance, the shooting sound goes from nearly silent to relatively loud again.
  
If you have a container with items in the area, and the gap between the navmesh and the container is too small, it is at least theoretically possible an NPC in combat might grab a more powerful item from the container. However such instances should be rare.
+
Using the 'getdistance player' console command, you can track the distance (measured in [[Fallout 3/NV Game Units|game units]]) between the shooting NPC and yourself. Approaching the 2400 unit distance the gunfire sound is almost silent. Then, upon increasing the distance between yourself and the NPC a little more, the louder distant shooting sound takes it's place.
</div>
 
  
<span id="Tip-NavMeshExteriors"></span>
+
In the GECK Weapon record Form there are "attack sound" fields on two different tabs: "Art and Sound", and "Mod Info".
====TIP Navmeshing Exterior cells====
+
* Art and Sound tab: Unmodified weapon attack sounds.
: Thanks to '''madmongo''', '''EPDGaffney''', and '''kingbeast88''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
* Mod Info tab: Weapon attack sounds when an appropriate "weapon mod" is used: i.e. "suppressor/silencer".
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">Most tutorials on "navmeshing" are done in interior cells. Which means they don't have to deal with "cell boundaries". However, "exterior navmeshes" DO have to deal with cell boundaries, and this can lead to some confusion.
 
  
Outdoor navmeshes work mostly the same as indoor ones, except that the navmesh path can't cross cell boundariesHowever, when the navmesh boundaries are adjacent at the cell boundaries, NPCs can cross between cells. See the [http://www.youtube.com/watch?v=q2pZmWgJ0FE&feature=youtu.be How to edit pre-existing nav-meshs for an exterior worldspace GECK] Video by '''001cf73''' for the basics.
+
Testing showed that adding a "Suppressor/Silencer" "weapon mod" seemed to have no effect on the sound heard in most cases.  Turns out a huge part of this is the specific sound files chosen, and for which of the different fieldsApparently many mod makers use the same sounds for both tabs (probably not understanding the different roles).
 +
* The "3D" field's sound "attenuates" (fades) as you move from the point of origin starting at approximately 255 units up to 2400 units distance.
 +
* The "Dist" sound is a 3D effect that kicks in approximately at 2400 units up to 8500 units.
 +
* The 2D field sound does not "attenuate" (fade) with distance. This is the "1st person" sound: "right in your ear".
  
When you finalize your outdoor navmesh, it will attempt to link up with the neighboring cell's navmesh. Any line segment along the edge of the navmesh that successfully links to the next cell will turn green. Navmesh vertices (the "node points" the lines align with) will often end up being automatically split by the GECK so that it can match up vertices. If part of the cell border isn't green, then the navmeshes between the two cells in that location aren't linked and NPCs won't cross from one cell to the other properly.
+
The following choices illustrate the difference of this effect for a .308 caliber weapon (The 'Gobi Desert Sniper Rifle', using WMX to modify it). The "CCSP" files chosen are from the [http://www.nexusmods.com/newvegas/mods/52633 Combined Community Sound Pack (CCSP)]. Other choices depend upon the mods installed.
  
You don't have to be exact when lining up vertices on your navmesh, but you have to be reasonably close. If your navmesh triangle edges are too far away from the triangle edges in the next cell, the GECK won't be able to match them up. You don't '''have to''' "match vertex for vertex", but if you '''don't''' "match vertex for vertex", what can often happen is that part of the triangle is too far away vertically (Z-axis) from the triangle in the next cell and the GECK refuses to link it.  (You can just lift a navmesh's vertex a bit up (hold <Z> to lock it to the vertical, or Z-axis) to make sure it's above the ground, and then hit <F> like any other object to snap it to the first piece of collision that's directly below the vertex.  But, watch out that you don't drop your vertex onto a piece of virtually invisible light and assume it's on the ground when it isn't.) So "matching vertex for vertex" will generally give you the best results.
+
"Art and Sound" tab: (Unmodified weapon attack sounds).
 +
* Attack Sound (3D): "CCSPsniperrifle3d" (there are several choices and all are generally "loud".)
 +
* Attack Sound (Dist): "CCSPsniperrifledistant" (this in particular is a more muffled distant sound than other similar options.)
 +
* Attack Sound (2D): "CCSPsniperrifle2d" (there are several choices and all are generally "next to you loud".)
  
If the cell boundary line isn't turning green, delete the navmesh triangles along the cell border and redo them so that the vertices are closer, then finalize your navmesh for that cell again.
+
"Mod Info" tab: (Modified weapon attack sounds).
 +
* Attack Sound(s): "CCSPsniperriflesilenced3d" (shorter, quieter 3D shot.)
 +
* Attack Sound (2D): "WPNRifleAssaultSilencedFire2D" (shorter, quieter 2D shot.)
  
Moving vertices is often not the best way to go about adjusting the navmeshIf you're not careful (or aren't used to 3D modelling or UV-mapping) you can accidentally end up with triangles that have flipped normals and a navmesh for that cell that doesn't work. In which case, you're better off deleting any triangles that go under your addition (e.g. in the referenced video: a house straddling both cells) and then add new triangles to circumscribe the addition (e.g. the house)Remember, any cell that you change the navmesh in needs to be finalized. Just making navmesh triangles isn't enough.
+
Now an unmodified rifle sounds as expected, and one equipped with a silencer is obviously quieterThe contrast between the fading 3D sound and the "Dist" sound is something the sound file makers will have to calibrateBut using a more faded "dist" sound will reduce the jarring effect.
 +
</div>
  
Observations:
+
=== Navmeshing ===
* Make sure to check your navmesh work from all different angles (that is: rotate it) to be certain it really is the shape you think it is.
+
(The process is essentially the same between the '''GECK''' and the '''Creation Kit'''.  See also the [[#Worldspace_Creation|Worldspace Creation]] section.)
  
* Apparently there is a '''check cover edges''' button which needs to be pressed before pressing '''finalize''' in all cells affected. So as long as you have no warnings, and have your vertex Z-axis lined up close with your triangle edges touching each other, this will most of the time create a new cell boundary (green) line.
+
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
+
* [http://www.creationkit.com/index.php?title=Bethesda_Tutorial_Navmesh Creation Kit Tutorial: Bethesda Navmesh Tutorial] Wiki.  Generally applies to GECK as well.
: You can occasionally create this "green line" where no boundary was before by using only '''finalize''', but this doesn't seem to be the case when you delete them or make edits that remove the "green line".
+
* [http://www.youtube.com/watch?v=HSb7TY1ai2w Creation Kit Tutorial: Guide to Bethesda Creation Kit - Navmesh: pathing test and finalizing] Video by '''Hellcat5'''.
 
+
* [http://youtu.be/5JGpfOLiLic Creation Kit Tutorial: How to Navmesh] Video by '''Darkfox127'''. Specific to Skyrim but compatible essentials.
* Keep your navmesh "triangle" count to 500 or less, at least in exterior cells. If you exceed that limt, the engine does "weird things" like spawn items randomly that otherwise are not placed there.
+
* [http://www.youtube.com/watch?v=qKbOLdzC6-k Creation Kit Tutorial: Linking Cells] Video by '''Darkfox127'''.
 +
* [http://geck.bethsoft.com/index.php?title=Bethsoft_Tutorial_Navmesh GECK: Bethsoft Navmesh Tutorial] Wiki.
 +
* [http://www.youtube.com/watch?v=q2pZmWgJ0FE&feature=youtu.be GECK: How to edit pre-existing nav-meshs for an exterior worldspace GECK] Video by '''001cf73'''.
 +
* [http://www.youtube.com/watch?v=2Vqjwa1fKI4 GECK: NavMesh Tutorial] Video by '''Illusive Man'''.
 +
* [http://www.youtube.com/watch?v=8F1A-MPu3gY GECK: NavMesh Tutorial] Video by '''Staring@MyKeyboard'''.
 +
* [http://www.nexusmods.com/newvegas/mods/62041/? Navmesh Fixes and Improvements] Mod by '''sandbox6'''.
 +
* [http://www.youtube.com/watch?v=QApfS9NRYPY NavMesh Tutorial: Stairs] Video by '''Staring@MyKeyboard'''.
 +
* [http://www.creationkit.com/index.php?title=TES5Edit_Documentation TES5Edit: Documentation] Wiki.
 +
* [http://www.youtube.com/watch?v=Q-ZQtgveKaM TES5Edit: Fixing Deleted Navmesh with TES5edit] Video by '''soupdragon'''.
  
* You don't need to draw ''cover'', really.  That gets done by the button designated for it on the navmesh ''toolbar''.  Never had a problem with the way the GECK does it automatically.  Haven't really pushed its limits or anything, so don't know how it would do in a really complex room, but think the average navmesh would have adequate cover drawn by the GECK with no input from you afterwards.
+
<span id="Tip-NavmeshBug"></span>
 
+
====TIP Bug extending NavMesh====
* You need to navmesh places where AI will go, but don't need to bother with it anywhere that can't have AI in it.  However, remember that the player can have companions, and they will need a navmesh.  You can of course force the player not to bring companions in your mod, but you should probably have a good reason for it.
+
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
* Note that nothing bad will happen if your companions can't come with you.  They'll just wait where the navmesh ends and then teleport to you when you exit the cell if need be.
 
</div>
 
 
 
<span id="Tip-NavmeshPortal"></span>
 
====TIP Navmesh marker for Portal relocates====
 
: Thanks to '''chucksteel''' and '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">After editing a navmesh, the green triangle that indicates a portal appears ... not under the door, nor near the marker, but in some completely random locationWhat gives? Is this a problem?
+
">There's a massive bug that has a 'cult following' of sorts, in that it doesn't seem to be discussed quite so often as most of the other fundamentals of modding, but when you do find a discussion about it, there is an unmistakable fire at work, and it burns with unmatched vitriol.
 +
 
 +
It seems that if your plug-in is not a "master file" (.ESM), there's only so much you can do with navmeshes before the game just can't take it and pathing simply breaks.
 +
 
 +
In my case, I had an interior cell basement with a number of roaches, and they had a very specific 'setpiece' AI. It all worked perfectly. Then I built the rest of the area and it still worked.  Finally, when I navmeshed just the adjacent room (extending the same navmesh), I incurred a fully reproducible form of this bug (which takes many forms, though this is my only first-hand experience): everything in the entire space works 100% perfectly -- until I load my save and test it again.  That's right, everything; and the amount of intense scripting and 'scenes' occurring here is extraordinary.  But if anything causes the navmesh to be re-encountered again after any attempt to resume the same game session from a previous save point (load my current save, quit to the main menu and then load my save, load another save, or anything that doesn't involve closing the application and relaunching the ".EXE"), the roaches will just idle there, or sometimes run full-speed into the wall or door perpetually and never get where their package is meant to bring themSometimes they'll even teleport as they idle, gradually materialising closer to the Package Target but not quite getting there. Leaving and returning to the room without loading a save game appears to work fine.
  
Nothing is wrong.  The portal will function properly, allowing followers and NPCs to use it correctlyThe "green triangle" only confirms the connection and does not need to always be under the portal marker itselfThe player and NPC's will always spawn properly on the portal marker regardless of where the navmesh green triangle is located.
+
So, I found some information on my trusty Google machine, and decided to try my file as an ".ESM".  Flawless results every time.  So try that.  Just make sure you back up your file.  ".ESP to .ESM" conversions have a bit of quirkiness unless you understand the "rules" pertaining to them(See [[#Tip-ESMOnly|TIP: When can you use an ESM only mod?]].)
  
This seems to only happen if you create a navmesh, save the mod, then edit it later.  If it really bugs you, then you can delete the entire navmesh for the cell and re-do it. No big deal for a small simple cell, but probably not something you want to do for a very complex navmesh in a large cell.
+
Making an ESP file into an ESM can solve some problems with spawning actors appearing "jammed up" in a particular spot instead of where you placed them.
</div>
 
  
=== NifSkope Mesh Editor ===
+
Toggling "ArchiveInvalidation" seems to sometimes clear up an AI package acting buggy when making changes to your navmeshHowever, this will not satisfactorily resolve the problem for your users.
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
* [http://www.youtube.com/watch?v=BvitRKEa1X0 How To Rotate A Mesh In Nifskope] 2 minute video by Zylice Liddell.
 
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: NifSkope Texture Paths by Jokerine] Mod PDF.
 
* [http://www.nexusmods.com/newvegas/mods/64746 NIF tangents and binormals updater] Command line tool to batch update tangents/binormals.
 
* [http://www.nexusmods.com/newvegas/mods/56203/? Material and Texture Animations in NifSkope - Tutorial] PDF/DOC download.
 
* [http://niftools.sourceforge.net/wiki/NifSkope NifSkope Wiki] Wiki.
 
* [http://forums.nexusmods.com/index.php?/topic/984792-tutorial-working-with-the-nicontrollermanager/ NifSkope: Working with the NiControllerManager] Forum ThreadAlternate images available [http://www.mediafire.com/file/p0srsyrfuaszevp/Tutorial.zip here].
 
* [http://www.nexusmods.com/newvegas/mods/45444/? Tutorials on Screenshots, NifSkope, Outfit creation and Posing by jonas opines] Mod.
 
* [http://www.nexusmods.com/newvegas/mods/63770/? Nifskope Testing Skeleton] by clanky4. Mod for testing animations in NifSkope only.
 
  
<span id="Tip-AttachLightSource"></span>
+
<div style="margin:0px 10px 10px 10px;border:1px solid #00C600;color: lightgray; background-color:#424242;padding:3px;
==== TIP Attaching a light source to a mesh ====
 
: Thanks to '''MonsterMonkey''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">So, you have an existing mesh that needs a light source added to illuminate only a portion of it. How do you go about it?
+
">ONAM records are special records created that allow Master files to communicate with one-another when references need to be passed. '''xEdit''' ensures that as part of the "Plugin to Master" conversion process, these ONAM records are built and correctly ordered. This is why it is better to make the "Plugin to Master" conversion using '''xEdit'''.  See the [http://www.creationkit.com/index.php?title=TES5Edit_Documentation TES5Edit Documentation] section on "Converting a Plugin into a Master".
* Open your mesh in '''NifSkope''', and attach a "new node > ''bsvaluenode''" wher you want the light source.
+
 
* Now you'll have to open the '''GECK''', and find ''addonNodes''.
+
Summary from a Skyrim discussion:<br>
: AddonNodes are particle meshes that can use a light source.  You can even create one in the '''GECK''' and make it use a source light.
+
Basically when an ESP plugin wants to change something in the base game, it either adds a new object, or has an object that shares it's ID with something in one of it's master files. Since the ID is the same as the one in the master, only the one loaded last is used. This is called an '''override'''.
* ''AddonNodes'' have an '''Index number'''. You 'll need this '''Index number''' in '''NifSkope''', so make note of the one you want.
+
 
* Now go to '''NifSkope''', and in the ''bsvaluenode'' entry you created, go to the "value" line and write the related '''Index number''' of the ''AddonNode'' you want the mesh to use.
+
ESMs cannot normally do '''overrides'''. If they add something that shares the same FormID, you get a collision error. EXCEPT if you have what's known as an ONAM record. Basically this is a small sub-record in the header of the file that tells the game engine: "This ID is overwritten in this file".
The thread [http://forums.nexusmods.com/index.php?/topic/4522240-attaching-light-to-mesh/ Attaching light to mesh?] has an example of the before and after effect on an image.
+
 
 +
Although the CK won't add an ONAM list [but FNVEdit's "MasterUpdate" function will -Editor], you can still ESM'ify by changing the extension to ESM, opening as "Active", then saving. There's no guarantee it'll fix anything w/o an ONAM list though.
 +
 
 +
The ONAM lists seem to help the engine's object permanence when an ESM overrides its master(s) cell children, ensuring the overrides A) work properly and B) aren't forgotten when they unload. It's a TES4 (header) subrecord (ACHR, NAVM, LAND, REFR, PHZD). ThePitt.ESM was the first Beth plugin to get an ONAM list and every applicable Beth ESM since has one (save for one iteration of Update.ESM). Not sure exactly how it works but, in Oblivion, if one moved something from Oblivion.ESM around with another ESM flagged plugin, the ground would vanish in game. This is most likely why '''Oblivion's Shivering Isles''' was merged in and its ESP was empty.  Currently [2011], the only way to get an ONAM list is with FO3/FNVEdit.
 +
 
 +
Note though, ESM's are not 100% immune to navmesh related bugs.
 +
 
 +
You cannot slave an ESM to an ESP; only the other way around.  You can split an existing ESP into an ESM/ESP pair: as long as the items in the ESP are "non-edits" of the new ESM (things that exist only in the ESP and do not edit anything from the ESM: i.e. "all new content")  Such ESP items will be beginning with "mod index"/form-id 02 when only those two files are loaded.  It will translate into loaded save games properly.  Any records that go directly into the ESM will be treated as a new mod and reset on first load.</div>
 
</div>
 
</div>
  
<span id="Tip-ConvertNIFHeader"></span>
+
<span id="Tip-NavmeshQuickly"></span>
==== TIP Convert NIF header ====
+
====TIP Draw Navmesh Quickly====
: Thanks to '''pixelhate''' of the Nexus Fallout "New Vegas Mod Troubleshooting" forum for the basis of the following:
+
: Thanks to '''kingbeast88''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">When you want to change the header of your custom mesh from "NiNode" to "BSFadenode" (because it prevents your object from moving, etc.) or vice versa:
+
">To quickly draw your extended navmesh boundaries:
Select the '''NiNode''', <Right Click>, select "Block | Convert", and choose your node type.  
+
* Make your first triangle.  (See any of the above tutorials.)
 +
* Then hold <Ctrl> and <Right-Click> your mouse at each of the next vertice locations.  The nearest boundary line will automatically redraw to include that vertice.
 +
* Press <Tab> when you need to switch sides of the two vertices of the boundary line currently selected to extend in a different direction.
 
</div>
 
</div>
  
<span id="Tip-ModelMashups"></span>
+
<span id="Tip-NavMeshBoundaries"></span>
==== TIP Merging parts from different source files ====
+
====TIP Navmesh Boundaries====
: Thanks to '''madmongo''' and '''M48A5''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
+
: Thanks to '''madmongo''' and '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Sometimes you want to "mash up" parts of mesh (and texture) files from different sourcesYou might think to export parts of models from the source files as "*.OBJ" files, and then import them into your "*.NIF" files as "*.OBJ" in NifSkope.  This is not how this is usually done, and will generally produce "array Shader Textures are invalid" and "device position incorrect after block number ##" errors.  These are caused by missing ''BSShaderPPLightingProperty'' entries, and thus no ''BSShaderTextureSet''.
+
">NPCs will stray slightly outside the bounds of a navmesh, so you don't have to be super-precise in laying down their boundariesIf you're a bit sloppy the NPCs will still usually manage to figure out how to go where they should.
  
Generally speaking: "*.OBJ" files are for use importing into Blender, and should be exported as "*.NIF" files to work in NifSkopeBlender is a much better tool for this sort of thing.
+
"Off-screen" NPCs do not require any navmeshing. An NPC was set to run his script even when the Player wasn't in the area (meaning: unlike the majority of NPCs, his ''No Low-Level Processing'' box was not ticked in the G.E.C.K.) but without any navmeshingHe acted "funny" when on-screen with the Player, but the game updated his task to "completed" once the Player left the area.
  
When moving '''parts''' of meshes between "*.NIF" files in NifSkope, use the "Copy Branch" and "Paste Branch" functions.
+
If you have a container with items in the area, and the gap between the navmesh and the container is too small, it is at least theoretically possible an NPC in combat might grab a more powerful item from the containerHowever such instances should be rare.
 
 
'''NifSkope''' does not display ''textures'' from BSAs by default.  You have to point '''NifSkope''' to the BSA files location in it's settings.  In the '''NifSkope''' UI, left click "Options".  In the drop down menu, choose "Settings | Resources".  In the panel that opens, you will have to add the path to the BSAs. It should be the complete path, starting with the drive letter.  When you open "Resources" you should see a complete path to (and including) the "Data" folder.  If not, click on "Auto detect game path".
 
 
 
When using ''custom textures'', you need to set the texture ''relative path'' to the '''loose file''' in the NIF with '''NifSkope'''This is done under ''BSShaderPPLightingProperty/BSShaderTextureSet''.  ("Relative" meaning the path starts BELOW the game "Data" folder: as in "textures\<some sub-folder>\<some filename>.dds".  No drive letters or any path above "textures\"; without even "Data\".  See the wiki article [[How_to_fix_hard-coded_texture_paths_in_NIF_files|How to fix hard-coded texture paths in NIF files]] for specific instructions.)
 
 
</div>
 
</div>
  
<span id="Tip-ModelLighting"></span>
+
<span id="Tip-NavMeshExteriors"></span>
 
+
====TIP Navmeshing Exterior cells====
====TIP Model Lighting====
+
: Thanks to '''madmongo''', '''EPDGaffney''', and '''kingbeast88''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
: Thanks to '''EPDGaffney''' and '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Q: When you change the texture of an item with the GECK it always ends up different then the ground texture even if it's using the same textureWhy?  Example: railroad tracks roadbed and ballast is always different than the surrounding terrain.
+
">Most tutorials on "navmeshing" are done in interior cells.  Which means they don't have to deal with "cell boundaries".  However, "exterior navmeshes" DO have to deal with cell boundaries, and this can lead to some confusion.
 +
 
 +
Outdoor navmeshes work mostly the same as indoor ones, except that the navmesh path can't cross cell boundaries.  However, when the navmesh boundaries are adjacent at the cell boundaries, NPCs can cross between cells.  See the [http://www.youtube.com/watch?v=q2pZmWgJ0FE&feature=youtu.be How to edit pre-existing nav-meshs for an exterior worldspace GECK] Video by '''001cf73''' for the basics.
 +
 
 +
When you finalize your outdoor navmesh, it will attempt to link up with the neighboring cell's navmesh. Any line segment along the edge of the navmesh that successfully links to the next cell will turn green. Navmesh vertices (the "node points" the lines align with) will often end up being automatically split by the GECK so that it can match up vertices. If part of the cell border isn't green, then the navmeshes between the two cells in that location aren't linked and NPCs won't cross from one cell to the other properly.
 +
 
 +
You don't have to be exact when lining up vertices on your navmesh, but you have to be reasonably close. If your navmesh triangle edges are too far away from the triangle edges in the next cell, the GECK won't be able to match them up. You don't '''have to''' "match vertex for vertex", but if you '''don't''' "match vertex for vertex", what can often happen is that part of the triangle is too far away vertically (Z-axis) from the triangle in the next cell and the GECK refuses to link it.  (You can just lift a navmesh's vertex a bit up (hold <Z> to lock it to the vertical, or Z-axis) to make sure it's above the ground, and then hit <F> like any other object to snap it to the first piece of collision that's directly below the vertexBut, watch out that you don't drop your vertex onto a piece of virtually invisible light and assume it's on the ground when it isn't.) So "matching vertex for vertex" will generally give you the best results.
  
A: The model determines the lighting in this game.  I'm asking, in the vanilla game was it seamless?  I don't mean the 2D ".dds" texture file; I'm asking, did it look seamless in-game?  [No, it doesn't.]
+
If the cell boundary line isn't turning green, delete the navmesh triangles along the cell border and redo them so that the vertices are closer, then finalize your navmesh for that cell again.
  
(For any unfamiliar graphics related terms, please see the [http://web.archive.org/web/20170713081056/http://www.darkcreations.org/testg/wiki/Glossary TESTG Glossary].)
+
Moving vertices is often not the best way to go about adjusting the navmesh.  If you're not careful (or aren't used to 3D modelling or UV-mapping) you can accidentally end up with triangles that have flipped normals and a navmesh for that cell that doesn't work. In which case, you're better off deleting any triangles that go under your addition (e.g. in the referenced video: a house straddling both cells) and then add new triangles to circumscribe the addition (e.g. the house). Remember, any cell that you change the navmesh in needs to be finalized. Just making navmesh triangles isn't enough.
  
So, the way it works is an object is lit dependent upon several factors.  The first is the ''normal map'' and its ''alpha channel''.  Obviously, you're telling me these are all the same texture, so that's not the problem here but it is certainly something to be aware of.  The ''normal map'' behaves as you expect, and its ''alpha channel'' is used as the ''specular map''.  Generally, you want that ''specular map'' to be mostly dark, down to drawing distinctly different effects in-game from a portion of a ''specular map'' that is 5% bright and 8% bright, for example (that is, 0% is pitch black, and bringing the RGB values all up 5% from 0 is 5%).
+
Observations:
 +
* Make sure to check your navmesh work from all different angles (that is: rotate it) to be certain it really is the shape you think it is.
  
Now, be aware that the ''specular map'' is manipulated in '''NifSkope''' but its effects are completely ignored visually until you see it in the '''GECK''' or the game, though the '''GECK''' usually doesn't display it accurately to the way it will look in-game.
+
* Apparently there is a '''check cover edges''' button which needs to be pressed before pressing '''finalize''' in all cells affected. So as long as you have no warnings, and have your vertex Z-axis lined up close with your triangle edges touching each other, this will most of the time create a new cell boundary (green) line.
  
So, now that the basics are out of the way, the rest of the lighting stuff is determined per model in '''NifSkope'''.  Open your train tracks model in '''NifSkope''' (located in ''Meshes\dungeons\metro\exterior''), and click on the dirt portion: [[File:EPDGaffney_TrainTracks_Fig01.png|thumbnail|100px|TrainTracks_Fig-01]](See '''TrainTracks_Fig-01'''.  {{Thumbnail_enlargement_message}})
+
: You can occasionally create this "green line" where no boundary was before by using only '''finalize''', but this doesn't seem to be the case when you delete them or make edits that remove the "green line".
<br>
 
This tells you quickly and easily which ''NiTriStrips'' it is.  Expand that and go to the ''NiMaterialProperty'' node that is attached to the ''NiTriStrips'' for the dirt: [[File:EPDGaffney_TrainTracks_Fig02.png|thumbnail|100px|TrainTracks_Fig-02]] (See '''TrainTracks_Fig-02'''.  {{Thumbnail_enlargement_message}})
 
<br>
 
The ''Specular'' and ''Emissive'' both have an effect but it's really the ''Glossiness'' entry that's likely to have the effect you're looking for.  It will take a good bit of trial and error.
 
<br>
 
Other things that can have an effect are the ''Shader'' flags: [[File:EPDGaffney_TrainTracks_Fig03.png|thumbnail|100px|TrainTracks_Fig-03]] (See '''TrainTracks_Fig-03'''.  {{Thumbnail_enlargement_message}})
 
<br>
 
and though not in this case (unless the terrain model has it), other texture slots besides the ''diffuse'' and ''normal maps'': [[File:EPDGaffney_TrainTracks_Fig04.png|thumbnail|100px|TrainTracks_Fig-04]] (See '''TrainTracks_Fig-04'''.  {{Thumbnail_enlargement_message}})
 
<br>
 
The ''NiTristripsData'' can also have vertices colored (used for shading purpose). If that's the case, that part will always look darker no matter what changes are made in the previous settings.
 
  
However, looking at images of the vanilla [railroad track] graphics, I think they just did their ''UV maps'' in a way that makes the textures look more cohesive just where they meet, perhaps, but they definitely aren't seamless, at least in the screenshots I'm seeing.
+
* Keep your navmesh "triangle" count to 500 or less, at least in exterior cells.  If you exceed that limt, the engine does "weird things" like spawn items randomly that otherwise are not placed there.
  
: '''Radioactivelad''' and '''KiCHo666''' add:
+
* You don't need to draw ''cover'', reallyThat gets done by the button designated for it on the navmesh ''toolbar''. Never had a problem with the way the GECK does it automatically.  Haven't really pushed its limits or anything, so don't know how it would do in a really complex room, but think the average navmesh would have adequate cover drawn by the GECK with no input from you afterwards.
The engine only supports a limited number of visible light sources on a given piece of landscape, and that includes the Pipboy light. Static objects can handle more, but even they are pretty limitedAnother thing to consider is ''light radius'' overlapping. From experience, one object can have up to 3 lights affecting it with the ''light radius'' overlapping. If a 4th one is introduced, then the 4th light will simply not affect that object or one of the previous 3 lights will stop working. The 3 light limit seems to be standard for the forward type of rendering that FNV uses.
 
</div>
 
  
<span id="Tip-RotateMesh"></span>
+
* You need to navmesh places where AI will go, but don't need to bother with it anywhere that can't have AI in it.  However, remember that the player can have companions, and they will need a navmesh.  You can of course force the player not to bring companions in your mod, but you should probably have a good reason for it.
  
====TIP Rotate Mesh====
+
* Note that nothing bad will happen if your companions can't come with you. They'll just wait where the navmesh ends and then teleport to you when you exit the cell if need be.
: Summary from [http://www.youtube.com/watch?v=BvitRKEa1X0 How To Rotate A Mesh In Nifskope]
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520; color: lightgray; background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">
 
:* < Right-click > the object in the '''NifSkope''' "viewport", then "transform | edit | R (rotate in +/- 1-180 degrees)".
 
:* After you have it positioned correctly: < Right-click >, "transform | apply".  
 
 
</div>
 
</div>
  
<span id="Tip-ShinyLines"></span>
+
<span id="Tip-NavmeshPortal"></span>
==== TIP Shiny lines in exported NIF normal map ====
+
====TIP Navmesh marker for Portal relocates====
: Thanks to '''TzeHuen''', '''pixelhate''', and '''KiCHo666''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
: Thanks to '''chucksteel''' and '''madmongo''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">The [http://www.nexusmods.com/newvegas/mods/64746 NIF tangents and binormals updater] command line tool does a better job than NifSkope to fix this problem, and can do batch jobsBut it can also be resolved manually in NifSkope by:
+
">After editing a navmesh, the green triangle that indicates a portal appears ... not under the door, nor near the marker, but in some completely random location. What gives?  Is this a problem?
* Make a copy of your mesh for this test.
+
 
* Open the test NIF in NifSkope and select the ''NiTriStrips'',
+
Nothing is wrong.  The portal will function properly, allowing followers and NPCs to use it correctlyThe "green triangle" only confirms the connection and does not need to always be under the portal marker itself.  The player and NPC's will always spawn properly on the portal marker regardless of where the navmesh green triangle is located.
* <right click> and select "Face Normal" then "Smooth Normals".
+
 
: If the shiny lines disappear, then they are  mesh related and probably due to the export settings from your 3D program.
+
This seems to only happen if you create a navmesh, save the mod, then edit it later. If it really bugs you, then you can delete the entire navmesh for the cell and re-do it. No big deal for a small simple cell, but probably not something you want to do for a very complex navmesh in a large cell.
* If that doesn't resolve the problem, then select "update tangent space".
 
 
</div>
 
</div>
  
=== Scripting ===
+
=== NifSkope Mesh Editor ===
Other sections have relevant information to this subject.  The following "Tips" in particular are applicable.
+
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 +
* [http://www.youtube.com/watch?v=BvitRKEa1X0 How To Rotate A Mesh In Nifskope] 2 minute video by Zylice Liddell.
 +
* [http://www.nexusmods.com/newvegas/mods/56009/? Jokerine's Misc Resources Tutorials and Novac Bungalow: NifSkope Texture Paths by Jokerine] Mod PDF.
 +
* [http://www.nexusmods.com/newvegas/mods/64746 NIF tangents and binormals updater] Command line tool to batch update tangents/binormals.
 +
* [http://www.nexusmods.com/newvegas/mods/56203/? Material and Texture Animations in NifSkope - Tutorial] PDF/DOC download.
 +
* [http://niftools.sourceforge.net/wiki/NifSkope NifSkope Wiki] Wiki.
 +
* [http://forums.nexusmods.com/index.php?/topic/984792-tutorial-working-with-the-nicontrollermanager/ NifSkope: Working with the NiControllerManager] Forum ThreadAlternate images available [http://www.mediafire.com/file/p0srsyrfuaszevp/Tutorial.zip here].
 +
* [http://www.nexusmods.com/newvegas/mods/45444/? Tutorials on Screenshots, NifSkope, Outfit creation and Posing by jonas opines] Mod.
 +
* [http://www.nexusmods.com/newvegas/mods/63770/? Nifskope Testing Skeleton] by clanky4. Mod for testing animations in NifSkope only.
  
* See the [[#Custom NPCs|Custom NPCs]] section regarding scripting "AI Packages".
+
<span id="Tip-AttachLightSource"></span>
:* [[#Tip-GetDistance|TIP: AI Packages and Distance.]]
+
==== TIP Attaching a light source to a mesh ====
:* [[#TIP-CompanionWheel|TIP: Companion Wheel.]]
+
: Thanks to '''MonsterMonkey''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
:* [[#Tip-Hostility|TIP: Hostility between NPCs.]]
+
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
:* [[#Tip-NPCMovement|TIP: Making NPCs move (aka "AI Packages").]]
+
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
:* [[#Tip-CompanionPerks|TIP: Perks for Companions.]]
+
background-color:#333333;padding:3px;
:* [[#TIP-AIPackages|TIP: Using AI Packages.]]
+
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
+
">So, you have an existing mesh that needs a light source added to illuminate only a portion of it.  How do you go about it?
* See the [[#Dialogue & Lip-synch|Dialogue & Lip-synch]] section regarding scripting "Dialogue" and "Conversations"
+
* Open your mesh in '''NifSkope''', and attach a "new node > ''bsvaluenode''" where you want the light source.
:* [[#Tip-Translators|TIP: Conversation/Quest system.]]
+
* Now you'll have to open the '''GECK''', and find ''AddonNodes''.
:* [[#TIP-GetSpeaker|TIP: Get the current speaker reference.]]
+
: ''AddonNodes'' are particle meshes that can use a light source.
:* [[#Tip-OCE|TIP: Obsidian Conversation Editor (OCE).]]
+
* ''AddonNodes'' have an '''Index number'''.  You 'll need this '''Index number''' in '''NifSkope''', so make note of the one you want.
:* [[#TIP-RandomNPCcomments|Tip: Random NPC Comments.]]
+
* Now go to '''NifSkope''', and in the ''bsvaluenode'' entry you created, go to the "value" line and write the related '''Index number''' of the ''AddonNode'' you want the mesh to use.
:* [[#Tip-DialogTabs|TIP: Standard Dialog.]]
+
The thread [http://forums.nexusmods.com/index.php?/topic/4522240-attaching-light-to-mesh/ Attaching light to mesh?] has an example of the before and after effect on an image.
 +
</div>
  
Refer back to the section [[#GECK_Form-ID,_Base-ID,_Ref-ID,_and_Editor-ID|GECK Form-ID, Base-ID, Ref-ID, and Editor-ID]] as necessary until the different types of "IDs" become second nature. The distinctions are crucial to getting various script functions to work correctly. They will primarily work with either ''Editor-ID'' or ''Reference-ID'' values.  They seldom work with both, but if so the syntax must be read carefully to determine which type of value is used for each parameter.
+
<span id="TIP-FloatingHead"></span>
 +
==== TIP Body part is floating ====
 +
: Thanks to '''AusAllerWelt''' of the Nexus "New Vegas GECK and Modders" forum for the basis of the folowing:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">This problem is sometimes seen with a "mashup" (such as placing a helmet from one plugin on a head from another). Sometimes you can fix it by "skinning" the body part and leaving the ''scene root'' where it is to have the result appear correctly.
  
Even if you have another favorite text editor, strongly suggest using '''Notepad++''' along with the GECK specific syntax highlighters listed in the [[#Programs_and_Tools|Programs and Tools]] section.  These will catch most syntax errors, saving you a lot of grief.
+
There is a technique that allows a mesh to call for a bone without being skinned. (Details on how this works are "murky", but quite a lot of hats and headgear items use it in the game.)  For this the object needs to have its ''scene root'' in a specific position; or the bone "floats" at a distance from the rest of the body.
  
There are 3 kinds of scripts:
+
There is a bit of information about it in the [[Nifskope:_NiStringExtraData_guide | Nifskope: NiStringExtraData guide]].
* The default when creating one is an ''Object'' script.  Which means this is a script that can be attached to anything in the ''object tree'' of GECK that has a "script" drop down field ... except for ''Quests'' and ''Base Effects''.
+
</div>
* ''Quests'' require you to select the script as a "Quest" type.  They are called (triggered) by various "Quest" conditions.
 
* ''Base Effects'' require you to select the script as an "Effect" type, available when you are on the window with the "Script" drop down list.  Only those type of scripts will show up in the list.
 
  
''Effect'' scripts attach on "Assoc Item" just below "Effect Archetype".  But ''Object'' and ''Quest'' scripts are straight forward on where to attach the script: to "Objects" or "Quests" respectively.
+
<span id="Tip-ConvertNIFHeader"></span>
  
Reference variables must be "defined" and assigned a value before they can be used in a command.  This often occurs in one of the script types that are executed before the one you are looking at in the moment. But don't assume they are: verify if your script won't save.
+
==== TIP Convert NIF header ====
 +
: Thanks to '''pixelhate''' of the Nexus Fallout "New Vegas Mod Troubleshooting" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you want to change the header of your custom mesh from "NiNode" to "BSFadenode" (because it prevents your object from moving, etc.) or vice versa:
 +
Select the '''NiNode''', <Right Click>, select "Block | Convert", and choose your node type.  
 +
</div>
  
So in short: creating a script & saving it (which "compiles" it; turning it into actual code instead of "human readable" instructions) is required for it to then exist. If a script fails to compile, then it won't be saved. Use '''CIPCIS''' to determine if it is a simple syntax error preventing your script from compiling.  But bear in mind '''CIPCIS''' is not aware of "script extender" syntax, so such will produce as error as an unrecognized command.  Otherwise the problem is most likely either using an inappropriate command choice or the wrong type of value for the function in question.
+
<span id="Tip LightingPropertyFlags"></span>
 +
==== TIP Lighting Property Flags ====
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;       /* Internet Explorer 5.5+ */
 +
">The thread [http://forums.nexusmods.com/index.php?/topic/1188259-bslightingshaderproperty-basics/ BSLightingShaderProperty Basics"] has a "quick reference" guide and some links to additional information.
 +
</div>
  
But merely existing in a saved/compiled form means nothing towards having that script tell the game engine what to do.  You must attach it to something (based upon which one of the 3 types it is) to then have the script code interact with the other dynamic game code.
+
<span id="Tip-ModelMashups"></span>
  
* [http://www.nexusmods.com/newvegas/mods/64888/? GECK Extender] NVSE Plugin.  Project to extend GECK functionality and bug fixes.  Compatible with all NVSE script extender plugins.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: red; background-color:#fff5f5;padding:3px;
+
==== TIP Merging parts from different source files ====
word-wrap: break-word;      /* Internet Explorer 5.5+ */
+
: Thanks to '''madmongo''' and '''M48A5''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
">(Do not use together with '''GECK Powerup''' (nor the '''Forked''' version), which it replaces.)</span>
 
* [http://www.nexusmods.com/newvegas/mods/41642/? GECK 1.4 Powerup Mod]. Comes in a "standalone" version for the "vanilla" GECK functions, and one for GECK with NVSE functions. It fixes and improves some issues while providing the missing messages when the GECK compiler finds an error or warning, and lets you save a script without compiling it. Considered "essential" by experienced mod creators.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: red; background-color:#fff5f5;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">(Replaced by '''GECK Extender'''.  Do not use both together.)</span>
 
* [http://www.cipscis.com/fallout/tutorials/beginners.aspx CIPSCIS: Scripting for Beginners] HTML Tutorial.  Does not support "script extender" syntax.
 
* [http://code.tutsplus.com/tutorials/top-15-best-practices-for-writing-super-readable-code--net-8118 Top 15 Best Practices for Writing Super Readable Code] HTML.
 
 
 
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
 
* [http://geckwiki.com/index.php/Category:Conditions GECK Category: Conditions] Wiki.
 
* [http://geckwiki.com/index.php/Category:Tutorials GECK Category: Tutorials page] Wiki.
 
* [http://geckwiki.com/index.php/Adding_an_Options_Menu GECK: Adding an Options Menu Tutorial]
 
* [http://geckwiki.com/index.php?title=Bethsoft_Tutorial_Basic_Quest GECK: Bethsoft Tutorial Basic Quest]
 
* [http://www.nexusmods.com/newvegas/mods/45278/? GECK: Companion by Caprius] Mod.
 
* [http://geckwiki.com/index.php/List_of_Global_Variables GECK: Global Variable]
 
* [http://youtu.be/3Bauvvmo31g GECK: Making a Counter by Seddon4494] (for tracking scripts.) Video.
 
* [http://geckwiki.com/index.php/Notes GECK: Notes]
 
* [http://www.youtube.com/watch?v=zDE4yHOz0cQ GECK: Script to Spawn/Enable NPCs at a Certain Time] Video.
 
* [http://geckwiki.com/index.php/Scripting_for_Beginners GECK: Scripting for Beginners] Wiki.
 
* [http://www.youtube.com/watch?v=APnz-qdQxfQ Tutorial - Scripting Notes] Video by '''Seddon4494'''.
 
* [http://www.youtube.com/watch?v=RLrV-R_0hnY Making something happen every day] Video by '''Seddon4494'''.
 
* [http://www.nexusmods.com/newvegas/mods/62777/? Unlocked MCM - Advanced MCM script templates] Mod by '''DoctaSax'''.
 
* [http://nvse.silverlock.org/ New Vegas Script Extender (NVSE)] Site.
 
:* [http://www.gribbleshnibit.com/projects/NVSEDocs/# NVSE Documentation] by gribbleshnibit.
 
:* [http://geck.bethsoft.com/index.php?title=MessageBoxEx NVSE MessageBoxEx function] Wiki.
 
:* [http://geckwiki.com/index.php/Con_SCOF NVSE: Con_SCOF]
 
:* [http://geckwiki.com/index.php/Debug_Dumps NVSE: Debug Dumps]
 
:* [http://www.cipscis.com/fallout/tutorials/detecting_keypresses.aspx NVSE: Detecting Keypresses] Wiki.
 
:* [http://geckwiki.com/index.php/SetDebugMode NVSE: SetDebugMode]
 
* [http://fallout.gamepedia.com/Pip-Boy_3000 Pipboy Tabs]
 
* [http://cs.elderscrolls.com/index.php?title=Performance_Problems TES: Script Performance Problems] TES Construction Set Wiki.  Some things on this site are obsolete information as regards the GECK.
 
* [http://www.nexusmods.com/newvegas/mods/63880/? Timescale Pacemaker]
 
* The following tutorials are found on an "Adult (18+) Only Access" site.
 
:* [http://www.loverslab.com/topic/33181-scripting-in-fallout-new-vegas-for-dummies/ Scripting in Fallout New Vegas for Dummies] by tomm434.
 
:* [http://www.loverslab.com/topic/4320-fallout-new-vegas-geck-scripting-help-101/ Fallout New Vegas GECK & Scripting Help 101] Thread.
 
:* [http://www.loverslab.com/topic/26749-tutorial-nvse4-part-1-syntax-and-expressions/ NVSE4+: Syntax and Expressions - Part 1] by DoctaSax.
 
:* [http://www.loverslab.com/topic/26802-tutorial-nvse4-part-2-user-defined-functions-udfs/ NVSE4+: User Defined Functions (UDFs) - Part 2] by DoctaSax.
 
:* [http://www.loverslab.com/topic/26963-tutorial-nvse4-part-3-string-variables/ NVSE4+: String Variables - Part 3] by DoctaSax.
 
:* [http://www.loverslab.com/topic/27076-tutorial-nvse4-part-4-array-variables/ NVSE4+: Array Variables] by DoctaSax.
 
:* [http://www.loverslab.com/topic/39417-tutorial-nvse4-part-5-event-handlers-user-defined-events-udes/ NVSE4+: Event Handlers & User-Defined Events (UDEs) - Part 5] by DoctaSax.
 
:* [http://www.loverslab.com/topic/22270-fnv-scripting-nx-variables/?hl=nvse4 FNV Scripting: NX Variables] by DoctaSax.
 
 
 
==== '''TIP Best Practice'''  Do not begin EditorIDs with numbers ====
 
<span style="color: red; background-color:#fff5f5;" id="TIP-EditorIDNames"></span>
 
: Thanks to '''madmongo''' and '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">
+
">Sometimes you want to "mash up" parts of mesh (and texture) files from different sources.  You might think to export parts of models from the source files as "*.OBJ" files, and then import them into your "*.NIF" files as "*.OBJ" in NifSkope.  This is not how this is usually done, and will generally produce "array Shader Textures are invalid" and "device position incorrect after block number ##" errors.  These are caused by missing ''BSShaderPPLightingProperty'' entries, and thus no ''BSShaderTextureSet''.
The GECK confuses Editor-IDs, script names, and variable names that begin with numbers for Form-IDsThey are not the same and scripts will fail to compile with (if using the GECK Power-Up plugin) messages to the effect it can't find the (perfectly valid) commandIt's "best practice" to avoid prefixing anything with numbersDo use a consistent naming convention, such as beginning Editor-IDs and variables with the initials of the mod, so they are grouped together in the GECK's lists by type making it easier to locate them for editing later.
+
 
 +
: Generally speaking: "*.OBJ" files are for use importing into Blender, and should be exported as "*.NIF" files to work in NifSkopeBlender is a much better tool for this sort of thing.
 +
 
 +
When moving '''parts''' of meshes between "*.NIF" files in NifSkope, use the "Copy Branch" and "Paste Branch" functions.
 +
 
 +
: '''NifSkope''' does not display ''textures'' from BSAs by default.  You have to point '''NifSkope''' to the BSA files location in it's settings.  In the '''NifSkope''' UI, left click "Options".  In the drop down menu, choose "Settings | Resources".  In the panel that opens, you will have to add the path to the BSAs. It should be the complete path, starting with the drive letter.  When you open "Resources" you should see a complete path to (and including) the "Data" folderIf not, click on "Auto detect game path".
 +
 
 +
: When using ''custom textures'', you need to set the texture ''relative path'' to the '''loose file''' in the NIF with '''NifSkope'''This is done under ''BSShaderPPLightingProperty/BSShaderTextureSet''.  ("Relative" meaning the path starts BELOW the game "Data" folder: as in "textures\<some sub-folder>\<some filename>.dds".  No drive letters or any path above "textures\"; without even "Data\".  See the wiki article [[How_to_fix_hard-coded_texture_paths_in_NIF_files|How to fix hard-coded texture paths in NIF files]] for specific instructions.)
 +
'''AusAllerWelt''' adds:
 +
: When a "mashed up" NIF file appears fine in the mesh editor but elements seem to become invisible when viewed in '''NifSkope''', most likely the problem is the element is missing a ''material property''.  This likely occurred because you copied those elements from a mesh that had a ''combined material property'' which is often done for optimization.
  
When you create Forms for your mod, the GECK assigns them Form-IDs in sequence.  This means in the "Object Window" right-hand pane, you can expand the (collapsed by default) column between the "Editor ID" and "Count" field labels so it shows the "Form-ID". You can <Click> on that field label to sort them. As your mod will likely have the last "mod index" of those currently loaded, your forms will be sorted to the top when sorted into "descending" order.
+
: To correct:
 +
:* <Right-Click> on the affected element '''NiTriShape''' of your mesh in '''NifSkope''', go to ''Node | Attach Property'' and select ''NiMaterialProperty''.
 +
:* {{filepath:NifSkope Material Property.png}}
 +
:* Now your element block should have a material property and appear in game. No need to change any values, unless you want to make that element of the mesh super glossy or something.
 
</div>
 
</div>
  
<span id="Tip-Encapsulation"></span>
+
<span id="Tip-ModelLighting"></span>
==== '''TIP Best Practice'''  Encapsulation ''Parens Brackets and Braces'' ====
+
 
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
+
====TIP Model Lighting====
 +
: Thanks to '''EPDGaffney''' and '''pixelhate''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Do not get careless when choosing how you "group" ([http://geck.technodeep.net/index.php/Encapsulation Encapsulate]) expressions in FNV scripting.  For instance, some functions need to be "encapsulated" using "(parentheses)", aka 'parens', in order to return a single value.  "Parens" around complete expressions are almost always not harmful and can help the line parser in determining the order in which to process multiple expression combinations on the same line(See [http://geck.technodeep.net/index.php/NVSE_Expressions NVSE Expressions] on operator precedence and overriding the default precedence.)  However, "[square brackets]" are exclusively used for handling arrays and NVSE string vars.  "{Curly Braces}" encapsulate a function as an argument to another function. (i.e. ''"if eval (somefunc <span style="color: red;">'''{'''</span>someotherfunc arg1 arg2<span style="color: red;">'''}'''</span> arg3)"'' ).  Mixing up their use can allow a script to compile, but fail the first time it is run.  Their different uses can often be easily overlooked when trying to determine why things are going wrong.  Best practice is to use "parens" unless you know you need to use something else.
+
">Q: When you change the texture of an item with the GECK it always ends up different then the ground texture even if it's using the same textureWhy?  Example: railroad tracks roadbed and ballast is always different than the surrounding terrain.
</div>
 
  
<span id="Tip-FunctionParameters"></span>
+
A: The model determines the lighting in this game.  I'm asking, in the vanilla game was it seamless? I don't mean the 2D ".dds" texture file; I'm asking, did it look seamless in-game?  [No, it doesn't.]
==== '''TIP Best Practice''Function parameter separation with commas ====
 
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">Some people are under the impression that the use of commas on script functions causes errors.<br>
 
Using commas to separate function parameters is actually preferable, especially when you use advanced NVSE scripting (CO, arrays, UDFs with dynamically constructed parameters in the call line). Much like extensive use of parentheses, it not only keeps things more readable for yourself, but prevents errors at compile or at run time. It isn't usually needed for simple code, but it's a good practice to get into for when it is needed, so let's please not advise against doing it.</div>
 
  
<span id="Tip-VariablePrefixes"></span>
+
(For any unfamiliar graphics related terms, please see the [http://web.archive.org/web/20170713081056/http://www.darkcreations.org/testg/wiki/Glossary TESTG Glossary].)
==== '''TIP Best Practice'''  Type prefixes for Variables ====
+
 
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
So, the way it works is an object is lit dependent upon several factors.  The first is the ''normal map'' and its ''alpha channel''. Obviously, you're telling me these are all the same texture, so that's not the problem here but it is certainly something to be aware of.  The ''normal map'' behaves as you expect, and its ''alpha channel'' is used as the ''specular map''.  Generally, you want that ''specular map'' to be mostly dark, down to drawing distinctly different effects in-game from a portion of a ''specular map'' that is 5% bright and 8% bright, for example (that is, 0% is pitch black, and bringing the RGB values all up 5% from 0 is 5%).
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
+
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
+
Now, be aware that the ''specular map'' is manipulated in '''NifSkope''' but its effects are completely ignored visually until you see it in the '''GECK''' or the game, though the '''GECK''' usually doesn't display it accurately to the way it will look in-game.
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">It's easy to get confused as to what sort of values are "valid" for any given variable once you get beyond a simple script, especially if it was defined elsewhere than the current script.  When you "declare" a variable, you give it a "type" which determines both which sorts of values it can accept and how they are stored.  If it's expecting a "reference" then you can't assign it a "number" or "string".  Experienced programmers have learned it's a "best practice" to use "type prefixes" in front of their variable names to help keep them straight.
 
  
These "type prefixes" are lowercase letters that go before a capitalized variable name, denoting a specific programming use for that variable.
+
So, now that the basics are out of the way, the rest of the lighting stuff is determined per model in '''NifSkope'''.  Open your train tracks model in '''NifSkope''' (located in ''Meshes\dungeons\metro\exterior''), and click on the dirt portion: [[File:EPDGaffney_TrainTracks_Fig01.png|thumbnail|100px|TrainTracks_Fig-01]](See '''TrainTracks_Fig-01'''.  {{Thumbnail_enlargement_message}})
 +
<br>
 +
This tells you quickly and easily which ''NiTriStrips'' it is.  Expand that and go to the ''NiMaterialProperty'' node that is attached to the ''NiTriStrips'' for the dirt: [[File:EPDGaffney_TrainTracks_Fig02.png|thumbnail|100px|TrainTracks_Fig-02]] (See '''TrainTracks_Fig-02'''.  {{Thumbnail_enlargement_message}})
 +
<br>
 +
The ''Specular'' and ''Emissive'' both have an effect but it's really the ''Glossiness'' entry that's likely to have the effect you're looking for.  It will take a good bit of trial and error.
 +
<br>
 +
Other things that can have an effect are the ''Shader'' flags: [[File:EPDGaffney_TrainTracks_Fig03.png|thumbnail|100px|TrainTracks_Fig-03]] (See '''TrainTracks_Fig-03'''.  {{Thumbnail_enlargement_message}})
 +
<br>
 +
and though not in this case (unless the terrain model has it), other texture slots besides the ''diffuse'' and ''normal maps'': [[File:EPDGaffney_TrainTracks_Fig04.png|thumbnail|100px|TrainTracks_Fig-04]] (See '''TrainTracks_Fig-04'''.  {{Thumbnail_enlargement_message}})
 +
<br>
 +
The ''NiTristripsData'' can also have vertices colored (used for shading purpose). If that's the case, that part will always look darker no matter what changes are made in the previous settings.
  
* b - A ''boolean'' (aka "''bool''") is a variable that can be only true (set to 1) or false (set to 0).  We don't have true ''bools'' in this '''GECK''' programming language, but variables that a programmer knows will only ever be set to true or false can be referred to as a ''bool'' and its name can be chosen accordingly for organizational purposes.  They are technically defined as the short/integer variety of '''type'''.
+
However, looking at images of the vanilla [railroad track] graphics, I think they just did their ''UV maps'' in a way that makes the textures look more cohesive just where they meet, perhaps, but they definitely aren't seamless, at least in the screenshots I'm seeing.
  
: Example:
+
: '''Radioactivelad''' and '''KiCHo666''' add:
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
+
The engine only supports a limited number of visible light sources on a given piece of landscape, and that includes the Pipboy light. Static objects can handle more, but even they are pretty limited.  Another thing to consider is ''light radius'' overlapping. From experience, one object can have up to 3 lights affecting it with the ''light radius'' overlapping. If a 4th one is introduced, then the 4th light will simply not affect that object or one of the previous 3 lights will stop working. The 3 light limit seems to be standard for the forward type of rendering that FNV uses.
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
 
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 
white-space: pre-wrap;      /* css-3 */
 
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 
white-space: -pre-wrap;      /* Opera 4-6 */
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">
 
short bFoundJohn
 
int bFoundJohn
 
 
</div>
 
</div>
* f - a ''float'' is a variable that can store numbers that are in between integers.  Essentially, numbers that can have decimal values (e.g. "1.001").  Some functions will return a number that is in between two integers, and if you want to store that value as a variable for use in your script, it generally must be declared as a ''float'' variable.  A popular one is '''GetSecondsPassed''' for example.
 
  
: Example:
+
<span id="Tip-RotateMesh"></span>
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
+
 
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
+
====TIP Rotate Mesh====
/* Remove the next four 'white-space' lines to restore default white-space processing. */
+
: Summary from [http://www.youtube.com/watch?v=BvitRKEa1X0 How To Rotate A Mesh In Nifskope]
white-space: pre-wrap;      /* css-3 */
+
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520; color: lightgray; background-color:#333333;padding:3px;
white-space: -pre-wrap;      /* Opera 4-6 */
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">
 
">
float fTimer
+
:* < Right-click > the object in the '''NifSkope''' "viewport", then "transform | edit | R (rotate in +/- 1-180 degrees)".
 +
:* After you have it positioned correctly: < Right-click >, "transform | apply".
 
</div>
 
</div>
* i - an ''int'' variable is the same as a ''short'' variable, but we only use the 'i' prefix so that we can use the 's' prefix to denote a ''string'' variable, which we'll talk about in a minute.  ''Int/short'' variables can only be integers, or whole numbers.  If you try to use one to store a value that should be a ''float'', it may round down (truncate) to the nearest whole number or it may just not work.  These are the most common variables for our use.
 
  
: Example:
+
<span id="Tip-ShinyLines"></span>
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
+
==== TIP Shiny lines in exported NIF normal map ====
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
+
: Thanks to '''TzeHuen''', '''pixelhate''', and '''KiCHo666''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
/* Remove the next four 'white-space' lines to restore default white-space processing. */
+
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
white-space: pre-wrap;      /* css-3 */
+
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+
background-color:#333333;padding:3px;
white-space: -pre-wrap;      /* Opera 4-6 */
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">
+
">The [http://www.nexusmods.com/newvegas/mods/64746 NIF tangents and binormals updater] command line tool does a better job than NifSkope to fix this problem, and can do batch jobs.  But it can also be resolved manually in NifSkope by:
int DoOnce<br>
+
* Make a copy of your mesh for this test.
int iDoOnce<br>
+
* Open the test NIF in NifSkope and select the ''NiTriStrips'',
int bDoOnce<br>
+
* <right click> and select "Face Normal" then "Smooth Normals".
short DoOnce<br>
+
: If the shiny lines disappear, then they are  mesh related and probably due to the export settings from your 3D program.
short iRaidersKilled ; (probably the number of raiders player killed)<br>
+
* If that doesn't resolve the problem, then select "update tangent space".
int bRaidersKilled  ; (probably if the player's killed all the designated raiders, or if they've killed at least one, depending on what you want)
 
 
</div>
 
</div>
* s - a ''string'' variable is a weird one.  It's text, and requires special treatment.  It tends to be stuff the scripting language doesn't really understand and just takes on faith that you do.  You probably won't work with these for a while.  In general, the content of a ''string'' variable is for "human consumption"(such as a message or note) rather than use by the script/program.
 
  
:Example:
+
=== Scripting ===
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
+
Other sections have relevant information to this subject.  The following "Tips" in particular are applicable.
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
+
 
/* Remove the next four 'white-space' lines to restore default white-space processing. */
+
* See the [[#Custom NPCs|Custom NPCs]] section regarding scripting "AI Packages".
white-space: pre-wrap;      /* css-3 */
+
:* [[#Tip-GetDistance|TIP: AI Packages and Distance.]]
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+
:* [[#TIP-CompanionWheel|TIP: Companion Wheel.]]
white-space: -pre-wrap;      /* Opera 4-6 */
+
:* [[#Tip-Hostility|TIP: Hostility between NPCs.]]
white-space: -o-pre-wrap;    /* Opera 7+ */
+
:* [[#Tip-NPCMovement|TIP: Making NPCs move (aka "AI Packages").]]
word-wrap: break-word;      /* Internet Explorer 5.5+ */
+
:* [[#Tip-CompanionPerks|TIP: Perks for Companions.]]
">
+
:* [[#TIP-AIPackages|TIP: Using AI Packages.]]
string_var sDogName ; whatever the player typed for a dog's name at some point in your quest, so that it can appear in notes<br>
+
 
string_var sBone    ; whatever bone/node in the .nif model is relevant to the script for whatever reason
+
* See the [[#Dialogue & Lip-synch|Dialogue & Lip-synch]] section regarding scripting "Dialogue" and "Conversations"
</div>
+
:* [[#Tip-Translators|TIP: Conversation/Quest system.]]
* a - ''array'' variables are incredible, but an "advanced" technique. It's a steep learning curve but they're easy once you've passed that.  They are basically like form lists, but they are made dynamically at run-time via script.
+
:* [[#TIP-GetSpeaker|TIP: Get the current speaker reference.]]
 +
:* [[#Tip-OCE|TIP: Obsidian Conversation Editor (OCE).]]
 +
:* [[#TIP-RandomNPCcomments|Tip: Random NPC Comments.]]
 +
:* [[#Tip-DialogTabs|TIP: Standard Dialog.]]
  
: Example:
+
[When linking to a Video, be sure to check the page sidebar for additional, related subject videos.]
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
+
* [http://geckwiki.com/index.php/Category:Conditions GECK Category: Conditions] GeckWiki.
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
+
* [http://geckwiki.com/index.php/Category:Tutorials GECK Category: Tutorials page] GeckWiki.
/* Remove the next four 'white-space' lines to restore default white-space processing. */
+
* [http://geckwiki.com/index.php/Adding_an_Options_Menu GECK: Adding an Options Menu Tutorial] GeckWiki.
white-space: pre-wrap;      /* css-3 */
+
* [http://geckwiki.com/index.php?title=Bethsoft_Tutorial_Basic_Quest GECK: Bethsoft Tutorial Basic Quest] GeckWiki.
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+
* [http://www.nexusmods.com/newvegas/mods/45278/? GECK: Companion] Mod by '''Caprius'''.
white-space: -pre-wrap;      /* Opera 4-6 */
+
* [http://geckwiki.com/index.php/List_of_Global_Variables GECK: Global Variables List] GeckWiki.
white-space: -o-pre-wrap;    /* Opera 7+ */
+
* [http://youtu.be/3Bauvvmo31g GECK: Making a Counter] (for tracking scripts.) Video (9:57) by ''' by Seddon4494'''.
word-wrap: break-word;      /* Internet Explorer 5.5+ */
+
* [http://geckwiki.com/index.php/Notes GECK: Notes] GeckWiki.
">
+
* [http://www.youtube.com/watch?v=zDE4yHOz0cQ GECK: Script to Spawn/Enable NPCs at a Certain Time] Video (2:28) by ''' Seddon4494'''.
array_var aNCR  ; maybe every actor in the area that is in an NCR faction, or maybe every NCR actor in the entire game, including all loaded mods<br>
+
* [http://geckwiki.com/index.php/Scripting_for_Beginners GECK: Scripting for Beginners] GeckWiki.
array_var aEntry ; this is a standard array variable that could be called anything and still work, but it's typically the name given to a short-lived variable that is used during any number of operations carried out on the larger array that contains all the stuff in the group you're working on.
+
* [https://www.youtube.com/watch?v=19mppusqPzQ GECK Tutorial - Terminals]  Video (6:30) by ''' Seddon4494'''.
</div>
+
* [http://nvse.silverlock.org/ New Vegas Script Extender (NVSE)] Site.
 +
:* [http://geckwiki.com/index.php?title=Category:Functions_(FOSE) FOSE Functions] GeckWiki.
 +
:* [http://geckwiki.com/index.php?title=Complete_List_of_Functions_in_NVSE NVSE Functions] GeckWiki.
 +
:* [https://geckwiki.com/index.php?title=Category:Functions_(JIP) JIPLN NVSE Functions] GeckWiki.
 +
:* [https://geckwiki.com/index.php?title=Category:Functions_(JohnnyGuitar_NVSE) JohnnyGuitar NVSE Functions] GeckWiki.
 +
:* [http://www.cipscis.com/fallout/tutorials/detecting_keypresses.aspx Tutorial - NVSE: Detecting Keypresses] Wiki.
 +
* [http://fallout.fandom.com/wiki/Pip-Boy_3000 Pipboy Interface Tabs] Wiki.
 +
* [http://cs.elderscrolls.com/index.php?title=Performance_Problems TES: Script Performance Problems] Original TES Construction Set Wiki.  Some things on this site are obsolete information as regards the GECK.
 +
* [http://www.nexusmods.com/newvegas/mods/63880/? Timescale Pacemaker] Mod.
 +
* [http://tesalliance.org/forums/index.php?/topic/2318-how-to-make-a-terminal/ Tutorial - How to Make a Terminal in Fallout 3 DO something] Wiki.
 +
* [http://www.youtube.com/watch?v=RLrV-R_0hnY Tutorial - Making something happen every day] Video (5:19) by '''Seddon4494'''.
 +
* [http://www.youtube.com/watch?v=APnz-qdQxfQ Tutorial - Scripting Notes] Video (9:43) by '''Seddon4494'''.
 +
* [http://www.nexusmods.com/newvegas/mods/62777/? Unlocked MCM - Advanced MCM script templates] Mod by '''DoctaSax'''.
 +
* The following tutorials are found on an "Adult (18+) Only Access" site.
 +
:* [http://www.loverslab.com/topic/33181-scripting-in-fallout-new-vegas-for-dummies/ Scripting in Fallout New Vegas for Dummies] by '''tomm434'''.
 +
:* [http://www.loverslab.com/topic/4320-fallout-new-vegas-geck-scripting-help-101/ Fallout New Vegas GECK & Scripting Help 101] Thread.
 +
:* [http://www.loverslab.com/topic/26749-tutorial-nvse4-part-1-syntax-and-expressions/ NVSE4+: Syntax and Expressions - Part 1] by '''DoctaSax'''.
 +
:* [http://www.loverslab.com/topic/26802-tutorial-nvse4-part-2-user-defined-functions-udfs/ NVSE4+: User Defined Functions (UDFs) - Part 2] by '''DoctaSax'''.
 +
:* [http://www.loverslab.com/topic/26963-tutorial-nvse4-part-3-string-variables/ NVSE4+: String Variables - Part 3] by '''DoctaSax'''.
 +
:* [http://www.loverslab.com/topic/27076-tutorial-nvse4-part-4-array-variables/ NVSE4+: Array Variables] by '''DoctaSax'''.
 +
:* [http://www.loverslab.com/topic/39417-tutorial-nvse4-part-5-event-handlers-user-defined-events-udes/ NVSE4+: Event Handlers & User-Defined Events (UDEs) - Part 5] by '''DoctaSax'''.
 +
:* [http://www.loverslab.com/topic/22270-fnv-scripting-nx-variables/?hl=nvse4 FNV Scripting: NX Variables] by '''DoctaSax'''.
  
: <span style="color: red; background-color:#fff5f5;">WARNING: Mixing up ''references'' and ''base objects'', especially when assigning them to arrays, is one of the most common and lethal mistakes in '''Gamebryo''' scriptingAlways double check what the '''''type''''' of value any function you are using to assign them to an array is returningUnfortunate results can become baked into save game files, causing bloat.  The only remedy in such cases seems to be deletion of the ".nvse" file for the "save game" when it occurs, which will affect other mods which depend upon information saved in it with unpredictable results.</span>
+
Refer back to the section [[#GECK_Form-ID,_Base-ID,_Ref-ID,_and_Editor-ID|GECK Form-ID, Base-ID, Ref-ID, and Editor-ID]] as necessary until the different types of "IDs" become second nature.  The distinctions are crucial to getting various script functions to work correctlyThey will primarily work with either ''Editor-ID'' or ''Reference-ID'' valuesThey seldom work with both, but if so the syntax must be read carefully to determine which type of value is used for each parameter.
  
* r - ''reference'' variables can store either a ''reference form'' or a ''base form''.  ''Base forms'' are the original "template" form as it was created in '''GECK''', BEFORE placing it in the game world.  ''Reference forms'' are specific instances of a ''base form'' AFTER they have been placed in the game world.  (There can be many ''reference forms'' of the same ''base form''.)  Their relationship to ''reference variables'' is that of a specific actor or object that you'll need to refer to later in your script.  (See the [[#GECK_Form-ID_Base-ID_Ref-ID_and_Editor-ID|GECK Form-ID Base-ID Ref-ID and Editor-ID]] section.)
+
Even if you have another favorite text editor, strongly suggest using '''Notepad++''' along with the GECK specific syntax highlighters listed in the [[#Programs_and_Tools|Programs and Tools]] section. These will catch most syntax errors, saving you a lot of grief.
  
: Example:
+
There are 3 kinds of scripts:
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
+
* The default when creating one is an ''Object'' script.  Which means this is a script that can be attached to anything in the ''object tree'' of GECK that has a "script" drop down field ... except for ''Quests'' and ''Base Effects''.
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
+
* ''Quests'' require you to select the script as a "Quest" type.  They are called (triggered) by various "Quest" conditions.
/* Remove the next four 'white-space' lines to restore default white-space processing. */
+
* ''Base Effects'' require you to select the script as an "Effect" type, available when you are on the window with the "Script" drop down list.  Only those type of scripts will show up in the list.
white-space: pre-wrap;      /* css-3 */
+
 
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
+
''Effect'' scripts attach on "Assoc Item" just below "Effect Archetype".  But ''Object'' and ''Quest'' scripts are straight forward on where to attach the script: to "Objects" or "Quests" respectively.
white-space: -pre-wrap;      /* Opera 4-6 */
+
 
white-space: -o-pre-wrap;   /* Opera 7+ */
+
Reference variables must be "defined" and assigned a value before they can be used in a command.  This often occurs in one of the script types that are executed before the one you are looking at in the moment.  But don't assume they are: verify if your script won't save.
 +
 
 +
So in short: creating a script & saving it (which "compiles" it; turning it into actual code instead of "human readable" instructions) is required for it to then exist.  If a script fails to compile, then it won't be saved.  Use '''CIPCIS''' to determine if it is a simple syntax error preventing your script from compiling.  But bear in mind '''CIPCIS''' is not aware of "script extender" syntax, so such will produce as error as an unrecognized command.  Otherwise the problem is most likely either using an inappropriate command choice or the wrong type of value for the function in question.
 +
 
 +
But merely existing in a saved/compiled form means nothing towards having that script tell the game engine what to do.  You must attach it to something (based upon which one of the 3 types it is) to then have the script code interact with the other dynamic game code.
 +
 
 +
==== Scripting Assistance ====
 +
* [http://www.nexusmods.com/newvegas/mods/64888/? GECK Extender] NVSE Plugin.  Project to extend GECK functionality and bug fixes.  Compatible with all NVSE script extender plugins.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: red; background-color:#fff5f5;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">(Do not use together with '''GECK Powerup''' (nor the '''Forked''' version), which it replaces.)</span>
 +
* [http://www.nexusmods.com/newvegas/mods/41642/? GECK 1.4 Powerup Mod]. Comes in a "standalone" version for the "vanilla" GECK functions, and one for GECK with NVSE functions. It fixes and improves some issues while providing the missing messages when the GECK compiler finds an error or warning, and lets you save a script without compiling it. Considered "essential" by experienced mod creators.  <span style="margin:0px 10px 10px 0px;border:1px solid #00C600;color: red; background-color:#fff5f5;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">
+
">(Replaced by '''GECK Extender'''.  Do not use both together.)</span>
ref rSelf  ; often used in '''GetSelf''' operations for functions that may require it, like some uses of '''PushActorAway''' or '''KillActor'''<br>
+
* [http://www.cipscis.com/fallout/tutorials/beginners.aspx CIPSCIS: Scripting for Beginners] HTML Tutorial.  Does not support "script extender" syntax.
ref rTarget  ; often the choice for functions like '''GetOwnerLastTarget'''
+
* [http://code.tutsplus.com/tutorials/top-15-best-practices-for-writing-super-readable-code--net-8118 Top 15 Best Practices for Writing Super Readable Code] HTML.
</div>
+
* [http://www.nexusmods.com/newvegas/mods/67395 RuntimeScriptProfiler] by '''lStewieAl - shadeMe'''.  An NVSE plugin to profile script execution. Ported from '''shadeMe''''s '''Oblivion''' pluginUse this to check how efficient your script is when running.
Note you can use a different prefix with the same variable name (e.g. see the various "DoOnce" definitions under "i - integer"), and the '''GECK''' will treat them as distinct, separate entities. (But note "short DoOnce" and "int DoOnce" are not unique variable namesThey are defining the same variable name to the same type.)  However, that can get very confusing after awhile and is not recommended as a casual practice. But it can have it's place.
 
</div>
 
  
<span id="Tip-SaveBloat"></span>
+
==== '''TIP Best Practice'''  Do not begin EditorIDs with numbers ====
 
+
<span style="color: red; background-color:#fff5f5;" id="TIP-EditorIDNames"></span>
==== Tip '''Best Practice''' Avoiding Save Game Bloat ====
+
: Thanks to '''madmongo''' and '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">'''LuthienAnarion''' (of the '''JIP LN NVSE Plugin''') reports the game saves data about every reference in every cell you have ever visitedSave files are supposed to get larger and larger as you explore more and more locations (called "bloat"), and their size is something the player should not normally concern themselves with.  (Save Files in the tens of MB are common.)  Bloat is less of a problem for '''FO3/FNV''' than it is for '''Skyrim''' because scripts are not included in the save game files.  However, script authors should still try to avoid adding to it wherever possible using the following '''best practices'''.
+
">
 +
The GECK confuses Editor-IDs, script names, and variable names that begin with numbers for Form-IDs.  They are not the same and scripts will fail to compile with (if using the GECK Power-Up plugin) messages to the effect it can't find the (perfectly valid) commandIt's "best practice" to avoid prefixing anything with numbers.  Do use a consistent naming convention, such as beginning Editor-IDs and variables with the initials of the mod, so they are grouped together in the GECK's lists by type making it easier to locate them for editing later.
  
[http://geckwiki.com/index.php?title=Ar_Null Ar Null]: As of '''NVSE 4.6.2''', arrays defined in [http://geckwiki.com/index.php?title=User_Defined_Function UDF] scripts are cleaned up automatically, '''but those held in other scripts are not'''. Therefore it is essential to use ''Ar_Null'' to clear any local array variables when other scripts terminate to avoid save game bloat.
+
When you create Forms for your mod, the GECK assigns them Form-IDs in sequence. This means in the "Object Window" right-hand pane, you can expand the (collapsed by default) column between the "Editor ID" and "Count" field labels so it shows the "Form-ID". You can <Click> on that field label to sort them.  As your mod will likely have the last "mod index" of those currently loaded, your forms will be sorted to the top when sorted into "descending" order.
 +
</div>
  
[http://geckwiki.com/index.php?title=Sv_Destruct Sv_Destruct] the local string variables or they can cause save game bloat.
+
<span id="Tip-Encapsulation"></span>
 +
==== '''TIP Best Practice'''  Encapsulation ''Parens Brackets and Braces'' ====
 +
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Do not get careless when choosing how you "group" ([http://geckwiki.com/index.php?title=Encapsulation Encapsulate]) expressions in FNV scripting.  For instance, some functions need to be "encapsulated" using "(parentheses)", aka 'parens', in order to return a single value.  "Parens" around complete expressions are almost always not harmful and can help the line parser in determining the order in which to process multiple expression combinations on the same line.  (See [http://geckwiki.com/index.php?title=NVSE_Expressions NVSE Expressions] on operator precedence and overriding the default precedence.)  However, "[square brackets]" are exclusively used for handling arrays and NVSE string vars.  "{Curly Braces}" encapsulate a function as an argument to another function. (i.e. ''"if eval (somefunc <span style="color: red;">'''{'''</span>someotherfunc arg1 arg2<span style="color: red;">'''}'''</span> arg3)"'' ).  Mixing up their use can allow a script to compile, but fail the first time it is run.  Their different uses can often be easily overlooked when trying to determine why things are going wrong.  Best practice is to use "parens" unless you know you need to use something else.
 +
</div>
 +
 
 +
<span id="Tip-FunctionParameters"></span>
 +
==== '''TIP Best Practice'''  Function parameter separation with commas ====
 +
: Thanks to '''DoctaSax''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">Some people are under the impression that the use of commas on script functions causes errors.<br>
 +
Using commas to separate function parameters is actually preferable, especially when you use advanced NVSE scripting (CO, arrays, UDFs with dynamically constructed parameters in the call line). Much like extensive use of parentheses, it not only keeps things more readable for yourself, but prevents errors at compile or at run time. It isn't usually needed for simple code, but it's a good practice to get into for when it is needed, so let's please not advise against doing it.</div>
 +
 
 +
<span id="Tip-ShareVariables"></span>
 +
==== '''TIP Best Practice''' Sharing Variables between Scripts ====
 +
: Thanks to  the contributors to the [http://www.loverslab.com/topic/4320-fallout-new-vegas-geck-scripting-help-101/ Fallout New Vegas GECK & Scripting Help 101] forum on the (Age 18+ gated) "LoversLab.com" site for the basis of the following:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 +
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 +
background-color:#333333;padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">When you want to share variables across more than one script, create a simple "Quest" with a name indicating it's purpose (e.g. "<MyCurrentQuest>VAR").  It doesn't need to do anything (i.e. it can be completely empty), but you need to enable the "StartGame enabled" checkbox.
  
[http://geckwiki.com/index.php?title=Disable Disable] does not remove references from the game, just stops them from rendering. Do not rely on ''Disable'' to prevent savegame bloat by removing references.  
+
Then create a new script to be run when that Quest starts, so name it something related like "<MyCurrentQuest>VARScript", and use the "Script Type" drop down list at the top right of the "Script Edit" shortcut icons to designate it as "Quest" type.
 +
 
 +
Now define any variables you want to use across more than one script or permit others to read for other Mods.
 +
 
 +
Important points to remember:
 +
* As a general practice: Declare all your variables at the top. If you declare them all over the place when you need them, you'll eventually regret it.
  
[http://geckwiki.com/index.php?title=MarkForDelete MarkForDelete] should be used to remove '''temporary references''' from the game'''GECK''' Editor placed objects cannot be deleted.
+
* Variables declared OUTSIDE the BEGIN blocks retain their value between runs, and in save games. Variables declared INSIDE a BEGIN block will be reset to 0 each time the script is runIn this "variable declaration script" you do not need or want any "BEGIN/END" blocks.
 +
 +
* Prefix your variable with their "function type" to avoid confusion when using them in other scripts.
  
Excessive use of ''repeatable quest stages'' causes load time problems in some cases. The effect should be apparent after only a few hours of play. Low quest delays seem to affect it. '''Roy Batterian''' (of '''TTW''', '''4GB Patcher''', and 30+ mods) has never been able to determine the exact circumstances under which it occurs so he has just quit using them and uses functions instead. ''Quest stages'' are "save baked", so perhaps this is behind it.
+
* Use "floats" (floating decimal values) or "ints" (integer values), but never "shorts". The less you have to type the better, and using a "non-int" alias in the '''GECK''' language will cause confusion among those who know another programming language.   Don't expect a "short" to roll over at 32767 or 65535; it will roll over at 2-billion-something just like a regular signed integer.
  
[http://geckwiki.com/index.php?title=PlaceAtMe PlaceAtMe] and [http://geckwiki.com/index.php?title=PlaceLeveledActorAtMe PlaceLeveledActorAtMe] should be used sparingly, as they do create '''temporary references''', so once the player leaves the loaded cell and they are unloaded they will still remain in the save file as scripts cannot run on them to delete or reference them.  
+
* Use prefixes for ''usage'' and ''functionality'', not "datatype".
  
Actors should be ''spawned'' with '''spawn markers'''; having them initially disabled and then enabled will cause them to spawn immediately. If you want to do "waves of enemies" you can disable the '''spawn marker''' again and run resurrect on it (provided the spawned actor is dead and the marker is persistent), and then re-enable it.  
+
* All numeric vars in the '''GECK''' language are signed (can be negative).
  
''PlaceAtMe'' can also cause various '''havok''' problems like invincible creatures that have '''effect shaders''' and other weirdness: the '''Reavers''' in the "presidential metro" of '''Fallout 3''' is a good example of this bug.  It can also cause crashing due to memory problems and other stuff.  (See any mods with waves of enemies created this way; e.g. '''Someguy2000''''s '''The Better Angels''' exhibits this issue).
+
* When naming variables, try to be consistent. You don't need to adhere to any naming scheme other than what you like but stay consistent with whatever you do choose to use. Many programmers are "Hungarian Camel Case" users (e.g. "int iMyCount", "short sTheValue", "ref rTheNPC", etc.) following [http://en.wikipedia.org/wiki/Hungarian_notation#Systems_vs._Applications_Hungarian Hungarian notation].
  
Tons of lootable items also cause save bloat as the state of the items is "baked" when they are taken.
+
* Strive to always put constants on the LEFT. "if (0 == foo)" is preferable to "if (foo == 0)". This is more important in other languages, but it's because statements are evaulated from left to right across a line of code. The practice comes from the C languages, where the first time you write "if (foo = 0)" when you meant "if (foo == 0)" you'll understand why.
  
Dropped items get "save baked" too, so it's best to put them in a container.
+
* Use parenthesis generously, but judiciously. You can almost never have too many.
  
There is also the '''GECKWiki''' article [http://geckwiki.com/index.php?title=Causes_of_CTDs Causes of CTDs] authors should be aware of as well.
+
* Indent your code consistently (makes bug hunting easier). Settle on using spaces or tabs (spaces are heavily preferred as tab stops can vary in spacing on the same line) and stick to it. If you expect to indent a lot, try to use no fewer than two spaces for readability.
</div>
 
  
<span id="Tip-CheckVariables"></span>
+
* Try to be ''explicit'' at all times rather than ''implicit''.  Assuming that version X treats something one way can burn you when version Y changes the default behavior.  A good example is using a function without prefacing it with "Player.". While this may be assumed to be true, it can easily not be true depending on situation. So if you mean to run something on the player, be explicit and say so... never trust implicit compiler/interpreter behavior.
  
==== TIP Assigning and Testing variables ====
+
* Just because you can change something doesn't mean you should. There are tons of globals and gamesettings that can be altered with almost no effort on your part ... with horrible side effects and consequences for everyone else. Try to ALWAYS consider what repercussions your changes could have for other scripters and other modders.  Always try to remember that your playstyle isn't more or less important than everyone else's playstyle. Be considerate in your choices whenever possible.
: Thanks to '''Mktavish''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">Assigning a value to a variable and then attempting to use that variable immediately afterwards usually doesn't work reliably. This is because the game engine appears to need at least one frame between the assignment and then being able to have that assigned value available in the variable in the same "action block" (e.g. "GameMode", etc. block).
 
  
The solution is to first check if the variable is set to other than it's default, and if not to then set the variable, and process the "true" condition the next frameFor example:
+
* If you've created a mod and find yourself whining about how many bugs your users complain about and you end up spending a ton of time on support ... well, stop putting so many bugs into your mods! Just remember one word: testing, testing, testing, testing, testing, testing, testing, testing, testing, testing, testing, TESTING. Each hour spent testing will eliminate 5+ hours of support. Well worth the time and effort.
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
+
 
style="margin:0px 10px 10px 10px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;
+
* Document your mod somewhere.  Maybe not in the scripts themselves (due to size limits), but somewhere. Coming back to a mod you made two years ago can be harder than writing it from scratch. The more documentation you have, the easier maintaining a mod will be.
word-wrap: break-word;      /* Internet Explorer 5.5+ */
+
 
">short DoOnce
+
* Understand the block types and what functions can and should and can't and should NOT be used in each one. You can easily block thread execution with the wrong function and freeze a quest. Always give your code time to actually work. Many functions take longer than 1 pass (1 frame) to run. If in doubt, create stages and allow your script time to breathe.  (See [[#TIP_Block_Types_Multiple_vs_Single_Frame_processing|TIP Block Types Multiple vs Single Frame processing]].)
Begin GameMode
 
: if (DoOnce > 1)
 
: ; Already done once, so leave immediately.
 
:: Return
 
: elseif (DoOnce == 0)
 
:: set DoOnce to 1 ; to be processed next frame
 
: else
 
: ; do whatever when the value of "DoOnce" is "1", including calling another script (e.g. "QuestScript") if needed.
 
:: set DoOnce to 2 ; signal this has already been done.
 
: endif
 
end</div>
 
  
Other variations on this idea can be implemented as wellA timer can be implemented if longer than one frame's delay seems to be neededRemember that "GameMode" block processing is cumulative in effect from frame to frame.
+
* NEVER NEVER NEVER use a local variable in a '''result script''' if you plan on it retaining a value. That includes ''quest stages, dialogue or any other small fragment of code'' that isn't in a script file. All of these scripts erase their variables after executionAlso, these fragment scripts act on top of other variables, replacing their scope. So if you have a global named '''iMyCount''' and you declare '''int iMyCount''' in a fragment, you are blocking the global and replacing it with your variable while that fragment is runningWhenever possible, avoid using local variables in a fragment unless they're "fire and forget" variables that do not need to retain any information.
  
Note that there are only 3 [http://geckwiki.com/index.php/Category:Blocktypes blocktypes] that will continually read the code lines in successive frames:
+
There are many more tips from experienced scripters in that threadCheck it out.
* [http://geckwiki.com/index.php/GameMode GameMode]
 
* [http://geckwiki.com/index.php/MenuMode MenuMode]
 
* [http://cs.elderscrolls.com/index.php?title=ScriptEffectUpdate ScriptEffectUpdate]
 
Each having specific circumstances when they are running.  All other blocks (e.g. "On<Event>") are one frame occurrence eventsSee also [[#Tip-BlockTypeProcessing|TIP: Block Types (Multiple vs Single Frame processing)]].
 
 
</div>
 
</div>
 +
 +
<span id="Tip-VariablePrefixes"></span>
  
<span id="Tip-LeveledLists"></span>
+
==== '''TIP Best Practice''' Type prefixes for Variables ====
 
+
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
==== TIP Adding Items to Actors ''aka Leveled Lists'' ====
 
: Thanks to '''Ladez''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">So you've created this fantastic new item (weapon / armor / clothing, etc.) and want it to start appearing in the merchant inventories or NPC lootHow to go about it without manually placing it in every individual's inventory is the question.
+
">It's easy to get confused as to what sort of values are "valid" for any given variable once you get beyond a simple script, especially if it was defined elsewhere than the current script. When you "declare" a variable, you give it a "type" which determines both which sorts of values it can accept and how they are stored.  If it's expecting a "reference" then you can't assign it a "number" or "string"Experienced programmers have learned it's a "best practice" to use "type prefixes" in front of their variable names to help keep them straight.
  
The answer is "[http://geckwiki.com/index.php/LeveledItem leveled lists]".  These are lists which can populate inventories of actors when the Player has attained a specified level of experience.  The subject is addressed in the Nexus Forum thread [http://forums.nexusmods.com/index.php?/topic/2219064-adding-items-to-levelled-listsgra Adding Items to Levelled Lists/GRA] and should answer most of your questions, but here is the summary.
+
These "type prefixes" are lowercase letters that go before a capitalized variable name, denoting a specific programming use for that variable.
  
The basic process is covered in the GECK Wiki under the topic "[http://geckwiki.com/index.php/Adding_items_to_vendors Adding items to vendors]"Note that avoiding incompatibilities with other mods requires using one of the following three methods:
+
* b - A ''boolean'' (aka "''bool''") is a variable that can be only true (set to 1) or false (set to 0)We don't have true ''bools'' in this '''GECK''' programming language, but variables that a programmer knows will only ever be set to true or false can be referred to as a ''bool'' and its name can be chosen accordingly for organizational purposes.  They are technically defined as the short/integer variety of '''type'''.
# create a new container owned by the NPC;
 
# create a quest/script to add the items to the NPC's existing vendor container;
 
# create a quest/script to add the items to a vendor's leveled item list.
 
  
The third method is recommended by experienced mod makers, especially for Actors who are not "merchants", as the best way to assure compatibility with other modsRemember: an Actor is it's own "container" and can use anything in it's inventory if the "Use Inventory" checkbox is enabledConsider the term "vendor" as a specific example of an "Actor".
+
: Example:
 +
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
 +
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
 +
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 +
white-space: pre-wrap;      /* css-3 */
 +
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
 +
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">
 +
short bFoundJohn
 +
int bFoundJohn
 +
</div>
 +
* f - a ''float'' is a variable that can store numbers that are in between integers.  Essentially, numbers that can have decimal values (e.g. "1.001").  Some functions will return a number that is in between two integers, and if you want to store that value as a variable for use in your script, it generally must be declared as a ''float'' variableA popular one is '''GetSecondsPassed''' for example.
  
You need to identify which leveled lists are being used by the Actors you want to have your items, and then add the items to at least one of those lists.  Different "groups" of Actors in different locations (even members of the same faction) may use different lists.
+
: Example:
* Find a likely "LeveledCharacter"/NPC under "Actors", "< Double-click >" on the entry to "Edit" it and view the contents of the "Inventory".  Items that appear with a "green box" icon are lists which appear under the "Items" category as "Leveled Item" entries.  For example:
+
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
: Under "NPC" is the Editor-ID "188NCRTrooperA", whose inventory contains "CondKnifeLoot" (a "Leveled Item").
+
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
: You will find "Leveled Items" under the "Object Window | Items" category.  If you "< Right-click >" on the entry for a "Leveled Item" (such as "CondKnifeLoot") and select the "Use Info" property, you can see what utilizes that item.  Scroll down that list and you want the ones of type "LVLI", which are "Leveled Lists".
+
/* Remove the next four 'white-space' lines to restore default white-space processing. */
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
+
white-space: pre-wrap;      /* css-3 */
style="margin:0px 10px 10px 30px;border:1px dashed #DAA520;color: lightgray;
+
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
background-color:#333333;padding:3px;
+
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">'''EPDGaffney''' expanded: When you select the "Use Info" property of an item, you see the "Count" and "Users" columns.  Levelled items will always have a "Count" of "0" because "Count" is how many instances/references are placed in the game cells, as opposed to a container.  Because levelled items can never be placed anywhere but a container (including an Actor of course), they will always have "0" in that column.  "Count" from the "Use Info" property is the same as "Count" in the "Object Window".
+
">
 
+
float fTimer
What makes this really confusing is that you have "Levelled Items" nested inside of other "Lists" inside of other "Lists" and so on, and these can eventually be tracked to a template actor, who has a "Use Count" of "0" because the items are never placed in the game but whose template inventory is used by 100 actors.  Meaning that levelled item with a (Use) "Count" of "0" and 1 "User" will in fact (potentially) be in 100 inventories once you start playing the game.
 
 
 
That said, a high "Use Info" Count is going to be reliable in that the item will turn up in the game for sure.  But just look at different merchant inventories to see what's really the best way to go in choosing a list for generally adding your item to the game.</div>
 
* "Form Lists" are under the GECK "Object Window | Miscellaneous" category.  Find a likely list, "< Double-click >" on the entry to "Edit" it and view the contents of the list to determine how suitable it is for your purposes.  DO NOT manually add your new item directly to this list.  Use one of the three methods above.
 
 
 
Note that by default it takes 72 hours in-game for an Actor's "inventory" to get recalculated (updated from a "leveled list").  You can force the inventory to "reset" by calling the [http://geckwiki.com/index.php/ResetInventory ResetInventory] function on the container reference, but remember that "all previously added, removed, or calculated objects will be lost".  See the GECK Wiki entry on "[http://geckwiki.com/index.php/Force_an_actor_to_equip_new_stuff Force an actor to equip new stuff]" as well.
 
 
 
The vanilla GECK function is "[http://geckwiki.com/index.php/AddItemToLeveledList AddItemToLeveledList]". As the wiki says: <blockquote>
 
"This should be used in the RARE case where we want to add an item to a Leveled Item list that already exists in the ESM. Its primary use is for modifying lists from the base game in downloadable content. In most cases you should add items to form lists in the editor object windows. This is for those special cases where you want to alter the contents of a list at runtime or want to change it without putting it in your ESP/ESM file. Once altered using this function, it will persist in the save game data.
 
 
 
It can not be undone."
 
</blockquote>
 
 
 
The "Lutana" extension to NVSE (now part of the "JIP LN NVSE" plugin) has the following "leveled list" functions which are preferred as overcoming the drawbacks of the vanilla GECK functions.
 
* [http://geckwiki.com/index.php/LeveledListAddForm LeveledListAddForm]
 
* [http://geckwiki.com/index.php/LeveledListRemoveForm LeveledListRemoveForm]
 
* [http://geckwiki.com/index.php/LeveledListReplaceForm LeveledListReplaceForm]
 
* [http://geckwiki.com/index.php/LeveledListClear LeveledListClear]
 
 
 
So, scripting added items with functions such as ''LeveledListAddForm'' needs to be done every time the game is started.  Most do it at "launch", but it can be done at every "reload" instead.  The vanilla function ''AddItemToLeveledList'' by contrast will save in the "save game" data.  It's not necessarily a bad function if you know how to use it (with a ''bDoOnce'' condition check most likely).  But likewise, modders need to know that the '''Lutana''' functions must be done each session/game load.  Items already spawned will of course remain in inventories if the '''Lutana''' function is called just once, but the items will never turn up anywhere else once the game is closed unless the function is called again next time.
 
 
 
Always test from a "new game" file instead of a save game from a play session.
 
 
</div>
 
</div>
 +
* i - an ''int'' variable is the same as a ''short'' variable, but we only use the 'i' prefix so that we can use the 's' prefix to denote a ''string'' variable, which we'll talk about in a minute.  ''Int/short'' variables can only be integers, or whole numbers.  If you try to use one to store a value that should be a ''float'', it may round down (truncate) to the nearest whole number or it may just not work.  These are the most common variables for our use.
  
<span id="Tip-Conditionals"></span>
+
: Example:
==== TIP Basic '''conditional test''' syntax ====
+
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
+
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
+
/* Remove the next four 'white-space' lines to restore default white-space processing. */
background-color:#333333;padding:3px;
+
white-space: pre-wrap;      /* css-3 */
 +
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 +
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">
 +
int DoOnce<br>
 +
int iDoOnce<br>
 +
int bDoOnce<br>
 +
short DoOnce<br>
 +
short iRaidersKilled ; (probably the number of raiders player killed)<br>
 +
int bRaidersKilled  ; (probably if the player's killed all the designated raiders, or if they've killed at least one, depending on what you want)
 +
</div>
 +
* s - a ''string'' variable is a weird one.  It's text, and requires special treatment.  It tends to be stuff the scripting language doesn't really understand and just takes on faith that you do.  You probably won't work with these for a while.  In general, the content of a ''string'' variable is for "human consumption"(such as a message or note) rather than use by the script/program.
 +
 
 +
:Example:
 +
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
 +
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
 +
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 +
white-space: pre-wrap;      /* css-3 */
 +
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 +
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">A "[http://geckwiki.com/index.php/Category:Conditions conditional statement]" (an "IF" is the basic form) consists of a "test condition" (e.g. "<this test must be 'true'>"), '''possibly''' followed by yet another "compound conditional test" which may be regarded as "Either/'''OR'''" '''''or''''' "'''AND'''/Also MUST BE TRUE", all in a single statement which is then followed (in the GECK: on the next line) by the statements to be executed if the overall combined conditional statement is "true" in all respects.  That's a mouthful, but simply put all tests in the same statement must evaluate to 'true' for the statement to be true.  (Qualifier: Only one of the pair of "individual tests" in an '''OR''' "compound conditional test" must be 'true'.)  See [[#TIP:_GECK_parses_the_entire_line_before_evaluating|TIP: GECK parses the entire line before evaluating]].
+
">
+
string_var sDogName ; whatever the player typed for a dog's name at some point in your quest, so that it can appear in notes<br>
The question of "encapsulation" (see [[# TIP:_Best_Practice_-_Encapsulation_-_Parens,_Brackets,_and_Braces|TIP: Best Practice - Encapsulation - Parens, Brackets, and Braces]]) most commonly arises with "compound conditional tests".  You could safely use "(parens)" to enclose the basic test, as in: 'If (IsModLoaded "mod.esp")' in the example below, but in general a "''function''" (i.e. "IsModLoaded") followed by a single parameter (i.e. "mod.esp") doesn't require it unless you are getting errors.  ''Functions'' that require more than a single parameter usually do need encapsulation; the type of enclosing characters depending upon the type of function"(Parens)" are most common and generally safest when in doubt.  Liberal use of "(parens)" with "compound conditional tests" ensures they are resolved correctly: (e.g. "If (<condition1> OR <condition2>)" means only one of either condition has to be 'true' for the statement to be 'true'.  Whereas "If (<condition1> AND <condition2>)" means both individual conditions must be 'true' for the statement to be 'true'.  You can mix compound conditionals (e.g. "If ( (<test1>) AND (<test2>) OR (<test3>) )" can be misinterpreted; whereas "If ( (<test1>) AND ((<test2>) OR (<test3>)) )" is unambiguous (spaces added for clarify grouping): either <test2> or <test3> can be true, but at least one of them must be true along with <test1> for the entire statement to be 'true'.  If either <test1>, or both of <test2> and <test3> are false, then the statement fails.  However, such can be difficult to debug.  "Compound conditionals" are just another form of "nested conditionals" combined into a single statement.  (See [[#TIP:_Debugging_Compound_Conditionals|TIP: Debugging Compound Conditionals]].)  They are best used when you are concerned about the size of your script. (See [[#TIP:_Script_Size_limit|TIP: Script Size limit]].)
+
string_var sBone    ; whatever bone/node in the .nif model is relevant to the script for whatever reason
 +
</div>
 +
* a - ''array'' variables are incredible, but an "advanced" techniqueIt's a steep learning curve but they're easy once you've passed that.  They are basically like form lists, but they are made dynamically at run-time via script.
  
For every "condition" you are checking to be "true" you are also (at least implying) there is a "false" condition that will occur if the test fails.  The "conditional block" is made up of the "conditional statement" and is terminated by an appropriate "end" statement (i.e. for an "if" that is an "endif").  Some forms of conditional blocks (such as the "If") permit additional conditional tests to be conducted if the first fails (I.e. "ElseIf <condition>" statements) and a single (optional) "Else" (all is "false") section for when all earlier tests fail.  This basic structure is more fully known as the "If ...( ElseIf) ... (Else) ... EndIf" (aka "If/Else") block where the parentheses indicated the statement is (optional).  But for every "IF" there must be a concluding "ENDIF".  (Notice the different use of case in these various examples.  This is to show that case of the statements, commands, and functions is not important, but adopting a consistent pattern will help to make your script more readable.  The case of "parameters" however, may be of importance so it's always worth paying attention to.)
+
: Example:
   
+
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"  
So, here is an example of a basic "conditional test":
+
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
<pre>
+
/* Remove the next four 'white-space' lines to restore default white-space processing. */
If IsModLoaded "mod.esp"
+
white-space: pre-wrap;      /* css-3 */
  <some code to run when that mod plugin file is loaded>
+
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
; Else - do nothing
+
white-space: -pre-wrap;      /* Opera 4-6 */
EndIf
+
white-space: -o-pre-wrap;    /* Opera 7+ */
</pre>
+
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
+
">
If the test for "mod.esp" fails, the code that follows is skipped down to the "EndIf" statement and resumes processing with the next statement afterwards.  If the test for "mod.esp" succeeds, then all the lines that follow (down to the "EndIf") are then executed in sequence.
+
array_var aNCR  ; maybe every actor in the area that is in an NCR faction, or maybe every NCR actor in the entire game, including all loaded mods<br>
 +
array_var aEntry ; this is a standard array variable that could be called anything and still work, but it's typically the name given to a short-lived variable that is used during any number of operations carried out on the larger array that contains all the stuff in the group you're working on.
 +
</div>
  
(I prefer to document implied "Else" statements with comments (the ";" causes everything else on the line to be ignored) in the code so I know that I did consider the implication and what I thought would happen; in case things turn out differently later on.  The implied "Else" here is "do nothing if this mod fails to be loaded".)
+
: <span style="color: red; background-color:#fff5f5;">WARNING: Mixing up ''references'' and ''base objects'', especially when assigning them to arrays, is one of the most common and lethal mistakes in '''Gamebryo''' scripting.  Always double check what the '''''type''''' of value any function you are using to assign them to an array is returning.  Unfortunate results can become baked into save game files, causing bloat.  The only remedy in such cases seems to be deletion of the ".nvse" file for the "save game" when it occurs, which will affect other mods which depend upon information saved in it with unpredictable results.</span>
  
Note the use of indentationThis gets to be very important later on as you develop "nested conditions", such as:
+
* r - ''reference'' variables can store either a ''reference form'' or a ''base form''''Base forms'' are the original "template" form as it was created in '''GECK''', BEFORE placing it in the game world.  ''Reference forms'' are specific instances of a ''base form'' AFTER they have been placed in the game world.  (There can be many ''reference forms'' of the same ''base form''.)  Their relationship to ''reference variables'' is that of a specific actor or object that you'll need to refer to later in your script.  (See the [[#GECK_Form-ID_Base-ID_Ref-ID_and_Editor-ID|GECK Form-ID Base-ID Ref-ID and Editor-ID]] section.)
<pre>
 
If <condition1>
 
  some code if <condition1> is true
 
  If <condition2>
 
    some additional code only if <condition2> is true (in addition to <condition1> or we never get here)
 
  ; Else - do nothing if <condition2> fails
 
  EndIf
 
Else ; <condition1> failed - <condition2> was never tested
 
  <code when <condition1> fails>
 
EndIf
 
</pre>
 
  
Indenting the beginning and ending statements of "blocks" to the same level helps ensure you have correctly matched them up(This is one of the most common syntax errors preventing a script from compiling, and hard to track down otherwise.)
+
: Example:
 +
<div name="Simulated code box" class="boilerplate metadata" id="Warning Notice"
 +
style="margin:0px 10px 10px 30px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;"
 +
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 +
white-space: pre-wrap;      /* css-3 */
 +
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 +
white-space: -pre-wrap;      /* Opera 4-6 */
 +
white-space: -o-pre-wrap;    /* Opera 7+ */
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">
 +
ref rSelf ; often used in '''GetSelf''' operations for functions that may require it, like some uses of '''PushActorAway''' or '''KillActor'''<br>
 +
ref rTarget  ; often the choice for functions like '''GetOwnerLastTarget'''
 +
</div>
 +
Note you can use a different prefix with the same variable name (e.g. see the various "DoOnce" definitions under "i - integer"), and the '''GECK''' will treat them as distinct, separate entities. (But note "short DoOnce" and "int DoOnce" are not unique variable names.  They are defining the same variable name to the same type.) However, that can get very confusing after awhile and is not recommended as a casual practice.  But it can have it's place.
 +
</div>
  
Finally, note that ''"let < var > :="'' is '''NVSE''' syntax.  (Vanilla uses ''"set < var> to < value >"'' syntax.)  You must have '''NVSE''' loaded when running the GECK (use the '''GECK Extender''': link under [[#Programs_and_Tools|Programs and Tools]]) to use it, (and specify '''NVSE''' as a requirement for your mod if you publish it) or you will get a ''compiler error'' and your users will not be able to get the mod to function correctly without it.  Don't let that stop you as almost everyone has '''NVSE''' installed anyway, but it is important to realize.
+
<span id="Tip-SaveBloat"></span>
</div>
 
  
<span id="BlockTypeProcessing"></span>
+
==== Tip '''Best Practice''' Avoiding Save Game Bloat ====
==== TIP Block Types ''Multiple vs Single Frame processing'' ====
 
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">When creating a script it is important to use the correct "[http://geckwiki.com/index.php/Blocktype Block Type]" to contain it.  A "block" is bounded by a "Begin <type mode>" line and an "End" lineThe most commonly used is the "GameMode" block, but many beginning script authors don't know why that is the caseIt has to do with the issue of "single frame" versus "multiple frame" processing of the scripts within a given block type.
+
">'''LuthienAnarion''' (of the '''JIP LN NVSE Plugin''') reports the game saves data about every reference in every cell you have ever visited. Save files are supposed to get larger and larger as you explore more and more locations (called "bloat"), and their size is something the player should not normally concern themselves with.  (Save Files in the tens of MB are common.) Bloat is less of a problem for '''FO3/FNV''' than it is for '''Skyrim''' because scripts are not included in the save game filesHowever, script authors should still try to avoid adding to it wherever possible using the following '''best practices'''.
  
The term "frame" here is used very much the same as in "frames per second (FPS)" rendered on the display. But for a script, it is more accurate to think of it as a single "pass" of the game engine through the code within a block.
+
[http://geckwiki.com/index.php?title=Ar_Null Ar Null]: As of '''NVSE 4.6.2''', arrays defined in [http://geckwiki.com/index.php?title=User_Defined_Function UDF] scripts are cleaned up automatically, '''but those held in other scripts are not'''. Therefore it is essential to use ''Ar_Null'' to clear any local array variables when other scripts terminate to avoid save game bloat.
  
A "single frame" block type only gets one pass through it's code when it gets triggered. This means if the code is structured such that it needs to be processed multiple times to get the correct result, but is placed in a "single frame" block type, it will not produce a correct result.  It only gets one "pass through" for evaluation.  Such blocks do not retain "intermediate result (temporary) values" in variables between calls. Every time it is called, it is starting from a "clean slate".  Even it's "locally defined variables" (those defined within that script) have been reset to null values.  Only "[http://geckwiki.com/index.php/List_of_Global_Variables Global Variables]" or those "inherited" (defined in another script (typically a "quest script"), which in turn calls the script in question), can pass values between "scripts" or "frames". (This "range of visibility" of variables between different parts of the code is called the "[http://en.wikipedia.org/wiki/Scope_(computer_science) scope]" of the variable.)
+
[http://geckwiki.com/index.php?title=Sv_Destruct Sv_Destruct] the local string variables or they can cause save game bloat.
 +
 
 +
[http://geckwiki.com/index.php?title=Disable Disable] does not remove references from the game, just stops them from rendering. Do not rely on ''Disable'' to prevent savegame bloat by removing references.  
 +
 
 +
[http://geckwiki.com/index.php?title=MarkForDelete MarkForDelete] should be used to remove '''temporary references''' from the game.  '''GECK''' Editor placed objects cannot be deleted.
  
There are only three "multiple frame" block types, which retain "intermediate result values" between successive frames:
+
Excessive use of ''repeatable quest stages'' causes load time problems in some cases. The effect should be apparent after only a few hours of play. Low quest delays seem to affect it. '''Roy Batterian''' (of '''TTW''', '''4GB Patcher''', and 30+ mods) has never been able to determine the exact circumstances under which it occurs so he has just quit using them and uses functions instead. ''Quest stages'' are "save baked", so perhaps this is behind it.
* [http://geckwiki.com/index.php/GameMode GameMode]
 
* [http://geckwiki.com/index.php/MenuMode MenuMode]
 
* [http://cs.elderscrolls.com/index.php?title=ScriptEffectUpdate ScriptEffectUpdate]
 
Each having specific circumstances when they are running. All other blocks (e.g. "On<Event>") are one frame occurrence events.  
 
  
Consequently, if your code requires a "loop" structure or more than one pass through it's conditional logic to get the final result, it must be moved out of a "single frame" block and into a "multiple frame" type.  "Loops" are easy to spot; "conditional logic trees" can sometimes be trickier. Some things to watch out for:
+
[http://geckwiki.com/index.php?title=PlaceAtMe PlaceAtMe] and [http://geckwiki.com/index.php?title=PlaceLeveledActorAtMe PlaceLeveledActorAtMe] should be used sparingly, as they do create '''temporary references''', so once the player leaves the loaded cell and they are unloaded they will still remain in the save file as scripts cannot run on them to delete or reference them.  
  
* "Gateway" conditions, such as "If bDoOnce == 0".  This implies a second pass is required for the occassion when "bDoOnce == 1" logic to get applied. If "bDoOnce" is defined "globally" or "inherited", then it will retain it's value between calls, so it is not automatically disqualified from a "single frame" block type, but if defined "locally" then it will always be "0".
+
Actors should be ''spawned'' with '''spawn markers'''; having them initially disabled and then enabled will cause them to spawn immediately. If you want to do "waves of enemies" you can disable the '''spawn marker''' again and run resurrect on it (provided the spawned actor is dead and the marker is persistent), and then re-enable it.  
  
* Any logic depending upon a conditional test using a locally defined variableSuch a test is only valid if the value of the variable is assigned during that initial pass and ALL actions depending upon that value are performed in that same passThis means only one code branch of an "If ... ElseIf ... Else ... EndIf" logic tree will be processed.
+
''PlaceAtMe'' can also cause various '''havok''' problems like invincible creatures that have '''effect shaders''' and other weirdness: the '''Reavers''' in the "presidential metro" of '''Fallout 3''' is a good example of this bugIt can also cause crashing due to memory problems and other stuff(See any mods with waves of enemies created this way; e.g. '''Someguy2000''''s '''The Better Angels''' exhibits this issue).
  
By bearing in mind "single" versus "multiple" frame block types, some "unexplained" code behavior can be understood and rectified.
+
Tons of lootable items also cause save bloat as the state of the items is "baked" when they are taken.
</div>
 
  
<span id="Tip-CompilingScripts"></span>
+
Dropped items get "save baked" too, so it's best to put them in a container.
  
==== TIP Compiling Scripts ====
+
There is also the '''GECKWiki''' article [http://geckwiki.com/index.php?title=Causes_of_CTDs Causes of CTDs] authors should be aware of as well.
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">You may notice error messages that report "script is not compiled".  This may cause some confusion, so to clarify the situation:<br>
 
The GECK ''compiles'' a script when saving it.  This means it turns the "human readable" instructions into binary "machine code".  This is more efficient for the game engine to process.  Editing and saving a script individually is the preferred method of ''compiling''.  A script that is not ''compiled'' will still run as long as it is properly constructed; without any errors.  But ''compiling'' is usually the only way to ensure the script is error free.<br>
 
If you can't exit your GECK session, it's usually because you failed to actually save/compile a script due to an error.  If you are not using the '''GECK''' '''Extender''' or '''Powerup''' plugin (see the [[#Programs_and_Tools|Programs and Tools]] section), this can happen without any error message being displayed to indicate it failed.  You may find yourself forced to revert to a backup or remove the script which refuses to compile.  Take precautions.<br>
 
<span style="margin:0px 10px 10px 0px; border:1px solid #cc3333; color: red;
 
background-color:#fff5f5;padding:3px;
 
/* Remove the next four 'white-space' lines to restore default white-space processing. */
 
white-space: pre-wrap;      /* css-3 */
 
white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
 
white-space: -pre-wrap;      /* Opera 4-6 */
 
white-space: -o-pre-wrap;    /* Opera 7+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
">WARNING: There is a ''compile all'' command in the GECK script editor, but it compiles ALL the scripts that are currently loaded into the GECK ('''including by default''' all, numbering in the thousands, from the vanilla ESMs), regardless of their source plugin INTO YOUR PLUGIN, which will consequently override those scripts in any other plugin.  This is best avoided (as in '''"never used"''') unless you really understand all the ramifications.</span>
 
 
</div>
 
</div>
  
<span id="Tip-CorpseOddness"></span>
+
<span id="Tip-CheckVariables"></span>
  
==== TIP ''Corpses'' are not Actors or Objects ====
+
==== TIP Assigning and Testing variables ====
: Thanks to '''EPDGaffney''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
+
: Thanks to '''Mktavish''' of the Nexus Fallout "New Vegas GECK and Modders" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Trying to get a ''Trigger Box'' to react to a "corpse" falling through it fails to workApparently "dead actors" are not considered by the game engine to be either '''Actors''' or '''Objects''' as far as functions and events depending upon one or the other are concerned.
+
">Assigning a value to a variable and then attempting to use that variable immediately afterwards usually doesn't work reliably.  This is because the game engine appears to need at least one frame between the assignment and then being able to have that assigned value available in the variable in the same "action block" (e.g. "GameMode", etc. block).
 +
 
 +
The solution is to first check if the variable is set to other than it's default, and if not to then set the variable, and process the "true" condition the next frameFor example:
 +
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 +
style="margin:0px 10px 10px 10px; border:1px dashed #DAA520; color: lightgray; background-color:#424242; padding:3px;
 +
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 +
">short DoOnce
 +
Begin GameMode
 +
: if (DoOnce > 1)
 +
: ; Already done once, so leave immediately.
 +
:: Return
 +
: elseif (DoOnce == 0)
 +
:: set DoOnce to 1 ; to be processed next frame
 +
: else
 +
: ; do whatever when the value of "DoOnce" is "1", including calling another script (e.g. "QuestScript") if needed.
 +
:: set DoOnce to 2 ; signal this has already been done.
 +
: endif
 +
end</div>
 +
 
 +
Other variations on this idea can be implemented as well.  A timer can be implemented if longer than one frame's delay seems to be needed.  Remember that "GameMode" block processing is cumulative in effect from frame to frame.
 +
 
 +
Note that there are only 3 [http://geckwiki.com/index.php/Category:Blocktypes blocktypes] that will continually read the code lines in successive frames:
 +
* [http://geckwiki.com/index.php/GameMode GameMode]
 +
* [http://geckwiki.com/index.php/MenuMode MenuMode]
 +
* [http://cs.elderscrolls.com/index.php?title=ScriptEffectUpdate ScriptEffectUpdate]
 +
Each having specific circumstances when they are running.  All other blocks (e.g. "On<Event>") are one frame occurrence events.  See also [[#Tip-BlockTypeProcessing|TIP: Block Types (Multiple vs Single Frame processing)]].
 
</div>
 
</div>
  
<span id="Tip-CompoundConditionals"></span>
+
<span id="Tip-LeveledLists"></span>
==== TIP Debugging Compound Conditionals ====
+
 
 +
==== TIP Adding Items to Actors ''aka Leveled Lists'' ====
 +
: Thanks to '''Ladez''', '''EDPGaffney''', '''madmongo''', and '''GamerRick''' of the Nexus Fallout "New Vegas Mod Talk" forum for the basis of the following:
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
<div name="Note Box" class="boilerplate metadata" id="Notice Box"  
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
style="margin:0px 10px 10px 10px;border:1px dashed #DAA520;color: lightgray;
 
background-color:#333333;padding:3px;
 
background-color:#333333;padding:3px;
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
 
word-wrap: break-word;      /* Internet Explorer 5.5+ */
">Here's a programming tip for when a compound conditional (multiple tests on the same line) is not working as expected: split it up into nested conditionsAn "ElseIf" is equivalent to an "OR (||)" compound (assuming the "[do something]" portion is identical in both the "If" and "ElseIf" portions of the block), and each nested "If" statement is equivalent to an "AND (&&)" compound.
+
">So you've created this fantastic new item (weapon / armor / clothing, etc.) and want it to start appearing in the merchant inventories or NPC lootHow to go about it without manually placing it in every individual's inventory is the question.
  
So, using the example: "If (GetHitLocation == 1 || GetHitLocation == 2) && (rTarget.GetDead != 1) && (rTarget.GetIsCreature != 1)", change it into:
+
The answer is "[http://geckwiki.com/index.php/LeveledItem leveled lists]". These are lists which can populate inventories of actors when the Player has attained a specified level of experience.  (Many "storage containers" like "chests" and "lockers" are "owned" by the interior cell they are located within.) The subject is addressed in the Nexus Forum thread [http://forums.nexusmods.com/index.php?/topic/2219064-adding-items-to-levelled-listsgra Adding Items to Leveled Lists/GRA] and should answer most of your questions, but here is the summary.
<pre>
 
If (GetHitLocation == 1 || GetHitLocation == 2)
 
    ; NVSE required: PrintD (string:expression), DBPrintC (formatted string)
 
    DBPrintC "Script [HeadshotAmmoSCRIPT], GetHitLocation = [%g].", GetHitLocation
 
  
    If (rTarget.GetDead != 1)
+
The basic process is covered in the '''GECKWiki''' under the topic "[http://geckwiki.com/index.php/Adding_items_to_vendors Adding items to vendors]". Note that avoiding incompatibilities with other mods requires using one of the following three methods:
        ; NVSE required: PrintD (string:expression), DBPrintC (formatted string)
+
# create a new container owned by the Actor;
        PrintD "Script [HeadshotAmmoSCRIPT], rTarget.GetDead = [" + $(rTarget.GetDead) + "]."
+
# create a quest/script to add the items to the Actor's existing vendor container;
 +
# create a quest/script to add the items to a vendor's leveled item list.
  
        If (rTarget.GetIsCreature != 1)
+
The third method is recommended by experienced mod makers, especially for Actors who are not "merchants", as the best way to assure compatibility with other mods. Remember: an Actor is it's own "container" and can use anything in it's inventory if the "Use Inventory" checkbox is enabled. Consider the term "vendor" as a specific example of an "Actor".
            ; NVSE required: PrintD (string:expression), DBPrintC (formatted string)
 
            PrintD "Script [HeadshotAmmoSCRIPT], rTarget.GetIsCreature = [" + $(rTarget.GetIsCreature) + "]."
 
  
            ForceActorValue Health 0
+
You need to identify which leveled lists are being used by the Actors you want to have your items, and then add the items to at least one of those lists. Different "groups" of Actors in different locations (even members of the same faction) may use different lists.
        Else ; (Can be dropped if you just want it to totally fail.)
+
* Find a likely "LeveledCharacter"/NPC under "Actors", "< Double-click >" on the entry to "Edit" it and view the contents of the "Inventory".  Items that appear with a "green box" icon are lists which appear under the "Items" category as "Leveled Item" entries.  For example:
            ; [do something]
+
: Under "NPC" is the Editor-ID "188NCRTrooperA", whose inventory contains "CondKnifeLoot" (a "Leveled Item").
        Endif
+
: You will find "Leveled Items" under the "Object Window | Items" category.  If you "< Right-click >" on the entry for a "Leveled Item" (such as "CondKnifeLoot") and select the "Use Info" property, you can see what utilizes that item.  Scroll down that list and you want the ones of type "LVLI", which are "Leveled Lists".
    Else; (Can be dropped if you just want it to totally fail.)
+
<div name="Note Box" class="boilerplate metadata" id="Notice Box"
        ; [do something]
+
style="margin:0px 10px 10px 30px;border:1px dashed #DAA520;color: lightgray;
    Endif
+
background-color:#333333;padding:3px;
Else
+
word-wrap: break-word;       /* Internet Explorer 5.5+ */
    ; [do something]
+
">'''EPDGaffney''' expanded: When you select the "Use Info" property of an item, you see the "Count" and "Users" columns.   Leveled items will always have a "Count" of "0" because "Count" is how many instances/references are placed in the game cells, as opposed to a containerBecause leveled items can never be placed anywhere but a container (including an Actor of course), they will always have "0" in that column"Count" from the "Use Info" property is the same as "Count" in the "Object Window".
EndIf
 
</pre>
 
Insert "debug messages" (examples given) as required to pin down what values your conditions are actually testing. That should quickly isolate what is not as expected.  (I just repeat the '; NVSE required' comment line to remind myself of the required syntax differences with each lineNot required otherwise.)
 
  
Use the game console "bat <filename>" command to run a "batch file" similar to this ("_MyDebug.bat") to trigger the debug print statements when testing.  You can type any series of console commands (one per line) into a Notepad or other plaintext editor file and save as a simple DOS text file.  The filename extension doesn't matter, and can be dropped when entering the command as the console ignores it if found, but the standard for all "batch files" is &