Fallout 4

File information

Last updated

Original upload

Created by

matzman666

Uploaded by

matzman666

Virus scan

Safe to use

About this mod

Reference implementation of the Companion App protocol.

Permissions and credits
Donations

I have also a Python3 library completely implementing the protocol on github.

And I am also currently implementing an Unofficial Pipboy Companion App.

--------------

I reverse-engineered the communication protocol used by the Fallout 4 companion app and wrote a little python3 script that connects to Fallout 4 and dumps all messages it receives to standard output in human readable form.

It is meant as MODDER'S RESOURCE and reference for anyone who wants to learn about the communication protocol employed by the Companion App.



What do I know about the Protocol Syntax:

  • Autodiscovery: 100% known
  • Connection Establishment: 100% known
  • DataUpdate Message: 100% known
  • LocalMapUpdate Message: 100% known
  • RPC: 100% known


What do I know about the Data Semantics:

There are primitive Types (int/bool/string/...) and complex types (arrays and objects). Each value (be it primitive or complex values) has a unique id (Bethesda refers to it both as nodeId or pipboyValueId). Arrays are an ordered set of such pipboyIds, and Objects are a set of (key, value) pairs (values can only be pipboyValueIds, and a dataUpdate message can add or remove pairs). The data is layed out in the form of a tree, arrays and objects are the internal vertices and primitive values represent the leafs. The root of the tree is the object with the pipboyValueId 0.

The only thing which is largely unknown is the specific meaning of most values. But I am sure the combined resources of the community will solve this problem in no time ;)


Future Plans:

I am thinking about writing a library implementing the communication protocol to be used by other mod authors. But I am still unsure about the programming language (Python/Java/C/C++(11) with boost, or something else). Suggestions welcome, one of my main requirements are platform-independence (so no C# ;)) Already done, see github link above

Changelog:
* BugFix 1.0.1: Corrected code that incorrectly parsed the removedIds sections of an data update object