NTai XE10.1b - Page 61

NTai XE10.1b

Here is where ideas can be collected for the skirmish AI in development

Moderators: hoijui, Moderators

User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

sweet :-)
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

AF, have you tested the new config editer? it crashes when you try and open any config made from the previous toolkit
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.

************** Exception Text **************
System.ArgumentOutOfRangeException: Value of '3000' is not valid for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'.
Parameter name: Value
at System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
at NTaiToolkit.CBuildtree.set_GeoSearchRadius(Decimal value)
at NTaiToolkit.CBuildtree.Load(String TDFfile)
at NTaiToolkit.Form1.linkLabel1_LinkClicked(Object sender, LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnLinkClicked(LinkLabelLinkClickedEventArgs e)
at System.Windows.Forms.LinkLabel.OnMouseUp(MouseEventArgs e)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.Label.WndProc(Message& m)
at System.Windows.Forms.LinkLabel.WndProc(Message& msg)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)


************** Loaded Assemblies **************
mscorlib
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
----------------------------------------
NTaiToolkit
Assembly Version: 1.0.2582.20418
Win32 Version: 1.0.2582.20418
CodeBase: file:///C:/Program%20Files/TASpring2/AI/NTaiToolkit.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Drawing
Assembly Version: 2.0.0.0
Win32 Version: 2.0.50727.42 (RTM.050727-4200)
CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------

************** JIT Debugging **************
To enable just-in-time (JIT) debugging, the .config file for this
application or computer (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.

For example:

<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>

When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the computer
rather than be handled by this dialog box.
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

initial_threat_value=2;
increase_threshold_percentage=0;
increase_threshold_value=4;

also had no effect, it just used attack groups of two still. NTAI log:
looooooonnnnggg log
Last edited by 1v0ry_k1ng on 08 Jun 2007, 21:24, edited 1 time in total.
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

and that WAS using the newest NTAI.dll, i deleted the old one and inserted the new one
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

Dont post logs in this thread, link to them. Can you edit that out and put it somewhere else like a pastebin?
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

if youve got that ill just edit it out :)
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

ok, config program now works.
however, AI has totaly broken, it no longer manages to load unit tasklists so all builders are idle
:: NTAI XE9.71 Log File
:: Programmed and maintained by AF/T.Nowell
:: Copyright (C) 2004-7 Tom Nowell/AF
:: Game started: 8.5.2007 20:32:34

:: XTA_V9_beta_awaitingGoAhead
:: XTA Version 8.2
:: First instance of NTAI
:: [RoX]1v0ry_k1ng
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: spring_engine
:: AI DLL's in game
:: AI/Bot-libs/NTai.dll : AI :: 1

[-] < Frame: 0 >logging started
KAI Metal Class by Krogothe
Metal Spots loaded from file
Metal Spots Found 80
:: Found 80 Metal Spots
[-] < Frame: 0 >Order Router constructed
[-] < Frame: 0 >DTHandler constructed
[-] < Frame: 0 >RadarHandler constructed
[-] < Frame: 0 >Planning constructed
[-] < Frame: 0 >Assigner constructed
[-] < Frame: 0 >Scouter constructed
[-] < Frame: 0 >Economy constructed
[-] < Frame: 0 >Manufacturer constructed
[-] < Frame: 0 >BuildingPlacer constructed
[-] < Frame: 0 >Chaser constructed
[-] < Frame: 0 >Initialisising
[-] < Frame: 0 >Mod TDF loaded
[-] < Frame: 0 >Junk in buffer :=noenemiesdistance600;
[-] < Frame: 0 >Junk in buffer :;
[-] < Frame: 0 >error in buffer
[-] < Frame: 0 >Mod TDF loaded
[-] < Frame: 0 >values filled
[-] < Frame: 0 >Arrays filled

[-] < Frame: 0 >Loading unit data
[-] < Frame: 0 >Unit data loaded
:: Comet Catcher Redux.smf
:: XTA_V9_BetaAwaitinggoahead.sdd
:: map size 12 x 16
[-] < Frame: 0 >Assigner Init'd
[-] < Frame: 0 >Planner Init'd
No MetaTags where defined
[-] < Frame: 0 >Manufacturer Init'd
[-] < Frame: 0 >BuildingPlacement Init'd
[-] < Frame: 0 >Value ai\kamikaze missing in file buffer
[-] < Frame: 0 >Chaser Init'd
[-] < Frame: 0 >Scouter Init'd
[-] < Frame: 0 > error loading tasklist :: arm_commander :: buffer empty, most likely because of an empty list
[-] < Frame: 3 >issuing command in update()
[-] < Frame: 3 >Command: ID: 50 Timeout: 2147483647 params: 1, source of command: setting firing state/move state
[-] < Frame: 3 >issuing command in update() succeeded
[-] < Frame: 3 >issuing command in update()
[-] < Frame: 3 >Command: ID: 45 Timeout: 2147483647 params: 0, source of command: setting firing state/movestate
[-] < Frame: 3 >issuing command in update() succeeded
[[RoX]1v0ry_k1ng] [00:04] < Frame: 133 > :: .cheat
[[RoX]1v0ry_k1ng] [00:06] < Frame: 192 > :: .spectator
[[RoX]1v0ry_k1ng] [00:29] < Frame: 895 > :: .team 1
[[RoX]1v0ry_k1ng] [00:43] < Frame: 1309 > :: .give 1 core_commander @4952,92,545
[00:43] < Frame: 1310 >issuing command in update()
[00:43] < Frame: 1310 >Command: ID: 10 Timeout: 2147483647 params: 4952, 91.7188, 655, source of command: move CActions
[00:43] < Frame: 1310 >issuing command in update() succeeded
[00:43] < Frame: 1310 >issuing command in update()
[00:43] < Frame: 1310 >Command: ID: 50 Timeout: 2147483647 params: 2, source of command: setting firing state/movestate
[00:43] < Frame: 1310 >issuing command in update() succeeded
[00:48] < Frame: 1449 >next task?
[00:48] < Frame: 1449 > error loading tasklist :: core_commander :: buffer empty, most likely because of an empty list
[00:48] < Frame: 1451 >issuing command in update()
[00:48] < Frame: 1451 >Command: ID: 10 Timeout: 2147483647 params: 4952, 91.7188, 762.851, source of command: move CActions
[00:48] < Frame: 1451 >issuing command in update() succeeded
[[RoX]1v0ry_k1ng] [01:22] < Frame: 2475 > :: .give 5 arm_construction_aircraft @5301,92,808
[01:22] < Frame: 2477 >issuing command in update()
[01:22] < Frame: 2477 >Command: ID: 10 Timeout: 2147483647 params: 5269, 91.7188, 886, source of command: move CActions
[01:22] < Frame: 2477 >issuing command in update() succeeded
[01:22] < Frame: 2477 >issuing command in update()
[01:22] < Frame: 2477 >Command: ID: 10 Timeout: 2147483647 params: 5301, 91.7188, 886, source of command: move CActions
[01:22] < Frame: 2477 >issuing command in update() succeeded
[01:22] < Frame: 2477 >issuing command in update()
[01:22] < Frame: 2477 >Command: ID: 10 Timeout: 2147483647 params: 5333, 91.7188, 886, source of command: move CActions
[01:22] < Frame: 2477 >issuing command in update() succeeded
[01:22] < Frame: 2477 >issuing command in update()
[01:22] < Frame: 2477 >Command: ID: 10 Timeout: 2147483647 params: 5269, 91.7188, 918, source of command: move CActions
[01:22] < Frame: 2477 >issuing command in update() succeeded
[01:22] < Frame: 2477 >issuing command in update()
[01:22] < Frame: 2477 >Command: ID: 10 Timeout: 2147483647 params: 5301, 91.7188, 918, source of command: move CActions
[01:22] < Frame: 2477 >issuing command in update() succeeded
[01:25] < Frame: 2551 >next task?
[01:25] < Frame: 2551 > error loading tasklist :: arm_construction_aircraft :: buffer empty, most likely because of an empty list
[01:25] < Frame: 2551 >next task?
[01:25] < Frame: 2551 > error loading tasklist :: arm_construction_aircraft :: buffer empty, most likely because of an empty list
[01:25] < Frame: 2551 >next task?
[01:25] < Frame: 2551 > error loading tasklist :: arm_construction_aircraft :: buffer empty, most likely because of an empty list
[01:25] < Frame: 2551 >next task?
[01:25] < Frame: 2551 > error loading tasklist :: arm_construction_aircraft :: buffer empty, most likely because of an empty list
[01:25] < Frame: 2551 >next task?
[01:25] < Frame: 2551 > error loading tasklist :: arm_construction_aircraft :: buffer empty, most likely because of an empty list
[01:25] < Frame: 2552 >issuing command in update()
[01:25] < Frame: 2552 >Command: ID: 10 Timeout: 2147483647 params: 5301, 142.293, 987.339, source of command: move CActions
[01:25] < Frame: 2552 >issuing command in update() succeeded
[01:25] < Frame: 2552 >issuing command in update()
[01:25] < Frame: 2552 >Command: ID: 10 Timeout: 2147483647 params: 5301, 143.085, 1020.46, source of command: move CActions
[01:25] < Frame: 2552 >issuing command in update() succeeded
[01:25] < Frame: 2552 >issuing command in update()
[01:25] < Frame: 2552 >Command: ID: 10 Timeout: 2147483647 params: 5269, 163.449, 985.535, source of command: move CActions
[01:25] < Frame: 2552 >issuing command in update() succeeded
[01:25] < Frame: 2552 >issuing command in update()
[01:25] < Frame: 2552 >Command: ID: 10 Timeout: 2147483647 params: 5333, 165.987, 985.535, source of command: move CActions
[01:25] < Frame: 2552 >issuing command in update() succeeded
[01:25] < Frame: 2552 >issuing command in update()
[01:25] < Frame: 2552 >Command: ID: 10 Timeout: 2147483647 params: 5269, 161.841, 1018.36, source of command: move CActions
[01:25] < Frame: 2552 >issuing command in update() succeeded


sorry for posting log like this again but in a hurry, ill remove it once youve read it.
User avatar
lale
Posts: 73
Joined: 29 Apr 2007, 08:36

Post by lale »

Issue ├óÔé¼ÔÇ£ Problem with mex rebuilding.
Ok I did some testing of mex hunting and rebuilding, because this is important in mods without metalmakers.
Currently NTAI has two problems with mex building, both relating to building mexes on a spot where a previous mex has been destroyed. (Otherwise the mexhunting is good)

To do a testing of this, I made an artificial setup.
In configfile construction airplane (corca) has a buildlist of
  • corca=b_mex,cormex;
Map is small 8x8 with round well-defined regular mex-spots, and reasonable mex-extraction circle.
Only 3› units are used and ever present in this test:
  • 1) Construction airplane (corca)
    2) Mexes (cormex)
    3) Radars (corrad)
    ›) enemy walking bomb (corroach, used for destroying mexes)
Commanders are ├óÔé¼┼ôremoved├óÔé¼┬Ø from game, to make things simple. Also units are summoned via ├óÔé¼┼ô.give├óÔé¼┬Ø cheat.
In the start the corca constructs mexes on all spots. And a radar is summoned (.give corrad) close (not to close) to every mexspot.
After construction; corca lands near last constructed mex.

First issue: when ally/own mex is destroyed by enemy
Using a summoned corroach two mexes near landed corca is destroyed.
Problem: corca does nothing! (even after 5 minutes of gametime)
Log continues to report:
LOG wrote:[20:13] < Frame: 36395 >next task?
[20:13] < Frame: 36395 >CKeywordConstructionTask::Init b_mex
[20:13] < Frame: 36395 >Given the go ahead :: CORMEX
[20:13] < Frame: 36395 >Given the go ahead :: COREXP
[20:13] < Frame: 36395 >CKeywordConstructionTask::Build() :: CORMEX
[20:13] < Frame: 36395 >loading contents of tasklist :: CORCA :: filling tasklist with #1 items
[20:13] < Frame: 36395 >loaded contents of tasklist :: CORCA :: loaded tasklist at 1 items
[20:13] < Frame: 36395 >CKeywordConstructionTask::Init b_mex
[20:13] < Frame: 36395 >Given the go ahead :: CORMEX
[20:13] < Frame: 36395 >Given the go ahead :: COREXP
[20:13] < Frame: 36395 >CKeywordConstructionTask::Build() :: CORMEX
[20:13] < Frame: 36395 >CKeywordConstructionTask::RecieveMessage BuildPlacement returned a position that cant eb built upon
[20:13] < Frame: 36398 >issuing command in update()
Now corca is commanded to rebuild nearby mex, does so, and then lands again.
Problem: corca does not try to rebuild other destroyed mex, eventhough this mexspot is only 100 pixels away, and no enemy units are present on map.

Basically NTAI does not reconstruct own destroyed mexes, eventhough no enemies are present on map.

Second issue: when enemy mex is destroyed
Several enemy mexes are summoned. (on spots) And radar towers (owned by NTAI) is summoned near these enemy mexes.

corca is moved close to one of these enemy mexes.
Two enemy mexes are destroyed close to landed corca.
Problem: corca does nothing! (even after 5 minutes of gametime)
Log continues to report:
LOG wrote:[29:51] < Frame: 53731 >next task?
[29:51] < Frame: 53731 >CKeywordConstructionTask::Init b_mex
[29:51] < Frame: 53731 >Given the go ahead :: CORMEX
[29:51] < Frame: 53731 >Given the go ahead :: COREXP
[29:51] < Frame: 53731 >CKeywordConstructionTask::Build() :: CORMEX
[29:51] < Frame: 53731 >loading contents of tasklist :: CORCA :: filling tasklist with #1 items
[29:51] < Frame: 53731 >loaded contents of tasklist :: CORCA :: loaded tasklist at 1 items
[29:51] < Frame: 53731 >CKeywordConstructionTask::Init b_mex
[29:51] < Frame: 53731 >Given the go ahead :: CORMEX
[29:51] < Frame: 53731 >Given the go ahead :: COREXP
[29:51] < Frame: 53731 >CKeywordConstructionTask::Build() :: CORMEX
[29:51] < Frame: 53731 >CKeywordConstructionTask::RecieveMessage BuildPlacement returned UpVector or some other nasty position
[29:51] < Frame: 53732 >issuing command in update()
Now corca is commanded to move to other nearby mexspot, during this transition, NTAI takes command of corca and orders corca to construct two new mexes, on the two spots where enemy mexes where destroyed.

It seems that construction units needs an unstick event from its current loop of evaluating mexspots, before it will updates its matrix of newly ├óÔé¼┼ôliberated├óÔé¼┬Ø mexspots.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

This is a safety mechanism being exploited on a very small map under unusual conditions.

If a mex is blown up its flagged as bad, and for a while itll stay flagged as bad, untill enemies are killed in the region, I've not looked at that code in a long time.

I and lindir spent a longtime fiddling with mexes, things are fine as it is.

Suffice to say the amount of work needed to go this final last step is too great to justify it. I would need a miriad of tags just to control it in order to provide ideal behaviour for each mod.
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

1v0ry_k1ng wrote:however, AI has totaly broken, it no longer manages to load unit tasklists so all builders are idle
in case that got overlooked, quite a big problem imo :P
User avatar
lale
Posts: 73
Joined: 29 Apr 2007, 08:36

Post by lale »

While the second issue, about destroyed enemy mexes, is acceptable. (but not too good for 1944 mod)

The first one gives headache.

In a large map (32x32) where sides are strongly divided, eg: NTAI controles left side of map, player right.
- And this "control" also implies that no enemy units are present within 3000 pixels of NTAI central base on fare left.
Now, if an airplane is lucky to destroy a single mex on NTAI's fare left (central base), then this mex will not be reconstructed. (or at least for the 30 minuts I've tested)
And thats even if no player units (except a few airplanes) EVER come within 3000 pixels of this destroyd mex.
AF wrote:for a while itll stay flagged as bad
Can this "while" be tweak or exposed in configfile as a control?
User avatar
lale
Posts: 73
Joined: 29 Apr 2007, 08:36

Post by lale »

IK
from your posted config file:
IK wrote:[-] < Frame: 0 >Mod TDF loaded
[-] < Frame: 0 >Junk in buffer :=noenemiesdistance600;
[-] < Frame: 0 >Junk in buffer :;
[-] < Frame: 0 >error in buffer
Could there be a syntax error (missing semicolon) in config file?
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

ill check
if there is, it was put there by the toolkit :/
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

lol, i must have harsh words with the newest config editer


{
=searchdistance3000;
=noenemiesdistance600;
}
;
}


that sure dosnt look right to me XD
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

i fixed it, those two tags are arranged in the wrong order and were in the wrong place (inside their own { } inside the AI section)
AF you best put a warning or fix the toolkit
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

these tags still have no effect..
increase_threshold_percentage=#;
increase_threshold_value=#;

the only mention of "threshold" in the log is numerous

04:08] < Frame: 7457 >new attacker added :: arm_peewee target?:1 threshold:2

all of them have the same "threshold:2".
User avatar
lale
Posts: 73
Joined: 29 Apr 2007, 08:36

Post by lale »

Update to above post.

Im mystified.

Im running a new test, on a 16x16 map.
This time the corca rebuild the first destroyed mex, after about 8 minuts.
But the second mex, has yet to be rebuild. After 1› hour.

Also I destroy a thirde mex, after 30 minuts, now after 50 minuts, and still no reaction from the construction airplane.

(oh... and antistall etc. is offcourse disabled)

Anyway something is not right with the rebuilding of mexes, destroyed by enemy :?

btw Im running with a slightly older build (9.71a) As I wanted to see if an "attack pos" marker would be calculated. Given ".threat" in console no marker are made!
User avatar
lale
Posts: 73
Joined: 29 Apr 2007, 08:36

Post by lale »

While testing above a came accross another "feature" / issue:
After a while a construction unit stop running its task list. :-( (might also affect factories, but I can't remember seing this)

In this case the corca made an final entry:
LOG wrote:GlobalAI1: [01:26:39] < Frame: 155990 >next task?
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::Init b_mex
GlobalAI1: [01:26:39] < Frame: 155990 >Given the go ahead :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155990 >Given the go ahead :: COREXP
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::Build() :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155990 >Value tasklists\normal\corca missing in file buffer
GlobalAI1: [01:26:39]loading contents of tasklist :: CORCA :: filling tasklist with #1 items
GlobalAI1: [01:26:39] < Frame: 155990 >loading contents of tasklist :: CORCA :: filling tasklist with #1 items
GlobalAI1: [01:26:39] < Frame: 155990 >loaded contents of tasklist :: CORCA :: loaded tasklist at 1 items
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::Init b_mex
GlobalAI1: [01:26:39] < Frame: 155990 >Given the go ahead :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155990 >Given the go ahead :: COREXP
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::Build() :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::RecieveMessage G->OrderRouter->GiveOrder(tc)== true :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155990 >CKeywordConstructionTask::RecieveMessage wiping and creaiing the plan :: CORMEX
GlobalAI1: [01:26:39] < Frame: 155993 >issuing command in update()
GlobalAI1: [01:26:39] < Frame: 155993 >Command: ID: -271 Timeout: 156364 params: 3608, 71.8689, 104, 0, source of command: CBuild
GlobalAI1: [01:26:39] < Frame: 155993 >issuing command in update() succeeded
After this, no more entries where made in the log or on the console for this unit. (it landed next to the mex, and remained passive)

Ive observed this before, with the commander suddenly shutting down. This only affects his tasklist, he continus to defend himself.

Is this a intentionel "feature"?

Update: Just to be clear, this "feature" is NOT the cause for the problem with mexes not rebuild. As the corca in above example had been running for 1› hour, not rebuilding mexes before it shutdown completly
User avatar
1v0ry_k1ng
Posts: 4656
Joined: 10 Mar 2006, 10:24

Post by 1v0ry_k1ng »

lale wrote: Anyway something is not right with the rebuilding of mexes, destroyed by enemy :?
yeah i noticed this as well. NTAI agressively expands for mex's but once beaten back never expands again. from what i can tell it never rebuilds a mex it loses.
Post Reply

Return to “AI”