Bombardment Stance modding

Version

Please help with verifying or updating older sections of this article. At least some were last verified for version 3.3.

This article is for the PC version of Stellaris only.

This page is about modding the Bombardment Stances.

## Data Structure

Bombardment stances are defiend at "common/bombardment\_stances/xxx.txt".

* **trigger** – A block of Conditions to determine can a fleet have this bombardment stance. (Fleet scope)
* ~~icon\_frame = <int>~~ – Replaced, see #Icons.
* **default = <yes/no>** – If yes, newly created fleets will have this stance.
* **stop\_when\_armies\_dead = <yes/no>** – Default no. If yes, this bombardment stance will do nothing on planets without any armies.
* **abduct\_pops = <yes/no>** – Default no. If yes, pops killed by this bombardment stance are abducted instead. This will trigger the `on_pop_abducted` on-action.
* **planet\_damage = <float>** – Default 1. This value scales the planetary devastation inflicted by this bombardment stance.
* **army\_damage = <float>** – Default 1. This value scales the damage dealt to planetary armies by this bombardment stance.
* **kill\_pop\_chance** – An instance that determines the chance of this bombardment stance to kill pops.
	+ **base = <float>** – This value scales the default chance to kill a pop.
	+ **modifier** – An instance that modifies the chance. It consist of a `factor = <float>` instance and a set of Conditions. Vanilla use this to prevent the Pox bombardment stance from killing  Mechanical Pops. (Pop scope)
* **min\_pops\_to\_kill\_pop = <int>** – Default 0. If number of pops is smaller than this, this bombardment stance won't kill pops any further.
* **ai\_weight** – AI will use the bombardment stance of highest weight. (ROOT = bombarding fleet, FROM = planet under bombardment)

### Icons

Since version 3.1.\* the **`icon_frame`** parameter (index in the shared bombardment stance icon file) is replaced by a more moddable friendlier method. Each stance required a (planet modifier named) `"GFX_planet_modifier_ground_support_**NAME**"` and a (button entry named) `"GFX_fleet_order_button_ground_support_**NAME**"` defined.

**pox icon example** (at planet\_view.gfx):

```
 spriteType = {
 name = "GFX\_planet\_modifier\_ground\_support\_pox"
 sprite\_sheet\_sprite\_type = "GFX\_planet\_view\_bombarded"
 default\_frame = 5
 }

```

**pox button example** (at fleet\_view.gfx):

```
 spriteType = {
 name = "GFX\_fleet\_order\_button\_ground\_support\_pox"
 texturefile = "gfx/interface/fleet\_view/fleet\_task\_ground\_support\_pox\_action.dds"
 effectFile = "gfx/FX/buttonstate.lua"
 noOfFrames = 3
 animation = {
 animationmaskfile = "gfx/interface/fleet\_view/fleet\_task\_button\_mask.dds"
 animationtexturefile = "gfx/interface/fleet\_view/action\_button\_texture.dds"
 animationrotation = 180.0
 animationlooping = yes
 animationtime = 12.0
 animationdelay = 0.0
 animationblendmode = "overlay" # add, multiply, overlay
 animationtype = "scrolling" # scrolling, rotating, pulsing
 animationrotationoffset = { x = 0.0 y = 0.0 }
 animationtexturescale = { x = 1.0 y = 1.0 }
 animationframes = { 1 2 3 }
 }
 }
 …
 spriteType = {
 name = "GFX\_fleet\_order\_button\_ground\_support\_pox\_selected"
 texturefile = "gfx/interface/fleet\_view/fleet\_task\_ground\_support\_pox\_selected.dds"
 effectFile = "gfx/FX/buttonstate.lua"
 noOfFrames = 3
 animation = {
 animationmaskfile = "gfx/interface/fleet\_view/fleet\_task\_button\_mask.dds"
 animationtexturefile = "gfx/interface/fleet\_view/action\_button\_texture.dds"
 animationrotation = 180.0
 animationlooping = yes
 animationtime = 12.0
 animationdelay = 0.0
 animationblendmode = "overlay" # add, multiply, overlay
 animationtype = "scrolling" # scrolling, rotating, pulsing
 animationrotationoffset = { x = 0.0 y = 0.0 }
 animationtexturescale = { x = 1.0 y = 1.0 }
 animationframes = { 1 2 3 }
 }
 }

```

## Example

This is the Pox bombardment stance.

```
 pox = {
 trigger = {
 owner = {
 # --- This modifier is given by the relevant relic --- #
 has\_modifier = javorian\_pox
 OR = {
 NOT = { is\_country\_type = default }
 has\_policy\_flag = orbital\_bombardment\_indiscriminate
 has\_policy\_flag = orbital\_bombardment\_armageddon
 }
 }
 }

 default = no

 stop\_when\_armies\_dead = no
 abduct\_pops = no

 planet\_damage = 0.2
 army\_damage = 1.5

 kill\_pop\_chance = { # Should only target organics
 base = 1.5
 modifier = {
 factor = 0
 pop\_has\_trait = trait\_mechanical
 }
 }
 min\_pops\_to\_kill\_pop = 0

 # root = fleet
 # from = planet
 ai\_weight = {
 weight = 10
 modifier = {
 factor = 0.01
 exists = from
 from = {
 owner = { NOT = { is\_hostile = root.owner } }
 }
 }
 }
 }

```

## Bombardment Animation

There is an entity named "`orbital_bombardment_effects`" in the file "`gfx/models/planets/_planetary_entities.asset`". Without modding this file, any custom bombardment stances will have neither animations nor sound effects.

```
 entity = {
 name = "orbital\_bombardment\_effects"
 pdxmesh = "bombardment\_frame\_mesh"

 cull\_radius = 500.0

 # --- If multiple states named "bombard\_xxx" exist, a random state is used, weighed by the "chance" field --- #
 # --- Add more state entries for a same bombardment stance to give some randomness to the animations --- #
 # --- The more the "event" entries, the shorter the "state\_time", the more fierce the animation will look like --- #

 state = { name = "bombard\_selective" state\_time = 4 looping = no next\_state = "bombard\_selective" chance = 1
 event = { time = 0 node = "bombardment\_location\_1" particle = … } }
 event = { time = 1 node = "bombardment\_location\_5" particle = … } }
 event = { time = 2.5 node = "bombardment\_location\_12" particle = … } }
 }
 state = { name = "bombard\_selective" state\_time = 4 looping = no next\_state = "bombard\_selective" chance = 1
 event = { time = 0 node = "bombardment\_location\_7" particle = … } }
 …
 }
 state = { name = "bombard\_indiscriminate" state\_time = 3.0 looping = no next\_state = "bombard\_indiscriminate" chance = 1
 event = { time = 0 node = "bombardment\_location\_3" particle = … } }
 …
 }
 state = { name = "bombard\_indiscriminate" state\_time = 3.0 looping = no next\_state = "bombard\_indiscriminate" chance = 1
 event = { time = 0 node = "bombardment\_location\_4" particle = … } }
 …
 }
 state = { name = "bombard\_armageddon" state\_time = 2.5 looping = no next\_state = "bombard\_armageddon" chance = 1
 event = { time = 0 node = "bombardment\_location\_1" particle = … } }
 …
 }
 state = { name = "bombard\_armageddon" state\_time = 2.5 looping = no next\_state = "bombard\_armageddon" chance = 1
 event = { time = 0 node = "bombardment\_location\_2" particle = … } }
 …
 }
 …

 # --- By the way, the vanilla Pox bombardment stance do NOT have any animations --- #

 scale = 1.0
 }

```

Overwrite this entity and add more states following this format to apply bombardment animations and sound effects to custom bombardment stances.

**Modding**