These past two weeks have been very busy for Dinosaur Battlegrounds. We now have a team of 4 developers! Several things have been added since the last post including a player stats screen created by John (John’s LinkedIn), a localized damage system with attack and defense multipliers created by David (David’s LinkedIn), a foliage swapping system done by Yaniel for touch bending, and more AI work done by myself.
For the character screen, John shows all of the player’s current stats. The dinosaurs have several different stats to work on and it’s quite easy to keep track of them all on the left side of this screen. On the right side, the screen John listed the experience and health related stats. At the very top right John made a real time rendering of the player’s dinosaur. One issue we both looked at together was trying to remove the skybox background from the render without having to make a second dinosaur off in the distance is somewhat of a green room. While the design of the screen is still in the works with the Game Design Master students, I think it’s great that we have all the functionality in place!
For David’s localized damage, he added a bunch more colliders to detect where we are getting hit from and made a blocking multiplier which could help a dinosaur resist taking some damage. He also made an attacking multiplier so that an attacking dinosaur could potentially deal more damage than another dinosaur. That should make for some interesting tactics!
While it’s not yet complete with touch bending, Yeni made a system that swaps out landscape instances with BluePrints of that same plats type when the player approaches it. The BP retains the transform of the instance so that the swap is seamless. When the player leaves the area of plant, it swaps right back to a foliage instance to save of the computer’s demands.
These are just a couple of things we have added over the past two weeks with more to come! Since both John and I only have two weeks left of Final Project, it’s crunch time and we all would like to see a bunch more stuff added before graduation!
Until next time,
Hey guys! Recently I’ve been playing with the Magic Leap SDK. You can check out what I’ve been doing here. Thanks for watching!
Thankfully it’s a common theme for this project, but everything is still running smoothly for Dinosaur Battlegrounds. This past week I’ve been trying to implement more AI (Pawn hearing) and I even made a tutorial for SGX on Wednesday. At SGX, we had three UX students from Full Sail who tested ten players on the game. They had each person fill out a survey before and after the game and had five of them test using keyboard then controller, and had the other five test using controller then keyboard. While they tested the players, I was able to stand back with a notebook and take notes of others playing the game.
The results of the survey are quite interesting. For instance, 30% of the players preferred PlayStation, 30% preferred Xbox, and 40% preferred PC as their gaming platform of choice. It became quite obvious to me that a lot of people aren’t familiar with the standard WASD for PC gaming during or testing, and I think these numbers reflect that. It made me realize that I should have made separate tutorials for keyboard and controller since the tutorial goes over the controls. I now also realize that I have to stop focusing mainly on PC but keep the console players in mind all the time when developing.
The next steps I have in the game are to make some functionality that determines whether the player is using a keyboard or controller and detect if the input device has changed mid game. Then I need to make a second tutorial from controllers that will switch in and out with the first one depending on the input device being used. I also need to finish pawn hearing at some point. I’d really like to be heard by the AI when I’m standing this close…
Until next time,
All continues to be well in Dinoland after this past week’s work. AI has been moved to C++ and I have created a simple Finite State Machine to control it’s logic of currently only guarding a point ( a temporary nest Blue Print I made).
Even though it’s very simple, I’m still quite proud of what I have made this little dino do though my FSM. The FSM handles every case that could happen when guarding it’s point. When the player, or any other dino AI walks relatively close to it, the dinosaur will stand up from it’s resting position and roar at the opposing dinosaur every 10 – 20 seconds. If the opposing dinosaur wanders around this warning area, the AI will spin around keeping an eye on them. If the AI wanders too far away from it’s Point Of Interest, it will return to it and spin around again to return looking at the opposing dinosaur. Say the player or opposing AI walks a little closer. The AI will then start charging at that dinosaur and attack when near. Again, if the AI wanders too far from it’s POI, it will return to it. However, if the opposing dinosaur is closer to the AI’s POI than itself, the AI will prioritize attacking the opposing dinosaur rather than returning to it’s POI. If the opposing dinosaur runs away, the AI will run back to it’s POI and return to it’s resting state. If the AI no longer detects a threat, such as after it’s killed the opposing dinosaur, it will run back to it’s POI but slow down to a walk as it gets closer, almost as if it is worn out, and return to resting. Yeah, that’s a lot. I’m really looking forward to presenting it at SGX this week to see what people think.
Moving forward, my next steps is to try to get audio working correctly in the game. I think that once we get the background music going and the combat music layered on top of it in game, it will really engage the player with the project. My audio guys have requested using Wwise for the project of which I am familiarizing myself with now. I’ve had a little bit of difficulty understanding it and getting Unreal to play nicely with it but that is where I stand today. Hopefully I can figure it our before SGX this Wednesday.
Until next time,
Between the busyness of life and summer break, it looks like I missed a post! So here’s the past two weeks of progress on my final project Dinosaur Battlegrounds. Progress has been going full speed over these weeks. Mostly I have been focusing on AI movement and logic. I derived two pawns from my base torosaurus class in BluePrints to work on this.
The first pawn I made was to figure out the logic of movement for the AI dinos. Because I have to use my own move forward and move right functions, my AI needs to know what movement functions to call and what input to give them each frame we need movement. That took a little bit to figure out but once I got that going and got the AI to follow me, I moved on to turning this now self moving AI into a raging dinosaur that always wanted to kill the player.
After tweaking movement around a bit, I moved on to making a different behavior on the second pawn. I copied the BluePrint from the first pawn over and removed the bit of attacking code I made. I then made it randomly select a point within a range of -500 to 500 of the actor’s current location on both the X and Y axis. If the point if valid on the navmesh, the dino then starts heading to that point. This random selection happens every 10 seconds.
Getting the dinosaur moving at all was a task I am proud of. As it stands, I am currently using Unreal’s path finding to get a list of path points to the goal destination. I then am making a steering angle using the AI’s rotation and the first path point position. Using that steering angle, I and able to guide the AI to it’s destination. It’s all quite simple really.
My next big tasks are to translate the AI logic I have made in BluePrints into c++, add logic to search for food and water, add logic to make a dino guard a point, and put it all together with a finite state machine. Cake!
Until next time,
Hey all! Here’s the video we will be displaying at Full Sail’s Student Game Expo later today. It shows some of the many features we are making that are still in very early development. Thanks for watching!
Just as the other weeks have been, this past week has been very productive indeed. Animations such as swimming have been added to the torosaurus along with matching swimming behavior (drowning in this dino’s case) which also means that air has been added to the dino and an O2 bar has been added to the UI (the bar only shows up when the dino’s air is less than 66%). Death has also been added as that is part of drowning and eventually combat. A few other subtle things have also been included such as smoothing out the player’s pitch changes from the terrain following algorithm and how the help screen now toggles instead of only showing up when the help button is pressed.
My favorite thing to show off from week 7’s work is the “looking at” popup I made on the UI. For ease of use, I made and actor with a widget component attached to it and on the widget I put a simple X image. There is a line trace attached to the camera and shoots a trace right above where the camera is looking and angled up a few degrees. That hit result is then broken up and the X widget actor is moved to the location on the hit showing you where on the map you are looking. If the line trace hits an actor that can be cast to my base dino, the actor is cast and the information from that dino can be pulled showing you a basic version of that dino’s stats.
My layout for it was health on the bottom, level on the left, food and water on the right, and gender and awareness in the middle. The center box is shown blue when the dinosaur is a male and a pinkish color when the dinosaur is female. In the center of that box there is also and eye the represents awareness inspired by one of my favorite games 7 Days to Die. The eye is closed when the dinosaur is completely unaware, slightly open when the dinosaur is alerted, open when aware of the player, and bloodshot red when agroed by the player.
Another thing I am quite proud of that I made this week is how each dinosaur keeps track of the other dinosaurs around it. For sensing other dinosaurs, each AI dino has an active Pawn Sensing Component currently with only sight alone working. Each AI dinosaur also has three maps (dictionaries) that it uses the keep track of the dinosaurs around it and an array of base dinosaur pointers it is in combat with. The three maps store dinosaurs the AI is alerted of, aware of, and agroed with. If a dinosaur, say the player, is not in either of these three maps on an AI dinosaur, that AI is blissfully unaware of the player’s dinosaur. The array of dinosaurs we are in combat with are actually for the opposing dinosaurs to use in the system I made. If an AI starts combat with the player, that AI notifies the player’s dinosaur that it is starting combat with it. When the combat is over such as when the AI dies by the hand of the player, it tells the player to remove the AI from the player’s list. This makes it easy to tell when the player is in combat so different events can happen such as the start of combat music. It also should make it easier to start combat between two AIs.
As I continue with AI this next week, I expect to come into movement challenges with these quadrupeds. Unreal does not immediately support navigation for things that don’t spin in one place. I do have a plan of action though I think. If I can get an array of the waypoint locations that Unreal generates from pathfinding, I should be able to make a controller the uses my movement functions to go to each waypoint instead of Unreal’s functions like Simple Move To. I really hope that pans out.
That’s all for now I guess. Thanks for reading!
Until next time,