992 Commits

Author SHA1 Message Date
Steve Cotton
49ebbb9709 Make fix_whitespace complain about mixing tabs and spaces
Ensures that files either use tabs for indentation or spaces for indentation,
but don't switch between the two within the same file.

This doesn't fix the whitespace, it's a simple check to flag it up
on the assumption that it's better to use an editor or code formatter
to clean up the file.

Elsewhere in the CI we use the luacheck tool - while that can detect
mixing tabs and spaces in a single line's indent, it doesn't check for
inconsistent indentation within a file.
2023-02-05 02:22:53 +01:00
Pentarctagon
5eae1b6199 Reorganize unit tests. 2022-12-21 12:30:04 -06:00
mattsc
507aa62e83 Lua AI: speed up battle_calcs.battle_outcome in extreme cases
The method used in the battle_outcome() function is somewhat simplified compared to the default engine calculation and faster in the vast majority of cases, but it can become extremely slow when the combined number of strikes of the attacker and defender is very large.
2022-08-31 12:42:10 -07:00
mattsc
2424d5705f Micro AI CAs: add handle_user_interact calls 2022-07-12 22:57:16 -04:00
mattsc
c7b3393a9d ai_helper: add handle_user_interact calls 2022-07-12 22:57:16 -04:00
mattsc
b1b521f582 Lua AI CAs: add handle_user_interact calls
Insert these calls in loops that do expensive calculations for the CAs of the default and experimental AIs.
2022-07-12 22:57:16 -04:00
mattsc
6ed684af73 move-to-any-enemy CA: stop eval if no enemies
Otherwise there is an error caused by one of the sort functions later in the code.
2022-07-03 06:48:47 -07:00
mattsc
90f1c01f41 AI: improve efficiency of move-to-any-enemy CA
The new method avoids a lot of path finding that the previous method did, esp. on large maps with many units and/or enemies, leading to significant speed improvements in some cases.

This fixes #6504
2022-07-01 18:56:00 -07:00
mattsc
0092c141d2 Micro AIs: fix image paths 2022-06-27 20:21:28 -07:00
mattsc
2f3f70a709 Micro AIs: add warning messages if invalid parameters are used 2022-06-27 20:21:21 -07:00
mattsc
21475ced4f Micro AIs: add error messages if parameters are of wrong type
Fixes #6408.
2022-06-27 20:20:06 -07:00
mattsc
a70ecf1ff5
Merge pull request #6783 from mattsc/expai_updates
Some fixes to the Experimental AI
2022-06-24 16:37:59 -07:00
mattsc
6796ac3d56
Merge pull request #6792 from mattsc/retreat_allied_villages
Fix retreat injured CA taking allied villages
2022-06-24 16:31:15 -07:00
mattsc
b55148ce91 Retreat injured CA: fix for regenerate ability without value key
The ability does not need to contain a value key if it only heals poison.
2022-06-24 16:03:51 -07:00
mattsc
c1d1ff517a ExpAI recruit rushers: include unit types from extra_recruit
This fixes #4924. Note, however, that the recruit rushers CA is set up for single-leader sides and does not work with multiple leaders, so this is of limited use.
2022-06-22 16:31:39 -07:00
mattsc
7877218158 Deprecate generic_recruit_engine.lua 2022-06-22 16:31:39 -07:00
mattsc
45ac8de582 ExpAI recruit rushers: new parameter reset_cache_each_turn
Many of the operations of the recruit rushers CA are expensive and are therefore cached. For the most part, this cache can be kept from turn to turn, but in case there are events that change, for example, the map or the recruit list, this parameter can be used to force a reset of the cache each turn.
2022-06-22 16:31:39 -07:00
mattsc
561314b0f6 ExpAI recruit rushers: do not parse side __cfg each eval 2022-06-22 16:31:38 -07:00
mattsc
dfde09c174 ExpAI recruit rushers: reset recruit_data.recruit each turn
While most data in recruit_data can stay persistent from turn to turn, some of recruit_data.recruit, such as enemy_types, needs to be updated each turn.
2022-06-22 16:31:38 -07:00
mattsc
e4b776cbb8 ExpAI: do not use generic_recruit_engine
This removes the need for the Generic Recruit Engine and makes Recruit Rushers a "clean" candidate action.  In the process, it fixes a bug of data leakage between the Experimental AIs of different sides.
2022-06-22 16:31:28 -07:00
mattsc
b9506ff795 Retreat injured CA: allow taking ally villages when aspect is set 2022-06-22 08:16:31 -07:00
mattsc
ce9ba142bc Add new AI aspect allow_ally_villages 2022-06-22 08:00:50 -07:00
mattsc
2b3824f44c Retreat injured CA: do not take villages from ally 2022-06-22 07:51:46 -07:00
mattsc
fdb931bb16 Remove Lua AI code deprecated at level 3 in 1.15 2022-06-21 19:15:00 -07:00
Celtic Minstrel
473c6e468e
Fix wmlindent quote detection (#6764)
* wmlindent: Fix parsing quotes in comments

* Remove unnecessary wmlindent ignores

* Run wmlindent
2022-06-18 09:37:55 +02:00
mattsc
1769b6cf01 Protect Unit MAI: fix typo in MAI removal code 2022-06-11 06:18:51 -07:00
Celtic Minstrel
d886ddf61c Lua: Fix a leaky global function 2022-06-10 23:31:40 -04:00
mattsc
fe0b375fca ExpAI castle switch CA: fix error when stored leader has been killed
The castle switch CA stores the leader move because the evaluation is expensive.  If the leader was killed in between storing and reevaluation of the CA, this would previously cause an on-screen error message and the CA to be blacklisted for the turn.

This fixes #6440.
2022-06-09 07:51:33 -07:00
mattsc
84531b834e Bottleneck Micro AI: fix bug involving units without moves
An integral part of this MAI is that it moves weaker units out of the way for stronger ones.  Units without moves are taken into account by giving them a very high rating.  This was previously only done on what's considered the AI's territory (the AI side of the bottleneck) which works fine most of the time since the AI does not try to move onto enemy territory.  However, it breaks down on more open maps, where there are way for units to move around the bottleneck, as AI territory is not always well defined on them.  However, there is no need to restrict this to AI territory only.

This fixes #6599.
2022-06-09 06:29:14 -07:00
mattsc
768b930fc4 ai_helper: fix visibility bug in get_attackable_enemies()
The passed filter needs to be enclosed in an [and] tag, otherwise the check for visibility might not work correctly, for example if the filter contains a top level [or] tag.
2022-06-04 09:13:53 -07:00
Pentarctagon
9bfd432abe Update image pages for webp extension. 2022-04-30 14:23:32 -05:00
Celtic Minstrel
759b040069 fix whitespace
The whitespace-fixing script seems to be slightly different depending on the platform.
Even though it produces no effect in the CI, it made these changes locally on my Mac.
I'm committing them now so as to avoid unrelated files being changed in other pull requests.
2022-02-06 00:05:09 -05:00
mattsc
7746f75f11 Wolves multipack MAI: prevent potential for infinite loop
The MAI was set up to be blacklisted if no attacks were found, but that did not always work. In addition, removing attacks from the wolves also means that no other CA can use them for other attacks instead.
2021-12-28 18:31:19 +01:00
Pentarctagon
370d03ccb7 Fix luacheck warnings and add to CI.
Note the `exclude_files` in .luacheckrc should be deleted once the eventual Ubuntu 22.04 base image has an updated luacheck that supports lua 5.4.
2021-11-28 14:26:02 -06:00
Pentarctagon
254716e41e Expand lua whitespace check. 2021-11-28 14:26:02 -06:00
Celtic Minstrel
ce9bea0537 AI: Add an example of using [micro_ai] in [side][ai] 2021-09-04 22:20:28 -04:00
Celtic Minstrel
2d95c0f7d3 AI: Convert the FormulaAI example scenario to do all the same things using Lua
- Unit formulas are replaced by inline MicroAIs or candidate actions placed in the unit's [ai] tag.
  - The stationed_guardian MicroAI was chosen as the closest match to the guardian FormulaAI. It's not a perfect fit, but it's pretty close.
  - The goto and patrol MicroAIs are fairly obvious substitutes for the respective unit formulas.
  - The priority test in unit formulas is replaced by fairly basic inline non-external CAs with differing scores.
- The side formulas (opening.fai) have been converted to a separate Lua stage using a new opening.lua. However, that's only a partial conversion. The move and attack functionalities of opening.fai are missing from opening.lua; instead the built-in move, move leader to keep, and combat CAs are used.
- The scouting FormulaAI CA has been ported to Lua. It remains a very basic AI, probably not well-suited to genera use.
- The level up attack FormulaAI CA has been ported to Lua. Like the new scouting CA, this is mostly intended to serve as an example.
2021-09-04 22:20:28 -04:00
Celtic Minstrel
5d70dd9aca Lua: Add a new ai_helper debug function to print a simulate_combat HP distribution more succinctly 2021-09-04 22:20:28 -04:00
Celtic Minstrel
9fdaea5893 AI: Fix error in stationed_guardian 2021-09-04 22:20:28 -04:00
mattsc
b73078884c Messenger MAI: fix bug of own units blocking waypoint
ignore_own_units=true was accidentally dropped when adding [avoid] tag functionality to the Micro AI in a60736b6c7
2021-09-01 08:49:54 -07:00
Celtic Minstrel
632941b03d Lua AI: Fix a typo 2021-07-30 19:22:57 -04:00
Celtic Minstrel
4ec60b99d9 Lua: Update all mainline references to the helper module 2021-07-07 01:32:05 -04:00
Celtic Minstrel
9c2689ac9e Lua AI: Move the deprecation messages to Lua so that the deprecated functions get nulled out with --strict-lua 2021-07-02 14:04:53 -04:00
Celtic Minstrel
91f6bf93a4 Fix a broken deprecation and replace some deprecated uses
Fixes #5877
2021-06-20 00:59:59 -04:00
Celtic Minstrel
7f162cbd24 Lua: Rename find_vacant_tile to find_vacant_hex for naming consistency 2021-06-19 17:09:31 -04:00
Celtic Minstrel
1f62eae3ce Replace uses of wesnoth.find_path 2021-06-19 15:43:33 -04:00
Celtic Minstrel
5a1e38e99b
Add wesnoth.sync module for the synchronization-related commands (#5862) 2021-06-19 15:39:10 -04:00
Celtic Minstrel
f145dc2bba Replace uses of the moved interface functions 2021-06-19 12:09:46 -05:00
Celtic Minstrel
a03d59d7eb Lua: Add a new schedule module
The primary components of this are:
- wesnoth.current.schedule
- wesnoth.map.get_time_area()
- wesnoth.schedule module
2021-06-19 11:07:53 -04:00
Celtic Minstrel
0c42cdc038
Enable translation mark validation by the schema (#5800)
- The t_string type is now a schema built-in type and no longer attempts a regex match.
- You can also specify that non-t_string types may be optionally-translatable; this case supports a regex match on the string (but note that the translation mark is not part of the match).
- Error messages involving keys with very large values ( > 128 characters) will now truncate the value.
- To account for occasional cases where the schema is intentionally violated, the --validate command-line option now automatically defines the SCHEMA_VALIDATION preprocessor define.

A key validates as type t_string if one of the following is true:
- The key is not present
- The key has at least one segment with a translation mark
- The key is blank (an empty string)

Any type other than t_string is not allowed to be translatable by default, unless you specify allow_translatable=yes in the [type] tag.

An optionally-translatable string could also be defined as a union of t_string and some other type.
2021-06-14 23:59:52 -04:00