Hi,
Me and my friend have been working on this cog to add saber trails, trailing different 3dos depending on the user's saber color.
We came up with this, but it doesn't work at all (can't even pull out the weapon):
It's basically using Glowsaber 3's method, with some modifications to suit our purposes.
Does anyone have any ideas as to why it won't work?
Thanks alot!
-Tade
[This message has been edited by Tade (edited May 28, 2001).]
Me and my friend have been working on this cog to add saber trails, trailing different 3dos depending on the user's saber color.
We came up with this, but it doesn't work at all (can't even pull out the weapon):
Code:
# Jedi Knight Cog Script
#
# WEAP_SABER.COG
#
# WEAPON Script - Lightsaber
#
# [CYW]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================
symbols
cog kyleCog local
thing player local
model povModel=sabv.3do local
model saberMesh=sabg.3do local
model Fan1=sabfan-g.3do local
model Fan11=sabfan-y.3do local
model Fan12=sabfan-o.3do local
model Fan13=sabfan-r.3do local
model Fan14=sabfan-p.3do local
model Fan15=sabfan-b.3do local
model Fan16=sabfan-dr.3do local
material blueMat=saberblue1.mat local
material greenMat=sabergreen1.mat local
material yellowMat=saberyellow1.mat local
material orangeMat=saberorange1.mat local
material redMat=saberred1.mat local
material dredMat=saberdred1.mat local
material purpleMat=saberpurple1.mat local
flex holsterWait local
flex damage local
vector thrust local
vector shakePos local
vector shakeAngle local
int mountAnimID local
int preAnimID local
int povPreAnimID local
int slashAnimID local
int povSlashAnimID local
int mode local
int slash local
int nextAttack local # 0=right 1=left
int humChannel local
int holsterTrack local
int slashSound local
int assign local
int nosaber local
# ------------- Begin custom variables ----------------
flex bladelen=0.117 local
int matindex local
flex keylen local
int allowfans=1 local
flex fanwait local
int fanindex local
int saberSideMat=-1 local
# -------------- End custom variables -----------------
sound sabcolorSound=lvrclik1.wav local
sound dismountSound=LtSaberOff01.WAV local
sound mountSound=LtSaberOn01.WAV local
sound hitSound01=LtSaberHit01.WAV local
sound hitSound02=LtSaberHit02.WAV local
sound hitSound03=LtSaberHit03.WAV local
sound hitSound12=LtSaberHit12.WAV local
sound hitSound14=LtSaberHit14.WAV local
sound swingSound01=LtSaberSwing01.WAV local
sound swingSound02=LtSaberSwing02.WAV local
sound swingSound03=LtSaberSwing03.WAV local
sound swingSound04=LtSaberSwing04.WAV local
sound swingSound05=LtSaberSwing05.WAV local
sound swingSound06=LtSaberSwing06.WAV local
sound swingSound07=LtSaberSwing07.WAV local
sound swingSound08=LtSaberSwing08.WAV local
sound swingSoundDbl01=LtSaberSwingDbl01.WAV local
sound humSound01=LtSaberLp01.WAV local
#.......................................................................
# POV animations
keyframe mountAnim=SabVmnt.key local
keyframe dismountAnim=SabVdis.key local
keyframe holdAnim=SabVhold.key local
keyframe povSnapAnim1=SabVf1.key local
keyframe povSnapAnim2=SabVf2.key local
keyframe povSnapAnim3=SabVf1.key local
keyframe povPreFireAnim=SabVrdy.key local
keyframe povFireAnimF1=SabVsnp1.key local
keyframe povFireAnimF2=SabVsnp2.key local
keyframe povFireAnimB1=SabVb1.key local
keyframe povFireAnimB2=SabVb2.key local
keyframe povFireAnimL1=SabVl1.key local
keyframe povFireAnimR1=SabVr1.key local
keyframe povChargeAnim=SabVch.key local
keyframe povPreBlockAnim=SabVblk.key local
#........................................................................
# External animations
keyframe preFireAnimL=KYreadyl.key local
keyframe preFireAnimR=KYreadyr.key local
keyframe fireAnimF1=KYsnap1.key local
keyframe fireAnimF2=KYsnap2.key local
keyframe fireAnimB1=KYsabrb1.key local
keyframe fireAnimB2=KYsabrb2.key local
keyframe fireAnimL1=KYsabrl1.key local
keyframe fireAnimR1=KYsabrr1.key local
keyframe snapAnim1=KYsabrf1.key local
keyframe snapAnim2=KYsabrf2.key local
keyframe snapAnim3=KYsabrf1.key local
keyframe chargeAnim=KYcharge.key local
keyframe preBlockAnim=KYblock.key local
keyframe holsterAnim=kyhlstr.key local
#.........................................................................
message startup
message activated
message deactivated
message selected
message deselected
message newplayer
message autoselect
message timer
message fire
message killed
message user5 # Enable/Disable fans
end
#==========================================================================
code
startup:
// Set up player with saber.
player = GetLocalPlayerThing();
kyleCog = GetThingClassCog(player);
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
slash = 0;
nextAttack = 0;
slashAnimID=-1;
povSlashAnimID=-1;
return;
# ........................................................................................
timer:
id = GetSenderId();
if (id == 0)
{
// Play mounting sound.
PlaySoundThing(mountSound, player, 1.0, -1, -1, 0x80);
humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
jkSetFlags(player, 0x5);
)
)
else
if (id == 1)
{
// Make sure a loose timer doesn't come in and reset the block after we deselect the saber.
if (nosaber == 0)
SetActorFlags(player, 0x2000);
}
else
if (id == 2)
{
StopKey(player, holsterTrack, 0.0);
}
else
if (id == 3) //This is the trail control
{
if(allowfans) // They can disable the fans now.
{
saberSideMat = jkGetSaberSideMat(player);
if(saberSideMat == blueMat)
{
// Print("Blue saber...");
jkSetWeaponMesh(player, Fan15);
sleep(fanwait);
jkSetWeaponMesh(player, Fan15);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan15);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == greenMat)
{
// Print("Green saber...");
jkSetWeaponMesh(player, Fan1);
sleep(fanwait);
jkSetWeaponMesh(player, Fan1);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan1);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == yellowMat)
{
// Print("Yellow saber...");
jkSetWeaponMesh(player, Fan11);
sleep(fanwait);
jkSetWeaponMesh(player, Fan11);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan11);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == orangeMat)
{
// Print("Orange saber...");
jkSetWeaponMesh(player, Fan12);
sleep(fanwait);
jkSetWeaponMesh(player, Fan12);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan12);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == redMat)
{
// Print("Red saber...");
jkSetWeaponMesh(player, Fan13);
sleep(fanwait);
jkSetWeaponMesh(player, Fan13);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan13);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == dredMat)
{
// Print("Dark Red saber...");
jkSetWeaponMesh(player, Fan16);
sleep(fanwait);
jkSetWeaponMesh(player, Fan16);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan16);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(saberSideMat == purpleMat)
{
// Print("Purple saber...");
jkSetWeaponMesh(player, Fan14);
sleep(fanwait);
jkSetWeaponMesh(player, Fan14);
sleep(fanwait*5);
jkSetWeaponMesh(player, Fan14);
sleep(fanwait);
jkSetWeaponMesh(player, saberMesh);
}
else
if(id == 4)
{
jkSetWeaponMesh( player, saberMesh); //Disable glowsaber.
}
else
if(id == 5) // special timer for double swing.
{
KillTimerEx(3);
jkSetWeaponMesh(player, saberMesh);
fanwait=(GetKeyLen(chargeAnim)/18);
SetTimerEx(fanwait, 3, 0, 0); // Reset swing timer.
}
Return;
# ........................................................................................
selected:
jkClearFlags(player, 0x10);
jkPrintUNIString(player, 10);
assign = GetSenderRef();
// Go to external
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 0) && (GetPrimaryFocus(0) == player))
CycleCamera();
SetArmedMode( player, 2 );
jkSetWaggle(player, '10.0 7.0 0.0', 350);
ParseArg(player, "puppet=ky.pup");
if (assign == 0)
{
// Play the animation (NOLOOP + UNIQUE + ENDPAUSE).
// The animation is held at the last frame after it is played.
PlayMode(player, 42);
mountAnimID = jkPlayPOVKey( player, mountAnim, 0, 0x14 );
SetTimerEx(0.7, 0, 0, 0);
}
else
{
mountAnimID = jkPlayPOVKey( player, holdAnim, 0, 0x14 );
humChannel = PlaySoundThing(humSound01, player, 1.0, -1, -1, 0x81);
jkSetFlags(player, 0x80);
}
SetMountWait(player, GetKeyLen(mountAnim));
// Set saber flags, and allow activation of the weapon
SetCurWeapon( player, 10 );
// Set autoblock on.
SetActorFlags(player, 0x2000);
jkDisableSaber(player);
nosaber = 0;
return;
# ........................................................................................
deselected:
// Back to POV
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
CycleCamera();
// Shrink saber.
jkSetFlags(player, 0x8);
// Dismount the Lightsaber.
PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
jkPlayPOVKey( player, dismountAnim, 0, 18 );
holsterWait = GetKeyLen(holsterAnim);
SetMountWait(player, holsterWait);
holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
SetTimerEx(holsterWait, 2, 0.0, 0.0);
if (mountAnimID != -1)
{
jkStopPOVKey( player, mountAnimID, 0 );
mountAnimID = -1;
}
jkSetWaggle(player, '0.0 0.0 0.0', 0);
// Clear variables
slash = 0;
nextAttack = 0;
slashAnimID = -1;
povSlashAnimID = -1;
StopSound( humChannel, 0.5 );
// Disable autoblock
KillTimerEx(1);
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
nosaber = 1;
return;
# ........................................................................................
activated:
mode = GetSenderRef();
jkSetWaggle(player, '0.0 0.0 0.0', 0);
if (mode > 1)
return;
povPreAnimID = -1;
preAnimID = -1;
ActivateWeapon( player, 0.5, mode );
// Disable autoblock
ClearActorFlags(player, 0x2000);
return;
# ........................................................................................
deactivated:
mode = GetSenderRef();
jkSetWaggle(player, '10.0 7.0 0.0', 350);
DeactivateWeapon( player, mode );
// Enable autoblock
SetTimerEx(0.5, 1, 0, 0);
return;
# ........................................................................................
fire:
// Kill trail and trail timers.
KillTimerEx(3);
KillTimerEx(4);
jkSetWeaponMesh(player, saberMesh);
// Stop block animations, by sending a message to kyle.cog.
SendMessage( kyleCog, user0 );
// Underwater saber attacks.
if (GetMajorMode(player) == 5)
{
jkEnableSaber( player, 15, 0.15, 0.25 );
if (nextAttack == 0)
{
PlayMode( player, 8);
jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
nextAttack = 1;
}
else
{
PlayMode( player, 18);
jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.6);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
}
else
{
mode = GetSenderRef();
if (mode == 0)
{
// If we do another attack, reset the quick slash counter.
thrust = GetThingThrust( player );
// RIGHT Regular Strike
if (VectorX(thrust) > 0)
{
jkEnableSaber( player, 15, 0.15, 0.25 );
jkPlayPOVKey( player, povFireAnimR1, 2, 0x38 );
PlayKey(player, fireAnimR1, 1, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.5);
}
else
// LEFT Regular Strike
if (VectorX(thrust) < 0)
{
jkEnableSaber( player, 15, 0.15, 0.25 );
jkPlayPOVKey( player, povFireAnimL1, 2, 0x38 );
PlayKey(player, fireAnimL1, 1, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.5);
}
else
// BACKWARDS Strike
if (VectorY(thrust) < -0.1)
{
jkEnableSaber( player, 15, 0.15, 0.25 );
if (nextAttack == 0)
{
jkPlayPOVKey( player, povFireAnimB1, 2, 0x38 );
PlayKey(player, fireAnimB1, 2, 0x38);
nextAttack = 1;
}
else
{
jkPlayPOVKey( player, povFireAnimB2, 2, 0x38 );
PlayKey(player, fireAnimB2, 2, 0x38);
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.4);
}
else
// STANDING Strike
if (VectorY(thrust) < 0.1)
{
jkEnableSaber( player, 15, 0.25, 0.7 );
if (nextAttack == 0)
{
jkPlayPOVKey( player, povFireAnimF1, 2, 0x38 );
PlayKey(player, fireAnimF1, 2, 0x38);
nextAttack = 1;
}
else
{
jkPlayPOVKey( player, povFireAnimF2, 2, 0x38 );
PlayKey(player, fireAnimF2, 2, 0x38);
nextAttack = 0;
}
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
// PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
slashSound = Rand()*7;
PlaySoundThing(swingSound01[slashSound], player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.4);
}
else
{
// QUICK slash.
if (slash == 0)
{
// If after a second, we haven't attacked again, reset slash to 0.
jkEnableSaber( player, 15, 0.15, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim1, 2, 0x38);
slashAnimID = PlayKey(player, snapAnim1, 1, 0x38);
PlaySoundThing(swingSound01, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.20);
slash = 1;
}
else
if (slash == 1)
{
// Allow another second for the 3rd attack.
jkEnableSaber( player, 15, 0.15, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim2, 2, 0x38 );
slashAnimID = PlayKey(player, snapAnim2, 1, 0x38);
PlaySoundThing(swingSound03, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.20);
slash = 2;
}
else
if (slash == 2)
{
jkEnableSaber( player, 15, 0.2, 0.25 );
povSlashAnimID = jkPlayPOVKey( player, povSnapAnim3, 2, 0x38 );
slashAnimID = PlayKey(player, snapAnim3, 1, 0x38);
PlaySoundThing(swingSound02, player, 1.0, -1, -1, 0x80);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
SetFireWait(player, 0.5);
slash = 0;
}
}
fanwait = (keylen / 10);
SetTimerEx(fanwait, 3, 0, 0);
}
// mode == 1
else
{
// HEAVY slash.
{
jkEnableSaber( player, 15, 0.3, 1.2 );
jkPlayPOVKey( player, povChargeAnim, 2, 0x38 );
PlayKey(player, chargeAnim, 2, 0x38);
shakePos = VectorScale(RandVec(),.001);
shakeAngle = VectorScale(RandVec(),.5);
SetPOVShake(shakePos, shakeAngle, .05, 80.0);
PlaySoundThing(swingSoundDbl01, player, 1.0, -1, -1, 0x80);
SetFireWait(player, 0.5);
}
}
fanwait = (keylen / 10);
SetTimerEx(fanwait, 3, 0, 0);
}
return;
# ........................................................................................
newplayer:
slash = 0;
nextAttack = 0;
slashAnimID=-1;
povSlashAnimID=-1;
// Disable autoblock
ClearActorFlags(player, 0x2000);
jkDisableSaber(player);
// Back to POV, since the saber should never get autoselected at start for a multiplayer game.
if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 1) && (GetPrimaryFocus(1) == player))
CycleCamera();
return;
# ........................................................................................
autoselect:
// Return the saber when out of everthing except the fists
// If the player has the weapon
if(GetInv(player, 10) != 0.0)
{
ReturnEx(200.0);
}
else
{
ReturnEx(-1.0);
}
Return;
#........................................................................
killed:
if (player == GetSenderRef())
{
if (GetCurWeapon(player) == 10)
{
jkSetWeaponMesh( player, saberMesh); //Disable glowsaber.
KillTimerEx(3);
KillTimerEx(5);
SetTimerEx(1, 4, 0, 0); // Kill saber again for backup.
PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
nosaber = 1;
}
}
Return;
#.............................................................................
user5:
allowfans=(1-allowfans);
jkPrintUNIString(player, 38+allowfans);
Return;
It's basically using Glowsaber 3's method, with some modifications to suit our purposes.
Does anyone have any ideas as to why it won't work?
Thanks alot!
-Tade
[This message has been edited by Tade (edited May 28, 2001).]