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 → Doing a big mod, and need some cogs...
Doing a big mod, and need some cogs...
2004-07-08, 1:25 PM #1
I've been at this for one whole year now, and I just don't get it, I can program PB, GML, and Basic, but I can't understand this. Any how, I need two, or probably just one cog, depends. I need to have saber trails, one hit killing sabre, deactivation of the autoblock, and have a blocking system like the one in Return Of The King mod, I'll do the rest even animation. About the blocking system, its a key that you push it plays a blocking animation, but, if something is coming towards you, depending on the direction it will block it, lightsabres and bolts ONLY.
The reward:
Full credit
Off hand invitation to join my new clan as council member.
The right to test the Episode III lightsabre duel between Anikan and Obiwan, and even videos are included in it.
The ability to beta test this mod.

Chow, and please hurry.

------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso
Nothing to see here, move along.
2004-07-08, 1:26 PM #2
Oh I forgot, It also need saber locks, you know when 2 sabers lock.

------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso
Nothing to see here, move along.
2004-07-08, 4:31 PM #3
Is it me or do I detect that what I ask is pointless.


------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso
Nothing to see here, move along.
2004-07-08, 7:10 PM #4
Just a note, saber locks in JK are almost impossible. *note the almost* Somebody tried making saber locks in JK but I don't know how far they got on it or if they ever got it to work.

For saber trails, look at SBX, pretty much all it does is change the weapon model while swinging. For the one hit kill saber you could edit the template that JK used for the weapon (+gamaxe IIRC) to give maxdamage and mindamage of 500 or something.

------------------
*Takes out his blaster and fires shots at the wall, the blastmarks leave the words "S-TROOPER WUZ 'ERE!!!"
2004-07-09, 6:50 AM #5
And what of the blocking system, any conclusions to that?
EDIT:Who is this someone?

------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso

[This message has been edited by SF_GoldG_01 (edited July 09, 2004).]
Nothing to see here, move along.
2004-07-09, 7:00 AM #6
The saber doesn't use a template/projectile to do damage. jkEnableSaber(player, 50, 0.15, 0.25); is what sets the damage done on contact. The number 50, is the amount of saber damage. 0.15 is the length of the blade, and 0.25 has something to do with how long the blade is active/how long before it can do damage again.

Quib Mask
2004-07-09, 3:33 PM #7
Now I know why it didn't work.

------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso
Nothing to see here, move along.
2004-07-10, 7:42 AM #8
Umm just keeping this topic alive for a solution of the blocking system thing.

------------------
"Computer are useless, all they can give you are answers"/Pablo Piacasso
Nothing to see here, move along.
2004-07-10, 12:24 PM #9
It's basically a question on when to activate the autoblock mode. JK's blocking system is not cog controlled, but you can decide when to activate it. Try the below cog, it changes the secondary fire mode of the saber into a "block awareness" mode, where kyle is ready to block incoming bolts. If you don't hold secondary fire, incoming shots will not be blocked. I know, it's not exactly what you want, but it should show you the right direction:
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

flex     jediRank				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)
			ClearActorFlags(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 off.
	ClearActorFlags(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;

   if(mode == 0)
   	ActivateWeapon( player, 0.5, mode );
   else
   {
      ActivateWeapon(player, 0, mode);
      jediRank = GetInv(player, 20);
      SetInv(player, 20, 8);
      // Set autoblock on.
      SetActorFlags(player, 0x2000);
      SetInv(player, 20, jediRank);
   }

   return;

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

deactivated:
   mode = GetSenderRef();

   jkSetWaggle(player, '10.0 7.0 0.0', 350);
   DeactivateWeapon( player, mode );

   ClearActorFlags(player, 0x2000);

   return;

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

fire:
	// Stop block animations, by sending a message to kyle.cog.
	//SendMessage( kyleCog, user0 );

	// Underwater saber attacks.
	if (GetMajorMode(player) == 5)
	{
		jkEnableSaber( player, 50, 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;
				}
			}
		}
		
	}
   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

I might improve it tomorrow or nect weekend, but only if I can find time.

------------------
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)
"Häb Pfrässe, süsch chlepfts!" - The coolest language in the world (besides Cherokee)

↑ Up to the top!