• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Life of a Dinosaur

Is the Map ready for release?

  • Yes

    Votes: 6 100.0%
  • No

    Votes: 0 0.0%

  • Total voters
    6
Status
Not open for further replies.
Level 5
Joined
Aug 7, 2007
Messages
117
This map has been uploaded as a finished resource.

It may be found HERE.

The "C" variant of the Terrain will be attached to this thread.




Attached is also an "Improved AI" beta. It currently creates such lag that the map is practically unplayable, but for the masochists out there, you are welcome to give it a go.
 

Attachments

  • LoaD_1_4_C.w3x
    3.7 MB · Views: 180
  • LoaD_1_5_L_BETA.w3x
    3.7 MB · Views: 128
Last edited:
Level 5
Joined
Aug 7, 2007
Messages
117
If you die in the first 5 minutes, you get another chance. At the 5 minute mark, you will be given a Protoceratops. It is also given to you if you don't pick anything.

I know about the terrain. Here's the full story.
I started by making a request for terrain. I ended up with Midnighters accepting. He made no progress for a week, so I searched for another. Leet.Firefox offered to help and worked on it. He said he finished it and he'd send it to me. I waited for months to get it and never did, and eventually I learned he had lost the finished terrain map. After that I asked sheephunter to do it. The current terrain is a result of a combination of the quick terrain I did for the testing (Tree placement) combined with the work sheephunter did (texture and terrain deformations). I never saw either Midnighters or leet.firefox's efforts, though I did see a screenshot of leet.firefox's work and was much impressed by it.
If anyone actually wants to terrain the map, I am open to letting them, but right now it doesn't look like that will happen.

As for 4 corpses, I think you were one of the following dinosaurs:
Iguanodon, Diplodocus, Parasaurolophus, Suchomimus, Triceratops, Tyrannosaurus Rex, or Therizinosaurus. I suspect you might have been a T-Rex.
Huge-sized dinosaurs drop 4 corpses on death. Large 3, Med 2, Small 1.
 
Level 5
Joined
Aug 7, 2007
Messages
117
I believe there will be no bugs in the current version. I still have some terrain adjustments I want to do before a final release, but I think I might be just about there when it comes to a finished map. As such, I would appreciate some "dummy reviews" of the map, where I can examine the good, bad, and ugly of gameplay concepts and determine if I should change them or not. I'd also like opinions from people who feel this map isn't ready for release, and the reasons why.

Thanks everyone!
 
Level 5
Joined
Aug 7, 2007
Messages
117
The newest, "Practically Complete" version is up. This version should be stable, Polished, and bug free. Minus the loading screen shouting "THIS IS A BETA MAP", it shouldn't require any more tweaks.

I would greatly appreciate some "Reviewed if it were a finished map" kind of feedback. Harsh or kind, Spam or thought-provoking, I'm basically looking to see if it truly is ready to be a finished resource.

Please Provide feedback! Thank you!
 
Level 5
Joined
Aug 7, 2007
Messages
117
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.
 
Level 5
Joined
Aug 7, 2007
Messages
117
Progress report:

I have gotten the AI and food systems in. The food system appears to work. The AI doesn't seem to work yet.

The whole mess generates lag as well. I'm not sure how to deal with it yet. Right now I have it set up to run every second, but it skips every other one, so it runs every 2 seconds. The "Minutes" trigger also runs every 2 seconds, opposite of the AI. This ensures that they don't hit at the same time.

I am thinking about splitting the 18 species into five parts, and running it every 0.2 seconds instead. That should process only 120 units at once at its max with default settings, which is much easier to deal with. I'll offset it so that there is a brief gap between it and the minutes trigger.

The AI still doesn't work right though, and my priority is getting that to work.
 
Level 5
Joined
Aug 7, 2007
Messages
117
Progress Report:
The AI still exhibits lag, although the scale has decreased. It is steady, and the game remains unplayable. I have released the "current beta" in its current state due to the fact that my ability to edit this seems to be slipping away. The lag problem seems to be associated with the leadership decision tree in the AI code. Hopefully I will find the source of the problem soon and fix it.
 
Status
Not open for further replies.
Top