draw_setMousePointer(SKINGFX_CURSOR, SKINSIZE_CURSOR, SKINOFFSET_CURSOR);
- loadTooltips();
anim = NEW(AnimHost);
main = NEW(MainWindow); main.configureMainWindow(main);
- unloadTooltips();
main.resizeNotify(main, '0 0 0', eX * conwidth + eY * conheight, '0 0 0', eX * conwidth + eY * conheight);
main.focused = 1;
ATTRIB(XonoticBigButton, image, string, SKINGFX_BUTTON_BIG)
ATTRIB(XonoticBigButton, grayImage, string, SKINGFX_BUTTON_BIG_GRAY)
ENDCLASS(XonoticBigButton)
-entity makeXonoticButton(string theText, vector theColor);
+entity makeXonoticBigButton(string theText, vector theColor);
#endif
#ifdef IMPLEMENTATION
void XonoticBigButton_configureXonoticBigButton(entity me, string theText, vector theColor)
{
- me.configureXonoticButton(me, theText, theColor);
+ me.configureXonoticButton(me, theText, theColor, string_null);
}
#endif
void XonoticBigCommandButton_configureXonoticBigCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags)
{
- me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags);
+ me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags, string_null);
}
#endif
#define BUTTON_H
#include "../item/button.qc"
CLASS(XonoticButton, Button)
- METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector));
+ METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector, string));
ATTRIB(XonoticButton, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticButton, image, string, SKINGFX_BUTTON)
ATTRIB(XonoticButton, grayImage, string, SKINGFX_BUTTON_GRAY)
ATTRIB(XonoticButton, marginLeft, float, SKINMARGIN_BUTTON) // chars
ATTRIB(XonoticButton, marginRight, float, SKINMARGIN_BUTTON) // chars
ENDCLASS(XonoticButton)
+entity makeXonoticButton_T(string theText, vector theColor, string theTooltip);
entity makeXonoticButton(string theText, vector theColor);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticButton(string theText, vector theColor)
+entity makeXonoticButton_T(string theText, vector theColor, string theTooltip)
{
entity me;
me = NEW(XonoticButton);
- me.configureXonoticButton(me, theText, theColor);
+ me.configureXonoticButton(me, theText, theColor, theTooltip);
return me;
}
+entity makeXonoticButton(string theText, vector theColor)
+{
+ return makeXonoticButton_T(theText, theColor, string_null);
+}
-void XonoticButton_configureXonoticButton(entity me, string theText, vector theColor)
+void XonoticButton_configureXonoticButton(entity me, string theText, vector theColor, string theTooltip)
{
if(theColor == '0 0 0')
{
me.colorC = theColor;
me.colorF = theColor;
}
- me.tooltip = getZonedTooltipForIdentifier(strcat(currentDialog.classname, "/", me.text));
+ me.tooltip = strzone(theTooltip);
}
#endif
#define CHECKBOX_H
#include "../item/checkbox.qc"
CLASS(XonoticCheckBox, CheckBox)
- METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string));
+ METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string, string));
METHOD(XonoticCheckBox, setChecked, void(entity, float));
ATTRIB(XonoticCheckBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticCheckBox, image, string, SKINGFX_CHECKBOX)
ATTRIB(XonoticCheckBox, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticCheckBox, disabledAlpha, float, SKINALPHA_DISABLED)
ENDCLASS(XonoticCheckBox)
+entity makeXonoticCheckBox_T(float, string, string, string);
entity makeXonoticCheckBox(float, string, string);
+entity makeXonoticCheckBoxEx_T(float, float, string, string, string);
entity makeXonoticCheckBoxEx(float, float, string, string);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
+entity makeXonoticCheckBox_T(float isInverted, string theCvar, string theText, string theTooltip)
{
float y, n;
if(isInverted > 1)
n = 0;
y = 1;
}
- return makeXonoticCheckBoxEx(y, n, theCvar, theText);
+ return makeXonoticCheckBoxEx_T(y, n, theCvar, theText, theTooltip);
}
-entity makeXonoticCheckBoxEx(float theYesValue, float theNoValue, string theCvar, string theText)
+entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
+{
+ return makeXonoticCheckBox_T(isInverted, theCvar, theText, string_null);
+}
+
+entity makeXonoticCheckBoxEx_T(float theYesValue, float theNoValue, string theCvar, string theText, string theTooltip)
{
entity me;
me = NEW(XonoticCheckBox);
- me.configureXonoticCheckBox(me, theYesValue, theNoValue, theCvar, theText);
+ me.configureXonoticCheckBox(me, theYesValue, theNoValue, theCvar, theText, theTooltip);
return me;
}
-void XonoticCheckBox_configureXonoticCheckBox(entity me, float theYesValue, float theNoValue, string theCvar, string theText)
+entity makeXonoticCheckBoxEx(float theYesValue, float theNoValue, string theCvar, string theText)
+{
+ return makeXonoticCheckBoxEx_T(theYesValue, theNoValue, theCvar, theText, string_null);
+}
+
+void XonoticCheckBox_configureXonoticCheckBox(entity me, float theYesValue, float theNoValue, string theCvar, string theText, string theTooltip)
{
me.yesValue = theYesValue;
me.noValue = theNoValue;
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
me.loadCvars(me);
}
me.configureCheckBox(me, theText, me.fontSize, me.image);
me.savedValue = theControlledSlider.valueMin;
me.controlledSlider = theControlledSlider;
me.configureCheckBox(me, theText, me.fontSize, me.image);
- me.tooltip = theControlledSlider.tooltip;
me.cvarName = theControlledSlider.cvarName; // in case we want to display the cvar in the tooltip
+ me.tooltip = theControlledSlider.tooltip;
}
void XonoticSliderCheckBox_draw(entity me)
{
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
me.loadCvars(me);
}
me.configureCheckBox(me, theText, me.fontSize, me.image);
METHOD(XonoticColorpickerString, mousePress, float(entity, vector));
METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector));
METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector));
+
ATTRIB(XonoticColorpickerString, cvarName, string, string_null)
METHOD(XonoticColorpickerString, loadCvars, void(entity));
METHOD(XonoticColorpickerString, saveCvars, void(entity));
+
ATTRIB(XonoticColorpickerString, prevcoords, vector, '0 0 0')
ATTRIB(XonoticColorpickerString, image, string, SKINGFX_COLORPICKER)
ATTRIB(XonoticColorpickerString, imagemargin, vector, SKINMARGIN_COLORPICKER)
void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar, string theDefaultCvar)
{
- me.cvarName = theCvar;
me.configureImage(me, me.image);
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
me.loadCvars(me);
}
}
#define COMMANDBUTTON_H
#include "button.qc"
CLASS(XonoticCommandButton, XonoticButton)
- METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float));
+ METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float, string));
ATTRIB(XonoticCommandButton, onClickCommand, string, string_null)
ATTRIB(XonoticCommandButton, flags, float, 0)
ENDCLASS(XonoticCommandButton)
+entity makeXonoticCommandButton_T(string theText, vector theColor, string theCommand, float closesMenu, string theTooltip);
entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float closesMenu);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+entity makeXonoticCommandButton_T(string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
{
entity me;
me = NEW(XonoticCommandButton);
- me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags);
+ me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags, theTooltip);
return me;
}
+entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+{
+ return makeXonoticCommandButton_T(theText, theColor, theCommand, theFlags, string_null);
+}
void XonoticCommandButton_Click(entity me, entity other)
{
m_goto(string_null);
}
-void XonoticCommandButton_configureXonoticCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags)
+void XonoticCommandButton_configureXonoticCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
{
- me.configureXonoticButton(me, theText, theColor);
+ me.configureXonoticButton(me, theText, theColor, theTooltip);
me.onClickCommand = theCommand;
me.flags = theFlags;
me.onClick = XonoticCommandButton_Click;
{
currentDialog = me;
SUPER(XonoticDialog).configureDialog(me);
- me.tooltip = getZonedTooltipForIdentifier(me.classname);
}
#endif
METHOD(XonoticCreditsDialog, fill, void(entity));
METHOD(XonoticCreditsDialog, focusEnter, void(entity));
ATTRIB(XonoticCreditsDialog, title, string, _("Credits"))
+ ATTRIB(XonoticCreditsDialog, tooltip, string, _("The Xonotic credits"))
ATTRIB(XonoticCreditsDialog, color, vector, SKINCOLOR_DIALOG_CREDITS)
ATTRIB(XonoticCreditsDialog, intendedWidth, float, SKINWIDTH_CREDITS)
ATTRIB(XonoticCreditsDialog, rows, float, SKINROWS_CREDITS)
label.allowColors = 1;
label.alpha = 1;
me.TR(me);
- me.TD(me, 1, 3.75, box = makeXonoticInputBox(1, "_cl_name"));
+ me.TD(me, 1, 3.75, box = makeXonoticInputBox_T(1, "_cl_name",
+ _("Name under which you will appear in the game")));
box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
box.maxLength = -127; // negative means encoded length in bytes
box.saveImmediately = 0; // Sorry, can't do this, it spams "name" commands.
CLASS(XonoticMultiplayerDialog, XonoticDialog)
METHOD(XonoticMultiplayerDialog, fill, void(entity));
ATTRIB(XonoticMultiplayerDialog, title, string, _("Multiplayer"))
+ ATTRIB(XonoticMultiplayerDialog, tooltip, string, _("Play online, against your friends in LAN, view demos or change player settings"))
ATTRIB(XonoticMultiplayerDialog, color, vector, SKINCOLOR_DIALOG_MULTIPLAYER)
ATTRIB(XonoticMultiplayerDialog, intendedWidth, float, 0.96)
ATTRIB(XonoticMultiplayerDialog, rows, float, 24)
entity mc, e;
mc = makeXonoticTabController(me.rows - 1);
me.TR(me);
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Servers"), makeXonoticServerListTab()));
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Create"), makeXonoticServerCreateTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Servers"), makeXonoticServerListTab(),
+ _("Find servers to play on")));
+ me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Create"), makeXonoticServerCreateTab(),
+ _("Host your own game")));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Media"), makeXonoticMediaTab()));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Profile"), makeXonoticProfileTab()));
{
if(pCvar == "")
{
- e.configureXonoticTextSlider(e, string_null);
+ e.configureXonoticTextSlider(e, string_null, string_null);
l.setText(l, pLabel);
e.disabled = l.disabled = true;
}
else
{
- e.configureXonoticTextSlider(e, pCvar);
+ e.configureXonoticTextSlider(e, pCvar, "-");
// clear old values
int i;
me.gotoRC(me, 12.5, 0);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("timelimit_override",
+ _("Timelimit in minutes that when hit, will end the match")));
e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1");
e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1");
e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
- me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
+ me.TD(me, 1, 2, e = me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
+ // TODO add logic to update tooltip. fraglimit_override tooltip:
+ // _("The amount of frags needed before the match will end")
GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
me.gotoRC(me, 15, 0);
me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
me.TD(me, 1, 2, e = me.sliderTeams = makeXonoticTextSlider(string_null));
+ // TODO add logic to change the default tooltip: _("The amount of frags needed before the match will end")
e.addValue(e, _("Default"), "0");
e.addValue(e, _("2 teams"), "2");
e.addValue(e, _("3 teams"), "3");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
- me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 1, "menu_maxplayers",
+ _("The maximum amount of players or bots that can be connected to your server at once")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
- me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 9, 1, "bot_number",
+ _("Amount of bots on your server")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
setDependent(e, "bot_number", 0, -1);
- me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("skill",
+ _("Specify how experienced the bots will be")));
e.addValue(e, _("Botlike"), "0");
e.addValue(e, _("Beginner"), "1");
e.addValue(e, _("You will win"), "2");
// this decision was made in this poll: http://forums.xonotic.org/showthread.php?tid=5445
me.gotoRC(me, me.rows - 2.5, 0);
me.TDempty(me, 0.5);
- me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators..."), '0 0 0'));
+ me.TD(me, 1, 2, e = makeXonoticButton_T(_("Mutators..."), '0 0 0',
+ _("Mutators and weapon arenas")));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.mutatorsDialog;
main.mutatorsDialog.refilterEntity = me.mapListBox;
me.gotoRC(me, me.rows - 4.5, me.firstColumn);
// string filter label and box
me.TD(me, 1, 0.35, e = makeXonoticTextLabel(1, _("Filter:")));
- me.mapListBox.stringFilterBox = makeXonoticMapListStringFilterBox(me, 0, string_null);
- me.mapListBox.stringFilterBox.tooltip = getZonedTooltipForIdentifier("XonoticMultiplayerDialog_StringFilterBox");
+ me.mapListBox.stringFilterBox = makeXonoticInputBox_T(0, string_null,
+ _("Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."));
me.TD(me, 1, me.columns - me.firstColumn - 0.35, e = me.mapListBox.stringFilterBox);
e.onChange = MapList_StringFilterBox_Change;
e.keyDown = MapList_StringFilterBox_keyDown;
me.gotoRC(me, me.rows - 3.5, me.firstColumn);
// the selection buttons
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.3, e = makeXonoticButton(_("Add shown"), '0 0 0'));
+ me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add shown"), '0 0 0',
+ _("Add the maps shown in Maplist above to your selection")));
e.onClick = MapList_Add_Shown;
e.onClickEntity = me.mapListBox;
- me.TD(me, 1, 1.3, e = makeXonoticButton(_("Remove shown"), '0 0 0'));
+ me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove shown"), '0 0 0',
+ _("Remove the maps shown in Maplist above from your selection")));
e.onClick = MapList_Remove_Shown;
e.onClickEntity = me.mapListBox;
me.gotoRC(me, me.rows - 2.5, me.firstColumn);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.3, e = makeXonoticButton(_("Add all"), '0 0 0'));
+ me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add all"), '0 0 0',
+ _("Add every available map to your selection")));
e.onClick = MapList_Add_All;
e.onClickEntity = me.mapListBox;
- me.TD(me, 1, 1.3, e = makeXonoticButton(_("Remove all"), '0 0 0'));
+ me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove all"), '0 0 0',
+ _("Remove all the maps from your selection")));
e.onClick = MapList_Remove_All;
e.onClickEntity = me.mapListBox;
case MAPINFO_TYPE_FREEZETAG: x = "g_freezetag_teams_override"; break;
case MAPINFO_TYPE_KEYHUNT: x = "g_keyhunt_teams_override"; break;
case MAPINFO_TYPE_TEAM_DEATHMATCH: x = "g_tdm_teams_override"; break;
+ // TODO add logic to update tooltip
}
- e.configureXonoticTextSlider(e, x);
+ e.configureXonoticTextSlider(e, x, string_null);
e.configureXonoticTextSliderValues(e);
if(!x)
e.value = 0;
me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Gameplay mutators:")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_dodging", _("Dodging")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_dodging", _("Dodging"),
+ _("Enable dodging")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_touchexplode", _("Touch explode")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_cloaked", _("Cloaked")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
+ _("All players are almost invisible")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_buffs", _("Buffs")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_midair", _("Midair")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_midair", _("Midair"),
+ _("Only possible to inflict damage on your enemy while he's airborne")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_vampire", _("Vampire")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_vampire", _("Vampire"),
+ _("Damage done to your enemy gets added to your own health")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticSlider(10, 50, 1, "g_bloodloss");
+ s = makeXonoticSlider_T(10, 50, 1, "g_bloodloss",
+ _("Amount of health below which your player gets stunned because of blood loss"));
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TD(me, 1, 1.6, s);
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticSlider(80, 400, 8, "sv_gravity");
+ s = makeXonoticSlider_T(80, 400, 8, "sv_gravity",
+ _("Make things fall to the ground slower, lower value means lower gravity"));
s.valueDigits = 0;
s.valueDisplayMultiplier = 0.125; // show gravity in percent
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity")));
me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon & item mutators:")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_grappling_hook", _("Grappling hook")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_grappling_hook", _("Grappling hook"),
+ _("Players spawn with the grappling hook")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_jetpack", _("Jet pack")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_jetpack", _("Jet pack"),
+ _("Players spawn with the jetpack")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
setDependent(e, "g_instagib", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_pinata", _("Piñata")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_pinata", _("Piñata"),
+ _("Players will drop all weapons they possessed when they are killed")));
setDependentWeird(e, checkCompatibility_pinata);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_weapon_stay", _("Weapons stay")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_weapon_stay", _("Weapons stay"),
+ _("Weapons stay after they are picked up")));
setDependentWeird(e, checkCompatibility_weaponstay);
me.TR(me);
me.gotoRC(me, 0, 2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, _("Regular (no arena)")));
me.TR(me);
- me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:")));
+ me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:"),
+ _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
e.cvarValueIsAnotherCvar = true;
e.cvarOffValue = "0";
for(i = WEP_FIRST, j = 0; i <= WEP_LAST; ++i)
}
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_weaponarena", "most", _("Most weapons")));
+ me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "most", _("Most weapons"),
+ _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
e.cvarOffValue = "0";
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_weaponarena", "all", _("All weapons")));
+ me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "all", _("All weapons"),
+ _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
e.cvarOffValue = "0";
me.TR(me);
me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_instagib", "1", _("InstaGib")));
+ me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_instagib", "1", _("InstaGib"),
+ _("Players will be given only one weapon, which can instantly kill the opponent with a single shot. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode does not inflict any damage but is good for doing trickjumps.")));
e.cvarOffValue = "0";
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_nix", "1", _("NIX")));
+ me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_nix", "1", _("NIX"),
+ _("No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.")));
e.cvarOffValue = "0";
me.TR(me);
me.TDempty(me, 0.4);
- me.TD(me, 1, 1.6, e = makeXonoticCheckBox(0, "g_nix_with_blaster", _("with blaster")));
+ me.TD(me, 1, 1.6, e = makeXonoticCheckBox_T(0, "g_nix_with_blaster", _("with blaster"),
+ _("Always carry the blaster as an additional weapon in Nix")));
setDependent(e, "g_nix", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "menu_slist_categories", ZCTX(_("SRVS^Categories"))));
e.onClickEntity = slist;
e.onClick = ServerList_Categories_Click;
- me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty"))));
+ me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty")),
+ _("Show empty servers")));
slist.filterShowEmpty = e.checked;
e.onClickEntity = slist;
e.onClick = ServerList_ShowEmpty_Click;
- me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showfull", ZCTX(_("SRVS^Full"))));
+ me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "menu_slist_showfull", ZCTX(_("SRVS^Full")),
+ _("Show full servers that have no slots available")));
slist.filterShowFull = e.checked;
e.onClickEntity = slist;
e.onClick = ServerList_ShowFull_Click;
- me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "net_slist_pause", _("Pause")));
+ me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "net_slist_pause", _("Pause"),
+ _("Pause updating the server list to prevent servers from \"jumping around\"")));
me.gotoRC(me, 2, 0);
me.TD(me, 1, 1, slist.sortButton1 = makeXonoticButton(string_null, '0 0 0'));
e.onClick = ServerList_Favorite_Click;
e.onClickEntity = slist;
slist.favoriteButton = e;
- me.TD(me, 1, 1.5, e = makeXonoticButton(_("Info..."), '0 0 0'));
+ me.TD(me, 1, 1.5, e = makeXonoticButton_T(_("Info..."), '0 0 0',
+ _("Show more information about the currently highlighted server")));
e.onClick = ServerList_Info_Click;
e.onClickEntity = slist;
slist.infoButton = e;
mc = makeXonoticTabController(me.rows - 2);
me.gotoRC(me, 0.5, 0);
- me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
+ me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Demos"), makeXonoticDemoBrowserTab(),
+ _("Browse and view demos")));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Screenshots"), makeXonoticScreenshotBrowserTab()));
me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Music Player"), makeXonoticMusicPlayerTab()));
me.TD(me, me.rows - 2.5, me.columns, demolist);
me.gotoRC(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
+ me.TD(me, 1, me.columns / 2, e = makeXonoticButton_T(_("Timedemo"), '0 0 0',
+ _("Benchmark how fast your computer can run the highlighted demo")));
e.democlicktype = DMO_TIME;
e.onClick = DemoConfirm_Check_Gamestatus;
e.onClickEntity = me; // demolist is global anyway
label.fontSize = SKINFONTSIZE_TITLE;
me.gotoRC(me, 2.5, 0);
- me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name"));
+ me.TD(me, 1, 3.0, box = makeXonoticInputBox_T(1, "_cl_name",
+ _("Name under which you will appear in the game")));
box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
box.maxLength = -127; // negative means encoded length in bytes
box.saveImmediately = 0; // Sorry, can't do this, it spams "name" commands.
CLASS(XonoticQuitDialog, XonoticDialog)
METHOD(XonoticQuitDialog, fill, void(entity));
ATTRIB(XonoticQuitDialog, title, string, _("Quit"))
+ ATTRIB(XonoticQuitDialog, tooltip, string, _("Quit the game"))
ATTRIB(XonoticQuitDialog, color, vector, SKINCOLOR_DIALOG_QUIT)
ATTRIB(XonoticQuitDialog, intendedWidth, float, 0.5)
ATTRIB(XonoticQuitDialog, rows, float, 3)
me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("Are you sure you want to quit?")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCommandButton(_("Yes"), '1 0 0', "echo ]quit\nquit", 0));
- me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0'));
+ me.TD(me, 1, 1, e = makeXonoticCommandButton_T(_("Yes"), '1 0 0', "echo ]quit\nquit", 0,
+ _("Back to work...")));
+ me.TD(me, 1, 1, e = makeXonoticButton_T(_("No"), '0 1 0',
+ _("I got some more fragging to do!")));
e.onClick = Dialog_Close;
e.onClickEntity = me;
}
CLASS(XonoticSettingsDialog, XonoticDialog)
METHOD(XonoticSettingsDialog, fill, void(entity));
ATTRIB(XonoticSettingsDialog, title, string, _("Settings"))
+ ATTRIB(XonoticSettingsDialog, tooltip, string, _("Change the game settings"))
ATTRIB(XonoticSettingsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS)
ATTRIB(XonoticSettingsDialog, intendedWidth, float, 0.96)
ATTRIB(XonoticSettingsDialog, rows, float, 18)
entity mc;
mc = makeXonoticTabController(me.rows - 2.5);
me.TR(me);
- me.TD(me, 1, 2, mc.makeTabButton(mc, _("Video"), makeXonoticVideoSettingsTab()));
- me.TD(me, 1, 2, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
- me.TD(me, 1, 2, mc.makeTabButton(mc, _("Audio"), makeXonoticAudioSettingsTab()));
+ me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Video"), makeXonoticVideoSettingsTab(), _("Video settings")));
+ me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Effects"), makeXonoticEffectsSettingsTab(), _("Effects settings")));
+ me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Audio"), makeXonoticAudioSettingsTab(), _("Audio settings")));
me.TR(me);
me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Game"), NEW(XonoticGameSettingsTab)));
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Input"), makeXonoticInputSettingsTab()));
+ me.TD(me, 1, 1.5, mc.makeTabButton_T(mc, _("Input"), makeXonoticInputSettingsTab(), _("Input settings")));
me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("User"), makeXonoticUserSettingsTab()));
- me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Misc"), makeXonoticMiscSettingsTab()));
+ me.TD(me, 1, 1.5, mc.makeTabButton_T(mc, _("Misc"), makeXonoticMiscSettingsTab(), _("Misc settings")));
me.gotoRC(me, 2.5, 0);
me.TD(me, me.rows - 2.5, me.columns, mc);
}
entity e, s;
me.TR(me);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "mastervolume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "mastervolume", "-");
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Master:")));
me.TD(me, 1, 2, s);
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "bgmvolume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "bgmvolume", "-");
makeMulti(s, "snd_channel8volume");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Music:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_staticvolume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_staticvolume", "-");
makeMulti(s, "snd_channel9volume");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("VOL^Ambient:"))));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel0volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel0volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Info:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel3volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel3volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Items:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel6volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel6volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Pain:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel7volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel7volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Player:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel4volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel4volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Shots:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel2volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel2volume", "-");
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Voice:")));
me.TD(me, 1, 2, s);
setDependentStringNotEqual(e, "mastervolume", "0");
setDependentStringNotEqual(s, "mastervolume", "0");
me.TR(me);
me.TDempty(me, 0.2);
- s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel1volume");
+ s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel1volume", "-");
makeMulti(s, "snd_channel5volume"); // @!#%'n Tuba
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Weapons:")));
me.TD(me, 1, 2, s);
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Frequency:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_speed"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("snd_speed",
+ _("Sound output frequency")));
e.addValue(e, _("8 kHz"), "8000");
e.addValue(e, _("11.025 kHz"), "11025");
e.addValue(e, _("16 kHz"), "16000");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Channels:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_channels"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("snd_channels",
+ _("Number of channels for the sound output")));
e.addValue(e, _("Mono"), "1");
e.addValue(e, _("Stereo"), "2");
e.addValue(e, _("2.1"), "3");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "snd_swapstereo", _("Swap stereo output channels")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "snd_swapstereo", _("Swap stereo output channels"),
+ _("Swap left/right channels")));
setDependent(e, "snd_channels", 1.5, 0.5);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "snd_spatialization_control", _("Headphone friendly mode")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "snd_spatialization_control", _("Headphone friendly mode"),
+ _("Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)")));
setDependent(e, "snd_channels", 1.5, 0.5);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, makeXonoticCheckBox(0, "cl_hitsound", _("Hit indication sound")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_hitsound", _("Hit indication sound"),
+ _("Play a hit indicator sound when your shot hits an enemy")));
e.sendCvars = true;
me.TR(me);
me.TD(me, 1, 3, makeXonoticCheckBox(0, "con_chatsound", _("Chat message sound")));
me.TR(me);
- me.hiddenMenuSoundsSlider = makeXonoticSlider(1, 1, 1, "menu_sounds");
- me.TD(me, 1, 1.2, makeXonoticSliderCheckBox(0, 1, me.hiddenMenuSoundsSlider, _("Menu sounds")));
+ me.hiddenMenuSoundsSlider = makeXonoticSlider_T(1, 1, 1, "menu_sounds",
+ _("Play sounds when clicking or hovering over menu items"));
+ me.TD(me, 1, 1.2, e = makeXonoticSliderCheckBox(0, 1, me.hiddenMenuSoundsSlider, _("Menu sounds")));
+ e.tooltip = me.hiddenMenuSoundsSlider.tooltip;
me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(2, 0, me.hiddenMenuSoundsSlider, _("Focus sounds")));
+ e.tooltip = me.hiddenMenuSoundsSlider.tooltip;
setDependent(e, "menu_sounds", 1, 2);
me.TR(me);
me.TR(me);
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Automatic taunts:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_autotaunt"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_autotaunt",
+ _("Automatically taunt enemies after fragging them")));
e.addValue(e, _("Never"), "0");
e.addValue(e, _("Sometimes"), "0.35");
e.addValue(e, _("Often"), "0.65");
me.gotoRC(me, 1.25, 0);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("r_subdivisions_tolerance"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_subdivisions_tolerance",
+ _("Change the smoothness of the curves on the map (default: normal)")));
e.addValue(e, ZCTX(_("DET^Lowest")), "16");
e.addValue(e, ZCTX(_("DET^Low")), "8");
e.addValue(e, ZCTX(_("DET^Normal")), "4");
if(cvar("developer"))
{
me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces")));
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
+ _("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)")));
}
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps")));
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"),
+ _("Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_deluxemapping", _("Deluxe mapping"),
+ _("Use per-pixel lighting effects (default: enabled)")));
setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_gloss", _("Gloss"),
+ _("Enable the use of glossmaps on textures supporting it (default: enabled)")));
setDependentAND3(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0, "r_glsl_deluxemapping", 1, 1);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping", _("Offset mapping"),
+ _("Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)")));
setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping"),
+ _("Higher quality offset mapping, which also has a huge impact on performance (default: disabled)")));
setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_water", _("Reflections:")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_water", _("Reflections:"),
+ _("Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)")));
setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticTextSlider("r_water_resolutionmultiplier"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_water_resolutionmultiplier",
+ _("Resolution of reflections/refractions (default: good)")));
e.addValue(e, _("Blurred"), "0.25");
e.addValue(e, ZCTX(_("REFL^Good")), "0.5");
e.addValue(e, _("Sharp"), "1");
e.configureXonoticTextSliderValues(e);
setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "cl_decals", _("Decals"),
+ _("Enable decals (bullet holes and blood) (default: enabled)")));
me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_decals", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawdecals_drawdistance",
+ _("Decals further away than this will not be drawn (default: 300)")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
setDependent(e, "cl_decals", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_fadetime"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 20, 1, "cl_decals_fadetime",
+ _("Time in seconds before decals fade away (default: 2)")));
setDependent(e, "cl_decals", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
e.configureXonoticTextSliderValues(e);
me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "r_coronas", "0", _("No dynamic lighting")));
+ me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "r_coronas", "0", _("No dynamic lighting"),
+ _("Enable corona flares around certain lights (default: enabled)")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Fake corona lighting")));
+ me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "gl_flashblend", string_null, _("Fake corona lighting"),
+ _("Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)")));
makeMulti(e, "r_coronas");
me.TR(me);
- me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting")));
+ me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting"),
+ _("Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)")));
makeMulti(e, "r_coronas");
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_dlight_shadows", _("Shadows")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight_shadows", _("Shadows"),
+ _("Enable rendering of shadows from dynamic lights (default: disabled)")));
setDependent(e, "r_shadow_realtime_dlight", 1, 1);
me.TR(me);
- me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "r_shadow_realtime_world", _("Realtime world lighting")));
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_world_shadows", _("Shadows")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world", _("Realtime world lighting"),
+ _("Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world_shadows", _("Shadows"),
+ _("Enable rendering of shadows from realtime world lights (default: disabled)")));
setDependent(e, "r_shadow_realtime_world", 1, 1);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "r_shadow_usenormalmap", _("Use normal maps")));
+ me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "r_shadow_usenormalmap", _("Use normal maps"),
+ _("Enable use of directional shading on textures (default: enabled)")));
setDependentOR(e, "r_shadow_realtime_dlight", 1, 1, "r_shadow_realtime_world", 1, 1);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
setDependentWeird(e, someShadowCvarIsEnabled);
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Fade corona according to visibility")));
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade corona according to visibility"),
+ _("Fade coronas according to visibility (default: enabled)")));
setDependent(e, "r_coronas", 1, 1);
me.TR(me);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_bloom", _("Bloom")));
- me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_bloom", _("Bloom"),
+ _("Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBoxEx_T(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects"),
+ _("Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)")));
makeMulti(e, "hud_powerup");
setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
- s = makeXonoticSlider(0.1, 1, 0.1, "r_motionblur");
+ s = makeXonoticSlider_T(0.1, 1, 0.1, "r_motionblur",
+ _("Motion blur strength - 0.4 recommended"));
me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Motion blur:")));
if(s.value != e.savedValue)
e.savedValue = 0.4; // default
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
setDependent(e, "cl_particles", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawparticles_drawdistance"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawparticles_drawdistance",
+ _("Particles further away than this will not be drawn (default: 1000)")));
setDependent(e, "cl_particles", 1, 1);
me.gotoRC(me, me.rows - 1, 0);
me.TR(me); //me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_enabled", "0", _("No crosshair")));
//me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_per_weapon", string_null, _("Per weapon")));
+ me.TD(me, 1, 1, e = makeXonoticRadioButton_T(3, "crosshair_per_weapon", string_null, _("Per weapon"),
+ _("Set a different crosshair for each weapon, good if you play without weapon models")));
makeMulti(e, "crosshair_enabled");
//me.TR(me);
me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_enabled", "2", _("Custom")));
me.TDempty(me, 0.1);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:")));
setDependent(e, "crosshair_enabled", 1, 2);
- me.TD(me, 1, 1.9, e = makeXonoticSlider(0.1, 1.0, 0.01, "crosshair_size"));
+ me.TD(me, 1, 1.9, e = makeXonoticSlider_T(0.1, 1.0, 0.01, "crosshair_size",
+ _("Adjust the size of the crosshair")));
setDependent(e, "crosshair_enabled", 1, 2);
me.TR(me);
me.TDempty(me, 0.1);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair alpha:")));
setDependent(e, "crosshair_enabled", 1, 2);
- me.TD(me, 1, 1.9, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha"));
+ me.TD(me, 1, 1.9, e = makeXonoticSlider_T(0, 1, 0.1, "crosshair_alpha",
+ _("Adjust the opacity of the crosshair")));
setDependent(e, "crosshair_enabled", 1, 2);
me.TR(me);
me.TDempty(me, 0.1);
setDependent(e, "crosshair_enabled", 1, 2);
/*me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit testing:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("crosshair_hittest"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("crosshair_hittest",
+ _("None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy")));
e.addValue(e, ZCTX(_("HTTST^Disabled")), "0");
e.addValue(e, ZCTX(_("HTTST^TrueAim")), "1");
e.addValue(e, ZCTX(_("HTTST^Enemies")), "1.25");
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Waypoints")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Display waypoint markers for objectives on the map")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(1, "cl_hidewaypoints", _("Display waypoint markers for objectives on the map"),
+ _("Show various gametype specific waypoints")));
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Alpha:")));
setDependent(e, "cl_hidewaypoints", 0, 0);
- me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1, 0.05, "g_waypointsprite_alpha"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.1, 1, 0.05, "g_waypointsprite_alpha",
+ _("Control transparency of the waypoints")));
setDependent(e, "cl_hidewaypoints", 0, 0);
me.TR(me);
me.TDempty(me, 0.2);
me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_nogibs",
+ _("Reduce the amount of gibs or remove them completely (default: lots)")));
e.addValue(e, ZCTX(_("GIBS^None")), "1");
e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 5, "fov"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(60, 130, 5, "fov",
+ _("Field of vision in degrees from 60 to 130, default is 90")));
me.TR(me);
me.TR(me);
//me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom factor:"))));
- me.TD(me, 1, 2, e = makeXonoticSlider(2, 30, 0.5, "cl_zoomfactor"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(2, 30, 0.5, "cl_zoomfactor",
+ _("How big the zoom factor is when the zoom button is pressed")));
me.TR(me);
//me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom speed:"))));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_zoomspeed"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_zoomspeed",
+ _("How fast the view will be zoomed, disable to zoom instantly")));
e.addValue(e, "1", "1"); // Samual: for() loop doesn't work here, even though it would make sense.
e.addValue(e, "2", "2");
e.addValue(e, "3", "3");
me.TR(me);
//me.TDempty(me, 0.2);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom sensitivity:"))));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "cl_zoomsensitivity"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 1, 0.1, "cl_zoomsensitivity",
+ _("How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_velocityzoom_enabled", _("Velocity zoom")));
e.onClickEntity = me.weaponsList;
me.gotoRC(me, 0, 3); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling"),
+ _("Make use of the list above when cycling through weapons with the mouse wheel")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_weaponimpulsemode", _("Cycle through only usable weapon selections")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_autoswitch", _("Auto switch weapons on pickup")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_autoswitch", _("Auto switch weapons on pickup"),
+ _("Automatically switch to newly picked up weapons if they are better than what you are carrying")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_unpress_attack_on_weapon_switch", _("Release attack buttons when you switch weapons")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_drawviewmodel", _("Draw 1st person weapon model")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "r_drawviewmodel", _("Draw 1st person weapon model"),
+ _("Draw the weapon model")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "4", _("Left align")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "4", _("Left align"),
+ _("Position of the weapon model; requires reconnect")));
setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "1", _("Center")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "1", _("Center"),
+ _("Position of the weapon model; requires reconnect")));
setDependent(e, "r_drawviewmodel", 1, 1);
- me.TD(me, 1, 1.0, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align")));
+ me.TD(me, 1, 1.0, e = makeXonoticRadioButton_T(1, "cl_gunalign", "3", _("Right align"),
+ _("Position of the weapon model; requires reconnect")));
setDependent(e, "r_drawviewmodel", 1, 1);
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Mouse")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 0.2, "sensitivity",
+ _("Mouse speed multiplier")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_filter", _("Smooth aiming")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "m_filter", _("Smooth aiming"),
+ _("Smoothes the mouse movement, but makes aiming slightly less responsive")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(1.022, "m_pitch", _("Invert aiming")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(1.022, "m_pitch", _("Invert aiming"),
+ _("Invert mouse movement on the Y-axis")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "menu_mouse_absolute", _("Use system mouse positioning")));
makeMulti(e, "hud_cursormode");
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_accelerate", _("Enable built in mouse acceleration")));
me.TR(me);
if(cvar_type("vid_dgamouse") & CVAR_TYPEFLAG_ENGINE)
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_dgamouse", _("Disable system mouse acceleration")));
+ {
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "vid_dgamouse", _("Disable system mouse acceleration"),
+ _("Make use of DGA mouse input")));
+ }
else if(cvar_type("apple_mouse_noaccel") & CVAR_TYPEFLAG_ENGINE)
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", _("Disable system mouse acceleration")));
else
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it"),
+ _("Allow the console toggling bind to also close the console")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_movement_track_canjump", _("Automatically repeat jumping if holding jump")));
e.sendCvars = true;
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Network")));
me.TR(me);
me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Client UDP port:")));
- me.TD(me, 1, 1.5, e = makeXonoticInputBox(0, "cl_port"));
+ me.TD(me, 1, 1.5, e = makeXonoticInputBox_T(0, "cl_port",
+ _("Force client to use chosen port unless it is set to 0")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bandwidth:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("_cl_rate",
+ _("Specify your network speed with this slider")));
e.addValue(e, _("56k"), "4000");
e.addValue(e, _("ISDN"), "7000");
e.addValue(e, _("Slow ADSL"), "15000");
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Input packets/s:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 5, "cl_netfps"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(20, 100, 5, "cl_netfps",
+ _("How many input packets to send to the server each second")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Server queries/s:")));
me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 10, "net_slist_queriespersecond"));
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Downloads:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 5, 1, "cl_curl_maxdownloads",
+ _("Maximum number of concurrent HTTP/FTP downloads")));
me.TR(me);
me.TDempty(me, 0.1);
me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Speed (kB/s):")));
- me.TD(me, 1, 2, e = makeXonoticSlider(10, 2000, 50, "cl_curl_maxspeed"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(10, 2000, 50, "cl_curl_maxspeed",
+ _("Maximum download speed")));
me.TR(me);
if(cvar("developer"))
{
me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
}
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "shownetgraph", _("Show netgraph"),
+ _("Show a graph of packet sizes and other information")));
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_movement", _("Client-side movement prediction"),
+ _("Enable clientside movement prediction")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
setDependent(e, "cl_movement", 1, 1);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Save processing time for other apps")));
setDependent(e, "cl_maxfps", 1, 1000);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showfps", _("Show frames per second"),
+ _("Show your rendered frames per second")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_tooltips"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("menu_tooltips",
+ _("Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)")));
e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", _("Show current date and time")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showtime", _("Show current date and time"),
+ _("Show current date and time of day, useful on screenshots")));
makeMulti(e, "showdate");
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
me.TR(me);
me.TDempty(me, 0.5);
- me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0'));
+ me.TD(me, 1, 2, e = makeXonoticButton_T(_("Advanced settings..."), '0 0 0',
+ _("Advanced settings where you can tweak every single variable of the game")));
e.onClick = DialogOpenButton_Click;
e.onClickEntity = main.cvarsDialog;
me.TR(me);
e.onClickEntity = sk;
me.gotoRC(me, 11.5, 3.25); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language")));
+ me.TD(me, 1, 2.5, e = makeXonoticCheckBox_T(0, "cl_gentle", _("Disable gore effects and harsh language"),
+ _("Replace blood and gibs with content that does not have any gore effects (default: disabled)")));
//me.TR(me);
// me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
e.configureXonoticTextSliderValues(e);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Color depth:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_bitsperpixel"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_bitsperpixel",
+ _("How many bits per pixel (BPP) to render at, 32 is recommended")));
e.addValue(e, _("16bit"), "16");
e.addValue(e, _("32bit"), "32");
e.configureXonoticTextSliderValues(e);
me.TR(me);
- me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
- me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "vid_vsync", _("Vertical Synchronization")));
+ me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "vid_fullscreen", _("Full screen"),
+ _("Enable fullscreen mode (default: enabled)")));
+ me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "vid_vsync", _("Vertical Synchronization"),
+ _("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)")));
me.TR(me);
if(cvar("developer"))
- { me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally"))); }
+ {
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "v_flipped", _("Flip view horizontally"),
+ _("Poor man's left handed mode (default: off)")));
+ }
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("gl_texture_anisotropy"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("gl_texture_anisotropy",
+ _("Anisotropic filtering quality (default: 1x)")));
e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
e.addValue(e, _("2x"), "2");
e.addValue(e, _("4x"), "4");
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
setDependent(e, "r_viewfbo", 0, 0);
- me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_samples"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_samples",
+ _("Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)")));
e.addValue(e, ZCTX(_("AA^Disabled")), "1");
e.addValue(e, _("2x"), "2");
e.addValue(e, _("4x"), "4");
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:")));
- me.TD(me, 1, 2, e = makeXonoticTextSlider("r_depthfirst"));
+ me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_depthfirst",
+ _("Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)")));
e.addValue(e, ZCTX(_("DF^Disabled")), "0");
e.addValue(e, ZCTX(_("DF^World")), "1");
e.addValue(e, ZCTX(_("DF^All")), "2");
me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "0", ZCTX(_("VBO^Off"))));
- me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "0", ZCTX(_("VBO^Off")),
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+ me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)"),
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "2", _("Vertices")));
- me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "1", _("Vertices and Triangles")));
+ me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "2", _("Vertices"),
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+ me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "1", _("Vertices and Triangles"),
+ _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Brightness:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.0, 0.5, 0.02, "v_brightness"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.0, 0.5, 0.02, "v_brightness",
+ _("Brightness of black (default: 0)")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 3.0, 0.05, "v_contrast"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 3.0, 0.05, "v_contrast",
+ _("Brightness of white (default: 1)")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "v_gamma"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "v_gamma",
+ _("Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 5.0, 0.1, "v_contrastboost"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 5.0, 0.1, "v_contrastboost",
+ _("By how much to multiply the contrast in dark areas (default: 1)")));
setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Saturation:")));
setDependent(e, "vid_gl20", 1, 1);
- me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_glsl_saturation"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_glsl_saturation",
+ _("Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)")));
setDependent(e, "vid_gl20", 1, 1);
me.TR(me);
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:"))));
- me.TD(me, 1, 2, e = makeXonoticSlider(0, 20.0, 0.25, "r_ambient"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 20.0, 0.25, "r_ambient",
+ _("Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)")));
me.TR(me);
me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Intensity:")));
- me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_hdr_scenebrightness"));
+ me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_hdr_scenebrightness",
+ _("Global rendering brightness (default: 1)")));
me.TR(me);
me.TR(me);
- me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "gl_finish", _("Wait for GPU to finish each frame")));
+ me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "gl_finish", _("Wait for GPU to finish each frame"),
+ _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)")));
me.TR(me);
me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
me.TR(me);
me.TDempty(me, 0.2);
- me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "v_glslgamma", _("Use GLSL to handle color control")));
+ me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "v_glslgamma", _("Use GLSL to handle color control"),
+ _("Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)")));
setDependent(e, "vid_gl20", 1, 1);
if(cvar("developer"))
{
CLASS(XonoticSingleplayerDialog, XonoticDialog)
METHOD(XonoticSingleplayerDialog, fill, void(entity));
ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer"))
+ ATTRIB(XonoticSingleplayerDialog, tooltip, string, _("Play the singleplayer campaign or instant action matches against bots"))
ATTRIB(XonoticSingleplayerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER)
ATTRIB(XonoticSingleplayerDialog, intendedWidth, float, 0.80)
ATTRIB(XonoticSingleplayerDialog, rows, float, 24)
METHOD(XonoticTeamSelectDialog, fill, void(entity)); // to be overridden by user to fill the dialog with controls
METHOD(XonoticTeamSelectDialog, showNotify, void(entity));
ATTRIB(XonoticTeamSelectDialog, title, string, _("Team Selection")) // ;)
+ ATTRIB(XonoticTeamSelectDialog, tooltip, string, _("Join \"best\" team (auto-select) / Autoselect team (recommended)"))
ATTRIB(XonoticTeamSelectDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT)
ATTRIB(XonoticTeamSelectDialog, intendedWidth, float, 0.4)
ATTRIB(XonoticTeamSelectDialog, rows, float, 5)
#endif
#ifdef IMPLEMENTATION
-entity makeTeamButton(string theName, vector theColor, string commandtheName)
+entity makeTeamButton_T(string theName, vector theColor, string commandtheName, string theTooltip)
{
entity b;
b = makeXonoticBigCommandButton(theName, theColor, commandtheName, 1);
return b;
}
+entity makeTeamButton(string theName, vector theColor, string commandtheName)
+{
+ return makeTeamButton_T(theName, theColor, commandtheName, string_null);
+}
void XonoticTeamSelectDialog_showNotify(entity me)
{
{
entity e;
me.TR(me);
- me.TD(me, 2, 4, e = makeTeamButton(_("join 'best' team (auto-select)"), '0 0 0', "cmd selectteam auto; cmd join"));
+ me.TD(me, 2, 4, e = makeTeamButton_T(_("join 'best' team (auto-select)"), '0 0 0', "cmd selectteam auto; cmd join",
+ _("Join 'best' team (auto-select) / Autoselect team (recommended)")));
e.preferredFocusPriority = 1;
me.TR(me);
me.TR(me);
- me.TD(me, 2, 1, me.team1 = makeTeamButton(_("red"), '1 0.5 0.5', "cmd selectteam red; cmd join"));
- me.TD(me, 2, 1, me.team2 = makeTeamButton(_("blue"), '0.5 0.5 1', "cmd selectteam blue; cmd join"));
- me.TD(me, 2, 1, me.team3 = makeTeamButton(_("yellow"), '1 1 0.5', "cmd selectteam yellow; cmd join"));
- me.TD(me, 2, 1, me.team4 = makeTeamButton(_("pink"), '1 0.5 1', "cmd selectteam pink; cmd join"));
+ me.TD(me, 2, 1, e = me.team1 = makeTeamButton_T(_("red"), '1 0.5 0.5', "cmd selectteam red; cmd join",
+ _("Join the red team")));
+ me.TD(me, 2, 1, e = me.team2 = makeTeamButton_T(_("blue"), '0.5 0.5 1', "cmd selectteam blue; cmd join",
+ _("Join the blue team")));
+ me.TD(me, 2, 1, e = me.team3 = makeTeamButton_T(_("yellow"), '1 1 0.5', "cmd selectteam yellow; cmd join",
+ _("Join the yellow team")));
+ me.TD(me, 2, 1, e = me.team4 = makeTeamButton_T(_("pink"), '1 0.5 1', "cmd selectteam pink; cmd join",
+ _("Join the pink team")));
me.TR(me);
me.TR(me);
me.TD(me, 1, 4, makeXonoticCommandButton(_("spectate"), '0 0 0', "cmd spectate", 1));
{
entity me;
me = NEW(XonoticGametypeButton);
- me.configureXonoticGametypeButton(me, theGroup, theCvar, theText);
+ me.configureXonoticGametypeButton(me, theGroup, theCvar, theText, theTooltip);
return me;
}
-void XonoticGametypeButton_configureXonoticGametypeButton(entity me, float theGroup, string theCvar, string theText)
+void XonoticGametypeButton_configureXonoticGametypeButton(entity me, float theGroup, string theCvar, string theText, string theTooltip)
{
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
me.loadCvars(me);
}
me.configureRadioButton(me, theText, me.fontSize, me.image, theGroup, 0);
#define INPUTBOX_H
#include "../item/inputbox.qc"
CLASS(XonoticInputBox, InputBox)
- METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string));
+ METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string, string));
METHOD(XonoticInputBox, focusLeave, void(entity));
METHOD(XonoticInputBox, setText, void(entity, string));
+ METHOD(XonoticInputBox, keyDown, float(entity, float, float, float));
ATTRIB(XonoticInputBox, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticInputBox, image, string, SKINGFX_INPUTBOX)
ATTRIB(XonoticInputBox, onChange, void(entity, entity), func_null)
METHOD(XonoticInputBox, loadCvars, void(entity));
METHOD(XonoticInputBox, saveCvars, void(entity));
ATTRIB(XonoticInputBox, sendCvars, float, 0)
- METHOD(XonoticInputBox, keyDown, float(entity, float, float, float));
ATTRIB(XonoticInputBox, saveImmediately, float, 0)
ENDCLASS(XonoticInputBox)
+entity makeXonoticInputBox_T(float, string, string theTooltip);
entity makeXonoticInputBox(float, string);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticInputBox(float doEditColorCodes, string theCvar)
+entity makeXonoticInputBox_T(float doEditColorCodes, string theCvar, string theTooltip)
{
entity me;
me = NEW(XonoticInputBox);
- me.configureXonoticInputBox(me, doEditColorCodes, theCvar);
+ me.configureXonoticInputBox(me, doEditColorCodes, theCvar, theTooltip);
return me;
}
-void XonoticInputBox_configureXonoticInputBox(entity me, float doEditColorCodes, string theCvar)
+entity makeXonoticInputBox(float doEditColorCodes, string theCvar)
+{
+ return makeXonoticInputBox_T(doEditColorCodes, theCvar, string_null);
+}
+void XonoticInputBox_configureXonoticInputBox(entity me, float doEditColorCodes, string theCvar, string theTooltip)
{
me.configureInputBox(me, "", 0, me.fontSize, me.image);
me.editColorCodes = doEditColorCodes;
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
me.loadCvars(me);
}
me.cursorPos = strlen(me.text);
ATTRIB(XonoticMapList, alphaBG, float, 0)
ENDCLASS(XonoticMapList)
entity makeXonoticMapList();
-entity makeXonoticMapListStringFilterBox(entity me, float doEditColorCodes, string theCvar);
void MapList_StringFilterBox_Change(entity box, entity me);
float MapList_StringFilterBox_keyDown(entity me, float key, float ascii, float shift);
void MapList_Add_Shown(entity btn, entity me);
MapInfo_Shutdown();
}
-entity makeXonoticMapListStringFilterBox(entity me, float doEditColorCodes, string theCvar)
-{
- return makeXonoticInputBox(doEditColorCodes, theCvar);
-}
entity makeXonoticMapList()
{
entity me;
#define RADIOBUTTON_H
#include "../item/radiobutton.qc"
CLASS(XonoticRadioButton, RadioButton)
- METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string));
+ METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string, string));
METHOD(XonoticRadioButton, draw, void(entity));
METHOD(XonoticRadioButton, setChecked, void(entity, float));
ATTRIB(XonoticRadioButton, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticRadioButton, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticRadioButton, disabledAlpha, float, SKINALPHA_DISABLED)
ENDCLASS(XonoticRadioButton)
+entity makeXonoticRadioButton_T(float, string, string, string, string theTooltip);
entity makeXonoticRadioButton(float, string, string, string);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticRadioButton(float theGroup, string theCvar, string theValue, string theText)
+entity makeXonoticRadioButton_T(float theGroup, string theCvar, string theValue, string theText, string theTooltip)
{
entity me;
me = NEW(XonoticRadioButton);
- me.configureXonoticRadioButton(me, theGroup, theCvar, theValue, theText);
+ me.configureXonoticRadioButton(me, theGroup, theCvar, theValue, theText, theTooltip);
return me;
}
-void XonoticRadioButton_configureXonoticRadioButton(entity me, float theGroup, string theCvar, string theValue, string theText)
+entity makeXonoticRadioButton(float theGroup, string theCvar, string theValue, string theText)
+{
+ return makeXonoticRadioButton_T(theGroup, theCvar, theValue, theText, string_null);
+}
+void XonoticRadioButton_configureXonoticRadioButton(entity me, float theGroup, string theCvar, string theValue, string theText, string theTooltip)
{
if(theCvar)
{
me.cvarName = theCvar;
- me.cvarValue = theValue;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
me.loadCvars(me);
}
me.configureRadioButton(me, theText, me.fontSize, me.image, theGroup, 0);
void ServerList_Update_favoriteButton(entity btn, entity me)
{
- me.favoriteButton.setText(me.favoriteButton,
- (IsFavorite(me.ipAddressBox.text) ?
- _("Remove") : _("Favorite")
- )
- );
+ entity e = me.favoriteButton;
+ if(IsFavorite(me.ipAddressBox.text))
+ {
+ e.setText(e, _("Remove"));
+ if(e.tooltip)
+ {
+ strunzone(e.tooltip);
+ e.tooltip = string_null;
+ }
+ }
+ else
+ {
+ e.setText(e, _("Favorite"));
+ if(!e.tooltip)
+ e.tooltip = strzone(_("Bookmark the currently highlighted server so that it's faster to find in the future"));
+ }
}
entity makeXonoticServerList()
#define SLIDER_H
#include "../item/slider.qc"
CLASS(XonoticSlider, Slider)
- METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string));
+ METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string, string));
METHOD(XonoticSlider, setValue, void(entity, float));
ATTRIB(XonoticSlider, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
ATTRIB(XonoticSlider, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticSlider, disabledAlpha, float, SKINALPHA_DISABLED)
ENDCLASS(XonoticSlider)
+entity makeXonoticSlider_T(float, float, float, string, string theTooltip);
entity makeXonoticSlider(float, float, float, string);
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
{
entity me;
me = NEW(XonoticSlider);
- me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
+ me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar, theTooltip);
return me;
}
-void XonoticSlider_configureXonoticSlider(entity me, float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+{
+ return makeXonoticSlider_T(theValueMin, theValueMax, theValueStep, theCvar, string_null);
+}
+void XonoticSlider_configureXonoticSlider(entity me, float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
{
float vp;
vp = theValueStep * 10;
// slider out of bounds to hide the button before loading the cvar
me.configureSliderValues(me, theValueMin, theValueMin-theValueStep, theValueMax, theValueStep, theValueStep, vp);
me.cvarName = theCvar;
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
me.loadCvars(me);
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
}
else
me.configureSliderValues(me, theValueMin, theValueMin, theValueMax, theValueStep, theValueStep, vp);
METHOD(XonoticDecibelsSlider, saveCvars, void(entity));
METHOD(XonoticDecibelsSlider, valueToText, string(entity, float));
ENDCLASS(XonoticDecibelsSlider)
+entity makeXonoticDecibelsSlider_T(float, float, float, string, string);
entity makeXonoticDecibelsSlider(float, float, float, string);
#endif
return exp(A * f);
}
-entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticDecibelsSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
{
entity me;
me = NEW(XonoticDecibelsSlider);
- me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
+ me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar, theTooltip);
return me;
}
+entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+{
+ return makeXonoticDecibelsSlider_T(theValueMin, theValueMax, theValueStep, theCvar, string_null);
+}
void XonoticDecibelsSlider_loadCvars(entity me)
{
float v;
}
void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
{
- me.configureXonoticTextSlider(me, "cl_particles_quality");
+ me.configureXonoticTextSlider(me, "cl_particles_quality",
+ _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"));
if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")), "0.4 250 0"); }
me.addValue(me, ZCTX(_("PART^Low")), "0.4 500 0");
me.addValue(me, ZCTX(_("PART^Medium")), "0.8 750 0");
}
void XonoticPicmipSlider_configureXonoticPicmipSlider(entity me)
{
- me.configureXonoticTextSlider(me, "gl_picmip");
+ me.configureXonoticTextSlider(me, "gl_picmip",
+ _("Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"));
me.autofix(me);
me.have_s3tc = GL_Have_TextureCompression();
}
float autocvar_menu_vid_allowdualscreenresolution;
void XonoticResolutionSlider_configureXonoticResolutionSlider(entity me)
{
- me.configureXonoticTextSlider(me, "_menu_vid_width");
+ me.configureXonoticTextSlider(me, "_menu_vid_width",
+ _("Screen resolution"));
me.loadResolutions(me, cvar("vid_fullscreen"));
}
void XonoticResolutionSlider_loadResolutions(entity me, float fullscreen)
}
void XonoticScoreboardFadeTimeSlider_configureXonoticScoreboardFadeTimeSlider(entity me)
{
- me.configureXonoticTextSlider(me, "scoreboard_fadeinspeed");
+ me.configureXonoticTextSlider(me, "scoreboard_fadeinspeed", string_null);
me.addValue(me, ZCTX(_("PART^Slow")), "5 2.5");
me.addValue(me, ZCTX(_("PART^Normal")), "10 5");
me.addValue(me, ZCTX(_("PART^Fast")), "15 7.5");
#include "../item/modalcontroller.qc"
CLASS(XonoticTabController, ModalController)
METHOD(XonoticTabController, configureXonoticTabController, void(entity, float));
+ METHOD(XonoticTabController, makeTabButton_T, entity(entity, string, entity, string));
METHOD(XonoticTabController, makeTabButton, entity(entity, string, entity));
ATTRIB(XonoticTabController, rows, float, 0)
ATTRIB(XonoticTabController, fontSize, float, SKINFONTSIZE_NORMAL)
{
me.rows = theRows;
}
-entity XonoticTabController_makeTabButton(entity me, string theTitle, entity tab)
+entity XonoticTabController_makeTabButton_T(entity me, string theTitle, entity tab, string theTooltip)
{
entity b;
if(me.rows != tab.rows)
error("Tab dialog height mismatch!");
- b = makeXonoticButton(theTitle, '0 0 0');
+ b = makeXonoticButton_T(theTitle, '0 0 0', theTooltip);
me.addTab(me, tab, b);
// TODO make this real tab buttons (with color parameters, and different gfx)
return b;
}
+entity XonoticTabController_makeTabButton(entity me, string theTitle, entity tab)
+{
+ return XonoticTabController_makeTabButton_T(me, theTitle, tab, string_null);
+}
#endif
#define TEXTSLIDER_H
#include "../item/textslider.qc"
CLASS(XonoticTextSlider, TextSlider)
- METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string));
+ METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string, string));
METHOD(XonoticTextSlider, setValue, void(entity, float));
METHOD(XonoticTextSlider, configureXonoticTextSliderValues, void(entity));
ATTRIB(XonoticTextSlider, fontSize, float, SKINFONTSIZE_NORMAL)
ATTRIB(XonoticTextSlider, alpha, float, SKINALPHA_TEXT)
ATTRIB(XonoticTextSlider, disabledAlpha, float, SKINALPHA_DISABLED)
ENDCLASS(XonoticTextSlider)
+entity makeXonoticTextSlider_T(string, string theTooltip);
entity makeXonoticTextSlider(string); // note: you still need to call addValue and configureXonoticTextSliderValues!
#endif
#ifdef IMPLEMENTATION
-entity makeXonoticTextSlider(string theCvar)
+entity makeXonoticTextSlider_T(string theCvar, string theTooltip)
{
entity me;
me = NEW(XonoticTextSlider);
- me.configureXonoticTextSlider(me, theCvar);
+ me.configureXonoticTextSlider(me, theCvar, theTooltip);
return me;
}
-void XonoticTextSlider_configureXonoticTextSlider(entity me, string theCvar)
+entity makeXonoticTextSlider(string theCvar)
+{
+ return makeXonoticTextSlider_T(theCvar, string_null);
+}
+void XonoticTextSlider_configureXonoticTextSlider(entity me, string theCvar, string theTooltip)
{
me.configureSliderVisuals(me, me.fontSize, me.align, me.valueSpace, me.image);
if(theCvar)
{
me.cvarName = theCvar;
- me.tooltip = getZonedTooltipForIdentifier(theCvar);
- // don't load it yet
+ me.tooltip = getZonedTooltip(theTooltip, theCvar);
+ // me.loadCvars(me); // don't load it yet
}
}
void XonoticTextSlider_setValue(entity me, float val)
return (GL_CheckExtension("GL_EXT_texture_compression_s3tc") && GL_CheckExtension("GL_ARB_texture_compression"));
}
-void loadTooltips()
+string getZonedTooltip(string theTooltip, string theCvar)
{
- tooltipdb = db_load(language_filename("tooltips.db"));
-}
-void unloadTooltips()
-{
- if(tooltipdb >= 0)
- db_close(tooltipdb);
- tooltipdb = -1;
-}
-string getZonedTooltipForIdentifier(string s)
-{
- string t;
- if(s == "")
- return string_null;
- if(tooltipdb >= 0)
+ if(theTooltip == "")
{
- t = db_get(tooltipdb, s);
- if(t == "-")
- return string_null;
- if(t != "")
- return strzone(t);
- }
- if(prvm_language == "en")
- {
- t = cvar_description(s);
- if(t != "" && t != "custom cvar")
- return strzone(t);
+ if(theCvar != "" && prvm_language == "en")
+ {
+ string t = cvar_description(theCvar);
+ if(t != "" && t != "custom cvar")
+ return strzone(t);
+ }
}
- LOG_TRACE("WARNING: no tooltip set for ", s, "\n");
+ else if(theTooltip != "-")
+ return strzone(theTooltip);
+
return string_null;
}
void setDependentStringNotEqual(entity e, string theCvarName, string theCvarValue);
void setDependentWeird(entity e, float(entity) func);
-int tooltipdb;
-void loadTooltips();
-void unloadTooltips();
-string getZonedTooltipForIdentifier(string s);
+string getZonedTooltip(string theTooltip, string theCvar);
string resolvemod(string m);
0
-\XonoticSingleplayerDialog\Play the singleplayer campaign or instant action matches against bots
-
-\XonoticMultiplayerDialog\Play online, against your friends in LAN, view demos or change player settings
-\XonoticMultiplayerDialog/Servers\Find servers to play on
-\menu_slist_showempty\Show empty servers
-\menu_slist_showfull\Show full servers that have no slots available
-\net_slist_pause\Pause updating the server list to prevent servers from "jumping around"
-\XonoticMultiplayerDialog/Info...\Show more information about the currently highlighted server
-\XonoticMultiplayerDialog/Bookmark\Bookmark the currently highlighted server so that it's faster to find in the future
-\XonoticMultiplayerDialog/Create\Host your own game
-\XonoticMultiplayerDialog/Demos\Browse and view demos
\XonoticMultiplayerDialog/Player Setup\Customize your player settings
-\XonoticTeamSelectDialog/join 'best' team (auto-select)\Autoselect team (recommended)
-\XonoticTeamSelectDialog/red\Join the red team
-\XonoticTeamSelectDialog/blue\Join the blue team
-\XonoticTeamSelectDialog/yellow\Join the yellow team
-\XonoticTeamSelectDialog/pink\Join the pink team
-
-\timelimit_override\Timelimit in minutes that when hit, will end the match
-\fraglimit_override\The amount of frags needed before the match will end
-\menu_maxplayers\The maximum amount of players or bots that can be connected to your server at once
-\bot_number\Amount of bots on your server
-\skill\Specify how experienced the bots will be
\g_maplist_votable\Number of maps that are shown in the map voting at the end of a match
\sv_vote_simple_majority_factor\Simple majority wins a vote
-\XonoticMultiplayerDialog/Advanced settings...\Advanced server settings
-\XonoticMultiplayerDialog/Mutators...\Mutators and weapon arenas
-\g_dodging\Enable dodging
-\g_cloaked\All players are almost invisible
\g_footsteps\Enable footstep sounds
-\g_midair\Only possible to inflict damage on your enemy while he's airborne
-\g_vampire\Damage done to your enemy gets added to your own health
-\g_bloodloss\Amount of health below which your player gets stunned because of blood loss
-\sv_gravity\Make things fall to the ground slower, lower value means lower gravity
-\g_grappling_hook\Players spawn with the grappling hook
-\g_jetpack\Players spawn with the jetpack
-\g_pinata\Players will drop all weapons they possessed when they are killed
-\g_weapon_stay\Weapons stay after they are picked up
-\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
-\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
-\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
-\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
-
-\XonoticMultiplayerDialog_StringFilterBox\Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done.
-\XonoticMultiplayerDialog/Add shown\Add the maps shown in Maplist above to your selection
-\XonoticMultiplayerDialog/Remove shown\Remove the maps shown in Maplist above from your selection
-\XonoticMultiplayerDialog/Add all\Add every available map to your selection
-\XonoticMultiplayerDialog/Remove all\Remove all the maps from your selection
-
-
-\XonoticMultiplayerDialog/Timedemo\Benchmark how fast your computer can run the highlighted demo
-\fov\Field of vision in degrees from 60 to 130, default is 90
\cl_bobcycle\View bobbing frequency, disable for no bobbing
-\cl_zoomfactor\How big the zoom factor is when the zoom button is pressed
-\cl_zoomsensitivity\How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)
-\cl_zoomspeed\How fast the view will be zoomed, disable to zoom instantly
-\XonoticMultiplayerDialog/Weapon settings...\Set your most preferred weapons, autoswitch and weapon model settings
-\cl_weaponpriority_useforcycling\Make use of the list above when cycling through weapons with the mouse wheel
-\cl_autoswitch\Automatically switch to newly picked up weapons if they are better than what you are carrying
-\r_drawviewmodel\Draw the weapon model
-\cl_gunalign\Position of the weapon model; requires reconnect
-
-\crosshair_per_weapon\Set a different crosshair for each weapon, good if you play without weapon models
\crosshair_color_per_weapon\Set the color of the crosshair depending on the weapon you are currently holding
-\crosshair_size\Adjust the size of the crosshair
-\crosshair_alpha\Adjust the opacity of the crosshair
-\crosshair_color\Adjust the crosshair color
\sbar_hudselector\Use the old HUD layout
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Name under which you will appear in the game
-
-\XonoticSettingsDialog\Change the game settings
-\XonoticCreditsDialog\The Xonotic credits
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Quit the game
-\XonoticQuitDialog/Yes\Back to work...
-\XonoticQuitDialog/No\I got some more fragging to do!
-\XonoticSettingsDialog/Input\Input settings
-\sensitivity\Mouse speed multiplier
\menu_mouse_speed\Mouse speed multiplier in the menu, does not affect aiming in the game
-\m_filter\Smoothes the mouse movement, but makes aiming slightly less responsive
-\m_pitch\Invert mouse movement on the Y-axis
-\vid_dgamouse\Make use of DGA mouse input
-\con_closeontoggleconsole\Allow the console toggling bind to also close the console
-\XonoticSettingsDialog/Video\Video settings
-\vid_width\Screen resolution
-\vid_bitsperpixel\How many bits per pixel (BPP) to render at, 32 is recommended
-\vid_fullscreen\Enable fullscreen mode (default: enabled)
-\vid_vsync\Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)
-\gl_texture_anisotropy\Anisotropic filtering quality (default: 1x)
\r_glsl\Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)
-\gl_vbo\Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)
-\r_depthfirst\Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)
\gl_texturecompression\Compress the textures for video cards with small amounts of video memory available (default: None)
-\gl_finish\Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)
-\v_brightness\Brightness of black (default: 0)
-\v_contrast\Brightness of white (default: 1)
-\v_gamma\Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)
-\v_contrastboost\By how much to multiply the contrast in dark areas (default: 1)
-\r_glsl_saturation\Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)
-\v_glslgamma\Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)
-\r_ambient\Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)
-\r_hdr_scenebrightness\Global rendering brightness (default: 1)
-\vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)
-\v_flipped\Poor man's left handed mode (default: off)
-\XonoticSettingsDialog/Effects\Effect settings
-\r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal)
-\gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)
\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
-\mod_q3bsp_nolightmaps\Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)
-\cl_particles_quality\Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)
-\r_drawparticles_drawdistance\Particles further away than this will not be drawn (default: 1000)
-\cl_decals\Enable decals (bullet holes and blood) (default: enabled)
-\r_drawdecals_drawdistance\Decals further away than this will not be drawn (default: 300)
-\cl_decals_time\Time in seconds before decals fade away (default: 2)
-\cl_gentle\Replace blood and gibs with content that does not have any gore effects (default: disabled)
-\cl_nogibs\Reduce the amount of gibs or remove them completely (default: lots)
\v_kicktime\How long a view kick from damage lasts (default: 0)
-\r_glsl_deluxemapping\Use per-pixel lighting effects (default: enabled)
-\r_shadow_gloss\Enable the use of glossmaps on textures supporting it (default: enabled)
-\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
-\r_shadow_realtime_dlight\Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)
-\r_shadow_realtime_dlight_shadows\Enable rendering of shadows from dynamic lights (default: disabled)
-\r_shadow_realtime_world\Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)
-\r_shadow_realtime_world_shadows\Enable rendering of shadows from realtime world lights (default: disabled)
-\r_shadow_usenormalmap\Enable use of directional shading on textures (default: enabled)
-\r_showsurfaces\Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)
-\r_glsl_offsetmapping\Offset mapping effect that will make textures with bumpmaps appear like they "pop out" of the flat 2D surface (default: disabled)
-\r_glsl_offsetmapping_reliefmapping\Higher quality offset mapping, which also has a huge impact on performance (default: disabled)
-\r_water\Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)
-\r_water_resolutionmultiplier\Resolution of reflections/refractions (default: good)
-\r_coronas\Enable corona flares around certain lights (default: enabled)
-\r_coronas_occlusionquery\Fade coronas according to visibility (default: enabled)
-\r_bloom\Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)
\r_hdr\Higher quality version of bloom, which has a huge impact on performance. (default: disabled)
-\r_motionblur\Motion blur strength - 0.4 recommended
-\hud_postprocessing_maxbluralpha\Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)
-\XonoticSettingsDialog/Audio\Audio settings
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Sound output frequency
-\snd_channels\Number of channels for the sound output
-\snd_swapstereo\Swap left/right channels
-\snd_spatialization_control\Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)
\cl_voice_directional\Enable directional voices
\cl_voice_directional_taunt_attenuation\Distance from which taunts can be heard
-\cl_autotaunt\Automatically taunt enemies after fragging them
\cl_sound_maptime_warning\Announcer sound telling you the remaining minutes of the match
-\cl_hitsound\Play a hit indicator sound when your shot hits an enemy
-\menu_sounds\Play sounds when clicking or hovering over menu items
\XonoticSettingsDialog/Network\Network settings
-\cl_movement\Enable clientside movement prediction
\cl_nolerp\Enable network update smoothing
-\shownetgraph\Show a graph of packet sizes and other information
-\_cl_rate\Specify your network speed with this slider
-\cl_netfps\How many input packets to send to the server each second
-\cl_curl_maxdownloads\Maximum number of concurrent HTTP/FTP downloads
-\cl_curl_maxspeed\Maximum download speed
-\cl_port\Force client to use chosen port unless it is set to 0
-\XonoticSettingsDialog/Misc\Misc settings
-\menu_tooltips\Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)
-\showtime\Show current time of day, useful on screenshots
-\showdate\Show current date, useful on screenshots
-\showfps\Show your rendered frames per second
-
-\XonoticSettingsDialog/Advanced settings...\Advanced settings where you can tweak every single variable of the game
\g_friendlyfire\Percentage of damage dealt to teammates
\g_mirrordamage\Percentage of teamdamage that will be mirrored to you
-\g_tdm_teams_override\Override the default amount of teams in teamgames
\viewsize\Enable/disable the HUD background
-\cl_hidewaypoints\Show various gametype specific waypoints
\g_waypointsprite_scale\Scale multiplier of the waypoints
-\g_waypointsprite_alpha\Control transparency of the waypoints
\cl_shownames\Show the name of the player you are aiming at
-
-\crosshair_hittest\None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy