The Escapists 2 Decompilation

UI and Menus

The Escapists 2 - UI and Menus system documentation

Source: Assembly-CSharp/ (decompiled, global namespace).
Base: T17MonoBehaviour : MonoBehaviour (wraps common T17 lifecycle).
Input: Rewired + Team17UIInputModule with per-gamer T17EventSystem.
Localization: T17Text.SetLocalisedTextCatchAll() with tags like "Text.UI.ShadowsOff".
Persistence: GlobalSave with string keys (e.g. "Settings:VSync", "Audio:MusicVol").


1. Architecture Overview

GlobalStart
 ├─ BootFlow
 ├─ LoadingFlow
 ├─ FrontEndFlow (BaseFlowBehaviour)
 │   ├─ FrontendRootMenu (RootMenu)
 │   └─ EditorRootMenu (RootMenu)
 ├─ LevelFlow
 ├─ InGameMenuFlow (BaseFlowBehaviour)
 │   └─ InGameRootMenu (RootMenu) × N players
 ├─ HUDMenuFlow (BaseFlowBehaviour)
 │   └─ HUDRootMenu (RootMenu) × N players
 └─ ResultsFlow (BaseFlowBehaviour)
      └─ ResultsRootMenu (RootMenu)

Each RootMenu owns a T17TabPanel + a Dictionary<enum, MenuList_Container>. Switching the active type (e.g. FrontendMenuTypeToOpen.Campaign) repopulates the tab panel's bodies and shows the default tab.


2. Flow System

BaseFlowBehaviour : T17MonoBehaviour

  • Assembly-CSharp/BaseFlowBehaviour.cs
  • m_FlowType (FlowType enum): NotSet, Boot, Loading, Frontend, Level, HUD, InGameMenu, Results
  • Registers with GlobalStart via HookUpFlow(); signals completion via SignalDoneWithFlow().

FrontEndFlow : BaseFlowBehaviour

  • Assembly-CSharp/FrontEndFlow.cs
  • Enum MenuType: GameFrontend, LevelEditor, Unassigned
  • Private MODE: MODE_INITMODE_SHOW_MENUS/MODE_SHOW_LEVEL_EDITORMODE_RUNNING
  • Singleton Instance
  • Owns FrontendRootMenu m_MainMenu, EditorRootMenu m_EditorMenu
  • Manages background video drone (VideoDrone), slide-in/out animations, frontend music
  • Key methods: StartFrontEnd(), StartEditorFrontEnd(), SwitchToFrontEndMenuType(), ShowMenus(), HideMenus(), ToggleBackgroundVideo()
  • Routes: restores previous FrontendUserPath (versus lobby return, etc.)

InGameMenuFlow : BaseFlowBehaviour

  • Assembly-CSharp/InGameMenuFlow.cs
  • Singleton Instance
  • List<PlayerIGMData> m_PlayersIGMData — one per camera/splitscreen slot
  • PlayerIGMData nested class holds per-player references:
    • Canvas m_ParentObject, InGameRootMenu m_PlayerRootMenu
    • MainMapMenu m_Map, CalendarMenu m_Calendar, JobBoardMenu m_JobBoard
    • PayphoneMenu m_Payphone, PlayerSelectMenu m_PlayerSelect
    • PauseMenu m_PauseMenu, GuardBoard m_GuardBoardMenu
    • InformationBoard m_InformationBoardMenu, SignPost m_SignPostMenu
    • BedSaveMenu m_BedSaveMenu, JobTutorialMenu m_JobTutorialMenu
    • PlayerInventoryMenu PlayerInventory (lazy getter)
    • OpenMenuCount tracks stacked menus; AnyMenusOpen / ClickOffCloseContainer()
    • HideActiveMenus() hides all child menus
  • Dynamically instantiates IGM canvases for splitscreen (3-4 players)
  • Resizes/positions each per-player canvas from HUDItemsLayout data
  • Input categories: InputCateogryStates.InGame, InGameMenu, InGamePaused, InGameMainMap
  • Open/hide methods: OpenMenu(), HideMenu(), OpenMap/HideMap, OpenCalendar/HideCalendar, OpenJobsBoard/HideJobsBoard, OpenGuardBoard/HideGuardBoard, OpenInformationBoard/HideInformationBoard, OpenPayphone/HidePayphone, OpenPauseMenu/HidePauseMenu, OpenPlayerSelect/HidePlayerSelect, OpenSignPost/HideSignPost, OpenBedSave/HideBedSave, OpenJobTutorialBoard/HideJobTutorialBoard

HUDMenuFlow : BaseFlowBehaviour

  • Assembly-CSharp/HUDMenuFlow.cs
  • Singleton Instance
  • List<PlayerHUDData> m_PlayersHUDData — one per player
  • PlayerHUDData nested class holds per-player HUD refs:
    • Canvas m_ParentObject, Canvas m_WorldSpace_ParentObject
    • HUDRootMenu m_PlayerRootMenu, UIAnimatedEffectController m_FadeEffects
    • RoutineAndTimeTrackerHUD m_MiniMapParent, FloorIndicatorHUD m_FloodIndicator
    • PlayerInventoryHUD PlayerInventory (lazy), PlayerSolitaryHUD PlayerSolitaryHUD (lazy)
    • ObjectiveTrackerHUD m_PlayerObjectiveTrackedHUD, TutorialSpeechHUD m_TutorialSpeechHUD
    • ChatFeedHUD m_ChatFeedHUD, PerPlayerTrackedUIElements PerPlayerTrackedItems
    • Camera m_PlayerCamera, T17RawImage m_PIPImage
    • Tutorial popup state: ActivePopupInstance, PopupTimer
  • Creates world-space canvases per floor (WorldCanvasTrackedUIElements)
  • Manages split-screen HUD layout via SplitscreenHUDHandler + HUDItemLayoutGroup/HUDItemsLayout
  • Speech-bubble facade-shift test (DoShiftTestForSpeechBubble) for multi-floor visibility
  • Methods: OpenPlayerHUD(), HideMenu(), HideAllHUDs/ShowAllHUDs, Add/RemoveMouseHUDItem(), ShowPopupDialogue(), PlayGlobalEffect()

ResultsFlow : BaseFlowBehaviour

  • Assembly-CSharp/ResultsFlow.cs
  • Singleton Instance
  • Owns ResultsRootMenu m_MainMenu
  • MODE: MODE_INITMODE_SHOW_MENUSMODE_RUNNING
  • Picks CoopResults vs VersusResults based on ConfigManager.gameType
  • ReturnToMainMenu() / ReturnToLobby() set exit flag + frontend route

3. Root Menu Hierarchy

RootMenu : BaseMenuBehaviour

  • Assembly-CSharp/RootMenu.cs
  • RootMenuType: FrontEnd, InGame, HUD, Results, LevelEditor
  • T17TabPanel m_MainTabPanel — drives body switching
  • LegendButtonsManager m_LegendButtonsManager
  • MenuList_Container — groups of BaseMenuBehaviour per tab, with m_DefaultTab
  • EditorHack_BaseMenuBehaviour[] m_EditorTabAbleMenuTypes — serialised tab-mapping from editor
  • TextFontTypes m_FontTypesForRootMenu — applies fonts to all T17Text children
  • PlayerInventoryMenu m_PlayerInventoryOnThisRoot
  • InitializeData() collects all child BaseMenuBehaviour/IT17EventHelper, applies fonts, calls DoSingleTimeInitialize() on each
  • Show() sets IT17EventHelper gamers, shows player inventory, updates legends
  • SetGamePlayerForMenus() propagates Player to all child menus

FrontendRootMenu : RootMenu

  • Assembly-CSharp/FrontendRootMenu.cs
  • FrontendMenuTypeToOpen: MainMenu, Campaign, Versus, BrowseGamesMenu, PrisonSetupMenu, Customization, Collectables, Leaderboards, Settings, Credits, Shop, Editor
  • Dictionary<FrontendMenuTypeToOpen, MenuList_Container> m_FrontEndTabableMenuTypes
  • m_PCBackButton — shown/hidden based on last active controller type
  • SetFrontEndMenuTypeToOpen() handles online-area exit for non-online menus
  • OpenFrontendChildOfCurrent() opens sub-menus (index > 0)
  • PromptGameExit() shows T17DialogBox quit confirmation

EditorRootMenu : RootMenu

  • Assembly-CSharp/EditorRootMenu.cs
  • EditorMenuTypeToOpen: EditorHomepageMenu, MyPrisonsMenu, BrowseGamesMenu, SubscribedMenu, PrisonSetupMenu
  • Singleton m_Instance
  • ReturnToNormalFrontend() delegates to FrontEndFlow.Instance.StartFrontEndFromLevelEditor()

InGameRootMenu : RootMenu

  • Assembly-CSharp/InGameRootMenu.cs
  • InGameMenuTypeToOpen: MainSelf, Inmate, DownedInmate, FavourInmate, ShopInmate, Guard, DownedGuard, Desk, Toilet, SwagBag, Cutlrey, RobinsonFavour, RobinsonContinueFavour
  • Dictionary<InGameMenuTypeToOpen, MenuList_Container> m_InGameTabableMenuTypes
  • m_EnabledMenuTypeMask — bitmask of InGameMenuTypes flags
  • CheckMenuEnabled() / SetMenuEnabled() control per-menu visibility
  • HasPanelsToShow() checks if any panel in a type set is enabled
  • Shows/hides TabLeft/TabRight based on panel count

HUDRootMenu : RootMenu

  • Assembly-CSharp/HUDRootMenu.cs
  • HUDMenuTypeToOpen: PlayerInfo, PlayerInfoTutorial
  • Dictionary<HUDMenuTypeToOpen, MenuList_Container> m_HUDMenuTypes
  • Show() — if no m_MainTabPanel, shows all menus in the set simultaneously

ResultsRootMenu : RootMenu

  • Assembly-CSharp/ResultsRootMenu.cs
  • ResultsMenuTypeToOpen: CoopResults, VersusResults
  • Dictionary<ResultsMenuTypeToOpen, MenuList_Container> m_ResultMenuTypes

4. Base Menu Classes

BaseMenuBehaviour : T17MonoBehaviour, IMenuEventDelegate

  • Assembly-CSharp/BaseMenuBehaviour.cs
  • InGameMenuTypes flags enum: UnSet = -1, SelfCharacterInfo = 1, CraftingMenu = 2, JournalFavours = 4, JournalTips = 8, ControlsMenu = 16, SettingsMenu = 32, InmateCharacterInfo = 64, InmateGifting = 128, InmateShop = 256, InmateFavour = 512, InmateLooting = 1024, DeskInventory = 2048, ToiletInventory = 4096, SwagBagInventory = 8192, CutlreyInventory = 16384, MAX = 16385
  • Player CurrentGamePlayer, Gamer CurrentGamer, Rewired.Player CurrentRewiredPlayer — derived from current gamer
  • T17EventSystem CachedEventSystem — per-gamer event system
  • Selectable m_Top/Bottom/Left/RightSelectable — navigation anchors for tab-panel linking
  • Sprite m_TabIcon / m_TabIconDisabled
  • NavigateOnUICancel m_NavigateOnUICancel — invoked on UI_Cancel input
  • Animator m_TransitionAnimator — forward/back transition triggers
  • m_bShouldBlockParentCancelHandler — when true, parent's cancel handling is suppressed while child is open
  • AllowedCancelHandlers — static counter
  • m_LegendTextItem / m_LegendLocalisationTag / m_LegendIconData — legend/button-hint system
  • Show() sets gamer, manages cancel-blocking, shows game object, fires MenuChangedEvent
  • Hide() restores invoker state, cleans up children, fires OnHide
  • Child menu tracking: AddChildMenu(), OnChildHide(), GetChildMenus()
  • Transition: PlayForwardTransition(), PlayBackTransition(), IsTransitionInProgress()

BaseIngameMenu : BaseMenuBehaviour

  • Base class for overlay menus shown on top of gameplay
  • Subclasses: CraftingMenu, LootingMenu, PlayerInventoryMenu, DeskMenu, ToiletMenu, SwagBagMenu, ControlsMenu, SettingsMenu, etc.

BaseIngamePassiveUI : BaseMenuBehaviour

  • Base class for HUD passive UI elements
  • Init(Player player) called during HUD setup
  • Subclasses: PlayerStatsHUD, ProgressBarHUD, RoutineAndTimeTrackerHUD, etc.

GameMenuBehaviour : BaseIngameMenu

  • Base class for inventory-interactive menus
  • GameMenuInformation struct: m_MenuRepresentative, m_MenuRepresentativeContainer, m_Player, m_PlayerItemContainer, m_PlayerInventoryBehaviour, m_PlayerInventoryMenu
  • SetGameMenuInformation() receives container/player data

FrontendMenuBehaviour : BaseMenuBehaviour

  • Base class for frontend menu panels
  • InvokeNavigateOnUICancel() — called when UI_Cancel is pressed in a frontend context

BaseOptionItem : BaseMenuBehaviour

  • Assembly-CSharp/BaseOptionItem.cs
  • Persistent option with dirty tracking: SetOptionDirty(), ApplyOption(), ResetOption()
  • Saves/loads via GlobalSave with string keys
  • Subclasses: ToggleOptionItem, ResolutionOptionItem, BlurOptionItem, ShadowDetailOptionItem, VSyncOptionItem, VibrationOptionItem, MusicOptionItem, SFXOptionItem, ProfanityFilterOptionItem, InfluencersOptionItem, PCControlOptionItem, PhotonRegionOptionItem

BaseTooltip : BaseMenuBehaviour

  • Base class for tooltip popups

BaseResultsScreen : BaseMenuBehaviour

  • Base for results screens (Results_CoopMenu, Results_VersusMenu, Results_CharacterProfile)

BaseContextMenu : BaseMenuBehaviour

  • Base for context menus (e.g. FriendsContextMenu)

BaseComponentSetup

  • Non-MonoBehaviour utility for component lookup and configuration

5. T17 Widget Library

Core Widgets

ClassFileDescription
T17ButtonT17Button.csExtended Button with gamer-aware event system, T17 sound events
T17TextT17Text.csExtended Text with localization (SetNewLocalizationTag), inline icon support (TextPic), m_PCIconOverrideSize, m_ImagesAttached
T17ImageT17Image.csExtended Image for T17 theming
T17RawImageT17RawImage.csExtended RawImage
T17ToggleT17Toggle.csExtended Toggle
T17SliderT17Slider.csExtended Slider
T17ScrollViewT17ScrollView.csExtended ScrollRect
T17ScrollbarT17Scrollbar.csExtended Scrollbar
T17InputFieldT17InputField.csExtended InputField
T17DropDownT17DropDown.csExtended Dropdown
T17SelectableT17Selectable.csExtended Selectable base
T17StatsSliderT17StatsSlider.csSlider variant for stats display
T17TabPanelT17TabPanel.csTab panel with button navigation, cycling, disabled-tab skipping, navigation linking

Layout & Containers

ClassFileDescription
T17MenuBodyT17MenuBody.csContainer for a single menu panel
T17NavigableGridT17NavigableGrid.csGrid navigation helper
T17AspectRatioFitterT17AspectRatioFitter.csAspect-ratio-aware resizer

Overlays & Dialogs

ClassFileDescription
T17DialogBoxT17DialogBox.csConfirmation/decline/cancel dialog with OnConfirm/OnDecline events
T17DialogBoxManagerT17DialogBoxManager.csManages dialog queue per-gamer (HasDialogsForGamer(), GetDialog())
T17TooltipManagerT17TooltipManager.csTooltip display manager
T17ItemTooltipT17ItemTooltip.csInventory item tooltip

UI Helpers

ClassFileDescription
T17CounterObjectT17CounterObject.csNumeric counter display
T17FavourObjectT17FavourObject.csFavour/relationship display
T17HintObjectT17HintObject.csHint/notification display
T17InfoObjectT17InfoObject.csGeneral info display
T17TrackedUIElementT17TrackedUIElement.csWorld-space tracked element (speech bubbles, nameplates)
T17UIAlphaFadeT17UIAlphaFade.csAlpha fade animation
T17IconManagerT17IconManager.csIcon management utility
T17OverTriggerT17OverTrigger.csHover/over event trigger
T17BehaviourManagerT17BehaviourManager.csBehaviour lifecycle manager

Event System

ClassFileDescription
T17EventSystemT17EventSystem.csPer-gamer event system with InputCateogryStates and ApplyCategories()
T17EventSystemsManagerT17EventSystemsManager.csSingleton manager; GetEventSystemForGamer()
T17UISelectDeselectEventsT17UISelectDeselectEvents.csSelection event hooks
T17UIPointerOverExitEventsT17UIPointerOverExitEvents.csPointer enter/exit events
T17BlockKeyboardAutoFocusT17BlockKeyboardAutoFocus.csBlocks automatic keyboard focus
T17RewiredStandaloneInputModuleT17RewiredStandaloneInputModule.csRewired input module, clears previous selectables
Team17UIInputModuleTeam17UIInputModule.csCustom UI input module
T17ControlMapperT17ControlMapper.csRewired control remapping UI
T17RegexT17Regex.csInput validation regex helpers

Input Categories (InputCateogryStates)

  • Frontend
  • InGame
  • InGameMenu
  • InGamePaused
  • InGameMainMap
  • InGameMouseOnHUD
  • Loading

6. Frontend Menus

All frontend menu classes extend FrontendMenuBehaviour : BaseMenuBehaviour.

MenuFileDescription
MainFrontendMenuMainFrontendMenu.csMain title screen (Play, Editor, Settings, Quit)
CampaignFrontendMenuCampaignFrontendMenu.csCampaign/co-op prison selection
CoopFrontEndMenuCoopFrontEndMenu.csCooperative mode lobby/setup
VersusFrontendMenuVersusFrontendMenu.csVersus mode menu
VersusLobbyFEMenuVersusLobbyFEMenu.csVersus lobby with player slots
PrivateVersusFEMenuPrivateVersusFEMenu.csPrivate versus game setup
PublicVersusFEMenuPublicVersusFEMenu.csPublic versus matchmaking
SelectPrivateVersusFEMenuSelectPrivateVersusFEMenu.csPrivate versus selection
BrowseGamesFrontendMenuBrowseGamesFrontendMenu.csBrowse available online games
SettingsFrontendMenuSettingsFrontendMenu.csSettings hub (controls, video, audio, gameplay)
DLCStoreFrontendMenuDLCStoreFrontendMenu.csDLC store/listing
CollectablesFrontendMenuCollectablesFrontendMenu.csCollectables viewer
CustomisationFrontendMenuCustomisationFrontendMenu.csCharacter customisation hub
CustomisationDialogFrontendMenuCustomisationDialogFrontendMenu.csCustomisation item selection dialog
CustomisationDialogTabMenuCustomisationDialogTabMenu.csTab within customisation dialog
CustomisationOptionsFECustomisationOptionsFE.csCustomisation option controls
ShopMenuShopMenu.csInmate shop / commissary
ProgressFrontendMenuProgressFrontendMenu.csProgress tracking (milestones, stats)
LeaderboardsFrontendMenuLeaderboardsFrontendMenu.csLeaderboard display
CreditsCredits.csCredits roll
MainEditorFrontendMenuMainEditorFrontendMenu.csLevel editor homepage
EditorBrowseGamesMenuEditorBrowseGamesMenu.csBrowse community prisons
EditorMyPrisonsMenuEditorMyPrisonsMenu.csMy prisons list
EditorPublishMenuEditorPublishMenu.csPublish/submit prison
EditorSubscribedMenuEditorSubscribedMenu.csSubscribed prisons list
SlotSelectionMenuSlotSelectionMenu.csSave slot selection
PrisonSetupMenuPrisonSetupMenu.csPrison startup configuration (difficulty, inmates, etc.)
PlayerSelectMenuPlayerSelectMenu.csPlayer character selection (split-screen join)
MainMapMenuMainMapMenu.csFull-screen map view

7. In-Game (Overlay) Menus

MenuFileBaseDescription
PauseMenuPauseMenu.csBaseIngameMenuPause overlay (resume, settings, quit)
SettingsMenuSettingsMenu.csBaseIngameMenuIn-game settings (controls, video, audio)
OptionsControlsMenuOptionsControlsMenu.csBaseIngameMenuControl rebinding
OptionsSettingsMenuOptionsSettingsMenu.csBaseIngameMenuVideo/audio settings
OptionsHelpMenuOptionsHelpMenu.csBaseIngameMenuHelp/controls reference
ControlsMenuControlsMenu.csGameMenuBehaviourInventory: player's own inventory
CraftingMenuCraftingMenu.csGameMenuBehaviourCrafting interface
LootingMenuLootingMenu.csGameMenuBehaviourLooting another inmate/container
PlayerInventoryMenuPlayerInventoryMenu.csGameMenuBehaviourCombined inventory panel
SwagBagMenuSwagBagMenu.csGameMenuBehaviourSwag bag inventory
BedSaveMenuBedSaveMenu.csBaseIngameMenuSave game at bed
DeskMenuDeskMenu.csGameMenuBehaviourDesk/container inventory
ToiletMenuToiletMenu.csGameMenuBehaviourToilet hiding place inventory
CalendarMenuCalendarMenu.csBaseIngameMenuCalendar / schedule viewer
PayphoneMenuPayphoneMenu.csBaseIngameMenuPayphone (crafting recipes, quests)
FavourMenuFavourMenu.csGameMenuBehaviourInmate favour interactions
JournalFavoursMenuJournalFavoursMenu.csBaseIngameMenuFavour journal
JournalHintsMenuJournalHintsMenu.csBaseIngameMenuHints journal
GiftingMenuGiftingMenu.csGameMenuBehaviourGift items to inmates
RobinsonFavourMenuRobinsonFavourMenu.csGameMenuBehaviourRobinson (quest giver) favour
RobinsonMidQuestFavourMenuRobinsonMidQuestFavourMenu.csGameMenuBehaviourMid-quest favour
JobBoardMenuJobBoardMenu.csBaseIngameMenuPrison job board
JobTutorialMenuJobTutorialMenu.csBaseIngameMenuJob tutorial step display
GuardBoardGuardBoard.csBaseIngameMenuGuard duty roster/interaction
InformationBoardInformationBoard.csBaseIngameMenuInformation notice board
SignPostSignPost.csBaseIngameMenuSign post (directional/story info)
ShopMenuShopMenu.csGameMenuBehaviourInmate commissary shop
PasswordDialogMenuPasswordDialogMenu.csBaseIngameMenuPassword entry dialog

8. HUD Widgets

WidgetFileDescription
HUDHUD.csRoot HUD controller
HUDItemsLayoutHUDItemsLayout.csNamed position/scale configuration for all HUD elements
HUDItemLayoutGroupHUDItemLayoutGroup.csGroups layouts per aspect-ratio; contains m_MasterWorldHUDScale, per-player console/PC scales
PlayerInventoryHUDPlayerInventoryHUD.csQuick-access item bar (hotbar)
PlayerStatsHUDPlayerStatsHUD.csPlayer stats display (health, energy, etc.)
PlayerSolitaryHUDPlayerSolitaryHUD.csSolitary confinement overlay
ProgressBarHUDProgressBarHUD.csGeneric progress bar
NamePlateHUDNamePlateHUD.csCharacter nameplate
NameTagIconHudNameTagIconHud.csName tag with icon
SpeechBubbleHUDSpeechBubbleHUD.csSpeech bubble (world-space); facade offset support
AlertnessStarHUDAlertnessStarHUD.csGuard alertness indicator
ChatFeedHUDChatFeedHUD.csText chat feed
VoiceChatFeedHUDVoiceChatFeedHUD.csVoice chat indicator
TargetHUDTargetHUD.csTargeted character info
EmoteCategoryHUDEmoteCategoryHUD.csEmote wheel category
EmoteDisplayHUDEmoteDisplayHUD.csEmote selection display
IconDisplayHUDIconDisplayHUD.csGeneric icon display
JobProgressHUDJobProgressHUD.csActive job progress
FloorIndicatorHUDFloorIndicatorHUD.csCurrent floor indicator
RoutineAndTimeTrackerHUDRoutineAndTimeTrackerHUD.csTime/routine/minimap display
ObjectiveTrackerHUDObjectiveTrackerHUD.csActive objective tracker
ObjectiveSubGoalHUDObjectiveSubGoalHUD.csSub-goal within an objective
QuestCompletedHUDQuestCompletedHUD.csQuest completion popup
MiniMapMiniMap.csMinimap renderer
TutorialSpeechHUDTutorialSpeechHUD.csTutorial speech bubble
CustomisationUnlockedHUDCustomisationUnlockedHUD.csCustomisation unlock notification

HUD Layout Data

HUDItemsLayout (in Assembly-CSharp/HUDItemsLayout.cs) contains Vector2 fields for every positioned HUD element:

  • m_MiniMapPosition/Scale
  • m_StatsPosition/Scale
  • m_QuestPosition/Scale
  • m_EmotePosition/Scale
  • m_BottomRightPosition/Scale
  • m_VoiceChatFeedPosition/Scale
  • m_ChatFeedPosition/Scale
  • m_CentreCanvasPosition/Scale
  • m_IGMPosition/Scale
  • m_MaskContainerSize/Position
  • m_CalendarPosition
  • m_JobsBoardPosition/Scale
  • m_PayphonePosition/Scale
  • m_BedSaveMenuPosition/Scale
  • m_FullScreenMapKeyOffset/Scale
  • m_FullScreenMapFloorsOffset/Scale
  • m_FullScreenMapLegendOffset/Scale
  • m_InformationMenuPosition/Scale
  • m_TutorialPopupPosition/Scale
  • m_FadingCanvasPosition/Scale

9. World-Space UI & Tracked Elements

WorldCanvasTrackedUIElements

  • Per-floor world-space canvas with object pooling (m_PoolSize)
  • Contains T17TrackedUIElement instances for nameplates, speech bubbles, icons
  • GetUsedAlwaysVisibleElements() returns active speech bubbles for facade shifting

PerPlayerTrackedUIElements

  • Per-player world-space HUD elements (health bars, oven indicators)
  • SetTrackingCamera() / SetLayer() for per-player culling
  • m_OvenHudContainer reference

T17TrackedUIElement

  • Base tracked element attaching to world objects via Transform AttachedTo
  • m_SpeechBubble reference for facade offset management

TrackableUIElementsReporter

  • Update controller that reports tracked element positions

WorldSpaceHudScalePODO

  • Plain-old-data object for world HUD scaling

10. UI Effects & Animation

ClassFileDescription
UIAnimatedEffectUIAnimatedEffect.csSingle animated effect
UIAnimatedEffectControllerUIAnimatedEffectController.csController managing multiple effects per player; PlayEffect(Enum, float)
UIAnimatedCoinTickerUIAnimatedCoinTicker.csCoin-count ticker animation
UIAnimatedPaginationUIAnimatedPagination.csPagination dots
UIShimmerManagerUIShimmerManager.csShimmer/highlight effect manager
UIButtonShineUIButtonShine.csButton shine overlay
UIShineRegisterUIShineRegister.csRegisters shine targets
UICarousel / UICarouselBaseUICarousel*.csCarousel/scrollable list widgets
TextCarouselTextCarousel.csCarousel for text items
LoopingDragScrollLoopingDragScroll.csInfinite looping scroll
FadeManagerFadeManager.csScreen fade controller
CanvasAlphaChangerCanvasAlphaChanger.csCanvas alpha control with Copy() for cloned canvases
AnimatedEffectPingPongAnimatedEffectPingPong.csPing-pong animation
UI_AnimationToRenderTextureUI_AnimationToRenderTexture.csRenders animation to render texture
UI_DrawCharacterToRenderTextureUI_DrawCharacterToRenderTexture.csCharacter portrait renderer
UI_DrawRenderTextureToRawImageUI_DrawRenderTextureToRawImage.csDisplays render texture on RawImage

11. UI Carousels & Friend Activity

ClassFileDescription
DLCCarouselDLCCarousel.csDLC item carousel
MilestoneCarouselMilestoneCarousel.csAchievement/milestone progression carousel
MilestonePageMilestonePage.csSingle milestone page
MilestoneDisplayObjectMilestoneDisplayObject.csMilestone display item
PlaylistDataCarouselPlaylistDataCarousel.csPlaylist data carousel
UIFriendActivitySlotUIFriendActivitySlot.csFriend activity slot
UIFriendCampaignCarouselUIFriendCampaignCarousel.csFriend campaign progress carousel
UIFriendCampaignArrowsUIFriendCampaignArrows.csFriend campaign navigation arrows
UIJoinFriendCarouselUIJoinFriendCarousel.csJoin friend game carousel
UIJoinFriendSlotUIJoinFriendSlot.csJoin friend slot
FriendsContextMenuFriendsContextMenu.csFriend context menu (invite, join, etc.)
FriendInfoFriendInfo.csFriend data object
ChatFeedManagerChatFeedManager.csChat message manager

12. Settings Options

All options extend BaseOptionItem.

OptionFileKeyDescription
ToggleOptionItemToggleOptionItem.csGenericBoolean toggle backed by GlobalSave
ResolutionOptionItemResolutionOptionItem.cs"Settings:Resolution"Screen resolution
BlurOptionItemBlurOptionItem.cs"Settings:Blur"Blur quality toggle
ShadowDetailOptionItemShadowDetailOptionItem.cs"Settings:ShadowDetail"Shadow quality (ShadowLevel enum)
VSyncOptionItemVSyncOptionItem.cs"Settings:VSync"VSync toggle
VibrationOptionItemVibrationOptionItem.cs"Settings:Vibration"Controller vibration toggle
MusicOptionItemMusicOptionItem.cs"Audio:MusicVol"Music volume slider
SFXOptionItemSFXOptionItem.cs"Audio:EffectsVol"SFX volume slider
ProfanityFilterOptionItemProfanityFilterOptionItem.cs"Settings:ProfanityFilter"Profanity filter toggle
InfluencersOptionItemInfluencersOptionItem.cs"Settings:Influencers"Social media influencers toggle
PCControlOptionItemPCControlOptionItem.cs"Settings:PCControlScheme"PC control scheme (ControlOption enum)
PhotonRegionOptionItemPhotonRegionOptionItem.cs"Settings:PhotonRegion"Cloud region (CloudRegionCode)
BackgroundVideoOptionItemBackgroundVideoOptionItem.cs"Settings:BackgroundVideoEnabled"Frontend background video

13. Controllers & Remapping

ControlsRemapEntry

  • Individual control remapping entry (action → key/button binding)

ControllerSupportLegend

  • Legend images for controller bindings

LegendButtonsManager

  • Manages legend/button-hint display per root menu; RequestButtonUptate()

T17ControlMapper

  • Rewired ControlMapper integration for in-game rebinding UI

AlternateButtonMasher

  • Masher for alternate input detection

Input Map Data

  • InputMapData.cs — serialised input mapping configuration

SwitchControllerType

  • Enum for controller type switching

ControlSetting

  • Enum of control setting categories

ControlOption

  • Enum of control scheme options (e.g. SchemeA, SchemeB)

14. Navigation Helpers

ClassFileDescription
NavigateOnUICancelNavigateOnUICancel.csUnityEvent m_DoThisOnUICancel invoked when UI_Cancel is pressed
T17NavigableGridT17NavigableGrid.csGrid-based directional navigation
SelectableGroupSelectableGroup.csGroup of selectables for managed navigation
UIProxyLinkUIProxyLink.csProxy navigation link
T17_PassThroughNavigationT17_PassThroughNavigation.csPass-through navigation to parent

15. Tutorial & Hint System

ClassFileDescription
TutorialPopupTutorialPopup.csTutorial popup prefab
TutorialSpeechHUDTutorialSpeechHUD.csTutorial speech bubble
HUDTutorialArrowControllerHUDTutorialArrowController.csHUD tutorial arrow controller (per HUDTutorial type)
IGMTutorialArrowControllerIGMTutorialArrowController.csIn-game menu tutorial arrow controller
HUDTutorialArrowHandlerHUDTutorialArrowHandler.csHUD arrow handler
IGMTutorialArrowHandlerIGMTutorialArrowHandler.csIGM arrow handler
TutorialGuidedUIObjectiveTutorialGuidedUIObjective.csObjective that guides UI interaction
TutorialInputTriggerTutorialInputTrigger.csInput-based tutorial trigger
TutorialTriggerTutorialTrigger.csGeneral tutorial trigger
GlobalHintManagerGlobalHintManager.csGlobal hint display manager
T17HintObjectT17HintObject.csHint UI element
T17FavourObjectT17FavourObject.csFavour/relationship hint
HintButtonHintButton.csHint activation button
HintConfigHintConfig.csHint configuration

16. Guide Arrows

ClassFileDescription
GuideArrowGuideArrow.csDirectional guide arrow to objective
ArrowManagerArrowManager.csManages all guide arrows; CheckArrowInstances()
MapItemTrackerMapItemTracker.csItem tracking on map
SetObjectiveArrowObjectiveSetObjectiveArrowObjective.csObjective that sets a guide arrow

17. Utility Enums & Data Classes

ShadowLevel

Off, Low, High

ControlSetting

LeftStick, RightStick, DPad, FaceButtons, LeftShoulder, RightShoulder,
LeftTrigger, RightTrigger, Start, Back, ActionBottom, ActionRight,
ActionLeft, ActionTop, LeftStickClick, RightStickClick

ControlOption

SchemeA, SchemeB

SwitchControllerType

ProController, JoyCons

PCPlatform

  • Platform abstraction for PC-specific UI

PerPlatformActivator

  • Activates/deactivates game objects per platform

18. Key Patterns

Tab-Panel Menu Switching

Each RootMenu subclass has a dictionary mapping a menu-type enum → MenuList_Container (list of BaseMenuBehaviour + default index). When the flow calls SetXxxMenuTypeToOpen(), the RootMenu.Show() repopulates T17TabPanel.SetMenuBodies() and selects the default tab.

Single-Player Menu Hierarchy

FrontendRootMenu, EditorRootMenu, ResultsRootMenu operate on a single gamer. InGameRootMenu and HUDRootMenu have per-player instances cloned from a template canvas.

Cancel Handling Stack

BaseMenuBehaviour.m_bShouldBlockParentCancelHandler + static AllowedCancelHandlers form a stack. When a child opens with blocking enabled, the parent's cancel handler is temporarily disabled. On child hide, the parent's handler is restored.

Legend Text System

T17Text supports inline icons via TextPic. BaseMenuBehaviour.UpdateLegendText() converts localisation tags with icon size/offset data into formatted text. Legend data persists across show/hide cycles.

Options Dirty-Track Pattern

BaseOptionItemSetOptionDirty() marks pending; ApplyOption() writes to GlobalSave and applies; ResetOption() restores saved value. Used by all settings toggles/sliders.

Input Category Management

T17EventSystem.ApplyCategories() switches Rewired action categories based on UI state (e.g. InGameInGameMenuInGamePaused). This enables/disables relevant input bindings per context.

HUD Splitscreen Scaling

HUDMenuFlow.CheckMenuInstances() clones the HUD canvas for each player, then applies position/scale from HUDItemsLayout (selected by SplitscreenHUDHandler based on camera count + player index). World-space HUD scale adjusts for 3/4-player splitscreen via m_MasterWorldHUDScale and per-platform multipliers.

T17EventSystem Per-Gamer

Each gamer gets their own T17EventSystem with a dedicated T17RewiredStandaloneInputModule. T17EventSystemsManager maps gamer → event system. All UI interactions use the gamer-specific event system to support split-screen input isolation.


19. File Index

(Key files by functional area)

AreaFiles
FlowsBaseFlowBehaviour.cs, FrontEndFlow.cs, InGameMenuFlow.cs, HUDMenuFlow.cs, ResultsFlow.cs, BootFlow.cs, LoadingFlow.cs, LevelFlow.cs
Root MenusRootMenu.cs, FrontendRootMenu.cs, InGameRootMenu.cs, HUDRootMenu.cs, ResultsRootMenu.cs, EditorRootMenu.cs
Base ClassesBaseMenuBehaviour.cs, BaseIngameMenu.cs, BaseIngamePassiveUI.cs, BaseOptionItem.cs, BaseTooltip.cs, BaseResultsScreen.cs, BaseContextMenu.cs, GameMenuBehaviour.cs, FrontendMenuBehaviour.cs
T17 WidgetsT17Button.cs, T17Text.cs, T17Image.cs, T17RawImage.cs, T17Toggle.cs, T17Slider.cs, T17StatsSlider.cs, T17ScrollView.cs, T17Scrollbar.cs, T17InputField.cs, T17DropDown.cs, T17Selectable.cs, T17TabPanel.cs, T17MenuBody.cs, T17DialogBox.cs, T17DialogBoxManager.cs, T17TooltipManager.cs, T17ItemTooltip.cs, T17CounterObject.cs, T17FavourObject.cs, T17HintObject.cs, T17InfoObject.cs, T17TrackedUIElement.cs, T17UIAlphaFade.cs, T17NavigableGrid.cs, T17IconManager.cs, T17AspectRatioFitter.cs
Event SystemT17EventSystem.cs, T17EventSystemsManager.cs, T17RewiredStandaloneInputModule.cs, Team17UIInputModule.cs, T17BlockKeyboardAutoFocus.cs, T17UISelectDeselectEvents.cs, T17UIPointerOverExitEvents.cs
HUDHUD.cs, HUDItemsLayout.cs, HUDItemLayoutGroup.cs, HUDRootMenu.cs, HUDMenuFlow.cs, PlayerInventoryHUD.cs, PlayerStatsHUD.cs, PlayerSolitaryHUD.cs, ProgressBarHUD.cs, NamePlateHUD.cs, NameTagIconHud.cs, SpeechBubbleHUD.cs, AlertnessStarHUD.cs, ChatFeedHUD.cs, VoiceChatFeedHUD.cs, TargetHUD.cs, EmoteCategoryHUD.cs, EmoteDisplayHUD.cs, IconDisplayHUD.cs, JobProgressHUD.cs, FloorIndicatorHUD.cs, RoutineAndTimeTrackerHUD.cs, ObjectiveTrackerHUD.cs, ObjectiveSubGoalHUD.cs, QuestCompletedHUD.cs, MiniMap.cs
Frontend MenusMainFrontendMenu.cs, CampaignFrontendMenu.cs, CoopFrontEndMenu.cs, VersusFrontendMenu.cs, VersusLobbyFEMenu.cs, PrivateVersusFEMenu.cs, PublicVersusFEMenu.cs, SelectPrivateVersusFEMenu.cs, BrowseGamesFrontendMenu.cs, SettingsFrontendMenu.cs, DLCStoreFrontendMenu.cs, CollectablesFrontendMenu.cs, CustomisationFrontendMenu.cs, CustomisationDialogFrontendMenu.cs, CustomisationDialogTabMenu.cs, CustomisationOptionsFE.cs, ShopMenu.cs, ProgressFrontendMenu.cs, LeaderboardsFrontendMenu.cs, Credits.cs, MainEditorFrontendMenu.cs, EditorBrowseGamesMenu.cs, EditorMyPrisonsMenu.cs, EditorPublishMenu.cs, EditorSubscribedMenu.cs
In-Game MenusPauseMenu.cs, SettingsMenu.cs, OptionsControlsMenu.cs, OptionsSettingsMenu.cs, OptionsHelpMenu.cs, ControlsMenu.cs, CraftingMenu.cs, LootingMenu.cs, PlayerInventoryMenu.cs, SwagBagMenu.cs, BedSaveMenu.cs, DeskMenu.cs, ToiletMenu.cs, CalendarMenu.cs, PayphoneMenu.cs, FavourMenu.cs, JournalFavoursMenu.cs, JournalHintsMenu.cs, GiftingMenu.cs, RobinsonFavourMenu.cs, RobinsonMidQuestFavourMenu.cs, JobBoardMenu.cs, JobTutorialMenu.cs, GuardBoard.cs, InformationBoard.cs, SignPost.cs, PasswordDialogMenu.cs
OptionsBaseOptionItem.cs, ToggleOptionItem.cs, ResolutionOptionItem.cs, BlurOptionItem.cs, ShadowDetailOptionItem.cs, VSyncOptionItem.cs, VibrationOptionItem.cs, MusicOptionItem.cs, SFXOptionItem.cs, ProfanityFilterOptionItem.cs, InfluencersOptionItem.cs, PCControlOptionItem.cs, PhotonRegionOptionItem.cs, BackgroundVideoOptionItem.cs
World UIWorldCanvasTrackedUIElements.cs, PerPlayerTrackedUIElements.cs, T17TrackedUIElement.cs, TrackableUIElementsReporter.cs, WorldSpaceHudScalePODO.cs, SpeechBubbleHUD.cs, NamePlateHUD.cs
EffectsUIAnimatedEffect.cs, UIAnimatedEffectController.cs, UIAnimatedCoinTicker.cs, UIAnimatedPagination.cs, UIShimmerManager.cs, UIButtonShine.cs, UIShineRegister.cs, UICarousel.cs, UICarouselBase.cs, TextCarousel.cs, LoopingDragScroll.cs, FadeManager.cs, CanvasAlphaChanger.cs
TutorialsTutorialPopup.cs, TutorialSpeechHUD.cs, HUDTutorialArrowController.cs, IGMTutorialArrowController.cs, HUDTutorialArrowHandler.cs, IGMTutorialArrowHandler.cs, GlobalHintManager.cs, T17HintObject.cs, T17FavourObject.cs, HintConfig.cs
ArrowsGuideArrow.cs, ArrowManager.cs, MapItemTracker.cs
NavigationNavigateOnUICancel.cs, T17NavigableGrid.cs, SelectableGroup.cs, UIProxyLink.cs, T17_PassThroughNavigation.cs
Split-screenSplitscreenHUDHandler.cs, SplitscreenDividerHandler.cs, HUDItemLayoutGroup.cs, HUDItemsLayout.cs
Carousels/FriendsDLCCarousel.cs, MilestoneCarousel.cs, UIFriendActivitySlot.cs, UIFriendCampaignCarousel.cs, UIJoinFriendCarousel.cs, FriendsContextMenu.cs

On this page

1. Architecture Overview2. Flow SystemBaseFlowBehaviour : T17MonoBehaviourFrontEndFlow : BaseFlowBehaviourInGameMenuFlow : BaseFlowBehaviourHUDMenuFlow : BaseFlowBehaviourResultsFlow : BaseFlowBehaviour3. Root Menu HierarchyRootMenu : BaseMenuBehaviourFrontendRootMenu : RootMenuEditorRootMenu : RootMenuInGameRootMenu : RootMenuHUDRootMenu : RootMenuResultsRootMenu : RootMenu4. Base Menu ClassesBaseMenuBehaviour : T17MonoBehaviour, IMenuEventDelegateBaseIngameMenu : BaseMenuBehaviourBaseIngamePassiveUI : BaseMenuBehaviourGameMenuBehaviour : BaseIngameMenuFrontendMenuBehaviour : BaseMenuBehaviourBaseOptionItem : BaseMenuBehaviourBaseTooltip : BaseMenuBehaviourBaseResultsScreen : BaseMenuBehaviourBaseContextMenu : BaseMenuBehaviourBaseComponentSetup5. T17 Widget LibraryCore WidgetsLayout & ContainersOverlays & DialogsUI HelpersEvent SystemInput Categories (InputCateogryStates)6. Frontend Menus7. In-Game (Overlay) Menus8. HUD WidgetsHUD Layout Data9. World-Space UI & Tracked ElementsWorldCanvasTrackedUIElementsPerPlayerTrackedUIElementsT17TrackedUIElementTrackableUIElementsReporterWorldSpaceHudScalePODO10. UI Effects & Animation11. UI Carousels & Friend Activity12. Settings Options13. Controllers & RemappingControlsRemapEntryControllerSupportLegendLegendButtonsManagerT17ControlMapperAlternateButtonMasherInput Map DataSwitchControllerTypeControlSettingControlOption14. Navigation Helpers15. Tutorial & Hint System16. Guide Arrows17. Utility Enums & Data ClassesShadowLevelControlSettingControlOptionSwitchControllerTypePCPlatformPerPlatformActivator18. Key PatternsTab-Panel Menu SwitchingSingle-Player Menu HierarchyCancel Handling StackLegend Text SystemOptions Dirty-Track PatternInput Category ManagementHUD Splitscreen ScalingT17EventSystem Per-Gamer19. File Index