aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans-Christoph Steiner <eighthave@users.sourceforge.net>2004-05-23 16:13:11 +0000
committerIOhannes m zmölnig <zmoelnig@iem.at>2015-10-14 15:08:20 +0200
commitd57786814b259a2008811c8c7f7d1039a9ac5282 (patch)
tree6bc800f082b32f4feaa8ce541db9e5f43e760f15
parente16a35b811019cf0c54c26078243fc8cc5a87916 (diff)
updated enhanced help patches to work with new lib
svn path=/trunk/externals/ff/; revision=1760
-rw-r--r--ff/ff-autocenter-help.pd26
-rw-r--r--ff/ff-constant-help.pd143
-rw-r--r--ff/ff-friction-help.pd154
-rw-r--r--ff/ff-gain-help.pd23
-rw-r--r--ff/ff-periodic-help.pd188
-rw-r--r--ff/ff-spring-help.pd211
6 files changed, 590 insertions, 155 deletions
diff --git a/ff/ff-autocenter-help.pd b/ff/ff-autocenter-help.pd
index 323afd8..91e9f7e 100644
--- a/ff/ff-autocenter-help.pd
+++ b/ff/ff-autocenter-help.pd
@@ -1,9 +1,19 @@
-#N canvas 393 404 450 300 10;
-#X text 30 34 sets the amount of "autocentering" of the force-feedback
+#N canvas 205 279 460 360 10;
+#X text 20 66 sets the amount of "autocentering" of the force-feedback
joystick. Range is [0 \, 1]. 0 is no auto-centering;
-#X msg 48 141 0.5;
-#X obj 48 191 ff-autocenter 0 0;
-#X text 29 69 creation arguments are the device number (starting at
-0) and autocenter amount. This affects all effects for that device
-;
-#X connect 1 0 2 0;
+#X floatatom 77 254 5 0 0 0 - - -;
+#X obj 80 226 hsl 225 17 0 1 0 0 empty empty auto-center 25 9 1 12
+-261689 -1 -1 0 0;
+#X text 19 149 This is affected by the overall gain \, which can be
+controlled used [ff-gain].;
+#X obj 4 4 cnv 15 450 30 empty empty [ff-autocenter] 4 12 1 18 -261689
+-1 0;
+#X text 19 102 creation arguments are device number (i.e. 0 for /dev/input/event0)
+and autocenter amount. This effects all effects for that device;
+#X obj 77 277 ff-autocenter 0 0;
+#X obj 303 323 all_about_haptics;
+#X text 190 325 For more info:;
+#X msg 77 197 0.5;
+#X connect 1 0 6 0;
+#X connect 2 0 1 0;
+#X connect 9 0 2 0;
diff --git a/ff/ff-constant-help.pd b/ff/ff-constant-help.pd
index 48a8fb7..3a06f2b 100644
--- a/ff/ff-constant-help.pd
+++ b/ff/ff-constant-help.pd
@@ -1,39 +1,108 @@
-#N canvas 161 237 742 413 10;
-#X msg 68 150 bang;
-#X msg 44 213 stop;
-#X floatatom 301 269 5 0 0 0 - - -;
-#X floatatom 187 214 5 0 0 0 - - -;
-#X text 185 196 direction in degrees;
-#X floatatom 244 249 5 0 0 0 - - -;
-#X text 340 264 level \, range = [-1 \, 1];
-#X text 7 130 start the effect;
-#X text 12 146 with a;
-#X msg 131 77 delay 250;
-#X msg 131 48 interval 500;
-#X text 229 79 delay before starting;
-#X text 229 50 minimum time between triggers;
-#X obj 131 290 ff-constant 0 45 1000 0.5;
-#X text 107 314 arguments are inputdevice-number \, direction \, duration
-and level;
-#X msg 131 151 load;
-#X msg 131 175 unload;
-#X text 191 150 a load message \, uploads an effect to the stick;
-#X text 190 175 an unload message \, removes it;
-#X text 303 110 startlevel attack-duration (ms) endlevel decay-duration
+#N canvas 284 83 862 620 10;
+#X msg 104 432 bang;
+#X msg 68 521 stop;
+#X text 383 323 startlevel attack-duration endlevel decay-duration
;
-#X msg 131 112 envelope 0 500 0.5 100;
-#X text 300 125 levels are in the range [0 \, 1].;
-#X text 109 352 the outlet gives the effect number on the device or
+#X text 416 438 direction in degrees;
+#X text 464 478 duration in ms \, 0 is infinite;
+#X text 525 524 level \, range = [-1 \, 1];
+#X text 39 417 start the effect;
+#X text 44 433 with a;
+#X text 224 150 delay before starting;
+#X text 122 75 minimum time between triggers;
+#X msg 232 329 envelope 0 100 0 100;
+#X obj 218 555 ff-constant 0 0 500 0.5;
+#X obj 476 502 hsl 190 17 -1 1 0 0 empty empty level 5 9 1 9 -261689
+-1 -1 0 0;
+#X obj 367 418 hsl 175 17 0 360 0 1 empty empty direction 5 9 1 9 -262131
+-1 -1 1900 0;
+#X obj 418 458 hsl 235 17 0 5000 0 0 empty empty duration 5 9 1 9 -261681
+-1 -1 0 0;
+#X text 385 336 levels are in the range [-1 \, 1];
+#X obj 35 49 hsl 290 17 1 5000 0 1 empty empty interval 25 9 1 12 -225271
+-1 -1 2890 0;
+#X msg 32 86 interval \$1;
+#X msg 143 154 delay \$1;
+#X obj 146 118 hsl 230 17 0 5000 0 1 empty empty delay 25 9 1 12 -228992
+-1 -1 1145 0;
+#X obj 100 487 bng 25 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 68 487 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X obj 364 438 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 39.3103 256;
+#X obj 415 480 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 473 524 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 143 138 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 250 256;
+#X obj 32 69 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 500.9 256;
+#X text 239 13 -- control a force-feedback constant force effect;
+#X msg 218 307 envelope \$1 \$2 \$3 \$4;
+#X obj 348 228 hsl 200 17 0 1 0 1 empty empty end_level 25 8 1 12 -261689
+-1 -1 0 0;
+#X obj 221 186 hsl 200 17 0 1 0 1 empty empty start_level 25 8 1 12
+-261689 -1 -1 11200 0;
+#X obj 218 269 nbx 3 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0.562814 256;
+#X obj 218 286 pack float float float float;
+#X obj 345 269 nbx 3 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 0 256;
+#X obj 281 269 nbx 6 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 0 256;
+#X obj 409 269 nbx 6 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 0 256;
+#X obj 284 207 hsl 235 17 5 5000 1 0 empty empty attack_duration 25
+9 1 12 -261681 -1 -1 0 0;
+#X obj 412 249 hsl 235 17 5 5000 1 0 empty empty decay_duration 25
+9 1 12 -261681 -1 -1 0 0;
+#X obj 198 269 bng 15 250 50 0 empty pack_bang_env empty 0 -6 64 8
+-262144 -1 -1;
+#X obj 3 3 cnv 15 850 30 empty empty [ff-constant] 15 15 1 18 -262131
+-1 0;
+#X obj 642 111 all_about_haptics;
+#X text 530 110 For more info:;
+#X text 394 556 <-- arguments are: device# direction duration level
+;
+#X text 258 578 the outlet gives the effect number on the device or
-1 if it is not loaded.;
-#X text 241 221 duration in ms \, 0 is infinite \, this includes the
-attack/decay times;
-#X connect 0 0 13 0;
-#X connect 1 0 13 0;
-#X connect 2 0 13 3;
-#X connect 3 0 13 1;
-#X connect 5 0 13 2;
-#X connect 9 0 13 0;
-#X connect 10 0 13 0;
-#X connect 15 0 13 0;
-#X connect 16 0 13 0;
-#X connect 20 0 13 0;
+#X floatatom 218 584 5 0 0 0 - - -;
+#X msg 276 364 load;
+#X msg 276 386 unload;
+#X text 336 363 a load message \, uploads an effect to the stick;
+#X text 335 386 an unload message \, removes it;
+#X text 420 58 [ff-constant] sets up a constant force in one direction.
+;
+#X connect 0 0 11 0;
+#X connect 1 0 11 0;
+#X connect 10 0 11 0;
+#X connect 11 0 44 0;
+#X connect 12 0 24 0;
+#X connect 13 0 22 0;
+#X connect 14 0 23 0;
+#X connect 16 0 26 0;
+#X connect 17 0 11 0;
+#X connect 18 0 11 0;
+#X connect 19 0 25 0;
+#X connect 20 0 11 0;
+#X connect 21 0 1 0;
+#X connect 22 0 11 1;
+#X connect 23 0 11 2;
+#X connect 24 0 11 3;
+#X connect 25 0 18 0;
+#X connect 26 0 17 0;
+#X connect 28 0 11 0;
+#X connect 29 0 33 0;
+#X connect 30 0 31 0;
+#X connect 31 0 32 0;
+#X connect 32 0 28 0;
+#X connect 33 0 32 2;
+#X connect 34 0 32 1;
+#X connect 35 0 32 3;
+#X connect 36 0 34 0;
+#X connect 37 0 35 0;
+#X connect 38 0 32 0;
+#X connect 45 0 11 0;
+#X connect 46 0 11 0;
diff --git a/ff/ff-friction-help.pd b/ff/ff-friction-help.pd
new file mode 100644
index 0000000..e7b20f3
--- /dev/null
+++ b/ff/ff-friction-help.pd
@@ -0,0 +1,154 @@
+#N canvas 335 29 859 661 10;
+#X text 334 195 coefficients that determine how fast;
+#X text 334 207 the effect increases in that direction;
+#X text 334 218 range = [-1 \, 1];
+#X text 349 301 width of the dead-zone \, where there is no effect
+;
+#X text 349 326 range is (like the joystick output) [-32768 \, 32767]
+;
+#X text 350 312 one for each axis;
+#X text 356 424 position of the dead-zone in the joystick range;
+#X text 356 436 one for each axis;
+#X text 356 448 range is also [-32768 \, 32767];
+#X text 366 526 duration in ms \, 0 is infinite;
+#X text 531 555 levels \, range = [0 \, 1];
+#X text 398 74 these effects set up 2 axis (x and y) and you specify
+the parameters for each direction.;
+#X obj 474 556 hsl 40 15 0 1 0 0 empty empty down 5 8 1 11 -261689
+-1 -1 0 0;
+#X obj 420 556 hsl 40 15 0 1 0 0 empty empty up 5 8 1 11 -261689 -1
+-1 0 0;
+#X obj 367 556 hsl 40 15 0 1 0 0 empty empty left 5 8 1 11 -261689
+-1 -1 0 0;
+#X obj 313 556 hsl 40 15 0 1 0 0 empty empty right 5 8 1 11 -261689
+-1 -1 0 0;
+#X msg 260 483 center-y \$1;
+#X msg 255 429 center-x \$1;
+#X obj 263 450 hsl 75 15 -32767 32767 0 1 empty empty center-x 5 8
+1 11 -228992 -1 -1 5958 0;
+#X obj 258 396 hsl 75 15 -32767 32767 0 1 empty empty center-x 5 8
+1 11 -228992 -1 -1 3700 0;
+#X obj 248 340 hsl 75 15 -32767 32767 0 1 empty empty deadband-y 5
+8 1 11 -225280 -1 -1 3734 0;
+#X msg 245 373 deadband-y \$1;
+#X msg 242 317 deadband-x \$1;
+#X obj 245 284 hsl 75 15 -32767 32767 0 1 empty empty deadband-x 5
+8 1 11 -225280 -1 -1 3836 0;
+#X msg 226 258 down-coeff \$1;
+#X obj 229 225 hsl 90 15 -1 1 0 1 empty empty down-coeff 5 8 1 11 -257472
+-1 -1 0 0;
+#X obj 223 170 hsl 90 15 -1 1 0 1 empty empty up-coeff 5 7 1 11 -257472
+-1 -1 1335 0;
+#X obj 120 225 hsl 90 15 -1 1 0 0 empty empty left-coeff 5 7 1 11 -257472
+-1 -1 0 0;
+#X obj 103 170 hsl 90 15 -1 1 0 1 empty empty right-coeff 5 7 1 10
+-257472 -1 -1 8900 0;
+#X msg 220 203 up-coeff \$1;
+#X msg 117 258 left-coeff \$1;
+#X msg 100 203 right-coeff \$1;
+#X obj 471 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 417 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 364 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 310 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 312 505 hsl 245 17 0 5000 0 0 empty empty duration 25 9 1 12
+-261681 -1 -1 0 0;
+#X obj 309 527 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X text 213 14 -- control force-feedback friction effect;
+#X obj 195 599 ff-friction 1 2000 0.5 0.5 0 0.1;
+#X msg 93 503 bang;
+#X msg 84 582 stop;
+#X text 32 483 start the effect;
+#X text 37 499 with a;
+#X obj 85 533 bng 25 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 53 533 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X text 141 140 delay before starting;
+#X text 111 69 minimum time between triggers;
+#X obj 24 43 hsl 290 17 0 5000 0 1 empty empty interval 25 9 1 12 -225271
+-1 -1 2890 0;
+#X msg 21 80 interval \$1;
+#X msg 60 144 delay \$1;
+#X obj 63 108 hsl 230 17 0 5000 0 1 empty empty delay 25 9 1 12 -228992
+-1 -1 1145 0;
+#X obj 60 128 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 250 256;
+#X obj 21 63 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 500 256;
+#X obj 100 187 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 1 256;
+#X obj 117 242 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 226 242 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 -1 256;
+#X obj 220 187 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 -0.7 256;
+#X obj 242 301 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 1204.41 256;
+#X obj 245 357 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 301.102 256;
+#X obj 255 413 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 260 467 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 19996.7 256;
+#X obj 3 3 cnv 15 850 30 empty empty [ff-friction] 15 15 1 18 -257472
+-1 0;
+#X obj 568 135 all_about_haptics;
+#X text 456 134 For more info:;
+#X text 428 599 arguments are: device# duration right- left- up- down-level
+;
+#X text 238 619 the outlet gives the effect number on the device or
+-1 if it is not loaded.;
+#X floatatom 195 624 5 0 0 0 - - -;
+#X text 397 58 [ff-friction] is a "conditional effect".;
+#X text 396 110 [ff-spring] has the same methods;
+#X connect 12 0 32 0;
+#X connect 13 0 33 0;
+#X connect 14 0 34 0;
+#X connect 15 0 35 0;
+#X connect 16 0 39 0;
+#X connect 17 0 39 0;
+#X connect 18 0 61 0;
+#X connect 19 0 60 0;
+#X connect 20 0 59 0;
+#X connect 21 0 39 0;
+#X connect 22 0 39 0;
+#X connect 23 0 58 0;
+#X connect 24 0 39 0;
+#X connect 25 0 56 0;
+#X connect 26 0 57 0;
+#X connect 27 0 55 0;
+#X connect 28 0 54 0;
+#X connect 29 0 39 0;
+#X connect 30 0 39 0;
+#X connect 31 0 39 0;
+#X connect 32 0 39 5;
+#X connect 33 0 39 4;
+#X connect 34 0 39 3;
+#X connect 35 0 39 2;
+#X connect 36 0 37 0;
+#X connect 37 0 39 1;
+#X connect 39 0 67 0;
+#X connect 40 0 39 0;
+#X connect 41 0 39 0;
+#X connect 44 0 39 0;
+#X connect 45 0 41 0;
+#X connect 48 0 53 0;
+#X connect 49 0 39 0;
+#X connect 50 0 39 0;
+#X connect 51 0 52 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 31 0;
+#X connect 55 0 30 0;
+#X connect 56 0 24 0;
+#X connect 57 0 29 0;
+#X connect 58 0 22 0;
+#X connect 59 0 21 0;
+#X connect 60 0 17 0;
+#X connect 61 0 16 0;
diff --git a/ff/ff-gain-help.pd b/ff/ff-gain-help.pd
index 94b1008..e82e005 100644
--- a/ff/ff-gain-help.pd
+++ b/ff/ff-gain-help.pd
@@ -1,8 +1,17 @@
-#N canvas 0 0 450 300 10;
-#X text 26 62 sets the overall gain [0 \, 1] of the force-feedback
+#N canvas 607 32 460 364 10;
+#X floatatom 123 231 5 0 0 0 - - -;
+#X obj 126 205 hsl 195 17 0 1 0 0 empty empty gain 25 8 1 12 -261689
+-1 -1 17460 0;
+#X obj 3 3 cnv 15 450 30 empty empty [ff-gain] 4 12 1 18 -261689 -1
+0;
+#X obj 123 254 ff-gain 0 0.5;
+#X obj 320 326 all_about_haptics;
+#X text 214 326 For more info:;
+#X msg 123 178 0.9;
+#X text 24 102 Creation arguments are device number (i.e. 0 for /dev/input/event0)
+and gain. This affects all effects for that device.;
+#X text 24 64 Sets the overall gain \, between 0 and 1 \, of the force-feedback
joystick on the device.;
-#X msg 74 182 0.3;
-#X obj 74 222 ff-gain 0 0.5;
-#X text 24 105 creation arguments are the device-number (starting at
-0) and gain. This effects all effects for that device;
-#X connect 1 0 2 0;
+#X connect 0 0 3 0;
+#X connect 1 0 0 0;
+#X connect 6 0 1 0;
diff --git a/ff/ff-periodic-help.pd b/ff/ff-periodic-help.pd
index f280692..52a833b 100644
--- a/ff/ff-periodic-help.pd
+++ b/ff/ff-periodic-help.pd
@@ -1,44 +1,148 @@
-#N canvas 155 183 711 418 10;
-#X msg 27 211 bang;
-#X msg 3 274 stop;
-#X floatatom 340 294 5 0 0 0 - - -;
-#X msg 87 12 waveform sine;
-#X msg 87 35 period 400;
-#X msg 87 86 phase 90;
-#X msg 87 60 offset 0.25;
-#X text 192 13 square|sine|triangle|saw_up|saw_down;
-#X text 192 35 period time in ms (defaults 1000 ms);
-#X text 194 59 waveform offset from center [-1 \, 1] (defaults 0=centered)
+#N canvas 289 81 857 641 10;
+#X msg 65 474 bang;
+#X msg 66 556 stop;
+#X msg 459 386 envelope 0 100 0 100;
+#X text 85 71 period time in ms (defaults 1000 ms);
+#X text 477 407 startlevel attack-duration endlevel decay-duration
;
-#X floatatom 169 234 5 0 0 0 - - -;
-#X text 164 210 direction in degrees;
-#X floatatom 257 263 5 0 0 0 - - -;
-#X text 338 274 level \, range = [-1 \, 1];
-#X text 255 89 waveform phase in degrees;
-#X text -34 191 start the effect;
-#X text -29 207 with a;
-#X msg 87 139 delay 250;
-#X msg 87 113 interval 500;
-#X text 255 143 delay before starting;
-#X text 257 114 minimum time between triggers;
-#X obj 87 329 ff-periodic 0 0 0 0.5;
-#X text 90 354 arguments are device-number \, duration and level;
-#X msg 87 168 envelope 0 1000 0 100;
-#X text 259 160 startlevel attack-duration endlevel decay-duration
-levels or in the range [0 \, 1];
-#X text 254 226 duration in ms \, 0 is infinite \, this includes the
-attack/decay times;
-#X text 90 370 the outlet gives the effect number on the device or
+#X text 188 204 waveform phase in degrees;
+#X text 10 458 start the effect;
+#X text 15 474 with a;
+#X obj 319 573 ff-periodic 1 0 0 0.5;
+#X text 505 473 direction in degrees;
+#X text 547 511 duration in ms \, 0 is infinite;
+#X text 625 554 level \, range = [-1 \, 1];
+#X obj 576 532 hsl 190 17 -1 1 0 0 empty empty level 25 9 1 12 -261689
+-1 -1 0 0;
+#X obj 456 453 hsl 175 17 0 360 0 0 empty empty direction 25 9 1 12
+-262131 -1 -1 0 0;
+#X obj 491 491 hsl 245 17 0 5000 0 0 empty empty duration 25 9 1 12
+-261681 -1 -1 0 0;
+#X obj 453 473 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 488 513 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 573 554 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X text 250 12 -- control a force-feedback periodic force effect;
+#X obj 67 507 bng 25 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 35 507 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X text 228 272 delay before starting;
+#X obj 216 316 hsl 200 17 0 5000 0 1 empty empty interval 25 9 1 12
+-225271 -1 -1 2000 0;
+#X msg 213 353 interval \$1;
+#X msg 175 289 delay \$1;
+#X obj 178 253 hsl 200 17 0 5000 0 1 empty empty delay 25 9 1 12 -228992
+-1 -1 1000 0;
+#X obj 175 273 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 251.256 256;
+#X obj 213 336 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 502.513 256;
+#X msg 134 223 phase \$1;
+#X obj 137 184 hsl 220 17 0 360 0 1 empty empty phase 25 9 1 12 -257472
+-1 -1 5500 0;
+#X obj 134 205 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 90.411 256;
+#X msg 90 157 offset \$1;
+#X obj 93 117 hsl 220 17 -1 1 0 1 empty empty offset 25 9 1 12 -225280
+-1 -1 13700 0;
+#X obj 90 139 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0.251142 256;
+#X msg 30 92 period \$1;
+#X obj 33 51 hsl 300 17 2 2000 1 1 empty empty period 25 9 1 12 -261681
+-1 -1 22900 0;
+#X obj 30 73 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 396.907 256;
+#X msg 85 429 waveform \$1;
+#X msg 40 262 square;
+#X msg 51 282 sine;
+#X msg 61 302 triangle;
+#X msg 70 322 saw_up;
+#X msg 77 342 saw_down;
+#X obj 85 375 symbol;
+#X text 8 244 waveform shape;
+#X symbolatom 85 408 9 0 0 0 current: - -;
+#X msg 459 354 envelope \$1 \$2 \$3 \$4;
+#X obj 589 275 hsl 150 17 0 1 0 0 empty empty end_level 25 8 1 12 -261689
+-1 -1 0 0;
+#X obj 462 233 hsl 150 17 0 1 0 0 empty empty start_level 25 8 1 12
+-261689 -1 -1 0 0;
+#X obj 459 316 nbx 3 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 459 333 pack float float float float;
+#X obj 586 316 nbx 3 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 0 256;
+#X obj 522 316 nbx 6 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 1027.59 256;
+#X obj 650 316 nbx 6 14 -1e+37 1e+37 0 0 pack_bang_env empty empty
+0 -6 129 10 -233017 -1 -1 101.445 256;
+#X obj 525 254 hsl 180 17 5 5000 1 1 empty empty attack_duration 25
+9 1 12 -261681 -1 -1 13800 0;
+#X obj 653 296 hsl 180 17 5 5000 1 1 empty empty decay_duration 25
+9 1 12 -261681 -1 -1 7800 0;
+#X obj 440 316 bng 15 250 50 0 empty pack_bang_env empty 0 -6 64 8
+-262144 -1 -1;
+#X obj 3 2 cnv 15 850 30 empty empty [ff-periodic] 15 15 1 18 -261681
+-1 0;
+#X text 480 573 <-- arguments are: device# direction duration level
+;
+#X text 360 596 the outlet gives the effect number on the device or
-1 if it is not loaded.;
-#X connect 0 0 21 0;
-#X connect 1 0 21 0;
-#X connect 2 0 21 3;
-#X connect 3 0 21 0;
-#X connect 4 0 21 0;
-#X connect 5 0 21 0;
-#X connect 6 0 21 0;
-#X connect 10 0 21 1;
-#X connect 12 0 21 2;
-#X connect 17 0 21 0;
-#X connect 18 0 21 0;
-#X connect 23 0 21 0;
+#X floatatom 319 603 5 0 0 0 - - -;
+#X text 554 107 For more info:;
+#X obj 663 106 all_about_haptics;
+#X text 300 335 minimum time;
+#X text 300 350 between triggers;
+#X text 422 56 [ff-periodic] generates a periodic force \, basically
+a waveform that can be a pulsing or a vibration depending on the "period".
+;
+#X text 145 139 waveform offset from center [-1 \, 1];
+#X text 199 155 (defaults 0=centered);
+#X connect 0 0 8 0;
+#X connect 1 0 8 0;
+#X connect 2 0 8 0;
+#X connect 8 0 60 0;
+#X connect 12 0 17 0;
+#X connect 13 0 15 0;
+#X connect 14 0 16 0;
+#X connect 15 0 8 1;
+#X connect 16 0 8 2;
+#X connect 17 0 8 3;
+#X connect 19 0 8 0;
+#X connect 20 0 1 0;
+#X connect 22 0 27 0;
+#X connect 23 0 8 0;
+#X connect 24 0 8 0;
+#X connect 25 0 26 0;
+#X connect 26 0 24 0;
+#X connect 27 0 23 0;
+#X connect 28 0 8 0;
+#X connect 29 0 30 0;
+#X connect 30 0 28 0;
+#X connect 31 0 8 0;
+#X connect 32 0 33 0;
+#X connect 33 0 31 0;
+#X connect 34 0 8 0;
+#X connect 35 0 36 0;
+#X connect 36 0 34 0;
+#X connect 37 0 8 0;
+#X connect 38 0 43 0;
+#X connect 39 0 43 0;
+#X connect 40 0 43 0;
+#X connect 41 0 43 0;
+#X connect 42 0 43 0;
+#X connect 43 0 45 0;
+#X connect 45 0 37 0;
+#X connect 46 0 8 0;
+#X connect 47 0 51 0;
+#X connect 48 0 49 0;
+#X connect 49 0 50 0;
+#X connect 50 0 46 0;
+#X connect 51 0 50 2;
+#X connect 52 0 50 1;
+#X connect 53 0 50 3;
+#X connect 54 0 52 0;
+#X connect 55 0 53 0;
+#X connect 56 0 50 0;
diff --git a/ff/ff-spring-help.pd b/ff/ff-spring-help.pd
index 980ff2c..7e82ea6 100644
--- a/ff/ff-spring-help.pd
+++ b/ff/ff-spring-help.pd
@@ -1,65 +1,154 @@
-#N canvas 173 83 685 588 10;
-#X msg 46 262 bang;
-#X msg 102 261 stop;
-#X text 39 242 with a;
-#X msg 141 129 delay 250;
-#X msg 141 104 interval 500;
-#X text 275 130 delay before starting;
-#X text 239 104 minimum time between triggers;
-#X text 292 192 coefficients that determine how fast;
-#X text 292 204 the effect increases in that direction;
-#X text 292 215 range = [-1 \, 1];
-#X text 261 279 width of the dead-zone \, where there is no effect
+#N canvas 335 29 859 661 10;
+#X text 334 195 coefficients that determine how fast;
+#X text 334 207 the effect increases in that direction;
+#X text 334 218 range = [-1 \, 1];
+#X text 349 301 width of the dead-zone \, where there is no effect
;
-#X text 261 303 range is (like the joystick output) [-32768 \, 32767]
+#X text 349 326 range is (like the joystick output) [-32768 \, 32767]
;
-#X text 262 290 one for each axis;
-#X text 262 332 position of the dead-zone in the joystick range;
-#X text 262 344 one for each axis;
-#X text 262 356 range is also [-32768 \, 32767];
-#X floatatom 204 411 5 0 0 0 - - -;
-#X floatatom 331 458 5 0 0 0 - - -;
-#X floatatom 267 458 5 0 0 0 - - -;
-#X text 200 388 duration in ms \, 0 is infinite;
-#X floatatom 394 458 5 0 0 0 - - -;
-#X floatatom 458 461 5 0 0 0 - - -;
-#X text 267 422 levels \, range = [0 \, 1];
-#X text 266 439 right;
-#X text 332 438 left;
-#X text 392 438 up;
-#X text 458 439 down;
-#X text 34 229 start;
-#X text 4 79 ff-friction has the same methods;
-#X text 5 33 ff-spring is a "conditional effect".;
-#X obj 141 484 ff-spring 0 2000 0.5 0.5 0 0.1;
-#X text 141 507 creation arguments are device-number \, duration right-
-\, left- \, up- and down-level;
-#X msg 141 281 deadband-x 1200;
-#X msg 141 306 deadband-y 300;
-#X msg 141 335 center-x 0;
-#X msg 141 358 center-y 20000;
-#X msg 141 195 left-coeff 1;
-#X msg 141 173 right-coeff 1;
-#X msg 141 219 up-coeff -0.7;
-#X msg 141 242 down-coeff -1;
-#X text 6 49 these effects set up 2 axes (x and y) and you specify
+#X text 350 312 one for each axis;
+#X text 356 424 position of the dead-zone in the joystick range;
+#X text 356 436 one for each axis;
+#X text 356 448 range is also [-32768 \, 32767];
+#X text 366 526 duration in ms \, 0 is infinite;
+#X text 531 555 levels \, range = [0 \, 1];
+#X text 398 74 these effects set up 2 axis (x and y) and you specify
the parameters for each direction.;
-#X text 139 540 the outlet gives the effect number on the device or
+#X obj 474 556 hsl 40 15 0 1 0 0 empty empty down 5 8 1 11 -261689
+-1 -1 0 0;
+#X obj 420 556 hsl 40 15 0 1 0 0 empty empty up 5 8 1 11 -261689 -1
+-1 0 0;
+#X obj 367 556 hsl 40 15 0 1 0 0 empty empty left 5 8 1 11 -261689
+-1 -1 0 0;
+#X obj 313 556 hsl 40 15 0 1 0 0 empty empty right 5 8 1 11 -261689
+-1 -1 0 0;
+#X msg 260 483 center-y \$1;
+#X msg 255 429 center-x \$1;
+#X obj 263 450 hsl 75 15 -32767 32767 0 1 empty empty center-x 5 8
+1 11 -228992 -1 -1 5958 0;
+#X obj 258 396 hsl 75 15 -32767 32767 0 1 empty empty center-x 5 8
+1 11 -228992 -1 -1 3700 0;
+#X obj 248 340 hsl 75 15 -32767 32767 0 1 empty empty deadband-y 5
+8 1 11 -225280 -1 -1 3734 0;
+#X msg 245 373 deadband-y \$1;
+#X msg 242 317 deadband-x \$1;
+#X obj 245 284 hsl 75 15 -32767 32767 0 1 empty empty deadband-x 5
+8 1 11 -225280 -1 -1 3836 0;
+#X msg 226 258 down-coeff \$1;
+#X obj 229 225 hsl 90 15 -1 1 0 1 empty empty down-coeff 5 8 1 11 -257472
+-1 -1 0 0;
+#X obj 223 170 hsl 90 15 -1 1 0 1 empty empty up-coeff 5 7 1 11 -257472
+-1 -1 1335 0;
+#X obj 120 225 hsl 90 15 -1 1 0 0 empty empty left-coeff 5 7 1 11 -257472
+-1 -1 8900 0;
+#X obj 103 170 hsl 90 15 -1 1 0 1 empty empty right-coeff 5 7 1 10
+-257472 -1 -1 8900 0;
+#X msg 220 203 up-coeff \$1;
+#X msg 117 258 left-coeff \$1;
+#X msg 100 203 right-coeff \$1;
+#X obj 471 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 417 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 364 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 310 575 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 312 505 hsl 245 17 0 5000 0 0 empty empty duration 25 9 1 12
+-261681 -1 -1 0 0;
+#X obj 309 527 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X text 213 14 -- control force-feedback spring effect;
+#X obj 195 599 ff-spring 1 2000 0.5 0.5 0 0.1;
+#X msg 93 503 bang;
+#X msg 84 582 stop;
+#X text 32 483 start the effect;
+#X text 37 499 with a;
+#X obj 85 533 bng 25 250 50 0 empty empty empty 0 -6 0 8 -24198 -1
+-1;
+#X obj 53 533 bng 25 250 50 0 empty empty empty 0 -6 0 8 -258699 -1
+-1;
+#X text 141 140 delay before starting;
+#X text 111 69 minimum time between triggers;
+#X obj 24 43 hsl 290 17 0 5000 0 1 empty empty interval 25 9 1 12 -225271
+-1 -1 2890 0;
+#X msg 21 80 interval \$1;
+#X msg 60 144 delay \$1;
+#X obj 63 108 hsl 230 17 0 5000 0 1 empty empty delay 25 9 1 12 -228992
+-1 -1 1145 0;
+#X obj 60 128 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 250 256;
+#X obj 21 63 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 500 256;
+#X obj 100 187 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 1 256;
+#X obj 117 242 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 1 256;
+#X obj 226 242 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 -1 256;
+#X obj 220 187 nbx 5 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 -0.7 256;
+#X obj 242 301 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 1204.41 256;
+#X obj 245 357 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 301.102 256;
+#X obj 255 413 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 0 256;
+#X obj 260 467 nbx 6 14 -1e+37 1e+37 0 0 empty empty empty 0 -6 1 10
+-233017 -1 -1 19996.7 256;
+#X obj 3 3 cnv 15 850 30 empty empty [ff-spring] 15 15 1 18 -257472
+-1 0;
+#X obj 568 135 all_about_haptics;
+#X text 456 134 For more info:;
+#X text 415 599 arguments are: device# duration right- left- up- down-level
+;
+#X text 238 619 the outlet gives the effect number on the device or
-1 if it is not loaded.;
-#X connect 0 0 30 0;
-#X connect 1 0 30 0;
-#X connect 3 0 30 0;
-#X connect 4 0 30 0;
-#X connect 16 0 30 1;
-#X connect 17 0 30 3;
-#X connect 18 0 30 2;
-#X connect 20 0 30 4;
-#X connect 21 0 30 5;
-#X connect 32 0 30 0;
-#X connect 33 0 30 0;
-#X connect 34 0 30 0;
-#X connect 35 0 30 0;
-#X connect 36 0 30 0;
-#X connect 37 0 30 0;
-#X connect 38 0 30 0;
-#X connect 39 0 30 0;
+#X floatatom 195 624 5 0 0 0 - - -;
+#X text 397 58 [ff-spring] is a "conditional effect".;
+#X text 396 110 [ff-friction] has the same methods;
+#X connect 12 0 32 0;
+#X connect 13 0 33 0;
+#X connect 14 0 34 0;
+#X connect 15 0 35 0;
+#X connect 16 0 39 0;
+#X connect 17 0 39 0;
+#X connect 18 0 61 0;
+#X connect 19 0 60 0;
+#X connect 20 0 59 0;
+#X connect 21 0 39 0;
+#X connect 22 0 39 0;
+#X connect 23 0 58 0;
+#X connect 24 0 39 0;
+#X connect 25 0 56 0;
+#X connect 26 0 57 0;
+#X connect 27 0 55 0;
+#X connect 28 0 54 0;
+#X connect 29 0 39 0;
+#X connect 30 0 39 0;
+#X connect 31 0 39 0;
+#X connect 32 0 39 5;
+#X connect 33 0 39 4;
+#X connect 34 0 39 3;
+#X connect 35 0 39 2;
+#X connect 36 0 37 0;
+#X connect 37 0 39 1;
+#X connect 39 0 67 0;
+#X connect 40 0 39 0;
+#X connect 41 0 39 0;
+#X connect 44 0 39 0;
+#X connect 45 0 41 0;
+#X connect 48 0 53 0;
+#X connect 49 0 39 0;
+#X connect 50 0 39 0;
+#X connect 51 0 52 0;
+#X connect 52 0 50 0;
+#X connect 53 0 49 0;
+#X connect 54 0 31 0;
+#X connect 55 0 30 0;
+#X connect 56 0 24 0;
+#X connect 57 0 29 0;
+#X connect 58 0 22 0;
+#X connect 59 0 21 0;
+#X connect 60 0 17 0;
+#X connect 61 0 16 0;