Fallen London Wiki:IDs and Hidden Qualities

From Fallen London Wiki

Under the hood, Fallen London uses several technical tricks related to qualities. Some of these are tracked on this wiki, and with some secret knowledge (which is available for everyone to read here on the Internet), you too can contribute and use it.

There are two aspects discussed here, IDs and Hidden Qualities. They are similar enough that we have decided to merge the tutorials about them together.

IDs[edit]

What is an ID?[edit]

Every Item, Quality, Story etc. in Fallen London has its own unique identifier. Using that, you can tell it apart from other Items, Qualities, Stories etc. For example, Having Recurring Dreams: Upon a Painted Sea has the ID 142518.

What can I do with an ID?[edit]

This wiki stores IDs in a property, Property:ID. Combined with our categories, that allows us to make lists like "qualities ordered by release date". It is also doubling as a unique identifier in our articles. The wiki extension uses ID to differentiate objects which have the same name in the game.

How do I find an ID?[edit]

If you have the quality, items, etc, you can usually check out the source code of the page. The ID will be somewhere nearby to where you can see the quality on your display; it will also usually be in a data-branch-id parameter.

For example, this is what Having Recurring Dreams: Upon a Painted Sea looks like in the source code of the Myself tab in the game:

Get id from myself tab.png

We are interested in the highlighted number, 142518.

You can also find the ID using the methods described below for finding hidden qualities.

Once you have found the ID, add it to the respective page. All used templates have an ID parameter, so in this example, you would add the ID like so:

|ID = 142518

Where should I add IDs?[edit]

Hidden Qualities[edit]

What is a Hidden Quality?[edit]

A hidden quality is a quality that is not announced to you when you get it. For example, when you get offered an exceptional story, you gain the respective PlayedTrailer quality, but it is not announced and you don't have it on your myself tab.

What can I do with a Hidden Quality?[edit]

Knowledge of a hidden quality allows us to better analyze how the game makes its decisions. For example, there are randomizers like The Airs of London - if you know that it determines the outcome or availability of an action, you can cycle it until you get an auspicious result.

How do I find details of a Hidden Quality?[edit]

First you need to know where hidden qualities are found, then you can use several approaches to get that data.

Whenever you do something in Fallen London, you send a so-called HTTP request to the Fallen London servers. Most commonly, you send a storylet request when entering (or returning to) a location like Spite, a begin request when you click on a storylet like Rob a drunk, or a choosebranch request when you click on an action on a storylet, like An anonymous wretch on the Rob a drunk storylet.

The server sends a response which contains the results of whatever you did. It uses the JSON format. The full response for An anonymous wretch is below, click here to view it.

{
  "canChangeOutfit":true,
  "actions":15,
  "phase":"End",
  "endStorylet":{
    "rootEventId":10569,
    "currentActionsRemaining":15,
    "event":{
      "name":"That's interesting...",
      "description":"At a safe distance, you examine your loot.",
      "isInEventUseTree":false,
      "frequency":"Always",
      "image":"blackglove",
      "id":10570
    },
    "isLinkingEvent":true,
    "isDirectLinkingEvent":false,
    "maxActionsAllowed":20,
    "premiumBenefitsApply":false,
    "image":"bottleandglass",
    "canGoAgain":false
  },
  "messages":[
    {
      "possession":{
        "enhancements":[
          
        ],
        "cap":230,
        "qualityPossessedId":152345678,
        "name":"Shadowy",
        "nameAndLevel":"Shadowy 237/230 - Invisible",
        "levelDescription":"Invisible",
        "description":"Stealth, subtlety, cunning.",
        "nature":"Status",
        "category":"BasicAbility",
        "effectiveLevel":237,
        "level":229,
        "himbleLevel":0,
        "availableAt":"Shadowy improves as you attempt Shadowy tasks - you can improve it faster by spending Hastily Scrawled Warning Notes at your Lodgings.",
        "equippable":false,
        "bonusOrPenaltyDisplay":"+8",
        "progressAsPercentage":70,
        "allowedOn":"Character",
        "image":"cat",
        "id":210
      },
      "progressBar":{
        "type":"Pyramid",
        "leftScore":229,
        "rightScore":230,
        "startPercentage":69.0,
        "endPercentage":70.0
      },
      "changeType":"Unaltered",
      "priority":2,
      "isSidebar":true,
      "type":"PyramidQualityChangeMessage",
      "message":"<span class='quality-name'>Shadowy</span> is increasing...",
      "image":"cat",
      "tooltip":"49 change points, 21 more needed to reach level 230"
    },
    {
      "type":"DifficultyRollSuccessMessage",
      "message":"You succeeded in a Shadowy challenge! (Simple challenges mean you don't learn so much.)",
      "image":"cat",
      "tooltip":"Stealth, subtlety, cunning."
    },
    {
      "possession":{
        "enhancements":[
          
        ],
        "qualityPossessedId":123456789,
        "name":"Opening a Bundle of Oddities",
        "nameAndLevel":"Opening a Bundle of Oddities 8",
        "description":"What lies within? Let's find out.",
        "nature":"Status",
        "category":"Randomizer",
        "effectiveLevel":8,
        "level":8,
        "himbleLevel":0,
        "equippable":false,
        "progressAsPercentage":0,
        "allowedOn":"Character",
        "image":"bag",
        "id":100915
      },
      "changeType":"Gained",
      "priority":2,
      "isSidebar":false,
      "type":"QualityExplicitlySetMessage",
      "message":"<em>You're opening a Bundle of Oddities...</em>",
      "image":"bag",
      "tooltip":"What lies within? Let's find out."
    }
  ],
  "isSuccess":true
}

Most interesting to us is this part:

      "possession":{
        "enhancements":[
          
        ],
        "qualityPossessedId":123456789,
        "name":"Opening a Bundle of Oddities",
        "nameAndLevel":"Opening a Bundle of Oddities 8",
        "description":"What lies within? Let's find out.",
        "nature":"Status",
        "category":"Randomizer",
        "effectiveLevel":8,
        "level":8,
        "himbleLevel":0,
        "equippable":false,
        "progressAsPercentage":0,
        "allowedOn":"Character",
        "image":"bag",
        "id":100915
      }

It shows that you have gained the quality Opening a Bundle of Oddities. We also learn that it has the category Randomizer, and the numerical value (effectiveLevel) 8. With gathering enough data, we can draw conclusions about what kind of results are possible. For example, we have learned over the years that this action gives a numerical value of at most 40, and have put that information into Bundle of Oddities (Guide).

The quality change also has the image "bag", which means that it uses the icon https://images.fallenlondon.com/icons/bagsmall.png. By convention, that is mirrored to the wiki as File:bagsmall.png, and used as the icon on the wiki.

Furthermore, we get the ID 100915 from the second to last line.

That's great. Where can we find this magical text full of wonders?

The browser extension method[edit]

You can install the FL Quality Lantern browser extension to display hidden qualities in action requirements as well as on gain and loss. It does, however, not provide data like the ID of the quality.

The network traffic method[edit]

  1. Open the developer tools of your browser. On desktop browsers, this is usually F12 on Windows or Option+⌘+C on Mac, or something like "Inspect Element" from the right-click context menu. Dev tools are not always accessible on mobile.
  2. Go to the tab named "network traffic" or similar.
  3. Make sure you are logging the traffic. A good way to test this is clicking into a storylet and "Perhaps not"-ing out of it, and seeing new requests appear.
  4. Do whatever you wanted to do in the game. (How about you rob a drunk?)
  5. Observe that your network traffic window has logged your requests. If you went with our example, you will see at least four requests:
    • a OPTIONS request to begin
    • a POST request to begin
    • a OPTIONS request to choosebranch
    • a POST request to choosebranch.
    • You may see other requests as well. The server will also periodically send other responses, like updating your messages tab or the count of available actions and opportunity cards. You may also see image requests for icons. Your tools may allow you to filter for "XHR requests" specifically, which means you will only get the JSON data.
    • The OPTIONS request is uninteresting to us - it is essentially your browser asking "hey, can I do this thing?". The server then replies "yeah, you can do this thing." Then your browser says "cool, I would like to do this thing now." and sends the POST request.
  6. Click on the entry for the POST request to choosebranch.
  7. You should see a way to view both request and response of that entry. Switch to "response" (in some browsers, "preview" is more readable).
  8. You should now be able to read the JSON sent by the server. Depending on your browser, this information might be gone when you close your dev tools, game tab, or your browser, so make sure to make the most of it.

The proxy method[edit]

You can also circumvent the whole shebang by using a proxy in the first place which will allow you to better filter the logs of your HTTP requests and responses. Examples of such software include Burpsuite, Charles Proxy, and Wireshark.

Where should I add Hidden Qualities?[edit]

Add the gain or loss of the hidden quality in the respective article. A lot of our templates where you may want to add the information support the parameter |hidden=yes, which will automatically add the text "(hidden)".