@Superku Thank you!

Controlling all the segments from one loop did the trick! It's a little less versatile now, since I have to have a fixed number of segments per arm, but they all keep together really nicely.

Here's the code I used, in case anyone else wants to use some tentacles...

Quote:

///////////////////////////////
#include <acknex.h>
#include <default.c>
#include <mtlFX.c>
///////////////////////////////

//Tentacle Test
var segments = .01;
var roots = 50;
var speed = 10;
var taper = .85;
var bend = 10;

action segment()
{
set(my,PASSABLE);
my.material = mtl_specBump;

wait(1);

while(my.skill1 > 0)
{
my.scale_x = my.scale_x * taper;
my.skill1 -= 1;
}

my.scale_y = my.scale_x;
my.scale_z = my.scale_x;

}

var pan_mod = 0;
var tilt_mod = 0;
var roll_mod = 0;

action root()
{
ENTITY* ent_seg01;
ENTITY* ent_seg02;
ENTITY* ent_seg03;
ENTITY* ent_seg04;
ENTITY* ent_seg05;
ENTITY* ent_seg06;
ENTITY* ent_seg07;
ENTITY* ent_seg08;
ENTITY* ent_seg09;
ENTITY* ent_seg10;

random_seed(0);
my.pan = random(360) + pan_mod;
random_seed(0);
my.tilt = random(90) + tilt_mod;
random_seed(0);
my.roll = random(360) + roll_mod;

random_seed(0);
pan_mod += random(45) + 45;
random_seed(0);
tilt_mod += random(45) + 90;
random_seed(0);
roll_mod += random(45) + 180;

set(my,PASSABLE);
my.material = mtl_specBump;

if(roots > 0)
{
roots -= 1;
ent_create("tentacle.mdl",my.x,root);

wait(1);
}

ent_seg01 = ent_create("tentacle.mdl",my.x,segment);
ent_seg01.skill1 = 1;
my.skill1 = handle(ent_seg01);
wait(1);

ent_seg02 = ent_create("tentacle.mdl",my.x,segment);
ent_seg02.skill1 = 2;
my.skill2 = handle(ent_seg02);
wait(1);

ent_seg03 = ent_create("tentacle.mdl",my.x,segment);
ent_seg03.skill1 = 3;
my.skill3 = handle(ent_seg03);
wait(1);

ent_seg04 = ent_create("tentacle.mdl",my.x,segment);
ent_seg04.skill1 = 4;
my.skill4 = handle(ent_seg04);
wait(1);

ent_seg05 = ent_create("tentacle.mdl",my.x,segment);
ent_seg05.skill1 = 5;
my.skill5 = handle(ent_seg05);
wait(1);

ent_seg06 = ent_create("tentacle.mdl",my.x,segment);
ent_seg06.skill1 = 6;
my.skill6 = handle(ent_seg06);
wait(1);

ent_seg07 = ent_create("tentacle.mdl",my.x,segment);
ent_seg07.skill1 = 7;
my.skill7 = handle(ent_seg07);
wait(1);

ent_seg08 = ent_create("tentacle.mdl",my.x,segment);
ent_seg08.skill1 = 8;
my.skill8 = handle(ent_seg08);
wait(1);

ent_seg09 = ent_create("tentacle.mdl",my.x,segment);
ent_seg09.skill1 = 9;
my.skill9 = handle(ent_seg09);
wait(1);

ent_seg10 = ent_create("tentacle.mdl",my.x,segment);
ent_seg10.skill1 = 10;
my.skill10 = handle(ent_seg10);
wait(1);

//initialize movement variables
var my_angles;
var my_speed = speed;

random_seed(0);
segments += random(.2) + .01;
wait(-1 * segments);

//begin waving sequence
while(1)
{
//Move Segment 1
//ent_seg01 = ptr_for_handle(my.skill1);

//make rotation changes
my_angles += my_speed * time_step;

ent_seg01.pan = my.pan + bend * sin(my_angles);
ent_seg01.tilt = my.tilt + bend * sin(my_angles);
ent_seg01.roll = my.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg01.x,my,15);

ent_seg02.pan = ent_seg01.pan + bend * sin(my_angles);
ent_seg02.tilt = ent_seg01.tilt + bend * sin(my_angles);
ent_seg02.roll = ent_seg01.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg02.x,ent_seg01,15);

ent_seg03.pan = ent_seg02.pan + bend * sin(my_angles);
ent_seg03.tilt = ent_seg02.tilt + bend * sin(my_angles);
ent_seg03.roll = ent_seg02.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg03.x,ent_seg02,15);

ent_seg04.pan = ent_seg03.pan + bend * sin(my_angles);
ent_seg04.tilt = ent_seg03.tilt + bend * sin(my_angles);
ent_seg04.roll = ent_seg03.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg04.x,ent_seg03,15);

ent_seg05.pan = ent_seg04.pan + bend * sin(my_angles);
ent_seg05.tilt = ent_seg04.tilt + bend * sin(my_angles);
ent_seg05.roll = ent_seg04.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg05.x,ent_seg04,15);

ent_seg06.pan = ent_seg05.pan + bend * sin(my_angles);
ent_seg06.tilt = ent_seg05.tilt + bend * sin(my_angles);
ent_seg06.roll = ent_seg05.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg06.x,ent_seg05,15);

ent_seg07.pan = ent_seg06.pan + bend * sin(my_angles);
ent_seg07.tilt = ent_seg06.tilt + bend * sin(my_angles);
ent_seg07.roll = ent_seg06.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg07.x,ent_seg06,15);

ent_seg08.pan = ent_seg07.pan + bend * sin(my_angles);
ent_seg08.tilt = ent_seg07.tilt + bend * sin(my_angles);
ent_seg08.roll = ent_seg07.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg08.x,ent_seg07,15);

ent_seg09.pan = ent_seg08.pan + bend * sin(my_angles);
ent_seg09.tilt = ent_seg08.tilt + bend * sin(my_angles);
ent_seg09.roll = ent_seg08.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg09.x,ent_seg08,15);

ent_seg10.pan = ent_seg09.pan + bend * sin(my_angles);
ent_seg10.tilt = ent_seg09.tilt + bend * sin(my_angles);
ent_seg10.roll = ent_seg09.roll + bend * sin(my_angles);
vec_for_vertex(ent_seg10.x,ent_seg09,15);

wait(1);
}
}

function main()
{
sky_color.red = 0;
sky_color.green = 57;
sky_color.blue = 77; // bright blue sky

d3d_antialias = 9;

level_load("Tentacles.WMB");
wait(2);
}