Massassi Forums Logo

This is the static archive of the Massassi Forums. The forums are closed indefinitely. Thanks for all the memories!

You can also download Super Old Archived Message Boards from when Massassi first started.

"View" counts are as of the day the forums were archived, and will no longer increase.

ForumsCog Forum → Saber cog w/Trails not working
Saber cog w/Trails not working
2001-05-28, 7:20 PM #1
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):

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).]
2001-05-29, 12:11 AM #2
Here ya go , this should work , you had quite alot of sytax errors ... including too many / left out brackets ...

I put in one under the timer id number 3 and you better double check that it's in the right place because I didn't know where the if statment was suppost to end ...

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);
                                      
2001-05-29, 9:18 AM #3
Thanks,
I tried out the cog, and I could pull the saber out now, but no trails...

Thanks for your concern,
-Tade

↑ Up to the top!