| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- //--------------------------------------------------------------------------
- // Sounds
- //--------------------------------------------------------------------------
- datablock SFXProfile(RyderFireSound)
- {
- filename = "art/sound/weapons/wpn_ryder_fire";
- description = AudioClose3D;
- preload = true;
- };
- datablock SFXProfile(RyderReloadSound)
- {
- filename = "art/sound/weapons/wpn_ryder_reload";
- description = AudioClose3D;
- preload = true;
- };
- datablock SFXProfile(RyderSwitchinSound)
- {
- filename = "art/sound/weapons/wpn_ryder_switchin";
- description = AudioClose3D;
- preload = true;
- };
- // ----------------------------------------------------------------------------
- // Particles
- // ----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // Explosion
- //-----------------------------------------------------------------------------
- //--------------------------------------------------------------------------
- // Shell ejected during reload.
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // Projectile Object
- //-----------------------------------------------------------------------------
- //-----------------------------------------------------------------------------
- // Ammo Item
- //-----------------------------------------------------------------------------
- datablock ItemData(RyderClip)
- {
- // Mission editor category
- category = "AmmoClip";
- // Add the Ammo namespace as a parent. The ammo namespace provides
- // common ammo related functions and hooks into the inventory system.
- className = "AmmoClip";
- // Basic Item properties
- shapeFile = "art/shapes/weapons/Ryder/TP_Ryder.DAE";
- mass = 1;
- elasticity = 0.2;
- friction = 0.6;
- // Dynamic properties defined by the scripts
- pickUpName = "Ryder clip";
- count = 1;
- maxInventory = 10;
- };
- datablock ItemData(RyderAmmo)
- {
- // Mission editor category
- category = "Ammo";
- // Add the Ammo namespace as a parent. The ammo namespace provides
- // common ammo related functions and hooks into the inventory system.
- className = "Ammo";
- // Basic Item properties
- shapeFile = "art/shapes/weapons/Ryder/TP_Ryder.DAE";
- mass = 1;
- elasticity = 0.2;
- friction = 0.6;
- // Dynamic properties defined by the scripts
- pickUpName = "Ryder bullet";
- maxInventory = 8;
- clip = RyderClip;
- };
- //--------------------------------------------------------------------------
- // Weapon Item. This is the item that exists in the world, i.e. when it's
- // been dropped, thrown or is acting as re-spawnable item. When the weapon
- // is mounted onto a shape, the SoldierWeaponImage is used.
- //-----------------------------------------------------------------------------
- datablock ItemData(Ryder)
- {
- // Mission editor category
- category = "Weapon";
- // Hook into Item Weapon class hierarchy. The weapon namespace
- // provides common weapon handling functions in addition to hooks
- // into the inventory system.
- className = "Weapon";
- // Basic Item properties
- shapeFile = "art/shapes/weapons/Ryder/TP_Ryder.DAE";
- mass = 1;
- elasticity = 0.2;
- friction = 0.6;
- emap = true;
- PreviewImage = 'ryder.png';
- // Dynamic properties defined by the scripts
- pickUpName = "Ryder pistol";
- description = "Ryder";
- image = RyderWeaponImage;
- reticle = "crossHair";
- };
- datablock ShapeBaseImageData(RyderWeaponImage)
- {
- // Basic Item properties
- shapeFile = "art/shapes/weapons/Ryder/TP_Ryder.DAE";
- shapeFileFP = "art/shapes/weapons/Ryder/FP_Ryder.DAE";
- emap = true;
- imageAnimPrefix = "Pistol";
- imageAnimPrefixFP = "Pistol";
- // Specify mount point & offset for 3rd person, and eye offset
- // for first person rendering.
- mountPoint = 0;
- firstPerson = true;
- useEyeNode = true;
- animateOnServer = true;
- // When firing from a point offset from the eye, muzzle correction
- // will adjust the muzzle vector to point to the eye LOS point.
- // Since this weapon doesn't actually fire from the muzzle point,
- // we need to turn this off.
- correctMuzzleVector = true;
- // Add the WeaponImage namespace as a parent, WeaponImage namespace
- // provides some hooks into the inventory system.
- class = "WeaponImage";
- className = "WeaponImage";
- // Projectiles and Ammo.
- item = Ryder;
- ammo = RyderAmmo;
- clip = RyderClip;
- projectile = BulletProjectile;
- projectileType = Projectile;
- projectileSpread = "0.0";
- altProjectile = GrenadeLauncherProjectile;
- altProjectileSpread = "0.02";
- casing = BulletShell;
- shellExitDir = "1.0 0.3 1.0";
- shellExitOffset = "0.15 -0.56 -0.1";
- shellExitVariance = 15.0;
- shellVelocity = 3.0;
- // Weapon lights up while firing
- lightType = "WeaponFireLight";
- lightColor = "0.992126 0.968504 0.700787 1";
- lightRadius = "4";
- lightDuration = "100";
- lightBrightness = 2;
- // Shake camera while firing.
- shakeCamera = "1";
- camShakeFreq = "10 10 10";
- camShakeAmp = "5 5 5";
- // Images have a state system which controls how the animations
- // are run, which sounds are played, script callbacks, etc. This
- // state system is downloaded to the client so that clients can
- // predict state changes and animate accordingly. The following
- // system supports basic ready->fire->reload transitions as
- // well as a no-ammo->dryfire idle state.
- useRemainderDT = true;
- // Initial start up state
- stateName[0] = "Preactivate";
- stateTransitionOnLoaded[0] = "Activate";
- stateTransitionOnNoAmmo[0] = "NoAmmo";
- // Activating the gun. Called when the weapon is first
- // mounted and there is ammo.
- stateName[1] = "Activate";
- stateTransitionGeneric0In[1] = "SprintEnter";
- stateTransitionOnTimeout[1] = "Ready";
- stateTimeoutValue[1] = 1.5;
- stateSequence[1] = "switch_in";
- stateSound[1] = RyderSwitchinSound;
- // Ready to fire, just waiting for the trigger
- stateName[2] = "Ready";
- stateTransitionGeneric0In[2] = "SprintEnter";
- stateTransitionOnMotion[2] = "ReadyMotion";
- stateScaleAnimation[2] = false;
- stateScaleAnimationFP[2] = false;
- stateTransitionOnNoAmmo[2] = "NoAmmo";
- stateTransitionOnTriggerDown[2] = "Fire";
- stateSequence[2] = "idle";
- // Ready to fire with player moving
- stateName[3] = "ReadyMotion";
- stateTransitionGeneric0In[3] = "SprintEnter";
- stateTransitionOnNoMotion[3] = "Ready";
- stateWaitForTimeout[3] = false;
- stateScaleAnimation[3] = false;
- stateScaleAnimationFP[3] = false;
- stateSequenceTransitionIn[3] = true;
- stateSequenceTransitionOut[3] = true;
- stateTransitionOnNoAmmo[3] = "NoAmmo";
- stateTransitionOnTriggerDown[3] = "Fire";
- stateSequence[3] = "run";
- // Fire the weapon. Calls the fire script which does
- // the actual work.
- stateName[4] = "Fire";
- stateTransitionGeneric0In[4] = "SprintEnter";
- stateTransitionOnTimeout[4] = "WaitForRelease";
- stateTimeoutValue[4] = 0.23;
- stateWaitForTimeout[4] = true;
- stateFire[4] = true;
- stateRecoil[4] = "";
- stateAllowImageChange[4] = false;
- stateSequence[4] = "fire";
- stateScaleAnimation[4] = true;
- stateSequenceNeverTransition[4] = true;
- stateSequenceRandomFlash[4] = true; // use muzzle flash sequence
- stateScript[4] = "onFire";
- stateEmitter[4] = GunFireSmokeEmitter;
- stateEmitterTime[4] = 0.025;
- stateEjectShell[4] = true;
- stateSound[4] = RyderFireSound;
- // Wait for the player to release the trigger
- stateName[5] = "WaitForRelease";
- stateTransitionGeneric0In[5] = "SprintEnter";
- stateTransitionOnTriggerUp[5] = "NewRound";
- stateTimeoutValue[5] = 0.05;
- stateWaitForTimeout[5] = true;
- stateAllowImageChange[5] = false;
- // Put another round in the chamber
- stateName[6] = "NewRound";
- stateTransitionGeneric0In[6] = "SprintEnter";
- stateTransitionOnNoAmmo[6] = "NoAmmo";
- stateTransitionOnTimeout[6] = "Ready";
- stateWaitForTimeout[6] = "0";
- stateTimeoutValue[6] = 0.05;
- stateAllowImageChange[6] = false;
- // No ammo in the weapon, just idle until something
- // shows up. Play the dry fire sound if the trigger is
- // pulled.
- stateName[7] = "NoAmmo";
- stateTransitionGeneric0In[7] = "SprintEnter";
- stateTransitionOnMotion[7] = "NoAmmoMotion";
- stateTransitionOnAmmo[7] = "ReloadClip";
- stateTimeoutValue[7] = 0.1; // Slight pause to allow script to run when trigger is still held down from Fire state
- stateScript[7] = "onClipEmpty";
- stateTransitionOnTriggerDown[7] = "DryFire";
- stateSequence[7] = "idle";
- stateScaleAnimation[7] = false;
- stateScaleAnimationFP[7] = false;
-
- stateName[8] = "NoAmmoMotion";
- stateTransitionGeneric0In[8] = "SprintEnter";
- stateTransitionOnNoMotion[8] = "NoAmmo";
- stateWaitForTimeout[8] = false;
- stateScaleAnimation[8] = false;
- stateScaleAnimationFP[8] = false;
- stateSequenceTransitionIn[8] = true;
- stateSequenceTransitionOut[8] = true;
- stateTransitionOnAmmo[8] = "ReloadClip";
- stateTransitionOnTriggerDown[8] = "DryFire";
- stateSequence[8] = "run";
- // No ammo dry fire
- stateName[9] = "DryFire";
- stateTransitionGeneric0In[9] = "SprintEnter";
- stateTransitionOnAmmo[9] = "ReloadClip";
- stateWaitForTimeout[9] = "0";
- stateTimeoutValue[9] = 0.7;
- stateTransitionOnTimeout[9] = "NoAmmo";
- stateScript[9] = "onDryFire";
- // Play the reload clip animation
- stateName[10] = "ReloadClip";
- stateTransitionGeneric0In[10] = "SprintEnter";
- stateTransitionOnTimeout[10] = "Ready";
- stateWaitForTimeout[10] = true;
- stateTimeoutValue[10] = 2.0;
- stateReload[10] = true;
- stateSequence[10] = "reload";
- stateShapeSequence[10] = "Reload";
- stateScaleShapeSequence[10] = true;
- stateSound[10] = RyderReloadSound;
- // Start Sprinting
- stateName[11] = "SprintEnter";
- stateTransitionGeneric0Out[11] = "SprintExit";
- stateTransitionOnTimeout[11] = "Sprinting";
- stateWaitForTimeout[11] = false;
- stateTimeoutValue[11] = 0.5;
- stateWaitForTimeout[11] = false;
- stateScaleAnimation[11] = false;
- stateScaleAnimationFP[11] = false;
- stateSequenceTransitionIn[11] = true;
- stateSequenceTransitionOut[11] = true;
- stateAllowImageChange[11] = false;
- stateSequence[11] = "sprint";
- // Sprinting
- stateName[12] = "Sprinting";
- stateTransitionGeneric0Out[12] = "SprintExit";
- stateWaitForTimeout[12] = false;
- stateScaleAnimation[12] = false;
- stateScaleAnimationFP[12] = false;
- stateSequenceTransitionIn[12] = true;
- stateSequenceTransitionOut[12] = true;
- stateAllowImageChange[12] = false;
- stateSequence[12] = "sprint";
-
- // Stop Sprinting
- stateName[13] = "SprintExit";
- stateTransitionGeneric0In[13] = "SprintEnter";
- stateTransitionOnTimeout[13] = "Ready";
- stateWaitForTimeout[13] = false;
- stateTimeoutValue[13] = 0.5;
- stateSequenceTransitionIn[13] = true;
- stateSequenceTransitionOut[13] = true;
- stateAllowImageChange[13] = false;
- stateSequence[13] = "sprint";
- camShakeDuration = "0.2";
- };
|