AI Pathing Question

For me to finish the map I have to do the AI pathing for the minion which is becoming extremly annoying. The pathing appears to be set in the _save.lua file using the ['hint'] and the ['adjacentTo'] in tables. But the game seems to ignore the data and have the walk where ever they want. Any help would be appericated.

 

The Mod.lua say

 

 

Adding extra maps

 

   Any extra maps in a mod will automatically show up on the available maps list on

   the single- and multi-player skirmish screen, as long as they have an appropriate

   Configuration set up.

 

   If you select a map from a mod for play, that mod (and any other mods it depends on)

   will automatically be active for that session. This allows you to define custom

   units or props just for a particular set of maps.

 

 

Do we have confirmation on how their configuration should be set up.

 

Also what is a shadow directory

4,100 views 12 replies
Reply #1 Top

Nevermind. Someone complain about me not finishing beach so I can be motivated to work on it.

Reply #2 Top

What we really NEED is more maps....so any work u do on a map is really appreciated...

 

keep on the work  :thumbsup:

Reply #3 Top

Quoting Microstar, reply 2
What we really NEED is more maps....so any work u do on a map is really appreciated...

^Yep, what he said.  It's really great to see all of the new modding activity.  However, new maps are desperately needed.

Reply #4 Top

Maps the size of cataract/prison are desperately needed.

Reply #5 Top

Quoting Trigeminal, reply 4
Maps the size of cataract/prison are desperately needed.

Yep. Or at least maps suited for 3v3 battles.

Reply #6 Top

GPG AI script is extremly frustrating to deal with (Refer to SupCom for more info.) They do pathing in a extremly odd way which is making it difficult to get the map out. 

Reply #8 Top

So, looking at the files, it seems that it would be a great thing for someone to write up a pathmaking utility. It also seems that this will probably all be provided in the SDK (if we get it).

So, this is what I read out of it.

the *save.lua contains a series of points. These points are the locations of various features, namely spawn points (The locations minions come from), waypoints (the points that outline the path minions follow), and objectives (the destination of the minion, typically the enemy citadel).

For AI routes, it seems we'd want to stay with the waypoints. So, let's see what we would need.

The route plan, it seems to be these chains.

Code: c++
  1.     Chains = {
  2.         ['TEAM_1_CHAIN_1'] = {
  3.             Markers = {
  4.                 "PATH_2_2",
  5.                 "PATH_1_1",
  6.                 "TEAM_2_OBJECTIVE",
  7.             },
  8.         },
  9.         ['TEAM_1_CHAIN_1_JUDAS'] = {
  10.             Markers = {
  11.                 "TEAM_1_OBJECTIVE",
  12.             },
  13.         },
  14.         ['TEAM_2_CHAIN_1'] = {
  15.             Markers = {
  16.                 "PATH_1_2",
  17.                 "PATH_2_1",
  18.                 "TEAM_1_OBJECTIVE",
  19.             },
  20.         },
  21.         ['TEAM_2_CHAIN_1_JUDAS'] = {
  22.             Markers = {
  23.                 "TEAM_2_OBJECTIVE",
  24.             },
  25.         },
  26.      },

The route plans need path Markers, Objectives, and Spawn points. The Judas Spawns seem to be called when portals are captured by the other team.

Code: c++
  1.     MasterChain = {
  2.         ['_MASTERCHAIN_'] = {
  3.             Markers = {
  4.                 ['TEAM_1_SPAWN_1'] = {
  5.                     ['size'] = FLOAT( 5.000000 ),
  6.                     ['SpawnTableName'] = STRING( 'GOOD_DEFAULT' ),
  7.                     ['PortalName'] = STRING( 'TEAM_1_PORTAL_1' ),
  8.                     ['ArmyName'] = STRING( 'TEAM_1' ),
  9.                     ['color'] = STRING( 'ff800080' ),
  10.                     ['type'] = STRING( 'Conquest Spawner' ),
  11.                     ['ChainName'] = STRING( 'TEAM_1_CHAIN_1' ),
  12.                     ['prop'] = STRING( '/env/common/props/markers/M_Hydrocarbon_prop.bp' ),
  13.                     ['orientation'] = VECTOR3( 0.785398, -0, 0 ),
  14.                     ['position'] = VECTOR3( 219.5, 99.8828, 171.5 ),
  15.                 },
  16.                 ['TEAM_1_SPAWN_1_JUDAS'] = {
  17.                     ['size'] = FLOAT( 5.000000 ),
  18.                     ['SpawnTableName'] = STRING( 'EVIL_DEFAULT' ),
  19.                     ['PortalName'] = STRING( 'TEAM_1_PORTAL_1' ),
  20.                     ['ArmyName'] = STRING( 'TEAM_2' ),
  21.                     ['color'] = STRING( 'ff800080' ),
  22.                     ['type'] = STRING( 'Conquest Spawner' ),
  23.                     ['ChainName'] = STRING( 'TEAM_1_CHAIN_1_JUDAS' ),
  24.                     ['prop'] = STRING( '/env/common/props/markers/M_Hydrocarbon_prop.bp' ),
  25.                     ['orientation'] = VECTOR3( 0.785398, -0, 0 ),
  26.                     ['position'] = VECTOR3( 220.711, 100, 172.587 ),
  27.                 },
  28.                 ['PATH_1_1'] = {
  29.                     ['color'] = STRING( 'ff800080' ),
  30.                     ['type'] = STRING( 'Blank Marker' ),
  31.                     ['prop'] = STRING( '/env/common/props/markers/M_Blank_prop.bp' ),
  32.                     ['orientation'] = VECTOR3( 0, -0, 0 ),
  33.                     ['position'] = VECTOR3( 228.5, 99.8828, 310.5 ),
  34.                 },
  35.                 ['PATH_2_2'] = {
  36.                     ['color'] = STRING( 'ff800080' ),
  37.                     ['type'] = STRING( 'Blank Marker' ),
  38.                     ['prop'] = STRING( '/env/common/props/markers/M_Blank_prop.bp' ),
  39.                     ['orientation'] = VECTOR3( 0, -0, 0 ),
  40.                     ['position'] = VECTOR3( 228.5, 99.8828, 202.5 ),
  41.                },
  42.              ['TEAM_1_OBJECTIVE'] = {
  43.                     ['color'] = STRING( 'ff800080' ),
  44.                     ['type'] = STRING( 'Blank Marker' ),
  45.                     ['prop'] = STRING( '/env/common/props/markers/M_Blank_prop.bp' ),
  46.                     ['orientation'] = VECTOR3( 0, -0, 0 ),
  47.                     ['position'] = VECTOR3( 256.5, 99.8828, 183.5 ),
  48.                 },
  49. }

 

Each point has a position[x,y,z] (Strangely enough some waypoints are not on the horizon. That's curious. I'm not talking about where eyecandy features are located either, but regular flag waypoints).

There are other location markers, such as:

 

Code: c++
  1.              ['LandPN65'] = {
  2.                     ['hint'] = BOOLEAN( true ),
  3.                     ['graph'] = STRING( 'DefaultLand' ),
  4.                     ['adjacentTo'] = STRING( 'LandPN74 LandPN66 ConquestFlagPN07 LandPN57 LandPN60 LandPN01' ),
  5.                     ['color'] = STRING( 'ff00ff00' ),
  6.                     ['type'] = STRING( 'Land Path Node' ),
  7.                     ['prop'] = STRING( '/env/common/props/markers/M_Path_prop.bp' ),
  8.                     ['orientation'] = VECTOR3( 0, -0, 0 ),
  9.                     ['position'] = VECTOR3( 234.5, 100, 176.5 ),
  10.                 },

This seems to be a marker for demigod AIs. I also remember reading something, somewhere about displaying paths and markers on the map using the console. I'm going to post this and look around for those notes.

Reply #9 Top

Okay sorry let me explain what I know.

 

Basically Portal release grunt along a predetermined path called a CHAIN. The chain is made up of a sequence of points with lua code that looks like this

['PATH1_N_5'] = {

                    ['color'] = STRING( 'ff800080' ),

                    ['type'] = STRING( 'Blank Marker' ),

                    ['prop'] = STRING( '/env/common/props/markers/M_Blank_prop.bp' ),

                    ['orientation'] = VECTOR3( 0, -0, 0 ),

                    ['position'] = VECTOR3( 384.5, 99.9922, 301.5 ),

                },

 

These points are chain together in the Chain table (placed after the Markers Chain) and looks like this

['NEUTRAL_CHAIN_1'] = {

            Markers = {

                "PATH1_N_1",

                "PATH1_N_2",

                "PATH1_N_3",

                "PATH1_N_4",

                "PATH1_N_5",

                "PATH1_N_6",

                "PATH1_N_7",

                "PATH1_N_8",

                "PATH1_N_9",

                "PATH1_N_10",

                "TEAM_2_OBJECTIVE",

            },

        },

They tie into the portal in two places. In the Marker Chain with a table entry like this

 

 ['ARTIFACT_PORTAL_KILLEVIL'] = {

                    ['size'] = FLOAT( 5.000000 ),

                    ['SpawnTableName'] = STRING( 'GOOD_DEFAULT' ),

                    ['PortalName'] = STRING( 'ARTIFACT_PORTAL' ),

                    ['ArmyName'] = STRING( 'TEAM_1' ),

                    ['color'] = STRING( 'ff800080' ),

                    ['type'] = STRING( 'Conquest Spawner' ),

                    ['ChainName'] = STRING( 'ARTIFACT_PORTAL_KILLEVIL' ),

                    ['prop'] = STRING( '/env/common/props/markers/M_Hydrocarbon_prop.bp' ),

                    ['orientation'] = VECTOR3( 1.5708, -0, 0 ),

                    ['position'] = VECTOR3( 97.5, 99.9922, 256.5 ),

                },

 

And in the Army definition section 

['TEAM_1_PORTAL_1'] = {

                                        type = 'ugbportal01',

                                        orders = '',

                                        platoon = '',

                                        Position = { 247.500000, 100.000000, 131.500000 },

                                        Orientation = { 0.000000, 6.283185, 0.000000 },

Both have to appear in the LUA for the portal to appear. The Army one provide the position and ownership information the Marker Chain includes information such as which Chain it uses

Reply #10 Top

Now for AI pathing. For Player the pathing is defined in the SCMAP file as height map. If everyone is playing Assasin I have no problem. The problem is the pathing for minions is controled via a series of markers. Usually referened with this code.

 

 

['LandPN92'] = {

                    ['hint'] = BOOLEAN( true ),

                    ['graph'] = STRING( 'DefaultLand' ),

                    ['adjacentTo'] = STRING( 'LandPN22 LandPN85 ConquestFlagPN01 LandPN88 LandPN101 LandPN102' ),

                    ['color'] = STRING( 'ff00ff00' ),

                    ['type'] = STRING( 'Land Path Node' ),

                    ['prop'] = STRING( '/env/common/props/markers/M_Path_prop.bp' ),

                    ['orientation'] = VECTOR3( 0, -0, 0 ),

                    ['position'] = VECTOR3( 146.5, 99.9922, 279.5 ),

                },

The markers create a web over the map defining the area in which a AI figure can walk the problem is that the AI seems to ignore it. When I program it in any area which is even slightly complicated. It ignore it completely. I

 

Reply #11 Top

So the problem is only occuring with idol summons and demigod specific units? Is this the same issue that was posted a while back wherein these units walk straight through buildings? Can you be more specific about the behavior of the units?

Reply #12 Top

Basically they simply ignore the pathing data and treat the entire map as a open plane to walk on.