VA-11 Hall-A: Cyberpunk Bartender Action

VA-11 Hall-A: Cyberpunk Bartender Action

312 ratings
Complete Script Flowchart: ALL Decisions, Branches, and Outcomes
By CyberShadow
This guide is dedicated to completionists who want to see every single line of dialogue in the entire game.
3
11
3
8
4
6
2
3
2
   
Award
Favorite
Favorited
Unfavorite
Introduction
This guide consists of a visualization of all the decisions the game lets you take, and their outcomes. It covers 100% of the game's script, so you can use it to see how to get to any point in the game.

The guide is split up into chapters, with one chapter (day) per section. In some places with many parallel branches, the text may be too small to read; in which case, use your web browser's zoom feature to increase the page zoom, which should make it readable.

This guide has been verified to be accurate for game versions 1.2.1.3 (latest Linux build on itch.io) through 1.2.3.0 (latest Linux build on Steam).
How this guide was created
The contents of this guide (other than my notes in prose, such as this one) is generated by a program. As such, and barring bugs in the program, it should be 100% accurate. The program works by essentially playing the game in every possible way that it can be played. It includes a partial implementation of the Game Maker virtual machine, which allows it to execute the same game code as the one that's executed when running the game normally; but, graphics and sound is stubbed, so that only the game logic which affects what happens next is allowed to run.

For every decision that can be made, the program takes every possible choice, and so on. Because every choice multiplicatively adds to the total number of ways to get to that choice so far, the total number of game states grows exponentially as the game progresses, reaching 22,302,709,934,157,665,233,476,757,707,565,301,760,000 (about twenty-two duodecillion) at the end of the game. Since it would be, of course, unimaginably infeasible to analyze every possible way to play the game naively one-by-one, the program tracks which variables the game accesses at any point in time. Because variables that are neither read nor written don't affect the outcome, the software passes through all of combinations of their values so far, which allows it to compute the full (yet exact) set of possibilities within a reasonable time frame. For this purpose, a special data structure ("mapset") was created, which efficiently holds and allows performing operations on very large sets of game states.

The decision nodes generated in the graphs below do not necessarily correspond to the code that the game uses to make these decisions. Instead of copying the decisions made by the game's code, the software infers which aspects of the current game state lead the game to take which decision, which can lead it to generate simpler questions than those used by the game (while still remaining accurate).

The software used to create this guide can be found here:
  • https :// gitlab . com / CyberShadow / va-11_hall-a-dialogue (main program)
  • https :// gitlab . com / CyberShadow / gml_lsp_emu (partial Game Maker VM implementation)
  • https :// github . com / CyberShadow / ae / blob / next / utils / mapset . d (the data structure)
  • https :// gitlab . com / PoroCYon / Altar . NET (used to dump the game code for execution)
  • https :// graphviz . org / (used to render the flowchart images)
  • https :// github . com / CyberShadow / steamguides (used to upload this guide)

Remove the spaces from the above URLs (Steam completely removes the links otherwise).
Omitted mechanics
Certain outcomes reoccur frequently throughout the game. Because it would be excessively verbose to include every occurrence in the graphs below, they are instead listed here.
  • Orders:
    • If Jill doesn't purchase the desired item or pay one of the three subscriptions on the day they're due, order descriptions for the next day will be substituted with a random placeholder message.
  • Mixing:
    • The game keeps track of the total amount of Karmotrine used in mixing drinks (to decide how drunk the clients get).
      • This is shown as "Total Karmotrine used" in the graphs below.
      • This only happens when mixing one drink at a time. When mixing two drinks, Karmotrine contents is ignored.
      • Bottled drinks never have any Karmotrine, even if they're otherwise alcoholic.
    • Mixing a Flaming Moai at any time sets a flag (shown as ft_any in the graphs below).
    • Mixing a Flaming Moai while the current client is Anna or Stella sets a corresponding flag (ft_anna or ft_stella). It is not necessary to actually serve the drink to trigger the effect - resetting, then mixing and serving a different drink preserves the flag.
  • Serving:
    • Serving a Crevice Spike at any time yields a Steam achievement (CREVICE_TROPHY).
    • Serving a wrong drink at any time yields a Steam achievement (RIGHT_WRONG_TROPHY).
    • Serving three wrong drinks in a row, with all three being simple drinks (Sugar Rush, Sparkle Star, Blue Fairy, Sunshine Cloud, Frothy Water, or any bottled drink) causes a Game Over. (The ensuing dialogue varies depending on Jill and Dana's current circumstance.)
  • Payout:
    • Payout outcomes are shown in blue nodes in the graphs below. See the legend section below for details.
    • The logic for serving two drinks is a little different:
      • The shown tip is awarded even if one drink is incorrect.
      • If both drinks are correct, the "big drink" bonus is awarded in an all-or-nothing (+$200 or $0) manner.
      • Because of the cash reset bug, mixing the first drink correctly causes the cost of all drinks mixed up to that point (not including the current two drinks) to reset. Only tips are counted.
Legend
  • Variables:
    • When the game sets a variable to some value, this is shown as "some_variable_name := some_value".
    • When the game checks the value of a variable, that is shown as "Value of some_variable_name?", with the possible values as branches.
  • Drink outcomes:
    • "Free drink": no charge, no tip, and the drink does not trigger the mistake counter.
    • "Wrong drink": the mistake counter is incremented. The customer does not pay, and there is no tip.
    • "+ Big bonus": unless the drink is naturally big ("Marsblast", "Zen Star", "Piano Man" or "Piano Woman"), +$100 is added to the drink price. Note that this happens even if the drink is actually small (though usually the game script checks the drink size first).
  • Unreachable dialogue transitions are indicated with a dotted line.
Prologue - Day 1

Prologue - Day 2


Prologue - Day 3

Anna - Demo

Anna - Start
Intro - Anna
Intro - Tutorial
Week 1 - Day 1



Week 1 - Day 2



Week 1 - Day 3



Week 1 - Day 4



Week 1 - Day 5


Week 1 - Day 6

Week 2 - Day 7

Week 2 - Day 8


Week 2 - Day 9


Week 2 - Day 10

Week 2 - Day 11

Week 2 - Day 12

Week 2 - Day 13
Week 3 - Day 14


Week 3 - Day 15


Week 3 - Day 16


Week 3 - Day 17



Week 3 - Day 18



Week 3 - Day 19
Endings - Epilogues
There is a small artifact here due to how the game checks / awards achievements. It can be ignored.


Endings - Game Over
Variable index
You can use this table to reference when variables are set and accessed.
  • A red circle (🔴) indicates that the variable is set on that day.
  • A green circle (🟢) indicates that the variable is read on that day.
  • An orange circle (🟠) indicates that the variable is both set and read on that day.

Variable
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
alma5
🟠
alma6
🟠
alma7
🟠
🟢
alma8
🟠
almadrunk1
🔴
🟢
almadrunk2
🟠
🟢
anna1
🟠
anna2
🟠
anna3
🔴
art6
🟠
art7
🔴
bettydrunk1
🔴
🟢
brian1
🟠
brian2
🟠
db1
🟠
db2
🔴
db4
🟠
db5
🔴
db6
🟠
db7
🟠
db8
🔴
dogpick
🟠
dondrunk1
🔴
🟢
🟢
dondrunk3
🔴
🟢
dorodrink1
🔴
🟢
🟢
dorodrink7
🟠
dorodrink9
🟠
🟢
🟢
🟢
🟢
dorodrunk1
🔴
🟢
dorothy12
🟠
dorothy13
🟠
dorothy14
🟠
drunkmiki1
🔴
🟢
ft_alma
🟢
ft_any
🟢
ft_stella
🟢
gabyorder
🟠
housedl
🟢
ing1
🟠
ing2
🟠
ing3
🔴
ing4
🟠
🟢
ing5
🟠
🟢
ing6
🟠
ing7
🔴
ingdrunk1
🔴
🟢
🟢
🟢
🟢
jamie1
🟠
jamie2
🟠
jilldrunk1
🔴
🟢
kim1
🟠
kimdrunk1
🔴
🟢
🟢
🟢
🟢
mario1
🟠
🟢
mario2
🟠
🟢
mario3
🔴
🟢
miki1
🔴
🟢
🟢
miki2
🟠
miki3
🔴
miki5
🟠
🟢
norma1
🟠
🟢
sei5
🟠
🟢
🟢
🟢
sei6
🟠
🟢
🟢
🟢
sei7
🟠
sei9
🔴
seidrunk1
🔴
🟢
🟢
🟢
🟢
stel1
🟠
🟢
🟢
🟢
🟢
🟢
🟢
🟢
🟢
stel10
🟠
stel11
🔴
stel2
🟠
🟢
🟢
🟢
🟢
🟢
🟢
🟢
🟢
stel4
🟠
🟢
🟢
🟢
🟢
stel5
🟠
🟢
🟢
🟢
🟢
stel6
🟠
stel7
🟠
stel8
🔴
stel9
🟠
steldrunk1
🟠
stream1
🟠
stream2
🟠
stream3
🟠
stream4
🟠
stream5
🟠
stream6
🔴
streamdrunk1
🟠
🟢
🟢
truevirgilio1
🟠
truevirgilio2
🔴
🟢
virgilio6
🟠
Final State
The image below is a visual representation of all the possible states that the game can be in when reaching the end of the game.

Every state is represented as a distinct way to travel from the top of the graph to the bottom; the traveled path represents the values of variables from that state.

Bugs
Some bugs were noticed during the creation of this guide, some of which affect the outcomes of choices in the graphs above:
  • Typos in calculated drink properties leading to inconsistencies:
    • The taste of a Piano Man is "Bitter" instead of "bitter".
    • When a Piano Woman is mixed as the second drink, its taste is "Sweet" instead of "sweet".
    • The taste of a big Crevice Spike is "ssour" (sic) instead of "sour".
  • Mixing:
    • Mixing two drinks (with drink 1 being correct) resets all non-tip income from the current day so far.
      This does not affect the displayed total income counter (visible in the game), but does affect the amount used for calculating Jill's commission.
      This is most evident at the end of Day 3. The last order is two Blue Fairies, which (if completed) causes that day's "Drinks' total" to be only $340 (thus earning Jill a mere $102 commission assuming flawless service).
    • The "big drink" $100 bonus is awarded even when the drink is small. The script doesn't always check the drink size.
      The first example is Ingram's first order, Gut Punch - $180 is cashed in even if Jill mixes a small Gut Punch (which has a base price of $80).
    • Customers don't pay for orders Jill gets wrong, despite the script occasionally implying otherwise.
  • Script bugs:
    • Tutorial:
      • There is an unreachable dialogue sequence for, apparently, the case that Jill accidentally makes a Sparkle Star instead of a Sugar Rush by mixing it for too long. (The recipe for Sparkle Star differs from Sugar Rush by aging, not blending.)
    • Day 1:
      • Donovan always says "Try to give me a Beer this time" regardless of what Jill served previously.
    • Day 7:
      • Art asks for a Piano Man or something with "lots of alcohol", however, a typo in the game's code causes it to check the wrong variable. It is thus impossible to access the branch in which Art reacts to a drink with a lot of alcohol.
    • Day 11:
      • Script code typo: [XS:ph,1}[E:7] (the } should have been a ]). No visible effect.
      • Making two Fringe Weavers instead of one Fringe Weaver and one Bloom Light causes Betty to say "Not a single drink right".
    • Day 12:
      • Script code typo: [RES:[XS:jilltalk,1] (missing ]). Causes Jill's "Here you go" line to be silent.
    • Day 15:
      • A second music track starts playing when opening Gaby's note. However, the pre-jukebox theme continues playing in the background, resulting in a cacophony.
31 Comments
cloud tribal Jan 16 @ 11:28am 
Hello, is there any way I can see the omitted lines? I'm currently doing a college project for which I need every single line of dialogue and this flowchart would save me XD (Such an amazing job btw). If this is not possible, could anyone help me get very line of dialogue in the game? Thanks beforehand
JanSlav Feb 26, 2024 @ 4:54pm 
this is absolutely unhinged, i love it
peachi Aug 9, 2023 @ 6:22am 
This is insane. I don't know how long it took you to make this but this is really cool.
SpiritOfRei Jan 27, 2022 @ 5:34pm 
Thanks.
CyberShadow  [author] Jan 27, 2022 @ 4:23pm 
Sometimes Steam fails to display images in guides. This archived copy has all images: https://archive.is/DkUU3
SpiritOfRei Jan 26, 2022 @ 9:43pm 
Why is "Week 3 - Day 19", "Endings - Epilogues", "Endings - Game Over" and "Final State" all empty?
mocha Dec 11, 2021 @ 9:15am 
I found a small typo.

In Omitted mechanics , there's a mention of ft_anna.

I think this should be ft_alma (in Variable Index section, there is no ft_anna).
Faxe#Sebi Dec 10, 2021 @ 8:44am 
thank you all!
mocha Dec 10, 2021 @ 2:17am 
@Faxe#Krambambuli

To add to that, you can also view all the dialogues text in:
C:\Program Files (x86)\Steam\steamapps\common\VA-11 HALL-A\scripts\eng
CyberShadow  [author] Dec 6, 2021 @ 1:18am 
The source code of the software used to generate the flowcharts is linked in the description. You can change lib/graphviz.d lines 423-427 to disable the abbreviation logic. Unless I misunderstood, your second question can be answered simply by checking which variables have more than one green/orange circle in their row.