• Home
  • Unreal Engine
  • C++
  • Blog
  • About

Projects Blog

AI Social Deduction: Week 9

7/25/2021

0 Comments

 

Visual Update

In this video, I show off the new design for the menus along with the updated looks for the Ship. Lastly, I show the Ejection Scene that comes at the end of a completed voting session!

The New Art

The main focus of this update is obviously all of the new art additions that were accomplished over the week. All in all, I was able to accomplish:
  • Adding a space skybox to make it so that The Ship level actually looks like it's floating in space.
  • Adding materials and decorations throughout the ship to make it a more interesting a visually pleasing level to watch the Crewmates run around in. (All materials and decorations from asset packs provided by Unreal and Unreal Store.)
  • Making and adding the new menu backgrounds and button art I created to the game so that they're not just plain white menus any more.

Here's a catalog of images for the updated art in case the video happens to move too quickly:
​
I would also like to thank Sella Alcazar for help with getting the Skybox set up, and for giving me tips on the lighting and decoration of the ship!

The Ejection Scene

I wanted to recreate the ejection scene from Among Us, because I felt it would look pretty funny in the realistic environment of the ship and would sell the voting off of the suspicious crewmates even better. To accomplish this, I used a fairly simple trick: I have a long plane that sits in front of the ship which is hidden in game. Then I teleport the voted off Crewmate to one end of the plane, and I have them walk to the other end while rotating their mesh. Once they go off-screen, I return the Crewmate as a ghost back to their original starting position. Ta-dah, the ejection is complete and looks as humorous as I had hoped it would!
Picture
The plane that is hidden in-game. Crewmates walk from the left sphere to the right sphere. (The spheres are above the plane, but are a little hard to see due to looking similar to the stars.)

What's Next?

This upcoming week is the last official week of working on "Among AI". I've accomplished a lot of what I had hoped to over the course of the project, so I'll be wrapping it up with just a few tweaks:
  • Better AI - Having Crewmates recognize the if they see someone sitting in the room with the body, it is likely to be the Killer and should be prioritized when throwing out suspects during discussions.
  • Updating the Voting and Discussion scene to have similarly updated graphics along with graphics to indicate which of the Crewmate are dead and cannot speak.
  • Create a menu for visualizing the suspicion percent of each Crewmate during the voting scene.
  • Bugtesting and Bugfixing.

And these will finish off the project for now! Next week, I'll discuss what I'd like to do as bonus if I ever have unofficial time to work on the project in the future.

Want to Download the Project?


​Click Here:
Github Repository
0 Comments

AI Social Deduction: Week 8

7/17/2021

0 Comments

 

Voting Time! Who's the Guilty Party?

In the video above, Purple and Pink have been killed by Yellow and Red, respectively! However, Purple is first found by Orange who begins leading the Discussion for Purple's killer. The Crewmates then discuss what was the last time Purple was seen alive and who was in the murder room closest to the time of Purple's death. Orange obviously says that Yellow was seen leaving the room pretty close to the incident time, but Red also states they saw Green leaving the area around that time as well. In the end, even though it's a close voting session, Yellow is voted off as shown at the end with them having been turned into a ghost. Congrats to the team figuring out the Killer in this instance!

Voting Screen UI

My main focus of the voting screen was to make the screen look similar to how it does in the original Among Us game. The voting screen UI consists of 10 panels, each holding a Crewmate's name and their portrait. These panels also hold lists that can be filled up with images of those who vote against said Crewmate on the panel. There is a "No Vote" option at the bottom left where Crewmates can decide to vote for nobody like in a real game of Among Us. Lastly, there's a button at the bottom right where I'm happing to have open UI which details each Suspect's "Suspicion" value. This button could also be used to display a menu with more information if I update the AI like info on why each Crewmate votes against each other.
Picture
This picture's quite funny to me because the Killers both voted for an innocent while the rest of the crew correctly votes for Yellow.

Calculating Suspicion and Votes

I wanted to make it so that there wasn't only one "biggest suspect" that would get voted for during each voting scene since, in a real game of Among Us, there is indecisiveness and spread out votes amongst the multiple suspects to each murder. To accomplish this, I've created a system for calculating a "Suspicion" value (A float ranging from 0 to 1) to go with each suspect, and team members vote based on those values from their pool of suspects.

To begin with, there is a timeframe before and after the last time the Victim was scene alive. Suspects who entered or exited the murder room can only be put forth if they did so from that time frame. Currently, said time frame is set to 15 seconds, so suspects who entered/exited the murder room between 15 seconds before and after are the only ones put forth in discussion. Next, the code calculates each suspect's initial "Suspicion" value as the time delta between the time they passed through the murder room and the last time the victim was seen alive. The value for the "No Vote" bar is calculated as: 1 - the Maximum Suspicion value calculated that round, and then it is added as a suspect to the list (if voted for, it counts as a Crewmate not voting for anyone). The suspicion values are then normalized to give each suspect a 0% - 100% chance of being voted for by each Crewmate. After that, each Crewmate votes at random with those "Suspicion" percentages influencing who they vote against.

Smarter Discussions and Voting

Initially, the AI for Discussions weren't the smartest. I made a couple of tweaks to the criteria of discussions and votes to make the Crewmates a bit smarter in what they say and who they vote for:
  • Killers won't report seeing the Victim in the murder room at the time of their death.
  • Killers won't report each other for being in the murder room at the time of the murder.
  • Crewmates won't vote for themselves.
  • If there is only one suspect, the suspect's "Suspicion" value is increased by 0.5 as a modifier since, if there's only one suspect, they usually have a higher chance of being considered the Killer than usual.

What's Next?

Since the voting off of Crewmates now fully works in the fact that each Crewmate can vote, Crewmates die when voted off, and Victories can be achieved by either side based on who gets voted off, I am officially a week ahead of schedule! Week 9 was originally planned to be focused around the Voting Scene, but now I'm planning of finally giving the game the visual update it's been needing (and I won't stop talking about)! My plans for next week are as follows:
  • Update the menus to be more than blank white screens with text.
  • Work on the ship to make it more than a whitebox.
  • Update the skybox around the ship to be more space-like.
  • Create the voted Crewmate being ejected scene.
Picture
Bonus: Even though this next week will be majorly focused on the looks of the game, I will also be spending some time making the AI smarter so that we can get more interesting thought processes from each other Crewmates in Discussions and Voting. I will likely be continuing with this over the course of the last 2 weeks of the project.

​Want to Download the Project?


​​Click Here:
Github Repository
0 Comments

AI Social Deduction: Week 7

7/11/2021

0 Comments

 

All About Dialogue

In the video above, Red kills Brown. Brown's body is eventually found, sparking a discussion amongst the survivors who the killer may be!

Dead Body Discovery

To start off, I had to make it so that crewmates were capable of starting a discussion scene whenever they spotted a dead body. However, they had to first approach the dead body, because there is a range limit in which a player can report a body in Among Us. To do this, I set it up so that dead bodies will stop the Innocent's Behavior Tree and turn a "Body in Sight" bool to true (indicating the crewmate sees a dead body). Once this is complete, the Behavior tree is restarted and follows this behavior:
Picture
This branch consists of what an Innocent should do upon seeing a dead body. If there is one visible, the crewmate will get the body's location, move to it, and then indicate to the AIDeductionGameMode that a discussion/voting scene should be started. The AIDeductionGameMode will then record who found the body, the information of the body's location and owner, and then the Game Mode will proceed to set all Crewmates around the discussion table while also deactivating their trees. Lastly, the Game Mode will clean up and remove all dead bodies currently on the ship.

This is all done in this manner to set up the discussion scene to have everything it needs to be performed and so as to match what occurs in the game Among Us when a body is found.


The Discussion Scene

The discussion scene consists of UI that display what the Crewmates "Know" about the victim and the room the murder took place in. The actual discussion is managed by a loop. In order the events as of currently are:
  1. The finder of the body gives a short summary of the victim, mentioning who it was and the location of their death. This finder is considered the lead for the conversation.
  2. The lead then asks what was the last time every Crewmate saw the victim alive.
  3. Every living Crewmate (including the lead) searches their memories for the last time they saw the victim. They then mention what they know. If they don't know the last time they saw the victim alive, they just say they haven't seen anything. I am planning to use the most recent time the victim was seen alive to slim down the number of memories the Crewmates search through to be in a certain time frame around that time.
  4. The lead will then ask who was the last person everyone saw in/entering/leaving the murder room.
  5. Similar to step 3, the Crewmates mention what they've seen when it comes to the murder room. The most recent person seen in/entering/leaving the room will then be determined as the killer. I could use the time of the murder room sighting and the time of the most recent victim sighting to give a percent chance that the suspect is the killer. This percentage could be used to spread out votes between the suspicious Crewmates, making the voting more like a natural game of Among Us. If not, I can just have all Crewmates vote for the most recent Crewmate in/entering/leaving the murder room.
Picture
An image of the blueprint for the discussion loop. Based on the question given, the crewmates have a different set of memories they search through and the response they give.
Picture
This image shows Purple, the lead of this discussion, asking the question of when everyone last saw Pink alive and each Crewmate saying when and where they last saw Pink.

Crewmate Portraits

Picture
The last part I'd like to discuss for this project is that each Crewmate now has a portrait! This is helpful for quickly recognizing which Crewmate is being observed on the Knowledge Bar and who is talking in discussions! The image being shown is bound to the name of the Crewmate being observed/the Crewmate who is "speaking".

What's Next?

The Discussion Scene isn't quite finished. To wrap up the implementation for now, I will be working on:
  • Having the Crewmates determine who the likely killer is. 
  • Having the discussion scene end and transition to the voting scene where the suspect will be voted on by all other Crewmates.
  • Making it so that the Discussion/Voting scene ends and the Crewmates return to their business as usual.
  • If I can, I would also like to have the voting scene kill off whichever Crewmate got the most votes against them.

As always, a nice bonus (if I can find time to do so):
  • Work on the visuals of the game. Updating the ship, the skybox around the ship, and the UI.

Want to Download the Project?


​Click Here:
Github Repository
0 Comments

AI Social Deduction: Week 6

7/3/2021

0 Comments

 

Memory System and Bugfixes

In the video above, I show the new sliders, the better pause button, the new Knowledge bar controls, and the new memory system.

Memory System

The memory addition is the newest major feature to be added to the game. The general concept of it is that, every couple of seconds, each Crewmate will have a chance two forget two random pieces of memory. Forgotten memories have their text set to a red color and will not be usable in the soon-to-be-added voting discussions. Crewmates can have, at the very least, 8 memories that aren't forgotten. This prevents the system from leaving the Crewmates with no usable memories in discussions.

Also, main menu has had the "Forget Memory Chance" slider added to it as well to allow the user to specify what percent chance the Crewmate will lose 2 memories every 2 seconds. If I have bonus time, I'd like to be able to update the sliders page to allow the spectator to specify the memory loss chance, the number of memories lost, and the delay between memory loss checks.

Bugfixes/Polish

As was mentioned in the last update, I had three areas of concern when it came to bugs and polish. Here are the three issues I tackled and the solutions I came up with to solve them:
  • The Crewmates weren't able to see through each other. - This was being caused by the fact that the AIPerception component's sight sense was dependent on an object's "Visibility" collision channel. All of the Crewmates were set to Block on their mesh and their capsule component. This was stopping the Crewmate's line of sight at the first object in front of them. To correct this, I instead set all of their components to be Overlap collision on their capsule component and ignore on all other components. Now, the crewmates are able to see through each other while also still being able to register each other. However, this caused a problem with the ability to click on Crewmates, which I will discuss in the next bullet point.
Picture
Green is able to see past all of the Crewmates standing in front of him so he is now able to register Blue, Turquoise, Red, and Gray even though Blue is directly in front of his line of sight.
  • The clicking on Crewmates only sometimes works. - Similar to the AIPerception's vision sense, the mouse over and on click events in Unreal depend on the Visibility collision channel. Setting all Crewmates' components to ignore except for the capsule being set to Block fixed this issue so that mouse events would work correctly on the Crewmates at all times. However, the Block on the capsule component caused the issue of the Crewmates not being able to see through each other. I decided it was more important for the Crewmates to have the correct vision capabilities, so I changed the Knowledge bar's controls to be keyboard-based. Now, the Spectator can hit R to show/hide the Knowledge bar. Q and E are used to show the previous and next Crewmate's knowledge, respectively. Mouse controls have been removed. These controls aren't as quick and easy to use, but it's an acceptable change.
  • The pause button needs to stop Crewmate movement and task progression. - The pause button now sets every Crewmate's walking speed to zero to make certain they stop in their tracks. It also prevents the progress bars above the Crewmates' heads from filling up, now. This makes it so that all Crewmate activity stops while leaving the spectator the ability to continue flying around and check each Crewmate's knowledge. Pausing the simulation also stops the Memory system to prevent a bug with Crewmates forgetting Knowledge while being paused. 

Crewmate Dead Bodies​

Picture
I was also able to implement a dead body drop for whenever Innocents are killed. The gravestones act at the representation of a Crewmate's dead body in the simulation. Currently, these dead bodies hold the last Crewmate Information state that the Innocent had, which is how the dead bodies record who was killed and what room they were killed in. Crewmates are currently able to see these dead bodies on the ground and are able to send up a print message stating whose dead body they found. This function will be updated to begin the Voting Discussions scene in the next update.

What's Next?

Next week marks the second half of the Crewmate's reasoning and understanding: learning through Dialogue. To accomplish this next part of the system, I will be working on:
  • Creating the discussions scene where Crewmates will enter this upon finding a dead body and then will proceed to talk through who was last in the area of the dead body.
  • This Dialogue scene and learning system will take up most of the time this next week, but if I find myself with some free time after it, I will also work on updating the visuals of the menus and the ship itself. I really want to finally get around to updating the art and design of these to make the simulation also look better than a whitebox.

Want to Download the Project?


​Click Here:

Github Repository
0 Comments

    Coleman Levy

    Welcome to my blog! 

    Archives

    August 2021
    July 2021
    June 2021
    May 2021

    Project

    All
    AI Social Deduction

    RSS Feed

  • Home
  • Unreal Engine
  • C++
  • Blog
  • About