I have the BCSDK and Model Property editor, I just added the slipstream drive to the Saber. Id like to go in that direction with adding torpedo system and launcher
It's your BC installation, so lets get started
For simplicity and consistency, we'll be copying the necessary hardpoint properties from the Defiant hardpoint again. First, lets get the individual launchers copied over to the Sabre.py hardpoint. This process will be similar to how you copied over the cloaking device.
The Saber by default has three forward launchers all firing from the same location to simulate a single rapid-fire turret. However, this isn't necessary for standard torpedo launchers, so you just need to copy one forward launcher from the Defiant.
#################################################
FwdTorpedo1 = App.TorpedoTubeProperty_Create("Fwd Torpedo 1")
FwdTorpedo1.SetMaxCondition(3200.000000)
FwdTorpedo1.SetCritical(0)
FwdTorpedo1.SetTargetable(1)
FwdTorpedo1.SetPrimary(1)
FwdTorpedo1.SetPosition(-0.194336, 0.269000, 0.037419)
FwdTorpedo1.SetPosition2D(65.000000, 21.000000)
FwdTorpedo1.SetRepairComplexity(4.000000)
FwdTorpedo1.SetDisabledPercentage(0.750000)
FwdTorpedo1.SetRadius(0.003000)
FwdTorpedo1.SetDumbfire(1)
FwdTorpedo1.SetWeaponID(1)
FwdTorpedo1.SetGroups(1)
FwdTorpedo1.SetDamageRadiusFactor(0.200000)
FwdTorpedo1.SetIconNum(370)
FwdTorpedo1.SetIconPositionX(69.000000)
FwdTorpedo1.SetIconPositionY(35.000000)
FwdTorpedo1.SetIconAboveShip(1)
FwdTorpedo1.SetImmediateDelay(0.300000)
FwdTorpedo1.SetReloadDelay(30.000000)
FwdTorpedo1.SetMaxReady(2)
FwdTorpedo1Direction = App.TGPoint3()
FwdTorpedo1Direction.SetXYZ(0.000000, 1.000000, 0.000000)
FwdTorpedo1.SetDirection(FwdTorpedo1Direction)
FwdTorpedo1Right = App.TGPoint3()
FwdTorpedo1Right.SetXYZ(0.000000, 0.000000, -1.000000)
FwdTorpedo1.SetRight(FwdTorpedo1Right)
App.g_kModelPropertyManager.RegisterLocalTemplate(FwdTorpedo1)
You'll notice I'm having you copy the top "###" and not the bottom ones; this is because we'll be placing the launchers at the bottom of the subsystems below the torpedo system. So on the Sabre.py file, you should have some thing like this:
#################################################
Torpedosystem = App.TorpedoSystemProperty_Create("Torpedo system")
Torpedosystem.SetMaxCondition(5000.000000)
Torpedosystem.SetCritical(0)
Torpedosystem.SetTargetable(0)
Torpedosystem.SetPrimary(1)
Torpedosystem.SetPosition(0.000000, 0.500000, 0.050000)
Torpedosystem.SetPosition2D(0.000000, 0.000000)
Torpedosystem.SetRepairComplexity(1.000000)
Torpedosystem.SetDisabledPercentage(0.250000)
Torpedosystem.SetRadius(0.100000)
Torpedosystem.SetNormalPowerPerSecond(1.000000)
Torpedosystem.SetWeaponSystemType(Torpedosystem.WST_TORPEDO)
Torpedosystem.SetSingleFire(1)
Torpedosystem.SetAimedWeapon(0)
kFiringChainString = App.TGString()
kFiringChainString.SetString("")
Torpedosystem.SetFiringChainString(kFiringChainString)
Torpedosystem.SetMaxTorpedoes(0, 0)
Torpedosystem.SetTorpedoScript(0, "Tactical.Projectiles.Dummy")
Torpedosystem.SetNumAmmoTypes(1)
App.g_kModelPropertyManager.RegisterLocalTemplate(Torpedosystem)
#################################################
FwdTorpedo1 = App.TorpedoTubeProperty_Create("Fwd Torpedo 1")
FwdTorpedo1.SetMaxCondition(3200.000000)
FwdTorpedo1.SetCritical(0)
FwdTorpedo1.SetTargetable(1)
FwdTorpedo1.SetPrimary(1)
FwdTorpedo1.SetPosition(-0.194336, 0.269000, 0.037419)
FwdTorpedo1.SetPosition2D(65.000000, 21.000000)
FwdTorpedo1.SetRepairComplexity(4.000000)
FwdTorpedo1.SetDisabledPercentage(0.750000)
FwdTorpedo1.SetRadius(0.003000)
FwdTorpedo1.SetDumbfire(1)
FwdTorpedo1.SetWeaponID(1)
FwdTorpedo1.SetGroups(1)
FwdTorpedo1.SetDamageRadiusFactor(0.200000)
FwdTorpedo1.SetIconNum(370)
FwdTorpedo1.SetIconPositionX(69.000000)
FwdTorpedo1.SetIconPositionY(35.000000)
FwdTorpedo1.SetIconAboveShip(1)
FwdTorpedo1.SetImmediateDelay(0.300000)
FwdTorpedo1.SetReloadDelay(30.000000)
FwdTorpedo1.SetMaxReady(2)
FwdTorpedo1Direction = App.TGPoint3()
FwdTorpedo1Direction.SetXYZ(0.000000, 1.000000, 0.000000)
FwdTorpedo1.SetDirection(FwdTorpedo1Direction)
FwdTorpedo1Right = App.TGPoint3()
FwdTorpedo1Right.SetXYZ(0.000000, 0.000000, -1.000000)
FwdTorpedo1.SetRight(FwdTorpedo1Right)
App.g_kModelPropertyManager.RegisterLocalTemplate(FwdTorpedo1)
There are two aft launchers on the Saber in groups of three on the aft end; these are coming from the dorsal surface on what appears to be small bumps, so the pulse weapons gives the illusion of rotary turrets on the hull to give a wider firing arc - that's gonna go away with the standard launchers. You'll copy the aft launchers over from the Defiant hardpoint the same way as you did with the forward one, so find the aft launcher properties on the Defiant and copy them over so the final result looks like this:
#################################################
Torpedosystem = App.TorpedoSystemProperty_Create("Torpedo system")
Torpedosystem.SetMaxCondition(5000.000000)
Torpedosystem.SetCritical(0)
Torpedosystem.SetTargetable(0)
Torpedosystem.SetPrimary(1)
Torpedosystem.SetPosition(0.000000, 0.500000, 0.050000)
Torpedosystem.SetPosition2D(0.000000, 0.000000)
Torpedosystem.SetRepairComplexity(1.000000)
Torpedosystem.SetDisabledPercentage(0.250000)
Torpedosystem.SetRadius(0.100000)
Torpedosystem.SetNormalPowerPerSecond(1.000000)
Torpedosystem.SetWeaponSystemType(Torpedosystem.WST_TORPEDO)
Torpedosystem.SetSingleFire(1)
Torpedosystem.SetAimedWeapon(0)
kFiringChainString = App.TGString()
kFiringChainString.SetString("")
Torpedosystem.SetFiringChainString(kFiringChainString)
Torpedosystem.SetMaxTorpedoes(0, 0)
Torpedosystem.SetTorpedoScript(0, "Tactical.Projectiles.Dummy")
Torpedosystem.SetNumAmmoTypes(1)
App.g_kModelPropertyManager.RegisterLocalTemplate(Torpedosystem)
#################################################
FwdTorpedo1 = App.TorpedoTubeProperty_Create("Fwd Torpedo 1")
FwdTorpedo1.SetMaxCondition(3200.000000)
FwdTorpedo1.SetCritical(0)
FwdTorpedo1.SetTargetable(1)
FwdTorpedo1.SetPrimary(1)
FwdTorpedo1.SetPosition(-0.194336, 0.269000, 0.037419)
FwdTorpedo1.SetPosition2D(65.000000, 21.000000)
FwdTorpedo1.SetRepairComplexity(4.000000)
FwdTorpedo1.SetDisabledPercentage(0.750000)
FwdTorpedo1.SetRadius(0.003000)
FwdTorpedo1.SetDumbfire(1)
FwdTorpedo1.SetWeaponID(1)
FwdTorpedo1.SetGroups(1)
FwdTorpedo1.SetDamageRadiusFactor(0.200000)
FwdTorpedo1.SetIconNum(370)
FwdTorpedo1.SetIconPositionX(69.000000)
FwdTorpedo1.SetIconPositionY(35.000000)
FwdTorpedo1.SetIconAboveShip(1)
FwdTorpedo1.SetImmediateDelay(0.300000)
FwdTorpedo1.SetReloadDelay(30.000000)
FwdTorpedo1.SetMaxReady(2)
FwdTorpedo1Direction = App.TGPoint3()
FwdTorpedo1Direction.SetXYZ(0.000000, 1.000000, 0.000000)
FwdTorpedo1.SetDirection(FwdTorpedo1Direction)
FwdTorpedo1Right = App.TGPoint3()
FwdTorpedo1Right.SetXYZ(0.000000, 0.000000, -1.000000)
FwdTorpedo1.SetRight(FwdTorpedo1Right)
App.g_kModelPropertyManager.RegisterLocalTemplate(FwdTorpedo1)
#################################################
AftTorpedo1 = App.TorpedoTubeProperty_Create("Aft Torpedo 1")
AftTorpedo1.SetMaxCondition(3200.000000)
AftTorpedo1.SetCritical(0)
AftTorpedo1.SetTargetable(1)
AftTorpedo1.SetPrimary(1)
AftTorpedo1.SetPosition(-0.233363, -0.270000, -0.051215)
AftTorpedo1.SetPosition2D(65.000000, 78.000000)
AftTorpedo1.SetRepairComplexity(3.000000)
AftTorpedo1.SetDisabledPercentage(0.750000)
AftTorpedo1.SetRadius(0.003000)
AftTorpedo1.SetDumbfire(1)
AftTorpedo1.SetWeaponID(1)
AftTorpedo1.SetGroups(4)
AftTorpedo1.SetDamageRadiusFactor(0.200000)
AftTorpedo1.SetIconNum(370)
AftTorpedo1.SetIconPositionX(75.000000)
AftTorpedo1.SetIconPositionY(105.000000)
AftTorpedo1.SetIconAboveShip(1)
AftTorpedo1.SetImmediateDelay(0.500000)
AftTorpedo1.SetReloadDelay(40.000000)
AftTorpedo1.SetMaxReady(1)
AftTorpedo1Direction = App.TGPoint3()
AftTorpedo1Direction.SetXYZ(0.000000, -1.000000, 0.000000)
AftTorpedo1.SetDirection(AftTorpedo1Direction)
AftTorpedo1Right = App.TGPoint3()
AftTorpedo1Right.SetXYZ(0.000000, 0.000000, 1.000000)
AftTorpedo1.SetRight(AftTorpedo1Right)
App.g_kModelPropertyManager.RegisterLocalTemplate(AftTorpedo1)
#################################################
AftTorpedo2 = App.TorpedoTubeProperty_Create("Aft Torpedo 2")
AftTorpedo2.SetMaxCondition(3200.000000)
AftTorpedo2.SetCritical(0)
AftTorpedo2.SetTargetable(1)
AftTorpedo2.SetPrimary(1)
AftTorpedo2.SetPosition(0.232932, -0.270000, -0.050365)
AftTorpedo2.SetPosition2D(65.000000, 78.000000)
AftTorpedo2.SetRepairComplexity(3.000000)
AftTorpedo2.SetDisabledPercentage(0.750000)
AftTorpedo2.SetRadius(0.003000)
AftTorpedo2.SetDumbfire(1)
AftTorpedo2.SetWeaponID(2)
AftTorpedo2.SetGroups(4)
AftTorpedo2.SetDamageRadiusFactor(0.200000)
AftTorpedo2.SetIconNum(370)
AftTorpedo2.SetIconPositionX(79.000000)
AftTorpedo2.SetIconPositionY(105.000000)
AftTorpedo2.SetIconAboveShip(1)
AftTorpedo2.SetImmediateDelay(0.500000)
AftTorpedo2.SetReloadDelay(40.000000)
AftTorpedo2.SetMaxReady(1)
AftTorpedo2Direction = App.TGPoint3()
AftTorpedo2Direction.SetXYZ(0.000000, -1.000000, 0.000000)
AftTorpedo2.SetDirection(AftTorpedo2Direction)
AftTorpedo2Right = App.TGPoint3()
AftTorpedo2Right.SetXYZ(0.000000, 0.000000, 1.000000)
AftTorpedo2.SetRight(AftTorpedo2Right)
App.g_kModelPropertyManager.RegisterLocalTemplate(AftTorpedo2)
Now we need to copy over the necessary codes for the "loadpropertyset" section at the bottom of the hardpoint - you'll remember this from the cloak. The final result should look like this:
prop = App.g_kModelPropertyManager.FindByName("Torpedo system", App.TGModelPropertyManager.LOCAL_TEMPLATES)
if (prop != None):
pObj.AddToSet("Scene Root", prop)
prop = App.g_kModelPropertyManager.FindByName("Fwd Torpedo 1", App.TGModelPropertyManager.LOCAL_TEMPLATES)
if (prop != None):
pObj.AddToSet("Scene Root", prop)
prop = App.g_kModelPropertyManager.FindByName("Aft Torpedo 1", App.TGModelPropertyManager.LOCAL_TEMPLATES)
if (prop != None):
pObj.AddToSet("Scene Root", prop)
prop = App.g_kModelPropertyManager.FindByName("Aft Torpedo 2", App.TGModelPropertyManager.LOCAL_TEMPLATES)
if (prop != None):
pObj.AddToSet("Scene Root", prop)
Now, we need to make sure that the launchers are positioned properly on the Saber model. Now, in my half-asleep state last night I didn't remember that you could do this without the MPE by simply copying over the location. For the forward launcher for example, find the "PhotonTurret1" property and copy the following:
SetPosition(0.000627, 1.102950, 0.019482)
Go back down to "FwdTorpedo1" and simply replace the corresponding code with that, and it'll move the firing location to where the turret is currently located. Repeat this process for the aft launchers ("PhotonTurret2" for "AftTorpedo1" and "PhotonTurret3" for "AftTorpedo2".
If you want to have the launchers fire from a different location, you'll need the MPE to help you - the selection tool will give you locations. This post is already long enough so if you want to do that let me know and I'll update in a separate post. For now, though, you should be set. The last thing you have to do is make a decision: Do you want to delete the pulse-fire system altogether? Or keep it and have the standard launchers fire another torpedo (allowing you to fire two types of torpedoes at once instead of having to manually switch)? If you want to delete the pulse-fire system, just delete the properties called "PhotonTorpedoes" and "PhotonTurretX". If you want to leave them, then just leave them.
Don't forget to ensure that the torpedo system has torpedoes loaded. You'll need to modify the following:
Torpedosystem.SetMaxTorpedoes(0, 0)
Torpedosystem.SetTorpedoScript(0, "Tactical.Projectiles.Dummy")
Torpedosystem.SetNumAmmoTypes(1)
You'll replace "Dummy" with whatever torpedo you want there - the torpedoes can be found in the "scripts/tactical/projectiles" folder - If you want it to have standard photons just change "Dummy" to "PhotonTorpedo". If you want quantum torpedoes change it to "QuantumTorpedo" - these are the names of the projectiles in KM's folder, but there are many different file names for different versions of torpedoes, so go through the src projectiles folder, look at the torpedo scripts, and find which one you like.
Also, change the second number on the "SetMaxTorpedoes" line to however many torpedoes you want it to have; leave the first number alone.
That should do it. If you have any questions let me know.