settings.swf
The in-game Settings window, opened from the escape menu. It presents a left-side category list and a dynamically swapped content pane for Language, Audio, Video, Controls, Hotkeys, Social, Payments, and Misc on PC; and AudioVideo, Controls, Social, Legal, and Gameplay on console. Each pane notifies the game engine when any option changes.
Document/main class: Settings (extends _kiwi.Core.UIComponent)
SWF-specific classes: 45 (excluding pure skin/asset wrappers)
Main class: Settings
Settings manages the category list and content-pane lifecycle. On construction it stores the placeholder position, removes the placeholder from the display list, and conditionally registers four ExternalInterface callbacks. Accept/Cancel buttons and the categoriesList Listbox are wired immediately. A perspectiveProjection is configured (FOV 74.54, centre 275×200) on ADDED_TO_STAGE. In configUI(), the appropriate category list is populated depending on IsConsole() and IsRunningSystemConsole(); the Chinese locale (LOCALE_ZH) hides the Payments category.
Public methods
hideProfanityFilter() : void— forwards to the activeSocialPaneif it is currently displayed, shifting checkbox positions upward to fill the gap.__setPerspectiveProjection_(e : Event) : void— sets 3-D perspective on the root.
Key fields
__id0_ : WindowHeaderSmall— the panel header; title key$EscapeMenu_Settings.categoriesList : Listbox— left-side navigation list; items are added with translated labels and int data values.contentPlaceholder : MovieClip— removed at runtime; itsx/ybecomecontentOrigin.contentOrigin : Point— position where all content panes are placed.currentContentPane : MovieClip— the currently visible pane; previous pane is removed before the new one is added. Declaredprivate, but the engine reads and writes through it by path (see below).displayedPanelCategory : int— tracks which category is shown to avoid redundant swaps.acceptButton, cancelButton : MovieClip— each wraps abtnchild that firesOnAccept/OnRequestClose.btnLegend : MovieClip— console button-legend strip; some children hidden per platform (NX hidesbtnX, non-NX console hidesbtnY, non-system-console hidesbtnY2).__setPropDict : Dictionary— frame-based prop-setting deduplication dictionary.__lastFrameProp : int— last frame at which__setProp_handlerran.
Frame scripts / timeline
Stage 804×610, 24 fps, 20 frames; root labels PC (frame 1) and Console (frame 11).
- frame 1 (
frame1):stop() - frame 11 (
frame11):stop()— triggers deferredcancelButton/acceptButtoncomponent-inspector setup (props applied only when current frame is in range 11–20).
Runtime dependencies & integration
ExternalInterface callbacks registered (game → Flash):
| Callback | Handler | Description |
|---|---|---|
switchCategory(id) |
switchCategory(int) |
Destroys the current pane and instantiates the appropriate pane class at contentOrigin. |
onAccept(e) |
onAccept |
Calls OnAccept back. |
onCancel(e) |
onCancel |
Calls OnRequestClose back. |
setSelectedCategoryIndex(id) |
setSelectedCategoryIndex |
Selects a list item by data value without switching content. |
hideProfanityFilter() |
hideProfanityFilter |
Forwards to SocialPane. |
ExternalInterface calls dispatched (Flash → game):
OnAccept— accept button or callback.OnRequestClose— cancel button or callback.RequestSwitchCategory(id)— when the player clicks a category in the list; the game responds withswitchCategory.
Option values travel by field path, not by callback. The panes only wire listeners and report OnCategoryOptionChanged(categoryId); the engine itself reads and writes the controls of the open pane by name through currentContentPane, e.g. currentContentPane.masterVolSlider.value, .mouseSensitivity.minimum/.maximum/.snapInterval, .invertMouseX.checked, .windowModeCombobox.selectedIndex, .selectedCulture, .gammaMin, .confirmPopup.visible/.secondsLeft. The list of names lives in Trove_x64.exe (the run of strings from SettingsUI to setSelectedCategoryIndex), not in the SWF, so a renamed field silently stops being applied. A reported OnCategoryOptionChanged is what makes the game ask $Settings_SavePrompt ("Do you wish to save your changes to this page?") when the window is closed.
translate keys: $EscapeMenu_Settings, $Settings_Category_Language, $Settings_Category_Audio, $Settings_Category_Controls, $Settings_Category_Hotkeys, $Settings_Category_Video, $Settings_Category_Social, $Settings_Category_Payment, $Settings_Category_Misc, $Settings_Category_Audio_Video, $Settings_Category_Legal, $Settings_Category_Gameplay, $Accept, $Cancel.
Other game-specific classes
Content pane classes (PC)
-
LanguagePane(embedsymbol240, extends UIComponent) — singleKiwiComboBox(lanaguageSelect). CallbackaddLanguage(culture, label)populates the combo (labels arrive as plain words, e.g.English). PropertyselectedCulture : Stringgets/sets by matching.data. FiresOnCategoryOptionChanged(categoryId)on change. -
AudioPane(embedsymbol318, extends UIComponent) — fourfl.controls.Sliderwidgets (master, music, SFX, ambiance; range 0–10, live dragging) plus abackgroundAudioCBCheckbox ($Settings_BackgroundAudio). All fireOnCategoryOptionChangedon change. -
ControlsPane(embedsymbol280, extends UIComponent) — mouse invert X/Y checkboxes, mouse sensitivity slider (0–10, snap 0.02 as authored; the engine overwrites the range at runtime and it arrives as 0–4), controller-support checkbox, swap-thumbsticks checkbox, camera stick invert X/Y, thumbstick sensitivity slider,preferredPlatformUIKiwiComboBox (labels arrive as keys such as$Automaticand$Settings_Controller; the selection is read throughselectedPlatformUI). CallbacksaddPlatformUI(id, label)andhidePlatformUI(). Enabling/disabling controller support dynamically adds/removes the Controller entry from the combo box. FiresOnCategoryOptionChanged. -
VideoPane(embedsymbol209, extends UIComponent) — the most complex PC pane. Quality preset buttons (Low/Medium/High/Ultra/Custom as toggleLabelButtons), window-mode combo ($Settings_VidModeWindowed= 0,$Settings_VidModeFullscreen= 1,$Settings_VidModeWindowedFullscreen= 2), render-device combo (device names arrive as plain words, e.g.Direct3D 11), display-modes combo (populated viaaddDisplayMode(id,w,h,hz)→"WxH @HzHz"). Advanced section (hidden unless Custom preset): draw distance, supersample, shader complexity, FOV (60–100), LOD distance (15–100), VFX LOD (0.05–1), vsync, post-FXAA, bloom, DOF, SSAO, lens distortion. Gamma and brightness sliders (0–2 with 1 as neutral, displayed byformatBrightnessTextStringas twoLerps meeting at 1, betweengammaMin/gammaMaxandbrightnessMin/brightnessMax; those pane fields default to 0.2/5 and are written by the engine).TimedConfirmPopupembedded (hidden by default; used for resolution-change confirmation). Callbacks:addRenderDevice,clearDropDowns,addDisplayMode,forceUpdateSliderText,notifyQualityPresetLevel. FiresOnCategoryOptionChanged,OnVideoPresetClicked(presetId),OnRenderDeviceChanged. -
SocialPane(embedsymbol212, extends UIComponent) — checkboxes: profanity filter, appear offline, auto-join global chat, auto-join trade chat, show player nameplates, show own nameplate, display club name. Tether section (invitation behavior combo + icon checkboxes for self/others) is created but immediately hidden viadisableTethering(); the engine still writesselectedTetherInvitationBehavior,tether_showIconSelfandtether_showIconOthers.hideProfanityFilter()shifts visible checkboxes up. FiresOnCategoryOptionChanged. -
MiscPane(embedsymbol238, extends UIComponent) — combat text, intro movies, player location, multithreaded, cornerstone damageable, suppress broadcast chat spam, skip auction claim confirmation and keep map open while moving (keepMapOpenCheckbox, label$Settings_KeepMapOpenWhileMoving— "Keep Map Open While Moving", added in the October 2026 build) checkboxes; UI scale slider (1–2, snap 0.05); rarity combo (populated viaaddRarity); EULA button (OnView3rdPartyLicenses) and credits button (OnCreditsButtonClicked). Contains aTimedConfirmPopup(hidden) which, likeVideoPane's, the engine drives ascurrentContentPane.confirmPopup. FiresOnCategoryOptionChanged. -
PaymentsPane(embedsymbol230, extends UIComponent) — payment method combo (methodsCB), add/remove button (OnAddRemovePaymentMethods). CallbacksaddPaymentMethod(id, label, select),clearPaymentMethods(),notifyLoggedIntoSteam(bool)(hides art if on Steam). FiresOnCategoryOptionChanged. -
KeyBindings(embedsymbol263, extends UIComponent) —GroupedItemListwithUIScrollBar; each entry is aKeyBindingItem. CallbacksaddScope(id, name),addKeyBinding(scopeId, actionId, name, keyStr, consoleStr),hideCapturePrompt(),updateKeyBinding(actionId, keyStr, consoleStr). Clicking a binding button showscaptureWaitMCand firesOnTryUpdateHotkey(scopeId, actionId, inputType)(0=keyboard, 1=console). "Restore Defaults" button firesOnRestoreDefaults.
Content pane classes (console / system-console)
-
ConsoleAudioVideoPane(embedsymbol313, extends UIComponent) — music, SFX, ambiance sliders; brightness and gamma sliders (with formatted text display usingLerp); UI scale slider. Platform-specific: adds display-area item for Durango. CallbacksforceUpdateSliderText,highlightSelection(idx)(movesoptionHighlight.y),changeSettingValue(idx, delta)(adjusts slider values by fixed increments),restoreDefaults. FiresOnContentPaneLoaded(count)on firstENTER_FRAME. -
ConsoleControlsPane(embedsymbol300, extends UIComponent) — invert camera stick X/Y, thumbstick sensitivity slider, auto-aim checkbox. Two frame stops (frames 1, 11). CallbackshighlightSelection,changeSettingValue,restoreDefaults. FiresOnContentPaneLoaded. -
ConsoleSocialPane(embedsymbol288, extends UIComponent) — global chat, trade chat, profanity filter, appear offline, display club name checkboxes; four editable quick-chat TextFields (customText0–3); optional Switch Profile link (Durango only). Inline text editing: clicking a quick-chat field enters edit mode, Enter submits, cancel restorespreviousText. CallbackshighlightSelection,changeSettingValue,restoreDefaults,setCustomText(idx, text),onEditTextField,onSetTextCancel. FiresOnSetEditTextMode(bool),OnCallSwitchProfile,OnContentPaneLoaded. -
ConsoleLegalPane(embedsymbol297, extends UIComponent) — two selectable text items: view EULA and unlink account.changeSettingValue(0, 0)firesOnViewEULA. FiresOnContentPaneLoaded. -
ConsoleMiscPane(embedsymbol290, extends UIComponent) — combat text, player location, vibration (NX uses key$Settings_Vibration_NX), cornerstone damageable checkboxes; rarityArrowSelect. CallbackshighlightSelection,changeSettingValue,restoreDefaults,addRarity. FiresOnContentPaneLoaded. -
PCControllerAudioPane,PCControllerControlsPane,PCControllerVideoPane,PCControllerLanguagePane,PCControllerMiscPane,PCControllerSocialPane,PCControllerPaymentsPane— controller-overlay variants of the PC panes, instantiated whenIsConsole() && !IsRunningSystemConsole(). Not individually detailed here (files present, same pattern as PC panes).PCControllerMiscPanecarries the samekeepMapOpenCheckboxas item 7 of its controller list (UI scale, rarity and EULA moved to 8, 9 and 10); restoring defaults unchecks it.
Helper / popup classes
-
TimedConfirmPopup(embedsymbol82, extends UIComponent) — countdown popup with "Keep" and "Revert" buttons.secondsLeftsetter formats$Settings_RevertCountdownFormatreplacing{time}. "Revert" firesOnRevertSettings; "Keep" firesOnKeepSettings. -
ConfirmPopup(embedsymbol320, dynamic MovieClip) — simpler popup with a single "OK" button ($OK). -
InputCapturePrompt(embedsymbol262, dynamic MovieClip) — pure visual overlay shown while waiting for a key press; no code. -
KeyBindingItem(embedsymbol275, dynamic MovieClip) — a row in the bindings list; hasbindingNameTextField(action name),bindingButton(keyboard key,btnGreenIcon_small),bindingButtonConsole(console button,btnGreenIcon_small).
Button and skin asset wrappers
BtnGreen,btnGreen_small,btnGreenIcon_small—LabelButtonsubclasses, embedded symbol assets.InputCapturePrompt— pure MovieClip (see above).- Scroll/slider/listbox skins (24 classes):
ScrollArrowUp/Down_*Skin,ScrollThumb_*Skin,ScrollTrack_skin,ScrollBar_thumbIcon,SliderThumb_*Skin,SliderTrack_*Skin,SliderTick_skin— all pure bitmap/shape embed symbols, no logic. - Cell renderer skins (7 classes):
CellRenderer_*Skin— list-item visual states. - ComboBox skins (4 classes):
ComboBox_*Skin. TextInput_upSkin,TextInput_disabledSkin,List_skin,focusRectSkin— UI element skin symbols.
Settings_fla timeline symbols (3 classes)
Settings_fla/acceptButton_9— embedded accept-button clip; component-inspector props set label to$Accepton frames 11–20.Settings_fla/cancelButton_11— embedded cancel-button clip; label$Cancelon frames 11–20.Settings_fla/header_background_115— header background graphic clip.
Notable logic
- Pane hot-swap:
switchCategoryremoves the current pane withremoveChildand immediatelyaddChilds a freshly constructed replacement. No pooling; pane state is discarded on every category switch. - Console vs. PC branching: The main class checks both
IsConsole()andIsRunningSystemConsole()independently.IsConsole() && !IsRunningSystemConsole()= a gamepad player on PC (uses PCController* panes).IsRunningSystemConsole()= native console (uses Console* panes with d-pad navigation driven by index-basedhighlightSelection/changeSettingValuecallbacks). - Frame-based prop application:
__setProp_handlerfires on everyFRAME_CONSTRUCTEDevent and guardscancelButton/acceptButtoncomponent inspector calls with a frame-range check (frames 11–20), preventing double-application. - Locale guard: The Payments category is hidden if
_locale == LOCALE_ZH(Chinese). - VideoPane quality preset flow: Clicking a preset button fires
OnVideoPresetClicked(presetId)to the game (which applies actual render settings), then callsnotifyQualityPresetLevel(level)back. Level -1 means Custom: the advanced sub-widgets become visible and the "Custom" indicator button hides.