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 → Simple Cog
Simple Cog
2005-03-08, 8:29 PM #1
I don't know much about cogging, but I remember something about being able to create an unfair lightsaber. I'm not planning on using it in mp, because I don't play mp. I recently downloaded the Haven 16 level, and I need something other than quick fists that can help me beat him. It takes forever with a lightsaber, and when I do vanquish him (ghosts cannot be kill, only dematerialized), he respawns back in his original cell. Surely you could help me Shred. Some thing that simple could take you like 1/bijillionth of a second.
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 8:48 PM #2
Me? I'm an artist, not a cogger... yeah..

Why dont you just play with a mod active? heres one: http://www.massassi.net/levels/files/1060.shtml
Jedi Knight Enhanced
Freelance Illustrator
2005-03-08, 8:59 PM #3
Thanks man. I know it's like asking Da Vinci to draw a stick figure, but that ghost is friggin' hard to beat.
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 9:02 PM #4
I use to have this mod. All this will do in close range is crush me to death. I just want a "one-hit-kills" lightsaber, besides, this pack interfears with the have one.
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 9:07 PM #5
Code:
# Jedi Knight Cog Script
#
# WEAP_SABER.COG
#
# WEAPON Script - Lightsaber
#
# [CYW]
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================


symbols

message  startup
message  activated
message  deactivated
message  selected
message  deselected
message  newplayer
message  autoselect
message  timer
message  fire
message	killed

# ........................................................................................

model    povModel=sabv.3do             local
model    saberMesh=sabg.3do            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

# ........................................................................................

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

flex     damage                                 local
flex     bladeLen                               local
flex		holsterWait										local

thing    player                                 local
thing    antagonist                             local

vector   ppos                                   local
vector   apos                                   local
vector   diff                                   local
vector   thrust                                 local

flex     damage                                 local
flex     type                                   local
flex     dot                                    local

# ........................................................................................
# Animation tracks

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

vector   shakePos											local
vector   shakeAngle										local

cog		kyleCog											local

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);
	}
	
   return;

# ........................................................................................

selected:
	assign = GetSenderRef();

	// Go to external
	if ((jkGetSaberCam() == 1) && (GetCurrentCamera() == 0) && (GetPrimaryFocus(0) == player))
		CycleCamera();
	
	// Setup the meshes and models.
	jkSetPOVModel( player, povModel );
	SetArmedMode( player, 2 );
	jkSetWeaponMesh( player, saberMesh );
	jkSetWaggle(player, '10.0 7.0 0.0', 350);
	
	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:
	// Stop block animations, by sending a message to kyle.cog.
	SendMessage( kyleCog, user0 );

	// Underwater saber attacks.
	if (GetMajorMode(player) == 5)
	{
		jkEnableSaber( player, 99999999999.9, 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, 1.0);
		
		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, 50, 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.8);
			}
			else
			// LEFT Regular Strike
			if (VectorX(thrust) < 0)
			{
				jkEnableSaber( player, 50, 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.8);
			}
			else
			// BACKWARDS Strike
			if (VectorY(thrust) < -0.1)
			{
				jkEnableSaber( player, 50, 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.8);
			}
			else
			// STANDING Strike
			if (VectorY(thrust) < 0.1)
			{
				jkEnableSaber( player, 50, 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.8);
			}
			else
			{
				// QUICK slash.
				if (slash == 0)
				{
					// If after a second, we haven't attacked again, reset slash to 0.
					jkEnableSaber( player, 40, 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.25);
					slash = 1;
				}
				else
				if (slash == 1)
				{
					// Allow another second for the 3rd attack.
					jkEnableSaber( player, 40, 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.25);
					slash = 2;
				}
				else
				if (slash == 2)
				{
					jkEnableSaber( player, 60, 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, 1.0);
					slash = 0;
				}
			}
		}
		// mode == 1
		else
		{
			// HEAVY slash.
			{
				jkEnableSaber( player, 160, 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, 2.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)
			PlaySoundThing(dismountSound, player, 1.0, -1, -1, 0x80);
		nosaber = 1;
	}
	Return;
	

end
Jedi Knight Enhanced
Freelance Illustrator
2005-03-08, 9:11 PM #6
Once again, what's little to you will bring years of ghostbusting enjoyment to my JK. Thanks. :D
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 9:43 PM #7
Come on Shred, what are you trying to pull. I'm no expert at cogging, but I can at least change sounds, projectiles, and animations. Your cog only made Kyle reach for his hip. Funny thing is, when I change the value you changed, I can't get it to work either. What's up with that? :confused:
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 10:18 PM #8
Once again my fault. Sorry for pointing the blame Shred. I created a gob with the original weap_fist.cog from the res2.gob, and it does the same thing. What am I doing wrong!
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-08, 11:17 PM #9
Sorry to post a new topic so soon, but Shred18 gave me a cog, and it should work, but I can't get it too. How hard is it to get some help around here? I don't mean to sound ugly, but I'm having a legitament problem, and on one is answering me. Sorry again to the moderators. I would just like some answers before I get one of theses: :banned:

I've got a Cog. It's for a weapon. When I use it, all Kyle does is reach for his holster, and replace his weapon with the exact same weapon. (Bryar -> Bryar; Fist -> Fist). First thing I did was lose my cool on Shred, which was wrong, and I apologise, but I did some testing, and I found out I couldn't even get it to work in the resource/cog file. Then I tried the saber cog lucasarts made, and it did the same thing. It must be something wrong on my part. I've tried gobex, patch commander, and manual input, how do you correctly get a lightsaber cog to work. If you need referance to the cog, it is in the simple cog post right under this one.

Sorry again to the moderator for two consecutive post on the same subject in the same day. :(
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-09, 12:17 AM #10
I can send you a complete gob this evening, if I don't forget it...
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
2005-03-09, 12:31 AM #11
That would be very aprecieated, pardon my grammer. I'm just so confused when it comes to anything but texture editing. Thank you very much.
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-09, 6:03 AM #12
Quote:
Originally posted by H.Q. Pendragon
...When I use it, all Kyle does is reach for his holster, and replace his weapon with the exact same weapon.....


That usually indicates some sort of problem with the cog. Have you run PARSEC on it?

Quote:
Sorry again to the moderator for two consecutive post on the same subject in the same day. :(

Thats ok. I took the liberty of merging them.... ;)
And when the moment is right, I'm gonna fly a kite.
2005-03-09, 6:25 AM #13
I have never heard of PARSEC, but I think the problem lies with me. I went as far as to pull the "weap_saber.cog" from the JK res2.gob, and placed it (unmodified) in a gob made with gobex, a gob made with patch commander, and even in the resources/cog file. Even the un modified cog gives me problems. But if PARSEC might help me with my problem, I'd be willing to try.
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams
2005-03-09, 8:05 AM #14
I GOT IT TO WORK! :D All I had to do was change the beginning numbers, like Shred said, but to a value that JK would except. My saber has 5000 hit on every swing, even scratches. So thanks a whole lot guys, I weild a lightsaber that can wreck an chicken walker in one hit. :cool:
A common mistake people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools.

-Douglas N. Adams

↑ Up to the top!