another cog question


[ Follow Ups ] [ Post Followup ] [ The Massassi Temple Message Board ]

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


Follow Ups:



Post a Followup

Name:
E-Mail:

Subject:

Comments:

Optional Link URL:
Link Title:
Optional Image URL:


[ Follow Ups ] [ Post Followup ] [ The Massassi Temple Message Board ]