-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNVScript.html
2365 lines (2237 loc) · 156 KB
/
NVScript.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>Nameless Voice's Scripts</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
<!--
kbd {
font-family: "Courier New", Courier, mono;
font-weight: bold;
color: #000066;
font-size: small;
}
h2
{
margin-top: 3em;
font-family: Carleton, "Times New Roman", serif;
font-weight: normal;
text-align: center;
font-size: 300%;
text-decoration: underline;
}
h1 {
margin-top: 3em;
font-size: xx-large;
font-weight: bold;
font-variant: normal;
}
h1 i
{
font-weight: normal;
font-size: medium;
}
h1 b
{
color: red;
font-weight: normal;
font-size: medium;
}
cite {
color: #006600;
font-family: "Courier New", Courier, mono;
font-style: normal;
font-weight: bold;
font-size: small;
}
blockquote {
background-color: #EEEEEE;
border: 1px solid;
margin-left: 40px;
margin-top: 0px;
}
.inset {
left: 10px;
position: relative;
}
.inset40 {
left: 40px;
position: relative;
top: 0px;
}
.VersionInset {
}
tr .No
{
color: red;
}
/* For T2 version */
/*T2Version-Start*/
.T2 { }
.T2Only { }
.SS2Only { display:none;}
.SS2 { color: #884444; }
/*T2Version-End*/
/* For SS2 version */
/*SS2Version-Start
.T2 { color: #884444; }
.T2Only { display: none; }
.SS2 { }
.SS2Only { }
SS2Version-End*/
-->
</style>
</head>
<body>
<p><i>These scripts are provided "As Is" without warranty of any kind, either expressed or implied. Nameless Voice will not be liable for any incidental, special, consequential or any other damages that may result from the use or inability to use this software.</i></p>
<p><i>First of all, I would like to thank Telliamed for making this script module possible. </i></p>
<h2>- About the scripts -</h2>
<p>These scripts make use of the <b class="T2Only">Editor->Design Note</b><b class="SS2Only">Script->ObjList Args</b> property in the same way as Telliamed's scripts:</p>
<b class="inset40">From Telliamed's documentation:</b>
<blockquote> The <b class="T2Only">Editor\Design Note</b><b class="SS2Only">Script\ObjList Args</b> property is used to specify most parameters for a script. The design note is a string that can be a list of parameters, or a single parameter by itself. A parameters is a keyword, followed by an equals sign (<kbd>=</kbd>), then an argument. The argument may be surrounded with single or double quotes. Multiple parameters are separated with a semi-colon (<kbd>;</kbd>). If you need to include a semi-colon in an argument, then it must be surrounded by quotes. A quote mark can be included by using the other type of quote mark to surround the argument, or escape the quote mark with a back-slash. (e.g. <kbd>'a \'quoted\' argument'</kbd>)
</blockquote>
<p>When a script looks for an integer or flag parameter, you can have it read a quest variable and use its value in place of the parameter. After the equals sign, type a dollar sign (<kbd>$</kbd>) and the name of the quest variable (there may not be space between the dollar sign and the variable name. ) <br/>For example, if you wanted to have an NVRelayTrap which fired a number of times based on the number entered into a combination lock/odometer combo using the <cite>combo</cite> quest variable, you could specify <kbd>NVRelayTrapRepeat=$combo</kbd><br/>Note that if you want to supply the name of quest variable as a script parameter, rather than use the current value of the quest variable, then the dollar sign should not be used.</p>
<p>For any parameter that specifies the name or number of an object for the script to affect, you can use <kbd>[me]</kbd> to use the object with the script, or <kbd>[source]</kbd> to use the object that sent the triggering message (the latter may not work in all circumstances). You can also precede the name of an archetype or metaproperty with the <kbd>^</kbd> symbol to use the nearest object that inherits from the one specified. For example, <kbd>"^Marker"</kbd> will affect the nearest object that descends from the <i>Marker</i> archetype, while <kbd>"^FrobInert"</kbd> will affect the nearest object that has the <i>FrobInert</i> metaproperty (either itself or on one of its archetypes).</p>
<p>In this document, script parameters which are underlined must be specified for the script to function: <kbd>NormalParameter</kbd>; <kbd><u>RequiredParameter</u></kbd></p>
<h1>NVTrap scripts</h1>
<p>All the scripts labelled as <i>NVTrap</i>s (those that respond to <u>TurnOn</u> / <u>TurnOff</u> messages) inherit behaviours from a generic 'NVTrap' base script, which allows you to use parameters to imitate an independent <b>Script->Trap Control Flags</b> property for each script, even when you have several on the same object. Each 'Trap' script understands five parameters, (Where <kbd>[ScriptName]</kbd> is the name of the script as you entered it into the <b>S->Scripts</b> property.):</p>
<p><kbd>[ScriptName]On</kbd><br/>
Use this parameter to specify which script message should activate the trap. The default is <u>TurnOn</u>.</p>
<p><kbd>[ScriptName]Off</kbd><br/>
Use this parameter to specify which script message should deactivate the trap. The default is <u>TurnOff</u>.</p>
<p><kbd>[ScriptName]Count</kbd><br/>
Use this parameter to specify the maximum number of times that the script will work. You can use <kbd>[ScriptName]Count=1</kbd> to emulate the <i>Once</i> <b>Trap Control Flag</b>. The default is <kbd>0</kbd> (infinite).<br/>
Both <u>TurnOn</u> and <u>TurnOff</u> are counted by default. You can use <kbd>[ScriptName]CountOnly=1</kbd> to ignore <u>TurnOff</u>, and <kbd>[ScriptName]CountOnly=2</kbd> to ignore <u>TurnOn</u>. Sending the trap a <u>ResetCount</u> message will reset the counter. </p>
<p>You can use <kbd>[ScriptName]On="TurnOff";[ScriptName]Off="TurnOn"</kbd> to simulate the <i>Invert</i> <b>Trap Control Flag</b>; <kbd>[ScriptName]On="Null"</kbd> can be used to simulate <i>NoOn</i> and <kbd>[ScriptName]Off="Null"</kbd> can be used to simulate <i>NoOff</i> <br/>
Remember that if you specify <kbd>[ScriptName]On="TurnOff"</kbd> without specifying <kbd>[ScriptName]Off</kbd>, then <u>TurnOff</u> will be specified for both values.</p>
<p><kbd>[ScriptName][On/Off]Capacitor</kbd><br/>
Use this parameter to specify the number of times that a trap will need to receive its triggering message before it activates. For example, an NVRelayTrap with <kbd>NVRelayTrapCapacitor=3</kbd> will only relay every third message, while one with <kbd>NVRelayTrapOnCapacitor=4; NVRelayTrapOffCapacitor=2</kbd> will relay every second TurnOff message but only every fourth TurnOn message. The default is <u>1</u>.<br/><kbd>[ScriptName][On/Off]CapacitorFalloff</kbd> can be used to specify the time, in milliseconds, that it takes for the trap to "lose charge", and the activation count to go back down by one activation.</p>
<p>The scripts that this applies to are denoted in this document by the words <i>NVTrap</i> in parentheses after their names.<br/>
Please note that the standard <b>Trap Control Flags</b> property is not used or supported.</p>
<h1>NVTrigger scripts</h1>
<p>All the scripts labelled as <i>NVTrigger</i>s (those that respond to events by sending <u>TurnOn</u> and <u>TurnOff</u> messages) inherit behaviours from a generic 'NVTrigger' base script, which allows you to use parameters to imitate an independent <b>Script->Trap Control Flags</b> property for each script, even when you have several on the same object. Each 'Trigger' script understands six parameters, (Where <kbd>[ScriptName]</kbd> is the name of the script as you entered it into the <b>S->Scripts</b> property.):</p>
<p><kbd>[ScriptName]TOn</kbd><br/>
Use this parameter to specify which script message the trigger should send when activated. The default is <u>TurnOn</u>.</p>
<p><kbd>[ScriptName]TOff</kbd><br/>
Use this parameter to specify which script message the trigger should send when deactivated. The default is <u>TurnOff</u>.</p>
<p>You can use trigger on and off parameters to specify a stim to send instead. To do this, first enter the intensity surrounded by square brackets, followed by the stim name. For example: <kbd>[ScriptName]TOn="[5.00]WaterStim"</kbd>.<br />You can also specify a range of stims by specifying the minimum and maximum intensities, separated by a pipe. For example: <kbd>[ScriptName]TOn="[5.00|10.00]WaterStim"</kbd> will send a WaterStim with a random intensity between 5.00 and 10.00. Note that the result is a floating point number anywhere inside the range, it is <b>not</b> limited to whole numbers.</p>
<p><kbd>[ScriptName]TCount</kbd><br/>
Use this parameter to specify the maximum number of times that the script will work. You can use <kbd>[ScriptName]TCount=1</kbd> to emulate the <i>Once</i> <b>Trap Control Flag</b>. The default is <kbd>0</kbd> (infinite).<br/>
Sending of both <u>TurnOn</u> and <u>TurnOff</u> messages are counted by default. You can use <kbd>[ScriptName]TCountOnly=1</kbd> to ignore <u>TurnOff</u>, and <kbd>[ScriptName]TCountOnly=2</kbd> to ignore <u>TurnOn</u>. Sending the trigger a <u>ResetTriggerCount</u> message will reset the counter. </p>
<p><kbd>[ScriptName]FailChance</kbd><br/>
Use this parameter to specify a % chance that the trigger will fail (do nothing) when it is activated. For example: <kbd>[ScriptName]FailChance=35</kbd> will give the trigger a 35% chance to fail when activated.</p>
<p><kbd>[ScriptName]TDest</kbd><br/>
Use this parameter to specify the object that the trigger should send messages to. Either specify a single object or archetype (see below), or use the name of a link type to broadcast the message along, preceded by an <kbd>&</kbd> symbol. The default is <kbd>[ScriptName]TDest="&<span class="T2Only">ControlDevice</span><span class="SS2Only">SwitchLink</span>"</kbd>. To have the message sent along a single random link of the specified type (rather than all links of that type), put a question mark (<kbd>?</kbd>) between the <kbd>&</kbd> and the link type.<br/>
Example: <kbd>[ScriptName]TDest="&?<span class="T2Only">ControlDevice</span><span class="SS2Only">SwitchLink</span>"</kbd> will send the message down a random <span class="T2Only">ControlDevice</span><span class="SS2Only">SwitchLink</span> link.<br/>
If you want the randomly chosen link to be deleted, then use <kbd>[ScriptName]KillLinks=1</kbd>.<br/>
You can also use weighted random links via <kbd>[ScriptName]TDest="&Weighted"</kbd>. This will examine <b>ScriptParams</b> links and treat their data (must be an integer) as the chance of that link being chosen. (A link with data of <b>2</b> will be chosen twice as often as one with data of <b>1</b>). Weighted random only work with <b>ScriptParams</b> links. <br/>
Finally, you can use either <kbd>*</kbd> or <kbd>@</kbd> to affect <i>all </i>objects that inherit from a specific archetype: <kbd>*</kbd> will only affect objects which are direct descendants, and <kbd>@</kbd> will affect all descendants.<br/>
For example: <kbd>[ScriptName]TDest="*Chest"</kbd> would affect all <i>Chest (-2571)</i> objects in the mission, but will not affect objects based on its descendant archetypes of <i>Safe (-5986)</i>, <i>VicHopeChest (-5773)</i>, <i>LC_Chest (-4067)</i>, and <i>SeaChest (-2817)</i>. <kbd>[ScriptName]TDest="@Chest"</kbd> would affect all of these objects. <br>
In addition, you can affect all objects within a specific radius. First enter a less-than symbol (<), then the radius, followed by a colon (:) and then the archetype name. For example: <kbd>[ScriptName]TDest="<5.00:Chest"</kbd> will affect all <i>Chest</i> objects or descendants withing a radius of 5.00 DromEd units. Note that the radius function will affect objects in the same way as <kbd>@</kbd> - in other words, all descendant archetypes will also be affected. By default, the radius is only calculated on the X and Y axis. To measure distance in 3-dimensional space, use the <kbd>{</kbd> symbol instead of the less-than symbol.</p>
<p>Below is a table with examples of each way that objects can be targeted:<p>
<table width="850" border="1">
<tr bgcolor="#CCCCCC">
<th>Parameter value</th>
<th>Object(s) to target</th>
<th width="250">Applies to</th>
</tr>
<tr>
<td>ObjectName</td>
<td>A specific object named <i>ObjectName</i>.</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>245</td>
<td>A specific object with ID <i>245</i>.</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>[me]</td>
<td>This object where the script is running.</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>[source]</td>
<td>The source of the message that triggered this script.</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>^Marker</td>
<td>The closest object (relative to the object running the script) that descends from the Marker archetype.</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>^<20:Marker</td>
<td>The closest object (relative to the object running the script) that descends from the Marker archetype and is within 20 units (XY axis only).</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>^{20:Marker</td>
<td>The closest object (relative to the object running the script) that descends from the Marker archetype and is within 20 units (3-dimensional space).</td>
<td>Any parameter specifying an object.</td>
</tr>
<tr>
<td>&ControlDevice</td>
<td>All objects that this object has ControlDevice links to.</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td>&?ControlDevice</td>
<td>One random object that this object has a ControlDevice link to. The link to that object will be removed afterwards if [ScriptName]KillLinks=1</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td>&Weighted</td>
<td>One random object that this object has a ScriptParams link to. The link is using a weighted random using the value of the ScriptParams link, with a link with a value of 2 being twice as likely to be chosen as one with a value of 1.</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td>*Marker</td>
<td>Every object in the mission that is based on the Marker archetype</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td>@Marker</td>
<td>Every object in the mission that is based on the Marker archetype or one of its descendants.</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td><20:Marker</td>
<td>Every object within 20 units (horizontal distance only) that is based on the Marker archetype or one of its descendants.</td>
<td>An NVTrigger script's TDest</td>
</tr>
<tr>
<td>{20:Marker</td>
<td>Every object within 20 units (in all three dimensions) that is based on the Marker archetype or one of its descendants.</td>
<td>An NVTrigger script's TDest</td>
</tr>
</table>
<h1>Targetting scripts</h1>
<p>As of NVScript v1.2.0, many of the scripts allow you to specify the object(s) that they should affect, as opposed to merely affecting their own object as in previous versions of NVScript. You can do this via the <kbd>[ScriptName]Targt</kbd> parameter, which generally defaults to <b>[me]</b> in most cases. For example, to have <a href="#NVMetaTrap">NVMetaTrap</a> add and remove its metaproperty on objects linked from its object via <b>ControlDevice</b> links, you would use <kbd>NVMetaTrapTarget="&ControlDevice"</kbd>. Scripts which can be targetted in this way are marked as Targetable in their description.
<p> </p>
<p>A description of each of the scripts follows:</p>
<p>
<table width="450">
<tr bgcolor="#CCCCCC">
<td><b><u><a name="Traps"></a>Traps:</u></b></td>
<td>Version required:</td>
<td width="30">T2</td>
<td width="30">SS2</td>
</tr>
<tr>
<td width="250"><a href="#NVAirLock">NVAirLock</a> <i>(NVTrap)</i></td>
<td><b>v1.0.4</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVAITeamSetter">NVAITeamSetter</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVAmbientSoundTrap">NVAmbientSoundTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVCameraTrap">NVCameraTrap</a> <i>(Trap)</i></td>
<td><b>v1.2.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVCreateAndLink">NVCreateAndLink</a> <i>(NVLinkBuilder)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVCutsceneTrap">NVCutsceneTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.2.2</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVDeleteTrap">NVDeleteTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.0.8</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td width="250"><a href="#NVDetoxTrap">NVDetoxTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVDifficultyRelay">NVDifficultyRelay</a> <i>(NVTrap)</i></td>
<td><b>v1.0.8</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td><a href="#NVDiminishingParticles">NVDiminishingParticles</a> <i>(NVTrap)</i></td>
<td><b>v1.0.8</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td><a href="#NVDoorSpeedTrap">NVDoorSpeedTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td width="250"><a href="#NVEndTrap">NVEndTrap</a> <i>(NVTrap)</i> (SS2 only) </td>
<td><b>v1.0.5</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVGenericScalarTrap">NVGenericScalarTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.2.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVGibTrap">NVGibTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVGlowTrap">NVGlowTrap</a> <i>(NVGenericScalarTrap)</i></td>
<td><b>v1.2.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVItemGiver">NVItemGiver</a> <i>(NVTrap)</i></td>
<td><b>v1.0.2</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVLinkBuilder">NVLinkBuilder</a> <i>(NVTrap)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVMachine">NVMachine</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVMapTrap">NVMapTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td width="250"><a href="#NVMetaTrap">NVMetaTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.0.9</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVMultiplayerTrap">NVMultiplayerTrap</a></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVOnscreenText">NVOnscreenText</a> <i>(NVTrap)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVParticleGroup">NVParticleGroup</a> <i>(NVTrap)</i></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVPhantomTrap">NVPhantomTrap</a> <i>(NVGenericScalarTrap)</i></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVSetPropertyTrap">NVRandomPropertyTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30">?</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVRecalcTrap">NVRecalcTrap</a> <i>(NVTrap)</i> (SS2 only)</td>
<td><b>v1.0.5</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVRelayTrap">NVRelayTrap</a> <i>(NVTrap) (NVTrigger)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVScaleDims">NVScaleDims</a> <i>(NVTrap)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVSelectTrap">NVSelectTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSetPropertyTrap">NVSetPropertyTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.2.4</b></td>
<td width="30">?</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSimpleDoor">NVSimpleDoor</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSimpleSchemaPlayerTrap">NVSimpleSchemaPlayerTrap</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSlayMeTrap">NVSlayMeTrap</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVSRContactTrap">NVSRContactTrap</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVStackOrDropTrap">NVStackOrDropTrap</a></td>
<td><b>v1..0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVStackTrap">NVStackTrap</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSuspiciousTrap">NVSuspiciousTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td width="250"><a href="#NVTextureTrap">NVTextureTrap</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVTranslucentTextTrap">NVTranslucentTextTrap</a></td>
<td><b>v1.2.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVTrapSetQVar">NVTrapSetQVar</a></td>
<td><b>v1.0.7</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVTweqDevice">NVTweqDevice</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVTrapConverse">NVTrapConverse</a> <i>(NVTrap)</i></td>
<td><b>v1.0.4</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVVOTrap">NVVOTrap</a> <i>(NVTrap)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVWakePhysicsTrap">NVWakePhysicsTrap</a></td>
<td><b>v1.2.4</b></td>
<td>Yes</td>
<td>Yes</td>
</tr>
<tr>
<td><a href="#NVWatchMeTrap">NVWatchMeTrap</a></td>
<td><b>v1.2.4</b></td>
<td>Yes</td>
<td>Yes</td>
</tr>
</table>
<br/>
<table width="450">
<tr bgcolor="#CCCCCC">
<td colspan="1"><b><u><a name="Triggers"></a>Triggers:</u></b></td>
<td>Version required:</td>
<td width="30">T2</td>
<td width="30">SS2</td>
</tr>
<tr>
<td width="250"><a href="#NVFrobToggle">NVFrobToggle</a> <i>(NVTrigger)</i><br/> </td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVHPTrigger">NVHPTrigger</a> <i>(NVTrigger)</i></td>
<td><b>v1.0.3</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVRelayTrap">NVRelayTrap</a> <i>(NVTrap) (NVTrigger)</i></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVTrigContained">NVTrigContained</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVTrigOBB">NVTrigOBB</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVTrigRoomPlayer">NVTrigRoomPlayer</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVTrigQVar">NVTrigQVar</a></td>
<td><b>v1.0.7</b></td>
<td>Yes</td>
<td>Yes</td>
</tr>
</table>
<br/>
<table width="450">
<tr bgcolor="#CCCCCC">
<td colspan="1"><b><u><a name="AIScripts"></a>AI Scripts:</u></b></td>
<td>Version required:</td>
<td width="30">T2</td>
<td width="30">SS2</td>
</tr>
<tr>
<td width="250"><a href="#NVConvEnhancer">NVConvEnhancer</a><br/>
<span class="inset40">DelayedFrob<br/>
GiveItem<br/>
SendMessage<br/>
Follow<br/>
StopFollowing<br/>
CheckLock<br/>
SetQVar</span> </td>
<td><p><b>v1.0.0</b><br/>
v1.0.0<br/>
v1.0.0<br/>
v1.0.1<br/>
v1.0.0<br/>
v1.0.0<br/>
v1.0.8<br/>
v1.2.3
</p> </td>
<td width="30">Yes<br/>
Yes<br/>
Yes<br/>
Yes<br/>
Yes<br/>
Yes<br/>
Yes<br/>
Yes</td>
<td width="30">?<br/>
?<br/>
?<br/>
?<br/>
?<br/>
?<br/>
<span class="No">No</span><br/>
?
</td>
</tr>
<tr>
<td width="250"><a href="#NVGhostingMessages">NVGhostingMessages</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVIncapacitatedMessages">NVIncapacitatedMessages</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
</table>
<br/>
<table width="450">
<tr bgcolor="#CCCCCC">
<td colspan="1"><b><u><a name="Misc"></a>Miscellaneous Scripts:</u></b></td>
<td>Version required:</td>
<td width="30">T2</td>
<td width="30">SS2</td>
</tr>
<tr>
<td width="250"><a href="#NVAlertMessages">NVAlertMessages</a><br/> </td>
<td><b>v1.2.4</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr><tr>
<td width="250"><a href="#NVAttachMyObj">NVAttachMyObj</a><br/> </td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVAttackMessages">NVAttackMessages</a><br/> </td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVBattery">NVBattery</a> (SS2 only) </td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVCloneContactFrob">NVCloneContactFrob</a></td>
<td><b>v1.0.8</b></td>
<td width="30">?</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVComestible">NVComestible</a> (SS2 only) </td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVCombineTypeSetter">NVCombineTypeSetter</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVContainedMessages">NVConsumeMessages</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVContainedMessages">NVContainedMessages</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVCursedObj">NVCursedObj</a></td>
<td><b>v1.0.7</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td><a href="#NVDeathCutscene">NVDeathCutscene</a></td>
<td><b>v1.0.6</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVDeathStageFix">NVDeathStageFix</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVDoorStartsOpen">NVDoorStartsOpen</a></td>
<td><b>v1.0.4</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVEmitWhileSelected">NVEmitWhileSelected</a> <br/> </td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td width="250"><a href="#NVExclusiveObject">NVExclusiveObject</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVGuaranteedLoot">NVGuaranteedLoot</a></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVHealingGland">NVHealingGland</a> <i>(NVMedPatchScript)</i></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVHolyH2OHack">NVHolyH2OHack</a> <i>(NVInvTransform)</i></td>
<td><b>v1.0.2</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVInvAssembly">NVInvAssembly</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVInvAssembly2">NVInvAssembly2</a></td>
<td><b>v1.0.6</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td><a href="#NVInvTransform">NVInvTransform</a></td>
<td><b>v1.0.2</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVInventoryMemory">NVInventoryMemory</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td width="250"><a href="#NVInvSound">NVInvSound</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVJointControl">NVJointControl</a></td>
<td><b>v1.2.3</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVKeyringKey">NVKeyringKey</a></td>
<td><b>v1.0.6</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td width="250"><a href="#NVMachineSlot">NVMachineSlot</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVMedKitScript">NVMedKitScript</a> <i>(NVMedPatchScript)</i></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVMedPatchScript">NVMedPatchScript</a></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVNameOnCreation">NVNameOnCreation</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVNewWeapon">NVNewWeapon</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVObjectWatcher">NVObjectWatcher</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVParticleTrailProjectile">NVParticleTrailProjectile</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVPhysMessages">NVPhysMessages</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVPickyProjectile">NVPickyProjectile</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVPlayerScript">NVPlayerScript</a></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVPsiKitScript">NVPsiKitScript</a> <i>(NVMedPatchScript)</i></td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVPutIntoContainers">NVPutIntoContainers</a></td>
<td><b>v1.0.5</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVQVarName">NVQVarName</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVRecycler">NVRecycler</a> (SS2 only) </td>
<td><b>v1.1.0</b></td>
<td width="30" class="No">No</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVRotatable">NVRotatable</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSafeDoor">NVSafeDoor</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVShakePlayer">NVShakePlayer</a></td>
<td><b>v1.2.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSpy">NVSpy</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">Yes</td>
</tr>
<tr>
<td width="250"><a href="#NVStartUnrotated">NVStartUnrotated</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td width="250"><a href="#NVSwapSword">NVSwapSword</a></td>
<td><b>v1.1.0</b></td>
<td width="30">Yes</td>
<td width="30" class="No">No</td>
</tr>
<tr>
<td><a href="#NVTweqMessages">NVTweqMessages</a></td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVTwoSpeedDoor">NVTwoSpeedDoor</a></td>
<td><b>v1.0.8</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
<tr>
<td><a href="#NVUnusableUnlessQVar">NVUnusableUnlessQVar</a></td>
<td><b>v1.0.8</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td><a href="#NVVisibilityToQVar"> NVVisibilityToQVar</a></td>
<td><b>v1.2.0</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td><a href="#NVWatchMe">NVWatchMe</a></td>
<td><b>v1.2.0</b></td>
<td>Yes</td>
<td>?</td>
</tr>
<tr>
<td><a href="#NVWhoKilledMe">NVWhoKilledMe</a></td>
<td><b>v1.1.0</b></td>
<td>Yes</td>
<td>?</td>
</tr>
</table>
<br/>
<table width="450">
<tr bgcolor="#CCCCCC">
<td colspan="1"><b><u><a name="Debug"></a>Debug / Mission Design Scripts:<br/>
</u></b><u>(NVDebug.osm)</u></td>
<td>Version required:</td>
<td width="30">T2</td>
<td width="30">SS2</td>
</tr>
<tr>
<td width="250"><a href="#NVDifficultyDebug">NVDifficultyDebug</a><br/> </td>
<td><b>v1.0.0</b></td>
<td width="30">Yes</td>
<td width="30">?</td>
</tr>
</table>
<br/>
<table width="450">
<tr bgcolor="#CCCCCC">
<td align="center"><b><u><a href="#VersionHistory">Version History</a> </u></b></td>
</tr>
</table>
<p><b><u><br/>
</u></b></p>
<p><br/>
<br/>
</p>
<h2> - Traps -</h2>
<h1><a name="NVAirLock" id="NVAirLock"></a>NVAirLock<i> (NVTrap)</i> </h1>
<p> This script controls two airlock doors, both linked from it with <b><span class="T2Only">ControlDevice</span><span class="SS2Only">SwitchLink</span></b> <span class="T2Only">(or <b>SwitchLink</b> for SS2)</span><span class="SS2Only">(or <b>ControlDevice</b> for Thief 2)</span> links.<br/>
Upon being triggered, it first locks itself so that it cannot be triggered again until it is finished.<br/>
Second, it sends TurnOn down any <b>ScriptParam</b> links with a data "Alarm".<br/>
Third, it closes both of its doors.<br/>
Once the doors are closed, it sends <u>TurnOn</u> down <b>ScriptParams</b> links with data "Vent".<br/>
It then waits for the number of milliseconds specified by <kbd>NVAirlockDelay</kbd> (the default is 5000ms), and turns the vents off again.<br/>
After this, it opens the door that was closed originally.<br/>
Finally, once this door is open, TurnOff is sent to the Alarm and the trap is unlocked.<br/>
An example setup (Thief 2):<br/>
Create a button, two MechBlastDoors, a MechRedAlarm, and a Marker and a TrapTrig.<br/>
Arrange the two blast doors in a corridor with a fair space between them, and place all the other objects in that space.<br/>
Give the TrapTrig the <a href="#NVAirlock">NVAirlock</a> script. <br/>
Create a <b><span class="T2Only">ControlDevice</span><span class="SS2Only">SwitchLink</span></b> link from the button to the TrapTrig, and one from the TrapTrig to each of the doors. Now, create a <b>ScriptParams</b> link from the TrapTrig to the MechRedAlarm, data "Alarm", and another from the TrapTrig to the Marker, data "Vent".<br/>
Finally, give the marker the <b>ActivateAmbient</b> script and an <b>A->AmbientHacked</b> property with a <i>Schema Name</i> of "M11steam" and a <i>Radius</i> of 30 or so.<br/>
You should also give one of the doors the <a href="#NVDoorStartsOpen">NVDoorStartsOpen</a> script.</p>
<h1><a name="NVAITeamSetter"></a>NVAITeamSetter <i>(NVTrap)</i></h1>
<p>When the mission starts or its object is created (on <u>BeginScript</u>), this script sets the <b>AI->AI Core->Team</b> property of its object to the value specified by <kbd>NVAITeam</kbd>, or to a value equal to the object number if none is specified (effectively giving each AI a unique team). This allows you to have more than the default number of AI teams in a mission.</p>
<h1><a name="NVCreateAndLink"></a>NVCreateAndLink <i>(NVTrap->NVLinkBuilder)</i></h1>
<p> A derivative of <a href="#NVLinkBuilder">NVLinkBuilder</a>.<br/>
Upon receiving <u>TurnOn</u>, this script creates the object specified by <kbd><u>NVCreateAndLinkCreate</u></kbd>.<br/>
It then creates a link to the new object, with the flavour specified by <kbd><u>NVCreateAndLinkLinkType</u></kbd>.<br/>
By default, it links from the object with the script, but you can specify a source object via the <kbd>NVCreateAndLinkLinkSource</kbd> parameter. <br/>
A <u>TurnOff</u> message will destroy the object if it still exists and is still linked. Alternatively, you can specify <kbd>NVSlayCreated=1</kbd> to have the object slain rather than destroyed.<br/>
You can use the <kbd>NVCreateAndLinkLoc</kbd> parameter to specify the location at which to create the object and <kbd>NVCreateAndLinkRot</kbd> to specify the rotation. (Specify both values as a string with three numbers separated by comas, eg: <kbd>NVCreateAndLinkLoc="1.0,0.0,0.0"; NVCreateAndLinkRot="360,0,0"</kbd>)<br/>
By default, this is a relative value from the location of the current object, but you can use the <kbd>NVCreateAndLinkLocObj</kbd> parameter to specify another object, or 0 for an absolute location.<br/>
If you do not specify a location, the object will be created at 0, 0, 0. (Note that you cannot use <kbd>NVCreateAndLinkLocObj</kbd> if you do not also specify <kbd>NVCreateAndLinkLoc</kbd> (try a value of <kbd>0.0,0.0,0.0</kbd> if you don't want an offset.) <br/>
You can specify data for the link in exactly the same way as you can with <a href="#NVLinkBuilder">NVLinkBuilder</a>, except that the parameters are <kbd>NVCreateAndLinkLinkData</kbd>#<kbd>Field</kbd> and <kbd>NVCreateAndLinkLinkData</kbd>#<kbd>Value</kbd>. The old params, that simply use 'NV' instead of 'NVCreateAndLink' will still be used as fallbacks, but as of NVScript 1.1.0, the new parameters specific to NVCreateAndLink should be used, to allow NVCreateAndLink and NVLinkBuilder to co-exist on the same object.</p>
<p><b>Multiple copies:</b> This script has multiple copies, allowing you to apply it multiple times with different parameters to the same object. Add a number after the script name to use another instance of the script, and adjust the name of the script used in the script's parameters accordingly.<br/>
<br/>Example: you can use the following scripts: NVCreateAndLink, NVCreateAndLink2, NVCreateAndLink3, NVCreateAndLink4, NVCreateAndLink5, NVCreateAndLink6, NVCreateAndLink7, NVCreateAndLink8, NVCreateAndLink9. In each case, replace the NVCreateAndLink in the name of each parameter with the name and number of the script you are using. e.g. <kbd>NVCreateAndLink2Create</kbd> will specify the object to create for NVCreateAndLink2.</p>
<h1><a name="NVAmbientSoundTrap"></a>NVAmbientSoundTrap <i>(NVTrap)</i></h1>
<p> This script plays the schema that is linked to it via a SoundDescription link as an ambient sound.<br/>
The sound can be turned on and off by <u>TurnOn</u> and <u>TurnOff</u> messages, unlike the default AmbientSounds script.</p>
<h1><a name="NVLinkBuilder"></a> NVLinkBuilder <i>(NVTrap)</i></h1>
<p> Upon receiving <u>TurnOn</u>, this script creates a link with the flavour specified by <kbd><u>NVLinkBuilderLinkType</u></kbd> between the objects specified by <kbd><u>NVLinkBuilderLinkSource</u></kbd> and <kbd><u>NVLinkBuilderLinkDest</u></kbd>. <br/>
A <u>TurnOff</u> message will remove the link.</p>
<p>You can specify data for the link by using <kbd>NVLinkBuilderLinkData</kbd>#<kbd>Field</kbd> and <kbd>NVLinkBuilderLinkData</kbd>#<kbd>Value</kbd> (where # is a number between 1 and 10, maximum). To specify booleans, use <kbd>1</kbd> for <i>True</i> and <kbd>0</kbd> for <i>False</i>; to specify vectors use the format: <kbd>"0.00, 0.00, 0.00"</kbd>.<br/>
If the link you want to create has no fields (such as ScriptParams links), then you must omit <kbd>NVLinkBuilderLinkData</kbd>#<kbd>Field</kbd>.</p>
<p>To find out the name of the field, create the appropriate flavour of link in DromEd and hit Edit Data. The field name is exactly the same as the label next to each box, <i>including spaces and other special characters</i>. If there are no labels in the Link Data window, then that link flavour has no fields (and you need to omit <kbd>NVLinkBuilderLinkData</kbd>#<kbd>Field</kbd>).<br/>
For example, valid fields on a Flinderize link are: "Count", "Impulse", "Scatter?", and "Offset".<br/>
If you specify an invalid link flavour or an invalid field name, DromEd will throw up an error message and possibly crash when this script is triggered. You have been warned.</p>
<p>As of v1.2.4, you can use <kbd>NVLinkBuilderModifyExistingLink=1</kbd> to modify the data of existing link (if it exists), instead of creating a new one. The first matching link is used. Note that modifying the data (instead of removing and adding a new link) allows you to avoid behaviour such as attached objects automatically being deleted when the attachment link is removed.</p>
<p><b>Multiple copies:</b> This script has multiple copies, allowing you to apply it multiple times with different parameters to the same object. Add a number after the script name to use another instance of the script, and adjust the name of the script used in the script's parameters accordingly.<br/>
<br/>Example: you can use the following scripts: NVLinkBuilder, NVLinkBuilder2, NVLinkBuilder3, ... up to NVLinkBuilder4. In each case, replace the NVLinkBuilder in the name of each parameter with the name and number of the script you are using. e.g. <kbd>NVLinkBuilder2On</kbd> will specify the message to trigger NVLinkBuilder2.</p>