Skip to content

Feature/techno attachment - #2437

Draft
FS-21 wants to merge 520 commits into
Phobos-developers:feature/techno-attachmentfrom
FS-21:feature/techno-attachment
Draft

FS-21 wants to merge 520 commits into
Phobos-developers:feature/techno-attachmentfrom
FS-21:feature/techno-attachment

Conversation

@FS-21

@FS-21 FS-21 commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

What kind of change is this?

  • New feature, vanilla bugfix or enhancement of a released feature - changelog, docs and credits entries are needed.
  • Improvement to a new (unreleased) feature - docs and credits entries are needed; no changelog entry (Skip Changelog).
  • Bugfix to a new (unreleased) feature - credits entry is needed; no changelog or docs entries (Skip Changelog, Skip Docs).
  • Bugfix to an old (released) feature - changelog and credits entries are needed; no docs entry (Skip Docs).
  • Completely minor change (e.g. a typo fix) - no entries are needed (Skip Changelog, Skip Docs, Skip Credits).

Description

I tried to address the major part of the bugs and TO-DO list. I also added some minor changes I found necessary for a pleasant experience.

Here the AI changelog (because I used Gemini for this but & tested manually the major part of the before & after the commits for identifying the problems):

Summary of Changes

This PR addresses all outstanding issues, community tester reports, and stability bugs on the feature/techno-attachment branch, bringing it to a fully tested and production-ready state.

Stability & Bug Fixes:

  • Unlimbo crash fix: Added strict validity checks after Unlimbo in AttachmentClass::AI.
  • Airborne detachment physics: Cleanly restores original locomotor, handles ground descent, parachutes, and obstacle/crush collisions when parent aircraft is destroyed.
  • Passenger entry fix: Fixed CargoClass and IsOccupierIgnorable so infantry and vehicles can enter transports and bunkers carrying attachments.
  • Deploy cell clearance: Ignored child attachments during DeploysInto cell clearance checks and properly initialized TechnoExt::Deployer.
  • Cell occupation cleanup: Fixed cell occupation corruption on child death/detachment in OccupyList.
  • Cloak synchronization: Fixed desync loops between parent and child when inheriting state effects, hooking native engine uncloak/cloak.
  • Turret jitter & targeting loops:
    • Fixed twitching on out-of-range targets during reload intervals by checking IsCloseEnough() before GetFireError(..., true).
    • Prevented vanilla Update_Facing from corrupting child idle turret facings.
    • Invalidated key.Base in UnitClass_DrawVXL_ResetKeyForTurretUse for smooth 3D rendering.
    • Added turret body tracking for parents lacking turrets.
  • Building animations: Attachments now properly stay hidden during Buildup and disappear on Selldown.

New Features & Controls:

  • InheritTarget=yes: Synchronizes child attack mission and target with the parent.
  • Targetable=no: Redirects enemy AI targeting and player orders directly to the parent.
  • Damageable=no: Makes decorative/sub-components invulnerable to direct weapons, redirecting hits to the parent hierarchy.
  • InheritTilt=yes: Transfers slope pitch/roll and 3D tilting to attached children.
  • AttachmentX.IsOnBarrel=yes: Allows attachments to be mounted directly onto elevating/recoiling barrels.

The "Cell occupation cleanup" is something I really I had no idea how to test it. The "Airborne detachment physics" was tested only with jumpjets vehicles.

TaranDahl and others added 30 commits July 28, 2026 16:00
…nds (Phobos-developers#2311)

<!-- Please manually add a label named [No Documentation Needed] if this
change should not be mentioned in documentation, what's new and no
credit needs to be given.
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches. -->

---------

Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
### Customize whether aircraft is a cargo plane

- In vanilla, the `IsALoaner` flag of an aircraft is determined by the
game's own logic during `UnLimbo`. Now, you can explicitly control this
flag per AircraftType.
- The key `IsALoaner` determines the value of the aircraft's `IsALoaner`
flag when it is unlimboed. If left unset, the vanilla behavior is
preserved.

In `rulesmd.ini`:
```ini
[SOMEAIRCRAFT]      ; AircraftType
IsALoaner=       ; boolean
```
… the linked building when deactivated (Phobos-developers#2315)

<!-- Please manually add a label named [No Documentation Needed] if this
change should not be mentioned in documentation, what's new and no
credit needs to be given.
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches. -->

---------

Co-authored-by: Noble_Fish <1065703286@qq.com>
…itialPayload logic (Phobos-developers#2316)

In the past, in order to use `OpenTopped` with Infantry as a transport,
it was necessary to graft/temporarily substitute with an `Abductor`
weapon whose invoker is that Infantry; now you can directly use the
InitialPayload logic to create passengers, just like other FootClass
objects.

<img width="242" height="167" alt="image"
src="https://github.com/user-attachments/assets/3d7e6c43-952c-4163-97a9-89545af44af0"
/>
Keep Syringe open until the game exits. Helps stop the client calling
GameProcessExited when the "attach debugger" message appears.

Ported from Vinifera - [originally done
](https://github.com/Vinifera-Developers/Vinifera/pull/1548/commits/bbc37f5a6e6665189e37166d94197657da25c504)by
ZivDero & secsome.
- Ìf `DropCrate` is declared then the specified crate will be spawned
when the object is destroyed.

In `rulesmd.ini`:
```ini
[SOMETECHNO]  ; TechnoType
DropCrate=    ; Powerup crate type enum (money|unit|healbase|cloak|explosion|napalm|squad|reveal|armor|speed|firepower|icbm|invulnerability|veteran|ionstorm|gas|tiberium|pod)
```

Also, a new map action (see the documentation) allows the overwrite of
this behaviour (disbale, enable or set a new crate) if the trigger is
attached to technos.

Tested in online games so this doesn't desync.

---------

Co-authored-by: Coronia <2217891145@qq.com>
Co-authored-by: Bartłomiej Moroz <Bartm12@wp.pl>
a simplification of
Phobos-developers#1390

- `ArmorMultiplier.Chance` can be used to set the chance of whether the
armor multiplier will take effect or not when taking damage.
- `ArmorMultiplier.AffectsHouse` can be used to set which houses the
armor multiplier will take effect.
- `ArmorMultiplier.HitAnim` can be used to set the animation that'll be
played when taking damage. Won't be displayed if the armor multiplier
doesn't take effect due to `ArmorMultiplier.Allow/DisallowWarheads`,
`ArmorMultiplier.Chance` or `ArmorMultiplier.AffectsHouse` settings. If
more than one animation is listed, a random one is selected.

In `rulesmd.ini`:
```ini
[SOMEATTACHEFFECT]                                 ; AttachEffectType
ArmorMultiplier.Chance=1.0                         ; floating point value
ArmorMultiplier.AffectsHouse=all                   ; List of Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
ArmorMultiplier.HitAnim=                           ; List of AnimationTypes
```
Spawned=yes is set to true on vanilla cargo plane
…lopers#2230)

`ProjectileRange` now has weapon range modifiers applied to it if
greater than 0 and unless `ProjectileRange.ApplyModifiers` is set to
false on the WeaponType.

----------------------

Summary of changes:
- Patches Ares code to skip `Ranged=true` projectile checks and updating
projectile position to new coordinates.
- Add new hook at `0x467BA4` (Ares hook return address) with updated
projectile range check as well as the skipped position update.
- New mechanism treats `BulletClass::Range` as immutable initial max
range (as opposed to distance that the projectile can still travel that
is deducted from every frame) to preserve ability to check effective
range with dynamic modifiers, distance traveled so far is stored in new
field `BulletExt::DistanceTraveled`.

----------------------

Fixes the main underlying reason for Phobos-developers#2227's existence, whether or not
it has any reason to remain after addressing this I do not know.
- Fixed an issue where `OmniFire` was ineffective on buildings with
`Turret=yes`.
- Fixed an issue where setting a production building as `Primary` could
cause it to enter an unload state.

---------

- Building types now also support using `DeployFire` and
`DeployFireWeapon`.
- If a building has other configurations such as `Factory`,
`GapGenerator`, or `Passengers`, it will prioritize executing those
deployment actions instead.
- `DeployFireDelay` specifies the frame interval at which deployed
weapons attempt to fire. If the weapon is unavailable due to `ROF`,
`CanTarget`, or other reasons, the deployed weapon will not fire.
  
In `rulesmd.ini`:
```ini
[SOMEBUILDING]      ; BuildingType
DeployFireDelay=    ; integer, The default value is in the range of 14 to 16.
```

---------

Co-authored-by: Fly-Star <100747645+a851903106@users.noreply.github.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
Co-authored-by: Coronia <2217891145@qq.com>
<!-- Please manually add a label named [No Documentation Needed] if this
change should not be mentioned in documentation, what's new and no
credit needs to be given.
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches. -->
### Automatic conversion based on HP

- Units can now be converted into another unit by health percentage.
- `Convert.Health.AbovePercent`determines the minimal health percentage
at which a unit converts automatically.
- `Convert.Health.BelowPercent`determines the maximum health percentage
at which a unit converts automatically.
- `Convert.Health` specify the new techno after the conversion. This
unit must be of the same type of the original (infantry -> infantry,
vehicle -> vehicle or aircraft -> aircraft).
- Setting a negative number will disable the HP check, and when both
checks are disabled, conversion will not occur.

In `rulesmd.ini`:
```ini
[SOMETECHNO]                         ; TechnoType, before conversion
Convert.Health.AbovePercent=-1.0     ; floating point value, percents or absolute
Convert.Health.BelowPercent=-1.0     ; floating point value, percents or absolute
Convert.Health=                      ; TechnoType, after conversion
```

---------

Co-authored-by: Coronia <2217891145@qq.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
…ers#2191)

### Berzerk (Psychedelic) duration stacking customization

- By default `Psychedelic` warheads override the current duration of the
berzerk effect regardless of if the new duration is higher or lower than
the current one. This can now be customized with
`Psychedelic.StackingMode`, with both global setting under
`[CombatDamage]` and per-Warhead customization.

In `rulesmd.ini`:
```ini
[CombatDamage]
Psychedelic.StackingMode=override  ; Stacking mode enum (override|setifzero|min|max|add|subtract|multiply|divide)

[SOMEWARHEAD]                      ; WarheadType
Psychedelic.StackingMode=          ; Stacking mode enum (override|setifzero|min|max|add|subtract|multiply|divide)
```

---------------

Dev note: The enum was generalized for potential (future) use elsewhere
but is also possibly over-engineered for these kind of purposes and
mixes two things together (when and how) which might not be ideal, can
simplify it if need be I suppose.

---------

Co-authored-by: Coronia <2217891145@qq.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
The implementations of these attack move enhancements from Phobos-developers#1730 are problematic, so remove them before the upcoming release. Keeps AttackMove.Follow and AttackMove.IgnoreWeaponCheck, drops the dependent mega mission fix hook (Phobos-developers#1759) that only served the removed feature, and updates the Whats-New entry to point to the remaining attack move enhancements.
…lopers#1900)

RA2/YR doesn't have implemented the Tiberian Sun action "24" (Play
Speech). It just marks the action ended and then jumps to the next
action from the script list.
- Given a speech index, the game will play it. Just like action 24 from
Tiberian Sun.

In `aimd.ini`:
```ini
[SOMESCRIPTTYPE]  ; ScriptType
x=24,n
```

Already tested in my mod and very simple action.
- now their timers won't extend when the unit is in limbo, and remove useless warp out check
- add a TiberiumEater.UnderEMP tag which works similar as PassengerDeletion.UnderEMP
Using `SkipMapSelect=yes` in the map file allows you to bypass the
restriction in `mapselmd.ini`—which requires that the player's faction
in the current campaign must match the faction in the next new campaign.
You can use `NextScenario` and `AltNextScenario` to specify the map
names required to enter a new campaign, thereby forcing the game to
proceed to the next campaign.

现在在地图文件中使用`SkipMapSelect=yes`可以绕过`mapselmd.ini`中的限制——该限制要求当前战役中玩家所属的阵营必须与下一个新战役中的阵营一致。你可以使用`NextScenario`和`AltNextScenario`来指定进入新战役所需的地图名称强制游戏进入下一个战役。

Now, setting a local variable named `<Alternate Next Scenario>` will
also trigger `AltNextScenario`.
现在启用一个名为`<Alternate Next Scenario>`的局部变量也可以触发`AltNextScenario`。

---------

### `611` Set Next Scenario

- Set the next campaign to load after winning the current one.
- Works only in `Campaign Mode` and requires setting
`[Basic]>SkipMapSelect=yes`.

In `mycampaign.map`:
```ini
[Actions]
...
ID=ActionCount,[Action1],611,4,[Map Filename],0,0,0,0,A,[ActionX]
...
```

---------

Co-authored-by: Fly-Star <100747645+a851903106@users.noreply.github.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
### Stop immediately if the target enters the range during
ApproachTarget

- In vanilla, the ApproachTarget will simply exit and do nothing if the
target is in range. This will cause your units to approach the target
unnecessarily.
  - Now you can change this behavior by the following flag.
- The setting can be customized per techno type; if not set on a type,
the global setting is used as the fallback.
- `AttackMove.StopWhenTargetAcquired` is read as a compatibility alias
for `ApproachTarget.StopWhenInRange` (in both `[General]` and techno
type sections).

In `rulesmd.ini`:
```ini
[General]
ApproachTarget.StopWhenInRange=false  ; boolean

[SOMETECHNO]
ApproachTarget.StopWhenInRange=       ; boolean, default to the same key in [General]
```

### Keep pursuing the target during ApproachTarget

- Now you can make a unit approach its target with the target itself as
the destination, just like ZEP, instead of a point on the arc around the
target whose radius is the unit's own weapon range.
- If `ApproachTarget.StopWhenInRange` is set to `true`, the unit will
stop as soon as the target enters its range and will not chase it
further.
- `AttackMove.PursuitTarget` is read as a compatibility alias for
`ApproachTarget.PursuitTarget`.

In `rulesmd.ini`:
```ini
[SOMETECHNO]                   ; TechnoType
ApproachTarget.PursuitTarget=  ; boolean, default to false
```

---------

Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
Co-authored-by: Coronia <2217891145@qq.com>
Fly-Star-him and others added 30 commits October 7, 2026 00:37
…lopers#2429)

## What kind of change is this?

- [X] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

> Since the author is me, please apply `Skip Credits` label.

## Description


- You can now use multiple weapons with `NoAmmoWeapons` while
`NoAmmoAmount` is active.
- `NoAmmoWeapons` selects an appropriate weapon based on the weapon's
`CanTarget` and other tags, as well as the warhead's `Verses`.
 - If no suitable weapon is found, it continues to use `NoAmmoWeapon`.

In `rulesmd.ini`:
```ini
[SOMETECHNO]                        ; TechnoType
NoAmmoWeapons=                      ; List of integers
NoAmmoWeapons.IgnoreNeverUse=yes    ; boolean
```

---------

- 现在你可以在`NoAmmoAmount`生效时使用`NoAmmoWeapons`指定多个武器。

  - `NoAmmoWeapons`会根据武器的`CanTarget`等各项标签以及弹头的`Verses`来检查当前武器是否可用。
  - 未能搜寻到合适的武器则继续使用`NoAmmoWeapon`。

---------

Co-authored-by: Fly-Star <100747645+a851903106@users.noreply.github.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
 was reintroduced by Phobos-developers#2429

Preliminarily judged that the issue was introduced by commit 1074043 when syncing develop, and it is speculated that the documentation changes of the develop branch were not correctly synced when resolving conflicts.
## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [X] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

Fixed an issue in Ares where vehicles would occasionally continue to
fire and move even after the driver had been killed.

修复Ares下载具驾驶员被击杀后仍有可能继续开火、移动的问题。

---------

Co-authored-by: Fly-Star <100747645+a851903106@users.noreply.github.com>
Co-authored-by: Noble_Fish <1065703286@qq.com>
Co-authored-by: Coronia <2217891145@qq.com>
…Phobos-developers#2457)

Fixed an issue where vehicles affected by warheads with
`IsLocomotor=yes` would have their effects interrupted when deactivated
or reactivated.

修复受`IsLocomotor=yes`弹头影响的载具在失灵/复原时会中断抬升效果的问题。


This is the original bug demonstration:
<img width="237" height="150" alt="磁电抬人bug"
src="https://github.com/user-attachments/assets/c938c4fc-fbf0-46f0-a749-c6be9d597311"
/>

---------

Co-authored-by: Fly-Star <100747645+a851903106@users.noreply.github.com>
…hobos-developers#2459)

## What kind of change is this?

- [x] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.

## Description

`TerrainType` destructors can delete `SHP` references still retained by
the `FileSystem` cache. Subsequent mission restarts can reuse the freed
memory and corrupt unrelated data. This was reproduced in Global
Crisis’s `TUTO4` after two in-game restarts.

Clear borrowed `SHP` references before native deletion in both terrain
destructor paths. Owned images and raw theater images retain their
existing cleanup behavior.

An equivalent standalone correction passed two in-game restarts under
Wine with the full campaign DLL set.
…Phobos-developers#2458)

## What kind of change is this?

- [X] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

Vanilla initializes the sidebar radar X origin at `16`. The visible
aperture starts at `13` for the Allied/GDI sidebar and `14` for the
Soviet/NOD sidebar, so the radar content, its input rectangle, and the
view rectangle are offset by 3 and 2 pixels respectively.

This PR corrects `RadarClass::RadarX` after the Allied and Soviet
sidebar branches converge, using the existing `isNODSidebar` state
derived from `Sidebar.GDIPositions`. The fix is enabled by default and
can be disabled with:

```ini
[AudioVisual]
UseSidebarRadarOffsetFix=no
```

The before/after comparison was captured on the map **Super Big
Trouble** (**超级大麻烦**).

### Before


![Before](https://raw.githubusercontent.com/Super-StarX/Phobos/assets/sidebar-radar-offset/before.png)

### After


![After](https://raw.githubusercontent.com/Super-StarX/Phobos/assets/sidebar-radar-offset/after.png)

## Notes

- The required YRpp definition is provided by Phobos-developers/YRpp#84;
the submodule points to that branch so CI can resolve it.
- `scripts\\build_debug.bat` passes.

---------

Co-authored-by: Noble_Fish <1065703286@qq.com>
Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
…developers#2462)

<!--
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches.
-->

## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [ ] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [x] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

<!-- Write your description below. Usually this is your improvement
documentation copy, but you may add extra notes or sections or whatever
you feel is important for reviewing. -->
…ng (Phobos-developers#2430)

<!--
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches.
-->

## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [x] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

<!-- Write your description below. Usually this is your improvement
documentation copy, but you may add extra notes or sections or whatever
you feel is important for reviewing. -->

In `rulesmd.ini`:
```ini
[SOMETECHNO]               ; TechnoType
CrashROT=-1                ; integer, negative means no effects
```
…#2423)

<!--
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches.
-->

## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [ ] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [x] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

<!-- Write your description below. Usually this is your improvement
documentation copy, but you may add extra notes or sections or whatever
you feel is important for reviewing. -->
…developers#2463)

<!--
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches.
-->

## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [X] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

> ## https://www.phoboscn.top/t/topic/808
> Medical crates will make friendly units with the SCATTER ability
scurry about
>
![image](https://www.phoboscn.top/uploads/default/original/2X/8/89c1b4b67283b5172d8add7550af640cd6091048.gif)
<!--
If the changes are solely made to the documentation, please set the
target branch to the pull request named "Weekly Regular Documentation
Revisions", rather than the repository's existing branches.
-->

## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [x] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

- Ares' Academy feature could previously only add `Academy.Types` and
`Academy.Ignore` to buildings. Now, `Academy.Country.Types.*` and
`Academy.Country.Ignore.*` can be used to add country-level filters to
buildings.

In `rulesmd.ini`:
```ini
[SOMEBUILDING]               ; BuildingType
Academy.Country.Types.N=     ; List of TechnoType, empty for all types
Academy.Country.Ignore.N=    ; List of TechnoType
; Where N is 0,1,2...15.
```

- Additionally, `Academy.AllowCountryFilter` must be set for a country
to enable this feature. Only countries with this feature enabled will
use the academy's `Academy.Country.Types.*` and
`Academy.Country.Ignore.*` instead of `Academy.Types` and
`Academy.Ignore`.

In `rulesmd.ini`:
```ini
[SOMECOUNTRY]                       ; Country
Academy.AllowCountryFilter=false    ; boolean
```

---------

Co-authored-by: NetsuNegi39 <negi542554365@outlook.com>
Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
because an explicit type list does not need to distinguish scope through `BuildCat` markers
## What kind of change is this?

<!-- Tick the row that matches your change. It tells the maintainers
which of the changelog, docs and credits checks should run, and which
`Skip` labels to apply for the ones that don't. -->

- [x] **New feature, vanilla bugfix or enhancement of a released
feature** - changelog, docs and credits entries are needed.
- [ ] **Improvement to a new (unreleased) feature** - docs and credits
entries are needed; no changelog entry (`Skip Changelog`).
- [ ] **Bugfix to a new (unreleased) feature** - credits entry is
needed; no changelog or docs entries (`Skip Changelog`, `Skip Docs`).
- [ ] **Bugfix to an old (released) feature** - changelog and credits
entries are needed; no docs entry (`Skip Docs`).
- [ ] **Completely minor change (e.g. a typo fix)** - no entries are
needed (`Skip Changelog`, `Skip Docs`, `Skip Credits`).

## Description

You can now specify custom palette for Custom Insignia in
[TechnoTypes](https://phobos.readthedocs.io/zh-cn/latest/Fixed-or-Improved-Logics.html#customizable-veterancy-insignias)
and
[InsigniaTypes](https://phobos.readthedocs.io/zh-cn/latest/Miscellanous.html#insignia-type).


In `rulesmd.ini`:
```ini
[SOMETECHNO]                              ; TechnoType
InsigniaPalette=palette.pal               ; filename - including the .pal extension
InsigniaPalette.Rookie=        	          ; filename - including the .pal extension
InsigniaPalette.Veteran=                  ; filename - including the .pal extension
InsigniaPalette.Elite=        	          ; filename - including the .pal extension
InsigniaPalette.WeaponN=palette.pal       ; filename - including the .pal extension
InsigniaPalette.WeaponN.Rookie=           ; filename - including the .pal extension
InsigniaPalette.WeaponN.Veteran=          ; filename - including the .pal extension
InsigniaPalette.WeaponN.Elite=            ; filename - including the .pal extension
InsigniaPalette.PassengersN=palette.pal   ; filename - including the .pal extension
InsigniaPalette.PassengersN.Rookie=       ; filename - including the .pal extension
InsigniaPalette.PassengersN.Veteran=      ; filename - including the .pal extension
InsigniaPalette.PassengersN.Elite=        ; filename - including the .pal extension

[SOMEINSIGNIATYPE]                        ; InsigniaType
InsigniaPalette=palette.pal               ; filename - including the .pal extension
InsigniaPalette.Rookie=        	          ; filename - including the .pal extension
InsigniaPalette.Veteran=                  ; filename - including the .pal extension
InsigniaPalette.Elite=                	  ; filename - including the .pal extension
```

---------

Co-authored-by: NetsuNegi39 <negi542554365@outlook.com>
Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
Co-authored-by: Netsu_Negi <71598172+NetsuNegi@users.noreply.github.com>
…t wall has been destroyed by adjacent damage/crush/wave damage (Phobos-developers#1861)

just a bugfix

---------

Co-authored-by: Noble Fish <89088785+DeathFishAtEase@users.noreply.github.com>
This Ares feature was previously reported as not working, but today's follow-up confirmation could not reproduce the corresponding scenario either; all in all, this was probably a wasted effort.

This reverts commit  020d342.
- ApplyPerTargetEffectsOnDetonate=false can now trigger Crit properly
- forced Crit.SuppressWhenIntercepted=false when ApplyPerTargetEffectsOnDetonate=false as doc suggested
- disable crit calculation if the warhead can't do crit at all
- update ApplyPerTargetEffectsOnDetonate doc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.