<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.splashdamage.com/index.php?action=history&amp;feed=atom&amp;title=Script%3AFiles%3Ascript%2Fvehicles%2Fweapons%2Fcannon_twin.script</id>
	<title>Script:Files:script/vehicles/weapons/cannon twin.script - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.splashdamage.com/index.php?action=history&amp;feed=atom&amp;title=Script%3AFiles%3Ascript%2Fvehicles%2Fweapons%2Fcannon_twin.script"/>
	<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Script:Files:script/vehicles/weapons/cannon_twin.script&amp;action=history"/>
	<updated>2026-06-10T02:59:35Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.splashdamage.com/index.php?title=Script:Files:script/vehicles/weapons/cannon_twin.script&amp;diff=1849&amp;oldid=prev</id>
		<title>Wizz at 10:03, 5 November 2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.splashdamage.com/index.php?title=Script:Files:script/vehicles/weapons/cannon_twin.script&amp;diff=1849&amp;oldid=prev"/>
		<updated>2007-11-05T10:03:35Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;object&amp;lt;/span&amp;gt; [[ScriptClass:vehicle_weapon_cannon_twin|vehicle_weapon_cannon_twin]] : [[ScriptClass:vehicle_weapon_base|vehicle_weapon_base]] {&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;                preinit();&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;                init();&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;                Fire();&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt;                UpdateCharge();&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;                muzzleFlashFX;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;                muzzleFlashFXLocal;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;                muzzleTracerFX;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;string&amp;lt;/span&amp;gt;                muzzleSound;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;entity&amp;lt;/span&amp;gt;                vehicle;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                projectileIndex;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                fireRate;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                spread;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;vector&amp;lt;/span&amp;gt;                velocity;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                muzzleJoint1;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                muzzleJoint2;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                muzzleJoint1Parent;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                muzzleJoint2Parent;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                currentWeapon;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;boolean&amp;lt;/span&amp;gt;                fireAnim;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                chargePerUseSiegeScale;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt;                baseChargeMax;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;boolean&amp;lt;/span&amp;gt;                showViewMuzzleFlash;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; [[ScriptClass:vehicle_weapon_cannon_twin|vehicle_weapon_cannon_twin]]::preinit() {&lt;br /&gt;
     muzzleFlashFX        = [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_flash&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     muzzleFlashFXLocal    = [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_flash_local&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     muzzleTracerFX        = [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_tracer&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     muzzleSound            = [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_sound&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( muzzleFlashFXLocal == &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;&amp;quot;&amp;lt;/span&amp;gt; ) {&lt;br /&gt;
         muzzleFlashFXLocal = muzzleFlashFX;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     projectileIndex        = GetEntityDef( [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;def_projectile&amp;quot;&amp;lt;/span&amp;gt; ) );&lt;br /&gt;
 &lt;br /&gt;
     vehicle                = [[ScriptEvent:getVehicle|getVehicle]]();&lt;br /&gt;
 &lt;br /&gt;
     muzzleJoint1        = vehicle.[[ScriptEvent:getJointHandle|getJointHandle]]( [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_left&amp;quot;&amp;lt;/span&amp;gt; ) );&lt;br /&gt;
     muzzleJoint2        = vehicle.[[ScriptEvent:getJointHandle|getJointHandle]]( [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_right&amp;quot;&amp;lt;/span&amp;gt; ) );&lt;br /&gt;
 &lt;br /&gt;
     muzzleJoint1Parent    = vehicle.[[ScriptEvent:getJointHandle|getJointHandle]]( [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_left_parent&amp;quot;&amp;lt;/span&amp;gt; ) );&lt;br /&gt;
     muzzleJoint2Parent    = vehicle.[[ScriptEvent:getJointHandle|getJointHandle]]( [[ScriptEvent:getKey|getKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;muzzle_right_parent&amp;quot;&amp;lt;/span&amp;gt; ) );&lt;br /&gt;
 &lt;br /&gt;
     fireAnim            = [[ScriptEvent:getFloatKey|getFloatKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;fire_anim&amp;quot;&amp;lt;/span&amp;gt; ) != 0;&lt;br /&gt;
 &lt;br /&gt;
     fireRate            = [[ScriptEvent:getFloatKey|getFloatKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;fire_rate&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     spread                = [[ScriptEvent:getFloatKey|getFloatKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;spread&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     velocity            = [[ScriptEvent:getVectorKey|getVectorKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;velocity&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
 &lt;br /&gt;
     chargePerUseSiegeScale    = [[ScriptEvent:getFloatKey|getFloatKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;charge_per_use_siege_scale&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
     baseChargeMax            = [[ScriptEvent:getFloatKey|getFloatKey]]( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;charge_max&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; [[ScriptClass:vehicle_weapon_cannon_twin|vehicle_weapon_cannon_twin]]::init() {&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; [[ScriptClass:vehicle_weapon_cannon_twin|vehicle_weapon_cannon_twin]]::Fire() {&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;// Gordon: FIXME: This can easily get out of sync&amp;lt;/span&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt; jointHandle;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt; jointHandleCheck;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( currentWeapon == 0 ) {&lt;br /&gt;
         jointHandle = muzzleJoint1;&lt;br /&gt;
         jointHandleCheck = muzzleJoint1Parent;&lt;br /&gt;
     } &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {&lt;br /&gt;
         jointHandle = muzzleJoint2;&lt;br /&gt;
         jointHandleCheck = muzzleJoint2Parent;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;vector&amp;lt;/span&amp;gt; muzzleOrigin = vehicle.[[ScriptEvent:getJointPos|getJointPos]]( jointHandle );&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;boolean&amp;lt;/span&amp;gt; allowFire = true;&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( jointHandleCheck != INVALID_JOINT ) {&lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;vector&amp;lt;/span&amp;gt; muzzleCheckOrigin = vehicle.[[ScriptEvent:getJointPos|getJointPos]]( jointHandleCheck );        &lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( sys.[[ScriptEvent:tracePoint|tracePoint]]( muzzleCheckOrigin, muzzleOrigin, MASK_PROJECTILE, vehicle ) != 1.f ) {&lt;br /&gt;
             allowFire = false;&lt;br /&gt;
         }&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( allowFire ) {&lt;br /&gt;
         RemoveCharge();&lt;br /&gt;
 &lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( currentWeapon == 0 ) {&lt;br /&gt;
             &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;( fireAnim ) {&lt;br /&gt;
                 vehicle.[[ScriptEvent:playAnim|playAnim]]( ANIMCHANNEL_HEAD, &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;fire_left&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
             }&lt;br /&gt;
         } &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {&lt;br /&gt;
             &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt;( fireAnim ) {&lt;br /&gt;
                 vehicle.[[ScriptEvent:playAnim|playAnim]]( ANIMCHANNEL_HEAD, &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;fire_right&amp;quot;&amp;lt;/span&amp;gt; );&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         vehicle.[[ScriptEvent:launchMissileSimple|launchMissileSimple]]( user, vehicle, $null_entity, projectileIndex, -1, spread, vehicle.[[ScriptEvent:getJointPos|getJointPos]]( jointHandle ), vehicle.[[ScriptEvent:jointToWorldSpace|jointToWorldSpace]]( jointHandle, velocity ) );&lt;br /&gt;
 &lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( sys.[[ScriptEvent:doClientSideStuff|doClientSideStuff]]() ) {&lt;br /&gt;
             &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( sys.[[ScriptEvent:getLocalPlayer|getLocalPlayer]]() != user ) {&lt;br /&gt;
                 vehicle.[[ScriptEvent:playJointEffectViewSuppress|playJointEffectViewSuppress]]( muzzleFlashFX, jointHandle, 0, 0 );&lt;br /&gt;
             } &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {&lt;br /&gt;
                 vehicle.[[ScriptEvent:playJointEffectViewSuppress|playJointEffectViewSuppress]]( muzzleFlashFXLocal, jointHandle, 0, 0 );&lt;br /&gt;
             }&lt;br /&gt;
             vehicle.[[ScriptEvent:playJointEffect|playJointEffect]]( muzzleTracerFX, jointHandle, 0 );&lt;br /&gt;
             vehicle.[[ScriptEvent:playJointEffect|playJointEffect]]( muzzleSound, jointHandle, 0 );&lt;br /&gt;
         }&lt;br /&gt;
 &lt;br /&gt;
         currentWeapon++;&lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( currentWeapon == 2 ) {&lt;br /&gt;
             currentWeapon = 0;&lt;br /&gt;
         }&lt;br /&gt;
     } &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {&lt;br /&gt;
         &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;// Gordon: FIXME: Play error sound/tooltip&amp;lt;/span&amp;gt;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( myVehicle.[[ScriptEvent:inSiegeMode|inSiegeMode]]() ) {&lt;br /&gt;
         myVehicle.[[ScriptEvent:startSound|startSound]] ( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;snd_recharge_seige&amp;quot;&amp;lt;/span&amp;gt;, SND_VEHICLE_INTERIOR_POWERUP );&lt;br /&gt;
     }&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;else&amp;lt;/span&amp;gt; {&lt;br /&gt;
         myVehicle.[[ScriptEvent:startSound|startSound]] ( &amp;lt;span style=&amp;quot;color:brown&amp;quot;&amp;gt;&amp;quot;snd_recharge_nonseige&amp;quot;&amp;lt;/span&amp;gt;, SND_VEHICLE_INTERIOR_POWERUP );&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
     AddReFireDelay( fireRate );&lt;br /&gt;
 &lt;br /&gt;
     GoToIdle();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;void&amp;lt;/span&amp;gt; [[ScriptClass:vehicle_weapon_cannon_twin|vehicle_weapon_cannon_twin]]::UpdateCharge() {&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;float&amp;lt;/span&amp;gt; percentChargeUsed = CalcChargeUsed() / chargeMax;&lt;br /&gt;
 &lt;br /&gt;
     chargePerUse = userChargePerUse;&lt;br /&gt;
     chargeMax = baseChargeMax;&lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:blue&amp;quot;&amp;gt;if&amp;lt;/span&amp;gt; ( myVehicle.[[ScriptEvent:inSiegeMode|inSiegeMode]]() ) {&lt;br /&gt;
         chargePerUse = chargePerUse * chargePerUseSiegeScale;&lt;br /&gt;
         chargeMax = chargeMax * chargePerUseSiegeScale;&lt;br /&gt;
     }&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
     &amp;lt;span style=&amp;quot;color:green&amp;quot;&amp;gt;// recalculate the charge time to be the same %&amp;lt;/span&amp;gt;&lt;br /&gt;
     chargeTime = sys.[[ScriptEvent:getTime|getTime]]() + chargeMax * percentChargeUsed;&lt;br /&gt;
 &lt;br /&gt;
     UpdateCharge_Base();&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Wizz</name></author>
		
	</entry>
</feed>