Skip to content

Commit f18ba2e

Browse files
committed
Merge remote-tracking branch 'upstream/develop' into multiweapon
# Conflicts: # docs/Whats-New.md # src/Ext/TechnoType/Body.cpp # src/Ext/TechnoType/Body.h
2 parents eb00f7e + ad05c75 commit f18ba2e

37 files changed

+4240
-3366
lines changed

CREDITS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,8 @@ This page lists all the individual contributions to the project by their author.
412412
- Fix the bug that AlphaImage remained after unit entered tunnel
413413
- Weapon target filtering by health percentage
414414
- Fix the bug that `DamageSelf` and `AllowDamageOnSelf` are ineffective on airforce
415+
- Customize limit when engineer repair a building
416+
- Fix the bug that damaged particle dont disappear after building has repaired by engineer
415417
- **Apollo** - Translucent SHP drawing patches
416418
- **ststl**:
417419
- Customizable `ShowTimer` priority of superweapons
@@ -490,6 +492,7 @@ This page lists all the individual contributions to the project by their author.
490492
- Exclusive SuperWeapon Sidebar
491493
- Fix an issue that the widespread damage caused by detonation on the bridge/ground cannot affect objects on the ground/bridge who are in the opposite case
492494
- Several new Infotypes, no display in specific status and a new single frame display method
495+
- Customizable spawn delay of `VoxelAnim`'s `TrailerAnim` and fix its incorrect position
493496
- **Ollerus**:
494497
- Build limit group enhancement
495498
- Customizable rocker amplitude

docs/Fixed-or-Improved-Logics.md

Lines changed: 28 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -230,8 +230,10 @@ This page describes all ingame logics that are fixed or improved in Phobos witho
230230
- Fixed the bug that uncontrolled scatter when elite techno attacked by aircraft or some unit try crush it.
231231
- Second weapon with `ElectricAssault=yes` will not unconditionally attack your building with `Overpowerable=yes`.
232232
- Infantry support `IsGattling=yes`.
233-
- Fixed the issue that the widespread damage caused by detonation on the bridge/ground cannot affect objects on the ground/bridge who are in the opposite case.
233+
- Fixed an issue that the widespread damage caused by detonation on the bridge/ground cannot affect objects on the ground/bridge who are in the opposite case.
234234
- Fixed the bug that `DamageSelf` and `AllowDamageOnSelf` are ineffective on airforce.
235+
- Fixed the bug that damaged particle dont disappear after building has repaired by engineer.
236+
- Fixed the issue of incorrect position of `TrailerAnim` in `VoxelAnim`.
235237

236238
## Fixes / interactions with other extensions
237239

@@ -292,7 +294,7 @@ In `rulesmd.ini`:
292294
[General]
293295
ExtendedAircraftMissions=false ; boolean
294296

295-
[SOMEAIRCRAFT] ; AircraftType
297+
[SOMEAIRCRAFT] ; AircraftType
296298
ExtendedAircraftMissions.SmoothMoving= ; boolean, default to [General] -> ExtendedAircraftMissions
297299
ExtendedAircraftMissions.EarlyDescend= ; boolean, default to [General] -> ExtendedAircraftMissions
298300
ExtendedAircraftMissions.RearApproach= ; boolean, default to [General] -> ExtendedAircraftMissions
@@ -1792,6 +1794,16 @@ UseWeeds.ReadinessAnimationPercentage=0.9 ; double - when this many weeds
17921794

17931795
- The INI keys and behaviour is mostly identical to the [equivalent behaviour available to regular animations](#customizable-debris--meteor-impact-and-warhead-detonation-behaviour). Main difference is that the keys must be listed in the VoxelAnim's entry in `rulesmd.ini`, not `artmd.ini`.
17941796

1797+
### Customizable debris trailer anim spawn delay
1798+
1799+
- You can now customize the generation interval of VoxelAnim's trailer animation.
1800+
1801+
In `rulesmd.ini`:
1802+
```ini
1803+
[SOMEVOXELANIM] ; VoxelAnimType
1804+
Trailer.SpawnDelay=2 ; integer, game frames
1805+
```
1806+
17951807
## Warheads
17961808

17971809
### Allowing damage dealt to firer
@@ -1846,20 +1858,6 @@ Rocker.AmplitudeMultiplier=1.0 ; floating point value, multiplier
18461858
Rocker.AmplitudeOverride= ; integer
18471859
```
18481860

1849-
### Customizable Warhead trigger conditions
1850-
1851-
- It is now possible to make warheads only trigger when target's HP is above and/or below certain percentage.
1852-
- Both conditions need to evaluate to true in order for the warhead to trigger.
1853-
- If set to `false`, `EffectsRequireVerses` makes the Phobos-introduced warhead effects trigger even if it can't damage the target because of it's current ArmorType (e.g. 0% in `Verses`).
1854-
1855-
In `rulesmd.ini`:
1856-
```ini
1857-
[SOMEWARHEAD] ; WarheadType
1858-
AffectsAbovePercent=0.0 ; floating point value, percents or absolute
1859-
AffectsBelowPercent=1.0 ; floating point value, percents or absolute
1860-
EffectsRequireVerses=false ; boolean
1861-
```
1862-
18631861
### Customizable Warhead animation behaviour
18641862

18651863
- It is possible to make game play random animation from `AnimList` by setting `AnimList.PickRandom` to true. The result is similar to what `EMEffect=true` produces, however it comes with no side-effects (`EMEffect=true` prevents `Inviso=true` projectiles from snapping on targets, making them miss moving targets).
@@ -1889,6 +1887,20 @@ CreateAnimsOnZeroDamage=false ; boolean
18891887
Conventional.IgnoreUnits=false ; boolean
18901888
```
18911889

1890+
### Customizable Warhead trigger conditions
1891+
1892+
- It is now possible to make warheads only trigger when target's HP is above and/or below certain percentage.
1893+
- Both conditions need to evaluate to true in order for the warhead to trigger.
1894+
- If set to `false`, `EffectsRequireVerses` makes the Phobos-introduced warhead effects trigger even if it can't damage the target because of it's current ArmorType (e.g. 0% in `Verses`).
1895+
1896+
In `rulesmd.ini`:
1897+
```ini
1898+
[SOMEWARHEAD] ; WarheadType
1899+
AffectsAbovePercent=0.0 ; floating point value, percents or absolute
1900+
AffectsBelowPercent=1.0 ; floating point value, percents or absolute
1901+
EffectsRequireVerses=false ; boolean
1902+
```
1903+
18921904
### Customizing decloak on damaging targets
18931905

18941906
- You can now specify whether or not the warhead decloaks objects that are damaged by the warhead.

docs/General-Info.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ There are three main types of Phobos builds:
99
- *development builds* - those are the builds which contain functionality that needs to be tested. They are numbered plainly starting from 0 and incrementing the number on each release. Mod authors still can include those versions with their mods if they want latest features, though we can't guarantee lack of bugs;
1010
- *nightly builds* - bleeding edge versions which can include prototypes, proofs of concepts, scrapped features etc., in other words - we can't guarantee anything in those builds and they absolutely should NOT be used in mod releases and should only be used to help with development and testing.
1111

12+
```{hint}
13+
You can find the downloads for these versions on the document's [main page](index.md#downloads).
14+
```
15+
1216
### Disabling development build warning
1317

1418
**DISCLAIMER:** We understand that everyone wants to try and use the new features as soon as they're released, but we can't do all the testing ourselves, so we only test the functionality on a basic level. We ask everyone who uses the new development build first to **test the new changes in every possible way first before disabling the development build warning** and proceeding to include the build in your mod release. This would allow us to concentrate on implementing the actual features, which is the most complex task. Learn more on testing [here](Contributing.md#testing).

docs/New-or-Enhanced-Logics.md

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -558,6 +558,23 @@ In `rulesmd.ini`:
558558
IsDestroyableObstacle=false ; boolean
559559
```
560560

561+
### Engineer repair customization
562+
563+
- You can now set a maximum amount when engineer repair a building for either of them. 0 means the building will be repaired to full health.
564+
- Negative value means percentage. For example, `EngineerRepairAmount=-50` means you can only repair 50% of the building's health per Engineer.
565+
- If both the building and the engineer has `EngineerRepairAmount` set, the actual repair amount will be the minimum of them.
566+
- `BuildingRepairedSound` can now be set individually for each building type.
567+
568+
In `rulesmd.ini`:
569+
```ini
570+
[SOMEBUILDING] ; BuildingType
571+
EngineerRepairAmount=0 ; integer
572+
BuildingRepairedSound= ; Sound entry, default to [AudioVisual] -> BuildingRepairedSound
573+
574+
[SOMEINFANTRY] ; InfantryType
575+
EngineerRepairAmount=0 ; integer
576+
```
577+
561578
### Extended building upgrades
562579

563580
![image](_static/images/powersup.owner-01.png)
@@ -591,7 +608,7 @@ PowerPlantEnhancer.Amount=0 ; integer
591608
PowerPlantEnhancer.Factor=1.0 ; floating point value
592609
```
593610

594-
### Spy Effects
611+
### Spy effects
595612

596613
- Additional espionage bonuses can be toggled with `SpyEffect.Custom`.
597614
- `SpyEffect.VictimSuperWeapon` instantly launches a Super Weapon for the owner of the infiltrated building at building's coordinates.
@@ -607,7 +624,7 @@ SpyEffect.InfiltratorSuperWeapon= ; SuperWeaponType
607624

608625
## Infantry
609626

610-
### Customizable FLH When Infantry Is Prone Or Deployed
627+
### Customizable FLH when infantry is prone or deployed
611628

612629
- Now infantry can override `PrimaryFireFLH` and `SecondaryFireFLH` if is prone (crawling) or deployed. Also works in conjunction with [burst-index specific firing offsets](#firing-offsets-for-specific-burst-shots).
613630

@@ -622,14 +639,14 @@ DeployedSecondaryFireFLH= ; integer - Forward,Lateral,Height
622639

623640
### Customizable `SlavesFreeSound`
624641

625-
- `SlavesFreeSound` is now dehardcoded from `[AudioVisual]` and can be set individually for each enslavable infantry type.
642+
- `SlavesFreeSound` can now be set individually for each enslavable infantry type.
626643

627644
In `rulesmd.ini`:
628645

629646
```ini
630647
[SOMEINFANTRY] ; InfantryType
631648
Slaved=yes
632-
SlavesFreeSound= ; Sound entry
649+
SlavesFreeSound= ; Sound entry, default to [AudioVisual] -> SlavesFreeSound
633650
```
634651

635652
### Default disguise for individual InfantryTypes
@@ -643,7 +660,7 @@ In `rulesmd.ini`:
643660
DefaultDisguise= ; InfantryType
644661
```
645662

646-
### Random death animaton for NotHuman Infantry
663+
### Random death animaton for NotHuman infantry
647664

648665
- Infantry with `NotHuman=yes` can now play random death anim sequence between `Die1` to `Die5` instead of the hardcoded `Die1`.
649666
- Do not forget to tweak infantry anim sequences before enabling this feature, otherwise it will play invisible anim sequence.
@@ -1520,7 +1537,7 @@ MultiMindControl.ReleaseVictim=false ; boolean
15201537

15211538
### Multi Weapon
15221539

1523-
![Multi Weapon](_static/images/multiweapons.gif)
1540+
![image](_static/images/multiweapons.gif)
15241541
*Multi Weapon used to release different weapons against different targets in **Zero Boundary** by @[Stormsulfur](https://space.bilibili.com/11638715/lists/5358986)*
15251542

15261543
- You are free to decide whether to use Weapon x or not, instead of passively using Primary/secondary.
@@ -1732,7 +1749,7 @@ VoiceCreated= ; Sound entry
17321749
In `rulesmd.ini`:
17331750
```ini
17341751
[General]
1735-
BerzerkTargeting=all ; AffectedHouse enumeration
1752+
BerzerkTargeting=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
17361753
```
17371754

17381755
### Tiberium eater
@@ -1756,7 +1773,7 @@ TiberiumEater.CellN= ; X,Y - cell offset
17561773
TiberiumEater.CashMultiplier=1.0 ; floating point value
17571774
TiberiumEater.AmountPerCell=0 ; integer
17581775
TiberiumEater.Display=true ; boolean
1759-
TiberiumEater.Display.Houses=all ; AffectedHouse enumeration
1776+
TiberiumEater.Display.Houses=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
17601777
TiberiumEater.Anims= ; List of AnimationTypes
17611778
TiberiumEater.Anims.Tiberium0= ; List of AnimationTypes
17621779
TiberiumEater.Anims.Tiberium1= ; List of AnimationTypes
@@ -1895,7 +1912,8 @@ FireUp.ResetInRetarget=true ; boolean
18951912
All new Warhead effects
18961913
- Can be used with `CellSpread` and Ares' GenericWarhead superweapon where applicable.
18971914
- Cannot be used with `MindControl.Permanent=yes` of Ares.
1898-
- Respect `Verses` where applicable unless `EffectsRequireVerses` is set to `false`. If target has an active shield, its armor type is used instead unless warhead can penetrate the shield.
1915+
- Respect `Verses` where applicable unless `EffectsRequireVerses` is set to `false`.
1916+
- If target has an active [shield](#shields), its armor type is used instead unless warhead can penetrate the shield.
18991917
```
19001918

19011919
### Break Mind Control on impact
@@ -2106,7 +2124,7 @@ In `rulesmd.ini`:
21062124
TransactMoney=0 ; integer - credits added or subtracted
21072125
TransactMoney.Display=false ; boolean
21082126
TransactMoney.Display.AtFirer=false ; boolean
2109-
TransactMoney.Display.Houses=All ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
2127+
TransactMoney.Display.Houses=all ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
21102128
TransactMoney.Display.Offset=0,0 ; X,Y, pixels relative to default
21112129
```
21122130

docs/User-Interface.md

Lines changed: 48 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,32 @@ IngameScore.LoseTheme= ; Soundtrack theme ID
3636

3737
- You can now configure various types of numerical counters to be displayed over Techno to represent its attributes, such as health points or shield points and can be turned on or off via a [new hotkey](#toggle-digital-display).
3838
- `InfoIndex` defines the specific `InfoType`.
39-
- In `InfoType=Spawns`, 0 - alive spawns, 1 - docked spawns, 2 - launching spawns.
40-
- In `InfoType=Tiberium`, 0 - all, 1 - the first tiberium, 2 - the second tiberium, ...
41-
- In `InfoType=SpawnTimer`, 0 - the fastest spawnee, 1 - the first spawnee, 2 - the second spawnee, ...
42-
- In `InfoType=SuperWeapon`, 0 - the first SW of all, 1 - SW, 2 - SW2, 3 - the first SWs' SW, ...
43-
- In `InfoType=FactoryProcess`, 0 - the first factory in production, 1 - primary factory, 2 - secondary factory.
39+
- In `InfoType=Spawns`,
40+
- 0 - alive spawns,
41+
- 1 - docked spawns,
42+
- 2 - launching spawns.
43+
<br><br>
44+
- In `InfoType=Tiberium`,
45+
- 0 - all,
46+
- 1 - the first tiberium,
47+
- 2 - the second tiberium,
48+
<br>...
49+
- In `InfoType=SpawnTimer`,
50+
- 0 - the fastest spawnee,
51+
- 1 - the first spawnee,
52+
- 2 - the second spawnee,
53+
<br>...
54+
- In `InfoType=SuperWeapon`,
55+
- 0 - the first SW of all,
56+
- 1 - `[BuildingType] -> SuperWeapon`,
57+
- 2 - `[BuildingType] -> SuperWeapon2`,
58+
- 3 - the first SW in `[BuildingType] -> SuperWeapons`,
59+
<br>...
60+
- In `InfoType=FactoryProcess`,
61+
- 0 - the first factory in production,
62+
- 1 - primary factory,
63+
- 2 - secondary factory.
64+
<br><br>
4465
- `Anchor.Horizontal` and `Anchor.Vertical` set the anchor point from which the display is drawn (depending on `Align`) relative to unit's center/selection box. For buildings, `Anchor.Building` is used instead.
4566
- `Offset` and `Offset.ShieldDelta` (the latter applied when a shield is active) can be used to further modify the position.
4667
- By default, values are displayed in `current/maximum` format (i.e. `20/40`).
@@ -65,10 +86,10 @@ In `rulesmd.ini`:
6586
0=SOMEDIGITALDISPLAYTYPE
6687

6788
[AudioVisual]
68-
Buildings.DefaultDigitalDisplayTypes= ; list of DigitalDisplayTypes
69-
Infantry.DefaultDigitalDisplayTypes= ; list of DigitalDisplayTypes
70-
Vehicles.DefaultDigitalDisplayTypes= ; list of DigitalDisplayTypes
71-
Aircraft.DefaultDigitalDisplayTypes= ; list of DigitalDisplayTypes
89+
Buildings.DefaultDigitalDisplayTypes= ; List of DigitalDisplayTypes
90+
Infantry.DefaultDigitalDisplayTypes= ; List of DigitalDisplayTypes
91+
Vehicles.DefaultDigitalDisplayTypes= ; List of DigitalDisplayTypes
92+
Aircraft.DefaultDigitalDisplayTypes= ; List of DigitalDisplayTypes
7293

7394
[SOMEDIGITALDISPLAYTYPE] ; DigitalDisplayType
7495
; Generic
@@ -82,7 +103,7 @@ Anchor.Vertical=top ; Vertical position enumeration (
82103
Anchor.Building=top ; Hexagon vertex enumeration (top|lefttop|leftbottom|bottom|rightbottom|righttop)
83104
Percentage=false ; boolean
84105
HideMaxValue=false ; boolean
85-
VisibleToHouses=owner ; Affected house enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
106+
VisibleToHouses=owner ; Affected House Enumeration (none|owner/self|allies/ally|team|enemies/enemy|all)
86107
VisibleToHouses.Observer=true ; boolean
87108
VisibleInSpecialState=true ; boolean
88109
ValueScaleDivisor= ; integer
@@ -98,9 +119,9 @@ Palette=palette.pal ; filename with .pal extension
98119
Shape.Spacing= ; integers - horizontal, vertical spacing between digits
99120
Shape.PercentageFrame=false ; boolean
100121

101-
[SOMETECHNOTYPE]
122+
[SOMETECHNOTYPE] ; TechnoType
102123
DigitalDisplay.Disable=false ; boolean
103-
DigitalDisplayTypes= ; list of DigitalDisplayTypes
124+
DigitalDisplayTypes= ; List of DigitalDisplayTypes
104125
DigitalDisplay.Health.FakeAtDisguise=true ; boolean
105126
```
106127

@@ -114,6 +135,21 @@ DigitalDisplay.Enable=false ; boolean
114135
An example shape file for digits can be found on [Phobos supplementaries repo](https://github.com/Phobos-developers/PhobosSupplementaries).
115136
```
116137

138+
````{note}
139+
`Shape.PercentageFrame` effectively provides the ultimate solution for all static data display effects: it allows mapping the current value to a specific static frame index in a shape file sequence by calculating its proportional ratio to the total value, where the concrete image on this frame is entirely user-defined.
140+
141+
```{hint}
142+
You can create a circular health bar for technos, where the different frames of this ring Shape file correspond to the state of the circular health bar at varying degrees of damage.
143+
144+
![image](_static/images/ring-health-bar.gif)
145+
*Example of a ring-shaped health bar*
146+
147+
The arrangement of static images on the plane is entirely up to you to draw freely, without being constrained by pre-established frameworks (e.g., the original rule for health bars was to start at a fixed coordinate, fetch a pip from a fixed frame of a fixed file at fixed intervals, and then arrange them horizontally), choosing from inherently limited options.
148+
```
149+
150+
Of course, this is just the implementation method. To balance freedom with efficiency—that is, how to efficiently draw the patterns you need—you still need to independently explore a workflow that suits you.
151+
````
152+
117153
### Flashing Technos on selecting
118154

119155
- Selecting technos, controlled by player, now may show a flash effect by setting `SelectionFlashDuration` parameter higher than 0.

0 commit comments

Comments
 (0)