OptionsCheckbox_OnClick(this) OptionsRow_Hover(this:GetParent(), 1) OptionsRow_Hover(this:GetParent(), nil) OptionsRow_Hover(this, 1) OptionsRow_Hover(this, nil) OptionsSlider_OnValueChanged(this, arg1) OptionsRow_Hover(this:GetParent():GetParent(), 1) OptionsRow_Hover(this:GetParent():GetParent(), nil) OptionsRow_Hover(this, 1) OptionsRow_Hover(this, nil) OptionsRow_Hover(this, 1) OptionsRow_Hover(this, nil) this:SetBackdropColor(0, 0, 0, 0) this:SetBackdropBorderColor(0.6, 0.6, 0.6) this:SetBackdropColor(0, 0, 0, 0) this:SetBackdropBorderColor(0.6, 0.6, 0.6) getglobal(self:GetName() .. "Label"):SetText("Gameplay") getglobal(self:GetName() .. "Label"):SetText("System") self:SetScrollChild(BenillaOptionsFrameContainerBody) OptionsScroll_Fit() BenillaScroll_OnMouseWheel(this, arg1) BenillaScroll_SyncBar(this) BenillaScroll_SyncBar(this) OptionsRow_OnLoad(self, "deselectOnClick", "Sticky Targeting", "OPTION_TOOLTIP_GAMEFIELD_DESELECT") self.invert = 1 OptionsRow_OnLoad(self, "assistAttack", "Attack on assist", "OPTION_TOOLTIP_ASSIST_ATTACK") OptionsRow_OnLoad(self, "autoClearAFK", "Auto Clear AFK", "OPTION_TOOLTIP_CLEAR_AFK") OptionsRow_OnLoad(self, "BlockTrades", "Block Trades", "OPTION_TOOLTIP_BLOCK_TRADES") OptionsRow_OnLoad(self, "autoSelfCast", "Auto Self Cast", "OPTION_TOOLTIP_AUTO_SELF_CAST") OptionsRow_OnLoad(self, "autoLootDefault", "Auto Loot") OptionsRow_OnLoad(self, "mouseInvertPitch", "Invert Mouse", "OPTION_TOOLTIP_INVERT_MOUSE") OptionsRow_OnLoad(self, "mousespeed", "Mouse Sensitivity", "OPTION_TOOLTIP_MOUSE_SENSITIVITY") OptionsSliderRow_Setup(self, 0.5, 1.5, 0.05) OptionsRow_OnLoad(self, "cameraSmoothStyle", "Camera Following Style", "OPTION_TOOLTIP_CAMERA1") OptionsDropdownRow_Setup(self, { { text = "Smart", value = "1", tip = "OPTION_TOOLTIP_CAMERA1" }, { text = "Always", value = "2", tip = "OPTION_TOOLTIP_CAMERA2" }, { text = "Never", value = "0", alt = "3", tip = "OPTION_TOOLTIP_CAMERA3" }, }) OptionsRow_OnLoad(self, "cameraTerrainTilt", "Follow Terrain", "OPTION_TOOLTIP_FOLLOW_TERRAIN") OptionsRow_OnLoad(self, "cameraBobbing", "Head Bob", "OPTION_TOOLTIP_HEAD_BOB") OptionsRow_OnLoad(self, "cameraYawSmoothSpeed", "Auto-Follow Speed", "OPTION_TOOLTIP_AUTO_FOLLOW_SPEED") OptionsSliderRow_Setup(self, 90, 270, 10, "raw") OptionsRow_OnLoad(self, "cameraWaterCollision", "Water Collision", "OPTION_TOOLTIP_WATER_COLLISION") OptionsRow_OnLoad(self, "cameraPivot", "Smart Pivot", "OPTION_TOOLTIP_SMART_PIVOT") OptionsRow_OnLoad(self, "cameraYawMoveSpeed", "Mouse Look Speed", "OPTION_TOOLTIP_MOUSE_LOOK_SPEED") OptionsSliderRow_Setup(self, 90, 270, 10, "raw") self.partner = { cvar = "cameraPitchMoveSpeed", scale = 0.5 } OptionsRow_OnLoad(self, "cameraDistanceMaxFactor", "Max Camera Distance", "OPTION_TOOLTIP_MAX_FOLLOW_DIST") OptionsSliderRow_Setup(self, 1.0, 2.0, 0.1, "yards") OptionsRow_OnLoad(self, "MasterSoundEffects", "Enable All Sound", "OPTION_TOOLTIP_ENABLE_ALL_SOUND") self.soundQuirk = 1 OptionsRow_OnLoad(self, "MasterVolume", "Master Volume", "OPTION_TOOLTIP_MASTER_VOLUME") OptionsRow_OnLoad(self, "SoundVolume", "Sound Volume", "OPTION_TOOLTIP_SOUND_VOLUME", 1) self.parentRow = "RowMaster" OptionsRow_OnLoad(self, "MusicVolume", "Music Volume", "OPTION_TOOLTIP_MUSIC_VOLUME", 1) self.parentRow = "RowMaster" OptionsRow_OnLoad(self, "AmbienceVolume", "Ambience Volume", "OPTION_TOOLTIP_AMBIENCE_VOLUME", 1) self.parentRow = "RowMaster" OptionsRow_OnLoad(self, "EnableMusic", "Enable Music", "OPTION_TOOLTIP_ENABLE_MUSIC") self.soundQuirk = 1 OptionsRow_OnLoad(self, "EnableAmbience", "Enable Ambience", "OPTION_TOOLTIP_ENABLE_AMBIENCE") self.soundQuirk = 1 OptionsRow_OnLoad(self, "EnableErrorSpeech", "Enable Error Speech", "OPTION_TOOLTIP_ENABLE_ERROR_SPEECH") self.soundQuirk = 1 OptionsRow_OnLoad(self, "Sound_EnableSoundWhenGameIsInBG", "Enable Sound in Background", "BENILLA_TOOLTIP_BACKGROUND_SOUND") self.soundQuirk = 1 OptionsRow_OnLoad(self, "uiScale", "UI Scale", "OPTION_TOOLTIP_UI_SCALE") OptionsSliderRow_Setup(self, OptionsFrameSliders[1].minValue, OptionsFrameSliders[1].maxValue, OptionsFrameSliders[1].valueStep) -- A live write would rescale the slider mid-drag. self.deferred = 1 OptionsRow_OnLoad(self, "farclip", "Terrain Distance", "OPTION_TOOLTIP_FARCLIP") OptionsSliderRow_Setup(self, OptionsFrameSliders[2].minValue, OptionsFrameSliders[2].maxValue, OptionsFrameSliders[2].valueStep, "raw") OptionsRow_OnLoad(self, "WorldDetail", "Environment Detail", "OPTION_TOOLTIP_ENVIRONMENT_DETAIL") -- Stop names from the era quality ladder. OptionsSliderRow_Setup(self, OptionsFrameSliders[3].minValue, OptionsFrameSliders[3].maxValue, OptionsFrameSliders[3].valueStep, nil, { "Low", "Medium", "High" }) -- OptionsFrame_SetDefaults' default (l.444-445); -- `or 1` covers a VM with no CVars. local gd = tonumber(GetCVarDefault("gamma")) or 1 OptionsNumFuncRow_OnLoad(self, GetGamma, SetGamma, tostring(1 - gd), "Brightness", "BENILLA_TOOLTIP_BRIGHTNESS") OptionsSliderRow_Setup(self, OptionsFrameSliders[6].minValue, OptionsFrameSliders[6].maxValue, OptionsFrameSliders[6].valueStep, "travel") -- Index 7 of OptionsFrameSliders, seated where the -- reference's own slider order puts it: after -- Brightness, before Weather Intensity. Before this -- the row was a hole, so the only way to anisotropy -- was `/console anisotropic 16` — and a player on a -- Custom graphics preset never met it at all, since -- the preset ladder is what seeds the value. OptionsRow_OnLoad(self, "anisotropic", "Anisotropic Filtering", "BENILLA_TOOLTIP_ANISOTROPIC") -- 1 to 16, the CVar's own range (`ANISO_RANGE`), -- not the stock table's 1-4 — see -- BENILLA_GRAPHICS_SLIDER_ROWS. Step 1 rather than -- a power-of-two ladder because the value is a -- MAXIMUM the driver is free to round down: an -- off-ladder stop is a weaker setting, never a -- wrong one, which is the test `RowShadowResolution` -- fails and so takes a dropdown instead. OptionsSliderRow_Setup(self, 1, 16, 1, "aniso") -- DEFERRED to Apply, as Render Scale below it is, -- and for the same kind of reason: the commit -- re-samples every resident texture and rebuilds -- the bind group of every material that names one -- (`benilla_world::tex_filter_live`). That is -- cheap once and silly sixteen times, which is -- what a drag across this groove would ask for. -- -- It does NOT need a restart, though the reference -- says so of its own row: its sampler state lived -- inside each TextureCreate and it kept no list of -- live textures. Ours re-stamps them in place. self.deferred = 1 -- The other half of the filter policy -- (`tex_filter.rs`), under the row that outranks -- it: `anisotropic` at 2 or more writes mode 5 and -- this writes mode 4 only while that bit is clear -- (`0x688d0d`). So the row is greyed, not hidden, -- when anisotropy is on — it still holds the value -- a player set, and turning anisotropy off hands -- it back. OptionsRow_OnLoad(self, "trilinear", "Trilinear Filtering", "BENILLA_TOOLTIP_TRILINEAR") -- Deferred for the same reason its neighbour is: -- the commit re-samples every resident texture, -- and a player changing both rows should pay that -- once rather than twice. self.deferred = 1 OptionsRow_OnLoad(self, "weatherDensity", "Weather Intensity", "OPTION_TOOLTIP_WEATHER_DETAIL") -- Our names for `0x67b870`'s spawn-rate gains -- `{0.1, 0.33, 0.66, 1.0}` (`[0x8680ec]`). OptionsSliderRow_Setup(self, OptionsFrameSliders[9].minValue, OptionsFrameSliders[9].maxValue, OptionsFrameSliders[9].valueStep, nil, { "Minimal", "Low", "Medium", "Full" }) -- Deviation: modern Classic's two-entry Display -- Mode, as there is no exclusive fullscreen; -- gxWindow "0" is the borderless window. -- Latched, like the other two video rows. self.deferred = 1 OptionsRow_OnLoad(self, "gxWindow", "Display Mode", "BENILLA_TOOLTIP_DISPLAY_MODE") OptionsDropdownRow_Setup(self, { { text = "Windowed (Fullscreen)", value = "0" }, { text = "Windowed", value = "1" }, }) -- The window size. Backed by the index verbs, not -- by `gxResolution` directly: `SetScreenResolution` -- is 1-based into `GetScreenResolutions`, and -- `GetCurrentResolution` reports the *live* window -- rather than the CVar, which in borderless -- fullscreen are not the same thing. -- -- Built from the real list, so the entries are -- whatever this monitor actually offers. 1.12's -- own video panel had this row; benilla shipped -- the display-mode and vsync rows without it, so -- there was no way to resize from inside the game. -- `rebuild`, not a list baked here: at OnLoad -- the engine has pushed no modes yet, so a list -- built now is empty for the whole session. self.rebuild = OptionsResolutionRow_Rebuild self.deferred = 1 OptionsNumFuncRow_OnLoad(self, GetCurrentResolution, SetScreenResolution, "1", "Resolution", "BENILLA_TOOLTIP_RESOLUTION") OptionsResolutionRow_Rebuild(self) OptionsDropdownRow_Setup(self, self.entries) -- Deferred: `gxVSync` is registered **latched** -- (`cvars.rs`), so a write only stages until -- `RestartGx`, which is what Apply calls. An -- earlier comment here said "vsync changes live" -- — it cannot, and that mismatch is why the -- setting came back on after a relaunch. self.deferred = 1 OptionsRow_OnLoad(self, "gxVSync", "Vertical Sync", "OPTION_TOOLTIP_VERTICAL_SYNC") -- 1.12 had this row and benilla did not, so the -- only way to multisampling was `/console -- gxMultisample 4`. Backed by the index verbs the -- reference's own dropdown uses — `0x48c580` / -- `0x48c640` — not by `gxMultisample` directly, -- because picking a format writes the colour and -- depth rows with it, as one record. -- -- `rebuild` for the same reason the resolution row -- has one: at OnLoad the engine has published no -- formats yet, so a list baked now is empty for -- the whole session. self.rebuild = OptionsMultisampleRow_Rebuild -- Latched (`cvars.rs`, flags 3), so a write only -- stages host-side until `RestartGx` — which is -- what Apply calls. Without this the row would -- write through, no Apply button would appear, and -- the setting would look like it did not persist: -- exactly the bug Vertical Sync had. self.deferred = 1 OptionsNumFuncRow_OnLoad(self, GetCurrentMultisampleFormat, SetMultisampleFormat, "1", "Multisampling", "BENILLA_TOOLTIP_MULTISAMPLING") OptionsMultisampleRow_Rebuild(self) OptionsDropdownRow_Setup(self, self.entries) -- Deviation: our own row (the reference draws to -- the backbuffer), and no Multisampling, which -- misses alpha-tested cutouts. Deferred: a write -- rebuilds the render target. OptionsRow_OnLoad(self, "renderScale", "Render Scale", "BENILLA_TOOLTIP_RENDER_SCALE") OptionsSliderRow_Setup(self, 0.5, 2.0, 0.05) self.deferred = 1 -- Our own row, and not in the reference's slider -- table, so it stays out of -- BENILLA_GRAPHICS_SLIDER_ROWS as Render Scale -- above it does. `raw`, because the groove's unit -- IS the number: the default percent format would -- read 45 degrees as "4500%". -- -- NOT deferred: the lens is re-stamped onto the -- projection every frame -- (`player::scoped_view::apply_scoped_view`), so -- a drag is the only way to pick a field of view -- and nothing has to be rebuilt to honour it. OptionsRow_OnLoad(self, "fieldOfView", "Field of View", "BENILLA_TOOLTIP_FIELD_OF_VIEW") OptionsSliderRow_Setup(self, 40, 70, 1, "raw") for i, name in BENILLA_GRAPHICS_SLIDER_ROWS do local info = OptionsFrameSliders[i] local row = getglobal(this:GetName() .. name) if ( info and row ) then OptionsSliderRow_Setup(row, info.minValue, info.maxValue, info.valueStep, row.fmt, row.stops) end end OptionsRow_OnLoad(self, "graphicsQuality", BENILLA_ADVGFX.graphicsQuality, "BENILLA_TOOLTIP_GRAPHICS_QUALITY") self.preset = 1 OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.pClassic, value = "Classic" }, { text = BENILLA_ADVGFX.qLow, value = "Low" }, { text = BENILLA_ADVGFX.qMedium, value = "Medium" }, { text = BENILLA_ADVGFX.qHigh, value = "High" }, { text = BENILLA_ADVGFX.qUltra, value = "Ultra" }, { text = BENILLA_ADVGFX.qCustom, value = "Custom" }, }) OptionsRow_OnLoad(self, "farclip", BENILLA_ADVGFX.renderDistance, "BENILLA_TOOLTIP_RENDER_DISTANCE") OptionsSliderRow_Setup(self, 177, 1497, 60, "yd") -- The preset ladder. This row writes ONE CVar and -- nothing else: the host's own table -- (`cvars::LIGHTING_PRESETS`) answers the write by -- setting the member rows, and re-derives this -- row's value from them every frame — which is why -- Custom is an entry the capsule can SHOW but -- picking it writes nothing anyone keeps. -- -- The table is deliberately NOT here. Three other -- ways reach the same ladder (the console, the -- native lighting panel, a hand-edited -- config.toml), and a copy carried by this window -- would be a copy the other three cannot see. -- The page's OnUpdate poll is what brings the -- member rows' new values back onto the screen. OptionsRow_OnLoad(self, "lightingQuality", BENILLA_ADVGFX.lightingQuality, "BENILLA_TOOLTIP_LIGHTING_QUALITY") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.qOff, value = "Off" }, { text = BENILLA_ADVGFX.qLow, value = "Low" }, { text = BENILLA_ADVGFX.qMedium, value = "Medium" }, { text = BENILLA_ADVGFX.qHigh, value = "High" }, { text = BENILLA_ADVGFX.qUltra, value = "Ultra" }, { text = BENILLA_ADVGFX.qCustom, value = "Custom" }, }) OptionsRow_OnLoad(self, "waterQuality", BENILLA_ADVGFX.waterQuality, "BENILLA_TOOLTIP_WATER_QUALITY") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.waterClassic, value = "0" }, { text = BENILLA_ADVGFX.waterEnhanced, value = "1" }, { text = BENILLA_ADVGFX.waterHigh, value = "2" }, { text = BENILLA_ADVGFX.waterUltra, value = "3" }, }) OptionsRow_OnLoad(self, "volumetricFog", BENILLA_ADVGFX.volumetricFog, "BENILLA_TOOLTIP_VOLUMETRIC_FOG") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.fogOff, value = "0" }, { text = BENILLA_ADVGFX.qLow, value = "1" }, { text = BENILLA_ADVGFX.qHigh, value = "2" }, -- GFX (froxel volumetrics) { text = BENILLA_ADVGFX.fogVolume, value = "3" }, }) OptionsRow_OnLoad(self, "volumetricFogShadow", BENILLA_ADVGFX.volumetricFogShadow, "BENILLA_TOOLTIP_VOLUMETRIC_FOG_SHADOW") OptionsSliderRow_Setup(self, 0, 2, 0.25) OptionsRow_OnLoad(self, "skyQuality", BENILLA_ADVGFX.skyQuality, "BENILLA_TOOLTIP_SKY_QUALITY") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.waterClassic, value = "0" }, { text = BENILLA_ADVGFX.waterEnhanced, value = "1" }, { text = BENILLA_ADVGFX.waterHigh, value = "2" }, }) OptionsRow_OnLoad(self, "bloom", BENILLA_ADVGFX.bloom, "BENILLA_TOOLTIP_BLOOM") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.fogOff, value = "0" }, { text = BENILLA_ADVGFX.qLow, value = "1" }, { text = BENILLA_ADVGFX.qHigh, value = "2" }, }) OptionsRow_OnLoad(self, "sunShafts", BENILLA_ADVGFX.sunShafts, "BENILLA_TOOLTIP_SUN_SHAFTS") OptionsRow_OnLoad(self, "colorGrading", BENILLA_ADVGFX.colorGrading, "BENILLA_TOOLTIP_COLOR_GRADING") -- With the other screen effects, because that is -- what it is: one pass over the finished frame. -- The tiers are named rather than numbered because -- what each one sets is a CEILING on the gain, and -- "2x" would read as the amount applied rather -- than as the most that ever will be. OptionsRow_OnLoad(self, "autoExposure", BENILLA_ADVGFX.autoExposure, "BENILLA_TOOLTIP_AUTO_EXPOSURE") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.qOff, value = "0" }, { text = BENILLA_ADVGFX.aeSubtle, value = "1" }, { text = BENILLA_ADVGFX.aeFull, value = "2" }, }) -- 0..1, the CVar's own clamp; no `fmt`, so the -- default percent reads the blend as a percentage -- of the chosen tier, which is what it is. OptionsRow_OnLoad(self, "autoExposureStrength", BENILLA_ADVGFX.autoExposureStrength, "BENILLA_TOOLTIP_AUTO_EXPOSURE_STRENGTH", 1) OptionsSliderRow_Setup(self, 0, 1, 0.05) OptionsRow_OnLoad(self, "sharpening", BENILLA_ADVGFX.sharpening, "BENILLA_TOOLTIP_SHARPENING") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.qOff, value = "0" }, { text = BENILLA_ADVGFX.qLow, value = "1" }, { text = BENILLA_ADVGFX.qMedium, value = "2" }, { text = BENILLA_ADVGFX.qHigh, value = "3" }, }) OptionsRow_OnLoad(self, "characterShadows", BENILLA_ADVGFX.characterShadows, "BENILLA_TOOLTIP_CHARACTER_SHADOWS") OptionsRow_OnLoad(self, "worldShadows", BENILLA_ADVGFX.worldShadows, "BENILLA_TOOLTIP_WORLD_SHADOWS") -- Realtime-shadow render distance (yd): the cascade -- range + caster reach. 40-200, matching the CVar's -- own clamp (SHADOW_DISTANCE_RANGE). DEFERRED to -- Apply so a drag doesn't re-fit the cascade + recollect -- casters on every tick (one rebuild on commit instead). OptionsRow_OnLoad(self, "shadowDistance", BENILLA_ADVGFX.shadowDistance, "BENILLA_TOOLTIP_SHADOW_DISTANCE") -- `"yd"`, not `"yards"`: the value is already a -- distance in yards, where the format beside it -- multiplies a FACTOR by the 15 yd camera base. -- This row rode the wrong one from the day it was -- seated and printed "1200 yd" for an 80 yd -- cascade. OptionsSliderRow_Setup(self, 40, 200, 10, "yd") self.deferred = 1 -- The three stops the CVar's own snap accepts -- (`shadow_core::SHADOW_MAP_SIZES`): a dropdown -- rather than a slider because an off-ladder value -- is not a weaker setting, it is one the renderer -- rounds UP into a bigger and slower map than the -- one that was asked for. The entry texts are the -- numbers themselves — nothing to translate. OptionsRow_OnLoad(self, "shadowMapSize", BENILLA_ADVGFX.shadowResolution, "BENILLA_TOOLTIP_SHADOW_RESOLUTION") OptionsDropdownRow_Setup(self, { { text = "1024", value = "1024" }, { text = "2048", value = "2048" }, { text = "4096", value = "4096" }, }) -- 0 is the card's own 2x2 comparison (one -- sample), 1 the 9-tap gaussian — the whole -- `shadowFilter` ladder (`MAX_SHADOW_FILTER` is 1), -- which is why this is a checkbox and not the -- dropdown Shadow Resolution gets. Bevy's third -- mode, Temporal, is deliberately not offered: it -- only resolves under TAA, which this camera does -- not run, so it would read as noise. OptionsRow_OnLoad(self, "shadowFilter", BENILLA_ADVGFX.shadowFilter, "BENILLA_TOOLTIP_SHADOW_FILTER") -- `CASTER_REACH_RANGE`, 0.25..2. The floor is not -- 0 on purpose: a 0 reach admits no caster at all -- and would read as "shadows broke", which is what -- the two toggles above are for. No `fmt`, so the -- default percent formatting applies and the -- untouched reach law reads as 100%. OptionsRow_OnLoad(self, "shadowCasterReach", BENILLA_ADVGFX.shadowCasterReach, "BENILLA_TOOLTIP_SHADOW_CASTER_RANGE") OptionsSliderRow_Setup(self, 0.25, 2.0, 0.05) -- DEFERRED: a drag re-collects the whole caster -- set on every step. self.deferred = 1 -- `MAX_SHADOW_RATE`, 0..120, where 0 is "every -- frame" and not "never" — see the `hz` format. -- Step 10: the knob is a coarse budget dial, and -- 121 stops of a 1 Hz grid is not a choice anyone -- makes. OptionsRow_OnLoad(self, "characterShadowRate", BENILLA_ADVGFX.characterShadowRate, "BENILLA_TOOLTIP_CHARACTER_SHADOW_UPDATES") OptionsSliderRow_Setup(self, 0, 120, 10, "hz") -- The world lane's twin of the row above. OptionsRow_OnLoad(self, "worldShadowRate", BENILLA_ADVGFX.worldShadowRate, "BENILLA_TOOLTIP_WORLD_SHADOW_UPDATES") OptionsSliderRow_Setup(self, 0, 120, 10, "hz") -- 0..1, the CVar's own clamp, and 0 is the FAITHFUL -- null rather than a floor: every consumer guards -- on it, so the left end of this groove is the -- night the client rendered before the moon lane -- existed. OptionsRow_OnLoad(self, "moonShadowStrength", BENILLA_ADVGFX.moonShadows, "BENILLA_TOOLTIP_MOON_SHADOWS") OptionsSliderRow_Setup(self, 0, 1, 0.05) OptionsRow_OnLoad(self, "interiorLight", BENILLA_ADVGFX.interiorLight, "BENILLA_TOOLTIP_INTERIOR_LIGHT") -- The CVar's own clamp, 0.25..8, and the -- shipped 2.5 lands on a stop. No `fmt`: the value -- IS a multiplier, so the default percent reads -- "250%" and means it. OptionsRow_OnLoad(self, "interiorExposure", BENILLA_ADVGFX.interiorExposure, "BENILLA_TOOLTIP_INTERIOR_LIGHT_BUDGET") OptionsSliderRow_Setup(self, 0.25, 8, 0.25) -- The groove offers 0..0.1 inside the CVar's -- own 0..1, as `RowRenderScale` offers 50..200% -- inside a 0.25..4 clamp: ambient is a FLOOR under -- every indoor surface, the shipped value is -- 0.015, and past about 0.1 a room is not lit, it -- is fogged. `/console` still reaches the rest. -- "travel", because the number has no unit a -- player could read — the dial's own position is -- the honest readout. OptionsRow_OnLoad(self, "interiorAmbient", BENILLA_ADVGFX.interiorAmbient, "BENILLA_TOOLTIP_INTERIOR_AMBIENT") OptionsSliderRow_Setup(self, 0, 0.1, 0.005, "travel") -- In `interiorAmbient`'s own units, so it -- takes that row's groove. Ships at 0, which is -- the restore: the lane adds nothing until asked. OptionsRow_OnLoad(self, "interiorDaylight", BENILLA_ADVGFX.interiorDaylight, "BENILLA_TOOLTIP_INDOOR_DAYLIGHT") OptionsSliderRow_Setup(self, 0, 0.1, 0.005, "travel") -- 0..2, the CVar's clamp; the shipped 0.08 -- lands on a stop and reads "8%". OptionsRow_OnLoad(self, "interiorFill", BENILLA_ADVGFX.interiorFill, "BENILLA_TOOLTIP_INTERIOR_BOUNCE") OptionsSliderRow_Setup(self, 0, 2, 0.02) -- 0..8, the CVar's clamp. 0 is not "no -- light": it switches the authored window OFF, so -- every fixture reaches the whole room — which is -- why the description says so rather than letting -- the left end read as darkness. OptionsRow_OnLoad(self, "interiorAttenScale", BENILLA_ADVGFX.interiorAttenScale, "BENILLA_TOOLTIP_INTERIOR_LIGHT_REACH") OptionsSliderRow_Setup(self, 0, 8, 0.1) -- A SHARE of the batch's own bake, so the -- default percent is the right readout: the -- shipped 0.12 reads "12%". OptionsRow_OnLoad(self, "interiorBakeFloor", BENILLA_ADVGFX.interiorBakeFloor, "BENILLA_TOOLTIP_UNLIT_ROOM_FLOOR") OptionsSliderRow_Setup(self, 0, 1, 0.02) -- Kept as a dial because a room the gate -- leaves on ambient alone looks exactly like a -- bug, and this tells the two apart in one click -- — which is a thing to be able to do from the -- options window, not only from `/console`. OptionsRow_OnLoad(self, "interiorRoomGate", BENILLA_ADVGFX.interiorRoomGate, "BENILLA_TOOLTIP_LIGHTS_STAY_IN_THEIR_ROOM") OptionsRow_OnLoad(self, "interiorShadows", BENILLA_ADVGFX.interiorShadows, "BENILLA_TOOLTIP_INTERIOR_SHADOWS") OptionsRow_OnLoad(self, "exteriorShadows", BENILLA_ADVGFX.exteriorShadows, "BENILLA_TOOLTIP_EXTERIOR_SHADOWS") OptionsRow_OnLoad(self, "torchTerrainShadows", BENILLA_ADVGFX.torchTerrainShadows, "BENILLA_TOOLTIP_TORCH_TERRAIN_SHADOWS") -- 0.5..3, the CVar's own clamp verbatim: it is a -- SCALE on the PCF tap radius at a contact, so the -- readout is a percentage of the shipped radius -- and 100% is what the lane was tuned at. OptionsRow_OnLoad(self, "interiorShadowSoft", BENILLA_ADVGFX.torchSoft, "BENILLA_TOOLTIP_TORCH_SOFT") OptionsSliderRow_Setup(self, 0.5, 3, 0.1) -- Beside the softness dial, since the two shape -- the same shadow: how wide its edge is, and how -- much light it removes. 0..1, the CVar's own -- clamp; the shipped 0.7 leaves 30% of the direct -- term standing in place of the bounce light this -- renderer does not have. OptionsRow_OnLoad(self, "torchShadowStrength", BENILLA_ADVGFX.torchShadowStrength, "BENILLA_TOOLTIP_TORCH_SHADOW_DARKNESS") OptionsSliderRow_Setup(self, 0, 1, 0.05) -- 1..16, the CVar's own clamp — the RESIDENT -- map budget. "raw", because this is a count of -- maps and a percentage of one would be nonsense. OptionsRow_OnLoad(self, "interiorShadowCasters", BENILLA_ADVGFX.interiorShadowCasters, "BENILLA_TOOLTIP_INDOOR_SHADOW_MAPS") OptionsSliderRow_Setup(self, 1, 16, 1, "raw") -- 1..8 (`MAX_TORCH_DYNAMIC`), not the 0..16 the -- registration's help line says: the observer -- arm raises 0 to 1 and clamps to the cube-array -- the depth pass actually has room for, so a -- groove to 16 would offer seven stops that all -- mean 8 and a zero that means 1. OptionsRow_OnLoad(self, "interiorShadowDynamic", BENILLA_ADVGFX.interiorShadowDynamic, "BENILLA_TOOLTIP_MOVING_SHADOWS_INDOORS") OptionsSliderRow_Setup(self, 1, 8, 1, "raw") -- The same groove and the same `hz` readout as -- the two sun-lane rate caps, inside this CVar's -- wider 0..240; `0` is every frame there too. -- This is the row that actually costs frame time -- in the indoor lane — neither count dial above -- moved it — which the description says. OptionsRow_OnLoad(self, "interiorShadowEntityRate", BENILLA_ADVGFX.interiorShadowEntityRate, "BENILLA_TOOLTIP_MOVING_SHADOW_UPDATES") OptionsSliderRow_Setup(self, 0, 120, 10, "hz") -- Full 0..4 registry range, in five-percent steps. OptionsRow_OnLoad(self, "fireLightGain", BENILLA_ADVGFX.fireLight, "BENILLA_TOOLTIP_FIRE_LIGHT") OptionsSliderRow_Setup(self, 0, 4, 0.05) -- 0..2, the CVar's own clamp verbatim: the -- amplitudes are authored at 100%, and 200% is the -- deliberate over-drive for judging the shape. OptionsRow_OnLoad(self, "fireFlicker", BENILLA_ADVGFX.fireFlicker, "BENILLA_TOOLTIP_FIRE_FLICKER") OptionsSliderRow_Setup(self, 0, 2, 0.05) -- Full 0..4 registry range, in five-percent steps. OptionsRow_OnLoad(self, "spellLightGain", BENILLA_ADVGFX.spellLights, "BENILLA_TOOLTIP_SPELL_LIGHTS") OptionsSliderRow_Setup(self, 0, 4, 0.05) OptionsRow_OnLoad(self, "lavaLightGain", BENILLA_ADVGFX.lavaGlow, "BENILLA_TOOLTIP_LAVA_GLOW") OptionsSliderRow_Setup(self, 0, 4, 0.05) -- 0.2..1.5, the CVar's own clamp verbatim: the -- floor is 0.2 rather than 0 because a true 0 is -- indistinguishable from a broken light pack, and -- the "off" a player wants is the reference's own -- night at gain 1. -- -- The readout is `darkness` — travel read from the -- right — because the stored unit is a GAIN while -- the row is named for the darkness: left is -- darker, and this is what makes the number say so -- too. The store keeps the gain, untouched. OptionsRow_OnLoad(self, "nightGain", BENILLA_ADVGFX.nightDarkness, "BENILLA_TOOLTIP_NIGHT_DARKNESS") OptionsSliderRow_Setup(self, 0.2, 1.5, 0.05, "darkness") -- The room lane's own dim dial, same clamp and same -- backwards readout as the night one above it. OptionsRow_OnLoad(self, "interiorGain", BENILLA_ADVGFX.interiorDarkness, "BENILLA_TOOLTIP_INTERIOR_DARKNESS") OptionsSliderRow_Setup(self, 0.2, 1.5, 0.05, "darkness") OptionsRow_OnLoad(self, "skyDither", BENILLA_ADVGFX.skyDither, "BENILLA_TOOLTIP_SKY_DITHER") OptionsRow_OnLoad(self, "fogModel", BENILLA_ADVGFX.fogModel, "BENILLA_TOOLTIP_FOG_MODEL") OptionsRow_OnLoad(self, "rainSurfaces", BENILLA_ADVGFX.rainSurfaces, "BENILLA_TOOLTIP_RAIN_SURFACES") OptionsRow_OnLoad(self, "foliageWind", BENILLA_ADVGFX.foliageWind, "BENILLA_TOOLTIP_FOLIAGE_WIND") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.qOff, value = "0" }, { text = BENILLA_ADVGFX.windGrass, value = "1" }, { text = BENILLA_ADVGFX.windTrees, value = "2" }, }) OptionsRow_OnLoad(self, "foliageWindStrength", BENILLA_ADVGFX.foliageWindStrength, "BENILLA_TOOLTIP_FOLIAGE_WIND_STRENGTH") OptionsSliderRow_Setup(self, 0.25, 3, 0.25) OptionsRow_OnLoad(self, "foliageDistance", BENILLA_ADVGFX.foliageDistance, "BENILLA_TOOLTIP_FOLIAGE_DISTANCE") -- `"yd"`: the stored value already IS a distance in -- yards, like Shadow Distance beside it. OptionsSliderRow_Setup(self, 70, 300, 10, "yd") self.deferred = 1 OptionsRow_OnLoad(self, "ambientOcclusion", BENILLA_ADVGFX.ambientOcclusion, "BENILLA_TOOLTIP_AMBIENT_OCCLUSION") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.fogOff, value = "0" }, { text = BENILLA_ADVGFX.qLow, value = "1" }, { text = BENILLA_ADVGFX.qHigh, value = "2" }, -- GFX (ssilvb) { text = BENILLA_ADVGFX.aoIndirect, value = "3" }, }) OptionsRow_OnLoad(self, "lampFog", BENILLA_ADVGFX.lampFog, "BENILLA_TOOLTIP_LAMP_FOG") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.fogOff, value = "0" }, { text = BENILLA_ADVGFX.qLow, value = "1" }, { text = BENILLA_ADVGFX.qHigh, value = "2" }, }) OptionsRow_OnLoad(self, "daylightWindowSplit", BENILLA_ADVGFX.daylightWindowSplit, "BENILLA_TOOLTIP_DAYLIGHT_WINDOW_SPLIT") OptionsRow_OnLoad(self, "zoneSkyboxes", BENILLA_ADVGFX.zoneSkyboxes, "BENILLA_TOOLTIP_ZONE_SKYBOXES") OptionsRow_OnLoad(self, "volumetricLight", BENILLA_ADVGFX.volumetricLight, "BENILLA_TOOLTIP_VOLUMETRIC_LIGHT") OptionsDropdownRow_Setup(self, { { text = BENILLA_ADVGFX.fogOff, value = "0" }, { text = BENILLA_ADVGFX.qMedium, value = "1" }, { text = BENILLA_ADVGFX.qHigh, value = "2" }, }) OptionsRow_OnLoad(self, "volumetricLightStrength", BENILLA_ADVGFX.volumetricLightStrength, "BENILLA_TOOLTIP_VOLUMETRIC_LIGHT_STRENGTH") OptionsSliderRow_Setup(self, 0, 2, 0.25) OptionsRow_OnLoad(self, "moonLight", BENILLA_ADVGFX.moonLight, "BENILLA_TOOLTIP_MOONLIGHT") OptionsSliderRow_Setup(self, 0, 2, 0.25) AdvGfx_OnUpdate(this, arg1) OptionsGlobalRow_OnLoad(self, "SHOW_COMBAT_TEXT", "Enable Floating Combat Text", "OPTION_TOOLTIP_SHOW_COMBAT_TEXT") self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_FLOAT_MODE", "Combat Text Float Mode", "OPTION_TOOLTIP_COMBAT_TEXT_MODE", 1) OptionsDropdownRow_Setup(self, { { text = "Scroll Up", value = "1" }, { text = "Scroll Down", value = "2" }, { text = "Arc", value = "3" }, }) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_LOW_HEALTH_MANA", "Show Low Mana and Health", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_LOW_HEALTH_MANA", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_AURAS", "Show Auras", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURAS", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_AURA_FADE", "Show Fading Auras", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_AURA_FADE", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_COMBAT_STATE", "Show Combat State", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBAT_STATE", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_DODGE_PARRY_MISS", "Show Dodge/Parries/Misses", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_DODGE_PARRY_MISS", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_RESISTANCES", "Show Damage Reduction", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_RESISTANCES", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_REPUTATION", "Show Reputation", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REPUTATION", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_REACTIVES", "Show Reactive Spells and Abilities", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_REACTIVES", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_FRIENDLY_NAMES", "Show Friendly Healer Names", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_FRIENDLY_NAMES", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_COMBO_POINTS", "Show Combo Points", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_COMBO_POINTS", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_MANA", "Show Energy Gains", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_MANA", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsGlobalRow_OnLoad(self, "COMBAT_TEXT_SHOW_HONOR_GAINED", "Show Honor Gained", "OPTION_TOOLTIP_COMBAT_TEXT_SHOW_HONOR_GAINED", 1) self.parentRow = "RowCombatText" self.applyFunc = "CombatText_UpdateOrLoad" OptionsRow_OnLoad(self, "CombatDamage", "Show Target Damage", "OPTION_TOOLTIP_SHOW_DAMAGE") OptionsRow_OnLoad(self, "CombatLogPeriodicSpells", "Periodic Damage", "OPTION_TOOLTIP_LOG_PERIODIC_EFFECTS", 1) self.parentRow = "RowShowDamage" OptionsRow_OnLoad(self, "PetMeleeDamage", "Pet Damage", "OPTION_TOOLTIP_SHOW_PET_MELEE_DAMAGE", 1) self.parentRow = "RowShowDamage" self.partner = { cvar = "PetSpellDamage" } OptionsFuncRow_OnLoad(self, function() return SHOW_MULTI_ACTIONBAR_1 end, function(value) local on if value and value ~= "0" and value ~= 0 then on = 1 end SHOW_MULTI_ACTIONBAR_1 = on MultiActionBar_Update() SetActionBarToggles(SHOW_MULTI_ACTIONBAR_1, SHOW_MULTI_ACTIONBAR_2, SHOW_MULTI_ACTIONBAR_3, SHOW_MULTI_ACTIONBAR_4) UIParent_ManageFramePositions() end, "0", "Show Bottom Left ActionBar", "OPTION_TOOLTIP_SHOW_MULTIBAR1") OptionsFuncRow_OnLoad(self, function() return SHOW_MULTI_ACTIONBAR_2 end, function(value) local on if value and value ~= "0" and value ~= 0 then on = 1 end SHOW_MULTI_ACTIONBAR_2 = on MultiActionBar_Update() SetActionBarToggles(SHOW_MULTI_ACTIONBAR_1, SHOW_MULTI_ACTIONBAR_2, SHOW_MULTI_ACTIONBAR_3, SHOW_MULTI_ACTIONBAR_4) UIParent_ManageFramePositions() end, "0", "Show Bottom Right ActionBar", "OPTION_TOOLTIP_SHOW_MULTIBAR2") OptionsFuncRow_OnLoad(self, function() return SHOW_MULTI_ACTIONBAR_3 end, function(value) local on if value and value ~= "0" and value ~= 0 then on = 1 end SHOW_MULTI_ACTIONBAR_3 = on MultiActionBar_Update() SetActionBarToggles(SHOW_MULTI_ACTIONBAR_1, SHOW_MULTI_ACTIONBAR_2, SHOW_MULTI_ACTIONBAR_3, SHOW_MULTI_ACTIONBAR_4) UIParent_ManageFramePositions() end, "0", "Show Right ActionBar", "OPTION_TOOLTIP_SHOW_MULTIBAR3") OptionsFuncRow_OnLoad(self, function() return SHOW_MULTI_ACTIONBAR_4 end, function(value) local on if value and value ~= "0" and value ~= 0 then on = 1 end SHOW_MULTI_ACTIONBAR_4 = on MultiActionBar_Update() SetActionBarToggles(SHOW_MULTI_ACTIONBAR_1, SHOW_MULTI_ACTIONBAR_2, SHOW_MULTI_ACTIONBAR_3, SHOW_MULTI_ACTIONBAR_4) UIParent_ManageFramePositions() end, "0", "Show Right ActionBar 2", "OPTION_TOOLTIP_SHOW_MULTIBAR4", 1) OptionsGlobalRow_OnLoad(self, "ALWAYS_SHOW_MULTIBARS", "Always Show ActionBars", "OPTION_TOOLTIP_ALWAYS_SHOW_MULTIBARS") -- UIOptionsFrame.xml:680-683's click arm. self.applyFunc = "MultiActionBar_UpdateGridVisibility" OptionsGlobalRow_OnLoad(self, "LOCK_ACTIONBAR", "Lock ActionBars", "OPTION_TOOLTIP_LOCK_ACTIONBAR") OptionsRow_OnLoad(self, "UberTooltips", "Enhanced Tooltips", "OPTION_TOOLTIP_USE_UBERTOOLTIPS") OptionsRow_OnLoad(self, "statusBarText", "Status Bar Text", "OPTION_TOOLTIP_STATUS_BAR") self.cvarEvent = "STATUS_BAR_TEXT" OptionsGlobalRow_OnLoad(self, "SHOW_TARGET_OF_TARGET", "Show Target of Target", "OPTION_TOOLTIP_SHOW_TARGET_OF_TARGET") OptionsGlobalRow_OnLoad(self, "SHOW_TARGET_OF_TARGET_STATE", "Show When", "OPTION_TOOLTIP_TARGETOFTARGET5", 1) OptionsDropdownRow_Setup(self, { { text = "Raid", value = "1", tip = "OPTION_TOOLTIP_TARGETOFTARGET1" }, { text = "Party", value = "2", tip = "OPTION_TOOLTIP_TARGETOFTARGET2" }, { text = "Solo", value = "3", tip = "OPTION_TOOLTIP_TARGETOFTARGET3" }, { text = "Party or Raid", value = "4", tip = "OPTION_TOOLTIP_TARGETOFTARGET4" }, { text = "Always", value = "5", tip = "OPTION_TOOLTIP_TARGETOFTARGET5" }, }) OptionsFuncRow_OnLoad(self, ShowingCloak, ShowCloak, "1", "Show Cloak", "OPTION_TOOLTIP_SHOW_CLOAK") OptionsFuncRow_OnLoad(self, ShowingHelm, ShowHelm, "1", "Show Helm", "OPTION_TOOLTIP_SHOW_HELM") OptionsGlobalRow_OnLoad(self, "QUEST_FADING_DISABLE", "Instant Quest Text", "OPTION_TOOLTIP_SHOW_QUEST_FADING") OptionsGlobalRow_OnLoad(self, "SHOW_BUFF_DURATIONS", "Buff Durations", "OPTION_TOOLTIP_SHOW_BUFF_DURATION") self.applyFunc = "BuffButtons_UpdatePositions" OptionsGlobalRow_OnLoad(self, "AUTO_QUEST_WATCH", "Automatic Quest Tracking", "OPTION_TOOLTIP_AUTO_QUEST_WATCH") OptionsRow_OnLoad(self, "profanityFilter", "Profanity Filter", "OPTION_TOOLTIP_PROFANITY_FILTER") OptionsFuncRow_OnLoad(self, TutorialsEnabled, BenillaOptionsFrame_SetTutorialsEnabled, "1", "Show Tutorials", "OPTION_TOOLTIP_SHOW_TUTORIALS") OptionsRow_OnLoad(self, "showGameTips", "Show Loading Screen Tips", "OPTION_TOOLTIP_SHOW_TIPOFTHEDAY") OptionsGlobalRow_OnLoad(self, "SHOW_NEWBIE_TIPS", "Show Detailed Tooltips", "OPTION_TOOLTIP_SHOW_NEWBIE_TIPS") OptionsRow_OnLoad(self, "guildMemberNotify", "Guild Member Alert", "OPTION_TOOLTIP_GUILDMEMBER_ALERT") OptionsGlobalRow_OnLoad(self, "REMOVE_CHAT_DELAY", "Remove Chat Hover Delay", "OPTION_TOOLTIP_REMOVE_CHAT_DELAY") self.applyFunc = "ChatFrame_ApplyMouseOverDelay" OptionsRow_OnLoad(self, "ChatBubbles", "Show Chat Bubbles", "OPTION_TOOLTIP_CHAT_BUBBLES") OptionsRow_OnLoad(self, "showLootSpam", "Detailed Loot Information", "OPTION_TOOLTIP_SHOW_LOOT_SPAM") OptionsRow_OnLoad(self, "ChatBubblesParty", "Show Party Chat Bubbles", "OPTION_TOOLTIP_PARTY_CHAT_BUBBLES") OptionsRow_OnLoad(self, "spamFilter", "Disable Spam Filter", "OPTION_TOOLTIP_DISABLE_SPAM_FILTER") self.invert = 1 OptionsRow_OnLoad(self, "nameplateShowEnemies", "Enemy Name Plates") OptionsRow_OnLoad(self, "nameplateShowFriends", "Friendly Name Plates") OptionsRow_OnLoad(self, "UnitNamePlayer", "Player Names", "OPTION_TOOLTIP_SHOW_PLAYER_NAMES") OptionsRow_OnLoad(self, "UnitNamePlayerGuild", "Player Guild Names", "OPTION_TOOLTIP_SHOW_GUILD_NAMES", 1) self.parentRow = "RowPlayerNames" OptionsRow_OnLoad(self, "UnitNameNPC", "NPC Names", "OPTION_TOOLTIP_SHOW_NPC_NAMES") OptionsRow_OnLoad(self, "UnitNameOwn", "Show Own Name", "OPTION_TOOLTIP_SHOW_OWN_NAME") KeyBindings_CharacterToggle(this) GameTooltip:SetOwner(this, "ANCHOR_RIGHT") GameTooltip:SetText(KeyBindings_String("CHARACTER_SPECIFIC_KEYBINDING_TOOLTIP", "Click this to toggle between general key bindings and key bindings specific to this character."), nil, nil, nil, nil, 1) GameTooltip:Hide() getglobal(this:GetName() .. "Label"):SetText( KeyBindings_String("CHARACTER_SPECIFIC_KEYBINDINGS", "Character Specific Key Bindings")) ScrollFrame_OnLoad() FauxScrollFrame_OnVerticalScroll(KEYBINDINGS_ROW_HEIGHT, KeyBindingsPage_Update) if not KeyBindingsPage.selected then ScrollFrameTemplate_OnMouseWheel(arg1) end if not KeyBindingsPage.selected then BenillaFauxScrollFrame_OnMouseWheel(getglobal(this:GetName() .. "ScrollFrame"), arg1) end if this:GetText() == "" then BenillaOptionsFrameSearchBoxInstructions:Show() BenillaOptionsFrameSearchBoxClearButton:Hide() else BenillaOptionsFrameSearchBoxInstructions:Hide() BenillaOptionsFrameSearchBoxClearButton:Show() end OptionsSearch_OnTextChanged(this:GetText()) this:ClearFocus() BenillaOptionsFrame_UpdateScale() BenillaOptionsFrame_SelectCategory(this.selectedCategory or "Controls") if UpdateMicroButtons then UpdateMicroButtons() end BenillaOptionsFrameSearchBox:SetText("") OptionsPage_DiscardPending() KeyBindings_SetSelected(nil) KeyBindings_Output("") if UpdateMicroButtons then UpdateMicroButtons() end