# 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] # # (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 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 int Dropped=0 local template trap=+traplaser local message startup message activated message deactivated message selected message deselected #message newplayer message autoselect message fire message timer message pulse end # ======================================================================================== code startup: // Setup delays and variables. mountWait = GetKeyLen(mountAnim); // Start the material flashing. MaterialAnim( flashing, 4, 1 ); Return; # ........................................................................................ fire: player = GetSourceRef(); mode = GetSenderRef(); // Check that the player is still alive. if(GetThingHealth(player) <= 0) { Return; } if(!Dropped) { projectile = FireProjectile(player, projectile_tpl, -1, 16, '0 0.05 0.00', '0 0 0', 1.0, 0, 0.0, 0.0); SetTimerEx(30, 3, 0, 0); jkPlayPOVKey(player, povfireAnim, 1, 0x38); ChangeInv(player, 8, -1); SetInv(player, 130, projectile); SetInv(player, 131, 1); SetThingPulse(projectile, 0.01); } else { if(GetInv(player, 130) != 0) SetLifeLeft(projectile, 0.01); killTimerEx(3); } Dropped = 1 - Dropped; jkPlayPOVKey(player, povfireAnim, 1, 0x38); ChangeInv(player, 8, -1.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; # ........................................................................................ pulse: FireProjectile(projectile, trap, -1, -1, '0 0 0.1', '90 0 0', 1, 0, 0, 0); return; # ........................................................................................ user0: Dropped = 0; SetLifeLeft(projectile, 0.01); killTimerEx(3); 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, 2, 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() == 3) call user0; else if(GetSenderID() == 0) SetThingPulse(projectile, 0.01); else StopKey(player, holsterTrack, 0.0); Return; end