Blame
| 0ea2e3 | Anonymous | 2026-04-14 00:11:17 | 1 | # Vip Docs: Save Data - Player Progress and Client data |
| 2 | ||||
| 3 | ||||
| 4 | All clients are saved as a Json in the following format |
|||
| 5 | ||||
| 6 | ``` |
|||
| 7 | { |
|||
| 8 | "name": "", |
|||
| 9 | "age": null, |
|||
| 10 | "gender": "", |
|||
| 11 | "occupation": "", |
|||
| 12 | "personal_background": "", |
|||
| 13 | "relationships": "", |
|||
| 14 | "medical_history": "", |
|||
| 15 | "presenting_problem": "", |
|||
| 16 | "predisposing_factors": "", |
|||
| 17 | "precipitating_factors": "", |
|||
| 18 | "perpetuating_factors": "", |
|||
| 19 | "protective_factors": "", |
|||
| 20 | "behaviors": "", |
|||
| 21 | "affects": "", |
|||
| 22 | "sensations": "", |
|||
| 23 | "imagery": "", |
|||
| 24 | "cognitions": "", |
|||
| 25 | "openness": null, |
|||
| 26 | "contentiousness": null, |
|||
| 27 | "extraversion": null, |
|||
| 28 | "agreeableness": null, |
|||
| 29 | "neuroticism": null, |
|||
| 30 | "dASS_Depression": null, |
|||
| 31 | "dASS_Anxiety": null, |
|||
| 32 | "dASS_stress": null, |
|||
| 33 | "referral": "", |
|||
| 34 | "notes": "", |
|||
| 35 | "formulation_summary": "", |
|||
| 36 | "working_diagnosis": "", |
|||
| 37 | "voice": "", |
|||
| 38 | "apperance": "", |
|||
| 39 | "memory": { |
|||
| 40 | "last_session_summary": [], |
|||
| 41 | "new_key_facts": [], |
|||
| 42 | "my_goals": [], |
|||
| 43 | "my_cbt_strategies": [], |
|||
| 44 | "homework_assigned_to_me": [], |
|||
| 45 | "homework_outcome": [], |
|||
| 46 | "updated_symptom_severity": "", |
|||
| 47 | "rapport_with_therapist": null |
|||
| 48 | }, |
|||
| 49 | "iQ": null, |
|||
| 50 | "progress_stage": null, |
|||
| 51 | "session_type": "", |
|||
| 52 | "performance": null, |
|||
| 53 | "symptom_ severity": "", |
|||
| 54 | "sessions_completed_current_run": null, |
|||
| 55 | "sessions_completed_total": null, |
|||
| 56 | "arcs_completed": null, |
|||
| 57 | "fails": null, |
|||
| 58 | "time_with_client": "", |
|||
| 59 | "first_performance": null, |
|||
| 60 | "best_peformance": null, |
|||
| 61 | "recent_feedback": "" |
|||
| 62 | } |
|||
| 63 | ``` |
|||
| 64 | ||||
| 65 | # Public Client Json (Ground Truth) |
|||
| 66 | ||||
| 67 | In UE at runtime these client jsons are loaded from disc and converted to a struct of type ST_Client so that the game can more easily digest these values. |
|||
| 68 | BP_ISNAILink_Component also |
|||
| 69 | ||||
| 70 | For each client, there is a ground truth of the client saved in the public save directory, which is fount at `<ProjectDirectory>/Saved/VipSaveData/Public`. There are further subdirectories for each game mode (`<ProjectDirectory>/Saved/VipSaveData/Public/onestep`, `<ProjectDirectory>/Saved/VipSaveData/Public/structured`, `<ProjectDirectory>/Saved/VipSaveData/Public/open`), i.e. clients in the onestep client directory will only be available for onstep gamemode. Currently, if a client is to be used for multiple gamemodes, there needs to be a copy of that client json in each gamemode subdirectory. |
|||
| 71 | ||||
| 72 | BP_ISNAILink_Component uses these public client jsons in its requests to the AI backend to provide the LLM with the persona to roleplay. Note that the backend does not use all information in this json. Currently, the following is excluded: |
|||
| 73 | ||||
| 74 | ``` |
|||
| 75 | exclude = [ |
|||
| 76 | "openness", |
|||
| 77 | "contentiousness", |
|||
| 78 | "extraversion", |
|||
| 79 | "agreeableness", |
|||
| 80 | "neuroticism", |
|||
| 81 | "dASS_Depression", |
|||
| 82 | "dASS_Anxiety", |
|||
| 83 | "dASS_stress", |
|||
| 84 | "formulation_summary", |
|||
| 85 | "working_diagnosis", |
|||
| 86 | "referral", |
|||
| 87 | "notes", |
|||
| 88 | "voice", |
|||
| 89 | "apperance", |
|||
| 90 | "session_type", |
|||
| 91 | "performance", |
|||
| 92 | "progress_stage", |
|||
| 93 | "IQ", |
|||
| 94 | "memory", |
|||
| 95 | ] |
|||
| 96 | ``` |
|||
| 97 | ||||
| 98 | Below is an example of a completed public client Json |
|||
| 99 | ||||
| 100 | ``` |
|||
| 101 | { |
|||
| 102 | "name": "BILL H", |
|||
| 103 | "age": 36, |
|||
| 104 | "gender": "Male", |
|||
| 105 | "occupation": "Accountant", |
|||
| 106 | "personal_background": "Born in Melbourne and has lived in the Northern suburbs his entire life. Earned an Accounting degree from the University of Melbourne. He is a high-achiever who works 60-hour weeks and has not taken a holiday in four years. He measures his personal success entirely by the quality and quantity of his work rather than his income. Identifies as White, Anglo-Saxon, and Agnostic.", |
|||
| 107 | "relationships": "Married to Melinda (a part-time PA) with two primary school-aged children, Emily and Peter. His extreme work hours cause significant tension and conflict within his marriage. He has a positive relationship with his retired parents, Joan and Ron, and his siblings, Jane and Fred, though he rarely sees them. He feels a deep, stressful loyalty to his employers, who are also his friends.", |
|||
| 108 | "medical_history": "Relatively fit and healthy; takes medication for blood pressure and cholesterol. No prior psychiatric history. Had problematic alcohol use from ages 18-24, including two drink-driving charges at age 23, but has been mostly sober since age 24, only having a glass of scotch for the birth of his children.", |
|||
| 109 | "presenting_problem": "Intense stress, anxiety, and a dysphoric ('depressed') mood triggered by the imminent collapse of the family business where he works. Currently on sick leave. Symptoms include decreased motivation, difficulty sleeping, concentration/memory issues, and unusual outbursts of anger.", |
|||
| 110 | "predisposing_factors": "Identity and self-worth are tied exclusively to professional output. History of 4-5 previous depressive episodes following negative life events. Background of chronic overwork and high-stress professional ethics.", |
|||
| 111 | "precipitating_factors": "The permanent closure of his current workplace, accelerated by the COVID-19 pandemic. The realization that he must personally manage the 'winding up' process for his friends.", |
|||
| 112 | "perpetuating_factors": "Extreme fear of repeating a traumatic experience from six years ago where he felt 'conned' and betrayed while closing a printing firm. Rumination about future finances and employment. Avoidance of the workplace.", |
|||
| 113 | "protective_factors": "Supportive family environment; positive relationship with parents and siblings; professional qualifications; strong history of sobriety; no suicidal ideation.", |
|||
| 114 | "behaviors": "ROLEPLAY STYLE: Cooperative and friendly but displays initial skepticism toward counseling, stating he doesn't think it will help. He may describe himself as feeling 'silly' for having a psychological reaction. Exhibits unusual outbursts of anger when discussing work. Currently avoiding tasks and struggling to 'do anything' at home.", |
|||
| 115 | "affects": "EMOTIONAL STATE: Dysphoric and agitated. Affect is stable but limited in range. Note: Displays heightened distress and feelings of 'personal attack' when discussing business ethics or the loss of loyalty from colleagues.", |
|||
| 116 | "sensations": "\"Difficulty falling and staying asleep; general agitation; concentration and memory lapses; history of alcohol withdrawal symptoms (not currently active).", |
|||
| 117 | "imagery": "Traumatic memories of the printing firm folding six years ago; images of colleagues being 'vultures' trying to take from a crumbling company; memories of beach holidays in his youth.", |
|||
| 118 | "cognitions": "DISCLOSURE LEVEL: Will discuss current work stress readily but is hesitant to admit he feels like a 'failure'. Believes his value is purely defined by his work volume. Ruminates on being 'conned' or 'tricked' by colleagues in the past.", |
|||
| 119 | "openness": 40, |
|||
| 120 | "contentiousness": 90, |
|||
| 121 | "extraversion": 45, |
|||
| 122 | "agreeableness": 65, |
|||
| 123 | "neuroticism": 80, |
|||
| 124 | "dASS_Depression": 24, |
|||
| 125 | "dASS_Anxiety": 20, |
|||
| 126 | "dASS_stress": 34, |
|||
| 127 | "referral": "An accountant referred by his wife, Melinda, who is concerned about his refusal to work and his 'depressed' mood. Following the news that the small family business he works for is failing, Bill has become highly stressed, experiencing anger outbursts and sleep loss. ", |
|||
| 128 | "notes": "", |
|||
| 129 | "formulation_summary": "", |
|||
| 130 | "working_diagnosis": "Generalised Anixety Disorder", |
|||
| 131 | "voice": "daniel", |
|||
| 132 | "apperance": "Dimitri", |
|||
| 133 | "memory": { |
|||
| 134 | "last_session_summary": [], |
|||
| 135 | "new_key_facts": [], |
|||
| 136 | "my_goals": [], |
|||
| 137 | "my_cbt_strategies": [], |
|||
| 138 | "homework_assigned_to_me": [], |
|||
| 139 | "homework_outcome": [], |
|||
| 140 | "updated_symptom_severity": "moderate ", |
|||
| 141 | "rapport_with_therapist": 50 |
|||
| 142 | }, |
|||
| 143 | "iQ": 100, |
|||
| 144 | "progress_stage": 0, |
|||
| 145 | "session_type": "", |
|||
| 146 | "performance": 0, |
|||
| 147 | "symptom_ severity": "SEVERE", |
|||
| 148 | "sessions_completed_current_run": 0, |
|||
| 149 | "sessions_completed_total": 0, |
|||
| 150 | "arcs_completed": 0, |
|||
| 151 | "fails": 0, |
|||
| 152 | "time_with_client": "+00000000.00:00:00.000000000", |
|||
| 153 | "first_performance": 0, |
|||
| 154 | "best_peformance": 0, |
|||
| 155 | "recent_feedback": "" |
|||
| 156 | } |
|||
| 157 | ``` |
|||
| 158 | Below is a list of the Public client directories for each gametype: |
|||
| 159 | ||||
| 160 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\onestep\` |
|||
| 161 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\onestep\` |
|||
| 162 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\onestep\` |
|||
| 163 | ||||
| 164 | > [!WARNING] |
|||
| 165 | > ***_Important exception!!!_*** For onestep gamemode, the field session_type is used to specify what kind of one-step module the "case" is (E.g. Risk Assessment, Intake, Basic Counselling etc.) This is only used in onestep and must be kept blank for clients not being used for onestep. |
|||
| 166 | ||||
| 167 | ||||
| 168 | # Client Progress Json (Player Progress & Client Memory) |
|||
| 169 | ||||
| 170 | When a user interacts with a client for the first time, a clone of the public client json is created and saved in the users personal directory. This is the progress json. For example, starting a sesson with client "Nathan S" for the first time in the onestep gamemode will make a .json in the directory `<ProjectDirectory>/Saved/VipSaveData/<UserHashCode>/structured/ClientProgress/onestep/Nathan S.json`. This cloned json is used to keep track of player progress (e.g. notes in the players notebook, psychometric results, keeping score of playtime metrics, performance, etc). As such, when it is generated, it is missing any information the player themselves must uncover, and these Jsons are not given to the AI backend. For example, this is a freshly generated player progress json: |
|||
| 171 | ||||
| 172 | ``` |
|||
| 173 | { |
|||
| 174 | "name": "BILL H", |
|||
| 175 | "age": 36, |
|||
| 176 | "gender": "Male", |
|||
| 177 | "occupation": "Accountant", |
|||
| 178 | "personal_background": "", |
|||
| 179 | "relationships": "", |
|||
| 180 | "medical_history": "", |
|||
| 181 | "presenting_problem": "", |
|||
| 182 | "predisposing_factors": "", |
|||
| 183 | "precipitating_factors": "", |
|||
| 184 | "perpetuating_factors": "", |
|||
| 185 | "protective_factors": "", |
|||
| 186 | "behaviors": "", |
|||
| 187 | "affects": "", |
|||
| 188 | "sensations": "", |
|||
| 189 | "imagery": "", |
|||
| 190 | "cognitions": "", |
|||
| 191 | "openness": 1, |
|||
| 192 | "contentiousness": 1, |
|||
| 193 | "extraversion": 1, |
|||
| 194 | "agreeableness": 1, |
|||
| 195 | "neuroticism": 1, |
|||
| 196 | "dASS_Depression": 1, |
|||
| 197 | "dASS_Anxiety": 1, |
|||
| 198 | "dASS_stress": 1, |
|||
| 199 | "referral": "An accountant referred by his wife, Melinda, who is concerned about his refusal to work and his 'depressed' mood. Following the news that the small family business he works for is failing, Bill has become highly stressed, experiencing anger outbursts and sleep loss. ", |
|||
| 200 | "notes": "", |
|||
| 201 | "formulation_summary": "", |
|||
| 202 | "working_diagnosis": "Minor Depression", |
|||
| 203 | "voice": "daniel", |
|||
| 204 | "apperance": "Dimitri", |
|||
| 205 | "memory": { |
|||
| 206 | "last_session_summary": [], |
|||
| 207 | "new_key_facts": [], |
|||
| 208 | "my_goals": [], |
|||
| 209 | "my_cbt_strategies": [], |
|||
| 210 | "homework_assigned_to_me": [], |
|||
| 211 | "homework_outcome": [], |
|||
| 212 | "updated_symptom_severity": "moderate ", |
|||
| 213 | "rapport_with_therapist": 50 |
|||
| 214 | }, |
|||
| 215 | "iQ": 100, |
|||
| 216 | "progress_stage": 1, |
|||
| 217 | "session_type": "", |
|||
| 218 | "performance": 0, |
|||
| 219 | "symptom_ severity": "MODERATE", |
|||
| 220 | "sessions_completed_current_run": 0, |
|||
| 221 | "sessions_completed_total": 0, |
|||
| 222 | "arcs_completed": 0, |
|||
| 223 | "fails": 0, |
|||
| 224 | "time_with_client": "+00000000.00:00:00.000000000", |
|||
| 225 | "first_performance": 0, |
|||
| 226 | "best_peformance": 0, |
|||
| 227 | "recent_feedback": "" |
|||
| 228 | } |
|||
| 229 | ``` |
|||
| 230 | When players do things like take notes in the notebook, the corresponding fields will be updated in the json. Also, when the player finishes a sesison, metrics like peformance, progress stage, time with client, sessions completed, etc will be updated by the WB_Feedback blueprint. |
|||
| 231 | ||||
| 232 | > [!WARNING] |
|||
| 233 | > ***_Important exception!!!_*** For structured gamemode (Simulated Roleplay), client memories will be stored memory field of the progress json, with the request to update memory and the function to store the response being found in WB_Feedback. In structured mode, things like memory, update_symtom_severity, and rapport_with_therapist are loaded from the progress json and appended to the public ground truth client json before making requests to the AI backend in order to include progress / simulate memory / permit persistanc between sessions. |
|||
| 234 | ||||
| 235 | Below is a list of all the client progress directories for each gametype: |
|||
| 236 | ||||
| 237 | ||||
| 238 | - `<ProjectDirectory>/Saved/VipSaveData/<UserHashCode>/onestep/ClientProgress/onestep/` |
|||
| 239 | - `<ProjectDirectory>/Saved/VipSaveData/<UserHashCode>/structured/ClientProgress/` |
|||
| 240 | - `<ProjectDirectory>/Saved/VipSaveData/<UserHashCode>/open/ClientProgress/onestep/` |
|||
| 241 | ||||
| 242 | ||||
| 243 | # History Json |
|||
| 244 | ||||
| 245 | At the end of each session, a history json is also created to help collect user gameplay metrics not easily covered by the progress json. This is used in the report card (WB_ReportCard) history tab. History Jsons are named after the datetime of their creation. This is an example of a history json path: `<ProjectPath>\Saved\VipSaveData\<UserHashID>\ClientProgress\history\2026-2-23-10-53-20.json` |
|||
| 246 | ||||
| 247 | This is an example of a history json: |
|||
| 248 | ||||
| 249 | ``` |
|||
| 250 | { |
|||
| 251 | "date": "2026-2-23", |
|||
| 252 | "name": "MARK S", |
|||
| 253 | "game_mode": "OneStep", |
|||
| 254 | "session_type": "Basic Counseling", |
|||
| 255 | "session_length": "+00000000.00:06:18.860000000", |
|||
| 256 | "performance": 0.29544444444444445, |
|||
| 257 | "feedback": "Summary: The therapist demonstrates basic rapport-building and questioning skills but lacks depth in active listening, emotional attunement, and session structure.\n- Rapport, Safety, and Ethics: 2/4 — The therapist attempts to establish rapport by welcoming the client and expressing interest in working together. However, there is no explicit discussion of confidentiality or ethical boundaries.\n- Active Listening and Emotional Attunement: 1/4 — The therapist asks questions but does not reflect the client's thoughts or feelings or show empathy. There is minimal response to the client's resistance or emotional cues.\n- Exploration, Questioning, and Assessment: 3/4 — The therapist uses open questions to explore the incident and its context. However, there is limited probing into underlying issues or risk factors beyond the immediate situation.\n- Judgment and Collaboration: 2/4 — The therapist provides some rationale for the session's importance but does not offer clear next steps or collaborate on goals. Psychoeducation is minimal.\n- Session Structure and Closure: 1/4 — The session lacks structure and closure. The therapist does not set clear goals or ensure the client feels supported before ending the interaction." |
|||
| 258 | } |
|||
| 259 | ``` |
|||
| 260 | ||||
| 261 | # Client Creator, Publishing, Editing and Deleting Clients |
|||
| 262 | ||||
| 263 | When a player creates a client, the ground truth json of that client will be saved in the players custom client directory: `<ProjectPath>\Saved\VipSaveData\<UserHashID>\ClientProgress\custom` |
|||
| 264 | ||||
| 265 | Players can access their custom clients by selecting the Open Roleplay gamemode and going into the custom client tab. |
|||
| 266 | ||||
| 267 | The WB_PatientSelectButton for custom clients has the options "Publish, Edit, and Delete". |
|||
| 268 | ||||
| 269 | **Publishing** |
|||
| 270 | ||||
| 271 | Users can publish clients. This means a clone will be made of that custom client json and then copied into one of the public directories depending on what gamemode the user chose to publish the client into: |
|||
| 272 | ||||
| 273 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\onestep\` |
|||
| 274 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\structured\` |
|||
| 275 | - `<ProjectPath>\Saved\VipSaveData\Public\Clients\open\` |
|||
| 276 | ||||
| 277 | A publishing a client makes the published client publically avaliable for all users. |
|||
| 278 | This feature is restricted to "admin" only (meaning anyone with a @student in their username cannot do this action) |
|||
| 279 | ||||
| 280 | **Editing** |
|||
| 281 | ||||
| 282 | Selecting edit reloads the client back into the client creator. Only the publisher of a client is able to edit said client. |
|||
| 283 | Currently, you cannot overwrite an existing published client unless you rename them (as far as i am aware), although this would be good to have. |
|||
| 284 | ||||
| 285 | **Deleting** |
|||
| 286 | ||||
| 287 | Selecting delete deletes the custom client json for this client, as well as their public client json from all public client directories, completely removing this client from the game. |
|||
| 288 | Only the author of said client is able to peform this action. |
