From: terencehill Date: Thu, 20 Jan 2011 23:23:13 +0000 (+0100) Subject: Merge branch 'master' into terencehill/menu_tooltips_2 X-Git-Tag: xonotic-v0.6.0~40^2~108^2~10 X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=commitdiff_plain;h=2886ed5676755f4242704d64d3315124026496bb;hp=a815eac87d47b74c06dea10cee1d9cfa315d87ab Merge branch 'master' into terencehill/menu_tooltips_2 Conflicts: defaultXonotic.cfg --- diff --git a/apply-eol-style.sh b/apply-eol-style.sh deleted file mode 100755 index 6c6c997ccd..0000000000 --- a/apply-eol-style.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -while read -r EXT EOLSTYLE; do - echo "Fixing $EXT..." - find . -name .svn -prune -o -type f \( -name "*.$EXT" -o -name "$EXT" \) -print0 | \ - case "$EOLSTYLE" in - 1) - xargs -0 svn propset svn:eol-style native - ;; - 0) - xargs -0 svn propdel svn:eol-style - ;; - esac -done &2 + for X in "$VM".dat.*.po; do + [ -f "$X" ] || continue + msgmerge -F -U "$X" "$VM".dat.pot >&2 + todo=$( + msgattrib --untranslated "$X" | grep -A 2147483647 "^#:" + msgattrib --fuzzy "$X" | grep -A 2147483647 "^#:" + ) + if [ -n "$todo" ]; then + echo "TODO for translation $X:" + echo "$todo" + echo + fi + done +done diff --git a/defaultXonotic.cfg b/defaultXonotic.cfg index 930087a220..e09eb1f11a 100644 --- a/defaultXonotic.cfg +++ b/defaultXonotic.cfg @@ -461,6 +461,7 @@ locs_enable 0 pausable 0 seta g_spawnshieldtime 1.000000 "number of seconds you are invincible after you spawned, this shield is lost after you fire" seta g_antilag 2 "AntiLag (0 = no AntiLag, 1 = verified client side hit scan, 2 = server side hit scan in the past, 3 = unverified client side hit scan)" +set g_trueaim_minrange 44 "TrueAim minimum range (TrueAim adjusts shots so they hit the crosshair point even though the gun is not at the screen center)" set g_antilag_nudge 0 "don't touch" set g_antilag_bullets 1 "Bullets AntiLag (0 = no AntiLag, 1 = server side hit scan in the past) - DO NOT TOUCH (severely changes weapon balance)" set g_shootfromclient 1 "let client decide if it has the gun left or right; if set to 2, center handedness is allowed, and defaulted to, too; see also cl_gunalign" @@ -565,7 +566,8 @@ set g_freezetag 0 "Freeze Tag: Freeze the opposing team(s) to win, unfreeze team seta g_freezetag_warmup 5 "Time players get to run around before the round starts" seta g_freezetag_point_limit -1 "Freeze Tag point limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" seta g_freezetag_point_leadlimit -1 "Freeze Tag point lead limit overriding the mapinfo specified one (use 0 to play without limit, and -1 to use the mapinfo's limit)" -seta g_freezetag_revive_time 2.5 "Time it takes to revive a frozen teammate" +seta g_freezetag_revive_speed 0.4 "Speed for reviving a frozen teammate" +seta g_freezetag_revive_clearspeed 1.6 "Speed at which reviving progress gets lost when out of range" seta g_freezetag_revive_extra_size 100 "Distance in qu that you can stand from a frozen teammate to keep reviving him" seta g_freezetag_frozen_force 0.6 "How much to multiply the force on a frozen player with" @@ -642,6 +644,7 @@ seta g_mirrordamage 0.700000 "for teamplay 4: mirror damage factor" seta g_mirrordamage_virtual 1 "for teamplay 4: do not actually apply mirror damage, just show graphics effect for it" seta g_friendlyfire 0.500000 "for teamplay 4: fiendly fire factor" seta g_friendlyfire_virtual 1 "for teamplay 4: do not actually apply friendly fire, just show graphics effect for it" +seta g_friendlyfire_virtual_force 1 "for teamplay 4: apply force even though damage was made virtual only" seta g_teamdamage_threshold 40 "for teamplay 4: threshold over which to apply mirror damage" seta g_teamdamage_resetspeed 20 "for teamplay 4: how fast player's teamdamage count decreases" @@ -1273,23 +1276,25 @@ set g_keyhunt_teams 0 // keepaway set g_keepaway 0 "game mode which focuses around a ball, look at g_keepaway_win_mode for further details" -set g_keepaway_bckillscore 1 "enable scoring points (y/n) for ball carrier kills" -set g_keepaway_pointlimit -1 "total amount of points you can get, -1 for unlimited" -set g_keepaway_pointleadlimit -1 "mercy rule, -1 for unlimited" -set g_keepaway_ballcarrier_alpha 0.6 "alpha when the player is the ballcarrier" -set g_keepaway_ballcarrier_highspeed 1.5 "speed multiplier done to the person holding the ball" -set g_keepaway_ballcarrier_damage 1.5 "damage multiplier while having powerup" -set g_keepaway_ballcarrier_force 1.5 "force multiplier while having powerup" -set g_keepaway_ballcarrier_selfdamage 1 "self damage multiplier while having powerup" -set g_keepaway_ballcarrier_selfforce 1.5 "self force multiplier while having powerup" -set g_keepaway_noncarrier_warn 0 "warn players when they kill without holding the ball" -set g_keepaway_noncarrier_damage 0.5 "damage done to other players if both you and they don't have the ball" -set g_keepaway_noncarrier_force 0.5 "force done to other players if both you and they don't have the ball" +set g_keepaway_score_bckill 1 "enable scoring points (y/n) for ball carrier kills (value is how many points to award)" +set g_keepaway_score_killac 1 "amount of points to give when you kill someone while you have the ball" +set g_keepaway_score_timeinterval 1 "amount of time it takes between intervals for timepoints to be added to the score" +set g_keepaway_score_timepoints 0 "points to add to score per timeinterval, 0 for no points" +set g_keepaway_ballcarrier_effects 8 "Add together the numbers you want: EF_ADDITIVE (32) / EF_NODEPTHTEST (8192) / EF_DIMLIGHT (8)" +set g_keepaway_ballcarrier_highspeed 1 "speed multiplier done to the person holding the ball (recommended when used with some mutators)" +set g_keepaway_ballcarrier_damage 1 "damage multiplier while holding the ball" +set g_keepaway_ballcarrier_force 1 "force multiplier while holding the ball" +set g_keepaway_ballcarrier_selfdamage 1 "self damage multiplier while holding the ball" +set g_keepaway_ballcarrier_selfforce 1 "self force multiplier while holding the ball" +set g_keepaway_noncarrier_warn 1 "warn players when they kill without holding the ball" +set g_keepaway_noncarrier_damage 1 "damage done to other players if both you and they don't have the ball" +set g_keepaway_noncarrier_force 1 "force done to other players if both you and they don't have the ball" set g_keepaway_noncarrier_selfdamage 1 "self damage if you don't have the ball" set g_keepaway_noncarrier_selfforce 1 "self force if you don't have the ball" +set g_keepawayball_effects 0 "Add together the numbers you want: EF_ADDITIVE (32) / EF_NODEPTHTEST (8192) / EF_DIMLIGHT (8)" set g_keepawayball_trail_color 254 "particle trail color from player/ball" -set g_keepawayball_damageforcescale 2 "Scale of force which is applied to the ball by weapons/explosions/etc" -set g_keepawayball_respawntime 15 "if no one picks up the ball, how long to wait until the ball respawns" +set g_keepawayball_damageforcescale 3 "Scale of force which is applied to the ball by weapons/explosions/etc" +set g_keepawayball_respawntime 10 "if no one picks up the ball, how long to wait until the ball respawns" seta g_keepaway_teams_override 0 set g_keepaway_teams 0 @@ -1361,6 +1366,7 @@ seta menu_skin "luminos" set menu_slowmo 1 seta menu_sounds 0 "enables menu sound effects. 1 enables click sounds, 2 also enables hover sounds" seta menu_tooltips 1 "menu tooltips: 0 disabled, 1 enabled, 2 also shows cvar or console command (when available) changed or executed by the item" +set menu_picmip_bypass 0 "bypass texture quality enforcement based on system resources, not recommended and may cause crashes!" r_textbrightness 0.2 r_textcontrast 0.8 @@ -1423,7 +1429,7 @@ seta hud_showbinds_limit 2 "maximum number of bound keys to show for a command. seta hud_colorflash_alpha 0.5 "starting alpha of the color flash" -seta hud_damage 0.55 "an improved version of gl_polyblend, draw an image instead when hurt" +seta hud_damage 0.55 "an improved version of gl_polyblend for damage, draw an image instead when hurt" seta hud_damage_gentle_alpha_multiplier 0.10 "how much to multiply alpha of flash when using the cl_gentle version, it's much more opaque than the non-gentle version" seta hud_damage_gentle_color "1 0.7 1" "color of flash for cl_gentle version" seta hud_damage_color "1 0 0" "color of flash" @@ -1436,6 +1442,17 @@ seta hud_damage_pain_threshold_lower_health 50 "at which health we start lowerin seta hud_damage_pain_threshold_pulsating_min 0.6 "minimum value when calculating the pulse: max(pulsating_min, fabs(sin(PI * time / period))" seta hud_damage_pain_threshold_pulsating_period 0.8 "one pulse every X seconds" +seta hud_contents 1 "an improved version of gl_polyblend for liquids such as water/lava/slime, draw a filler when inside the liquid" +seta hud_contents_factor 1 "factor at which to multiply the current faded value." +seta hud_contents_fadeintime 0.02 "factor of time it takes for the alpha level to reach normal value when entering the liquid" +seta hud_contents_fadeouttime 0.1 "factor of time it takes for the alpha level to reach normal value when leaving the liquid" +seta hud_contents_lava_alpha 0.7 "alpha of the lava color blend when inside it" +seta hud_contents_lava_color "0.8 0.1 0" +seta hud_contents_slime_alpha 0.7 "alpha of the slime color blend when inside it" +seta hud_contents_slime_color "0 0.4 0.1" +seta hud_contents_water_alpha 0.5 "alpha of the water color blend when inside it" +seta hud_contents_water_color "0.4 0.3 0.3" + // scoreboard seta scoreboard_columns default seta scoreboard_border_thickness 1 "scoreboard border thickness" @@ -1592,9 +1609,6 @@ set capturelimit 0 seta hud_fontsize 11 seta scr_centersize 12 seta hud_width 560 -// alias hud_font "loadfont user1 ${1},gfx/fallback ${2-}; loadfont user2 ${1}-big ${2-}; scoreboard_columns_set" -alias sbar_font "set _requested_sbar_font \"${*}\"" -sbar_font gfx/vera-sans 8 12 16 24 32 // these entities are not referenced by anything directly, they just represent // teams and are found by find() when needed @@ -1988,13 +2002,15 @@ scr_conscroll_y -0.3 scr_loadingscreen_background 0 scr_loadingscreen_barcolor "0 0.5 1" -scr_loadingscreen_barheight 20 +scr_loadingscreen_barheight 12 scr_loadingscreen_count 1 scr_conforcewhiledisconnected 0 +scr_infobar_height 12 // DP cannot properly detect this, so rather turn off the detection r_texture_dds_load_dxt1_noalpha 1 r_texture_dds_load_swdecode 1 // SW decode to quarter res if we want to load DDS but don't support the extension for it +r_texture_dds_load_logfailure 0 // this engine feature SUCKS // particles optimization r_drawparticles_nearclip_min 8 @@ -2067,6 +2083,7 @@ set g_weapon_charge_colormod_blue_full -1 // player statistics server URI set g_playerstats_uri "" +set g_playerstats_debug 0 "when 1, player stats are dumped to the console too" // create this cvar in case the engine did not set snd_soundradius 1200 @@ -2082,7 +2099,7 @@ exec ctfscoring-ai.cfg exec effects-normal.cfg exec physicsX0.cfg exec turrets.cfg -exec font-nimbussansl.cfg +exec font-xolonium.cfg // hud cvar descriptions exec _hud_descriptions.cfg diff --git a/fixbalance.sh b/fixbalance.sh new file mode 100755 index 0000000000..cfc6cc0ffe --- /dev/null +++ b/fixbalance.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +main=balanceXonotic.cfg +for X in balance*.cfg; do + case "$X" in + "$main") + ;; + *) + perl ../../misc/tools/cfgapply.pl "$main" "$X" > "$X.new" && mv "$X.new" "$X" + ;; + esac +done +git diff diff --git a/keybinds.txt b/keybinds.txt index da262082e9..56ff29d766 100644 --- a/keybinds.txt +++ b/keybinds.txt @@ -17,16 +17,16 @@ "weaplast" "previously used" "weapbest" "best" "reload" "reload" -"impulse 1" "laser" -"impulse 2" "shotgun" -"impulse 3" "machine gun / rifle" -"impulse 4" "mortar" -"impulse 5" "electro" -"impulse 6" "crylink / hlac" -"impulse 7" "nex / minstanex" -"impulse 8" "hagar" -"impulse 9" "rocket launcher / fireball" -"impulse 14" "porto / hook" +"impulse 1" "Laser" +"impulse 2" "Shotgun" +"impulse 3" "Machine Gun" +"impulse 4" "Mortar / Mine Layer" +"impulse 5" "Electro" +"impulse 6" "Crylink / HLAC" +"impulse 7" "Nex / MinstaNex / Rifle" +"impulse 8" "Hagar / Seeker" +"impulse 9" "Rocket Launcher / Fireball" +"impulse 14" "Port-O-Launch / Hook" "" "" "" "View" "+zoom" "hold zoom" diff --git a/keybinds.txt.de b/keybinds.txt.de new file mode 100644 index 0000000000..6f2c78b511 --- /dev/null +++ b/keybinds.txt.de @@ -0,0 +1,91 @@ +"" "Bewegung" +"+forward" "vorwärts" +"+back" "rückwärts" +"+moveleft" "links" +"+moveright" "rechts" +"+jump" "springen / schwimmen" +"+crouch" "ducken / sinken" +"+hook" "Enterhaken / Jetpack" +"" "" +"" "Angriff" +"+fire" "1. Feuermodus" +"+fire2" "2. Feuermodus" +"" "" +"" "Waffe wechseln" +"weapprev" "vorherige" +"weapnext" "nächste" +"weaplast" "zuletzt benutzte" +"weapbest" "beste" +"reload" "nachladen" +"impulse 1" "Laser" +"impulse 2" "Shotgun" +"impulse 3" "Machine Gun" +"impulse 4" "Mortar / Mine Layer" +"impulse 5" "Electro" +"impulse 6" "Crylink / HLAC" +"impulse 7" "Nex / MinstaNex / Rifle" +"impulse 8" "Hagar / Seeker" +"impulse 9" "Rocket Launcher / Fireball" +"impulse 14" "Port-O-Launch / Hook" +"" "" +"" "Anzeige" +"+zoom" "Vergrößern (festhalten)" +"togglezoom" "Vergrößern (umschalten)" +"+showscores" "Tabelle anzeigen" +"screenshot" "Bildschirmfoto" +"" "" +"" "Kommunikation" +"messagemode" "Nachricht an alle" +"messagemode2" "Nachricht ans Team" +"+con_chat_maximize" "Chat-Historie zeigen" +"vyes" "Abstimmung: JA" +"vno" "Abstimmung: Nein" +"ready" "Bereitschaft signalisieren" +"" "" +"" "Client" +"+show_info" "Serverinfo anzeigen" +"toggleconsole" "Konsole öffnen" +"disconnect" "Verbindung trennen" +"quit" "Beenden" +"" "" +"" "Teamplay" +"messagemode2" "Nachricht ans Team" +"team_auto" "Team automatisch wählen" +"menu_showteamselect" "Team auswählen" +"spec" "Zuschauen" +"dropweapon" "Waffe wegwerfen" +"+use" "Schlüssel oder Flagge wegwerfen" +"" "" +"" "Benutzerdefiniert" +"+userbind 1" "$userbind1" +"+userbind 2" "$userbind2" +"+userbind 3" "$userbind3" +"+userbind 4" "$userbind4" +"+userbind 5" "$userbind5" +"+userbind 6" "$userbind6" +"+userbind 7" "$userbind7" +"+userbind 8" "$userbind8" +"+userbind 9" "$userbind9" +"+userbind 10" "$userbind10" +"+userbind 11" "$userbind11" +"+userbind 12" "$userbind12" +"+userbind 13" "$userbind13" +"+userbind 14" "$userbind14" +"+userbind 15" "$userbind15" +"+userbind 16" "$userbind16" +"+userbind 17" "$userbind17" +"+userbind 18" "$userbind18" +"+userbind 19" "$userbind19" +"+userbind 20" "$userbind20" +"+userbind 21" "$userbind21" +"+userbind 22" "$userbind22" +"+userbind 23" "$userbind23" +"+userbind 24" "$userbind24" +"+userbind 25" "$userbind25" +"+userbind 26" "$userbind26" +"+userbind 27" "$userbind27" +"+userbind 28" "$userbind28" +"+userbind 29" "$userbind29" +"+userbind 30" "$userbind30" +"+userbind 31" "$userbind31" +"+userbind 32" "$userbind32" diff --git a/keybinds.txt.fr b/keybinds.txt.fr new file mode 100644 index 0000000000..c5cb242b18 --- /dev/null +++ b/keybinds.txt.fr @@ -0,0 +1,91 @@ +"" "Mouvement" +"+forward" "avancer" +"+back" "reculer" +"+moveleft" "gauche" +"+moveright" "droite" +"+jump" "sauter / nager" +"+crouch" "s'accroupir / couler" +"+hook" "grappin / jet pack" +"" "" +"" "Attaque" +"+fire" "tir primaire" +"+fire2" "tir secondaire" +"" "" +"" "Changement d'armes" +"weapprev" "arme précédente" +"weapnext" "arme suivante" +"weaplast" "dernière utilisée" +"weapbest" "meilleure arme" +"reload" "recharger" +"impulse 1" "laser" +"impulse 2" "shotgun" +"impulse 3" "machine gun / rifle" +"impulse 4" "mortar" +"impulse 5" "electro" +"impulse 6" "crylink / hlac" +"impulse 7" "nex / minstanex" +"impulse 8" "hagar" +"impulse 9" "rocket launcher / fireball" +"impulse 14" "porto / hook" +"" "" +"" "Vue" +"+zoom" "zoom clic enfoncé" +"togglezoom" "zoom 2 clics" +"+showscores" "montrer les scores (enfoncé)" +"screenshot" "capture d'écran" +"" "" +"" "Communiquer" +"messagemode" "chat public" +"messagemode2" "chat d'équipe" +"+con_chat_maximize" "historique du chat (enfoncé)" +"vyes" "voter OUI" +"vno" "voter NON" +"ready" "prêt (en mode échauffement)" +"" "" +"" "Joueur" +"+show_info" "information serveur" +"toggleconsole" "ouvrir la console" +"disconnect" "se déconnecter" +"quit" "quitter" +"" "" +"" "Équipe" +"messagemode2" "chat d'équipe" +"team_auto" "auto-joindre une équipe" +"menu_showteamselect" "séléction d'équipe" +"spec" "mode spectateur" +"dropweapon" "lâcher l'arme" +"+use" "lâcher la clé / lâcher le drapeau" +"" "" +"" "Utilisateur" +"+userbind 1" "$userbind1" +"+userbind 2" "$userbind2" +"+userbind 3" "$userbind3" +"+userbind 4" "$userbind4" +"+userbind 5" "$userbind5" +"+userbind 6" "$userbind6" +"+userbind 7" "$userbind7" +"+userbind 8" "$userbind8" +"+userbind 9" "$userbind9" +"+userbind 10" "$userbind10" +"+userbind 11" "$userbind11" +"+userbind 12" "$userbind12" +"+userbind 13" "$userbind13" +"+userbind 14" "$userbind14" +"+userbind 15" "$userbind15" +"+userbind 16" "$userbind16" +"+userbind 17" "$userbind17" +"+userbind 18" "$userbind18" +"+userbind 19" "$userbind19" +"+userbind 20" "$userbind20" +"+userbind 21" "$userbind21" +"+userbind 22" "$userbind22" +"+userbind 23" "$userbind23" +"+userbind 24" "$userbind24" +"+userbind 25" "$userbind25" +"+userbind 26" "$userbind26" +"+userbind 27" "$userbind27" +"+userbind 28" "$userbind28" +"+userbind 29" "$userbind29" +"+userbind 30" "$userbind30" +"+userbind 31" "$userbind31" +"+userbind 32" "$userbind32" diff --git a/languages.txt b/languages.txt new file mode 100644 index 0000000000..d14c1f8b98 --- /dev/null +++ b/languages.txt @@ -0,0 +1,5 @@ +de German "Deutsch" +en English "English" +fr French "Français" +pt Portuguese "Português" +ru Russian "Русский" diff --git a/menu.dat.de.po b/menu.dat.de.po new file mode 100644 index 0000000000..38ad308819 --- /dev/null +++ b/menu.dat.de.po @@ -0,0 +1,2407 @@ +# Xonotic Menu +# Copyright (C) 2011 Team Xonotic +# This file is distributed under the same license as the Xonotic package. +# Rudolf Polzer +# +msgid "" +msgstr "" +"Project-Id-Version: 0.1preview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-01-18 21:36+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Rudolf Polzer \n" +"Language-Team: LANGUAGE \n" +"Language: de\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: qcsrc/menu/gamecommand.qc:47 +#, c-format +msgid "error: status is %d\n" +msgstr "Fehler: Status ist %d\n" + +#: qcsrc/menu/gamecommand.qc:65 +msgid "Usage: menu_cmd command..., where possible commands are:\n" +msgstr "Syntax: menu_cmd Befehl..., wobei mögliche Befehle sind:\n" + +#: qcsrc/menu/gamecommand.qc:66 +msgid " sync - reloads all cvars on the current menu page\n" +msgstr " sync - lädt alle Variablen auf der aktuellen Menüseite neu\n" + +#: qcsrc/menu/gamecommand.qc:67 +msgid " directmenu ITEM - select a menu item as main item\n" +msgstr " directmenu ELEMENT - springt zu einem Menüelement" + +#: qcsrc/menu/gamecommand.qc:193 +msgid "error creating curl handle\n" +msgstr "Fehler beim Erstellen eines curl-Handles\n" + +#: qcsrc/menu/gamecommand.qc:239 +msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n" +msgstr "" +"Ungültiger Befehl. Eine Liste der unterstützten Befehle wird von menu_cmd " +"help ausgegeben.\n" + +#: qcsrc/menu/item/gecko.c:49 +msgid "Browser not initialized!" +msgstr "Browser nicht initialisiert!" + +#: qcsrc/menu/item/label.c:63 +#, c-format +msgid "NOTE: label text %s too wide for label, condensed by factor %f\n" +msgstr "" +"HINWEIS: Text %s ist zu weit für das Textfeld, Text wurde um Faktor %f " +"gestaucht\n" + +#: qcsrc/menu/item/listbox.c:300 +#, c-format +msgid "Item %d" +msgstr "Eintrag %d" + +#: qcsrc/menu/item/slider.c:64 +#, c-format +msgid "%d (%s)" +msgstr "%d (%s)" + +#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31 +msgid "custom" +msgstr "benutzerdefiniert" + +#: qcsrc/menu/menu.qc:29 +#, c-format +msgid "^4MQC Build information: %s\n" +msgstr "^4MQC Build-Information: %s (deutsch)\n" + +#: qcsrc/menu/xonotic/campaign.c:284 +#: qcsrc/menu/xonotic/dialog_singleplayer.c:66 +msgid "???" +msgstr "???" + +#: qcsrc/menu/xonotic/campaign.c:285 +#, c-format +msgid "Level %d: %s" +msgstr "Level %d: %s" + +#: qcsrc/menu/xonotic/cvarlist.c:84 +msgid "will be saved to config.cfg" +msgstr "wird in config.cfg gespeichert" + +#: qcsrc/menu/xonotic/cvarlist.c:86 +msgid "will not be saved" +msgstr "wird nicht gespeichert" + +#: qcsrc/menu/xonotic/cvarlist.c:88 +msgid "private" +msgstr "privat" + +#: qcsrc/menu/xonotic/cvarlist.c:90 +msgid "engine setting" +msgstr "Engine-Einstellung" + +#: qcsrc/menu/xonotic/cvarlist.c:92 +msgid "read only" +msgstr "nur lesen" + +#: qcsrc/menu/xonotic/dialog_credits.c:5 +msgid "Credits" +msgstr "Entwickler" + +#: qcsrc/menu/xonotic/dialog_credits.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:46 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:59 +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21 +msgid "OK" +msgstr "OK" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:4 +msgid "Welcome" +msgstr "Willkommen" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:33 +msgid "" +"Welcome to Xonotic, please select your language preference and enter your " +"player name to get started. You can change these options later through the " +"menu system." +msgstr "" +"Willkommen in Xonotic! Nach Auswahl der Sprache und Eingabe des " +"Spielernamens kann es losgehen. Diese Optionen können natürlich später im " +"Menüsystem geändert werden." + +#: qcsrc/menu/xonotic/dialog_firstrun.c:38 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:35 +msgid "Text language:" +msgstr "Sprache:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:47 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40 +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39 +msgid "Name:" +msgstr "Name:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:69 +msgid "Save settings" +msgstr "Einstellungen speichern" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4 +msgid "Ammo Panel" +msgstr "Munitons-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22 +msgid "Ammunition display:" +msgstr "Munitionsanzeige:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25 +msgid "Show only current ammo type" +msgstr "Nur aktuellen Munitionstyp anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40 +msgid "Left" +msgstr "Links" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41 +msgid "Right" +msgstr "Rechts" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4 +msgid "Chat Panel" +msgstr "Chat-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22 +msgid "Chat entries:" +msgstr "Chat-Zeilen:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25 +msgid "Chat size:" +msgstr "Chat-Größe:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29 +msgid "Chat lifetime:" +msgstr "Chat-Sichtbarkeit:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33 +msgid "Chat beep sound" +msgstr "Chat-Piepton:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4 +msgid "Engine Info Panel" +msgstr "Engine-Info-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22 +msgid "Engine info:" +msgstr "Engine-Info:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25 +msgid "Use an averaging algorithm for fps" +msgstr "Zeige einen Durchschnittswert für fps" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4 +msgid "Health/Armor Panel" +msgstr "Health/Armor-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22 +msgid "Enable status bar" +msgstr "Statusleiste anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24 +msgid "Status bar alignment:" +msgstr "Statusleistenausrichtung" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42 +msgid "Inward" +msgstr "Innen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43 +msgid "Outward" +msgstr "Außen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37 +msgid "Icon alignment:" +msgstr "Iconausrichtung:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45 +msgid "Flip health and armor positions" +msgstr "Health und Armor tauschen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4 +msgid "Info Messages Panel" +msgstr "Informations-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22 +msgid "Info messages:" +msgstr "Informationen:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25 +msgid "Flip align" +msgstr "Ausrichtung tauschen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4 +msgid "Mod Icons Panel" +msgstr "Mod-Symbole-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4 +msgid "Notification Panel" +msgstr "Anzeige-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22 +msgid "Notifications:" +msgstr "Anzeige:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25 +msgid "Also print notifications to the console" +msgstr "auch auf der Konsole ausgeben" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28 +msgid "Flip notify order" +msgstr "Scrollrichtung vertauschen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31 +msgid "Entry lifetime:" +msgstr "Eintrags-Sichtbarkeit:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35 +msgid "Entry fadetime:" +msgstr "Eintrags-Ausblendung:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4 +msgid "Powerups Panel" +msgstr "Bonus-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45 +msgid "Flip strength and shield positions" +msgstr "Strength und Shield vertauschen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4 +msgid "Pressed Keys Panel" +msgstr "Gedrückte-Tasten-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21 +msgid "Panel disabled" +msgstr "Panel nicht anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22 +msgid "Panel enabled when spectating" +msgstr "Panel beim Zuschauen anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23 +msgid "Panel always enabled" +msgstr "Panel immer anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30 +msgid "Forced aspect:" +msgstr "Aspektverhältnis:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4 +msgid "Race Timer Panel" +msgstr "Rundenzeit-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4 +msgid "Radar Panel" +msgstr "Radar-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22 +msgid "Panel enabled in teamgames" +msgstr "Panel in Team-Spieltypen aktivieren" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29 +msgid "Radar:" +msgstr "Radar:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151 +#: qcsrc/menu/xonotic/util.qc:631 +msgid "Alpha:" +msgstr "Alpha:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36 +msgid "Rotation:" +msgstr "Drehung:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38 +msgid "Forward" +msgstr "Vorwärts" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39 +msgid "West" +msgstr "West" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40 +msgid "South" +msgstr "Süd" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41 +msgid "East" +msgstr "Ost" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42 +msgid "North" +msgstr "Nord" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46 +msgid "Scale:" +msgstr "Skalierung:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50 +msgid "Zoom mode:" +msgstr "Zoom-Modus:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52 +msgid "Zoomed in" +msgstr "vergrößert" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53 +msgid "Zoomed out" +msgstr "verkleinert" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54 +msgid "Always zoomed" +msgstr "immer vergrößert" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55 +msgid "Never zoomed" +msgstr "nie vergrößert" + +#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4 +msgid "Score Panel" +msgstr "Punkte-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4 +msgid "Timer Panel" +msgstr "Zeit-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22 +msgid "Timer:" +msgstr "Zeit:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25 +msgid "Show elapsed time" +msgstr "Vergangene Zeit anzeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4 +msgid "Vote Panel" +msgstr "Abstimmungs-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22 +msgid "Alpha after voting:" +msgstr "Alpha nach Abstimmung:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4 +msgid "Weapons Panel" +msgstr "Waffen-Panel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24 +msgid "Fade out after:" +msgstr "Ausblenden nach:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41 +msgid "Never" +msgstr "Nie" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32 +msgid "Fade effect:" +msgstr "Ausblendeeffekt:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33 +msgid "EF^None" +msgstr "keiner" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35 +msgid "Slide" +msgstr "Schieben" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37 +msgid "Alpha" +msgstr "Alpha" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40 +msgid "Weapon icons:" +msgstr "Waffensymbole:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43 +msgid "Show weapon ID as:" +msgstr "Waffen-ID zeigen als:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44 +msgid "SHOWAS^None" +msgstr "nichts" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45 +msgid "Number" +msgstr "Zahl" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46 +msgid "Bind" +msgstr "Taste" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49 +msgid "Show Accuracy" +msgstr "Trefferquote zeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50 +msgid "Show Ammo" +msgstr "Munition zeigen" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53 +msgid "Ammo bar color:" +msgstr "Muntionsleistenfarbe:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59 +msgid "Ammo bar alpha:" +msgstr "Munitionsleistenalpha:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4 +msgid "Panel HUD Setup" +msgstr "HUD-Konfiguration" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21 +msgid "Panel background defaults:" +msgstr "Panel-Standardhintergrund:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:609 +#: qcsrc/menu/xonotic/util.qc:625 qcsrc/menu/xonotic/util.qc:642 +msgid "Disable" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:614 +msgid "Color:" +msgstr "Farbe:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:622 +msgid "Border size:" +msgstr "Rahmengröße:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89 +msgid "Team color:" +msgstr "Teamfarbe:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:648 +msgid "Test team color in configure mode" +msgstr "Teamfarbe bei Konfiguration testen" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:651 +msgid "Padding:" +msgstr "Abstand:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68 +msgid "HUD Dock:" +msgstr "HUD-Dock:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70 +msgid "DOCK^Disabled" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71 +msgid "DOCK^Small" +msgstr "Klein" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72 +msgid "DOCK^Medium" +msgstr "Mittel" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73 +msgid "DOCK^Large" +msgstr "Groß" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96 +msgid "Grid settings:" +msgstr "Gitter:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99 +msgid "Snap panels to grid" +msgstr "Panels am Gitter ausrichten" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102 +msgid "Grid size:" +msgstr "Gitterweite:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103 +msgid "X:" +msgstr "X:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109 +msgid "Y:" +msgstr "Y:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117 +msgid "Exit setup" +msgstr "Verlassen" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:4 +msgid "Multiplayer" +msgstr "Mehrspieler" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:18 +msgid "Servers" +msgstr "Server" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:19 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5 +msgid "Create" +msgstr "Starten" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:20 +msgid "Demos" +msgstr "Demos" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5 +msgid "Player Setup" +msgstr "Spieler-Einstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35 +msgid "Game type:" +msgstr "Spieltyp" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47 +msgid "Match settings:" +msgstr "Spieleinstellungen:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50 +msgid "Time limit:" +msgstr "Zeitlimit:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62 +msgid "Use map specified default" +msgstr "Standardwert der Map verwenden" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164 +msgid "Point limit:" +msgstr "Punktelimit" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65 +msgid "Player slots:" +msgstr "Spielerplätze:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68 +msgid "Number of bots:" +msgstr "Anzahl Bots:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72 +msgid "Bot skill:" +msgstr "Spielstärke:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75 +msgid "Botlike" +msgstr "Bots halt" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76 +msgid "Beginner" +msgstr "Anfänger" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77 +msgid "You will win" +msgstr "Gewinnst schon" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78 +msgid "You can win" +msgstr "Kannst gewinnen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79 +msgid "You might win" +msgstr "Könntest gewinnen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80 +msgid "Advanced" +msgstr "Fortgeschritten" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81 +msgid "Expert" +msgstr "Experte" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82 +msgid "Pro" +msgstr "Profi" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83 +msgid "Assassin" +msgstr "Mörder" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84 +msgid "Unhuman" +msgstr "Übermenschlich" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85 +msgid "Godlike" +msgstr "Gottgleich" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89 +msgid "Mutators..." +msgstr "Mutators..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:84 +msgid "Advanced settings..." +msgstr "Erweiterte Einstellungen..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105 +msgid "Map list:" +msgstr "Mapliste:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111 +msgid "Select all" +msgstr "Alle auswählen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114 +msgid "Select none" +msgstr "Keine auswählen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120 +msgid "Start Multiplayer!" +msgstr "Starten!" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155 +msgid "Capture limit:" +msgstr "Capture-Limit:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159 +msgid "Lives:" +msgstr "Leben:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160 +msgid "Laps:" +msgstr "Runden:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161 +msgid "Goals:" +msgstr "Tore:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165 +msgid "Frag limit:" +msgstr "Punktelimit:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6 +msgid "Advanced server settings" +msgstr "Erweiterte Servereinstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25 +msgid "Game settings:" +msgstr "Spieleinstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28 +msgid "Allow spectating" +msgstr "Zuschauer erlauben" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31 +msgid "Spawn shield:" +msgstr "Startschutz:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36 +msgid "Game speed:" +msgstr "Spieltempo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40 +msgid "Teamplay settings:" +msgstr "Teamplay-Einstellungen:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43 +msgid "Friendly fire scale:" +msgstr "Eigenbeschuss-Faktor:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47 +msgid "Virtual friendly fire (effect only)" +msgstr "Virtueller Eigenbeschuss (nur Effekt)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50 +msgid "Friendly fire penalty:" +msgstr "Strafe für Eigenbeschuss:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54 +msgid "Virtual penalty (effect only)" +msgstr "Virtuelle Strafe (nur Effekt)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57 +msgid "Teams:" +msgstr "Teams:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66 +msgid "Map voting:" +msgstr "Map-Abstimmung:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68 +msgid "No voting" +msgstr "Keine Abstimmung" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69 +msgid "2 choices" +msgstr "2 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70 +msgid "3 choices" +msgstr "3 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71 +msgid "4 choices" +msgstr "4 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72 +msgid "5 choices" +msgstr "5 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73 +msgid "6 choices" +msgstr "6 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74 +msgid "7 choices" +msgstr "7 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75 +msgid "8 choices" +msgstr "8 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76 +msgid "9 choices" +msgstr "9 Optionen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79 +msgid "Simple majority wins vcall" +msgstr "Einfache Mehrheit gewinnt vcall" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5 +msgid "Map Information" +msgstr "Map-Information" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "Full item placement" +msgstr "mit Waffen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "MinstaGib only" +msgstr "nur MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78 +msgid "Title:" +msgstr "Titel:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84 +msgid "Author:" +msgstr "Autor:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90 +msgid "Features:" +msgstr "Features:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95 +msgid "Game types:" +msgstr "Spieltyp:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:308 +msgid "Close" +msgstr "Schließen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122 +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46 +msgid "Play" +msgstr "Start" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7 +msgid "Mutators" +msgstr "Mutators" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33 +msgid "All Weapons Arena" +msgstr "Alle-Waffen-Arena" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35 +msgid "Most Weapons Arena" +msgstr "Viele-Waffen-Arena" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56 +#, c-format +msgid "%s Arena" +msgstr "%s-Arena" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167 +msgid "Dodging" +msgstr "Ausweichen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250 +msgid "MinstaGib" +msgstr "MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253 +msgid "NIX" +msgstr "NIX" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205 +msgid "Rocket Flying" +msgstr "Raketen-Fliegen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264 +msgid "No start weapons" +msgstr "Ohne Waffen starten" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189 +msgid "Low gravity" +msgstr "Wenig Schwerkraft" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170 +msgid "Cloaked" +msgstr "Tarnung" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84 +msgid "Hook" +msgstr "Enterhaken" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173 +msgid "Midair" +msgstr "in der Luft" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176 +msgid "Vampire" +msgstr "Vampir" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208 +msgid "Piñata" +msgstr "Piñata" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211 +msgid "Weapons stay" +msgstr "Waffen bleiben" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180 +msgid "Blood loss" +msgstr "Blutverlust" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202 +msgid "Jet pack" +msgstr "Jetpack" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98 +msgid "MUT^None" +msgstr "keiner" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164 +msgid "Gameplay mutators:" +msgstr "Spielmechanik-Mutators:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196 +msgid "Weapon & item mutators:" +msgstr "Waffen/Gegenstände-Mutators:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199 +msgid "Grappling hook" +msgstr "Enterhaken" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215 +msgid "Weapon arenas:" +msgstr "Waffen-Arenen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218 +msgid "Regular (no arena)" +msgstr "Normal (keine Arena)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256 +msgid "with laser" +msgstr "mit Laser" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247 +msgid "Special arenas:" +msgstr "Spezielle Arenen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260 +msgid "Most weapons" +msgstr "Viele Waffen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4 +msgid "Demo" +msgstr "Demo" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28 +msgid "Record demos while playing" +msgstr "Demo beim Spielen aufnehmen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28 +msgid "Filter:" +msgstr "Filter:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29 +#: qcsrc/menu/xonotic/dialog_settings_input.c:41 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24 +msgid "Clear" +msgstr "Löschen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43 +msgid "Timedemo" +msgstr "Timedemo" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4 +msgid "Join" +msgstr "Verbinden" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36 +msgid "SRVS^Empty" +msgstr "leer" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40 +msgid "SRVS^Full" +msgstr "voll" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44 +msgid "Pause" +msgstr "Pause" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56 +msgid "Address:" +msgstr "Adresse:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:65 +msgid "Info..." +msgstr "Info..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:311 +msgid "Join!" +msgstr "Verbinden!" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5 +msgid "Server Information" +msgstr "Server-Information" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:177 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193 +msgid "N/A" +msgstr "-" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:151 +#, c-format +msgid "%d/%d" +msgstr "%d/%d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +#, c-format +msgid "%d modified settings" +msgstr "%d veränderte Einstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +msgid "Official settings" +msgstr "Offizielle Einstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:191 +msgid "N/A (can't connect)" +msgstr "- (nicht kompatibel)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199 +msgid "not supported (can't connect)" +msgstr "nicht unterstützt (nicht kompatibel)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:201 +msgid "not supported (won't encrypt)" +msgstr "nicht untersützt (nicht aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205 +msgid "supported (will encrypt)" +msgstr "unterstützt (aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207 +msgid "supported (won't encrypt)" +msgstr "unterstützt (nicht aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211 +msgid "requested (will encrypt)" +msgstr "erwünscht (aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213 +msgid "requested (won't encrypt)" +msgstr "erwünscht (nicht aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217 +msgid "required (can't connect)" +msgstr "notwendig (nicht kompatibel)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219 +msgid "required (will encrypt)" +msgstr "notwendig (aktiv)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:263 +msgid "Players:" +msgstr "Spieler:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:248 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38 +msgid "Type:" +msgstr "Typ:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:253 +msgid "Map:" +msgstr "Map:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:258 +msgid "Gameplay:" +msgstr "Spielregeln:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:268 +msgid "Bots:" +msgstr "Bots:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:273 +msgid "Mod:" +msgstr "Mod:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:278 +msgid "Version:" +msgstr "Version:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:283 +msgid "Ping:" +msgstr "Ping:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289 +msgid "CA:" +msgstr "CA:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295 +msgid "Key:" +msgstr "Schlüssel:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301 +msgid "Encryption:" +msgstr "Krypto:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63 +msgid "Model:" +msgstr "Modell:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88 +msgid "Field of view:" +msgstr "Sichtfeld:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92 +msgid "View bobbing:" +msgstr "Sicht-Wackeln:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96 +msgid "Zoom factor:" +msgstr "Vergrößerungsfaktor:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100 +msgid "Zoom speed:" +msgstr "Vergrößerungsgeschwindigkeit:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103 +msgid "Weapon settings..." +msgstr "Waffeneinstellungen..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110 +msgid "Crosshair:" +msgstr "Fadenkreuz:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143 +msgid "Per weapon" +msgstr "pro Waffe" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130 +msgid "Crosshair size:" +msgstr "Größe:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134 +msgid "Crosshair alpha:" +msgstr "Alpha:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138 +msgid "Crosshair color:" +msgstr "Farbe:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:145 +msgid "Enable center dot" +msgstr "Punkt in der Mitte aktivieren" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148 +msgid "Size:" +msgstr "Größe:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:155 +msgid "Hit test:" +msgstr "Treffer-Test:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:156 +msgid "HTST^None" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:157 +msgid "TrueAim" +msgstr "TrueAim" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158 +msgid "Enemies" +msgstr "Gegner" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161 +msgid "Waypoints setup..." +msgstr "Wegpunkt-Einstellungen..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:167 +msgid "Enter HUD editor" +msgstr "HUD-Editor starten" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174 +msgid "Force models:" +msgstr "Modell erzwingen:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175 +msgid "MDL^None" +msgstr "keine" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176 +msgid "MDL^Custom" +msgstr "inoffizielle" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177 +msgid "MDL^All" +msgstr "alle" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:179 +msgid "Disable gore effects" +msgstr "Gewalteffekte deaktivieren" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:181 +msgid "Gibs:" +msgstr "Fleischteile:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:183 +msgid "GIBS^None" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184 +msgid "GIBS^Few" +msgstr "Wenige" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185 +msgid "GIBS^Many" +msgstr "Einige" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186 +msgid "GIBS^Lots" +msgstr "Viele" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:190 +msgid "Damage splash:" +msgstr "Schadenseffekt:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:194 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:178 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:193 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:30 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:41 +#: qcsrc/menu/xonotic/dialog_settings_video.c:106 +msgid "Apply immediately" +msgstr "Sofort anwenden" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5 +msgid "Waypoints" +msgstr "Wegpunkte" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23 +msgid "Waypoint settings:" +msgstr "Wegpunkt-Einstellungen:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:26 +msgid "Show base waypoints" +msgstr "Basis-Wegpunkte anzeigen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29 +msgid "Waypoint scale:" +msgstr "Wegpunkt-Skalierung:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34 +msgid "Waypoint alpha:" +msgstr "Wegpunkt-Alpha:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:39 +msgid "Show names:" +msgstr "Namen anzeigen:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:42 +msgid "Teammates" +msgstr "Mitspieler" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:43 +msgid "All players" +msgstr "Alle Spieler" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6 +msgid "Weapon settings" +msgstr "Waffeneinstellungen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29 +msgid "Weapon priority list:" +msgstr "Waffenreihenfolge" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34 +msgid "Up" +msgstr "Hoch" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37 +msgid "Down" +msgstr "Runter" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41 +msgid "Use priority list for weapon cycling" +msgstr "Waffenreihenfolge für Mausrad verwenden" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43 +msgid "Auto switch weapons on pickup" +msgstr "Automatisch auf beste Waffe wechseln" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45 +msgid "Draw 1st person weapon model" +msgstr "Waffe in 3D anzeigen" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48 +msgid "Left align" +msgstr "Links" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50 +msgid "Right align" +msgstr "Rechts" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53 +msgid "Flip view horizontally" +msgstr "3D-Ansicht spiegeln" + +#: qcsrc/menu/xonotic/dialog_news.c:4 +msgid "News" +msgstr "Nachrichten" + +#: qcsrc/menu/xonotic/dialog_news.c:18 +msgid "http://www.xonotic.org/team/blog/" +msgstr "http://www.xonotic.org/team/blog/" + +#: qcsrc/menu/xonotic/dialog_quit.c:4 +msgid "Quit" +msgstr "Beenden" + +#: qcsrc/menu/xonotic/dialog_quit.c:17 +msgid "Are you sure you want to quit?" +msgstr "Wollen Sie wirklich das Spiel beenden?" + +#: qcsrc/menu/xonotic/dialog_quit.c:20 +msgid "Yes" +msgstr "Ja" + +#: qcsrc/menu/xonotic/dialog_quit.c:21 +msgid "No" +msgstr "Nein" + +#: qcsrc/menu/xonotic/dialog_settings.c:4 +msgid "Settings" +msgstr "Einstellungen" + +#: qcsrc/menu/xonotic/dialog_settings.c:18 +#: qcsrc/menu/xonotic/dialog_settings_input.c:4 +msgid "Input" +msgstr "Eingabe" + +#: qcsrc/menu/xonotic/dialog_settings.c:19 +#: qcsrc/menu/xonotic/dialog_settings_video.c:4 +msgid "Video" +msgstr "Grafik" + +#: qcsrc/menu/xonotic/dialog_settings.c:20 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:4 +msgid "Effects" +msgstr "Effekte" + +#: qcsrc/menu/xonotic/dialog_settings.c:21 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:4 +msgid "Audio" +msgstr "Ton" + +#: qcsrc/menu/xonotic/dialog_settings.c:22 +#: qcsrc/menu/xonotic/dialog_settings_network.c:4 +msgid "Network" +msgstr "Netzwerk" + +#: qcsrc/menu/xonotic/dialog_settings.c:23 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:4 +msgid "Misc" +msgstr "Sonstiges" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:27 +msgid "Master:" +msgstr "Master:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:33 +msgid "Music:" +msgstr "Musik:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:40 +msgid "VOL^Ambient:" +msgstr "Umgebung:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:48 +msgid "Info:" +msgstr "Info:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:57 +msgid "Items:" +msgstr "Gegenstände:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:65 +msgid "Pain:" +msgstr "Schmerz:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:73 +msgid "Player:" +msgstr "Spieler:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:81 +msgid "Shots:" +msgstr "Schüsse:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:88 +msgid "Voice:" +msgstr "Stimme:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:96 +msgid "Weapons:" +msgstr "Waffen:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:103 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:161 +msgid "Frequency:" +msgstr "Frequenz:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:105 +msgid "8 kHz" +msgstr "8 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:106 +msgid "11.025 kHz" +msgstr "11,025 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:107 +msgid "16 kHz" +msgstr "16 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:108 +msgid "22.05 kHz" +msgstr "22,05 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:109 +msgid "24 kHz" +msgstr "24 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:110 +msgid "32 kHz" +msgstr "32 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:111 +msgid "44.1 kHz" +msgstr "44,1 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:112 +msgid "48 kHz" +msgstr "48 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:115 +msgid "Channels:" +msgstr "Kanäle" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:117 +msgid "Mono" +msgstr "Mono" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:118 +msgid "Stereo" +msgstr "Stereo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:119 +msgid "2.1" +msgstr "2.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:120 +msgid "4" +msgstr "4" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:121 +msgid "5" +msgstr "5" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:122 +msgid "5.1" +msgstr "5.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:123 +msgid "6.1" +msgstr "6.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:124 +msgid "7.1" +msgstr "7.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:128 +msgid "Swap Stereo" +msgstr "Stereokanäle tauschen" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:132 +msgid "Headphone friendly mode" +msgstr "Kopfhörer-Modus" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:136 +msgid "Spatial voices:" +msgstr "Räumliche Sprachnachrichten:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:137 +msgid "VOCS^None" +msgstr "keine" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:138 +msgid "VOCS^Taunts" +msgstr "nur Spott" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:139 +msgid "VOCS^All" +msgstr "alle" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:142 +msgid "Taunt range:" +msgstr "Spott-Radius:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:145 +msgid "RNG^Very short" +msgstr "Sehr klein" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:146 +msgid "RNG^Short" +msgstr "Klein" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:147 +msgid "RNG^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:148 +msgid "RNG^Long" +msgstr "Groß" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:149 +msgid "RNG^Full" +msgstr "Sehr groß" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:156 +msgid "Automatic taunts" +msgstr "Automatischer Spott" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:165 +msgid "Time warning:" +msgstr "Zeitwarnung:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:167 +msgid "WRN^None" +msgstr "keine" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:168 +msgid "1 minute" +msgstr "1 Minute" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:169 +msgid "5 minutes" +msgstr "5 Minuten" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:170 +msgid "WRN^Both" +msgstr "beide" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:173 +msgid "Hit indicator" +msgstr "Treffer-Indikator" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:175 +msgid "Menu sounds" +msgstr "Menü-Sounds" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:38 +msgid "Quality preset:" +msgstr "Qualitäts-Vorgabe:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:41 +msgid "PRE^OMG!" +msgstr "OMG!" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:42 +msgid "PRE^Low" +msgstr "Niedrig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:43 +msgid "PRE^Medium" +msgstr "Mittel" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:44 +msgid "PRE^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:45 +msgid "PRE^High" +msgstr "Hoch" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:46 +msgid "PRE^Ultra" +msgstr "Ultra" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:48 +msgid "PRE^Ultimate" +msgstr "Ultimativ" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:52 +msgid "Geometry detail:" +msgstr "Geometrie-Detail:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:54 +msgid "DET^Lowest" +msgstr "Sehr niedrig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:55 +msgid "DET^Low" +msgstr "Niedrig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:56 +msgid "DET^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:57 +msgid "DET^Good" +msgstr "Gut" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:58 +msgid "DET^Best" +msgstr "Sehr gut" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:59 +msgid "DET^Insane" +msgstr "Wahnsinnig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:62 +msgid "Antialiasing:" +msgstr "Kantenglättung:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:64 +msgid "AA^Disabled" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:65 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:103 +msgid "2x" +msgstr "2x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:66 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:104 +msgid "4x" +msgstr "4x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:70 +msgid "Texture resolution:" +msgstr "Texturauflösung:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:73 +msgid "RES^Leet" +msgstr "Leet" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:74 +msgid "RES^Lowest" +msgstr "Sehr niedrig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:75 +msgid "RES^Low" +msgstr "Niedrig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:76 +msgid "RES^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:77 +msgid "RES^Good" +msgstr "Gut" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:78 +msgid "RES^Best" +msgstr "Sehr gut" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:91 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:94 +msgid "Avoid lossy texture compression" +msgstr "Texturkompression vermeiden" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:100 +msgid "Anisotropy:" +msgstr "Anisotropie:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:102 +msgid "ANISO^Disabled" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:105 +msgid "8x" +msgstr "8x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:106 +msgid "16x" +msgstr "16x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:110 +msgid "Particle quality:" +msgstr "Partikelqualität:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:113 +msgid "Particle distance:" +msgstr "Partikeldistanz:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:117 +msgid "Decals" +msgstr "Einschusslöcher" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:120 +msgid "Distance:" +msgstr "Distanz:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:126 +msgid "Time:" +msgstr "Zeit:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:132 +msgid "Use lightmaps" +msgstr "Lightmaps verwenden" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:133 +msgid "Deluxe mapping" +msgstr "Deluxemapping" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:135 +msgid "Gloss" +msgstr "Glanz" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:138 +msgid "Offset mapping" +msgstr "Offsetmapping" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:140 +msgid "Relief mapping" +msgstr "Reliefmapping" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:143 +msgid "Reflections:" +msgstr "Reflexionen:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:146 +msgid "Blurred" +msgstr "Schwammig" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:147 +msgid "REFL^Good" +msgstr "Gut" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:148 +msgid "Sharp" +msgstr "Scharf" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:153 +msgid "Show surfaces" +msgstr "Oberflächen anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:155 +msgid "No dynamic lighting" +msgstr "Kein dynamisches Licht" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:157 +msgid "Flash blend approximation" +msgstr "Flash-Blend-Näherung" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:159 +msgid "Realtime dynamic lighting" +msgstr "Dynamisches Licht in Echtzeit" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:160 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:164 +msgid "Shadows" +msgstr "Schatten" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:163 +msgid "Realtime world lighting" +msgstr "Map-Licht in Echtzeit" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:168 +msgid "Use normal maps" +msgstr "Normalmaps verwenden" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:170 +msgid "Soft shadows" +msgstr "Weiche Schatten" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:173 +msgid "Coronas" +msgstr "Koronas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:175 +msgid "Bloom" +msgstr "Überstrahlung" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:177 +msgid "High Dynamic Range (HDR)" +msgstr "Lichtdynamik (HDR)" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:181 +msgid "Motion blur:" +msgstr "Bewegungsunschärfe:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:187 +msgid "Damage blur:" +msgstr "Schadensunschärfe:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:26 +msgid "Key bindings:" +msgstr "Tastenbelegung:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:31 +msgid "Change key..." +msgstr "Taste ändern..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:35 +msgid "Edit..." +msgstr "Bearbeiten..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:46 +msgid "Sensitivity:" +msgstr "Empfindlichkeit:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:49 +msgid "UI mouse speed:" +msgstr "Mausgeschwindigkeit:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:52 +msgid "Mouse filter" +msgstr "Mausfilterung" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:54 +msgid "Invert mouse" +msgstr "Höhe invertieren" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:57 +#: qcsrc/menu/xonotic/dialog_settings_input.c:59 +msgid "Use joystick input" +msgstr "Joystick verwenden" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:62 +#: qcsrc/menu/xonotic/dialog_settings_input.c:64 +msgid "Turn off OS mouse acceleration" +msgstr "Mausbeschleunigung deaktivieren" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:66 +msgid "\"enter console\" also closes" +msgstr "\"Konsole öffnen\" schließt auch" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5 +msgid "User defined key bind" +msgstr "Benutzerdefinierte Tastenbelegung" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42 +msgid "Command when pressed:" +msgstr "Befehl beim Drücken:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45 +msgid "Command when released:" +msgstr "Befehl beim Loslassen:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48 +msgid "Save" +msgstr "Speichern" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51 +msgid "Cancel" +msgstr "Abbrechen" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:26 +msgid "Menu skins:" +msgstr "Menü-Skins:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:47 +msgid "Show current time" +msgstr "Uhrzeit anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:49 +msgid "Show current date" +msgstr "Datum anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:51 +msgid "Show frames per second" +msgstr "Frames pro Sekunde anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:53 +msgid "Speedometer" +msgstr "Tachometer" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:56 +msgid "qu/s (hidden)" +msgstr "qu/s (ohne Einheit)" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:58 +msgid "qu/s" +msgstr "qu/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:60 +msgid "m/s" +msgstr "m/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:64 +msgid "km/h" +msgstr "km/h" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:66 +msgid "mph" +msgstr "mph" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:68 +msgid "knots" +msgstr "Knoten" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:71 +msgid "Show accelerometer" +msgstr "Akzelerometer anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:74 +msgid "Accelerometer scale:" +msgstr "Akzelerometer-Skalierung:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:80 +msgid "Minimize input latency" +msgstr "Eingabelatenz minimieren" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5 +msgid "Advanced settings" +msgstr "Erweiterte Einstellungen" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23 +msgid "Cvar filter:" +msgstr "Cvar-Filter:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34 +msgid "Setting:" +msgstr "Einstellung:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42 +msgid "Value:" +msgstr "Wert:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:54 +msgid "Description:" +msgstr "Beschreibung:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:26 +msgid "Client-side movement prediction" +msgstr "Client-seitige Bewegungssimulation" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:30 +msgid "Show netgraph" +msgstr "Netgraph anzeigen" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:33 +msgid "Network speed:" +msgstr "Netzwerkgeschwindigkeit:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:35 +msgid "56k" +msgstr "Modem" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:36 +msgid "ISDN" +msgstr "ISDN" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:37 +msgid "Slow ADSL" +msgstr "ADSL (langsam)" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:38 +msgid "Fast ADSL" +msgstr "ADSL (schnell)" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:39 +msgid "Broadband" +msgstr "Breitband" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:42 +msgid "Input packets/s:" +msgstr "Eingabe-Pakete/s:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:46 +msgid "HTTP downloads:" +msgstr "HTTP-Downloads:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:49 +msgid "Downloads:" +msgstr "Downloads:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:53 +msgid "Speed (kB/s):" +msgstr "Geschwindigkeit (kB/s):" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:57 +msgid "Client UDP port:" +msgstr "Client-UDP-Port:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:26 +msgid "Resolution:" +msgstr "Auflösung:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:29 +msgid "Font/UI size:" +msgstr "Schriftgröße:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:31 +msgid "SZ^Unreadable" +msgstr "Unleserlich" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:32 +msgid "SZ^Tiny" +msgstr "Winzig" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:33 +msgid "SZ^Little" +msgstr "Klein" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:34 +msgid "SZ^Small" +msgstr "Klein" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:35 +msgid "SZ^Medium" +msgstr "Mittel" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:36 +msgid "SZ^Large" +msgstr "Groß" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:37 +msgid "SZ^Huge" +msgstr "Riesig" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:38 +msgid "SZ^Gigantic" +msgstr "Gigantisch" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:39 +msgid "SZ^Colossal" +msgstr "Kolossal" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:42 +msgid "Color depth:" +msgstr "Farbtiefe:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:45 +msgid "Full screen" +msgstr "Vollbild" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:46 +msgid "Vertical Synchronization" +msgstr "Vertikale Synchronisation" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:49 +msgid "Use OpenGL 2.0 shaders (GLSL)" +msgstr "OpenGL 2.0 Shaders verwenden (GLSL)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:52 +msgid "Use Occlusion Queries" +msgstr "Occlusion Queries verwenden" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:55 +msgid "Vertex Buffer Objects (VBOs)" +msgstr "Vertex Buffer Objects (VBOs)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:58 +msgid "VBO^Off" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:59 +msgid "Vertices, some Tris (compatible)" +msgstr "Ecken, einige Dreiecke (kompatibel)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:62 +msgid "Vertices" +msgstr "Ecken" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:63 +msgid "Vertices and Triangles" +msgstr "Ecken und Dreiecke" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:65 +msgid "Depth first:" +msgstr "Tiefe zuerst rendern:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:67 +msgid "DF^Disabled" +msgstr "Aus" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:68 +msgid "DF^World" +msgstr "nur Map" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:69 +msgid "DF^All" +msgstr "Immer" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:73 +msgid "Disable multithreaded OpenGL" +msgstr "OpenGL-Multithreading deaktivieren" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:75 +msgid "Wait for GPU to finish each frame" +msgstr "Bei jedem Frame auf die Grafikkarte warten" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:78 +msgid "Brightness:" +msgstr "Helligkeit:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:81 +msgid "Contrast:" +msgstr "Kontrast:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:84 +msgid "Gamma:" +msgstr "Gamma:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:87 +msgid "Contrast boost:" +msgstr "Kontrasterhöhung:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:90 +msgid "Saturation:" +msgstr "Sättigung:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:95 +msgid "Use GLSL to handle color control" +msgstr "GLSL für Farbregelung verwenden" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:99 +msgid "LIT^Ambient:" +msgstr "Umgebungslicht:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:102 +msgid "Intensity:" +msgstr "Lichtstärke:" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:4 +msgid "Singleplayer" +msgstr "Einzelspieler" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:59 +msgid "Instant action! (random map with bots)" +msgstr "Sofortstart! (zufällige Map mit Bots)" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:80 +msgid "Start Singleplayer!" +msgstr "Spiel starten!" + +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4 +msgid "Winner" +msgstr "Gewinner" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:5 +msgid "Team Selection" +msgstr "Teamauswahl" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:41 +msgid "join 'best' team (auto-select)" +msgstr "'bestem' Team beitreten" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:45 +msgid "red" +msgstr "rot" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:46 +msgid "blue" +msgstr "blau" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:47 +msgid "yellow" +msgstr "gelb" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:48 +msgid "pink" +msgstr "pink" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:51 +msgid "spectate" +msgstr "zuschauen" + +#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38 +msgid "Do not press this button again!" +msgstr "Bitte nicht nochmal diesen Knopf drücken!" + +#: qcsrc/menu/xonotic/maplist.c:278 +msgid "" +"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n" +msgstr "" +"Hä? Kann diese Map nicht starten (m ist NULL). Mapliste wird neu gefiltert.\n" + +#: qcsrc/menu/xonotic/maplist.c:286 +#, c-format +msgid "%s's Xonotic Server" +msgstr "%ss Xonotic-Server" + +#: qcsrc/menu/xonotic/maplist.c:291 +msgid "" +"Huh? Can't play this (invalid game type). Refiltering so this won't happen " +"again.\n" +msgstr "" +"Hä? Kann diese Map nicht starten (ungültiger Spieltyp). Mapliste wird neu " +"gefiltert.\n" + +#: qcsrc/menu/xonotic/playermodel.c:174 +msgid "" +msgstr "" + +#: qcsrc/menu/xonotic/serverlist.c:357 +msgid "Remove" +msgstr "Vergessen" + +#: qcsrc/menu/xonotic/serverlist.c:359 +msgid "Bookmark" +msgstr "Speichern" + +#: qcsrc/menu/xonotic/serverlist.c:515 +msgid "Ping" +msgstr "Ping" + +#: qcsrc/menu/xonotic/serverlist.c:516 +msgid "Host name" +msgstr "Servername" + +#: qcsrc/menu/xonotic/serverlist.c:517 +msgid "Map" +msgstr "Map" + +#: qcsrc/menu/xonotic/serverlist.c:518 +msgid "Type" +msgstr "Typ" + +#: qcsrc/menu/xonotic/serverlist.c:519 +msgid "Players" +msgstr "Spieler" + +#: qcsrc/menu/xonotic/skinlist.c:105 +msgid "" +msgstr "<TITEL>" + +#: qcsrc/menu/xonotic/skinlist.c:106 +msgid "<AUTHOR>" +msgstr "<AUTOR>" + +#: qcsrc/menu/xonotic/skinlist.c:163 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: qcsrc/menu/xonotic/slider_decibels.c:50 +msgid "VOL^OFF" +msgstr "AUS" + +#: qcsrc/menu/xonotic/slider_decibels.c:52 +msgid "VOL^MAX" +msgstr "MAX" + +#: qcsrc/menu/xonotic/slider_decibels.c:53 +#, c-format +msgid "%s dB" +msgstr "%s dB" + +#: qcsrc/menu/xonotic/slider_resolution.c:65 +#, c-format +msgid "%dx%d" +msgstr "%dx%d" + +#: qcsrc/menu/xonotic/util.qc:270 +#, c-format +msgid "Received HTTP request data for an invalid id %d.\n" +msgstr "HTTP-Antwort für ungültige ID %d erhalten.\n" + +#: qcsrc/menu/xonotic/util.qc:285 +#, c-format +msgid "error receiving update notification: status is %d\n" +msgstr "Fehler beim Empfang von Update-Information (Status: %d)\n" + +#: qcsrc/menu/xonotic/util.qc:290 +msgid "error: received HTML instead of an update notification\n" +msgstr "Fehler: HTML statt Update-Information erhalten\n" + +#: qcsrc/menu/xonotic/util.qc:295 +msgid "error: received carriage returns from update notification server\n" +msgstr "Fehler: Carriage-Returns in Update-Information enthalten\n" + +#: qcsrc/menu/xonotic/util.qc:316 +#, c-format +msgid "" +"Update can be downloaded at:\n" +"%s\n" +msgstr "" +"Das Update kann bei:\n" +"%s\n" +"heruntergeladen werden.\n" + +#: qcsrc/menu/xonotic/util.qc:337 +msgid "Autogenerating mapinfo for newly added maps..." +msgstr "Automatische Generierung von mapinfo-Dateien..." + +#: qcsrc/menu/xonotic/util.qc:432 +#, c-format +msgid "Update to %s now!" +msgstr "Jetzt auf %s updaten!" + +#: qcsrc/menu/xonotic/util.qc:509 +msgid "" +"^1ERROR: Texture compression is required but not supported.\n" +"^1Expect visual problems.\n" +msgstr "" +"^1FEHLER: Texturekompression ist notwendig aber nicht unterstützt.\n" +"^1Darstellungsprobleme sind zu erwarten.\n" + +#: qcsrc/menu/xonotic/util.qc:531 +msgid "Arena" +msgstr "Arena" + +#: qcsrc/menu/xonotic/util.qc:532 +msgid "Assault" +msgstr "Assault" + +#: qcsrc/menu/xonotic/util.qc:533 +msgid "Capture The Flag" +msgstr "Capture The Flag" + +#: qcsrc/menu/xonotic/util.qc:534 +msgid "Clan Arena" +msgstr "Clan Arena" + +#: qcsrc/menu/xonotic/util.qc:535 +msgid "Deathmatch" +msgstr "Deathmatch" + +#: qcsrc/menu/xonotic/util.qc:536 +msgid "Domination" +msgstr "Domination" + +#: qcsrc/menu/xonotic/util.qc:537 +msgid "Freeze Tag" +msgstr "Freeze Tag" + +#: qcsrc/menu/xonotic/util.qc:538 +msgid "Keepaway" +msgstr "Keepaway" + +#: qcsrc/menu/xonotic/util.qc:539 +msgid "Key Hunt" +msgstr "Key Hunt" + +#: qcsrc/menu/xonotic/util.qc:540 +msgid "Last Man Standing" +msgstr "Last Man Standing" + +#: qcsrc/menu/xonotic/util.qc:541 +msgid "Nexball" +msgstr "Nexball" + +#: qcsrc/menu/xonotic/util.qc:542 +msgid "Onslaught" +msgstr "Onslaught" + +#: qcsrc/menu/xonotic/util.qc:543 +msgid "Race" +msgstr "Race" + +#: qcsrc/menu/xonotic/util.qc:544 +msgid "Race CTS" +msgstr "Race CTS" + +#: qcsrc/menu/xonotic/util.qc:545 +msgid "Runematch" +msgstr "Runematch" + +#: qcsrc/menu/xonotic/util.qc:546 +msgid "Team Deathmatch" +msgstr "Team Deathmatch" + +#: qcsrc/menu/xonotic/util.qc:565 +#, c-format +msgid "@!#%'n Tuba Throwing" +msgstr "@!#%'n Tuba-Werfen" + +#: qcsrc/menu/xonotic/util.qc:606 +msgid "Background:" +msgstr "Hintergrund:" + +#: qcsrc/menu/xonotic/util.qc:608 qcsrc/menu/xonotic/util.qc:624 +#: qcsrc/menu/xonotic/util.qc:633 qcsrc/menu/xonotic/util.qc:641 +#: qcsrc/menu/xonotic/util.qc:653 +msgid "Default" +msgstr "Standard" + +#: qcsrc/menu/xonotic/util.qc:619 +msgid "Use default" +msgstr "Standard verwenden" + +#: qcsrc/menu/xonotic/util.qc:639 +msgid "Team Color:" +msgstr "Teamfarbe:" + +#: qcsrc/menu/xonotic/util.qh:49 +msgid "Enable panel" +msgstr "Panel aktivieren" diff --git a/menu.dat.fr.po b/menu.dat.fr.po new file mode 100644 index 0000000000..7ee6148969 --- /dev/null +++ b/menu.dat.fr.po @@ -0,0 +1,2408 @@ +# Xonotic French Translation. +# Copyright (C) 2011 +# This file is distributed under the same license as the PACKAGE package. +# Calinou <hugohachel@gmail.com>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: Xonotic 0.1preview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-01-18 21:36+0100\n" +"PO-Revision-Date: 2011-01-18 11:53+0100\t\n" +"Last-Translator: Calinou <hugohachel@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: fr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: qcsrc/menu/gamecommand.qc:47 +#, c-format +msgid "error: status is %d\n" +msgstr "erreur: le status est %d\n" + +#: qcsrc/menu/gamecommand.qc:65 +msgid "Usage: menu_cmd command..., where possible commands are:\n" +msgstr "Utilisation: menu_cmd commande..., les commandes possibles sont:\n" + +#: qcsrc/menu/gamecommand.qc:66 +msgid " sync - reloads all cvars on the current menu page\n" +msgstr " sync - recharge toutes les variables sur la page actuelle\n" + +#: qcsrc/menu/gamecommand.qc:67 +msgid " directmenu ITEM - select a menu item as main item\n" +msgstr "" +" directmenu OBJET - séléctionner un objet de menu comme objet principal\n" + +#: qcsrc/menu/gamecommand.qc:193 +msgid "error creating curl handle\n" +msgstr "erreur de création du curl handle" + +#: qcsrc/menu/gamecommand.qc:239 +msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n" +msgstr "" +"Commande invalide. Pour une liste des commandes supportées, tapez menu_cmd " +"help (dans la console).\n" + +#: qcsrc/menu/item/gecko.c:49 +msgid "Browser not initialized!" +msgstr "Navigateur non initialisé !" + +#: qcsrc/menu/item/label.c:63 +#, c-format +msgid "NOTE: label text %s too wide for label, condensed by factor %f\n" +msgstr "" +"REMARQUE: le texte label %s est trop large pour un label, condensé par le " +"facteur %f\n" + +#: qcsrc/menu/item/listbox.c:300 +#, c-format +msgid "Item %d" +msgstr "Objet %d" + +#: qcsrc/menu/item/slider.c:64 +#, c-format +msgid "%d (%s)" +msgstr "%d (%s)" + +#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31 +msgid "custom" +msgstr "personalisé" + +#: qcsrc/menu/menu.qc:29 +#, c-format +msgid "^4MQC Build information: %s\n" +msgstr "^4MQC Build information : %s (français)\n" + +#: qcsrc/menu/xonotic/campaign.c:284 +#: qcsrc/menu/xonotic/dialog_singleplayer.c:66 +msgid "???" +msgstr "???" + +#: qcsrc/menu/xonotic/campaign.c:285 +#, c-format +msgid "Level %d: %s" +msgstr "Niveau %d: %s" + +#: qcsrc/menu/xonotic/cvarlist.c:84 +msgid "will be saved to config.cfg" +msgstr "sera sauvegardé" + +#: qcsrc/menu/xonotic/cvarlist.c:86 +msgid "will not be saved" +msgstr "ne sera pas sauvegardé" + +#: qcsrc/menu/xonotic/cvarlist.c:88 +msgid "private" +msgstr "privé" + +#: qcsrc/menu/xonotic/cvarlist.c:90 +msgid "engine setting" +msgstr "paramètre moteur" + +#: qcsrc/menu/xonotic/cvarlist.c:92 +msgid "read only" +msgstr "lecture seule" + +#: qcsrc/menu/xonotic/dialog_credits.c:5 +msgid "Credits" +msgstr "Crédits" + +#: qcsrc/menu/xonotic/dialog_credits.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:46 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:59 +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21 +msgid "OK" +msgstr "OK" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:4 +msgid "Welcome" +msgstr "Bienvenue" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:33 +msgid "" +"Welcome to Xonotic, please select your language preference and enter your " +"player name to get started. You can change these options later through the " +"menu system." +msgstr "" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:38 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:35 +msgid "Text language:" +msgstr "Langue écran:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:47 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40 +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39 +msgid "Name:" +msgstr "Pseudonyme:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:69 +msgid "Save settings" +msgstr "Sauvegarder" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4 +msgid "Ammo Panel" +msgstr "Panneau de munitions" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22 +msgid "Ammunition display:" +msgstr "Affichage munitions:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25 +msgid "Show only current ammo type" +msgstr "Ne montrer que le type de munition actuel" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40 +msgid "Left" +msgstr "Gauche" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41 +msgid "Right" +msgstr "Droite" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4 +msgid "Chat Panel" +msgstr "Panneau de Chat" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22 +msgid "Chat entries:" +msgstr "Entrées Chat:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25 +msgid "Chat size:" +msgstr "Taille du Chat:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29 +msgid "Chat lifetime:" +msgstr "Durée du Chat:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33 +msgid "Chat beep sound" +msgstr "Sons Chat:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4 +msgid "Engine Info Panel" +msgstr "Panneau Info Moteur" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22 +msgid "Engine info:" +msgstr "Info Moteur:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25 +msgid "Use an averaging algorithm for fps" +msgstr "Utiliser un algorithme pour calculer les FPS" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4 +msgid "Health/Armor Panel" +msgstr "Panneau Santé/Armure" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22 +msgid "Enable status bar" +msgstr "Activer jauges" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24 +msgid "Status bar alignment:" +msgstr "Alignement jauges:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42 +msgid "Inward" +msgstr "Intérieur" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43 +msgid "Outward" +msgstr "Extérieur" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37 +msgid "Icon alignment:" +msgstr "Alignement icônes:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45 +msgid "Flip health and armor positions" +msgstr "Échanger positions Santé/Armure" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4 +msgid "Info Messages Panel" +msgstr "Panneau d'Information" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22 +msgid "Info messages:" +msgstr "Messages d'Info:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25 +msgid "Flip align" +msgstr "Échanger alignement" + +#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4 +msgid "Mod Icons Panel" +msgstr "Panneau d'Icônes de Mode" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4 +msgid "Notification Panel" +msgstr "Panneau de Notifications" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22 +msgid "Notifications:" +msgstr "Notifications:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25 +msgid "Also print notifications to the console" +msgstr "Montrer notifications sur la console" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28 +msgid "Flip notify order" +msgstr "Inverser l'ordre de notification" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31 +msgid "Entry lifetime:" +msgstr "Durée d'une entrée:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35 +msgid "Entry fadetime:" +msgstr "Temps d'effacement d'une entrée:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4 +msgid "Powerups Panel" +msgstr "Panneau des Pouvoirs" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45 +msgid "Flip strength and shield positions" +msgstr "Échanger les positions Force/Bouclier" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4 +msgid "Pressed Keys Panel" +msgstr "Panneau Touches Pressées" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21 +msgid "Panel disabled" +msgstr "Panneau désactivé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22 +msgid "Panel enabled when spectating" +msgstr "Paneau activé en spectateur" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23 +msgid "Panel always enabled" +msgstr "Paneau toujours activé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30 +msgid "Forced aspect:" +msgstr "Aspect forcé:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4 +msgid "Race Timer Panel" +msgstr "Chronomètre Course" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4 +msgid "Radar Panel" +msgstr "Panneau Mini-carte" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22 +msgid "Panel enabled in teamgames" +msgstr "Panneau activé en Équipe" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29 +msgid "Radar:" +msgstr "Mini-carte:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151 +#: qcsrc/menu/xonotic/util.qc:631 +msgid "Alpha:" +msgstr "Opacité:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36 +msgid "Rotation:" +msgstr "Rotation:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38 +msgid "Forward" +msgstr "Direction marche" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39 +msgid "West" +msgstr "Ouest" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40 +msgid "South" +msgstr "Sud" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41 +msgid "East" +msgstr "Est" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42 +msgid "North" +msgstr "Nord" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46 +msgid "Scale:" +msgstr "Échelle:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50 +msgid "Zoom mode:" +msgstr "Mode de Zoom:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52 +msgid "Zoomed in" +msgstr "Zoomé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53 +msgid "Zoomed out" +msgstr "Dézoomé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54 +msgid "Always zoomed" +msgstr "Toujours Zoomé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55 +msgid "Never zoomed" +msgstr "Toujours Dézoomé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4 +msgid "Score Panel" +msgstr "Tableau des scores" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4 +msgid "Timer Panel" +msgstr "Chronomètre" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22 +msgid "Timer:" +msgstr "Chronomètre:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25 +msgid "Show elapsed time" +msgstr "Montrer temps passé" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4 +msgid "Vote Panel" +msgstr "Panneau de Vote" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22 +msgid "Alpha after voting:" +msgstr "Opacité après vote:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4 +msgid "Weapons Panel" +msgstr "Panneau d'armes" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24 +msgid "Fade out after:" +msgstr "Effacer après:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41 +msgid "Never" +msgstr "Jamais" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32 +msgid "Fade effect:" +msgstr "Effet d'effacement:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33 +msgid "EF^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35 +msgid "Slide" +msgstr "Glisse" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37 +msgid "Alpha" +msgstr "Opacité" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40 +msgid "Weapon icons:" +msgstr "Icônes d'armes:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43 +msgid "Show weapon ID as:" +msgstr "Montrer le numéro d'arme:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44 +msgid "SHOWAS^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45 +msgid "Number" +msgstr "Numéro" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46 +msgid "Bind" +msgstr "Touche" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49 +msgid "Show Accuracy" +msgstr "Monter la précision" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50 +msgid "Show Ammo" +msgstr "Montrer barre de monitions" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53 +msgid "Ammo bar color:" +msgstr "Couleur barre de munitions:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59 +msgid "Ammo bar alpha:" +msgstr "Opacité barre de munitions:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4 +msgid "Panel HUD Setup" +msgstr "Configuration Interface" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21 +msgid "Panel background defaults:" +msgstr "Fond du Panneau par défaut:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:609 +#: qcsrc/menu/xonotic/util.qc:625 qcsrc/menu/xonotic/util.qc:642 +msgid "Disable" +msgstr "Désactiver" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:614 +msgid "Color:" +msgstr "Couleur:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:622 +msgid "Border size:" +msgstr "Taille des bords:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89 +msgid "Team color:" +msgstr "Couleur d'équipe:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:648 +msgid "Test team color in configure mode" +msgstr "Affichier la couleur d'équipe en mode configuration" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:651 +msgid "Padding:" +msgstr "Ajustement:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68 +msgid "HUD Dock:" +msgstr "Contour interface:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70 +msgid "DOCK^Disabled" +msgstr "Désactivé" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71 +msgid "DOCK^Small" +msgstr "Petit" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72 +msgid "DOCK^Medium" +msgstr "Moyen" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73 +msgid "DOCK^Large" +msgstr "Grand" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96 +msgid "Grid settings:" +msgstr "Paramètres grille:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99 +msgid "Snap panels to grid" +msgstr "Coller paneaux sur la grille" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102 +msgid "Grid size:" +msgstr "Taille de grille:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103 +msgid "X:" +msgstr "X:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109 +msgid "Y:" +msgstr "Y:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117 +msgid "Exit setup" +msgstr "Sauvegarder et quitter" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:4 +msgid "Multiplayer" +msgstr "Multijoueur" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:18 +msgid "Servers" +msgstr "Serveurs" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:19 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5 +msgid "Create" +msgstr "Créer" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:20 +msgid "Demos" +msgstr "Vidéos" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5 +msgid "Player Setup" +msgstr "Paramètres Joueur" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35 +msgid "Game type:" +msgstr "Mode de jeu:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47 +msgid "Match settings:" +msgstr "Paramètres match:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50 +msgid "Time limit:" +msgstr "Limite de temps:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62 +msgid "Use map specified default" +msgstr "Utiliser le paramètre de carte" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164 +msgid "Point limit:" +msgstr "Limite de points:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65 +msgid "Player slots:" +msgstr "Nombre de joueurs max.:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68 +msgid "Number of bots:" +msgstr "Nombre de robots:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72 +msgid "Bot skill:" +msgstr "Difficulté robot:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75 +msgid "Botlike" +msgstr "Nul" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76 +msgid "Beginner" +msgstr "Jeu d'enfant" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77 +msgid "You will win" +msgstr "Très Facile" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78 +msgid "You can win" +msgstr "Facile" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79 +msgid "You might win" +msgstr "Assez Facile" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80 +msgid "Advanced" +msgstr "Avancé" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81 +msgid "Expert" +msgstr "Expert" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82 +msgid "Pro" +msgstr "Professionel" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83 +msgid "Assassin" +msgstr "Assassin" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84 +msgid "Unhuman" +msgstr "Inhumain" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85 +msgid "Godlike" +msgstr "Dieu" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89 +msgid "Mutators..." +msgstr "Spéciales..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:84 +msgid "Advanced settings..." +msgstr "Paramètres avancés..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105 +msgid "Map list:" +msgstr "Liste de cartes:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111 +msgid "Select all" +msgstr "Tout séléctionner" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114 +msgid "Select none" +msgstr "Ne rien séléctionner" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120 +msgid "Start Multiplayer!" +msgstr "Démarrer!" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155 +msgid "Capture limit:" +msgstr "Limite de captures:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159 +msgid "Lives:" +msgstr "Vies:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160 +msgid "Laps:" +msgstr "Tours:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161 +msgid "Goals:" +msgstr "Buts:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165 +msgid "Frag limit:" +msgstr "Limite de tués:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6 +msgid "Advanced server settings" +msgstr "Paramètres serveur avancés" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25 +msgid "Game settings:" +msgstr "Paramètres jeu" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28 +msgid "Allow spectating" +msgstr "Autoriser les spectateurs" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31 +msgid "Spawn shield:" +msgstr "Bouclier de départ:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36 +msgid "Game speed:" +msgstr "Vitesse de jeu:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40 +msgid "Teamplay settings:" +msgstr "Paramètres Jeu d'équipe:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43 +msgid "Friendly fire scale:" +msgstr "Facteur Dégâts équipiers:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47 +msgid "Virtual friendly fire (effect only)" +msgstr "Dégâts équipiers virtuels (seulement effets)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50 +msgid "Friendly fire penalty:" +msgstr "Pénalité Dégâts équipiers:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54 +msgid "Virtual penalty (effect only)" +msgstr "Pénalité Dégâts équipiers virtuelle (seulement effets)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57 +msgid "Teams:" +msgstr "Équipes:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66 +msgid "Map voting:" +msgstr "Vote carte suivante:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68 +msgid "No voting" +msgstr "Pas de vote" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69 +msgid "2 choices" +msgstr "2 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70 +msgid "3 choices" +msgstr "3 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71 +msgid "4 choices" +msgstr "4 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72 +msgid "5 choices" +msgstr "5 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73 +msgid "6 choices" +msgstr "6 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74 +msgid "7 choices" +msgstr "7 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75 +msgid "8 choices" +msgstr "8 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76 +msgid "9 choices" +msgstr "9 choix" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79 +msgid "Simple majority wins vcall" +msgstr "Majorité 51% pour gagner le vote" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5 +msgid "Map Information" +msgstr "Information carte:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "Full item placement" +msgstr "Objets présents" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "MinstaGib only" +msgstr "MinstaGib seulement" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78 +msgid "Title:" +msgstr "Titre:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84 +msgid "Author:" +msgstr "Auteur:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90 +msgid "Features:" +msgstr "Fonctions:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95 +msgid "Game types:" +msgstr "Modes de jeux:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:308 +msgid "Close" +msgstr "Fermer" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122 +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46 +msgid "Play" +msgstr "Jouer" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7 +msgid "Mutators" +msgstr "Spéciales" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33 +msgid "All Weapons Arena" +msgstr "Toutes les armes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35 +msgid "Most Weapons Arena" +msgstr "Beaucoup d'armes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56 +#, c-format +msgid "%s Arena" +msgstr "Arène de %s" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167 +msgid "Dodging" +msgstr "Esquives" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250 +msgid "MinstaGib" +msgstr "MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253 +msgid "NIX" +msgstr "NIX" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205 +msgid "Rocket Flying" +msgstr "Roquettes volantes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264 +msgid "No start weapons" +msgstr "Pas d'armes au début" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189 +msgid "Low gravity" +msgstr "Gravité basse" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170 +msgid "Cloaked" +msgstr "Joueurs transparents" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84 +msgid "Hook" +msgstr "Grappin" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173 +msgid "Midair" +msgstr "Midair" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176 +msgid "Vampire" +msgstr "Vampire" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208 +msgid "Piñata" +msgstr "Piñata" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211 +msgid "Weapons stay" +msgstr "Armes infinies" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180 +msgid "Blood loss" +msgstr "Perte de sang" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202 +msgid "Jet pack" +msgstr "Jet pack" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98 +msgid "MUT^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164 +msgid "Gameplay mutators:" +msgstr "Spéciales Mode de jeu:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196 +msgid "Weapon & item mutators:" +msgstr "Spéciales Armes et Objets:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199 +msgid "Grappling hook" +msgstr "Grappin" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215 +msgid "Weapon arenas:" +msgstr "Arènes d'armes:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218 +msgid "Regular (no arena)" +msgstr "Régulier (pas d'Arène)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256 +msgid "with laser" +msgstr "avec le laser" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247 +msgid "Special arenas:" +msgstr "Arènes Spéciales:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260 +msgid "Most weapons" +msgstr "Beaucoup d'armes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4 +msgid "Demo" +msgstr "Vidéo" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28 +msgid "Record demos while playing" +msgstr "Auto-enregistrement des Vidéos" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28 +msgid "Filter:" +msgstr "Recherche:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29 +#: qcsrc/menu/xonotic/dialog_settings_input.c:41 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24 +msgid "Clear" +msgstr "Effacer" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43 +msgid "Timedemo" +msgstr "Test Performance" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4 +msgid "Join" +msgstr "Joindre" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36 +msgid "SRVS^Empty" +msgstr "Vide" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40 +msgid "SRVS^Full" +msgstr "Tout" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44 +msgid "Pause" +msgstr "Pause" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56 +msgid "Address:" +msgstr "Adresse:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:65 +msgid "Info..." +msgstr "Info..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:311 +msgid "Join!" +msgstr "Joindre !" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5 +msgid "Server Information" +msgstr "Information Serveur" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:177 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193 +msgid "N/A" +msgstr "N/A" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:151 +#, c-format +msgid "%d/%d" +msgstr "%d/%d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +#, c-format +msgid "%d modified settings" +msgstr "paramètres modifiés: %d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +msgid "Official settings" +msgstr "Paramètres Officiels" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:191 +msgid "N/A (can't connect)" +msgstr "N/A (ne peut pas se connecter)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199 +msgid "not supported (can't connect)" +msgstr "non supporté (ne peut pas se connecter)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:201 +msgid "not supported (won't encrypt)" +msgstr "non supporté (pas de cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205 +msgid "supported (will encrypt)" +msgstr "supporté (cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207 +msgid "supported (won't encrypt)" +msgstr "supporté (pas de cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211 +msgid "requested (will encrypt)" +msgstr "démandé (cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213 +msgid "requested (won't encrypt)" +msgstr "démandé (pas de cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217 +msgid "required (can't connect)" +msgstr "nécessaire (ne peut pas se connecter)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219 +msgid "required (will encrypt)" +msgstr "nécessaire (cryptage)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:263 +msgid "Players:" +msgstr "Joueurs:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:248 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38 +msgid "Type:" +msgstr "Type:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:253 +msgid "Map:" +msgstr "Carte:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:258 +msgid "Gameplay:" +msgstr "Mode:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:268 +msgid "Bots:" +msgstr "Robots:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:273 +msgid "Mod:" +msgstr "Modification:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:278 +msgid "Version:" +msgstr "Version:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:283 +msgid "Ping:" +msgstr "Latence:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289 +msgid "CA:" +msgstr "CA:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295 +msgid "Key:" +msgstr "Clé:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301 +msgid "Encryption:" +msgstr "Cryptage:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63 +msgid "Model:" +msgstr "Personnage:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88 +msgid "Field of view:" +msgstr "Champ de vision:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92 +msgid "View bobbing:" +msgstr "Caméra marche:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96 +msgid "Zoom factor:" +msgstr "Facteur de Zoom:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100 +msgid "Zoom speed:" +msgstr "Vitesse de Zoom:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103 +msgid "Weapon settings..." +msgstr "Paramètres armes..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110 +msgid "Crosshair:" +msgstr "Viseur:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143 +msgid "Per weapon" +msgstr "Par arme" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130 +msgid "Crosshair size:" +msgstr "Taille viseur:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134 +msgid "Crosshair alpha:" +msgstr "Opacité viseur:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138 +msgid "Crosshair color:" +msgstr "Couleur viseur:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:145 +msgid "Enable center dot" +msgstr "Activer point central" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148 +msgid "Size:" +msgstr "Taille:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:155 +msgid "Hit test:" +msgstr "Détection toucher:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:156 +msgid "HTST^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:157 +msgid "TrueAim" +msgstr "TrueAim" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158 +msgid "Enemies" +msgstr "Enemis" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161 +msgid "Waypoints setup..." +msgstr "Paramètres Waypoints..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:167 +msgid "Enter HUD editor" +msgstr "Éditer l'interface" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174 +msgid "Force models:" +msgstr "Forcer personnages:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175 +msgid "MDL^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176 +msgid "MDL^Custom" +msgstr "Personnalisé" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177 +msgid "MDL^All" +msgstr "Tout" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:179 +msgid "Disable gore effects" +msgstr "Désactiver effets gore" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:181 +msgid "Gibs:" +msgstr "Gibs:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:183 +msgid "GIBS^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184 +msgid "GIBS^Few" +msgstr "Quelques" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185 +msgid "GIBS^Many" +msgstr "Plusieurs" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186 +msgid "GIBS^Lots" +msgstr "Beaucoup" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:190 +msgid "Damage splash:" +msgstr "Effet santé faible:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:194 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:178 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:193 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:30 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:41 +#: qcsrc/menu/xonotic/dialog_settings_video.c:106 +msgid "Apply immediately" +msgstr "Appliquer maintenant" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5 +msgid "Waypoints" +msgstr "Waypoints" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23 +msgid "Waypoint settings:" +msgstr "Paramètres Waypoint (flèches 3D sur la carte):" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:26 +msgid "Show base waypoints" +msgstr "Montrer les Waypoints de drapeau" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29 +msgid "Waypoint scale:" +msgstr "Taille des Waypoints:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34 +msgid "Waypoint alpha:" +msgstr "Opacité Waypoints:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:39 +msgid "Show names:" +msgstr "Montrer les noms:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:42 +msgid "Teammates" +msgstr "Équipiers" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:43 +msgid "All players" +msgstr "Tous les joueurs" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6 +msgid "Weapon settings" +msgstr "Paramètres d'armes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29 +msgid "Weapon priority list:" +msgstr "Liste de priorité armes:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34 +msgid "Up" +msgstr "Haut" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37 +msgid "Down" +msgstr "Bas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41 +msgid "Use priority list for weapon cycling" +msgstr "Utiliser la liste de priorité pour changer les armes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43 +msgid "Auto switch weapons on pickup" +msgstr "Changer d'arme en prenant une arme meilleure" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45 +msgid "Draw 1st person weapon model" +msgstr "Afficher l'arme à la première personne" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48 +msgid "Left align" +msgstr "À gauche" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50 +msgid "Right align" +msgstr "À droite" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53 +msgid "Flip view horizontally" +msgstr "Vue Mirroir" + +#: qcsrc/menu/xonotic/dialog_news.c:4 +msgid "News" +msgstr "News" + +#: qcsrc/menu/xonotic/dialog_news.c:18 +msgid "http://www.xonotic.org/team/blog/" +msgstr "http://www.xonotic.org/team/blog/" + +#: qcsrc/menu/xonotic/dialog_quit.c:4 +msgid "Quit" +msgstr "Quitter" + +#: qcsrc/menu/xonotic/dialog_quit.c:17 +msgid "Are you sure you want to quit?" +msgstr "Voulez-vous vraiment quitter ?" + +#: qcsrc/menu/xonotic/dialog_quit.c:20 +msgid "Yes" +msgstr "Oui" + +#: qcsrc/menu/xonotic/dialog_quit.c:21 +msgid "No" +msgstr "Non" + +#: qcsrc/menu/xonotic/dialog_settings.c:4 +msgid "Settings" +msgstr "Préférences" + +#: qcsrc/menu/xonotic/dialog_settings.c:18 +#: qcsrc/menu/xonotic/dialog_settings_input.c:4 +msgid "Input" +msgstr "Contrôles" + +#: qcsrc/menu/xonotic/dialog_settings.c:19 +#: qcsrc/menu/xonotic/dialog_settings_video.c:4 +msgid "Video" +msgstr "Vidéo" + +#: qcsrc/menu/xonotic/dialog_settings.c:20 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:4 +msgid "Effects" +msgstr "Graphiques" + +#: qcsrc/menu/xonotic/dialog_settings.c:21 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:4 +msgid "Audio" +msgstr "Audio" + +#: qcsrc/menu/xonotic/dialog_settings.c:22 +#: qcsrc/menu/xonotic/dialog_settings_network.c:4 +msgid "Network" +msgstr "Réseau" + +#: qcsrc/menu/xonotic/dialog_settings.c:23 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:4 +msgid "Misc" +msgstr "Autres" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:27 +msgid "Master:" +msgstr "Général:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:33 +msgid "Music:" +msgstr "Musique:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:40 +msgid "VOL^Ambient:" +msgstr "Ambience:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:48 +msgid "Info:" +msgstr "Information:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:57 +msgid "Items:" +msgstr "Objets:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:65 +msgid "Pain:" +msgstr "Douleur:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:73 +msgid "Player:" +msgstr "Joueur:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:81 +msgid "Shots:" +msgstr "Tirs:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:88 +msgid "Voice:" +msgstr "Voix:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:96 +msgid "Weapons:" +msgstr "Armes:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:103 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:161 +msgid "Frequency:" +msgstr "Fréquence:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:105 +msgid "8 kHz" +msgstr "8 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:106 +msgid "11.025 kHz" +msgstr "11.025 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:107 +msgid "16 kHz" +msgstr "16 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:108 +msgid "22.05 kHz" +msgstr "22.05 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:109 +msgid "24 kHz" +msgstr "24 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:110 +msgid "32 kHz" +msgstr "32 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:111 +msgid "44.1 kHz" +msgstr "44.1 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:112 +msgid "48 kHz" +msgstr "48 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:115 +msgid "Channels:" +msgstr "Canaux:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:117 +msgid "Mono" +msgstr "Mono" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:118 +msgid "Stereo" +msgstr "Stéréo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:119 +msgid "2.1" +msgstr "2.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:120 +msgid "4" +msgstr "4" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:121 +msgid "5" +msgstr "5" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:122 +msgid "5.1" +msgstr "5.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:123 +msgid "6.1" +msgstr "6.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:124 +msgid "7.1" +msgstr "7.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:128 +msgid "Swap Stereo" +msgstr "Échanger les canaux Stéréo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:132 +msgid "Headphone friendly mode" +msgstr "Mode casque audio" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:136 +msgid "Spatial voices:" +msgstr "Voix personnages:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:137 +msgid "VOCS^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:138 +msgid "VOCS^Taunts" +msgstr "Voix" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:139 +msgid "VOCS^All" +msgstr "Tout" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:142 +msgid "Taunt range:" +msgstr "Distance voix:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:145 +msgid "RNG^Very short" +msgstr "Très court" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:146 +msgid "RNG^Short" +msgstr "Court" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:147 +msgid "RNG^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:148 +msgid "RNG^Long" +msgstr "Long" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:149 +msgid "RNG^Full" +msgstr "Tout" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:156 +msgid "Automatic taunts" +msgstr "Voix automatiques" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:165 +msgid "Time warning:" +msgstr "Avertissement temps:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:167 +msgid "WRN^None" +msgstr "Aucun" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:168 +msgid "1 minute" +msgstr "1 minute" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:169 +msgid "5 minutes" +msgstr "5 minutes" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:170 +msgid "WRN^Both" +msgstr "Les deux" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:173 +msgid "Hit indicator" +msgstr "Son tir réussi" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:175 +msgid "Menu sounds" +msgstr "Sons du menu" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:38 +msgid "Quality preset:" +msgstr "Qualité effets:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:41 +msgid "PRE^OMG!" +msgstr "OMG!" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:42 +msgid "PRE^Low" +msgstr "Bas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:43 +msgid "PRE^Medium" +msgstr "Moyen" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:44 +msgid "PRE^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:45 +msgid "PRE^High" +msgstr "Élevé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:46 +msgid "PRE^Ultra" +msgstr "Très Élevé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:48 +msgid "PRE^Ultimate" +msgstr "Ultime" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:52 +msgid "Geometry detail:" +msgstr "Détail géométrie:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:54 +msgid "DET^Lowest" +msgstr "Très Bas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:55 +msgid "DET^Low" +msgstr "Bas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:56 +msgid "DET^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:57 +msgid "DET^Good" +msgstr "Bon" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:58 +msgid "DET^Best" +msgstr "Élevé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:59 +msgid "DET^Insane" +msgstr "Extrême" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:62 +msgid "Antialiasing:" +msgstr "Anticrénelage:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:64 +msgid "AA^Disabled" +msgstr "Désactivé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:65 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:103 +msgid "2x" +msgstr "2x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:66 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:104 +msgid "4x" +msgstr "4x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:70 +msgid "Texture resolution:" +msgstr "Qualité textures:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:73 +msgid "RES^Leet" +msgstr "Leet" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:74 +msgid "RES^Lowest" +msgstr "Très Bas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:75 +msgid "RES^Low" +msgstr "Bas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:76 +msgid "RES^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:77 +msgid "RES^Good" +msgstr "Bon" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:78 +msgid "RES^Best" +msgstr "Élevé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:91 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:94 +msgid "Avoid lossy texture compression" +msgstr "Éviter la compression rapide" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:100 +msgid "Anisotropy:" +msgstr "Filtrage Anistrope:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:102 +msgid "ANISO^Disabled" +msgstr "Désactivé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:105 +msgid "8x" +msgstr "8x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:106 +msgid "16x" +msgstr "16x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:110 +msgid "Particle quality:" +msgstr "Qualité particules:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:113 +msgid "Particle distance:" +msgstr "Distance max. particules:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:117 +msgid "Decals" +msgstr "Marques impacts" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:120 +msgid "Distance:" +msgstr "Distance max.:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:126 +msgid "Time:" +msgstr "Temps:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:132 +msgid "Use lightmaps" +msgstr "Utiliser les lightmaps" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:133 +msgid "Deluxe mapping" +msgstr "Textures Deluxe" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:135 +msgid "Gloss" +msgstr "Brillance textures" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:138 +msgid "Offset mapping" +msgstr "Textures relief" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:140 +msgid "Relief mapping" +msgstr "Textures relief avancé" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:143 +msgid "Reflections:" +msgstr "Réflections:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:146 +msgid "Blurred" +msgstr "Flou" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:147 +msgid "REFL^Good" +msgstr "Bon" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:148 +msgid "Sharp" +msgstr "Net" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:153 +msgid "Show surfaces" +msgstr "Textures unies" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:155 +msgid "No dynamic lighting" +msgstr "Pas de lumières dynamiques" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:157 +msgid "Flash blend approximation" +msgstr "Lumières dynamiques rapides" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:159 +msgid "Realtime dynamic lighting" +msgstr "Lumières dynamiques en temps réel" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:160 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:164 +msgid "Shadows" +msgstr "Ombres" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:163 +msgid "Realtime world lighting" +msgstr "Lumières carte en temps réel" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:168 +msgid "Use normal maps" +msgstr "Lumières Deluxe" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:170 +msgid "Soft shadows" +msgstr "Ombres avancées" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:173 +msgid "Coronas" +msgstr "Brillance Lumière" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:175 +msgid "Bloom" +msgstr "Effets d'éblouissement" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:177 +msgid "High Dynamic Range (HDR)" +msgstr "High Dynamic Range (HDR)" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:181 +msgid "Motion blur:" +msgstr "Flou de vitesse:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:187 +msgid "Damage blur:" +msgstr "Flou de dégâts:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:26 +msgid "Key bindings:" +msgstr "Contrôles:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:31 +msgid "Change key..." +msgstr "Changer touche..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:35 +msgid "Edit..." +msgstr "Éditer..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:46 +msgid "Sensitivity:" +msgstr "Senstitivité:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:49 +msgid "UI mouse speed:" +msgstr "Vitesse souris menus:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:52 +msgid "Mouse filter" +msgstr "Filtre Souris" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:54 +msgid "Invert mouse" +msgstr "Inverser souris (axe Y)" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:57 +#: qcsrc/menu/xonotic/dialog_settings_input.c:59 +msgid "Use joystick input" +msgstr "Utiliser une manette" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:62 +#: qcsrc/menu/xonotic/dialog_settings_input.c:64 +msgid "Turn off OS mouse acceleration" +msgstr "Désactiver l'accélération souris de l'OS" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:66 +msgid "\"enter console\" also closes" +msgstr "\"ouvrir la console\" ferme aussi la console" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5 +msgid "User defined key bind" +msgstr "Touche d'éxécution:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42 +msgid "Command when pressed:" +msgstr "Commande quand appuyée:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45 +msgid "Command when released:" +msgstr "Commande quand relachée:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48 +msgid "Save" +msgstr "Sauvegarder" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51 +msgid "Cancel" +msgstr "Annuler" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:26 +msgid "Menu skins:" +msgstr "Apparences menu:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:47 +msgid "Show current time" +msgstr "Montrer l'heure" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:49 +msgid "Show current date" +msgstr "Montrer la date" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:51 +msgid "Show frames per second" +msgstr "Montrer les Images Par Seconde" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:53 +msgid "Speedometer" +msgstr "Speedomètre" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:56 +msgid "qu/s (hidden)" +msgstr "qu/s (caché)" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:58 +msgid "qu/s" +msgstr "qu/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:60 +msgid "m/s" +msgstr "m/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:64 +msgid "km/h" +msgstr "km/h" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:66 +msgid "mph" +msgstr "mph" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:68 +msgid "knots" +msgstr "noeuds" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:71 +msgid "Show accelerometer" +msgstr "Montrer l'accéléromètre" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:74 +msgid "Accelerometer scale:" +msgstr "Taille accéléromètre:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:80 +msgid "Minimize input latency" +msgstr "Minimiser la latence des contrôles" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5 +msgid "Advanced settings" +msgstr "Paramètres avancés" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23 +msgid "Cvar filter:" +msgstr "Recherche de commandes:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34 +msgid "Setting:" +msgstr "Paramètre:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42 +msgid "Value:" +msgstr "Valeur:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:54 +msgid "Description:" +msgstr "Description:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:26 +msgid "Client-side movement prediction" +msgstr "Prédiction des mouvements joueur" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:30 +msgid "Show netgraph" +msgstr "Montrer le netgraphe" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:33 +msgid "Network speed:" +msgstr "Vitesse réseau:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:35 +msgid "56k" +msgstr "56k" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:36 +msgid "ISDN" +msgstr "ISDN" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:37 +msgid "Slow ADSL" +msgstr "ADSL lent" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:38 +msgid "Fast ADSL" +msgstr "ADSL rapide" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:39 +msgid "Broadband" +msgstr "Câble/Fibre optique" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:42 +msgid "Input packets/s:" +msgstr "Paquets entrants/seconde:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:46 +msgid "HTTP downloads:" +msgstr "Téléchargements:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:49 +msgid "Downloads:" +msgstr "Téléchargements simultanés:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:53 +msgid "Speed (kB/s):" +msgstr "Vitesse (Ko/seconde):" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:57 +msgid "Client UDP port:" +msgstr "Port UDP client:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:26 +msgid "Resolution:" +msgstr "Résolution:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:29 +msgid "Font/UI size:" +msgstr "Taille typo:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:31 +msgid "SZ^Unreadable" +msgstr "Illisible" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:32 +msgid "SZ^Tiny" +msgstr "Minuscule" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:33 +msgid "SZ^Little" +msgstr "Très Petit" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:34 +msgid "SZ^Small" +msgstr "Petit" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:35 +msgid "SZ^Medium" +msgstr "Moyen" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:36 +msgid "SZ^Large" +msgstr "Grand" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:37 +msgid "SZ^Huge" +msgstr "Très Grand" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:38 +msgid "SZ^Gigantic" +msgstr "Géant" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:39 +msgid "SZ^Colossal" +msgstr "Gigantesque" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:42 +msgid "Color depth:" +msgstr "Profondeur de couleurs:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:45 +msgid "Full screen" +msgstr "Plein écran" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:46 +msgid "Vertical Synchronization" +msgstr "Syncronisation verticale" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:49 +msgid "Use OpenGL 2.0 shaders (GLSL)" +msgstr "Utiliser OpenGL 2.0 (GLSL)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:52 +msgid "Use Occlusion Queries" +msgstr "Utiliser l'Occlusion du rendu" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:55 +msgid "Vertex Buffer Objects (VBOs)" +msgstr "Objets en tampon mémoire (VBOs)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:58 +msgid "VBO^Off" +msgstr "Désactivé" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:59 +msgid "Vertices, some Tris (compatible)" +msgstr "Points, quelques Triangles (compatible)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:62 +msgid "Vertices" +msgstr "Points" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:63 +msgid "Vertices and Triangles" +msgstr "Points et Triangles" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:65 +msgid "Depth first:" +msgstr "Fixeur profondeur:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:67 +msgid "DF^Disabled" +msgstr "Désactivé" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:68 +msgid "DF^World" +msgstr "Carte" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:69 +msgid "DF^All" +msgstr "Tout" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:73 +msgid "Disable multithreaded OpenGL" +msgstr "Désactiver OpenGL multi-coeurs" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:75 +msgid "Wait for GPU to finish each frame" +msgstr "Attendre le GPU pour finir chaque trame" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:78 +msgid "Brightness:" +msgstr "Luminosité:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:81 +msgid "Contrast:" +msgstr "Contraste:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:84 +msgid "Gamma:" +msgstr "Gamma:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:87 +msgid "Contrast boost:" +msgstr "Amélioration contraste:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:90 +msgid "Saturation:" +msgstr "Saturation:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:95 +msgid "Use GLSL to handle color control" +msgstr "Utiliser GLSL pour gérer les couleurs" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:99 +msgid "LIT^Ambient:" +msgstr "Ambience:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:102 +msgid "Intensity:" +msgstr "Intensité:" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:4 +msgid "Singleplayer" +msgstr "Monojoueur" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:59 +msgid "Instant action! (random map with bots)" +msgstr "Instant action! (map aléatoire avec bots)" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:80 +msgid "Start Singleplayer!" +msgstr "Démarrer !" + +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4 +msgid "Winner" +msgstr "Gagné" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:5 +msgid "Team Selection" +msgstr "Séléction d'équipe" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:41 +msgid "join 'best' team (auto-select)" +msgstr "auto-séléction équipe (recommandé)" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:45 +msgid "red" +msgstr "rouge" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:46 +msgid "blue" +msgstr "bleu" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:47 +msgid "yellow" +msgstr "jaune" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:48 +msgid "pink" +msgstr "rose" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:51 +msgid "spectate" +msgstr "mode spectateur" + +#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38 +msgid "Do not press this button again!" +msgstr "N'appuyez plus sur ce bouton !" + +#: qcsrc/menu/xonotic/maplist.c:278 +msgid "" +"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n" +msgstr "" +"Euh? Ne peut pas être joué. Re-filtration pour éviter des nouveaux " +"problèmes.\n" + +#: qcsrc/menu/xonotic/maplist.c:286 +#, c-format +msgid "%s's Xonotic Server" +msgstr "%s's Xonotic Server" + +#: qcsrc/menu/xonotic/maplist.c:291 +msgid "" +"Huh? Can't play this (invalid game type). Refiltering so this won't happen " +"again.\n" +msgstr "" +"Euh? Ne peut pas être joué. Mode de jeu invalide. Re-filtration pour éviter " +"des nouveaux problèmes.\n" + +#: qcsrc/menu/xonotic/playermodel.c:174 +msgid "<no model found>" +msgstr "<modèle non trouvé>" + +#: qcsrc/menu/xonotic/serverlist.c:357 +msgid "Remove" +msgstr "Supprimer" + +#: qcsrc/menu/xonotic/serverlist.c:359 +msgid "Bookmark" +msgstr "Marque-page" + +#: qcsrc/menu/xonotic/serverlist.c:515 +msgid "Ping" +msgstr "Latence" + +#: qcsrc/menu/xonotic/serverlist.c:516 +msgid "Host name" +msgstr "Nom d'Hôte" + +#: qcsrc/menu/xonotic/serverlist.c:517 +msgid "Map" +msgstr "Carte" + +#: qcsrc/menu/xonotic/serverlist.c:518 +msgid "Type" +msgstr "Mode" + +#: qcsrc/menu/xonotic/serverlist.c:519 +msgid "Players" +msgstr "Joueurs" + +#: qcsrc/menu/xonotic/skinlist.c:105 +msgid "<TITLE>" +msgstr "<TITRE>" + +#: qcsrc/menu/xonotic/skinlist.c:106 +msgid "<AUTHOR>" +msgstr "<AUTEUR>" + +#: qcsrc/menu/xonotic/skinlist.c:163 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: qcsrc/menu/xonotic/slider_decibels.c:50 +msgid "VOL^OFF" +msgstr "OFF" + +#: qcsrc/menu/xonotic/slider_decibels.c:52 +msgid "VOL^MAX" +msgstr "MAX" + +#: qcsrc/menu/xonotic/slider_decibels.c:53 +#, c-format +msgid "%s dB" +msgstr "%s dB" + +#: qcsrc/menu/xonotic/slider_resolution.c:65 +#, c-format +msgid "%dx%d" +msgstr "%dx%d" + +#: qcsrc/menu/xonotic/util.qc:270 +#, c-format +msgid "Received HTTP request data for an invalid id %d.\n" +msgstr "A reçu la demande HTTP d'ID invalide %d.\n" + +#: qcsrc/menu/xonotic/util.qc:285 +#, c-format +msgid "error receiving update notification: status is %d\n" +msgstr "error pour recevoir la notification de mise à jour: le statut est %d\n" + +#: qcsrc/menu/xonotic/util.qc:290 +msgid "error: received HTML instead of an update notification\n" +msgstr "" +"erreur: a reçu un fichier HTML et non une notification de mise à jour\n" + +#: qcsrc/menu/xonotic/util.qc:295 +msgid "error: received carriage returns from update notification server\n" +msgstr "" +"erreur: a reçu un message erroné depuis le serveur de notifications de M.A." +"J.\n" + +#: qcsrc/menu/xonotic/util.qc:316 +#, c-format +msgid "" +"Update can be downloaded at:\n" +"%s\n" +msgstr "" +"La mise à jour peut être téléchargée ici:\n" +"%s\n" + +#: qcsrc/menu/xonotic/util.qc:337 +msgid "Autogenerating mapinfo for newly added maps..." +msgstr "Génération des mapinfo pour les nouvelles cartes ajoutées..." + +#: qcsrc/menu/xonotic/util.qc:432 +#, c-format +msgid "Update to %s now!" +msgstr "Mettez à jour vers %s maintenant !" + +#: qcsrc/menu/xonotic/util.qc:509 +msgid "" +"^1ERROR: Texture compression is required but not supported.\n" +"^1Expect visual problems.\n" +msgstr "" +"^1ERROR: La texture de compression est nécessaire mais non supportée.\n" +"^1Attendez vous à voir des problèmes de rendu.\n" + +#: qcsrc/menu/xonotic/util.qc:531 +msgid "Arena" +msgstr "Arène Duel" + +#: qcsrc/menu/xonotic/util.qc:532 +msgid "Assault" +msgstr "Assaut" + +#: qcsrc/menu/xonotic/util.qc:533 +msgid "Capture The Flag" +msgstr "Capture Du Drapeau" + +#: qcsrc/menu/xonotic/util.qc:534 +msgid "Clan Arena" +msgstr "Arène Équipes" + +#: qcsrc/menu/xonotic/util.qc:535 +msgid "Deathmatch" +msgstr "Match à Mort" + +#: qcsrc/menu/xonotic/util.qc:536 +msgid "Domination" +msgstr "Domination" + +#: qcsrc/menu/xonotic/util.qc:537 +msgid "Freeze Tag" +msgstr "Freeze Tag" + +#: qcsrc/menu/xonotic/util.qc:538 +msgid "Keepaway" +msgstr "Cache-Cache Du Drapeau" + +#: qcsrc/menu/xonotic/util.qc:539 +msgid "Key Hunt" +msgstr "Chasse aux Clés" + +#: qcsrc/menu/xonotic/util.qc:540 +msgid "Last Man Standing" +msgstr "Dernier Survivant" + +#: qcsrc/menu/xonotic/util.qc:541 +msgid "Nexball" +msgstr "Nexball" + +#: qcsrc/menu/xonotic/util.qc:542 +msgid "Onslaught" +msgstr "Onslaught" + +#: qcsrc/menu/xonotic/util.qc:543 +msgid "Race" +msgstr "Course" + +#: qcsrc/menu/xonotic/util.qc:544 +msgid "Race CTS" +msgstr "Course CTS" + +#: qcsrc/menu/xonotic/util.qc:545 +msgid "Runematch" +msgstr "Runematch" + +#: qcsrc/menu/xonotic/util.qc:546 +msgid "Team Deathmatch" +msgstr "Match à Mort Équipe" + +#: qcsrc/menu/xonotic/util.qc:565 +#, c-format +msgid "@!#%'n Tuba Throwing" +msgstr "Lancer de @!#%'n Tuba" + +#: qcsrc/menu/xonotic/util.qc:606 +msgid "Background:" +msgstr "Arrière-plan:" + +#: qcsrc/menu/xonotic/util.qc:608 qcsrc/menu/xonotic/util.qc:624 +#: qcsrc/menu/xonotic/util.qc:633 qcsrc/menu/xonotic/util.qc:641 +#: qcsrc/menu/xonotic/util.qc:653 +msgid "Default" +msgstr "Par défaut" + +#: qcsrc/menu/xonotic/util.qc:619 +msgid "Use default" +msgstr "Par défaut" + +#: qcsrc/menu/xonotic/util.qc:639 +msgid "Team Color:" +msgstr "Couleur d'équipe:" + +#: qcsrc/menu/xonotic/util.qh:49 +msgid "Enable panel" +msgstr "Activer ce panneau" diff --git a/menu.dat.pt.po b/menu.dat.pt.po new file mode 100644 index 0000000000..024f676258 --- /dev/null +++ b/menu.dat.pt.po @@ -0,0 +1,2477 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: Xontoic 0.1preview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-01-18 21:36+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Ricardo 'Hellgardia' Silva <ricardo.mccs@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: Portuguese\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: qcsrc/menu/gamecommand.qc:47 +#, c-format +msgid "error: status is %d\n" +msgstr "erro: o estado é &d\n" + +#: qcsrc/menu/gamecommand.qc:65 +msgid "Usage: menu_cmd command..., where possible commands are:\n" +msgstr "Uso: menu_cmd command..., onde estão possíveis comandos:\n" + +#: qcsrc/menu/gamecommand.qc:66 +msgid " sync - reloads all cvars on the current menu page\n" +msgstr " sync - recarrega todas as cvars no menu actual" + +#: qcsrc/menu/gamecommand.qc:67 +msgid " directmenu ITEM - select a menu item as main item\n" +msgstr " directmenu ITEM - selecciona um item do menu como o principal\n" + +#: qcsrc/menu/gamecommand.qc:193 +msgid "error creating curl handle\n" +msgstr "erro a criar curl handle" + +#: qcsrc/menu/gamecommand.qc:239 +msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n" +msgstr "" +"Comando inválido. Para uma lista de comandos suportados, escrever menu_cmd " +"help.\n" + +#: qcsrc/menu/item/gecko.c:49 +msgid "Browser not initialized!" +msgstr "Browser não inicializado!" + +#: qcsrc/menu/item/label.c:63 +#, c-format +msgid "NOTE: label text %s too wide for label, condensed by factor %f\n" +msgstr "" +"NOTA: marca texto %s demasiado larga para etiqueta, condensada por factor " +"%f\n" + +#: qcsrc/menu/item/listbox.c:300 +#, c-format +msgid "Item %d" +msgstr "Item %d" + +#: qcsrc/menu/item/slider.c:64 +#, c-format +msgid "%d (%s)" +msgstr "%d (%s)" + +#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31 +msgid "custom" +msgstr "modificado" + +#: qcsrc/menu/menu.qc:29 +#, c-format +msgid "^4MQC Build information: %s\n" +msgstr "^4MQ Informação da Build %s\n" + +#: qcsrc/menu/xonotic/campaign.c:284 +#: qcsrc/menu/xonotic/dialog_singleplayer.c:66 +msgid "???" +msgstr "???" + +#: qcsrc/menu/xonotic/campaign.c:285 +#, c-format +msgid "Level %d: %s" +msgstr "Nível %d: %s" + +#: qcsrc/menu/xonotic/cvarlist.c:84 +msgid "will be saved to config.cfg" +msgstr "vai ser guardado para config.cfg" + +#: qcsrc/menu/xonotic/cvarlist.c:86 +msgid "will not be saved" +msgstr "não será guardado" + +#: qcsrc/menu/xonotic/cvarlist.c:88 +msgid "private" +msgstr "privado" + +#: qcsrc/menu/xonotic/cvarlist.c:90 +msgid "engine setting" +msgstr "definição do motor" + +#: qcsrc/menu/xonotic/cvarlist.c:92 +msgid "read only" +msgstr "apenas ler" + +#: qcsrc/menu/xonotic/dialog_credits.c:5 +msgid "Credits" +msgstr "Créditos" + +#: qcsrc/menu/xonotic/dialog_credits.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:46 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:59 +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21 +msgid "OK" +msgstr "OK" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:4 +msgid "Welcome" +msgstr "Bem-Vindo" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:33 +msgid "" +"Welcome to Xonotic, please select your language preference and enter your " +"player name to get started. You can change these options later through the " +"menu system." +msgstr "" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:38 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:35 +msgid "Text language:" +msgstr "Linguagem do texto:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:47 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40 +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39 +msgid "Name:" +msgstr "Nome:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:69 +msgid "Save settings" +msgstr "Guardar Definições" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4 +msgid "Ammo Panel" +msgstr "Painel de munições" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22 +msgid "Ammunition display:" +msgstr "Mostrar munições:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25 +msgid "Show only current ammo type" +msgstr "Mostrar apenas o tipo de munição actual" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40 +msgid "Left" +msgstr "Esquerda" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41 +msgid "Right" +msgstr "Direita" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4 +msgid "Chat Panel" +msgstr "Painel de Conversa" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22 +msgid "Chat entries:" +msgstr "Entradas na Conversa:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25 +msgid "Chat size:" +msgstr "Tamanho da Conversa:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29 +msgid "Chat lifetime:" +msgstr "Tempo de vida da Conversa:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33 +msgid "Chat beep sound" +msgstr "Som de aviso de Conversa" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4 +msgid "Engine Info Panel" +msgstr "Painel de Informação do Motor" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22 +msgid "Engine info:" +msgstr "Informação do Motor:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25 +msgid "Use an averaging algorithm for fps" +msgstr "Usar um algorítmo médio para os fps" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4 +msgid "Health/Armor Panel" +msgstr "Painel Vida/Armadura" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22 +msgid "Enable status bar" +msgstr "Activar barra de estado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24 +msgid "Status bar alignment:" +msgstr "Alinhar barra de estado:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42 +msgid "Inward" +msgstr "Para Dentro" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43 +msgid "Outward" +msgstr "Para Fora" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37 +msgid "Icon alignment:" +msgstr "Alinhamento dos Icones" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45 +msgid "Flip health and armor positions" +msgstr "Trocar posição da vida e armadura" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4 +msgid "Info Messages Panel" +msgstr "Painel de Info de Mensagens" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22 +msgid "Info messages:" +msgstr "Informação de mensagens:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25 +msgid "Flip align" +msgstr "Trocar alinhamento" + +#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4 +msgid "Mod Icons Panel" +msgstr "Painel dos Icones de Mod" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4 +msgid "Notification Panel" +msgstr "Painel de Notificações" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22 +msgid "Notifications:" +msgstr "Notificações:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25 +msgid "Also print notifications to the console" +msgstr "Imprimir notificações na consola também" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28 +msgid "Flip notify order" +msgstr "Trocar ordem de notificações" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31 +msgid "Entry lifetime:" +msgstr "Tempo de vida de cada entrada:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35 +msgid "Entry fadetime:" +msgstr "Desaparecimento de cada entrada:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4 +msgid "Powerups Panel" +msgstr "Painel de Powerups" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45 +msgid "Flip strength and shield positions" +msgstr "Trocar posição do escudo e da força" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4 +msgid "Pressed Keys Panel" +msgstr "Painel das Teclas Pressionadas" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21 +msgid "Panel disabled" +msgstr "Painel desactivado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22 +msgid "Panel enabled when spectating" +msgstr "Painel activado quando espectador" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23 +msgid "Panel always enabled" +msgstr "Painel sempre activado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30 +msgid "Forced aspect:" +msgstr "Forçar aspecto:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4 +msgid "Race Timer Panel" +msgstr "Painel do Cronómetro de Corrida" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4 +msgid "Radar Panel" +msgstr "Painel do Radar" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22 +msgid "Panel enabled in teamgames" +msgstr "Painel activo em jogos de equipa" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29 +msgid "Radar:" +msgstr "Radar:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151 +#: qcsrc/menu/xonotic/util.qc:631 +msgid "Alpha:" +msgstr "Alfa:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36 +msgid "Rotation:" +msgstr "Rotação:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38 +msgid "Forward" +msgstr "Para a frente" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39 +msgid "West" +msgstr "Para oeste" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40 +msgid "South" +msgstr "Para sul" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41 +msgid "East" +msgstr "Para este" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42 +msgid "North" +msgstr "Para norte" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46 +msgid "Scale:" +msgstr "Escala:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50 +msgid "Zoom mode:" +msgstr "Modo de ampliação:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52 +msgid "Zoomed in" +msgstr "Ampliado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53 +msgid "Zoomed out" +msgstr "Não-Ampliado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54 +msgid "Always zoomed" +msgstr "Sempre ampliado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55 +msgid "Never zoomed" +msgstr "Nunca ampliado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4 +msgid "Score Panel" +msgstr "Painel de Pontos" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4 +msgid "Timer Panel" +msgstr "Painel Temporizador" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22 +msgid "Timer:" +msgstr "Temporizador:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25 +msgid "Show elapsed time" +msgstr "Mostrar tempo passado" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4 +msgid "Vote Panel" +msgstr "Painel de votos" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22 +msgid "Alpha after voting:" +msgstr "Alfa após votagem:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4 +msgid "Weapons Panel" +msgstr "Painel das Armas" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24 +msgid "Fade out after:" +msgstr "Desaparecer após:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41 +msgid "Never" +msgstr "Nunca" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28 +#, c-format +msgid "%ds" +msgstr "%ds" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32 +msgid "Fade effect:" +msgstr "Efeito de desaparecimento" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33 +#, fuzzy +msgid "EF^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35 +msgid "Slide" +msgstr "Deslocador" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37 +msgid "Alpha" +msgstr "Alfa" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40 +msgid "Weapon icons:" +msgstr "Icones das armas" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43 +msgid "Show weapon ID as:" +msgstr "Mostra o ID da arma como:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44 +#, fuzzy +msgid "SHOWAS^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45 +msgid "Number" +msgstr "Número" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46 +msgid "Bind" +msgstr "Ligar" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49 +msgid "Show Accuracy" +msgstr "Mostrar Pontaria" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50 +msgid "Show Ammo" +msgstr "Mostrar Munições" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53 +msgid "Ammo bar color:" +msgstr "Cor da barra de munições:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59 +msgid "Ammo bar alpha:" +msgstr "Cor da barra alfa:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4 +msgid "Panel HUD Setup" +msgstr "Configuração do painel do HUD" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21 +msgid "Panel background defaults:" +msgstr "Fundo do painel por defeito:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:609 +#: qcsrc/menu/xonotic/util.qc:625 qcsrc/menu/xonotic/util.qc:642 +msgid "Disable" +msgstr "Desactivar" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:614 +msgid "Color:" +msgstr "Cor:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:622 +msgid "Border size:" +msgstr "Tamanho do limite:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89 +msgid "Team color:" +msgstr "Cor da Equipa:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:648 +msgid "Test team color in configure mode" +msgstr "Testa cor da equipa no modo de configuração" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:651 +msgid "Padding:" +msgstr "Padding:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68 +msgid "HUD Dock:" +msgstr "Local do HUD:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70 +#, fuzzy +msgid "DOCK^Disabled" +msgstr "Desligado" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71 +#, fuzzy +msgid "DOCK^Small" +msgstr "Pequena" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72 +#, fuzzy +msgid "DOCK^Medium" +msgstr "Média" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73 +#, fuzzy +msgid "DOCK^Large" +msgstr "Grande" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96 +msgid "Grid settings:" +msgstr "Definições da Rede:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99 +msgid "Snap panels to grid" +msgstr "Fixar paineis à Rede" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102 +msgid "Grid size:" +msgstr "Tamanho da Rede:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103 +msgid "X:" +msgstr "X:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109 +msgid "Y:" +msgstr "Y:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117 +msgid "Exit setup" +msgstr "Sair da configuração" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:4 +msgid "Multiplayer" +msgstr "Multi-jogador" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:18 +msgid "Servers" +msgstr "Servidores" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:19 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5 +msgid "Create" +msgstr "Criar" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:20 +msgid "Demos" +msgstr "Demos" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5 +msgid "Player Setup" +msgstr "Configuração do Jogador" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35 +msgid "Game type:" +msgstr "Tipo de jogo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47 +msgid "Match settings:" +msgstr "Definições de jogo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50 +msgid "Time limit:" +msgstr "Tempo limite:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62 +msgid "Use map specified default" +msgstr "Usar definição específica do mapa" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164 +msgid "Point limit:" +msgstr "Limite de pontos:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65 +msgid "Player slots:" +msgstr "Slots para Jogadores:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68 +msgid "Number of bots:" +msgstr "Número de jogadores controlados pelo computador:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72 +msgid "Bot skill:" +msgstr "Nível de dificuldade:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75 +msgid "Botlike" +msgstr "Bot" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76 +msgid "Beginner" +msgstr "Iniciado" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77 +msgid "You will win" +msgstr "Vais ganhar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78 +msgid "You can win" +msgstr "Podes ganhar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79 +msgid "You might win" +msgstr "Talvez ganhes" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80 +msgid "Advanced" +msgstr "Avançado" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81 +msgid "Expert" +msgstr "Perito" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82 +msgid "Pro" +msgstr "Profissional" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83 +msgid "Assassin" +msgstr "Assassino" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84 +msgid "Unhuman" +msgstr "Desumano" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85 +msgid "Godlike" +msgstr "Divinal" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89 +msgid "Mutators..." +msgstr "Mutators..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:84 +msgid "Advanced settings..." +msgstr "Definições avançadas..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105 +msgid "Map list:" +msgstr "Lista de mapas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111 +msgid "Select all" +msgstr "Seleccionar todos" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114 +msgid "Select none" +msgstr "Seleccionar nenhum" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120 +msgid "Start Multiplayer!" +msgstr "Começar Multijogador!" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155 +msgid "Capture limit:" +msgstr "Limite de capturas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159 +msgid "Lives:" +msgstr "Vidas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160 +msgid "Laps:" +msgstr "Voltas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161 +msgid "Goals:" +msgstr "Golos:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165 +msgid "Frag limit:" +msgstr "Limite de Frags:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6 +msgid "Advanced server settings" +msgstr "Definições avançadas do servidor" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25 +msgid "Game settings:" +msgstr "Definições de Jogo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28 +msgid "Allow spectating" +msgstr "Permitir espectador" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31 +msgid "Spawn shield:" +msgstr "Protecção de Spawn:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36 +msgid "Game speed:" +msgstr "Velocidade do jogo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40 +msgid "Teamplay settings:" +msgstr "Definições de Jogo de Equipa:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43 +msgid "Friendly fire scale:" +msgstr "Escala de Dano nos aliados:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47 +msgid "Virtual friendly fire (effect only)" +msgstr "Dano nos Aliados Virtual (Apenas o efeito)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50 +msgid "Friendly fire penalty:" +msgstr "Penalização por Dano nos Aliados:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54 +msgid "Virtual penalty (effect only)" +msgstr "Penalidade Virtual (Apenas o efeito)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57 +msgid "Teams:" +msgstr "Equipas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66 +msgid "Map voting:" +msgstr "Votação de mapa:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68 +msgid "No voting" +msgstr "Sem votação" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69 +msgid "2 choices" +msgstr "2 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70 +msgid "3 choices" +msgstr "3 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71 +msgid "4 choices" +msgstr "4 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72 +msgid "5 choices" +msgstr "5 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73 +msgid "6 choices" +msgstr "6 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74 +msgid "7 choices" +msgstr "7 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75 +msgid "8 choices" +msgstr "8 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76 +msgid "9 choices" +msgstr "9 escolhas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79 +msgid "Simple majority wins vcall" +msgstr "Maioria ganha vcall" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5 +msgid "Map Information" +msgstr "Informação do Mapa" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "Full item placement" +msgstr "Colocação total dos items" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "MinstaGib only" +msgstr "Apenas MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78 +msgid "Title:" +msgstr "Título:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84 +msgid "Author:" +msgstr "Autor:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90 +msgid "Features:" +msgstr "Características:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95 +msgid "Game types:" +msgstr "Modos de jogo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:308 +msgid "Close" +msgstr "Fechar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122 +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46 +msgid "Play" +msgstr "Jogar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7 +msgid "Mutators" +msgstr "Mutators" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33 +msgid "All Weapons Arena" +msgstr "Arena com Todas as Armas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35 +msgid "Most Weapons Arena" +msgstr "Arena com Maior Parte das Armas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56 +#, c-format +msgid "%s Arena" +msgstr "%s Arena" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167 +msgid "Dodging" +msgstr "Desvio" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250 +msgid "MinstaGib" +msgstr "MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253 +msgid "NIX" +msgstr "NIX" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205 +msgid "Rocket Flying" +msgstr "Voar com Rockets" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264 +msgid "No start weapons" +msgstr "Sem armas iniciais" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189 +msgid "Low gravity" +msgstr "Pouca gravidade" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170 +msgid "Cloaked" +msgstr "Escondido" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84 +msgid "Hook" +msgstr "Gancho" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173 +msgid "Midair" +msgstr "A meio do ar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176 +msgid "Vampire" +msgstr "Vampiro" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208 +msgid "Piñata" +msgstr "Piñata" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211 +msgid "Weapons stay" +msgstr "Armas ficam" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180 +msgid "Blood loss" +msgstr "Perda de sangue" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202 +msgid "Jet pack" +msgstr "Jetpack" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98 +#, fuzzy +msgid "MUT^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164 +msgid "Gameplay mutators:" +msgstr "Mutators de jogabilidade" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196 +msgid "Weapon & item mutators:" +msgstr "Mutators de armas e items" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199 +msgid "Grappling hook" +msgstr "Gancho de trepar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215 +msgid "Weapon arenas:" +msgstr "Arenas de Armas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218 +msgid "Regular (no arena)" +msgstr "Regular (não arena específica)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256 +msgid "with laser" +msgstr "com laser" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247 +msgid "Special arenas:" +msgstr "Arenas Especiais:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260 +msgid "Most weapons" +msgstr "Maior parte das Armas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4 +msgid "Demo" +msgstr "Demo" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28 +msgid "Record demos while playing" +msgstr "Gravar demos enquanto joga" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28 +msgid "Filter:" +msgstr "Filtrar:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29 +#: qcsrc/menu/xonotic/dialog_settings_input.c:41 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24 +msgid "Clear" +msgstr "Limpar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43 +msgid "Timedemo" +msgstr "Demo temporizado" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4 +msgid "Join" +msgstr "Juntar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36 +#, fuzzy +msgid "SRVS^Empty" +msgstr "Vazio" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40 +#, fuzzy +msgid "SRVS^Full" +msgstr "Total" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44 +msgid "Pause" +msgstr "Pausar" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56 +msgid "Address:" +msgstr "Endereço:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:65 +msgid "Info..." +msgstr "Informação..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:311 +msgid "Join!" +msgstr "Juntar!" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5 +msgid "Server Information" +msgstr "Informação do Servidor" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:177 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193 +msgid "N/A" +msgstr "N/A" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:151 +#, c-format +msgid "%d/%d" +msgstr "%d/%d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +#, c-format +msgid "%d modified settings" +msgstr "%d definições modificadas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +msgid "Official settings" +msgstr "Definições oficiais" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:191 +msgid "N/A (can't connect)" +msgstr "N/A (não conseguiu ligar)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199 +msgid "not supported (can't connect)" +msgstr "não é suportado (não conseguiu ligar)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:201 +msgid "not supported (won't encrypt)" +msgstr "não suportado (não encripta)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205 +msgid "supported (will encrypt)" +msgstr "suportado (vai encriptar)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207 +msgid "supported (won't encrypt)" +msgstr "suportado (não encripta)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211 +msgid "requested (will encrypt)" +msgstr "pedido (encripta)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213 +msgid "requested (won't encrypt)" +msgstr "pedido (não encripta)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217 +msgid "required (can't connect)" +msgstr "necessário (não consegue ligar)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219 +msgid "required (will encrypt)" +msgstr "necessário (encripta)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:263 +msgid "Players:" +msgstr "Jogadores:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:248 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38 +msgid "Type:" +msgstr "Tipo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:253 +msgid "Map:" +msgstr "Mapa:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:258 +msgid "Gameplay:" +msgstr "Jogabilidade:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:268 +msgid "Bots:" +msgstr "Jogadores controlados pelo computador:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:273 +msgid "Mod:" +msgstr "Mod:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:278 +msgid "Version:" +msgstr "Versão:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:283 +msgid "Ping:" +msgstr "Ping:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289 +msgid "CA:" +msgstr "CA:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295 +msgid "Key:" +msgstr "Chave:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301 +msgid "Encryption:" +msgstr "Encriptação:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63 +msgid "Model:" +msgstr "Modelo:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88 +msgid "Field of view:" +msgstr "Campo de visão:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92 +msgid "View bobbing:" +msgstr "Ver tremor:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96 +msgid "Zoom factor:" +msgstr "Factor de Ampliação (ZOOM):" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100 +msgid "Zoom speed:" +msgstr "Velocidade de Ampliação (ZOOM):" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103 +msgid "Weapon settings..." +msgstr "Definições das Armas..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110 +msgid "Crosshair:" +msgstr "Mira:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143 +msgid "Per weapon" +msgstr "Por arma" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130 +msgid "Crosshair size:" +msgstr "Tamanho da mira:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134 +msgid "Crosshair alpha:" +msgstr "Alfa da mira:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138 +msgid "Crosshair color:" +msgstr "Cor da mira:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:145 +msgid "Enable center dot" +msgstr "Activar ponto central" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148 +msgid "Size:" +msgstr "Tamanho:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:155 +msgid "Hit test:" +msgstr "Teste de Tiro:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:156 +#, fuzzy +msgid "HTST^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:157 +msgid "TrueAim" +msgstr "PontariaCerta" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158 +msgid "Enemies" +msgstr "Inimigos" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161 +msgid "Waypoints setup..." +msgstr "Configurar caminhos..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:167 +msgid "Enter HUD editor" +msgstr "Entrar no editor do HUD" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174 +msgid "Force models:" +msgstr "Forçar modelos:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175 +#, fuzzy +msgid "MDL^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176 +#, fuzzy +msgid "MDL^Custom" +msgstr "Modificado" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177 +#, fuzzy +msgid "MDL^All" +msgstr "Todos" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:179 +msgid "Disable gore effects" +msgstr "Desactivar sangue/violencia" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:181 +msgid "Gibs:" +msgstr "Tripas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:183 +#, fuzzy +msgid "GIBS^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184 +msgid "GIBS^Few" +msgstr "Poucas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185 +#, fuzzy +msgid "GIBS^Many" +msgstr "Muitas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186 +#, fuzzy +msgid "GIBS^Lots" +msgstr "Imensas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:190 +msgid "Damage splash:" +msgstr "Dano Colateral:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:194 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:178 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:193 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:30 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:41 +#: qcsrc/menu/xonotic/dialog_settings_video.c:106 +msgid "Apply immediately" +msgstr "Aplicar imediatamente" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5 +msgid "Waypoints" +msgstr "Caminhos" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23 +msgid "Waypoint settings:" +msgstr "Definições dos caminhos:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:26 +msgid "Show base waypoints" +msgstr "Mostrar caminhos base" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29 +msgid "Waypoint scale:" +msgstr "Escala dos Caminhos:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34 +msgid "Waypoint alpha:" +msgstr "Caminhos alfa:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:39 +msgid "Show names:" +msgstr "Mostrar nomes:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:42 +msgid "Teammates" +msgstr "Companheiros de Equipa" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:43 +msgid "All players" +msgstr "Todos os jogadores" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6 +msgid "Weapon settings" +msgstr "Definições de Armas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29 +msgid "Weapon priority list:" +msgstr "Prioridade das Armas:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34 +msgid "Up" +msgstr "Cima" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37 +msgid "Down" +msgstr "Baixo" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41 +msgid "Use priority list for weapon cycling" +msgstr "Usar lista de prioridades para ciclo entre as armas" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43 +msgid "Auto switch weapons on pickup" +msgstr "Mudar armas automaticamente ao apanhar do chão" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45 +msgid "Draw 1st person weapon model" +msgstr "Desenhar modelo da arma na 1a pessoa" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48 +msgid "Left align" +msgstr "Alinhamento à esquerda" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50 +msgid "Right align" +msgstr "Alinhamento à direita" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53 +msgid "Flip view horizontally" +msgstr "Trocar vista horizontal" + +#: qcsrc/menu/xonotic/dialog_news.c:4 +msgid "News" +msgstr "Novidades" + +#: qcsrc/menu/xonotic/dialog_news.c:18 +msgid "http://www.xonotic.org/team/blog/" +msgstr "http://www.xonotic.org/team/blog/" + +#: qcsrc/menu/xonotic/dialog_quit.c:4 +msgid "Quit" +msgstr "Sair" + +#: qcsrc/menu/xonotic/dialog_quit.c:17 +msgid "Are you sure you want to quit?" +msgstr "Tens a certeza que queres sair?" + +#: qcsrc/menu/xonotic/dialog_quit.c:20 +msgid "Yes" +msgstr "Sim" + +#: qcsrc/menu/xonotic/dialog_quit.c:21 +msgid "No" +msgstr "Não" + +#: qcsrc/menu/xonotic/dialog_settings.c:4 +msgid "Settings" +msgstr "Definições" + +#: qcsrc/menu/xonotic/dialog_settings.c:18 +#: qcsrc/menu/xonotic/dialog_settings_input.c:4 +msgid "Input" +msgstr "Input" + +#: qcsrc/menu/xonotic/dialog_settings.c:19 +#: qcsrc/menu/xonotic/dialog_settings_video.c:4 +msgid "Video" +msgstr "Vídeo" + +#: qcsrc/menu/xonotic/dialog_settings.c:20 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:4 +msgid "Effects" +msgstr "Efeitos" + +#: qcsrc/menu/xonotic/dialog_settings.c:21 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:4 +msgid "Audio" +msgstr "Som" + +#: qcsrc/menu/xonotic/dialog_settings.c:22 +#: qcsrc/menu/xonotic/dialog_settings_network.c:4 +msgid "Network" +msgstr "Rede" + +#: qcsrc/menu/xonotic/dialog_settings.c:23 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:4 +msgid "Misc" +msgstr "Misc" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:27 +msgid "Master:" +msgstr "Principal:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:33 +msgid "Music:" +msgstr "Música:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:40 +#, fuzzy +msgid "VOL^Ambient:" +msgstr "Som Ambiente:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:48 +msgid "Info:" +msgstr "Informação:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:57 +msgid "Items:" +msgstr "Items:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:65 +msgid "Pain:" +msgstr "Dor:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:73 +msgid "Player:" +msgstr "Jogador:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:81 +msgid "Shots:" +msgstr "Tiros:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:88 +msgid "Voice:" +msgstr "Voz:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:96 +msgid "Weapons:" +msgstr "Armas:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:103 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:161 +msgid "Frequency:" +msgstr "Frequência:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:105 +msgid "8 kHz" +msgstr "8 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:106 +msgid "11.025 kHz" +msgstr "11.025 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:107 +msgid "16 kHz" +msgstr "16 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:108 +msgid "22.05 kHz" +msgstr "22.05 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:109 +msgid "24 kHz" +msgstr "24 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:110 +msgid "32 kHz" +msgstr "32 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:111 +msgid "44.1 kHz" +msgstr "44.1 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:112 +msgid "48 kHz" +msgstr "48 kHz" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:115 +msgid "Channels:" +msgstr "Canais:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:117 +msgid "Mono" +msgstr "Mono" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:118 +msgid "Stereo" +msgstr "Stereo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:119 +msgid "2.1" +msgstr "2.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:120 +msgid "4" +msgstr "4" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:121 +msgid "5" +msgstr "5" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:122 +msgid "5.1" +msgstr "5.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:123 +msgid "6.1" +msgstr "6.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:124 +msgid "7.1" +msgstr "7.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:128 +msgid "Swap Stereo" +msgstr "Trocar Stereo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:132 +msgid "Headphone friendly mode" +msgstr "Modo de Headphones" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:136 +msgid "Spatial voices:" +msgstr "Vozes espaciais:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:137 +#, fuzzy +msgid "VOCS^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:138 +#, fuzzy +msgid "VOCS^Taunts" +msgstr "Taunts" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:139 +#, fuzzy +msgid "VOCS^All" +msgstr "Todos" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:142 +msgid "Taunt range:" +msgstr "Nível dos taunts:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:145 +#, fuzzy +msgid "RNG^Very short" +msgstr "Muito baixo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:146 +#, fuzzy +msgid "RNG^Short" +msgstr "Baixo" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:147 +#, fuzzy +msgid "RNG^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:148 +#, fuzzy +msgid "RNG^Long" +msgstr "Alto" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:149 +#, fuzzy +msgid "RNG^Full" +msgstr "Total" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:156 +msgid "Automatic taunts" +msgstr "Taunts Automáticos" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:165 +msgid "Time warning:" +msgstr "Aviso de tempo:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:167 +#, fuzzy +msgid "WRN^None" +msgstr "Nenhum" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:168 +msgid "1 minute" +msgstr "1 minuto" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:169 +msgid "5 minutes" +msgstr "5 minutos" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:170 +#, fuzzy +msgid "WRN^Both" +msgstr "Ambos" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:173 +msgid "Hit indicator" +msgstr "Indicador de tiro acertado" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:175 +msgid "Menu sounds" +msgstr "Sons do menu" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:38 +msgid "Quality preset:" +msgstr "Predefinição de Qualidade:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:41 +#, fuzzy +msgid "PRE^OMG!" +msgstr "OMG!" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:42 +#, fuzzy +msgid "PRE^Low" +msgstr "Baixa" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:43 +#, fuzzy +msgid "PRE^Medium" +msgstr "Média" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:44 +#, fuzzy +msgid "PRE^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:45 +#, fuzzy +msgid "PRE^High" +msgstr "Alta" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:46 +#, fuzzy +msgid "PRE^Ultra" +msgstr "Ultra" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:48 +#, fuzzy +msgid "PRE^Ultimate" +msgstr "Máxima" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:52 +msgid "Geometry detail:" +msgstr "Detalhes geométricos:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:54 +#, fuzzy +msgid "DET^Lowest" +msgstr "Mínimo" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:55 +#, fuzzy +msgid "DET^Low" +msgstr "Baixa" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:56 +#, fuzzy +msgid "DET^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:57 +#, fuzzy +msgid "DET^Good" +msgstr "Bom" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:58 +#, fuzzy +msgid "DET^Best" +msgstr "Melhores" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:59 +#, fuzzy +msgid "DET^Insane" +msgstr "Máximo" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:62 +msgid "Antialiasing:" +msgstr "Antialiasing:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:64 +#, fuzzy +msgid "AA^Disabled" +msgstr "Desligado" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:65 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:103 +msgid "2x" +msgstr "2 passagens" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:66 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:104 +msgid "4x" +msgstr "4 passagens" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:70 +msgid "Texture resolution:" +msgstr "Resolução das texturas:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:73 +#, fuzzy +msgid "RES^Leet" +msgstr "Leet" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:74 +#, fuzzy +msgid "RES^Lowest" +msgstr "Mínimo" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:75 +#, fuzzy +msgid "RES^Low" +msgstr "Baixa" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:76 +#, fuzzy +msgid "RES^Normal" +msgstr "Normal" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:77 +#, fuzzy +msgid "RES^Good" +msgstr "Bom" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:78 +#, fuzzy +msgid "RES^Best" +msgstr "Melhores" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:91 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:94 +msgid "Avoid lossy texture compression" +msgstr "Evitar compressão de Texturas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:100 +msgid "Anisotropy:" +msgstr "Filtro Anisotrópico:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:102 +#, fuzzy +msgid "ANISO^Disabled" +msgstr "Desligado" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:105 +msgid "8x" +msgstr "8x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:106 +msgid "16x" +msgstr "16x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:110 +msgid "Particle quality:" +msgstr "Qualidade das Partículas:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:113 +msgid "Particle distance:" +msgstr "Distancia visível das Partículas:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:117 +msgid "Decals" +msgstr "Símbolos" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:120 +msgid "Distance:" +msgstr "Distância:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:126 +msgid "Time:" +msgstr "Tempo:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:132 +msgid "Use lightmaps" +msgstr "Usar lightmaps" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:133 +msgid "Deluxe mapping" +msgstr "Mapeamento Deluxe" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:135 +msgid "Gloss" +msgstr "Lustro" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:138 +msgid "Offset mapping" +msgstr "Mapeamento Offset" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:140 +msgid "Relief mapping" +msgstr "Mapeamento Relief" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:143 +msgid "Reflections:" +msgstr "Reflexos:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:146 +msgid "Blurred" +msgstr "Grau de Blur" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:147 +#, fuzzy +msgid "REFL^Good" +msgstr "Bom" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:148 +msgid "Sharp" +msgstr "Grau de Definição" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:153 +msgid "Show surfaces" +msgstr "Mostrar superfícies" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:155 +msgid "No dynamic lighting" +msgstr "Iluminação dinâmica desligada" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:157 +msgid "Flash blend approximation" +msgstr "Aproximação Flash Blend" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:159 +msgid "Realtime dynamic lighting" +msgstr "Iluminação dinâmica em tempo real" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:160 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:164 +msgid "Shadows" +msgstr "Sombras" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:163 +msgid "Realtime world lighting" +msgstr "Iluminação do mundo em tempo real" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:168 +msgid "Use normal maps" +msgstr "Usar mapas normais" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:170 +msgid "Soft shadows" +msgstr "Sombras Suaves" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:173 +msgid "Coronas" +msgstr "Coronas" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:175 +msgid "Bloom" +msgstr "Bloom" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:177 +msgid "High Dynamic Range (HDR)" +msgstr "High Dynamic Range (HDR)" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:181 +msgid "Motion blur:" +msgstr "Distorção por movimento:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:187 +msgid "Damage blur:" +msgstr "Distorção por dano:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:26 +msgid "Key bindings:" +msgstr "Bindings de Teclas" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:31 +msgid "Change key..." +msgstr "Mudar tecla..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:35 +msgid "Edit..." +msgstr "Editar..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:46 +msgid "Sensitivity:" +msgstr "Sensibilidade:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:49 +msgid "UI mouse speed:" +msgstr "Velocidade do rato:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:52 +msgid "Mouse filter" +msgstr "Filtro do Rato" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:54 +msgid "Invert mouse" +msgstr "Inverter Rato" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:57 +#: qcsrc/menu/xonotic/dialog_settings_input.c:59 +msgid "Use joystick input" +msgstr "Usar input do joystick" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:62 +#: qcsrc/menu/xonotic/dialog_settings_input.c:64 +msgid "Turn off OS mouse acceleration" +msgstr "Desligar aceleração de Rato do SO" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:66 +msgid "\"enter console\" also closes" +msgstr "\"entrar na consola\" também fecha" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5 +msgid "User defined key bind" +msgstr "Keybinds definidas pelo utilizador" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42 +msgid "Command when pressed:" +msgstr "Comando quando carregado:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45 +msgid "Command when released:" +msgstr "Comando quando largado:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48 +msgid "Save" +msgstr "Guardar" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51 +msgid "Cancel" +msgstr "Cancelar" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:26 +msgid "Menu skins:" +msgstr "Skins de Menu:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:47 +msgid "Show current time" +msgstr "Mostrar tempo corrente" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:49 +msgid "Show current date" +msgstr "Mostrar data corrente" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:51 +msgid "Show frames per second" +msgstr "Mostrar Frames por Segundo" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:53 +msgid "Speedometer" +msgstr "Medidor de Velocidade" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:56 +msgid "qu/s (hidden)" +msgstr "qu/s (escondido)" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:58 +msgid "qu/s" +msgstr "qu/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:60 +msgid "m/s" +msgstr "m/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:64 +msgid "km/h" +msgstr "km/h" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:66 +msgid "mph" +msgstr "mph" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:68 +msgid "knots" +msgstr "nós" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:71 +msgid "Show accelerometer" +msgstr "Mostrar accelerómetro" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:74 +msgid "Accelerometer scale:" +msgstr "Escala do accelerómetro:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:80 +msgid "Minimize input latency" +msgstr "Minimizar latência de entrada" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5 +msgid "Advanced settings" +msgstr "Definições avançadas" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23 +msgid "Cvar filter:" +msgstr "Filtro de Cvar" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34 +msgid "Setting:" +msgstr "Definição:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42 +msgid "Value:" +msgstr "Valor:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:54 +msgid "Description:" +msgstr "Descrição:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:26 +msgid "Client-side movement prediction" +msgstr "Previsão de movimento pelo Cliente" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:30 +msgid "Show netgraph" +msgstr "Mostrar gráfico-net" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:33 +msgid "Network speed:" +msgstr "Velocidade da Rede:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:35 +msgid "56k" +msgstr "56k" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:36 +msgid "ISDN" +msgstr "ISDN" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:37 +msgid "Slow ADSL" +msgstr "ADSL Lenta" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:38 +msgid "Fast ADSL" +msgstr "ADSL Rápida" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:39 +msgid "Broadband" +msgstr "Banda-larga" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:42 +msgid "Input packets/s:" +msgstr "Pacotes Entrada /s" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:46 +msgid "HTTP downloads:" +msgstr "Transferências via HTTP:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:49 +msgid "Downloads:" +msgstr "Transferências:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:53 +msgid "Speed (kB/s):" +msgstr "Velocidade (kB/s):" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:57 +msgid "Client UDP port:" +msgstr "Port UDP do Cliente:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:26 +msgid "Resolution:" +msgstr "Resolução:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:29 +msgid "Font/UI size:" +msgstr "Font/UI - tamanho:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:31 +#, fuzzy +msgid "SZ^Unreadable" +msgstr "Ilegível" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:32 +#, fuzzy +msgid "SZ^Tiny" +msgstr "Minuscula" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:33 +#, fuzzy +msgid "SZ^Little" +msgstr "Muito Pequena" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:34 +#, fuzzy +msgid "SZ^Small" +msgstr "Pequena" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:35 +#, fuzzy +msgid "SZ^Medium" +msgstr "Média" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:36 +#, fuzzy +msgid "SZ^Large" +msgstr "Grande" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:37 +#, fuzzy +msgid "SZ^Huge" +msgstr "Enorme" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:38 +#, fuzzy +msgid "SZ^Gigantic" +msgstr "Gigante" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:39 +#, fuzzy +msgid "SZ^Colossal" +msgstr "Colossal" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:42 +msgid "Color depth:" +msgstr "Profundidade da cor:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:45 +msgid "Full screen" +msgstr "Ecrã Inteiro" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:46 +msgid "Vertical Synchronization" +msgstr "Sincronização Vertical" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:49 +msgid "Use OpenGL 2.0 shaders (GLSL)" +msgstr "Usar shaders OpenGL2.0 (GLSL)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:52 +msgid "Use Occlusion Queries" +msgstr "Usar Consultas Oclusão" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:55 +msgid "Vertex Buffer Objects (VBOs)" +msgstr "Objectos Vertex Buffers (VBOs)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:58 +#, fuzzy +msgid "VBO^Off" +msgstr "Desligado" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:59 +msgid "Vertices, some Tris (compatible)" +msgstr "Vértices, alguns Triângulos (compatível)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:62 +msgid "Vertices" +msgstr "Vértices" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:63 +msgid "Vertices and Triangles" +msgstr "Vértices e Triângulos" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:65 +msgid "Depth first:" +msgstr "Profundidade primeiro:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:67 +#, fuzzy +msgid "DF^Disabled" +msgstr "Desligado" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:68 +#, fuzzy +msgid "DF^World" +msgstr "Mundo" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:69 +#, fuzzy +msgid "DF^All" +msgstr "Todos" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:73 +msgid "Disable multithreaded OpenGL" +msgstr "Desactivar OpenGL em múltiplos threads" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:75 +msgid "Wait for GPU to finish each frame" +msgstr "Esperar que a placa gráfica termine cada frame" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:78 +msgid "Brightness:" +msgstr "Brilho:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:81 +msgid "Contrast:" +msgstr "Contraste:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:84 +msgid "Gamma:" +msgstr "Gamma:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:87 +msgid "Contrast boost:" +msgstr "Contraste - Boost" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:90 +msgid "Saturation:" +msgstr "Saturação da Cor:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:95 +msgid "Use GLSL to handle color control" +msgstr "Usar GLSL para o controlo de cores" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:99 +#, fuzzy +msgid "LIT^Ambient:" +msgstr "Som Ambiente:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:102 +msgid "Intensity:" +msgstr "Intensidade:" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:4 +msgid "Singleplayer" +msgstr "Um Jogador" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:59 +msgid "Instant action! (random map with bots)" +msgstr "Acção Instantânea! (Mapa ao acaso contra o computador)" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:80 +msgid "Start Singleplayer!" +msgstr "Começar Um só Jogador!" + +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4 +msgid "Winner" +msgstr "Vencedor" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:5 +msgid "Team Selection" +msgstr "Selecção de Equipa" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:41 +msgid "join 'best' team (auto-select)" +msgstr "juntar 'melhor' equipa (selecção automática)" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:45 +msgid "red" +msgstr "vermelha" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:46 +msgid "blue" +msgstr "azul" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:47 +msgid "yellow" +msgstr "amarela" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:48 +msgid "pink" +msgstr "rosa" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:51 +msgid "spectate" +msgstr "espectador" + +#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38 +msgid "Do not press this button again!" +msgstr "Não voltar a carregar neste botão!" + +#: qcsrc/menu/xonotic/maplist.c:278 +msgid "" +"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n" +msgstr "" +"Huh? Não posso jogar isto (m é NULL). Voltando a filtrar de maneira a que " +"isto não se repitanovamente.\n" + +#: qcsrc/menu/xonotic/maplist.c:286 +#, c-format +msgid "%s's Xonotic Server" +msgstr "Servidor de Xonotic do %s" + +#: qcsrc/menu/xonotic/maplist.c:291 +msgid "" +"Huh? Can't play this (invalid game type). Refiltering so this won't happen " +"again.\n" +msgstr "" +"Huh? Não posso jogar isto (tipo de jogo inválido). Voltando a filtrar de " +"maneira a que isto não se repitanovamente.\n" + +#: qcsrc/menu/xonotic/playermodel.c:174 +msgid "<no model found>" +msgstr "<nenhum modelo encontrado>" + +#: qcsrc/menu/xonotic/serverlist.c:357 +msgid "Remove" +msgstr "Remover" + +#: qcsrc/menu/xonotic/serverlist.c:359 +msgid "Bookmark" +msgstr "Marcar" + +#: qcsrc/menu/xonotic/serverlist.c:515 +msgid "Ping" +msgstr "Ping" + +#: qcsrc/menu/xonotic/serverlist.c:516 +msgid "Host name" +msgstr "Nome do Host" + +#: qcsrc/menu/xonotic/serverlist.c:517 +msgid "Map" +msgstr "Mapa" + +#: qcsrc/menu/xonotic/serverlist.c:518 +msgid "Type" +msgstr "Tipo" + +#: qcsrc/menu/xonotic/serverlist.c:519 +msgid "Players" +msgstr "Jogadores" + +#: qcsrc/menu/xonotic/skinlist.c:105 +msgid "<TITLE>" +msgstr "<TÍTULO>" + +#: qcsrc/menu/xonotic/skinlist.c:106 +msgid "<AUTHOR>" +msgstr "<AUTOR>" + +#: qcsrc/menu/xonotic/skinlist.c:163 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: qcsrc/menu/xonotic/slider_decibels.c:50 +#, fuzzy +msgid "VOL^OFF" +msgstr "DESLIGADO" + +#: qcsrc/menu/xonotic/slider_decibels.c:52 +#, fuzzy +msgid "VOL^MAX" +msgstr "MÀX" + +#: qcsrc/menu/xonotic/slider_decibels.c:53 +#, c-format +msgid "%s dB" +msgstr "%s dB" + +#: qcsrc/menu/xonotic/slider_resolution.c:65 +#, c-format +msgid "%dx%d" +msgstr "%dx%d" + +#: qcsrc/menu/xonotic/util.qc:270 +#, c-format +msgid "Received HTTP request data for an invalid id %d.\n" +msgstr "Recebido um pedido HTTP de um id inválido %d. \n" + +#: qcsrc/menu/xonotic/util.qc:285 +#, c-format +msgid "error receiving update notification: status is %d\n" +msgstr "erro ao receber notificação: o estado e %d\n" + +#: qcsrc/menu/xonotic/util.qc:290 +msgid "error: received HTML instead of an update notification\n" +msgstr "erro: recebido HTML em vez de notificação de actualização\n" + +#: qcsrc/menu/xonotic/util.qc:295 +msgid "error: received carriage returns from update notification server\n" +msgstr "" +"erro: recebido 'carriage return' de um servidor de notificação de " +"actualização\n" + +#: qcsrc/menu/xonotic/util.qc:316 +#, c-format +msgid "" +"Update can be downloaded at:\n" +"%s\n" +msgstr "" +"Actualização pode ser transferida em:\n" +"%s\n" + +#: qcsrc/menu/xonotic/util.qc:337 +msgid "Autogenerating mapinfo for newly added maps..." +msgstr "Informação de mapas auto-gerada para novos mapas..." + +#: qcsrc/menu/xonotic/util.qc:432 +#, c-format +msgid "Update to %s now!" +msgstr "Actualize para %s agora!" + +#: qcsrc/menu/xonotic/util.qc:509 +msgid "" +"^1ERROR: Texture compression is required but not supported.\n" +"^1Expect visual problems.\n" +msgstr "" +"^1ERRO: A compressão de texturas é necessária mas não é suportada.\n" +"^1Possíveis problemas visuais.\n" + +#: qcsrc/menu/xonotic/util.qc:531 +msgid "Arena" +msgstr "Arena" + +#: qcsrc/menu/xonotic/util.qc:532 +msgid "Assault" +msgstr "Assalto" + +#: qcsrc/menu/xonotic/util.qc:533 +msgid "Capture The Flag" +msgstr "Captura a Bandeira" + +#: qcsrc/menu/xonotic/util.qc:534 +msgid "Clan Arena" +msgstr "Clan Arena" + +#: qcsrc/menu/xonotic/util.qc:535 +msgid "Deathmatch" +msgstr "Combate até à Morte" + +#: qcsrc/menu/xonotic/util.qc:536 +msgid "Domination" +msgstr "Domínio" + +#: qcsrc/menu/xonotic/util.qc:537 +msgid "Freeze Tag" +msgstr "Freeze Tag" + +#: qcsrc/menu/xonotic/util.qc:538 +msgid "Keepaway" +msgstr "Keepaway" + +#: qcsrc/menu/xonotic/util.qc:539 +msgid "Key Hunt" +msgstr "Procura da Chave" + +#: qcsrc/menu/xonotic/util.qc:540 +msgid "Last Man Standing" +msgstr "O Ultimo a Cair" + +#: qcsrc/menu/xonotic/util.qc:541 +msgid "Nexball" +msgstr "Nexball" + +#: qcsrc/menu/xonotic/util.qc:542 +msgid "Onslaught" +msgstr "Investida" + +#: qcsrc/menu/xonotic/util.qc:543 +msgid "Race" +msgstr "Corrida" + +#: qcsrc/menu/xonotic/util.qc:544 +msgid "Race CTS" +msgstr "Corrida CTS" + +#: qcsrc/menu/xonotic/util.qc:545 +msgid "Runematch" +msgstr "Luta de Runas" + +#: qcsrc/menu/xonotic/util.qc:546 +msgid "Team Deathmatch" +msgstr "Combate até à Morte por Equipas" + +#: qcsrc/menu/xonotic/util.qc:565 +#, c-format +msgid "@!#%'n Tuba Throwing" +msgstr "@!#%'n Tuba Throwing" + +#: qcsrc/menu/xonotic/util.qc:606 +msgid "Background:" +msgstr "Fundo:" + +#: qcsrc/menu/xonotic/util.qc:608 qcsrc/menu/xonotic/util.qc:624 +#: qcsrc/menu/xonotic/util.qc:633 qcsrc/menu/xonotic/util.qc:641 +#: qcsrc/menu/xonotic/util.qc:653 +msgid "Default" +msgstr "Por Defeito" + +#: qcsrc/menu/xonotic/util.qc:619 +msgid "Use default" +msgstr "Usar defeito" + +#: qcsrc/menu/xonotic/util.qc:639 +msgid "Team Color:" +msgstr "Cor da Equipa:" + +#: qcsrc/menu/xonotic/util.qh:49 +msgid "Enable panel" +msgstr "Actival painel" + +#~ msgid "" +#~ "Please answer a few initial questions to enhance the game experience." +#~ msgstr "" +#~ "Por favor responda a umas perguntas iniciais para melhorarmos a sua " +#~ "experiência de jogo." diff --git a/menu.dat.ru.po b/menu.dat.ru.po new file mode 100644 index 0000000000..81f6d4ae7e --- /dev/null +++ b/menu.dat.ru.po @@ -0,0 +1,2410 @@ +# Xonotic Menu +# Copyright (C) 2011 Team Xonotic +# This file is distributed under the same license as the Xonotic package. +# Lord Canistra <lordcanistra@gmail.com>, 2011. +# +msgid "" +msgstr "" +"Project-Id-Version: 0.1preview\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2011-01-18 21:36+0100\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Lord Canistra <lordcanistra@gmail.com>\n" +"Language-Team: LANGUAGE <LL@li.org>\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: qcsrc/menu/gamecommand.qc:47 +#, c-format +msgid "error: status is %d\n" +msgstr "ошибка: статус %d\n" + +#: qcsrc/menu/gamecommand.qc:65 +msgid "Usage: menu_cmd command..., where possible commands are:\n" +msgstr "Использование: menu_cmd command..., где возможные команды:\n" + +#: qcsrc/menu/gamecommand.qc:66 +msgid " sync - reloads all cvars on the current menu page\n" +msgstr " синх. - обновляет все cvar на текущей странице меню\n" + +#: qcsrc/menu/gamecommand.qc:67 +msgid " directmenu ITEM - select a menu item as main item\n" +msgstr " directmenu ITEM - определить элемент меню как главный элемент\n" + +#: qcsrc/menu/gamecommand.qc:193 +msgid "error creating curl handle\n" +msgstr "ошибка при создании curl handle\n" + +#: qcsrc/menu/gamecommand.qc:239 +msgid "Invalid command. For a list of supported commands, try menu_cmd help.\n" +msgstr "" +"Неверная команда. Попробуйте menu_cmd help, чтобы получить список доступных " +"команд.\n" + +#: qcsrc/menu/item/gecko.c:49 +msgid "Browser not initialized!" +msgstr "Браузер не инициализирован!" + +#: qcsrc/menu/item/label.c:63 +#, c-format +msgid "NOTE: label text %s too wide for label, condensed by factor %f\n" +msgstr "ВНИМАНИЕ: текст %s слишком широк для надписи, сжат до %f раз\n" + +#: qcsrc/menu/item/listbox.c:300 +#, c-format +msgid "Item %d" +msgstr "Предмет %d" + +#: qcsrc/menu/item/slider.c:64 +#, c-format +msgid "%d (%s)" +msgstr "%d (%s)" + +#: qcsrc/menu/item/textslider.c:29 qcsrc/menu/item/textslider.c:31 +msgid "custom" +msgstr "особо" + +#: qcsrc/menu/menu.qc:29 +#, c-format +msgid "^4MQC Build information: %s\n" +msgstr "^4Информация билда MQC: %s\n" + +#: qcsrc/menu/xonotic/campaign.c:284 +#: qcsrc/menu/xonotic/dialog_singleplayer.c:66 +msgid "???" +msgstr "???" + +#: qcsrc/menu/xonotic/campaign.c:285 +#, c-format +msgid "Level %d: %s" +msgstr "Уровень %d: %s" + +#: qcsrc/menu/xonotic/cvarlist.c:84 +msgid "will be saved to config.cfg" +msgstr "будет сохранено в config.cfg" + +#: qcsrc/menu/xonotic/cvarlist.c:86 +msgid "will not be saved" +msgstr "не будет сохранено" + +#: qcsrc/menu/xonotic/cvarlist.c:88 +msgid "private" +msgstr "приватное" + +#: qcsrc/menu/xonotic/cvarlist.c:90 +msgid "engine setting" +msgstr "установка движка" + +#: qcsrc/menu/xonotic/cvarlist.c:92 +msgid "read only" +msgstr "только чтение" + +#: qcsrc/menu/xonotic/dialog_credits.c:5 +msgid "Credits" +msgstr "Разработчики" + +#: qcsrc/menu/xonotic/dialog_credits.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:269 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:46 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:55 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:59 +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:21 +msgid "OK" +msgstr "ОК" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:4 +msgid "Welcome" +msgstr "Добро пожаловать" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:33 +msgid "" +"Welcome to Xonotic, please select your language preference and enter your " +"player name to get started. You can change these options later through the " +"menu system." +msgstr "" +"Добро пожаловать в Xonotic. Для начала, пожалуйста, выберите ваш язык и " +"введите ваше имя. Позже вы сможете изменить эти настройки в меню." + +#: qcsrc/menu/xonotic/dialog_firstrun.c:38 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:35 +msgid "Text language:" +msgstr "Язык меню:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:47 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:40 +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:39 +msgid "Name:" +msgstr "Имя:" + +#: qcsrc/menu/xonotic/dialog_firstrun.c:69 +msgid "Save settings" +msgstr "Сохранить настройки:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:4 +msgid "Ammo Panel" +msgstr "Панель боеприпасов" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:22 +msgid "Ammunition display:" +msgstr "Показ боеприпасов:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:25 +msgid "Show only current ammo type" +msgstr "Показывать только текущий тип боеприпасов" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:29 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:40 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:28 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:40 +msgid "Left" +msgstr "Слева" + +#: qcsrc/menu/xonotic/dialog_hudpanel_ammo.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:41 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:30 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:41 +msgid "Right" +msgstr "Справа" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:4 +msgid "Chat Panel" +msgstr "Панель чата" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:22 +msgid "Chat entries:" +msgstr "Записи в чате:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:25 +msgid "Chat size:" +msgstr "Размер чата:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:29 +msgid "Chat lifetime:" +msgstr "Время жизни:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_chat.c:33 +msgid "Chat beep sound" +msgstr "Звук чата:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:4 +msgid "Engine Info Panel" +msgstr "Панель инф. движка" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:22 +msgid "Engine info:" +msgstr "Инф. движка:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c:25 +msgid "Use an averaging algorithm for fps" +msgstr "Исп. алгоритм усреднения для FPS" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:4 +msgid "Health/Armor Panel" +msgstr "Панель здоровья/брони" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:22 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:22 +msgid "Enable status bar" +msgstr "Включить полосу состояния" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:24 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:24 +msgid "Status bar alignment:" +msgstr "Выравнивание полосы состояния:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:42 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:32 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:42 +msgid "Inward" +msgstr "Внутрь" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:43 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:34 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:43 +msgid "Outward" +msgstr "Наружу" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:37 +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:37 +msgid "Icon alignment:" +msgstr "Выравнивание иконок:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c:45 +msgid "Flip health and armor positions" +msgstr "Поменять местами здоровье и броню" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:4 +msgid "Info Messages Panel" +msgstr "Панель информационных сообщений" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:22 +msgid "Info messages:" +msgstr "Инф. сообщения:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c:25 +msgid "Flip align" +msgstr "Перевернуть выравнивание" + +#: qcsrc/menu/xonotic/dialog_hudpanel_modicons.c:4 +msgid "Mod Icons Panel" +msgstr "Панель иконок мода" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:4 +msgid "Notification Panel" +msgstr "Панель уведомлений" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:22 +msgid "Notifications:" +msgstr "Уведомления:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:25 +msgid "Also print notifications to the console" +msgstr "Также показывать уведомления в консоли" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:28 +msgid "Flip notify order" +msgstr "Обратить порядок уведомлений" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:31 +msgid "Entry lifetime:" +msgstr "Время видимости:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_notification.c:35 +msgid "Entry fadetime:" +msgstr "Время исчезновения:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:4 +msgid "Powerups Panel" +msgstr "Панель бонусов" + +#: qcsrc/menu/xonotic/dialog_hudpanel_powerups.c:45 +msgid "Flip strength and shield positions" +msgstr "Поменять местами Силу и Щит" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:4 +msgid "Pressed Keys Panel" +msgstr "Панель нажатых кнопок" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:21 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:21 +msgid "Panel disabled" +msgstr "Отключена" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:22 +msgid "Panel enabled when spectating" +msgstr "Включена при наблюдении" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:23 +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:23 +msgid "Panel always enabled" +msgstr "Всегда включена" + +#: qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c:30 +msgid "Forced aspect:" +msgstr "Соотношение:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c:4 +msgid "Race Timer Panel" +msgstr "Панель Гоночного Таймера" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:4 +msgid "Radar Panel" +msgstr "Панель радара" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:22 +msgid "Panel enabled in teamgames" +msgstr "Панель включена в командных играх" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:29 +msgid "Radar:" +msgstr "Радар:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:32 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:43 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:151 +#: qcsrc/menu/xonotic/util.qc:631 +msgid "Alpha:" +msgstr "Прозрачность:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:36 +msgid "Rotation:" +msgstr "Поворот:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:38 +msgid "Forward" +msgstr "Взгляд" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:39 +msgid "West" +msgstr "Запад" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:40 +msgid "South" +msgstr "Юг" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:41 +msgid "East" +msgstr "Восток" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:42 +msgid "North" +msgstr "Север" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:46 +msgid "Scale:" +msgstr "Размер:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:50 +msgid "Zoom mode:" +msgstr "Режим увел.:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:52 +msgid "Zoomed in" +msgstr "Приближён" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:53 +msgid "Zoomed out" +msgstr "Не приближён" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:54 +msgid "Always zoomed" +msgstr "Всегда приближён" + +#: qcsrc/menu/xonotic/dialog_hudpanel_radar.c:55 +msgid "Never zoomed" +msgstr "Никогда не приближён" + +#: qcsrc/menu/xonotic/dialog_hudpanel_score.c:4 +msgid "Score Panel" +msgstr "Таблица Очков" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:4 +msgid "Timer Panel" +msgstr "Панель таймера" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:22 +msgid "Timer:" +msgstr "Таймер:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_timer.c:25 +msgid "Show elapsed time" +msgstr "Показывать прошедшее время" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:4 +msgid "Vote Panel" +msgstr "Панель голосования" + +#: qcsrc/menu/xonotic/dialog_hudpanel_vote.c:22 +msgid "Alpha after voting:" +msgstr "Прозр. после голосования:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:4 +msgid "Weapons Panel" +msgstr "Панель оружия" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:24 +msgid "Fade out after:" +msgstr "Исчезать после:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:26 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:41 +msgid "Never" +msgstr "Никогда" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:28 +#, c-format +msgid "%ds" +msgstr "%dс" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:32 +msgid "Fade effect:" +msgstr "Эффект исчезновения:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:33 +msgid "EF^None" +msgstr "Отсутствует" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:35 +msgid "Slide" +msgstr "Скольжение" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:37 +msgid "Alpha" +msgstr "Исчезновение" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:40 +msgid "Weapon icons:" +msgstr "Иконки оружия:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:43 +msgid "Show weapon ID as:" +msgstr "Показывать ID оружия как:" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:44 +msgid "SHOWAS^None" +msgstr "Не показывать" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:45 +msgid "Number" +msgstr "Число" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:46 +msgid "Bind" +msgstr "Привязка" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:49 +msgid "Show Accuracy" +msgstr "Показывать Точность" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:50 +msgid "Show Ammo" +msgstr "Показывать Боеприпасы" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:53 +msgid "Ammo bar color:" +msgstr "Цвет полосы боеприпасов" + +#: qcsrc/menu/xonotic/dialog_hudpanel_weapons.c:59 +msgid "Ammo bar alpha:" +msgstr "Прозрачность полосы боеприпасов:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:4 +msgid "Panel HUD Setup" +msgstr "Настройка панелей" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:21 +msgid "Panel background defaults:" +msgstr "Фон по умолчанию:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:25 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:37 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:52 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:91 qcsrc/menu/xonotic/util.qc:609 +#: qcsrc/menu/xonotic/util.qc:625 qcsrc/menu/xonotic/util.qc:642 +msgid "Disable" +msgstr "Отключить" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:30 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:77 qcsrc/menu/xonotic/util.qc:614 +msgid "Color:" +msgstr "Цвет:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:35 qcsrc/menu/xonotic/util.qc:622 +msgid "Border size:" +msgstr "Ширина краёв:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:50 +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:89 +msgid "Team color:" +msgstr "Цвет команды:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:58 qcsrc/menu/xonotic/util.qc:648 +msgid "Test team color in configure mode" +msgstr "Проверить цвет команды в режиме настройки" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:61 qcsrc/menu/xonotic/util.qc:651 +msgid "Padding:" +msgstr "Промежуток:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:68 +msgid "HUD Dock:" +msgstr "Область HUD:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:70 +msgid "DOCK^Disabled" +msgstr "Отключено" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:71 +msgid "DOCK^Small" +msgstr "Небольшая" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:72 +msgid "DOCK^Medium" +msgstr "Средняя" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:73 +msgid "DOCK^Large" +msgstr "Большая" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:96 +msgid "Grid settings:" +msgstr "Настройки сетки:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:99 +msgid "Snap panels to grid" +msgstr "Передвижение панелей по сетке" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:102 +msgid "Grid size:" +msgstr "Шаг сетки:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:103 +msgid "X:" +msgstr "X:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:109 +msgid "Y:" +msgstr "Y:" + +#: qcsrc/menu/xonotic/dialog_hudsetup_exit.c:117 +msgid "Exit setup" +msgstr "Выйти из настройки" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:4 +msgid "Multiplayer" +msgstr "Игра по сети" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:18 +msgid "Servers" +msgstr "Серверы" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:19 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:5 +msgid "Create" +msgstr "Создать" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:20 +msgid "Demos" +msgstr "Demo файлы" + +#: qcsrc/menu/xonotic/dialog_multiplayer.c:21 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:5 +msgid "Player Setup" +msgstr "Настройки игрока" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:35 +msgid "Game type:" +msgstr "Тип игры:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:47 +msgid "Match settings:" +msgstr "Настройки матча:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:50 +msgid "Time limit:" +msgstr "Предел времени:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:54 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:62 +msgid "Use map specified default" +msgstr "Исп. предел карты" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:57 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:156 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:157 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:158 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:162 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:163 +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:164 +msgid "Point limit:" +msgstr "Предел очков:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:65 +msgid "Player slots:" +msgstr "Кол-во игроков:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:68 +msgid "Number of bots:" +msgstr "Кол-во ботов:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:72 +msgid "Bot skill:" +msgstr "Уровень ботов:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:75 +msgid "Botlike" +msgstr "Ботоподобный" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:76 +msgid "Beginner" +msgstr "Новичок" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:77 +msgid "You will win" +msgstr "Лёгкая победа" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:78 +msgid "You can win" +msgstr "Можешь выиграть" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:79 +msgid "You might win" +msgstr "Возможно выиграешь" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:80 +msgid "Advanced" +msgstr "Продвинутый" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:81 +msgid "Expert" +msgstr "Эксперт" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:82 +msgid "Pro" +msgstr "Про" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:83 +msgid "Assassin" +msgstr "Убийца" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:84 +msgid "Unhuman" +msgstr "Сверхчеловек" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:85 +msgid "Godlike" +msgstr "Богоподобный" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:89 +msgid "Mutators..." +msgstr "Мутаторы..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:98 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:84 +msgid "Advanced settings..." +msgstr "Доп. настройки..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:105 +msgid "Map list:" +msgstr "Список карт:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:111 +msgid "Select all" +msgstr "Выбрать все" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:114 +msgid "Select none" +msgstr "Снять выделение" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:120 +msgid "Start Multiplayer!" +msgstr "Начать игру по сети" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:155 +msgid "Capture limit:" +msgstr "Предел захватов:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:159 +msgid "Lives:" +msgstr "Жизни:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:160 +msgid "Laps:" +msgstr "Круги:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:161 +msgid "Goals:" +msgstr "Цели:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create.c:165 +msgid "Frag limit:" +msgstr "Предел убийств:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:6 +msgid "Advanced server settings" +msgstr "Доп. серверные настройки" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:25 +msgid "Game settings:" +msgstr "Настройки игры:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:28 +msgid "Allow spectating" +msgstr "Разрешить наблюдение" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:31 +msgid "Spawn shield:" +msgstr "Защита при возрождении" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:36 +msgid "Game speed:" +msgstr "Скорость игры:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:40 +msgid "Teamplay settings:" +msgstr "Настройки команд:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:43 +msgid "Friendly fire scale:" +msgstr "Огонь по союзникам:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:47 +msgid "Virtual friendly fire (effect only)" +msgstr "Фиктивный огонь по союзникам (только эффект)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:50 +msgid "Friendly fire penalty:" +msgstr "Штраф за огонь по союзникам" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:54 +msgid "Virtual penalty (effect only)" +msgstr "Фиктивный штраф (только эффект)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:57 +msgid "Teams:" +msgstr "Команды:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:66 +msgid "Map voting:" +msgstr "Голосование за карты:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:68 +msgid "No voting" +msgstr "Без голосования" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:69 +msgid "2 choices" +msgstr "2 выбора" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:70 +msgid "3 choices" +msgstr "3 выбора" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:71 +msgid "4 choices" +msgstr "4 выбора" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:72 +msgid "5 choices" +msgstr "5 выборов" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:73 +msgid "6 choices" +msgstr "6 выборов" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:74 +msgid "7 choices" +msgstr "7 выборов" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:75 +msgid "8 choices" +msgstr "8 выборов" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:76 +msgid "9 choices" +msgstr "9 выборов" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c:79 +msgid "Simple majority wins vcall" +msgstr "Простое большинство выигрывает" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:5 +msgid "Map Information" +msgstr "Информация о карте" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "Full item placement" +msgstr "С оружием" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:49 +msgid "MinstaGib only" +msgstr "Только MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:78 +msgid "Title:" +msgstr "Заголовок:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:84 +msgid "Author:" +msgstr "Автор:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:90 +msgid "Features:" +msgstr "Особенности:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:95 +msgid "Game types:" +msgstr "Режимы игры:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:119 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:308 +msgid "Close" +msgstr "Закрыть" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c:122 +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:46 +msgid "Play" +msgstr "Играть" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:7 +msgid "Mutators" +msgstr "Мутаторы" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:33 +msgid "All Weapons Arena" +msgstr "Арена со всем оружием" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:35 +msgid "Most Weapons Arena" +msgstr "Арена с большинством оружия" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:56 +#, c-format +msgid "%s Arena" +msgstr "%s Арена" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:68 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:167 +msgid "Dodging" +msgstr "Уклонение" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:250 +msgid "MinstaGib" +msgstr "MinstaGib" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:72 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:253 +msgid "NIX" +msgstr "NIX" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:74 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:205 +msgid "Rocket Flying" +msgstr "Ракетный полёт" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:78 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:264 +msgid "No start weapons" +msgstr "Без оружия в начале" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:80 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:189 +msgid "Low gravity" +msgstr "Низкая гравитация" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:82 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:170 +msgid "Cloaked" +msgstr "Невидимость" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:84 +msgid "Hook" +msgstr "Крюк" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:86 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:173 +msgid "Midair" +msgstr "Воздушный Конфликт" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:88 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:176 +msgid "Vampire" +msgstr "Вампиризм" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:90 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:208 +msgid "Piñata" +msgstr "Piñata" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:92 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:211 +msgid "Weapons stay" +msgstr "Неисчерпаемое Оружие" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:94 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:180 +msgid "Blood loss" +msgstr "Потеря Крови" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:96 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:202 +msgid "Jet pack" +msgstr "Джетпак" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:98 +msgid "MUT^None" +msgstr "Отсутствуют" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:164 +msgid "Gameplay mutators:" +msgstr "Мутаторы игрового процесса:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:196 +msgid "Weapon & item mutators:" +msgstr "Мутаторы оружия и предметов:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:199 +msgid "Grappling hook" +msgstr "Крюк" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:215 +msgid "Weapon arenas:" +msgstr "Арены с оружием" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:218 +msgid "Regular (no arena)" +msgstr "Обычная (не арена)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:239 +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:256 +msgid "with laser" +msgstr "с лазером" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:247 +msgid "Special arenas:" +msgstr "Особые арены:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c:260 +msgid "Most weapons" +msgstr "Большинство оружия" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:4 +msgid "Demo" +msgstr "Демо" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:28 +msgid "Record demos while playing" +msgstr "Записывать демо во время игры" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:32 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:28 +msgid "Filter:" +msgstr "Фильтр:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:33 +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:29 +#: qcsrc/menu/xonotic/dialog_settings_input.c:41 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:24 +msgid "Clear" +msgstr "Очистить" + +#: qcsrc/menu/xonotic/dialog_multiplayer_demo.c:43 +msgid "Timedemo" +msgstr "Проверка производительности" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:4 +msgid "Join" +msgstr "Присоединиться" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:36 +msgid "SRVS^Empty" +msgstr "Пустые" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:40 +msgid "SRVS^Full" +msgstr "Полные" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:44 +msgid "Pause" +msgstr "Пауза" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:56 +msgid "Address:" +msgstr "Адрес:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:65 +msgid "Info..." +msgstr "Инфо..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_join.c:70 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:311 +msgid "Join!" +msgstr "Присоединиться" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:5 +msgid "Server Information" +msgstr "Инф. о сервере" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:115 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:116 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:177 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:183 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:193 +msgid "N/A" +msgstr "Н/Д" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:151 +#, c-format +msgid "%d/%d" +msgstr "%d/%d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +#, c-format +msgid "%d modified settings" +msgstr "кол-во изменённых настроек: %d" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:166 +msgid "Official settings" +msgstr "Оффициальные настройки" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:191 +msgid "N/A (can't connect)" +msgstr "Н/Д (не могу подключиться)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:199 +msgid "not supported (can't connect)" +msgstr "не поддерживается (не могу подключиться)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:201 +msgid "not supported (won't encrypt)" +msgstr "не поддерживается (шифрования не будет)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:205 +msgid "supported (will encrypt)" +msgstr "поддерживается (будет шифрование)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:207 +msgid "supported (won't encrypt)" +msgstr "поддерживается (шифрования не будет)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:211 +msgid "requested (will encrypt)" +msgstr "запрошено (будет шифрование)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:213 +msgid "requested (won't encrypt)" +msgstr "запрошено (шифрования не будет)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:217 +msgid "required (can't connect)" +msgstr "требуется (не могу подключиться)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:219 +msgid "required (will encrypt)" +msgstr "требуется (будет шифрование)" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:240 +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:263 +msgid "Players:" +msgstr "Игроки:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:248 +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:38 +msgid "Type:" +msgstr "Тип:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:253 +msgid "Map:" +msgstr "Карта:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:258 +msgid "Gameplay:" +msgstr "Геймплей:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:268 +msgid "Bots:" +msgstr "Боты:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:273 +msgid "Mod:" +msgstr "Мод:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:278 +msgid "Version:" +msgstr "Версия:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:283 +msgid "Ping:" +msgstr "Пинг:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:289 +msgid "CA:" +msgstr "CA:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:295 +msgid "Key:" +msgstr "Ключ:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c:301 +msgid "Encryption:" +msgstr "Шифрование:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:63 +msgid "Model:" +msgstr "Модель:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:88 +msgid "Field of view:" +msgstr "Field of view:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:92 +msgid "View bobbing:" +msgstr "Подпрыгивание:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:96 +msgid "Zoom factor:" +msgstr "Множитель увеличения:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:100 +msgid "Zoom speed:" +msgstr "Скорость увеличения:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:103 +msgid "Weapon settings..." +msgstr "Настройки оружия..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:110 +msgid "Crosshair:" +msgstr "Прицел:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:111 +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:143 +msgid "Per weapon" +msgstr "Уникальный" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:130 +msgid "Crosshair size:" +msgstr "Величина прицела:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:134 +msgid "Crosshair alpha:" +msgstr "Прозрачность:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:138 +msgid "Crosshair color:" +msgstr "Цвет прицела:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:145 +msgid "Enable center dot" +msgstr "Точка в центре" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:148 +msgid "Size:" +msgstr "Размер:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:155 +msgid "Hit test:" +msgstr "Проверка на попадание:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:156 +msgid "HTST^None" +msgstr "Отключена" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:157 +msgid "TrueAim" +msgstr "TrueAim" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:158 +msgid "Enemies" +msgstr "Враги" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:161 +msgid "Waypoints setup..." +msgstr "Настройка отметок..." + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:167 +msgid "Enter HUD editor" +msgstr "Войти в редактор HUD" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:174 +msgid "Force models:" +msgstr "Использовать свои модели:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:175 +msgid "MDL^None" +msgstr "Нет" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:176 +msgid "MDL^Custom" +msgstr "Вместо нестандартных" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:177 +msgid "MDL^All" +msgstr "Вместо всех" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:179 +msgid "Disable gore effects" +msgstr "Отключить эффекты жестокости" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:181 +msgid "Gibs:" +msgstr "Ошмётки:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:183 +msgid "GIBS^None" +msgstr "Нет" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:184 +msgid "GIBS^Few" +msgstr "Мало" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:185 +msgid "GIBS^Many" +msgstr "Много" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:186 +msgid "GIBS^Lots" +msgstr "Тонны" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:190 +msgid "Damage splash:" +msgstr "Изображ. урона" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c:194 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:178 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:193 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:30 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:41 +#: qcsrc/menu/xonotic/dialog_settings_video.c:106 +msgid "Apply immediately" +msgstr "Применить" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:5 +msgid "Waypoints" +msgstr "Отметки" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:23 +msgid "Waypoint settings:" +msgstr "Настройки отметок:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:26 +msgid "Show base waypoints" +msgstr "Показывать основные отметки" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:29 +msgid "Waypoint scale:" +msgstr "Размер отметок:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:34 +msgid "Waypoint alpha:" +msgstr "Прозрачность отметок:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:39 +msgid "Show names:" +msgstr "Показывать имена:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:42 +msgid "Teammates" +msgstr "Союзники" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c:43 +msgid "All players" +msgstr "Все игроки" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:6 +msgid "Weapon settings" +msgstr "Настройки оружия" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:29 +msgid "Weapon priority list:" +msgstr "Список приоритета оружия:" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:34 +msgid "Up" +msgstr "Вверх" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:37 +msgid "Down" +msgstr "Вниз" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:41 +msgid "Use priority list for weapon cycling" +msgstr "Использовать приоритеты для прокрутки оружия" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:43 +msgid "Auto switch weapons on pickup" +msgstr "Автоматически переключаться на поднятое оружие" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:45 +msgid "Draw 1st person weapon model" +msgstr "Показывать модель оружия в руках" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:48 +msgid "Left align" +msgstr "Слева" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:50 +msgid "Right align" +msgstr "Справа" + +#: qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c:53 +msgid "Flip view horizontally" +msgstr "Перевернуть изображение по горизонтали" + +#: qcsrc/menu/xonotic/dialog_news.c:4 +msgid "News" +msgstr "Новости" + +#: qcsrc/menu/xonotic/dialog_news.c:18 +msgid "http://www.xonotic.org/team/blog/" +msgstr "http://www.xonotic.org/team/blog/" + +#: qcsrc/menu/xonotic/dialog_quit.c:4 +msgid "Quit" +msgstr "Выход" + +#: qcsrc/menu/xonotic/dialog_quit.c:17 +msgid "Are you sure you want to quit?" +msgstr "Вы точно желаете выйти?" + +#: qcsrc/menu/xonotic/dialog_quit.c:20 +msgid "Yes" +msgstr "Да" + +#: qcsrc/menu/xonotic/dialog_quit.c:21 +msgid "No" +msgstr "Нет" + +#: qcsrc/menu/xonotic/dialog_settings.c:4 +msgid "Settings" +msgstr "Настройки" + +#: qcsrc/menu/xonotic/dialog_settings.c:18 +#: qcsrc/menu/xonotic/dialog_settings_input.c:4 +msgid "Input" +msgstr "Ввод" + +#: qcsrc/menu/xonotic/dialog_settings.c:19 +#: qcsrc/menu/xonotic/dialog_settings_video.c:4 +msgid "Video" +msgstr "Изображение" + +#: qcsrc/menu/xonotic/dialog_settings.c:20 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:4 +msgid "Effects" +msgstr "Эффекты" + +#: qcsrc/menu/xonotic/dialog_settings.c:21 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:4 +msgid "Audio" +msgstr "Звук" + +#: qcsrc/menu/xonotic/dialog_settings.c:22 +#: qcsrc/menu/xonotic/dialog_settings_network.c:4 +msgid "Network" +msgstr "Сеть" + +#: qcsrc/menu/xonotic/dialog_settings.c:23 +#: qcsrc/menu/xonotic/dialog_settings_misc.c:4 +msgid "Misc" +msgstr "Разное" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:27 +msgid "Master:" +msgstr "Главный:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:33 +msgid "Music:" +msgstr "Музыка:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:40 +msgid "VOL^Ambient:" +msgstr "Фоновые звуки:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:48 +msgid "Info:" +msgstr "Инфо:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:57 +msgid "Items:" +msgstr "Предметы:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:65 +msgid "Pain:" +msgstr "Боль:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:73 +msgid "Player:" +msgstr "Игрок:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:81 +msgid "Shots:" +msgstr "Выстрелы:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:88 +msgid "Voice:" +msgstr "Голос:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:96 +msgid "Weapons:" +msgstr "Оружие:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:103 +#: qcsrc/menu/xonotic/dialog_settings_audio.c:161 +msgid "Frequency:" +msgstr "Частота:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:105 +msgid "8 kHz" +msgstr "8 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:106 +msgid "11.025 kHz" +msgstr "11.025 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:107 +msgid "16 kHz" +msgstr "16 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:108 +msgid "22.05 kHz" +msgstr "22.05 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:109 +msgid "24 kHz" +msgstr "24 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:110 +msgid "32 kHz" +msgstr "32 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:111 +msgid "44.1 kHz" +msgstr "44.1 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:112 +msgid "48 kHz" +msgstr "48 кГц" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:115 +msgid "Channels:" +msgstr "Каналы:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:117 +msgid "Mono" +msgstr "Моно" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:118 +msgid "Stereo" +msgstr "Стерео" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:119 +msgid "2.1" +msgstr "2.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:120 +msgid "4" +msgstr "4" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:121 +msgid "5" +msgstr "5" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:122 +msgid "5.1" +msgstr "5.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:123 +msgid "6.1" +msgstr "6.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:124 +msgid "7.1" +msgstr "7.1" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:128 +msgid "Swap Stereo" +msgstr "Обмен местами каналов" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:132 +msgid "Headphone friendly mode" +msgstr "Ориентированный на наушники режим" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:136 +msgid "Spatial voices:" +msgstr "Объёмные голоса" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:137 +msgid "VOCS^None" +msgstr "Отключены" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:138 +msgid "VOCS^Taunts" +msgstr "Насмешки" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:139 +msgid "VOCS^All" +msgstr "Все" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:142 +msgid "Taunt range:" +msgstr "Радиус насмешек:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:145 +msgid "RNG^Very short" +msgstr "Очень маленький" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:146 +msgid "RNG^Short" +msgstr "Маленький" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:147 +msgid "RNG^Normal" +msgstr "Нормальный" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:148 +msgid "RNG^Long" +msgstr "Большой" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:149 +msgid "RNG^Full" +msgstr "Полный" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:156 +msgid "Automatic taunts" +msgstr "Автоматические насмешки" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:165 +msgid "Time warning:" +msgstr "Предупреждение о таймауте за:" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:167 +msgid "WRN^None" +msgstr "Нет" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:168 +msgid "1 minute" +msgstr "1 минуту" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:169 +msgid "5 minutes" +msgstr "5 минут" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:170 +msgid "WRN^Both" +msgstr "1 и 5 минут" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:173 +msgid "Hit indicator" +msgstr "Индикатор попадания" + +#: qcsrc/menu/xonotic/dialog_settings_audio.c:175 +msgid "Menu sounds" +msgstr "Звуки меню" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:38 +msgid "Quality preset:" +msgstr "Качество:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:41 +msgid "PRE^OMG!" +msgstr "ОХЩИ-" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:42 +msgid "PRE^Low" +msgstr "Низкое" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:43 +msgid "PRE^Medium" +msgstr "Среднее" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:44 +msgid "PRE^Normal" +msgstr "Нормальное" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:45 +msgid "PRE^High" +msgstr "Высокое" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:46 +msgid "PRE^Ultra" +msgstr "Ультра" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:48 +msgid "PRE^Ultimate" +msgstr ">9000" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:52 +msgid "Geometry detail:" +msgstr "Детализация:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:54 +msgid "DET^Lowest" +msgstr "Нижайшая" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:55 +msgid "DET^Low" +msgstr "Низкая" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:56 +msgid "DET^Normal" +msgstr "Нормальная" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:57 +msgid "DET^Good" +msgstr "Хорошая" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:58 +msgid "DET^Best" +msgstr "Лучшая" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:59 +msgid "DET^Insane" +msgstr "Высочайшая" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:62 +msgid "Antialiasing:" +msgstr "Сглаживание:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:64 +msgid "AA^Disabled" +msgstr "Отключено" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:65 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:103 +msgid "2x" +msgstr "2x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:66 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:104 +msgid "4x" +msgstr "4x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:70 +msgid "Texture resolution:" +msgstr "Разрешение текстур:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:73 +msgid "RES^Leet" +msgstr "Ужасное" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:74 +msgid "RES^Lowest" +msgstr "Нижайшее" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:75 +msgid "RES^Low" +msgstr "Низкое" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:76 +msgid "RES^Normal" +msgstr "Нормальное" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:77 +msgid "RES^Good" +msgstr "Хорошее" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:78 +msgid "RES^Best" +msgstr "Лучшее" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:91 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:94 +msgid "Avoid lossy texture compression" +msgstr "Избегать сжатия текстур с потерями" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:100 +msgid "Anisotropy:" +msgstr "Анизотропия:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:102 +msgid "ANISO^Disabled" +msgstr "Отключена" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:105 +msgid "8x" +msgstr "8x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:106 +msgid "16x" +msgstr "16x" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:110 +msgid "Particle quality:" +msgstr "Качество частиц:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:113 +msgid "Particle distance:" +msgstr "Дальность частиц:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:117 +msgid "Decals" +msgstr "Декали:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:120 +msgid "Distance:" +msgstr "Дальность:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:126 +msgid "Time:" +msgstr "Время:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:132 +msgid "Use lightmaps" +msgstr "Использовать карты освещения" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:133 +msgid "Deluxe mapping" +msgstr "Особое качество" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:135 +msgid "Gloss" +msgstr "Блеск" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:138 +msgid "Offset mapping" +msgstr "Оффсетное текстурирование" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:140 +msgid "Relief mapping" +msgstr "Рельефное текстурирование" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:143 +msgid "Reflections:" +msgstr "Отражения:" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:146 +msgid "Blurred" +msgstr "Размытые" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:147 +msgid "REFL^Good" +msgstr "Хорошие" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:148 +msgid "Sharp" +msgstr "Резкие" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:153 +msgid "Show surfaces" +msgstr "Показывать поверхности" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:155 +msgid "No dynamic lighting" +msgstr "Без динамического освещения" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:157 +msgid "Flash blend approximation" +msgstr "Грубая имитация" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:159 +msgid "Realtime dynamic lighting" +msgstr "Дин. освещение в реальном времени" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:160 +#: qcsrc/menu/xonotic/dialog_settings_effects.c:164 +msgid "Shadows" +msgstr "Тени" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:163 +msgid "Realtime world lighting" +msgstr "Дин. освещение мира в реальном времени" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:168 +msgid "Use normal maps" +msgstr "Использовать карты нормалей" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:170 +msgid "Soft shadows" +msgstr "Мягкие тени" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:173 +msgid "Coronas" +msgstr "Короны" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:175 +msgid "Bloom" +msgstr "Свечение" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:177 +msgid "High Dynamic Range (HDR)" +msgstr "High Dynamic Range (HDR)" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:181 +msgid "Motion blur:" +msgstr "Размытие (motion blur):" + +#: qcsrc/menu/xonotic/dialog_settings_effects.c:187 +msgid "Damage blur:" +msgstr "Размытие (урон):" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:26 +msgid "Key bindings:" +msgstr "Привязки клавиш:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:31 +msgid "Change key..." +msgstr "Сменить кнопку..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:35 +msgid "Edit..." +msgstr "Изменить..." + +#: qcsrc/menu/xonotic/dialog_settings_input.c:46 +msgid "Sensitivity:" +msgstr "Чувствительность:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:49 +msgid "UI mouse speed:" +msgstr "Скорость мыши в UI:" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:52 +msgid "Mouse filter" +msgstr "Фильтр мыши" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:54 +msgid "Invert mouse" +msgstr "Инвертировать мышь" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:57 +#: qcsrc/menu/xonotic/dialog_settings_input.c:59 +msgid "Use joystick input" +msgstr "Использовать ввод с джойстика" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:62 +#: qcsrc/menu/xonotic/dialog_settings_input.c:64 +msgid "Turn off OS mouse acceleration" +msgstr "Отключить OS акселерацию мыши" + +#: qcsrc/menu/xonotic/dialog_settings_input.c:66 +msgid "\"enter console\" also closes" +msgstr "\"открыть консоль\" также закрывает" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:5 +msgid "User defined key bind" +msgstr "Определённая пользователем привязка клавиш" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:42 +msgid "Command when pressed:" +msgstr "Команда при нажатии:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:45 +msgid "Command when released:" +msgstr "Команда при отжатии:" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:48 +msgid "Save" +msgstr "Сохранение" + +#: qcsrc/menu/xonotic/dialog_settings_input_userbind.c:51 +msgid "Cancel" +msgstr "Отмена" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:26 +msgid "Menu skins:" +msgstr "Оформления:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:47 +msgid "Show current time" +msgstr "Показывать время" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:49 +msgid "Show current date" +msgstr "Показывать дату" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:51 +msgid "Show frames per second" +msgstr "Показывать кадры/с (FPS)" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:53 +msgid "Speedometer" +msgstr "Спидометр" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:56 +msgid "qu/s (hidden)" +msgstr "qu/s (без назв.)" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:58 +msgid "qu/s" +msgstr "qu/s" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:60 +msgid "m/s" +msgstr "м/с" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:64 +msgid "km/h" +msgstr "км/ч" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:66 +msgid "mph" +msgstr "м/ч" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:68 +msgid "knots" +msgstr "узлы" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:71 +msgid "Show accelerometer" +msgstr "Показывать акселерометр" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:74 +msgid "Accelerometer scale:" +msgstr "Размер акселерометра:" + +#: qcsrc/menu/xonotic/dialog_settings_misc.c:80 +msgid "Minimize input latency" +msgstr "Уменьшить задержку ввода" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:5 +msgid "Advanced settings" +msgstr "Доп. настройки" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:23 +msgid "Cvar filter:" +msgstr "Фильтр Cvar:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:34 +msgid "Setting:" +msgstr "Настройка:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:42 +msgid "Value:" +msgstr "Значение:" + +#: qcsrc/menu/xonotic/dialog_settings_misc_cvars.c:54 +msgid "Description:" +msgstr "Описание:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:26 +msgid "Client-side movement prediction" +msgstr "Предсказание движения на стороне клиента" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:30 +msgid "Show netgraph" +msgstr "Показывать netgraph" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:33 +msgid "Network speed:" +msgstr "Скорость соединения:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:35 +msgid "56k" +msgstr "56k" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:36 +msgid "ISDN" +msgstr "ISDN" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:37 +msgid "Slow ADSL" +msgstr "Медленный ADSL" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:38 +msgid "Fast ADSL" +msgstr "Быстрый ADSL" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:39 +msgid "Broadband" +msgstr "Broadband" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:42 +msgid "Input packets/s:" +msgstr "Кол-во пакетов/с" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:46 +msgid "HTTP downloads:" +msgstr "HTTP загрузки:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:49 +msgid "Downloads:" +msgstr "Загрузки:" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:53 +msgid "Speed (kB/s):" +msgstr "Скорость (кБ/с):" + +#: qcsrc/menu/xonotic/dialog_settings_network.c:57 +msgid "Client UDP port:" +msgstr "UDP порт клиента:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:26 +msgid "Resolution:" +msgstr "Разрешение:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:29 +msgid "Font/UI size:" +msgstr "Размера шрифта/UI" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:31 +msgid "SZ^Unreadable" +msgstr "Нечитаемый" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:32 +msgid "SZ^Tiny" +msgstr "Крошечный" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:33 +msgid "SZ^Little" +msgstr "Маленький" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:34 +msgid "SZ^Small" +msgstr "Небольшой" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:35 +msgid "SZ^Medium" +msgstr "Средний" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:36 +msgid "SZ^Large" +msgstr "Большой" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:37 +msgid "SZ^Huge" +msgstr "Огромный" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:38 +msgid "SZ^Gigantic" +msgstr "Гигантский" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:39 +msgid "SZ^Colossal" +msgstr "Колоссальный" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:42 +msgid "Color depth:" +msgstr "Глубина цвета:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:45 +msgid "Full screen" +msgstr "Полный экран" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:46 +msgid "Vertical Synchronization" +msgstr "Вертикальная синхронизация" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:49 +msgid "Use OpenGL 2.0 shaders (GLSL)" +msgstr "Использовать шейдеры OGL 2.0 (GLSL)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:52 +msgid "Use Occlusion Queries" +msgstr "Использовать Occlusion Queries (Проверка видимости)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:55 +msgid "Vertex Buffer Objects (VBOs)" +msgstr "Использование Vertex Buffer Objects (VBOs)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:58 +msgid "VBO^Off" +msgstr "Отключено" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:59 +msgid "Vertices, some Tris (compatible)" +msgstr "Вершины, некоторые треугольники (совместимо)" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:62 +msgid "Vertices" +msgstr "Вершины" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:63 +msgid "Vertices and Triangles" +msgstr "Вершины и треугольники" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:65 +msgid "Depth first:" +msgstr "Сперва глубина:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:67 +msgid "DF^Disabled" +msgstr "Отключено" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:68 +msgid "DF^World" +msgstr "Мир" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:69 +msgid "DF^All" +msgstr "Всё" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:73 +msgid "Disable multithreaded OpenGL" +msgstr "Отключить многопоточный OpenGL" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:75 +msgid "Wait for GPU to finish each frame" +msgstr "Ждать завершения каждого кадра GPU" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:78 +msgid "Brightness:" +msgstr "Яркость:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:81 +msgid "Contrast:" +msgstr "Контраст:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:84 +msgid "Gamma:" +msgstr "Гамма:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:87 +msgid "Contrast boost:" +msgstr "Усиление контраста:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:90 +msgid "Saturation:" +msgstr "Насыщенность:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:95 +msgid "Use GLSL to handle color control" +msgstr "Использовать GLSL для контроля цвета" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:99 +msgid "LIT^Ambient:" +msgstr "Фоновое освещение:" + +#: qcsrc/menu/xonotic/dialog_settings_video.c:102 +msgid "Intensity:" +msgstr "Интенсивность:" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:4 +msgid "Singleplayer" +msgstr "Одиночная игра" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:59 +msgid "Instant action! (random map with bots)" +msgstr "Быстрая игра (случайная карта с ботами)" + +#: qcsrc/menu/xonotic/dialog_singleplayer.c:80 +msgid "Start Singleplayer!" +msgstr "Начать одиночную игру" + +#: qcsrc/menu/xonotic/dialog_singleplayer_winner.c:4 +msgid "Winner" +msgstr "Победитель" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:5 +msgid "Team Selection" +msgstr "Выбор команды" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:41 +msgid "join 'best' team (auto-select)" +msgstr "Выбрать 'лучшую' команду (автовыбор)" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:45 +msgid "red" +msgstr "красная" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:46 +msgid "blue" +msgstr "синяя" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:47 +msgid "yellow" +msgstr "жёлтая" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:48 +msgid "pink" +msgstr "розовая" + +#: qcsrc/menu/xonotic/dialog_teamselect.c:51 +msgid "spectate" +msgstr "наблюдать" + +#: qcsrc/menu/xonotic/mainwindow.c:35 qcsrc/menu/xonotic/mainwindow.c:38 +msgid "Do not press this button again!" +msgstr "Не нажимайте снова эту кнопку!" + +#: qcsrc/menu/xonotic/maplist.c:278 +msgid "" +"Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n" +msgstr "" +"Что? Не могу зайти (m = NULL). Перефильтрую, чтобы такого больше не " +"случалось.\n" + +#: qcsrc/menu/xonotic/maplist.c:286 +#, c-format +msgid "%s's Xonotic Server" +msgstr "Сервер Xonotic от %s" + +#: qcsrc/menu/xonotic/maplist.c:291 +msgid "" +"Huh? Can't play this (invalid game type). Refiltering so this won't happen " +"again.\n" +msgstr "" +"Что? Не могу зайти (неверный тип игры). Перефильтрую, чтобы такого больше не " +"случалось.\n" + +#: qcsrc/menu/xonotic/playermodel.c:174 +msgid "<no model found>" +msgstr "<модель игрока не найдена>" + +#: qcsrc/menu/xonotic/serverlist.c:357 +msgid "Remove" +msgstr "Убрать" + +#: qcsrc/menu/xonotic/serverlist.c:359 +msgid "Bookmark" +msgstr "В закладки" + +#: qcsrc/menu/xonotic/serverlist.c:515 +msgid "Ping" +msgstr "Пинг" + +#: qcsrc/menu/xonotic/serverlist.c:516 +msgid "Host name" +msgstr "Имя сервера" + +#: qcsrc/menu/xonotic/serverlist.c:517 +msgid "Map" +msgstr "Карта" + +#: qcsrc/menu/xonotic/serverlist.c:518 +msgid "Type" +msgstr "Тип" + +#: qcsrc/menu/xonotic/serverlist.c:519 +msgid "Players" +msgstr "Игроки" + +#: qcsrc/menu/xonotic/skinlist.c:105 +msgid "<TITLE>" +msgstr "<ЗАГОЛОВОК>" + +#: qcsrc/menu/xonotic/skinlist.c:106 +msgid "<AUTHOR>" +msgstr "<АВТОР>" + +#: qcsrc/menu/xonotic/skinlist.c:163 +#, c-format +msgid "%s: %s" +msgstr "%s: %s" + +#: qcsrc/menu/xonotic/slider_decibels.c:50 +msgid "VOL^OFF" +msgstr "Отключено" + +#: qcsrc/menu/xonotic/slider_decibels.c:52 +msgid "VOL^MAX" +msgstr "Максимум" + +#: qcsrc/menu/xonotic/slider_decibels.c:53 +#, c-format +msgid "%s dB" +msgstr "%s дБ" + +#: qcsrc/menu/xonotic/slider_resolution.c:65 +#, c-format +msgid "%dx%d" +msgstr "%dx%d" + +#: qcsrc/menu/xonotic/util.qc:270 +#, c-format +msgid "Received HTTP request data for an invalid id %d.\n" +msgstr "Получены данные HTTP запроса для неверного id %d.\n" + +#: qcsrc/menu/xonotic/util.qc:285 +#, c-format +msgid "error receiving update notification: status is %d\n" +msgstr "ошибка при получении уведомления об обновлении: статус %d\n" + +#: qcsrc/menu/xonotic/util.qc:290 +msgid "error: received HTML instead of an update notification\n" +msgstr "ошибка: получение HTML вместо уведомления об обновлении\n" + +#: qcsrc/menu/xonotic/util.qc:295 +msgid "error: received carriage returns from update notification server\n" +msgstr "" +"ошибка: получены символы возврата строки от сервера уведомлений об " +"обновлениях" + +#: qcsrc/menu/xonotic/util.qc:316 +#, c-format +msgid "" +"Update can be downloaded at:\n" +"%s\n" +msgstr "" +"Обновление может быть загружено с:\n" +"%s\n" + +#: qcsrc/menu/xonotic/util.qc:337 +msgid "Autogenerating mapinfo for newly added maps..." +msgstr "Автоматическое создание mapinfo для новых карт..." + +#: qcsrc/menu/xonotic/util.qc:432 +#, c-format +msgid "Update to %s now!" +msgstr "Обновитесь до %s сейчас же!" + +#: qcsrc/menu/xonotic/util.qc:509 +msgid "" +"^1ERROR: Texture compression is required but not supported.\n" +"^1Expect visual problems.\n" +msgstr "" +"1^ОШИБКА: Сжатие текстур требуется, но не поддерживается.\n" +"1^Ожидайте проблемы с отображением.\n" + +#: qcsrc/menu/xonotic/util.qc:531 +msgid "Arena" +msgstr "Arena" + +#: qcsrc/menu/xonotic/util.qc:532 +msgid "Assault" +msgstr "Assault" + +#: qcsrc/menu/xonotic/util.qc:533 +msgid "Capture The Flag" +msgstr "Capture The Flag" + +#: qcsrc/menu/xonotic/util.qc:534 +msgid "Clan Arena" +msgstr "Clan Arena" + +#: qcsrc/menu/xonotic/util.qc:535 +msgid "Deathmatch" +msgstr "Deathmatch" + +#: qcsrc/menu/xonotic/util.qc:536 +msgid "Domination" +msgstr "Domination" + +#: qcsrc/menu/xonotic/util.qc:537 +msgid "Freeze Tag" +msgstr "Freeze Tag" + +#: qcsrc/menu/xonotic/util.qc:538 +msgid "Keepaway" +msgstr "Keepaway" + +#: qcsrc/menu/xonotic/util.qc:539 +msgid "Key Hunt" +msgstr "Key Hunt" + +#: qcsrc/menu/xonotic/util.qc:540 +msgid "Last Man Standing" +msgstr "Last Man Standing" + +#: qcsrc/menu/xonotic/util.qc:541 +msgid "Nexball" +msgstr "Nexball" + +#: qcsrc/menu/xonotic/util.qc:542 +msgid "Onslaught" +msgstr "Onslaught" + +#: qcsrc/menu/xonotic/util.qc:543 +msgid "Race" +msgstr "Race" + +#: qcsrc/menu/xonotic/util.qc:544 +msgid "Race CTS" +msgstr "Race CTS" + +#: qcsrc/menu/xonotic/util.qc:545 +msgid "Runematch" +msgstr "Runematch" + +#: qcsrc/menu/xonotic/util.qc:546 +msgid "Team Deathmatch" +msgstr "Team Deathmatch" + +#: qcsrc/menu/xonotic/util.qc:565 +#, c-format +msgid "@!#%'n Tuba Throwing" +msgstr "@!#%'n Швыряние Тубой" + +#: qcsrc/menu/xonotic/util.qc:606 +msgid "Background:" +msgstr "Фон:" + +#: qcsrc/menu/xonotic/util.qc:608 qcsrc/menu/xonotic/util.qc:624 +#: qcsrc/menu/xonotic/util.qc:633 qcsrc/menu/xonotic/util.qc:641 +#: qcsrc/menu/xonotic/util.qc:653 +msgid "Default" +msgstr "По умолчанию" + +#: qcsrc/menu/xonotic/util.qc:619 +msgid "Use default" +msgstr "Исп. настройки по умолчанию" + +#: qcsrc/menu/xonotic/util.qc:639 +msgid "Team Color:" +msgstr "Цвет команды:" + +#: qcsrc/menu/xonotic/util.qh:49 +msgid "Enable panel" +msgstr "Включить панель" + +#~ msgid "" +#~ "Please answer a few initial questions to enhance the game experience." +#~ msgstr "Пожалуйста, ответьте на несколько начальных вопросов." diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 048773a01f..75e7320c9e 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -27,7 +27,7 @@ void cvar_clientsettemp_restore() void() menu_show_error = { - drawstring('0 200 0', "ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!", '8 8 0', '1 0 0', 1, 0); + drawstring('0 200 0', _("ERROR - MENU IS VISIBLE BUT NO MENU WAS DEFINED!"), '8 8 0', '1 0 0', 1, 0); }; // CSQC_Init : Called every time the CSQC code is initialized (essentially at map load) @@ -51,7 +51,7 @@ void CSQC_Init(void) __engine_check = checkextension("DP_SV_WRITEPICTURE"); if(!__engine_check) { - print("^3Your engine build is outdated\n^3This Server uses a newer QC VM. Please update!\n"); + print(_("^3Your engine build is outdated\n^3This Server uses a newer QC VM. Please update!\n")); localcmd("\ndisconnect\n"); return; } @@ -61,7 +61,7 @@ void CSQC_Init(void) check_unacceptable_compiler_bugs(); #ifdef WATERMARK - print("^4CSQC Build information: ", WATERMARK(), "\n"); + print(sprintf(_("^4CSQC Build information: %s\n"), WATERMARK())); #endif float i; @@ -222,7 +222,7 @@ float SetTeam(entity o, float Team) default: if(GetTeam(Team, false) == NULL) { - print("trying to switch to unsupported team ", ftos(Team), "\n"); + print(sprintf(_("trying to switch to unsupported team %d\n"), Team)); Team = COLOR_SPECTATOR; } break; @@ -238,7 +238,7 @@ float SetTeam(entity o, float Team) default: if(GetTeam(Team, false) == NULL) { - print("trying to switch to unsupported team ", ftos(Team), "\n"); + print(sprintf(_("trying to switch to unsupported team %d\n"), Team)); Team = COLOR_SPECTATOR; } break; @@ -248,7 +248,6 @@ float SetTeam(entity o, float Team) { if(o.has_team) { - //print("(DISCONNECT) leave team ", ftos(o.team), "\n"); tm = GetTeam(o.team, false); tm.team_size -= 1; o.has_team = 0; @@ -259,7 +258,6 @@ float SetTeam(entity o, float Team) { if not(o.has_team) { - //print("(CONNECT) enter team ", ftos(o.team), "\n"); o.team = Team; tm = GetTeam(Team, true); tm.team_size += 1; @@ -268,11 +266,9 @@ float SetTeam(entity o, float Team) } else if(Team != o.team) { - //print("(CHANGE) leave team ", ftos(o.team), "\n"); tm = GetTeam(o.team, false); tm.team_size -= 1; o.team = Team; - //print("(CHANGE) enter team ", ftos(o.team), "\n"); tm = GetTeam(Team, true); tm.team_size += 1; return TRUE; @@ -292,7 +288,6 @@ void Playerchecker_Think() { if(e.sort_prev) { - //print("playerchecker: KILL KILL KILL\n"); // player disconnected SetTeam(e, -1); RemovePlayer(e); @@ -304,7 +299,6 @@ void Playerchecker_Think() { if not(e.sort_prev) { - //print("playerchecker: SPAWN SPAWN SPAWN\n"); // player connected if not(e) playerslots[i] = e = spawn(); @@ -326,7 +320,6 @@ void Porto_Init(); void TrueAim_Init(); void PostInit(void) { - print(strcat("PostInit\n maxclients = ", ftos(maxclients), "\n")); localcmd(strcat("\nscoreboard_columns_set ", autocvar_scoreboard_columns, ";\n")); entity playerchecker; @@ -361,8 +354,8 @@ float CSQC_ConsoleCommand(string strMessage) return true; } else if(strCmd == "hud_save") { // save hud config if(argv(1) == "" || argv(2)) { - print("Usage:\n"); - print("hud_save configname (saves to hud_skinname_configname.cfg)\n"); + print(_("Usage:\n")); + print(_("hud_save configname (saves to hud_skinname_configname.cfg)\n")); } else HUD_Panel_ExportCfg(argv(1)); @@ -509,10 +502,10 @@ void GameCommand(string msg) if(argv(0) == "help" || argc == 0) { - print("Usage: cl_cmd COMMAND..., where possible commands are:\n"); - print(" settemp cvar value\n"); - print(" scoreboard_columns_set ...\n"); - print(" scoreboard_columns_help\n"); + print(_("Usage: cl_cmd COMMAND..., where possible commands are:\n")); + print(_(" settemp cvar value\n")); + print(_(" scoreboard_columns_set ...\n")); + print(_(" scoreboard_columns_help\n")); GameCommand_Generic("help"); return; } @@ -717,7 +710,7 @@ void Ent_ReadPlayerScore() #ifdef DP_CSQC_ENTITY_REMOVE_IS_B0RKED if(!isNew && n != self.sv_entnum) { - print("A CSQC entity changed its owner!\n"); + print(_("A CSQC entity changed its owner!\n")); isNew = true; Ent_Remove(); self.enttype = ENT_CLIENT_SCORES; @@ -931,7 +924,7 @@ void(float bIsNewEntity) CSQC_Ent_Update = if(self.enttype) if(t != self.enttype) { - print("A CSQC entity changed its type!\n"); + print(_("A CSQC entity changed its type!\n")); Ent_Remove(); bIsNewEntity = 1; } @@ -968,7 +961,7 @@ void(float bIsNewEntity) CSQC_Ent_Update = case ENT_CLIENT_GAUNTLET: Ent_ReadHook(bIsNewEntity, ENT_CLIENT_GAUNTLET); break; case ENT_CLIENT_ACCURACY: Ent_ReadAccuracy(); break; default: - error(strcat("unknown entity type in CSQC_Ent_Update: ", ftos(self.enttype), "\n")); + error(strcat(_("unknown entity type in CSQC_Ent_Update: %d\n"), self.enttype)); break; } @@ -1099,6 +1092,8 @@ void Ent_Init() cr_maxbullets = ReadByte(); + g_trueaim_minrange = ReadCoord(); + if(!postinit) PostInit(); } @@ -1438,12 +1433,12 @@ string getcommandkey(string text, string command) if ("" == keys) { if (hud_showbinds > 1) - return strcat(text, " (not bound)"); + return sprintf(_("%s (not bound)"), text); else return text; } else if (hud_showbinds > 1) - return strcat(text, " (", keys, ")"); + return sprintf(_("%s (%s)"), text, keys); else return keys; } diff --git a/qcsrc/client/View.qc b/qcsrc/client/View.qc index 160ad063f1..d3bbf79cb7 100644 --- a/qcsrc/client/View.qc +++ b/qcsrc/client/View.qc @@ -306,6 +306,9 @@ float TrueAimCheck() traceline(view_origin, view_origin + view_forward * MAX_SHOT_DISTANCE, mv, ta); trueaimpoint = trace_endpos; + if(vlen(trueaimpoint - view_origin) < g_trueaim_minrange) + trueaimpoint = view_origin + view_forward * g_trueaim_minrange; + if(vecs_x > 0) vecs_y = -vecs_y; else @@ -357,6 +360,9 @@ float myhealth_flash; vector myhealth_gentlergb; +float contentavgalpha, liquidalpha_prev; +vector liquidcolor_prev; + void CSQC_UpdateView(float w, float h) { entity e; @@ -572,7 +578,7 @@ void CSQC_UpdateView(float w, float h) // next R_RenderScene call drawstring('0 0 0', "", '1 1 0', '1 1 1', 0, 0); - if(autocvar_r_fakelight >= 2 || autocvar_r_fullbright >= 1) + if(autocvar_r_fakelight >= 2 || autocvar_r_fullbright) if not(serverflags & SERVERFLAG_ALLOW_FULLBRIGHT) { // apply night vision effect @@ -666,8 +672,57 @@ void CSQC_UpdateView(float w, float h) drawpic(reticle_pos, "gfx/reticle_nex", reticle_size, '1 1 1', f * autocvar_cl_reticle_item_nex, DRAWFLAG_NORMAL); } + // improved polyblend vector rgb; + if(autocvar_hud_contents) + { + float contentalpha_temp, incontent, liquidalpha, contentfadetime; + vector liquidcolor; + + switch(pointcontents(view_origin)) + { + case CONTENT_WATER: + liquidalpha = autocvar_hud_contents_water_alpha; + liquidcolor = stov(autocvar_hud_contents_water_color); + incontent = 1; + break; + + case CONTENT_LAVA: + liquidalpha = autocvar_hud_contents_lava_alpha; + liquidcolor = stov(autocvar_hud_contents_lava_color); + incontent = 1; + break; + + case CONTENT_SLIME: + liquidalpha = autocvar_hud_contents_slime_alpha; + liquidcolor = stov(autocvar_hud_contents_slime_color); + incontent = 1; + break; + + default: + liquidalpha = 0; + liquidcolor = '0 0 0'; + incontent = 0; + break; + } + + if(incontent) // fade in/out at different speeds so you can do e.g. instant fade when entering water and slow when leaving it. + { // also lets delcare previous values for blending properties, this way it isn't reset until after you have entered a different content + contentfadetime = autocvar_hud_contents_fadeintime; + liquidalpha_prev = liquidalpha; + liquidcolor_prev = liquidcolor; + } + else + contentfadetime = autocvar_hud_contents_fadeouttime; + + contentalpha_temp = bound(0, drawframetime / max(0.0001, contentfadetime), 1); + contentavgalpha = contentavgalpha * (1 - contentalpha_temp) + incontent * contentalpha_temp; + + if(contentavgalpha) + drawfill('0 0 0', eX * vid_conwidth + eY * vid_conheight, liquidcolor_prev, contentavgalpha * liquidalpha_prev, DRAWFLAG_NORMAL); + } + if(autocvar_hud_damage) { float myhealth_flash_temp; diff --git a/qcsrc/client/autocvars.qh b/qcsrc/client/autocvars.qh index 08ad7b9022..153fc71605 100644 --- a/qcsrc/client/autocvars.qh +++ b/qcsrc/client/autocvars.qh @@ -145,6 +145,16 @@ float autocvar_hud_configure_grid_alpha; float autocvar_hud_configure_grid_xsize; float autocvar_hud_configure_grid_ysize; float autocvar_hud_configure_teamcolorforced; +float autocvar_hud_contents; +float autocvar_hud_contents_factor; +float autocvar_hud_contents_fadeintime; +float autocvar_hud_contents_fadeouttime; +float autocvar_hud_contents_lava_alpha; +string autocvar_hud_contents_lava_color; +float autocvar_hud_contents_slime_alpha; +string autocvar_hud_contents_slime_color; +float autocvar_hud_contents_water_alpha; +string autocvar_hud_contents_water_color; float autocvar_hud_damage; string autocvar_hud_damage_color; float autocvar_hud_damage_factor; diff --git a/qcsrc/client/bgmscript.qc b/qcsrc/client/bgmscript.qc index 43255da584..353c5419ab 100644 --- a/qcsrc/client/bgmscript.qc +++ b/qcsrc/client/bgmscript.qc @@ -131,7 +131,7 @@ void BGMScript_InitEntity(entity e) e.bgmscriptline = e.bgmscriptline0 = i; if(i >= bgmscriptbufsize) { - print("ERROR: bgmscript does not define ", e.bgmscript, "\n"); + print(sprintf("ERROR: bgmscript does not define %s\n", e.bgmscript)); e.bgmscript = ""; } } @@ -182,7 +182,6 @@ float BGMScript(entity e) if(bgmtime < e.bgmscripttime) { - //print("reset ", e.bgmscript, "\n"); amp = GetCurrentAmplitude(e, e.bgmscripttime - e.bgmscriptstatetime + drawframetime); e.bgmscriptline = e.bgmscriptline0; diff --git a/qcsrc/client/ctf.qc b/qcsrc/client/ctf.qc index 0a5375f51d..0bd585f439 100644 --- a/qcsrc/client/ctf.qc +++ b/qcsrc/client/ctf.qc @@ -1,4 +1,5 @@ -//include "main.qh" +#ifdef CTF_EXAMPLE + // NOTE: This file contains lots of debugging stuff // it is not really used... can be seen as another sample... @@ -31,10 +32,10 @@ void() order_menu_render = color = getplayerkey(player_localentnum-1, "topcolor"); if(getstati(STAT_CTF_STATE) == CTF_STATE_COMMANDER) { - drawstring(ps, "\x1D\x1E\x1E\x1E\x1E Order Menu \x1E\x1E\x1E\x1E\x1F", '8 8 0', '1 1 0', 1, 0); ps += po; - drawstring(ps, strcat("Order: ", ctf_temp_1), '8 8 0', '1 1 0', 1, 0); ps += po; - drawcolorcodedstring(ps, "1) ^3previous page", '8 8 0', 1, 0); ps += po; - drawcolorcodedstring(ps, "2) ^3next page", '8 8 0', 1, 0); ps += po; + drawstring(ps, _("----- Order Menu -----"), '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, sprintf(_("Order: %s"), ctf_temp_1), '8 8 0', '1 1 0', 1, 0); ps += po; + drawcolorcodedstring(ps, _("1) ^3previous page"), '8 8 0', 1, 0); ps += po; + drawcolorcodedstring(ps, _("2) ^3next page"), '8 8 0', 1, 0); ps += po; for((n = 2), (p = i = 0); i < maxclients && n > 0; ++i) { frags = getplayerkey(i, "frags"); if(!frags || (i+1) == player_localentnum) @@ -51,7 +52,7 @@ void() order_menu_render = drawcolorcodedstring(ps, strcat(ftos(n), ") ", GetPlayerName(i), " : ", ftos(getstatf(STAT_CTF_STATE))), '8 8 0', 1, 0); ps += po; } } - drawstring(ps, "ESC) Exit Menu", '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _("ESC) Exit Menu"), '8 8 0', '1 1 0', 1, 0); ps += po; } else { menu_close(); } @@ -118,18 +119,18 @@ float(float bInputType, float nPrimary, float nSecondary) order_menu_action = } } if(n == 0) { - //print(strcat("Issuing order to: ", ftos(i+1), "\n")); + //print(sprintf(_("Issuing order to: %d\n"), i+1)); //print(strcat("cmd order #", ftos(i+1), " ", ctf_temp_1, ";\n")); localcmd(strcat("\ncmd order #", ftos(i+1), " ", ctf_temp_1, ";")); } else { - print(strcat("Couldn't find player ", ftos(chose), "\n")); + print(sprintf(_("Couldn't find player %d\n"), chose)); } return TRUE; } else if(nSecondary == K_ESCAPE) { strunzone(ctf_temp_1); menu_close(); } else { - //print(strcat("Menu action ", arg, " does not exist.\n")); + //print(sprintf(_("Menu action %s does not exist.\n"), arg)); return FALSE; } return TRUE; @@ -150,14 +151,14 @@ void() ctf_menu_render = po = '0 8 0'; if(getstati(STAT_CTF_STATE) == CTF_STATE_COMMANDER) { - drawstring(ps, "\x1D\x1E\x1E\x1E\x1E Command Menu \x1E\x1E\x1E\x1E\x1F", '8 8 0', '1 1 0', 1, 0); ps += po; - drawstring(ps, "Issue orders:", '8 8 0', '1 1 0', 1, 0); ps += po; - drawstring(ps, " 1) Attack ", '8 8 0', '1 1 0', 1, 0); - drawstring(ps + '80 0 0', " \x0F", '8 8 0', '1 1 1', 1, 0); ps += po; - drawstring(ps, " 2) Defend \x0E", '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _("----- Command Menu -----"), '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _("Issue orders:"), '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _(" 1) Attack "), '8 8 0', '1 1 0', 1, 0); + drawstring(ps + '80 0 0', _(" \x0F"), '8 8 0', '1 1 1', 1, 0); ps += po; + drawstring(ps, _(" 2) Defend \x0E"), '8 8 0', '1 1 0', 1, 0); ps += po; ps += po; - drawstring(ps, "3) Resign from command.", '8 8 0', '1 1 0', 1, 0); ps += po; - drawstring(ps, "ESC) Exit Menu", '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _("3) Resign from command."), '8 8 0', '1 1 0', 1, 0); ps += po; + drawstring(ps, _("ESC) Exit Menu"), '8 8 0', '1 1 0', 1, 0); ps += po; } else { menu_close(); } @@ -208,9 +209,11 @@ void() ctf_view = } else if(stat == CTF_STATE_DEFEND) { drawpic('0 0 0', "gfx/ctf_ic_def.tga", '64 64 0', '1 1 1', 1, 0); } else if(stat == CTF_STATE_COMMANDER) { - drawstring('0 0 0', "You're commander!", '8 8 0', '1 1 1', 1, 0); + drawstring('0 0 0', _("You're commander!"), '8 8 0', '1 1 1', 1, 0); } else if(stat < 0) { } else { - drawstring('0 0 0', "Awaiting orders...", '8 8 0', '1 1 1', 0.5, 0); + drawstring('0 0 0', _("Awaiting orders..."), '8 8 0', '1 1 1', 0.5, 0); } }; + +#endif diff --git a/qcsrc/client/damage.qc b/qcsrc/client/damage.qc index 24c5f0153b..13c8e462e3 100644 --- a/qcsrc/client/damage.qc +++ b/qcsrc/client/damage.qc @@ -54,15 +54,11 @@ void Ent_DamageInfo(float isNew) thisforce = forcemul * force; } - //print("check ", ftos(num_for_edict(self)), " ", self.classname, "\n"); - //print(ftos(self.damageforcescale), "\n"); - //print(vtos(thisforce), "\n"); if(self.damageforcescale) if(vlen(thisforce)) { self.move_velocity = self.move_velocity + self.damageforcescale * thisforce; self.move_flags &~= FL_ONGROUND; - //print("pushed ", ftos(num_for_edict(self)), " loose\n"); } if(w_issilent) diff --git a/qcsrc/client/effects.qc b/qcsrc/client/effects.qc index 5793ed88b2..b695867ca3 100644 --- a/qcsrc/client/effects.qc +++ b/qcsrc/client/effects.qc @@ -57,19 +57,16 @@ void cl_effetcs_lightningarc(vector from, vector to,float seglength,float drifts dirnew = normalize(direction * (1 - drift) + randomvec() * drift); pos = pos_l + dirnew * steplength; te_lightning1(world,pos_l,pos); - //b_make(pos_l, pos,"particles/lightning2",0.25,64); if(random() < branchfactor) cl_effetcs_lightningarc(pos, pos + (dirnew * length * 0.25),seglength,drifts,drifte,min(branchfactor + branchfactor_add,1),branchfactor_add); pos_l = pos; } te_lightning1(world,pos_l,to); - //b_make(pos_l, to,"particles/lightning2",0.25,64); } else te_lightning1(world,from,to); - //b_make(from, to,"particles/lightning2",0.25,64); } diff --git a/qcsrc/client/hook.qc b/qcsrc/client/hook.qc index 09327e30aa..7ff5adeca4 100644 --- a/qcsrc/client/hook.qc +++ b/qcsrc/client/hook.qc @@ -18,13 +18,6 @@ void Draw_CylindricLine(vector from, vector to, float thickness, string texture, // direction is perpendicular to the view normal, and perpendicular to the axis thickdir = normalize(cross(axis, vieworg - from)); -/* - print("from ", vtos(from), "\n"); - print("to ", vtos(to), "\n"); - print("org ", vtos(view_origin), "\n"); - print("dir ", vtos(thickdir), "\n"); -*/ - A = from - thickdir * (thickness / 2); B = from + thickdir * (thickness / 2); C = to + thickdir * (thickness / 2); diff --git a/qcsrc/client/hud.qc b/qcsrc/client/hud.qc index 9592fe4b67..e2f7362c60 100644 --- a/qcsrc/client/hud.qc +++ b/qcsrc/client/hud.qc @@ -325,13 +325,13 @@ void drawstringcenter(vector position, string text, vector scale, vector rgb, fl // return the string of the given race place string race_PlaceName(float pos) { if(pos == 1) - return "1st"; + return _("1st"); else if(pos == 2) - return "2nd"; + return _("2nd"); else if(pos == 3) - return "3rd"; + return _("3rd"); else - return strcat(ftos(pos), "th"); + return sprintf(_("%dth"), pos); } // return the string of the onscreen race timer @@ -363,12 +363,12 @@ string MakeRaceString(float cp, float mytime, float histime, float lapdelta, str if(lapdelta > 0) { - lapstr = strcat(" (-", ftos(lapdelta), "L)"); + lapstr = sprintf(_(" (-%dL)"), lapdelta); col = "^2"; } else if(lapdelta < 0) { - lapstr = strcat(" (+", ftos(-lapdelta), "L)"); + lapstr = sprintf(_(" (+%dL)"), -lapdelta); col = "^1"; } } @@ -384,20 +384,20 @@ string MakeRaceString(float cp, float mytime, float histime, float lapdelta, str col = "^7"; if(cp == 254) - cpname = "Start line"; + cpname = _("Start line"); else if(cp == 255) - cpname = "Finish line"; + cpname = _("Finish line"); else if(cp) - cpname = strcat("Intermediate ", ftos(cp)); + cpname = sprintf(_("Intermediate %d"), cp); else - cpname = "Finish line"; + cpname = _("Finish line"); if(histime < 0) return strcat(col, cpname); else if(hisname == "") - return strcat(col, cpname, " (", timestr, ")"); + return strcat(col, sprintf(_("%s (%s)")), cpname, timestr); else - return strcat(col, cpname, " (", timestr, " ", strcat(hisname, col, lapstr), ")"); + return strcat(col, sprintf(_("%s (%s %s)")), cpname, timestr, strcat(hisname, col, lapstr)); } // Check if the given name already exist in race rankings? In that case, where? (otherwise return 0) @@ -539,11 +539,11 @@ void HUD_Panel_ExportCfg(string cfgname) } HUD_Write("menu_sync\n"); // force the menu to reread the cvars, so that the dialogs are updated - print("^2Successfully exported to ", filename, "! (Note: It's saved in data/data/)\n"); + print(sprintf(_("^2Successfully exported to %s! (Note: It's saved in data/data/)\n"), filename)); fclose(fh); } else - print("^1Couldn't write to ", filename, "\n"); + print(sprintf(_("^1Couldn't write to \n"), filename)); } const float hlBorderSize = 4; @@ -1827,11 +1827,11 @@ void HUD_Weapons(void) color = stov(autocvar_hud_panel_weapons_complainbubble_color_outofammo); } else if(complain_weapon_type == 1) { - s = "Don't have"; + s = _("Don't have"); color = stov(autocvar_hud_panel_weapons_complainbubble_color_donthave); } else { - s = "Unavailable"; + s = _("Unavailable"); color = stov(autocvar_hud_panel_weapons_complainbubble_color_unavailable); } float padding = autocvar_hud_panel_weapons_complainbubble_padding; @@ -2682,39 +2682,39 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s } else if (type == DEATH_KILL) { HUD_KillNotify_Push(s1, "", 0, DEATH_KILL); if (alsoprint) - print ("^1",s1, "^1 couldn't take it anymore\n"); + print (sprintf(_("^1%s^1 couldn't take it anymore\n"), s1)); } else if (type == DEATH_ROT) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if (alsoprint) - print ("^1",s1, "^1 died\n"); + print (sprintf(_("^1%s^1 died\n"), s1)); } else if (type == DEATH_NOAMMO) { HUD_KillNotify_Push(s1, "", 0, DEATH_NOAMMO); if (alsoprint) - print ("^7",s1, "^7 committed suicide. What's the point of living without ammo?\n"); + print (sprintf(_("^7%s^7 committed suicide. What's the point of living without ammo?\n"), s1)); } else if (type == DEATH_CAMP) { HUD_KillNotify_Push(s1, "", 0, DEATH_CAMP); if (alsoprint) - print ("^1",s1, "^1 thought they found a nice camping ground\n"); + print (sprintf(_("^1%s^1 thought they found a nice camping ground\n"), s1)); } else if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) { HUD_KillNotify_Push(s1, "", 0, type); if (alsoprint) - print ("^1",s1, "^1 didn't become friends with the Lord of Teamplay\n"); + print (sprintf(_("^1%s^1 didn't become friends with the Lord of Teamplay\n"), s1)); } else if (type == DEATH_CHEAT) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if (alsoprint) - print ("^1",s1, "^1 unfairly eliminated themself\n"); + print (sprintf(_("^1%s^1 unfairly eliminated themself\n"), s1)); } else if (type == DEATH_FIRE) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if (alsoprint) - print ("^1",s1, "^1 burned to death\n"); + print (sprintf(_("^1%s^1 burned to death\n"), s1)); } else if (type != DEATH_TEAMCHANGE && type != DEATH_QUIET) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if (alsoprint) - print ("^1",s1, "^1 couldn't resist the urge to self-destruct\n"); + print (sprintf(_("^1%s^1 couldn't resist the urge to self-destruct\n"), s1)); } if (stof(s2) > 2) // killcount > 2 - print ("^1",s1,"^1 ended it all after a ",s2," kill spree\n"); + print (sprintf(_("^1%s^1 ended it all after a %d kill spree\n"), s1, stof(s2))); } else if(msg == MSG_KILL) { w = DEATH_WEAPONOF(type); if(WEP_VALID(w)) { @@ -2731,112 +2731,112 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s if(alsoprint) { if(gentle) { - print ("^1", s1, "^1 took action against a team mate\n"); + print (sprintf(_("^1%s^1 took action against a team mate\n"), s1)); } else { - print ("^1", s1, "^1 mows down a team mate\n"); + print (sprintf(_("^1%s^1 mows down a team mate\n"), s1)); } } if (stof(s2) > 2 && type == KILL_TEAM_SPREE) { if(gentle) - print ("^1",s1,"^1 ended a ",s3," scoring spree by going against a team mate\n"); + print (sprintf(_("^1%s^1 ended a %d scoring spree by going against a team mate\n"), s1, stof(s3))); else - print ("^1",s1,"^1 ended a ",s3," kill spree by killing a team mate\n"); + print (sprintf(_("^1%s^1 ended a %d kill spree by killing a team mate\n"), s1, stof(s3))); } else if (stof(s2) > 2) { if(gentle) - print ("^1",s1,"'s ^1",s3," scoring spree was ended by a team mate!\n"); + print (sprintf(_("^1%s's ^1%s scoring spree was ended by a team mate!\n"), s1, stof(s3))); else - print ("^1",s1,"'s ^1",s3," kill spree was ended by a team mate!\n"); + print (sprintf(_("^1%s's ^1%s kill spree was ended by a team mate!\n"), s1, stof(s3))); } } else if(type == KILL_FIRST_BLOOD) - print("^1",s1, "^1 drew first blood", "\n"); + print(sprintf("^1%s^1 drew first blood\n", s1)); else if (type == DEATH_TELEFRAG) { HUD_KillNotify_Push(s1, s2, 1, DEATH_TELEFRAG); if(gentle) - print ("^1",s2, "^1 tried to occupy ", s1, "^1's teleport destination space\n"); + print (sprintf(_("^1%s^1 tried to occupy %s^1's teleport destination space\n"), s2, s1)); else - print ("^1",s2, "^1 was telefragged by ", s1, "\n"); + print (sprintf(_("^1%s^1 was telefragged by %s\n"), s2, s1)); } else if (type == DEATH_DROWN) { HUD_KillNotify_Push(s1, s2, 1, DEATH_DROWN); if(alsoprint) - print ("^1",s2, "^1 was drowned by ", s1, "\n"); + print (sprintf(_("^1%s^1 was drowned by %s\n"), s2, s1)); } else if (type == DEATH_SLIME) { HUD_KillNotify_Push(s1, s2, 1, DEATH_SLIME); if(alsoprint) - print ("^1",s2, "^1 was slimed by ", s1, "\n"); + print (sprintf(_("^1%s^1 was slimed by %s\n"), s2, s1)); } else if (type == DEATH_LAVA) { HUD_KillNotify_Push(s1, s2, 1, DEATH_LAVA); if(alsoprint) - print ("^1",s2, "^1 was cooked by ", s1, "\n"); + print (sprintf(_("^1%s^1 was cooked by %s\n"), s2, s1)); } else if (type == DEATH_FALL) { HUD_KillNotify_Push(s1, s2, 1, DEATH_FALL); if(alsoprint) - print ("^1",s2, "^1 was grounded by ", s1, "\n"); + print (sprintf(_("^1%s^1 was grounded by %s\n"), s2, s1)); } else if (type == DEATH_SHOOTING_STAR) { HUD_KillNotify_Push(s1, s2, 1, DEATH_SHOOTING_STAR); if(alsoprint) - print ("^1",s2, "^1 was shot into space by ", s1, "\n"); + print (sprintf(_("^1%s^1 was shot into space by %s\n"), s2, s1)); } else if (type == DEATH_SWAMP) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was conserved by ", s1, "\n"); + print (sprintf(_("^1%s^1 was conserved by %s\n"), s2, s1)); } else if (type == DEATH_HURTTRIGGER) { HUD_KillNotify_Push(s1, s2, 1, DEATH_HURTTRIGGER); if(alsoprint) - print("^1",s2, "^1 was thrown into a world of hurt by ", s1, "\n"); + print(sprintf(_("^1%s^1 was thrown into a world of hurt by %s\n"), s2, s1)); } else if(type == DEATH_SBCRUSH) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was crushed by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was crushed by ^1%s\n"), s2, s1)); } else if(type == DEATH_SBMINIGUN) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 got shredded by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 got shredded by ^1%s\n"), s2, s1)); } else if(type == DEATH_SBROCKET) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was blased to bits by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was blased to bits by ^1%s\n"), s2, s1)); } else if(type == DEATH_SBBLOWUP) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 got caught in the destruction of ^1", s1, "'s vehicle\n"); + print (sprintf(_("^1%s^1 got caught in the destruction of ^1%s's vehicle\n"), s2, s1)); } else if(type == DEATH_WAKIGUN) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was bolted down by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was bolted down by ^1%s\n"), s2, s1)); } else if(type == DEATH_WAKIROCKET) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 could find no shelter from ^1", s1, "'s rockets\n"); + print (sprintf(_("^1%s^1 could find no shelter from ^1%s's rockets\n"), s2, s1)); } else if(type == DEATH_WAKIBLOWUP) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 dies when ^1", s1, "'s wakizashi dies.\n"); + print (sprintf(_("^1%s^1 dies when ^1%s's wakizashi dies.\n"), s2, s1)); } else if(type == DEATH_TURRET) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was pushed into the line of fire by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was pushed into the line of fire by ^1%s\n"), s2, s1)); } else if(type == DEATH_TOUCHEXPLODE) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was pushed into an accident by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was pushed into an accident by ^1%s\n"), s2, s1)); } else if(type == DEATH_CHEAT) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was unfairly eliminated by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was unfairly eliminated by ^1%s\n"), s2, s1)); } else if (type == DEATH_FIRE) { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was burnt to death by ^1", s1, "\n"); + print (sprintf(_("^1%s^1 was burnt to death by ^1%s\n"), s2, s1)); } else if (type == DEATH_CUSTOM) { HUD_KillNotify_Push(s1, s2, 1, DEATH_CUSTOM); if(alsoprint) @@ -2848,54 +2848,54 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s } else { HUD_KillNotify_Push(s1, s2, 1, DEATH_GENERIC); if(alsoprint) - print ("^1",s2, "^1 was fragged by ", s1, "\n"); + print (sprintf(_("^1%s^1 was fragged by %s\n"), s2, s1)); } } else if(msg == MSG_SPREE) { if(type == KILL_END_SPREE) { if(gentle) - print ("^1",s1,"'s ^1", s2, " scoring spree was ended by ", s3, "\n"); + print (sprintf(_("^1%s's ^1%s scoring spree was ended by %s\n"), s1, s2, s3)); else - print ("^1",s1,"'s ^1", s2, " kill spree was ended by ", s3, "\n"); + print (sprintf(_("^1%s's ^1%s kill spree was ended by %s\n"), s1, s2, s3)); } else if(type == KILL_SPREE) { if(gentle) - print ("^1",s1,"^1 made ",s2," scores in a row\n"); + print (sprintf(_("^1%s^1 made %s scores in a row\n"), s1, s2)); else - print ("^1",s1,"^1 has ",s2," frags in a row\n"); + print (sprintf(_("^1%s^1 has %s frags in a row\n"), s1, s2)); } else if(type == KILL_SPREE_3) { if(gentle) - print (s1,"^7 made a ^1TRIPLE SCORE\n"); + print (sprintf(_("%s^7 made a ^1TRIPLE SCORE\n"), s1)); else - print (s1,"^7 made a ^1TRIPLE FRAG\n"); + print (sprintf(_("%s^7 made a ^1TRIPLE FRAG\n"), s1)); } else if(type == KILL_SPREE_5) { if(gentle) - print (s1,"^7 unleashes ^1SCORING RAGE\n"); + print (sprintf(_("%s^7 unleashes ^1SCORING RAGE\n"), s1)); else - print (s1,"^7 unleashes ^1RAGE\n"); + print (sprintf(_("%s^7 unleashes ^1RAGE\n"), s1)); } else if(type == KILL_SPREE_10) { if(gentle) - print (s1,"^7 made ^1TEN SCORES IN A ROW!\n"); + print (sprintf(_("%s^7 made ^1TEN SCORES IN A ROW!\n"), s1)); else - print (s1,"^7 starts the ^1MASSACRE!\n"); + print (sprintf(_("%s^7 starts the ^1MASSACRE!\n"), s1)); } else if(type == KILL_SPREE_15) { if(gentle) - print (s1,"^7 made ^1FIFTEEN SCORES IN A ROW!\n"); + print (sprintf(_("%s^7 made ^1FIFTEEN SCORES IN A ROW!\n"), s1)); else - print (s1,"^7 executes ^1MAYHEM!\n"); + print (sprintf(_("%s^7 executes ^1MAYHEM!\n"), s1)); } else if(type == KILL_SPREE_20) { if(gentle) - print (s1,"^7 made ^1TWENTY SCORES IN A ROW!\n"); + print (sprintf(_("%s^7 made ^1TWENTY SCORES IN A ROW!\n"), s1)); else - print (s1,"^7 is a ^1BERSERKER!\n"); + print (sprintf(_("%s^7 is a ^1BERSERKER!\n"), s1)); } else if(type == KILL_SPREE_25) { if(gentle) - print (s1,"^7 made ^1TWENTY FIFE SCORES IN A ROW!\n"); + print (sprintf(_("%s^7 made ^1TWENTY FIFE SCORES IN A ROW!\n"), s1)); else - print (s1,"^7 inflicts ^1CARNAGE!\n"); + print (sprintf(_("%s^7 inflicts ^1CARNAGE!\n"), s1)); } else if(type == KILL_SPREE_30) { if(gentle) - print (s1,"^7 made ^1THIRTY SCORES IN A ROW!\n"); + print (sprintf(_("%s^7 made ^1THIRTY SCORES IN A ROW!\n"), s1)); else - print (s1,"^7 unleashes ^1ARMAGEDDON!\n"); + print (sprintf(_("%s^7 unleashes ^1ARMAGEDDON!\n"), s1)); } } else if(msg == MSG_KILL_ACTION) { // wtf is this? isnt it basically the same as MSG_SUICIDE? if (type == DEATH_DROWN) { @@ -2903,49 +2903,49 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s if(alsoprint) { if(gentle) - print ("^1",s1, "^1 was in the water for too long\n"); + print (sprintf(_("^1%s^1 was in the water for too long\n"), s1)); else - print ("^1",s1, "^1 drowned\n"); + print (sprintf(_("^1%s^1 drowned\n"), s1)); } } else if (type == DEATH_SLIME) { HUD_KillNotify_Push(s1, "", 0, DEATH_SLIME); if(alsoprint) - print ("^1",s1, "^1 was slimed\n"); + print (sprintf("^1%s^1 was slimed\n", s1)); } else if (type == DEATH_LAVA) { HUD_KillNotify_Push(s1, "", 0, DEATH_LAVA); if(alsoprint) { if(gentle) - print ("^1",s1, "^1 found a hot place\n"); + print (sprintf(_("^1%s^1 found a hot place\n"), s1)); else - print ("^1",s1, "^1 turned into hot slag\n"); + print (sprintf(_("^1%s^1 turned into hot slag\n"), s1)); } } else if (type == DEATH_FALL) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) { if(gentle) - print ("^1",s1, "^1 tested gravity (and it worked)\n"); + print (sprintf(_("^1%s^1 tested gravity (and it worked)\n"), s1)); else - print ("^1",s1, "^1 hit the ground with a crunch\n"); + print (sprintf(_("^1%s^1 hit the ground with a crunch\n"), s1)); } } else if (type == DEATH_SHOOTING_STAR) { HUD_KillNotify_Push(s1, "", 0, DEATH_SHOOTING_STAR); if(alsoprint) - print ("^1",s1, "^1 became a shooting star\n"); + print (sprintf(_("^1%s^1 became a shooting star\n"), s1)); } else if (type == DEATH_SWAMP) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) { if(gentle) - print ("^1",s1, "^1 discovered a swamp\n"); + print (sprintf(_("^1%s^1 discovered a swamp\n"), s1)); else - print ("^1",s1, "^1 is now conserved for centuries to come\n"); + print (sprintf(_("^1%s^1 is now conserved for centuries to come\n"), s1)); } } else if(type == DEATH_TURRET) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) - print ("^1",s1, "^1 was mowed down by a turret \n"); + print (sprintf(_("^1%s^1 was mowed down by a turret \n"), s1)); } else if (type == DEATH_CUSTOM) { HUD_KillNotify_Push(s1, "", 0, DEATH_CUSTOM); if(alsoprint) @@ -2957,51 +2957,51 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s } else if(type == DEATH_TOUCHEXPLODE) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) - print ("^1",s1, "^1 died in an accident\n"); + print (sprintf(_("^1%s^1 died in an accident\n"), s1)); } else if(type == DEATH_CHEAT) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) - print ("^1",s1, "^1 was unfairly eliminated\n"); + print (sprintf(_("^1%s^1 was unfairly eliminated\n"), s1)); } else if(type == DEATH_FIRE) { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) { if(gentle) - print ("^1",s1, "^1 felt a little hot\n"); + print (sprintf(_("^1%s^1 felt a little hot\n"), s1)); else - print ("^1",s1, "^1 burnt to death\n"); + print (sprintf(_("^1%s^1 burnt to death\n"), s1)); } } else { HUD_KillNotify_Push(s1, "", 0, DEATH_GENERIC); if(alsoprint) { if(gentle) - print ("^1",s1, "^1 needs a restart\n"); + print (sprintf(_("^1%s^1 needs a restart\n"), s1)); else - print ("^1",s1, "^1 died\n"); + print (sprintf(_("^1%s^1 died\n"), s1)); } } } else if(msg == MSG_KILL_ACTION_SPREE) { if(gentle) - print ("^1",s1,"^1 needs a restart after a ",s2," scoring spree\n"); + print (sprintf(_("^1%s^1 needs a restart after a %d scoring spree\n"), s1, stof(s2))); else - print ("^1",s1,"^1 died with a ",s2," kill spree\n"); + print (sprintf(_("^1%s^1 died with a %d kill spree\n"), s1, stof(s2))); } else if(msg == MSG_INFO) { if(type == INFO_GOTFLAG) { // here, s2 is the flag name HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG); - print(s1, "^7 got the ", s2, "\n"); + print(sprintf(_("%s^7 got the %s\n"), s1, s2)); } else if(type == INFO_LOSTFLAG) { HUD_KillNotify_Push(s1, s2, 0, INFO_LOSTFLAG); - print(s1, "^7 lost the ", s2, "\n"); + print(sprintf(_("%s^7 lost the %s\n"), s1, s2)); } else if(type == INFO_PICKUPFLAG) { HUD_KillNotify_Push(s1, s2, 0, INFO_GOTFLAG); - print(s1, "^7 picked up the ", s2, "\n"); + print(sprintf(_("%s^7 picked up the %s\n"), s1, s2)); } else if(type == INFO_RETURNFLAG) { HUD_KillNotify_Push(s1, s2, 0, INFO_RETURNFLAG); - print(s1, "^7 returned the ", s2, "\n"); + print(sprintf(_("%s^7 returned the %s\n"), s1, s2)); } else if(type == INFO_CAPTUREFLAG) { HUD_KillNotify_Push(s1, s2, 0, INFO_CAPTUREFLAG); - print(s1, "^7 captured the ", s2, s3, "\n"); + print(sprintf(_("%1^7 captured the %s%s\n"), s1, s2, s3)); } } else if(msg == MSG_RACE) { if(type == RACE_SERVER_RECORD) { @@ -3020,12 +3020,12 @@ void HUD_KillNotify(string s1, string s2, string s3, float type, float msg) // s if(type == KA_PICKUPBALL) { HUD_KillNotify_Push(s1, s2, 0, KA_PICKUPBALL); if(alsoprint) - print (s1, "^7 has picked up the ball!\n"); + print (sprintf(_("%s^7 has picked up the ball!\n"), s1)); } else if(type == KA_DROPBALL) { HUD_KillNotify_Push(s1, s2, 0, KA_DROPBALL); if(alsoprint) - print(s1, "^7 has dropped the ball!\n"); + print(sprintf(_("%s^7 has dropped the ball!\n"), s1)); } } } @@ -3038,84 +3038,84 @@ void HUD_Centerprint(string s1, string s2, float type, float msg) gentle = (autocvar_cl_gentle || autocvar_cl_gentle_messages); if(msg == MSG_SUICIDE) { if (type == DEATH_TEAMCHANGE) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "You are now on: ", s1)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You are now on: %s"), s1))); } else if (type == DEATH_AUTOTEAMCHANGE) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "You have been moved into a different team to improve team balance\nYou are now on: ", s1)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("You have been moved into a different team to improve team balance\nYou are now on: %s"), s1))); } else if (type == DEATH_CAMP) { if(gentle) - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Reconsider your tactics, camper!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Reconsider your tactics, camper!"))); else - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Die camper!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Die camper!"))); } else if (type == DEATH_NOAMMO) { if(gentle) - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You are reinserted into the game for running out of ammo...")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You are reinserted into the game for running out of ammo..."))); else - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were killed for running out of ammo...")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You were killed for running out of ammo..."))); } else if (type == DEATH_ROT) { if(gentle) - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You need to preserve your health")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to preserve your health"))); else - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You grew too old without taking your medicine")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You grew too old without taking your medicine"))); } else if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) { if(gentle) - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Don't go against team mates!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't go against team mates!"))); else - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Don't shoot your team mates!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Don't shoot your team mates!"))); } else if (type == DEATH_QUIET) { // do nothing } else { // generic message if(gentle) - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You need to be more careful!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You need to be more careful!"))); else - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You killed your own dumb self!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1You killed your own dumb self!"))); } } else if(msg == MSG_KILL) { if (type == KILL_TEAM_RED || type == KILL_TEAM_BLUE) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Moron! You went against", s1, ",a team mate!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You went against %s, a team mate!"), s1))); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Moron! You fragged ", s1, ", a team mate!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1Moron! You fragged %s, a team mate!"), s1))); } } else if (type == KILL_FIRST_BLOOD) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1First score")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First score"))); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1First blood")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First blood"))); } } else if (type == KILL_FIRST_VICTIM) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1First casualty")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First casualty"))); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1First victim")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1First victim"))); } } else if (type == KILL_TYPEFRAG) { // s2 contains "advanced kill messages" such as ping, handicap... if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You scored against ^7", s1, "^1 who was typing!", s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You scored against ^7%s^1 who was typing!"), s1), s2)); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You typefragged ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You typefragged ^7%s"), s1), s2)); } } else if (type == KILL_TYPEFRAGGED) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were scored against by ^7", s1, "^1 while you were typing!", s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s^1 while you were typing!"), s1), s2)); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were typefragged by ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were typefragged by ^7%s"), s1), s2)); } } else if (type == KILL_FRAG) { if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You scored against ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You scored against ^7%s"), s1), s2)); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^4You fragged ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^4You fragged ^7%s"), s1), s2)); } } else { // generic message if(gentle) { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were scored against by ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were scored against by ^7%s"), s1), s2)); } else { - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1You were fragged by ^7", s1, s2)); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, sprintf(_("^1You were fragged by ^7%s"), s1), s2)); } } } else if(msg == MSG_KILL_ACTION) { // TODO: invent more centerprints here? - centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, "^1Watch your step!")); + centerprint(strcat(DAMAGE_CENTERPRINT_SPACER, _("^1Watch your step!"))); } } @@ -3179,8 +3179,8 @@ void HUD_Notify (void) a = i; else // inverse order a = entries - 1 - i; - attacker = textShortenToWidth(strcat("Player", ftos(a+1)), 0.48 * mySize_x - height, fontsize, stringwidth_colors); - victim = textShortenToWidth(strcat("Player", ftos(a+2)), 0.48 * mySize_x - height, fontsize, stringwidth_colors); + attacker = textShortenToWidth(sprintf(_("Player %d"), a+1), 0.48 * mySize_x - height, fontsize, stringwidth_colors); + victim = textShortenToWidth(sprintf(_("Player %d"), a+2), 0.48 * mySize_x - height, fontsize, stringwidth_colors); s = strcat("weapon", get_weaponinfo(WEP_FIRST + mod(floor(a*2.4), WEP_LAST)).netname); a = bound(0, (when - a) / 4, 1); goto hud_config_notifyprint; @@ -3425,11 +3425,7 @@ string seconds_tostring(float sec) minutes = floor(sec / 60); sec -= minutes * 60; - - string s; - s = ftos(100 + sec); - - return strcat(ftos(minutes), ":", substring(s, 1, 3)); + return sprintf("%d:%02d", minutes, sec); } void HUD_Timer(void) @@ -3780,9 +3776,9 @@ void HUD_RaceTimer (void) { { s = "0:13:37"; drawstring(pos + eX * 0.5 * mySize_x - '0.5 0 0' * stringwidth(s, FALSE, '0.60 0.60 0' * mySize_y), s, '0.60 0.60 0' * mySize_y, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - s = "^1Intermediate 1 (+15.42)"; + s = _("^1Intermediate 1 (+15.42)"); drawcolorcodedstring(pos + eX * 0.5 * mySize_x - '0.5 0 0' * stringwidth(s, TRUE, '1 1 0' * 0.20 * mySize_y) + eY * 0.60 * mySize_y, s, '1 1 0' * 0.20 * mySize_y, panel_fg_alpha, DRAWFLAG_NORMAL); - s = strcat("^1PENALTY: ", ftos_decimals(20 * 0.1, 1), " (missing a checkpoint)"); + s = sprintf(_("^1PENALTY: %.1f (%s)"), 2, "missing a checkpoint"); drawcolorcodedstring(pos + eX * 0.5 * mySize_x - '0.5 0 0' * stringwidth(s, TRUE, '1 1 0' * 0.20 * mySize_y) + eY * 0.80 * mySize_y, s, '1 1 0' * 0.20 * mySize_y, panel_fg_alpha, DRAWFLAG_NORMAL); } else if(race_checkpointtime) @@ -3824,7 +3820,7 @@ void HUD_RaceTimer (void) { a = bound(0, 2 - (time - race_penaltyeventtime), 1); if(a > 0) { - s = strcat("^1PENALTY: ", ftos_decimals(race_penaltytime * 0.1, 1), " (", race_penaltyreason, ")"); + s = sprintf(_("^1PENALTY: %.1f (%s)"), race_penaltytime * 0.1, race_penaltyreason); drawcolorcodedstring(pos + eX * 0.5 * mySize_x - '0.5 0 0' * stringwidth(s, TRUE, '1 1 0' * 0.2 * mySize_y) + eY * 0.8 * mySize_y, s, '1 1 0' * 0.2 * mySize_y, panel_fg_alpha * a, DRAWFLAG_NORMAL); } } @@ -3865,9 +3861,9 @@ void HUD_RaceTimer (void) { if(a > 0) { if(time < t) - s = strcat("^1PENALTY: ", ftos_decimals(t - time, 1), " (", race_penaltyreason, ")"); + s = sprintf(_("^1PENALTY: %.1f (%s)"), (t - time) * 0.1, race_penaltyreason); else - s = strcat("^2PENALTY: 0.0 (", race_penaltyreason, ")"); + s = sprintf(_("^2PENALTY: %.1f (%s)"), 0, race_penaltyreason); drawcolorcodedstring(pos + eX * 0.5 * mySize_x - '0.5 0 0' * stringwidth(s, TRUE, '1 1 0' * 0.2 * mySize_y) + eY * 0.6 * mySize_y, s, '1 1 0' * 0.2 * mySize_y, panel_fg_alpha * a, DRAWFLAG_NORMAL); } } @@ -3892,7 +3888,7 @@ void HUD_VoteWindow(void) if(autocvar_cl_allow_uid2name == -1 && (gametype == GAME_CTS || gametype == GAME_RACE)) { vote_active = 1; - vote_called_vote = strzone(strcat("^2Name ^7instead of \"^1Unregistered player\"", " ^7in stats")); + vote_called_vote = strzone(_("^2Name ^7instead of \"^1Unregistered player\" ^7in stats")); uid2name_dialog = 1; } @@ -3974,19 +3970,19 @@ void HUD_VoteWindow(void) } mySize = newSize; - s = "A vote has been called for:"; + s = _("A vote has been called for:"); if(uid2name_dialog) - s = "Allow servers to store and display your name?"; + s = _("Allow servers to store and display your name?"); drawstring_aspect(pos, s, eX * mySize_x + eY * (2/8) * mySize_y, '1 1 1', a, DRAWFLAG_NORMAL); s = textShortenToWidth(vote_called_vote, mySize_x, '1 1 0' * mySize_y * (1/8), stringwidth_colors); if(autocvar__hud_configure) - s = "^1Configure the HUD"; + s = _("^1Configure the HUD"); drawcolorcodedstring_aspect(pos + eY * (2/8) * mySize_y, s, eX * mySize_x + eY * (1.75/8) * mySize_y, a, DRAWFLAG_NORMAL); // print the yes/no counts - s = strcat("Yes (", getcommandkey("vyes", "vyes"), "): ", ftos(vote_yescount)); + s = sprintf(_("Yes (%s): %d"), getcommandkey("vyes", "vyes"), ftos(vote_yescount)); drawstring_aspect(pos + eY * (4/8) * mySize_y, s, eX * 0.5 * mySize_x + eY * (1.5/8) * mySize_y, '0 1 0', a, DRAWFLAG_NORMAL); - s = strcat("No (", getcommandkey("vno", "vno"), "): ", ftos(vote_nocount)); + s = sprintf(_("No (%s): %d"), getcommandkey("vno", "vno"), ftos(vote_nocount)); drawstring_aspect(pos + eX * 0.5 * mySize_x + eY * (4/8) * mySize_y, s, eX * 0.5 * mySize_x + eY * (1.5/8) * mySize_y, '1 0 0', a, DRAWFLAG_NORMAL); // draw the progress bar backgrounds @@ -4377,13 +4373,21 @@ void HUD_Mod_Keepaway(vector pos, vector mySize) kaball_prevstatus = kaball; } - // todo: Fix the sizing with the expanding image + vector kaball_pos, kaball_size; + + if(mySize_x > mySize_y) { + kaball_pos = pos + eX * 0.25 * mySize_x; + kaball_size = eX * 0.5 * mySize_x + eY * mySize_y; + } else { + kaball_pos = pos + eY * 0.25 * mySize_y; + kaball_size = eY * 0.5 * mySize_y + eX * mySize_x; + } float kaball_statuschange_elapsedtime = time - kaball_statuschange_time; float f = bound(0, kaball_statuschange_elapsedtime*2, 1); if(kaball_prevstatus && f < 1) - drawpic_aspect_skin_expanding(pos + eY * 0.25 * mySize_y, "keepawayball_carrying", eX * mySize_x + eY * mySize_y * 0.5, '1 1 1', panel_fg_alpha * kaball_alpha, DRAWFLAG_NORMAL, f); + drawpic_aspect_skin_expanding(kaball_pos, "keepawayball_carrying", kaball_size, '1 1 1', panel_fg_alpha * kaball_alpha, DRAWFLAG_NORMAL, f); if(kaball) drawpic_aspect_skin(pos, "keepawayball_carrying", eX * mySize_x + eY * mySize_y, '1 1 1', panel_fg_alpha * kaball_alpha * f, DRAWFLAG_NORMAL); @@ -4491,12 +4495,12 @@ void HUD_Mod_Race(vector pos, vector mySize) f = time - crecordtime_change_time; if (f > 1) { - drawstring_aspect(textPos, "Personal best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(textPos, _("Personal best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(textPos + eY * 0.25 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); } else { - drawstring_aspect(textPos, "Personal best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(textPos, _("Personal best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(textPos + eY * 0.25 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_aspect_expanding(pos, "Personal best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(pos, _("Personal best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); drawstring_aspect_expanding(pos + eY * 0.25 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } @@ -4509,12 +4513,12 @@ void HUD_Mod_Race(vector pos, vector mySize) f = time - srecordtime_change_time; if (f > 1) { - drawstring_aspect(textPos + eY * 0.5 * squareSize, "Server best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(textPos + eY * 0.5 * squareSize, _("Server best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(textPos + eY * 0.75 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); } else { - drawstring_aspect(textPos + eY * 0.5 * squareSize, "Server best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(textPos + eY * 0.5 * squareSize, _("Server best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); drawstring_aspect(textPos + eY * 0.75 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL); - drawstring_aspect_expanding(textPos + eY * 0.5 * squareSize, "Server best", eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); + drawstring_aspect_expanding(textPos + eY * 0.5 * squareSize, _("Server best"), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); drawstring_aspect_expanding(textPos + eY * 0.75 * squareSize, TIME_ENCODED_TOSTRING(t), eX * squareSize + eY * 0.25 * squareSize, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL, f); } @@ -4746,7 +4750,7 @@ void HUD_Chat(void) a = panel_fg_alpha; else a = panel_fg_alpha * floor(((i + 1) * 7 + autocvar_con_chattime)/45); - drawcolorcodedstring(pos + eY * i * chatsize, textShortenToWidth("^3Player^7: This is the chat area.", mySize_x, '1 1 0' * chatsize, stringwidth_colors), '1 1 0' * chatsize, a, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos + eY * i * chatsize, textShortenToWidth(_("^3Player^7: This is the chat area."), mySize_x, '1 1 0' * chatsize, stringwidth_colors), '1 1 0' * chatsize, a, DRAWFLAG_NORMAL); } } } @@ -4809,7 +4813,7 @@ void HUD_EngineInfo(void) vector color; color = HUD_Get_Num_Color (prevfps, 100); - drawstring_aspect(pos, strcat("FPS: ", ftos_decimals(prevfps, autocvar_hud_panel_engineinfo_framecounter_decimals)), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL); + drawstring_aspect(pos, sprintf(_("FPS: %.*f"), autocvar_hud_panel_engineinfo_framecounter_decimals, prevfps), mySize, color, panel_fg_alpha, DRAWFLAG_NORMAL); } // Info messages panel (#14) @@ -4874,41 +4878,41 @@ void HUD_InfoMessages(void) if(spectatee_status && !intermission) { if(spectatee_status == -1) - s = "^1Observing"; + s = _("^1Observing"); else - s = strcat("^1Spectating: ^7", GetPlayerName(spectatee_status - 1)); + s = sprintf(_("^1Spectating: ^7%s"), GetPlayerName(spectatee_status - 1)); drawInfoMessage(s) if(spectatee_status == -1) - s = strcat("^1Press ^3", getcommandkey("primary fire", "+fire"), "^1 to spectate"); + s = sprintf(_("^1Press ^3%s^1 to spectate"), getcommandkey("primary fire", "+fire")); else - s = strcat("^1Press ^3", getcommandkey("primary fire", "+fire"), "^1 for another player"); + s = sprintf(_("^1Press ^3%s^1 for another player"), getcommandkey("primary fire", "+fire")); drawInfoMessage(s) if(spectatee_status == -1) - s = strcat("^1Use ^3", getcommandkey("next weapon", "weapnext"), "^1 or ^3", getcommandkey("previous weapon", "weapprev"), "^1 to change the speed"); + s = sprintf(_("^1Use ^3%s^1 or ^3%s^1 to change the speed"), getcommandkey("next weapon", "weapnext"), getcommandkey("previous weapon", "weapprev")); else - s = strcat("^1Press ^3", getcommandkey("secondary fire", "+fire2"), "^1 to observe"); + s = sprintf(_("^1Press ^3%s^1 to observe"), getcommandkey("secondary fire", "+fire2")); drawInfoMessage(s) - s = strcat("^1Press ^3", getcommandkey("server info", "+show_info"), "^1 for gamemode info"); + s = sprintf(_("^1Press ^3%s^1 for gamemode info"), getcommandkey("server info", "+show_info")); drawInfoMessage(s) if(gametype == GAME_ARENA) - s = "^1Wait for your turn to join"; + s = _("^1Wait for your turn to join"); else if(gametype == GAME_LMS) { entity sk; sk = playerslots[player_localentnum - 1]; if(sk.(scores[ps_primary]) >= 666) - s = "^1Match has already begun"; + s = _("^1Match has already begun"); else if(sk.(scores[ps_primary]) > 0) - s = "^1You have no more lives left"; + s = _("^1You have no more lives left"); else - s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join"); + s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump")); } else - s = strcat("^1Press ^3", getcommandkey("jump", "+jump"), "^1 to join"); + s = sprintf(_("^1Press ^3%s^1 to join"), getcommandkey("jump", "+jump")); drawInfoMessage(s) //show restart countdown: @@ -4916,14 +4920,14 @@ void HUD_InfoMessages(void) float countdown; //we need to ceil, otherwise the countdown would be off by .5 when using round() countdown = ceil(getstatf(STAT_GAMESTARTTIME) - time); - s = strcat("^1Game starts in ^3", ftos(countdown), "^1 seconds"); + s = sprintf(_("^1Game starts in ^3%d^1 seconds"), countdown); drawcolorcodedstring(o, s, fontsize, a, DRAWFLAG_NORMAL); o_y += fontsize_y; } } if(warmup_stage && !intermission) { - s = "^2Currently in ^1warmup^2 stage!"; + s = _("^2Currently in ^1warmup^2 stage!"); drawInfoMessage(s) } @@ -4938,22 +4942,22 @@ void HUD_InfoMessages(void) if(ready_waiting_for_me) { if(warmup_stage) - s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " to end warmup"); + s = sprintf(_("%sPress ^3%s%s to end warmup"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor); else - s = strcat(blinkcolor, "Press ^3", getcommandkey("ready", "ready"), blinkcolor, " once you are ready"); + s = sprintf(_("%sPress ^3%s%s once you are ready"), blinkcolor, getcommandkey("ready", "ready"), blinkcolor); } else { if(warmup_stage) - s = strcat("^2Waiting for others to ready up to end warmup..."); + s = _("^2Waiting for others to ready up to end warmup..."); else - s = strcat("^2Waiting for others to ready up..."); + s = _("^2Waiting for others to ready up..."); } drawInfoMessage(s) } else if(warmup_stage && !intermission && !spectatee_status) { - s = strcat("^2Press ^3", getcommandkey("ready", "ready"), "^2 to end warmup"); + s = strcat("^2Press ^3%s^2 to end warmup", getcommandkey("ready", "ready")); drawInfoMessage(s) } @@ -4974,12 +4978,12 @@ void HUD_InfoMessages(void) } if ((ts_max - ts_min) > 1) { - s = strcat(blinkcolor, "Teamnumbers are unbalanced!"); + s = strcat(blinkcolor, _("Teamnumbers are unbalanced!")); tm = GetTeam(myteam, false); if (tm) if (tm.team != COLOR_SPECTATOR) if (tm.team_size == ts_max) - s = strcat(s, " Press ^3", getcommandkey("team menu", "menu_showteamselect"), blinkcolor, " to adjust"); + s = strcat(s, sprintf(" Press ^3%s%s to adjust", getcommandkey("team menu", "menu_showteamselect"), blinkcolor)); drawInfoMessage(s) } } @@ -4987,13 +4991,13 @@ void HUD_InfoMessages(void) } else { - s = "^7Press ^3ESC ^7to show HUD options."; + s = _("^7Press ^3ESC ^7to show HUD options."); drawInfoMessage(s) - s = "^3Doubleclick ^7a panel for panel-specific options."; + s = _("^3Doubleclick ^7a panel for panel-specific options."); drawInfoMessage(s) - s = "^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"; + s = _("^3CTRL ^7to disable collision testing, ^3SHIFT ^7and"); drawInfoMessage(s) - s = "^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."; + s = _("^3ALT ^7+ ^3ARROW KEYS ^7for fine adjustments."); drawInfoMessage(s) } } @@ -5018,23 +5022,23 @@ void HUD_ShowSpeed(void) conversion_factor = 1.0; break; case 1: - unit = " qu/s"; + unit = _(" qu/s"); conversion_factor = 1.0; break; case 2: - unit = " m/s"; + unit = _(" m/s"); conversion_factor = 0.0254; break; case 3: - unit = " km/h"; + unit = _(" km/h"); conversion_factor = 0.0254 * 3.6; break; case 4: - unit = " mph"; + unit = _(" mph"); conversion_factor = 0.0254 * 3.6 * 0.6213711922; break; case 5: - unit = " knots"; + unit = _(" knots"); conversion_factor = 0.0254 * 1.943844492; // 1 m/s = 1.943844492 knots, because 1 knot = 1.852 km/h break; } diff --git a/qcsrc/client/main.qh b/qcsrc/client/main.qh index 3219d338f9..970a1aa0b7 100644 --- a/qcsrc/client/main.qh +++ b/qcsrc/client/main.qh @@ -20,8 +20,10 @@ var float(float bInputType, float nPrimary, float nSecondary) menu_action; // -------------------------------------------------------------------------- // CTF +#ifdef CTF_EXAMPLE void() ctf_menu_show; string ctf_temp_1; +#endif // -------------------------------------------------------------------------- // Onslaught @@ -162,3 +164,4 @@ float g_balance_grenadelauncher_bouncefactor; float g_balance_grenadelauncher_bouncestop; float g_balance_electro_secondary_bouncefactor; float g_balance_electro_secondary_bouncestop; +float g_trueaim_minrange; diff --git a/qcsrc/client/mapvoting.qc b/qcsrc/client/mapvoting.qc index 4d96d5821c..e94d6a68aa 100644 --- a/qcsrc/client/mapvoting.qc +++ b/qcsrc/client/mapvoting.qc @@ -12,6 +12,8 @@ float mv_ownvote; float mv_detail; float mv_timeout; float mv_maps_mask; +float mv_top2_time; +float mv_top2_alpha; vector mv_mousepos; float mv_selection; @@ -19,13 +21,13 @@ float mv_selection; string MapVote_FormatMapItem(float id, string map, float count, float maxwidth, vector fontsize) { string pre, post; - pre = strcat(ftos(id+1), ". "); + pre = sprintf("%d. ", id+1); if(mv_detail) { if(count == 1) - post = strcat(" (1 vote)"); + post = _(" (1 vote)"); else - post = strcat(" (", ftos(count), " votes)"); + post = sprintf(_(" (%d votes)"), count); } else post = ""; @@ -34,8 +36,10 @@ string MapVote_FormatMapItem(float id, string map, float count, float maxwidth, return strcat(pre, map, post); } -vector MapVote_RGB(float id) +vector MapVote_RGB(float id, float count) { + if(count < 0) + return '1 1 1'; if(id == mv_ownvote) return '0 1 0'; else if (id == mv_selection) @@ -53,7 +57,7 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin isize -= hud_fontsize_y; // respect the text when calculating the image size - rgb = MapVote_RGB(id); + rgb = MapVote_RGB(id, count); img_size_y = isize; img_size_x = isize / 0.75; // 4:3 x can be stretched easily, height is defined in isize @@ -63,9 +67,15 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin label = MapVote_FormatMapItem(id, map, count, tsize, hud_fontsize); text_size = stringwidth(label, false, hud_fontsize); - + + float alpha; + if (count < 0 && mv_top2_alpha) + alpha = mv_top2_alpha; + else + alpha = 1; + pos_x -= text_size*0.5; - drawstring(pos, label, hud_fontsize, rgb, 1, DRAWFLAG_NORMAL); + drawstring(pos, label, hud_fontsize, rgb, alpha, DRAWFLAG_NORMAL); pos_x = pos_x + text_size*0.5 - img_size_x*0.5; pos_y = pos_y - img_size_y; @@ -74,19 +84,19 @@ void MapVote_DrawMapItem(vector pos, float isize, float tsize, string map, strin img_size -= (autocvar_scoreboard_border_thickness * 2) * '1 1 0'; if(pic == "") { - drawfill(pos, img_size, '.5 .5 .5', .7, DRAWFLAG_NORMAL); + drawfill(pos, img_size, '.5 .5 .5', .7 * alpha, DRAWFLAG_NORMAL); } else { - drawpic(pos, pic, img_size, '1 1 1', 1, DRAWFLAG_NORMAL); + drawpic(pos, pic, img_size, '1 1 1', alpha, DRAWFLAG_NORMAL); } if(id == mv_ownvote) - drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, rgb, 1, DRAWFLAG_NORMAL); + drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, rgb, alpha, DRAWFLAG_NORMAL); else - drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', 1, DRAWFLAG_NORMAL); + drawborderlines(autocvar_scoreboard_border_thickness, pos, img_size, '0 0 0', alpha, DRAWFLAG_NORMAL); - if(id == mv_selection) + if(id == mv_selection && count >= 0) drawfill(pos, img_size, '1 1 1', 0.1, DRAWFLAG_NORMAL); } @@ -96,11 +106,11 @@ void MapVote_DrawAbstain(vector pos, float isize, float tsize, float count, floa float text_size; string label; - rgb = MapVote_RGB(id); + rgb = MapVote_RGB(id, count); pos_y = pos_y + hud_fontsize_y; - label = MapVote_FormatMapItem(id, "Don't care", count, tsize, hud_fontsize); + label = MapVote_FormatMapItem(id, _("Don't care"), count, tsize, hud_fontsize); text_size = stringwidth(label, false, hud_fontsize); @@ -181,12 +191,12 @@ void MapVote_Draw() pos_y = ymin; pos_z = 0; //pos_x = center - stringwidth("Vote for a map", false) * 0.5 * 24; - pos_x = center - stringwidth("Vote for a map", false, '12 0 0'); + pos_x = center - stringwidth(_("Vote for a map"), false, '12 0 0'); drawstring(pos, "Vote for a map", '24 24 0', '1 1 1', 1, DRAWFLAG_NORMAL); pos_y += 26; i = ceil(max(0, mv_timeout - time)); - map = strcat(ftos(i), " seconds left"); + map = sprintf(_("%d seconds left"), i); //pos_x = center - stringwidth(map, false) * 0.5 * 16; pos_x = center - stringwidth(map, false, '8 0 0'); drawstring(pos, map, '16 16 0', '0 1 0', 1, DRAWFLAG_NORMAL); @@ -217,11 +227,12 @@ void MapVote_Draw() pos_y += (dist_y - isize) / 2; ymax -= isize; + if (mv_top2_time) + mv_top2_alpha = max(0.2, 1 - (time - mv_top2_time)*(time - mv_top2_time)); + for(i = 0; i < mv_num_maps; ++i) { tmp = mv_votes[i]; // FTEQCC bug: too many array accesses in the function call screw it up - if(tmp < 0) - continue; map = mv_maps[i]; if(mv_preview[i]) MapVote_DrawMapItem(pos + MapVote_GridVec(dist, i, columns), isize, tsize, map, mv_pics[i], tmp, i); @@ -249,7 +260,7 @@ void Cmd_MapVote_MapDownload(float argc) if(argc != 2 || !mv_pk3list) { - print("mv_mapdownload: ^3You're not supposed to use this command on your own!\n"); + print(_("mv_mapdownload: ^3You're not supposed to use this command on your own!\n")); return; } @@ -259,19 +270,16 @@ void Cmd_MapVote_MapDownload(float argc) break; if(!pak || pak.sv_entnum != id) { - print("^1Error:^7 Couldn't find pak index.\n"); + print(_("^1Error:^7 Couldn't find pak index.\n")); return; } - //print(strcat("^3Adding: ", ftos(id), " - ", pak.message, " - ")); - if(PreviewExists(pak.message)) { mv_preview[id] = true; - //print("^2Found...\n"); return; } else { - print("Requesting preview...\n"); + print(_("Requesting preview...\n")); localcmd(strcat("\ncmd mv_getpic ", ftos(id), "\n")); } } @@ -370,7 +378,6 @@ void MapVote_Init() mv_preview[i] = false; - //print(strcat("RECV: ", map, " in ", pk3, "\n")); MapVote_CheckPic(map, pk3, i); } else @@ -435,6 +442,8 @@ void MapVote_UpdateMask() for(i = 0, power = 1; i < mv_num_maps; ++i, power *= 2) if not(mv_maps_mask & power) mv_votes[i] = -1; + + mv_top2_time = time; } void MapVote_UpdateVotes() diff --git a/qcsrc/client/miscfunctions.qc b/qcsrc/client/miscfunctions.qc index 90098a79a3..d38b7c9ba0 100644 --- a/qcsrc/client/miscfunctions.qc +++ b/qcsrc/client/miscfunctions.qc @@ -20,7 +20,7 @@ void restartAnnouncer_Think() { countdown_rounded = floor(0.5 + countdown); if(countdown <= 0) { if (!spectatee_status) //do cprint only for players - centerprint("^1Begin!"); + centerprint(_("^1Begin!")); sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/begin.wav"), VOL_BASEVOICE, ATTN_NONE); //reset maptime announcers now as well @@ -31,7 +31,7 @@ void restartAnnouncer_Think() { } else { if (!spectatee_status) //do cprint only for players - centerprint(strcat("^1Game starts in ", ftos(countdown_rounded), " seconds")); + centerprint(sprintf(_("^1Game starts in %d seconds"), countdown_rounded)); if(countdown_rounded <= 3 && countdown_rounded >= 1) { sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/", ftos(countdown_rounded), ".wav"), VOL_BASEVOICE, ATTN_NONE); @@ -71,7 +71,6 @@ void maptimeAnnouncer() { //if we're in warmup mode, check whether there's a warmup timelimit if not (warmuplimit == -1 && warmup_stage) { announcer_5min = TRUE; - //dprint("i will play the sound, I promise!\n"); sound(world, CHAN_AUTO, strcat("announcer/", autocvar_cl_announcer, "/5minutesremain.wav"), VOL_BASEVOICE, ATTN_NONE); } } @@ -111,12 +110,12 @@ void carrierAnnouncer() { blueflag = (stat_items/IT_BLUE_FLAG_TAKEN) & 3; if (redflag == 3 && redflag != redflag_prev) { - item = "^1RED^7 flag"; + item = _("^1RED^7 flag"); pickup = (redflag_prev == 2); } if (blueflag == 3 && blueflag != blueflag_prev) { - item = "^4BLUE^7 flag"; + item = _("^4BLUE^7 flag"); pickup = (blueflag_prev == 2); } @@ -124,11 +123,11 @@ void carrierAnnouncer() { { if (pickup) { if (autocvar_cl_notify_carried_items & 2) - centerprint(strcat("You picked up the ", item, "!")); + centerprint(sprintf(_("You picked up the %s!"), item)); } else { if (autocvar_cl_notify_carried_items & 1) - centerprint(strcat("You got the ", item, "!")); + centerprint(sprintf(_("You got the %s!"), item)); } } @@ -281,7 +280,7 @@ void RemoveTeam(entity Team) if(!tm) { - print("Trying to remove a team which is not in the teamlist!"); + print(_("Trying to remove a team which is not in the teamlist!")); return; } parent.sort_next = Team.sort_next; diff --git a/qcsrc/client/prandom.qc b/qcsrc/client/prandom.qc index 1fae8abe0d..1132d06a32 100644 --- a/qcsrc/client/prandom.qc +++ b/qcsrc/client/prandom.qc @@ -9,7 +9,7 @@ float prandom() prandom_seed = c; #ifdef USE_PRANDOM_DEBUG - print("RANDOM -> ", ftos(c), "\n"); + dprint("RANDOM -> ", ftos(c), "\n"); #endif return c / 65536; // in [0..1[ @@ -34,14 +34,14 @@ void psrandom(float seed) { prandom_seed = seed; #ifdef USE_PRANDOM_DEBUG - print("SRANDOM ", ftos(seed), "\n"); + dprint("SRANDOM ", ftos(seed), "\n"); #endif } #ifdef USE_PRANDOM_DEBUG void prandom_debug() { - print("Current random seed = ", ftos(prandom_seed), "\n"); + dprint("Current random seed = ", ftos(prandom_seed), "\n"); } #endif #endif diff --git a/qcsrc/client/scoreboard.qc b/qcsrc/client/scoreboard.qc index ebdd92361f..df3e490d9d 100644 --- a/qcsrc/client/scoreboard.qc +++ b/qcsrc/client/scoreboard.qc @@ -195,53 +195,53 @@ void HUD_UpdateTeamPos(entity Team) void Cmd_HUD_Help(float argc) { - print("You can modify the scoreboard using the ^2scoreboard_columns_set command.\n"); - print("^3|---------------------------------------------------------------|\n"); - print("Usage:\n"); - print("^2scoreboard_columns_set default\n"); - print("^2scoreboard_columns_set ^7filed1 field2 ...\n"); - print("The following field names are recognized (case insensitive):\n"); - print("You can use a ^3|^7 to start the right-aligned fields.\n\n"); - - print("^3name^7 or ^3nick^7 Name of a player\n"); - print("^3ping^7 Ping time\n"); - print("^3pl^7 Packet loss\n"); - print("^3kills^7 Number of kills\n"); - print("^3deaths^7 Number of deaths\n"); - print("^3suicides^7 Number of suicides\n"); - print("^3frags^7 kills - suicides\n"); - print("^3kd^7 The kill-death ratio\n"); - print("^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n"); - print("^3pickups^7 How often a flag (CTF) or a key (KeyHunt) was picked up\n"); - print("^3fckills^7 Number of flag carrier kills\n"); - print("^3returns^7 Number of flag returns\n"); - print("^3drops^7 Number of flag drops\n"); - print("^3lives^7 Number of lives (LMS)\n"); - print("^3rank^7 Player rank\n"); - print("^3pushes^7 Number of players pushed into void\n"); - print("^3destroyed^7 Number of keys destroyed by pushing them into void\n"); - print("^3kckills^7 Number of keys carrier kills\n"); - print("^3losses^7 Number of times a key was lost\n"); - print("^3laps^7 Number of laps finished (race/cts)\n"); - print("^3time^7 Total time raced (race/cts)\n"); - print("^3fastest^7 Time of fastest lap (race/cts)\n"); - print("^3ticks^7 Number of ticks (DOM)\n"); - print("^3takes^7 Number of domination points taken (DOM)\n"); - print("^3score^7 Total score\n\n"); - - print("Before a field you can put a + or - sign, then a comma separated list\n"); - print("of game types, then a slash, to make the field show up only in these\n"); - print("or in all but these game types. You can also specify 'all' as a\n"); - print("field to show all fields available for the current game mode.\n\n"); - - print("The special game type names 'teams' and 'noteams' can be used to\n"); - print("include/exclude ALL teams/noteams game modes.\n\n"); - - print("Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n"); - print("will display name, ping and pl aligned to the left, and the fields\n"); - print("right of the vertical bar aligned to the right.\n"); - print("'field3' will only be shown in CTF, and 'field4' will be shown in all\n"); - print("other gamemodes except DM.\n"); + print(_("You can modify the scoreboard using the ^2scoreboard_columns_set command.\n")); + print(_("^3|---------------------------------------------------------------|\n")); + print(_("Usage:\n")); + print(_("^2scoreboard_columns_set default\n")); + print(_("^2scoreboard_columns_set ^7filed1 field2 ...\n")); + print(_("The following field names are recognized (case insensitive):\n")); + print(_("You can use a ^3|^7 to start the right-aligned fields.\n\n")); + + print(_("^3name^7 or ^3nick^7 Name of a player\n")); + print(_("^3ping^7 Ping time\n")); + print(_("^3pl^7 Packet loss\n")); + print(_("^3kills^7 Number of kills\n")); + print(_("^3deaths^7 Number of deaths\n")); + print(_("^3suicides^7 Number of suicides\n")); + print(_("^3frags^7 kills - suicides\n")); + print(_("^3kd^7 The kill-death ratio\n")); + print(_("^3caps^7 How often a flag (CTF) or a key (KeyHunt) was captured\n")); + print(_("^3pickups^7 How often a flag (CTF) or a key (KeyHunt) was picked up\n")); + print(_("^3fckills^7 Number of flag carrier kills\n")); + print(_("^3returns^7 Number of flag returns\n")); + print(_("^3drops^7 Number of flag drops\n")); + print(_("^3lives^7 Number of lives (LMS)\n")); + print(_("^3rank^7 Player rank\n")); + print(_("^3pushes^7 Number of players pushed into void\n")); + print(_("^3destroyed^7 Number of keys destroyed by pushing them into void\n")); + print(_("^3kckills^7 Number of keys carrier kills\n")); + print(_("^3losses^7 Number of times a key was lost\n")); + print(_("^3laps^7 Number of laps finished (race/cts)\n")); + print(_("^3time^7 Total time raced (race/cts)\n")); + print(_("^3fastest^7 Time of fastest lap (race/cts)\n")); + print(_("^3ticks^7 Number of ticks (DOM)\n")); + print(_("^3takes^7 Number of domination points taken (DOM)\n")); + print(_("^3score^7 Total score\n\n")); + + print(_("Before a field you can put a + or - sign, then a comma separated list\n" + "of game types, then a slash, to make the field show up only in these\n" + "or in all but these game types. You can also specify 'all' as a\n" + "field to show all fields available for the current game mode.\n\n")); + + print(_("The special game type names 'teams' and 'noteams' can be used to\n" + "include/exclude ALL teams/noteams game modes.\n\n")); + + print(_("Example: scoreboard_columns_set name ping pl | +ctf/field3 -dm/field4\n")); + print(_("will display name, ping and pl aligned to the left, and the fields\n" + "right of the vertical bar aligned to the right.\n")); + print(_("'field3' will only be shown in CTF, and 'field4' will be shown in all\n" + "other gamemodes except DM.\n")); } string HUD_DefaultColumnLayout() @@ -253,7 +253,7 @@ string HUD_DefaultColumnLayout() "+lms/lives +lms/rank ", "+kh/caps +kh/pushes +kh/destroyed ", "?+race/laps ?+race/time ?+race/fastest ", - "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills +freezetag/revivals ", + "+as/objectives +nexball/faults +nexball/goals +ka/drops +ka/pickups +ka/bckills +ka/time +freezetag/revivals ", "-lms,race,nexball/score"); } @@ -349,7 +349,7 @@ void Cmd_HUD_SetFields(float argc) else { if not(nocomplain) - print(strcat("^1Error:^7 Unknown score field: '", str, "'\n")); + print(sprintf("^1Error:^7 Unknown score field: '%s'\n", str)); continue; } :found @@ -386,7 +386,7 @@ void Cmd_HUD_SetFields(float argc) hud_title[0] = strzone("name"); hud_field[0] = SP_NAME; ++hud_num_fields; - print("fixed missing field 'name'\n"); + print(sprintf(_("fixed missing field '%s'\n"), "name")); if(!have_separator) { @@ -401,7 +401,7 @@ void Cmd_HUD_SetFields(float argc) hud_field[1] = SP_SEPARATOR; hud_size[1] = stringwidth("|", FALSE, hud_fontsize); ++hud_num_fields; - print("fixed missing field '|'\n"); + print(sprintf(_("fixed missing field '%s'\n"), "|")); } } else if(!have_separator) @@ -411,7 +411,7 @@ void Cmd_HUD_SetFields(float argc) hud_size[hud_num_fields] = stringwidth("|", FALSE, hud_fontsize); hud_field[hud_num_fields] = SP_SEPARATOR; ++hud_num_fields; - print("fixed missing field '|'\n"); + print(sprintf(_("fixed missing field '%s'\n"), "|")); } if(!have_secondary) { @@ -420,7 +420,7 @@ void Cmd_HUD_SetFields(float argc) hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize); hud_field[hud_num_fields] = ps_secondary; ++hud_num_fields; - print("fixed missing field '", scores_label[ps_secondary], "'\n"); + print(sprintf(_("fixed missing field '%s'\n"), scores_label[ps_secondary])); } if(!have_primary) { @@ -429,7 +429,7 @@ void Cmd_HUD_SetFields(float argc) hud_size[hud_num_fields] = stringwidth(hud_title[hud_num_fields], FALSE, hud_fontsize); hud_field[hud_num_fields] = ps_primary; ++hud_num_fields; - print("fixed missing field '", scores_label[ps_primary], "'\n"); + print(sprintf(_("fixed missing field '%s'\n"), scores_label[ps_primary])); } } @@ -465,18 +465,18 @@ string HUD_GetField(entity pl, float field) { case SP_PING: if not(pl.gotscores) - return "\x8D\x8D\x8D"; // >>> sign + return "\xEE\x82\x8D\xEE\x82\x8D\xEE\x82\x8D"; // >>> sign //str = getplayerkey(pl.sv_entnum, "ping"); f = pl.ping; if(f == 0) - return "N/A"; + return _("N/A"); tmp = max(0, min(220, f-80)) / 220; hud_field_rgb = '1 1 1' - '0 1 1'*tmp; return ftos(f); case SP_PL: if not(pl.gotscores) - return "N/A"; + return _("N/A"); f = pl.ping_packetloss; tmp = pl.ping_movementloss; if(f == 0 && tmp == 0) @@ -517,16 +517,12 @@ string HUD_GetField(entity pl, float field) if(denom == 0) { hud_field_rgb = '0 1 0'; - str = ftos(num); + str = sprintf("%d", num); } else if(num <= 0) { hud_field_rgb = '1 0 0'; - str = ftos(num/denom); + str = sprintf("%.1f", num/denom); } else - str = ftos(num/denom); - - tmp = strstrofs(str, ".", 0); - if(tmp > 0) - str = substring(str, 0, tmp+2); + str = sprintf("%.1f", num/denom); return str; default: @@ -882,10 +878,12 @@ float HUD_WouldDrawScoreboard() { return 1; else if (intermission == 1) return 1; + else if (intermission == 2) + return 0; else if (getstati(STAT_HEALTH) <= 0 && autocvar_cl_deathscoreboard && gametype != GAME_CTS) return 1; - else if (spectatee_status == -1) - return 1; + else if (spectatee_status == -1) + return 1; else if (scoreboard_showscores_force) return 1; return 0; @@ -907,7 +905,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) float weapon_height = height * 2/3; float weapon_width = sbwidth / weapon_cnt; - drawstring(pos, strcat("Accuracy stats (average ", ftos(average_accuracy), "%)"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawstring(pos, sprintf(_("Accuracy stats (average %d%%)"), average_accuracy), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; vector tmp; tmp_x = sbwidth; @@ -972,7 +970,7 @@ vector HUD_DrawScoreboardAccuracyStats(vector pos, vector rgb, vector bg_size) average_accuracy += weapon_stats; // store sum of all accuracies in average_accuracy string s; - s = sprintf("%d%%", weapon_stats*100); + s = sprintf(_("%d%%"), weapon_stats*100); float padding; padding = (weapon_width - stringwidth(s, FALSE, '1 0 0' * fontsize)) / 2; // center the accuracy value @@ -1032,7 +1030,7 @@ vector HUD_DrawScoreboardRankings(vector pos, entity pl, vector rgb, vector bg_ hl_rgb_z = autocvar_scoreboard_color_bg_b + 0.5; pos_y += hud_fontsize_y; - drawstring(pos, strcat("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawstring(pos, _("Rankings"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += hud_fontsize_y; vector tmp; tmp_x = sbwidth; @@ -1123,9 +1121,9 @@ void HUD_DrawScoreboard() pos_z = 0; // Heading - drawstring(pos, "Scoreboard", '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawstring(pos, _("Scoreboard"), '24 24 0', '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); - centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth("Scoreboard", FALSE, '24 24 0')); + centerprint_start_x = vid_conwidth - 0.5 * (pos_x + stringwidth(_("Scoreboard"), FALSE, '24 24 0')); centerprint_start_y = pos_y; pos_y += 24; @@ -1166,11 +1164,11 @@ void HUD_DrawScoreboard() if(gametype == GAME_CTS || gametype == GAME_RACE) { if(race_speedaward) { - drawcolorcodedstring(pos, strcat("Speed award: ", ftos(race_speedaward), " ^7(", race_speedaward_holder, "^7)"), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos, sprintf(_("Speed award: %d ^7(%s^7)"), race_speedaward, race_speedaward_holder), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; } if(race_speedaward_alltimebest) { - drawcolorcodedstring(pos, strcat("All-time fastest: ", ftos(race_speedaward_alltimebest), " ^7(", race_speedaward_alltimebest_holder, "^7)"), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawcolorcodedstring(pos, sprintf(_("All-time fastest: %d ^7(%s^7)"), race_speedaward_alltimebest, race_speedaward_alltimebest_holder), hud_fontsize, scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; } pos = HUD_DrawScoreboardRankings(pos, pl, rgb, bg_size); @@ -1197,74 +1195,62 @@ void HUD_DrawScoreboard() if(specs) { - drawstring(tmp, "Spectators", hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); + drawstring(tmp, _("Spectators"), hud_fontsize, '1 1 1', scoreboard_alpha_fg, DRAWFLAG_NORMAL); pos_y += 1.25 * hud_fontsize_y; } // Print info string string str; float tl, fl, ll; - str = strcat("playing on ^2", shortmapname, "^7"); + str = sprintf(_("playing on ^2%s^7"), shortmapname); tl = getstatf(STAT_TIMELIMIT); fl = getstatf(STAT_FRAGLIMIT); ll = getstatf(STAT_LEADLIMIT); if(gametype == GAME_LMS) { if(tl > 0) - str = strcat(str, " for up to ^1", ftos(tl), " minutes^7"); + str = strcat(str, sprintf(_(" for up to ^1%.1g minutes^7"), tl)); } else { if(tl > 0) - str = strcat(str, " for ^1", ftos(tl), " minutes^7"); + str = strcat(str, sprintf(_(" for up to ^1%.1g minutes^7"), tl)); if(fl > 0) { if(tl > 0) - str = strcat(str, " or"); + str = strcat(str, _(" or")); if(teamplay) { - str = strcat(str, " until ^3", ScoreString(teamscores_flags[ts_primary], fl)); - if(teamscores_label[ts_primary] == "score") - str = strcat(str, " points^7"); - else if(teamscores_label[ts_primary] == "fastest") - str = strcat(str, " is beaten^7"); - else - str = strcat(str, " ", teamscores_label[ts_primary]); + str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], fl), + (teamscores_label[ts_primary] == "score") ? _("points") : + (teamscores_label[ts_primary] == "fastest") ? _("is beaten") : + teamscores_label[ts_primary])); } else { - str = strcat(str, " until ^3", ScoreString(scores_flags[ps_primary], fl)); - if(scores_label[ps_primary] == "score") - str = strcat(str, " points^7"); - else if(scores_label[ps_primary] == "fastest") - str = strcat(str, " is beaten^7"); - else - str = strcat(str, " ", scores_label[ps_primary]); + str = strcat(str, sprintf(_(" until ^3%s %s^7"), ScoreString(scores_flags[ps_primary], fl), + (teamscores_label[ts_primary] == "score") ? _("points") : + (teamscores_label[ts_primary] == "fastest") ? _("is beaten") : + teamscores_label[ts_primary])); } } if(ll > 0) { if(tl > 0 || fl > 0) - str = strcat(str, " or"); + str = strcat(str, _(" or")); if(teamplay) { - str = strcat(str, " until a lead of ^3", ScoreString(teamscores_flags[ts_primary], ll)); - if(teamscores_label[ts_primary] == "score") - str = strcat(str, " points^7"); - else if(teamscores_label[ts_primary] == "fastest") - str = strcat(str, " is beaten^7"); - else - str = strcat(str, " ", teamscores_label[ts_primary]); + str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(teamscores_flags[ts_primary], ll), + (teamscores_label[ts_primary] == "score") ? _("points") : + (teamscores_label[ts_primary] == "fastest") ? _("is beaten") : + teamscores_label[ts_primary])); } else { - str = strcat(str, " until a lead of ^3", ScoreString(scores_flags[ps_primary], ll)); - if(scores_label[ps_primary] == "score") - str = strcat(str, " points^7"); - else if(scores_label[ps_primary] == "fastest") - str = strcat(str, " is beaten^7"); - else - str = strcat(str, " ", scores_label[ps_primary]); + str = strcat(str, sprintf(_(" until a lead of ^3%s %s^7"), ScoreString(scores_flags[ps_primary], ll), + (teamscores_label[ts_primary] == "score") ? _("points") : + (teamscores_label[ts_primary] == "fastest") ? _("is beaten") : + teamscores_label[ts_primary])); } } } diff --git a/qcsrc/client/target_music.qc b/qcsrc/client/target_music.qc index 5703c146d2..b50d5a862a 100644 --- a/qcsrc/client/target_music.qc +++ b/qcsrc/client/target_music.qc @@ -90,7 +90,7 @@ void Net_TargetMusic() sound(e, CHAN_VOICE, e.noise, 0, ATTN_NONE); if(getsoundtime(e, CHAN_VOICE) < 0) { - print("Cannot initialize sound ", e.noise, "\n"); + print(sprintf(_("Cannot initialize sound %s\n"), e.noise)); strunzone(e.noise); e.noise = string_null; } @@ -178,7 +178,7 @@ void Ent_ReadTriggerMusic() sound(self, CHAN_VOICE, self.noise, 0, ATTN_NONE); if(getsoundtime(self, CHAN_VOICE) < 0) { - print("Cannot initialize sound ", self.noise, "\n"); + print(sprintf(_("Cannot initialize sound %s\n"), self.noise)); strunzone(self.noise); self.noise = string_null; } diff --git a/qcsrc/client/teamplay.qc b/qcsrc/client/teamplay.qc index 02c40ba26e..7d5031fb87 100644 --- a/qcsrc/client/teamplay.qc +++ b/qcsrc/client/teamplay.qc @@ -52,10 +52,10 @@ string GetTeamName(float color) { switch(color) { - default: return "Spectators"; - case COLOR_TEAM1: return "Red Team"; - case COLOR_TEAM2: return "Blue Team"; - case COLOR_TEAM3: return "Yellow Team"; - case COLOR_TEAM4: return "Pink Team"; + default: return _("Spectators"); + case COLOR_TEAM1: return _("Red Team"); + case COLOR_TEAM2: return _("Blue Team"); + case COLOR_TEAM3: return _("Yellow Team"); + case COLOR_TEAM4: return _("Pink Team"); } } diff --git a/qcsrc/client/waypointsprites.qc b/qcsrc/client/waypointsprites.qc index 1a35579839..8ecadaeb85 100644 --- a/qcsrc/client/waypointsprites.qc +++ b/qcsrc/client/waypointsprites.qc @@ -336,7 +336,6 @@ void Ent_WaypointSprite() else self.build_starthealth = 0; self.build_finished = servertime + t / 32; - //print("build: ", ftos(self.build_finished - self.build_started), "\n"); } } else diff --git a/qcsrc/common/util.qc b/qcsrc/common/util.qc index 1bfbca6ae1..dcdd74deef 100644 --- a/qcsrc/common/util.qc +++ b/qcsrc/common/util.qc @@ -360,7 +360,10 @@ float buf_load(string pFilename) return -1; fh = fopen(pFilename, FILE_READ); if(fh < 0) - return buf; + { + buf_del(buf); + return -1; + } i = 0; while((l = fgets(fh))) { diff --git a/qcsrc/i18n-badwords.txt b/qcsrc/i18n-badwords.txt new file mode 100644 index 0000000000..828fe0a8b8 --- /dev/null +++ b/qcsrc/i18n-badwords.txt @@ -0,0 +1,34 @@ +# list of words that must not be used in the source as a single string; +# use ZCTX(_("CONTEXT^string")) instead +# vi macro to do it: +# :s/_("\([^"]*\)")/ZCTX(_("CONTEXT^\1"))/g +# test by: +# grep -v ^# i18n-badwords.txt | while IFS= read -r W; do grep -nri "_(\"$W\")" menu/xonotic; done | sort -n +# this is done to help with languages like Russian where these words may need +# different grammatical gender in different instances +All +Best +Disabled +Good +High +Insane +Low +Lowest +Medium +Normal +Off +Ultra +Small +Large +Custom +Very short +Short +Long +Full +Empty +None +Few +Many +Lots +Both +Ambient: diff --git a/qcsrc/i18n-guide.txt b/qcsrc/i18n-guide.txt new file mode 100644 index 0000000000..f2677fe3a3 --- /dev/null +++ b/qcsrc/i18n-guide.txt @@ -0,0 +1,31 @@ +How to make the .po template: + +find . -type f -not -name \*.po -not -name \*.txt | xgettext -LC -k_ -f- --from-code utf-8 + + +How to compare the .po template against a language file: + +msgcmp ../../menu.dat.de.po messages.po + + +How to merge the .po template into a language file: + +msgmerge -U ../../menu.dat.de.po messages.po + + +Guideline: +- do NOT translate strings in error() messages, or in dprint()! +- delete obviously useless developer prints while at it +- change obvious developer prints from print to dprint (even in comments), + unless in developer-only functions (e.g. *dumptree*) +- mark translatable strings with _() +- if a translatable string is a strcat monster, change it to sprintf +- if code loads files with text, use language_filename() +- interesting vim macros: + :map # /"<return> + :map ' i_(<esc>2f"a)<esc>/"<return> + :map " F"isprintf(_(<esc>%i), )<esc>i + +Unresolved TODO: + +- translated campaigns diff --git a/qcsrc/menu/classes.c b/qcsrc/menu/classes.c index 9ebcbb8f5b..b85546569a 100644 --- a/qcsrc/menu/classes.c +++ b/qcsrc/menu/classes.c @@ -27,6 +27,7 @@ #include "xonotic/bigbutton.c" #include "xonotic/commandbutton.c" #include "xonotic/bigcommandbutton.c" +#include "xonotic/dialog_firstrun.c" #include "xonotic/dialog_teamselect.c" #include "xonotic/dialog_settings.c" #include "xonotic/dialog_settings_video.c" @@ -58,9 +59,10 @@ #include "xonotic/dialog_multiplayer_create_mutators.c" #include "xonotic/dialog_multiplayer_create_advanced.c" #include "xonotic/dialog_multiplayer_create_mapinfo.c" -#include "xonotic/gametypebutton.c" +#include "xonotic/gametypelist.c" #include "xonotic/maplist.c" #include "xonotic/skinlist.c" +#include "xonotic/languagelist.c" #include "xonotic/image.c" #include "xonotic/crosshairbutton.c" #include "xonotic/playermodel.c" diff --git a/qcsrc/menu/draw.qc b/qcsrc/menu/draw.qc index a33cac9163..12b56d8dae 100644 --- a/qcsrc/menu/draw.qc +++ b/qcsrc/menu/draw.qc @@ -282,14 +282,14 @@ void draw_Text(vector theOrigin, string theText, vector theSize, vector theColor } void draw_CenterText(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz) { - //print(strcat("orig = ", vtos(theOrigin) ," tx = ", ftos(draw_TextWidth(theText, ICanHasKallerz, theSize)), "\n")); + //dprint(strcat("orig = ", vtos(theOrigin) ," tx = ", ftos(draw_TextWidth(theText, ICanHasKallerz, theSize)), "\n")); draw_Text(theOrigin - eX * 0.5 * draw_TextWidth(theText, ICanHasKallerz, theSize), theText, theSize, theColor, theAlpha, ICanHasKallerz); } float draw_TextWidth(string theText, float ICanHasKallerz, vector SizeThxBye) { //return strlen(theText); - //print("draw_TextWidth \"", theText, "\"\n"); + //dprint("draw_TextWidth \"", theText, "\"\n"); vector v; v = '0 0 0'; //float r; diff --git a/qcsrc/menu/gamecommand.qc b/qcsrc/menu/gamecommand.qc index 439a1b5c96..f3d780b6f5 100644 --- a/qcsrc/menu/gamecommand.qc +++ b/qcsrc/menu/gamecommand.qc @@ -44,7 +44,7 @@ void Curl_URI_Get_Callback(float id, float status, string data) do_cvar = curl_uri_get_cvar[i]; if(status != 0) { - print("error: status is ", ftos(status), "\n"); + print(sprintf(_("error: status is %d\n"), status)); return; } if(do_exec) @@ -62,9 +62,9 @@ void GameCommand(string theCommand) if(argv(0) == "help" || argc == 0) { - print("Usage: menu_cmd theCommand..., where possible theCommands are:\n"); - print(" sync - reloads all cvars on the current menu page\n"); - print(" directmenu ITEM - select a menu item as main item\n"); + print(_("Usage: menu_cmd command..., where possible commands are:\n")); + print(_(" sync - reloads all cvars on the current menu page\n")); + print(_(" directmenu ITEM - select a menu item as main item\n")); GameCommand_Generic("help"); return; } @@ -100,6 +100,12 @@ void GameCommand(string theCommand) return; } + if(argv(0) == "languageselect") + { + m_goto_language_selector(); + return; + } + if(argv(0) == "videosettings") { m_goto_video_settings(); @@ -184,7 +190,7 @@ void GameCommand(string theCommand) curl_uri_get_pos = mod(curl_uri_get_pos + 1, URI_GET_CURL_END - URI_GET_CURL + 1); } else - print("error creating curl handle\n"); + print(_("error creating curl handle\n")); buf_del(buf); @@ -230,5 +236,5 @@ void GameCommand(string theCommand) } #endif - print("Invalid theCommand. For a list of supported theCommands, try menu_cmd help.\n"); + print(_("Invalid command. For a list of supported commands, try menu_cmd help.\n")); } diff --git a/qcsrc/menu/item.c b/qcsrc/menu/item.c index 497d1cf661..52b960e456 100644 --- a/qcsrc/menu/item.c +++ b/qcsrc/menu/item.c @@ -42,7 +42,6 @@ void Item_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOr { me.origin = absOrigin; me.size = absSize; - // me.tooltip = "The quick brown fox jumped over the lazy sleeping dog's back then sat on a tack. Franz jagt im komplett verwahrlosten Taxi quer durch Bayern."; } void Item_draw(entity me) diff --git a/qcsrc/menu/item/borderimage.c b/qcsrc/menu/item/borderimage.c index 236b235222..b23078bae0 100644 --- a/qcsrc/menu/item/borderimage.c +++ b/qcsrc/menu/item/borderimage.c @@ -57,8 +57,6 @@ void BorderImage_configureBorderImage(entity me, string theTitle, float sz, vect } void BorderImage_draw(entity me) { - //print(vtos(me.borderVec), "\n"); - if(me.src) draw_BorderPicture('0 0 0', me.src, '1 1 0', me.color, 1, me.borderVec); if(me.fontSize > 0) diff --git a/qcsrc/menu/item/button.c b/qcsrc/menu/item/button.c index 3d91229ec6..871685f537 100644 --- a/qcsrc/menu/item/button.c +++ b/qcsrc/menu/item/button.c @@ -169,4 +169,4 @@ void Button_draw(entity me) else if(!me.focused && me.playedfocus) me.playedfocus = 0; } -#endif \ No newline at end of file +#endif diff --git a/qcsrc/menu/item/dialog.c b/qcsrc/menu/item/dialog.c index 3d537bfb92..800a12681e 100644 --- a/qcsrc/menu/item/dialog.c +++ b/qcsrc/menu/item/dialog.c @@ -78,7 +78,6 @@ void Dialog_fill(entity me) void Dialog_addItemSimple(entity me, float row, float col, float rowspan, float colspan, entity e, vector v) { - //print(vtos(me.itemSpacing), " ", vtos(me.itemSize), "\n"); vector o, s; o = me.itemOrigin + eX * ( col * me.itemSpacing_x) + eY * ( row * me.itemSpacing_y); s = me.itemSize + eX * ((colspan - 1) * me.itemSpacing_x) + eY * ((rowspan - 1) * me.itemSpacing_y); @@ -156,7 +155,7 @@ void Dialog_configureDialog(entity me) if(me.closable) { closebutton = me.closeButton = spawnButton(); - closebutton.configureButton(closebutton, "Close", 0, me.closeButtonImage); + closebutton.configureButton(closebutton, "", 0, me.closeButtonImage); closebutton.onClick = Dialog_Close; closebutton.onClickEntity = me; closebutton.srcMulti = 0; me.addItem(me, closebutton, '0 0 0', '1 1 0', 1); // put it as LAST diff --git a/qcsrc/menu/item/gecko.c b/qcsrc/menu/item/gecko.c index 139e87e1a0..dd752e6e54 100644 --- a/qcsrc/menu/item/gecko.c +++ b/qcsrc/menu/item/gecko.c @@ -46,7 +46,7 @@ void Gecko_draw(entity me) local vector fontsize; fontsize_x = fontsize_y = 1.0 / 30.0; fontsize_z = 0.0; - draw_Text( '0 0 0', "Browser not initialized!", fontsize, '1 1 1', 1.0, 0 ); + draw_Text( '0 0 0', _("Browser not initialized!"), fontsize, '1 1 1', 1.0, 0 ); } } diff --git a/qcsrc/menu/item/inputbox.c b/qcsrc/menu/item/inputbox.c index 750bc83b89..5b07afd4ee 100644 --- a/qcsrc/menu/item/inputbox.c +++ b/qcsrc/menu/item/inputbox.c @@ -272,35 +272,6 @@ void InputBox_draw(entity me) draw_Text(p, substring(me.text, i, 2), me.realFontSize, '1 1 1', theAlpha, 0); } } - /*else if(ch2 == "a") // ^a found - { - draw_Fill(p, eX * w + eY * me.realFontSize_y, '1 1 1', 0.5); - draw_Text(p, substring(me.text, i, 2), me.realFontSize, theColor, 0.8, 0); - - component = str2chr(me.text, i+2); - if (component >= '0' && component <= '9') - component = component - '0'; - else if (component >= 'a' && component <= 'f') - component = component - 87; - else if (component >= 'A' && component <= 'F') - component = component - 55; - else - component = -1; - - if (component >= 0) // ^ah found - { - // FIX ME: overflow here - if (component == 20 && theVariableAlpha <= 0.97) - theVariableAlpha = theVariableAlpha + 0.0625; - else if (component == 30 && theVariableAlpha >= 0.03) - theVariableAlpha = theVariableAlpha - 0.0625; - else - theVariableAlpha = component*0.0625; - - draw_Fill(p, eX * draw_TextWidth(substring(me.text, i, 3), 0, me.realFontSize) + eY * me.realFontSize_y, '0.8 0.8 0.8', 0.5); - draw_Text(p, strcat(ch, ch2), me.realFontSize, theColor, 0.8, 0); - } - }*/ else { draw_Fill(p, eX * w + eY * me.realFontSize_y, '1 1 1', 0.5); diff --git a/qcsrc/menu/item/label.c b/qcsrc/menu/item/label.c index 7ed6e4f68e..e3a6bee409 100644 --- a/qcsrc/menu/item/label.c +++ b/qcsrc/menu/item/label.c @@ -5,6 +5,7 @@ CLASS(Label) EXTENDS(Item) METHOD(Label, resizeNotify, void(entity, vector, vector, vector, vector)) METHOD(Label, setText, void(entity, string)) METHOD(Label, toString, string(entity)) + METHOD(Label, recalcPosition, void(entity)) ATTRIB(Label, text, string, string_null) ATTRIB(Label, fontSize, float, 8) ATTRIB(Label, align, float, 0.5) @@ -23,6 +24,7 @@ CLASS(Label) EXTENDS(Item) ATTRIB(Label, textEntity, entity, NULL) ATTRIB(Label, allowWrap, float, 0) ATTRIB(Label, recalcPos, float, 0) + ATTRIB(Label, condenseFactor, float, 1) ENDCLASS(Label) #endif @@ -36,6 +38,32 @@ void Label_setText(entity me, string txt) me.text = txt; me.recalcPos = 1; } +void Label_recalcPosition(entity me) +{ + float spaceAvail; + spaceAvail = 1 - me.keepspaceLeft - me.keepspaceRight; + + float spaceUsed; + spaceUsed = draw_TextWidth(me.text, me.allowColors, me.realFontSize); + + if(spaceUsed <= spaceAvail) + { + me.realOrigin_x = me.align * (spaceAvail - spaceUsed) + me.keepspaceLeft; + me.condenseFactor = 1; + } + else if(me.allowCut || me.allowWrap) + { + me.realOrigin_x = me.keepspaceLeft; + me.condenseFactor = 1; + } + else + { + me.realOrigin_x = me.keepspaceLeft; + me.condenseFactor = spaceAvail / spaceUsed; + dprint(sprintf(_("NOTE: label text %s too wide for label, condensed by factor %f\n"), me.text, me.condenseFactor)); + } + me.recalcPos = 0; +} void Label_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { SUPER(Label).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); @@ -46,9 +74,42 @@ void Label_resizeNotify(entity me, vector relOrigin, vector relSize, vector absO me.keepspaceLeft = me.marginLeft * me.realFontSize_x; if(me.marginRight) me.keepspaceRight = me.marginRight * me.realFontSize_x; - me.realOrigin_y = 0.5 * (1 - me.realFontSize_y); - me.realOrigin_x = me.align * (1 - me.keepspaceLeft - me.keepspaceRight - min(draw_TextWidth(me.text, me.allowColors, me.realFontSize), (1 - me.keepspaceLeft - me.keepspaceRight))) + me.keepspaceLeft; - me.recalcPos = 0; + + me.recalcPosition(me); + + float lines; + + vector dfs; + vector fs; + + // set up variables to draw in condensed size, but use hinting for original size + fs = me.realFontSize; + fs_x *= me.condenseFactor; + + dfs = draw_fontscale; + draw_fontscale_x *= me.condenseFactor; + + if(me.allowCut) // FIXME allowCut incompatible with align != 0 + lines = 1; + else if(me.allowWrap) // FIXME allowWrap incompatible with align != 0 + { + getWrappedLine_remaining = me.text; + lines = 0; + while(getWrappedLine_remaining) + { + if (me.allowColors) + getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), fs, draw_TextWidth_WithColors); + else + getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), fs, draw_TextWidth_WithoutColors); + ++lines; + } + } + else + lines = 1; + + draw_fontscale = dfs; + + me.realOrigin_y = 0.5 * (1 - lines * me.realFontSize_y); } void Label_configureLabel(entity me, string txt, float sz, float algn) { @@ -72,17 +133,23 @@ void Label_draw(entity me) t = me.text; if(me.recalcPos) - me.realOrigin_x = me.align * (1 - me.keepspaceLeft - me.keepspaceRight - min(draw_TextWidth(t, me.allowColors, me.realFontSize), (1 - me.keepspaceLeft - me.keepspaceRight))) + me.keepspaceLeft; - me.recalcPos = 0; + me.recalcPosition(me); - //if(me.text == "Bookmark") - // draw_Fill(me.realOrigin, '0 1 0' + '1 0 0' * draw_TextWidth(t, me.allowColors, me.realFontSize), '1 0 1', 1); - if(me.fontSize) if(t) { + vector dfs; + vector fs; + + // set up variables to draw in condensed size, but use hinting for original size + fs = me.realFontSize; + fs_x *= me.condenseFactor; + + dfs = draw_fontscale; + draw_fontscale_x *= me.condenseFactor; + if(me.allowCut) // FIXME allowCut incompatible with align != 0 - draw_Text(me.realOrigin, draw_TextShortenToWidth(t, (1 - me.keepspaceLeft - me.keepspaceRight), me.allowColors, me.realFontSize), me.realFontSize, me.colorL, me.alpha, me.allowColors); + draw_Text(me.realOrigin, draw_TextShortenToWidth(t, (1 - me.keepspaceLeft - me.keepspaceRight), me.allowColors, fs), fs, me.colorL, me.alpha, me.allowColors); else if(me.allowWrap) // FIXME allowWrap incompatible with align != 0 { getWrappedLine_remaining = t; @@ -90,15 +157,17 @@ void Label_draw(entity me) while(getWrappedLine_remaining) { if (me.allowColors) - t = getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), me.realFontSize, draw_TextWidth_WithColors); + t = getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), fs, draw_TextWidth_WithColors); else - t = getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), me.realFontSize, draw_TextWidth_WithoutColors); - draw_Text(o, t, me.realFontSize, me.colorL, me.alpha, me.allowColors); + t = getWrappedLine((1 - me.keepspaceLeft - me.keepspaceRight), fs, draw_TextWidth_WithoutColors); + draw_Text(o, t, fs, me.colorL, me.alpha, me.allowColors); o_y += me.realFontSize_y; } } else - draw_Text(me.realOrigin, t, me.realFontSize, me.colorL, me.alpha, me.allowColors); + draw_Text(me.realOrigin, t, fs, me.colorL, me.alpha, me.allowColors); + + draw_fontscale = dfs; } } #endif diff --git a/qcsrc/menu/item/listbox.c b/qcsrc/menu/item/listbox.c index ba3fa6a9f2..9664e93765 100644 --- a/qcsrc/menu/item/listbox.c +++ b/qcsrc/menu/item/listbox.c @@ -277,6 +277,7 @@ void ListBox_draw(entity me) oldshift = draw_shift; oldscale = draw_scale; absSize = boxToGlobalSize(me.size, eX * (1 - me.controlWidth) + eY * me.itemHeight); + draw_scale = boxToGlobalSize(eX * (1 - me.controlWidth) + eY * me.itemHeight, oldscale); for(i = floor(me.scrollPos / me.itemHeight); i < me.nItems; ++i) { float y; @@ -284,7 +285,6 @@ void ListBox_draw(entity me) if(y >= 1) break; draw_shift = boxToGlobal(eY * y, oldshift, oldscale); - draw_scale = boxToGlobalSize(eY * me.itemHeight + eX * (1 - me.controlWidth), oldscale); me.drawListBoxItem(me, i, absSize, (me.selectedItem == i)); } draw_ClearClip(); @@ -297,6 +297,6 @@ void ListBox_clickListBoxItem(entity me, float i, vector where) void ListBox_drawListBoxItem(entity me, float i, vector absSize, float selected) { - draw_Text('0 0 0', strcat("Item ", ftos(i)), eX * (8 / absSize_x) + eY * (8 / absSize_y), (selected ? '0 1 0' : '1 1 1'), 1, 0); + draw_Text('0 0 0', sprintf(_("Item %d"), i), eX * (8 / absSize_x) + eY * (8 / absSize_y), (selected ? '0 1 0' : '1 1 1'), 1, 0); } #endif diff --git a/qcsrc/menu/item/nexposee.c b/qcsrc/menu/item/nexposee.c index 2369a41077..304bf1dd24 100644 --- a/qcsrc/menu/item/nexposee.c +++ b/qcsrc/menu/item/nexposee.c @@ -149,8 +149,6 @@ void Nexposee_draw(entity me) me.animationState = 0; } - //print(ftos(me.animationState), "\n"); - f = min(1, frametime * 5); switch(me.animationState) { diff --git a/qcsrc/menu/item/slider.c b/qcsrc/menu/item/slider.c index c8bab9bf80..9a8a35fdcb 100644 --- a/qcsrc/menu/item/slider.c +++ b/qcsrc/menu/item/slider.c @@ -61,7 +61,7 @@ void Slider_setSliderValue(entity me, float val) } string Slider_toString(entity me) { - return strcat(ftos(me.value), " (", me.valueToText(me, me.value), ")"); + return sprintf(_("%d (%s)"), me.value, me.valueToText(me, me.value)); } void Slider_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) { diff --git a/qcsrc/menu/item/textslider.c b/qcsrc/menu/item/textslider.c index c4a7af7a89..028a1603a1 100644 --- a/qcsrc/menu/item/textslider.c +++ b/qcsrc/menu/item/textslider.c @@ -26,9 +26,9 @@ string TextSlider_valueToIdentifier(entity me, float val) string TextSlider_valueToText(entity me, float val) { if(val >= me.nValues) - return "custom"; + return _("custom"); if(val < 0) - return "custom"; + return _("custom"); return me.(valueStrings[val]); } void TextSlider_setValueFromIdentifier(entity me, string id) diff --git a/qcsrc/menu/mbuiltin.qh b/qcsrc/menu/mbuiltin.qh index 761b63a83b..e5d366eb70 100644 --- a/qcsrc/menu/mbuiltin.qh +++ b/qcsrc/menu/mbuiltin.qh @@ -3,9 +3,6 @@ ////////////////////////////////////////////////// // AK FIXME: Create perhaps a special builtin file for the common cmds -//#define PROFILESTRZONE -//#define FIXEDFOPEN - float checkextension(string ext) = #1; // error cmds @@ -100,11 +97,7 @@ float bound(float min,float value, float max) = #45; float pow(float a, float b) = #46; void copyentity(entity src, entity dst) = #47; -#ifdef FIXEDFOPEN -float _fopen( string filename, float mode ) = #48; -#else float fopen(string filename, float mode) = #48; -#endif void fclose(float fhandle) = #49; string fgets(float fhandle) = #50; void fputs(float fhandle, string s) = #51; @@ -116,23 +109,8 @@ string substring(string s, float start, float length) = #54; vector stov(string s) = #55; -#ifdef PROFILESTRZONE -string _strzone(string s) = #56; -void _strunzone(string s) = #57; - -string( string s ) strzone = -{ - return _strzone( s ); -}; - -void( string s ) strunzone = -{ - return _strunzone( s ); -}; -#else string strzone(string s) = #56; void strunzone(string s) = #57; -#endif float tokenize(string s) = #58; float(string s, string separator1, ...) tokenizebyseparator = #479; @@ -343,26 +321,6 @@ string(string search, string replace, string subject) strreplace = #484; string(float uselocaltime, string format, ...) strftime = #478; -#ifdef FIXEDFOPEN -float fopen( string filename, float mode ) = -{ - local float handle; - if( mode == FILE_READ ) { - return _fopen( filename, mode ); - } - - // check for data/ - filename = strzone( filename ); - if( substring( filename, 0, 5 ) != "data/" ) { - print( "menu: fopen: all output must go into data/!\n" ); - return -1; - } - handle = _fopen( substring( filename, 5, 10000 ), mode ); - strunzone( filename ); - return handle; -}; -#endif - float(string s) tokenize_console = #514; float(float i) argv_start_index = #515; float(float i) argv_end_index = #516; diff --git a/qcsrc/menu/menu.qc b/qcsrc/menu/menu.qc index 89505c73d9..ab940a3656 100644 --- a/qcsrc/menu/menu.qc +++ b/qcsrc/menu/menu.qc @@ -21,11 +21,12 @@ void SUB_Null() { }; void() m_init = { cvar_set("_menu_alpha", "0"); + prvm_language = strzone(cvar_string("prvm_language")); check_unacceptable_compiler_bugs(); #ifdef WATERMARK - print("^4MQC Build information: ", WATERMARK(), "\n"); + print(sprintf(_("^4MQC Build information: %s\n"), WATERMARK())); #endif // list all game dirs (TEST) @@ -38,7 +39,7 @@ void() m_init = s = getgamedirinfo(i, GETGAMEDIRINFO_NAME); if not(s) break; - print(s, ": ", getgamedirinfo(i, GETGAMEDIRINFO_DESCRIPTION)); + dprint(s, ": ", getgamedirinfo(i, GETGAMEDIRINFO_DESCRIPTION)); } } } @@ -115,18 +116,18 @@ void() m_init_delayed = if(cvar_string("menu_skin") != "") { draw_currentSkin = strcat("gfx/menu/", cvar_string("menu_skin")); - fh = fopen(strcat(draw_currentSkin, "/skinvalues.txt"), FILE_READ); + fh = fopen(language_filename(strcat(draw_currentSkin, "/skinvalues.txt")), FILE_READ); } if(fh < 0) if(cvar_defstring("menu_skin") != "") { draw_currentSkin = strcat("gfx/menu/", cvar_defstring("menu_skin")); - fh = fopen(strcat(draw_currentSkin, "/skinvalues.txt"), FILE_READ); + fh = fopen(language_filename(strcat(draw_currentSkin, "/skinvalues.txt")), FILE_READ); } if(fh < 0) { draw_currentSkin = "gfx/menu/default"; - fh = fopen(strcat(draw_currentSkin, "/skinvalues.txt"), FILE_READ); + fh = fopen(language_filename(strcat(draw_currentSkin, "/skinvalues.txt")), FILE_READ); } draw_currentSkin = strzone(draw_currentSkin); while((s = fgets(fh))) @@ -183,7 +184,7 @@ void(float key, float ascii) m_keyup = if(mouseButtonsPressed < 0) { mouseButtonsPressed = 0; - print("Warning: released an already released button\n"); + dprint("Warning: released an already released button\n"); } } if(key == K_ALT) menuShiftState -= (menuShiftState & S_ALT); @@ -221,7 +222,7 @@ void(float key, float ascii) m_keydown = if(mouseButtonsPressed > 10) { mouseButtonsPressed = 10; - print("Warning: pressed an already pressed button\n"); + dprint("Warning: pressed an already pressed button\n"); } } if(key == K_ALT) menuShiftState |= S_ALT; @@ -344,11 +345,6 @@ float m_testtooltipbox(vector tooltippos) return FALSE; if(tooltippos_y + menuTooltipSize_y > 1) return FALSE; - /* - menuTooltipOrigin_x = rint(tooltippos_x * cvar("vid_width")) / cvar("vid_width"); - menuTooltipOrigin_y = rint(tooltippos_y * cvar("vid_height")) / cvar("vid_height"); - menuTooltipOrigin_z = 0; - */ menuTooltipOrigin = tooltippos; return TRUE; } @@ -613,7 +609,7 @@ void() m_draw = if(!cvar("menu_video_played")) { localcmd("set menu_video_played 1; cd loop $menu_cdtrack; play sound/announcer/default/welcome.ogg\n"); - menuLogoAlpha = -0.8; // no idea why, but when I start this at zero, it jumps instead of fading + menuLogoAlpha = -0.8; // no idea why, but when I start this at zero, it jumps instead of fading FIXME } } @@ -886,7 +882,9 @@ void(string itemname) m_goto = } else { - e = findstring(NULL, name, itemname); + for(e = NULL; (e = findstring(e, name, itemname)); ) + if(e.classname != "vtbl") + break; if(e) { m_hide(); @@ -905,10 +903,18 @@ void() m_goto_skin_selector = m_goto("skinselector"); } +void() m_goto_language_selector = +{ + if(!menuInitialized) + return; + // TODO add code to switch back to the language selector (no idea how to do it now) + m_goto("languageselector"); +} + void() m_goto_video_settings = { if(!menuInitialized) return; - // TODO add code to switch back to the skin selector (no idea how to do it now) + // TODO add code to switch back to the video settings (no idea how to do it now) m_goto("videosettings"); } diff --git a/qcsrc/menu/menu.qh b/qcsrc/menu/menu.qh index 903700d5d5..3188ef0b01 100644 --- a/qcsrc/menu/menu.qh +++ b/qcsrc/menu/menu.qh @@ -27,6 +27,7 @@ void m_hide(); void m_display(); void m_goto(string name); void m_goto_skin_selector(); +void m_goto_language_selector(); void m_goto_video_settings(); .string name; @@ -40,3 +41,5 @@ void SUB_Null(); float preMenuInit(); // you have to define this for pre-menu initialization. Return 0 if initialization needs to be retried a frame later, 1 if it succeeded. void preMenuDraw(); // this is run before the menu is drawn. You may put some stuff there that has to be done every frame. void postMenuDraw(); // this is run just after the menu is drawn (or not). Useful to draw something over everything else. + +string prvm_language; diff --git a/qcsrc/menu/skin-customizables.inc b/qcsrc/menu/skin-customizables.inc index afea3e752f..fa88d92246 100644 --- a/qcsrc/menu/skin-customizables.inc +++ b/qcsrc/menu/skin-customizables.inc @@ -6,7 +6,7 @@ print "\n"; while(<DATA>) { chomp; - if(/^\s*(?:SKINFLOAT|SKINVECTOR)\(([A-Z_]+), ([-'0-9. ]+)\);$/) + if(/^\s*(?:SKINFLOAT|SKINVECTOR)\(([A-Z_]+), ([-'0-9. ]+)\);$/) #' { printf "%-31s %s\n", $1, $2; } @@ -51,6 +51,7 @@ SKINBEGIN SKINVECTOR(AVOID_TOOLTIP, '8 8 0'); // the individual dialog background colors + SKINVECTOR(COLOR_DIALOG_FIRSTRUN, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_MULTIPLAYER, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_SETTINGS, '0.7 0.7 1'); SKINVECTOR(COLOR_DIALOG_TEAMSELECT, '1 1 1'); @@ -101,6 +102,7 @@ SKINBEGIN SKINVECTOR(COLOR_BUTTON_C, '1 1 1'); SKINVECTOR(COLOR_BUTTON_F, '1 1 1'); SKINVECTOR(COLOR_BUTTON_D, '1 1 1'); + SKINFLOAT(MARGIN_BUTTON, 0.5); // item: campaign SKINFLOAT(ALPHA_CAMPAIGN_SELECTABLE, 0.8); diff --git a/qcsrc/menu/skin.qh b/qcsrc/menu/skin.qh index 20da37d24e..437c49bf72 100644 --- a/qcsrc/menu/skin.qh +++ b/qcsrc/menu/skin.qh @@ -17,7 +17,7 @@ //#define SKINSTRING(name,def) case #name: break #define SKINSTRING(name,def) case #name: SKIN##name = strzone(value); break // I know this leaks memory when skin is read multiple times. Screw it. -#define SKINEND case "": break; case "//": break; default: print("Invalid key in skin file: ", key, "\n"); } } +#define SKINEND case "": break; case "//": break; default: dprint("Invalid key in skin file: ", key, "\n"); } } #include "skin-customizables.inc" #undef SKINEND #undef SKINSTRING diff --git a/qcsrc/menu/xonotic/button.c b/qcsrc/menu/xonotic/button.c index 5522905bc2..cbc7c47c40 100644 --- a/qcsrc/menu/xonotic/button.c +++ b/qcsrc/menu/xonotic/button.c @@ -10,6 +10,8 @@ CLASS(XonoticButton) EXTENDS(Button) ATTRIB(XonoticButton, colorD, vector, SKINCOLOR_BUTTON_D) ATTRIB(XonoticButton, alpha, float, SKINALPHA_TEXT) ATTRIB(XonoticButton, disabledAlpha, float, SKINALPHA_DISABLED) + ATTRIB(XonoticButton, marginLeft, float, SKINMARGIN_BUTTON) // chars + ATTRIB(XonoticButton, marginRight, float, SKINMARGIN_BUTTON) // chars ENDCLASS(XonoticButton) entity makeXonoticButton(string theText, vector theColor); #endif diff --git a/qcsrc/menu/xonotic/campaign.c b/qcsrc/menu/xonotic/campaign.c index e7667f69cf..04f7a083c2 100644 --- a/qcsrc/menu/xonotic/campaign.c +++ b/qcsrc/menu/xonotic/campaign.c @@ -281,8 +281,8 @@ void XonoticCampaignList_drawListBoxItem(entity me, float i, vector absSize, flo if(i <= me.campaignIndex) s = campaign_shortdesc[i]; // fteqcc sucks else - s = "???"; - s = draw_TextShortenToWidth(strcat("Level ", ftos(i + 1), ": ", s), me.columnNameSize, 0, me.realFontSize); + s = _("???"); + s = draw_TextShortenToWidth(sprintf(_("Level %d: %s"), i+1, s), me.columnNameSize, 0, me.realFontSize); draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, theColor, theAlpha, 0); if(i <= me.campaignIndex) diff --git a/qcsrc/menu/xonotic/credits.c b/qcsrc/menu/xonotic/credits.c index 86609a6598..daf4d22f9c 100644 --- a/qcsrc/menu/xonotic/credits.c +++ b/qcsrc/menu/xonotic/credits.c @@ -30,7 +30,9 @@ void XonoticCreditsList_configureXonoticCreditsList(entity me) { me.configureXonoticListBox(me); // load the file - me.bufferIndex = buf_load("xonotic-credits.txt"); + me.bufferIndex = buf_load(language_filename("xonotic-credits.txt")); + if(me.bufferIndex < 0) + me.bufferIndex = buf_load("xonotic-credits.txt"); me.nItems = buf_getsize(me.bufferIndex); } void XonoticCreditsList_destroy(entity me) diff --git a/qcsrc/menu/xonotic/cvarlist.c b/qcsrc/menu/xonotic/cvarlist.c index 3eaf2677e9..4d36c92581 100644 --- a/qcsrc/menu/xonotic/cvarlist.c +++ b/qcsrc/menu/xonotic/cvarlist.c @@ -81,15 +81,15 @@ void XonoticCvarList_setSelected(entity me, float i) t = cvar_type(me.cvarName); me.cvarType = ""; if(t & CVAR_TYPEFLAG_SAVED) - me.cvarType = strcat(me.cvarType, ", will be saved to config.cfg"); + me.cvarType = strcat(me.cvarType, ", ", _("will be saved to config.cfg")); else - me.cvarType = strcat(me.cvarType, ", will not be saved"); + me.cvarType = strcat(me.cvarType, ", ", _("will not be saved")); if(t & CVAR_TYPEFLAG_PRIVATE) - me.cvarType = strcat(me.cvarType, ", private"); + me.cvarType = strcat(me.cvarType, ", ", _("private")); if(t & CVAR_TYPEFLAG_ENGINE) - me.cvarType = strcat(me.cvarType, ", engine setting"); + me.cvarType = strcat(me.cvarType, ", ", _("engine setting")); if(t & CVAR_TYPEFLAG_READONLY) - me.cvarType = strcat(me.cvarType, ", read only"); + me.cvarType = strcat(me.cvarType, ", ", _("read only")); me.cvarType = strzone(substring(me.cvarType, 2, strlen(me.cvarType) - 2)); me.cvarNameBox.setText(me.cvarNameBox, me.cvarName); diff --git a/qcsrc/menu/xonotic/dialog.c b/qcsrc/menu/xonotic/dialog.c index 7087d83cb9..f18658c715 100644 --- a/qcsrc/menu/xonotic/dialog.c +++ b/qcsrc/menu/xonotic/dialog.c @@ -3,7 +3,7 @@ CLASS(XonoticDialog) EXTENDS(Dialog) // still to be customized by user /* ATTRIB(XonoticDialog, closable, float, 1) - ATTRIB(XonoticDialog, title, string, "Form1") // ;) + ATTRIB(XonoticDialog, title, string, _("Form1")) // ;) ATTRIB(XonoticDialog, color, vector, '1 0.5 1') ATTRIB(XonoticDialog, intendedWidth, float, 0) ATTRIB(XonoticDialog, rows, float, 3) diff --git a/qcsrc/menu/xonotic/dialog_credits.c b/qcsrc/menu/xonotic/dialog_credits.c index 07c2fc4f29..e90ae4b425 100644 --- a/qcsrc/menu/xonotic/dialog_credits.c +++ b/qcsrc/menu/xonotic/dialog_credits.c @@ -2,7 +2,7 @@ CLASS(XonoticCreditsDialog) EXTENDS(XonoticDialog) METHOD(XonoticCreditsDialog, fill, void(entity)) METHOD(XonoticCreditsDialog, focusEnter, void(entity)) - ATTRIB(XonoticCreditsDialog, title, string, "Credits") + ATTRIB(XonoticCreditsDialog, title, string, _("Credits")) ATTRIB(XonoticCreditsDialog, color, vector, SKINCOLOR_DIALOG_CREDITS) ATTRIB(XonoticCreditsDialog, intendedWidth, float, SKINWIDTH_CREDITS) ATTRIB(XonoticCreditsDialog, rows, float, SKINROWS_CREDITS) @@ -18,7 +18,7 @@ void XonoticCreditsDialog_fill(entity me) me.TR(me); me.TD(me, me.rows - 1, me.columns, me.creditsList = makeXonoticCreditsList()); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_firstrun.c b/qcsrc/menu/xonotic/dialog_firstrun.c new file mode 100644 index 0000000000..6568a7198f --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_firstrun.c @@ -0,0 +1,72 @@ +#ifdef INTERFACE +CLASS(XonoticFirstRunDialog) EXTENDS(XonoticRootDialog) + METHOD(XonoticFirstRunDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls + ATTRIB(XonoticFirstRunDialog, title, string, _("Welcome")) + ATTRIB(XonoticFirstRunDialog, color, vector, SKINCOLOR_DIALOG_FIRSTRUN) + ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.6) + ATTRIB(XonoticFirstRunDialog, rows, float, 15) + ATTRIB(XonoticFirstRunDialog, columns, float, 3) + ATTRIB(XonoticFirstRunDialog, name, string, "FirstRun") + ATTRIB(XonoticFirstRunDialog, playerNameLabel, entity, NULL) + ATTRIB(XonoticFirstRunDialog, playerNameLabelAlpha, float, 0) + + ATTRIB(XonoticFirstRunDialog, closable, float, 0) +ENDCLASS(XonoticFirstRunDialog) +#endif + +#ifdef IMPLEMENTATION +float CheckFirstRunButton(entity me) +{ + if(cvar_string("_cl_name") != "Player") + return 1; + if(cvar_string("prvm_language") != prvm_language) + return 1; // OK will then reopen the dialog in another language + return 0; +} + +void XonoticFirstRunDialog_fill(entity me) +{ + entity e; + entity label, box; + + me.TR(me); + me.TD(me, 2, 3, e = makeXonoticTextLabel(0, _("Welcome to Xonotic, please select your language preference and enter your player name to get started. You can change these options later through the menu system."))); + e.allowWrap = 1; + me.TR(me); + + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:"))); + me.TR(me); + me.TD(me, 3, 3, e = makeXonoticLanguageList()); + e.name = "languageselector_firstrun"; + e.doubleClickCommand = "saveconfig; menu_restart; togglemenu"; + me.TR(me); + me.TR(me); + + me.TR(me); + me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, _("Name:"))); + me.playerNameLabelAlpha = me.playerNameLabel.alpha; + me.TD(me, 1, 2.5, label = makeXonoticTextLabel(0, string_null)); + label.allowCut = 1; + label.allowColors = 1; + label.alpha = 1; + me.TR(me); + me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name")); + box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved + box.maxLength = -127; // negative means encoded length in bytes + box.saveImmediately = 1; + label.textEntity = box; + me.TR(me); + me.TD(me, 5, 1, e = makeXonoticColorpicker(box)); + me.TD(me, 5, 2, e = makeXonoticCharmap(box)); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + + // because of the language selector, this is a menu_restart! + me.gotoRC(me, me.rows - 1, 0); + me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Save settings"), '0 0 0', "saveconfig; menu_restart; togglemenu", COMMANDBUTTON_APPLY)); + setDependentWeird(e, CheckFirstRunButton); +} +#endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_ammo.c b/qcsrc/menu/xonotic/dialog_hudpanel_ammo.c index 256dbe7df0..299ea09fd7 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_ammo.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_ammo.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDAmmoDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDAmmoDialog, fill, void(entity)) - ATTRIB(XonoticHUDAmmoDialog, title, string, "Ammo Panel") + ATTRIB(XonoticHUDAmmoDialog, title, string, _("Ammo Panel")) ATTRIB(XonoticHUDAmmoDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDAmmoDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDAmmoDialog, rows, float, 15) @@ -15,71 +15,18 @@ void XonoticHUDAmmoDialog_fill(entity me) { entity e; string panelname = "ammo"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_ammo", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Ammunition display:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Ammunition display:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_ammo_onlycurrent", "Show only current ammo type")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_ammo_onlycurrent", _("Show only current ammo type"))); me.TR(me); me.TDempty(me, 0.2); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Align icon:")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "0", "Left")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "1", "Right")); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "0", _("Left"))); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_ammo_iconalign", "1", _("Right"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_chat.c b/qcsrc/menu/xonotic/dialog_hudpanel_chat.c index c9a4eae6e8..331b0ee9ae 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_chat.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_chat.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDChatDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDChatDialog, fill, void(entity)) - ATTRIB(XonoticHUDChatDialog, title, string, "Chat Panel") + ATTRIB(XonoticHUDChatDialog, title, string, _("Chat Panel")) ATTRIB(XonoticHUDChatDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDChatDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDChatDialog, rows, float, 15) @@ -15,74 +15,21 @@ void XonoticHUDChatDialog_fill(entity me) { entity e; string panelname = "chat"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_chat", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Chat entries:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Chat entries:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Chat size:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Chat size:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(6, 20, 1, "con_chatsize")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Chat lifetime:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Chat lifetime:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(5, 60, 5, "con_chattime")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_chatsound", "Chat beep sound")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_chatsound", _("Chat beep sound"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c b/qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c index 03ef106c7d..b69a5869e7 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_engineinfo.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDEngineInfoDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDEngineInfoDialog, fill, void(entity)) - ATTRIB(XonoticHUDEngineInfoDialog, title, string, "Engine Info Panel") + ATTRIB(XonoticHUDEngineInfoDialog, title, string, _("Engine Info Panel")) ATTRIB(XonoticHUDEngineInfoDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDEngineInfoDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDEngineInfoDialog, rows, float, 15) @@ -15,66 +15,13 @@ void XonoticHUDEngineInfoDialog_fill(entity me) { entity e; string panelname = "engineinfo"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_engineinfo", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Engine info:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Engine info:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_engineinfo_framecounter_exponentialmovingaverage", "Use an averaging algorithm for fps")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_engineinfo_framecounter_exponentialmovingaverage", _("Use an averaging algorithm for fps"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c index 3e8a43aeb3..91da57cdfa 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_healtharmor.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDHealthArmorDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDHealthArmorDialog, fill, void(entity)) - ATTRIB(XonoticHUDHealthArmorDialog, title, string, "Health/Armor Panel") + ATTRIB(XonoticHUDHealthArmorDialog, title, string, _("Health/Armor Panel")) ATTRIB(XonoticHUDHealthArmorDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDHealthArmorDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDHealthArmorDialog, rows, float, 15) @@ -15,86 +15,33 @@ void XonoticHUDHealthArmorDialog_fill(entity me) { entity e; string panelname = "healtharmor"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_healtharmor", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_progressbar", "Enable status bar")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_progressbar", _("Enable status bar"))); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Status bar alignment:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Status bar alignment:"))); setDependent(e, "hud_panel_healtharmor_progressbar", 1, 1); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "0", "Left")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "0", _("Left"))); setDependent(e, "hud_panel_healtharmor_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "1", "Right")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "1", _("Right"))); setDependent(e, "hud_panel_healtharmor_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "3", "Inward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "3", _("Inward"))); setDependent(e, "hud_panel_healtharmor_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "4", "Outward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_healtharmor_baralign", "4", _("Outward"))); setDependent(e, "hud_panel_healtharmor_progressbar", 1, 1); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Icon alignment:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Icon alignment:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "0", "Left")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "1", "Right")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "3", "Inward")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "4", "Outward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "0", _("Left"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "1", _("Right"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "3", _("Inward"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_healtharmor_iconalign", "4", _("Outward"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_flip", "Flip health and armor positions")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_healtharmor_flip", _("Flip health and armor positions"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c b/qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c index d8534a20e9..44b20294b7 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_infomessages.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDInfoMessagesDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDInfoMessagesDialog, fill, void(entity)) - ATTRIB(XonoticHUDInfoMessagesDialog, title, string, "Info Messages Panel") + ATTRIB(XonoticHUDInfoMessagesDialog, title, string, _("Info Messages Panel")) ATTRIB(XonoticHUDInfoMessagesDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDInfoMessagesDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDInfoMessagesDialog, rows, float, 15) @@ -15,66 +15,13 @@ void XonoticHUDInfoMessagesDialog_fill(entity me) { entity e; string panelname = "infomessages"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_infomessages", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Info messages:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Info messages:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_infomessages_flip", "Flip align")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_infomessages_flip", _("Flip align"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_modicons.c b/qcsrc/menu/xonotic/dialog_hudpanel_modicons.c index d60a72473f..fd5d233dcf 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_modicons.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_modicons.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDModIconsDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDModIconsDialog, fill, void(entity)) - ATTRIB(XonoticHUDModIconsDialog, title, string, "Mod Icons Panel") + ATTRIB(XonoticHUDModIconsDialog, title, string, _("Mod Icons Panel")) ATTRIB(XonoticHUDModIconsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDModIconsDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDModIconsDialog, rows, float, 15) @@ -15,61 +15,7 @@ void XonoticHUDModIconsDialog_fill(entity me) { entity e; string panelname = "modicons"; - float i; - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_modicons", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); + DIALOG_HUDPANEL_COMMON(); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_notification.c b/qcsrc/menu/xonotic/dialog_hudpanel_notification.c index b0752664f2..1f26ab34aa 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_notification.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_notification.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDNotificationDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDNotificationDialog, fill, void(entity)) - ATTRIB(XonoticHUDNotificationDialog, title, string, "Notification Panel") + ATTRIB(XonoticHUDNotificationDialog, title, string, _("Notification Panel")) ATTRIB(XonoticHUDNotificationDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDNotificationDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDNotificationDialog, rows, float, 15) @@ -15,77 +15,24 @@ void XonoticHUDNotificationDialog_fill(entity me) { entity e; string panelname = "notify"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_notify", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Notifications:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Notifications:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_notify_print", "Also print notifications to the console")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_notify_print", _("Also print notifications to the console"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_notify_flip", "Flip notify order")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_notify_flip", _("Flip notify order"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Entry lifetime:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Entry lifetime:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(3, 15, 1, "hud_panel_notify_time")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Entry fadetime:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Entry fadetime:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(0.5, 5, 0.5, "hud_panel_notify_fadetime")); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_powerups.c b/qcsrc/menu/xonotic/dialog_hudpanel_powerups.c index 5d4e14c08b..e63e785528 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_powerups.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_powerups.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDPowerupsDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDPowerupsDialog, fill, void(entity)) - ATTRIB(XonoticHUDPowerupsDialog, title, string, "Powerups Panel") + ATTRIB(XonoticHUDPowerupsDialog, title, string, _("Powerups Panel")) ATTRIB(XonoticHUDPowerupsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDPowerupsDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDPowerupsDialog, rows, float, 15) @@ -15,86 +15,33 @@ void XonoticHUDPowerupsDialog_fill(entity me) { entity e; string panelname = "powerups"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_powerups", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_powerups_progressbar", "Enable status bar")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_powerups_progressbar", _("Enable status bar"))); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Status bar alignment:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Status bar alignment:"))); setDependent(e, "hud_panel_powerups_progressbar", 1, 1); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "0", "Left")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "0", _("Left"))); setDependent(e, "hud_panel_powerups_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "1", "Right")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "1", _("Right"))); setDependent(e, "hud_panel_powerups_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "3", "Inward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "3", _("Inward"))); setDependent(e, "hud_panel_powerups_progressbar", 1, 1); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "4", "Outward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(2, "hud_panel_powerups_baralign", "4", _("Outward"))); setDependent(e, "hud_panel_powerups_progressbar", 1, 1); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Icon alignment:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Icon alignment:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "0", "Left")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "1", "Right")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "3", "Inward")); - me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "4", "Outward")); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "0", _("Left"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "1", _("Right"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "3", _("Inward"))); + me.TD(me, 1, 0.95, e = makeXonoticRadioButton(3, "hud_panel_powerups_iconalign", "4", _("Outward"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_powerups_flip", "Flip strength and shield positions")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_powerups_flip", _("Flip strength and shield positions"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c b/qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c index 30f6bfc1f2..bbddb7fc1b 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_pressedkeys.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDPressedKeysDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDPressedKeysDialog, fill, void(entity)) - ATTRIB(XonoticHUDPressedKeysDialog, title, string, "Pressed Keys Panel") + ATTRIB(XonoticHUDPressedKeysDialog, title, string, _("Pressed Keys Panel")) ATTRIB(XonoticHUDPressedKeysDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDPressedKeysDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDPressedKeysDialog, rows, float, 15) @@ -15,69 +15,19 @@ void XonoticHUDPressedKeysDialog_fill(entity me) { entity e; string panelname = "pressedkeys"; - float i; me.TR(me); me.TD(me, 1, 2, e = makeXonoticTextSlider("hud_panel_pressedkeys")); - e.addValue(e, "Panel disabled", "0"); - e.addValue(e, "Panel enabled when spectating", "1"); - e.addValue(e, "Panel always enabled", "2"); + e.addValue(e, _("Panel disabled"), "0"); + e.addValue(e, _("Panel enabled when spectating"), "1"); + e.addValue(e, _("Panel always enabled"), "2"); e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); + + DIALOG_HUDPANEL_COMMON_NOTOGGLE(); + me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Forced aspect:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Forced aspect:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(0.2, 4, 0.1, "hud_panel_pressedkeys_aspect")); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c b/qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c index 35fdc55f3c..015979b21e 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_racetimer.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDRaceTimerDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDRaceTimerDialog, fill, void(entity)) - ATTRIB(XonoticHUDRaceTimerDialog, title, string, "Race Timer Panel") + ATTRIB(XonoticHUDRaceTimerDialog, title, string, _("Race Timer Panel")) ATTRIB(XonoticHUDRaceTimerDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDRaceTimerDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDRaceTimerDialog, rows, float, 15) @@ -15,61 +15,7 @@ void XonoticHUDRaceTimerDialog_fill(entity me) { entity e; string panelname = "racetimer"; - float i; - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_racetimer", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); + DIALOG_HUDPANEL_COMMON(); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_radar.c b/qcsrc/menu/xonotic/dialog_hudpanel_radar.c index d1202846e2..5a43bbdf60 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_radar.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_radar.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDRadarDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDRadarDialog, fill, void(entity)) - ATTRIB(XonoticHUDRadarDialog, title, string, "Radar Panel") + ATTRIB(XonoticHUDRadarDialog, title, string, _("Radar Panel")) ATTRIB(XonoticHUDRadarDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDRadarDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDRadarDialog, rows, float, 15) @@ -15,94 +15,44 @@ void XonoticHUDRadarDialog_fill(entity me) { entity e; string panelname = "radar"; - float i; me.TR(me); me.TD(me, 1, 2, e = makeXonoticTextSlider("hud_panel_radar")); - e.addValue(e, "Panel disabled", "0"); - e.addValue(e, "Panel enabled in teamgames", "1"); - e.addValue(e, "Panel always enabled", "2"); + e.addValue(e, _("Panel disabled"), "0"); + e.addValue(e, _("Panel enabled in teamgames"), "1"); + e.addValue(e, _("Panel always enabled"), "2"); e.configureXonoticTextSliderValues(e); + + DIALOG_HUDPANEL_COMMON_NOTOGGLE(); + me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Radar:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Radar:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Alpha:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_radar_foreground_alpha")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Rotation:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Rotation:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_panel_radar_rotation")); - e.addValue(e, "Forward", "0"); - e.addValue(e, "West", "1"); - e.addValue(e, "South", "2"); - e.addValue(e, "East", "3"); - e.addValue(e, "North", "4"); + e.addValue(e, _("Forward"), "0"); + e.addValue(e, _("West"), "1"); + e.addValue(e, _("South"), "2"); + e.addValue(e, _("East"), "3"); + e.addValue(e, _("North"), "4"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Scale:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Scale:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(1024, 8192, 512, "hud_panel_radar_scale")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Zoom mode:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Zoom mode:"))); me.TD(me, 1, 1.6, e = makeXonoticTextSlider("hud_panel_radar_zoommode")); - e.addValue(e, "Zoomed in", "0"); - e.addValue(e, "Zoomed out", "1"); - e.addValue(e, "Always zoomed", "2"); - e.addValue(e, "Never zoomed", "3"); + e.addValue(e, _("Zoomed in"), "0"); + e.addValue(e, _("Zoomed out"), "1"); + e.addValue(e, _("Always zoomed"), "2"); + e.addValue(e, _("Never zoomed"), "3"); e.configureXonoticTextSliderValues(e); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_score.c b/qcsrc/menu/xonotic/dialog_hudpanel_score.c index fc51921e23..ccb8d9528b 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_score.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_score.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDScoreDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDScoreDialog, fill, void(entity)) - ATTRIB(XonoticHUDScoreDialog, title, string, "Score Panel") + ATTRIB(XonoticHUDScoreDialog, title, string, _("Score Panel")) ATTRIB(XonoticHUDScoreDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDScoreDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDScoreDialog, rows, float, 15) @@ -15,61 +15,7 @@ void XonoticHUDScoreDialog_fill(entity me) { entity e; string panelname = "score"; - float i; - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_score", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); + DIALOG_HUDPANEL_COMMON(); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_timer.c b/qcsrc/menu/xonotic/dialog_hudpanel_timer.c index 96dc4aa695..5f2fc5dd74 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_timer.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_timer.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDTimerDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDTimerDialog, fill, void(entity)) - ATTRIB(XonoticHUDTimerDialog, title, string, "Timer Panel") + ATTRIB(XonoticHUDTimerDialog, title, string, _("Timer Panel")) ATTRIB(XonoticHUDTimerDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDTimerDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDTimerDialog, rows, float, 15) @@ -15,66 +15,13 @@ void XonoticHUDTimerDialog_fill(entity me) { entity e; string panelname = "timer"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_timer", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Timer:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Timer:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_timer_increment", "Show elapsed time")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_timer_increment", _("Show elapsed time"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_vote.c b/qcsrc/menu/xonotic/dialog_hudpanel_vote.c index b5f5b6e27b..d3d35c22a4 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_vote.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_vote.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDVoteDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDVoteDialog, fill, void(entity)) - ATTRIB(XonoticHUDVoteDialog, title, string, "Vote Panel") + ATTRIB(XonoticHUDVoteDialog, title, string, _("Vote Panel")) ATTRIB(XonoticHUDVoteDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDVoteDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDVoteDialog, rows, float, 15) @@ -15,64 +15,11 @@ void XonoticHUDVoteDialog_fill(entity me) { entity e; string panelname = "vote"; - float i; + + DIALOG_HUDPANEL_COMMON(); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_vote", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Alpha after voting:")); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Alpha after voting:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_vote_alreadyvoted_alpha")); } #endif diff --git a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c index ad3d080415..394ec33238 100644 --- a/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c +++ b/qcsrc/menu/xonotic/dialog_hudpanel_weapons.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDWeaponsDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDWeaponsDialog, fill, void(entity)) - ATTRIB(XonoticHUDWeaponsDialog, title, string, "Weapons Panel") + ATTRIB(XonoticHUDWeaponsDialog, title, string, _("Weapons Panel")) ATTRIB(XonoticHUDWeaponsDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDWeaponsDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDWeaponsDialog, rows, float, 17) @@ -17,98 +17,46 @@ void XonoticHUDWeaponsDialog_fill(entity me) string panelname = "weapons"; float i; - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_panel_weapons", "Enable panel")); - me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); - setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticCheckBoxString("", cvar_string("hud_panel_bg_color"), strzone(strcat("hud_panel_", panelname, "_bg_color")), "Use default")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); - e.addValue(e, "Default", ""); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team Color:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); - e.addValue(e, "Default", ""); - e.addValue(e, "Disable", "0"); - for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); - me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); - e.addValue(e, "Default", ""); - for(i = 0; i <= 10; ++i) - e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); - e.configureXonoticTextSliderValues(e); + DIALOG_HUDPANEL_COMMON(); + me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Fade out after:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Fade out after:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_timeout")))); - e.addValue(e, "Never", "0"); + e.addValue(e, _("Never"), "0"); for(i = 1; i <= 10; ++i) - e.addValue(e, strzone(strcat(ftos_decimals(i, 0), "s")), strzone(ftos(i))); + e.addValue(e, strzone(sprintf(_("%ds"), i)), strzone(ftos(i))); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Fade effect:")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "0", "None")); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Fade effect:"))); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "0", ZCTX(_("EF^None")))); setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_timeout")), "0"); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "1", "Slide")); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "1", _("Slide"))); setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_timeout")), "0"); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "2", "Alpha")); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(3, "hud_panel_weapons_timeout_effect", "2", _("Alpha"))); setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_timeout")), "0"); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticTextLabel(0, "Weapon icons:")); + me.TD(me, 1, 2, e = makeXonoticTextLabel(0, _("Weapon icons:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Show weapon ID as:")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "0", "None")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "1", "Number")); - me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "2", "Bind")); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Show weapon ID as:"))); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "0", ZCTX(_("SHOWAS^None")))); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "1", _("Number"))); + me.TD(me, 1, 0.8, e = makeXonoticRadioButton(2, "hud_panel_weapons_label", "2", _("Bind"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_weapons_accuracy", "Show Accuracy")); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_weapons_ammo", "Show Ammo")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_weapons_accuracy", _("Show Accuracy"))); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "hud_panel_weapons_ammo", _("Show Ammo"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Ammo bar color:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Ammo bar color:"))); me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_weapons_ammo_color", "hud_panel_weapons_ammo_color")); setDependent(e, "hud_panel_weapons_ammo", 1, 1); me.TR(me); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Ammo bar alpha:")); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Ammo bar alpha:"))); me.TD(me, 1, 2.6, e = makeXonoticSlider(0.1, 1, 0.1, "hud_panel_weapons_ammo_alpha")); setDependent(e, "hud_panel_weapons_ammo", 1, 1); } diff --git a/qcsrc/menu/xonotic/dialog_hudsetup_exit.c b/qcsrc/menu/xonotic/dialog_hudsetup_exit.c index 751b3cf95c..e449fa5d48 100644 --- a/qcsrc/menu/xonotic/dialog_hudsetup_exit.c +++ b/qcsrc/menu/xonotic/dialog_hudsetup_exit.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticHUDExitDialog) EXTENDS(XonoticRootDialog) METHOD(XonoticHUDExitDialog, fill, void(entity)) - ATTRIB(XonoticHUDExitDialog, title, string, "Panel HUD Setup") + ATTRIB(XonoticHUDExitDialog, title, string, _("Panel HUD Setup")) ATTRIB(XonoticHUDExitDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticHUDExitDialog, intendedWidth, float, 0.4) ATTRIB(XonoticHUDExitDialog, rows, float, 18) @@ -18,95 +18,95 @@ void XonoticHUDExitDialog_fill(entity me) float i; me.TR(me); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Panel background defaults:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Panel background defaults:"))); me.TR(me); me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "Background:")); - me.TD(me, 1, 1.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_bg")))); - e.addValue(e, "Disable", "0"); - e.addValue(e, "border_default", "border_default"); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_bg")))); + e.addValue(e, _("Disable"), "0"); + e.addValue(e, "border_default", "border_default"); // this is a file name! e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_panel_bg_color", "hud_panel_bg_color")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Color:"))); + me.TD(me, 2, 2.6, e = makeXonoticColorpickerString("hud_panel_bg_color", "hud_panel_bg_color")); me.TR(me); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Border size:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Border size:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_panel_bg_border")); - e.addValue(e, "Disable", "0"); + e.addValue(e, _("Disable"), "0"); for(i = 1; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Alpha:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_panel_bg_alpha")); for(i = 1; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team color:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Team color:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_panel_bg_color_team")); - e.addValue(e, "Disable", "0"); + e.addValue(e, _("Disable"), "0"); for(i = 1; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", "Test the team color in HUD configure mode")); + me.TD(me, 1, 3.6, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", _("Test team color in configure mode"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Padding:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Padding:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_panel_bg_padding")); for(i = 0; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, "HUD Dock:")); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("HUD Dock:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_dock")); - e.addValue(e, "Disable", "0"); - e.addValue(e, "Small", "dock_small"); - e.addValue(e, "Medium", "dock_medium"); - e.addValue(e, "Large", "dock_large"); + e.addValue(e, ZCTX(_("DOCK^Disabled")), "0"); + e.addValue(e, ZCTX(_("DOCK^Small")), "dock_small"); + e.addValue(e, ZCTX(_("DOCK^Medium")), "dock_medium"); + e.addValue(e, ZCTX(_("DOCK^Large")), "dock_large"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Color:")); - me.TD(me, 2, 2.4, e = makeXonoticColorpickerString("hud_dock_color", "hud_dock_color")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Color:"))); + me.TD(me, 2, 2.6, e = makeXonoticColorpickerString("hud_dock_color", "hud_dock_color")); me.TR(me); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Alpha:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Alpha:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_dock_alpha")); for(i = 1; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Team color:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Team color:"))); me.TD(me, 1, 2.6, e = makeXonoticTextSlider("hud_dock_color_team")); - e.addValue(e, "Disable", "0"); + e.addValue(e, _("Disable"), "0"); for(i = 1; i <= 10; ++i) e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Grid settings:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Grid settings:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "hud_configure_grid", "Snap panels to grid")); + me.TD(me, 1, 3.8, e = makeXonoticCheckBox(0, "hud_configure_grid", _("Snap panels to grid"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Grid size:")); - me.TD(me, 1, 0.2, e = makeXonoticTextLabel(0, "X:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Grid size:"))); + me.TD(me, 1, 0.2, e = makeXonoticTextLabel(0, _("X:"))); me.TD(me, 1, 1.1, e = makeXonoticTextSlider("hud_configure_grid_xsize")); for(i = 1; i <= 14; ++i) e.addValue(e, strzone(ftos_decimals(i/200, 3)), strzone(ftos(i/200))); e.configureXonoticTextSliderValues(e); setDependent(e, "hud_configure_grid", 1, 1); - me.TD(me, 1, 0.2, e = makeXonoticTextLabel(0, "Y:")); + me.TD(me, 1, 0.2, e = makeXonoticTextLabel(0, _("Y:"))); me.TD(me, 1, 1.1, e = makeXonoticTextSlider("hud_configure_grid_ysize")); for(i = 1; i <= 14; ++i) e.addValue(e, strzone(ftos_decimals(i/200, 3)), strzone(ftos(i/200))); @@ -114,6 +114,6 @@ void XonoticHUDExitDialog_fill(entity me) setDependent(e, "hud_configure_grid", 1, 1); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticCommandButton("Exit setup", '0 0 0', "_hud_configure 0", 1)); + me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Exit setup"), '0 0 0', "_hud_configure 0", 1)); } #endif diff --git a/qcsrc/menu/xonotic/dialog_multiplayer.c b/qcsrc/menu/xonotic/dialog_multiplayer.c index e755710c5b..2492581d06 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticMultiplayerDialog) EXTENDS(XonoticDialog) METHOD(XonoticMultiplayerDialog, fill, void(entity)) - ATTRIB(XonoticMultiplayerDialog, title, string, "Multiplayer") + ATTRIB(XonoticMultiplayerDialog, title, string, _("Multiplayer")) ATTRIB(XonoticMultiplayerDialog, color, vector, SKINCOLOR_DIALOG_MULTIPLAYER) ATTRIB(XonoticMultiplayerDialog, intendedWidth, float, 0.96) ATTRIB(XonoticMultiplayerDialog, rows, float, 24) @@ -15,14 +15,10 @@ void XonoticMultiplayerDialog_fill(entity me) entity mc, e; mc = makeXonoticTabController(me.rows - 2); me.TR(me); - me.TD(me, 1, 1, e = mc.makeTabButton(mc, "Servers", makeXonoticServerListTab())); - setDependentStringNotEqual(e, "_cl_name", "Player"); - me.TD(me, 1, 1, e = mc.makeTabButton(mc, "Create", makeXonoticServerCreateTab())); - setDependentStringNotEqual(e, "_cl_name", "Player"); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Demos", makeXonoticDemoBrowserTab())); - me.TD(me, 1, 1, e = mc.makeTabButton(mc, "Player Setup", makeXonoticPlayerSettingsTab())); - if(cvar_string("_cl_name") == "Player") - e.onClick(e, e.onClickEntity); // lol animation + 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, mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab())); + me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Player Setup"), makeXonoticPlayerSettingsTab())); me.TR(me); me.TR(me); diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create.c b/qcsrc/menu/xonotic/dialog_multiplayer_create.c index 416a85419b..2d9689f644 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create.c @@ -2,7 +2,7 @@ CLASS(XonoticServerCreateTab) EXTENDS(XonoticTab) METHOD(XonoticServerCreateTab, fill, void(entity)) METHOD(XonoticServerCreateTab, gameTypeChangeNotify, void(entity)) - ATTRIB(XonoticServerCreateTab, title, string, "Create") + ATTRIB(XonoticServerCreateTab, title, string, _("Create")) ATTRIB(XonoticServerCreateTab, intendedWidth, float, 0.9) ATTRIB(XonoticServerCreateTab, rows, float, 22) ATTRIB(XonoticServerCreateTab, columns, float, 6.5) @@ -32,148 +32,92 @@ void XonoticServerCreateTab_fill(entity me) float n; me.TR(me); - n = 6; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_dm", "DM")); - e0 = e; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_lms", "LMS")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_arena", "Arena")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_keepaway", "Keepaway")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_race", "Race")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_cts", "Race CTS")); - if(e.checked) e0 = NULL; - me.TR(me); - n = 9; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_tdm", "TDM")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_ctf", "CTF")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_ca", "CA")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_freezetag", "Freeze Tag")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_domination", "Domination")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_keyhunt", "Key Hunt")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_assault", "Assault")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_onslaught", "Onslaught")); - if(e.checked) e0 = NULL; - me.TD(me, 1, me.columns / n, e = makeXonoticGametypeButton(1, "g_nexball", "Nexball")); - if(e.checked) e0 = NULL; - if(e0) - { - //print("NO CHECK\n"); - e0.setChecked(e0, 1); - } + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Game type:"))); + me.TR(me); + me.TD(me, 9, 3, e = makeXonoticGametypeList()); + me.TR(me); me.TR(me); me.TR(me); - me.mapListBox = makeXonoticMapList(); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "Map list:")); - makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback); me.TR(me); - me.TD(me, me.rows - 7, 3, me.mapListBox); - me.gotoRC(me, me.rows - 3, 0); - me.TDempty(me, 0.5); - me.TD(me, 1, 1, e = makeXonoticButton("All", '0 0 0')); - e.onClick = MapList_All; - e.onClickEntity = me.mapListBox; - me.TD(me, 1, 1, e = makeXonoticButton("None", '0 0 0')); - e.onClick = MapList_None; - e.onClickEntity = me.mapListBox; - me.TDempty(me, 0.5); - - me.gotoRC(me, 3, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "Match settings:")); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Match settings:"))); me.TR(me); me.sliderTimelimit = makeXonoticSlider(1.0, 60.0, 0.5, "timelimit_override"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderTimelimit, "Time limit:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderTimelimit, _("Time limit:"))); me.TD(me, 1, 2, me.sliderTimelimit); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderTimelimit, "Use map specified default")); + me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderTimelimit, _("Use map specified default"))); me.TR(me); me.sliderFraglimit = makeXonoticSlider(1.0, 2000.0, 5, "fraglimit_override"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderFraglimit, "Point limit:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, me.sliderFraglimit, _("Point limit:"))); me.checkboxFraglimit = e; me.TD(me, 1, 2, me.sliderFraglimit); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderFraglimit, "Use map specified default")); + me.TD(me, 1, 2.8, e = makeXonoticSliderCheckBox(-1, 0, me.sliderFraglimit, _("Use map specified default"))); me.checkboxFraglimitMapinfo = e; me.TR(me); - me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Player slots:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:"))); me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Number of bots:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:"))); me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Bot skill:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Bot skill:"))); setDependent(e, "bot_number", 0, -1); me.TD(me, 1, 2, e = makeXonoticTextSlider("skill")); - e.addValue(e, "Botlike", "0"); - e.addValue(e, "Beginner", "1"); - e.addValue(e, "You will win", "2"); - e.addValue(e, "You can win", "3"); - e.addValue(e, "You might win", "4"); - e.addValue(e, "Advanced", "5"); - e.addValue(e, "Expert", "6"); - e.addValue(e, "Pro", "7"); - e.addValue(e, "Assassin", "8"); - e.addValue(e, "Unhuman", "9"); - e.addValue(e, "Godlike", "10"); + e.addValue(e, _("Botlike"), "0"); + e.addValue(e, _("Beginner"), "1"); + e.addValue(e, _("You will win"), "2"); + e.addValue(e, _("You can win"), "3"); + e.addValue(e, _("You might win"), "4"); + e.addValue(e, _("Advanced"), "5"); + e.addValue(e, _("Expert"), "6"); + e.addValue(e, _("Pro"), "7"); + e.addValue(e, _("Assassin"), "8"); + e.addValue(e, _("Unhuman"), "9"); + e.addValue(e, _("Godlike"), "10"); e.configureXonoticTextSliderValues(e); setDependent(e, "bot_number", 0, -1); me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Bot names:")); - me.TD(me, 1, 0.7, e = makeXonoticInputBox(1, "bot_prefix")); - setDependent(e, "bot_number", 0, -1); - me.TD(me, 1, 0.6, e = makeXonoticTextLabel(0.5, "Shadow")); - setDependent(e, "bot_number", 0, -1); - me.TD(me, 1, 0.7, e = makeXonoticInputBox(1, "bot_suffix")); - setDependent(e, "bot_number", 0, -1); - me.TR(me); - me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Map voting:")); - me.TD(me, 1, 2, e = makeXonoticTextSlider("g_maplist_votable")); - e.addValue(e, "No voting", "0"); - e.addValue(e, "2 choices", "2"); - e.addValue(e, "3 choices", "3"); - e.addValue(e, "4 choices", "4"); - e.addValue(e, "5 choices", "5"); - e.addValue(e, "6 choices", "6"); - e.addValue(e, "7 choices", "7"); - e.addValue(e, "8 choices", "8"); - e.addValue(e, "9 choices", "9"); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(0.5, 0, "sv_vote_simple_majority_factor", "Simple majority wins vcall")); - me.TR(me); - me.TR(me); - me.TDempty(me, 0.5); - me.TD(me, 1, 2, e = makeXonoticButton("Advanced settings...", '0 0 0')); - e.onClick = DialogOpenButton_Click; - e.onClickEntity = main.advancedDialog; - main.advancedDialog.refilterEntity = me.mapListBox; - me.TR(me); - me.TR(me); - me.TD(me, 1, 1, e = makeXonoticButton("Mutators...", '0 0 0')); + me.TD(me, 1, 1, e = makeXonoticButton(_("Mutators..."), '0 0 0')); e.onClick = DialogOpenButton_Click; e.onClickEntity = main.mutatorsDialog; main.mutatorsDialog.refilterEntity = me.mapListBox; me.TD(me, 1, 2, e0 = makeXonoticTextLabel(0, string_null)); e0.textEntity = main.mutatorsDialog; e0.allowCut = 1; + me.TR(me); + me.TDempty(me, 0.5); + me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0')); + e.onClick = DialogOpenButton_Click; + e.onClickEntity = main.advancedDialog; + main.advancedDialog.refilterEntity = me.mapListBox; + + me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); + me.mapListBox = makeXonoticMapList(); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Map list:"))); + makeCallback(e, me.mapListBox, me.mapListBox.refilterCallback); + me.TR(me); + me.TD(me, me.rows - 4, 3, me.mapListBox); + me.gotoRC(me, me.rows - 3, 3.5); + me.TDempty(me, 0.25); + me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select all"), '0 0 0')); + e.onClick = MapList_All; + e.onClickEntity = me.mapListBox; + me.TD(me, 1, 1.125, e = makeXonoticButton(_("Select none"), '0 0 0')); + e.onClick = MapList_None; + e.onClickEntity = me.mapListBox; + me.TDempty(me, 0.25); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("Start Multiplayer!", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Multiplayer!"), '0 0 0')); e.onClick = MapList_LoadMap; e.onClickEntity = me.mapListBox; me.mapListBox.startButton = e; @@ -208,17 +152,17 @@ void XonoticServerCreateTab_gameTypeChangeNotify(entity me) l2 = me.checkboxFraglimitMapinfo; switch(gt) { - case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, l2, "Capture limit:", 1, 20, 1, "capturelimit_override"); break; - case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, "Point limit:", 50, 500, 10, "g_domination_point_limit"); break; - case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, l2, "Point limit:", 200, 1500, 50, "g_keyhunt_point_limit"); break; - case MAPINFO_TYPE_RUNEMATCH: GameType_ConfigureSliders(e, l, l2, "Point limit:", 50, 500, 10, "g_runematch_point_limit"); break; - case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, l2, "Lives:", 3, 50, 1, "g_lms_lives_override"); break; - case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, l2, "Laps:", 1, 25, 1, "g_race_laps_limit"); break; - case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, l2, "Goals:", 1, 50, 1, "g_nexball_goallimit"); break; - case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, l2, "Point limit:", 50, 500, 10, ""); break; - case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, l2, "Point limit:", 50, 500, 10, ""); break; - case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, l2, "Point limit:", 50, 500, 10, ""); break; - default: GameType_ConfigureSliders(e, l, l2, "Frag limit:", 5, 100, 5, "fraglimit_override"); break; + case MAPINFO_TYPE_CTF: GameType_ConfigureSliders(e, l, l2, _("Capture limit:"), 1, 20, 1, "capturelimit_override"); break; + case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, "g_domination_point_limit"); break; + case MAPINFO_TYPE_KEYHUNT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 200, 1500, 50, "g_keyhunt_point_limit"); break; + case MAPINFO_TYPE_RUNEMATCH: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, "g_runematch_point_limit"); break; + case MAPINFO_TYPE_LMS: GameType_ConfigureSliders(e, l, l2, _("Lives:"), 3, 50, 1, "g_lms_lives_override"); break; + case MAPINFO_TYPE_RACE: GameType_ConfigureSliders(e, l, l2, _("Laps:"), 1, 25, 1, "g_race_laps_limit"); break; + case MAPINFO_TYPE_NEXBALL: GameType_ConfigureSliders(e, l, l2, _("Goals:"), 1, 50, 1, "g_nexball_goallimit"); break; + case MAPINFO_TYPE_ASSAULT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; + case MAPINFO_TYPE_ONSLAUGHT: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; + case MAPINFO_TYPE_CTS: GameType_ConfigureSliders(e, l, l2, _("Point limit:"), 50, 500, 10, ""); break; + default: GameType_ConfigureSliders(e, l, l2, _("Frag limit:"), 5, 100, 5, "fraglimit_override"); break; } me.mapListBox.refilter(me.mapListBox); } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c b/qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c index 87f82a43d1..226f346b64 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_advanced.c @@ -3,10 +3,10 @@ CLASS(XonoticAdvancedDialog) EXTENDS(XonoticDialog) METHOD(XonoticAdvancedDialog, fill, void(entity)) METHOD(XonoticAdvancedDialog, showNotify, void(entity)) METHOD(XonoticAdvancedDialog, close, void(entity)) - ATTRIB(XonoticAdvancedDialog, title, string, "Advanced server settings") + ATTRIB(XonoticAdvancedDialog, title, string, _("Advanced server settings")) ATTRIB(XonoticAdvancedDialog, color, vector, SKINCOLOR_DIALOG_ADVANCED) ATTRIB(XonoticAdvancedDialog, intendedWidth, float, 0.5) - ATTRIB(XonoticAdvancedDialog, rows, float, 14) + ATTRIB(XonoticAdvancedDialog, rows, float, 17) ATTRIB(XonoticAdvancedDialog, columns, float, 3) ATTRIB(XonoticAdvancedDialog, refilterEntity, entity, NULL) ENDCLASS(XonoticAdvancedDialog) @@ -22,48 +22,64 @@ void XonoticAdvancedDialog_fill(entity me) { entity e; me.TR(me); - me.TD(me, 1, 3, makeXonoticTextLabel(0, "Game settings:")); + me.TD(me, 1, 3, makeXonoticTextLabel(0, _("Game settings:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "sv_spectate", "Allow spectating")); + me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "sv_spectate", _("Allow spectating"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Spawn shield:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Spawn shield:"))); me.TD(me, 1, 1.6, e = makeXonoticSlider(0, 15, 0.5, "g_spawnshieldtime")); me.TR(me); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Game speed:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Game speed:"))); me.TD(me, 1, 1.6, e = makeXonoticSlider(0.5, 2.0, 0.1, "slowmo")); me.TR(me); me.TR(me); - me.TD(me, 1, 3, makeXonoticTextLabel(0, "Teamplay settings:")); + me.TD(me, 1, 3, makeXonoticTextLabel(0, _("Teamplay settings:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Friendly fire scale:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Friendly fire scale:"))); me.TD(me, 1, 1.6, e = makeXonoticSlider(0, 1.0, 0.05, "g_friendlyfire")); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 2.6, e = makeXonoticCheckBox(0, "g_friendlyfire_virtual", "Virtual friendly fire (effect only)")); + me.TD(me, 1, 2.6, e = makeXonoticCheckBox(0, "g_friendlyfire_virtual", _("Virtual friendly fire (effect only)"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Friendly fire penalty:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Friendly fire penalty:"))); me.TD(me, 1, 1.6, e = makeXonoticSlider(0, 1.0, 0.05, "g_mirrordamage")); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 2.6, e = makeXonoticCheckBox(0, "g_mirrordamage_virtual", "Virtual penalty (effect only)")); + me.TD(me, 1, 2.6, e = makeXonoticCheckBox(0, "g_mirrordamage_virtual", _("Virtual penalty (effect only)"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, "Teams:")); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Teams:"))); me.TD(me, 1, 1.6, e = makeXonoticTextSlider("g_tdm_teams_override g_domination_teams_override g_keyhunt_teams_override")); e.addValue(e, "Default", "0"); e.addValue(e, "2 teams", "2"); e.addValue(e, "3 teams", "3"); e.addValue(e, "4 teams", "4"); e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TR(me); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Map voting:"))); + me.TD(me, 1, 2, e = makeXonoticTextSlider("g_maplist_votable")); + e.addValue(e, _("No voting"), "0"); + e.addValue(e, _("2 choices"), "2"); + e.addValue(e, _("3 choices"), "3"); + e.addValue(e, _("4 choices"), "4"); + e.addValue(e, _("5 choices"), "5"); + e.addValue(e, _("6 choices"), "6"); + e.addValue(e, _("7 choices"), "7"); + e.addValue(e, _("8 choices"), "8"); + e.addValue(e, _("9 choices"), "9"); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(0.5, 0, "sv_vote_simple_majority_factor", _("Simple majority wins vcall"))); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c b/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c index f3f620d731..677161b637 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_mapinfo.c @@ -2,10 +2,10 @@ CLASS(XonoticMapInfoDialog) EXTENDS(XonoticDialog) METHOD(XonoticMapInfoDialog, fill, void(entity)) METHOD(XonoticMapInfoDialog, loadMapInfo, void(entity, float, entity)) - ATTRIB(XonoticMapInfoDialog, title, string, "Map Information") + ATTRIB(XonoticMapInfoDialog, title, string, _("Map Information")) ATTRIB(XonoticMapInfoDialog, color, vector, SKINCOLOR_DIALOG_MAPINFO) - ATTRIB(XonoticMapInfoDialog, intendedWidth, float, 0.85) - ATTRIB(XonoticMapInfoDialog, rows, float, 9) + ATTRIB(XonoticMapInfoDialog, intendedWidth, float, 1.0) + ATTRIB(XonoticMapInfoDialog, rows, float, 12) ATTRIB(XonoticMapInfoDialog, columns, float, 10) ATTRIB(XonoticMapInfoDialog, previewImage, entity, NULL) @@ -14,22 +14,7 @@ CLASS(XonoticMapInfoDialog) EXTENDS(XonoticDialog) ATTRIB(XonoticMapInfoDialog, descriptionLabel, entity, NULL) ATTRIB(XonoticMapInfoDialog, featuresLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeDeathmatchLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeTDMLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeLMSLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeArenaLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeRuneLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeDominationLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeKeyHuntLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeCTFLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeCALabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeAssaultLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeOnslaughtLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeRaceLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeCTSLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeNexballLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeFreezetagLabel, entity, NULL) - ATTRIB(XonoticMapInfoDialog, typeKeepawayLabel, entity, NULL) + ATTRIBARRAY(XonoticMapInfoDialog, typeLabels, entity, 24) ATTRIB(XonoticMapInfoDialog, currentMapIndex, float, 0) ATTRIB(XonoticMapInfoDialog, currentMapBSPName, string, string_null) @@ -61,7 +46,7 @@ void XonoticMapInfoDialog_loadMapInfo(entity me, float i, entity mlb) me.currentMapTitle = strzone(MapInfo_Map_title); me.currentMapAuthor = strzone(MapInfo_Map_author); me.currentMapDescription = strzone(MapInfo_Map_description); - me.currentMapFeaturesText = strzone((MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS) ? "Full item placement" : "MinstaGib only"); + me.currentMapFeaturesText = strzone((MapInfo_Map_supportedFeatures & MAPINFO_FEATURE_WEAPONS) ? _("Full item placement") : _("MinstaGib only")); me.currentMapPreviewImage = strzone(strcat("/maps/", MapInfo_Map_bspname)); me.frame.setText(me.frame, me.currentMapBSPName); @@ -71,89 +56,57 @@ void XonoticMapInfoDialog_loadMapInfo(entity me, float i, entity mlb) me.featuresLabel.setText(me.featuresLabel, me.currentMapFeaturesText); me.previewImage.src = me.currentMapPreviewImage; - me.typeDeathmatchLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DEATHMATCH); - me.typeTDMLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_TEAM_DEATHMATCH); - me.typeLMSLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_LMS); - me.typeArenaLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ARENA); - me.typeDominationLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_DOMINATION); - me.typeRuneLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RUNEMATCH); - me.typeKeyHuntLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_KEYHUNT); - me.typeCTFLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_CTF); - me.typeCALabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_CA); - me.typeAssaultLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ASSAULT); - me.typeOnslaughtLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_ONSLAUGHT); - me.typeRaceLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_RACE); - me.typeCTSLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_CTS); - me.typeNexballLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_NEXBALL); - me.typeFreezetagLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_FREEZETAG); - me.typeKeepawayLabel.disabled = !(MapInfo_Map_supportedGametypes & MAPINFO_TYPE_KEEPAWAY); + for(i = 0; i < GameType_GetCount(); ++i) + { + entity e; + e = me.(typeLabels[i]); + e.disabled = !(MapInfo_Map_supportedGametypes & GameType_GetID(i)); + } MapInfo_ClearTemps(); } void XonoticMapInfoDialog_fill(entity me) { entity e; - float w, wgt; + float w, wgt, i, n; me.TR(me); me.TDempty(me, 0.2); me.TD(me, me.rows - 2, 3, e = makeXonoticImage(string_null, 4.0/3.0)); me.previewImage = e; me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); w = me.columns - me.currentColumn; - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Title:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Title:"))); me.TD(me, 1, w-1, e = makeXonoticTextLabel(0, "")); e.colorL = SKINCOLOR_MAPLIST_TITLE; e.allowCut = 1; me.titleLabel = e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Author:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Author:"))); me.TD(me, 1, w-1, e = makeXonoticTextLabel(0, "")); e.colorL = SKINCOLOR_MAPLIST_AUTHOR; e.allowCut = 1; me.authorLabel = e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Features:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Features:"))); me.TD(me, 1, w-1, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.featuresLabel = e; me.TR(me); - me.TD(me, 1, w, e = makeXonoticTextLabel(0, "Game types:")); - me.TR(me); wgt = (w-0.2)/5; - me.TDempty(me, 0.2); - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "DM")); - me.typeDeathmatchLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "TDM")); - me.typeTDMLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "LMS")); - me.typeLMSLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Arena")); - me.typeArenaLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Domination")); - me.typeDominationLabel = e; - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Key Hunt")); - me.typeKeyHuntLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "CTF")); - me.typeCTFLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "CA")); - me.typeCALabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Assault")); - me.typeAssaultLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Onslaught")); - me.typeOnslaughtLabel = e; - me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Race")); - me.typeRaceLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "CTS")); - me.typeCTSLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Nexball")); - me.typeNexballLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Freezetag")); - me.typeFreezetagLabel = e; - me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, "Keepaway")); - me.typeKeepawayLabel = e; + me.TD(me, 1, w, e = makeXonoticTextLabel(0, _("Game types:"))); + + + n = ceil(GameType_GetCount() / (me.rows - 6)); + wgt = (w - 0.2) / n; + for(i = 0; i < GameType_GetCount(); ++i) + { + if(mod(i, n) == 0) + { + me.TR(me); + me.TDempty(me, 0.2); + } + me.TD(me, 1, wgt, e = makeXonoticTextLabel(0, GameType_GetName(i))); + me.(typeLabels[i]) = e; + } me.gotoRC(me, me.rows - 2, 0); me.TD(me, 1, me.columns, e = makeXonoticTextLabel(0.5, "")); @@ -163,10 +116,10 @@ void XonoticMapInfoDialog_fill(entity me) me.gotoRC(me, me.rows - 1, 0); me.TDempty(me, 0.5); - me.TD(me, 1, me.columns - 5.5, e = makeXonoticButton("Close", '0 0 0')); + me.TD(me, 1, me.columns - 5.5, e = makeXonoticButton(_("Close"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; - me.TD(me, 1, me.columns - 5.5, me.startButton = e = makeXonoticButton("Play", '0 0 0')); + me.TD(me, 1, me.columns - 5.5, me.startButton = e = makeXonoticButton(_("Play"), '0 0 0')); me.startButton.onClick = MapList_LoadMap; me.startButton.onClickEntity = NULL; // filled later } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c b/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c index 4390fb910e..640c28a348 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.c @@ -4,7 +4,7 @@ CLASS(XonoticMutatorsDialog) EXTENDS(XonoticDialog) METHOD(XonoticMutatorsDialog, fill, void(entity)) METHOD(XonoticMutatorsDialog, showNotify, void(entity)) METHOD(XonoticMutatorsDialog, close, void(entity)) - ATTRIB(XonoticMutatorsDialog, title, string, "Mutators") + ATTRIB(XonoticMutatorsDialog, title, string, _("Mutators")) ATTRIB(XonoticMutatorsDialog, color, vector, SKINCOLOR_DIALOG_MUTATORS) ATTRIB(XonoticMutatorsDialog, intendedWidth, float, 0.9) ATTRIB(XonoticMutatorsDialog, rows, float, 17) @@ -30,9 +30,9 @@ string WeaponArenaString() if(s == "0") return ""; if(s == "all") - return "All Weapons Arena"; + return _("All Weapons Arena"); if(s == "most") - return "Most Weapons Arena"; + return _("Most Weapons Arena"); if(s == weaponarenastring_cvar) return weaponarenastring; if(weaponarenastring) @@ -53,7 +53,7 @@ string WeaponArenaString() s = strcat(s, " & ", e.message); } } - s = strcat(substring(s, 3, strlen(s) - 3), " Arena"); + s = sprintf(_("%s Arena"), substring(s, 3, strlen(s) - 3)); weaponarenastring = strzone(s); @@ -65,37 +65,37 @@ string XonoticMutatorsDialog_toString(entity me) string s; s = ""; if(cvar("g_dodging")) - s = strcat(s, ", Dodging"); + s = strcat(s, ", ", _("Dodging")); if(cvar("g_minstagib")) - s = strcat(s, ", MinstaGib"); + s = strcat(s, ", ", _("MinstaGib")); if(cvar("g_nix")) - s = strcat(s, ", NIX"); + s = strcat(s, ", ", _("NIX")); if(cvar("g_rocket_flying")) - s = strcat(s, ", Rocket Flying"); + s = strcat(s, ", ", _("Rocket Flying")); if(cvar_string("g_weaponarena") != "0") s = strcat(s, ", ", WeaponArenaString()); if(cvar("g_start_weapon_laser") == 0) - s = strcat(s, ", No start weapons"); + s = strcat(s, ", ", _("No start weapons")); if(cvar("sv_gravity") < 800) - s = strcat(s, ", Low gravity"); + s = strcat(s, ", ", _("Low gravity")); if(cvar("g_cloaked")) - s = strcat(s, ", Cloaked"); + s = strcat(s, ", ", _("Cloaked")); if(cvar("g_grappling_hook")) - s = strcat(s, ", Hook"); + s = strcat(s, ", ", _("Hook")); if(cvar("g_midair")) - s = strcat(s, ", Midair"); + s = strcat(s, ", ", _("Midair")); if(cvar("g_vampire")) - s = strcat(s, ", Vampire"); + s = strcat(s, ", ", _("Vampire")); if(cvar("g_pinata")) - s = strcat(s, ", Pinata"); + s = strcat(s, ", ", _("Piñata")); if(cvar("g_weapon_stay")) - s = strcat(s, ", Weapons stay"); + s = strcat(s, ", ", _("Weapons stay")); if(cvar("g_bloodloss") > 0) - s = strcat(s, ", Bloodloss"); + s = strcat(s, ", ", _("Blood loss")); if(cvar("g_jetpack")) - s = strcat(s, ", Jet pack"); + s = strcat(s, ", ", _("Jet pack")); if(s == "") - return "None"; + return ZCTX(_("MUT^None")); else return substring(s, 2, strlen(s) - 2); } @@ -161,23 +161,23 @@ void XonoticMutatorsDialog_fill(entity me) float i, j; string str, hstr; me.TR(me); - me.TD(me, 1, 2, makeXonoticTextLabel(0, "Gameplay mutators:")); + me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Gameplay mutators:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_dodging", "Dodging")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_dodging", _("Dodging"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_cloaked", "Cloaked")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_cloaked", _("Cloaked"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_midair", "Midair")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_midair", _("Midair"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_vampire", "Vampire")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_vampire", _("Vampire"))); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticSlider(10, 50, 1, "g_bloodloss"); - me.TD(me, 1, 2, e = makeXonoticSliderCheckBox(0, 1, s, "Blood loss")); + me.TD(me, 1, 2, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss"))); me.TR(me); me.TDempty(me, 0.4); me.TD(me, 1, 1.8, s); @@ -186,36 +186,36 @@ void XonoticMutatorsDialog_fill(entity me) s = makeXonoticSlider(80, 400, 8, "sv_gravity"); s.valueDigits = 0; s.valueDisplayMultiplier = 0.125; // show gravity in percent - me.TD(me, 1, 2, e = makeXonoticSliderCheckBox(800, 1, s, "Low gravity")); + me.TD(me, 1, 2, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity"))); e.savedValue = 200; // good on silvercity me.TR(me); me.TDempty(me, 0.4); me.TD(me, 1, 1.8, s); me.TR(me); me.TR(me); - me.TD(me, 1, 2, makeXonoticTextLabel(0, "Weapon & item mutators:")); + me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon & item mutators:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_grappling_hook", "Grappling hook")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_grappling_hook", _("Grappling hook"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_jetpack", "Jet pack")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_jetpack", _("Jet pack"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_rocket_flying", "Rocket Flying")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_rocket_flying", _("Rocket Flying"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_pinata", "Pinata")); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "g_pinata", _("Piñata"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(2, 0, "g_weapon_stay", "Weapons stay")); + me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(2, 0, "g_weapon_stay", _("Weapons stay"))); me.TR(me); me.gotoRC(me, 0, 2); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Weapon arenas:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Weapon arenas:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, "Regular (no arena)")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, _("Regular (no arena)"))); for(i = WEP_FIRST, j = 0; i <= WEP_LAST; ++i) { w = get_weaponinfo(i); @@ -236,7 +236,7 @@ void XonoticMutatorsDialog_fill(entity me) } me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "menu_weaponarena_with_laser", "with laser")); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "menu_weaponarena_with_laser", _("with laser"))); // hook the draw function to gray it out e.draw_weaponarena = e.draw; e.draw = preDrawLaserWeaponArenaLaserButton; @@ -244,29 +244,29 @@ void XonoticMutatorsDialog_fill(entity me) e.saveCvars_weaponarena = e.saveCvars; e.saveCvars = saveCvarsLaserWeaponArenaLaserButton; me.TR(me); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Special arenas:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_minstagib", string_null, "MinstaGib")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_minstagib", string_null, _("MinstaGib"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_nix", string_null, "NIX")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_nix", string_null, _("NIX"))); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "g_nix_with_laser", "with laser")); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "g_nix_with_laser", _("with laser"))); setDependent(e, "g_nix", 1, 1); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_weaponarena", "most", "Most weapons")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_weaponarena", "most", _("Most weapons"))); e.cvarOffValue = "0"; me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_start_weapon_laser", "0", "No start weapons")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_start_weapon_laser", "0", _("No start weapons"))); e.cvarOffValue = "-1"; makeMulti(e, "g_start_weapon_shotgun g_start_weapon_uzi g_start_weapon_grenadelauncher g_start_weapon_minelayer g_start_weapon_electro g_start_weapon_crylink g_start_weapon_nex g_start_weapon_hagar g_start_weapon_rocketlauncher g_start_weapon_sniperrifle g_start_weapon_hlac g_start_weapon_seeker g_start_weapon_minstanex g_start_weapon_hook g_start_weapon_porto g_start_weapon_tuba g_start_weapon_minelayer"); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_demo.c b/qcsrc/menu/xonotic/dialog_multiplayer_demo.c index ec57b7fca8..85171e0940 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_demo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_demo.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticDemoBrowserTab) EXTENDS(XonoticTab) METHOD(XonoticDemoBrowserTab, fill, void(entity)) - ATTRIB(XonoticDemoBrowserTab, title, string, "Demo") + ATTRIB(XonoticDemoBrowserTab, title, string, _("Demo")) ATTRIB(XonoticDemoBrowserTab, intendedWidth, float, 0.9) ATTRIB(XonoticDemoBrowserTab, rows, float, 22) ATTRIB(XonoticDemoBrowserTab, columns, float, 6.5) @@ -25,12 +25,12 @@ void XonoticDemoBrowserTab_fill(entity me) entity dlist; me.TR(me); - me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", "Record demos while playing")); + me.TD(me, 1, me.columns, e = makeXonoticCheckBox(0, "cl_autodemo", _("Record demos while playing"))); me.TR(me); dlist = makeXonoticDemoList(); me.TR(me); - me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, "Filter:")); - me.TD(me, 1, 0.5, btn = makeXonoticButton("Clear", '0 0 0')); + me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Filter:"))); + me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0')); btn.onClick = InputBox_Clear_Click; me.TD(me, 1, me.columns - 1, e = makeXonoticInputBox(0, string_null)); e.onChange = DemoList_Filter_Change; @@ -40,10 +40,10 @@ void XonoticDemoBrowserTab_fill(entity me) me.TR(me); me.TD(me, me.rows - 4, me.columns, dlist); 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(_("Timedemo"), '0 0 0')); e.onClick = TimeDemo_Click; e.onClickEntity = dlist; - me.TD(me, 1, me.columns / 2, e = makeXonoticButton("Play", '0 0 0')); + me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Play"), '0 0 0')); e.onClick = StartDemo_Click; e.onClickEntity = dlist; } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_join.c b/qcsrc/menu/xonotic/dialog_multiplayer_join.c index 799d33455f..fe9f860c31 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_join.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_join.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticServerListTab) EXTENDS(XonoticTab) METHOD(XonoticServerListTab, fill, void(entity)) - ATTRIB(XonoticServerListTab, title, string, "Join") + ATTRIB(XonoticServerListTab, title, string, _("Join")) ATTRIB(XonoticServerListTab, intendedWidth, float, 0.9) ATTRIB(XonoticServerListTab, rows, float, 22) ATTRIB(XonoticServerListTab, columns, float, 6.5) @@ -25,23 +25,23 @@ void XonoticServerListTab_fill(entity me) slist = makeXonoticServerList(); me.TR(me); - me.TD(me, 1, 0.4, e = makeXonoticTextLabel(0, "Filter:")); - me.TD(me, 1, 0.6, btn = makeXonoticButton("Clear", '0 0 0')); + me.TD(me, 1, 0.4, e = makeXonoticTextLabel(0, _("Filter:"))); + me.TD(me, 1, 0.6, btn = makeXonoticButton(_("Clear"), '0 0 0')); btn.onClick = InputBox_Clear_Click; me.TD(me, 1, me.columns - 0.6 * 4 - 0.4, e = makeXonoticInputBox(0, string_null)); e.onChange = ServerList_Filter_Change; e.onChangeEntity = slist; btn.onClickEntity = e; slist.controlledTextbox = e; - me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", "Empty")); + me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty")))); slist.filterShowEmpty = e.checked; e.onClickEntity = slist; e.onClick = ServerList_ShowEmpty_Click; - me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showfull", "Full")); + me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showfull", ZCTX(_("SRVS^Full")))); 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(0, "net_slist_pause", _("Pause"))); me.TR(me); me.TD(me, 1, 1, slist.sortButton1 = makeXonoticButton(string_null, '0 0 0')); @@ -53,7 +53,7 @@ void XonoticServerListTab_fill(entity me) me.TD(me, me.rows - 4, me.columns, slist); me.gotoRC(me, me.rows - 2, 0); - me.TD(me, 1, 0.6, e = makeXonoticTextLabel(0, "Address:")); + me.TD(me, 1, 0.6, e = makeXonoticTextLabel(0, _("Address:"))); me.TD(me, 1, 2.9, e = makeXonoticInputBox(0, string_null)); e.onEnter = ServerList_Connect_Click; e.onEnterEntity = slist; @@ -62,12 +62,12 @@ void XonoticServerListTab_fill(entity me) 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(_("Info..."), '0 0 0')); e.onClick = ServerList_Info_Click; e.onClickEntity = slist; slist.infoButton = e; me.TR(me); - me.TD(me, 1, me.columns, e = makeXonoticButton("Join!", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("Join!"), '0 0 0')); e.onClick = ServerList_Connect_Click; e.onClickEntity = slist; slist.connectButton = e; diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c b/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c index 5f6262cf45..3ae9f08381 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_join_serverinfo.c @@ -2,9 +2,9 @@ CLASS(XonoticServerInfoDialog) EXTENDS(XonoticDialog) METHOD(XonoticServerInfoDialog, fill, void(entity)) METHOD(XonoticServerInfoDialog, loadServerInfo, void(entity, float)) - ATTRIB(XonoticServerInfoDialog, title, string, "Server Information") + ATTRIB(XonoticServerInfoDialog, title, string, _("Server Information")) ATTRIB(XonoticServerInfoDialog, color, vector, SKINCOLOR_DIALOG_SERVERINFO) - ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.68) + ATTRIB(XonoticServerInfoDialog, intendedWidth, float, 0.8) ATTRIB(XonoticServerInfoDialog, rows, float, 15) ATTRIB(XonoticServerInfoDialog, columns, float, 12) @@ -56,8 +56,8 @@ void Join_Click(entity btn, entity me); #ifdef IMPLEMENTATION void XonoticServerInfoDialog_loadServerInfo(entity me, float i) { - float m, pure, j; - string s, typestr, versionstr, numh, maxp, k, v; + float m, pure, j, numh, maxp; + string s, typestr, versionstr, k, v; if(me.currentServerName) strunzone(me.currentServerName); @@ -112,8 +112,8 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) me.cnameLabel.setText(me.cnameLabel, me.currentServerCName); pure = -1; - typestr = "N/A"; - versionstr = "N/A"; + typestr = _("N/A"); + versionstr = _("N/A"); SLIST_FIELD_QCSTATUS = gethostcacheindexforkey("qcstatus"); s = gethostcachestring(SLIST_FIELD_QCSTATUS, i); @@ -145,10 +145,10 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) me.rawPlayerList.setPlayerList(me.rawPlayerList, me.currentServerPlayers); SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey("numhumans"); - numh = ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)); + numh = gethostcachenumber(SLIST_FIELD_NUMHUMANS, i); SLIST_FIELD_MAXPLAYERS = gethostcacheindexforkey("maxplayers"); - maxp = ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i)); - me.currentServerNumPlayers = strzone(strcat(numh,"/",maxp)); + maxp = gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i); + me.currentServerNumPlayers = strzone(sprintf(_("%d/%d"), numh, maxp)); me.numPlayersLabel.setText(me.numPlayersLabel, me.currentServerNumPlayers); SLIST_FIELD_NUMBOTS = gethostcacheindexforkey("numbots"); @@ -163,7 +163,7 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) me.currentServerVersion = strzone(versionstr); me.versionLabel.setText(me.versionLabel, me.currentServerVersion); - me.currentServerPure = ((pure < 0) ? "N/A" : (pure == 0) ? "Official settings" : sprintf("%d modified settings", pure)); + me.currentServerPure = ((pure < 0) ? "N/A" : (pure == 0) ? _("Official settings") : sprintf(_("%d modified settings"), pure)); me.currentServerPure = strzone(me.currentServerPure); me.pureLabel.setText(me.pureLabel, me.currentServerPure); @@ -174,13 +174,13 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) s = crypto_getidfp(me.currentServerCName); if not(s) - s = "N/A"; + s = _("N/A"); me.currentServerID = strzone(s); me.idLabel.setText(me.idLabel, me.currentServerID); s = crypto_getkeyfp(me.currentServerCName); if not(s) - s = "N/A"; + s = _("N/A"); me.currentServerKey = strzone(s); me.keyLabel.setText(me.keyLabel, me.currentServerKey); @@ -188,35 +188,35 @@ void XonoticServerInfoDialog_loadServerInfo(entity me, float i) if(s == "") { if(cvar("crypto_aeslevel") >= 3) - me.currentServerEncrypt = "N/A (can't connect)"; + me.currentServerEncrypt = _("N/A (can't connect)"); else - me.currentServerEncrypt = "N/A"; + me.currentServerEncrypt = _("N/A"); } else switch(stof(substring(s, 0, 1))) { case 0: if(cvar("crypto_aeslevel") >= 3) - me.currentServerEncrypt = "not supported (can't connect)"; + me.currentServerEncrypt = _("not supported (can't connect)"); else - me.currentServerEncrypt = "not supported (won't encrypt)"; + me.currentServerEncrypt = _("not supported (won't encrypt)"); break; case 1: if(cvar("crypto_aeslevel") >= 2) - me.currentServerEncrypt = "supported (will encrypt)"; + me.currentServerEncrypt = _("supported (will encrypt)"); else - me.currentServerEncrypt = "supported (won't encrypt)"; + me.currentServerEncrypt = _("supported (won't encrypt)"); break; case 2: if(cvar("crypto_aeslevel") >= 1) - me.currentServerEncrypt = "requested (will encrypt)"; + me.currentServerEncrypt = _("requested (will encrypt)"); else - me.currentServerEncrypt = "requested (won't encrypt)"; + me.currentServerEncrypt = _("requested (won't encrypt)"); break; case 3: if(cvar("crypto_aeslevel") <= 0) - me.currentServerEncrypt = "required (can't connect)"; + me.currentServerEncrypt = _("required (can't connect)"); else - me.currentServerEncrypt = "required (will encrypt)"; + me.currentServerEncrypt = _("required (will encrypt)"); break; } me.encryptLabel.setText(me.encryptLabel, me.currentServerEncrypt); @@ -237,7 +237,7 @@ void XonoticServerInfoDialog_fill(entity me) me.cnameLabel = e; me.TR(me); - me.TD(me, 1, 5.5, e = makeXonoticTextLabel(0, "Players:")); + me.TD(me, 1, 5.5, e = makeXonoticTextLabel(0, _("Players:"))); me.TR(me); me.TD(me, me.rows - 4, 6, e = makeXonoticPlayerList()); me.rawPlayerList = e; @@ -245,70 +245,70 @@ void XonoticServerInfoDialog_fill(entity me) me.gotoRC(me, 1, 6.25); me.setFirstColumn(me, me.currentColumn); me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Type:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Type:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.typeLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Map:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Map:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.mapLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Gameplay:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Gameplay:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.pureLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Players:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Players:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.numPlayersLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Bots:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Bots:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.numBotsLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Mod:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Mod:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.modLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Version:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Version:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.versionLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Ping:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Ping:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.pingLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "CA:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("CA:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.keyLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Key:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Key:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.idLabel = e; me.TR(me); - me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, "Encryption:")); + me.TD(me, 1, 1.75, e = makeXonoticTextLabel(0, _("Encryption:"))); me.TD(me, 1, 4.0, e = makeXonoticTextLabel(0, "")); e.allowCut = 1; me.encryptLabel = e; me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns - 6, e = makeXonoticButton("Close", '0 0 0')); + me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Close"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; - me.TD(me, 1, me.columns - 6, e = makeXonoticButton("Join!", '0 0 0')); + me.TD(me, 1, me.columns - 6, e = makeXonoticButton(_("Join!"), '0 0 0')); e.onClick = Join_Click; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c index 9365544e96..fe0e757496 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup.c @@ -2,7 +2,7 @@ CLASS(XonoticPlayerSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticPlayerSettingsTab, fill, void(entity)) METHOD(XonoticPlayerSettingsTab, draw, void(entity)) - ATTRIB(XonoticPlayerSettingsTab, title, string, "Player Setup") + ATTRIB(XonoticPlayerSettingsTab, title, string, _("Player Setup")) ATTRIB(XonoticPlayerSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticPlayerSettingsTab, rows, float, 22) ATTRIB(XonoticPlayerSettingsTab, columns, float, 6.5) @@ -37,7 +37,7 @@ void XonoticPlayerSettingsTab_fill(entity me) float i, r, m, n; me.TR(me); - me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, "Name:")); + me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, _("Name:"))); me.playerNameLabelAlpha = me.playerNameLabel.alpha; me.TD(me, 1, 2.5, label = makeXonoticTextLabel(0, string_null)); label.allowCut = 1; @@ -47,6 +47,7 @@ void XonoticPlayerSettingsTab_fill(entity me) me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name")); box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved box.maxLength = -127; // negative means encoded length in bytes + box.saveImmediately = 1; label.textEntity = box; me.TR(me); me.TD(me, 5, 1, e = makeXonoticColorpicker(box)); @@ -59,7 +60,7 @@ void XonoticPlayerSettingsTab_fill(entity me) me.TR(me); me.gotoRC(me, 8, 0.0); pms = makeXonoticPlayerModelSelector(); - me.TD(me, 1, 0.6, e = makeXonoticTextLabel(1, "Model:")); + me.TD(me, 1, 0.6, e = makeXonoticTextLabel(1, _("Model:"))); me.TD(me, 1, 0.3, e = makeXonoticButton("<<", '0 0 0')); e.onClick = PlayerModelSelector_Prev_Click; e.onClickEntity = pms; @@ -84,30 +85,30 @@ void XonoticPlayerSettingsTab_fill(entity me) } me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Field of view:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:"))); me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 1, "fov")); me.TR(me); sl = makeXonoticSlider(0.45, 0.75, 0.01, "cl_bobcycle"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, "View bobbing:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, _("View bobbing:"))); makeMulti(sl, "cl_bob2cycle"); me.TD(me, 1, 2, sl); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Zoom factor:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Zoom factor:"))); me.TD(me, 1, 2, e = makeXonoticSlider(2, 16, 0.5, "cl_zoomfactor")); me.TR(me); sl = makeXonoticSlider(1, 8, 0.5, "cl_zoomspeed"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1, 1, sl, "Zoom speed:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1, 1, sl, _("Zoom speed:"))); me.TD(me, 1, 2, sl); me.TR(me); - me.TD(me, 1, 1.5, e = makeXonoticButton("Weapon settings...", '0 0 0')); + me.TD(me, 1, 1.5, e = makeXonoticButton(_("Weapon settings..."), '0 0 0')); e.onClick = DialogOpenButton_Click; e.onClickEntity = main.weaponsDialog; me.TD(me, 1, 1.5, e0 = makeXonoticTextLabel(0, string_null)); e0.textEntity = main.weaponsDialog; e0.allowCut = 1; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair:")); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", "Per weapon")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair:"))); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "crosshair_per_weapon", _("Per weapon"))); me.TR(me); me.TDempty(me, 0.2); for(i = 1; i <= 10; ++i) { @@ -126,71 +127,71 @@ void XonoticPlayerSettingsTab_fill(entity me) } me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair size:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair size:"))); me.TD(me, 1, 1.8, e = makeXonoticSlider(0.10, 1.5, 0.05, "crosshair_size")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair alpha:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair alpha:"))); me.TD(me, 1, 1.8, e = makeXonoticSlider(0, 1, 0.1, "crosshair_alpha")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Crosshair color:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Crosshair color:"))); me.TD(me, 2, 1.8, e = makeXonoticColorpickerString("crosshair_color", "crosshair_color")); setDependent(e, "crosshair_color_per_weapon", 0, 0); me.TR(me); me.TDempty(me, 0.3); - me.TD(me, 1, 0.7, e = makeXonoticCheckBox(0, "crosshair_color_per_weapon", "Per weapon")); + me.TD(me, 1, 0.7, e = makeXonoticCheckBox(0, "crosshair_color_per_weapon", _("Per weapon"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", "Enable center dot")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "crosshair_dot", _("Enable center dot"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, "Size:")); + me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Size:"))); me.TD(me, 1, 0.9, e = makeXonoticSlider(0.2, 2, 0.1, "crosshair_dot_size")); setDependent(e, "crosshair_dot", 1, 1); - me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, "Alpha:")); + me.TD(me, 1, 0.5, e = makeXonoticTextLabel(0, _("Alpha:"))); me.TD(me, 1, 0.9, e = makeXonoticSlider(0.10, 1, 0.1, "crosshair_dot_alpha")); setDependent(e, "crosshair_dot", 1, 1); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Hit test:")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "0", "None")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1", "TrueAim")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1.25", "Enemies")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit test:"))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "0", ZCTX(_("HTST^None")))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1", _("TrueAim"))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(5, "crosshair_hittest", "1.25", _("Enemies"))); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 2.2, e = makeXonoticButton("Waypoints setup...", '0 0 0')); + me.TD(me, 1, 2.2, e = makeXonoticButton(_("Waypoints setup..."), '0 0 0')); e.onClick = DialogOpenButton_Click; e.onClickEntity = main.waypointDialog; me.TDempty(me, 0.5); me.TR(me); me.TDempty(me, 0.4); - me.TD(me, 1, 2.2, e = makeXonoticButton("Enter HUD editor", '0 0 0')); + me.TD(me, 1, 2.2, e = makeXonoticButton(_("Enter HUD editor"), '0 0 0')); e.onClick = HUDSetup_Join_Click; e.onClickEntity = me; me.TDempty(me, 0.5); me.TR(me); me.TR(me); #ifdef ALLOW_FORCEMODELS - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Force models:")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, "None")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, "Custom")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, "All")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Force models:"))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, string_null, string_null, ZCTX(_("MDL^None"))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodelsfromxonotic", string_null, ZCTX(_("MDL^Custom")))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(6, "cl_forceplayermodels", string_null, ZCTX(_("MDL^All")))); #endif - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", "Disable gore effects")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects"))); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Gibs:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs")); - e.addValue(e, "None", "1"); - e.addValue(e, "Few", "0.75"); - e.addValue(e, "Many", "0.5"); - e.addValue(e, "Lots", "0"); + e.addValue(e, ZCTX(_("GIBS^None")), "1"); + e.addValue(e, ZCTX(_("GIBS^Few")), "0.75"); + e.addValue(e, ZCTX(_("GIBS^Many")), "0.5"); + e.addValue(e, ZCTX(_("GIBS^Lots")), "0"); e.configureXonoticTextSliderValues(e); setDependent(e, "cl_gentle", 0, 0); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Damage splash:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Damage splash:"))); me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.05, "hud_damage")); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, makeXonoticCommandButton("Apply immediately", '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_shownames;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY)); + me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "color -1 -1;name \"$_cl_name\";cl_cmd sendcvar cl_weaponpriority;sendcvar cl_zoomfactor;sendcvar cl_zoomspeed;sendcvar cl_autoswitch;sendcvar cl_shownames;sendcvar cl_forceplayermodelsfromxonotic;sendcvar cl_forceplayermodels;playermodel $_cl_playermodel;playerskin $_cl_playerskin", COMMANDBUTTON_APPLY)); } void HUDSetup_Join_Click(entity me, entity btn) { diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c index dcc6a64f36..470fc67852 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_waypoint.c @@ -1,9 +1,8 @@ #ifdef INTERFACE CLASS(XonoticWaypointDialog) EXTENDS(XonoticDialog) - METHOD(XonoticWaypointDialog, toString, string(entity)) METHOD(XonoticWaypointDialog, fill, void(entity)) METHOD(XonoticWaypointDialog, showNotify, void(entity)) - ATTRIB(XonoticWaypointDialog, title, string, "Waypoints") + ATTRIB(XonoticWaypointDialog, title, string, _("Waypoints")) ATTRIB(XonoticWaypointDialog, color, vector, SKINCOLOR_DIALOG_RADAR) ATTRIB(XonoticWaypointDialog, intendedWidth, float, 0.7) ATTRIB(XonoticWaypointDialog, rows, float, 6) @@ -16,39 +15,35 @@ void XonoticWaypointDialog_showNotify(entity me) { loadAllCvars(me); } -string XonoticWaypointDialog_toString(entity me) -{ - return "XXX"; -} void XonoticWaypointDialog_fill(entity me) { entity e; me.TR(me); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Waypoint settings:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Waypoint settings:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 3.8, e = makeXonoticCheckBox(1, "cl_hidewaypoints", "Show base waypoints")); + me.TD(me, 1, 3.8, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Show base waypoints"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Waypoint scale:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Waypoint scale:"))); me.TD(me, 1, 3, e = makeXonoticSlider(0.5, 1.5, 0.01, "g_waypointsprite_scale")); setDependent(e, "cl_hidewaypoints", 0, 0); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Waypoint alpha:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Waypoint alpha:"))); me.TD(me, 1, 3, e = makeXonoticSlider(0.1, 1, 0.01, "g_waypointsprite_alpha")); setDependent(e, "cl_hidewaypoints", 0, 0); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Show names:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Show names:"))); me.TD(me, 1, 3, e = makeXonoticTextSlider("cl_shownames")); - e.addValue(e, "Never", "0"); - e.addValue(e, "Teammates", "1"); - e.addValue(e, "All players", "2"); + e.addValue(e, _("Never"), "0"); + e.addValue(e, _("Teammates"), "1"); + e.addValue(e, _("All players"), "2"); e.configureXonoticTextSliderValues(e); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c index ca6d705c6f..ed5802a972 100644 --- a/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c +++ b/qcsrc/menu/xonotic/dialog_multiplayer_playersetup_weapons.c @@ -3,7 +3,7 @@ CLASS(XonoticWeaponsDialog) EXTENDS(XonoticDialog) METHOD(XonoticWeaponsDialog, toString, string(entity)) METHOD(XonoticWeaponsDialog, fill, void(entity)) METHOD(XonoticWeaponsDialog, showNotify, void(entity)) - ATTRIB(XonoticWeaponsDialog, title, string, "Weapon settings") + ATTRIB(XonoticWeaponsDialog, title, string, _("Weapon settings")) ATTRIB(XonoticWeaponsDialog, color, vector, SKINCOLOR_DIALOG_WEAPONS) ATTRIB(XonoticWeaponsDialog, intendedWidth, float, 0.5) ATTRIB(XonoticWeaponsDialog, rows, float, 17) @@ -26,33 +26,33 @@ void XonoticWeaponsDialog_fill(entity me) entity e; me.TR(me); - me.TD(me, 1, 4, makeXonoticTextLabel(0, "Weapon priority list:")); + me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Weapon priority list:"))); me.TR(me); me.TD(me, 9, 4, e = me.weaponsList = makeXonoticWeaponsList()); me.gotoRC(me, 10, 0); me.TDempty(me, 1); - me.TD(me, 1, 1, e = makeXonoticButton("Up", '0 0 0')); + me.TD(me, 1, 1, e = makeXonoticButton(_("Up"), '0 0 0')); e.onClick = WeaponsList_MoveUp_Click; e.onClickEntity = me.weaponsList; - me.TD(me, 1, 1, e = makeXonoticButton("Down", '0 0 0')); + me.TD(me, 1, 1, e = makeXonoticButton(_("Down"), '0 0 0')); e.onClick = WeaponsList_MoveDown_Click; e.onClickEntity = me.weaponsList; me.gotoRC(me, 11, 0); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", "Use priority list for weapon cycling")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling"))); 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(0, "cl_autoswitch", _("Auto switch weapons on pickup"))); 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(0, "r_drawviewmodel", _("Draw 1st person weapon model"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_gunalign", "4", "Left align")); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_gunalign", "4", _("Left align"))); setDependent(e, "r_drawviewmodel", 1, 1); - me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_gunalign", "3", "Right align")); + me.TD(me, 1, 1, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align"))); setDependent(e, "r_drawviewmodel", 1, 1); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", "Flip view horizontally")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally"))); me.TR(me); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_news.c b/qcsrc/menu/xonotic/dialog_news.c index cfe91afcee..f638c770d1 100644 --- a/qcsrc/menu/xonotic/dialog_news.c +++ b/qcsrc/menu/xonotic/dialog_news.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticNewsDialog) EXTENDS(XonoticDialog) METHOD(XonoticNewsDialog, fill, void(entity)) - ATTRIB(XonoticNewsDialog, title, string, "News") + ATTRIB(XonoticNewsDialog, title, string, _("News")) ATTRIB(XonoticNewsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS) ATTRIB(XonoticNewsDialog, intendedWidth, float, 0.96) ATTRIB(XonoticNewsDialog, rows, float, 24) @@ -15,6 +15,6 @@ void XonoticNewsDialog_fill(entity me) entity e; me.TR(me); me.TD(me, 24, 1, e = spawnGecko()); - e.configureBrowser( e, "http://alientrap.org/xonotic/index.php?module=news" ); + e.configureBrowser( e, _("http://www.xonotic.org/team/blog/") ); } #endif diff --git a/qcsrc/menu/xonotic/dialog_quit.c b/qcsrc/menu/xonotic/dialog_quit.c index 0229e02676..6d9dde47b3 100644 --- a/qcsrc/menu/xonotic/dialog_quit.c +++ b/qcsrc/menu/xonotic/dialog_quit.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticQuitDialog) EXTENDS(XonoticDialog) METHOD(XonoticQuitDialog, fill, void(entity)) - ATTRIB(XonoticQuitDialog, title, string, "Quit") + ATTRIB(XonoticQuitDialog, title, string, _("Quit")) ATTRIB(XonoticQuitDialog, color, vector, SKINCOLOR_DIALOG_QUIT) ATTRIB(XonoticQuitDialog, intendedWidth, float, 0.5) ATTRIB(XonoticQuitDialog, rows, float, 3) @@ -14,11 +14,11 @@ void XonoticQuitDialog_fill(entity me) { entity e; me.TR(me); - me.TD(me, 1, 2, makeXonoticTextLabel(0.5, "Are you sure you want to quit?")); + 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', "quit", 0)); - me.TD(me, 1, 1, e = makeXonoticButton("No", '0 1 0')); + me.TD(me, 1, 1, e = makeXonoticCommandButton(_("Yes"), '1 0 0', "quit", 0)); + me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_settings.c b/qcsrc/menu/xonotic/dialog_settings.c index 1f19bf6565..1f084a16cc 100644 --- a/qcsrc/menu/xonotic/dialog_settings.c +++ b/qcsrc/menu/xonotic/dialog_settings.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticSettingsDialog) EXTENDS(XonoticDialog) METHOD(XonoticSettingsDialog, fill, void(entity)) - ATTRIB(XonoticSettingsDialog, title, string, "Settings") + ATTRIB(XonoticSettingsDialog, title, string, _("Settings")) ATTRIB(XonoticSettingsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS) ATTRIB(XonoticSettingsDialog, intendedWidth, float, 0.96) ATTRIB(XonoticSettingsDialog, rows, float, 19) @@ -15,12 +15,12 @@ void XonoticSettingsDialog_fill(entity me) entity mc; mc = makeXonoticTabController(me.rows - 2); me.TR(me); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Input", makeXonoticInputSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Video", makeXonoticVideoSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Effects", makeXonoticEffectsSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Audio", makeXonoticAudioSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Network", makeXonoticNetworkSettingsTab())); - me.TD(me, 1, 1, mc.makeTabButton(mc, "Misc", makeXonoticMiscSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Input"), makeXonoticInputSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Video"), makeXonoticVideoSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Audio"), makeXonoticAudioSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Network"), makeXonoticNetworkSettingsTab())); + me.TD(me, 1, 1, mc.makeTabButton(mc, _("Misc"), makeXonoticMiscSettingsTab())); me.TR(me); me.TR(me); me.TD(me, me.rows - 2, me.columns, mc); diff --git a/qcsrc/menu/xonotic/dialog_settings_audio.c b/qcsrc/menu/xonotic/dialog_settings_audio.c index ddde45d2b8..e38a87be66 100644 --- a/qcsrc/menu/xonotic/dialog_settings_audio.c +++ b/qcsrc/menu/xonotic/dialog_settings_audio.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticAudioSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticAudioSettingsTab, fill, void(entity)) - ATTRIB(XonoticAudioSettingsTab, title, string, "Audio") + ATTRIB(XonoticAudioSettingsTab, title, string, _("Audio")) ATTRIB(XonoticAudioSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticAudioSettingsTab, rows, float, 17) ATTRIB(XonoticAudioSettingsTab, columns, float, 6.5) @@ -24,155 +24,157 @@ void XonoticAudioSettingsTab_fill(entity me) me.TR(me); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "mastervolume"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Master:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Master:"))); me.TD(me, 1, 2, s); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "bgmvolume"); makeMulti(s, "snd_csqcchannel2volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Music:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Music:"))); me.TD(me, 1, 2, s); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_staticvolume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Ambient:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, ZCTX(_("VOL^Ambient:")))); makeMulti(s, "snd_entchannel2volume"); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_worldchannel0volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Info:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Info:"))); makeMulti(s, "snd_csqcchannel0volume"); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_entchannel3volume"); makeMulti(s, "snd_playerchannel0volume snd_playerchannel3volume snd_csqcchannel3volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Items:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Items:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel6volume"); makeMulti(s, "snd_csqcchannel6volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Pain:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Pain:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel7volume"); makeMulti(s, "snd_entchannel7volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Player:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Player:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_entchannel4volume"); makeMulti(s, "snd_playerchannel4volume snd_entchannel6volume snd_csqcchannel4volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Shots:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Shots:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel2volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Voice:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Voice:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.TDempty(me, 0.2); s = makeXonoticDecibelsSlider(-20, 0, 0.5, "snd_playerchannel1volume"); makeMulti(s, "snd_playerchannel5volume snd_entchannel1volume snd_entchannel5volume"); - me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, "Weapons:")); + me.TD(me, 1, 0.8, e = makeXonoticSliderCheckBox(-1000000, 1, s, _("Weapons:"))); me.TD(me, 1, 2, s); - setDependentStringNotEqual(e, "volume", "0"); - setDependentStringNotEqual(s, "volume", "0"); + setDependentStringNotEqual(e, "mastervolume", "0"); + setDependentStringNotEqual(s, "mastervolume", "0"); me.TR(me); me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Frequency:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Frequency:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_speed")); - e.addValue(e, "8 kHz", "8000"); - e.addValue(e, "11.025 kHz", "11025"); - e.addValue(e, "16 kHz", "16000"); - e.addValue(e, "22.05 kHz", "22050"); - e.addValue(e, "24 kHz", "24000"); - e.addValue(e, "32 kHz", "32000"); - e.addValue(e, "44.1 kHz", "44100"); - e.addValue(e, "48 kHz", "48000"); + e.addValue(e, _("8 kHz"), "8000"); + e.addValue(e, _("11.025 kHz"), "11025"); + e.addValue(e, _("16 kHz"), "16000"); + e.addValue(e, _("22.05 kHz"), "22050"); + e.addValue(e, _("24 kHz"), "24000"); + e.addValue(e, _("32 kHz"), "32000"); + e.addValue(e, _("44.1 kHz"), "44100"); + e.addValue(e, _("48 kHz"), "48000"); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Channels:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Channels:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_channels")); - e.addValue(e, "Mono", "1"); - e.addValue(e, "Stereo", "2"); - e.addValue(e, "2.1", "3"); - e.addValue(e, "3.1", "4"); - e.addValue(e, "4.1", "5"); - e.addValue(e, "5.1", "6"); - e.addValue(e, "6.1", "7"); - e.addValue(e, "7.1", "8"); + e.addValue(e, _("Mono"), "1"); + e.addValue(e, _("Stereo"), "2"); + e.addValue(e, _("2.1"), "3"); + e.addValue(e, _("4"), "4"); + e.addValue(e, _("5"), "5"); + e.addValue(e, _("5.1"), "6"); + e.addValue(e, _("6.1"), "7"); + e.addValue(e, _("7.1"), "8"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_swapstereo", "Swap Stereo")); + me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_swapstereo", _("Swap Stereo"))); setDependent(e, "snd_channels", 1.5, 0.5); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_spatialization_control", "Headphone friendly mode")); + me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "snd_spatialization_control", _("Headphone friendly mode"))); setDependent(e, "snd_channels", 1.5, 0.5); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Spatial voices:")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "0", "None")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "2", "Taunts")); - me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "1", "All")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Spatial voices:"))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "0", ZCTX(_("VOCS^None")))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "2", ZCTX(_("VOCS^Taunts")))); + me.TD(me, 1, 2/3, e = makeXonoticRadioButton(1, "cl_voice_directional", "1", ZCTX(_("VOCS^All")))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Taunt range:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Taunt range:"))); setDependent(e, "cl_voice_directional", 0.5, -0.5); me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_voice_directional_taunt_attenuation")); - e.addValue(e, "Very short", "3"); - e.addValue(e, "Short", "2"); - e.addValue(e, "Normal", "0.5"); - e.addValue(e, "Long", "0.25"); - e.addValue(e, "Full", "0.015625"); + e.addValue(e, ZCTX(_("RNG^Very short")), "3"); + e.addValue(e, ZCTX(_("RNG^Short")), "2"); + e.addValue(e, ZCTX(_("RNG^Normal")), "0.5"); + e.addValue(e, ZCTX(_("RNG^Long")), "0.25"); + e.addValue(e, ZCTX(_("RNG^Full")), "0.015625"); e.configureXonoticTextSliderValues(e); setDependent(e, "cl_voice_directional", 0.5, -0.5); me.TR(me); sl = makeXonoticSlider(0.15, 1, 0.05, "cl_autotaunt"); sl.valueDisplayMultiplier = 100; sl.valueDigits = 0; - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, sl, "Automatic taunts")); + me.TD(me, 1, 3, e = makeXonoticSliderCheckBox(0, 1, sl, _("Automatic taunts"))); if(sl.value != e.savedValue) e.savedValue = 0.65; // default me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Frequency:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Frequency:"))); me.TD(me, 1, 2, sl); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Time warning:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time warning:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_sound_maptime_warning")); - e.addValue(e, "None", "0"); - e.addValue(e, "1 minute", "1"); - e.addValue(e, "5 minutes", "2"); - e.addValue(e, "Both", "3"); + e.addValue(e, ZCTX(_("WRN^None")), "0"); + e.addValue(e, _("1 minute"), "1"); + e.addValue(e, _("5 minutes"), "2"); + e.addValue(e, ZCTX(_("WRN^Both")), "3"); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_hitsound", "Hit indicator")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_hitsound", _("Hit indicator"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "menu_sounds", "Menu sounds")); + me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "menu_sounds", _("Menu sounds"))); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, makeXonoticCommandButton("Apply immediately", '0 0 0', "snd_restart; sendcvar cl_hitsound; sendcvar cl_autotaunt; sendcvar cl_voice_directional; sendcvar cl_voice_directional_taunt_attenuation", COMMANDBUTTON_APPLY)); + me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "snd_restart; sendcvar cl_hitsound; sendcvar cl_autotaunt; sendcvar cl_voice_directional; sendcvar cl_voice_directional_taunt_attenuation", COMMANDBUTTON_APPLY)); } #endif diff --git a/qcsrc/menu/xonotic/dialog_settings_effects.c b/qcsrc/menu/xonotic/dialog_settings_effects.c index cd108f0be9..ec8329b5d8 100644 --- a/qcsrc/menu/xonotic/dialog_settings_effects.c +++ b/qcsrc/menu/xonotic/dialog_settings_effects.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticEffectsSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticEffectsSettingsTab, fill, void(entity)) - ATTRIB(XonoticEffectsSettingsTab, title, string, "Effects") + ATTRIB(XonoticEffectsSettingsTab, title, string, _("Effects")) ATTRIB(XonoticEffectsSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticEffectsSettingsTab, rows, float, 17) ATTRIB(XonoticEffectsSettingsTab, columns, float, 6.5) @@ -35,47 +35,47 @@ void XonoticEffectsSettingsTab_fill(entity me) entity e, s; float n; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Quality preset:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Quality preset:"))); n = 5 + 2 * !!cvar("developer"); if(cvar("developer")) - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("OMG!", '1 0 1', "exec effects-omg.cfg", 0)); - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("Low", '0 0 0', "exec effects-low.cfg", 0)); - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("Medium", '0 0 0', "exec effects-med.cfg", 0)); - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("Normal", '0 0 0', "exec effects-normal.cfg", 0)); - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("High", '0 0 0', "exec effects-high.cfg", 0)); - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("Ultra", '0 0 0', "exec effects-ultra.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^OMG!")), '1 0 1', "exec effects-omg.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Low")), '0 0 0', "exec effects-low.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Medium")), '0 0 0', "exec effects-med.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Normal")), '0 0 0', "exec effects-normal.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^High")), '0 0 0', "exec effects-high.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultra")), '0 0 0', "exec effects-ultra.cfg", 0)); if(cvar("developer")) - me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton("Ultimate", '0 0 0', "exec effects-ultimate.cfg", 0)); + me.TD(me, 1, 5.5 / n, e = makeXonoticCommandButton(ZCTX(_("PRE^Ultimate")), '0 0 0', "exec effects-ultimate.cfg", 0)); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Geometry detail:")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Geometry detail:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("r_subdivisions_tolerance")); - e.addValue(e, "Lowest", "16"); - e.addValue(e, "Low", "8"); - e.addValue(e, "Normal", "4"); - e.addValue(e, "Good", "3"); - e.addValue(e, "Best", "2"); - e.addValue(e, "Insane", "1"); + e.addValue(e, ZCTX(_("DET^Lowest")), "16"); + e.addValue(e, ZCTX(_("DET^Low")), "8"); + e.addValue(e, ZCTX(_("DET^Normal")), "4"); + e.addValue(e, ZCTX(_("DET^Good")), "3"); + e.addValue(e, ZCTX(_("DET^Best")), "2"); + e.addValue(e, ZCTX(_("DET^Insane")), "1"); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Antialiasing:")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Antialiasing:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_samples")); - e.addValue(e, "Disabled", "1"); - e.addValue(e, "2x", "2"); - e.addValue(e, "4x", "4"); + e.addValue(e, ZCTX(_("AA^Disabled")), "1"); + e.addValue(e, _("2x"), "2"); + e.addValue(e, _("4x"), "4"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Texture resolution:")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Texture resolution:"))); me.TD(me, 1, 2, e = makeXonoticPicmipSlider()); if(cvar("developer")) - e.addValue(e, "Leet", "1337"); - e.addValue(e, "Lowest", "2"); - e.addValue(e, "Low", "1"); - e.addValue(e, "Normal", "0"); - e.addValue(e, "Good", "-1"); - e.addValue(e, "Best", "-2"); + e.addValue(e, ZCTX(_("RES^Leet")), "1337"); + e.addValue(e, ZCTX(_("RES^Lowest")), "2"); + e.addValue(e, ZCTX(_("RES^Low")), "1"); + e.addValue(e, ZCTX(_("RES^Normal")), "0"); + e.addValue(e, ZCTX(_("RES^Good")), "-1"); + e.addValue(e, ZCTX(_("RES^Best")), "-2"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TDempty(me, 0.2); @@ -88,108 +88,108 @@ void XonoticEffectsSettingsTab_fill(entity me) case 0: break; case 1: - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", "Avoid lossy texture compression")); + me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression"))); break; case 2: - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", "Avoid lossy texture compression")); + me.TD(me, 1, 2.8, e = makeXonoticCheckBox(1, "r_texture_dds_load", _("Avoid lossy texture compression"))); makeMulti(e, "gl_texturecompression"); break; } } me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Anisotropy:")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Anisotropy:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("gl_texture_anisotropy")); - e.addValue(e, "Disabled", "1"); - e.addValue(e, "2x", "2"); - e.addValue(e, "4x", "4"); - e.addValue(e, "8x", "8"); - e.addValue(e, "16x", "16"); + e.addValue(e, ZCTX(_("ANISO^Disabled")), "1"); + e.addValue(e, _("2x"), "2"); + e.addValue(e, _("4x"), "4"); + e.addValue(e, _("8x"), "8"); + e.addValue(e, _("16x"), "16"); e.configureXonoticTextSliderValues(e); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Particle quality:")); - me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 1.0, 0.1, "cl_particles_quality")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Particle quality:"))); + me.TD(me, 1, 1.9, e = makeXonoticSlider(0.2, 1.0, 0.1, "cl_particles_quality")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Particle dist.:")); - me.TD(me, 1, 2, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance")); + me.TD(me, 1, 1.1, e = makeXonoticTextLabel(0, _("Particle distance:"))); + me.TD(me, 1, 1.9, e = makeXonoticSlider(500, 2000, 100, "r_drawparticles_drawdistance")); me.TR(me); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_decals", "Decals")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_decals", _("Decals"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Distance:")); + me.TD(me, 1, 0.9, 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, 1.9, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance")); setDependent(e, "cl_decals", 1, 1); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Time:")); + me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Time:"))); setDependent(e, "cl_decals", 1, 1); - me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_time")); + me.TD(me, 1, 1.9, e = makeXonoticSlider(1, 20, 1, "cl_decals_time")); setDependent(e, "cl_decals", 1, 1); me.gotoRC(me, 2, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 2, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", "Use lightmaps")); - me.TD(me, 1, 1.9, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", "Deluxe mapping")); + me.TD(me, 1, 1.3, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"))); + me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping"))); setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0); - me.TD(me, 1, 0.7, e = makeXonoticCheckBox(0, "r_shadow_gloss", "Gloss")); + me.TD(me, 1, 0.8, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss"))); setDependentAND3(e, "vid_gl20", 1, 1, "r_glsl_deluxemapping", 1, 2, "mod_q3bsp_nolightmaps", 0, 0); me.TR(me); - me.TD(me, 1, 1.5, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", "Offset mapping")); + me.TD(me, 1, 1.3, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping"))); setDependent(e, "vid_gl20", 1, 1); - me.TD(me, 1, 1.9, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", "Relief mapping")); + me.TD(me, 1, 1.7, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping"))); 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(0, "r_water", _("Reflections:"))); setDependent(e, "vid_gl20", 1, 1); me.TD(me, 1, 2, e = makeXonoticTextSlider("r_water_resolutionmultiplier")); - e.addValue(e, "Blurred", "0.25"); - e.addValue(e, "Good", "0.5"); - e.addValue(e, "Sharp", "1"); + 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); if(cvar("developer")) - me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", "Show surfaces")); + me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticRadioButton(1, string_null, string_null, "No dynamic lighting")); + me.TD(me, 1, 3, e = makeXonoticRadioButton(1, string_null, string_null, _("No dynamic lighting"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, "Flash blend approximation")); + me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Flash blend approximation"))); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "r_shadow_realtime_dlight", string_null, "Realtime dynamic lighting")); - me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_dlight_shadows", "Shadows")); + me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting"))); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_dlight_shadows", _("Shadows"))); 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(0, "r_shadow_realtime_world", _("Realtime world lighting"))); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_world_shadows", _("Shadows"))); 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(0, "r_shadow_usenormalmap", _("Use normal maps"))); 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")); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows"))); setDependentWeird(e, someShadowCvarIsEnabled); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_coronas", "Coronas")); + me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_coronas", _("Coronas"))); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_bloom", "Bloom")); + me.TD(me, 1, 1.2, e = makeXonoticCheckBox(0, "r_bloom", _("Bloom"))); setDependent(e, "r_hdr", 0, 0); - me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(2, 0, "r_hdr", "High Dynamic Range (HDR)")); + me.TD(me, 1, 1.8, e = makeXonoticCheckBoxEx(2, 0, "r_hdr", _("High Dynamic Range (HDR)"))); me.TR(me); s = makeXonoticSlider(0.1, 1, 0.1, "r_motionblur"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, "Motion blur:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Motion blur:"))); if(s.value != e.savedValue) e.savedValue = 0.5; // default me.TD(me, 1, 2, s); me.TR(me); s = makeXonoticSlider(0.1, 1, 0.1, "r_damageblur"); - me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, "Damage blur:")); + me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Damage blur:"))); if(s.value != e.savedValue) e.savedValue = 0.4; // default me.TD(me, 1, 2, s); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, makeXonoticCommandButton("Apply immediately", '0 0 0', "vid_restart", COMMANDBUTTON_APPLY)); + me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "vid_restart", COMMANDBUTTON_APPLY)); } #endif diff --git a/qcsrc/menu/xonotic/dialog_settings_input.c b/qcsrc/menu/xonotic/dialog_settings_input.c index df3bd084a5..ee244931d6 100644 --- a/qcsrc/menu/xonotic/dialog_settings_input.c +++ b/qcsrc/menu/xonotic/dialog_settings_input.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticInputSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticInputSettingsTab, fill, void(entity)) - ATTRIB(XonoticInputSettingsTab, title, string, "Input") + ATTRIB(XonoticInputSettingsTab, title, string, _("Input")) ATTRIB(XonoticInputSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticInputSettingsTab, rows, float, 17) ATTRIB(XonoticInputSettingsTab, columns, float, 6.5) @@ -23,55 +23,46 @@ void XonoticInputSettingsTab_fill(entity me) entity kb; me.TR(me); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "Key bindings:")); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Key bindings:"))); me.TR(me); me.TD(me, me.rows - 2, 3.3, kb = makeXonoticKeyBinder()); me.gotoRC(me, me.rows - 1, 0); me.TR(me); - me.TD(me, 1, 1.1, e = makeXonoticButton("Change key...", '0 0 0')); + me.TD(me, 1, 1.1, e = makeXonoticButton(_("Change key..."), '0 0 0')); e.onClick = KeyBinder_Bind_Change; e.onClickEntity = kb; kb.keyGrabButton = e; - me.TD(me, 1, 1.1, e = makeXonoticButton("Edit...", '0 0 0')); + me.TD(me, 1, 1.1, e = makeXonoticButton(_("Edit..."), '0 0 0')); e.onClick = KeyBinder_Bind_Edit; e.onClickEntity = kb; kb.userbindEditButton = e; kb.userbindEditDialog = main.userbindEditDialog; main.userbindEditDialog.keybindBox = kb; - me.TD(me, 1, 1.1, e = makeXonoticButton("Clear", '0 0 0')); + me.TD(me, 1, 1.1, e = makeXonoticButton(_("Clear"), '0 0 0')); e.onClick = KeyBinder_Bind_Clear; e.onClickEntity = kb; me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Sensitivity:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:"))); me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "UI mouse speed:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("UI mouse speed:"))); me.TD(me, 1, 2, e = makeXonoticSlider(0.2, 4.0, 0.1, "menu_mouse_speed")); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_filter", "Mouse filter")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_filter", _("Mouse filter"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(1.022, "m_pitch", "Invert mouse")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(1.022, "m_pitch", _("Invert mouse"))); me.TR(me); if(cvar_type("joy_enable") & CVAR_TYPEFLAG_ENGINE) - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joy_enable", "Use joystick input")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joy_enable", _("Use joystick input"))); else if(cvar_type("joystick") & CVAR_TYPEFLAG_ENGINE) - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joystick", "Use joystick input")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "joystick", _("Use joystick input"))); me.TR(me); if(cvar_type("vid_dgamouse") & CVAR_TYPEFLAG_ENGINE) - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_dgamouse", "Turn off OS mouse acceleration")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_dgamouse", _("Turn off OS mouse acceleration"))); else if(cvar_type("apple_mouse_noaccel") & CVAR_TYPEFLAG_ENGINE) - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", "Turn off OS mouse acceleration")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", _("Turn off OS mouse acceleration"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", "\"enter console\" also closes")); - me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Show binds:")); - me.TD(me, 1, 2, e = makeXonoticTextSlider("sbar_showbinds")); - e.addValue(e, "Actions", "0"); - e.addValue(e, "Bound keys", "1"); - e.addValue(e, "Both", "2"); - e.configureXonoticTextSliderValues(e); - me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBoxEx(2, 0, "cl_showpressedkeys", "Show pressed keys")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("\"enter console\" also closes"))); } #endif diff --git a/qcsrc/menu/xonotic/dialog_settings_input_userbind.c b/qcsrc/menu/xonotic/dialog_settings_input_userbind.c index 3cdfa95b73..aaf182fcd8 100644 --- a/qcsrc/menu/xonotic/dialog_settings_input_userbind.c +++ b/qcsrc/menu/xonotic/dialog_settings_input_userbind.c @@ -2,7 +2,7 @@ CLASS(XonoticUserbindEditDialog) EXTENDS(XonoticDialog) METHOD(XonoticUserbindEditDialog, loadUserBind, void(entity, string, string, string)) METHOD(XonoticUserbindEditDialog, fill, void(entity)) - ATTRIB(XonoticUserbindEditDialog, title, string, "User defined key bind") + ATTRIB(XonoticUserbindEditDialog, title, string, _("User defined key bind")) ATTRIB(XonoticUserbindEditDialog, color, vector, SKINCOLOR_DIALOG_USERBIND) ATTRIB(XonoticUserbindEditDialog, intendedWidth, float, 0.7) ATTRIB(XonoticUserbindEditDialog, rows, float, 4) @@ -36,19 +36,19 @@ void XonoticUserbindEditDialog_fill(entity me) { entity e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Name:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Name:"))); me.TD(me, 1, me.columns - 1, me.nameBox = makeXonoticInputBox(0, string_null)); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Command when pressed:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Command when pressed:"))); me.TD(me, 1, me.columns - 1, me.commandPressBox = makeXonoticInputBox(0, string_null)); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Command when released:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Command when released:"))); me.TD(me, 1, me.columns - 1, me.commandReleaseBox = makeXonoticInputBox(0, string_null)); me.TR(me); - me.TD(me, 1, me.columns / 2, e = makeXonoticButton("Save", '0 0 0')); + me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Save"), '0 0 0')); e.onClick = XonoticUserbindEditDialog_Save; e.onClickEntity = me; - me.TD(me, 1, me.columns / 2, e = makeXonoticButton("Cancel", '0 0 0')); + me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Cancel"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_settings_misc.c b/qcsrc/menu/xonotic/dialog_settings_misc.c index 5c76953a55..2113783ed0 100644 --- a/qcsrc/menu/xonotic/dialog_settings_misc.c +++ b/qcsrc/menu/xonotic/dialog_settings_misc.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticMiscSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticMiscSettingsTab, fill, void(entity)) - ATTRIB(XonoticMiscSettingsTab, title, string, "Misc") + ATTRIB(XonoticMiscSettingsTab, title, string, _("Misc")) ATTRIB(XonoticMiscSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticMiscSettingsTab, rows, float, 17) ATTRIB(XonoticMiscSettingsTab, columns, float, 6.5) @@ -23,50 +23,61 @@ void XonoticMiscSettingsTab_fill(entity me) entity sk; me.TR(me); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "Menu skins:")); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Menu skins:"))); me.TR(me); me.TD(me, me.rows - 2, 3, sk = makeXonoticSkinList()); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, 3, e = makeXonoticButton("Apply immediately", '0 0 0')); + me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0')); e.onClick = SetSkin_Click; e.onClickEntity = sk; me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", "Show current time")); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showdate", "Show current date")); + me.TD(me, 3, 3, sk = makeXonoticLanguageList()); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", "Show frames per second")); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_showspeed", "Speedometer")); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticButton(_("Apply immediately"), '0 0 0')); + e.onClick = SetLanguage_Click; + e.onClickEntity = sk; + + me.TR(me); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", _("Show current time"))); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showdate", _("Show current date"))); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second"))); + me.TR(me); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_showspeed", _("Speedometer"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "0", "qu/s (hidden)")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "0", _("qu/s (hidden)"))); setDependent(e, "cl_showspeed", 1, 1); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "1", "qu/s")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "1", _("qu/s"))); setDependent(e, "cl_showspeed", 1, 1); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "2", "m/s")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "2", _("m/s"))); setDependent(e, "cl_showspeed", 1, 1); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "3", "km/h")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "3", _("km/h"))); setDependent(e, "cl_showspeed", 1, 1); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "4", "mph")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "4", _("mph"))); setDependent(e, "cl_showspeed", 1, 1); - me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "5", "knots")); + me.TD(me, 1, 2.8/3, e = makeXonoticRadioButton(1, "cl_showspeed_unit", "5", _("knots"))); setDependent(e, "cl_showspeed", 1, 1); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_showacceleration", "Show accelerometer")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_showacceleration", _("Show accelerometer"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 2.8/2, e = makeXonoticTextLabel(0, "Accelerometer scale:")); + me.TD(me, 1, 2.8/2, e = makeXonoticTextLabel(0, _("Accelerometer scale:"))); setDependent(e, "cl_showacceleration", 1, 1); me.TD(me, 1, 2.8/2, e = makeXonoticSlider(0.2, 2, 0.2, "cl_showacceleration_scale")); setDependent(e, "cl_showacceleration", 1, 1); me.TR(me); me.TR(me); - me.TDempty(me, 0.2); - me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", "Minimize input latency")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Minimize input latency"))); me.TR(me); me.TR(me); me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Menu Tooltips:")); @@ -76,7 +87,7 @@ void XonoticMiscSettingsTab_fill(entity me) me.TR(me); 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(_("Advanced settings..."), '0 0 0')); e.onClick = DialogOpenButton_Click; e.onClickEntity = main.cvarsDialog; } diff --git a/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c b/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c index 0d846caf2a..7f26a40026 100644 --- a/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c +++ b/qcsrc/menu/xonotic/dialog_settings_misc_cvars.c @@ -1,9 +1,8 @@ #ifdef INTERFACE CLASS(XonoticCvarsDialog) EXTENDS(XonoticDialog) - METHOD(XonoticCvarsDialog, toString, string(entity)) METHOD(XonoticCvarsDialog, fill, void(entity)) METHOD(XonoticCvarsDialog, showNotify, void(entity)) - ATTRIB(XonoticCvarsDialog, title, string, "Advanced settings") + ATTRIB(XonoticCvarsDialog, title, string, _("Advanced settings")) ATTRIB(XonoticCvarsDialog, color, vector, SKINCOLOR_DIALOG_CVARS) ATTRIB(XonoticCvarsDialog, intendedWidth, float, 0.8) ATTRIB(XonoticCvarsDialog, rows, float, 25) @@ -16,17 +15,13 @@ void XonoticCvarsDialog_showNotify(entity me) { loadAllCvars(me); } -string XonoticCvarsDialog_toString(entity me) -{ - return "XXX"; -} void XonoticCvarsDialog_fill(entity me) { entity e, cvarlist, btn; cvarlist = makeXonoticCvarList(); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Cvar filter:")); - me.TD(me, 1, 0.5, btn = makeXonoticButton("Clear", '0 0 0')); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Cvar filter:"))); + me.TD(me, 1, 0.5, btn = makeXonoticButton(_("Clear"), '0 0 0')); me.TD(me, 1, me.columns - 1.5, e = makeXonoticInputBox(0, string_null)); e.onChange = CvarList_Filter_Change; e.onChangeEntity = cvarlist; @@ -36,15 +31,15 @@ void XonoticCvarsDialog_fill(entity me) me.TR(me); me.TD(me, me.rows - me.currentRow - 7, me.columns, cvarlist); me.gotoRC(me, me.rows - 7, 0); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Setting:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Setting:"))); me.TD(me, 1, me.columns - 1, e = makeXonoticTextLabel(0, string_null)); cvarlist.cvarNameBox = e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Type:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Type:"))); me.TD(me, 1, me.columns - 1, e = makeXonoticTextLabel(0, string_null)); cvarlist.cvarTypeBox = e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Value:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Value:"))); me.TD(me, 1, me.columns - 2, e = makeXonoticInputBox(0, string_null)); cvarlist.cvarValueBox = e; e.onChange = CvarList_Value_Change; @@ -56,12 +51,12 @@ void XonoticCvarsDialog_fill(entity me) e.allowCut = 1; e.marginLeft = e.marginRight = 0.5; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Description:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Description:"))); me.TD(me, 1, me.columns - 1, e = makeXonoticTextLabel(0, string_null)); cvarlist.cvarDescriptionBox = e; e.allowWrap = 1; me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_settings_network.c b/qcsrc/menu/xonotic/dialog_settings_network.c index 6e0c472afb..9b6b7c3303 100644 --- a/qcsrc/menu/xonotic/dialog_settings_network.c +++ b/qcsrc/menu/xonotic/dialog_settings_network.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticNetworkSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticNetworkSettingsTab, fill, void(entity)) - ATTRIB(XonoticNetworkSettingsTab, title, string, "Network") + ATTRIB(XonoticNetworkSettingsTab, title, string, _("Network")) ATTRIB(XonoticNetworkSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticNetworkSettingsTab, rows, float, 17) ATTRIB(XonoticNetworkSettingsTab, columns, float, 6.5) @@ -23,38 +23,38 @@ void XonoticNetworkSettingsTab_fill(entity me) entity e; me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", "Client-side movement prediction")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction"))); me.TR(me); - //me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_nolerp", "Network update smoothing")); + //me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_nolerp", _("Network update smoothing"))); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "shownetgraph", "Show netgraph")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph"))); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Network speed:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Network speed:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate")); - e.addValue(e, "56k", "4000"); - e.addValue(e, "ISDN", "7000"); - e.addValue(e, "Slow ADSL", "15000"); - e.addValue(e, "Fast ADSL", "20000"); - e.addValue(e, "Broadband", "66666"); + e.addValue(e, _("56k"), "4000"); + e.addValue(e, _("ISDN"), "7000"); + e.addValue(e, _("Slow ADSL"), "15000"); + e.addValue(e, _("Fast ADSL"), "20000"); + e.addValue(e, _("Broadband"), "66666"); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Input packets/s:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Input packets/s:"))); me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 1, "cl_netfps")); me.TR(me); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "HTTP downloads:")); + me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("HTTP downloads:"))); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Downloads:")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Downloads:"))); me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads")); me.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, "Speed (kB/s):")); + me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Speed (kB/s):"))); me.TD(me, 1, 2, e = makeXonoticSlider(10, 1500, 10, "cl_curl_maxspeed")); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Client UDP port:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Client UDP port:"))); me.TD(me, 1, 0.64, e = makeXonoticInputBox(0, "cl_port")); } #endif diff --git a/qcsrc/menu/xonotic/dialog_settings_video.c b/qcsrc/menu/xonotic/dialog_settings_video.c index 0aa5e68cc3..951e816086 100644 --- a/qcsrc/menu/xonotic/dialog_settings_video.c +++ b/qcsrc/menu/xonotic/dialog_settings_video.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticVideoSettingsTab) EXTENDS(XonoticTab) METHOD(XonoticVideoSettingsTab, fill, void(entity)) - ATTRIB(XonoticVideoSettingsTab, title, string, "Video") + ATTRIB(XonoticVideoSettingsTab, title, string, _("Video")) ATTRIB(XonoticVideoSettingsTab, intendedWidth, float, 0.9) ATTRIB(XonoticVideoSettingsTab, rows, float, 17) ATTRIB(XonoticVideoSettingsTab, columns, float, 6.5) @@ -23,86 +23,86 @@ void XonoticVideoSettingsTab_fill(entity me) entity e; me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Resolution:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Resolution:"))); me.TD(me, 1, 2, e = makeXonoticResolutionSlider()); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Font/UI size:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Font/UI size:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_vid_scale")); - e.addValue(e, "Unreadable", "-1"); - e.addValue(e, "Tiny", "-0.75"); - e.addValue(e, "Little", "-0.5"); - e.addValue(e, "Small", "-0.25"); - e.addValue(e, "Medium", "0"); - e.addValue(e, "Large", "0.25"); - e.addValue(e, "Huge", "0.5"); - e.addValue(e, "Gigantic", "0.75"); - e.addValue(e, "Colossal", "1"); + e.addValue(e, ZCTX(_("SZ^Unreadable")), "-1"); + e.addValue(e, ZCTX(_("SZ^Tiny")), "-0.75"); + e.addValue(e, ZCTX(_("SZ^Little")), "-0.5"); + e.addValue(e, ZCTX(_("SZ^Small")), "-0.25"); + e.addValue(e, ZCTX(_("SZ^Medium")), "0"); + e.addValue(e, ZCTX(_("SZ^Large")), "0.25"); + e.addValue(e, ZCTX(_("SZ^Huge")), "0.5"); + e.addValue(e, ZCTX(_("SZ^Gigantic")), "0.75"); + e.addValue(e, ZCTX(_("SZ^Colossal")), "1"); e.configureXonoticTextSliderValues(e); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Color depth:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Color depth:"))); me.TD(me, 1, 2, e = makeXonoticSlider(16, 32, 16, "vid_bitsperpixel")); 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(0, "vid_fullscreen", _("Full screen"))); + me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "vid_vsync", _("Vertical Synchronization"))); me.TR(me); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", "Use OpenGL 2.0 shaders (GLSL)")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)"))); me.TR(me); me.TR(me); - me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", "Use Occlusion Queries")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Use Occlusion Queries"))); me.TR(me); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticTextLabel(0, "Vertex Buffer Objects (VBOs)")); + 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", "Off")); - me.TD(me, 1, 2.1, e = makeXonoticRadioButton(1, "gl_vbo", "3", "Vertices, some Tris (compatible)")); + 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.TR(me); me.TDempty(me, 0.2); - me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "2", "Vertices")); - me.TD(me, 1, 2.1, e = makeXonoticRadioButton(1, "gl_vbo", "1", "Vertices and Triangles")); + 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.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Depth first:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:"))); me.TD(me, 1, 2, e = makeXonoticTextSlider("r_depthfirst")); - e.addValue(e, "Disabled", "0"); - e.addValue(e, "World", "1"); - e.addValue(e, "All", "2"); + e.addValue(e, ZCTX(_("DF^Disabled")), "0"); + e.addValue(e, ZCTX(_("DF^World")), "1"); + e.addValue(e, ZCTX(_("DF^All")), "2"); e.configureXonoticTextSliderValues(e); me.TR(me); if(cvar_type("apple_multithreadedgl") & CVAR_TYPEFLAG_ENGINE) - me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "apple_multithreadedgl", "Disable multithreaded OpenGL")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "apple_multithreadedgl", _("Disable multithreaded OpenGL"))); 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(0, "gl_finish", _("Wait for GPU to finish each frame"))); me.gotoRC(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Brightness:")); + 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.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Contrast:")); + 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.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Gamma:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:"))); me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "v_gamma")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Contrast boost:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:"))); me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 5.0, 0.1, "v_contrastboost")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Saturation:")); + 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")); setDependent(e, "vid_gl20", 1, 1); me.TR(me); - me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_glslgamma", "Use GLSL to handle color control")); + me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_glslgamma", _("Use GLSL to handle color control"))); setDependent(e, "vid_gl20", 1, 1); me.TR(me); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Ambient:")); + me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:")))); me.TD(me, 1, 2, e = makeXonoticSlider(0, 20.0, 1.0, "r_ambient")); me.TR(me); - me.TD(me, 1, 1, e = makeXonoticTextLabel(0, "Intensity:")); + 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.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, makeXonoticCommandButton("Apply immediately", '0 0 0', "menu_cmd setresolution; vid_restart; menu_restart; togglemenu; defer 0.1 \"menu_cmd videosettings\"", COMMANDBUTTON_APPLY)); + me.TD(me, 1, me.columns, makeXonoticCommandButton(_("Apply immediately"), '0 0 0', "menu_cmd setresolution; vid_restart; menu_restart; togglemenu; defer 0.1 \"menu_cmd videosettings\"", COMMANDBUTTON_APPLY)); } #endif diff --git a/qcsrc/menu/xonotic/dialog_singleplayer.c b/qcsrc/menu/xonotic/dialog_singleplayer.c index 560192ff1d..81eb68e392 100644 --- a/qcsrc/menu/xonotic/dialog_singleplayer.c +++ b/qcsrc/menu/xonotic/dialog_singleplayer.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticSingleplayerDialog) EXTENDS(XonoticDialog) METHOD(XonoticSingleplayerDialog, fill, void(entity)) - ATTRIB(XonoticSingleplayerDialog, title, string, "Singleplayer") + ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer")) ATTRIB(XonoticSingleplayerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER) ATTRIB(XonoticSingleplayerDialog, intendedWidth, float, 0.80) ATTRIB(XonoticSingleplayerDialog, rows, float, 24) @@ -56,14 +56,14 @@ void XonoticSingleplayerDialog_fill(entity me) me.TR(me); me.TDempty(me, (me.columns - 3) / 2); - me.TD(me, 2, 3, e = makeXonoticBigButton("Instant action! (random map with bots)", '0 0 0')); + me.TD(me, 2, 3, e = makeXonoticBigButton(_("Instant action! (random map with bots)"), '0 0 0')); e.onClick = InstantAction_LoadMap; e.onClickEntity = NULL; me.TR(me); me.TR(me); me.TR(me); me.TD(me, 1, 1, btnPrev = makeXonoticButton("<<", '0 0 0')); - me.TD(me, 1, me.columns - 2, lblTitle = makeXonoticTextLabel(0.5, "???")); + me.TD(me, 1, me.columns - 2, lblTitle = makeXonoticTextLabel(0.5, _("???"))); me.TD(me, 1, 1, btnNext = makeXonoticButton(">>", '0 0 0')); me.TR(me); me.TD(me, me.rows - 5, me.columns, me.campaignBox = makeXonoticCampaignList()); @@ -77,7 +77,7 @@ void XonoticSingleplayerDialog_fill(entity me) me.campaignBox.campaignGo(me.campaignBox, 0); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("Start Singleplayer!", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("Start Singleplayer!"), '0 0 0')); e.onClick = CampaignList_LoadMap; e.onClickEntity = me.campaignBox; } diff --git a/qcsrc/menu/xonotic/dialog_singleplayer_winner.c b/qcsrc/menu/xonotic/dialog_singleplayer_winner.c index 5d377e6d0a..8e584b8a8a 100644 --- a/qcsrc/menu/xonotic/dialog_singleplayer_winner.c +++ b/qcsrc/menu/xonotic/dialog_singleplayer_winner.c @@ -1,7 +1,7 @@ #ifdef INTERFACE CLASS(XonoticWinnerDialog) EXTENDS(XonoticDialog) METHOD(XonoticWinnerDialog, fill, void(entity)) - ATTRIB(XonoticWinnerDialog, title, string, "Winner") + ATTRIB(XonoticWinnerDialog, title, string, _("Winner")) ATTRIB(XonoticWinnerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER) ATTRIB(XonoticWinnerDialog, intendedWidth, float, 0.32) ATTRIB(XonoticWinnerDialog, rows, float, 12) @@ -18,7 +18,7 @@ void XonoticWinnerDialog_fill(entity me) me.TD(me, me.rows - 2, me.columns, e = makeXonoticImage("/gfx/winner", -1)); me.gotoRC(me, me.rows - 1, 0); - me.TD(me, 1, me.columns, e = makeXonoticButton("OK", '0 0 0')); + me.TD(me, 1, me.columns, e = makeXonoticButton(_("OK"), '0 0 0')); e.onClick = Dialog_Close; e.onClickEntity = me; } diff --git a/qcsrc/menu/xonotic/dialog_teamselect.c b/qcsrc/menu/xonotic/dialog_teamselect.c index e0908ee364..7fb154c8a2 100644 --- a/qcsrc/menu/xonotic/dialog_teamselect.c +++ b/qcsrc/menu/xonotic/dialog_teamselect.c @@ -2,7 +2,7 @@ CLASS(XonoticTeamSelectDialog) EXTENDS(XonoticRootDialog) 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, title, string, _("Team Selection")) // ;) ATTRIB(XonoticTeamSelectDialog, color, vector, SKINCOLOR_DIALOG_TEAMSELECT) ATTRIB(XonoticTeamSelectDialog, intendedWidth, float, 0.4) ATTRIB(XonoticTeamSelectDialog, rows, float, 5) @@ -38,17 +38,17 @@ void XonoticTeamSelectDialog_fill(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(_("join 'best' team (auto-select)"), '0 0 0', "cmd selectteam auto; cmd join")); 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, 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.TR(me); me.TR(me); - me.TD(me, 1, 4, makeXonoticCommandButton("spectate", '0 0 0', "cmd spectate", 1)); + me.TD(me, 1, 4, makeXonoticCommandButton(_("spectate"), '0 0 0', "cmd spectate", 1)); } #endif diff --git a/qcsrc/menu/xonotic/gametypelist.c b/qcsrc/menu/xonotic/gametypelist.c new file mode 100644 index 0000000000..ec21c65b97 --- /dev/null +++ b/qcsrc/menu/xonotic/gametypelist.c @@ -0,0 +1,85 @@ +#ifdef INTERFACE +CLASS(XonoticGametypeList) EXTENDS(XonoticListBox) + METHOD(XonoticGametypeList, configureXonoticGametypeList, void(entity)) + ATTRIB(XonoticGametypeList, rowsPerItem, float, 1) + METHOD(XonoticGametypeList, drawListBoxItem, void(entity, float, vector, float)) + METHOD(XonoticGametypeList, resizeNotify, void(entity, vector, vector, vector, vector)) + METHOD(XonoticGametypeList, setSelected, void(entity, float)) + METHOD(XonoticGametypeList, loadCvars, void(entity)) + METHOD(XonoticGametypeList, saveCvars, void(entity)) + + ATTRIB(XonoticGametypeList, realFontSize, vector, '0 0 0') + ATTRIB(XonoticGametypeList, realUpperMargin, float, 0) + ATTRIB(XonoticGametypeList, columnNameOrigin, float, 0) + ATTRIB(XonoticGametypeList, columnNameSize, float, 0) +ENDCLASS(XonoticGametypeList) +entity makeXonoticGametypeList(); +#endif + +#ifdef IMPLEMENTATION + +entity makeXonoticGametypeList(void) +{ + entity me; + me = spawnXonoticGametypeList(); + me.configureXonoticGametypeList(me); + return me; +} +void XonoticGametypeList_configureXonoticGametypeList(entity me) +{ + me.loadCvars(me); + me.configureXonoticListBox(me); + me.nItems = GameType_GetCount(); +} +void XonoticGametypeList_setSelected(entity me, float i) +{ + SUPER(XonoticGametypeList).setSelected(me, i); + me.saveCvars(me); +} + +void XonoticGametypeList_loadCvars(entity me) +{ + float t; + t = MapInfo_CurrentGametype(); + float i; + for(i = 0; i < GameType_GetCount(); ++i) + if(t == GameType_GetID(i)) + break; + if(i >= GameType_GetCount()) + { + for(i = 0; i < GameType_GetCount(); ++i) + if(t == MAPINFO_TYPE_DEATHMATCH) + break; + if(i >= GameType_GetCount()) + i = 0; + } + me.setSelected(me, i); + // do we need this: me.parent.gameTypeChangeNotify(me.parent); // to make sure +} +void XonoticGametypeList_saveCvars(entity me) +{ + float t; + t = GameType_GetID(me.selectedItem); + if(t == MapInfo_CurrentGametype()) + return; + MapInfo_SwitchGameType(t); + me.parent.gameTypeChangeNotify(me.parent); +} +void XonoticGametypeList_drawListBoxItem(entity me, float i, vector absSize, float isSelected) +{ + string s; + if(isSelected) + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); + s = GameType_GetName(i); + draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0); +} +void XonoticGametypeList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) +{ + SUPER(XonoticServerList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); + me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight); + me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth)); + me.realUpperMargin = 0.5 * (1 - me.realFontSize_y); + me.columnNameOrigin = 0; + me.columnNameSize = 1; +} +#endif diff --git a/qcsrc/menu/xonotic/inputbox.c b/qcsrc/menu/xonotic/inputbox.c index e457414b4a..2a9c094b8e 100644 --- a/qcsrc/menu/xonotic/inputbox.c +++ b/qcsrc/menu/xonotic/inputbox.c @@ -20,6 +20,8 @@ CLASS(XonoticInputBox) EXTENDS(InputBox) METHOD(XonoticInputBox, loadCvars, void(entity)) METHOD(XonoticInputBox, saveCvars, void(entity)) METHOD(XonoticInputBox, keyDown, float(entity, float, float, float)) + + ATTRIB(XonoticInputBox, saveImmediately, float, 0) ENDCLASS(XonoticInputBox) entity makeXonoticInputBox(float, string); #endif @@ -54,6 +56,8 @@ void XonoticInputBox_setText(entity me, string new) { SUPER(XonoticInputBox).setText(me, new); me.onChange(me, me.onChangeEntity); + if(me.saveImmediately) + me.saveCvars(me); } else SUPER(XonoticInputBox).setText(me, new); diff --git a/qcsrc/menu/xonotic/keybinder.c b/qcsrc/menu/xonotic/keybinder.c index 87273b24c6..f4a6c5a3e3 100644 --- a/qcsrc/menu/xonotic/keybinder.c +++ b/qcsrc/menu/xonotic/keybinder.c @@ -47,7 +47,7 @@ void Xonotic_KeyBinds_Read() string s; Xonotic_KeyBinds_Count = 0; - fh = fopen("keybinds.txt", FILE_READ); + fh = fopen(language_filename("keybinds.txt"), FILE_READ); if(fh < 0) return; while((s = fgets(fh))) diff --git a/qcsrc/menu/xonotic/languagelist.c b/qcsrc/menu/xonotic/languagelist.c new file mode 100644 index 0000000000..0ea54dbcaf --- /dev/null +++ b/qcsrc/menu/xonotic/languagelist.c @@ -0,0 +1,184 @@ +#ifdef INTERFACE +CLASS(XonoticLanguageList) EXTENDS(XonoticListBox) + METHOD(XonoticLanguageList, configureXonoticLanguageList, void(entity)) + ATTRIB(XonoticLanguageList, rowsPerItem, float, 1) + METHOD(XonoticLanguageList, drawListBoxItem, void(entity, float, vector, float)) + METHOD(XonoticLanguageList, resizeNotify, void(entity, vector, vector, vector, vector)) + METHOD(XonoticLanguageList, setSelected, void(entity, float)) + METHOD(XonoticLanguageList, loadCvars, void(entity)) + METHOD(XonoticLanguageList, saveCvars, void(entity)) + + ATTRIB(XonoticLanguageList, realFontSize, vector, '0 0 0') + ATTRIB(XonoticLanguageList, realUpperMargin, float, 0) + ATTRIB(XonoticLanguageList, columnNameOrigin, float, 0) + ATTRIB(XonoticLanguageList, columnNameSize, float, 0) + + METHOD(XonoticLanguageList, clickListBoxItem, void(entity, float, vector)) // double click handling + METHOD(XonoticLanguageList, keyDown, float(entity, float, float, float)) // enter handling + ATTRIB(XonoticLanguageList, lastClickedLanguage, float, -1) + ATTRIB(XonoticLanguageList, lastClickedTime, float, 0) + + METHOD(XonoticLanguageList, destroy, void(entity)) + + ATTRIB(XonoticLanguageList, languagelist, float, -1) + METHOD(XonoticLanguageList, getLanguages, void(entity)) + METHOD(XonoticLanguageList, setLanguage, void(entity)) + METHOD(XonoticLanguageList, languageParameter, string(entity, float, float)) + + ATTRIB(XonoticLanguageList, name, string, "languageselector") // change this to make it noninteractive (for first run dialog) + + ATTRIB(XonoticLanguageList, doubleClickCommand, string, "menu_restart\ntogglemenu\ndefer 0.1 \"menu_cmd languageselect\"") +ENDCLASS(XonoticLanguageList) + +entity makeXonoticLanguageList(); +void SetLanguage_Click(entity btn, entity me); +#endif + +#ifdef IMPLEMENTATION + +#define LANGPARM_ID 0 +#define LANGPARM_NAME 1 +#define LANGPARM_NAME_LOCALIZED 2 +#define LANGPARM_COUNT 3 + +entity makeXonoticLanguageList() +{ + entity me; + me = spawnXonoticLanguageList(); + me.configureXonoticLanguageList(me); + return me; +} + +void XonoticLanguageList_configureXonoticLanguageList(entity me) +{ + me.configureXonoticListBox(me); + me.getLanguages(me); + me.loadCvars(me); +} + +void XonoticLanguageList_drawListBoxItem(entity me, float i, vector absSize, float isSelected) +{ + string s; + if(isSelected) + draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED); + s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED); + draw_Text(me.realUpperMargin * eY + (me.columnNameOrigin + (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize)) * 0.5) * eX, s, me.realFontSize, '1 1 1', SKINALPHA_TEXT, 0); +} + +void XonoticLanguageList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize) +{ + SUPER(XonoticLanguageList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize); + me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight); + me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth)); + me.realUpperMargin = 0.5 * (1 - me.realFontSize_y); + me.columnNameOrigin = 0; + me.columnNameSize = 1; +} + +void XonoticLanguageList_setSelected(entity me, float i) +{ + SUPER(XonoticLanguageList).setSelected(me, i); + me.saveCvars(me); +} + +void XonoticLanguageList_loadCvars(entity me) +{ + string s; + float i, n; + s = cvar_string("prvm_language"); + n = me.nItems; + + // default to English + for(i = 0; i < n; ++i) + { + if(me.languageParameter(me, i, LANGPARM_ID) == "en") + { + me.selectedItem = i; + break; + } + } + + // otherwise, find the language + for(i = 0; i < n; ++i) + { + if(me.languageParameter(me, i, LANGPARM_ID) == s) + { + me.selectedItem = i; + break; + } + } +} + +void XonoticLanguageList_saveCvars(entity me) +{ + cvar_set("prvm_language", me.languageParameter(me, me.selectedItem, LANGPARM_ID)); +} + +void XonoticLanguageList_clickListBoxItem(entity me, float i, vector where) +{ + if(i == me.lastClickedLanguage) + if(time < me.lastClickedTime + 0.3) + { + // DOUBLE CLICK! + me.setSelected(me, i); + me.setLanguage(me); + } + me.lastClickedLanguage = i; + me.lastClickedTime = time; +} + +float XonoticLanguageList_keyDown(entity me, float scan, float ascii, float shift) +{ + if(scan == K_ENTER || scan == K_KP_ENTER) { + me.setLanguage(me); + return 1; + } + else + return SUPER(XonoticLanguageList).keyDown(me, scan, ascii, shift); +} + +void XonoticLanguageList_destroy(entity me) +{ + buf_del(me.languagelist); +} + +void XonoticLanguageList_getLanguages(entity me) +{ + float buf, i, n, fh; + string s; + + buf = buf_create(); + + fh = fopen("languages.txt", FILE_READ); + while((s = fgets(fh))) + { + n = tokenize_console(s); + if(n < 3) + continue; + bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_ID, argv(0)); + bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME, argv(1)); + bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME_LOCALIZED, argv(2)); + ++i; + } + fclose(fh); + + me.languagelist = buf; + me.nItems = i; +} + +void XonoticLanguageList_setLanguage(entity me) +{ + localcmd(sprintf("\n%s\n", me.doubleClickCommand)); +} + +string XonoticLanguageList_languageParameter(entity me, float i, float key) +{ + return bufstr_get(me.languagelist, i * LANGPARM_COUNT + key); +} + +void SetLanguage_Click(entity btn, entity me) +{ + me.setLanguage(me); +} + +#endif diff --git a/qcsrc/menu/xonotic/mainwindow.c b/qcsrc/menu/xonotic/mainwindow.c index 72e5faac36..bd15150a8c 100644 --- a/qcsrc/menu/xonotic/mainwindow.c +++ b/qcsrc/menu/xonotic/mainwindow.c @@ -1,6 +1,8 @@ #ifdef INTERFACE CLASS(MainWindow) EXTENDS(ModalController) METHOD(MainWindow, configureMainWindow, void(entity)) + METHOD(MainWindow, draw, void(entity)) + ATTRIB(MainWindow, firstRunDialog, entity, NULL) ATTRIB(MainWindow, advancedDialog, entity, NULL) ATTRIB(MainWindow, mutatorsDialog, entity, NULL) ATTRIB(MainWindow, weaponsDialog, entity, NULL) @@ -12,23 +14,38 @@ CLASS(MainWindow) EXTENDS(ModalController) ATTRIB(MainWindow, cvarsDialog, entity, NULL) ATTRIB(MainWindow, mainNexposee, entity, NULL) ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND) + ATTRIB(MainWindow, dialogToShow, entity, NULL) ENDCLASS(MainWindow) #endif #ifdef IMPLEMENTATION +void MainWindow_draw(entity me) +{ + SUPER(MainWindow).draw(me); + + if(me.dialogToShow) + { + DialogOpenButton_Click_withCoords(world, me.dialogToShow, '0 0 0', eX * conwidth + eY * conheight); + me.dialogToShow = NULL; + } +} void DemoButton_Click(entity me, entity other) { - if(me.text == "Do not press this button again!") + if(me.text == _("Do not press this button again!")) DialogOpenButton_Click(me, other); else - me.setText(me, "Do not press this button again!"); + me.setText(me, _("Do not press this button again!")); } void MainWindow_configureMainWindow(entity me) { entity n, i; + me.firstRunDialog = i = spawnXonoticFirstRunDialog(); + i.configureDialog(i); + me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + i = spawnXonoticTeamSelectDialog(); i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); @@ -173,6 +190,9 @@ void MainWindow_configureMainWindow(entity me) me.moveItemAfter(me, n, NULL); me.initializeDialog(me, n); + + if(cvar_string("_cl_name") == "Player") + me.dialogToShow = me.firstRunDialog; } #endif diff --git a/qcsrc/menu/xonotic/maplist.c b/qcsrc/menu/xonotic/maplist.c index 8b5ce6d6a7..1390ff3b1a 100644 --- a/qcsrc/menu/xonotic/maplist.c +++ b/qcsrc/menu/xonotic/maplist.c @@ -275,20 +275,22 @@ void MapList_LoadMap(entity btn, entity me) m = MapInfo_BSPName_ByID(i); if not(m) { - print("Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n"); + print(_("Huh? Can't play this (m is NULL). Refiltering so this won't happen again.\n")); + me.refilter(me); return; } if(MapInfo_CheckMap(m)) { localcmd("\nmenu_loadmap_prepare\n"); if(cvar("menu_use_default_hostname")) - localcmd("hostname \"", strdecolorize(cvar_string("_cl_name")), "'s Xonotic server\"\n"); + localcmd("hostname \"", sprintf(_("%s's Xonotic Server"), strdecolorize(cvar_string("_cl_name"))), "\"\n"); MapInfo_LoadMap(m); } else { - print("Huh? Can't play this (invalid game type). Refiltering so this won't happen again.\n"); + print(_("Huh? Can't play this (invalid game type). Refiltering so this won't happen again.\n")); me.refilter(me); + return; } } diff --git a/qcsrc/menu/xonotic/playermodel.c b/qcsrc/menu/xonotic/playermodel.c index bbef3a6b1c..ef02224dfa 100644 --- a/qcsrc/menu/xonotic/playermodel.c +++ b/qcsrc/menu/xonotic/playermodel.c @@ -47,7 +47,7 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me) float sortbuf, glob, i; string fn; - glob = search_begin(get_model_datafilename(string_null, -1, "txt"), TRUE, TRUE); + glob = search_begin(language_filename(get_model_datafilename(string_null, -1, "txt")), TRUE, TRUE); if (glob < 0) return; @@ -77,11 +77,11 @@ void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me) bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN, ftos(get_model_parameters_modelskin)); get_model_parameters_desc = strcat(get_model_parameters_desc, "\n"); if(get_model_parameters_sex) - get_model_parameters_desc = strcat(get_model_parameters_desc, "\nSex: ", get_model_parameters_sex); + get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nSex: %s", get_model_parameters_sex)); if(get_model_parameters_weight) - get_model_parameters_desc = strcat(get_model_parameters_desc, "\nWeight: ", ftos(get_model_parameters_weight), " kg"); + get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nWeight: %g kg", get_model_parameters_weight)); if(get_model_parameters_age) - get_model_parameters_desc = strcat(get_model_parameters_desc, "\nAge: ", ftos(get_model_parameters_age)); + get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nAge: %g", get_model_parameters_age)); while(substring(get_model_parameters_desc, -1, 1) == "\n") get_model_parameters_desc = substring(get_model_parameters_desc, 0, -2); bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_DESC, get_model_parameters_desc); @@ -171,7 +171,7 @@ void XonoticPlayerModelSelector_draw(entity me) if (me.numModels <= 0) { - draw_CenterText('0.5 0.5 0', "<no model found>", me.realFontSize, '1 1 1', 0.6, FALSE); + draw_CenterText('0.5 0.5 0', _("<no model found>"), me.realFontSize, '1 1 1', 0.6, FALSE); return; } diff --git a/qcsrc/menu/xonotic/rootdialog.c b/qcsrc/menu/xonotic/rootdialog.c index efc00822d8..e8c9db364e 100644 --- a/qcsrc/menu/xonotic/rootdialog.c +++ b/qcsrc/menu/xonotic/rootdialog.c @@ -3,7 +3,7 @@ CLASS(XonoticRootDialog) EXTENDS(XonoticDialog) // still to be customized by user /* ATTRIB(XonoticDialog, closable, float, 1) - ATTRIB(XonoticDialog, title, string, "Form1") // ;) + ATTRIB(XonoticDialog, title, string, _("Form1")) // ;) ATTRIB(XonoticDialog, color, vector, '1 0.5 1') ATTRIB(XonoticDialog, intendedWidth, float, 0) ATTRIB(XonoticDialog, rows, float, 3) diff --git a/qcsrc/menu/xonotic/serverlist.c b/qcsrc/menu/xonotic/serverlist.c index 3d5d3e843c..3cd3338bc7 100644 --- a/qcsrc/menu/xonotic/serverlist.c +++ b/qcsrc/menu/xonotic/serverlist.c @@ -107,6 +107,8 @@ float IsFavorite(string srv) if(srv == "") return FALSE; srv = netaddress_resolve(srv, 26000); + if(srv == "") + return FALSE; p = crypto_getidfp(srv); n = tokenize_console(cvar_string("net_slist_favorites")); for(i = 0; i < n; ++i) @@ -352,9 +354,9 @@ void XonoticServerList_draw(entity me) if(me.ipAddressBox.focused || me.ipAddressBoxFocused < 0) { if(IsFavorite(me.ipAddressBox.text)) - me.favoriteButton.setText(me.favoriteButton, "Remove"); + me.favoriteButton.setText(me.favoriteButton, _("Remove")); else - me.favoriteButton.setText(me.favoriteButton, "Bookmark"); + me.favoriteButton.setText(me.favoriteButton, _("Bookmark")); } me.ipAddressBoxFocused = me.ipAddressBox.focused; } @@ -502,7 +504,7 @@ void XonoticServerList_resizeNotify(entity me, vector relOrigin, vector relSize, me.columnPingSize = me.realFontSize_x * 3; me.columnMapSize = me.realFontSize_x * 10; me.columnTypeSize = me.realFontSize_x * 4; - me.columnPlayersSize = me.realFontSize_x * 4; + me.columnPlayersSize = me.realFontSize_x * 5; me.columnNameSize = 1 - me.columnPlayersSize - me.columnMapSize - me.columnPingSize - me.columnIconsSize - me.columnTypeSize - 5 * me.realFontSize_x; me.columnPingOrigin = me.columnIconsOrigin + me.columnIconsSize + me.realFontSize_x; me.columnNameOrigin = me.columnPingOrigin + me.columnPingSize + me.realFontSize_x; @@ -510,11 +512,11 @@ void XonoticServerList_resizeNotify(entity me, vector relOrigin, vector relSize, me.columnTypeOrigin = me.columnMapOrigin + me.columnMapSize + me.realFontSize_x; me.columnPlayersOrigin = me.columnTypeOrigin + me.columnTypeSize + me.realFontSize_x; - me.positionSortButton(me, me.sortButton1, me.columnPingOrigin, me.columnPingSize, "Ping", ServerList_PingSort_Click); - me.positionSortButton(me, me.sortButton2, me.columnNameOrigin, me.columnNameSize, "Host name", ServerList_NameSort_Click); - me.positionSortButton(me, me.sortButton3, me.columnMapOrigin, me.columnMapSize, "Map", ServerList_MapSort_Click); - me.positionSortButton(me, me.sortButton4, me.columnTypeOrigin, me.columnTypeSize, "Type", ServerList_TypeSort_Click); - me.positionSortButton(me, me.sortButton5, me.columnPlayersOrigin, me.columnPlayersSize, "Players", ServerList_PlayerSort_Click); + me.positionSortButton(me, me.sortButton1, me.columnPingOrigin, me.columnPingSize, _("Ping"), ServerList_PingSort_Click); + me.positionSortButton(me, me.sortButton2, me.columnNameOrigin, me.columnNameSize, _("Host name"), ServerList_NameSort_Click); + me.positionSortButton(me, me.sortButton3, me.columnMapOrigin, me.columnMapSize, _("Map"), ServerList_MapSort_Click); + me.positionSortButton(me, me.sortButton4, me.columnTypeOrigin, me.columnTypeSize, _("Type"), ServerList_TypeSort_Click); + me.positionSortButton(me, me.sortButton5, me.columnPlayersOrigin, me.columnPlayersSize, _("Players"), ServerList_PlayerSort_Click); float f; f = me.currentSortField; @@ -707,8 +709,11 @@ float XonoticServerList_keyDown(entity me, float scan, float ascii, float shift) } else if(scan == K_MOUSE2 || scan == K_SPACE) { - main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem); - DialogOpenButton_Click_withCoords(me, main.serverInfoDialog, org, sz); + if(me.nItems != 0) + { + main.serverInfoDialog.loadServerInfo(main.serverInfoDialog, me.selectedItem); + DialogOpenButton_Click_withCoords(me, main.serverInfoDialog, org, sz); + } } else if(scan == K_INS || scan == K_MOUSE3 || scan == K_KP_INS) { diff --git a/qcsrc/menu/xonotic/skinlist.c b/qcsrc/menu/xonotic/skinlist.c index 864b3054a5..bb01f974cb 100644 --- a/qcsrc/menu/xonotic/skinlist.c +++ b/qcsrc/menu/xonotic/skinlist.c @@ -102,10 +102,10 @@ void XonoticSkinList_getSkins(entity me) { s = search_getfilename(glob, i); bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_NAME, substring(s, 9, strlen(s) - 24)); // the * part - bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_TITLE, "<TITLE>"); - bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_AUTHOR, "<AUTHOR>"); + bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_TITLE, _("<TITLE>")); + bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_AUTHOR, _("<AUTHOR>")); bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_PREVIEW, strcat("/gfx/menu/", substring(s, 9, strlen(s) - 24), "/skinpreview")); - fh = fopen(s, FILE_READ); + fh = fopen(language_filename(s), FILE_READ); if(fh < 0) { print("Warning: can't open skinvalues.txt file\n"); @@ -160,7 +160,7 @@ void XonoticSkinList_drawListBoxItem(entity me, float i, vector absSize, float i draw_Picture(me.columnPreviewOrigin * eX, s, me.columnPreviewSize * eX + eY, '1 1 1', 1); s = me.skinParameter(me, i, SKINPARM_NAME); - s = strcat(s, ": ", me.skinParameter(me, i, SKINPARM_TITLE)); + s = sprintf(_("%s: %s"), s, me.skinParameter(me, i, SKINPARM_TITLE)); s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize); draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_SKINLIST_TITLE, SKINALPHA_TEXT, 0); diff --git a/qcsrc/menu/xonotic/slider_decibels.c b/qcsrc/menu/xonotic/slider_decibels.c index 0e4b4e3720..24edb4cb91 100644 --- a/qcsrc/menu/xonotic/slider_decibels.c +++ b/qcsrc/menu/xonotic/slider_decibels.c @@ -47,10 +47,10 @@ void XonoticDecibelsSlider_saveCvars(entity me) string XonoticDecibelsSlider_valueToText(entity me, float v) { if(v < -33) - return "OFF"; + return CTX(_("VOL^OFF")); else if(v >= -0.1) - return "MAX"; - return strcat(SUPER(XonoticDecibelsSlider).valueToText(me, v), " dB"); + return CTX(_("VOL^MAX")); + return sprintf(_("%s dB"), SUPER(XonoticDecibelsSlider).valueToText(me, v)); } #endif diff --git a/qcsrc/menu/xonotic/slider_picmip.c b/qcsrc/menu/xonotic/slider_picmip.c index af278dfd1f..ddedc4bab2 100644 --- a/qcsrc/menu/xonotic/slider_picmip.c +++ b/qcsrc/menu/xonotic/slider_picmip.c @@ -26,13 +26,15 @@ float texmemsize(float s3tc) { return ( - 2500 * pow(0.5, max(0, cvar("gl_picmip") + cvar("gl_picmip_other"))) - + 1500 * pow(0.5, max(0, cvar("gl_picmip") + cvar("gl_picmip_world"))) - ) * (s3tc && ((cvar("r_texture_dds_load") || cvar("gl_texturecompression")) ? 0.2 : 1.0)); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average + 2500 * pow(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_other"))) + + 1500 * pow(0.25, max(0, cvar("gl_picmip") + cvar("gl_picmip_world"))) + ) * ((s3tc && (cvar("r_texture_dds_load") || cvar("gl_texturecompression"))) ? 0.2 : 1.0); // TC: normalmaps 50%, other 25%, few incompressible, guessing 40% as conservative average } void XonoticPicmipSlider_autofix(entity me) { float max_hard, max_soft; + if(cvar("menu_picmip_bypass")) + return; max_hard = cvar("sys_memsize_virtual"); max_soft = cvar("sys_memsize_physical"); if(max_hard > 0) diff --git a/qcsrc/menu/xonotic/slider_resolution.c b/qcsrc/menu/xonotic/slider_resolution.c index de34a410d9..d5d013048e 100644 --- a/qcsrc/menu/xonotic/slider_resolution.c +++ b/qcsrc/menu/xonotic/slider_resolution.c @@ -62,7 +62,7 @@ entity makeXonoticResolutionSlider() } void XonoticResolutionSlider_addResolution(entity me, float w, float h, float pixelheight) { - me.addValue(me, strzone(strcat(ftos(w), "x", ftos(h))), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight)))); + me.addValue(me, strzone(sprintf(_("%dx%d"), w, h)), strzone(strcat(ftos(w), " ", ftos(h), " ", ftos(pixelheight)))); // FIXME (in case you ever want to dynamically instantiate this): THIS IS NEVER FREED } void XonoticResolutionSlider_configureXonoticResolutionSlider(entity me) @@ -83,11 +83,24 @@ void XonoticResolutionSlider_configureXonoticResolutionSlider(entity me) if(r == r0) continue; r0 = r; - if(r_x < 640 || r_y < 400) + if(r_x < 640 || r_y < 480) + continue; + if(r_x > 2 * r_y) // likely dualscreen resolution, skip this one continue; me.addResolution(me, r_x, r_y, r_z); } + if(me.nValues == 0) + { + me.addResolution(me, 640, 480, 1); + me.addResolution(me, 800, 600, 1); + me.addResolution(me, 1024, 768, 1); + me.addResolution(me, 1280, 960, 1); + me.addResolution(me, 1280, 1024, 1); + me.addResolution(me, 1650, 1080, 1); + me.addResolution(me, 1920, 1080, 1); + } + me.configureXonoticTextSliderValues(me); } void XonoticResolutionSlider_loadCvars(entity me) diff --git a/qcsrc/menu/xonotic/util.qc b/qcsrc/menu/xonotic/util.qc index 3bfdb85525..4ca1bdc667 100644 --- a/qcsrc/menu/xonotic/util.qc +++ b/qcsrc/menu/xonotic/util.qc @@ -11,11 +11,12 @@ float GL_Have_TextureCompression() float tooltipdb; void loadTooltips() { - tooltipdb = db_load("tooltips.db"); + tooltipdb = db_load(language_filename("tooltips.db")); } void unloadTooltips() { - db_close(tooltipdb); + if(tooltipdb >= 0) + db_close(tooltipdb); tooltipdb = -1; } string getZonedTooltipForIdentifier(string s) @@ -23,14 +24,20 @@ string getZonedTooltipForIdentifier(string s) string t; if(s == "" || tooltipdb < 0) return string_null; - t = db_get(tooltipdb, s); - if(t == "-") - return string_null; - if(t != "") - return strzone(t); - t = cvar_description(s); - if(t != "" && t != "custom cvar") - return strzone(t); + if(tooltipdb >= 0) + { + t = db_get(tooltipdb, s); + if(t == "-") + return string_null; + if(t != "") + return strzone(t); + } + if(prvm_language == "en" || prvm_language == "") + { + t = cvar_description(s); + if(t != "" && t != "custom cvar") + return strzone(t); + } dprint("WARNING: no tooltip set for ", s, "\n"); return string_null; } @@ -266,7 +273,7 @@ void URI_Get_Callback(float id, float status, string data) } else { - print("Received HTTP request data for an invalid id ", ftos(id), ".\n"); + print(sprintf(_("Received HTTP request data for an invalid id %d.\n"), id)); } } @@ -276,22 +283,22 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) if(_Nex_ExtResponseSystem_UpdateTo) { - print("error: UpdateNotification_URI_Get_Callback has been called before\n"); + dprint("error: UpdateNotification_URI_Get_Callback has been called before\n"); return; } if(status != 0) { - print(sprintf("error receiving update notification: status is %d\n", status)); + print(sprintf(_("error receiving update notification: status is %d\n"), status)); return; } if(substring(data, 0, 1) == "<") { - print("error: received HTML instead of an update notification\n"); + print(_("error: received HTML instead of an update notification\n")); return; } if(strstrofs(data, "\r", 0) != -1) { - print("error: received carriage returns from update notification server\n"); + print(_("error: received carriage returns from update notification server\n")); return; } @@ -312,7 +319,7 @@ void UpdateNotification_URI_Get_Callback(float id, float status, string data) { // update needed if(n >= 2) - print(sprintf("Update can be downloaded at:\n%s\n", argv(1))); + print(sprintf(_("Update can be downloaded at:\n%s\n"), argv(1))); } _Nex_ExtResponseSystem_UpdateTo = strzone(_Nex_ExtResponseSystem_UpdateTo); @@ -333,7 +340,7 @@ float preMenuInit() draw_reset_cropped(); sz = eX * 0.025 + eY * 0.025 * (draw_scale_x / draw_scale_y); - draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, "Autogenerating mapinfo for newly added maps...", sz, '1 1 1', 1, 0); + draw_CenterText('0.5 0.5 0' - 1.25 * sz_y * eY, _("Autogenerating mapinfo for newly added maps..."), sz, '1 1 1', 1, 0); boxA = '0.05 0.5 0' + 0.25 * sz_y * eY; boxB = '0.95 0.5 0' + 1.25 * sz_y * eY; @@ -420,7 +427,7 @@ void preMenuDraw() // TODO rather turn this into a dialog fs = ((1/draw_scale_x) * eX + (1/draw_scale_y) * eY) * 12; line = eY * fs_y; - sz_x = draw_TextWidth(" http://www.xonotic.com/ ", 0, fs); + sz_x = draw_TextWidth(" http://www.xonotic.org/ ", 0, fs); sz_y = 3 * fs_y; draw_alpha = sin(time * 0.112 - 0.3) * 10; @@ -428,7 +435,7 @@ void preMenuDraw() + eY * (0.5 + 0.5 * (1 - sz_y) * sin(time * 0.071)); draw_Fill(mid - 0.5 * sz, sz, '1 1 0', 1); - draw_CenterText(mid - 1 * line, strcat("Update to ", _Nex_ExtResponseSystem_UpdateTo, " now!"), fs, '1 0 0', 1, 0); + draw_CenterText(mid - 1 * line, sprintf(_("Update to %s now!"), _Nex_ExtResponseSystem_UpdateTo), fs, '1 0 0', 1, 0); draw_CenterText(mid - 0 * line, "http://www.xonotic.org/", fs, '0 0 1', 1, 0); } if not(campaign_name_previous) @@ -505,7 +512,7 @@ float updateCompression() cvar_set("gl_texturecompression", "1"); cvar_set("r_texture_dds_load", "1"); if(!can_dds) - print("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.\n"); + print(_("^1ERROR: Texture compression is required but not supported.\n^1Expect visual problems.\n")); return 0; } else @@ -524,3 +531,133 @@ float updateCompression() } } } + +// note: include only those that should be in the menu! +#define GAMETYPES \ + GAMETYPE(MAPINFO_TYPE_ARENA, _("Arena")) \ + GAMETYPE(MAPINFO_TYPE_ASSAULT, _("Assault")) \ + GAMETYPE(MAPINFO_TYPE_CTF, _("Capture The Flag")) \ + GAMETYPE(MAPINFO_TYPE_CA, _("Clan Arena")) \ + GAMETYPE(MAPINFO_TYPE_DEATHMATCH, _("Deathmatch")) \ + GAMETYPE(MAPINFO_TYPE_DOMINATION, _("Domination")) \ + GAMETYPE(MAPINFO_TYPE_FREEZETAG, _("Freeze Tag")) \ + GAMETYPE(MAPINFO_TYPE_KEEPAWAY, _("Keepaway")) \ + GAMETYPE(MAPINFO_TYPE_KEYHUNT, _("Key Hunt")) \ + GAMETYPE(MAPINFO_TYPE_LMS, _("Last Man Standing")) \ + GAMETYPE(MAPINFO_TYPE_NEXBALL, _("Nexball")) \ + GAMETYPE(MAPINFO_TYPE_ONSLAUGHT, _("Onslaught")) \ + GAMETYPE(MAPINFO_TYPE_RACE, _("Race")) \ + GAMETYPE(MAPINFO_TYPE_CTS, _("Race CTS")) \ + GAMETYPE(MAPINFO_TYPE_RUNEMATCH, _("Runematch")) \ + GAMETYPE(MAPINFO_TYPE_TEAM_DEATHMATCH, _("Team Deathmatch")) \ + /* nothing */ + +float GameType_GetID(float cnt) +{ + float i; + i = 0; +#define GAMETYPE(id,name) if(i++ == cnt) return id; + GAMETYPES +#undef GAMETYPE + return 0; +} +string GameType_GetName(float cnt) +{ + float i; + i = 0; +#define GAMETYPE(id,name) if(i++ == cnt) return name; + GAMETYPES +#undef GAMETYPE + return _("@!#%'n Tuba Throwing"); +} +float GameType_GetCount() +{ + float i; + i = 0; +#define GAMETYPE(id,name) ++i; + GAMETYPES +#undef GAMETYPE + return i; +} + +string language_filename(string s) +{ + string fn; + float fh; + fn = prvm_language; + if(fn == "" || fn == "dump") + return s; + fn = strcat(s, ".", fn); + if((fh = fopen(fn, FILE_READ)) >= 0) + { + fclose(fh); + return fn; + } + return s; +} +string CTX(string s) +{ + float p = strstrofs(s, "^", 0); + if(p < 0) + return s; + return substring(s, p+1, -1); +} + +void dialog_hudpanel_common_notoggle(entity me, string panelname) +{ + float i; + entity e; + + me.TR(me); + me.TD(me, 1, 1.4, e = makeXonoticTextLabel(0, _("Background:"))); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg")))); + e.addValue(e, _("Default"), ""); + e.addValue(e, _("Disable"), "0"); + e.addValue(e, strzone(strcat("border_", panelname)), strzone(strcat("border_", panelname))); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Color:"))); + me.TD(me, 2, 2.6, e = makeXonoticColorpickerString(strzone(strcat("hud_panel_", panelname, "_bg_color")), "hud_panel_bg_color")); + setDependentStringNotEqual(e, strzone(strcat("hud_panel_", panelname, "_bg_color")), ""); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.0, e = makeXonoticCheckBoxString("", "1 1 1", strzone(strcat("hud_panel_", panelname, "_bg_color")), _("Use default"))); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Border size:"))); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_border")))); + e.addValue(e, _("Default"), ""); + e.addValue(e, _("Disable"), "0"); + for(i = 1; i <= 10; ++i) + e.addValue(e, strzone(ftos_decimals(i * 2, 0)), strzone(ftos(i * 2))); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Alpha:"))); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_alpha")))); + e.addValue(e, _("Default"), ""); + for(i = 1; i <= 10; ++i) + e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Team Color:"))); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_color_team")))); + e.addValue(e, _("Default"), ""); + e.addValue(e, _("Disable"), "0"); + for(i = 1; i <= 10; ++i) + e.addValue(e, strzone(ftos_decimals(i/10, 1)), strzone(ftos(i/10))); + e.configureXonoticTextSliderValues(e); + me.TR(me); + me.TDempty(me, 0.4); + me.TD(me, 1, 3.6, e = makeXonoticCheckBox(0, "hud_configure_teamcolorforced", _("Test team color in configure mode"))); + me.TR(me); + me.TDempty(me, 0.2); + me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Padding:"))); + me.TD(me, 1, 2.6, e = makeXonoticTextSlider(strzone(strcat("hud_panel_", panelname, "_bg_padding")))); + e.addValue(e, _("Default"), ""); + for(i = 0; i <= 10; ++i) + e.addValue(e, strzone(ftos_decimals(i - 5, 0)), strzone(ftos(i - 5))); + e.configureXonoticTextSliderValues(e); +} diff --git a/qcsrc/menu/xonotic/util.qh b/qcsrc/menu/xonotic/util.qh index 03f0d8db7d..c8c7410d6e 100644 --- a/qcsrc/menu/xonotic/util.qh +++ b/qcsrc/menu/xonotic/util.qh @@ -34,3 +34,21 @@ float URI_GET_CURL_END = 9; void Curl_URI_Get_Callback(float id, float status, string data); void URI_Get_Callback(float id, float status, string data); + +// game type list box stuff (does not NEED to contain all game types, other +// types stay available via console) +float GameType_GetID(float cnt); +string GameType_GetName(float cnt); +float GameType_GetCount(); + +void dialog_hudpanel_common_notoggle(entity me, string panelname); +#define DIALOG_HUDPANEL_COMMON_NOTOGGLE() \ + dialog_hudpanel_common_notoggle(me, panelname) +#define DIALOG_HUDPANEL_COMMON() \ + me.TR(me); \ + me.TD(me, 1, 4, e = makeXonoticCheckBox(0, strzone(strcat("hud_panel_", panelname)), _("Enable panel"))); \ + DIALOG_HUDPANEL_COMMON_NOTOGGLE() + +string language_filename(string s); +string CTX(string s); +#define ZCTX(s) strzone(CTX(s)) diff --git a/qcsrc/server/anticheat.qc b/qcsrc/server/anticheat.qc index 284e72be94..d00c60b09d 100644 --- a/qcsrc/server/anticheat.qc +++ b/qcsrc/server/anticheat.qc @@ -153,7 +153,7 @@ void anticheat_prethink() self.anticheat_div0_evade_offset = 0; } -string anticheat_display(float f, float mi, float ma) +string anticheat_display(float f, float tmin, float mi, float ma) { string s; s = ftos(f); @@ -169,10 +169,10 @@ void anticheat_report() if(!autocvar_sv_eventlog) return; GameLogEcho(strcat(":anticheat:_time:", ftos(self.playerid), ":", ftos(servertime - self.anticheat_jointime))); - GameLogEcho(strcat(":anticheat:speedhack:", ftos(self.playerid), ":", ftos(MEAN_EVALUATE(anticheat_speedhack)))); - GameLogEcho(strcat(":anticheat:div0_strafebot_old:", ftos(self.playerid), ":", ftos(MEAN_EVALUATE(anticheat_div0_strafebot_old)))); - GameLogEcho(strcat(":anticheat:div0_strafebot_new:", ftos(self.playerid), ":", ftos(MEAN_EVALUATE(anticheat_div0_strafebot_new)))); - GameLogEcho(strcat(":anticheat:div0_evade:", ftos(self.playerid), ":", anticheat_display(MEAN_EVALUATE(anticheat_div0_evade), 0.15, 0.3))); + GameLogEcho(strcat(":anticheat:speedhack:", ftos(self.playerid), ":", anticheat_display(MEAN_EVALUATE(anticheat_speedhack), 240, 0.1, 0.15))); + GameLogEcho(strcat(":anticheat:div0_strafebot_old:", ftos(self.playerid), ":", anticheat_display(MEAN_EVALUATE(anticheat_div0_strafebot_old), 120, 0.3, 0.4))); + GameLogEcho(strcat(":anticheat:div0_strafebot_new:", ftos(self.playerid), ":", anticheat_display(MEAN_EVALUATE(anticheat_div0_strafebot_new), 120, 0.3, 0.4))); + GameLogEcho(strcat(":anticheat:div0_evade:", ftos(self.playerid), ":", anticheat_display(MEAN_EVALUATE(anticheat_div0_evade), 120, 0.1, 0.2))); } void anticheat_serverframe() diff --git a/qcsrc/server/autocvars.qh b/qcsrc/server/autocvars.qh index fb1b6ee8ab..e791e71440 100644 --- a/qcsrc/server/autocvars.qh +++ b/qcsrc/server/autocvars.qh @@ -109,6 +109,7 @@ float autocvar_g_balance_sniperrifle_secondary_damage; float autocvar_g_balance_sniperrifle_secondary_force; float autocvar_g_balance_sniperrifle_secondary_headshotaddeddamage; float autocvar_g_balance_sniperrifle_secondary_lifetime; +float autocvar_g_balance_sniperrifle_secondary_reload; float autocvar_g_balance_sniperrifle_secondary_refire; float autocvar_g_balance_sniperrifle_secondary_speed; float autocvar_g_balance_sniperrifle_secondary_spread; @@ -121,6 +122,7 @@ float autocvar_g_balance_crylink_primary_bounces; float autocvar_g_balance_crylink_primary_damage; float autocvar_g_balance_crylink_primary_edgedamage; float autocvar_g_balance_crylink_primary_force; +float autocvar_g_balance_crylink_primary_joindelay; float autocvar_g_balance_crylink_primary_joinexplode; float autocvar_g_balance_crylink_primary_joinexplode_damage; float autocvar_g_balance_crylink_primary_joinexplode_edgedamage; @@ -146,6 +148,7 @@ float autocvar_g_balance_crylink_secondary_bounces; float autocvar_g_balance_crylink_secondary_damage; float autocvar_g_balance_crylink_secondary_edgedamage; float autocvar_g_balance_crylink_secondary_force; +float autocvar_g_balance_crylink_secondary_joindelay; float autocvar_g_balance_crylink_secondary_joinexplode; float autocvar_g_balance_crylink_secondary_joinexplode_damage; float autocvar_g_balance_crylink_secondary_joinexplode_edgedamage; @@ -388,6 +391,7 @@ float autocvar_g_balance_laser_primary_damage; float autocvar_g_balance_laser_primary_delay; float autocvar_g_balance_laser_primary_edgedamage; float autocvar_g_balance_laser_primary_force; +float autocvar_g_balance_laser_primary_force_other_scale; float autocvar_g_balance_laser_primary_force_velocitybias; float autocvar_g_balance_laser_primary_force_zscale; float autocvar_g_balance_laser_primary_lifetime; @@ -400,6 +404,7 @@ float autocvar_g_balance_laser_secondary_animtime; float autocvar_g_balance_laser_secondary_damage; float autocvar_g_balance_laser_secondary_edgedamage; float autocvar_g_balance_laser_secondary_force; +float autocvar_g_balance_laser_secondary_force_other_scale; float autocvar_g_balance_laser_secondary_force_velocitybias; float autocvar_g_balance_laser_secondary_force_zscale; float autocvar_g_balance_laser_secondary_lifetime; @@ -619,6 +624,7 @@ float autocvar_g_balance_tuba_refire; float autocvar_g_balance_uzi_bulletconstant; float autocvar_g_balance_uzi_burst; float autocvar_g_balance_uzi_burst_ammo; +float autocvar_g_balance_uzi_burst_animtime; float autocvar_g_balance_uzi_burst_refire; float autocvar_g_balance_uzi_burst_refire2; float autocvar_g_balance_uzi_burst_spread; @@ -719,10 +725,12 @@ float autocvar_g_freezetag_frozen_force; float autocvar_g_freezetag_point_leadlimit; float autocvar_g_freezetag_point_limit; float autocvar_g_freezetag_revive_extra_size; -float autocvar_g_freezetag_revive_time; +float autocvar_g_freezetag_revive_speed; +float autocvar_g_freezetag_revive_clearspeed; float autocvar_g_freezetag_warmup; #define autocvar_g_friendlyfire cvar("g_friendlyfire") #define autocvar_g_friendlyfire_virtual cvar("g_friendlyfire_virtual") +#define autocvar_g_friendlyfire_virtual_force cvar("g_friendlyfire_virtual_force") float autocvar_g_full_getstatus_responses; float autocvar_g_fullbrightitems; float autocvar_g_fullbrightplayers; @@ -738,19 +746,23 @@ float autocvar_g_jetpack_attenuation; float autocvar_g_jetpack_fuel; float autocvar_g_jetpack_maxspeed_side; float autocvar_g_jetpack_maxspeed_up; -float autocvar_g_keepaway_ballcarrier_alpha; +float autocvar_g_keepaway_ballcarrier_effects; float autocvar_g_keepaway_ballcarrier_damage; float autocvar_g_keepaway_ballcarrier_force; float autocvar_g_keepaway_ballcarrier_highspeed; float autocvar_g_keepaway_ballcarrier_selfdamage; float autocvar_g_keepaway_ballcarrier_selfforce; -float autocvar_g_keepaway_bckillscore; float autocvar_g_keepaway_noncarrier_damage; float autocvar_g_keepaway_noncarrier_force; float autocvar_g_keepaway_noncarrier_selfdamage; float autocvar_g_keepaway_noncarrier_selfforce; float autocvar_g_keepaway_noncarrier_warn; +float autocvar_g_keepaway_score_bckill; +float autocvar_g_keepaway_score_killac; +float autocvar_g_keepaway_score_timepoints; +float autocvar_g_keepaway_score_timeinterval; float autocvar_g_keepawayball_damageforcescale; +float autocvar_g_keepawayball_effects; float autocvar_g_keepawayball_respawntime; float autocvar_g_keepawayball_trail_color; float autocvar_g_keyhunt_point_leadlimit; @@ -857,6 +869,7 @@ float autocvar_g_player_alpha; float autocvar_g_player_brightness; float autocvar_g_playerclip_collisions; string autocvar_g_playerstats_uri; +float autocvar_g_playerstats_debug; float autocvar_g_powerup_shield; float autocvar_g_powerup_strength; float autocvar_g_powerup_superhealth; @@ -1181,3 +1194,4 @@ float autocvar_timelimit_suddendeath; float autocvar_waypoint_benchmark; float autocvar_welcome_message_time; float autocvar_sv_gameplayfix_gravityunaffectedbyticrate; +float autocvar_g_trueaim_minrange; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index cb2d2ed3de..36c2347320 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1065,6 +1065,8 @@ void PutClientInServer (void) self.cnt = self.switchweapon; self.weapon = 0; + self.wish_reload = 0; + if(!self.alivetime) self.alivetime = time; } else if(self.classname == "observer" || (g_ca && !allowed_to_spawn)) { @@ -1108,6 +1110,7 @@ float ClientInit_SendEntity(entity to, float sf) WriteByte(MSG_ENTITY, autocvar_g_balance_sniperrifle_secondary); // client has to know if it should zoom or not WriteByte(MSG_ENTITY, serverflags); // client has to know if it should zoom or not WriteByte(MSG_ENTITY, autocvar_g_balance_sniperrifle_magazinecapacity); // rifle max bullets + WriteCoord(MSG_ENTITY, autocvar_g_trueaim_minrange); return TRUE; } @@ -1365,7 +1368,7 @@ void ClientKill (void) { // do nothing } - else if(g_freezetag && self.freezetag_frozen == 1) + else if(self.freezetag_frozen) { // do nothing } @@ -2040,7 +2043,7 @@ void player_powerups (void) self.modelflags &~= MF_ROCKET; } - self.effects &~= (EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST); + self.effects &~= (EF_DIMLIGHT | EF_RED | EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT | EF_FLAME | EF_NODEPTHTEST); if(!self.modelindex || self.deadflag) // don't apply the flags if the player is gibbed return; diff --git a/qcsrc/server/cl_physics.qc b/qcsrc/server/cl_physics.qc index 7a93468d92..a2773fedfd 100644 --- a/qcsrc/server/cl_physics.qc +++ b/qcsrc/server/cl_physics.qc @@ -23,7 +23,7 @@ When you press the jump key */ void PlayerJump (void) { - if(g_freezetag && self.freezetag_frozen) + if(self.freezetag_frozen) return; // no jumping in freezetag when frozen float mjumpheight; diff --git a/qcsrc/server/cl_player.qc b/qcsrc/server/cl_player.qc index bac718356b..ca0b2d4a16 100644 --- a/qcsrc/server/cl_player.qc +++ b/qcsrc/server/cl_player.qc @@ -325,11 +325,14 @@ void SpawnThrownWeapon (vector org, float w) { if(self.weapons & W_WeaponBit(j)) if(W_IsWeaponThrowable(j)) - W_ThrowNewWeapon(self, j, FALSE, self.origin, randomvec() * 175 + '0 0 325'); + W_ThrowNewWeapon(self, j, FALSE, org, randomvec() * 175 + '0 0 325'); } } else - W_ThrowWeapon(randomvec() * 125 + '0 0 200', org - self.origin, FALSE); + { + if(W_IsWeaponThrowable(self.weapon)) + W_ThrowNewWeapon(self, self.weapon, FALSE, org, randomvec() * 125 + '0 0 200'); + } } void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force) diff --git a/qcsrc/server/cl_weapons.qc b/qcsrc/server/cl_weapons.qc index 6de63b9377..864dd77fce 100644 --- a/qcsrc/server/cl_weapons.qc +++ b/qcsrc/server/cl_weapons.qc @@ -1,8 +1,6 @@ void W_Reload() { - if(self.switchweapon == self.weapon) - if(self.weaponentity.state == WS_READY) - weapon_action(self.weapon, WR_RELOAD); + self.wish_reload = 1; } // switch between weapons @@ -236,6 +234,20 @@ string W_ThrowNewWeapon(entity own, float wpn, float doreduce, vector org, vecto float W_IsWeaponThrowable(float w) { float wb, wa; + + if (!autocvar_g_pickup_items) + return 0; + if (g_weaponarena) + return 0; + if (g_lms) + return 0; + if (g_ca) + return 0; + if (g_cts) + return 0; + if (g_nexball && w == WEP_GRENADE_LAUNCHER) + return 0; + wb = W_WeaponBit(w); if(!wb) return 0; @@ -265,25 +277,13 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) return; // just in case if(MUTATOR_CALLHOOK(ForbidThrowCurrentWeapon)) return; - if (g_weaponarena) - return; - if (g_lms) - return; - if (g_nexball && w == WEP_GRENADE_LAUNCHER) - return; - if (!autocvar_g_pickup_items) - return; - if (g_ca) - return; - if (g_cts) - return; if(!autocvar_g_weapon_throwable) return; if(autocvar_g_weapon_stay == 1) return; - if(!W_IsWeaponThrowable(w)) + if(self.weaponentity.state != WS_READY) return; - if(self.deadflag == DEAD_NO && self.weaponentity.state != WS_READY) + if(!W_IsWeaponThrowable(w)) return; wb = W_WeaponBit(w); @@ -295,13 +295,10 @@ void W_ThrowWeapon(vector velo, vector delta, float doreduce) a = W_ThrowNewWeapon(self, w, doreduce, self.origin + delta, velo); if not(a) return; - if(self.health >= 1) - { - if(a == "") - sprint(self, strcat("You dropped the ^2", W_Name(w), "\n")); - else - sprint(self, strcat("You dropped the ^2", W_Name(w), " with ", a, "\n")); - } + if(a == "") + sprint(self, strcat("You dropped the ^2", W_Name(w), "\n")); + else + sprint(self, strcat("You dropped the ^2", W_Name(w), " with ", a, "\n")); }; // Bringed back weapon frame diff --git a/qcsrc/server/cl_weaponsystem.qc b/qcsrc/server/cl_weaponsystem.qc index a1d6fed14c..057c5cb1dc 100644 --- a/qcsrc/server/cl_weaponsystem.qc +++ b/qcsrc/server/cl_weaponsystem.qc @@ -158,6 +158,10 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m v_right = vr; v_up = vu; + // un-adjust trueaim if shotend is too close + if(vlen(w_shotend - (ent.origin + ent.view_ofs)) < autocvar_g_trueaim_minrange) + w_shotend = ent.origin + ent.view_ofs + s_forward * autocvar_g_trueaim_minrange; + // track max damage if(accuracy_canbegooddamage(ent)) accuracy_add(ent, ent.weapon, maxdamage, 0); diff --git a/qcsrc/server/defs.qh b/qcsrc/server/defs.qh index bbd554f5e3..970c86af42 100644 --- a/qcsrc/server/defs.qh +++ b/qcsrc/server/defs.qh @@ -613,6 +613,7 @@ float client_cefc_accumulatortime; #endif .float sniperrifle_bulletcounter; +.float wish_reload; #define PROJECTILE_MAKETRIGGER(e) (e).solid = SOLID_CORPSE; (e).dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE // when doing this, hagar can go through clones @@ -658,7 +659,6 @@ float serverflags; .float team_forced; // can be a team number to force a team, or 0 for default action, or -1 for forced spectator .float freezetag_frozen; -.float freezetag_beginrevive_time; .float freezetag_revive_progress; .entity muzzle_flash; diff --git a/qcsrc/server/g_damage.qc b/qcsrc/server/g_damage.qc index 2ad648e5d7..e1ee570685 100644 --- a/qcsrc/server/g_damage.qc +++ b/qcsrc/server/g_damage.qc @@ -120,14 +120,12 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype) { // teamkill PlayerScore_Add(attacker, SP_KILLS, -1); // or maybe add a teamkills field? - PlayerStats_Event(attacker, PLAYERSTATS_KILLS, -1); } } else { // regular frag PlayerScore_Add(attacker, SP_KILLS, 1); - PlayerStats_Event(attacker, PLAYERSTATS_KILLS, 1); } PlayerScore_Add(targ, SP_DEATHS, 1); @@ -203,6 +201,8 @@ void GiveFrags (entity attacker, entity targ, float f, float deathtype) { if(!lms_next_place) lms_next_place = player_count; + else + lms_next_place = min(lms_next_place, player_count); PlayerScore_Add(targ, SP_LMS_RANK, lms_next_place); // won't ever spawn again --lms_next_place; } @@ -369,6 +369,8 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) // TODO: make these print a newline if they dont Send_CSQC_Centerprint(attacker, "", "", KILL_FIRST_BLOOD, MSG_KILL); Send_CSQC_Centerprint(targ, "", "", KILL_FIRST_VICTIM, MSG_KILL); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD, 1); + PlayerStats_Event(targ, PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM, 1); } if((autocvar_sv_fragmessage_information_typefrag) && (targ.BUTTON_CHAT)) { @@ -414,36 +416,43 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) { Send_KillNotification(a, "", "", KILL_SPREE_3, MSG_SPREE); AnnounceTo(attacker, "03kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3, 1); } else if (attacker.killcount == 5) { Send_KillNotification(a, "", "", KILL_SPREE_5, MSG_SPREE); AnnounceTo(attacker, "05kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5, 1); } else if (attacker.killcount == 10) { Send_KillNotification(a, "", "", KILL_SPREE_10, MSG_SPREE); AnnounceTo(attacker, "10kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_10, 1); } else if (attacker.killcount == 15) { Send_KillNotification(a, "", "", KILL_SPREE_15, MSG_SPREE); AnnounceTo(attacker, "15kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_15, 1); } else if (attacker.killcount == 20) { Send_KillNotification(a, "", "", KILL_SPREE_20, MSG_SPREE); AnnounceTo(attacker, "20kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_20, 1); } else if (attacker.killcount == 25) { Send_KillNotification(a, "", "", KILL_SPREE_25, MSG_SPREE); AnnounceTo(attacker, "25kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_25, 1); } else if (attacker.killcount == 30) { Send_KillNotification(a, "", "", KILL_SPREE_30, MSG_SPREE); AnnounceTo(attacker, "30kills"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_30, 1); } LogDeath("frag", deathtype, attacker, targ); } @@ -461,6 +470,7 @@ void Obituary (entity attacker, entity inflictor, entity targ, float deathtype) GiveFrags(targ, targ, -1, deathtype); if(PlayerScore_Add(targ, SP_SCORE, 0) == -5) { AnnounceTo(targ, "botlike"); + PlayerStats_Event(attacker, PLAYERSTATS_ACHIEVEMENT_BOTLIKE, 1); } Send_KillNotification(s, msg, "", deathtype, MSG_KILL_ACTION); @@ -602,7 +612,8 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float targ.dmg_save += v_y; targ.dmg_inflictor = inflictor; damage = 0; - force = '0 0 0'; + if(!autocvar_g_friendlyfire_virtual_force) + force = '0 0 0'; } } else @@ -778,7 +789,9 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float { if(damage > 0) { - if(attacker.weapon != WEP_ELECTRO && attacker.weapon != WEP_LASER || ((attacker.weapon == WEP_ELECTRO && autocvar_g_balance_electro_lightning || attacker.weapon == WEP_LASER) && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time)) + if(attacker.weapon != WEP_LASER + && (attacker.weapon != WEP_ELECTRO || !autocvar_g_balance_electro_lightning) + && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time) { if(targ.BUTTON_CHAT) attacker.typehitsound += 1; @@ -809,8 +822,12 @@ void Damage (entity targ, entity inflictor, entity attacker, float damage, float } else { - if(deathtype != DEATH_FIRE) + if(deathtype != DEATH_FIRE + && attacker.prevhitsound + autocvar_sv_hitsound_antispam_time < time) + { attacker.typehitsound += 1; + attacker.prevhitsound = time; + } if(mirrordamage > 0) if(time > attacker.teamkill_complain) { @@ -1020,33 +1037,47 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e // laser force adjustments :P if(DEATH_WEAPONOF(deathtype) == WEP_LASER) { - vector vel; - - float force_zscale; - float force_velocitybiasramp; - float force_velocitybias; - - force_velocitybiasramp = autocvar_sv_maxspeed; - if(deathtype & HITTYPE_SECONDARY) - { - force_zscale = autocvar_g_balance_laser_secondary_force_zscale; - force_velocitybias = autocvar_g_balance_laser_secondary_force_velocitybias; - } - else - { - force_zscale = autocvar_g_balance_laser_primary_force_zscale; - force_velocitybias = autocvar_g_balance_laser_primary_force_velocitybias; - } - - vel = targ.velocity; - vel_z = 0; - vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias; - force = - vlen(force) - * - normalize(normalize(force) + vel); - - force_z *= force_zscale; + if (targ == attacker) + { + vector vel; + + float force_zscale; + float force_velocitybiasramp; + float force_velocitybias; + + force_velocitybiasramp = autocvar_sv_maxspeed; + if(deathtype & HITTYPE_SECONDARY) + { + force_zscale = autocvar_g_balance_laser_secondary_force_zscale; + force_velocitybias = autocvar_g_balance_laser_secondary_force_velocitybias; + } + else + { + force_zscale = autocvar_g_balance_laser_primary_force_zscale; + force_velocitybias = autocvar_g_balance_laser_primary_force_velocitybias; + } + + vel = targ.velocity; + vel_z = 0; + vel = normalize(vel) * bound(0, vlen(vel) / force_velocitybiasramp, 1) * force_velocitybias; + force = + vlen(force) + * + normalize(normalize(force) + vel); + + force_z *= force_zscale; + } + else + { + if(deathtype & HITTYPE_SECONDARY) + { + force *= autocvar_g_balance_laser_secondary_force_other_scale; + } + else + { + force *= autocvar_g_balance_laser_primary_force_other_scale; + } + } } //if (targ == attacker) @@ -1219,6 +1250,10 @@ void Fire_ApplyDamage(entity e) if(e.watertype != CONTENT_LAVA) e.fire_endtime = 0; + // ice stops fire + if(e.freezetag_frozen) + e.fire_endtime = 0; + t = min(frametime, e.fire_endtime - time); d = e.fire_damagepersec * t; diff --git a/qcsrc/server/g_hook.qc b/qcsrc/server/g_hook.qc index dcc13c4df0..dd6d73effd 100644 --- a/qcsrc/server/g_hook.qc +++ b/qcsrc/server/g_hook.qc @@ -332,6 +332,9 @@ void FireGrapplingHook (void) if((arena_roundbased && time < warmup) || (time < game_starttime)) return; + if(self.freezetag_frozen) + return; + makevectors(self.v_angle); s = self.cvar_cl_gunalign; diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index f39ed7c2ce..67fb91fc2b 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -311,31 +311,32 @@ void cvar_changes_init() BADCVAR("g_forced_team_pink"); // mapinfo - BADCVAR("timelimit"); BADCVAR("fraglimit"); - BADCVAR("leadlimit"); - BADCVAR("g_tdm_teams"); - BADCVAR("g_keyhunt_teams"); - BADCVAR("g_domination_default_teams"); - BADCVAR("g_race_qualifying_timelimit"); - BADCVAR("g_lms"); BADCVAR("g_arena"); - BADCVAR("g_ca"); BADCVAR("g_assault"); + BADCVAR("g_ca"); BADCVAR("g_ctf"); + BADCVAR("g_cts"); BADCVAR("g_dm"); BADCVAR("g_domination"); + BADCVAR("g_domination_default_teams"); BADCVAR("g_freezetag"); + BADCVAR("g_keepaway"); BADCVAR("g_keyhunt"); BADCVAR("g_keyhunt_teams"); + BADCVAR("g_keyhunt_teams"); + BADCVAR("g_lms"); + BADCVAR("g_nexball"); BADCVAR("g_onslaught"); BADCVAR("g_race"); - BADCVAR("g_cts"); + BADCVAR("g_race_qualifying_timelimit"); BADCVAR("g_runematch"); BADCVAR("g_tdm"); - BADCVAR("g_nexball"); - BADCVAR("g_keepaway"); + BADCVAR("g_tdm_teams"); + BADCVAR("leadlimit"); + BADCVAR("nextmap"); BADCVAR("teamplay"); + BADCVAR("timelimit"); // long BADCVAR("hostname"); @@ -1522,11 +1523,6 @@ void DumpStats(float final) fputs(file, ":end\n"); fclose(file); } - - // send statistics - FOR_EACH_CLIENT(e) - PlayerStats_AddGlobalInfo(e); - PlayerStats_Shutdown(); } void FixIntermissionClient(entity e) @@ -1595,6 +1591,13 @@ void NextLevel() DumpStats(TRUE); + // send statistics + entity e; + PlayerStats_EndMatch(1); + FOR_EACH_CLIENT(e) + PlayerStats_AddGlobalInfo(e); + PlayerStats_Shutdown(); + if(autocvar_sv_eventlog) GameLogEcho(":gameover"); @@ -2939,6 +2942,7 @@ void SV_Shutdown() print("Saving persistent data...\n"); Ban_SaveBans(); + PlayerStats_EndMatch(0); FOR_EACH_CLIENT(e) PlayerStats_AddGlobalInfo(e); PlayerStats_Shutdown(); diff --git a/qcsrc/server/miscfunctions.qc b/qcsrc/server/miscfunctions.qc index a770ec55eb..849dcdab45 100644 --- a/qcsrc/server/miscfunctions.qc +++ b/qcsrc/server/miscfunctions.qc @@ -2553,10 +2553,7 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f // rule 6: we must not end up in trigger_hurt if (tracebox_hits_trigger_hurt(start, e.mins, e.maxs, enddown)) - { - dprint("trigger_hurt! ouch! and nothing else could find it!\n"); continue; - } break; } diff --git a/qcsrc/server/mutators/base.qh b/qcsrc/server/mutators/base.qh index b7c523dcbb..aa581228bd 100644 --- a/qcsrc/server/mutators/base.qh +++ b/qcsrc/server/mutators/base.qh @@ -94,6 +94,10 @@ MUTATOR_HOOKABLE(FilterItem); // checks if the current item may be spawned (self.items and self.weapons may be read and written to, as well as the ammo_ fields) // return error to request removal +MUTATOR_HOOKABLE(TurretSpawn); + // return error to request removal + // INPUT: self - turret + MUTATOR_HOOKABLE(OnEntityPreSpawn); // return error to prevent entity spawn, or modify the entity diff --git a/qcsrc/server/mutators/gamemode_freezetag.qc b/qcsrc/server/mutators/gamemode_freezetag.qc index f8d45f0424..d09bbeecf6 100644 --- a/qcsrc/server/mutators/gamemode_freezetag.qc +++ b/qcsrc/server/mutators/gamemode_freezetag.qc @@ -65,7 +65,10 @@ void freezetag_Ice_Think() void freezetag_Freeze(entity attacker) { + if(self.freezetag_frozen) + return; self.freezetag_frozen = 1; + self.freezetag_revive_progress = 0; entity ice; ice = spawn(); @@ -111,6 +114,7 @@ void freezetag_Freeze(entity attacker) void freezetag_Unfreeze(entity attacker) { self.freezetag_frozen = 0; + self.freezetag_revive_progress = 0; // remove the ice block entity ice; @@ -215,86 +219,86 @@ MUTATOR_HOOKFUNCTION(freezetag_GiveFragsForKill) MUTATOR_HOOKFUNCTION(freezetag_PlayerPreThink) { - vector revive_extra_size; - revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size; + float n; + vector revive_extra_size; - float teammate_nearby; - FOR_EACH_PLAYER(other) if(self != other) - { - if(other.freezetag_frozen == 0) - { - if(other.team == self.team) - { - teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax); - if(teammate_nearby) - break; - } - } - } + revive_extra_size = '1 1 1' * autocvar_g_freezetag_revive_extra_size; - if(teammate_nearby && self.freezetag_frozen == 1) // OK, there is at least one teammate reviving us - { - if(self.freezetag_beginrevive_time == -9999) // initialize values if this is the first frame of revival - { - self.freezetag_beginrevive_time = time; - self.freezetag_revive_progress = 0; - } - else - { - self.freezetag_revive_progress = (time - self.freezetag_beginrevive_time) / autocvar_g_freezetag_revive_time; - if(time - self.freezetag_beginrevive_time >= autocvar_g_freezetag_revive_time) - { - freezetag_Unfreeze(self); - - // EVERY team mate nearby gets a point (even if multiple!) - float n; - FOR_EACH_PLAYER(other) if(self != other) + entity o; + o = world; + n = 0; + FOR_EACH_PLAYER(other) if(self != other) + { + if(other.freezetag_frozen == 0) { - if(other.freezetag_frozen == 0) + if(other.team == self.team) { - if(other.team == self.team) + if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax)) + { + if(!o) + o = other; + ++n; + } + } + } + } + + if(n && self.freezetag_frozen) // OK, there is at least one teammate reviving us + { + self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress + frametime * autocvar_g_freezetag_revive_speed, 1); + + if(self.freezetag_revive_progress >= 1) + { + freezetag_Unfreeze(self); + + // EVERY team mate nearby gets a point (even if multiple!) + FOR_EACH_PLAYER(other) if(self != other) + { + if(other.freezetag_frozen == 0) { - teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax); - if(teammate_nearby) + if(other.team == self.team) { - PlayerScore_Add(other, SP_FREEZETAG_REVIVALS, +1); - PlayerScore_Add(other, SP_SCORE, +1); - ++n; + if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax)) + { + PlayerScore_Add(other, SP_FREEZETAG_REVIVALS, +1); + PlayerScore_Add(other, SP_SCORE, +1); + } } } } - } - if(n > 1) - centerprint(self, strcat("^5You were revived by ^7", other.netname, "^5 et al.\n")); - else - centerprint(self, strcat("^5You were revived by ^7", other.netname, "^5.\n")); - centerprint(other, strcat("^5You revived ^7", self.netname, "^5.\n")); - bprint("^7", other.netname, "^5 revived ^7", self.netname, "^5.\n"); + if(n > 1) + centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5 et al.\n")); + else + centerprint(self, strcat("^5You were revived by ^7", o.netname, "^5.\n")); + centerprint(o, strcat("^5You revived ^7", self.netname, "^5.\n")); + if(n > 1) + bprint("^7", o.netname, "^5 et al revived ^7", self.netname, "^5.\n"); + else + bprint("^7", o.netname, "^5 revived ^7", self.netname, "^5.\n"); + } - self.freezetag_beginrevive_time = -9999; - self.freezetag_revive_progress = 0; - } - } - // now find EVERY teammate within reviving radius, set their revive_progress values correct - FOR_EACH_PLAYER(other) if(self != other) - { - if(other.freezetag_frozen == 0) - { - if(other.team == self.team) - { - teammate_nearby = boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax); - if(teammate_nearby) - other.freezetag_revive_progress = self.freezetag_revive_progress; - } - } - } - } - else if(!teammate_nearby) // only if no teammate is nearby will we reset - { - self.freezetag_beginrevive_time = -9999; - self.freezetag_revive_progress = 0; - } + // now find EVERY teammate within reviving radius, set their revive_progress values correct + FOR_EACH_PLAYER(other) if(self != other) + { + if(other.freezetag_frozen == 0) + { + if(other.team == self.team) + { + if(boxesoverlap(self.absmin - revive_extra_size, self.absmax + revive_extra_size, other.absmin, other.absmax)) + other.freezetag_revive_progress = self.freezetag_revive_progress; + } + } + } + } + else if(!n && self.freezetag_frozen) // only if no teammate is nearby will we reset + { + self.freezetag_revive_progress = bound(0, self.freezetag_revive_progress - frametime * autocvar_g_freezetag_revive_clearspeed, 1); + } + else if(!n) + { + self.freezetag_revive_progress = 0; // thawing nobody + } return 1; } diff --git a/qcsrc/server/mutators/gamemode_keepaway.qc b/qcsrc/server/mutators/gamemode_keepaway.qc index 9fb47afbb3..a23169c373 100644 --- a/qcsrc/server/mutators/gamemode_keepaway.qc +++ b/qcsrc/server/mutators/gamemode_keepaway.qc @@ -2,6 +2,7 @@ void ka_SpawnBall(void); void ka_TouchEvent(void); void ka_RespawnBall(void); void ka_DropEvent(entity); +void ka_TimeScoring(void); float ka_ballcarrier_waypointsprite_visible_for_player(entity); @@ -28,26 +29,26 @@ void ka_Reset() // used to clear the ballcarrier whenever the match switches fro ka_RespawnBall(); } -void ka_SpawnBall() // loads various values for the ball +void ka_SpawnBall() // loads various values for the ball, runs only once at start of match { if(!g_keepaway) { return; } entity e; e = spawn(); e.model = "models/orbs/orbblue.md3"; - e.scale = 1; precache_model(e.model); setmodel(e, e.model); setsize(e, '-16 -16 -20', '16 16 20'); // 20 20 20 was too big, player is only 16 16 24... gotta cheat with the Z (20) axis so that the particle isn't cut off e.classname = "keepawayball"; e.damageforcescale = autocvar_g_keepawayball_damageforcescale; e.takedamage = DAMAGE_YES; + e.solid = SOLID_TRIGGER; + e.movetype = MOVETYPE_BOUNCE; e.glow_color = autocvar_g_keepawayball_trail_color; e.glow_trail = TRUE; - e.movetype = MOVETYPE_BOUNCE; - e.touch = ka_TouchEvent; e.flags = FL_ITEM; e.reset = ka_Reset; + e.touch = ka_TouchEvent; e.owner = world; InitializeEntity(e, ka_RespawnBall, INITPRIO_SETLOCATION); // is this the right priority? Neh, I have no idea.. Well-- it works! So. @@ -55,15 +56,16 @@ void ka_SpawnBall() // loads various values for the ball void ka_RespawnBall() // runs whenever the ball needs to be relocated { + if(gameover) { return; } vector oldballorigin = self.origin; - + if(MoveToRandomMapLocation(self, DPCONTENTS_SOLID | DPCONTENTS_CORPSE | DPCONTENTS_PLAYERCLIP, DPCONTENTS_SLIME | DPCONTENTS_LAVA | DPCONTENTS_SKY | DPCONTENTS_BODY | DPCONTENTS_DONOTENTER, Q3SURFACEFLAG_SKY, 10, 1024, 256)) { makevectors(self.angles); self.movetype = MOVETYPE_BOUNCE; self.velocity = '0 0 200'; self.angles = '0 0 0'; - self.solid = SOLID_TRIGGER; + self.effects = autocvar_g_keepawayball_effects; self.think = ka_RespawnBall; self.nextthink = time + autocvar_g_keepawayball_respawntime; @@ -84,6 +86,7 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated void ka_TouchEvent() // runs any time that the ball comes in contact with something { + if(gameover) { return; } if(!self) { return; } if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) { // The ball fell off the map, respawn it since players can't get to it @@ -103,24 +106,22 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth self.owner = other; other.ballcarried = self; setattachment(self, other, ""); - setorigin(self, '3 0 20'); + setorigin(self, '0 0 0'); - // make the ball invisible/unable to do anything + // make the ball invisible/unable to do anything/set up time scoring self.velocity = '0 0 0'; self.movetype = MOVETYPE_NONE; - self.touch = SUB_Null; self.effects |= EF_NODRAW; - self.think = SUB_Null; - self.nextthink = 0; + self.touch = SUB_Null; + self.think = ka_TimeScoring; + self.nextthink = time + autocvar_g_keepaway_score_timeinterval; self.takedamage = DAMAGE_NO; // apply effects to player other.glow_color = autocvar_g_keepawayball_trail_color; other.glow_trail = TRUE; - other.effects |= EF_DIMLIGHT; - other.alpha = autocvar_g_keepaway_ballcarrier_alpha; - other.exteriorweaponentity.alpha = autocvar_g_keepaway_ballcarrier_alpha; - + other.effects |= autocvar_g_keepaway_ballcarrier_effects; + // messages and sounds Send_KillNotification(other.netname, "", "", KA_PICKUPBALL, MSG_KA); WriteByte(MSG_BROADCAST, SVC_CENTERPRINT); @@ -149,11 +150,10 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los // reset the ball setattachment(ball, world, ""); ball.movetype = MOVETYPE_BOUNCE; - ball.solid = SOLID_TRIGGER; // is this needed? ball.wait = time + 1; + ball.touch = ka_TouchEvent; ball.think = ka_RespawnBall; ball.nextthink = time + autocvar_g_keepawayball_respawntime; - ball.touch = ka_TouchEvent; ball.takedamage = DAMAGE_YES; ball.effects &~= EF_NODRAW; setorigin(ball, plyr.origin + '0 0 10'); @@ -162,11 +162,9 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los ball.owner = world; // reset the player effects - plyr.effects &~= EF_DIMLIGHT; - plyr.alpha = default_player_alpha; - plyr.exteriorweaponentity.alpha = default_weapon_alpha; plyr.glow_trail = FALSE; - + plyr.effects &~= autocvar_g_keepaway_ballcarrier_effects; + // messages and sounds Send_KillNotification(plyr.netname, "", "", KA_DROPBALL, MSG_KA); WriteByte(MSG_BROADCAST, SVC_CENTERPRINT); @@ -187,20 +185,24 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los float ka_ballcarrier_waypointsprite_visible_for_player(entity e) // runs on waypoints which are attached to ballcarriers, updates once per frame { if(e.ballcarried) - { if(other.classname == "spectator") return FALSE; // we don't want spectators of the ballcarrier to see the attached waypoint on the top of their screen - else if(g_minstagib && (e.items & IT_STRENGTH)) - return FALSE; // if the ballcarrier has invisibility, don't draw the waypoint as this is the function of invisibility in keepaway - } + + // TODO: Make the ballcarrier lack a waypointsprite whenever they have the invisibility powerup return TRUE; } -MUTATOR_HOOKFUNCTION(ka_RemovePlayer) +void ka_TimeScoring() { - if(self.ballcarried) { ka_DropEvent(self); } // a player with the ball has left the match, drop it - return 0; + if(self.owner.ballcarried) + { // add points for holding the ball after a certain amount of time + if(autocvar_g_keepaway_score_timepoints) + PlayerScore_Add(self.owner, SP_SCORE, autocvar_g_keepaway_score_timepoints); + + PlayerScore_Add(self.owner, SP_KEEPAWAY_TIME, (autocvar_g_keepaway_score_timeinterval / 1)); // interval is divided by 1 so that time always shows "seconds" + self.nextthink = time + autocvar_g_keepaway_score_timeinterval; + } } MUTATOR_HOOKFUNCTION(ka_Scoring) @@ -209,15 +211,15 @@ MUTATOR_HOOKFUNCTION(ka_Scoring) { if(frag_target.ballcarried) { // add to amount of times killing carrier PlayerScore_Add(frag_attacker, SP_KEEPAWAY_CARRIERKILLS, 1); - if(autocvar_g_keepaway_bckillscore) // add bckills to the score - PlayerScore_Add(frag_attacker, SP_KEEPAWAY_SCORE, 1); + if(autocvar_g_keepaway_score_bckill) // add bckills to the score + PlayerScore_Add(frag_attacker, SP_SCORE, autocvar_g_keepaway_score_bckill); } else if(!frag_attacker.ballcarried) if(autocvar_g_keepaway_noncarrier_warn) centerprint_atprio(frag_attacker, (CENTERPRIO_SPAM + 5), "Killing people while you don't have the ball gives no points!"); if(frag_attacker.ballcarried) // add to amount of kills while ballcarrier - PlayerScore_Add(frag_attacker, SP_KEEPAWAY_SCORE, 1); + PlayerScore_Add(frag_attacker, SP_SCORE, autocvar_g_keepaway_score_killac); } if(self.ballcarried) { ka_DropEvent(self); } // a player with the ball has died, drop it @@ -227,7 +229,7 @@ MUTATOR_HOOKFUNCTION(ka_Scoring) MUTATOR_HOOKFUNCTION(ka_GiveFragsForKill) { frag_score = 0; // no frags counted in keepaway - return 0; + return 1; // you deceptive little bugger ;3 This needs to be true in order for this function to even count. } MUTATOR_HOOKFUNCTION(ka_PlayerPreThink) @@ -277,62 +279,32 @@ MUTATOR_HOOKFUNCTION(ka_PlayerDamage) // for changing damage and force values th return 0; } +MUTATOR_HOOKFUNCTION(ka_RemovePlayer) +{ + if(self.ballcarried) { ka_DropEvent(self); } // a player with the ball has left the match, drop it + return 0; +} + MUTATOR_HOOKFUNCTION(ka_PlayerPowerups) { - if(self.ballcarried) - { - // if the player has the ball, force ballcarrier alpha upon them - self.alpha = autocvar_g_keepaway_ballcarrier_alpha; - self.exteriorweaponentity.alpha = autocvar_g_keepaway_ballcarrier_alpha; + // In the future this hook is supposed to allow me to do some extra stuff with waypointsprites and invisibility powerup + // So bare with me until I can fix a certain bug with ka_ballcarrier_waypointsprite_visible_for_player() - // if we're in minstagib and a ballcarrier has just picked up invisibility, - // notify all the other players that the ballcarrier no longer has a waypoint - if(g_minstagib) - { - if(olditems & IT_STRENGTH) - { - if(time > self.strength_finished) - { // this only runs ONCE right after the player loses invisibility - bprint(self.netname, "^7 isn't invisible from radar anymore.\n"); - } - } - else - { - if(time < self.strength_finished) - { // this only runs ONCE right after the player gains invisibility - bprint(self.netname, "^7 has picked up invisibility and can no longer be seen on radar!\n"); - } - } - } - } - else if(g_minstagib) - { - // if we're in minstagib and a noncarrier has invisibility, assure that we apply the invisibility effects normally - if(olditems & IT_STRENGTH) - { - self.alpha = g_minstagib_invis_alpha; - self.exteriorweaponentity.alpha = g_minstagib_invis_alpha; - } - } - else - { - // if we're a normal player with no powerups that edit alpha make sure the alpha is default. - // (normal powerups just use EF_ADDITIVE) - self.alpha = default_player_alpha; - self.exteriorweaponentity.alpha = default_weapon_alpha; - } + self.effects &~= autocvar_g_keepaway_ballcarrier_effects; + + if(self.ballcarried) + self.effects |= autocvar_g_keepaway_ballcarrier_effects; return 0; } MUTATOR_DEFINITION(gamemode_keepaway) { - // I don't quite understand these orders, perhaps someone could enlighten me? MUTATOR_HOOK(MakePlayerObserver, ka_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(ClientDisconnect, ka_RemovePlayer, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDies, ka_Scoring, CBC_ORDER_ANY); MUTATOR_HOOK(GiveFragsForKill, ka_GiveFragsForKill, CBC_ORDER_ANY); - MUTATOR_HOOK(PlayerPreThink, ka_PlayerPreThink, CBC_ORDER_FIRST); + MUTATOR_HOOK(PlayerPreThink, ka_PlayerPreThink, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerDamage_Calculate, ka_PlayerDamage, CBC_ORDER_ANY); MUTATOR_HOOK(PlayerPowerups, ka_PlayerPowerups, CBC_ORDER_ANY); diff --git a/qcsrc/server/playerstats.qc b/qcsrc/server/playerstats.qc index 7904e30ef1..6b04eea9d6 100644 --- a/qcsrc/server/playerstats.qc +++ b/qcsrc/server/playerstats.qc @@ -3,6 +3,7 @@ string playerstats_last; string events_last; .float playerstats_addedglobalinfo; float playerstats_requested; +.string playerstats_id; void PlayerStats_Init() { @@ -17,16 +18,37 @@ void PlayerStats_Init() playerstats_waitforme = FALSE; // must wait for it at match end PlayerStats_AddEvent(PLAYERSTATS_ALIVETIME); - PlayerStats_AddEvent(PLAYERSTATS_KILLS); + PlayerStats_AddEvent(PLAYERSTATS_WINS); + PlayerStats_AddEvent(PLAYERSTATS_MATCHES); + PlayerStats_AddEvent(PLAYERSTATS_JOINS); + PlayerStats_AddEvent(PLAYERSTATS_SCOREBOARD_VALID); + + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_10); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_15); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_20); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_25); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_30); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_BOTLIKE); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD); + PlayerStats_AddEvent(PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM); } void PlayerStats_AddPlayer(entity e) { - if(!e.crypto_idfp || playerstats_db < 0) + if(playerstats_db < 0) return; + + if(e.crypto_idfp != "") + e.playerstats_id = strzone(e.crypto_idfp); + else if(clienttype(e) == CLIENTTYPE_BOT) + e.playerstats_id = strzone(sprintf("bot#%d", e.playerid)); + else + e.playerstats_id = strzone(sprintf("player#%d", e.playerid)); string key; - key = sprintf("%s:*", e.crypto_idfp); + key = sprintf("%s:*", e.playerstats_id); string p; p = db_get(playerstats_db, key); @@ -39,7 +61,7 @@ void PlayerStats_AddPlayer(entity e) } else db_put(playerstats_db, key, "#"); - playerstats_last = strzone(e.crypto_idfp); + playerstats_last = strzone(e.playerstats_id); } } @@ -68,12 +90,12 @@ void PlayerStats_AddEvent(string event_id) void PlayerStats_Event(entity e, string event_id, float value) { - if(!e.crypto_idfp || playerstats_db < 0) + if(!e.playerstats_id || playerstats_db < 0) return; string key; float val; - key = sprintf("%s:%s", e.crypto_idfp, event_id); + key = sprintf("%s:%s", e.playerstats_id, event_id); val = stof(db_get(playerstats_db, key)); val += value; db_put(playerstats_db, key, ftos(val)); @@ -122,11 +144,18 @@ void PlayerStats_Shutdown() { float v; v = stof(db_get(playerstats_db, sprintf("%s:%s", p, e))); - bufstr_set(b, i++, sprintf("e %s %f", e, v)); + if(v != 0) + bufstr_set(b, i++, sprintf("e %s %g", e, v)); } } bufstr_set(b, i++, ""); + if(autocvar_g_playerstats_debug) + { + for(i = 0; i < buf_getsize(b); ++i) + print(bufstr_get(b, i), "\n"); + } + if(crypto_uri_postbuf(uri, URI_GET_PLAYERSTATS_SENT, "text/plain", "\n", b, 0)) playerstats_requested = TRUE; else @@ -146,14 +175,38 @@ void PlayerStats_AddGlobalInfo(entity p) { if(playerstats_db < 0) return; - if(!p.crypto_idfp || playerstats_db < 0) + if(!p.playerstats_id || playerstats_db < 0) return; p.playerstats_addedglobalinfo = TRUE; // add global info! if(p.alivetime) PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime); + + if(p.alivetime) + PlayerStats_Event(p, PLAYERSTATS_ALIVETIME, time - p.alivetime); - if(p.cvar_cl_allow_uid2name == 1) - db_put(playerstats_db, sprintf("%s:_netname", p.crypto_idfp), p.netname); + if(p.cvar_cl_allow_uid2name == 1 || clienttype(p) == CLIENTTYPE_BOT) + db_put(playerstats_db, sprintf("%s:_netname", p.playerstats_id), p.netname); + + if(p.alivetime > 0) + PlayerStats_Event(p, PLAYERSTATS_JOINS, 1); + + strunzone(p.playerstats_id); + p.playerstats_id = string_null; +} + +void PlayerStats_EndMatch(float finished) +{ + entity p; + FOR_EACH_PLAYER(p) + { + PlayerScore_PlayerStats(p); + PlayerStats_Event(p, PLAYERSTATS_SCOREBOARD_VALID, 1); + if(finished) + { + PlayerStats_Event(p, PLAYERSTATS_WINS, p.winning); + PlayerStats_Event(p, PLAYERSTATS_MATCHES, 1); + } + } } diff --git a/qcsrc/server/playerstats.qh b/qcsrc/server/playerstats.qh index fea546a123..2d004c1207 100644 --- a/qcsrc/server/playerstats.qh +++ b/qcsrc/server/playerstats.qh @@ -1,6 +1,23 @@ // time the player was alive and kicking -string PLAYERSTATS_ALIVETIME = "alivetime"; -string PLAYERSTATS_KILLS = "kills"; +string PLAYERSTATS_ALIVETIME = "alivetime"; +string PLAYERSTATS_WINS = "wins"; +string PLAYERSTATS_MATCHES = "matches"; +string PLAYERSTATS_JOINS = "joins"; +string PLAYERSTATS_SCOREBOARD_VALID = "scoreboardvalid"; + +string PLAYERSTATS_TOTAL = "total-"; +string PLAYERSTATS_SCOREBOARD = "scoreboard-"; + +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_3 = "achievement-kill-spree-3"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_5 = "achievement-kill-spree-5"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_10 = "achievement-kill-spree-10"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_15 = "achievement-kill-spree-15"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_20 = "achievement-kill-spree-20"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_25 = "achievement-kill-spree-25"; +string PLAYERSTATS_ACHIEVEMENT_KILL_SPREE_30 = "achievement-kill-spree-30"; +string PLAYERSTATS_ACHIEVEMENT_BOTLIKE = "achievement-botlike"; +string PLAYERSTATS_ACHIEVEMENT_FIRSTBLOOD = "achievement-firstblood"; +string PLAYERSTATS_ACHIEVEMENT_FIRSTVICTIM = "achievement-firstvictim"; // delay map switch until this is set float playerstats_waitforme; @@ -25,3 +42,6 @@ void PlayerStats_Sent_URI_Get_Callback(float id, float status, string data); // call this whenever a player leaves void PlayerStats_AddGlobalInfo(entity p); + +// call this at the end of the match +void PlayerStats_EndMatch(float finished); diff --git a/qcsrc/server/scores.qc b/qcsrc/server/scores.qc index 2c5e2b1449..79f2ffc7ce 100644 --- a/qcsrc/server/scores.qc +++ b/qcsrc/server/scores.qc @@ -150,6 +150,11 @@ void ScoreInfo_SetLabel_PlayerScore(float i, string label, float scoreflags) scores_primary = scores[i]; scores_flags_primary = scoreflags; } + if(label != "") + { + PlayerStats_AddEvent(strcat(PLAYERSTATS_TOTAL, label)); + PlayerStats_AddEvent(strcat(PLAYERSTATS_SCOREBOARD, label)); + } } void ScoreInfo_SetLabel_TeamScore(float i, string label, float scoreflags) @@ -245,6 +250,7 @@ void PlayerScore_Clear(entity player) if(teamscores_entities_count) return; + if(g_lms) return; if(g_arena || g_ca) return; if(g_race && !g_race_qualifying) return; @@ -330,6 +336,8 @@ float PlayerScore_Add(entity player, float scorefield, float score) if(score) if(scores_label[scorefield] != "") s.SendFlags |= pow(2, scorefield); + PlayerStats_Event(s.owner, strcat(PLAYERSTATS_TOTAL, scores_label[scorefield]), score); + s.(scores_accumulated[scorefield]) += score; return (s.(scores[scorefield]) += score); } @@ -864,3 +872,14 @@ void Score_NicePrint(entity to) } } +void PlayerScore_PlayerStats(entity p) +{ + entity s; + float i; + s = p.scorekeeper; + + for(i = 0; i < MAX_SCORE; ++i) + if(s.(scores[i]) != 0) + if(scores_label[i] != "") + PlayerStats_Event(s.owner, strcat(PLAYERSTATS_SCOREBOARD, scores_label[i]), s.(scores[i])); +} diff --git a/qcsrc/server/scores.qh b/qcsrc/server/scores.qh index 3ac0b03b55..f94b683323 100644 --- a/qcsrc/server/scores.qh +++ b/qcsrc/server/scores.qh @@ -2,6 +2,8 @@ entity scores_initialized; // non-world when scores labels/rules have been set .float scores[MAX_SCORE]; .float teamscores[MAX_TEAMSCORE]; +.float scores_accumulated[MAX_SCORE]; // for player stats only + /** * Attaches a PlayerScore entity to a player. Use that in ClientConnect. * Remember to detach it in ClientDisconnect! diff --git a/qcsrc/server/scores_rules.qc b/qcsrc/server/scores_rules.qc index 61fc9f4c9e..18c780d814 100644 --- a/qcsrc/server/scores_rules.qc +++ b/qcsrc/server/scores_rules.qc @@ -191,14 +191,14 @@ void ScoreRules_nexball(float teams) #define SP_KEEPAWAY_PICKUPS 4 #define SP_KEEPAWAY_CARRIERKILLS 5 #define SP_KEEPAWAY_DROPS 6 -#define SP_KEEPAWAY_SCORE 7 +#define SP_KEEPAWAY_TIME 7 void ScoreRules_keepaway() { - ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, 0, FALSE); // SFL_SORT_PRIO_PRIMARY - ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_SCORE, "score", SFL_SORT_PRIO_PRIMARY); - ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_PICKUPS, "pickups", 0); + ScoreRules_basics(0, SFL_SORT_PRIO_PRIMARY, 0, TRUE); // SFL_SORT_PRIO_PRIMARY + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_PICKUPS, "pickups", 0); ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_CARRIERKILLS, "bckills", 0); - ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_DROPS, "drops", SFL_LOWER_IS_BETTER); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_DROPS, "drops", SFL_LOWER_IS_BETTER); + ScoreInfo_SetLabel_PlayerScore(SP_KEEPAWAY_TIME, "time", SFL_SORT_PRIO_SECONDARY); ScoreRules_basics_end(); } diff --git a/qcsrc/server/sv_main.qc b/qcsrc/server/sv_main.qc index c73f0355f8..aebea7523f 100644 --- a/qcsrc/server/sv_main.qc +++ b/qcsrc/server/sv_main.qc @@ -2,7 +2,7 @@ void CreatureFrame (void) { local entity oldself; - local float dm, maxspeed; + local float dm; oldself = self; self = findfloat(world, iscreature, TRUE); while (self) @@ -67,9 +67,10 @@ void CreatureFrame (void) self.dmg = 2; } // check for falling damage + float velocity_len = vlen(self.velocity); if(!self.hook.state && !g_ca && !(g_cts && !autocvar_g_cts_selfdamage)) { - dm = vlen(self.oldvelocity) - vlen(self.velocity); // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage. + dm = vlen(self.oldvelocity) - velocity_len; // dm is now the velocity DECREASE. Velocity INCREASE should never cause a sound or any damage. if (self.deadflag) dm = (dm - autocvar_g_balance_falldamage_deadminspeed) * autocvar_g_balance_falldamage_factor; else @@ -78,15 +79,14 @@ void CreatureFrame (void) Damage (self, world, world, dm, DEATH_FALL, self.origin, '0 0 0'); } - maxspeed = autocvar_g_maxspeed; - if(maxspeed > 0 && vlen(self.velocity) > maxspeed) + if(autocvar_g_maxspeed > 0 && velocity_len > autocvar_g_maxspeed) Damage (self, world, world, 100000, DEATH_SHOOTING_STAR, self.origin, '0 0 0'); // play stupid sounds if (g_footsteps) if (!gameover) if (self.flags & FL_ONGROUND) - if (vlen(self.velocity) > autocvar_sv_maxspeed * 0.6) + if (velocity_len > autocvar_sv_maxspeed * 0.6) if (!self.deadflag) if (time < self.lastground + 0.2) { diff --git a/qcsrc/server/teamplay.qc b/qcsrc/server/teamplay.qc index 9cb52c1daa..0363d35a09 100644 --- a/qcsrc/server/teamplay.qc +++ b/qcsrc/server/teamplay.qc @@ -524,7 +524,7 @@ void PrintWelcomeMessage(entity pl) if(g_midair) modifications = strcat(modifications, ", Midair"); if(g_pinata) - modifications = strcat(modifications, ", Pinata"); + modifications = strcat(modifications, ", Piñata"); if(g_weapon_stay && !g_cts) modifications = strcat(modifications, ", Weapons stay"); if(g_bloodloss > 0) diff --git a/qcsrc/server/tturrets/system/system_aimprocs.qc b/qcsrc/server/tturrets/system/system_aimprocs.qc index 80344a9e1f..843af3d5ad 100644 --- a/qcsrc/server/tturrets/system/system_aimprocs.qc +++ b/qcsrc/server/tturrets/system/system_aimprocs.qc @@ -19,15 +19,15 @@ TFL_AIM_GROUND vector turret_stdproc_aim_generic() { - vector pre_pos,prep; - float distance,impact_time,i,mintime; + vector pre_pos, prep; + float distance, impact_time, i, mintime; turret_tag_fire_update(); if(self.aim_flags & TFL_AIM_SIMPLE) return real_origin(self.enemy); - mintime = max(self.attack_finished_single - time,0) + sys_frametime ; + mintime = max(self.attack_finished_single - time,0) + sys_frametime; // Baseline pre_pos = real_origin(self.enemy); diff --git a/qcsrc/server/tturrets/system/system_damage.qc b/qcsrc/server/tturrets/system/system_damage.qc index b7af33af82..c7f25a4467 100644 --- a/qcsrc/server/tturrets/system/system_damage.qc +++ b/qcsrc/server/tturrets/system/system_damage.qc @@ -287,8 +287,6 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo // thorw head slightly off aim when hit? if (self.damage_flags & TFL_DMG_HEADSHAKE) { - //baseent.tur_aimoff_x += (random() * damage); - //baseent.tur_aimoff_y += ((random()*0.75) * damage); self.tur_head.angles_x = self.tur_head.angles_x + (-0.5 + random()) * damage; self.tur_head.angles_y = self.tur_head.angles_y + (-0.5 + random()) * damage; } @@ -296,11 +294,8 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo if (self.turrcaps_flags & TFL_TURRCAPS_MOVE) self.velocity = self.velocity + vforce; - // FIXME: Better damage feedback - // Start burning when we have 10% or less health left - //if (self.health < (self.tur_health * 0.1)) - // self.effects = EF_FLAME; - + // FIXME: Better damage feedback? + if (self.health <= 0) { self.event_damage = SUB_Null; diff --git a/qcsrc/server/tturrets/system/system_main.qc b/qcsrc/server/tturrets/system/system_main.qc index 4a2e886af8..7d023e99ef 100644 --- a/qcsrc/server/tturrets/system/system_main.qc +++ b/qcsrc/server/tturrets/system/system_main.qc @@ -637,6 +637,10 @@ void turret_think() if (self.ammo < self.ammo_max) self.ammo = min(self.ammo + self.ammo_recharge, self.ammo_max); + if (self.health < (self.tur_health * 0.5)) + if(random() < 0.25) + te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16); + // Inactive turrets needs to run the think loop, // So they can handle animation and wake up if need be. if not (self.tur_active) @@ -873,6 +877,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base { e = spawn(); + /* setorigin(e,'0 0 0'); setmodel(e,"models/turrets/plasma.md3"); vector v; @@ -883,6 +888,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base //crash(); } setmodel(e,""); + */ e.classname = "turret_manager"; e.think = turrets_manager_think; @@ -1129,6 +1135,10 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base // Offsets & origins if (!self.tur_shotorg) self.tur_shotorg = '50 0 50'; +// Gane hooks + if(MUTATOR_CALLHOOK(TurretSpawn)) + return 0; + // End of default & sanety checks, start building the turret. // Spawn extra bits @@ -1234,7 +1244,7 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base activator = ee; self.use(); } - + turret_stdproc_respawn(); return 1; } diff --git a/qcsrc/server/tturrets/units/unit_fusionreactor.qc b/qcsrc/server/tturrets/units/unit_fusionreactor.qc index 601a934c5b..03b0c40ad9 100644 --- a/qcsrc/server/tturrets/units/unit_fusionreactor.qc +++ b/qcsrc/server/tturrets/units/unit_fusionreactor.qc @@ -2,19 +2,6 @@ void spawnfunc_turret_fusionreactor(); void turret_fusionreactor_dinit(); void turret_fusionreactor_fire(); -float turret_fusionreactor_firecheck() -{ - if (self.enemy == world) return 0; - if not (self.enemy.ammo_flags & TFL_AMMO_RECIVE) return 0; - if not (self.enemy.ammo_flags & TFL_AMMO_ENERGY) return 0; - if (self.ammo < self.shot_dmg) return 0; - if (self.enemy.ammo >= self.enemy.ammo_max) return 0; - if (self.tur_dist_aimpos > self.target_range) return 0; - if (self.tur_dist_aimpos < self.target_range_min) return 0; - - return 1; -} - void turret_fusionreactor_fire() { vector fl_org; @@ -22,20 +9,51 @@ void turret_fusionreactor_fire() self.enemy.ammo = min(self.enemy.ammo + self.shot_dmg,self.enemy.ammo_max); fl_org = 0.5 * (self.enemy.absmin + self.enemy.absmax); te_smallflash(fl_org); - //te_lightning1(world,self.origin,self.enemy.origin); } void turret_fusionreactor_postthink() { - float f; - f = self.ammo / self.ammo_max; - self.tur_head.avelocity = '0 250 0' * f; + self.tur_head.avelocity = '0 250 0' * (self.ammo / self.ammo_max); } +/* void turret_fusionreactor_respawnhook() { self.tur_head.avelocity = '0 50 0'; } +*/ + +/** +** Preforms pre-fire checks for fusionreactor +**/ +float turret_fusionreactor_firecheck() +{ + if (self.attack_finished_single > time) + return 0; + + if (self.enemy.deadflag != DEAD_NO) + return 0; + + if (self.enemy == world) + return 0; + + if (self.ammo < self.shot_dmg) + return 0; + + if (self.enemy.ammo >= self.enemy.ammo_max) + return 0; + + if (vlen(self.enemy.origin - self.origin) > self.target_range) + return 0; + + if(self.team != self.enemy.team) + return 0; + + if not (self.enemy.ammo_flags & TFL_AMMO_ENERGY) + return 0; + + return 1; +} void turret_fusionreactor_dinit() { @@ -48,7 +66,7 @@ void turret_fusionreactor_dinit() self.shoot_flags = TFL_SHOOT_HITALLVALID; self.aim_flags = TFL_AIM_NO; self.track_flags = TFL_TRACK_NO; - self.turret_respawnhook = turret_fusionreactor_respawnhook; + // self.turret_respawnhook = turret_fusionreactor_respawnhook; if (turret_stdproc_init("fusreac_std",0,"models/turrets/base.md3","models/turrets/reactor.md3") == 0) { diff --git a/qcsrc/server/w_crylink.qc b/qcsrc/server/w_crylink.qc index 4495b720c5..151b508f41 100644 --- a/qcsrc/server/w_crylink.qc +++ b/qcsrc/server/w_crylink.qc @@ -397,6 +397,7 @@ void W_Crylink_Attack (void) proj.fade_rate = 1 / autocvar_g_balance_crylink_primary_other_fadetime; proj.nextthink = time + autocvar_g_balance_crylink_primary_other_lifetime + autocvar_g_balance_crylink_primary_other_fadetime; } + proj.teleport_time = time + autocvar_g_balance_crylink_primary_joindelay; proj.cnt = autocvar_g_balance_crylink_primary_bounces; //proj.scale = 1 + 1 * proj.cnt; @@ -484,6 +485,7 @@ void W_Crylink_Attack2 (void) proj.fade_rate = 1 / autocvar_g_balance_crylink_secondary_line_fadetime; proj.nextthink = time + autocvar_g_balance_crylink_secondary_line_lifetime + autocvar_g_balance_crylink_secondary_line_fadetime; } + proj.teleport_time = time + autocvar_g_balance_crylink_secondary_joindelay; proj.cnt = autocvar_g_balance_crylink_secondary_bounces; //proj.scale = 1 + 1 * proj.cnt; @@ -542,7 +544,7 @@ float w_crylink(float req) } else { - if (self.crylink_waitrelease) + if (self.crylink_waitrelease && (!self.crylink_lastgroup || time > self.crylink_lastgroup.teleport_time)) { // fired and released now! if(self.crylink_lastgroup) @@ -550,7 +552,6 @@ float w_crylink(float req) vector pos; entity linkjoineffect; - if(self.crylink_waitrelease == 1) { pos = W_Crylink_LinkJoin(self.crylink_lastgroup, autocvar_g_balance_crylink_primary_joinspread * autocvar_g_balance_crylink_primary_speed, autocvar_g_balance_crylink_primary_jointime); @@ -567,8 +568,6 @@ float w_crylink(float req) linkjoineffect.nextthink = time + w_crylink_linkjoin_time; linkjoineffect.owner = self; setorigin(linkjoineffect, pos); - - } self.crylink_waitrelease = 0; if(!w_crylink(WR_CHECKAMMO1) && !w_crylink(WR_CHECKAMMO2)) diff --git a/qcsrc/server/w_electro.qc b/qcsrc/server/w_electro.qc index 2a6b1f393e..e46f749c79 100644 --- a/qcsrc/server/w_electro.qc +++ b/qcsrc/server/w_electro.qc @@ -232,7 +232,7 @@ void lgbeam_think() remove(self); return; } - if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK || (g_freezetag && self.owner.freezetag_frozen)) + if (self.owner.weaponentity.state != WS_INUSE || (self.owner.ammo_cells <= 0 && !(self.owner.items & IT_UNLIMITED_WEAPON_AMMO)) || self.owner.deadflag != DEAD_NO || !self.owner.BUTTON_ATCK || self.owner.freezetag_frozen) { if(self == self.owner.lgbeam) self.owner.lgbeam = world; @@ -426,7 +426,7 @@ float w_electro(float req) W_Electro_Attack2(); self.electro_count = autocvar_g_balance_electro_secondary_count; weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_electro_secondary_animtime, w_electro_checkattack); - self.electro_secondarytime = time + autocvar_g_balance_electro_secondary_refire2; + self.electro_secondarytime = time + autocvar_g_balance_electro_secondary_refire2 * W_WeaponRateFactor(); } } else if (req == WR_PRECACHE) diff --git a/qcsrc/server/w_nex.qc b/qcsrc/server/w_nex.qc index 7b1239b898..031749be38 100644 --- a/qcsrc/server/w_nex.qc +++ b/qcsrc/server/w_nex.qc @@ -47,8 +47,8 @@ void W_Nex_Attack (float issecondary) { charge = autocvar_g_balance_nex_charge_mindmg / mydmg + (1 - autocvar_g_balance_nex_charge_mindmg / mydmg) * self.nex_charge; self.nex_charge *= autocvar_g_balance_nex_charge_shot_multiplier; // do this AFTER setting mydmg/myforce - // O RLY? -- divVerent - // YA RLY -- FruitieX + // O RLY? -- divVerent + // YA RLY -- FruitieX } else charge = 1; @@ -56,10 +56,10 @@ void W_Nex_Attack (float issecondary) myforce *= charge; W_SetupShot (self, TRUE, 5, "weapons/nexfire.wav", CHAN_WEAPON, mydmg); - if(charge > autocvar_g_balance_nex_charge_limit && autocvar_g_balance_nex_charge_limit) // if the Nex is overcharged, we play an extra sound - { - sound (self, CHAN_WEAPON2, "weapons/nexcharge.wav", VOL_BASE * (charge - 0.5 * autocvar_g_balance_nex_charge_limit) / (1 - 0.5 * autocvar_g_balance_nex_charge_limit), ATTN_NORM); - } + if(charge > autocvar_g_balance_nex_charge_limit && autocvar_g_balance_nex_charge_limit) // if the Nex is overcharged, we play an extra sound + { + sound (self, CHAN_WEAPON2, "weapons/nexcharge.wav", VOL_BASE * (charge - 0.5 * autocvar_g_balance_nex_charge_limit) / (1 - 0.5 * autocvar_g_balance_nex_charge_limit), ATTN_NORM); + } yoda = 0; FireRailgunBullet (w_shotorg, w_shotorg + w_shotdir * MAX_SHOT_DISTANCE, mydmg, myforce, mymindist, mymaxdist, myhalflife, myforcehalflife, WEP_NEX); @@ -69,7 +69,7 @@ void W_Nex_Attack (float issecondary) //beam and muzzle flash done on client SendCSQCNexBeamParticle(charge); - + // flash and burn the wall if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) Damage_DamageInfo(trace_endpos, mydmg, 0, 0, myforce * w_shotdir, WEP_NEX, self); @@ -94,27 +94,13 @@ float w_nex(float req) if(autocvar_g_balance_nex_charge && self.nex_charge < autocvar_g_balance_nex_charge_limit) self.nex_charge = min(1, self.nex_charge + autocvar_g_balance_nex_charge_rate * frametime / W_TICSPERFRAME); - if(autocvar_g_balance_nex_charge) - { - self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); - self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); - self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); - - if(self.nex_charge > autocvar_g_balance_nex_charge_limit) - { - self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); - self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); - self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); - } - } - if(autocvar_g_balance_nex_secondary_chargepool) - if(self.nex_chargepool_ammo < 1) - { - if(self.nex_chargepool_pauseregen_finished < time) - self.nex_chargepool_ammo = min(1, self.nex_chargepool_ammo + autocvar_g_balance_nex_secondary_chargepool_regen * frametime / W_TICSPERFRAME); - self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_nex_secondary_chargepool_pause_health_regen); - } + if(self.nex_chargepool_ammo < 1) + { + if(self.nex_chargepool_pauseregen_finished < time) + self.nex_chargepool_ammo = min(1, self.nex_chargepool_ammo + autocvar_g_balance_nex_secondary_chargepool_regen * frametime / W_TICSPERFRAME); + self.pauseregen_finished = max(self.pauseregen_finished, time + autocvar_g_balance_nex_secondary_chargepool_pause_health_regen); + } if (self.BUTTON_ATCK) { @@ -124,43 +110,52 @@ float w_nex(float req) weapon_thinkf(WFRAME_FIRE1, autocvar_g_balance_nex_primary_animtime, w_ready); } } - if (self.BUTTON_ATCK2) + if ((autocvar_g_balance_nex_secondary_charge && !autocvar_g_balance_nex_secondary) ? self.BUTTON_ZOOM : self.BUTTON_ATCK2) { if(autocvar_g_balance_nex_secondary_charge) { self.nex_charge_rottime = time + autocvar_g_balance_nex_charge_rot_pause; dt = frametime / W_TICSPERFRAME; - if(autocvar_g_balance_nex_secondary_chargepool) + if(self.nex_charge < 1) { - if(autocvar_g_balance_nex_secondary_ammo) + if(autocvar_g_balance_nex_secondary_chargepool) { - // always deplete if secondary is held - self.nex_chargepool_ammo = max(0, self.nex_chargepool_ammo - autocvar_g_balance_nex_secondary_ammo * dt); + if(autocvar_g_balance_nex_secondary_ammo) + { + // always deplete if secondary is held + self.nex_chargepool_ammo = max(0, self.nex_chargepool_ammo - autocvar_g_balance_nex_secondary_ammo * dt); - dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate); - self.nex_chargepool_pauseregen_finished = time + autocvar_g_balance_nex_secondary_chargepool_pause_regen; - dt = min(dt, self.nex_chargepool_ammo); - dt = max(0, dt); + dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate); + self.nex_chargepool_pauseregen_finished = time + autocvar_g_balance_nex_secondary_chargepool_pause_regen; + dt = min(dt, self.nex_chargepool_ammo); + dt = max(0, dt); - self.nex_charge += dt * autocvar_g_balance_nex_secondary_charge_rate; + self.nex_charge += dt * autocvar_g_balance_nex_secondary_charge_rate; + } } - } - else if(autocvar_g_balance_nex_secondary_ammo) - { - if(self.nex_charge < 1) + else if(autocvar_g_balance_nex_secondary_ammo) { - dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate); - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) + if(self.BUTTON_ATCK2) // only eat ammo when the button is pressed { - dt = min(dt, (self.ammo_cells - autocvar_g_balance_nex_primary_ammo) / autocvar_g_balance_nex_secondary_ammo); - dt = max(0, dt); - if(dt > 0) + dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate); + if not(self.items & IT_UNLIMITED_WEAPON_AMMO) { - self.ammo_cells = max(autocvar_g_balance_nex_secondary_ammo, self.ammo_cells - autocvar_g_balance_nex_secondary_ammo * dt); + dt = min(dt, (self.ammo_cells - autocvar_g_balance_nex_primary_ammo) / autocvar_g_balance_nex_secondary_ammo); + dt = max(0, dt); + if(dt > 0) + { + self.ammo_cells = max(autocvar_g_balance_nex_secondary_ammo, self.ammo_cells - autocvar_g_balance_nex_secondary_ammo * dt); + } } + self.nex_charge += dt * autocvar_g_balance_nex_secondary_charge_rate; } + } + + else + { + dt = min(dt, (1 - self.nex_charge) / autocvar_g_balance_nex_secondary_charge_rate); self.nex_charge += dt * autocvar_g_balance_nex_secondary_charge_rate; } } @@ -174,6 +169,20 @@ float w_nex(float req) } } } + + if(autocvar_g_balance_nex_charge) + { + self.weaponentity_glowmod_x = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); + self.weaponentity_glowmod_y = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); + self.weaponentity_glowmod_z = autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_half * min(1, self.nex_charge / autocvar_g_balance_nex_charge_limit); + + if(self.nex_charge > autocvar_g_balance_nex_charge_limit) + { + self.weaponentity_glowmod_x = self.weaponentity_glowmod_x + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_red_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); + self.weaponentity_glowmod_y = self.weaponentity_glowmod_y + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_green_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); + self.weaponentity_glowmod_z = self.weaponentity_glowmod_z + autocvar_g_weapon_charge_colormod_hdrmultiplier * autocvar_g_weapon_charge_colormod_blue_full * (self.nex_charge - autocvar_g_balance_nex_charge_limit) / (1 - autocvar_g_balance_nex_charge_limit); + } + } } else if (req == WR_PRECACHE) { diff --git a/qcsrc/server/w_seeker.qc b/qcsrc/server/w_seeker.qc index eb64dddd80..2b858be074 100644 --- a/qcsrc/server/w_seeker.qc +++ b/qcsrc/server/w_seeker.qc @@ -1,5 +1,5 @@ #ifdef REGISTER_WEAPON -REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 9, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "seeker", "seeker", "T.A.G. Seeker"); +REGISTER_WEAPON(SEEKER, w_seeker, IT_ROCKETS, 8, WEP_FLAG_NORMAL | WEP_TYPE_SPLASH, BOT_PICKUP_RATING_MID, "seeker", "seeker", "T.A.G. Seeker"); #else #ifdef SVQC //.float proxytime; = autoswitch diff --git a/qcsrc/server/w_shotgun.qc b/qcsrc/server/w_shotgun.qc index 08c4a901e1..d9d717ecde 100644 --- a/qcsrc/server/w_shotgun.qc +++ b/qcsrc/server/w_shotgun.qc @@ -56,9 +56,12 @@ void shotgun_meleethink (void) vector angle; angle = v_forward; + float meleetime; + meleetime = autocvar_g_balance_shotgun_secondary_melee_time * W_WeaponRateFactor(); + // perform trace float f; - f = (self.cnt + autocvar_g_balance_shotgun_secondary_melee_time - time) / autocvar_g_balance_shotgun_secondary_melee_time * 2 - 1; + f = (self.cnt + meleetime - time) / meleetime * 2 - 1; vector targpos; targpos = self.owner.origin + self.owner.view_ofs + angle * autocvar_g_balance_shotgun_secondary_melee_range + v_right * f * autocvar_g_balance_shotgun_secondary_melee_swing + v_up * f * autocvar_g_balance_shotgun_secondary_melee_swing; @@ -74,7 +77,7 @@ void shotgun_meleethink (void) Damage (trace_ent, self.owner, self.owner, autocvar_g_balance_shotgun_secondary_damage * min(1, f + 1), WEP_SHOTGUN | HITTYPE_SECONDARY , self.owner.origin + self.owner.view_ofs, force); remove(self); } - else if(time >= self.cnt + autocvar_g_balance_shotgun_secondary_melee_time) // missed, remove ent + else if(time >= self.cnt + meleetime) // missed, remove ent remove(self); else // continue swinging the weapon in hope of hitting someone :) self.nextthink = time; diff --git a/qcsrc/server/w_sniperrifle.qc b/qcsrc/server/w_sniperrifle.qc index 720ab8f82b..22992dc3cf 100644 --- a/qcsrc/server/w_sniperrifle.qc +++ b/qcsrc/server/w_sniperrifle.qc @@ -212,9 +212,7 @@ float w_sniperrifle(float req) { if(self.sniperrifle_bulletcounter < 0) // forced reload (e.g. because interrupted) { - if(self.switchweapon == self.weapon) - if(self.weaponentity.state == WS_READY) - W_SniperRifle_Reload(); + self.wish_reload = 1; } else { @@ -231,16 +229,32 @@ float w_sniperrifle(float req) { if (autocvar_g_balance_sniperrifle_secondary) { - if (weapon_prepareattack_check(1, autocvar_g_balance_sniperrifle_secondary_refire)) - if (time >= self.sniperrifle_accumulator + autocvar_g_balance_sniperrifle_secondary_burstcost) - { - weapon_prepareattack_do(1, autocvar_g_balance_sniperrifle_secondary_refire); - W_SniperRifle_BulletHail(autocvar_g_balance_sniperrifle_secondary_bullethail, W_SniperRifle_Attack2, WFRAME_FIRE2, autocvar_g_balance_sniperrifle_secondary_animtime, autocvar_g_balance_sniperrifle_primary_refire); - self.sniperrifle_accumulator += autocvar_g_balance_sniperrifle_secondary_burstcost; - } + if(autocvar_g_balance_sniperrifle_secondary_reload) + self.wish_reload = 1; + else + { + if (weapon_prepareattack_check(1, autocvar_g_balance_sniperrifle_secondary_refire)) + if (time >= self.sniperrifle_accumulator + autocvar_g_balance_sniperrifle_secondary_burstcost) + { + weapon_prepareattack_do(1, autocvar_g_balance_sniperrifle_secondary_refire); + W_SniperRifle_BulletHail(autocvar_g_balance_sniperrifle_secondary_bullethail, W_SniperRifle_Attack2, WFRAME_FIRE2, autocvar_g_balance_sniperrifle_secondary_animtime, autocvar_g_balance_sniperrifle_primary_refire); + self.sniperrifle_accumulator += autocvar_g_balance_sniperrifle_secondary_burstcost; + } + } } } } + if(self.wish_reload) + { + if(self.switchweapon == self.weapon) + { + if(self.weaponentity.state == WS_READY) + { + self.wish_reload = 0; + W_SniperRifle_Reload(); + } + } + } } else if (req == WR_PRECACHE) { @@ -266,7 +280,7 @@ float w_sniperrifle(float req) return self.ammo_nails >= autocvar_g_balance_sniperrifle_secondary_ammo; else if (req == WR_RELOAD) { - W_SniperRifle_Reload(); + self.wish_reload = 1; } else if (req == WR_RESETPLAYER) { diff --git a/qcsrc/server/w_uzi.qc b/qcsrc/server/w_uzi.qc index 50f59ff01e..f3dc51ce83 100644 --- a/qcsrc/server/w_uzi.qc +++ b/qcsrc/server/w_uzi.qc @@ -168,7 +168,10 @@ void uzi_mode1_fire_burst() self.misc_bulletcounter = self.misc_bulletcounter + 1; if (self.misc_bulletcounter == 0) - weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_uzi_burst_refire2, w_ready); + { + ATTACK_FINISHED(self) = time + autocvar_g_balance_uzi_burst_refire2 * W_WeaponRateFactor(); + weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_uzi_burst_animtime, w_ready); + } else { weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_uzi_burst_refire, uzi_mode1_fire_burst); diff --git a/tooltips.db.fr b/tooltips.db.fr new file mode 100644 index 0000000000..cf672c3e40 --- /dev/null +++ b/tooltips.db.fr @@ -0,0 +1,221 @@ +0 +\XonoticSingleplayerDialog\Jouer en mode un joueur contre des adversaires contrôlés par l'ordinateur + + +\XonoticMultiplayerDialog\Jouer en ligne avec des amis en réseau local ou sur Internet +\XonoticMultiplayerDialog/Servers\Trouver des serveurs pour y jouer dessus +\menu_slist_showempty\Montrer les serveurs vides +\menu_slist_showfull\Montrer les serveurs où toutes les places sont prises +\net_slist_pause\Ne met pas à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur +\XonoticMultiplayerDialog/Info\Montrer plus d'information sur le serveur séléctionné +\XonoticMultiplayerDialog/Bookmark\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard +\XonoticMultiplayerDialog/Havoc\Changer au mode Havoc qui comporte des modifications sur le jeu +\XonoticMultiplayerDialog/Create\Héberger votre propre partie +\XonoticMultiplayerDialog/Demos\Regarder des Vidéos pré-enregistrées +\XonoticMultiplayerDialog/Player Setup\Personaliser vos paramètres + +\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe qui a le plus besoin de vous (recommandé) +\XonoticTeamSelectDialog/red\Joindre l'équipe rouge +\XonoticTeamSelectDialog/blue\Joindre l'équipe bleue +\XonoticTeamSelectDialog/yellow\Joindre l'équipe jaune +\XonoticTeamSelectDialog/pink\Joindre l'équipe rose + +\timelimit_override\Limite de temps au match, le match se finit quand elle est atteinte +\fraglimit_override\Limite de tués pour le match, le match se finit quand elle est atteinte +\menu_maxplayers\Le nombre maximum de personnes pouvant jouer sur votre serveur en même temps +\bot_number\Nombre d'adversaires ordinateur +\skill\Spécifier la difficulté des adversaires ordinateur +\g_maplist_votable\Le nombre de cartes pouvant être votées à la fin du match +\sv_vote_simple_majority_factor\À partir de 51% de oui seulement, un vote est gagné +\XonoticMultiplayerDialog/Advanced settings...\Paramètres du serveur avancés +\XonoticMultiplayerDialog/Mutators...\Spéciales et arènes d'une seule arme +\g_cloaked\Tous les joueurs sont presque invisibles +\g_footsteps\Activer les bruitages de pas +\g_midair\Il faut que votre adversaire soit en l'air pour lui faire mal +\g_vampire\Les dégâts faits à vos enemies vous font gagner de la santé +\g_bloodloss\Si vous avez moins de santé que spécifié ici, vous perdrez du sang et mourez progressivement +\sv_gravity\Vous tombez plus lentement, comme sur la lune +\g_grappling_hook\Tous les joueurs ont un grappin +\g_jetpack\Tous les joueurs ont un jetpack +\g_pinata\Tous les joueurs lâchent toutes leurs armes quand ils meurent +\g_weapon_stay\Les armes restent où elles sont quand elles sont prises sur la carte +\g_weaponarena\Séléctionner une arène d'une seule arme donne des munitions illimitées pour cette arme, et désactive toutes les autres armes +\menu_weaponarena_with_laser\Also enable the laser in the weapon arena +\g_minstagib\Tous les joueurs reçoivent un MinstaNex, qui est un sniper hyperpuissant qui tue d'un coup. Si vous n'avez plus de munitions, vous mourez progressivement. +\g_nixnex\No Items Xonotic; tous les joueurs ont la même arme en même temps, et on change d'arme régulièrement +\g_nixnex_with_laser\Porter le laser avec l'arme du No Items Xonotic +\XonoticMultiplayerDialog/All\Séléctionner toutes les cartes +\XonoticMultiplayerDialog/None\Déséléctionner toutes les cartes + + +\XonoticMultiplayerDialog/Timedemo\Faire un test de performance en utilisant la vidéo choisie + +\fov\Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130 +\cl_bobcycle\Effet de "tremblement" de la caméra en courant +\cl_zoomfactor\Facteur de Zoom +\cl_zoomsensitivity\Changer la sensitivité du Zoom: 0 est la plus basse, 1 ne comporte pas de changement par rapport au mode dézoomé +\cl_zoomspeed\Facteur "d'adoucissement" du Zoom, 0 désactive complètement +\XonoticMultiplayerDialog/Weapon settings...\Paramétrer les armes (affichage, priorité) + +\cl_weaponpriority_useforcycling\Utiliser la liste de priorité pour le changement d'armes à la molette +\cl_autoswitch\Automatiquement changer d'arme si vous avez une meilleure arme que celle que vous portez +\r_drawviewmodel\Afficher l'arme à la permière personne +\cl_gunalign\Position de l'arme à l'écran, reconnection au serveur nécessaire pour prendre effet + +\crosshair_per_weapon\Set a different crosshair for each weapon, good if you play without weapon models +\crosshair_color_override\Also set the color of the crosshair depending on the weapon you are currently holding +\crosshair_size\Ajuster la taille du viseur +\crosshair_color_alpha\Ajuster l'opacité du viseur +\crosshair_color_red\Couleur: intensité du rouge dans le viseur +\crosshair_color_green\Couleur: intensité du vert dans le viseur +\crosshair_color_blue\Couleur: intensité du bleu dans le viseur +\sbar_hudselector\Utiliser l'ancienne interface HUD +\XonoticMultiplayerDialog/Radar, HUD & Waypoints...\Ajuster les paramètres de l'interface, de la mini-carte et des Waypoints +\_cl_name\Pseudonyme utilisé pour vous reconnaître dans le jeu + +\XonoticSettingsDialog\Changer les paramètres du jeu +\XonoticCreditsDialog\Les Crédits de Xonotic +\XonoticTeamSelectDialog\- +\XonoticMutatorsDialog\- +\XonoticMapInfoDialog\- +\XonoticUserbindEditDialog\- +\XonoticWinnerDialog\- +\XonoticWeaponsDialog\- +\XonoticRadarDialog\- +\XonoticServerInfoDialog\- +\XonoticCvarsDialog\- + +\XonoticQuitDialog\Quitter Xonotic +\XonoticQuitDialog/Yes\Retour au boulot... +\XonoticQuitDialog/No\'Faut que je fragge plus de monde! + +\XonoticSettingsDialog/Input\Paramètres contrôle souris/clavier +\sensitivity\Sensitivité de la souris +\menu_mouse_speed\Sensitivité de la souris dans les menus, n'affecte pas le jeu +\m_filter\Adoucit le mouvement de souris, mais crée une légère latence de souris +\m_pitch\Inverser la souris sur l'axe vertical (mode jeu d'avion) +\vid_dgamouse\Utiliser une souris DGA +\con_closeontoggleconsole\Autoriser la fermeture de console avec la touche d'ouverture de console (sinon, Shift+Échap) +\sbar_showbinds\Afficher les actions possibles avec des touches/commandes +\cl_showpressedkeys\Afficher les touches qu'un joueur est en train d'appuyer + +\XonoticSettingsDialog/Video\Video settings +\vid_width\Résolution de l'écran +\vid_bitsperpixel\Profondeur des couleurs: 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé) +\vid_fullscreen\Activer le mode plein écran (par défaut: activé) +\vid_vsync\Activer la syncronisation verticale pour éviter des problèmes d'affichage, limite le nombre maximum d'images par seconde (par défaut: désactivé) +\r_glsl\Activer les Shaders OpenGL 2.0 pour des effets de lumière améliorés +\gl_vbo\Utiliser les VBOs pour stocker les modèles 3D statiques dans la mémoire pour une meilleure performance (par défaut: Points et Triangles) +\r_depthfirst\Éviter des problèmes de profondeur de rendu en faisant un rendu de profondeur de la carte/joueurs avant le rendu "standard" (par défaut: désactivé) +\gl_texturecompression\Compresser les textures pour économiser de la mémoire graphique (par défaut: aucun) +\gl_finish\Faire attendre le processeur que le rendu graphique se finisse pour éviter des problèmes d'affichage divers (par défaut: désactivé) +\v_brightness\Luminosité du noir (par défaut: 0) +\v_contrast\Luminosité du blanc (par défaut: 1) +\v_gamma\Correction du gamma ne changeant pas la luminosité du noir ou du blanc (par défaut: 1.125) +\v_contrastboost\Multiplier le constraste dans des salles sombres (par défaut: 1) +\r_glsl_saturation\Ajustement de la saturation (0 = noir et blanc, 1 = normal, 2 = saturé) des couleurs (par défaut: 1) +\v_glslgamma\Utiliser GLSL pour corriger le gamma, attention, cela risque d'augementer fortement l'utilisation de ressources (par défaut: désactivé) +\r_ambient\Lumière ambiente, si elle est trop élévée, les cartes auront un éclairage plus "plat" et moins contrasté +\r_hdr_scenebrightness\Éclairage du rendu global (par défaut: 1) +\vid_samples\Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources +\v_flipped\Mode mirroir (par défaut: désactivé) + +\XonoticSettingsDialog/Effects\Paramètres des effets graphiques +\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de carte (courbes, tuyaux) (par défaut: normal) +\gl_picmip\Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut: normal) +\r_picmipworld\If set, only reduce the texture quality of models (default: enabled) +\mod_q3bsp_nolightmaps\Utiliser des lightmaps haute résolution, augmente l'utilisation des resources, mais rend les lightmaps plus nettes (par défaut: activé) +\cl_particles_quality\Nombre de particules; moins de particules consomment moins de ressources (par défaut: 0.5) +\r_drawparticles_drawdistance\Toutes les particules qui sont plus loin que cette distance ne seront pas affichées (par défaut: 1000) +\cl_decals\Activer les marques d'impacts et de sang (par défaut: activé) +\r_drawdecals_drawdistance\Toutes les marques d'impacts qui sont plus loin que cette distance ne seront pas affichées (par défaut: 300) +\cl_decals_time\Temps en secondes avant que les marques d'impacts disparaissent (par défaut: 2 secondes) +\cl_gentle\Remplacer les effets gore par des effets moins violents (par défaut: désactivé) +\cl_nogibs\Réduire le nombre de Gibs ou les désactiver totalement (par défaut: beaucoup) +\v_kicktime\Faire trembler la vue en recevant des dégâts (par défaut: 0) +\gl_texture_anisotropy\Qualité du filtrage anistrope (par défaut: 1x) +\r_glsl_deluxemapping\Utiliser les effets lumineux avancés (par défaut: activé) +\r_shadow_gloss\Utiliser le reflet des textures (par défaut: activé) +\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled) +\r_shadow_realtime_dlight\Activer le rendu des lumières dynamiques en temps réel (par défaut: activé) +\r_shadow_realtime_dlight_shadows\Activer le rendu des ombres depuis les lumières dynamiques en temps réel (par défaut: désactivé) +\r_shadow_realtime_world\Activer le rendu des lumières carte en temps réel, a un gros impact sur la performance (par défaut: désactivé) +\r_shadow_realtime_world_shadows\Activer le rendu des ombres depuis les lumières carte en temps réel, a un impact sur la performance aussi (par défaut: désactivé) +\r_shadow_usenormalmap\Utiliser des effets d'ombrage de lumière sur les textures (par défaut: activé) +\r_showsurfaces\Désactiver les textures et les remplacer par des couleurs unies. Utile pour les configurations très faible, mais laid. (par défaut: désactivé) +\r_glsl_offsetmapping\Activer l'effet de relief sur les textures, a un léger impact sur la performance (par défaut: désactivé) +\r_glsl_offsetmapping_reliefmapping\Augmenter la qualité des effets de relief sur les textures, a un gros impact sur la performance (par défaut: désactivé) +\r_water\Activer des reflets de réflecion et de réfraction d'eau et des portails Warpzone (par défaut: désactivé) +\r_water_resolutionmultiplier\Qualité des reflets d'eau et des portails Warpzone, l'augmenter a un gros impact sur la performance (par défaut: bon) +\r_coronas\Activer des effets d'éblouissement peu gourmands (par défaut: activé) +\r_coronas_occlusionquery\Prendre en compte la visibilité pour les effets "Brillance Lumière" (par défaut: activé) +\r_bloom\Activer un effet d'éblouissement plus beau, mais gourmand (par défaut: désactivé) +\r_hdr\Activer un effet d'ébloissement encore plus beau, mais encore plus gourmand (par défaut: désactivé) +\r_motionblur\Intensité du flou de mouvement - 0.5 est recommandé +\r_damageblur\Intensité du flou en recevant des dégâts - 0.4 est recommandé + +\XonoticSettingsDialog/Audio\Audio settings +\bgmvolume\- +\volume\- +\snd_staticvolume\- +\snd_worldchannel0volume\- +\snd_entchannel3volume\- +\snd_playerchannel6volume\- +\snd_playerchannel7volume\- +\snd_entchannel4volume\- +\snd_playerchannel2volume\- +\snd_playerchannel1volume\- +\snd_speed\Fréquence de la sortie audio +\snd_channels\Nombre de canaux pour la sortie audio +\snd_swapstereo\Échanger les canneaux stéréo gauche/droite +\snd_spatialization_control\Essayer de diminuer le "constraste" entre la partie gauche et droite du casque audio pour un meilleur son +\cl_voice_directional\Activer les voix des personnages sur la carte +\cl_voice_directional_taunt_attenuation\Distance à laquelle les voix sont audibles +\cl_autotaunt\Automatiquement narguer les enemis quand vous les tuez +\cl_sound_maptime_warning\Voix (en anglais) qui vous dit le temps restant avant la fin du match +\cl_hitsound\Jouer un son quand vous touchez un enemi +\menu_sounds\Jouer des sons en cliquant ou en passant la souris sur des options + +\XonoticSettingsDialog/Network\Paramètres du jeu en réseau +\cl_movement\Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau +\cl_nolerp\Algorithme pour éviter les saccades lors de parties en réseau +\shownetgraph\Show a +\_cl_rate\Specify your network speed with this slider +\cl_netfps\Nombre maximum de paquets à envoyer au server chaque seconde +\cl_curl_maxdownloads\Nombre maximum de téléchargements simultanés +\cl_curl_maxspeed\Vitesse maximum de téléchargement +\cl_port\Forcer le client à passer par le port défini (UDP) s'il n'est pas 0 + +\XonoticSettingsDialog/Misc\Autres paramètres +\showtime\Montrer l'heure, utile pour les captures d'écran +\showdate\Montrer la date, utile pour les captures d'écran +\showfps\Montrer le nombre d'Images Par Seconde rendues (Frames Per Second = FPS) +\cl_showspeed\Montrer la vitesse du joueur +\cl_showspeed_unit\Séléctionner l'unité de mesure de la vitesse (qu/s = in/s) +\cl_showacceleration\Montrer l'accélération du joueur +\cl_showacceleration_scale\Éxagérer l'accéléromètre avec ce facteur pour qu'il soit plus visible + +\XonoticSettingsDialog/Advanced settings...\Paramètres avancés pour configuer le jeu dans ses moindres détails +\g_friendlyfire\Pourcentage de dégâts infligés aux équipiers si vous les touchez +\g_mirrordamage\Pourcentage de dégâts infligés aux équipiers qui vous sera renvoyé +\g_tdm_teams_override\Écraser le nombre d'équipes défini par la carte + +\cl_teamradar_position\- +\cl_teamradar_size\- +\cl_teamradar_zoommode\- +\cl_teamradar_rotation\- +\cl_teamradar_scale\- +\cl_teamradar_foreground_alpha\- +\cl_teamradar_background_alpha\Opacité de l'arrière-plan du radar +\viewsize\Enable/Désactiver l'arrière plan de l'interface +\sbar_alpha_bg\Opacité de l'arrière plan de l'interface +\sbar_color_bg_r\Intensité du rouge dans l'arrière-plan de l'interface +\sbar_color_bg_g\Intensité du vert dans l'arrière-plan de l'interface +\sbar_color_bg_b\Intensité du bleu dans l'arrière-plan de l'interface +\sbar_color_bg_team\Saturation de la couleur d'équipe avec l'arrière-plan de l'interface +\cl_hidewaypoints\Montrer/Cacher les Waypoints (flèches 3D) +\g_waypointsprite_scale\Ajuster la taille des Waypoints +\g_waypointsprite_alpha\Ajuster l'opacité des Waypoints +\cl_shownames\Afficher le nom du joueur que vous pointez avec votre viseur + +\crosshair_hittest\Aucun: aucun effet de viseur - TrueAim: rendre le viseur flou si vous risquez de vous blesser vous même ou un équipier - Enemis: rendre le viseur plus grand si vous pouvez toucher un enemi diff --git a/update-cvarcount.sh b/update-cvarcount.sh index 0bd63e9fb2..b7c87a34a6 100755 --- a/update-cvarcount.sh +++ b/update-cvarcount.sh @@ -14,6 +14,7 @@ for b in balance*.cfg; do awk '/^seta? g_/ { print $2; }' "$b" | sort -u | tr -d '\r' > "$B" diff "$A" "$B" | grep '^[<>]' | sort rm -f "$A" "$B" - exit 1 + echo "Please wait for 30 seconds, so you have had enough time to read this..." + sleep 30 fi done diff --git a/xonotic-credits.txt b/xonotic-credits.txt index ec46525c90..977c7008cd 100644 --- a/xonotic-credits.txt +++ b/xonotic-credits.txt @@ -53,6 +53,20 @@ Merlijn Hofstra DarkPlaces by Forest "LordHavoc" Hale +**Translators + +*German +Rudolf "divVerent" Polzer + +*French +Calinou + +*Portuguese +Ricardo "Hellgardia" Silva + +*Russian +Lord Canistra + **Active Contributors Antonio "terencehill" Piu Ben "MooKow" Banker @@ -63,6 +77,7 @@ Kristian "morfar" Johansson kojn Maik "SavageX" Merten MrBougo +Ruszkai "C.Brutail" Ákos Samual Lenks Stephan "esteel" Stahl Wolfgang "Blub\0" Bumiller diff --git a/xonotic-credits.txt.fr b/xonotic-credits.txt.fr new file mode 100644 index 0000000000..472491bf16 --- /dev/null +++ b/xonotic-credits.txt.fr @@ -0,0 +1,156 @@ +**Dévlopeurs principaux + +Rudolf "divVerent" Polzer +-z- +Merlijn Hofstra +morphed +mand1nga +tZork + + +**Dévlopeurs secondaires + +*Art +Diabolik a.k.a Dib + +*Textures / Web +-z- (web / game) +FruitieX (game / web) + +*Modèles 3D +morphed + +*Concepts +LJFHutch +theShadow + +*Création des cartes +FruitieX +MirceaKitsune + +*Musique / Sons +mand1nga +Merlijn Hofstra +remaxim + +*Améliorations du moteur et QA +Rudolf "divVerent" Polzer + +*Code source du jeu +Rudolf "divVerent" Polzer +FruitieX +tZork + +*Marketing / Management du Projet +-z- +mand1nga + +*Légalité +Rudolf "divVerent" Polzer +Merlijn Hofstra + +**Moteur du jeu +DarkPlaces +by Forest "LordHavoc" Hale + +**Traducteurs + +*Allemand +Rudolf "divVerent" Polzer + +*Français +Calinou + +*Portugais +Ricardo "Hellgardia" Silva + +**Contribueurs actifs +Antonio "terencehill" Piu +Ben "MooKow" Banker +Calinou +chooksta +Cuinn "Cuinnton" Herrick +Kristian "morfar" Johansson +kojn +Maik "SavageX" Merten +MrBougo +Ruszkai "C.Brutail" Ákos +Samual Lenks +Stephan "esteel" Stahl +Wolfgang "Blub\0" Bumiller + +**Anciens contribueurs +Alexander "motorsep" Zubov +Amos "torus" Dudley +Andreas "Black" Kirsch +Attila "WW3" Houtkooper +BigMac +blkrbt +Braden "meoblast001" Walters +Brain Younds +Chris "amethyst7" Matz +Christian Ice +Clinton "Kaziganthe" Freeman +Dan "Digger" Korostelev +Dan "Wazat" Hale +Donkey +dstrek +Dustin Geeraert +Edgenetwork +Edward "Ed" Holness +Eric "Munyul Verminard" Sambach +Fabien "H. Reaper" Tschirhart +FrikaC +Garth "Zombie" Hendy +Gerd "Elysis" Raudenbusch +Gottfried "Toddd" Hofmann +Henning "Tymo" Janssen +"Innovati" +Jitspoe +Jody Gallagher +Juergen "LowDragon" Timm +KadaverJack +Kevin "Tyrann" Shanahan +Kurt Dereli +lcatlnx +Lee David Ash +Lee Vermeulen +leileilol +Marius "GreEn`mArine" Shekow +Marko "Urre" Permanto +Mathieu "Elric" Olivier +Mattrew "Tronyn" Rye +MauveBib +Mephisto +michaelb +Michael "Tenshihan" Quinn +Munyul +Netzwerg +NoelCower +Parapraxis +Paul "Strahlemann" Evers +Petithomme +Q1 Retexturing Project +Qantourisc +Rick "Rat" Kelley +Robert "ai" Kuroto +Ronan +Sajt +Severin "sev" Meyer +Shaggy +Shank +Simon O'Callaghan +SomeGuy +Spike +Spirit +Steve Vermeulen +Supajoe +Tei +terencehill +Tomaz +Ulrich Galbraith +Vortex +William Libert +William "Willis" Weilep +Yves "EviLair" Allaire +Zenex