Part : /BASE_PART
{
NameKey = "Parts/OrchestralWMD"
IconNameKey = "Parts/OrchestralWMDIcon"
IDString = orchestral_doomsday_device
EditorGroup = "Weapons"
DescriptionKey = "Parts/OrchestralWMDDesc"
Cost = 300000
AIValue = 30
TypeCategories = [weapon, weapon_using_ammo]
Size = [3, 3]
PhysicalRect = [0, 1, 3, 2]
SaveRect = &PhysicalRect
SelectionPriority = 1
SelectionTypeByRotation = true
SelectionTypeID = "cannons"
MaxHealth = 12000
PenetrationResistance = 3
ProhibitAbove = 2
AllowedDoorLocations
[
[-1, 1]
[-1, 2]
[0, 3]
[1, 3]
[2, 3]
[3, 2]
[3, 1]
]
ExternalWallsByCell
[
{
Key = [0, 1]
Value = [TopLeft, Left]
}
{
Key = [1, 1]
Value = None
}
{
Key = [2, 1]
Value = [TopRight, Right]
}
]
InternalWallsByCell
[
{
Key = [0, 0]
Value = [Left, TopLeft, Top, TopRight]
}
{
Key = [1, 0]
Value = [TopLeft, Top, TopRight]
}
{
Key = [2, 0]
Value = [Right, TopRight, Top, TopLeft]
}
]
EditorIcon
{
Texture
{
File = "icon.png"
SampleMode = Linear
}
Size = [55.2, 92]
}
BlueprintSprites
[
{
File = "blueprints.png"
Size = [3, 5]
Offset = [0, -1]
}
]
CrewUIStats
{
Min = 2
Ideal = 8
}
Components
{
PowerToggle
{
Type = UIToggle
ToggleID = "on_off"
DefaultToggleValue = 1
RequiredForWholePartOperation = true
ToggledOnChoices = [1]
}
FireModeToggle
{
Type = UIToggle
ToggleID = "fire_mode"
DefaultToggleValue = 1
ToggledOnChoices = [1]
}
BatteryStorage
{
Type = AmmoConsumer
AmmoType = battery
MaxAmmo = 8000
LowConsumeJobPriority = &/TERRAN_PRIORITIES/IonBeam_LowConsume
HighConsumeJobPriority = &/TERRAN_PRIORITIES/IonBeam_HighConsume
EmptyConsumeJobPriority = &/TERRAN_PRIORITIES/IonBeam_EmptyConsume
JobUnassignThreshold = 1000000// Effectively unassignable.
ResupplyThreshold = 500
RequiredForWholePartOperation = true
AmmoDesireToggle = PowerToggle
ReceiveAmmoMediaEffects = &/EFFECT_PREFABS/AmmoDeliver
}
Graphics
{
Type = Graphics
Location = [1.5, 1]
Floor
{
Layer = "floors"
Offset = [0, 0]
DamageLevels
[
{
File = "floor.png"
Size = [3, 4]
}
{
File = "floor_33.png"
Size = [3, 4]
}
{
File = "floor_66.png"
Size = [3, 4]
}
]
}
OperationalLighting
{
Layer = "lights_add"
Offset = [0, 0]
DamageLevels
[
{
File = "lights.png"
Size = [3, 4]
}
]
}
Walls
{
Layer = "walls"
Offset = [0, 0]
DamageLevels
[
{
File = "walls.png"
Size = [3, 4]
}
{
File = "walls_33.png"
Size = [3, 4]
}
{
File = "walls_66.png"
Size = [3, 4]
}
]
}
Roof
{
Layer = "roofs"
Offset = [0, 0]
DamageLevels
[
{
File = "roof.png"
Size = [3, 4]
}
{
File = "roof_33.png"
Size = [3, 4]
}
{
File = "roof_66.png"
Size = [3, 4]
}
]
}
OperationalRoofWindows
{
Layer = "roof_windows"
DamageLevels
[
{
File = "roof_windows_on.png"
Size = [3, 4]
}
{
File = "roof_windows_on_33.png"
Size = [3, 4]
}
{
File = "roof_windows_on_66.png"
Size = [3, 4]
}
]
}
NonOperationalRoofWindows
{
Layer = "roof_windows"
DamageLevels
[
{
File = "roof_windows_off.png"
Size = [3, 4]
}
{
File = "roof_windows_off_33.png"
Size = [3, 4]
}
{
File = "roof_windows_off_66.png"
Size = [3, 4]
}
]
}
}
Turret
{
Type = TurretWeapon
Location = [1.5, 1] // Relative to upper-left corner of unrotated part.
Rotation = -90d // Relative to unrotated part.
FireInterval = 0.16
FiringDelay = 0.25
FiringArc = 145d
RotateSpeed = 30d
FireThresholdAngle = 1d
SpawnLoc = [2, 0]
AmmoStorage = BatteryStorage
AmmoUsed = 500
MinAmmoUsed = 1
TargetSearchTriesPerFrame = 1
AIFirepowerRating = 10000
FireModeToggle = FireModeToggle
Emitter
{
Type = Beam
Range = 320
IdealRange = 110
Duration = 0.15
HitInterval = .05
BeamMediaEffects
[
{
Type = Beam
BeamSprite
{
Texture = "beam_base2.png"
Size = [2, 0]
AnimationInterval = 0.125
_baseColor = [255, 255, 255, 255]
_sizePulseFactor = 1.2
_sizePulseInterval = .1
_sizePulseUOffsetFactor = -.03
VertexColor = [255, 255, 255, 217]
}
FadeInTime = .25
FadeOutTime = .25
ArcSpriteSegments = 64
Bucket = Middle1
}
&/PARTICLES/IonBeamEmitSparks
: /SOUNDS/AudioExterior
{
Sound = "emit.wav"
Volume = 1
MaxConcurrent = 1
MaxConcurrentVolume = 1
IntensityRampUpTime = .25
IntensityRampDownTime = .25
}
: /SOUNDS/AudioExterior
{
Sound = "beam.wav"
Volume = 1
MaxConcurrent = 1
MaxConcurrentVolume = 1
IntensityRampUpTime = .25
IntensityRampDownTime = .25
DynamicVolume : ^/0/DynamicVolume
{
UseCustomShapeForDistance = true
}
DynamicFilter : ^/0/DynamicFilter
{
UseCustomShapeForDistance = true
}
}
]
HitShield
{
HitEffects
[
{
Type = ShieldDamage;
Damage = 1000;
}
{
Type = Impulse;
Impulse = 2;
}
]
MediaEffects = &../HitOperational/MediaEffects;
}
HitOperational
{
HitEffects
[
{
Type = PartAreaDamage
DamageVsOperationalPerTile = 1600
RadiusVsOperational = 3.2
DamageVsStructurePerTile = 1200
RadiusVsStructure = 3.2
}
{
Type = Impulse;
Impulse = 2;
}
]
MediaEffects
[
&/PARTICLES/IonBeamHit
&/PARTICLES/IonBeamHitFlash
&/PARTICLES/IonBeamHitSparks
: /SOUNDS/AudioExterior
{
Sound = "hit.wav"
Volume = .5
MaxConcurrent = 1
MaxConcurrentVolume = 1
IntensityRampUpTime = .25
IntensityRampDownTime = .25
}
: /SHAKES/Shake
{
ShakeAmount = .05
Duration = .5
}
]
}
HitStructural
{
HitEffects
[
{
Type = PartAreaDamage
DamageVsOperationalPerTile = 600
RadiusVsOperational = 3.2
DamageVsStructurePerTile = 2400
RadiusVsStructure = 6
}
{
Type = Impulse;
Impulse = 1;
}
]
MediaEffects
[
&/PARTICLES/IonBeamHitStruct
: /SOUNDS/AudioExterior
{
Sound = "hit.wav"
Volume = .25
MaxConcurrent = 1
MaxConcurrentVolume = .5
IntensityRampUpTime = .25
IntensityRampDownTime = .25
}
: /SHAKES/Shake
{
ShakeAmount = .025
Duration = .5
}
]
}
}
CoverageLine
{
Sprite
{
Texture = &/INDICATORS/RadialGradient
VertexColor = [100, 175, 255, 127]
}
Thickness = 2
CapBeginPixels = 12
CapEndPixels = 12
}
}
CrewLocation1
{
Type = CrewLocation
ChainedTo = Turret
Location = [-.35, -.7]
Rotation = 270d
}
CrewLocation2
{
Type = CrewLocation
ChainedTo = Turret
Location = [-.35, .8]
Rotation = 225d
}
PartCrew
{
Type = PartCrew
MinCrew = 2
FirstCrewJobPriority = &/TERRAN_PRIORITIES/BigCannon_FirstCrew
AdditionalCrewJobPriority = &/TERRAN_PRIORITIES/BigCannon_AdditionalCrew
FullCrewJobPriority = &/TERRAN_PRIORITIES/BigCannon_FullCrew
PrerequisitesBeforeCrewing = [BatteryStorage, PowerToggle]
CrewDestinations
[
[.8, 1.35]
[2.3, 1.35]
]
CrewLocations
[
CrewLocation1
CrewLocation2
]
}
TurretCollider
{
Type = CircleCollider
ChainedTo = Turret
Radius = 1.155
Density = 1.5
}
TurretGraphics
{
Type = Graphics
ChainedTo = Turret
Location = [0, 0]
Rotation = 90d
Floor
{
Layer = "turrets"
DamageLevels
[
{
File = "turret floor.png"
Size = [3, 3]
}
{
File = "turret floor_33.png"
Size = [3, 3]
}
{
File = "turret floor_66.png"
Size = [3, 3]
}
]
}
OperationalDoodad
{
Layer = "doodads_low"
DamageLevels
[
{
AnimationFiles
[
"console on1.png"
"console on2.png"
"console on3.png"
"console on4.png"
"console on5.png"
"console on6.png"
"console on7.png"
"console on8.png"
]
Size = [3, 1]
AnimationInterval = 0.125
}
]
}
NonOperationalDoodad
{
Layer = "doodads_low"
DamageLevels
[
{
File = "console off.png"
Size = [3, 1]
}
]
}
}
BarrelSprite
{
Type = Sprite
ChainedTo = Turret
Location = [.5, 0]
Rotation = 90d
Layer = "weapons"
ResetAnimationTrigger = Turret
AtlasSprite
{
AnimationFiles
[
//"barrel1.png"
"barrel2.png"
"barrel3.png"
"barrel4.png"
"barrel5.png"
"barrel6.png"
"barrel7.png"
"barrel8.png"
"barrel9.png"
"barrel1.png"// Loop back to beginning and clamp there.
]
Size = [3, 5]
AnimationInterval = 0.0625
AnimationStartTime = MinValue
ClampAnimation = true
}
}
OperationEffects
{
Type = OperationEffects
Location = [1.5, 1.5]
BecameOperationalMediaEffects = &/EFFECT_PREFABS/MachinesOn
BecameNonOperationalMediaEffects = &/EFFECT_PREFABS/MachinesOff
}
DestroyedEffects
{
Type = DeathEffects
MediaEffects = &/EFFECT_PREFABS/BigPartDestroyed
Location = [1.5, 1.5]
FactorHitEffectsWith = BatteryStorage
HitEffects
[
{
Type = PartAreaDamage
DamageVsOperationalPerTile = 2000
RadiusVsOperational = 4.5
DamageVsStructurePerTile = 1000
RadiusVsStructure = 3.5
Delay = .05
AllowFriendlyDamage = true
}
{
Type = AreaFires
FireChancePerTile = .2
FireRadius = 4.5
FireFalloff = 0
Delay = .05
AllowFriendlyFires = true
}
]
}
Indicators
{
Type = IndicatorSprites
Location = [1.5, 1.5]
Layer = "indicators"
Indicators
[
// Turned off.
{
Source = PowerToggle
AtlasSprite
{
File = &/INDICATORS/PowerOff
Size = [1, 1]
}
}
// Out of ammo.
{
Source = Turret
AtlasSprite
{
File = &/INDICATORS/NoAmmo
Size = [1.5, 1.5]
}
}
// No crew.
{
Source = PartCrew
AtlasSprite
{
File = &/INDICATORS/NoCrew
Size = [1.5, 1.5]
}
}
]
}
}
}
// Code