The Escapists 2 Decompilation

Telemetry and Analytics

The Escapists 2 - Telemetry and Analytics system documentation

Overview

The Escapists 2 telemetry and analytics stack consists of:

  • Google Analytics V3 implementation supporting Android (native SDK), iOS (native SDK), and other platforms (Measurement Protocol / MPV3).
  • HitBuilder class hierarchy that mirrors the GA Measurement Protocol parameter set.
  • NetAnalytics and EC2AnalyticsHelper — a lightweight server-side analytics forwarder.
  • StatsTracking / STAT_IDS / ACTIVITY_FEED_IDS — in-game stat tracking and activity feed event IDs.
  • ScoreManager / ScoreSystemConfig — scoring subsystem.
  • Error Handling — error dialog, error levels, crash report generation.
  • Debug / Log — debug menu, log utilities.
  • Config / Quality — runtime configuration, quality settings, build version info, server hash checks, profiler control.
  • Boot / Bootstrap — application entry points.

Google Analytics V3

GoogleAnalyticsV3.cs

Assembly-CSharp/GoogleAnalyticsV3.cs

Namespace: global

Static container for the shared GA tracker instance.

Fields

VisibilityTypeNameDescription
private staticIGoogleAnalyticsV3_instanceSingleton instance
public staticboolAppRunningInBackgroundWhether the app is in the background

Properties

NameTypeDescription
InstanceIGoogleAnalyticsV3Singleton accessor; lazy-initializes via platform-specific factory

Methods

SignatureDescription
static GoogleAnalyticsV3()Static constructor; registers as platform factory via GoogleAnalyticsMPV3
static void RegisterPlatformProvider<T>()Registers a platform-specific GA provider type for singleton creation

GoogleAnalyticsAndroidV3.cs

Assembly-CSharp/GoogleAnalyticsAndroidV3.cs

Namespace: global

Stub Android native GA implementation.

Implements: IGoogleAnalyticsV3

Methods (all stubs — no-op)

SignatureDescription
void InitTracker()Initialize GA tracker
void SetTrackingID(string trackingID)Set UA tracking ID
void SetAppLevelOptOut(bool optOut)App-level opt-out
void SetAnonymizeIP(bool anonymize)Anonymize IP addresses
void SetSampleRate(float sampleRate)Set sampling rate
void SetSessionTimeout(long timeout)Session timeout in seconds
void StartSession()Start a new session
void StopSession()End current session
void LogScreen(AppViewHitBuilder builder)Log a screen view
void LogEvent(EventHitBuilder builder)Log an event
void LogException(ExceptionHitBuilder builder)Log an exception
void LogSocial(SocialHitBuilder builder)Log a social interaction
void LogTiming(TimingHitBuilder builder)Log a timing hit
void LogTransaction(TransactionHitBuilder builder)Log a transaction
void LogItem(ItemHitBuilder builder)Log an item
void DispatchHits()Force-dispatch hits
void SetCustomDimension(int index, string value)Set a custom dimension
void SetCustomMetric(int index, long value)Set a custom metric

GoogleAnalyticsiOSV3.cs

Assembly-CSharp/GoogleAnalyticsiOSV3.cs

Namespace: global

Stub iOS native GA implementation.

Implements: IGoogleAnalyticsV3

Methods identical to GoogleAnalyticsAndroidV3 — all no-op stubs.


GoogleAnalyticsMPV3.cs

Assembly-CSharp/GoogleAnalyticsMPV3.cs

Namespace: global

Measurement Protocol GA implementation used on all non-Android, non-iOS platforms.

Implements: IGoogleAnalyticsV3

Fields

VisibilityTypeNameDescription
privatestringm_TrackingIDGA tracking ID
privatestringm_UserAgentHTTP user-agent string
privatefloatm_SampleRateSampling rate (0–100)
privateboolm_AnonymizeIPAnonymize IP flag
privatelongm_SessionTimeoutSession timeout in seconds
privatestringm_SessionIDCurrent session identifier
privateDateTimem_LastSessionTimeLast session timestamp
privateList<Dictionary<Field, string>>m_UnsentHitQueueQueue of unsent hits

Methods

SignatureDescription
void InitTracker()Sets user-agent from BuildVersion, initialises unsent queue
void SetTrackingID(string trackingID)Stores tracking ID
void SetAppLevelOptOut(bool optOut)Stores opt-out flag
void SetAnonymizeIP(bool anonymize)Sets anonymize IP flag, adds &aip=1 to hits
void SetSampleRate(float sampleRate)Clamps 0–100, stores sample rate
void SetSessionTimeout(long timeout)Stores session timeout in seconds
void StartSession()Creates new session ID via Guid.NewGuid(), sets &sc=start
void StopSession()Sets &sc=end
void LogScreen(AppViewHitBuilder builder)Builds hit dict, sends via SendHit
void LogEvent(EventHitBuilder builder)Builds hit dict, sends
void LogException(ExceptionHitBuilder builder)Builds hit dict, sends
void LogSocial(SocialHitBuilder builder)Builds hit dict, sends
void LogTiming(TimingHitBuilder builder)Builds hit dict, sends
void LogTransaction(TransactionHitBuilder builder)Builds hit dict, sends
void LogItem(ItemHitBuilder builder)Builds hit dict, sends
void DispatchHits()Processes unsent hit queue via SendHitWorker
void SetCustomDimension(int index, string value)Stores in dictionary
void SetCustomMetric(int index, long value)Stores in dictionary
void SendHit(Dictionary<Field, string> hit)Adds to unsent queue, calls DispatchHits
void SendHitWorker(object state)WWW POST to https://www.google-analytics.com/collect with hit payload; retries on failure

Builds common hit parameters: v=1, tid, cid, t, ul (language from Application.systemLanguage), sr (screen resolution), vp (viewport), an (app name), aid (app ID), av (app version), aip if set, sc if session, custom dimensions/metrics.


HitBuilder Class Hierarchy

IGoogleAnalyticsV3 (implicit interface)

Defined by usage pattern across GA classes.

Methods: InitTracker, SetTrackingID, SetAppLevelOptOut, SetAnonymizeIP, SetSampleRate, SetSessionTimeout, StartSession, StopSession, LogScreen, LogEvent, LogException, LogSocial, LogTiming, LogTransaction, LogItem, DispatchHits, SetCustomDimension, SetCustomMetric.


HitBuilder.cs (abstract base)

Assembly-CSharp/HitBuilder.cs

Generic: abstract class HitBuilder<T> where T : HitBuilder<T>

Fields

VisibilityTypeNameDescription
protectedDictionary<Field, string>m_DictHit parameter dictionary

Methods

SignatureDescription
void SetCustomDimension(int index, string value)Adds &cd[index]=value
void SetCustomMetric(int index, long value)Adds &cm[index]=value
T NewHit()Returns (T)this
T GenerateHit()Returns (T)this
string Build()URL-encodes m_Dict entries as key=value& pairs
Dictionary<Field, string> GetHit()Returns m_Dict

AppViewHitBuilder.cs

Assembly-CSharp/AppViewHitBuilder.cs

Inherits: HitBuilder<AppViewHitBuilder>

Methods

SignatureDescription
AppViewHitBuilder SetScreenName(string screenName)Sets &cd (screen name)

EventHitBuilder.cs

Assembly-CSharp/EventHitBuilder.cs

Inherits: HitBuilder<EventHitBuilder>

Methods

SignatureDescription
EventHitBuilder SetEventCategory(string category)Sets &ec
EventHitBuilder SetEventAction(string action)Sets &ea
EventHitBuilder SetEventLabel(string label)Sets &el
EventHitBuilder SetEventValue(long value)Sets &ev

ExceptionHitBuilder.cs

Assembly-CSharp/ExceptionHitBuilder.cs

Inherits: HitBuilder<ExceptionHitBuilder>

Methods

SignatureDescription
ExceptionHitBuilder SetExceptionDescription(string description)Sets &exd
ExceptionHitBuilder SetFatal(bool fatal)Sets &exf (1/0)

SocialHitBuilder.cs

Assembly-CSharp/SocialHitBuilder.cs

Inherits: HitBuilder<SocialHitBuilder>

Methods

SignatureDescription
SocialHitBuilder SetSocialNetwork(string network)Sets &sn
SocialHitBuilder SetSocialAction(string action)Sets &sa
SocialHitBuilder SetSocialTarget(string target)Sets &st

TimingHitBuilder.cs

Assembly-CSharp/TimingHitBuilder.cs

Inherits: HitBuilder<TimingHitBuilder>

Methods

SignatureDescription
TimingHitBuilder SetTimingCategory(string category)Sets &utc
TimingHitBuilder SetTimingInterval(long interval)Sets &utt
TimingHitBuilder SetTimingName(string name)Sets &utv
TimingHitBuilder SetTimingLabel(string label)Sets &utl

TransactionHitBuilder.cs

Assembly-CSharp/TransactionHitBuilder.cs

Inherits: HitBuilder<TransactionHitBuilder>

Methods

SignatureDescription
TransactionHitBuilder SetTransactionID(string id)Sets &ti
TransactionHitBuilder SetAffiliation(string affiliation)Sets &ta
TransactionHitBuilder SetRevenue(double revenue)Sets &tr
TransactionHitBuilder SetShipping(double shipping)Sets &ts
TransactionHitBuilder SetTax(double tax)Sets &tt
TransactionHitBuilder SetCurrencyCode(string code)Sets &cu

ItemHitBuilder.cs

Assembly-CSharp/ItemHitBuilder.cs

Inherits: HitBuilder<ItemHitBuilder>

Methods

SignatureDescription
ItemHitBuilder SetTransactionID(string id)Sets &ti
ItemHitBuilder SetSKU(string sku)Sets &ic
ItemHitBuilder SetName(string name)Sets &in
ItemHitBuilder SetCategory(string category)Sets &iv
ItemHitBuilder SetPrice(double price)Sets &ip
ItemHitBuilder SetQuantity(long quantity)Sets &iq

Field Definitions

Field.cs / Fields.cs

Field — simple string wrapper class holding a GA Measurement Protocol parameter key string (e.g. "&t"). Overrides ToString() to return the parameter.

Fields — static readonly collection of all GA MP parameter keys:

NameKeyUsed By
ANONYMIZE_IP&aipAll hits
HIT_TYPE&tAll hits
SESSION_CONTROL&scSession control
SCREEN_NAME&cdAppView
LOCATION&dlAppView
REFERRER&drAppView
PAGE&dpAppView
HOSTNAME&dhAppView
TITLE&dtAppView
LANGUAGE&ulAll hits
ENCODING&deAll hits
SCREEN_COLORS&sdAll hits
SCREEN_RESOLUTION&srAll hits
VIEWPORT_SIZE&vpAll hits
APP_NAME&anAll hits
APP_ID&aidAll hits
APP_INSTALLER_ID&aiidAll hits
APP_VERSION&avAll hits
CLIENT_ID&cidAll hits
USER_ID&uidAll hits
CAMPAIGN_NAME&cnCampaign
CAMPAIGN_SOURCE&csCampaign
CAMPAIGN_MEDIUM&cmCampaign
CAMPAIGN_KEYWORD&ckCampaign
CAMPAIGN_CONTENT&ccCampaign
CAMPAIGN_ID&ciCampaign
GCLID&gclidGoogle Ads
DCLID&dclidDoubleClick
EVENT_CATEGORY&ecEvent
EVENT_ACTION&eaEvent
EVENT_LABEL&elEvent
EVENT_VALUE&evEvent
SOCIAL_NETWORK&snSocial
SOCIAL_ACTION&saSocial
SOCIAL_TARGET&stSocial
TIMING_VAR&utvTiming
TIMING_VALUE&uttTiming
TIMING_CATEGORY&utcTiming
TIMING_LABEL&utlTiming
EX_DESCRIPTION&exdException
EX_FATAL&exfException
CURRENCY_CODE&cuTransaction
TRANSACTION_ID&tiTransaction / Item
TRANSACTION_AFFILIATION&taTransaction
TRANSACTION_SHIPPING&tsTransaction
TRANSACTION_TAX&ttTransaction
TRANSACTION_REVENUE&trTransaction
ITEM_SKU&icItem
ITEM_NAME&inItem
ITEM_CATEGORY&ivItem
ITEM_PRICE&ipItem
ITEM_QUANTITY&iqItem
TRACKING_ID&tidAll hits
SAMPLE_RATE&sfAll hits
DEVELOPER_ID&didDeveloper
CUSTOM_METRIC&cmCustom metric
CUSTOM_DIMENSION&cdCustom dimension

Server-Side Analytics

NetAnalytics.cs

Assembly-CSharp/NetAnalytics.cs

Sends analytics events to an EC2-hosted analytics endpoint.

Methods (static)

SignatureDescription
static void SendAnalyticsEvent(object eventData)Serialises event to JSON, POSTs to EC2 analytics URL via EC2AnalyticsHelper

EC2AnalyticsHelper.cs

Assembly-CSharp/EC2AnalyticsHelper.cs

HTTP helper for posting JSON events to an EC2 endpoint.

Methods

SignatureDescription
void DoPost(string url, string jsonData)Creates WWWForm, POSTs JSON, handles response

Stats & Activity Feed

StatsTracking.cs

Assembly-CSharp/StatsTracking.cs

Central stat tracking manager.

Fields / Properties

VisibilityTypeNameDescription
public staticStatsTrackingm_InstanceSingleton
publicDictionary<int, int>StatsDictStat ID → value map

Methods

SignatureDescription
static void ResetAllStats()Clears and resets m_Instance
static void AddStat(int id, int amount)Adds amount to stat ID
static void SetStat(int id, int amount)Sets stat ID to value
static int GetStat(int id)Gets value for stat ID
static bool GetBool(int id)Returns value != 0

STAT_IDS.cs

Assembly-CSharp/STAT_IDS.cs

Static class containing integer constant stat IDs.

Constants (representative)

NameValue
ID_Total_Play_Time1
ID_Total_Escapes2
ID_Total_Recaptures3
ID_Total_Guard_Assaults4
ID_Total_Inmate_Assaults5
ID_Total_Knockouts6
ID_Total_Items_Crafted7
ID_Total_Items_Stolen8
ID_Total_Gold_Found9
ID_Total_Jobs_Completed10
......

(Full listing omitted for brevity — contains ~100+ IDs covering combat, crafting, jobs, escape methods, multiplayer, etc.)


ACTIVITY_FEED_IDS.cs

Assembly-CSharp/ACTIVITY_FEED_IDS.cs

Static class containing integer activity feed event IDs.

Constants (representative)

NameValue
ID_Escape1
ID_Recapture2
ID_Combat_Win3
ID_Combat_Loss4
ID_Crafting5
ID_Job_Complete6
ID_Item_Found7
......

Score System

ScoreManager.cs

Assembly-CSharp/ScoreManager.cs

Manages scoring for escapes, combat, and objectives.

Fields

VisibilityTypeNameDescription
public staticScoreManagerm_InstanceSingleton

Methods

SignatureDescription
void AddScore(int value)Adds score
void RemoveScore(int value)Subtracts score
int GetTotalScore()Returns accumulated score
void ResetScore()Resets to zero

ScoreSystemConfig.cs

Assembly-CSharp/ScoreSystemConfig.cs

Configuration container for score values and multipliers.

Fields

VisibilityTypeNameDescription
publicintEscapeScoreBase score for escaping
publicintCombatScoreBase score for combat wins
publicintObjectiveScorePer-objective score
publicfloatDifficultyMultiplierDifficulty-based multiplier

Error Handling

ErrorDialogHandler.cs

Assembly-CSharp/ErrorDialogHandler.cs

Handles display of error dialogs to the user.

Methods

SignatureDescription
void ShowError(string title, string message, ErrorLevel level)Shows a dialog with the given error level
void ShowReportDialog(string title, string message)Shows dialog with report-generation option

ErrorLevel.cs

Assembly-CSharp/ErrorLevel.cs

Enum

MemberDescription
InfoInformational message
WarningNon-fatal warning
ErrorRecoverable error
FatalCritical error requiring restart

GenerateReport.cs

Assembly-CSharp/GenerateReport.cs

Generates a crash/error report containing system info, stack trace, and player state.

Methods

SignatureDescription
static string GenerateCrashReport(string errorMessage, string stackTrace)Returns formatted report string
static bool SaveReportToDisk(string report)Writes report to persistent storage

Debug & Log

DebugHelpers.cs

Assembly-CSharp/DebugHelpers.cs

Utility methods for debug rendering and logging.

Methods

SignatureDescription
static void DrawCross(Vector3 position, float size, Color color, float duration)Draws a debug cross
static void DrawCircle(Vector3 center, float radius, Color color, float duration)Draws a debug circle
static void LogFormat(string format, params object[] args)Conditional log formatting

DebugMenu.cs

Assembly-CSharp/DebugMenu.cs

In-game debug menu system.

Fields / Properties

VisibilityTypeNameDescription
public staticDebugMenum_InstanceSingleton
publicboolIsOpenWhether debug menu is visible

Methods

SignatureDescription
void Toggle()Toggles menu visibility
void AddMenuObject(DebugMenuMenuObject obj)Registers a debug menu item
void RemoveMenuObject(DebugMenuMenuObject obj)Unregisters a debug menu item

DebugMenuMenuObject.cs

Assembly-CSharp/DebugMenuMenuObject.cs

Individual item within the debug menu.

Fields

VisibilityTypeNameDescription
publicstringLabelDisplay text
publicUnityEngine.Events.UnityActionActionCallback when activated

LogUtil.cs

Assembly-CSharp/LogUtil.cs

Central logging utility with log-level filtering.

Fields

VisibilityTypeNameDescription
public staticLogUtilLogTypeLogLevelCurrent log level filter

Methods

SignatureDescription
static void Log(LogUtilLogType type, object message)Logs if type >= current log level
static void LogError(object message)Shortcut for Log(LogUtilLogType.Error, message)
static void LogWarning(object message)Shortcut for Log(LogUtilLogType.Warning, message)
static void SetLogLevel(LogUtilLogType level)Sets the log level filter

LogUtilLogType.cs

Assembly-CSharp/LogUtilLogType.cs

Enum

MemberDescription
NoneNo logging
ErrorErrors only
WarningWarnings and errors
InfoAll messages

Config & Quality

ConfigManager.cs

Assembly-CSharp/ConfigManager.cs

Runtime configuration manager.

Fields / Properties

VisibilityTypeNameDescription
public staticConfigManagerm_InstanceSingleton

Methods

SignatureDescription
void LoadConfig()Loads config from persistent storage
void SaveConfig()Writes config to persistent storage
string GetSetting(string key)Gets a config setting
void SetSetting(string key, string value)Sets a config setting

QualityManager.cs

Assembly-CSharp/QualityManager.cs

Manages graphics quality settings.

Fields

VisibilityTypeNameDescription
public staticQualityManagerm_InstanceSingleton

Methods

SignatureDescription
void SetQualityLevel(int level)Sets quality level
int GetQualityLevel()Returns current quality level
void ApplyCurrentQuality()Applies quality settings to rendering

BuildVersion.cs

Assembly-CSharp/BuildVersion.cs

Container for the current build version string.

Fields

VisibilityTypeNameDescription
public staticstringVersionStringe.g. "1.0.0"
public staticstringBuildNumbere.g. "12345"

ReleaseBuildVersion.cs

Assembly-CSharp/ReleaseBuildVersion.cs

Holds the release build version information. Populated at build time.

Fields

VisibilityTypeNameDescription
public staticstringReleaseVersionRelease version string

ServerHashCheck.cs

Assembly-CSharp/ServerHashCheck.cs

Validates server configuration hashes for anti-tampering.

Methods

SignatureDescription
static bool ValidateHash(string data, string expectedHash)Returns true if hash matches
static string ComputeHash(string data)Computes hash of input data

ProfilerActivator.cs

Assembly-CSharp/ProfilerActivator.cs

Toggles Unity profiler based on build configuration.

Methods

SignatureDescription
static void ActivateProfiler()Enables profiler
static void DeactivateProfiler()Disables profiler

Boot & Bootstrap

BootFlow.cs

Assembly-CSharp/BootFlow.cs

Boot flow state machine. Runs before gameplay systems initialise.

Inherits: BaseFlowBehaviour

Enum States (representative)

StateDescription
InitInitialise boot systems
LoadConfigLoad configuration
CheckServerHashValidate server hash
InitAnalyticsStart analytics
CompleteBoot finished, transition to frontend

Bootstrap.cs

Assembly-CSharp/Bootstrap.cs

Application entry point. Sets up essential managers and starts BootFlow.

Fields

VisibilityTypeNameDescription
public staticBootstrapm_InstanceSingleton
publicboolIsBootstrappedWhether bootstrap completed

Methods

SignatureDescription
void Awake()Creates singleton, calls Initialize()
void Initialize()Sets up managers, starts BootFlow
void StartBootFlow()Transitions to boot flow

On this page