Commit graph

208 commits

Author SHA1 Message Date
phosit
9598c6c2e1
Only clone this.position when it's an object
Refs: #8951
2026-07-19 13:01:04 +02:00
phosit
2c44b5301c
Only clone this.targetPos when it's an object
When writing 55f2d356ff, I didn't know that `clone` only handles
objects. Now there is an extra path for `undefined`.

Fixes: #8951
2026-07-08 17:00:59 +02:00
phosit
b3552ebccb
Clone the position in attackPlan 2026-05-10 14:18:52 +02:00
phosit
be03605eac
Update unitCollection in attackPlan 2026-05-10 14:18:51 +02:00
phosit
b572fed672
Consistently sort the build order
When the returned value of the compare function is `0` the order is
preserved. Before the sort, the order between joining clients and
non-joining clients differ.
Now everything important (which is used later on) is included in the
comparison. If still `0` is returned it's not importent which element is
taken.

Another solution would be to have one array per category.
2026-05-10 14:18:51 +02:00
phosit
55f2d356ff
Clone targetPos in attackPlan
On a rejoined client the data isn't the same anymore. But it's equal.
Likely this is because the data isn't aquired at the same turn.

This could also be solved more generally by copying all data which is
pushed to the AI. Or by using the same serializer for AI as for the rest
of the simulation.
2026-05-10 14:18:51 +02:00
phosit
9aea56e4a2
Also serialize unitCollUpdateArray in AttackPlan
It needs to be serialized so it's known which units to update next.
2026-05-10 14:18:50 +02:00
phosit
130ea06ce8
Don't add queues when deserializing AttackPlans
When deserializing the queues are already there. It was an error to try
to add a queue since sometimes there must not be a queue.
2026-05-10 14:18:50 +02:00
phosit
6facc9ee17
Fix AI OOS on rejoin related to random calls
Based on a diff from @Silier: https://code.wildfiregames.com/D2573
2026-05-10 14:18:48 +02:00
Dunedan
93ce94655d
Use @stylistic/brace-style for eslint
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
2026-01-12 21:33:52 +01:00
wowgetoffyourcellphone
3592814aa8 Gendered Civilians
Adds a randomly male and female Civilian unit which replaces the old "Female Citizen" for each civ.
New actors, new portraits, some new body textures, but the same stats as the old Female Citizen.
Updates maps, technologies, skirmish templates, et al. including the Tutorials.

Co-Authored By: Itms
Reviewed By: Vantha
2025-09-02 10:23:44 +02:00
phosit
8abe9f6cea Rename warn to aiWarn in utils.js
There is a call to `warn` in this function. That caused infinite
recursion.
Everywhere the function is imported it's aliased as `aiWarn`. So just
export it with that name and remove the aliasing.

Introduced in: #8255
2025-08-25 21:44:32 +02:00
phosit
062be89694 Move enums to own files in ai
This way they don't accidentally get mutated.
2025-08-13 14:04:16 +02:00
phosit
0a2bd6a5a4 Use proper js-modules for ai common-api
The common-api already used a coding pattern which was called modules.
That is replaced with native js-modules.

Refs: #8081
2025-08-13 14:04:16 +02:00
phosit
4da78788c8 Use proper js-modules for petra
Petra already used a coding pattern which was called modules. That is
replaced with native js-modules.

Refs: #8081
Fixes: #1024
2025-08-13 14:04:16 +02:00
phosit
582541ea80 Enable eslint rule 'no-useless-assignment'
Enable rule 'no-useless-assignment' [1] and fix violations.

[1] https://eslint.org/docs/latest/rules/no-useless-assignment
2025-08-01 11:26:40 +02:00
Ralph Sennhauser
0ce889ca6d
Use stylistic for deprecated eslint rules
During the eslint 8 cycle the formatting rules were split out [1],
deprecating the corresponding rules in core.

This replaces all rules that where moved to @stylistic/eslint-plugin [2]
and accounts for the difference in the indenting rule behaviour.

To allow the pre-commit import hack to continue to work with the
stylisitc plugin for a recent nodejs version to be used.

[1] https://eslint.org/blog/2023/10/deprecating-formatting-rules/
[2] https://eslint.style/packages/default

Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-06-10 21:23:23 +02:00
Ralph Sennhauser
0d59444401
Fix eslint rule 'prefer-const' in petra/attackPlan
eslint --no-config-lookup --fix --rule '"prefer-const": 1' \
    binaries/data/mods/public/simulation/ai/petra/attackPlan.js

Ref: #7812
Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
2025-05-07 12:56:45 +02:00
Andreas Traber
05f31300a1 Fix multiple bugs where a wrong variable is used.
Those bugs stood out to me as I was experimenting with migrating petra
to ES6 classes. Since this give the code stronger typing, those kind of
errors stand out immediately.
For example, autoResearch is a function, thus referring to it by name
will always return the same result. In other cases the referenced
variables simply don't exist.
2025-02-09 16:00:22 +01:00
Freagarach
11c9e33d0f [PetraAI] - Wait when all members of an attack-plan are garrisoned.
Reported by: @Langbart
Differential revision: https://code.wildfiregames.com/D4936
Refs. #6385 by fixing a part of it (the attack plan).

This was SVN commit r27551.
2023-02-17 13:49:01 +00:00
Freagarach
a8c25837cb [PetraAI] - Use enum-like variables instead of magic values. -- [2]
Improved readability. Easier find-and-replace.

This commit focused on:
- Worker
- TransportPlan
- Difficulty

Patch by: @JCWasmx86
Differential revision: https://code.wildfiregames.com/D4343
Refs. #6256
Comments by: @nani, @Silier, @Stan
This was SVN commit r26063.
2021-12-13 08:04:33 +00:00
Angen
a43ff8b088 Fix not used SIEGE_NO_TRAINER
In 2f24006afb, the siege state for no trainer was not assigned to
variable but used in condition.
Making use of that state actually.

Differential revision: D4367
Patch by: @JCWasmx86
This was SVN commit r26053.
2021-12-12 12:19:11 +00:00
Freagarach
5d3902498f [PetraAI] - Use enum-like variables instead of magic values. -- [1]
Improved readability. Easier find-and-replace.

This commit is focused on:
- BaseManager
- AttackPlan
- GarrisonManager

Patch by: @JCWasmx86
Differential revision: https://code.wildfiregames.com/D4334
Refs. #6256
Comments by: @Silier, @Stan
This was SVN commit r26029.
2021-12-04 08:47:05 +00:00
Freagarach
4e664dd712 [PetraAI] - Manage bases in a separate BasesManager.
The HQ should only care about high-level stuff, hence something like
managing/looping individual bases is now done in a `BasesManager`,
similar to the `AttackManager`.

Differential revision: https://code.wildfiregames.com/D4192
Comments by: @Angen
Fixes: #6185

This was SVN commit r25876.
2021-08-29 06:47:05 +00:00
Freagarach
fe6ce8d402 (Partly) Fix PetraAI building a lot of siege and not using it.
Following 3d7af82328.
The used classes for adding siege were wrong.

Reported in
https://wildfiregames.com/forum/topic/45178-a25-svn-version-25810-not-playable/.
Differential revision: https://code.wildfiregames.com/D4184
Refs. #6250 by (partly) fixing the siege case.
Reviewed by: @Angen
This was SVN commit r25826.
2021-07-18 05:05:13 +00:00
Angen
7e92f714ca [PetraAI] - Make easy difficulties of AI weaker
This patch decreases the popScaling so that the easy AI difficulties
have lower targeted population.
And it also decreases the size & priority of the attacks from the easy
an very easy AI.

Refs: #6149
Differential revision: D3997
Patch by: @marder
Tested by: @Langbart
Comments by: @wraitii, @Freagarach
This was SVN commit r25600.
2021-05-30 09:07:27 +00:00
Freagarach
3d7af82328 Improve support for classes in PetraAI.
Let PetraAI use MatchesClassList more.

Differential revision: https://code.wildfiregames.com/D2150
Reviewed by: Angen
Comments by: Stan
This was SVN commit r25584.
2021-05-28 06:54:48 +00:00
wraitii
6b05cc9d3c Fix AI undefined error from garrisoned entities.
Introduced in 9e96bca85e.

Reported by: Freagarach
Fixes #5960

Differential Revision: https://code.wildfiregames.com/D3451
This was SVN commit r24765.
2021-01-22 17:35:45 +00:00
Angen
87ec9457c3 [Petra] update usage of Elephant class
Remove Champion class from siege functions related to melee elephants.
Improve mobile dropsite code by replacing Elephant class with Unit
class.
Remove code related to fact support elephants can build as it is not
case anymore.

Differential Revision: https://code.wildfiregames.com/D2964
Patch by: Nescio
Reviewed by: Angen
This was SVN commit r24027.
2020-09-07 17:25:12 +00:00
Freagarach
d6449bf3f0 Rename blacksmith -> forge.
A blacksmith is a person, a forge is the blacksmith's workshop.
This renames templates and corrects simulation and sound files.

Patch by: @Nescio.
Differential Revision: D2971
Approved by @genava55, @Gallaecio, @wraitii.

This was SVN commit r23998.
2020-08-26 15:00:00 +00:00
wraitii
164af0742a Use new FastMoving class instead of Cavalry in AI/petra.
This class is an AI hint that such units are to be treated as moving
fast, e.g. war dogs, or cavalry.
This makes it easier to introduce camels and chariots correctly.

Further work is required to make the AI unit choices less hardcoded.

Patch by: Nescio
Reviewed By: Angen, wraitii
Differential Revision: https://code.wildfiregames.com/D2251
This was SVN commit r23916.
2020-08-01 10:35:44 +00:00
bb
2ef3fd7a77 Clean up market classes:
template_structure_economic_market.xml → Market
template_structure_military_dock.xml → Dock
<Market/TradeType> node → Trade
requirement for bartering: BarterMarket → Barter

Change Petra accordingly


Also changing:
    Renamed the Gates class to Gate, LongWall to WallLong (cf.
WallTower), and StoneWall to Wall, to match their template file names.
Adjusted AI code, technologies, and templates accordingly.
    Entity build restrictions:
        renamed Apadana to Palace;
        replaced UniqueStructure with IshtarGate and TempleOfVesta.
        added Council to the (unbuildable) spart_gerousia.xml, since
it's functionally identical to athen_prytaneion.xml.
    Introduced the following classes:
        Council, IshtarGate, Library, TempleOfVesta, and Theater, to
match their build restrictions.
        WallMedium and WallShort, to complement the already existing
WallLong and WallTower classes.
        Stoa, TempleOfMars, and TriumphalArch, for completeness.
    Made the ArmyCamp, Colony, Gate, Lighthouse, Naval, Palace,
Palisade, SiegeWall, and StoneWall classes visible.
    Deleted the now unused Apadana, Kennel, SpecialBuilding classes.
    Removed the Village class from outposts and palisades, because those
are not supposed to count towards the phase technology requirements.
        Slightly rephrased the phase technology requirements tooltips.
    Corrected the <GenericName> of the various palisade files.
    Updated Structure tooltips from D2578 that have not already been
committed elsewhere.

Patch By: Nescio
Differenital Revision: D2892

This was SVN commit r23865.
2020-07-21 19:45:30 +00:00
Angen
e181614215 [PetraAI] Remove redundant branch introduced in f1610ce4fa
Branches introduced in f1610ce4fa had commented part to consider
stonewalls as blocking targets only if there have been siege units in
army.
Commented part was removed in ade8bcc0b8.

Differential Revision: https://code.wildfiregames.com/D2804
This was SVN commit r23760.
2020-06-10 18:27:13 +00:00
Angen
267ccd3127 [PetraAI] Do not try to attack entities which can't be attacked.
Avoid trying to attack unattackable entities based on restricted classes
from Attack component.

Differential Revision: https://code.wildfiregames.com/D2111
Patch by: Freagarach
Reviewed by: Angen
This was SVN commit r23759.
2020-06-10 18:23:41 +00:00
Angen
ba8acb1bf2 Remove duplication in AttackPlan [Petra]
Move duplicating code to functions.
Cleaner, nicer, easier to extend.

Differential Revision: https://code.wildfiregames.com/D2655
This was SVN commit r23536.
2020-03-17 19:30:15 +00:00
Angen
df524c31d1 Do not allow minimum size drop to 0 because of population scale [Petra attack plan]
Petra reached maxed population and started spamming attack requests.
Reported at forum
https://wildfiregames.com/forum/index.php?/topic/27319-ai-chat-spamming/.

Cause of problem was that with given population scaling and current
rounding minimal requested size of units dropped to 0.
What leaded to allow to start without units because minimum count have
been reached.

This change requires at least one unit if minimum size is not 0 before
adjustment by pop scaling , what we need to not block attacks with
heroes or healers for example.

Now in case Petra is not able to produce units, aborts plan correctly.

Differential Revision: https://code.wildfiregames.com/D2462
This was SVN commit r23235.
2019-12-14 15:44:22 +00:00
elexis
ade8bcc0b8 Fix some Petra whitespace; with b59198524f/D2103 fixes all ESLint issues in petra/, refs #5524.
Differential Revision: https://code.wildfiregames.com/D1993
Patch By: Krinkle
This was SVN commit r22835.
2019-09-02 21:16:06 +00:00
elexis
b59198524f Remove PETRA Module and Augmentation pattern from 3362c591f5, refs #2322, and in Petra since 97afd25171.
The objective of 3362c591f5 to have only one global for multiple AIs is
still achieved by not changing the resulting object structure.
The advantage of not using the pattern is to have less parental scopes,
i.e. more localization and separation of concerns.
This resembles the successful simulation script component system.
The stated benefits of the Augmentation pattern were never used, because
there are (luckily) no such private variables or globals passed as
arguments.

Fixes an ESLint warning about using PETRA before it is defined, refs
#5524, D1993.
Fixes the missing level of indentation if indentation should represent
scoping proportionally.

Remove superfluous, thus misleading name PetraBot in PETRA.PetraBot
assignment.

Differential Revision: https://code.wildfiregames.com/D2103
Patch By: Krinkle
Related comments by: Yves, wraitii, Philip, leper on #0ad-dev on
December 2013, see #2322
Source was:
http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

This was SVN commit r22803.
2019-08-29 18:12:53 +00:00
Stan
dba5a59f81 reaffect → reassign
Patch by: @Gallaecio
Reported by: GunChleoc on Transifex
Differential Revision: ​​​​​https://code.wildfiregames.com/D1526
This was SVN commit r21981.
2018-12-29 16:10:06 +00:00
Gallaecio
788ca1f69d Revert 51afc72886, it violates current freezes
This was SVN commit r21826.
2018-05-26 18:26:31 +00:00
Gallaecio
51afc72886 reaffect → reassign
Reported by GunChleoc on Transifex.

This was SVN commit r21825.
2018-05-26 18:22:12 +00:00
mimo
fdba663e1d petra: internal renaming to follow the GameType -> VictoryConditions change in simu
This was SVN commit r21706.
2018-04-12 17:18:24 +00:00
mimo
870a0b54d0 petra: use standground stance for packable units as default
This was SVN commit r21614.
2018-03-24 14:01:11 +00:00
mimo
06c64bd8da petra (partial) cleanup following eslint
This was SVN commit r21448.
2018-03-06 18:47:33 +00:00
mimo
4bbb5cc8ef petra: refactor the base management to allow further extensions
This was SVN commit r21435.
2018-03-04 22:32:32 +00:00
mimo
5f92726fe7 petra: fix land attacks targeting ships
This was SVN commit r21428.
2018-03-03 18:46:06 +00:00
mimo
4392d73c5c petra: fasten late game by not waiting to have a huge army before attacking nearly defeated enemies
This was SVN commit r21424.
2018-03-03 10:37:54 +00:00
mimo
58f7f47554 petra: additional fixes for accessibility checks during attacks
This was SVN commit r21397.
2018-02-28 19:20:28 +00:00
mimo
b50589f66e petra: fixes/cleanups in attacks
This was SVN commit r21391.
2018-02-27 16:31:23 +00:00
mimo
f687c8f61d petra: Always use an helper function to get the accessibility of an entity instead of direct use of the accessibility map, in order to be able to cope with entity specificities (docks for example).
This was SVN commit r21372.
2018-02-25 10:10:14 +00:00