267 Commits

Author SHA1 Message Date
AlexOn1ine
33607529cd conflicts 2025-05-16 10:46:32 +02:00
Hedara
49906a81f7 Merge commit 'c39ef1a03002a7af94' into pret-merge
Conflicts:
	src/battle_ai_switch_items.c
	src/battle_controller_link_opponent.c
	src/battle_controller_link_partner.c
	src/battle_controller_opponent.c
	src/battle_controller_player.c
	src/battle_controller_player_partner.c
	src/battle_controller_recorded_opponent.c
	src/battle_controller_recorded_player.c
	src/battle_controller_safari.c
	src/battle_controller_wally.c
	src/battle_controllers.c
	src/battle_main.c
	src/battle_script_commands.c
	src/battle_util.c
	src/battle_util2.c
	src/pokemon.c
2025-05-15 17:31:50 +02:00
Bassoonian
e42890e954
Consolidates a bunch of battle controller functions (#6838) 2025-05-15 11:26:18 +02:00
AlexOn1ine
4959187d97 fix conflicts 2025-05-09 21:47:53 +02:00
Eduardo Quezada
392d662c12
Rename GetPartyBattlerData to GetBattlerMon (#6800) 2025-05-09 15:14:09 +02:00
Eduardo Quezada
1f23fe0dd3
Use GetPartyBattlerData where appropiate (#6779) 2025-05-06 17:13:50 +02:00
DavidJCobb
0f17e70371 Shorter names for engine/controller communication enum members 2025-05-02 00:01:15 -04:00
AlexOn1ine
9a14bb2dd3 removed aiFlags prefix 2025-05-01 20:22:11 +02:00
AlexOn1ine
182d42642d Move out ai struct out of BattleResources 2025-05-01 11:27:48 +02:00
Alex
55f9f6adea
Refactor battler flee and watch options + clean up (#6724) 2025-04-30 11:54:42 -04:00
DavidJCobb
b4ee45f3e8 Renamed BATTLELINKMSGTYPE_ to BATTLELINKCOMMTYPE_
I want to avoid the word "message" since PRET has already chosen "battle message" as the term for predefined strings usable in the battle scripts and UI.

I was considering the term "battle link packet" instead, but the library for wireless communications already uses the word "packet" even though GBATEK does not. I'm going with "battle link communication type" instead. For this particular context, I don't think we need a compound noun ("X type"); the singular noun "type" is fine enough.
2025-04-26 11:37:20 -04:00
DavidJCobb
d8721b668e Fixed find-and-replace mistake
Functions were using the wrong constant.
2025-04-26 10:54:22 -04:00
DavidJCobb
9dc48899d3 BUFFER_A/B -> BATTLELINKMSGTYPE; link send/recv. task data names
Replaced the BUFFER_A and BUFFER_B constants with the BATTLELINKMSGTYPE enum, which also identifies the "controller becoming idle" message type.

Named the task data for the link send task and the link receive task. Added macros to functions related to those tasks, for legibility.
2025-04-26 00:13:42 -04:00
hedara90
4e01ce6993
Moved some AI stuff out of the battlestruct (#6405)
Co-authored-by: Hedara <hedara90@gmail.com>
2025-03-11 21:23:02 +01:00
Hedara
06d31bc8ea Merge branch 'master' into final-1.10-master-upcoming-merge 2025-02-26 22:07:10 +01:00
hedara90
cf43787d72
Added MOVE_TARGET_OPPONENT and added it to Me First, (#6336)
Co-authored-by: Hedara <hedara90@gmail.com>
2025-02-25 22:28:22 +01:00
Pawkkie
4359cbb77c
SwitchType enum to clean up GetMostSuitableMonToSwitchInto (#6184) 2025-02-05 16:49:53 +01:00
Salem
01e8d8233e
Trainer Battle Parameter Consolidation (#5982) 2025-01-25 22:02:39 +01:00
psf
b109aa0c92
Cleaned up Trainer Slides, added automated Trainer Slide tests, add new Enemy Critical Hit Slide (#6018) 2025-01-23 16:28:33 +01:00
hedara90
7c6c9120ea
Ewram and unused function cleanup sweep (#6019)
Co-authored-by: Hedara <hedara90@gmail.com>
2025-01-15 14:07:12 +01:00
Eduardo Quezada
9669a0554d
Encapsulate move data (#5852) 2025-01-01 20:34:33 +01:00
Eduardo Quezada
82252251e7 Merge branch '_pret/master' into _RHH/pr/master/pretMerge20241220 2024-12-20 16:04:33 -03:00
Eduardo Quezada
5483e05db6 Fixed brace style inconsistencies 2024-12-05 12:46:50 -03:00
Alex
70ca5060f9
Fixes wrong Id when AI chooses mon to switch in (#5684) 2024-11-18 17:18:26 -05:00
GhoulMage
5df6f0b753
AI_FLAG_ACE_POKEMON takes into account separate trainers (#5608) 2024-10-29 15:18:29 -04:00
GhoulMage
6819dd3c37
New AI flag for marking the two last Pokémon as Ace Pokémon. (#5587) 2024-10-27 11:32:45 -04:00
Eduardo Quezada
358c0d0699
Added back GBA sprites via config (#5206)
* Add back older sprites

* Graphics config

* Added GBA most graphical data to gSpeciesInfo

* Footprints are now affected by P_GBA_SPECIES_GFX + removed duplicated files

* GBA mon icons

* Split GBA footprints into separate config

* Separated GBA icons into their own config

* Fixed GBA icons depending on P_GBA_SPECIES_GFX instead of P_GBA_ICONS

* Moved GBA sprites to regular folder with prefix

* Renamed configs

* Temporarely disabled shadows when GBA sprites are enabled

* Removed remaining files from pokemon_old folder
2024-10-18 13:37:00 +02:00
Pawkkie
9882e0aea6
Refactor ShouldSwitchIfAllBadMoves (#5452)
* Refactor ShouldSwitchIfAllBadMoves

* Rest of bugfix

* Enable Shed Tail test

* Revert "Enable Shed Tail test"

This reverts commit e0b9a3affcf3c465c8743741e5ca61bde6c8cb18.

* Better names for i, j

* Fix MAX_MON_MOVES that should be MAX_BATTLERS_COUNT

* battlerIndex  / moveIndex  fix

* Update src/battle_controller_player_partner.c

---------

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2024-10-16 11:22:48 -04:00
ghoulslash
feeccb9198
Simplify BS_FAINTED_MULTIPLE_1 double battle logic in openpartyscreen (#5435)
* simplify BS_FAINTED_MULTIPLE_1 doubles logic

* simplify openpartyscreen BS_FAINTED_MULTIPLE_2 checks, too

* Update src/battle_script_commands.c

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>

* Update src/battle_script_commands.c

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>

* Update src/battle_script_commands.c

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>

* more readable OpponentHandleChoosePokemon

* Update src/battle_controller_opponent.c

* Update src/battle_controller_opponent.c

---------

Co-authored-by: ghoulslash <pokevoyager0@gmail.com>
Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2024-10-09 09:38:21 +02:00
Rachel
b478881fc6
Add in-battle shadows underneath all enemy battlers (#5178)
* Add data to SpeciesInfo entries for in-battle shadows

* Implement sized shadows in the sprite visualizer

* Implement sized shadows in game code

* Show shadows for the lead battler for opponents during their battle anim

* Feedback on shadows, round 1

* Revert removal of Goomy and Sliggoo shadows

* Fixed GEN_3 setting

* Code cleanup + remove pre-processor branches

* Fix bugs with gen-3 configuration branch

* Style corrections, final shadow coordinate adjustments

* Adjustments to Garbodor and Araquanid
2024-09-10 21:27:49 +02:00
hedara90
e4c81ba6e0
Removed all instances of gBitTable[x] (#5123)
* Replaced all the gBitTable[X] usages with 1 << X, and cleaned up script output

* Fixed failed merge in online viewer

---------

Co-authored-by: Hedara <hedara90@gmail.com>
2024-08-17 10:28:09 -05:00
psf
d1183f4b8a
Add B_SHOW_TYPES and cleaned up IsDoubleBattle (#5131)
* First attempt at a port

* Slightly broken but working

* Got images working and opponent palettes

* half finished compressed spritesheet approach instead

* fix the palettes (smh)

* fix hflip, and a lot of clean-up

* Add B_SHOW_TYPES

* Got Illusion working

* Add num type enum

* Updated function to get type

* Fixed type icon position and cleaned up functions

* Updated illusions and Tera handling

* Added BATTLE_TYPE_IS_SINGLE and DOUBLE

* Removed IS_BATTLE_TYPE_SINGLE

* Implemented BATTLE_TYPE_IS_DOUBLE across repo

* Removed SIDE macro

* Updated config

* Deprecated battler alive macro

* Reindented file

* Added exceptions for 2v1

* Replaced Fainted check with Null check

* Added functionality for only types of caught mons

* UseDoubleBattleCoords updated

* Added ShouldFlipTypeIcon

* Renamed TryLoadTypeIcon

* Refactored functions

* Refactored functions

* Refactored functions

* Refactored functions

* Renamed SEEN to CAUGHT

* Reset config

* Added useSecondPalette and isOrdinary to gTypesInfo

* Further simplified secondPalette and isOrdinary

* Changed isordinary to isSpecialCase

* Renamed to useSecondTypeIconPalette

* Fixed Stellar type interactions

* fixed spacing

* fixed include/config/battle.h

* fixed

* fixed include/config/general.h

* changed type1 and type2

* Moved IsDoubleBattle to include.battle.h
Removed BATTLE_TYPE_IS_DOUBLE
Removed IS_DOUBLE_BATTLE

* Changed IsBattlerFainted to IsBattlerAlive

* Removed IsBattlerNull

* Moved GetBattlerData to be inline

* Renamed GetMonDefensiveTeraType

* Removed IsIllusionActive

* Fixed identation

* found one last isDoubleBattle hold out

* fixed redundant brackets

* Fixed spacing for B_SHOW_TYPES

* Update src/battle_script_commands.c

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>

* Fixed padding

* Reindent file and refactored GetTypeIconHideMovement

* Update include/data.h

---------

Co-authored-by: RavePossum <ravepossum@proton.me>
Co-authored-by: Frank <fdeblasio1004@gmail.com>
Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2024-08-11 17:55:51 +02:00
AgustinGDLV
9797640dff
Gimmick Refactor (#4449)
* consolidated gimmick checks, triggers, communication, and activation; updated test runner

* fixed improper use of .usableGimmick

* cleaning up battle_dynamax.c, changing function args to u32s

* fixed '#ifdef TESTING' causing errors

* updated z-moves to use gimmick interface, pared down redundancies; no AI/tests

* added support for z-moves in tests, consolidated gimmick fields

* removed ShouldUseMaxMove and .usingMaxMove

* renamed TryChangeZIndicator, updated z move display

* added several z-move tests and fixed various z-move interactions; fixed z-move category calc

* fixed useless battler arg in GetTypeBasedZMove

* added basic test check for bad Z-Move or Mega usage

* reworked test runner gimmick functionality; added support for Ultra Burst + Z-Move to test Light That Burns the Sky

* fixed gimmick test logic; fixed damage category override

* fixed mega rayquaza test fail

* consolidated gimmick indicator logic; added graphics to gGimmicksInfo

* removed TeraData struct

* reimplemented AI logic for Z-Moves; no changes

* updated Z-Move and Ultra Burst trigger gfx

* added testrunner check for multiple gimmick use

* fixed duplicate z-move call in test

* reorganized data/graphics/gimmicks.h

* added signature Z-Move ability tests; implemented Guardian of Alola

* fixed bad test update

* fixed Thousand Arrows not affecting Tera Flying; clean-up

* fixed -ate tests

* fixed tera tests

* fixed tera tests really

* fixed last batch of tests

* fixed -ate mega test again

* code review

* code review pt.2

* tweaked CanTera again

* dynamax flag only required for player
2024-06-22 22:25:40 +02:00
AgustinGDLV
84a9d4ffcf
Terastallization (#4110)
* wrote foundational terastal tests

* implemented baseline test-only Tera functionality; modified GetBattlerType + STAB calculations, misc. changes to some moves

* added tests and func. for Stellar type, more tests for Tera Blast

* more tests for Stellar type, Conversion fixes, Color Change + Conversion2 future proof

* implemented tera blast, expanded stellar type func., fixed tests

* last set of Tera/Tera Blast tests for checklist, protean fix

* implemented in-battle Terastallization, WIP stellar indicator and tera animation

* fixed bad merge

* expanded NUMBER_OF_MON_TYPES, cut down on TYPE_STELLAR hackiness, added Stellar type to summary

* fixed type indicators

* added tera logic to AI

* implemented code review changes, added B_TERA_ORB_NO_COST

* updated AI to calc damage with Tera when applicable; minor rework to AI gimmick handling

* fixed Tera Blast split choice occuring when not Terastallized

* fixed Tera Blast using Last Respects BP calcs

* added tera type to TrainerMon, code review tweaks
2024-04-24 11:17:46 +02:00
Bassoonian
8329d8368d Merge branch 'master' of https://github.com/pret/pokeemerald into pretmergemidapril 2024-04-12 12:16:28 +02:00
LOuroboros
3135a1fc2b
Updated value-setting of gMain.inBattle at OpponentHandleEndLinkBattle 2024-04-05 17:04:46 -03:00
DizzyEggg
650f80d57e
remove some unused data (#4239) 2024-03-04 17:36:23 +01:00
Eduardo Quezada D'Ottone
0522ec0247
Trainer data encapsulation (#4216)
* Moved existing sanitized trainer data functions to include/data.h

* Sanitized encounterMusic_gender

* Sanitized trainer class ID

* Sanitized trainer pic ID

* Sanitized trainer starting status

* Sanitized obtaining Trainer struct

* Sanitized trainer double battle flag

* Sanitized trainer party size

* Sanitized trainer mugshot data

* Sanitized trainer name

* Consolidated Dome Brain trainer data to the rest of the frontier data

* Sanitized trainer items

* Removed accidental test data

* Sanitized trainer party

* Sanitized trainer AI flags

* Final encapsulation bit
2024-02-22 14:22:57 +01:00
Nopinou
de0f94406a
Add shouldDynamax & shouldTerastal bits to TrainerMon (#4169) 2024-02-11 21:36:35 +01:00
Frank DeBlasio
7f50c0b9c3
Simplify gTrainerSprites (#4140)
* Simplified y_offset equations

* Removed trainer pic animation from gTrainerSprites

* Used metaprogram to simplify trainer sprites without mugshots

* Incorporated comments

---------

Co-authored-by: Alex <93446519+AlexOn1ine@users.noreply.github.com>
2024-02-06 22:24:36 +01:00
LOuroboros
a64e1c63c1
Move data unification (#3999)
* Made gBattleMoves handle the InGame name and description of battle moves
No more multiple arrays in separate, individual files.

Note:
-Keep an eye on Task_LearnedMove.

* Reintroduced move names

Misc:
-Fixed Trick-or-Treat and Light of Ruin's expanded names.
-Introduced a new field for Z-Move names, and a constant for their name length.
-Added a few TODOs to GetBattleMoveName.
-Updated GetMaxMoveName and GetZMoveName. There's no reason not to let GetBattleMoveName handle everything on its own.

* Updated GetBattleMoveName to handle Z-Move Names

Misc:
-Removed pointless TODO about MOVE_NAME_LENGTH.
 -The compiler doesn't allow to have a move name with a value higher than MOVE_NAME_LENGTH, therefore it's pointless to worry about it.

* Fixed a couple of expanded move names

* Removed zMoveName variable of struct BattleMove and extended the name variable's size

* Ditched no longer used MOVE_NAME_LENGTH constant

* Corrected the names of the max moves
I should have done this after updating the size of the name variable of the struct BattleMove, but I didn't think about it at all until Cancer Fairy indirectly gave me the idea.

* Fixed U-turn's name

* Brought back MOVE_NAME_LENGTH
I think it doesn't make sense to have a Z_MOVE_NAME_LENGTH because the length in question is used for all battle moves, not just the Z-Moves.

* Introduced a union for Move/Z-Move names in the struct BattleMove

* Fixed the union for gBattleMoves move names
Also updated GetBattleMoveName to properly handle Max Move names.
Also also renamed the "zMoveName" variable to "bigMoveName" which better reflects its purpose. Z-Move names weren't the only thing it covered, since it also handles Max Move names.

* Removed deprecated GetZMoveName and GetMaxMoveName

* Reintroduced mention to gMoveNames in sGFRomHeader

* Fixed move names and ported move descriptions

* Fused the struct ContestMove into the struct BattleMove

* Removed no longer used Z_MOVE_NAME_LENGTH constant

* Renamed the struct BattleMove's bigMoveName variable and introduced macros to prettify move names

* Reintroduced the contest parameters for Pokémon moves

* Renamed gBattleMoves to gMovesInfo
This is consistent with gSpeciesInfo, the array that contains most of the species data.

* Renamed the BattleMove struct to MovesInfo
This is consistent with the struct SpeciesInfo, which contains the variables used by the gSpeciesInfo array.

* Removed empty lines separating battle params from contest params in gMovesInfo

* Renamed MovesInfo to MoveInfo

* Added Cancer Fairy's HANDLE_EXPANDED_MOVE_NAME macro
Used to handle moves with expanded names in a more comfortable manner.
Also fixed Trick-or-Treat's expanded name.

* Renamed GetBattleMoveName to GetMoveName

* Added a comment pointing out that the shared move descriptions are shared move descriptions

* Re-aligned one of the escape characters of CHECK_MOVE_FLAG

* Renamed the battle_moves.h file to moves_info.h instead for consistency's sake

* Applied Eduardo's adjustments

* Using compound string for regular move names as well, saving 1180 bytes and making their use consistent
* Move description formatting

* Updated Pursuit test after merge

* Renamed the BATTLE_CATEGORY constants to DAMAGE_CATEGORY

---------

Co-authored-by: Nephrite <thechurchofcage@gmail.com>
Co-authored-by: Bassoonian <iasperbassoonian@gmail.com>
Co-authored-by: Eduardo Quezada D'Ottone <eduardo602002@gmail.com>
2024-01-29 08:51:32 -03:00
ghoulslash
a9d6832908
Separate AI flags by battler position (#3003)
* ai flags by battlerId

* fix recoded battle saved ai flags

* update aiFlags check in OpponentHandleChoosePokemon

* add header for TRAINER_CUSTOM_PARTNER define

* initialize flags in BattleAI_SetupAIData

* fix usage of TRAINER_CUSTOM_PARTNER

* remove whitespace

---------

Co-authored-by: ghoulslash <pokevoyager0@gmail.com>
2023-12-27 13:54:37 +01:00
Frank DeBlasio
5cdee87489
Refactor Trainer sprites (#3597)
* Added TrainerSprite struct with coordinates

* Added .frontPic to struct

* Added .palette to TrainerSprite struct

* Added .animation to the struct

* Added define for sprite size

* Condensed animations since they were all the same

* Improved TRAINER_SPRITE/PAL defines

* Simplified seemingly unused .y_offset and TRAINER_PIC_SIZE values

* Condensed TRAINER_SPRITE and TRAINER_PAL into TRAINER_PIC

* Renamed .size to .y_offset since that what it appears to actually be

* Moved y_offset into TRAINER_PIC

* Moved animation inside of TRAINER_PIC

* Added array number to preproc

* Removed trailing spaces

* Added sprite/palette files to preproc

* Revert adding sprites to preproc as it fails agbcc

This reverts commit dce57f8d1bfab70b4c6630a9c4e5b43495891459.

* Added backsprite struct

* Added animations to backsprite struct

* Changed TRAINER_PIC to TRAINER_SPRITE

* Added animation to backsprite preproc

* Added .backPic to struct

* Moved array number into backsprite preproc

* Removed definitions for trainer sprites

* Hardcoded sAnims_Trainer into struct since every sprite uses it

* Fixed TRAINER_SPRITE arguments
2023-12-20 23:14:33 +01:00
Bassoonian
e5ac2fe0b1 Clean up pokemon/ball/dex mentions in comments 2023-12-12 19:02:36 +01:00
Pawkkie
b93dfb9d59
Smarter SwitchAI Mon Choices | HasBadOdds Switch Check (#3253)
* SwitchAI makes much smarter mon choices

* Add HasHadOdds check to ShouldSwitch decision

* Remove early return

* Rework Baton Pass check as per discussion with Alex

* Forgot to adjust a comment

* Don't program before breakfast lol (if / else if fix)

* Switch AI_CalcDamage for AI_DATA->simulatedDmg in HasBadOdds

Thanks Alex! :D

* Typo in a hitToKO comparison

* Remove and replace AI_CalcPartyMonBestMoveDamage and IsAiPartyMonOHKOBy from https://github.com/rh-hideout/pokeemerald-expansion/pull/3146

See https://discord.com/channels/419213663107416084/1144447521960251472 for details

* Major refactor, new struct, switchin considers damage / healing from hazards / status / held item / weather

* Forgot Snow exists and heals Ice Body, haven't played Switch games lol

* (766a1a27a7) Compatibility, use new struct field instead of function call

* Fixing oversight from previous upstream merge

* Improve TSpikes handling to make GetSwitchinHazardDamage more applicable

Small fixes:
- EFFECT_EXPLOSION typo (!= to ==)
- Order of if statements near bestResistEffective
- Spacing of terms in big HasBadOdds if statements

* Forgot to uncomment blocks disabled for debugging what turned out to be vanilla behaviour lol

* Remove another holdover from debugging, sorry :/

* Lastly, undoing my debug trainer

* Type matchup based on species type rather than current type

Suggested by BLourenco on Discord, the idea is that a mon that's had its type affected by a move like Soak will still have moves as though it was its regular typing, and so prioritizing the temporary typing wouldn't be ideal.
https://discord.com/channels/419213663107416084/1144447521960251472/1146644578141736970

* gActiveBattler upcoming merge fixes

* Egg changes part 1

* Egg changes part 2, just need to address EWRAM still

* Move SwitchinCandidate struct to AiLogicData

* Consider Steel type when checking TSpikes

* Comment about CanBePoisoned compatibility

* Changes for Egg's 2nd review

* Put period back in comment, whoops lol

* Latest upcoming merge fixes

* Missed a few u32 updates

* Combine GetBestMonIntegrate functions / flags, some modularization

* Fix merge error

* Make modern fixes

* Two tests done, two to go

* Accidentally pushed reference test, removing it

* Type matchup switching tests

* Tests for defensive vs offense switches

---------

Co-authored-by: DizzyEggg <jajkodizzy@wp.pl>
2023-11-11 14:37:35 +01:00
kittenchilly
9d2be9f3a6
Remove all trailing whitespace (upcoming) (#3473) 2023-10-27 13:54:55 -03:00
Eduardo Quezada
c0540a3559 Merge branch 'RHH/upcoming' into RHH/pr/upcoming/dynamax
# Conflicts:
#	include/battle.h
#	include/constants/battle_move_effects.h
#	include/constants/battle_string_ids.h
#	src/battle_main.c
#	src/battle_message.c
#	src/battle_script_commands.c
#	src/battle_util.c
2023-10-15 00:30:00 -03:00
Eduardo Quezada
92301398bc Merge branch 'RHH/upcoming' into RHH/pr/upcoming/dynamax
# Conflicts:
#	asm/macros/battle_script.inc
#	data/battle_anim_scripts.s
#	data/battle_scripts_1.s
#	include/battle.h
#	include/battle_controllers.h
#	include/battle_interface.h
#	include/config/battle.h
#	include/constants/battle.h
#	include/constants/battle_anim.h
#	include/constants/battle_move_effects.h
#	include/constants/battle_string_ids.h
#	include/data.h
#	include/random.h
#	sound/cry_tables.inc
#	src/battle_anim_new.c
#	src/battle_controller_opponent.c
#	src/battle_controller_player.c
#	src/battle_controller_player_partner.c
#	src/battle_interface.c
#	src/battle_main.c
#	src/battle_message.c
#	src/battle_script_commands.c
#	src/battle_util.c
#	src/data/pokemon/form_change_table_pointers.h
#	src/data/pokemon/species_info.h
#	src/data/text/move_names.h
#	test/test_runner_battle.c
2023-10-09 16:51:41 -03:00
Eduardo Quezada
d1c672d3ce Converted most battle preproc ifs to regular ifs 2023-10-08 21:32:15 -03:00
DizzyEggg
be5683e899
AI battle tests + AI logic fixes (#3361) 2023-10-04 18:53:29 +01:00