I modified the sequencer charge cog and made it so that fire 1 sets a
trip mine and fire 2 does the normal proximity mine, the trip mine doesnt
use projectiles to see when players or actors are setting it off and there
is no limit to the amount of trip mines a player can set.
I didnt make it so the mine shoots a beam that players can see, you can
add one if you want.
I havent tested it in MP but i think i should work.
If the trip mine is set at ankle level it wont go off, if you find this a problem
then just adjust the part where it finds the SIZE and have it add a little to
the size.
I dont know if it has been done before or if anyone needs it but if anyone
wants to use this cog or parts of it go ahead.
trip mine and fire 2 does the normal proximity mine, the trip mine doesnt
use projectiles to see when players or actors are setting it off and there
is no limit to the amount of trip mines a player can set.
I didnt make it so the mine shoots a beam that players can see, you can
add one if you want.
I havent tested it in MP but i think i should work.
If the trip mine is set at ankle level it wont go off, if you find this a problem
then just adjust the part where it finds the SIZE and have it add a little to
the size.
I dont know if it has been done before or if anyone needs it but if anyone
wants to use this cog or parts of it go ahead.
Code:
# Jedi Knight Cog Script
#
# WEAP_SEQCHARGE.COG
#
# WEAPON 8 Script - Sequencer Charge
#
# Heartier than the Thermals and the DF IM Mines these are used by placing them on
# the ground or on walls. These have both delayed and proximity options.
#
# - Not affected by MagSealed sectors/surfaces.
#
# [YB & CYW]
# Modified by DSLS_DeathSythe - for trip mines
#
# (C) 1997 LucasArts Entertainment Co. All Rights Reserved
# ========================================================================================
symbols
model povModel=seqv.3do local
model weaponMesh=seqg.3do local
keyframe mountAnim=SeqVmnt.key local
keyframe dismountAnim=SeqVdis.key local
keyframe povfireAnim=SeqVpst1.key local
keyframe holsterAnim=kyhlstr.key local
flex mountWait local
flex fireWait=0.8 local
flex holsterWait local
template projectile_tpl=+seqchrg local
template projectile_tpl2=+seqchrg2 local
int projectile local
material flashing=seq0mtp3.mat local
int cel local
int mode local
thing player local
int trackID=-1 local
int holsterTrack local
int selectMode=1 local
message startup
message activated
message deactivated
message selected
message deselected
#message newplayer
message autoselect
message fire
message timer
#----------------------------------
message pulse
thing mine=-1 local
thing victim=-1 local
vector vec local
vector vec2 local
int a=0 local
flex size=0.0 local
flex dist=0.0 local
flex dot=0.0 local
sound trip_snd=schargecountdown02.wav local
template exp_tpl=+sequencer_exp local
#----------------------------------
end
#========================================================================================
code
startup:
// Setup delays and variables.
mountWait = GetKeyLen(mountAnim);
// Start the material flashing.
MaterialAnim( flashing, 4, 1 );
return;
#-----------------------------------------------------------------------------------------
fire:
//Print("firing message");
player = GetSourceRef();
mode = GetSenderRef();
// Check that the player is still alive.
if(GetThingHealth(player) <= 0)
{
return;
}
projectile = FireProjectile(player, projectile_tpl[mode], -1, 16, '0 0.05 0.00', '0 0 0', 1.0, 0, 0.0, 0.0);
jkPlayPOVKey(player, povfireAnim, 1, 0x38);
ChangeInv(player, 8, -1.0);
if(mode == 0)
{
Print("Trip Mine Set");
CaptureThing(projectile);
SetTimerEx(2.0, projectile, GetThingSignature(projectile), 0);
//SetThingPulse(projectile, 2.0);
SetLifeLeft(projectile, 60.0);
}
// If out of ammo try to autoswitch to another weapon
// if autoswitch is enabled else just switch to fists.
if(GetInv(player, 8) < 1)
{
if(GetAutoSwitch() & 1)
{
SelectWeapon(player, AutoSelectWeapon(player, 1));
}
else
{
SelectWeapon(player, 1);
}
}
return;
#-----------------------------------------------------------------------------------------
activated:
player = GetSourceRef();
mode = GetSenderRef();
if(mode > 1) Return;
jkSetWaggle(player, '0.0 0.0 0.0', 0);
ActivateWeapon( player, fireWait, mode );
Return;
# ........................................................................................
deactivated:
player = GetSourceRef();
mode = GetSenderRef();
jkSetWaggle(player, '10.0 7.0 0.0', 350);
DeactivateWeapon( player, mode );
Return;
# ........................................................................................
selected:
player = GetSourceRef();
PlayMode(player, 40);
jkSetPOVModel(player, povModel);
SetArmedMode(player, 0);
jkSetWeaponMesh(player, weaponMesh);
trackID = jkPlayPOVKey(player, mountAnim, 0, 20);
jkSetWaggle(player, '10.0 7.0 0.0', 350);
SetMountWait(player, GetKeyLen(mountAnim));
jkClearFlags(player, 0x5);
SetCurWeapon(player, 8);
Return;
# ........................................................................................
deselected:
player = GetSourceRef();
jkPlayPOVKey(player, dismountAnim, 0, 18);
holsterWait = GetKeyLen(holsterAnim);
SetMountWait(player, holsterWait);
holsterTrack = PlayKey(player, holsterAnim, 1, 0x4);
SetTimerEx(holsterWait, 1000, 0.0, 0.0);
if (trackID != -1)
{
jkStopPOVKey(player, trackID, 0);
trackID = -1;
}
jkSetWaggle(player, '0.0 0.0 0.0', 0);
Return;
# ........................................................................................
//newplayer:
// player = GetSourceRef();
//
// // Make sure that if the player is respawning, the old mount isn't playing anymore.
// if (trackID != -1)
// jkStopPOVKey(player, trackID, 0);
//
// Return;
# ........................................................................................
autoselect:
selectMode = GetSenderRef();
player = GetSourceRef();
// If the player has ammo
if(GetInv(player, 8) != 0)
{
// query for ammo
if(selectMode == -1)
{
ReturnEx(300.0);
Return;
}
if((selectMode == 0) && !(GetAutoPickup() & 2))
{
ReturnEx(300.0);
Return;
}
if((selectMode == 1) && !(GetAutoSwitch() & 2))
{
ReturnEx(300.0);
Return;
}
if((selectMode == 2) && !(GetAutoPickup() & 2))
{
ReturnEx(300.0);
Return;
}
ReturnEx(-2.0);
Return;
}
else
{
ReturnEx(-1.0);
}
Return;
#........................................................................................
timer:
if(GetSenderID() == 1000)
{
StopKey(player, holsterTrack, 0.0);
return;
}
if(GetParam(0) = GetThingSignature(GetSenderID()))
{
Print("Trip Mine Armed");
SetThingPulse(GetSenderID(), 0.05);
}
return;
#----------------------
pulse:
mine = GetSenderRef();
victim = -1;
//-check for PLAYERS ONLY and check
// if they are setting the mine off.
// for(a=0; a<GetNumPlayers(); a=a+1)
// {
// victim = GetPlayerThing(a);
// if(HasLOS(mine, victim))
// {
// size = GetThingCollideSize(victim);
// dist = VectorDist(GetThingPos(mine), GetThingPos(victim));
// vec = GetThingUVec(mine);
// vec2 = VectorNorm(VectorSub(GetThingPos(victim), GetThingPos(mine)));
// vec2 = VectorCross(vec, vec2);
// dot = VectorLen(vec2)*dist;
// if(dot<size)
// {
//Print("BOOOM!!!");
// PlaySoundThing(trip_snd, mine, 1.0, -1, -1, 0x0);
// //-exp type 1
// SetLifeLeft(mine, 0.01);
// //-exp type 2
// CreateThing(exp_tpl, mine);
// //-exp type 3
// FireProjectile(mine, exp_tpl, -1, -1, '0 0 0', '0 0 0', 1.0, 0, 0.0, 0.0);
// DestroyThing(mine);
// a = 1001;
// }
// }
// }
//-Look through all the things for
// ACTORS & PLAYERS and check if
// they are setting off the mine
for(a=0; a<1000; a=a+1)
{
if(GetThingType(a) == 2 || GetThingType(a) == 10)
{
victim = a;
if((victim != -1) && (HasLOS(mine, victim)))
{
size = GetThingCollideSize(victim);
dist = VectorDist(GetThingPos(mine), GetThingPos(victim));
vec = GetThingUVec(mine);
vec2 = VectorNorm(VectorSub(GetThingPos(victim), GetThingPos(mine)));
vec2 = VectorCross(vec, vec2);
dot = VectorLen(vec2)*dist;
if(dot<size)
{
//Print("BOOOM!!!");
PlaySoundThing(trip_snd, mine, 1.0, -1, -1, 0x0);
//-exp type 1
// SetLifeLeft(mine, 0.01);
//-exp type 2
// CreateThing(exp_tpl, mine);
//-exp type 3
FireProjectile(mine, exp_tpl, -1, -1, '0 0 0', '0 0 0', 1.0, 0, 0.0, 0.0);
DestroyThing(mine);
a = 1001;
}
}
}
}
// SetThingPulse(mine, 0.05);
return;
#######################
endFamous last words - "It seemed like a good idea at the time."

