Posted by Ironman on November 25, 1998 at 20:16:39:
Is it possible that this "00bridge.cog" I found in jkrmes.goo to allow a number "things" like wood platforms bow and bend when you walk on it. The cog looks like this.
# Jedi Knight MissionsCog Script
#
# 00_BRIDGE.COG
#
# ropebridge costructed of up to 20 slats.
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
symbols
message startup
message entered
thing player local
thing slat
thing slatleft nomessage
thing slatright nomessage
int onslat=0 local
float springdist local
flex springconst
float playermass local
float dampening=.80 local
float minimum=.20
flex slatmass=20.0
vector playervel local
vector slatvel local
vector upplayervel local
vector upslatvel local
vector newplayervel local
vector newslatvel local
vector restorevel local
vector homepos local
vector currentpos local
vector leftvel local
vector rightvel local
sound wav0=woodslat.wav
end
code
startup:
slatmass=20.0;
MoveToFrame(slat,1,0);
homepos = GetThingPos(slat);
//print("***************");
return;
entered:
if (onslat) return;
onslat=1;
player = GetLocalPlayerThing();
playervel = GetThingVel(player);
playermass = GetThingMass(player);
slatvel = GetThingVel(slat);
//set slat vector
if ((vectorZ(playervel)) >= -minimum)
{
onslat=0;
return;
}
if (vectorZ(slatvel) <= minimum && vectorZ(slatvel) >= -minimum)
{
slatvel=VectorSet(vectorX(slatvel),vectorY(slatvel),0.0);
}
// ("player mass x y z");
//flex (playermass);
//printflex (vectorx(playervel));
//printflex (vectory(playervel));
//printflex (vectorz(playervel));
//print ("slat mass x y z");
//printflex (slatmass);
//printflex (vectorx(slatvel));
//printflex (vectory(slatvel));
//printflex (vectorz(slatvel));
//set restoring vector
currentpos = GetThingPos(slat);
springdist = vectorz(homepos) - vectorZ(currentpos);
restorevel = VectorSet(0.0,0.0,springconst*springdist);
// ("homepos x y z");
//printflex (vectorx(homepos));
//printflex (vectory(homepos));
//printflex (vectorz(homepos));
//print ("currentpos x y z");
//printflex (vectorx(currentpos));
//printflex (vectory(currentpos));
//printflex (vectorz(currentpos));
//print ("restorvel x y z");
//printflex (vectorx(restorevel));
//printflex (vectory(restorevel));
//printflex (vectorz(restorevel));
//set left and right slat influences
leftvel = dampening * GetThingVel(slatleft);
rightvel = dampening * GetThingVel(slatright);
if (vectorz(leftvel) <= minimum && vectorZ(leftvel) >= -minimum)
{
leftvel=VectorSet(vectorX(leftvel),vectorY(leftvel),0.0);
}
if (vectorz(rightvel) <= minimum && vectorZ(rightvel) >= -minimum)
{
rightvel=VectorSet(vectorX(rightvel),vectorY(rightvel),0.0);
}
//print ("leftvel x y z");
//printflex (vectorx(leftvel));
//printflex (vectory(leftvel));
//printflex (vectorz(leftvel));
//print ("rightvel x y z");
//printflex (vectorx(rightvel));
//printflex (vectory(rightvel));
//printflex (vectorz(rightvel));
//set new Z vectors for player and slat
upplayervel=VectorSet(0.0,0.0,(slatmass*(vectorz(slat)+vectorz(restore)+vectorz(leftvel)+vectorz(rightvel))/playermass));
upslatvel=VectorSet(0.0,0.0,((vectorz(playervel)*playermass/slatmass)-vectorz(leftvel)-vectorz(rightvel)));
//print ("upplayervel x y z");
//printflex (vectorx(upplayervel));
//printflex (vectory(upplayervel));
//printflex (vectorz(upplayervel));
//print ("upslatvel x y z");
//printflex (vectorx(upslatvel));
//printflex (vectory(upslatvel));
//printflex (vectorz(upslatvel));
//set new player and slat vectors
newplayervel = vectorSet(vectorx(playervel),vectory(playervel),vectorz(uppplayervel));
newslatvel = vectorSet(vectorx(slatvel),vectory(slatvel),vectorz(upslatvel));
//print ("newplayervel x y z");
//printflex (vectorx(newplayervel));
//printflex (vectory(newplayervel));
//printflex (vectorz(newplayervel));
//print ("newslatvel x y z");
//printflex (vectorx(newslatvel));
//printflex (vectory(newslatvel));
//printflex (vectorz(newslatvel));
//apply results
DetachThing(player);
SetThingVel(player, newplayervel);
if (vectorz(newslatvel) <= -minimum)
{
MoveToFrame(slat,2,-(vectorz(newslatvel)));
}
if (vectorz(newslatvel) >= minimum)
{
MoveToFrame(slat,0,(vectorZ(newslatvel)));
}
onslat=0;
//print ("--------------");
return;
end
We'll tell me what you make of it.
Thanks