This map is about to begin Beta testing again, due to a massive change in the food system and the AI.
Here is the AI as it currently stands. It is almost assuredly going to be a massive and spectacular failure, and probably will not work, but it is where I have headed with this so far.
[hidden="AI System]
-
AI
-

Events
-

Conditions
-

Actions
-


Set Temp_UG[1] = (Units in Rain <gen> matching (((Triggering unit) is Mechanical) Equal to False))
-


Unit Group - Pick every unit in Temp_UG[1] and do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






(Owner of (Picked unit)) Not equal to Player 1 (Red)
-






(Owner of (Picked unit)) Not equal to Player 2 (Blue)
-






(Owner of (Picked unit)) Not equal to Player 3 (Teal)
-






(Owner of (Picked unit)) Not equal to Player 4 (Purple)
-






(Owner of (Picked unit)) Not equal to Player 5 (Yellow)
-






(Owner of (Picked unit)) Not equal to Player 6 (Orange)
-






(Owner of (Picked unit)) Not equal to Player 7 (Green)
-






(Owner of (Picked unit)) Not equal to Player 8 (Pink)
-





Then - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








(Load 0 of (Key (Picked unit)) in AI) Equal to No unit
-







Then - Actions
-








-------- has no leader --------
-








Set Temp_Pt[1] = (Position of (Picked unit))
-








-------- Below: finds someone who Leads Himself. --------
-








Set Temp_UG[2] = (Units within 1600.00 of Temp_Pt[1] matching (((Load 0 of (Key (Matching unit)) in AI) Equal to (Matching unit)) and ((Unit-type of (Picked unit)) Equal to (Unit-type of (Matching unit)))))
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










(Number of units in Temp_UG[2]) Greater than or equal to 1
-









Then - Actions
-










Set Temp_UG[3] = (Random 1 units from Temp_UG[2])
-









Else - Actions
-










Set Temp_UG[4] = (Units within 1600.00 of Temp_Pt[1] matching (((Load 0 of (Key (Matching unit)) in AI) Equal to (Matching unit)) and ((Unit-type of (Picked unit)) Equal to (Unit-type of (Matching unit)))))
-










Set Temp_UG[3] = (Random 1 units from Temp_UG[4])
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












(Number of units in Temp_UG[3]) Greater than or equal to 1
-











Then - Actions
-












Hashtable - Save Handle Of(Random unit from Temp_UG[3]) as 0 of (Key (Random unit from Temp_UG[3])) in AI
-











Else - Actions
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










(Number of units in Temp_UG[3]) Greater than or equal to 1
-









Then - Actions
-










Hashtable - Save Handle Of(Random unit from Temp_UG[3]) as 0 of (Key (Picked unit)) in AI
-









Else - Actions
-










-------- Nobody to follow. --------
-










-------- Needs to move this unit to a new location. --------
-










Set RandomArray[1] = (Random integer number between 1 and 25)
-










Set Temp_Pt[2] = (Random point in RegionLocation[RandomArray[1]])
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












(Level of Eat Meat for (Picked unit)) Greater than or equal to 1
-












(Load 1 of (Key (Picked unit)) from AI) Less than or equal to ((Integer((Max life of (Picked unit)))) / 12)
-











Then - Actions
-












-------- Hungry Carn --------
-












Unit - Order (Picked unit) to Attack-Move To Temp_Pt[2]
-











Else - Actions
-












-------- Herb or Not Hungry --------
-












Unit - Order (Picked unit) to Move To Temp_Pt[2]
-







Else - Actions
-








-------- 0 Is not No unit --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










(Load 0 of (Key (Picked unit)) in AI) Not equal to (Picked unit)
-









Then - Actions
-










-------- 0 Is not no unit, Is not Self --------
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












(Load 0 of (Key (Load 0 of (Key (Picked unit)) in AI)) in AI) Equal to (Load 0 of (Key (Picked unit)) in AI)
-











Then - Actions
-












-------- Leader leads himself --------
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














(Owner of (Picked unit)) Not equal to (Owner of (Load 0 of (Key (Picked unit)) in AI))
-














((Owner of (Load 0 of (Key (Picked unit)) in AI)) is in ActivePlayers) Equal to False
-













Then - Actions
-














Unit - Change ownership of (Picked unit) to (Owner of (Load 0 of (Key (Picked unit)) in AI)) and Change color
-













Else - Actions
-












Set Temp_Pt[1] = (Position of (Picked unit))
-












Set Temp_Pt[2] = (Position of (Load 0 of (Key (Picked unit)) in AI))
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














(Distance between Temp_Pt[1] and Temp_Pt[2]) Greater than 1100.00
-













Then - Actions
-














Set Temp_Pt[3] = (Temp_Pt[2] offset by (Random real number between 200.00 and 800.00) towards (Random angle) degrees)
-














If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-















If - Conditions
-
















(Level of Eat Meat for (Picked unit)) Greater than or equal to 1
-
















(Load 1 of (Key (Picked unit)) from AI) Less than or equal to ((Integer((Max life of (Picked unit)))) / 12)
-















Then - Actions
-
















Unit - Order (Picked unit) to Attack-Move To Temp_Pt[3]
-















Else - Actions
-
















Unit - Order (Picked unit) to Move To Temp_Pt[3]
-













Else - Actions
-











Else - Actions
-












-------- Leader does not lead himself, so abandon the leader. --------
-












Hashtable - Save Handle OfNo unit as 0 of (Key (Picked unit)) in AI
-












Unit - Order (Picked unit) to Stop
-









Else - Actions
-










-------- 0 Is not no unit, Is Self --------
-










-------- This is for the AI of the leaders. --------
-










Set Temp_UG[2] = (Units in Rain <gen> matching ((Load 0 of (Key (Matching unit)) in AI) Equal to (Picked unit)))
-










Set Temp_UG[3] = (Units in Rain <gen> matching (((Load 0 of (Key (Matching unit)) in AI) Equal to (Picked unit)) and ((Load 1 of (Key (Matching unit)) from AI) Less than or equal to ((Integer((Max life of (Picked unit)))) / 12))))
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












(Level of Eat Meat for (Picked unit)) Greater than or equal to 1
-











Then - Actions
-












-------- Packs --------
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














(Number of units in Temp_UG[3]) Greater than 1
-













Then - Actions
-














If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-















If - Conditions
-
















(Owner of (Picked unit)) Equal to Player 10 (Light Blue)
-
















Or - Any (Conditions) are true
-

















Conditions
-


















(Random integer number between 1 and 30) Equal to 1
-


















(Owner of (Picked unit)) Equal to Player 9 (Gray)
-















Then - Actions
-
















Unit - Change ownership of (Picked unit) to Player 10 (Light Blue) and Change color
-
















Set Temp_Pt[1] = (Position of (Picked unit))
-
















Set Temp_Pt[2] = (Temp_Pt[1] offset by (Random real number between 800.00 and 3000.00) towards (Random angle) degrees)
-
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-

















If - Conditions
-


















(Rain <gen> contains Temp_Pt[2]) Equal to False
-

















Then - Actions
-


















Set RandomArray[1] = (Random integer number between 1 and 25)
-


















Set Temp_Pt[3] = (Random point in RegionLocation[RandomArray[1]])
-


















Unit - Order (Picked unit) to Attack-Move To Temp_Pt[3]
-

















Else - Actions
-


















Unit - Order (Picked unit) to Attack-Move To Temp_Pt[2]
-















Else - Actions
-
















Unit - Change ownership of (Picked unit) to Player 9 (Gray) and Change color
-
















Set Temp_Pt[1] = (Position of (Picked unit))
-
















Set Temp_Pt[2] = (Temp_Pt[1] offset by (Random real number between 800.00 and 3000.00) towards (Random angle) degrees)
-
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-

















If - Conditions
-


















(Rain <gen> contains Temp_Pt[2]) Equal to False
-

















Then - Actions
-


















Set RandomArray[1] = (Random integer number between 1 and 25)
-


















Set Temp_Pt[3] = (Random point in RegionLocation[RandomArray[1]])
-


















Unit - Order (Picked unit) to Attack-Move To Temp_Pt[3]
-

















Else - Actions
-


















Unit - Order (Picked unit) to Attack-Move To Temp_Pt[2]
-













Else - Actions
-














If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-















If - Conditions
-
















(Owner of (Picked unit)) Equal to Player 10 (Light Blue)
-















Then - Actions
-
















Unit - Change ownership of (Picked unit) to Player 9 (Gray) and Change color
-















Else - Actions
-
















If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-

















If - Conditions
-


















(Owner of (Picked unit)) Equal to Player 9 (Gray)
-

















Then - Actions
-


















Unit - Change ownership of (Picked unit) to Player 11 (Dark Green) and Change color
-

















Else - Actions
-











Else - Actions
-












-------- Herds --------
-












Set Temp_Pt[1] = (Position of (Picked unit))
-












Set Temp_UG[4] = (Units within 1300.00 of Temp_Pt[1] matching ((Level of Eat Meat for (Matching unit)) Greater than or equal to 1))
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














((Number of units in Temp_UG[4]) x (Integer((Max life of (Random unit from Temp_UG[4]))))) Greater than or equal to ((Number of units in Temp_UG[3]) x ((Integer((Max life of (Picked unit)))) / 4))
-













Then - Actions
-














Set Temp_Pt[2] = (Position of (Random unit from Temp_UG[4]))
-














Set Temp_Pt[3] = (Temp_Pt[1] offset by (Random real number between 800.00 and 3000.00) towards ((Angle from Temp_Pt[1] to Temp_Pt[2]) + (Random real number between -45.00 and 45.00)) degrees)
-














If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-















If - Conditions
-
















(Rain <gen> contains Temp_Pt[2]) Equal to False
-















Then - Actions
-
















Set RandomArray[1] = (Random integer number between 1 and 25)
-
















Set Temp_Pt[4] = (Random point in RegionLocation[RandomArray[1]])
-
















Unit - Order (Picked unit) to Move To Temp_Pt[4]
-















Else - Actions
-
















Unit - Order (Picked unit) to Move To Temp_Pt[3]
-













Else - Actions
-





Else - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








CivilizedLevel[(Player number of (Owner of (Picked unit)))] Equal to 0
-







Then - Actions
-








Hashtable - Save Handle Of(Picked unit) as 0 of (Key (Picked unit)) in AI
-







Else - Actions
[/hidden]
As soon as I integrate the new food system into this and do a last "mental exercise" runthrough of the AI, I will be running betatests of the new and improved AI.
What I think this should do is have "heads" of herds. These dinosaurs will be the focal point of movement by other NPC dinos. Dinos will change to the player color of their pack leader (unless that pack leader is a player, in which case they will remain whatever color they currently are, which is changed by pack commands as usual.)
NPC dinosaurs who are hungry will attack-move to the vicinity of their pack leader. Others will just move.
Pack leaders will turn hungry and then aggressive if they cannot feed their pack. Since starving members eventually die, it allows the ecosystem to manage itself a little better. They also no longer run so randomly. Herbivores running only run if they have less than 4 times the mass of a carnivore pack. (That means 2 huge dinosaur will not run unless there are at least 4 small, 2 medium, or 1 large carnivore nearby.) They will also run away from a carnivore, rather than in a random direction. They will continue to run away from carnivores until they are no longer close to one.
There will be a lot more hungry dinosaurs because of this, I am certain. As such, carnivores may gain slow poison as their cripple instead. This will be something that needs to be tested in beta tests.
All commands will work relatively the same, although follow is now a command to bring nearby units into your pack/herd, and Banish is now something to evict them from your herd. Banish will still make them walk away to avoid confusion, but follow will no longer act as instantaneously, and will now require you to be much closer to the dinos before it affects them. (Once you get them in your pack, they will stay by you no matter what.)
I plan to overhaul the system that changes units into fighting dinosaurs as well, so as to ensure that two rival packs can fight. That is a project for future consideration and not immediate though.