The topic is a bit confusing due to the order of processing (priority) so keep in mind the first met condition sets the command:
Hail - Retreat
(-> AI Allies)
Retreat - Hail - Retreat
(-> Fleet)
Ram - Retreat - Random Commands
(-> Ship/Group)
1.) Entire-Fleet Commands
AI allies (affiliation/alliance) are forced to join
Hail or
Retreat of players when on the same side of the battle (kinda random when both opponents are allies of a third party). Player ram commands confuse the AI (cf. jihad ram/retreat) so setting all ships to ram (be it just to get closer to the enemy) forces AI allies to Hail.
(477FD5 cmp edx, 9 // player ally Ram check for AI join Hail/Retreat -> 0x773D7 = FF fixes AI confusion).
Following three main parameters suffer from debatable reliability and validity: (default range 0-4)
-
Pugnacity: how mad the AI is at someone (vs players) = Hostility(0-4 neutral-enraged) + War Type(0-3 peace/cold war/war/jihad) max 4 (jihad = 5)
-
Importance: of the fleet task (cf. first post) highest value of e.g. raid/harras 0 (1 own sector), own station 3, invade/attack 3 (4 arrived)
-
Prognosis: 0 defeat no enemy losses, 1 defeat, 2 equal, 3 win, 4 win no losses -> Distance/Position & Model Radius (hit probability) ignored
-> 'Auto' button in tactical combat (fleets screen) sets Pugnacity & Importance 4 for players
At 5907B4 (0x18E5B4 +14h*raceID) is five modifier per empire + race index five shared for all minors: (1, 3 & 4 unused - defaults 0-100)
2nd -
Bravery : increases chance of uphill battles instead of Retreat (defaults card-rom 60 55 40 85 50 minors 50)
5th -
Peaceableness : increases chance to use Hail (defaults card-rom 50 85 75 25 75 minors 50)
Prognosis 0
Retreat
A reasonable main condition for fleet retreat if there is no possibility to destroy the weakest enemy ship. To prevent this just bring some weak scouts (best set to evade). One could argue to merge retreat with an improved hail check to spare AI the morale losses from evitable retreats.
Hail is restricted to no war & sympathy 2+ (out of range 0-8)
Counterside Hail &
Importance 0-3 &
Prognosis 0-1
Hail
else for
Prognosis 2-4 if random 0-99 lower than (
Peaceableness [+30 if
Prognosis 2] -
Pugnacity*5)
Hail
Counterside doesn't Hail or
Importance 4 works only for the first turn with
Pugnacity 0-4 (no jihad)
If random 0-99 lower than (
Peaceableness -
Pugnacity*5)
Hail
Importance 0 & (own losses expected or
Pugnacity 0)
Retreat
2.) Ship / Combat-Group Commands:
0 - fast attack
1 - long range / artillery
2 - command / slow / cruiser
3 - support / non-combat
4 - monster
All ships not expected to survive shootouts vs 3 random enemy ships &
Pugnacity 5 (jihad)
Ram
If NO 'leader' of the
groups 0-2 is expected to survive 3 shootouts &
Bravery + 10x (
Pugnacity +
Importance) lower than 100
Retreat (+ group 3)
-> 'leader' = mouseover group first ship bottom left
Armed
group 3 ships expected to survive 3 shootouts which 'could' kill an enemy
Assault else
Evade
The above Ram and Assault orders specify no target (wildcard -1) i.e. targeting like using Hold or Evade or remaining shots after kills.
Same with AI stations and first-turn random commands for players (until changed they can cause crashes when a target is reqired e.g. vs Edo God).
Target Selection
All remaining ships of combat-groups 0-2 'should' target the same enemy ship/station:
- get primary enemy fleet by highest
Pugnacity
- if combat simulation indicates the AI 'could' destroy objects of this enemy next turn -> most expensive of them
- else if this enemy has un-cloaked objects with shields down -> lowest hull points
- else if this enemy has un-cloaked objects which died in combat simulation -> quickest kill in turns
- else repeat for secondary enemy fleet
- else i.e. all enemies destroyed in combat simulation cloaked
Hold (weapons free)
The code iterates for each ship, but for groups 0-2 only for 'leaders' (unless it's a mixed group of cloaked and uncloaked ships, then it runs twice) i.e. there can be random deviations of targets and commands between combat-simulation iterations. The last ship processed or the 'leader' sets the group command, but all targets and command deviations are set in solo-mode (hard to notice if equal).
Combat Group 0-2 Commands vs enemy Outposts & Starbases:
Code: Select all
0047874B mov eax, edx(is 5) ; Strafe for group 0 // example to change this 0x77B4B (89 D0) -> B0 01 (Charge)
00478741 mov eax, 2 ; Assault for group 1
00478737 mov eax, 1 ; Charge for group 2
Command Probabilities for Combat Groups 0-2 vs enemy Combat Groups 0-4
At 5905D4 (0x18E3D4 + [own group ID x 160] + [enemy group ID x 32]) is four command entries each:
- 8 bytes per entry -> Command ID / Relative Frequency (0 = unused)
- 4th random command (default always evade) is not used if the own ship is cloaked
- own/enemy combat-group 'fast vs fast' reads:
Harry 50 / Charge 30 / Strafe 15 / Evade 5
- by default sum of 1-4 is 100 i.e. Relative Frequency = Command Probability in % (unless cloaked); all frequencies 0
Evade
- commands vs Monster group 4 are not used but instead enemy slow group 2 (Combat Drone & Husnock = enemy fast group 0)
3.) Patches to improve the code of random commands for groups 0-2 and fix miscellaneous bugs:
Code: Select all
NAME: Improving AI Combat Commands for Warships vs enemy Ships (UPDATED)
DESC: Fixes broken AI Battle Modifier for special Frontal Assault(1), Ram Escalation(3), Escort Evade(4) & other minor glitches.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
# Ram Escalation Overkill skip Retreat Options
>> 0x76ED6 85 D2 0F 85 E0 01 00 00 85 FF 0F 8E C9 01 00 00 85 DB 0F 85 B2 01 00 00 BB FF FF FF FF 8B 84 24 34 01 00 00 89 15 70 58 5B 00 BA 0A 00 00 00
<< 0x76ED6 33 C0 85 D2 74 09 40 85 FF 74 08 B0 02 EB 0F 85 FF 75 01 40 85 ED 75 01 40 85 DB 74 01 40 A3 70 58 5B 00 85 C0 75 0D E9 9E 01 00 00 6A FF 5B
>> 0x770A0 C7 05 70 58 5B 00 01 00 00 00 E9 5B FE FF FF C7 05 70 58 5B 00 02 00 00 00 E9 4C FE FF FF 85 FF 7E 0F C7 05 70 58 5B 00 02 00 00 00 E9 39 FE FF FF 85 ED 7E 0F C7 05 70 58 5B 00 03 00 00 00 E9 26 FE FF FF C7 05 70 58 5B 00 04 00 00 00 E9 17 FE FF FF
<< 0x770A0 8B 84 24 34 01 00 00 33 D2 B2 0A 83 3D 84 78 59 00 00 0F 84 4A FE FF FF 8B 0D 60 58 5B 00 83 79 08 65 0F 8C 3A FE FF FF 0F 84 3C FE FF FF B2 09 E9 2D FE FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
# disable player Ram check for AI ally join Hail/Retreat FIX
>> 0x773D7 09
<< 0x773D7 FF
>> 0x779E0 BA 01 00 00 00
<< 0x779E0 B2 01 8B EB 90
>> 0x77AB5 00 00 00 00 00 00 00 00 00 00 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00
<< 0x77AB5 A1 64 58 5B 00 02 05 6C 58 5B 00 B2 0A F7 EA 2C 64 F6 D8 8A F8 A1 60 58 5B 00 38 38 7C 36 90 84 DB 74 26 B2 02 EB 22
>> 0x77AE2 89 D1 89 DD
<< 0x77AE2 8B F9 8B CA
>> 0x77AF4 5D
<< 0x77AF4 C0
>> 0x77AFE BE 30 BA 57 00 BF C8 B9 57 00 B9 13 03 00 00 89 F3 89 CA 89 F8 E8 98 FA 08 00 85 C0 75 F1 B8 07 00 00 00 5D 5F 5E 59 C3
<< 0x77AFE 02 15 70 58 5B 00 80 FA 04 7D 2E 83 C5 18 B8 DC 01 00 00 03 C8 03 F8 80 39 24 7C 38 B2 00 80 39 2B 7D 3E B2 02 EB 3A 90
>> 0x77B3C 5D 5F 5E 59 C3
<< 0x77B3C 83 FE 01 75 05
>> 0x77B52 83 B9 78 01 00 00 07 74 6D 83 B9 78 01 00 00 01 0F 85 87 00 00 00 8B 91 9C 01 00 00 8D 04 D5 00 00 00 00 29 D0 C1 E0 02 01 D0 8B 15 60 78 59 00 8B 44 82 3C C1 E0 05 83 FE 01 0F 83 7E 00 00 00 85 F6 75 07 BF D4 05 59 00 01 C7 B8 03 00 00 00 31 C9 85 ED 0F 85 80 00 00 00 8D 14 C5 00 00 00 00 01 FA
<< 0x77B52 6B 41 C0 74 03 05 60 78 59 00 8A 50 3C 84 DB 75 32 8D 81 60 01 00 00 80 39 24 7C 03 83 E8 54 8B 00 3B 87 5C 01 00 00 7C 6F 80 3D 70 58 5B 00 02 7D 50 A1 60 58 5B 00 38 78 08 7C 46 80 39 24 7C 59 EB 33 B1 05 D3 E2 8B C6 C1 E0 02 03 C6 D3 E0 8D BC 10 D4 05 59 00 B8 03 00 00 00 2A C3 33 C9 8D 14 C7
>> 0x77BC8 66 8B 81 DC 01 00 00 83 E8 24 66 3D 06 00 77 13 25 FF FF 00 00 FF 24 85 C0 86 47 00 B8 02 00 00 00 EB 9B 31 C0 EB 97 BB 34 BA 57 00 BA 25 03 00 00 B8 C8 B9 57 00 E8 AD F9 08 00 85 C0 0F 85 50 FF FF FF E9 58 FF FF FF 77 07 BF 74 06 59 00 EB 82 83 FE 02 0F 85 7B FF FF FF BF 14 07 59 00 E9 6F FF FF FF B8 02 00 00 00 E9 76
<< 0x77BC8 3B F2 7C 08 6A 09 58 5D 5F 5E 59 C3 85 F6 75 BD F6 45 74 01 74 4A A1 60 58 5B 00 38 78 0C 7D AD EB 79 EB 16 8B 81 5C 01 00 00 3B 87 60 01 00 00 7F DA F6 45 74 01 74 D4 EB CA A1 60 58 5B 00 38 78 08 7C 11 80 3D 70 58 5B 00 02 7C B7 74 E3 3B F2 7F DF EB B7 80 3D 70 58 5B 00 02 7C D4 EB AC 80 3D 70 58 5B 00 00 74 AD E9 5F
ASM-Notes:
► Show Spoiler
00477AD6 33C0 XOR EAX,EAX // prepare Prognosis
00477AD8 85D2 TEST EDX,EDX // own ships survived
00477ADA 74 09 JE SHORT 477AE5
00477ADC 40 INC EAX // +1 if survivor
00477ADD 85FF TEST EDI,EDI // enemy ships survived
00477ADF 74 08 JE SHORT 477AE9
00477AE1 B0 02 MOV AL,2 // set Prognosis 2 if both survive
00477AE3 EB 0F JMP SHORT 477AF4
00477AE5 85FF TEST EDI,EDI // enemy ships survived
00477AE7 75 01 JNZ SHORT 477AEA
00477AE9 40 INC EAX // +1 if no enemy ships survive
00477AEA 85ED TEST EBP,EBP // own losses shipcost
00477AEC 75 01 JNZ SHORT 477AEF
00477AEE 40 INC EAX // +1 if no losses
00477AEF 85DB TEST EBX,EBX // enemy losses shipcost
00477AF1 74 01 JE SHORT 477AF4
00477AF3 40 INC EAX // +1 if enemy losses
00477AF4 A3 70585B00 MOV [5B5870],EAX // save Prognosis
00477AF9 85C0 TEST EAX,EAX // if Prognosis 0...
00477AFB 75 0D JNZ SHORT 477B0A
00477AFD E9 9E010000 JMP 477CA0 // ...check Retreat or Ram Overkill or Havoc
00477B02 6A FF PUSH -1 // set fleet target = Wildcard -1
00477B04 5B POP EBX
00477CA0 8B8424 34010000 MOV EAX,[ESP+134] // own Fleet ID
00477CA7 33D2 XOR EDX,EDX
00477CA9 B2 0A MOV DL,0A // prepare Fleet Retreat
00477CAB 833D 84785900 00 CMP DWORD[597884],0 // if first turn...
00477CB2 ^0F84 4AFEFFFF JE 477B02 // set Fleet Retreat
00477CB8 8B0D 60585B00 MOV ECX,[5B5860] // get battle modifier
00477CBE 8379 08 65 CMP DWORD [ECX+8],65 // "Ram Escalation"
00477CC2 ^0F8C 3AFEFFFF JL 477B02 // no OverKill -> set Fleet Retreat
00477CC8 ^0F84 3CFEFFFF JE 477B0A // OverKill -> skip Fleet Retreat
00477CCE B2 09 MOV DL,9 // OverKill Havoc -> set Fleet Ram Wildcard
00477CD0 ^E9 2DFEFFFF JMP 477B02 // set fleet order
00477CD5-477CF1 0000... zero bytes // free unused code
00477FD5 83FA FF CMP EDX,-1 // disable player Ram check for AI join Hail/Retreat FIX
004785E0 B2 01 MOV DL,1 // prevent zero switch
004785E2 8BEB MOV EBP,EBX // save own simulation entry in EBP
004785E4 90 NOP
004786B5 A1 64585B00 MOV EAX,[5B5864] // Pugnacity
004786BA 0205 6C585B00 ADD AL,[5B586C] // + Importance
004786C0 B2 0A MOV DL,0A // * 10
004786C2 F7EA IMUL EDX
004786C4 2C 64 SUB AL,64
004786C6 F6D8 NEG AL
004786C8 8AF8 MOV BH,AL // battle threshold for modifier checks
004786CA A1 60585B00 MOV EAX,[5B5860] // race Battle_modifiers
004786CF 3838 CMP [EAX],BH // "Frontal Assault" modifier vs battle threshold
004786D1 7C 36 JL SHORT 478709 // skip special Assault feature if too low
004786D3 90 NOP
004786D4 84DB TEST BL,BL // cloaked check
004786D6 74 26 JE SHORT 4786FE
004786D8 B2 02 MOV DL,2 // if cloaked unlock for Prognosis 2 & 3
004786DA EB 22 JMP SHORT 4786FE
004786E2 8BF9 MOV EDI,ECX // save own 3C8h object entry in EDI
004786E4 8BCA MOV ECX,EDX // save target 3C8h object entry in ECX
004786F3 ^75 C0 JNZ 4786B5 // check "Frontal Assault"
004786FE 0215 70585B00 ADD DL,[5B5870] // Prognosis
00478704 80FA 04 CMP DL,4 // unlock if Prognosis 4
00478707 7D 2E JGE SHORT 478737 // set charge (assault if group 1)
00478709 83C5 18 ADD EBP,18
0047870C B8 DC010000 MOV EAX,1DC
00478711 03C8 ADD ECX,EAX // target entry+1DC
00478713 03F8 ADD EDI,EAX // own entry+1DC
00478715 8039 24 CMP BYTE [ECX],24 // monster check
00478718 7C 38 JL SHORT 478752
0047871A B2 00 MOV DL,0 // monsters 2B+ -> set enemy group fast
0047871C 8039 2B CMP BYTE [ECX],2B
0047871F 7D 3E JGE SHORT 47875F
00478721 B2 02 MOV DL,2 // monsters 24-2A -> set enemy group slow
00478723 EB 3A JMP SHORT 47875F
00478725 90 NOP
0047873C 83FE 01 CMP ESI,1 // long range group check
0047873F 75 05 JNZ 478746
00478752 6B41 C0 74 IMUL EAX,[ECX-40],74 // enemy group data index (from 1DC-40=19C)
00478756 0305 60785900 ADD EAX,[597860] // group_data_74h_list
0047875C 8A50 3C MOV DL,[EAX+3C] // save Enemy Combat Group
0047875F 84DB TEST BL,BL // if cloaked...
00478761 75 32 JNZ SHORT 478795 // ...skip special ram & evade
00478763 8D81 60010000 LEA EAX,[ECX+160] // target nominal hull
00478769 8039 24 CMP BYTE[ECX],24 // monster check
0047876C 7C 03 JL SHORT 478771
0047876E 83E8 54 SUB EAX,54 // monster displacement
00478771 8B00 MOV EAX,[EAX]
00478773 3B87 5C010000 CMP EAX,[EDI+15C] // own current hull
00478779 7C 6F JL SHORT 4787EA // go-go KillRam
0047877B 803D 70585B00 02 CMP BYTE [5B5870],2 // Prognosis
00478782 7D 50 JGE SHORT 4787D4 // check Evade
00478784 A1 60585B00 MOV EAX,[5B5860] // get battle modifier
00478789 3878 08 CMP [EAX+8],BH // "Ram Escalation" Sacrifice
0047878C 7C 46 JL SHORT 4787D4 // check Evade
0047878E 8039 24 CMP BYTE [ECX],24 // Monster check
00478791 7C 59 JL SHORT 4787EC // go SacrificeRam hull check
00478793 EB 33 JMP SHORT 4787C8 // go monster
00478795 B1 05 MOV CL,5 // get adr random frequencies
00478797 D3E2 SHL EDX,CL
00478799 8BC6 MOV EAX,ESI
0047879B C1E0 02 SHL EAX,2
0047879E 03C6 ADD EAX,ESI
004787A0 D3E0 SHL EAX,CL
004787A2 8DBC10 D4055900 LEA EDI,[EAX+EDX+5905D4] // base adr + own group*160 + enemy group*32
004787A9 B8 03000000 MOV EAX,3
004787AE 2AC3 SUB AL,BL // if cloaked skip 4th random
004787B0 33C9 XOR ECX,ECX
004787B2 8D14C7 LEA EDX,[EDI+EAX*8]
004787C8 3BF2 CMP ESI,EDX // Monster lower group check
004787CA 7C 08 JL SHORT 4787D4 // check Evade
004787CC 6A 09 PUSH 9 // set Ram
004787CE 58 POP EAX
004787CF 5D POP EBP
004787D0 5F POP EDI
004787D1 5E POP ESI
004787D2 59 POP ECX
004787D3 C3 RETN
004787D4 85F6 TEST ESI,ESI // Fast group check for Evade
004787D6 ^75 BD JNZ SHORT 478795 // go Random
004787D8 F645 74 01 TEST BYTE [EBP+74],1 // shields check
004787DC 74 4A JE SHORT 478828 // test Prognosis 0 Overkill
004787DE A1 60585B00 MOV EAX,[5B5860] // get battle modifier
004787E3 3878 0C CMP [EAX+C],BH // "Escort Steadiness"
004787E6 ^7D AD JGE SHORT 478795 // go Random
004787E8 EB 79 JMP SHORT 478863 // set Evade
004787EA EB 16 JMP SHORT 478802 // jump-hop to KillRam
004787EC 8B81 5C010000 MOV EAX,[ECX+15C] // target current hull (SacrificeRam)
004787F2 3B87 60010000 CMP EAX,[EDI+160] // own nominal hull
004787F8 ^7F DA JG SHORT 4787D4 // check Evade
004787FA F645 74 01 TEST BYTE[EBP+74],1 // shields test
004787FE ^74 D4 JE SHORT 4787D4 // check Evade
00478800 ^EB CA JMP SHORT 4787CC // set Ram
00478802 A1 60585B00 MOV EAX,[5B5860] // get battle modifier
00478807 3878 08 CMP [EAX+8],BH // "Ram Escalation"
0047880A 7C 11 JL SHORT 47881D // go noRamEscalation
0047880C 803D 70585B00 02 CMP BYTE[5B5870],2 // Prognosis
00478813 ^7C B7 JL SHORT 4787CC // set Ram
00478815 ^74 E3 JE SHORT 4787FA // shields test
00478817 3BF2 CMP ESI,EDX // check groups
00478819 ^7F DF JG SHORT 4787FA // shields test
0047881B ^EB B7 JMP SHORT 4787D4 // check Evade
0047881D 803D 70585B00 02 CMP BYTE[5B5870],2 // Prognosis if no noRamEscalation
00478824 ^7C D4 JL SHORT 4787FA // go shields test
00478826 ^EB AC JMP SHORT 4787D4 // check Evade
00478828 803D 70585B00 00 CMP BYTE PTR[5B5870],0 // Prognosis 0 Overkill check
0047882F ^74 AD JE SHORT 4787DE // check Escort Steadiness
00478831 ^E9 5FFFFFFF JMP 478795 // go Random
Code: Select all
NAME: AI Battle Modifier (1/3/4 require 'Improving AI Combat Commands')
DESC: Changes unlock(1/3/5) resp lock(2/4) thresholds for special Hail(5), Retreat(2), Assault(1), Ram(3) & Evade(4) checks.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
# @ 5907B4 F.-Assault Bravery RamEscal. EscortSt. Peaceabl.
# Assault(+) Retreat(-) Ram(+) Evade(-) Hail(+)
# Cardassians
>> 0x18E5B4 19 00 00 00 3C 00 00 00 50 00 00 00 32 00 00 00 32 00 00 00
<< 0x18E5B4 64 00 00 00 14 00 00 00 64 00 00 00 0A 00 00 00 32 00 00 00
# Federation
>> 0x18E5C8 32 00 00 00 37 00 00 00 4B 00 00 00 32 00 00 00 55 00 00 00
<< 0x18E5C8 64 00 00 00 14 00 00 00 64 00 00 00 0A 00 00 00 55 00 00 00
# Ferengi
>> 0x18E5DC 19 00 00 00 28 00 00 00 14 00 00 00 19 00 00 00 4B 00 00 00
<< 0x18E5DC 64 00 00 00 14 00 00 00 64 00 00 00 0A 00 00 00 4B 00 00 00
# Klingons
>> 0x18E5F0 50 00 00 00 55 00 00 00 19 00 00 00 55 00 00 00 19 00 00 00
<< 0x18E5F0 64 00 00 00 14 00 00 00 64 00 00 00 0A 00 00 00 19 00 00 00
# Romulans
>> 0x18E604 0F 00 00 00 32 00 00 00 4B 00 00 00 32 00 00 00 4B 00 00 00
<< 0x18E604 64 00 00 00 14 00 00 00 64 00 00 00 0A 00 00 00 4B 00 00 00
# Minors
>> 0x18E618 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00
<< 0x18E618 64 00 00 00 14 00 00 00 64 00 00 00 14 00 00 00 32 00 00 00
# card-rom/minors - New Values:
# 100 100 100 100 100 100 -> 'Frontal Assault' when Win Prognosis 4 (no losses expected); cloaked 2-4 -> All always ON
# 20 20 20 20 20 20 -> 'Bravery' skips check for smart Retreat -> All only if battle threshold 80+ (max importance)
# 100 100 100 100 100 100 -> 'Ram Escalation' unlocks more Ram features -> All always ON (adaptive wrt groupLeader vs target data & battle prognosis)
# 10 10 10 10 10 20 -> 'Escort Steadiness' no Evade if groupLeader shields down & no other special code -> All only if battle threshold 90+ (jihad + max importance) minors 80+ (no minor jihad)
# 50 85 75 25 75 50 -> 'Peaceableness'-> e.g. unlocks Hail response if (Peaceableness[+30 P=2-]-5*Pugnacity) reach random 0-99 -> Unchanged vanilla defaults
(card-rom/minors) - New Values: (see elaboration below
)
100 100 100 100 100 100 -> 'Frontal Assault' when Win Prognosis 4 (no losses expected); cloaked 2-4 -> All always ON
20 20 20 20 20 20 -> 'Bravery' skips check for smart Retreat -> All only if battle threshold 80+ (max importance)
100 100 100 100 100 100 -> 'Ram Escalation' unlocks more Ram features -> All always ON (adaptive wrt groupLeader vs target data & battle prognosis)
10 10 10 10 10 20 -> Escort Steadiness' skips Evade if groupLeader shields down -> All only if battle threshold 90+ (jihad + max importance) minors 80+
50 85 75 25 75 50 -> 'Peaceableness'-> e.g. unlocks Hail response if (Peaceableness[+30 P=2-]-5*Pugnacity) reach random 0-99 -> Unchanged vanilla
New smart Ram Escalation, Escort Steadiness OFF (evade if shields down) and also the vanilla Bravery-defaults work better using:
Code: Select all
NAME: Different Solo Commands within AI Combat Groups
DESC: Allows ship specific features/commands instead of group leader only (increases group/formation fragmentation each turn).
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
>> 0x77A31 46 54 89 C8 8B 50 38 3B 51 38 75 15 8A 91 0C 02 00 00 89 99 FC 01 00 00 80 CA 02 88 91 0C 02 00 00 69 91 7C 01 00 00 C8 03 00 00 8B 0D 64 78 59 00 01 D1 39 C1 75 CD
<< 0x77A31 99 FC 01 00 00 80 89 0C 02 00 00 02 8B C1 33 D2 2B 05 64 78 59 00 BF C8 03 00 00 F7 F7 3B 46 50 75 03 89 5E 54 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
# ASM-Notes:
# 00478630 8999 FC010000 MOV DWORD PTR DS:[ECX+1FC],EBX // set ship command
# 00478636 8089 0C020000 02 OR BYTE PTR DS:[ECX+20C],2 // 'command is set' marker
# 0047863D 8BC1 MOV EAX,ECX
# 0047863F 33D2 XOR EDX,EDX
# 00478641 2B05 64785900 SUB EAX,DWORD PTR DS:[597864] // TC_ship_info_block_3C8h
# 00478647 BF C8030000 MOV EDI,3C8
# 0047864C F7F7 DIV EDI
# 0047864E 3B46 50 CMP EAX,DWORD PTR DS:[ESI+50] // if group leader...
# 00478651 75 03 JNZ SHORT 00478656
# 00478653 895E 54 MOV DWORD PTR DS:[ESI+54],EBX // ...also set group command
# 00478656-478667 90.... NOP // remove solo loop for other ships in group
Fixing the AI Command Probabilities
- Sum of relative frequencies always = 100 %
- Long range -> disable invalid 'Circle' add low frequency 'Hold'
- Command slow -> correct 'Strafe' & 'Harry' to 'Flyby' & 'Circle'
Code: Select all
NAME: AI Command Probabilities Fix
DESC: Corrects sum of relative frequencies, some invalid default commands and adds low frequency Hold.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
# fast group 0
>> 0x018E3D4 03 00 00 00 32 00 00 00 01 00 00 00 1E 00 00 00 05 00 00 00 0F 00 00 00 07 00 00 00 05 00 00 00 01 00 00 00 23 00 00 00 05 00 00 00 28 00 00 00 03 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00
<< 0x018E3D4 03 00 00 00 23 00 00 00 01 00 00 00 1E 00 00 00 05 00 00 00 1E 00 00 00 07 00 00 00 05 00 00 00 01 00 00 00 23 00 00 00 05 00 00 00 23 00 00 00 03 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 01 00 00 00 55 00 00 00 07 00 00 00 05 00 00 00
# artillery group 1
>> 0x018E474 04 00 00 00 2D 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 28 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 14 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 23 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 23 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00
<< 0x018E474 04 00 00 00 00 00 00 00 02 00 00 00 50 00 00 00 06 00 00 00 0F 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 4B 00 00 00 06 00 00 00 14 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 46 00 00 00 06 00 00 00 19 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 5A 00 00 00 06 00 00 00 0A 00 00 00 07 00 00 00 00 00 00 00
# slow group 2
>> 0x018E514 03 00 00 00 28 00 00 00 05 00 00 00 23 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 01 00 00 00 3C 00 00 00 05 00 00 00 19 00 00 00 03 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 05 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 03 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00 05 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 03 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00
<< 0x018E514 04 00 00 00 28 00 00 00 06 00 00 00 23 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 01 00 00 00 3C 00 00 00 06 00 00 00 19 00 00 00 04 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 06 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 04 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00 06 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 01 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00
New AI Command Probabilities vs. enemy groups 0-3 (# changed)
Fast group(0) vs.:
0 = Harry 35 #, Charge 30, Strafe 30 #, Evade 5
1 = Charge 35, Strafe 35 #, Harry 25, Evade 5
2 = Harry 30, Strafe 40, Charge 25, Evade 5
3 = Harry 5 #, Strafe 5 #, Charge 85 #, Evade 5
Long range group(1) vs.:
0 = Circle 0 #, Assault 80 #, Flyby 15, Hold # 5 #
1 = Circle 0 #, Assault 75 #, Flyby 20, Hold # 5 #
2 = Circle 0 #, Assault 70 #, Flyby 25, Hold # 5 #
3 = Circle 0 #, Assault 90 #, Flyby 10 #, Evade 0
Slow group(2) vs.:
0 = Circle # 40, Flyby # 35, Charge 25, Evade 0
1 = Charge 60, Flyby # 25, Circle # 15, Evade 0
2 = Flyby # 35, Assault 35, Circle # 30, Evade 0
3 = Flyby # 35, Assault 35, Charge # 30, Evade 0
Remember the order of processing. All other codes take precedence over the random commands
EDIT:
Code: Select all
NAME: AI Retreat Fix for Importance 0 Battles
DESC: Adverse retreat trigger corrected to own losses expected + Pugnacity 0 i.e. all 3 conditions simultaneously.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
>> 0x000771d9 7f 0d 83 3d 64 58 5b 00 00 0f 85 d5 fd ff ff
<< 0x000771d9 0f 84 de fd ff ff 83 3d 64 58 5b 00 00 75 e9
#00477DD9 ^0F84 DEFDFFFF JE 477BBD // skip FLEET_retreat_battle_Importance_0
#00477DDF 833D 64585B00 00 CMP DWORD [5B5864],0 // Pugnacity
#00477DE6 ^75 E9 JNZ SHORT 477DD1 // skip FLEET_retreat_battle_Importance_0
Code: Select all
NAME: Hostility jump table error fix for AI tactical combat 'Pugnacity'
DESC: Fixes wrong jump destinations leading to wrong Hostility values in loc_478319.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
>> 0x774F4 20 83 47 00 19
<< 0x774F4 19 83 47 00 20
AI Battle Modifier Explanation: ('Improving AI Combat Commands' patch)
Base calculation for 1-4 is always the same -> [Modifier]+10x(Pugnacity+Importance) = 100+ -> unlock (or lock) feature switch:
Modifier 100 means always unlocked for 'Enable'(offense) but 0 for 'Disable'(defense) feature checks. Vanilla defaults card-rom: (minors all 50)
25 50 25 80 15 (kling+ rom-) -> (1)
Frontal Assault if Prognosis 4 (no losses expected); cloaked 2-4
60 55 40 85 50 (kling+ fer-) --> (2)
Bravery skips check for smart Retreat
80 75 20 25 75 (card+ fer-) ---> (3)
Ram Escalation unlocks more smart Ram features
50 50 25 85 50 (kling+ fer-) --> (4)
Escort Steadiness skips smart Evade check for escorts (group leader shields down & no other special code)
50 85 75 25 75 (fed+ kling-) --> (5)
Peaceableness -> e.g. unlocks Hail response if ('Peaceableness'[+30 P=2-] -5x Pugnacity) reach random 0-99
1 & 3 = 'enable' more special features for Frontal Assault & Ram
2 & 4 = 'block' some special features for smart fleet Retreat & smart Evade for escorts
5 = 'enable' feature for Hail response (politico-military double edged and shared for random blind Hail)
- 'Bravery' is not enable offense but disable smart Retreat = defense feature (vanilla defaults work better using the recommended AI Solo Commands patch)
- 'Frontal Assault' & 'Ram Escalation' 0 with 'Escort Steadiness' 100 gives vanilla behavior (exception ram 'light' is still on)
- 'Bravery' 100 with 'Ram Escalation' 101+ (overkill) usually let's the AI fight to the last ship
Cloaked -> skip Ram Escalation & Escort NoShields Evade & 4th random command
Ram Escalation if Prognosis: (no escalation i.e. 'ram light' = lose & noShields & KillRamOK)
- Win = noShields & KillRamOK & HigherGroup (so fast group noShields should use evade)
- Unclear = noShields & KillRamOK
- Lose = KillRamOK or (SacrificeRamOK & noShields or (Monster & NoHigherGroup))
KillRamOK = own ship can survive ramming the target
SacrificeRamOK = ramming can kill target (no matter own ship survives)
Overkill (101 65h) = skip Prognosis 0 Retreat (unless battle start)
Havoc (102+ 66h+) = whole fleet random target wildcard Ram if Pronosis 0 (battle start Retreat)
Current (instead of nominal) Hull Points as Ramming Damage to Opponent:
viewtopic.php?p=18230#p18230
Code: Select all
NAME: Code deviation for 'Improving AI Combat Commands' patch reading current hull points as expected ramming damage
DESC: Adapts the AI ram check when using current (instead of nominal) hull points as ramming damage to opponent.
AUTHOR: Spocks-cuddly-tribble
URL: https://www.armadafleetcommand.com/onscreen/botf/viewtopic.php?p=52751#p52751
>> 0x77B65 60
<< 0x77B65 5C
>> 0x77BF4 60
<< 0x77BF4 5C
# 478763 8D81 60010000 LEA EAX,[ECX+160] // target nominal hull -> use current hull [ECX+15C]
# 4787F2 3B87 60010000 CMP EAX,[EDI+160] // own nominal hull -> use current hull [EDI+15C]
Since the latest ECM5 AI does pretty nice in tactical combat (by vanilla standards) I'll provide a simple cumulative update patch.
Patch shows red 'pseudo-conflict' if one of the reposted/OT patches is present or modifiers get changed afterwards e.g.:
- AI fast-attack group 'Pakled tactic' fix vs. Space stations (Strafe -> Charge)
- Hostility jump table error fix for AI Pugnacity (useful part of outdated 'Unlocking the AI Ram Command')
- Random Engine Fix for single player turn process (OT, but makes Combat/AI more unpredictable for save scumming)
- AI Battle Modifier (vanilla Peaceabl./Bravery defaults, F.-Assault 100, RamEscal. 101 & EscortSt. 10 off/low).
Code: Select all
NAME: Improving AI Commands in Tactical Combat -> Cumulative Multi Patch (Vanilla to ECM codes)
# Random Engine Fix for single player turn process (makes Combat/AI more unpredictable for save scumming)
>> 0x0005763f 0f 84 6e ff ff ff e8 86 79 0b 00 83 c4 1c 5e 5a 59 c3
>> 0x00057652 00 00 00 00
>> 0x00057657 00 00 00 00
>> 0x0005765c 00 00 00 00
>> 0x0005768d 0a
<< 0x0005763f 74 05 e8 8a 79 0b 00 e9 68 ff ff ff 33 c0 e8 f5 e9 0b
<< 0x00057652 a3 ac 6b 59
<< 0x00057657 e8 f4 fb 0a
<< 0x0005765c dd d8 eb 38
<< 0x0005768d bd
# disable player Ram check for AI ally join Hail/Retreat FIX
>> 0x773D7 09
<< 0x773D7 FF
# AI Battle Modifier - vanilla Peaceabl. & Bravery defaults, F.-Assault 100, RamEscal. 101 & EscortSt. 10(low).
# @ 5907B4 F.-Assault Bravery RamEscal. EscortSt. Peaceabl.
# Assault(+) Retreat(-) Ram(+) Evade(-) Hail(+)
# Cardassians
>> 0x18E5B4 19 00 00 00 3C 00 00 00 50 00 00 00 32 00 00 00 32 00 00 00
<< 0x18E5B4 64 00 00 00 3C 00 00 00 65 00 00 00 0A 00 00 00 32 00 00 00
# Federation
>> 0x18E5C8 32 00 00 00 37 00 00 00 4B 00 00 00 32 00 00 00 55 00 00 00
<< 0x18E5C8 64 00 00 00 37 00 00 00 65 00 00 00 0A 00 00 00 55 00 00 00
# Ferengi
>> 0x18E5DC 19 00 00 00 28 00 00 00 14 00 00 00 19 00 00 00 4B 00 00 00
<< 0x18E5DC 64 00 00 00 28 00 00 00 65 00 00 00 0A 00 00 00 4B 00 00 00
# Klingons
>> 0x18E5F0 50 00 00 00 55 00 00 00 19 00 00 00 55 00 00 00 19 00 00 00
<< 0x18E5F0 64 00 00 00 55 00 00 00 65 00 00 00 0A 00 00 00 19 00 00 00
# Romulans
>> 0x18E604 0F 00 00 00 32 00 00 00 4B 00 00 00 32 00 00 00 4B 00 00 00
<< 0x18E604 64 00 00 00 32 00 00 00 65 00 00 00 0A 00 00 00 4B 00 00 00
# Minors
>> 0x18E618 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00 32 00 00 00
<< 0x18E618 64 00 00 00 32 00 00 00 65 00 00 00 14 00 00 00 32 00 00 00
# Hostility jump table error fix for AI tactical combat 'Pugnacity'
>> 0x774F4 20 83 47 00 19
<< 0x774F4 19 83 47 00 20
# skip Prognosis 0 Retreat Options for Ram Escalation 101 Overkill / 102+ Havoc
>> 0x76ED6 85 D2 0F 85 E0 01 00 00 85 FF 0F 8E C9 01 00 00 85 DB 0F 85 B2 01 00 00 BB FF FF FF FF 8B 84 24 34 01 00 00 89 15 70 58 5B 00 BA 0A 00 00 00
<< 0x76ED6 33 C0 85 D2 74 09 40 85 FF 74 08 B0 02 EB 0F 85 FF 75 01 40 85 ED 75 01 40 85 DB 74 01 40 A3 70 58 5B 00 85 C0 75 0D E9 9E 01 00 00 6A FF 5B
>> 0x770A0 C7 05 70 58 5B 00 01 00 00 00 E9 5B FE FF FF C7 05 70 58 5B 00 02 00 00 00 E9 4C FE FF FF 85 FF 7E 0F C7 05 70 58 5B 00 02 00 00 00 E9 39 FE FF FF 85 ED 7E 0F C7 05 70 58 5B 00 03 00 00 00 E9 26 FE FF FF C7 05 70 58 5B 00 04 00 00 00 E9 17 FE FF FF
<< 0x770A0 8B 84 24 34 01 00 00 33 D2 B2 0A 83 3D 84 78 59 00 00 0F 84 4A FE FF FF 8B 0D 60 58 5B 00 83 79 08 65 0F 8C 3A FE FF FF 0F 84 3C FE FF FF B2 09 E9 2D FE FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
# AI Retreat Fix for Importance 0 Battles
>> 0x000771d9 7f 0d 83 3d 64 58 5b 00 00 0f 85 d5 fd ff ff
<< 0x000771d9 0f 84 de fd ff ff 83 3d 64 58 5b 00 00 75 e9
# Improving AI Combat Commands for Warships vs enemy Ships
>> 0x779E0 BA 01 00 00 00
<< 0x779E0 B2 01 8B EB 90
>> 0x77AB5 00 00 00 00 00 00 00 00 00 00 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00 E4 87 47 00
<< 0x77AB5 A1 64 58 5B 00 02 05 6C 58 5B 00 B2 0A F7 EA 2C 64 F6 D8 8A F8 A1 60 58 5B 00 38 38 7C 36 90 84 DB 74 26 B2 02 EB 22
>> 0x77AE2 89 D1 89 DD
<< 0x77AE2 8B F9 8B CA
>> 0x77AF4 5D
<< 0x77AF4 C0
>> 0x77AFE BE 30 BA 57 00 BF C8 B9 57 00 B9 13 03 00 00 89 F3 89 CA 89 F8 E8 98 FA 08 00 85 C0 75 F1 B8 07 00 00 00 5D 5F 5E 59 C3
<< 0x77AFE 02 15 70 58 5B 00 80 FA 04 7D 2E 83 C5 18 B8 DC 01 00 00 03 C8 03 F8 80 39 24 7C 38 B2 00 80 39 2B 7D 3E B2 02 EB 3A 90
>> 0x77B3C 5D 5F 5E 59 C3
<< 0x77B3C 83 FE 01 75 05
>> 0x77B52 83 B9 78 01 00 00 07 74 6D 83 B9 78 01 00 00 01 0F 85 87 00 00 00 8B 91 9C 01 00 00 8D 04 D5 00 00 00 00 29 D0 C1 E0 02 01 D0 8B 15 60 78 59 00 8B 44 82 3C C1 E0 05 83 FE 01 0F 83 7E 00 00 00 85 F6 75 07 BF D4 05 59 00 01 C7 B8 03 00 00 00 31 C9 85 ED 0F 85 80 00 00 00 8D 14 C5 00 00 00 00 01 FA
<< 0x77B52 6B 41 C0 74 03 05 60 78 59 00 8A 50 3C 84 DB 75 32 8D 81 60 01 00 00 80 39 24 7C 03 83 E8 54 8B 00 3B 87 5C 01 00 00 7C 6F 80 3D 70 58 5B 00 02 7D 50 A1 60 58 5B 00 38 78 08 7C 46 80 39 24 7C 59 EB 33 B1 05 D3 E2 8B C6 C1 E0 02 03 C6 D3 E0 8D BC 10 D4 05 59 00 B8 03 00 00 00 2A C3 33 C9 8D 14 C7
>> 0x77BC8 66 8B 81 DC 01 00 00 83 E8 24 66 3D 06 00 77 13 25 FF FF 00 00 FF 24 85 C0 86 47 00 B8 02 00 00 00 EB 9B 31 C0 EB 97 BB 34 BA 57 00 BA 25 03 00 00 B8 C8 B9 57 00 E8 AD F9 08 00 85 C0 0F 85 50 FF FF FF E9 58 FF FF FF 77 07 BF 74 06 59 00 EB 82 83 FE 02 0F 85 7B FF FF FF BF 14 07 59 00 E9 6F FF FF FF B8 02 00 00 00 E9 76
<< 0x77BC8 3B F2 7C 08 6A 09 58 5D 5F 5E 59 C3 85 F6 75 BD F6 45 74 01 74 4A A1 60 58 5B 00 38 78 0C 7D AD EB 79 EB 16 8B 81 5C 01 00 00 3B 87 60 01 00 00 7F DA F6 45 74 01 74 D4 EB CA A1 60 58 5B 00 38 78 08 7C 11 80 3D 70 58 5B 00 02 7C B7 74 E3 3B F2 7F DF EB B7 80 3D 70 58 5B 00 02 7C D4 EB AC 80 3D 70 58 5B 00 00 74 AD E9 5F
# Different Solo Commands within AI Combat Groups
>> 0x77A31 46 54 89 C8 8B 50 38 3B 51 38 75 15 8A 91 0C 02 00 00 89 99 FC 01 00 00 80 CA 02 88 91 0C 02 00 00 69 91 7C 01 00 00 C8 03 00 00 8B 0D 64 78 59 00 01 D1 39 C1 75 CD
<< 0x77A31 99 FC 01 00 00 80 89 0C 02 00 00 02 8B C1 33 D2 2B 05 64 78 59 00 BF C8 03 00 00 F7 F7 3B 46 50 75 03 89 5E 54 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
# AI Command Probabilities Fix
# fast group 0
>> 0x018E3D4 03 00 00 00 32 00 00 00 01 00 00 00 1E 00 00 00 05 00 00 00 0F 00 00 00 07 00 00 00 05 00 00 00 01 00 00 00 23 00 00 00 05 00 00 00 28 00 00 00 03 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00
<< 0x018E3D4 03 00 00 00 23 00 00 00 01 00 00 00 1E 00 00 00 05 00 00 00 1E 00 00 00 07 00 00 00 05 00 00 00 01 00 00 00 23 00 00 00 05 00 00 00 23 00 00 00 03 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 1E 00 00 00 05 00 00 00 28 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 05 00 00 00 03 00 00 00 05 00 00 00 05 00 00 00 05 00 00 00 01 00 00 00 55 00 00 00 07 00 00 00 05 00 00 00
# artillery group 1
>> 0x018E474 04 00 00 00 2D 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 28 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 14 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 23 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 04 00 00 00 23 00 00 00 02 00 00 00 28 00 00 00 06 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00
<< 0x018E474 04 00 00 00 00 00 00 00 02 00 00 00 50 00 00 00 06 00 00 00 0F 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 4B 00 00 00 06 00 00 00 14 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 46 00 00 00 06 00 00 00 19 00 00 00 0D 00 00 00 05 00 00 00 04 00 00 00 00 00 00 00 02 00 00 00 5A 00 00 00 06 00 00 00 0A 00 00 00 07 00 00 00 00 00 00 00
# slow group 2
>> 0x018E514 03 00 00 00 28 00 00 00 05 00 00 00 23 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 01 00 00 00 3C 00 00 00 05 00 00 00 19 00 00 00 03 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 05 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 03 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00 05 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 03 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00
<< 0x018E514 04 00 00 00 28 00 00 00 06 00 00 00 23 00 00 00 01 00 00 00 19 00 00 00 07 00 00 00 00 00 00 00 01 00 00 00 3C 00 00 00 06 00 00 00 19 00 00 00 04 00 00 00 0F 00 00 00 07 00 00 00 00 00 00 00 06 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 04 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00 06 00 00 00 23 00 00 00 02 00 00 00 23 00 00 00 01 00 00 00 1E 00 00 00 07 00 00 00 00 00 00 00
# AI fast-attack 'Pakled tactic' fix vs. Space stations (Strafe -> Charge)
>> 0x77B4B 89 D0
<< 0x77B4B B0 01