NTai XE10.1b - Page 38

NTai XE10.1b

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

Moderators: hoijui, Moderators

Tobi
Spring Developer
Posts: 4598
Joined: 01 Jun 2005, 11:36

Post by Tobi »

AF is the latest dev version committed to SVN?

(because I'll probably be fixing AI multiple datadir compatibility soonish, so need to patch NTAI for that too)
User avatar
rattle
Damned Developer
Posts: 8278
Joined: 01 Jun 2006, 13:15

Post by rattle »

Thanks for adding it to the SVN. Now I finally found out what's causing this "bug". I compiled it with SSE disabled et voila... works.

In the project properties go to the C/C++ Code Generation tab and disable the bottom most option. Works for me and will probably work for anyone on a non SSE/SSE2 CPU :-)
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

As far as I am aware its in the svn.

Currently the last actual work I did on NTai was before I released it. The version in the installer is the most upto date and no work has been done on it since.
User avatar
rattle
Damned Developer
Posts: 8278
Joined: 01 Jun 2006, 13:15

Post by rattle »

Would you be so kind and include it without SSE then? I fully tested the release from the SVN on 0.73 and works as it should.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

well ti seems I'm gonan ahve to release a 0.23 build soon anyways with lindirs new buildtree and arghs updated nanoblboz buildtree.

In the mean time I'm goign to attempt a fix for metatags, and think about how I'm to icnrease learnign apparentness but I wanna get some stuff in AFLobby out the way first.
Bishounen
Posts: 14
Joined: 22 Aug 2006, 22:50

Post by Bishounen »

I seem to be having issues with the SP version loading any mods at all. I can start it up with no issues, and select Skirmish. it loads all the maps, and then tries to load the mods. For each one, Springspgfx throws an error that it's unable to load the .sd7 file, followed by (TAM) for example:

Code: Select all

Error Loading Mod XTAPE.sd7. (TAM)
It does this for every mod, without exception. It just started this after I attempted to uninstall and reinstall all of TA Spring (Including the Single Player version) to try and fix the massive errors and freezes that I was getting previously.

Just for full disclosure, I am running Windows XP, SP2 on an AMD 64 3500+ with an Nvidia 5600 LE card, with the latest Nvidia drivers and 2GB system RAM.

I did uninstall everything and delete all program folders before getting fresh downloads of the most updated (non-dev) versions of Spring and the ntai installer (version 22) and all my mods and maps.

my infologs.txt file is empty, so I don't know what other info I should post.

Any Ideas?
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

This issue is specifically todo with Spring SP, spring itself and NTai should work fine.

However, I believe I spoke with you in the lobby? I didnt write Spring SP, I just include it because its such a useful tool, and I would work on it only I cant get it to compile. Does TASClient run fine with singleplayer games? It may not be the best solution but it should work albeit needing you to be online to do so. Otherwise manually starting spring.exe will bring up a basic set of menus through which you can start a game.....
Bishounen
Posts: 14
Joined: 22 Aug 2006, 22:50

Post by Bishounen »

You may have. I did bring this up in the lobby first.

I will try some singleplayer games with the TAS Client. I'll just start a game and play against a bot. I'll let you know how it goes.
Bishounen
Posts: 14
Joined: 22 Aug 2006, 22:50

Post by Bishounen »

Well, the lobby didn't work. I hosted a game, and started with 3 bots and me. The game crashed with this code and error info:

Code: Select all


List index out of bounds (0).

xception class: EStringListError
Exception address: 0041E6C1
----------------------------------------------------------------------------------------------------
Stack list, generated 8/22/2006 5:45:21 PM
[0041E6BC] Classes.TStringList.Get + $1C
[0041D7C1] Classes.TStrings.Error + $2D
[0041E6BC] Classes.TStringList.Get + $1C
[00641000] BattleFormUnit.TBattleForm.GenerateNormalScriptFile (Line 1467, "BattleFormUnit.pas" + 189) + $22
[0063E01E] BattleFormUnit.TBattleForm.OnStartGameMessage (Line 676, "BattleFormUnit.pas" + 22) + $2D
[00469DB8] Controls.TControl.WndProc + $188
[0046CE17] Controls.TWinControl.WndProc + $157
[00483471] Forms.TCustomForm.WndProc + $421
[0046CA94] Controls.TWinControl.MainWndProc + $2C
[00425FE8] Classes.StdWndProc + $14
[00430612] Contnrs.TComponentList.GetItems + $A
[0058EB9D] AppEvnts.TCustomApplicationEvents.DoMessage + $D
[004898A7] Forms.TApplication.ProcessMessage + $83
[004898DE] Forms.TApplication.HandleMessage + $A
[00489AFE] Forms.TApplication.Run + $96
[00662654] TASClient.TASClient (Line 124, "E:\Projekti\Trenutni\TASpringAddon\TASClient.dpr" + 42) + $2
----------------------------------------------------------------------------------------------------
System   : Windows XP Professional, Version: 5.1, Build: A28, "Service Pack 2"
Processor: AMD, AMD Athlon(tm) 64 Processor 3500+, 2200 MHz MMX
Display  : 1280x1024 pixels, 32 bpp
----------------------------------------------------------------------------------------------------
List of loaded modules:
[00330000] C:\Program Files\TASpring\zlibwapi.dll
<10000000> 1.2.2.0 - 1.2.2
           zlib data compression library
[003F0000] C:\Program Files\Stardock\ObjectDock\DockShellHook.dll
<10000000> (no version info)
[00400000] C:\Program Files\TASpring\TASClient.exe
           (no version info)
[012E0000] C:\Program Files\Logitech\MouseWare\System\LgWndHk.dll
<10000000> 9.76.46.0 - 9.76.046
           Logitech Call Window Hook Library
[032F0000] C:\Program Files\Common Files\Logitech\Scrolling\LgMsgHk.dll
<10000000> 1.1.0.0 - 1.1.0
           Logitech Message Hook Library
[03520000] C:\WINDOWS\system32\msi.dll
<745E0000> 3.1.4000.2435 - 3.1.4000.2435
           Windows Installer
[037F0000] C:\Program Files\Common Files\Microsoft Shared\INK\SKCHUI.DLL
<10000000> 1.0.1038.0 - 1.0.1038.0
           Draw Pen Tip
[10000000] C:\Program Files\TASpring\UnitSync.dll
           (no version info)
[20000000] C:\WINDOWS\IME\SPGRMR.DLL
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           SPTIP Grammar DLL
[5AD70000] C:\WINDOWS\SYSTEM32\uxtheme.dll
           6.0.2900.2180 - 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft UxTheme Library
[5C2C0000] C:\WINDOWS\ime\sptip.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           SAPI5.0/CTF layer DLL
[5D090000] C:\WINDOWS\system32\comctl32.dll
           5.82.2900.2180 - 5.82 (xpsp_sp2_rtm.040803-2158)
           Common Controls Library
[5EDD0000] C:\WINDOWS\system32\olepro32.dll
           5.1.2600.2180 - 5.1.2600.2180
[605D0000] C:\WINDOWS\system32\mslbui.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           LangageBar Add In
[629C0000] C:\WINDOWS\system32\LPK.DLL
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Language Pack
[662B0000] C:\WINDOWS\system32\hnetcfg.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Home Networking Configuration Manager
[71A50000] C:\WINDOWS\System32\mswsock.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft Windows Sockets 2.0 Service Provider
[71A90000] C:\WINDOWS\System32\wshtcpip.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Sockets Helper DLL
[71AA0000] C:\WINDOWS\system32\WS2HELP.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Socket 2.0 Helper for Windows NT
[71AB0000] C:\WINDOWS\system32\WS2_32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Socket 2.0 32-Bit DLL
[71AD0000] C:\WINDOWS\system32\wsock32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Socket 32-Bit DLL
[72D10000] C:\WINDOWS\system32\msacm32.drv
           5.1.2600.0 - 5.1.2600.0 (xpclient.010817-1148)
           Microsoft Sound Mapper
[72D20000] C:\WINDOWS\system32\wdmaud.drv
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           WDM Audio driver mapper
[73000000] C:\WINDOWS\system32\winspool.drv
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Spooler Driver
[732E0000] C:\WINDOWS\system32\RICHED32.DLL
           5.1.2600.0 - 5.1.2600.0 (xpclient.010817-1148)
           Wrapper Dll for Richedit 1.0
[73D90000] C:\WINDOWS\system32\CRTDLL.dll
           4.0.1183.1 - 4.00
           Microsoft C Runtime Library
[74720000] C:\WINDOWS\system32\MSCTF.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           MSCTF Server DLL
[74C80000] C:\WINDOWS\system32\OLEACC.dll
           4.2.5406.0 - 4.2.5406.0 (xpclient.010817-1148)
           Active Accessibility Core Component
[74D90000] C:\WINDOWS\system32\USP10.dll
           1.420.2600.2180 - 1.0420.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Uniscribe Unicode script processor
[74E30000] C:\WINDOWS\system32\RICHED20.dll
           5.30.23.1221 - 5.30.23.1221
           Rich Text Edit Control, v3.0
[755C0000] C:\WINDOWS\system32\msctfime.ime
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft Text Frame Work Service IME
[76080000] C:\WINDOWS\system32\MSVCP60.dll
           6.2.3104.0 - 6.02.3104.0
           Microsoft (R) C++ Runtime Library
[76380000] C:\WINDOWS\system32\msimg32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           GDIEXT Client DLL
[76390000] C:\WINDOWS\system32\imm32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows XP IMM32 API Client DLL
[763B0000] C:\WINDOWS\system32\comdlg32.dll
           6.0.2900.2180 - 6.00.2900.2180 (xpsp_sp2_rtm.040803-2158)
           Common Dialogs DLL
[76600000] C:\WINDOWS\System32\CSCDLL.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Offline Network Agent
[76B40000] C:\WINDOWS\system32\winmm.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           MCI API DLL
[76BF0000] C:\WINDOWS\system32\PSAPI.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Process Status Helper
[76C30000] C:\WINDOWS\system32\WINTRUST.dll
           5.131.2600.2180 - 5.131.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft Trust Verification APIs
[76C90000] C:\WINDOWS\system32\IMAGEHLP.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows NT Image Helper
[76F20000] C:\WINDOWS\system32\DNSAPI.dll
           5.1.2600.2938 - 5.1.2600.2938 (xpsp_sp2_gdr.060626-0020)
           DNS Client API DLL
[76F60000] C:\WINDOWS\system32\WLDAP32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Win32 LDAP API DLL
[76FB0000] C:\WINDOWS\System32\winrnr.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           LDAP RnR Provider DLL
[76FC0000] C:\WINDOWS\system32\rasadhlp.dll
           5.1.2600.2938 - 5.1.2600.2938 (xpsp_sp2_gdr.060626-0020)
           Remote Access AutoDial Helper
[76FD0000] C:\WINDOWS\system32\CLBCATQ.DLL
           2001.12.4414.308 - 2001.12.4414.308
[77050000] C:\WINDOWS\system32\COMRes.dll
           2001.12.4414.258 - 2001.12.4414.258
[77120000] C:\WINDOWS\system32\oleaut32.dll
           5.1.2600.2180 - 5.1.2600.2180
[773D0000] C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
           6.0.2900.2180 - 6.0 (xpsp_sp2_rtm.040803-2158)
           User Experience Controls Library
[774E0000] C:\WINDOWS\system32\ole32.dll
           5.1.2600.2726 - 5.1.2600.2726 (xpsp_sp2_gdr.050725-1528)
           Microsoft OLE for Windows
[77920000] C:\WINDOWS\system32\SETUPAPI.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows Setup API
[77A20000] C:\WINDOWS\System32\cscui.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Client Side Caching UI
[77A80000] C:\WINDOWS\system32\CRYPT32.dll
           5.131.2600.2180 - 5.131.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Crypto API32
[77B20000] C:\WINDOWS\system32\MSASN1.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           ASN.1 Runtime APIs
[77B40000] C:\WINDOWS\system32\apphelp.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Application Compatibility Client Library
[77BD0000] C:\WINDOWS\system32\midimap.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft MIDI Mapper
[77BE0000] C:\WINDOWS\system32\MSACM32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Microsoft ACM Audio Filter
[77C00000] C:\WINDOWS\system32\version.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Version Checking and File Installation Libraries
[77C10000] C:\WINDOWS\system32\msvcrt.dll
           7.0.2600.2180 - 7.0.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Windows NT CRT DLL
[77D40000] C:\WINDOWS\system32\user32.dll
           5.1.2600.2622 - 5.1.2600.2622 (xpsp_sp2_gdr.050301-1519)
           Windows XP USER API Client DLL
[77DD0000] C:\WINDOWS\system32\advapi32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Advanced Windows 32 Base API
[77E70000] C:\WINDOWS\system32\RPCRT4.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Remote Procedure Call Runtime
[77F10000] C:\WINDOWS\system32\GDI32.dll
           5.1.2600.2818 - 5.1.2600.2818 (xpsp_sp2_gdr.051228-1427)
           GDI Client DLL
[77F60000] C:\WINDOWS\system32\SHLWAPI.dll
           6.0.2900.2937 - 6.00.2900.2937 (xpsp_sp2_gdr.060623-0002)
           Shell Light-weight Utility Library
[77FE0000] C:\WINDOWS\system32\Secur32.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           Security Support Provider Interface
[7C340000] C:\Program Files\TASpring\MSVCR71.dll
           7.10.3052.4 - 7.10.3052.4
           Microsoft® C Runtime Library
[7C3A0000] C:\Program Files\TASpring\MSVCP71.dll
           7.10.3077.0 - 7.10.3077.0
           Microsoft® C++ Runtime Library
[7C800000] C:\WINDOWS\system32\kernel32.dll
           5.1.2600.2945 - 5.1.2600.2945 (xpsp_sp2_gdr.060704-2349)
           Windows NT BASE API Client DLL
[7C900000] C:\WINDOWS\system32\ntdll.dll
           5.1.2600.2180 - 5.1.2600.2180 (xpsp_sp2_rtm.040803-2158)
           NT Layer DLL
[7C9C0000] C:\WINDOWS\system32\shell32.dll
           6.0.2900.2951 - 6.00.2900.2951 (xpsp_sp2_gdr.060713-0009)
           Windows Shell Common Dll
----------------------------------------------------------------------------------------------------
Active Controls hierarchy:
TButton "StartButton"
TPanel "Panel3"
TBattleForm "BattleForm"
----------------------------------------------------------------------------------------------------

and trying to run the Spring test with NTai.dll using the XtaV7 mod got me this crash and error:

Code: Select all


---------------------------
Incorrect/Missing content:
---------------------------
Parse error 'brace or further name value pairs expected' in gamedata/SIDEDATA.TDF at line 991 column 16 near

---------------------------
OK   
---------------------------

Not really sure what's happening here. Odd that it worked ok before I wiped it all.

I'm wishing I had just left well enough alone now. :(
User avatar
rattle
Damned Developer
Posts: 8278
Joined: 01 Jun 2006, 13:15

Post by rattle »

XTA not working? That's odd... looks like a single { or } missing in the sidedata.tdf to me at some point...

All that SpringSP does it creating a script.txt and launching spring with it. I could hook you up with a basic one (or anyone else) which you'd have to edit manually and then run the spring.exe with it as parameter. So you don't really need the lobby, it does the same thing after all...
Bishounen
Posts: 14
Joined: 22 Aug 2006, 22:50

Post by Bishounen »

Well, I decided to try once more. So I backed up all the TS Spring folder contents (didn't want to have to re-download 2 + GB of maps again!) uninstalled the NTai V22 and TA Spring, and deleted the primary Spring directory.

Then I defragged and rebooted to clear my RAM.

I then re-installed the most recent version of TS Spring and tested. I could play the test version just fine.

I reinstalled all the maps and mods and tested. Still working.

I updated online and tested. Still working.

I installed the AAI AI files and tested. Still working.

I installed the latest NTai using the V22 exe installer and tested SP Spring. FAILURE: Same errors as before.

HOWEVER, this time the Spring test version and the multiplayer lobby are working just fine, no errors there yet.

The only thing I can think is that I somehow installed something incorrectly the first time around and that corrupted the online lobby.

So I guess the issue is with SP Spring, but I have no idea what changed, as it was working fine with both V19 and V22 Before the very first time I wiped everything. Now the SP version of Spring just flat out refuses to load the mods, even XTA.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

do a complete erasal. Uninstall everythign todo with sprign then go in and manually delete everything thats been left behind. Run chdisk after it.

Then install sprign and try to run the default mod+map with TASClient. Dont install any other mods maps AI's etc till you're done.
Bishounen
Posts: 14
Joined: 22 Aug 2006, 22:50

Post by Bishounen »

do a complete erasal. Uninstall everythign todo with sprign then go in and manually delete everything thats been left behind. Run chdisk after it.

Then install sprign and try to run the default mod+map with TASClient. Dont install any other mods maps AI's etc till you're done.
See above ^

That's what I just did, minus the chkdsk. Everything except SP Spring is working normally now. I just finished playing a game against a bot (I hosted a game with the multiplayer lobby and password locked it.) and it worked fine, except the AI planted the bot on top of a ridge it couldn't get down from. I won with a single bomber. :)
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

AI's dont work with choose pos ingame, you need either fixed or random.

The only way to make it work is to type .cheat then take control of the AI's team and manually set the position yourself
Tobi
Spring Developer
Posts: 4598
Joined: 01 Jun 2005, 11:36

Post by Tobi »

AF, would you be so kind to patch NTAI for multiple datadir support yourself?

it works like this:

Code: Select all

void example_load_file(std::string filename) {
  char buffer[1000];
  strcpy(buffer, filename.c_str());
  cb->GetValue(AIVAL_LOCATE_FILE_R, buffer);
  std::ifstream ifs(buffer);
  /* read file */
}
For saving, replace AIVAL_LOCATE_FILE_R with AIVAL_LOCATE_FILE_W.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

I'm not working on it currently, I'll eventually get round to doing it.

But that could very well be a vriable amount of time + ETA of 0.73b1.

I have been developing NTai using 0.72b1 source and I dont want to incorporate code that depends on 0.73b1 features untill I can safely compile and release the NTai source using 0.73 source without issues, which means 0.73b1 must eb released.

This is why i havent implemented my terrain analysis or my build placement algorithm. There are numerous thigns I want to do but I refuse to do them untill 0.73b1 is released.

So for now I wont do anything that wont compile under both 0.73b1 and 0.72b1, especially since it seems I need to do an rc23 with the SSE removed as rattle pointed out, a few updates and new buildtrees.
Tobi
Spring Developer
Posts: 4598
Joined: 01 Jun 2005, 11:36

Post by Tobi »

Sure.

As long as you don't complain if I put a NTAI without multi datadir support (ie. essentially a broken NTAI [on linux]), or no NTAI at all, in the 0.73 source tarball.

Note though that the above does actually compile & run on both as long as you add

Code: Select all

#ifndef AIVAL_LOCATE_FILE_R
#define AIVAL_LOCATE_FILE_R <pick the number from the AICallback.h>
#define AIVAL_LOCATE_FILE_W <pick the number from the AICallback.h>
#endif
in some generic header.

(That's the entire point of the extension mechanism FYI)
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

char buffer[1000];
strcpy(buffer, filename.c_str());
cb->GetValue(AIVAL_LOCATE_FILE_R, buffer);
Could you be more obvious for me please? I pass it what and get what in return, and please give examples so i know exactly how it works.
Tobi
Spring Developer
Posts: 4598
Joined: 01 Jun 2005, 11:36

Post by Tobi »

EDIT: Just look in this post.
User avatar
AF
AI Developer
Posts: 20687
Joined: 14 Sep 2004, 11:32

Post by AF »

All NTai loading paths are relative paths aka *folder containing spring.exe*/AI/NTai/


Thus a patch would be very simple, a modification of Helper::Readfile() and to the bits it saves, primarily Global::SaveUniData() and the save routine of krogothes mex class.
Post Reply

Return to “AI”