Use effects to communicate state and inheritance to keep it consistent
Organize muzzle flashes, hull animation and shared settings into a maintainable set
Give each effect an informational role
A short expanding glow signals stabilization, the muzzle flash marks a shot, and a subtle idle scale adds life, effects should communicate behavior rather than hide a missing state change
[action_focus]
spawnEffects: CUSTOM:signal
[turret_main]
shoot_flame: CUSTOM:signal
[effect_signal]
image: glow.png
life: 24
alpha: 0.8
scaleFrom: 0.6
scaleTo: 1.5
fadeOut: true
attachedToUnit: false
color: #8AE9D1Start with a subtle keyframe change
The idle animation moves between scale 1 and 1.03 without changing collision or health, inspect readability before keeping it, animation scale is a visual property
[animation_idlePulse]
onActions: idle
pingPong: true
body_0s: {scale:1}
body_1s: {scale:1.03}Override only the variant differences
Skyguard inherits the mode actions, memory setup and effects from firecontrol.ini and overrides identity, cost, art and target role, a base effect change then applies to both
[core]
copyFrom: firecontrol.ini
name: rwa08Skyguard
displayText: 防空火控车 / Skyguard
price: 650
maxHp: 320
[graphics]
image: skyguard.png
[attack]
canAttackFlyingUnits: true
canAttackLandUnits: false
maxAttackRange: 210Maintain a reference checklist
When renaming, follow inheritance paths, image files, projectile names, CUSTOM effects, actions and animation names, an existing file does not guarantee that every named reference is valid, avoid inheritance cycles
Try it yourself
Change the shared glow color and predict both variants, then override the color only in Skyguard