Previously it was made so that "template data" was a sort of super type
of "entity state" and that the former could always be replaced by the
latter. Using this we can simplify some code passages by removing
GetTemplateData calls and using the entity's state directly instead.
GetEntityState is a performance-critical function in the GUI when a
large number of units are selected. The goal of this patch is to
increase the efficiency of it without modifying the returned states
visible to rest of the GUI in any way (it renames a few properties of
entities states or moves them around, but the information they contain
and the way to access it remain the complete same)
As explained the comments, certain parts (the template data) of an
entity state are "predictable" and can be reused between entities with
the same template.
What one has to account for, however, is that values of the template
data can be modified. This happens on two different levels:
Firstly, player-wide modifications, which apply to all entities owned
by that player. This includes stuff like bonuses from researched techs,
civs bonuses, team bonuses. And secondly, entity-local modifications,
which apply to individual entities. This includes buffs or debuffs from
status effects or auras (of other entities).
So we can construct a whole entity state by first just computing the
dynamic state (stuff like current hitpoints, which differs from entity
to entity) and then adding the (potentially already cached) template
data to it, which can be reused between entities with the same template
and owning player. And then overwrite the values affected by
entity-local modifications, which are usually just a few and even they
can be cached and reused for entities with the same owning player,
template, and entity-local modifications (identified by the
"modifications ID").
This saves the effort of retrieving/computing a ton of data each turn
and also saves the time it takes the engine to clone the data from the
simulation to the GUI (as the return value of the GUI interface call),
which previously took just as long as retrieving the entity states
themselves.
Since only the dynamic state is read from the components, a number of
small getter methods have become unused; they are kept (for now at
least) since they might be useful again in the future or for mods.
Up to now `eslint-plugin-brace-rules` was used to enforce a common brace
style for JavaScript code. This plugin was however updated the last time
over 9 years ago and will be incompatible with ESLint v10, as that
[removes `context.getSourceCode()`][1], the plugin relies on.
To keep the eslint config working with ESLint v10, this replaces
`eslint-plugin-brace-rules` with the [`@stylistic/brace-style`][2] rule
from `@stylistic/eslint-plugin`, a package we already use.
While `@stylistic/brace-style` doesn't offer an option to format braces
in exactly the same way as before, the "allman" style seems to be the
one closest to the existing code.
[1]: https://eslint.org/blog/2025/11/eslint-v10.0.0-alpha.0-released/#removed-deprecated-rule-context-members
[2]: https://eslint.style/rules/brace-style
It is possible to modify sizes by setting the properties directly.
(Without having to create a copy of it)
This allows to shorten those passages quite a bit without any functional change.
This patch introduces phase emblems on both sides of the player's name
band in the middle panel. The emblems represent the current phase of
the selected player's civilization: I (Village), II (Town), III (City).
This information is also added to the associated tooltip and is
displayed only to mutual allies and observers.
Fixes#6849
See also: https://wildfiregames.com/forum/topic/107851-introduce-badge-to-indicate-the-phase-6849/
- Left-clicking the portrait of a unit will make the camera follow that
unit (before: no action). A tooltip informs the player of this
possibility.
- Left-clicking the portrait of a structure will make the camera focus on
that structure (before: no action). A tooltip informs the player of
this possibility.
- Double-clicking a hero/treasure icon will make the camera follow that
hero/treasure (before: just focus on that hero/treasure).
- Some minor related changes.
Fixes#6879
Patch by: @nwtour
Differential revision: D4340
Reviewed by: @Silier
The patch adds a description from the technology file to tooltip when
hovering over rank icon.
This was SVN commit r26300.
344d1cc837 introduced a tech that percentually increased the required XP
for archers, showing a decimal value.
This rounds that up, for 150/150 without being promoted looks bad as
well.
Patch by: @Langbart
Differential revision: https://code.wildfiregames.com/D4322
Reviewed by: @Angen
This was SVN commit r25984.
Required experience can be set to 0 initially and because entity is
upgrated after simulation starts, there was division by 0 in atlas for
such entities causing experience bar going to infinity.
Differential revision: D4317
Fixes: #6362
Patch by: @Langbart
Reviewed by: @Angen
This was SVN commit r25974.
Adds a new component effectively handling negative resource trickles.
Prevents resources from going negative and provides an effect for not
being able to pay.
The effect chosen for 0 A.D. is having the entity not being
controllable.
Not used in the public mod itself, but it is in quite some mods.
Based on an idea of @Nescio
Differential revision: D1323
Comments by: @Angen, (@smiley,) @Stan
This was SVN commit r25191.
While they often look alike, their behaviour is totally different.
This split has some implications:
- There are now separate auras for garrisoning and turrets.
- Entities can now have both turret points and garrison slots,
independent of eachother.
In general previous behaviour is maintained as much as possible.
Differential revision: D3150
Comments by: @Nescio, @wraitii
Tested by: @v32itas
This was SVN commit r25123.
Previously this was only done for technologies.
The Viewer tries to determine an appropriate civcode from a passed
template,
however trainable gaia-animals have a template-assigned civ of `gaia`
(and
technologies don't have one at all).
The behaviour of the Viewer isn't changed by this commit: it will still
prefer
whatever civ is set within a template before falling back to the passed
civcode.
However, trained gaia-animals now have something to fall back to,
permitting the
appropriate build list (the list of buildings that train the animal) to
be
displayed.
This was SVN commit r25110.
Removes some hardcoding and allows for easier modding of treasures.
Refs.: #5888
Differential revision: D3303
Comments by: @Imarok, @Nescio, @Stan, @wraitii
This was SVN commit r24989.
Basically removed in 3521c8f51e, now brought back :) (But split from the
population space.)
Differential revision: D2056
Comments by: @Angen, @Nescio, @Stan, @wraitii
This was SVN commit r24960.
Since PopBonus is not a cost.
Patch by: @lonehawk
Differential Revision: D2948
Comments by: @Angen, @Nescio, @wraitii
Closes#4081
This was SVN commit r24394.
Since relics ought to be undestroyable, a health component makes no
sense. This makes that the Invulnerability-flag can be removed and
relics can be captured again (after 0f91c5ac61#inline-5236).
Differential Revision: D1268
Original patch by: @temple
Reviewed by: @wraitii
Comments by: @bb, @elexis
Fixes#5007, #5847, 0f91c5ac61#inline-5236
This was SVN commit r24327.
- Renames Armour-node to Resistance.
- Support resistance against Capture.
- Puts resistance against effects in separate nodes.
- Some cleaning.
Differential Revision: D2229
Reviewed by: @bb (accepted), @wraitii.
Comments by: @Stan, @Nescio.
This was SVN commit r24001.
Continuation of work on status effects, following 82a5ab6d19.
Allow techs to modify properties.
Enable different behaviour when status effects would stack, such as
extending the duration or stacking the effects.
Fix GUI issue with more than 5 status effects.
Improve tooltips.
Let status effects show a different tooltip for the attacker and the
receiver.
Patch by: Freagarach
Reviewed By: wraitii, Angen (on an older differential).
Differential Revision: https://code.wildfiregames.com/D2296
This was SVN commit r23757.
Status effect can apply modifier to the entity (armour strength, walking
speed, ...)
This is also hiding status effect icons by default in selection detail.
Fixing smaller related bugs.
Differential Revision: https://code.wildfiregames.com/D2281
Patch by: @Freagarach
Comments by: Stan, wraitii
This was SVN commit r23448.
Includes dilomacy colors, tribute buttons, spy request buttons, attack
request buttons, minimap panel, idle worker button, ceasefire counter.
Differential Revision: https://code.wildfiregames.com/D2365
Use hotkey release event from 78bc56f33e to remove input.js state and
evil global nested closure hackery from cb890ad876, refs #1839, #3194.
Fixes masstribute selecitonchange issue subject of D1191.
This was SVN commit r23065.
This fixes status effects following 16b452cf91 where the GiveStatus name
change broke them.
This lets status effects deal all types of damage, capture, or inflict
other status effects, like any attack.
This further adds some basic GUI spport to status effects, by showing up
to 5 icons in the top-right of the portrait, and including status
effects in the tooltips.
Status effects can specify a custom icon.
Differential Revision: https://code.wildfiregames.com/D2218
This was SVN commit r22901.
Right-click on icons of units, structures, technologies, flora, fauna,
etc. and view additional details.
Reviewed By: elexis
Fixes: #3212
Differential Revision: https://code.wildfiregames.com/D297
This was SVN commit r21310.
Add a button to toggle between normal and "diplomacy" colors.
Reviewed by: elexis
Comments by: leper, ffffffff, Stan
Fixes: #4747
This was SVN commit r21107.
Change the time to completion to a countdown and remove the tooltip on
the health bar.
Move the number of builders to the time speed-up tooltip.
Remove the build rate tooltip.
Differential Revision: https://code.wildfiregames.com/D572
Early review by: wraitii
Comments by: bb
This was SVN commit r21072.
Throw a reference error instead of silently using an untranslated string
if someone would have passed a non-existing translation context.
Throw a property undefined warning if someone passed a non-existing
resource when trying to translate it.
Both warnings had been introduced in 0f21151c4b, were removed by
52f311da2b but now occur without adding code explicitly.
Differential Revision: https://code.wildfiregames.com/D625
Reviewed By: s0600204
This was SVN commit r19771.
Rename the buttonset to panelEntities and unify related health tooltips.
Differential Revision: https://code.wildfiregames.com/D289
Reviewed By: Sandarac
Refs #3000
This was SVN commit r19398.
Add early return to hide loot tooltip if there is no loot (for mods).
Differential Revision: https://code.wildfiregames.com/D292
Reviewed By: fatherbushido
Fixes#4118
This was SVN commit r19387.