#name "turretweapon" #dll "all" "weapon" #target_dir "weapons/sp/" // target location 1 (single-player) #target_dir "weapons/mp/" // target location 2 (multi-player) #target_dir "xmodel/" #target_dir "" #target_dir "xanim/" #file_ext "*" #version 25 // This tells the configstring converter what the file type identifier should be string "WEAPONFILE" configstringFileType // This uses the config string convert's multi-target folder // mechanism to make the weapon either a single-player weapon // or a multi-player weapon. // The first character is used to specify which target folder to go in enum { "1: Single-Player", "2: Multi-Player" } targetFolder string "none" projectileTrail enum { "turret" } weaponClass enum { "bullet", "projectile", "gas" } weaponType enum { "stand", "prone", "duck" } stance enum { "none", "bullet_small", "bullet_large", "bullet_ap", "shotgun", "grenade_bounce", "grenade_explode", "rocket_explode", "projectile_dud", "mortar_shell", "tank_shell" } impactType enum { "none", "small", "medium", "large" } penetrateType enum { "primary" } inventoryType enum { "Full Auto", "Single Shot" } fireType string adsOverlayShader int 320 1 640 adsOverlayWidth int 240 1 480 adsOverlayHeight enum { "none", "Turret Scope" } adsOverlayInterface int 1 0 1 projImpactExplode int 600 0 20000 projectileSpeed int 300 0 10000 explosionRadius int 10 0 10000 explosionInnerDamage int 10 0 10000 explosionOuterDamage float 180 0 180 damageConeAngle // additional grenade weapon info int 0 0 10000 projectileSpeedUp int 0 0 10000 projectileActivateDist float 30.0 0 10000.0 projectileLifetime string projectileModel enum { "grenade", "rocket", "molotov", "none" } projExplosionType string projExplosionEffect int 0 0 1 projExplosionEffectForceNormalUp string projExplosionSound string projDudEffect string projDudSound string bounceSound string projectileSound // additional projectile weapon info string projTrailEffect int 200 0 1000 projectileDLight float 0.75 0 1 projectileRed float 0.3 0 1 projectileGreen float 0.0 0 1 projectileBlue int 0 0 10000 projIgnitionDelay string projIgnitionEffect string projIgnitionSound float 0.0 0 10 destabilizationRateTime float 10 0.0 10000000 destabilizationCurvatureMax int 30000 0 32000 destabilizeDistance string script string ammoName int 100 0 999 maxAmmo int 0 0 1000 startAmmo string clipName int 10 0 999 clipSize int 1 0 1 unlimitedAmmo int 30 0 1000 damage int 30 0 1000 playerDamage int 30 0 1000 minDamage int 30 0 1000 minPlayerDamage float 15000 1 15000 maxDamageRange float 16000 1 16000 minDamageRange float 1600 0 10000 enemyCrosshairRange int 1 0 1 crosshairColorChange float 1600 0 8000 autoAimRange float 3200 0 15000 aimAssistRange float 3200 0 15000 aimAssistRangeAds int 115 0 360 leftArc int 115 0 360 rightArc int 90 0 360 topArc int 90 0 360 bottomArc int 0 0 360 grabarc float 1 0 1 accuracy float 2 0 180 aiSpread float 1 0 180 playerSpread float 0.05 0.0 10.0 fireTime int 20 0 180 animHorRotateInc int 5 1 720 minHorTurnSpeed int 5 1 720 minVertTurnSpeed int 360 1 720 maxHorTurnSpeed int 360 1 720 maxVertTurnSpeed int 100 1 720 horTurnSpeed int 100 1 720 vertTurnSpeed float 0.3 0 60 pitchConvergenceTime float 2 0 60 yawConvergenceTime float 2 0 60 suppressionTime float 0 0 1000000 maxRange float 0.5 0 5 horizViewJitter float 0.5 0 5 vertViewJitter float 0 -300 300 proneOfsF float 0 -300 300 proneOfsR float 0 -300 300 proneOfsU float 0 -300 300 duckedOfsF float 0 -300 300 duckedOfsR float 0 -300 300 duckedOfsU int 0 0 1 rifleBullet int 0 0 1 armorPiercing string fireSound string fireSoundPlayer string loopFireSound string loopFireSoundPlayer string stopFireSound string stopFireSoundPlayer string reloadStartSound string reloadStartSoundPlayer float 0.05 0.0 10.0 reloadTime string reloadEndSound string reloadEndSoundPlayer string rotateLoopSound string rotateLoopSoundPlayer string flameTableFirstPerson string flameTableThirdPerson int 100 1 1000 rechamberBoltTime string viewFlashEffect string worldFlashEffect string viewShellEjectEffect string worldShellEjectEffect string reticleCenter int 32 1 480 reticleCenterSize string idleAnim string fireAnim float 46 1 128 playerPositionDist string hudIcon string killIcon enum { "4:1", "1:1", "2:1" } hudIconRatio enum { "4:1", "1:1", "2:1" } killIconRatio int 1 0 1 flipKillIcon int 0 0 1 overheatWeapon int 0 0 1 coolWhileFiring float 1.0 0.1 100.0 overheatRate float 30.0 0.1 100.0 cooldownRate float 25.0 0.0 99.0 overheatEndVal string overheatSound string overheatSoundPlayer // hack, use these as overheat effects for turrets string viewLastShotEjectEffect string worldLastShotEjectEffect string useHintString string dropHintString keyenum("rumble.gdf") fireRumble float 0 0 100 adsDofStart float 0 0 100 adsDofEnd float 30 0 180 swayMaxAngle float 6 1 50 swayLerpSpeed float 0.1 -2 2 swayPitchScale float 0.1 -2 2 swayYawScale float 0.1 -2 2 swayHorizScale float 0.1 -2 2 swayVertScale int 0 0 1 aimDownSight float 65 1 160 adsZoomFov float 0.1 0 10 adsTransInTime float 0.1 0 10 adsTransOutTime float 0.5 0 1 adsZoomInFrac float 0.1 0 1 adsZoomOutFrac float 0 0 360 aimPadding float 1.0 0 10 locNone float 4.0 0 10 locHelmet float 4.0 0 10 locHead float 5.0 0 10 locNeck float 1.0 0 10 locTorsoUpper float 0.9 0 10 locTorsoLower float 0.8 0 10 locRightArmUpper float 0.6 0 10 locRightArmLower float 0.4 0 10 locRightHand float 0.8 0 10 locLeftArmUpper float 0.6 0 10 locLeftArmLower float 0.4 0 10 locLeftHand float 0.8 0 10 locRightLegUpper float 0.6 0 10 locRightLegLower float 0.4 0 10 locRightFoot float 0.8 0 10 locLeftLegUpper float 0.6 0 10 locLeftLegLower float 0.4 0 10 locLeftFoot float 0 0 10 locGun vcontainer { scrollbox(targetFolder) [ exec { width(300) } ] scrollbox(stance) [ exec { width(300) } ] scrollbox(weaponType) [ exec { width(300) } ] scrollbox(impactType) [ exec { width(300) label("Impact type") tooltip("The impact type, used to play impact effects based on surfacetype") } ] scrollbox(penetrateType) [ exec { label("Penetration") tooltip("Type of bullet penetration.") } ] scrollbox(fireType) [ exec { width(300) label("Fire Type") tooltip("Behavior of the weapon when the trigger is held down.") } ] //////////////////////////////////////// // Aim Assist //////////////////////////////////////// vcontainer { floatedit(autoAimRange, 1, 100) [ exec { label("Auto Aim Range") tooltip("(Console only.) The range in world units up to which entering ADS will lock-on to enemies. (1 world unit = 1 inch)") } ] hcontainer { floatedit(aimAssistRange, 1, 100) [ exec { label("Aim Assist Range") tooltip("(Console only.) The range in world units up to which the crosshair will stick to targets. (1 world unit = 1 inch)") } ] floatedit(aimAssistRangeAds, 1, 100) [ exec { label("Aim Assist Range ADS") tooltip("(Console only.) The range in world units up to which the crosshair will stick to targets in ADS. (1 world unit = 1 inch)") width(260) labelwidth(160) } ] } } [ exec { groupBox("Aim Assist (Console only)") } ] //////////////////////////////////////// // Ammunition //////////////////////////////////////// vcontainer { checkbox(unlimitedAmmo) [ exec { label("Unlimited Ammo") tooltip("This turret has unlimited ammo while emplaced") width(500) } ] edit(ammoName) [ exec { label("Ammo Name") tooltip("Allows different weapons to share the same ammo pool.") width(500) } ] edit(clipName) [ exec { label("Clip Name") tooltip("Allows different weapons to share clips. Used for weapons that have a selective fire option, and would therefore need to use the same type of clip.") width(500) } ] hcontainer { spinedit(maxAmmo, 10, 20) [ exec { label("Max Ammo") tooltip("Max ammo the player can collect for this weapon. No effect on AI.") } ] spinedit(startAmmo, 1, 10) [ exec { label("Start Ammo") tooltip("How much ammo the player gets when starting with this weapon. One clip/magazine from this amount will be already in the weapon. No effect on AI.") } ] spinedit(clipSize, 1, 10) [ exec { label("Clip Size") tooltip("Specifies how many bullets per clip/magazine.") } ] } } [ exec { groupBox("Ammunition") } ] //////////////////////////////////////// // Location Damage //////////////////////////////////////// vcontainer { hcontainer { floatedit(locNone, 0.1, 0.2) [ exec { label("None") tooltip("Unrelated to weapon. Used for damage that's not location based, such as grenades or falling. Included here for completeness.") } ] floatedit(locHelmet, 0.1, 0.2) [ exec { label("Helmet") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locHead, 0.1, 0.2) [ exec { label("Head") tooltip("Damage per-bullet multiplier.") } ] floatedit(locNeck, 0.1, 0.2) [ exec { label("Neck") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locTorsoUpper, 0.1, 0.2) [ exec { label("Upper Torso") tooltip("Damage per-bullet multiplier.") } ] floatedit(locTorsoLower, 0.1, 0.2) [ exec { label("Lower Torso") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftArmUpper, 0.1, 0.2) [ exec { label("Left Upper Arm") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightArmUpper, 0.1, 0.2) [ exec { label("Right Upper Arm") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftArmLower, 0.1, 0.2) [ exec { label("Left Lower Arm") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightArmLower, 0.1, 0.2) [ exec { label("Right Lower Arm") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftHand, 0.1, 0.2) [ exec { label("Left Hand") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightHand, 0.1, 0.2) [ exec { label("Right Hand") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftLegUpper, 0.1, 0.2) [ exec { label("Left Upper Leg") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightLegUpper, 0.1, 0.2) [ exec { label("Right Upper Leg") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftLegLower, 0.1, 0.2) [ exec { label("Left Lower Leg") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightLegLower, 0.1, 0.2) [ exec { label("Right Lower Leg") tooltip("Damage per-bullet multiplier.") } ] } hcontainer { floatedit(locLeftFoot, 0.1, 0.2) [ exec { label("Left Foot") tooltip("Damage per-bullet multiplier.") } ] floatedit(locRightFoot, 0.1, 0.2) [ exec { label("Right Foot") tooltip("Damage per-bullet multiplier.") } ] } floatedit(locGun, 0.1, 0.2) [ exec { label("Gun") tooltip("Damage per-bullet multiplier.") } ] } [ exec { groupBox("Location Damage") } ] //////////////////////////////////////// // Overheating //////////////////////////////////////// vcontainer { hcontainer { checkbox(overheatWeapon) [ exec { label("Overheating Weapon") tootip("This weapon can overheat") width(300) labelwidth(280) righttext() } ] checkbox(coolWhileFiring) [ exec { label("Cool While Firing") tootip("This weapon's heat decreases, even when it is being fired") width(300) labelwidth(280) righttext() } ] } floatedit(overheatRate, 1.0, 10.0) [ exec { label("Overheating Rate") tooltip("Percent of heat added per shot for this weapon") } ] floatedit(cooldownRate, 1.0, 10.0) [ exec { label("Cooldown Rate") tooltip("Percent of heat that is bled off per second for this weapon") } ] floatedit(overheatEndVal, 1.0, 10.0) [ exec { label("Overheating Ends At") tooltip("Percent of heat at which, if this weapon is overheating, it is able to fire again") } ] edit(overheatSoundPlayer) [ exec { label("Overheat SFX 1-P") tooltip("Sound effect that plays when the gun overheats (1st-person)") } ] edit(overheatSound) [ exec { label("Overheat SFX 3-P") tooltip("Sound effect that plays when the gun overheats (3rd-person)") } ] edit(viewLastShotEjectEffect) [ exec { label("Overheat Fx 1st") tooltip("Particle effect that plays when the gun overheats (1st-person)") } ] edit(worldLastShotEjectEffect) [ exec { label("Overheat Fx 3rd") tooltip("Particle effect that plays when the gun overheats (3rd-person)") } ] } [ exec { groupBox("Overheating") } ] spinedit(damage, 1, 10) [ exec { tooltip("The maximum amount of per-bullet damage done to anything other than the player at maxDamageRange.") } ] spinedit(playerDamage, 1, 10) [ exec { tooltip("The maximum amount of per-bullet damage done only to the player at maxDamageRange.") } ] spinedit(minDamage, 1, 10) [ exec { tooltip("The minimum amount of per-bullet damage done to anything other than the player at minDamageRange.") } ] spinedit(minPlayerDamage, 1, 10) [ exec { tooltip("The minimum amount of per-bullet damage done only to the player at minDamageRange.") } ] floatedit(maxDamageRange, 120, 8000) [ exec { tooltip("Distance specified in world units. 1 world unit = 1 inch.") } ] floatedit(minDamageRange, 120, 8000) [ exec { tooltip("Distance specified in world units. 1 world unit = 1 inch.") } ] hcontainer { floatedit(enemyCrosshairRange, 1, 100) [ exec { label("Enemy Crosshair Range") tooltip("The range in at which friendly names appear and friendly or enemy changes your crosshair color.") width(280) labelwidth(180) } ] checkbox(crosshairColorChange) [ exec { label("Crosshair Color Change") tooltip("Change crosshair color if pointing at friendly or enemy") width(200) labelwidth(200) righttext() } ] } spinedit(explosionRadius, 10, 50) spinedit(explosionInnerDamage, 1, 10) [ exec { width(300) labelwidth(160) } ] spinedit(explosionOuterDamage, 1, 10) [ exec { width(300) labelwidth(160) } ] spinedit(leftArc, 1, 10) spinedit(rightArc, 1, 10) spinedit(topArc, 1, 10) spinedit(bottomArc, 1, 10) floatedit(accuracy, 0.1, 0.2) [ exec { tooltip("The probability between 0 and 1 that for any bullet the AI will aim at the player") } ] floatedit(aiSpread, 0.1, 0.2) [ exec { label("ai spread") width(270) tooltip("The bullet spread in degrees when the gun is used by AI") } ] floatedit(playerSpread, 0.1, 0.2) [ exec { label("player spread") width(270) tooltip("The bullet spread in degrees when the gun is used by the player") } ] floatedit(aimPadding, 0.1, 0.2) [ exec { label("aim padding") width(270) tooltip("How crooked it will allow the bullet to leave the gun in order to hit its target") } ] floatedit(fireTime, 0.05, 0.2) spinedit(animHorRotateInc, 1, 10) spinedit(minHorTurnSpeed, 1, 10) spinedit(minVertTurnSpeed, 1, 10) spinedit(maxHorTurnSpeed, 1, 10) spinedit(maxVertTurnSpeed, 1, 10) floatedit(pitchConvergenceTime, 0.1, 1) floatedit(yawConvergenceTime, 0.1, 1) floatedit(suppressionTime, 0.1, 1) floatedit(maxRange, 1, 10) floatedit(horizViewJitter, 0.1, 1) floatedit(vertViewJitter, 0.1, 1) hcontainer { floatedit(proneOfsF, 0.1, 1) [ exec { label("Offset Forward") tooltip("The view will slide forward by this amount. (-ive for backward)") } ] floatedit(proneOfsR, 0.1, 1) [ exec { label("Offset Right") tooltip("The view will slide sideways by this amount. (-ive for backward)") } ] floatedit(proneOfsU, 0.1, 1) [ exec { label("Offset Up") tooltip("The view will slide upwards by this amount. (-ive for backward)") } ] } hcontainer { floatedit(duckedOfsF, 0.1, 1) [ exec { label("ADS Offset Forward") tooltip("The view will slide forward by this amount. (-ive for backward)") } ] floatedit(duckedOfsR, 0.1, 1) [ exec { label("ADS Offset Right") tooltip("The view will slide sideways by this amount. (-ive for backward)") } ] floatedit(duckedOfsU, 0.1, 1) [ exec { label("ADS Offset Up") tooltip("The view will slide upwards by this amount. (-ive for backward)") } ] } edit(script) checkbox(rifleBullet) checkbox(armorPiercing) checkbox(projImpactExplode) edit(fireSound) edit(fireSoundPlayer) [ exec { label("fire (Player)") } ] edit(loopFireSound) edit(loopFireSoundPlayer) [ exec { label("loopFire (Player)") } ] edit(stopFireSound) edit(stopFireSoundPlayer) [ exec { label("stopFire (Player)") } ] edit(reloadStartSound) edit(reloadStartSoundPlayer) [ exec { label("reloadStartSnd (Player)") } ] floatedit(reloadTime, 0.05, 0.2) [ exec { label("RldStrtSFX Len") tooltip("Allows the system to start the reload start SFX at the correct time") } ] edit(reloadEndSound) edit(reloadEndSoundPlayer) [ exec { label("reloadEndSnd (Player)") } ] edit(rotateLoopSoundPlayer) [ exec { label("Spin Snd 1st-P") } ] edit(rotateLoopSound) [ exec { label("Spin Snd 3rd-P") } ] fileedit(viewFlashEffect) [ exec { reldir("share/raw/") } ] fileedit(worldFlashEffect) [ exec { reldir("share/raw/") } ] fileedit(viewShellEjectEffect) [ exec { label("View Shell Eject") reldir("share/raw/") width(500) } ] fileedit(worldShellEjectEffect) [ exec { label("World Shell Eject") reldir("share/raw/") width(500) } ] fileedit(reticleCenter) [ exec { reldir("pc/main/") } ] spinedit(reticleCenterSize, 1, 2) fileedit(idleAnim) [ exec { reldir("share/main/xanim/") width(500) } ] fileedit(fireAnim) [ exec { reldir("share/main/xanim/") width(500) } ] floatedit(playerPositionDist, 1, 10) //////////////////////////////////////// // UI //////////////////////////////////////// vcontainer { hcontainer { fileedit(hudIcon) [ exec { label("Hud Icon") reldir("pc/main/") width(450) labelwidth(130) } ] scrollbox(hudIconRatio) [ exec { label(" Aspect:") width(110) labelwidth(60) } ] } hcontainer { fileedit(killIcon) [ exec { label("Kill Icon") reldir("pc/main/") width(450) labelwidth(130) } ] scrollbox(killIconRatio) [ exec { label(" Aspect:") width(110) labelwidth(60) } ] checkbox(flipKillIcon) [ exec { label(" Flip:") tooltip("Used for weapons that need to have their kill icon horizontally flipped before displaying. (For MP obituaries).") lefttext() width(65) labelwidth(40) } ] } edit(useHintString) edit(dropHintString) } [ exec { groupBox("User Interface") } ] scrollbox(fireRumble) [ exec { width(500) } ] //////////////////////////////////////// // ADS Overlay Settings //////////////////////////////////////// vcontainer { edit(adsOverlayShader) [ exec { label("Shader") tooltip("Overlay for sniper rifles in ADS. Uses a quarter circle image to construct a full scope view.") width(500) } ] scrollbox(adsOverlayInterface) [ exec { label("Interface") tooltip("Interactive Interface for Overlay") } ] hcontainer { spinedit(adsOverlayWidth, 1, 10) [ exec { label("Width") } ] spinedit(adsOverlayHeight, 1, 10) [ exec { label("Height") } ] } hcontainer { checkbox(aimDownSight) [ exec { label("ADS") tooltip("Must be turned on for proper viewmodel appearance of a weapon that can be Aimed Down the Sight (ADS).") righttext() } ] floatedit(adsZoomFov, 1, 5) [ exec { label("Zoom FOV") tooltip("Field of view when in ADS.") } ] } hcontainer { floatedit(adsTransInTime, 0.05, 0.1) [ exec { label("Trans In Time") tooltip("Time it will take to switch from hipfire to ADS.") } ] floatedit(adsTransOutTime, 0.05, 0.1) [ exec { label("Trans Out Time") tooltip("Time it will take to switch from ADS to hipfire.") } ] } hcontainer { floatedit(adsZoomInFrac, 0.05, 0.1) [ exec { label("Zoom In Frac") tooltip("Fraction of the hipfire-to-ADS transition time over which the FOV zoom-in effect happens.") } ] floatedit(adsZoomOutFrac, 0.05, 0.1) [ exec { label("Zoom Out Frac") tooltip("Fraction of the ADS-to-hipfire transition time over which the FOV zoom-out effect happens.") } ] } } [ exec { groupBox("ADS Settings") } ] //////////////////////////////////////// // Sway settings //////////////////////////////////////// vcontainer { hcontainer { floatedit(swayMaxAngle, 0.05, 0.1) [ exec { label("Max Angle") tooltip("Max angle change that will be applied to the hipfire viewmodel sway.") } ] } hcontainer { floatedit(swayLerpSpeed, 0.05, 0.1) [ exec { label("Lerp Speed") tooltip("Speed at which the sway will lerp in hipfire.") } ] } hcontainer { floatedit(swayPitchScale, 0.05, 0.1) [ exec { label("Pitch Scale") tooltip("Amount of pitch change in the viewmodel to apply to the sway pitch in hipfire.") } ] } hcontainer { floatedit(swayYawScale, 0.05, 0.1) [ exec { label("Yaw Scale") tooltip("Amount of yaw change in the viewmodel to apply to the sway yaw in hipfire.") } ] } hcontainer { floatedit(swayHorizScale, 0.05, 0.1) [ exec { label("Horiz Scale") tooltip("Amount of yaw change in the viewmodel to apply to the sway horizontal offset in hipfire.") } ] } hcontainer { floatedit(swayVertScale, 0.05, 0.1) [ exec { label("Vert Scale") tooltip("Amount of pitch change in the view model to apply to the sway vertical offset in hipfire.") } ] } } [ exec { groupBox("Sway Settings") } ] //////////////////////////////////////// // Flamethrower Details //////////////////////////////////////// vcontainer { edit(flameTableFirstPerson) [ exec { label("1st Person Flame Table") width(500) } ] edit(flameTableThirdPerson) [ exec { label("3rd Person Flame Table") width(500) } ] spinedit(rechamberBoltTime, 1, 100) [ exec { label("MuzzleEffect Time") tooltip("Time to wait in-between spawning a new MuzzleEffect") } ] } [ exec { groupBox("Flamethrower") } ] //////////////////////////////////////// // Projectile //////////////////////////////////////// vcontainer { hcontainer { spinedit(projectileSpeed, 10, 100) [ exec { label("Projectile Speed") tooltip("The speed the projectile travels (inches/sec)") width(262) labelwidth(187) } ] spinedit(projectileSpeedUp, 10, 100) [ exec { label("Extra Verticle Speed") tooltip("Vertical speed added to grenades") width(262) labelwidth(187) } ] } hcontainer { spinedit(projectileActivateDist, 10, 100) [ exec { label("Activate Distance") tooltip("Distance the projectile must travel before it will explode.") width(262) labelwidth(187) } ] floatedit( projectileLifetime, 0.1, 1 ) [ exec { label("Lifetime") tooltip("The time (in seconds) after which the projectile will explode in the air, if it hasn't hit anything yet") width(262) labelwidth(187) } ] } hcontainer { spinedit(destabilizeDistance, 10, 100) [ exec { label("Destabilize Distance") tooltip("The distance the projectile goes before becoming unstable") width(262) labelwidth(187) } ] floatedit(destabilizationRateTime, 0.01, 0.1) [ exec { label("Destabilize Rate (time)") tooltip("The time between 'instability' course changes") width(262) labelwidth(187) } ] } hcontainer { floatedit(destabilizationCurvatureMax, 0.01, 1) [ exec { label("Destabilize Angle Max") tooltip("The maximum curvature in degrees per second") width(262) labelwidth(187) } ] } fileedit(projectileModel) [ exec { label("Projectile Model") tooltip("Define the model to be used for the projectile") reldir("pc/main/xmodel/") } ] hcontainer { scrollbox(projExplosionType) [ exec { label("Explosion Type") tooltip("Defines the type of effect that will be played. Effects are defined in fx/iw_impacts.csv") reldir("share/raw/") } ] checkbox(projExplosionEffectForceNormalUp) [ exec { label("Force straight-up normal vector") labelwidth(350) width(400) righttext() } ] } fileedit(projExplosionEffect) [ exec { label("Explosion Effect") tooltip("Defines the effect that will be played when the projectile explodes. It will also play the effects that are defined in fx/iw_impacts.csv") reldir("share/raw/") } ] edit(projExplosionSound) [ exec { label("Explosion Sound") tooltip("The sound the projectile will play when it impacts") } ] fileedit(projDudEffect) [ exec { label("Dud Effect") tooltip("The effect that will play if the projectile collides with an object before the Activate Distance is reached") reldir("share/raw/") } ] edit(projDudSound) [ exec { label("Dud Sound") tooltip("The sound the projectile will play when it impacts before the Activate Distance is reached") } ] edit(projectileSound) [ exec { label("Projectile_sound") width(500) } ] edit(bounceSound) [ exec { label("Dud Bounce Sound Base") tooltip("Base alias for the bounce sound. For instance, if the value is \"grenade_bounce\", sounds like \"grenade_bounce_concrete\" will be looked for. \"grenade_bounce_default\" will be used for any materials that aren't specified.") width(500) } ] fileedit(projTrailEffect) [ exec { label("Trail Effect") tooltip("This effect is attached to and trailed behind the projectile model.") reldir("share/raw/") width(400) } ] hcontainer { spinedit(projIgnitionDelay, 1, 10) [ exec { label("Ignition Delay") tooltip("How long after launch to wait for rocket to ignite.") width(262) labelwidth(128) } ] } fileedit(projIgnitionEffect) [ exec { label("Ignition Effect") tooltip("This effect is played when a projectile's rocket first ignites.") reldir("share/raw/") width(400) } ] hcontainer { spinedit(projectileDLight, 10, 100) [ exec { label("Dynamic Light Radius") tooltip("Set the radius (in inches) of the light to follow the projectile.") reldir("share/raw/") width(250) labelwidth(150) } ] floatedit(projectileRed, 0.1, 0.1) [ exec { label("Red") tooltip("Sets the red value of the dynamic light (0-255).") reldir("share/raw/") width(100) labelwidth(50) } ] floatedit(projectileGreen, 0.1, 0.1) [ exec { label("Green") tooltip("Sets the Green value of the dynamic light (0-255).") reldir("share/raw/") width(100) labelwidth(50) } ] floatedit(projectileBlue, 0.1, 0.1) [ exec { label("Blue") tooltip("Sets the Blue value of the dynamic light (0-255).") reldir("share/raw/") width(100) labelwidth(50) } ] } } [ exec { groupBox("Projectile") } ] }