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).]