AI & Systems Design
I designed Bruce and Sal's decision model, personality weights, trust, public-information reasoning, strategic lying, manipulation, memory, and longer-term social behaviors around asking, passing, and calling Shuddap.
Brackeys Game Jam 2026.2 · Trust No One
A three-player social-deduction card game based on Bullshit, where talking becomes part of the rules.
I designed Bruce and Sal's decision model, personality weights, trust, public-information reasoning, strategic lying, manipulation, memory, and longer-term social behaviors around asking, passing, and calling Shuddap.
I prototyped and simulated the game in Python, then built the final Unity implementation around one game state, reproducible AI decisions, card rules, turn flow, and presentation events.
I wrote and implemented contextual dialogue, character reactions, camera focus, card presentation, lighting, UI feedback, and adaptive music so the AI's internal decisions read as two distinct people at the table.
Conversation had to change the actual game. I did not want a random “honesty chance” or one suspicion threshold. The AI first judges how believable a claim is, then decides whether asking, passing, or calling Shuddap is the best move for that character.
Every decision uses only information that an opponent could actually know: their hand, the current claim, public card counts, table talk, remembered reveals, and public outcomes. Hidden cards resolve a reveal, but Bruce and Sal cannot read them while choosing a move.
Both characters share the same decision system. Five personality weights and a few situational behaviors push it in different directions, so Bruce can be reckless without being random and Sal can be calculating without simply knowing the right answer.
The Instigator
Pushes the pace, accepts more personal risk, and spends credibility for immediate advantage.
The Manipulator
Protects credibility, plays a longer game, and prefers making somebody else take the dangerous call.
The difficult part was not making Bruce and Sal better at the game. It was making them smart enough to follow, flawed enough to exploit, and consistent enough that the player could learn their personalities. Their mistakes had to feel like character, not a hole in the logic.
A perfectly rational opponent worked against the social game I wanted. Bruce needed room to overcommit and burn credibility; Sal needed to feel calculated without becoming an opponent who always knew the right answer.
I treated recognizable behavior as the real balance target. The player should be able to notice that Bruce is getting desperate, expect Sal to protect a lead, bait either of them into the wrong decision, and understand afterward why the AI chose the move it did.
Once the target behavior was clear, I needed a faster way to see whether tuning changes were actually preserving it.
Manually finishing every test game in Unity was too slow, so I built a Python simulation that could run 100 complete games for each tuning pass. It tracked wins and losses, bluffing, Shuddap decisions, manipulation attempts, strategy activations, trust, and how the relationships shifted across a match.
I could adjust the weights, run another batch, and see whether Bruce was becoming too cautious or Sal too direct. The simulation exposed broad patterns; hands-on games then checked unusual decisions, conversation edge cases, and whether those patterns were actually readable and fun.
Bruce and Sal already behaved differently internally, but generic reactions made those decisions feel mechanical. I wrote for situations their systems could actually create: exposed lies, manipulation, remembered cards, damaged trust, retaliation, and character-specific mistakes.
Many reactions are assembled from smaller authored sentence functions instead of one fixed line. A response can combine [Wait], [Accuse], and [Call]; three variants of each produce 27 combinations with the same gameplay meaning.
Specific moments still get specific lines, and priority rules stop several technically correct reactions from firing at once. The goal was variety without making the game pause to explain every system underneath it.
“Hold up.”
“Wait!”
“Hm.”
“I don't trust you, Bruce.”
“Bruce, you need to stop lying.”
“Bruce, this just can't be true.”
“I'm going to call Shuddap.”
“I'm calling it.”
“Shuddap!”
3 × 3 × 3 = 27 possible sentences from this structure alone, such as: “Hold up. I don't trust you, Bruce. I'm going to call Shuddap.”
Supporting technical and presentation work.
These systems support the three stories above without needing full case-study sections of their own.
A static track could not reflect whose turn was controlling the table or the growing pressure as someone approached zero cards.
Dirk Dammit and I designed an adaptive music system around synchronized character themes and shared percussion layers. The active player determines which character theme is forward in the mix, while card counts add intensity and switch to an about-to-win version near victory.
The soundtrack follows the same information the player is already reading at the table, so turns and late-game pressure feel different without stopping or restarting the music.
The game needed the intimacy of sitting across from Bruce and Sal, but unrestricted first-person controls would add movement that had nothing to do with reading the table.
The camera stays seated, allows only subtle player-driven drift, and biases toward whoever is speaking or toward the player's hand when cards need attention. Opponent card counts remain visually attached to the people they describe.
The player gets physical presence and character focus without losing the fast readability of a card-game interface.
Calling Shuddap is the highest-risk action in the game. Simply flipping the cards and changing a number made the result feel smaller than the decision that caused it.
I tied the result into one presentation event: the cards reveal, the camera and lighting focus the confrontation, success/failure audio reflects the outcome, the loser takes the pile, and the dialogue reacts after the mechanical result is clear.
Cards, sound, lighting, camera, and dialogue all communicate the same result, so the player never has to decode which side actually won the exchange.
During testing, Bruce could say he held all four Aces immediately after another player claimed an Ace, then continue the conversation instead of reacting to the impossible total he had just created.
I added checks around the card counts shared at the table. Bruce no longer casually creates a self-proving contradiction; if a later statement pushes the public total over four, the characters can recognize the math and respond to it directly.
Conversation remains real game information. An impossible count can become a character moment — Sal can call out the math, Bruce can shrug it off — without either opponent needing access to hidden cards.
still in progress
Shuddap was built in one week by a three-person team for Brackeys Game Jam 2026.2. Voting is still open, with 33 ratings so far, so the final placement and category rankings are not available yet.
Early feedback has centered on the parts I cared most about: distinct opponents, meaningful table talk and double-bluffing, and presentation that makes the table feel cohesive. Before the rankings are final, the useful signal is that the social layer is reading as gameplay rather than decoration.
Play Shuddap ↗Shuddap was a three-person jam game. Pro899 built the character and table art, Dirk Dammit created the audio, and I designed and implemented the game around that work.
Characters + Animation + Props + Card Art
Pro created Bruce and Sal, their character animations, the furniture, and the card art that established the physical table and characters the game is built around.
Music + Audio
Dirk created the game's audio. We worked together on the adaptive music design, building it around whose turn is active and how close each player is to winning; I then implemented the synchronized theme and intensity system in Unity.
Programming + Game Design + Implementation
I did all programming, game design, AI and dialogue systems, UI/camera/gameplay implementation, and the integration tying the team's art and audio into the final game. I also created the poster and game-page art.
I started Shuddap because I wanted digital opponents who could participate in the table talk I had always added to the physical game. Building it taught me that good game AI is not about making every opponent as smart as possible. Bruce and Sal became more fun when their roles were designed around each other to create the experience I wanted: a messy, untrustworthy table where they argue, bait each other, lie to the player, and sometimes get tricked themselves. Letting Bruce make believable reckless choices and Sal manipulate situations was often better than giving either of them the optimal move. If an irrational decision fits the character and creates better drama for the player, it can be better AI than the “smart” decision.