From eafd29388cd062a05dc1bc150ec6b476e6b80fcf Mon Sep 17 00:00:00 2001
From: Simon Stepputtis <7848799+sstepput@users.noreply.github.com>
Date: Sat, 21 Oct 2023 16:53:51 -0400
Subject: [PATCH] Initial Streamlit App
---
.streamlit/config.toml | 2 +
requirements.txt | 3 +
streamlit/app.py | 277 +++++
streamlit/sample.json | 2198 ++++++++++++++++++++++++++++++++++++++++
streamlit/style.css | 27 +
5 files changed, 2507 insertions(+)
create mode 100644 .streamlit/config.toml
create mode 100644 requirements.txt
create mode 100644 streamlit/app.py
create mode 100644 streamlit/sample.json
create mode 100644 streamlit/style.css
diff --git a/.streamlit/config.toml b/.streamlit/config.toml
new file mode 100644
index 0000000..216cdf0
--- /dev/null
+++ b/.streamlit/config.toml
@@ -0,0 +1,2 @@
+[theme]
+base="light"
\ No newline at end of file
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000..42b780f
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,3 @@
+numpy==1.26.0
+plotly==5.17.0
+pandas==2.1.1
\ No newline at end of file
diff --git a/streamlit/app.py b/streamlit/app.py
new file mode 100644
index 0000000..1ccada4
--- /dev/null
+++ b/streamlit/app.py
@@ -0,0 +1,277 @@
+import streamlit as st
+import pandas as pd
+import json
+import numpy as np
+import plotly.graph_objects as go
+
+DATAFILE = "./sample.json"
+
+@st.cache_data
+def loadData(path):
+ with open(path, "r") as fh:
+ data = json.load(fh)
+ return data
+
+def highlight_failed_votes(row):
+ styles = np.asarray([None] * len(row))
+ cnt_fail = 0
+ been_voted = True
+ for i in range(1, 7):
+ if row[f"P{i}"] == "no":
+ cnt_fail += 1
+ elif row[f"P{i}"] is None:
+ been_voted = False
+ if been_voted:
+ if cnt_fail >= 3:
+ styles[2:8] = 'background-color:#ff000011'
+ else:
+ styles[2:8] = 'background-color:#00ff0011'
+ return styles
+
+def getVoteOutcomes(data):
+ quest = st.session_state["quest_select"]
+ rnd = st.session_state["turn_select"]
+ parties = []
+ for mid, msg in data["messages"].items():
+ if msg["player"] != "system":
+ continue
+ # Break at the point we want
+ if not (msg["quest"] < quest or (msg["quest"] == quest and msg["turn"] <= rnd)):
+ break
+ if "proposed a party:" in msg["msg"]:
+ party = msg["msg"].split("proposed a party: ")[-1].split(",")
+ party = [s.replace("player", "plr") for s in party]
+ parties.append([msg["quest"],party, None, None, None, None, None, None, None])
+ if "party vote outcome:" in msg["msg"]:
+ votes = msg["msg"][20:].split(",")
+ for vid, v in enumerate(votes):
+ parties[-1][vid+2] = v.split(": ")[-1]
+ if "quest succeed" in msg["msg"]:
+ parties[-1][-1] = "Success"
+ if "quest fail" in msg["msg"]:
+ parties[-1][-1] = "Failure"
+
+ # Turn it into a dataframe
+ for vote in parties:
+ pass
+ df = pd.DataFrame(parties, columns=["Quest","The History of Proposed Parties ", "P1", "P2", "P3", "P4", "P5", "P6", "Quest Vote"])
+
+ df = df.style.apply(highlight_failed_votes, axis=1)
+
+ return df
+
+def getNumQuests(data):
+ turns = 0
+ for mid, msg in data["messages"].items():
+ turns = max(turns, msg["quest"])
+ return turns
+
+def getNumTurns(data):
+ turns = 0
+ for mid, msg in data["messages"].items():
+ if msg["quest"] != st.session_state["quest_select"]:
+ continue
+ turns = max(turns, msg["turn"])
+ return turns
+
+def local_css(file_name):
+ with open(file_name) as f:
+ st.markdown(''.format(f.read()), unsafe_allow_html=True)
+
+def addChatMessage(player, role, msg, p_strat, d_strat=None, avatar=None):
+ with st.chat_message(player, avatar=avatar):
+ strategy = f"{p_strat}"
+ if d_strat:
+ strategy += f" ; {d_strat}"
+ st.markdown(f"
{player} ({role}): {strategy}
", unsafe_allow_html=True)
+ st.markdown(f"{msg}
", unsafe_allow_html=True)
+
+def _getUserRoles(data):
+ roles = {}
+ for uid, user in data["users"].items():
+ roles[user["name"]] = user["role"].split("-")[0].capitalize()
+ return roles
+
+def _getMessagePStrat(data, mid):
+ for pid, strat in data["persuasion"].items():
+ if mid == strat["mid"]:
+ p_strat = strat["persuasion"].capitalize()
+ d_strat = strat["deception"]
+ if d_strat:
+ d_strat = d_strat.capitalize()
+ return p_strat, d_strat
+ return "", ""
+
+def getMessages(data):
+ roles = _getUserRoles(data)
+ msgs = []
+ for mid, msg in data["messages"].items():
+ quest = st.session_state["quest_select"]
+ rnd = st.session_state["turn_select"]
+ if msg["quest"] != quest:
+ continue
+ if msg["turn"] > rnd:
+ break
+
+ # Set Role
+ role = None
+ if msg["player"] in roles:
+ role = roles[msg["player"]]
+ av = "🤖"
+
+ # Set Icon
+ if msg["player"] != "system":
+ av = "😈" if role in ["Assassin", "Morgana"] else "😇"
+
+ # Get strategies
+ p_strat, d_strat = _getMessagePStrat(data, msg["mid"])
+ m_data = {
+ "player": msg["player"],
+ "role": role,
+ "msg": msg["msg"],
+ "p_strat": p_strat,
+ "d_strat": d_strat,
+ "avatar": av,
+ }
+ msgs.append(m_data)
+ return msgs
+
+def persuasion_plot(msgs):
+ nameMap = {
+ "assertion": "AS",
+ "questioning": "QU",
+ "suggestion": "SU",
+ "agreement": "AG",
+ "logical deduction": "LD",
+ "compromise/concession": "CC",
+ "critique/opposition": "CO",
+ "appeal/defense": "AD"
+ }
+ categories = ["AS", "QU", "SU", "AG", "LD", "CC", "CO", "AD"]
+ counts_good = [0, 0, 0, 0, 0, 0, 0, 0]
+ counts_evil = [0, 0, 0, 0, 0, 0, 0, 0]
+ for msg in msgs:
+ if msg["p_strat"] != "":
+ if msg["role"] in ["Assassin", "Morgana"]:
+ counts_good[categories.index(nameMap[msg["p_strat"].lower()])] += 1
+ else:
+ counts_evil[categories.index(nameMap[msg["p_strat"].lower()])] += 1
+
+ fig = go.Figure()
+
+ fig.add_trace(go.Scatterpolar(
+ r=counts_good,
+ theta=categories,
+ fill='toself',
+ name='Good PS',
+ fillcolor='rgba(0,0,255,0.2)',
+ line_color='rgba(0,0,255,0.5)'
+ ))
+ fig.add_trace(go.Scatterpolar(
+ r=counts_evil,
+ theta=categories,
+ fill='toself',
+ name='Evil PS',
+ fillcolor='rgba(255,0,0,0.2)',
+ line_color='rgba(255,0,0,0.5)'
+ ))
+
+ fig.update_layout(
+ polar=dict(
+ radialaxis=dict(
+ visible=True,
+ )),
+ showlegend=False
+ )
+ return fig
+
+def deception_plot(msgs):
+ nameMap = {
+ "commission": "CO",
+ "omission": "OM",
+ "influence": "IN"
+ }
+ categories = ["CO", "OM", "IN"]
+ counts_evil = [0, 0, 0, 0, 0, 0, 0, 0]
+ for msg in msgs:
+ if msg["d_strat"] not in [None, ""]:
+ counts_evil[categories.index(nameMap[msg["d_strat"].lower()])] += 1
+
+ fig = go.Figure()
+
+ fig.add_trace(go.Scatterpolar(
+ r=counts_evil,
+ theta=categories,
+ fill='toself',
+ name='Evil PS',
+ fillcolor='rgba(255,0,0,0.2)',
+ line_color='rgba(255,0,0,0.5)'
+ ))
+
+ fig.update_layout(
+ polar=dict(
+ radialaxis=dict(
+ visible=True,
+ )),
+ showlegend=False
+ )
+ return fig
+
+def getPlayerBelieves(data):
+ beliefs = []
+ for i in range(1, 7):
+ beliefs.append([f"Player-{i}", None, None, None, None, None, None])
+ df = pd.DataFrame(beliefs, columns=["Player","About Player-1", "About Player-2", "About Player-3", "About Player-4", "About Player-5", "About Player-6"])
+
+ quest = st.session_state["quest_select"]
+ rnd = st.session_state["turn_select"]
+
+ for bid, bel in data["beliefs"].items():
+ if not (bel["quest"] < quest or (bel["quest"] == quest and bel["turn"] <= rnd)):
+ break
+ idx = int(bel["player"].split("-")[-1])-1
+ about = "About " + bel["about_player"].capitalize()
+ df.loc[idx, about] = bel["belief"].capitalize()
+
+ return df
+
+if "quest_select" not in st.session_state:
+ st.session_state["quest_select"] = 1
+if "turn_select" not in st.session_state:
+ st.session_state["turn_select"] = 0
+
+ # Setup
+local_css("./style.css")
+st.markdown("", unsafe_allow_html=True)
+data = loadData(DATAFILE)
+
+# Initial Page Layout
+st.markdown("## Avalon Game Visualization")
+n_rounds = getNumQuests(data)
+n_turns = getNumTurns(data)
+n_turns = n_turns if n_turns > 1 else 2
+st.markdown(f"The selected game has {n_rounds}. Please select the round you would like to investigate!")
+col1, col2 = st.columns(spec=[0.5, 0.5])
+col1.slider("Select the Quest", 1, n_rounds, key="quest_select")
+col2.slider("Select Turn in Quest", 1, n_turns, key="turn_select")
+
+st.markdown("Below shows the proposed parties and respective vote outcomes. \"None\" refers to a party that has not yet been voted for (or was never voted for as the proposal changed before a vote happened)")
+st.dataframe(getVoteOutcomes(data), use_container_width=True, hide_index=True)
+
+relevant_messages = getMessages(data)
+st.markdown("__Utilization of Persuasion and Deception Strategies__")
+st.markdown("- Persuasion strategies (left, red: Evil, blue: Good) are assertion (AS), questioning (QU), suggestion (SU), agreement (AG), logical deduction (LD), compromise/concession (CC), critique/opposition (CO), and appeal/defense (AD).")
+st.markdown("- Deception strategies (right) employed by evil players are commission (CO), omission (OM), and influence (IN)")
+
+
+col1, col2 = st.columns(spec=[0.5, 0.5])
+col1.plotly_chart(persuasion_plot(relevant_messages), use_container_width=True)
+col2.plotly_chart(deception_plot(relevant_messages), use_container_width=True)
+
+st.markdown("__Player Beliefs__")
+st.markdown("The following highlights what each player (first column) believes the role of the other players are.")
+st.dataframe(getPlayerBelieves(data), use_container_width=True, hide_index=True)
+
+st.markdown(f"__Chat History for Round {st.session_state['quest_select']}, up to turn {st.session_state['turn_select']}__")
+for msg in relevant_messages:
+ addChatMessage(**msg)
\ No newline at end of file
diff --git a/streamlit/sample.json b/streamlit/sample.json
new file mode 100644
index 0000000..cfce9d9
--- /dev/null
+++ b/streamlit/sample.json
@@ -0,0 +1,2198 @@
+{
+ "users": {
+ "1": {
+ "name": "player-1",
+ "role": "merlin",
+ "index": 1
+ },
+ "2": {
+ "name": "player-2",
+ "role": "assassin",
+ "index": 2
+ },
+ "3": {
+ "name": "player-3",
+ "role": "morgana",
+ "index": 3
+ },
+ "4": {
+ "name": "player-4",
+ "role": "servant-1",
+ "index": 4
+ },
+ "5": {
+ "name": "player-5",
+ "role": "servant-2",
+ "index": 5
+ },
+ "6": {
+ "name": "player-6",
+ "role": "percival",
+ "index": 6
+ }
+ },
+ "messages": {
+ "1": {
+ "player": "system",
+ "msg": "game started!",
+ "mid": "JEEZngMcq7vW",
+ "quest": 1,
+ "turn": 1
+ },
+ "2": {
+ "player": "player-4",
+ "msg": "we don't have any info so just selected randomly",
+ "mid": "R88gyG5SvA7WO",
+ "quest": 1,
+ "turn": 2
+ },
+ "3": {
+ "player": "system",
+ "msg": "player-4 proposed a party: player-6, player-2",
+ "mid": "none",
+ "quest": 1,
+ "turn": 2
+ },
+ "4": {
+ "player": "player-5",
+ "msg": "seems like a weird choice of party in my opinion. little bit suspicious of player-4 for not picking himself.",
+ "mid": "GwwZkqPcJWLXy",
+ "quest": 1,
+ "turn": 3
+ },
+ "5": {
+ "player": "player-6",
+ "msg": "i don't have opinions at this point since it's an automatic proposal",
+ "mid": "R88gyAWfv2Jyj",
+ "quest": 1,
+ "turn": 4
+ },
+ "6": {
+ "player": "player-1",
+ "msg": "well, technically we don't know anything yet",
+ "mid": "rgg0G1Vh8g4Jj",
+ "quest": 1,
+ "turn": 5
+ },
+ "7": {
+ "player": "player-1",
+ "msg": "but i agree that this choice is a little weird",
+ "mid": "qAAjE19hYQlr",
+ "quest": 1,
+ "turn": 5
+ },
+ "8": {
+ "player": "player-2",
+ "msg": "i'm good, but i agree this choice is weird",
+ "mid": "R88gyzjuR92m",
+ "quest": 1,
+ "turn": 6
+ },
+ "9": {
+ "player": "player-2",
+ "msg": "however, i don't know what changes we can make since this is the first turn",
+ "mid": "QAA1xyZixAKB",
+ "quest": 1,
+ "turn": 6
+ },
+ "10": {
+ "player": "player-2",
+ "msg": "i'll approve the current party unless you make some good arguments",
+ "mid": "JEEZnmjtwvvR",
+ "quest": 1,
+ "turn": 6
+ },
+ "11": {
+ "player": "player-3",
+ "msg": "no opinions but a good guy will always place themselves in the team...",
+ "mid": "ypp84Ywf7m3y",
+ "quest": 1,
+ "turn": 7
+ },
+ "12": {
+ "player": "system",
+ "msg": "player-4 proposed a party: player-2, player-4",
+ "mid": "none",
+ "quest": 1,
+ "turn": 7
+ },
+ "13": {
+ "player": "player-4",
+ "msg": "sorry for the last turn, its still random but just included myself",
+ "mid": "B11gM4zhV3jP9",
+ "quest": 1,
+ "turn": 8
+ },
+ "14": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: yes, player-2: yes, player-3: no, player-4: yes, player-5: yes, player-6: yes",
+ "mid": "7DD6xPOF18wE",
+ "quest": 1,
+ "turn": 8
+ },
+ "15": {
+ "player": "system",
+ "msg": "vote succeeded! initiating quest vote!",
+ "mid": "QAA1x9vhP4Lp",
+ "quest": 1,
+ "turn": 8
+ },
+ "16": {
+ "player": "system",
+ "msg": "quest succeeded!",
+ "mid": "XYY6G8RCX8vjk",
+ "quest": 1,
+ "turn": 8
+ },
+ "17": {
+ "player": "system",
+ "msg": "player-5 proposed a party: player-5, player-4, player-2",
+ "mid": "none",
+ "quest": 2,
+ "turn": 1
+ },
+ "18": {
+ "player": "player-5",
+ "msg": "i am taking the usual approach of just adding myself in. again, i know i am good so at least for myself it will tell me if one of them is bad( if it fails).",
+ "mid": "3YYlqMJimq75p",
+ "quest": 2,
+ "turn": 2
+ },
+ "19": {
+ "player": "player-6",
+ "msg": "i do not agree with this party. i know i am good, and from my point of view this party contains at least one evil person for sure.",
+ "mid": "VJJmD46sWRry",
+ "quest": 2,
+ "turn": 3
+ },
+ "20": {
+ "player": "player-6",
+ "msg": "player-3 looks suspicious as he didn't approve the first party which turned out to be( at least seemingly) good. i recommend replacing player-3 with me",
+ "mid": "VJJmDYoH94gJ",
+ "quest": 2,
+ "turn": 3
+ },
+ "21": {
+ "player": "player-1",
+ "msg": "hm, yeah, some of the initial people might still be bad",
+ "mid": "ZZZ4K3kHjrOr",
+ "quest": 2,
+ "turn": 4
+ },
+ "22": {
+ "player": "player-1",
+ "msg": "i wonder why player-6 is seemingly so sure that someone must be evil",
+ "mid": "DwwROBPF2Br0",
+ "quest": 2,
+ "turn": 4
+ },
+ "23": {
+ "player": "player-1",
+ "msg": "but again, for now, i don't know much, but i would like to be on the party",
+ "mid": "EKKlgDVCNqQL",
+ "quest": 2,
+ "turn": 4
+ },
+ "24": {
+ "player": "player-1",
+ "msg": "as player-2 was chosen randomly, maybe choose someone else randomly",
+ "mid": "jAA2wyxuYlg8",
+ "quest": 2,
+ "turn": 4
+ },
+ "25": {
+ "player": "player-1",
+ "msg": "i. e. me selfinsert",
+ "mid": "3YYlqoQi71mp",
+ "quest": 2,
+ "turn": 4
+ },
+ "26": {
+ "player": "player-2",
+ "msg": "player-6 made a mistake in his statement cuz player-3 is not in the party",
+ "mid": "LAAgpXVSLRXZ",
+ "quest": 2,
+ "turn": 5
+ },
+ "27": {
+ "player": "player-2",
+ "msg": "perhaps because he is new player:) let's disregard this",
+ "mid": "YVV6JoWIv6AA",
+ "quest": 2,
+ "turn": 5
+ },
+ "28": {
+ "player": "player-2",
+ "msg": "i also think player-3 is kinda suspicious since he voted no in the first party",
+ "mid": "YVV6JoLF35By5",
+ "quest": 2,
+ "turn": 5
+ },
+ "29": {
+ "player": "player-2",
+ "msg": "let's hear his explanation",
+ "mid": "6YY6wL3trgA4Z",
+ "quest": 2,
+ "turn": 5
+ },
+ "30": {
+ "player": "player-2",
+ "msg": "i'm good, but if you want to make a more solid discussion, feel free to exclude me",
+ "mid": "zqqmDPLTzYB",
+ "quest": 2,
+ "turn": 5
+ },
+ "31": {
+ "player": "player-3",
+ "msg": "i voted no based on the same logic as player-6... that i am not in the party and i am good guy( and since the first round is symbolic)",
+ "mid": "xooGAkWto6",
+ "quest": 2,
+ "turn": 6
+ },
+ "32": {
+ "player": "player-3",
+ "msg": "funny that he is accusing me based on his own logic",
+ "mid": "DwwRDkGF5Gpgr",
+ "quest": 2,
+ "turn": 6
+ },
+ "33": {
+ "player": "player-3",
+ "msg": "when i am not even in the party....",
+ "mid": "8XXqnqqhvMro",
+ "quest": 2,
+ "turn": 6
+ },
+ "34": {
+ "player": "player-4",
+ "msg": "its strange that we're discussing so much even though we have no information",
+ "mid": "8XXqn63C64MPp",
+ "quest": 2,
+ "turn": 7
+ },
+ "35": {
+ "player": "player-4",
+ "msg": "that makes me cast some doubt on player-6 and player-1, but i dont feel so strongly",
+ "mid": "4WW8jROCJyk7Z",
+ "quest": 2,
+ "turn": 7
+ },
+ "36": {
+ "player": "player-4",
+ "msg": "im good with this team",
+ "mid": "3YYlg2ZijgkD",
+ "quest": 2,
+ "turn": 7
+ },
+ "37": {
+ "player": "player-5",
+ "msg": "i agree with player-4 here. there's a lot of blame and suspicion being cast when we literally know nothing.",
+ "mid": "XYY6vLqHXn3zB",
+ "quest": 2,
+ "turn": 8
+ },
+ "38": {
+ "player": "player-5",
+ "msg": "i am going to maintain the party as is. if player-2 is bad as player-1 suggests, then this quest should fail.",
+ "mid": "ypp8Bo0FozAA",
+ "quest": 2,
+ "turn": 8
+ },
+ "39": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: no, player-2: yes, player-3: no, player-4: yes, player-5: yes, player-6: no",
+ "mid": "EKKlEqEuyD6Z",
+ "quest": 2,
+ "turn": 8
+ },
+ "40": {
+ "player": "system",
+ "msg": "vote failed!",
+ "mid": "p99gpZpFBMGW",
+ "quest": 2,
+ "turn": 8
+ },
+ "41": {
+ "player": "player-6",
+ "msg": "i am not 100 sure player-3 is evil. i only said this party contains at least one evil person, and i did not point out who that was. actually i have no idea who that was.",
+ "mid": "rgg0r9DUB1JZ",
+ "quest": 2,
+ "turn": 9
+ },
+ "42": {
+ "player": "player-6",
+ "msg": "please reconsider my words even if you find it weird at first glance",
+ "mid": "jAA2jnAtjkqlg",
+ "quest": 2,
+ "turn": 9
+ },
+ "43": {
+ "player": "player-6",
+ "msg": "i do want to promote myself, but i am good with letting player-1 in instead. just not these three people. player-1, player-5 and player-4 could also give us some more info",
+ "mid": "p99gpRQiB3Jp",
+ "quest": 2,
+ "turn": 9
+ },
+ "44": {
+ "player": "system",
+ "msg": "player-6 proposed a party: player-1, player-2, player-4",
+ "mid": "none",
+ "quest": 2,
+ "turn": 9
+ },
+ "45": {
+ "player": "player-6",
+ "msg": "since player-2 and player-4 made one successful attempt we should probably replace player-5",
+ "mid": "ZZZ4xZWT53Bg",
+ "quest": 2,
+ "turn": 9
+ },
+ "46": {
+ "player": "player-1",
+ "msg": "hm, just to be clear, we don't know anything about the first two people",
+ "mid": "QAA1l57s0vnY",
+ "quest": 2,
+ "turn": 10
+ },
+ "47": {
+ "player": "player-1",
+ "msg": "player-2 might as well still be bad",
+ "mid": "EKKlE6GSWwgM8",
+ "quest": 2,
+ "turn": 10
+ },
+ "48": {
+ "player": "player-1",
+ "msg": "i don't know why player-4 is suddenly picking on me. i didn't even say anything.",
+ "mid": "EKKlE6YH3JRX4",
+ "quest": 2,
+ "turn": 10
+ },
+ "49": {
+ "player": "player-1",
+ "msg": "however, i am fine with him on the party",
+ "mid": "rgg0rXZS8zp6z",
+ "quest": 2,
+ "turn": 10
+ },
+ "50": {
+ "player": "player-1",
+ "msg": "i would like to replace player-2 with player-5 or player-6 though.",
+ "mid": "7DD6mOrI2q8g",
+ "quest": 2,
+ "turn": 10
+ },
+ "51": {
+ "player": "player-2",
+ "msg": "i'm good, and i'm not sure about player-5 and player-6",
+ "mid": "2GGRP21fpgRAj",
+ "quest": 2,
+ "turn": 11
+ },
+ "52": {
+ "player": "player-2",
+ "msg": "player-1 voted no in the last party, so do player-3 and player-5",
+ "mid": "5AA8kKRt0YgAK",
+ "quest": 2,
+ "turn": 11
+ },
+ "53": {
+ "player": "player-2",
+ "msg": "i'd like to hear your explanations for more information",
+ "mid": "5AA8kKXC05lWz",
+ "quest": 2,
+ "turn": 11
+ },
+ "54": {
+ "player": "player-3",
+ "msg": "it weird that player-6 didn't include himself in the party.... any good guy will do that for sure....",
+ "mid": "QAA1lL2TmpXX",
+ "quest": 2,
+ "turn": 12
+ },
+ "55": {
+ "player": "player-3",
+ "msg": "also am not a fan of player-2 since she doubted me",
+ "mid": "3YYlgJLHpvOy",
+ "quest": 2,
+ "turn": 12
+ },
+ "56": {
+ "player": "player-4",
+ "msg": "im fine with the team but if this fails then for me it would cast doubt on player-1",
+ "mid": "QAA1lXriP2q4",
+ "quest": 2,
+ "turn": 13
+ },
+ "57": {
+ "player": "player-4",
+ "msg": "i would not include player-6 or player-3 for now but then im not completely sure",
+ "mid": "1VVjOMxHMKAE7",
+ "quest": 2,
+ "turn": 13
+ },
+ "58": {
+ "player": "player-5",
+ "msg": "i think this is super weird that people are immediately casting blame when we only did one quest and it succeeded.",
+ "mid": "7DD6mz2IGn15",
+ "quest": 2,
+ "turn": 14
+ },
+ "59": {
+ "player": "player-5",
+ "msg": "in my opinion, the only people that would want to do that are evil people and merlin.",
+ "mid": "0AAgNpxTn9V5",
+ "quest": 2,
+ "turn": 14
+ },
+ "60": {
+ "player": "player-5",
+ "msg": "player-6 seems very positive that there was an evil person in the first round, but we have no evidence unless he's merlin.",
+ "mid": "vmmgy78U7oQ5z",
+ "quest": 2,
+ "turn": 14
+ },
+ "61": {
+ "player": "player-5",
+ "msg": "but if he were merlin, he wouldn't have removed me since i'm good. so i know he's not",
+ "mid": "XYY6vAVfj7Dw",
+ "quest": 2,
+ "turn": 14
+ },
+ "62": {
+ "player": "player-5",
+ "msg": "so right now i think player-6 and player-1 are bad.",
+ "mid": "4WW8jDnHBJ9x7",
+ "quest": 2,
+ "turn": 14
+ },
+ "63": {
+ "player": "player-5",
+ "msg": "i do not agree with this party, but like player-4 i think if it fails then i would have great suspicions about player-1.",
+ "mid": "9338oyDFmm6nD",
+ "quest": 2,
+ "turn": 14
+ },
+ "64": {
+ "player": "player-5",
+ "msg": "i also don't think we can keep failing party votes, so i will likely approve this one just so we have some information.",
+ "mid": "5AA8krGHXZP",
+ "quest": 2,
+ "turn": 14
+ },
+ "65": {
+ "player": "player-6",
+ "msg": "at this point i tend to believe player-2 is good. i chose this party so as to test player-1.",
+ "mid": "nGGZ0PDc7ykBy",
+ "quest": 2,
+ "turn": 15
+ },
+ "66": {
+ "player": "player-6",
+ "msg": "i don't understand why player-5 is casting doubt on me. i am not speaking against any particular player so i don't think i\" casted\" any\" blame\"",
+ "mid": "qAAjqnMhDKGg",
+ "quest": 2,
+ "turn": 15
+ },
+ "67": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: no, player-2: yes, player-3: no, player-4: yes, player-5: yes, player-6: yes",
+ "mid": "N77xg6lCNWgX",
+ "quest": 2,
+ "turn": 15
+ },
+ "68": {
+ "player": "system",
+ "msg": "vote succeeded! initiating quest vote!",
+ "mid": "1VVjOv0T6Z94",
+ "quest": 2,
+ "turn": 15
+ },
+ "69": {
+ "player": "system",
+ "msg": "quest failed!",
+ "mid": "jAA2jW2CEPQ3",
+ "quest": 2,
+ "turn": 15
+ },
+ "70": {
+ "player": "player-1",
+ "msg": "well, as expected, this failed",
+ "mid": "xooGAW9Cl8N",
+ "quest": 3,
+ "turn": 2
+ },
+ "71": {
+ "player": "player-1",
+ "msg": "player-2 looses track of her own lies, so i am sure she is bad",
+ "mid": "zqqmDgZFMxEOl",
+ "quest": 3,
+ "turn": 2
+ },
+ "72": {
+ "player": "player-1",
+ "msg": "i also don't know why player-4 keeps picking on me for no reason and player-5 just jumps on the bandwagon",
+ "mid": "nGGZ0AgcG3YkE",
+ "quest": 3,
+ "turn": 2
+ },
+ "73": {
+ "player": "player-1",
+ "msg": "also, i voted no on that party because i knew it would fail",
+ "mid": "6YY6lloIrnZxL",
+ "quest": 3,
+ "turn": 2
+ },
+ "74": {
+ "player": "system",
+ "msg": "player-1 proposed a party: player-1, player-4, player-5, player-6",
+ "mid": "none",
+ "quest": 3,
+ "turn": 2
+ },
+ "75": {
+ "player": "player-1",
+ "msg": "so, if player-5 or player-4 could explain why they don't trust me, that would be great",
+ "mid": "ypp8BByHD4lN",
+ "quest": 3,
+ "turn": 2
+ },
+ "76": {
+ "player": "player-2",
+ "msg": "well well well",
+ "mid": "M77jPPpSN2WA",
+ "quest": 3,
+ "turn": 3
+ },
+ "77": {
+ "player": "player-2",
+ "msg": "i don't think player-1 is evident enough to through accusation to me",
+ "mid": "A88nzG2FK9Jj",
+ "quest": 3,
+ "turn": 3
+ },
+ "78": {
+ "player": "player-2",
+ "msg": "so he is the bad guy and we shouldn't vote yes on this party",
+ "mid": "xooGAEYcxE5m",
+ "quest": 3,
+ "turn": 3
+ },
+ "79": {
+ "player": "player-3",
+ "msg": "player-1 took the words straight from me",
+ "mid": "KAAONxlS2m2r0",
+ "quest": 3,
+ "turn": 4
+ },
+ "80": {
+ "player": "player-3",
+ "msg": "as expected this failed",
+ "mid": "zqqmDj3UMXxMD",
+ "quest": 3,
+ "turn": 4
+ },
+ "81": {
+ "player": "player-3",
+ "msg": "i voted no too previously and i think player-1 knows why the missions failed since he failed it",
+ "mid": "p99gpA2tq55N",
+ "quest": 3,
+ "turn": 4
+ },
+ "82": {
+ "player": "player-3",
+ "msg": "i also dont trust player-2 too since she doubted me since round 1",
+ "mid": "l88Olw9h2X27y",
+ "quest": 3,
+ "turn": 4
+ },
+ "83": {
+ "player": "player-3",
+ "msg": "i am not voting for this party because player-1 is in it",
+ "mid": "2GGRPZzcAlMx",
+ "quest": 3,
+ "turn": 4
+ },
+ "84": {
+ "player": "player-4",
+ "msg": "i dont agree with this party since this includes player-6 and player-1 both",
+ "mid": "8XXqnJ9FByj9",
+ "quest": 3,
+ "turn": 5
+ },
+ "85": {
+ "player": "player-4",
+ "msg": "the reason i was doubtful about player-1 was that after first round which passed we had no reason to change the strategy of choosing the same previous two and selecting another randomly since",
+ "mid": "7DD6m5whmz3Nj",
+ "quest": 3,
+ "turn": 5
+ },
+ "86": {
+ "player": "player-4",
+ "msg": "we did not have enough info at that point",
+ "mid": "P661kvyTKM33Z",
+ "quest": 3,
+ "turn": 5
+ },
+ "87": {
+ "player": "player-4",
+ "msg": "thats the reason i was doubtful about player-3 and player-6",
+ "mid": "wnnjzWriNOry",
+ "quest": 3,
+ "turn": 5
+ },
+ "88": {
+ "player": "player-4",
+ "msg": "at this point im only confident about player-5 so i would include him and me for sure",
+ "mid": "wnnjzW1UGW5rq",
+ "quest": 3,
+ "turn": 5
+ },
+ "89": {
+ "player": "player-4",
+ "msg": "i would incline towards player-2 out of player-2 and player-1",
+ "mid": "vmmgyGZFqEXV",
+ "quest": 3,
+ "turn": 5
+ },
+ "90": {
+ "player": "player-4",
+ "msg": "since they're in different teams for sure",
+ "mid": "QAA1l9RSkZjnL",
+ "quest": 3,
+ "turn": 5
+ },
+ "91": {
+ "player": "player-5",
+ "msg": "i agree with player-4 here again.",
+ "mid": "0AAgNG6H2rzno",
+ "quest": 3,
+ "turn": 6
+ },
+ "92": {
+ "player": "player-5",
+ "msg": "player-1 is suspicious because he was immediately accusatory towards player-2 and wanted to place himself in the party.",
+ "mid": "EKKlEnqTWw7K7",
+ "quest": 3,
+ "turn": 6
+ },
+ "93": {
+ "player": "player-5",
+ "msg": "so you brought this upon yourself, stop playing innocent. it makes you look more suspicious.",
+ "mid": "7DD6mQyFvkn5",
+ "quest": 3,
+ "turn": 6
+ },
+ "94": {
+ "player": "player-5",
+ "msg": "i am still suspicious about player-6 and player-1. there is clearly some uncertainty regarding player-2, so i suggest we make the next party player-2, player-3, player-4, and myself.",
+ "mid": "m77wmD6H5vl9X",
+ "quest": 3,
+ "turn": 6
+ },
+ "95": {
+ "player": "player-5",
+ "msg": "i will not approve this current party.",
+ "mid": "3YYlgZxfookK",
+ "quest": 3,
+ "turn": 6
+ },
+ "96": {
+ "player": "player-6",
+ "msg": "i also don't like player-1. player-5 and player-4 seem to be in favor of each other, so they should not be on different teams, which means they are both good.",
+ "mid": "7DD6mokHA0p5k",
+ "quest": 3,
+ "turn": 7
+ },
+ "97": {
+ "player": "player-6",
+ "msg": "i revert my doubts about player-3. that leaves player-2 evil. player-1 is trying to sell player-2 for his own good, so things should be pretty clear now",
+ "mid": "YVV6w2wixNPN",
+ "quest": 3,
+ "turn": 7
+ },
+ "98": {
+ "player": "player-6",
+ "msg": "i. e. i suggest we exclude player-1 and player-2",
+ "mid": "oAAYoE2srnjvk",
+ "quest": 3,
+ "turn": 7
+ },
+ "99": {
+ "player": "player-1",
+ "msg": "well, as you all hate me with a passion, i will change the party",
+ "mid": "M77jP0KtqXKv7",
+ "quest": 3,
+ "turn": 8
+ },
+ "100": {
+ "player": "player-1",
+ "msg": "i just initially suggested that we may want to switch people around because the people of the first quest tend to get a lot of benefit of the doubt",
+ "mid": "JEEZMVwfYwG",
+ "quest": 3,
+ "turn": 8
+ },
+ "101": {
+ "player": "player-1",
+ "msg": "it seems like generally player-6 and me have the least trust and to prove my own innocence, i will add player-2 and player-3 instead",
+ "mid": "JEEZMG9T80YZg",
+ "quest": 3,
+ "turn": 8
+ },
+ "102": {
+ "player": "system",
+ "msg": "player-1 proposed a party: player-4, player-5, player-2, player-3",
+ "mid": "none",
+ "quest": 3,
+ "turn": 8
+ },
+ "103": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: no, player-2: yes, player-3: no, player-4: yes, player-5: yes, player-6: yes",
+ "mid": "p99gvwNS6ZoG",
+ "quest": 3,
+ "turn": 8
+ },
+ "104": {
+ "player": "system",
+ "msg": "vote succeeded! initiating quest vote!",
+ "mid": "A88nGqBiALwL",
+ "quest": 3,
+ "turn": 8
+ },
+ "105": {
+ "player": "system",
+ "msg": "quest failed!",
+ "mid": "l88OoYXC9v18",
+ "quest": 3,
+ "turn": 8
+ },
+ "106": {
+ "player": "system",
+ "msg": "player-2 proposed a party: player-2, player-4, player-5",
+ "mid": "none",
+ "quest": 4,
+ "turn": 1
+ },
+ "107": {
+ "player": "player-2",
+ "msg": "the situation has become weird, so i propose this party that i think has the most chance to succeed.",
+ "mid": "g775j5OhlLzP0",
+ "quest": 4,
+ "turn": 2
+ },
+ "108": {
+ "player": "player-2",
+ "msg": "i don't believe in player-3 because he is doubting me from the beginning of the game",
+ "mid": "3YYln2VcmwVYp",
+ "quest": 4,
+ "turn": 2
+ },
+ "109": {
+ "player": "player-2",
+ "msg": "that's a large chance of bad people i would say, since merlin won't reveal themselves so soon",
+ "mid": "B11gJN9cVpPP5",
+ "quest": 4,
+ "turn": 2
+ },
+ "110": {
+ "player": "player-3",
+ "msg": "i doubted you because you doubted me first player-2....",
+ "mid": "OJJ7ngYC2LB",
+ "quest": 4,
+ "turn": 3
+ },
+ "111": {
+ "player": "player-3",
+ "msg": "i agree with player-6 assessment that player-1 and player-2 are likely to be bad guys",
+ "mid": "oAAYrZnHXB21z",
+ "quest": 4,
+ "turn": 3
+ },
+ "112": {
+ "player": "player-3",
+ "msg": "and the previous round they just swapped a bad guy for another",
+ "mid": "1VVjl6lTMWl8D",
+ "quest": 4,
+ "turn": 3
+ },
+ "113": {
+ "player": "player-3",
+ "msg": "so obviously things failed",
+ "mid": "g775jpltln4xZ",
+ "quest": 4,
+ "turn": 3
+ },
+ "114": {
+ "player": "player-3",
+ "msg": "player-5 and player-4 seems like good ol servants to me",
+ "mid": "k665nr5sO8QYp",
+ "quest": 4,
+ "turn": 3
+ },
+ "115": {
+ "player": "player-4",
+ "msg": "i think this quest should pass but the issue is that we need to figure out the bad guys for the next quest also",
+ "mid": "3YYlnwlcmj0qw",
+ "quest": 4,
+ "turn": 4
+ },
+ "116": {
+ "player": "player-4",
+ "msg": "one of player-1 and player-6 is good",
+ "mid": "ZZZ4B0yT5MXAO",
+ "quest": 4,
+ "turn": 4
+ },
+ "117": {
+ "player": "player-4",
+ "msg": "and either player-2 or player-3 is evil",
+ "mid": "DwwRL8zs5M82P",
+ "quest": 4,
+ "turn": 4
+ },
+ "118": {
+ "player": "player-4",
+ "msg": "if this fails then player-2 should be the evil one for sure but then she can pass this quest and then vote a fail in the next one",
+ "mid": "A88nGmzC9lqX6",
+ "quest": 4,
+ "turn": 4
+ },
+ "119": {
+ "player": "player-4",
+ "msg": "i would say let's include one of player-1 or player-6 in this one but then if you guys have other suggestions im listening",
+ "mid": "wnnjDEWcLzMon",
+ "quest": 4,
+ "turn": 4
+ },
+ "120": {
+ "player": "player-4",
+ "msg": "its a 50 50",
+ "mid": "qAAj0AYCOm5g",
+ "quest": 4,
+ "turn": 4
+ },
+ "121": {
+ "player": "player-4",
+ "msg": "i would say player-1 over player-6 but not sure",
+ "mid": "7DD6rDMSQGv0",
+ "quest": 4,
+ "turn": 4
+ },
+ "122": {
+ "player": "player-5",
+ "msg": "i don't trust player-2 now, so i will not approve this party.",
+ "mid": "A88nG84sZjXr",
+ "quest": 4,
+ "turn": 5
+ },
+ "123": {
+ "player": "player-5",
+ "msg": "i think we need to go with player-3, player-4, and myself. if the vote still fails, then it means one of us is bad and we're doomed next round anyway because i don't know which.",
+ "mid": "8XXqvBgt6wA0E",
+ "quest": 4,
+ "turn": 5
+ },
+ "124": {
+ "player": "player-5",
+ "msg": "there's not enough evidence for me to suspect anyone but player-6, player-1, and player-2 at the moment.",
+ "mid": "wnnjDZ9hVjRw",
+ "quest": 4,
+ "turn": 5
+ },
+ "125": {
+ "player": "player-5",
+ "msg": "so yeah, that's my proposed party and i will reject anything but that.",
+ "mid": "R88gqwkfvm4Ey",
+ "quest": 4,
+ "turn": 5
+ },
+ "126": {
+ "player": "player-6",
+ "msg": "i will approve this party, i. e. player-5, player-4 player-3 because i want to win, but for the sake of my own dignity i must swear i am good",
+ "mid": "EKKlM19fNZBn",
+ "quest": 4,
+ "turn": 6
+ },
+ "127": {
+ "player": "player-6",
+ "msg": "it is very obvious player-2 failed the last quest, if player-5 and player-4 you two still believe in each other...",
+ "mid": "xooGE8pTRPM2",
+ "quest": 4,
+ "turn": 6
+ },
+ "128": {
+ "player": "player-6",
+ "msg": "player-3 made a very good point. player-1 was like\" ok they identified me so now let's swap the plan i'll sacrifice myself for you\" and player-2 was happy about that",
+ "mid": "g775jMliAWlJK",
+ "quest": 4,
+ "turn": 6
+ },
+ "129": {
+ "player": "player-6",
+ "msg": "i don't think any reasonable good player should reject player-5's proposal so let's go with that",
+ "mid": "m77wpXkcPOvg",
+ "quest": 4,
+ "turn": 6
+ },
+ "130": {
+ "player": "player-1",
+ "msg": "player-2 basically just proposed the same party that failed quest 2",
+ "mid": "l88OokRfX9Vl",
+ "quest": 4,
+ "turn": 7
+ },
+ "131": {
+ "player": "player-1",
+ "msg": "we are all pretty certain that player-5 and player-4 are good",
+ "mid": "VJJmx20Sl01zB",
+ "quest": 4,
+ "turn": 7
+ },
+ "132": {
+ "player": "player-1",
+ "msg": "so of course she is bad at this point",
+ "mid": "GwwZOXBT1VNg",
+ "quest": 4,
+ "turn": 7
+ },
+ "133": {
+ "player": "player-1",
+ "msg": "i am still unsure about player-3",
+ "mid": "P661oGMH4rNM3",
+ "quest": 4,
+ "turn": 7
+ },
+ "134": {
+ "player": "player-1",
+ "msg": "so since you still don't like me and think player-6 is good",
+ "mid": "p99gvnjiOQWE",
+ "quest": 4,
+ "turn": 7
+ },
+ "135": {
+ "player": "player-1",
+ "msg": "i propose player-4, player-5 and player-6.",
+ "mid": "LAAgkGouRnYZB",
+ "quest": 4,
+ "turn": 7
+ },
+ "136": {
+ "player": "player-1",
+ "msg": "there is no way player-6, player-2 and me are bad, so he's likely good",
+ "mid": "QAA1pmmTnwr7",
+ "quest": 4,
+ "turn": 7
+ },
+ "137": {
+ "player": "player-2",
+ "msg": "to address player-3's concern, i digged out the chat history",
+ "mid": "7DD6rzvFmZ9OY",
+ "quest": 4,
+ "turn": 8
+ },
+ "138": {
+ "player": "player-2",
+ "msg": "player-2: i also think player-3 is kinda suspicious since he voted no in the first party",
+ "mid": "R88gqrYhrz0p",
+ "quest": 4,
+ "turn": 8
+ },
+ "139": {
+ "player": "player-2",
+ "msg": "i wouldn't say this is unreasonable at that point",
+ "mid": "7DD6r7yT9pJ9",
+ "quest": 4,
+ "turn": 8
+ },
+ "140": {
+ "player": "player-2",
+ "msg": "i'm not sure but i think player-1 and player-6 are the bad guys at the moment",
+ "mid": "WWWnyRqcGNjA",
+ "quest": 4,
+ "turn": 8
+ },
+ "141": {
+ "player": "player-2",
+ "msg": "let's stick to this party",
+ "mid": "YVV6ARXfBY3Z",
+ "quest": 4,
+ "turn": 8
+ },
+ "142": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: no, player-2: yes, player-3: no, player-4: yes, player-5: no, player-6: no",
+ "mid": "VJJmxKmhJqzX",
+ "quest": 4,
+ "turn": 8
+ },
+ "143": {
+ "player": "system",
+ "msg": "vote failed!",
+ "mid": "WWWnyXnS3YQY",
+ "quest": 4,
+ "turn": 8
+ },
+ "144": {
+ "player": "system",
+ "msg": "player-3 proposed a party: player-3, player-4, player-5",
+ "mid": "none",
+ "quest": 4,
+ "turn": 8
+ },
+ "145": {
+ "player": "player-3",
+ "msg": "player-2 those were the seeds of distrust...",
+ "mid": "WWWnyXRU68xK",
+ "quest": 4,
+ "turn": 9
+ },
+ "146": {
+ "player": "player-3",
+ "msg": "and its a little too late to throw player-1 under the bus now player-2...",
+ "mid": "2GGRmQ0SkRYj",
+ "quest": 4,
+ "turn": 9
+ },
+ "147": {
+ "player": "player-3",
+ "msg": "i am choosing this party because its the only one that player-5 would vote yes for",
+ "mid": "3YYlnX6cRGD7",
+ "quest": 4,
+ "turn": 9
+ },
+ "148": {
+ "player": "player-3",
+ "msg": "and player-6 doesn't seem to mind that he is not included. even though i am sure is a good guy too.",
+ "mid": "KAAOjyycQMOl",
+ "quest": 4,
+ "turn": 9
+ },
+ "149": {
+ "player": "player-3",
+ "msg": "we need to win this round",
+ "mid": "KAAOjyDFPrXX",
+ "quest": 4,
+ "turn": 9
+ },
+ "150": {
+ "player": "player-4",
+ "msg": "im not quite sure about this combination, im sure about player-5 but im still little doubtful about player-3",
+ "mid": "A88nGY4snNON",
+ "quest": 4,
+ "turn": 10
+ },
+ "151": {
+ "player": "player-4",
+ "msg": "i dont really have a replacement for also, lol",
+ "mid": "QAA1pxYHkM5K2",
+ "quest": 4,
+ "turn": 10
+ },
+ "152": {
+ "player": "player-5",
+ "msg": "yeah, here's the thing. player-2 is definitely bad.",
+ "mid": "4WW8oj4FJ2Vx2",
+ "quest": 4,
+ "turn": 11
+ },
+ "153": {
+ "player": "player-5",
+ "msg": "her logic makes no sense. if player-6 and player-1 were both bad then that quest wouldn't have failed.",
+ "mid": "rgg0xrnT8zX15",
+ "quest": 4,
+ "turn": 11
+ },
+ "154": {
+ "player": "player-5",
+ "msg": "so it's down to player-6 or player-1 for the last bad person in my eyes. if we include player-3 in the mix then the outcome looks even worse.",
+ "mid": "oAAYrrZC8L0x",
+ "quest": 4,
+ "turn": 11
+ },
+ "155": {
+ "player": "player-5",
+ "msg": "in my opinion player-1's actions would only be explained by him being bad, or literally the worst merlin ever.",
+ "mid": "7DD6rrwsv3NY",
+ "quest": 4,
+ "turn": 11
+ },
+ "156": {
+ "player": "player-5",
+ "msg": "and occam's razor says bad. i agree with the prior assessments that it's likely player-1 and player-2 that are bad then.",
+ "mid": "ZZZ4BBkHonyK",
+ "quest": 4,
+ "turn": 11
+ },
+ "157": {
+ "player": "player-5",
+ "msg": "but let's go with this party and if it fails then it doesn't matter.",
+ "mid": "4WW8o06hBxn5X",
+ "quest": 4,
+ "turn": 11
+ },
+ "158": {
+ "player": "player-6",
+ "msg": "please note that in the last round player-1 and player-2 made a lot of accusations towards each other, and player-2's only reason for blaming player-3 does not make any sense at all",
+ "mid": "LAAgkrYSPPVzY",
+ "quest": 4,
+ "turn": 12
+ },
+ "159": {
+ "player": "player-6",
+ "msg": "player-1 chose to compromise a bit and admit that i am good, because he wants to propose something player-5 won't agree on",
+ "mid": "zqqmJk9SD5g9",
+ "quest": 4,
+ "turn": 12
+ },
+ "160": {
+ "player": "player-6",
+ "msg": "it's obviously his last resort",
+ "mid": "p99gv1DHnlqKv",
+ "quest": 4,
+ "turn": 12
+ },
+ "161": {
+ "player": "player-6",
+ "msg": "player-4 seems to be the only undecided player here. if you trust player-5 you should trust player-3; if you trust me you should also trust player-3",
+ "mid": "ypp8G3BUrVgWK",
+ "quest": 4,
+ "turn": 12
+ },
+ "162": {
+ "player": "player-6",
+ "msg": "this way you should trust player-3 and should approve this party",
+ "mid": "JEEZgo4hqRv5L",
+ "quest": 4,
+ "turn": 12
+ },
+ "163": {
+ "player": "player-6",
+ "msg": "over",
+ "mid": "xooGE3Ps17n58",
+ "quest": 4,
+ "turn": 12
+ },
+ "164": {
+ "player": "player-1",
+ "msg": "well, i am glad people are now convinced that player-2 is bad, which is what i am saying since the first round",
+ "mid": "LAAgkoksRwKmk",
+ "quest": 4,
+ "turn": 13
+ },
+ "165": {
+ "player": "player-1",
+ "msg": "but whatever, this is the end of my knowledge anyways as the alternative was that player-5 is bad, but it's clear the he isn't, also form the very beginning",
+ "mid": "nGGZqK8FGXKK5",
+ "quest": 4,
+ "turn": 13
+ },
+ "166": {
+ "player": "player-1",
+ "msg": "i still tend to trust player-6 more than player-3, so i'd like him on the party instead",
+ "mid": "QAA1p4Dtlxxj",
+ "quest": 4,
+ "turn": 13
+ },
+ "167": {
+ "player": "player-2",
+ "msg": "it seems that the hate with passion has turned towards me right now",
+ "mid": "ypp8GLBtNKBR9",
+ "quest": 4,
+ "turn": 14
+ },
+ "168": {
+ "player": "player-2",
+ "msg": "although i'm good, i will approve whatever party you suggest to gain credit",
+ "mid": "OJJ7nA3UQGXB",
+ "quest": 4,
+ "turn": 14
+ },
+ "169": {
+ "player": "system",
+ "msg": "party vote outcome: player-1: no, player-2: yes, player-3: yes, player-4: yes, player-5: yes, player-6: yes",
+ "mid": "xooGERLiQzZ7",
+ "quest": 4,
+ "turn": 14
+ },
+ "170": {
+ "player": "system",
+ "msg": "vote succeeded! initiating quest vote!",
+ "mid": "GwwZOBWi1o2vl",
+ "quest": 4,
+ "turn": 14
+ },
+ "171": {
+ "player": "system",
+ "msg": "quest failed!",
+ "mid": "OJJ7nNoUA4gPr",
+ "quest": 4,
+ "turn": 14
+ },
+ "172": {
+ "player": "system",
+ "msg": "evil has failed three quests and wins!",
+ "mid": "A88nGv7f9YMQ1",
+ "quest": 5,
+ "turn": 1
+ }
+ },
+ "beliefs": {
+ "1": {
+ "player": "player-1",
+ "about_player": "player-6",
+ "belief": "servant",
+ "quest": 2,
+ "turn": 1
+ },
+ "2": {
+ "player": "player-1",
+ "about_player": "player-5",
+ "belief": "servant",
+ "quest": 2,
+ "turn": 1
+ },
+ "3": {
+ "player": "player-1",
+ "about_player": "player-4",
+ "belief": "servant",
+ "quest": 2,
+ "turn": 1
+ },
+ "4": {
+ "player": "player-1",
+ "about_player": "player-3",
+ "belief": "assassin",
+ "quest": 2,
+ "turn": 1
+ },
+ "5": {
+ "player": "player-1",
+ "about_player": "player-2",
+ "belief": "morgana",
+ "quest": 2,
+ "turn": 1
+ },
+ "6": {
+ "player": "player-3",
+ "about_player": "player-6",
+ "belief": "merlin",
+ "quest": 2,
+ "turn": 2
+ },
+ "7": {
+ "player": "player-6",
+ "about_player": "player-1",
+ "belief": "merlin",
+ "quest": 2,
+ "turn": 7
+ },
+ "8": {
+ "player": "player-6",
+ "about_player": "player-3",
+ "belief": "morgana",
+ "quest": 2,
+ "turn": 7
+ },
+ "9": {
+ "player": "player-3",
+ "about_player": "player-1",
+ "belief": "percival",
+ "quest": 2,
+ "turn": 1
+ },
+ "10": {
+ "player": "player-3",
+ "about_player": "player-1",
+ "belief": "merlin",
+ "quest": 2,
+ "turn": 2
+ },
+ "11": {
+ "player": "player-3",
+ "about_player": "player-1",
+ "belief": "percival",
+ "quest": 2,
+ "turn": 2
+ },
+ "12": {
+ "player": "player-5",
+ "about_player": "player-6",
+ "belief": "minion",
+ "quest": 2,
+ "turn": 3
+ },
+ "13": {
+ "player": "player-3",
+ "about_player": "player-1",
+ "belief": "merlin",
+ "quest": 2,
+ "turn": 3
+ },
+ "14": {
+ "player": "player-5",
+ "about_player": "player-1",
+ "belief": "minion",
+ "quest": 2,
+ "turn": 3
+ },
+ "15": {
+ "player": "player-6",
+ "about_player": "player-2",
+ "belief": "assassin",
+ "quest": 2,
+ "turn": 3
+ },
+ "16": {
+ "player": "player-3",
+ "about_player": "player-4",
+ "belief": "merlin",
+ "quest": 2,
+ "turn": 6
+ },
+ "17": {
+ "player": "player-3",
+ "about_player": "player-6",
+ "belief": "percival",
+ "quest": 2,
+ "turn": 6
+ },
+ "18": {
+ "player": "player-6",
+ "about_player": "player-1",
+ "belief": "morgana",
+ "quest": 3,
+ "turn": 3
+ },
+ "19": {
+ "player": "player-6",
+ "about_player": "player-3",
+ "belief": "merlin",
+ "quest": 3,
+ "turn": 3
+ },
+ "20": {
+ "player": "player-6",
+ "about_player": "player-2",
+ "belief": "servant",
+ "quest": 3,
+ "turn": 3
+ },
+ "21": {
+ "player": "player-3",
+ "about_player": "player-4",
+ "belief": "undecided",
+ "quest": 3,
+ "turn": 4
+ },
+ "22": {
+ "player": "player-3",
+ "about_player": "player-4",
+ "belief": "servant",
+ "quest": 3,
+ "turn": 5
+ },
+ "23": {
+ "player": "player-2",
+ "about_player": "player-3",
+ "belief": "morgana",
+ "quest": 3,
+ "turn": 7
+ },
+ "24": {
+ "player": "player-2",
+ "about_player": "player-1",
+ "belief": "merlin",
+ "quest": 3,
+ "turn": 7
+ },
+ "25": {
+ "player": "player-4",
+ "about_player": "player-2",
+ "belief": "merlin",
+ "quest": 3,
+ "turn": 7
+ },
+ "26": {
+ "player": "player-4",
+ "about_player": "player-1",
+ "belief": "assassin",
+ "quest": 3,
+ "turn": 7
+ },
+ "27": {
+ "player": "player-4",
+ "about_player": "player-6",
+ "belief": "assassin",
+ "quest": 3,
+ "turn": 7
+ },
+ "28": {
+ "player": "player-1",
+ "about_player": "player-6",
+ "belief": "percival",
+ "quest": 4,
+ "turn": 3
+ },
+ "29": {
+ "player": "player-4",
+ "about_player": "player-1",
+ "belief": "undecided",
+ "quest": 4,
+ "turn": 6
+ },
+ "30": {
+ "player": "player-4",
+ "about_player": "player-6",
+ "belief": "undecided",
+ "quest": 4,
+ "turn": 6
+ },
+ "31": {
+ "player": "player-4",
+ "about_player": "player-2",
+ "belief": "undecided",
+ "quest": 4,
+ "turn": 6
+ },
+ "32": {
+ "player": "player-6",
+ "about_player": "player-2",
+ "belief": "assassin",
+ "quest": 4,
+ "turn": 7
+ }
+ },
+ "persuasion": {
+ "1": {
+ "mid": "R88gyG5SvA7WO",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "2": {
+ "mid": "ypp84Ywf7m3y",
+ "persuasion": "critique/opposition",
+ "deception": "omission"
+ },
+ "3": {
+ "mid": "GwwZkqPcJWLXy",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "4": {
+ "mid": "B11gM4zhV3jP9",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "5": {
+ "mid": "JEEZnmjtwvvR",
+ "persuasion": "agreement",
+ "deception": "omission"
+ },
+ "6": {
+ "mid": "R88gyzjuR92m",
+ "persuasion": "agreement",
+ "deception": "commission"
+ },
+ "7": {
+ "mid": "QAA1xyZixAKB",
+ "persuasion": "suggestion",
+ "deception": "omission"
+ },
+ "8": {
+ "mid": "3YYlqMJimq75p",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "9": {
+ "mid": "ZZZ4K3kHjrOr",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "10": {
+ "mid": "DwwROBPF2Br0",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "11": {
+ "mid": "EKKlgDVCNqQL",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "12": {
+ "mid": "jAA2wyxuYlg8",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "13": {
+ "mid": "3YYlqoQi71mp",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "14": {
+ "mid": "8XXqnqqhvMro",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "15": {
+ "mid": "DwwRDkGF5Gpgr",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "16": {
+ "mid": "xooGAkWto6",
+ "persuasion": "critique/opposition",
+ "deception": "commission"
+ },
+ "17": {
+ "mid": "zqqmDPLTzYB",
+ "persuasion": "compromise/concession",
+ "deception": "commission"
+ },
+ "18": {
+ "mid": "6YY6wL3trgA4Z",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "19": {
+ "mid": "YVV6JoLF35By5",
+ "persuasion": "questioning",
+ "deception": "commission"
+ },
+ "20": {
+ "mid": "LAAgpXVSLRXZ",
+ "persuasion": "questioning",
+ "deception": "commission"
+ },
+ "21": {
+ "mid": "YVV6JoWIv6AA",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "22": {
+ "mid": "8XXqn63C64MPp",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "23": {
+ "mid": "4WW8jROCJyk7Z",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "24": {
+ "mid": "3YYlg2ZijgkD",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "25": {
+ "mid": "QAA1l57s0vnY",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "26": {
+ "mid": "EKKlE6GSWwgM8",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "27": {
+ "mid": "EKKlE6YH3JRX4",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "28": {
+ "mid": "rgg0rXZS8zp6z",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "29": {
+ "mid": "7DD6mOrI2q8g",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "30": {
+ "mid": "5AA8kKXC05lWz",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "31": {
+ "mid": "QAA1lL2TmpXX",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "32": {
+ "mid": "3YYlgJLHpvOy",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "33": {
+ "mid": "2GGRP21fpgRAj",
+ "persuasion": "assertion",
+ "deception": "commission"
+ },
+ "34": {
+ "mid": "5AA8kKRt0YgAK",
+ "persuasion": "questioning",
+ "deception": "influence"
+ },
+ "35": {
+ "mid": "QAA1lXriP2q4",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "36": {
+ "mid": "1VVjOMxHMKAE7",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "37": {
+ "mid": "xooGAW9Cl8N",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "38": {
+ "mid": "zqqmDgZFMxEOl",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "39": {
+ "mid": "7DD6mz2IGn15",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "40": {
+ "mid": "nGGZ0AgcG3YkE",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "41": {
+ "mid": "0AAgNpxTn9V5",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "42": {
+ "mid": "vmmgy78U7oQ5z",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "43": {
+ "mid": "6YY6lloIrnZxL",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "44": {
+ "mid": "XYY6vAVfj7Dw",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "45": {
+ "mid": "4WW8jDnHBJ9x7",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "46": {
+ "mid": "ypp8BByHD4lN",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "47": {
+ "mid": "9338oyDFmm6nD",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "48": {
+ "mid": "5AA8krGHXZP",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "49": {
+ "mid": "M77jPPpSN2WA",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "50": {
+ "mid": "xooGAEYcxE5m",
+ "persuasion": "assertion",
+ "deception": "commission"
+ },
+ "51": {
+ "mid": "A88nzG2FK9Jj",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "52": {
+ "mid": "KAAONxlS2m2r0",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "53": {
+ "mid": "zqqmDj3UMXxMD",
+ "persuasion": "logical deduction",
+ "deception": "influence"
+ },
+ "54": {
+ "mid": "p99gpA2tq55N",
+ "persuasion": "critique/opposition",
+ "deception": "commission"
+ },
+ "55": {
+ "mid": "l88Olw9h2X27y",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "56": {
+ "mid": "2GGRPZzcAlMx",
+ "persuasion": "critique/opposition",
+ "deception": "commission"
+ },
+ "57": {
+ "mid": "8XXqnJ9FByj9",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "58": {
+ "mid": "7DD6m5whmz3Nj",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "59": {
+ "mid": "QAA1l9RSkZjnL",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "60": {
+ "mid": "vmmgyGZFqEXV",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "61": {
+ "mid": "wnnjzWriNOry",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "62": {
+ "mid": "P661kvyTKM33Z",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "63": {
+ "mid": "wnnjzW1UGW5rq",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "64": {
+ "mid": "0AAgNG6H2rzno",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "65": {
+ "mid": "EKKlEnqTWw7K7",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "66": {
+ "mid": "7DD6mQyFvkn5",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "67": {
+ "mid": "m77wmD6H5vl9X",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "68": {
+ "mid": "3YYlgZxfookK",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "69": {
+ "mid": "M77jP0KtqXKv7",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "70": {
+ "mid": "JEEZMVwfYwG",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "71": {
+ "mid": "JEEZMG9T80YZg",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "72": {
+ "mid": "g775j5OhlLzP0",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "73": {
+ "mid": "3YYln2VcmwVYp",
+ "persuasion": "questioning",
+ "deception": "commission"
+ },
+ "74": {
+ "mid": "B11gJN9cVpPP5",
+ "persuasion": "logical deduction",
+ "deception": "influence"
+ },
+ "75": {
+ "mid": "OJJ7ngYC2LB",
+ "persuasion": "critique/opposition",
+ "deception": "commission"
+ },
+ "76": {
+ "mid": "oAAYrZnHXB21z",
+ "persuasion": "agreement",
+ "deception": "omission"
+ },
+ "77": {
+ "mid": "1VVjl6lTMWl8D",
+ "persuasion": "critique/opposition",
+ "deception": "influence"
+ },
+ "78": {
+ "mid": "g775jpltln4xZ",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "79": {
+ "mid": "k665nr5sO8QYp",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "80": {
+ "mid": "A88nG84sZjXr",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "81": {
+ "mid": "8XXqvBgt6wA0E",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "82": {
+ "mid": "wnnjDZ9hVjRw",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "83": {
+ "mid": "R88gqwkfvm4Ey",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "84": {
+ "mid": "l88OokRfX9Vl",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "85": {
+ "mid": "VJJmx20Sl01zB",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "86": {
+ "mid": "GwwZOXBT1VNg",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "87": {
+ "mid": "P661oGMH4rNM3",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "88": {
+ "mid": "p99gvnjiOQWE",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "89": {
+ "mid": "LAAgkGouRnYZB",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "90": {
+ "mid": "QAA1pmmTnwr7",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "91": {
+ "mid": "7DD6rzvFmZ9OY",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "92": {
+ "mid": "R88gqrYhrz0p",
+ "persuasion": "compromise/concession",
+ "deception": "commission"
+ },
+ "93": {
+ "mid": "WWWnyRqcGNjA",
+ "persuasion": "assertion",
+ "deception": "commission"
+ },
+ "94": {
+ "mid": "7DD6r7yT9pJ9",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "95": {
+ "mid": "YVV6ARXfBY3Z",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "96": {
+ "mid": "KAAOjyDFPrXX",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "97": {
+ "mid": "3YYlnX6cRGD7",
+ "persuasion": "compromise/concession",
+ "deception": "omission"
+ },
+ "98": {
+ "mid": "2GGRmQ0SkRYj",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "99": {
+ "mid": "WWWnyXRU68xK",
+ "persuasion": "appeal/defense",
+ "deception": "influence"
+ },
+ "100": {
+ "mid": "KAAOjyycQMOl",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "101": {
+ "mid": "A88nGY4snNON",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "102": {
+ "mid": "QAA1pxYHkM5K2",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "103": {
+ "mid": "4WW8oj4FJ2Vx2",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "104": {
+ "mid": "rgg0xrnT8zX15",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "105": {
+ "mid": "oAAYrrZC8L0x",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "106": {
+ "mid": "7DD6rrwsv3NY",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "107": {
+ "mid": "ZZZ4BBkHonyK",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "108": {
+ "mid": "4WW8o06hBxn5X",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "109": {
+ "mid": "LAAgkoksRwKmk",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "110": {
+ "mid": "nGGZqK8FGXKK5",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "111": {
+ "mid": "QAA1p4Dtlxxj",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "112": {
+ "mid": "ypp8GLBtNKBR9",
+ "persuasion": "appeal/defense",
+ "deception": "influence"
+ },
+ "113": {
+ "mid": "OJJ7nA3UQGXB",
+ "persuasion": "compromise/concession",
+ "deception": "commission"
+ },
+ "114": {
+ "mid": "qAAjE19hYQlr",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "115": {
+ "mid": "VJJmDYoH94gJ",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "116": {
+ "mid": "ypp8Bo0FozAA",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "117": {
+ "mid": "rgg0r9DUB1JZ",
+ "persuasion": "compromise/concession",
+ "deception": null
+ },
+ "118": {
+ "mid": "jAA2jnAtjkqlg",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "119": {
+ "mid": "p99gpRQiB3Jp",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "120": {
+ "mid": "ZZZ4xZWT53Bg",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "121": {
+ "mid": "nGGZ0PDc7ykBy",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "122": {
+ "mid": "qAAjqnMhDKGg",
+ "persuasion": "questioning",
+ "deception": null
+ },
+ "123": {
+ "mid": "7DD6mokHA0p5k",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "124": {
+ "mid": "YVV6w2wixNPN",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "125": {
+ "mid": "oAAYoE2srnjvk",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "126": {
+ "mid": "3YYlnwlcmj0qw",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "127": {
+ "mid": "ZZZ4B0yT5MXAO",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "128": {
+ "mid": "DwwRL8zs5M82P",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "129": {
+ "mid": "A88nGmzC9lqX6",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "130": {
+ "mid": "wnnjDEWcLzMon",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "131": {
+ "mid": "7DD6rDMSQGv0",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "132": {
+ "mid": "EKKlM19fNZBn",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "133": {
+ "mid": "xooGE8pTRPM2",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "134": {
+ "mid": "g775jMliAWlJK",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "135": {
+ "mid": "m77wpXkcPOvg",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "136": {
+ "mid": "LAAgkrYSPPVzY",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "137": {
+ "mid": "zqqmJk9SD5g9",
+ "persuasion": "logical deduction",
+ "deception": null
+ },
+ "138": {
+ "mid": "p99gv1DHnlqKv",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "139": {
+ "mid": "ypp8G3BUrVgWK",
+ "persuasion": "appeal/defense",
+ "deception": null
+ },
+ "140": {
+ "mid": "JEEZgo4hqRv5L",
+ "persuasion": "suggestion",
+ "deception": null
+ },
+ "141": {
+ "mid": "VJJmD46sWRry",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "142": {
+ "mid": "XYY6vLqHXn3zB",
+ "persuasion": "critique/opposition",
+ "deception": null
+ },
+ "143": {
+ "mid": "qAAj0AYCOm5g",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "144": {
+ "mid": "xooGE3Ps17n58",
+ "persuasion": "agreement",
+ "deception": null
+ },
+ "145": {
+ "mid": "R88gyAWfv2Jyj",
+ "persuasion": "assertion",
+ "deception": null
+ },
+ "146": {
+ "mid": "rgg0G1Vh8g4Jj",
+ "persuasion": "assertion",
+ "deception": null
+ }
+ }
+}
\ No newline at end of file
diff --git a/streamlit/style.css b/streamlit/style.css
new file mode 100644
index 0000000..32892cf
--- /dev/null
+++ b/streamlit/style.css
@@ -0,0 +1,27 @@
+.player_name {
+ margin-top: -10px;
+}
+
+.chat_msg {
+ font-style: italic;
+ margin-top: 10px;
+}
+
+
+/* .strategy_label_row {
+ margin-top: 15px;
+}
+
+.strategy_label {
+ border-style: solid;
+ border-radius: 100px;
+ padding-left: 10px;
+ padding-right: 10px;
+ padding-top: -0.5rem;
+ width: 100px;
+ text-align: center;
+} */
+
+[data-testid=stVerticalBlock] {
+ gap: 0rem;
+}
\ No newline at end of file