PDA

View Full Version : Doing a big mod, and need some cogs...



SF_GoldG_01
07-08-2004, 04:25 PM
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

SF_GoldG_01
07-08-2004, 04:26 PM
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

SF_GoldG_01
07-08-2004, 07:31 PM
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

Stormtrooper
07-08-2004, 10:10 PM
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!!!"

SF_GoldG_01
07-09-2004, 09:50 AM
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).]

Quib Mask
07-09-2004, 10:00 AM
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

SF_GoldG_01
07-09-2004, 06:33 PM
Now I know why it didn't work.

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

SF_GoldG_01
07-10-2004, 10:42 AM
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

zagibu
07-10-2004, 03:24 PM
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:


# 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)