]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Merge branch 'master' into TimePath/spawnfunc 227/head
authorTimePath <andrew.hardaker1995@gmail.com>
Sat, 3 Oct 2015 07:17:49 +0000 (17:17 +1000)
committerTimePath <andrew.hardaker1995@gmail.com>
Sat, 3 Oct 2015 07:19:10 +0000 (17:19 +1000)
# Conflicts:
# qcsrc/common/turrets/unit/ewheel.qc
# qcsrc/common/turrets/unit/flac.qc
# qcsrc/common/turrets/unit/fusionreactor.qc
# qcsrc/common/turrets/unit/hellion.qc
# qcsrc/common/turrets/unit/hk.qc
# qcsrc/common/turrets/unit/machinegun.qc
# qcsrc/common/turrets/unit/mlrs.qc
# qcsrc/common/turrets/unit/phaser.qc
# qcsrc/common/turrets/unit/plasma.qc
# qcsrc/common/turrets/unit/plasma_dual.qc
# qcsrc/common/turrets/unit/tesla.qc
# qcsrc/common/turrets/unit/walker.qc
# qcsrc/server/t_items.qc

269 files changed:
common.de.po
common.es.po
common.fr.po
common.hu.po
common.it.po
common.ru.po
common.uk.po
gfx/hud/default/minigames/qto/board.jpg [deleted file]
gfx/hud/default/minigames/qto/board_alpha.jpg [deleted file]
gfx/hud/default/minigames/qto/icon.jpg [deleted file]
gfx/hud/default/minigames/qto/icon_notif.jpg [deleted file]
gfx/hud/default/minigames/qto/icon_notif_alpha.jpg [deleted file]
gfx/hud/default/minigames/qto/piece0.tga [deleted file]
gfx/hud/default/minigames/qto/piece1.tga [deleted file]
gfx/hud/default/minigames/snake/board.jpg [new file with mode: 0644]
gfx/hud/default/minigames/snake/board_alpha.jpg [new file with mode: 0644]
gfx/hud/default/minigames/snake/body.tga [new file with mode: 0644]
gfx/hud/default/minigames/snake/head.tga [new file with mode: 0644]
gfx/hud/default/minigames/snake/icon.jpg [new file with mode: 0644]
gfx/hud/default/minigames/snake/icon_notif.jpg [new file with mode: 0644]
gfx/hud/default/minigames/snake/icon_notif_alpha.jpg [new file with mode: 0644]
gfx/hud/default/minigames/snake/mouse.tga [new file with mode: 0644]
gfx/hud/default/minigames/snake/tail.tga [new file with mode: 0644]
gfx/hud/default/minigames/snake/tongue.tga [new file with mode: 0644]
keybinds.txt [deleted file]
keybinds.txt.de [deleted file]
keybinds.txt.es [deleted file]
keybinds.txt.fr [deleted file]
keybinds.txt.hu [deleted file]
keybinds.txt.it [deleted file]
keybinds.txt.ru [deleted file]
keybinds.txt.uk [deleted file]
minigames.cfg
monsters.cfg
qcsrc/Makefile
qcsrc/client/_all.qh
qcsrc/client/controlpoint.qc
qcsrc/client/controlpoint.qh
qcsrc/client/csqcmodel_hooks.qc
qcsrc/client/csqcmodel_hooks.qh [deleted file]
qcsrc/client/damage.qc
qcsrc/client/generator.qc
qcsrc/client/generator.qh
qcsrc/client/gibs.qc
qcsrc/client/gibs.qh
qcsrc/client/hook.qc
qcsrc/client/hook.qh
qcsrc/client/main.qc
qcsrc/client/mapvoting.qc
qcsrc/client/progs.inc
qcsrc/client/quickmenu.qc
qcsrc/client/tuba.qc
qcsrc/client/view.qc
qcsrc/client/weapons/projectile.qc
qcsrc/collect-precache.sh [deleted file]
qcsrc/common/effects/effects.inc
qcsrc/common/items/all.qc
qcsrc/common/items/all.qh
qcsrc/common/items/item/ammo.qc
qcsrc/common/items/item/armor.qc
qcsrc/common/items/item/health.qc
qcsrc/common/items/item/jetpack.qc
qcsrc/common/items/item/pickup.qh
qcsrc/common/items/item/powerup.qc
qcsrc/common/minigames/cl_minigames.qc
qcsrc/common/minigames/cl_minigames.qh
qcsrc/common/minigames/cl_minigames_hud.qc
qcsrc/common/minigames/minigame/all.qh
qcsrc/common/minigames/minigame/c4.qc
qcsrc/common/minigames/minigame/nmm.qc
qcsrc/common/minigames/minigame/pong.qc
qcsrc/common/minigames/minigame/pp.qc
qcsrc/common/minigames/minigame/ps.qc
qcsrc/common/minigames/minigame/qto.qc [deleted file]
qcsrc/common/minigames/minigame/snake.qc [new file with mode: 0644]
qcsrc/common/minigames/minigame/ttt.qc
qcsrc/common/minigames/minigames.qc
qcsrc/common/minigames/minigames.qh
qcsrc/common/minigames/sv_minigames.qc
qcsrc/common/minigames/sv_minigames.qh
qcsrc/common/models/models.qh
qcsrc/common/monsters/monster/mage.qc
qcsrc/common/monsters/monster/shambler.qc
qcsrc/common/monsters/monster/spider.qc
qcsrc/common/monsters/sv_monsters.qc
qcsrc/common/mutators/mutator/casings.qc
qcsrc/common/nades.qh
qcsrc/common/notifications.qc
qcsrc/common/sounds/sounds.inc [new file with mode: 0644]
qcsrc/common/sounds/sounds.qh [new file with mode: 0644]
qcsrc/common/triggers/func/breakable.qc
qcsrc/common/triggers/func/button.qc
qcsrc/common/triggers/func/door.qc
qcsrc/common/triggers/func/door_secret.qc
qcsrc/common/triggers/func/pointparticles.qc
qcsrc/common/triggers/func/train.qc
qcsrc/common/triggers/platforms.qc
qcsrc/common/triggers/target/music.qc
qcsrc/common/triggers/target/speaker.qc
qcsrc/common/triggers/teleporters.qc
qcsrc/common/triggers/trigger/gravity.qc
qcsrc/common/triggers/trigger/heal.qc
qcsrc/common/triggers/trigger/jumppads.qc
qcsrc/common/triggers/trigger/keylock.qc
qcsrc/common/triggers/trigger/multi.qc
qcsrc/common/triggers/triggers.qc
qcsrc/common/turrets/all.inc [new file with mode: 0644]
qcsrc/common/turrets/all.qc [new file with mode: 0644]
qcsrc/common/turrets/all.qh
qcsrc/common/turrets/cl_turrets.qc
qcsrc/common/turrets/cl_turrets.qh
qcsrc/common/turrets/config.qc
qcsrc/common/turrets/sv_turrets.qc
qcsrc/common/turrets/sv_turrets.qh
qcsrc/common/turrets/turrets.qc [deleted file]
qcsrc/common/turrets/turrets.qh [deleted file]
qcsrc/common/turrets/unit/ewheel.qc
qcsrc/common/turrets/unit/flac.qc
qcsrc/common/turrets/unit/fusionreactor.qc
qcsrc/common/turrets/unit/hellion.qc
qcsrc/common/turrets/unit/hk.qc
qcsrc/common/turrets/unit/machinegun.qc
qcsrc/common/turrets/unit/mlrs.qc
qcsrc/common/turrets/unit/phaser.qc
qcsrc/common/turrets/unit/plasma.qc
qcsrc/common/turrets/unit/plasma_dual.qc
qcsrc/common/turrets/unit/tesla.qc
qcsrc/common/turrets/unit/walker.qc
qcsrc/common/util.qc
qcsrc/common/util.qh
qcsrc/common/vehicles/all.qc
qcsrc/common/vehicles/cl_vehicles.qc
qcsrc/common/vehicles/sv_vehicles.qc
qcsrc/common/vehicles/unit/bumblebee.qc
qcsrc/common/vehicles/unit/racer.qc
qcsrc/common/vehicles/unit/raptor.qc
qcsrc/common/vehicles/unit/spiderbot.qc
qcsrc/common/weapons/all.qc
qcsrc/common/weapons/weapon/arc.qc
qcsrc/common/weapons/weapon/blaster.qc
qcsrc/common/weapons/weapon/crylink.qc
qcsrc/common/weapons/weapon/devastator.qc
qcsrc/common/weapons/weapon/electro.qc
qcsrc/common/weapons/weapon/fireball.qc
qcsrc/common/weapons/weapon/hagar.qc
qcsrc/common/weapons/weapon/hlac.qc
qcsrc/common/weapons/weapon/hmg.qc
qcsrc/common/weapons/weapon/hook.qc
qcsrc/common/weapons/weapon/machinegun.qc
qcsrc/common/weapons/weapon/minelayer.qc
qcsrc/common/weapons/weapon/mortar.qc
qcsrc/common/weapons/weapon/porto.qc
qcsrc/common/weapons/weapon/rifle.qc
qcsrc/common/weapons/weapon/rpc.qc
qcsrc/common/weapons/weapon/seeker.qc
qcsrc/common/weapons/weapon/shockwave.qc
qcsrc/common/weapons/weapon/shotgun.qc
qcsrc/common/weapons/weapon/vaporizer.qc
qcsrc/common/weapons/weapon/vortex.qc
qcsrc/lib/_all.inc
qcsrc/lib/file.qh [new file with mode: 0644]
qcsrc/lib/registry.qh
qcsrc/lib/replicate.qh [new file with mode: 0644]
qcsrc/menu/anim/animation.qc
qcsrc/menu/item/button.qc
qcsrc/menu/item/label.qc
qcsrc/menu/item/slider.qc
qcsrc/menu/item/textslider.qc
qcsrc/menu/menu.qc
qcsrc/menu/xonotic/bigbutton.qc
qcsrc/menu/xonotic/bigcommandbutton.qc
qcsrc/menu/xonotic/button.qc
qcsrc/menu/xonotic/checkbox.qc
qcsrc/menu/xonotic/checkbox_slider_invalid.qc
qcsrc/menu/xonotic/checkbox_string.qc
qcsrc/menu/xonotic/colorpicker_string.qc
qcsrc/menu/xonotic/commandbutton.qc
qcsrc/menu/xonotic/dialog.qc
qcsrc/menu/xonotic/dialog_credits.qc
qcsrc/menu/xonotic/dialog_firstrun.qc
qcsrc/menu/xonotic/dialog_monstertools.qc
qcsrc/menu/xonotic/dialog_multiplayer.qc
qcsrc/menu/xonotic/dialog_multiplayer_create.qc
qcsrc/menu/xonotic/dialog_multiplayer_create_mutators.qc
qcsrc/menu/xonotic/dialog_multiplayer_join.qc
qcsrc/menu/xonotic/dialog_multiplayer_media.qc
qcsrc/menu/xonotic/dialog_multiplayer_media_demo.qc
qcsrc/menu/xonotic/dialog_multiplayer_profile.qc
qcsrc/menu/xonotic/dialog_quit.qc
qcsrc/menu/xonotic/dialog_settings.qc
qcsrc/menu/xonotic/dialog_settings_audio.qc
qcsrc/menu/xonotic/dialog_settings_effects.qc
qcsrc/menu/xonotic/dialog_settings_game_crosshair.qc
qcsrc/menu/xonotic/dialog_settings_game_hud.qc
qcsrc/menu/xonotic/dialog_settings_game_model.qc
qcsrc/menu/xonotic/dialog_settings_game_view.qc
qcsrc/menu/xonotic/dialog_settings_game_weapons.qc
qcsrc/menu/xonotic/dialog_settings_input.qc
qcsrc/menu/xonotic/dialog_settings_misc.qc
qcsrc/menu/xonotic/dialog_settings_user.qc
qcsrc/menu/xonotic/dialog_settings_video.qc
qcsrc/menu/xonotic/dialog_singleplayer.qc
qcsrc/menu/xonotic/dialog_teamselect.qc
qcsrc/menu/xonotic/gametypebutton.qc
qcsrc/menu/xonotic/inputbox.qc
qcsrc/menu/xonotic/keybinder.qc
qcsrc/menu/xonotic/maplist.qc
qcsrc/menu/xonotic/radiobutton.qc
qcsrc/menu/xonotic/serverlist.qc
qcsrc/menu/xonotic/slider.qc
qcsrc/menu/xonotic/slider_decibels.qc
qcsrc/menu/xonotic/slider_particles.qc
qcsrc/menu/xonotic/slider_picmip.qc
qcsrc/menu/xonotic/slider_resolution.qc
qcsrc/menu/xonotic/slider_sbfadetime.qc
qcsrc/menu/xonotic/tabcontroller.qc
qcsrc/menu/xonotic/textslider.qc
qcsrc/menu/xonotic/util.qc
qcsrc/menu/xonotic/util.qh
qcsrc/server/_all.qh
qcsrc/server/autocvars.qh
qcsrc/server/bot/havocbot/havocbot.qc
qcsrc/server/bot/scripting.qc
qcsrc/server/cheats.qc
qcsrc/server/cl_client.qc
qcsrc/server/cl_player.qc
qcsrc/server/defs.qh
qcsrc/server/g_damage.qc
qcsrc/server/g_hook.qc
qcsrc/server/g_world.qc
qcsrc/server/item_key.qc
qcsrc/server/miscfunctions.qc
qcsrc/server/miscfunctions.qh
qcsrc/server/mutators/gamemode_ctf.qc
qcsrc/server/mutators/gamemode_domination.qc
qcsrc/server/mutators/gamemode_keepaway.qc
qcsrc/server/mutators/gamemode_keyhunt.qc
qcsrc/server/mutators/gamemode_nexball.qc
qcsrc/server/mutators/gamemode_onslaught.qc
qcsrc/server/mutators/mutator_buffs.qc
qcsrc/server/mutators/mutator_instagib.qc
qcsrc/server/mutators/mutator_instagib_items.qc
qcsrc/server/mutators/mutator_nades.qc
qcsrc/server/mutators/mutator_new_toys.qc
qcsrc/server/mutators/mutator_overkill.qc
qcsrc/server/mutators/mutator_touchexplode.qc
qcsrc/server/mutators/sandbox.qc
qcsrc/server/pathlib.qc [deleted file]
qcsrc/server/pathlib.qh [deleted file]
qcsrc/server/pathlib/costs.qc
qcsrc/server/pathlib/debug.qc
qcsrc/server/portals.qc
qcsrc/server/progs.inc
qcsrc/server/sv_main.qc
qcsrc/server/sys-pre.qh
qcsrc/server/t_items.qc
qcsrc/server/weapons/common.qc
qcsrc/server/weapons/selection.qc
qcsrc/server/weapons/spawning.qc
qcsrc/server/weapons/tracing.qc
qcsrc/server/weapons/weaponsystem.qc
tooltips.db [deleted file]
tooltips.db.de [deleted file]
tooltips.db.es [deleted file]
tooltips.db.fr [deleted file]
tooltips.db.hu [deleted file]
tooltips.db.it [deleted file]
tooltips.db.ru [deleted file]
tooltips.db.uk [deleted file]

index 013810e0c5f4eb2502cdda2546ed1b6b51006586..358cac201b0143508e331187294fb8762f16d155 100644 (file)
@@ -8169,3 +8169,623 @@ msgstr "Teamfarbe:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Panel aktivieren"
+
+
+msgid "Moving"
+msgstr "Bewegung"
+
+msgid "forward"
+msgstr "vorwärts"
+
+msgid "backpedal"
+msgstr "rückwärts"
+
+msgid "strafe left"
+msgstr "links"
+
+msgid "strafe right"
+msgstr "rechts"
+
+msgid "jump / swim"
+msgstr "springen / schwimmen"
+
+msgid "crouch / sink"
+msgstr "ducken / sinken"
+
+msgid "off-hand hook"
+msgstr "Enterhaken"
+
+msgid "jet pack"
+msgstr "Jetpack"
+
+msgid "Attacking"
+msgstr "Angriff"
+
+msgid "primary fire"
+msgstr "1. Feuermodus"
+
+msgid "secondary fire"
+msgstr "2. Feuermodus"
+
+msgid "Weapon switching"
+msgstr "Waffe wechseln"
+
+msgid "previous"
+msgstr "vorherige"
+
+msgid "next"
+msgstr "nächste"
+
+msgid "previously used"
+msgstr "zuletzt benutzte"
+
+msgid "best"
+msgstr "beste"
+
+msgid "reload"
+msgstr "nachladen"
+
+msgid "View"
+msgstr "Anzeige"
+
+msgid "hold zoom"
+msgstr "Vergrößern (festhalten)"
+
+msgid "toggle zoom"
+msgstr "Vergrößern (umschalten)"
+
+msgid "show scores"
+msgstr "Tabelle anzeigen"
+
+msgid "screen shot"
+msgstr "Bildschirmfoto"
+
+msgid "maximize radar"
+msgstr "Radar maximieren"
+
+msgid "toggle minigame menu"
+msgstr "Minispiel-Menu an- und ausschalten"
+
+msgid "Communicate"
+msgstr "Kommunikation"
+
+msgid "public chat"
+msgstr "Nachricht an alle"
+
+msgid "team chat"
+msgstr "Nachricht ans Team"
+
+msgid "show chat history"
+msgstr "Chat-Historie zeigen"
+
+msgid "vote YES"
+msgstr "Abstimmung: JA"
+
+msgid "vote NO"
+msgstr "Abstimmung: Nein"
+
+msgid "ready"
+msgstr "Bereitschaft signalisieren"
+
+msgid "Client"
+msgstr "Client"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "Serverinfo anzeigen"
+
+msgid "enter console"
+msgstr "Konsole öffnen"
+
+msgid "disconnect"
+msgstr "Verbindung trennen"
+
+msgid "quit"
+msgstr "Beenden"
+
+msgid "Teamplay"
+msgstr "Teamplay"
+
+msgid "team chat"
+msgstr "Nachricht ans Team"
+
+msgid "auto-join team"
+msgstr "Team automatisch wählen"
+
+msgid "team menu"
+msgstr "Team auswählen"
+
+msgid "sandbox menu"
+msgstr "Sandkasten menu"
+
+msgid "enter spectator mode"
+msgstr "Zuschauen"
+
+msgid "drop weapon"
+msgstr "Waffe wegwerfen"
+
+msgid "drop key / drop flag"
+msgstr "Schlüssel oder Flagge wegwerfen"
+
+msgid "drag object"
+msgstr "Objekt ziehen"
+
+msgid "3rd person view"
+msgstr "Schultercamera"
+
+msgid "User defined"
+msgstr "Benutzerdefiniert"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Erweiterte Einstellungen für den Server"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Erweiterte Einstellungen, in denen du jede beliebige Variable des Spiels ändern kannst"
+
+msgid "All players are almost invisible"
+msgstr "Tarnmodus: Alle Spieler sind fast unsichtbar"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Schließen der Konsole auch mit der Taste, die zum Öffnen verwendet wird"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "In Nix ist als zweite Waffe der Laser vorhanden"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Umgebungslicht, ein zu hoch eingestellter Wert lässt die Map matt und flach erscheinen (Standard: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Wähle die maximale Anzahl von Bots auf dem Server"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Blutverlust: Aktiviere diesen Modus und stelle den Wert der Lebensenergie, bei der Spieler auf Grund von Blutverlust betäubt wirken, ein"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Qualität für das Filtern von Anisotropie (Standard: Aus)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Abspielen einer Ansage für die verbleibenden Minuten des Spiels"
+
+msgid "Audio settings"
+msgstr "Audio Einstellungen"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Wechsel automatisch zu der neu aufgesammelten Waffe, wenn diese in der Liste weiter oben steht als die, welche Du gerade trägst"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Automatisches Abspielen einer spöttigen Bemerkung, wenn Gegner gefraggt wurden"
+
+msgid "Autoselect team (recommended)"
+msgstr "Automatische Auswahl des Teams (bevorzugt)"
+
+msgid "Back to work..."
+msgstr "Zurück an die Arbeit..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Mache einen Benchmark-Test der markierten Demo. Die Demo wird in Zeitraffer, -lupe abgespielt. Das Ergebnis wird in \"gamedir/data/benchmark.log\" gespeichert"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Setze ein Lesezeichen für den markierten Server um ihn beim nächsten Mal schneller wiederzufinden"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Helligkeit von Schwarz (Standard: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Helligkeit von Weiß (Standard: 1)"
+
+msgid "Browse and view demos"
+msgstr "Schaue dir Demos an"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "Faktor für die Änderung des Kontrasts in dunklen Bildteilen (Standard: 1)"
+
+msgid "Change the game settings"
+msgstr "Ändere die Spiel-Einstellungen"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Ändere die Auflösung von Texturen. Ein geringerer Wert verringert die Auslastung des Speichers, aber lässt die Texturen verschwommen aussehen. (Standard: Gut)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Ändere die Qualität der Geometrie in der Map - Rundheit/Glattheit von Kurven (Standard: Gut)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Komprimiere die Texturen für Grafikkarten mit einem geringen Grafikspeicher (Standard: deaktiviert)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Verändere den Wert der Transparenz von der Anzeige der Wegpunkte"
+
+msgid "Customize your player settings"
+msgstr "Ändere deine Spieler-Einstellungen"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Vampirmodus: Der Schaden dem du anderen Spielern zufügst, wird deiner eigenen Lebensenergie hinzugefügt"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "Weiter, als eingestellt, entfernte Dekore werden nicht dargestellt (Standard: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Komplettes Deaktivieren von Texturen für sehr langsame Hardware. Starke Verbesserung der Leistung, sieht aber sehr komisch aus (Standard: deaktiviert)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Distanz in der spöttige Bemerkungen anderer Spieler gehört werden können"
+
+msgid "Draw the weapon model"
+msgstr "Darstellung der Waffe im Spiel"
+
+msgid "Effect settings"
+msgstr "Einstellungen der Effekte"
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Verhindere das Überblenden, in dem das Tiefenbild der Szene vor dem Licht gerendert wird (Standard: nur Map)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Aktiviere OpenGL 2.0 für Lichteffekte (Standard: aktiviert)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Aktiviere Antialiasing um Ecken der 3D-Geometire zu glätten. Kann die Leistung stark verringern (Standard: Aus)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Aktiviere Überstrahlung, welche die umgebenden Pixel sehr hell erleuchteter Pixel erhellt. Dieser Effekt hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Aktiviere die Client-seitige Bewegungssimulation"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Aktiviere die Korona um bestimmte Lichter (Standard: aktiviert)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Aktiviere Dekore (Einschusslöcher und Blut) (Standard: aktiviert)"
+
+msgid "Enable directional voices"
+msgstr "Aktiviere richtungsunabhängige Geräusche"
+
+msgid "Enable dodging"
+msgstr "Ausweichmodus: Es ist möglich rasch zur Seite zu springen (spezielle Bewegung)"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Aktiviere schnell gerenderte dynamische Lichter. Es wird eine große Korona anstelle von eines richtigen dynamischen Lichts dargestellt (Standard: aktiviert)"
+
+msgid "Enable footstep sounds"
+msgstr "Schrittklang: Schritte von Spielern erzeugen Geräusche"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Aktiviere den Vollbildmodus (Standard: aktiviert)"
+
+msgid "Enable network update smoothing"
+msgstr "Aktiviere die Netzwerk Update Glättung"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Aktiviere das Rendern von dynamischen Lichtern, wie Explosionen und Raketen-Lichter (Standard: aktiviert)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Aktiviere das Rendern der gesamten Echtzeit-Welt-Lichter. Hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Aktiviere das Rendern von Schatten von dynamischen Lichtern (Standard: deaktiviert)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Aktiviere das Rendern von Schatten von Echtzeit-Welt-Lichter (Standard: deaktiviert)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Aktiviere \"räumlicheren\" Klang (Mischung des linken und rechten Kanals um die Stereo-Trennung leicht zu verringern, für Kopfhörer)"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Aktiviere Glanzeffekte für Texturen, wenn die Textur es unterstützt. (Standard: aktiviert)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Aktiviere die Verwendung von GLSL um die Gamma-Korrektur zu ermöglichen, kann die Leistung stark verringern (Standard: Aus)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Aktiviere die Verwendung von gerichteter Schattierung auf Texturen (Standard: aktiviert)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Aktiviere die vertikale Synchronisation um ein Zeilenreißen zu unterdrücken, die FPS werden auf den Wert der Bildwiederholungsrate deines Monitors gesetzt (Standard: deaktiviert)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Aktiviere/Deaktiviere den HUD-Hintergrund"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr ""
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Verringern der Korona - Angepasst an die Sichtbarkeit (Standard: deaktiviert)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Stelle den Wert für das Sichtfeld in Grad (60-130) ein - Standard ist 90"
+
+msgid "Find servers to play on"
+msgstr "Finde Server und spiele online"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Stelle den zu verwendenden UDP Port als Client ein.  Wenn der Port auf 0 gesetzt ist, wird kein Port erzwungen"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Globales Rendern der Lichtstärke (Standard: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Bessere Qualität des Offsetmappings, hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Bessere Qualität des Überstrahlungseffekts, hat einen sehr großen Einfluss auf die Leistung (Standard: deaktiviert)"
+
+msgid "Host your own game"
+msgstr "Hoste dein eigenes Spiel"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "Setze den Vergrößerungsfaktor"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Bestimme wie schnell der angegebene Vergrößerungsfaktor erreicht werden soll, deaktivieren für sofortige Vergrößerung"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Wert für die Dauer der Beeinträchtigung der Sicht durch einen Schaden (Standard: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Bestimme wie viele Bits pro Pixel (BPP) gerendert werden sollen, 32 ist der bevorzugte Wert"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Anzahl der Pakete die pro Sekunde zum Server, mit dem du verbunden bist, geschickt werden sollen"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Bestimme die Änderung der Empfindlichkeit während des Vergrößerns. Werte von 0 (geringste Sensitivität) bis 1 (keine Änderung der Sensitivität sind möglich)"
+
+msgid "I got some more fragging to do!"
+msgstr "Ich muss noch ein paar Typen fraggen!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Wenn aktiviert, wird nur die Texturqualität von Modellen verringert (Standard: aktiviert)"
+
+msgid "Input settings"
+msgstr "Einstellungen der Eingabe"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Korrekturwert für die Kontraststärke (Gamma-Wert), Helligkeitseffekt, der keinen Einfluss auf Weiß und Schwarz hat (Standard: 1)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Umkehren der Mausbewegung entlang der Y-Achse"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Die Grafikkarte wartet bis die CPU die Berechnung eines jeden Frames beendet hat, dies kann bei merkwürdigen Verhalten der Eingabe helfen (Standard: deaktiviert)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Verringere die Schwerkraft und lass Gegenstände langsamer zu Boden fallen, ein niedrigerer Wert verringert die Gravitation"
+
+msgid "Make use of DGA mouse input"
+msgstr "Verwende die DGA Maus Eingabe"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Speicher Eckpunkte und/oder Dreiecke der statischen Geometrie im Videospeicher um ein schnelleres Rendern zu ermöglichen (Standard: Eckpunkte, einige Dreiecke)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Verwende die oben angegebene Liste, wenn die Waffen mit Hilfe des Mausrads gewechselt werden"
+
+msgid "Maximum download speed"
+msgstr "Stelle die maximale Download Geschwindigkeit ein"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Maximale Anzahl der gleichzeitigen HTTP/FTP Downloads"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr ""
+
+msgid "Misc settings"
+msgstr "Sonstige Einstellungen, wie Sprache, Menü-Skins"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Wert für die Bewegungsunschärfe - 0.5 empfohlen"
+
+msgid "Mouse speed multiplier"
+msgstr "Geschwindigkeitsmultiplikator um die Sensitivität der Maus einzustellen"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Multiplikator für die Geschwindigkeit der Maus im Menü, hat keinen Effekt auf die Mausbewegung im Spiel"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Faktor für die Anzahl von Partikel. Weniger bedeutet weniger Partikel, was zu einer besseren Leistung führt (Standard: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Wähle Mutators und Waffen-Arenen"
+
+msgid "Name under which you will appear in the game"
+msgstr "Lege deinen Namen im Spiel fest"
+
+msgid "Network settings"
+msgstr "Netzwerk Einstellungen"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "Es gibt keine aufzusammelnden Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle Spieler zu einer neuen gleichen Waffe"
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Aus: Führe keinen Treffer-Test für das Fadenkreuz aus; TrueAim: Trübe das Fadenkreuz, wenn du nicht die Wand treffen würdest; Gegner: Vergrößere zudem das Fadenkreuz, wenn du einen Gegner treffen würdest"
+
+msgid "Number of channels for the sound output"
+msgstr "Anzahl der Kanäle für die Audiowiedergabe"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Anzahl von Maps, welche am Ende des Spiels zur Wahl stehen"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Effekt für den Tiefendruck von Texturen, dieser Effekt lässt Texturen mit Bumpmap aus der 2D Ebene \"herausgedrückt\" erscheinen (Deaktiviert: deaktiviert)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "\"Luft\"modus: Dem Gegner Schaden zuzufügen ist nur möglich, wenn er sich in der Luft befindet"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Überschreibe die Standardgröße eines Teams in Teammodi"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Weiter, als eingestellt, entfernte Partikel werden nicht dargestellt (Standard 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Unterbreche die automatische Aktualisierung der Serverliste um ein \"Herumspringen\" zu verhindern"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Prozentualer Anteil des Schadens, der Mitspielern hinzugefügt wird"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Prozentualer Anteil des Team-Schadens der auf dich zurückgeworfen wird"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Spiele einen Treffer-Sound, wenn der Spieler auf den gezielt wurde, getroffen wurde"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Spiele online, gegen deine Freunde im LAN, schaue dir Demos an oder ändere deine Spieler-Einstellungen"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Sound abspielen, wenn auf ein Menüitem geklickt wird oder mit dem Mauszeiger auf das Menüitem gezeigt wird"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Spiele die Einzelspieler-Kampagne oder habe Instant-Action Spiele gegen Bots"
+
+msgid "Players spawn with the grappling hook"
+msgstr "Neu erzeugte/auferstandene Spieler starten mit dem Enterhaken"
+
+msgid "Players spawn with the jetpack"
+msgstr "Neu erzeugte/auferstandene Spieler starten mit dem Jetpack"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "Gestorbene Spieler lassen alle Waffen fallen, die sie besaßen - Waffen verschwinden nicht"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Linkshänder Modus (Standard: deaktiviert)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Position der Waffe, links oder rechts; erfordert Neustart"
+
+msgid "Quit the game"
+msgstr "Beende das Spiel"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Verringere die Anzahl von Fleischteilen oder entferne sie vollständig (Standard: Viele)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Reflektions- und Refraktionsqualität, hat einen großen Einfluss auf die Leistung von Maps mit reflektierenden Oberflächen (Standard: deaktiviert)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Blut und Fleischteile werden durch andere, nicht blutige, Effekte ersetzt"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Auflösung von Reflektion und Refraktion (Standard: gut)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Sättigungskorrektur (0 = Graustufenbild, 1 = normales Bild, 2 = übersättigtes Bild), benötigt GLSL Farbkontrolle (Standard: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Skalierungsfaktor für Wegpunkte"
+
+msgid "Screen resolution"
+msgstr "Einstellung der zu verwendenden Bildschirmauflösung"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Waffen-Arenen: Die Auswahl einer Waffen-Arena führt dazu, dass jeder Spieler mit der gewählten Waffe startet. Diese hat unendlich viel Munition, andere Waffen sind nicht vorhanden - Spezielle Waffen-Arenen: Spieler starten mit allen Waffen und unendlich viel Munition"
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Ermögliche unterschiedliche Fadenkreuze für unterschiedliche Waffen. Diese Option ist zu empfehlen, wenn du ohne dargestelltes Waffenmodel spielst"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Ermögliche unterschiedliche Farben für unterschiedliche Fadenkreuze, abhängig von der Waffe die gerade getragen wird"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Lege deine bevorzugten Waffen fest, den automatischen Wechsel der Waffen und weiteres"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Anzeige eines Netzwerkgraphs für gesendete/empfangene Pakete und weitere Informationen"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Datum im Spiel anzeigen, geeignet für Screenshots"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Uhrzeit im Spiel anzeigen, geeignet für Screenshots"
+
+msgid "Show empty servers"
+msgstr "Aktiviere die Anzeige von leeren Servern"
+
+msgid "Show full servers that have no slots available"
+msgstr "Aktiviere die Anzeige von vollen Servern, die keinen freien Platz mehr haben"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Lass dir mehr Informationen über den markierten Server anzeigen"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Lass dir den Namen des Spielers anzeigen auf den du gerade zielst"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Lass dir verschiedene Spieltyp spezifische Wegpunkte anzeigen"
+
+msgid "Show your rendered frames per second"
+msgstr "Zeige die gerenderten Frames pro Sekunde"
+
+msgid "Simple majority wins a vote"
+msgstr "Die einfache Mehrheit gewinnt die Abstimmung"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Glättet die Mausbewegung, aber verringert leicht die Reaktion des Zielens"
+
+msgid "Sound output frequency"
+msgstr "Ausgangsfrequenz des Tons"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Stelle die Stärke der Bots ein"
+
+msgid "Specify your network speed with this slider"
+msgstr "Gib deine Netzwerkgeschwindigkeit mit dem Schieberegler an"
+
+msgid "Swap left/right channels"
+msgstr "Linken und Rechten Kanal der Stereowiedergabe tauschen"
+
+msgid "The Xonotic credits"
+msgstr "Die Xonotic Entwickler"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Wähle die Anzahl an Frags die benötigt wird, damit die Map endet oder verwende den Map-Standard für diese Option"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "Wähle die maximale Anzahl der Spieler, welche sich mit deinem Server gleichzeitig verbinden dürfen. Freie Plätze können mit Bots aufgefüllt werden"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Zeit in Sekunden nach dem Dekore verschwinden (Standard: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Wähle ein Zeitlimit bei dem die Map endet oder verwende den Map-Standard für diese Option"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Verwende hochauflösende Lightmaps, welche sehr schön aussehen, aber etwas mehr Videospeicher benötigen (Standard: aktiviert)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Verwende ein-Pixel Lichteffekte (Standard: aktiviert)"
+
+msgid "Use the old HUD layout"
+msgstr "Verwende das alte HUD Layout"
+
+msgid "Video settings"
+msgstr "Grafik Einstellungen"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Setze einen Wert für das Sicht-Wackeln oder deaktiviere es vollständig"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Alle Waffen bleiben liegen, auch wenn sie aufgenommen wurden"
index 629edbb9570f123aea931a208b72aca03439c22d..ab2bbc75f4e900f97630cf8ad60ca107bafc4d12 100644 (file)
@@ -8118,3 +8118,623 @@ msgstr "Color del equipo:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Activar panel"
+
+
+msgid "Moving"
+msgstr "Movimiento"
+
+msgid "forward"
+msgstr "adelante"
+
+msgid "backpedal"
+msgstr "atrás"
+
+msgid "strafe left"
+msgstr "izquierda"
+
+msgid "strafe right"
+msgstr "derecha"
+
+msgid "jump / swim"
+msgstr "saltar / nadar"
+
+msgid "crouch / sink"
+msgstr "agacharse / bajar"
+
+msgid "off-hand hook"
+msgstr "gancho"
+
+msgid "jet pack"
+msgstr "jet pack"
+
+msgid "Attacking"
+msgstr "Ataque"
+
+msgid "primary fire"
+msgstr "ataque primario"
+
+msgid "secondary fire"
+msgstr "ataque secundario"
+
+msgid "Weapon switching"
+msgstr "Cambio de arma"
+
+msgid "previous"
+msgstr "anterior"
+
+msgid "next"
+msgstr "siguiente"
+
+msgid "previously used"
+msgstr "anteriormente usado"
+
+msgid "best"
+msgstr "mejor"
+
+msgid "reload"
+msgstr "recargar"
+
+msgid "View"
+msgstr "Vista"
+
+msgid "hold zoom"
+msgstr "mantener zoom"
+
+msgid "toggle zoom"
+msgstr "cambiar zoom"
+
+msgid "show scores"
+msgstr "mostrar puntaje"
+
+msgid "screen shot"
+msgstr "captura de pantalla"
+
+msgid "maximize radar"
+msgstr ""
+
+msgid "toggle minigame menu"
+msgstr ""
+
+msgid "Communicate"
+msgstr "Communicación"
+
+msgid "public chat"
+msgstr "chat público"
+
+msgid "team chat"
+msgstr "chat de equipo"
+
+msgid "show chat history"
+msgstr "mostrar historial del chat"
+
+msgid "vote YES"
+msgstr "votar SI"
+
+msgid "vote NO"
+msgstr "votar NO"
+
+msgid "ready"
+msgstr "preparado"
+
+msgid "Client"
+msgstr "Cliente"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "información del servidor"
+
+msgid "enter console"
+msgstr "entrar en la consola"
+
+msgid "disconnect"
+msgstr "desconectar"
+
+msgid "quit"
+msgstr "salir"
+
+msgid "Teamplay"
+msgstr "Juego en equipo"
+
+msgid "team chat"
+msgstr "chat de equipo"
+
+msgid "auto-join team"
+msgstr "unirse al equipo automáticamente"
+
+msgid "team menu"
+msgstr "menu de equipo"
+
+msgid "sandbox menu"
+msgstr ""
+
+msgid "enter spectator mode"
+msgstr "entrar al modo espectador"
+
+msgid "drop weapon"
+msgstr "soltar arma"
+
+msgid "drop key / drop flag"
+msgstr "soltar llave / soltar bandera"
+
+msgid "drag object"
+msgstr ""
+
+msgid "3rd person view"
+msgstr ""
+
+msgid "User defined"
+msgstr "Definido por el usuario"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Configuración avanzada ddel servidor"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "configuracion avanzada donde puedes ajustar cada variable del juego"
+
+msgid "All players are almost invisible"
+msgstr "Todos los jugadores son casi invisibles"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Permite el fijar un lazo de la consola para tambien cerrarla"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Siempre lleva el láser como arma adicional en Nix"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "iluminación del ambiente, si se configura en muy elevado, tiende a hacer luz en los mapas de imagen aburrida y plana (por defecto: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Cantidad de bots en tu servidor"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Cantidad de vida sera afectada por perdida de sangre"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Calidad de filtrado anisotrópico (por defecto: 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Sonido del anunciante que te indica el tiempo restante del combate"
+
+msgid "Audio settings"
+msgstr "configuración de audio"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Cambia automáticamente al arma recogida si es mejor que la que esta llevando"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "automáticamente burlarse del enemigo al anotar puntos"
+
+msgid "Autoselect team (recommended)"
+msgstr "Auto seleccionar equipo (recomendado)"
+
+msgid "Back to work..."
+msgstr "Volver al trabajo..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Prueba cuan rápido tu computadora puede correr la demo seleccionada"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Brillo en negros (por defecto: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Brillo en blancos (por defecto: 1)"
+
+msgid "Browse and view demos"
+msgstr "Navegar y ver demos"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "Por cuanto multiplicar el contraste en areas oscuras (por defecto: 1)"
+
+msgid "Change the game settings"
+msgstr "Cambiar la configuración del juego"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Cambiar la dureza de las texturas. Bajándolo efectivamente reducira el uso de la memoria de la textura, pero hará que las texturas aparezcan muy borrosas. (por defecto: bueno)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Cambiar la suavidad de las curvas en el mapa (por defecto: normal)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Comprimir las texturas para tarjetas de video con poca cantidad de memoria disponible (ninguno por defecto)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Transparencia del control de los indicadores de ubicación/caminos"
+
+msgid "Customize your player settings"
+msgstr "Configuración de jugador"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Daño dado a tu enemigo sera añadido a tu propia vida"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "Los decals que se alejen de esta distancia no se dibujarán (por defecto: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Desactivar texturas completamente para hardware muy lento. Esto aumentara el rendimiento en gran medida, pero se verça muy feo. (desactivado por defecto)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Distancia desde el cual las burlas pueden escucharse"
+
+msgid "Draw the weapon model"
+msgstr "Muestra el modelo de arma"
+
+msgid "Effect settings"
+msgstr "configuración de efectos."
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Eliminar sobre-dibujado renderizando una version de única profundidad de la escena antes de que comience la renderización normal (desactivado por defecto)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Habilitar sombreado de pixel de OpenGL 2.0 (activado por defecto)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "activar antialiasing, el cual suaviza los bordes en geometrias en 3D. Note que esto puede disminuir bastante el rendimiento (por defecto: desactivado)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Activar efecto bloom, que ilumina los píxeles vecinos de píxeles muy brillantes.Tiene un gran impacto en el rendimiento. (desactivado por defecto)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Activar predicción de movimiento del lado del cliente"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Habilitar iluminación en corona alrededor de ciertas luces (activado por defecto)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Activar decals (agujeros de balas y sangre) (habilitado por defecto)"
+
+msgid "Enable directional voices"
+msgstr "Activar voces direccionales"
+
+msgid "Enable dodging"
+msgstr "Activar esquivado"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Activar luces dinámicas por renderizado de coronas en vez de iluminación dinámica real (desactivado por defecto)"
+
+msgid "Enable footstep sounds"
+msgstr "Activar sonidos de pasos"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Habilitar el modo de pantalla completa (habilitado por defecto)"
+
+msgid "Enable network update smoothing"
+msgstr "Activar actualización suave en la red"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Activar renderizado de luces dinámicas como explosiones y luces de cohete (activado por defecto)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Activar renderizado de la iluminación del mundo en tiempo real en mapas que lo soporten. Note que esto puede tener un gran impacto en el rendimiento. (desactivado por defecto)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Activar renderizado de sombras de luces dinamicas (desactivado por defecto)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Activar renderizado de sombras de luces del mundo en tiempo real (desactivado por defecto)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Activar espacialización (mezcla ligeramente el canal derecho e izquierdo para disminuir la separación estereo un poco en los auriculares)"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Activar el uso de glossmaps en texturas soportandolo (activado por defecto)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Abilita el uso de GLSL para aplicar en la corrección gama, note que esto podría disminuir mucho el rendimiento (default: disabled)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Activar el uso de sombreado direccional en texturas (activado por defecto)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Habilitar sincronización vertical para prevenir rasgaduras en la imagen, limitara los fps a la tasa de refresco del monitor (desactivado por defecto)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Enable/Desavilitar el HUD de fondo"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr ""
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Coronas apagadas acorde a la visibilidad (activado por defecto)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Campo de visión en grados de 60 a 130, 90 es el default"
+
+msgid "Find servers to play on"
+msgstr "Encuentra servidores para jugar"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Forzar al cliente a usar un puerto elegido a menos que se establezca en 0"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Brillo del renderizador global (por defecto: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Alta calidad de mapeado de desplazamiento, el cual también tiene un gran impacto en el rendimiento (desactivado por defecto)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Versión de gran calidad de bloom, que tiene un gran impacto en el rendimiento. (desactivado por defecto)"
+
+msgid "Host your own game"
+msgstr "Crear tu propio juego"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "Cuan grande es el factor de zoom cuando la tecla de zoom es presionada"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Cuan rápido es la vista ampliada, deshabilitar para un zoom instantáneo"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Cuanto tiempo se verá el ultimo daño (por defecto: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Cuantos bits por pixel (BPP) para renderizar, 32 es lo recomendado"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Cuantos paquetes de entrada mandar a un servidor por cada segundo"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Cuanto el zoom cambia la sensibilidad, desde 0 (baja sensibilidad) a 1 (sin cambio de sensibilidad)"
+
+msgid "I got some more fragging to do!"
+msgstr "Tengo algunos puntos más por hacer!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Si se activa, solo reduce la calidad de texturas de los modelos (activado por defecto)"
+
+msgid "Input settings"
+msgstr "configuración de entrada"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Valor de corrección de gama inverso, un efecto de brillo que no afecta a blancos o negros (por defecto: 1.125)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Invierte el movimiento del raton en el eje Y"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Hacer que la CPU wait esperen que la gpu termine cada marco, puede ayudar con algunas extrañas entradas o retraso de video en algunas máquinas (desactivado por defecto)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Hace que las cosas caigan lentamente al suelo, un valor bajo significa baja gravedad"
+
+msgid "Make use of DGA mouse input"
+msgstr "Hace uso de la entrada DGA del raton"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Haz uso de objetos de búfer de vertices para almacenar geometría estática en la memoria de video para acelerar el renderizado (Vertices y Triangulos por defecto)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Haz uso de la lista de abajo when cambia de arma con la rueda del raton"
+
+msgid "Maximum download speed"
+msgstr "Velocidad de descarga máxima"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Número máximo de descargas concurrentes de HTTP/FTP"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr ""
+
+msgid "Misc settings"
+msgstr "configuración misc"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Nivel de difuminado de movimiento - 0.5 recomendado"
+
+msgid "Mouse speed multiplier"
+msgstr "Multiplicador de velocidad del ratón"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Multiplicador de velocidad del raton en el menu, esto no afecta al apuntar en el juego"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Multiplicador de cantidad de partículas. Menos significa menos partículas, lo cual dara mejor rendimiento (por defecto: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Mutators"
+
+msgid "Name under which you will appear in the game"
+msgstr "Nombre con el cual aparecerás en el juego"
+
+msgid "Network settings"
+msgstr "configuración de la red"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "Xonotic sin items - en vez de recoger items, todos juegan con la misma arma. Despues de algún tiempo, comienza una cuenta regresiva, despues del cual todos juegan con otra arma."
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Ninguno: no hacer pruebas de aciertos para el punto de mira; Apuntado: difuminar la punta de mira cuando no se apunta contra la pared; Enemigos: también ampliar el punto de mira cuando aciertas al enemigo"
+
+msgid "Number of channels for the sound output"
+msgstr "Número de canales para la salida del sonido"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Numero de mapas que seran mostrados en en voto dde mapas al final de un combate"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Efecto de mapeado del desplazamiento, que hará texturas con mapas de relieve parecerse como resaltado de la superficie plana de 2D (desactivado por defecto)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "solo es posible dañar a tu enemigo mientras este en el aire"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Sobreescribir la cantidad de equipos por defecto de los modos en equipo"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Las partículas que se alejen de esto no se dibujarán (por defecto: 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Pausa la actualización de la lista de servidores para evitar que salteen"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Porcentaje de daño infligido a tus compañeros de equipo"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Porcentaje de daño de equipo que se reflejará a ti"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Reproduce un sonido indicador de anotacion cuando disparas a un enemigo"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Juega online, contra tus amigos en LAN, ver demos o cambia la configuración del jugador"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Reproduce sonidos cuando se clickea o se posiciona sobre un item del menú"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Empieza una campaña de un solo jugador o acción instantánea de batalla contra bots"
+
+msgid "Players spawn with the grappling hook"
+msgstr "Los jugadores aparecen con un gancho para aferrarse"
+
+msgid "Players spawn with the jetpack"
+msgstr "Los jugadores aparecen con el jetpack"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "Los jugadores dejan todas las armas cuando mueren"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Invertir la imagen horizontalmente (por defecto: desactivado)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Posición del modelo de arma; requiere conexión"
+
+msgid "Quit the game"
+msgstr "Salir del juego"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Reduce la cantidad de tripas o lo remueve completamente (por defecto: muchos)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Calidad de refleccion y refracción, tiene un gran impacto en el rendimiento en mapas de superficies reflectantes (desactivado por defecto)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Reemplazar sangre y tripas por cosas que no tengan nada de gore (desactivado por defecto)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Resolución de reflecciones/refracciones (por defecto: bueno)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Ajuste de saturación (0 = escala de grises, 1 = normal, 2 = sobresaturado), requiere un control de color (por defecto: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Escala del multiplicador de los indicadores de ubicación/caminos"
+
+msgid "Screen resolution"
+msgstr "Resolución de pantalla"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Seleccionando un arma, dara a todos los jugadores cual arma se eligió asi como infinita munición, y deshabilita cualquier otra toma de arma."
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Configura diferentes miras para cada arma, esto ayuda si estas jugando sin un modelo de arma"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Tambien configura el color del punto de mira dependiendo del arma que uses actualmente"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Seleccionar tu arma preferida, cambio automático y modelo de arma"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Activar un gráfico de tamaño de paquetes y otra información"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Mostrar el día actual, útil en capturas de pantalla"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Mostrar la hora y el día actual, útil en capturas de pantalla"
+
+msgid "Show empty servers"
+msgstr "Mostrar servidores vacíos"
+
+msgid "Show full servers that have no slots available"
+msgstr "Mostrar los servidores que no tienen espacio disponible"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Mostrar mas información sobre el actual servidor resaltado"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Mostrar el nombre del jugador al que estás apuntando"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Mostrar indicadores de ubicación/caminos específicos de diferentes tipos de juego"
+
+msgid "Show your rendered frames per second"
+msgstr "Mostrar tus marcos/frames por segundo"
+
+msgid "Simple majority wins a vote"
+msgstr "La mayoria gana"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Suaviza el movimiento del raton, pero hace menos sensible al apuntar al objetivo"
+
+msgid "Sound output frequency"
+msgstr "Frecuencia de salida del sonido"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Especificar que experiencia tendran los bots"
+
+msgid "Specify your network speed with this slider"
+msgstr "Especificar tu velocidad de conección con este separador"
+
+msgid "Swap left/right channels"
+msgstr "Invertir canales izquierda o derecha"
+
+msgid "The Xonotic credits"
+msgstr "Los créditos de Xonotic"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Cantidad de puntos necesarios antes de que termine el combate"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "La máxima cantidad de jugadores o bots que pueden conectarse a tu servidor a la vez"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Tiempo en segundos antes de que los decals desaparezcan (por defecto: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Límite de tiempo en minutos que cuando pase, terminara el combate"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Use mapas de alta resolución, hara que se vea lindo pero reducira la memoria de video (activado por defecto)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Usar efectos de iluminado por pixel (activado por defecto)"
+
+msgid "Use the old HUD layout"
+msgstr "Usar el viejo diseño de HUD"
+
+msgid "Video settings"
+msgstr "configuración de video"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Frecuencia de balanceo de la vista"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Las armas quedan despues de que son tomadas"
index e7e07d67f1f451495de0d1c1bbc2d91af19f96e0..6b839059dbb408fffa14c54f407230b79db7c875 100644 (file)
@@ -8202,3 +8202,623 @@ msgstr "Couleur de l'Équipe :"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Afficher le tableau de bord"
+
+
+msgid "Moving"
+msgstr "Mouvement"
+
+msgid "forward"
+msgstr "avancer"
+
+msgid "backpedal"
+msgstr "reculer"
+
+msgid "strafe left"
+msgstr "gauche"
+
+msgid "strafe right"
+msgstr "droite"
+
+msgid "jump / swim"
+msgstr "sauter / nager"
+
+msgid "crouch / sink"
+msgstr "s'accroupir / couler"
+
+msgid "off-hand hook"
+msgstr "grappin"
+
+msgid "jet pack"
+msgstr "jet pack"
+
+msgid "Attacking"
+msgstr "Attaque"
+
+msgid "primary fire"
+msgstr "tir primaire"
+
+msgid "secondary fire"
+msgstr "tir secondaire"
+
+msgid "Weapon switching"
+msgstr "Changement d'armes"
+
+msgid "previous"
+msgstr "arme précédente"
+
+msgid "next"
+msgstr "arme suivante"
+
+msgid "previously used"
+msgstr "dernière utilisée"
+
+msgid "best"
+msgstr "meilleure arme"
+
+msgid "reload"
+msgstr "recharger"
+
+msgid "View"
+msgstr "Vue"
+
+msgid "hold zoom"
+msgstr "zoom"
+
+msgid "toggle zoom"
+msgstr "zoom 2 clics"
+
+msgid "show scores"
+msgstr "afficher les scores"
+
+msgid "screen shot"
+msgstr "capture d'écran"
+
+msgid "maximize radar"
+msgstr "agrandir le radar"
+
+msgid "toggle minigame menu"
+msgstr "activer/désactiver le menu de mini-jeu"
+
+msgid "Communicate"
+msgstr "Communication"
+
+msgid "public chat"
+msgstr "tchat public"
+
+msgid "team chat"
+msgstr "tchat d'équipe"
+
+msgid "show chat history"
+msgstr "historique du tchat"
+
+msgid "vote YES"
+msgstr "voter OUI"
+
+msgid "vote NO"
+msgstr "voter NON"
+
+msgid "ready"
+msgstr "prêt"
+
+msgid "Client"
+msgstr "Client"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "information serveur"
+
+msgid "enter console"
+msgstr "ouvrir la console"
+
+msgid "disconnect"
+msgstr "se déconnecter"
+
+msgid "quit"
+msgstr "quitter"
+
+msgid "Teamplay"
+msgstr "Équipe"
+
+msgid "team chat"
+msgstr "tchat d'équipe"
+
+msgid "auto-join team"
+msgstr "auto-joindre une équipe"
+
+msgid "team menu"
+msgstr "sélection d'équipe"
+
+msgid "sandbox menu"
+msgstr "menu bac à sable"
+
+msgid "enter spectator mode"
+msgstr "mode spectateur"
+
+msgid "drop weapon"
+msgstr "lâcher l'arme"
+
+msgid "drop key / drop flag"
+msgstr "lâcher la clef / drapeau"
+
+msgid "drag object"
+msgstr "traîner l'objet"
+
+msgid "3rd person view"
+msgstr "vue à la 3ème personne"
+
+msgid "User defined"
+msgstr "Raccourcis personnalisés"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Paramètres serveur avancés"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Paramètres avancés pour configuer le jeu dans ses moindres détails"
+
+msgid "All players are almost invisible"
+msgstr "Tous les joueurs sont presque invisibles"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Permet de fermer la console avec le même raccourci utilisé pour l'ouvrir"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Autoriser le laser en plus de l'arme courante dans le mode Nix"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Lumière ambiante, si elle est trop élévée, les cartes auront un éclairage plus \"plat\" et moins contrasté (par défaut : 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Nombre d'adversaires contrôlés par ordinateur"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Si vous avez moins de santé que spécifié ici, vous perdrez du sang et mourrez progressivement"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Qualité du filtrage anistrope (par défaut : 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Voix (en anglais) qui annonce le temps restant avant la fin du match"
+
+msgid "Audio settings"
+msgstr "Paramètres audio"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Automatiquement changer d'arme si vous ramassez une meilleure arme que celle que vous portez"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Automatiquement narguer les ennemis lorsque vous les tuez"
+
+msgid "Autoselect team (recommended)"
+msgstr "Auto-séléction de l'équipe (recommandé)"
+
+msgid "Back to work..."
+msgstr "Retour au boulot..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Faire un test de performance en utilisant la démo sélectionnée"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Luminosité du noir (par défaut : 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Luminosité du blanc (par défaut : 1)"
+
+msgid "Browse and view demos"
+msgstr "Parcourir et regarder vos démos"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "Multiplier le constraste dans les salles sombres (par défaut : 1)"
+
+msgid "Change the game settings"
+msgstr "Changer les paramètres du jeu"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Ajuster la qualité des textures. La baisser diminue l'utilisation des ressources, mais rend les textures floues. (par défaut : bon)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Ajuster la qualité des modèles 3D de la carte (courbes, tuyaux) (par défaut : normal)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Compresser les textures pour économiser de la mémoire graphique (par défaut : aucun)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Ajuster l'opacité des waypoints"
+
+msgid "Customize your player settings"
+msgstr "Personnaliser vos paramètres joueur"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Les dégâts infligés à vos ennemis vous rendent la santé"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "Toutes les marques d'impacts qui sont plus loin que cette distance ne seront pas affichées (par défaut : 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Désactiver les textures et les remplacer par des couleurs unies. Utile pour les configurations très légères, mais le rendu est très laid. (par défaut : désactivé)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Distance jusqu'à laquelle les voix demeurent audibles"
+
+msgid "Draw the weapon model"
+msgstr "Afficher l'arme à la première personne"
+
+msgid "Effect settings"
+msgstr "Paramètres des effets graphiques"
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "É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é)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Activer les Shaders OpenGL 2.0 pour des effets de lumière améliorés (par défaut : désactivé)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Activer l'anticrénelage, réduit l'effet d'escalier sur les modèles 3D, mais augmente fortement l'utilisation des ressources (par défaut : désactivé)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Activer l'effet \"bloom\", qui éclaire les pixels situés au voisinage de pixels très brillants. A un gros impact sur la performance (par défaut : désactivé)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Activer la prédiction des mouvements du joueur pour éviter les saccades lors de parties en réseau"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Activer des effets d'éblouissement peu gourmands autour de certaines sources de lumière (par défaut : activé)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Activer les marques d'impacts et de sang (par défaut : activé)"
+
+msgid "Enable directional voices"
+msgstr "Activer les voix directionnelles des personnages sur la carte"
+
+msgid "Enable dodging"
+msgstr "Activer les esquives"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Activer les lumières dynamiques rapides - mais plus laides - en affichant des couronnes de lumière à la place des vraies lumières dynamiques (par défaut : désactivé)"
+
+msgid "Enable footstep sounds"
+msgstr "Activer les bruits de pas"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Activer le mode plein écran (par défaut : activé)"
+
+msgid "Enable network update smoothing"
+msgstr "Algorithme pour éviter les saccades lors de parties en réseau"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Activer le rendu des lumières dynamiques des explosions et des roquettes (par défaut : activé)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Activer le rendu des lumières carte en temps réel, a un gros impact sur la performance (par défaut : désactivé)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Activer le rendu des ombres depuis les lumières dynamiques en temps réel (par défaut : désactivé)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Activer le rendu des ombres depuis les lumières carte en temps réel (par défaut : désactivé)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Essayer de diminuer le \"contraste\" entre la partie gauche et droite du casque pour un meilleur son"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Utiliser le reflet des textures (par défaut : activé)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Utiliser GLSL pour corriger le gamma, attention, cela risque d'augementer fortement l'utilisation de ressources (par défaut : désactivé)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Utiliser des effets d'ombrage de lumière sur les textures (par défaut : activé)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Activer la syncronisation verticale pour éviter des problèmes d'affichage, limite le nombre maximum d'images par seconde (par défaut : désactivé)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Enable/Désactiver l'arrière plan de l'interface"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr "Activer des effets de postprocessing spéciaux lorque vous êtes touché, lorsque vous êtes sous l'eau ou lorsque vous utilisez un bonus (par défaut : désactivé)"
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Estomper les effets d'éblouissement pour ne pas perdre en visibilité (par défaut : activé)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Champ de vision en degrés, par défaut 90, certains joueurs préfèrent entre 110 et 130"
+
+msgid "Find servers to play on"
+msgstr "Trouver des serveurs où jouer"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Forcer le client à passer par le port choisi sauf s'il est défini à 0"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Éclairage du rendu global (par défaut : 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Augmenter la qualité des effets de relief sur les textures, a un gros impact sur la performance (par défaut : désactivé)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Effet \"bloom\" de qualité encore supérieure, mais encore plus gourmand (par défaut : désactivé)"
+
+msgid "Host your own game"
+msgstr "Héberger votre propre partie"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "Facteur du zoom lorsque vous appuyez sur le bouton de zoom"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Facteur \"d'adoucissement\" du zoom, 0 le désactive complètement"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Faire trembler la vue lorsque vous êtes touché (durée par défaut : 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Profondeur des couleurs : 16 bits est plus rapide, mais 32 bits est de meilleure qualité (recommandé)"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Nombre maximum de paquets à envoyer au serveur chaque seconde"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Changer la sensibilité du zoom : 0 est la valeur la plus basse, 1 correspond à l'absence de zoom"
+
+msgid "I got some more fragging to do!"
+msgstr "'Faut que je fragge plus de monde!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Si activé, réduira uniquement la qualité des textures des joueurs (par défaut : activé)"
+
+msgid "Input settings"
+msgstr "Paramètres contrôle souris/clavier"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Correction du gamma n'affectant pas la luminosité du noir ou du blanc (par défaut : 1.125)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Inverser la souris sur l'axe vertical (mode jeu d'avion)"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Demander au processeur d'attendre la fin du rendu graphique afin éviter des problèmes d'affichage divers (par défaut : désactivé)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Vous tombez plus lentement, une valeur peu élevée correspond à une faible gravité"
+
+msgid "Make use of DGA mouse input"
+msgstr "Utiliser une souris DGA"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Utiliser les VBOs pour stocker les modèles 3D statiques dans la mémoire pour une meilleure performance (par défaut : Points et Triangles)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Utiliser la liste de priorité pour le changement d'armes avec la molette de la souris"
+
+msgid "Maximum download speed"
+msgstr "Vitesse maximale de téléchargement"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Nombre maximum de téléchargements simultanés en HTTP/FTP"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr "Info-bulles : désactivé, standard ou avancé (affiche aussi la cvar ou la commande associée)"
+
+msgid "Misc settings"
+msgstr "Autres paramètres"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Intensité du flou de mouvement - 0.4 est recommandé"
+
+msgid "Mouse speed multiplier"
+msgstr "Sensibilité de la souris"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Sensibilité de la souris dans les menus, n'affecte pas le jeu"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Nombre de particules ; moins de particules consomment moins de ressources (par défaut : 1)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Mutators et arènes avec une seule arme"
+
+msgid "Name under which you will appear in the game"
+msgstr "Pseudonyme utilisé pour vous reconnaître dans le jeu"
+
+msgid "Network settings"
+msgstr "Paramètres réseau"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "No Items Xonotic - tous les joueurs jouent avec la même arme, et celle-ci change régulièrement."
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Aucun: aucun effet de viseur - TrueAim: rendre le viseur flou si vous risquez de tirer dans un mur - Ennemis: rendre le viseur plus grand si vous pouvez toucher un ennemi"
+
+msgid "Number of channels for the sound output"
+msgstr "Nombre de canaux pour la sortie audio"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Le nombre de cartes pouvant être votées à la fin du match"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Activer l'effet de relief sur les textures, a un léger impact sur la performance (par défaut : désactivé)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "Il faut que votre adversaire soit en l'air pour lui infliger des dégâts"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Outrepasser le nombre d'équipes définies par la carte"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Toutes les particules situées au-delà de cette distance ne seront pas affichées (par défaut : 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Ne pas mettre à jour la liste de serveurs pour éviter de \"glisser\" sur un autre serveur"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Pourcentage de dégâts infligés aux équipiers si vous les touchez"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Pourcentage de dégâts infligés aux équipiers qui vous sera renvoyé"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Jouer un son lorsque vous touchez un ennemi"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Jouer en ligne, en LAN avec vos amis, voir vos démos et modifier vos paramètres joueur"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Jouer des sons en cliquant ou en survolant des boutons"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Jouer tout seul contre des adversaires contrôlés par ordinateur"
+
+msgid "Players spawn with the grappling hook"
+msgstr "Tous les joueurs ont un grappin"
+
+msgid "Players spawn with the jetpack"
+msgstr "Tous les joueurs ont un jetpack"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "Les joueurs lâchent toutes leurs armes quand ils meurent"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Mode miroir (par défaut : désactivé)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Position de l'arme à l'écran, reconnection au serveur nécessaire pour prendre effet"
+
+msgid "Quit the game"
+msgstr "Quitter Xonotic"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Réduire les effets gores ou les désactiver totalement (par défaut : beaucoup)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Qualité des reflets et de la réfraction de l'eau et des portails, a un gros impact sur la performance dans les cartes avec des surfaces réfléchissantes (par défaut : désactivé)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Remplacer les effets gores par des effets moins violents (par défaut : désactivé)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Résolution des reflets/réfractions (par défaut : bon)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Ajustement de la saturation (0 = noir et blanc, 1 = normal, 2 = saturé) des couleurs (par défaut : 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Ajuster la taille des waypoints"
+
+msgid "Screen resolution"
+msgstr "Résolution de l'écran"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Sélectionner une arène avec une seule arme fera apparaître les joueurs avec cette arme et des munitions illimitées, et désactive toutes les autres armes"
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Définir un viseur différent pour chaque arme, utile si vous jouez sans afficher l'arme"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Définir la couleur du viseur selon l'arme que vous utilisez"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Paramétrer les armes (affichage, priorité)"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Afficher la taille des paquets et d'autres informations dans un graphique"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Afficher la date, utile pour les captures d'écran"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Afficher l'heure, utile pour les captures d'écran"
+
+msgid "Show empty servers"
+msgstr "Montrer les serveurs vides"
+
+msgid "Show full servers that have no slots available"
+msgstr "Montrer les serveurs où toutes les places sont prises"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Montrer plus d'informations sur le serveur sélectionné"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Afficher le nom du joueur que vous avez dans votre viseur"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Afficher les waypoints (flèches 3D)"
+
+msgid "Show your rendered frames per second"
+msgstr "Afficher le nombre d'images par seconde actuel (FPS = Frames Per Second)"
+
+msgid "Simple majority wins a vote"
+msgstr "La majorité simple remporte un vote"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Adoucit le mouvement de souris, mais crée une légère latence"
+
+msgid "Sound output frequency"
+msgstr "Fréquence de la sortie audio"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Spécifier la difficulté des adversaires ordinateur"
+
+msgid "Specify your network speed with this slider"
+msgstr "Spécifier la vitesse de votre réseau avec ce curseur"
+
+msgid "Swap left/right channels"
+msgstr "Inverser les canaux stéréo gauche/droite"
+
+msgid "The Xonotic credits"
+msgstr "Les crédits de Xonotic"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Limite de frags pour le match, le match se termine lorsque celle-ci est atteinte"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "Le nombre maximum de personnes pouvant jouer sur votre serveur en même temps"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Durée en secondes avant que les marques d'impacts ne disparaissent (par défaut : 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Limite de temps, le match se termine lorsque celle-ci est atteinte"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Utiliser des lightmaps haute résolution, augmente l'utilisation de la mémoire, mais rend les lightmaps plus nettes (par défaut : activé)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Utiliser les effets lumineux avancés (par défaut : activé)"
+
+msgid "Use the old HUD layout"
+msgstr "Utiliser l'ancienne interface HUD"
+
+msgid "Video settings"
+msgstr "Paramètres vidéo"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Effet de \"tremblement\" de la vue lorsque vous courez"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Les armes restent où elles sont lorsqu'elles sont ramassées"
index 9b98430dd31ef4bcfca0c85e61409572c11b34cc..f0ba88f962d593ce370a0037b1354eb8ed807aea 100644 (file)
@@ -8053,3 +8053,623 @@ msgstr "Csapat színe:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Panel engedélyezése"
+
+
+msgid "Moving"
+msgstr "Mozgás"
+
+msgid "forward"
+msgstr "előre"
+
+msgid "backpedal"
+msgstr "hátra"
+
+msgid "strafe left"
+msgstr "balra lépés"
+
+msgid "strafe right"
+msgstr "jobbra lépés"
+
+msgid "jump / swim"
+msgstr "ugrás / úszás"
+
+msgid "crouch / sink"
+msgstr "guggolás / süllyedés"
+
+msgid "off-hand hook"
+msgstr "kézi kampó"
+
+msgid "jet pack"
+msgstr "rakéta puttony"
+
+msgid "Attacking"
+msgstr "Tüzelés"
+
+msgid "primary fire"
+msgstr "Elsődleges"
+
+msgid "secondary fire"
+msgstr "Másodlagos"
+
+msgid "Weapon switching"
+msgstr "Fegyverváltás"
+
+msgid "previous"
+msgstr "előző"
+
+msgid "next"
+msgstr "következő"
+
+msgid "previously used"
+msgstr "előzőleg használt"
+
+msgid "best"
+msgstr "legjobb"
+
+msgid "reload"
+msgstr "újratöltés"
+
+msgid "View"
+msgstr "Nézet"
+
+msgid "hold zoom"
+msgstr "nagyítás tartás"
+
+msgid "toggle zoom"
+msgstr "nagyítás váltás"
+
+msgid "show scores"
+msgstr "pontszámok"
+
+msgid "screen shot"
+msgstr "kép mentés"
+
+msgid "maximize radar"
+msgstr ""
+
+msgid "toggle minigame menu"
+msgstr ""
+
+msgid "Communicate"
+msgstr "Kommunikáció"
+
+msgid "public chat"
+msgstr "nyilvános beszélgetés"
+
+msgid "team chat"
+msgstr "csapat beszélgetés"
+
+msgid "show chat history"
+msgstr "beszélgetés történet"
+
+msgid "vote YES"
+msgstr "IGEN szavazat"
+
+msgid "vote NO"
+msgstr "NEM szavazat"
+
+msgid "ready"
+msgstr "kész"
+
+msgid "Client"
+msgstr "Kliens"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "kiszolgáló info"
+
+msgid "enter console"
+msgstr "belépés a konzolba"
+
+msgid "disconnect"
+msgstr "lekapcsolodás"
+
+msgid "quit"
+msgstr "kilépés"
+
+msgid "Teamplay"
+msgstr "Csapatjáték"
+
+msgid "team chat"
+msgstr "csapat beszélgetés"
+
+msgid "auto-join team"
+msgstr "automatikus csapatválasztás"
+
+msgid "team menu"
+msgstr "csapat menü"
+
+msgid "sandbox menu"
+msgstr ""
+
+msgid "enter spectator mode"
+msgstr "néző módba váltás"
+
+msgid "drop weapon"
+msgstr "fegyver eldobás"
+
+msgid "drop key / drop flag"
+msgstr "zászló eldobás, kiszállás"
+
+msgid "drag object"
+msgstr "drag object"
+
+msgid "3rd person view"
+msgstr ""
+
+msgid "User defined"
+msgstr "Felhasználói hozzárendelések"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr "Minden pálya kiválasztása"
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Haladó szerverbeállítások"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Haladó beállítások, ahol finomíthatod a játék minden egyes változóját. Ha nem értesz hozzá, inkább ne piszkáld..."
+
+msgid "All players are almost invisible"
+msgstr "Minden játékos majdnem láthatatlan"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "A konzol egy különleges interfész, amelynek segítségél különböző parancsokat tudsz adni a játéknak (a parancsok listáját megtalálhatod az Egyéb -> Haladó beállítások alatt). Ennek az opciónak a bekapcsolásával a konzolnyitó billentyűvel be is tudod zárni a konzolt. A konzolnyitó billentyű (BACKQUOTE) sajnos nem létezik magyar billentyűzeten, ezért ha ilyet használsz, először meg kell változtatnod a billentyű hozzárendelést a bal oldali listában (Kliens: belépés a konzolba), vagy használd a SHIFT+ESC kombinációt."
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Mindig legyen a lézer a Nix mellett kiegészítésül"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Környezeti világítás, a túl magasra beállítás a kép fakóságát eredményezheti (alapérték: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Botok száma a szervereden"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Életerőpont, ami alatt a játékos elkábul a vérveszteségtől"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Az anizotrópikus szűrés használatával a megjelenített textúrák távolságtól függetlenül is élesek maradnak, így javul a képminőség. FIGYELEM! Jelentősen csökkenheti a teljesítményt gyengébb számítógépeken (alapérték: 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Figyelmeztető hang, ami a meccsből hátralévő percekről tájékoztat"
+
+msgid "Audio settings"
+msgstr "Hang beállítások: sávok és csatornák hangerejének beállítása, figyelmeztető hangok, gúnyolódások stb."
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "A játék önmagától átvált az újonnan felvett fegyverre, ha az jobb az addig kézben tartottnál az elsőbbségi lista szerint"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Ha megölsz valakit, kigúnyolod egy mindenki álltal hallható hangüzenetben. A csúszkával ezeknek a beszólásoknak a gyakoriságát változtathatod"
+
+msgid "Autoselect team (recommended)"
+msgstr "Automatikus csapatválasztás a játék állásának és játékosok számának függvényében (ajánlott)"
+
+msgid "Back to work..."
+msgstr "Vissza a munkához..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Leméri, hogy a számítógéped milyen gyorsan képes futtatni a kiválasztott demót."
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Az éppen kiválasztott szerver megjelölése, hogy a jövőben könnyebben megtaláld"
+
+msgid "Brightness of black (default: 0)"
+msgstr "A képernyő fényereje, a fekete szín fényességének változtatásával (alapérték: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "A csúszkával a képernyő kontrasztját tud szabályozni, azaz a fehér szín fényességét (alapérték: 1)"
+
+msgid "Browse and view demos"
+msgstr "Demók böngészése és megtekintése"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "A csúszkával a sötét területek kontrasztját tudod növelni (alapérték: 1)"
+
+msgid "Change the game settings"
+msgstr "A játék beállításainak megváltoztatása: billentyűzetkiosztás, képernyőfelbontás, vizuális effektek, audió, stb."
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "A csúszkával a textúrák élességét tudod beállítani. Kisebb érték hatásosan csökkenti a textúra memória használatot, de a textúrák megjelenése csúnyább, homályosabb lesz. (alapértelmezett: jó)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "A csúszkával az ívelt geometria finomságát, részletességét tudod szabályozni (alapértelmezett: normál)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Textúrák tömörítése, hogy a videokártyán található memóriából kevesebbet használjon (alapértelmezett: nem)"
+
+msgid "Control transparency of the waypoints"
+msgstr "A csúszkával az iránypontok átlátszóságát tudod szabályozni. Az érték növelésével az iránypontok egyre kevésbé lesznek átláthatóak"
+
+msgid "Customize your player settings"
+msgstr ""
+                                                                                                                                                                                                                                                              ---"
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Annyi pont adódik életerődhöz, amennyi sebzést a másiknak okozol"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "A becsapódási nyomok maximális megjelenítési távolsága (azaz ettől az értéktől messzebb már nem jelennek meg) (alapérték: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Textúra összetettség letiltása nagyon lassú gépeken. Ez egy  nagy gyorsulást hozz a teljesítményben, de nagyon csúnyán néz ki. (alapértelmezett: letiltva)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "A távolság, ahonnan a gúnyolódás még hallható"
+
+msgid "Draw the weapon model"
+msgstr "Az éppen kézben tartott fegyver megjelenítése"
+
+msgid "Effect settings"
+msgstr "Különböző grafikai effektek beállításai: geometriai részletesség, textúra élesség, fények, árnyékolás, tükröződés, utófeldolgozás stb."
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Leképzés előtt egy távolságteszt történik, és az aktuális leképzés a közelebbi eseményekkel, tárgyakkal kezdődik. Ez vonatkozhat csak a világ geometriájára, illetve a modellekre is (alapértelmezett: letiltva)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Az OpenGL 2.0 pixel shaderek használatának engedélyezése (alapértelmezett: engedélyezve)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Az élsimítás engedélyezésével a leképzett 3D-s tárgyak széleinek \"csipkézettsége\" csökken. FIGYELEM! Jelentősen csökkenheti a teljesítményt gyengébb számítógépeken (alapértelmezett: letiltva)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "A fényes testek felületén végigfutó halvány, derengő ragyogás engedélyezése FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)."
+
+msgid "Enable clientside movement prediction"
+msgstr "Kliensoldali mozgásbecslés engedélyezése. Ez az opció rossz minőségű, vagy lassú kapcsolat esetén segíthet a késés (lag) okozta mozgási problémák javításában"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Fényudvarok megjelenítése bizonyos effektek körül. (alapértelmezett: engedélyezve)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Becsapódási nyomok (égési és robbanási nyomok, vérfoltok) engedélyzése és tiltása (alapértelmezett: engedélyezve)"
+
+msgid "Enable directional voices"
+msgstr "Irányított hangok engedélyezése"
+
+msgid "Enable dodging"
+msgstr "El tudsz szökkenni jobbra-balra a lövések elől"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Gyors, de nagyon csúnya dinamikus fényekeffektek megjelenítése a valós dinamikus világítás helyett. Csak nagyon gyenge számítógépek esetén ajánlott (alapértelmezett: letiltva)"
+
+msgid "Enable footstep sounds"
+msgstr "Enable footstep sounds"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Teljes képernyős mód engedélyezése (alapértelmezett: engedélyezve)"
+
+msgid "Enable network update smoothing"
+msgstr "Engedélyezi a hálózat frissítés simítását"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Dinamikus fényeffektek engedélyezése, mint pl. robbanások és rakéták fényei (alapértelmezett: engedélyezve)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Teljesen valós idejű és dinamikus megvilágítások engedélyezése azokon a pályákon, amik támogatják. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "A dinamikus fényeffektek árnyékokat is vetnek (alapértelmezett: letiltva)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "A teljesen valós idejű és dinamikus fények árnyékokat is vetnek. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "A jobb és bal hangcsatornák enyhe összemosása, a sztereó szétválasztás csökkentésére fejhallgatókban"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "A felületek felszínén megcsillanó fény engedélyezése. (alapértelmezett: engedélyezve)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "A GLSL alkalmazása a gamma korrekcióhoz, Megjegyzendő, hogy jelentősen csökkenheti a teljesítményt  (alapértelmezett: letiltva)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "A dinamikus fényeffektek által vetett árnyékok megjelenítése a textúrákon (alapértelmezett: engedélyezve)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "A függőleges szinkronizáció engedélyezése, a megjelenített kép szétesésének megakadályozására. A másodpercenként leképzett képkockák számát (FPS) a képernyő frissítési frekvenciájához igazítja (alapértelmezett: kikapcsolva)"
+
+msgid "Enable/disable the HUD background"
+msgstr "HUD hátterének engedélyezése/letiltása"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr "Extra képernyő effektek engedélyezése, mint pl. víz alatti hullámok, Sebzésnövelő használata során extra kontrasztos látómező stb."
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "A fényudvarok elhalványítása láthatóságuk szerint (alapértelmezett: engedélyezve)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "A látószög fokokban mérve 60-tól 130-ig, az alapérték 90 fok"
+
+msgid "Find servers to play on"
+msgstr "Internetes és helyi hálózaton indított szerverek böngészése"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Az adott UDP port használata az alapértelmezett helyett"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Általános világosság  (alapérték: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Még jobb minőségű, finomabb Offset mapping. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "A bloom magas minőségű verziója, ami óriási hatással van a teljesítményre. (alapértelmezett: letiltva)"
+
+msgid "Host your own game"
+msgstr "Saját játékszerver indítása"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "A nagyítási szorzó a ráközelítés gomb megnyomása esetén"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Milyen gyorsan hajtsa végre a távcső a nagyítást. Tiltás esetén a nagyítás azonnal végbemegy"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Mennyi ideig legyen a kép kiütve a  sérülés után (alapérték: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Színmélyég BPP-ben (bits per pixel). Az ajánlott színmélyég 32bit"
+
+msgid "How many input packets to send to the server each second"
+msgstr "A csúszkával a szerver felé küldött adatcsomagok másodpercenkénti számát tudod beállítani. Magasabb érték finomabb mozgást eredményezhet."
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Nagyítás során az egér érzékenységének változtatása a könnyebb célzás érdekében, 0-tól (kisebb érzékenység) 1-ig (nem változik az érzékenység)"
+
+msgid "I got some more fragging to do!"
+msgstr "A mészárlás folytatódik!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Ha ha be van állítva, csak a modellek textúra minősége csökken (alapértelmezett: engedélyezve)"
+
+msgid "Input settings"
+msgstr "Billentyűzetkiosztás, egér és botkormány beállítások"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Fordított gamma korrekciós érték, egy fényességi hatás , ami nem befolyásolja a fehéret vagy feketét (alapérték: 1)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Fordított egérmozgás az Y-tengely (fel-le) mentén"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "A processzor megvárja amíg a videókártya befejezi a képkockát leképzését, ez segíthet egyes gépeken jelentkező furcsa bemeneti és videó késés problémák kiküszöbölésében (alapértelmezett: letiltva)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "A tárgyak lassabban esnek a földre, kisebb érték alacsonyabb gravitációt jelent"
+
+msgid "Make use of DGA mouse input"
+msgstr "Segíti a DGA egér bemenet használatát"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "A gyorsabb leképzés érdekében a megjelenítendő statikus geometria a videó memóriában ún. Vertex Buffer Objectként kerül tárolásra (alapértelmezett: Csúcspontok és háromszögek, kompatibilis)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "A bal oldali lista használata, amikor az előző fegyver/következő fegyver gombokkal váltasz a fegyverek között"
+
+msgid "Maximum download speed"
+msgstr "A csúszkával a maximális letöltési sebességet tudod beállítani"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr ""
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr "A csúszkával a menüopciók tippjeinek részletesség tudod beállítani. Letilthatod az összes tippet, iletve a \"Részletes\" választása esetén a tippek mellett az adott változó is megjelenik"
+
+msgid "Misc settings"
+msgstr "Játékosmodell, célkereszt, HUD, és egyéb játékosorientált beállítások"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "A csúszkával a mozgási elmosódás intenzivitását tudod szabályozni. Az ajánlott érték 0.4"
+
+msgid "Mouse speed multiplier"
+msgstr "Ezzel a csúszkával az egér érzékenységét tudod szabályozni. A magasabb értékek érzékenyebb egeret eredményeznek"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Egér sebessége a menüben, nincs hatással a játékbeli célzásra"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "A különböző effektek (robbanások, becsapódások) által létrehozott effekt-részecskék számának szorzója. A kisebb értékek kevesebb részecske megjelenítését eredményezik, ami gyengébb gépeken növelheti a teljesítményt. (alapérték: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Módosítók és fegyverarénák"
+
+msgid "Name under which you will appear in the game"
+msgstr "A név, amivel szerepelsz a játékban. Ha engedélyezted a statisztikák gyűjtését és elküldését, akkor a http://stats.xonotic.org -on ezen a néven fogsz szerepelni az adatbázisban"
+
+msgid "Network settings"
+msgstr "Hálózati beállítások, FPS limit, haladó beállítások stb."
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "Xonotic felvehető fegyverek nélkül – Mindenki ugyanazzal a fegyverrel játszik. Kis idő után visszaszámlálás indul, amely végén mindenki fegyvert vált"
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "A találatellenőrzés megjelenítése a célkereszten. Nincs: a találat lehetősége nincs hatással a célkeresztre; Valós célzás: elmossa a célkeresztet, mikor nem a falat találod el; Ellenségek: Fel is nagyítja a célkeresztet, mikor egy ellenfelet találsz el"
+
+msgid "Number of channels for the sound output"
+msgstr "A hang kimenet csatornáinak száma"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "A meccs utáni pályaválasztásnál megjelenő szvazati lehetőségek száma"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "A texúrák kidomborításának engedélyezése, mintha valódi felületük lenne (alapértelmezett: letiltva)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "Csak addig tudod az ellenséged megsebezni, amíg az levegőben tartózkodik"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Csapatjátékban felülbírálja a csapatok számának alapbeállítását"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "A különböző effektek (robbanások, becsapódások) által létrehozott effekt-részecskék maximális megjelenítési távolsága (azaz ettől az értéktől messzebb már nem jelennek meg). (alapérték: 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Megállítja a szerver lista frissítését, hogy a szerverek ne \"ugráljanak össze-vissza\" a listában"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Sérülés viszonylagos mértéke, amit a csapattársadnak okozol"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Általad okozott csapatsérülés viszonylagos mértéke, amit te szenvedsz el büntetésből, mert a csapattársad ellen fordultál"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Találatjelző hang adása, ha sikeresen eltaláltad az ellenségedet"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Játék interneten keresztül, helyi hálózaton, demók megtekintése, vagy a karaktered beállításainak finomítása"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Menühangok engedélyezése, ha valamire rákattintasz, vagy az opciók felett mozgatod az egeret"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Egyjátékos mód vagy azonnali játék gépi vezérlésű botok ellen"
+
+msgid "Players spawn with the grappling hook"
+msgstr "A játékosok arzenáljában a vonóhorog is szerepelni fog"
+
+msgid "Players spawn with the jetpack"
+msgstr "A játékosok hátán sugárhajtóműves hátizsák van"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "A játékosok eldobnak minden fegyvert, amit birtokoltak a haláluk előtt"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "A teljes képernyő vízszintes tükrözése, \"szegény ember bal kezes módja\". (alapértelmezett: ki)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Fegyvermodell helyzete. FIGYELEM! Ha játék közben vagy, újra kell csatlakoznod a szerverhez (helyi játék esetén újra kell indítanod azt), hogy a változtatás életbe lépjen!"
+
+msgid "Quit the game"
+msgstr "Kilépés a játékból"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "A csúszkával a felrobbantott ellendelek húscafatainak mennyiségének tudod beállítani (alapértelmezett: sok)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Valós idejű tükröződések, portálok és fénytörések engedélyzése. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott!  (alapértelmezett: letiltva)"
+
+msgid "Remove all the maps from your selection"
+msgstr "Egyik pálya sincs kiválasztva"
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "A véres és erőszakos grafikai tartalmak cserélése színes mintákká, \"gyerek barát mód\" (alapértelmezett: letiltva)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Tükröződések/A csúszkával a valós idejű tükröződési effektek minőségét tudod szabályozni. (alapértelmezett: jó)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Színtelítettség beállítása  (0 = szürke, 1 = normál, 2 = túltelített ), GLSL színkezelés szükséges (alapérték: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "A csúszkával az iránypontok méretét tudod szabályozni. A nagyobb értékek nagyobb feliratokat eredményeznek"
+
+msgid "Screen resolution"
+msgstr "A csúszkával a képernyő felbontását tudod megváltoztatni. TIPP: Ha több monitorod van, és a kép az összes monitorra szét van feszítve, akkor az Egyéb -> Haladó beállításokban keresd ki a listából a "vid_netwmfullscreen" változót, és állítsd át az értékét \"1\"-re! Ez megoldja problémát, de ebben az esetben csak a képernyőd natív felbontását tudod csak használni!"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "A kiválasztott fegyver aréna minden játékosnak ugyanazt a fegyvert biztosítja korlátlan lőszerrel, és letiltja minden más fegyver felvételét"
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Különböző célkeresztek beállítása az éppen kézben tartott fegyverhez; hasznos lehet fegyvermodell nélküli játék során"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "A célkereszt színének változtatása az éppen kézben tartott fegyvertől függően"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "A legkedveltebb fegyver, önműködő fegyverváltás és fegyvermodell pozíciójának beállításai"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Csomagméret és egyéb információk grafikonjának kirajzolása játék közben a képernyő jobb alsó sarkába"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Az aktuális dátum kijelzése a képernyő jobb alsó sarkában"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Az aktuális időt kijelzése a képernyő jobb alsó sarkában"
+
+msgid "Show empty servers"
+msgstr "Üres szerverek mutatása"
+
+msgid "Show full servers that have no slots available"
+msgstr "Teli szerverek mutatása, amelyeken nincs már szabad férőhely"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Még több információ megjelenítése az éppen kiválasztott szerverről"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "A látómeződben tartózkodó játékosok nevének mutatása"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Különböző játéktípusok során iránypontok rajzolása a képernyőre, amik segítenek a tájékozódásban (pl. bázisok, generátorok, uralmi pontok helyzete stb.)"
+
+msgid "Show your rendered frames per second"
+msgstr "A másodpercenként megjelenített képkockák (FPS) számának kijelzése a képernyő jobb alsó sarkában"
+
+msgid "Simple majority wins a vote"
+msgstr "Egyszerű többség nyerjen egy szavazásban"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Simítja az egérmozgást, de így célzás pontossága némiképp csökkenhet"
+
+msgid "Sound output frequency"
+msgstr "Hang kimenet frekvenciája"
+
+msgid "Specify how experienced the bots will be"
+msgstr "A botok ügyességi szintjének meghatározása"
+
+msgid "Specify your network speed with this slider"
+msgstr "A csúszkával a hálózati kapcsolatod sebessége és típusát tudod meghatározni"
+
+msgid "Swap left/right channels"
+msgstr "A jobb és bal hangcsatornák felcserélése"
+
+msgid "The Xonotic credits"
+msgstr "A Xonotic készítőinek és segítségnyújtóinak listája"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Gyilokok száma, amit a meccs vége előtt el kell érni"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "A játékosok és botok maximális összlétszáma, ahányan egyszerre a szerverre csatlakozhatnak"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "A becsapódási nyomok eltűnésének kezdetének időtartama másodpercben mérve (alapérték: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Időhatár percekben mérve, aminek elérése után vége a meccsnek"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Nagy részletességű fénytérképek használata a statikus árnyékok leképzéséhez, ami szépen néz ki, de kissé megemeli a szükséges videó memória mennyiségét (alapértelmezett: engedélyezve)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Képpontokkénti megvilágítás és árnyékolás használata a statikus fényekhez. A textúrák nagy része így olyan lesz, mintha valós felületük lenne. (alapértelmezett: engedélyezve)"
+
+msgid "Use the old HUD layout"
+msgstr ""
+
+msgid "Video settings"
+msgstr "Videó beállítások: képernyő felbontás, színmélység, fényerő, kontraszt, stb."
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr ""
+
+msgid "Weapons stay after they are picked up"
+msgstr "A fegyverek a helyükön maradnak, még azután is, hogy valaki felvette őket"
index e40e4b2a76ab7cdc9e08a76e4c25d9984f6d2253..96eebf30af9df467b0bfd4bcb418413fe2f91763 100644 (file)
@@ -8197,3 +8197,623 @@ msgstr "Colore squadra:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Abilita pannello"
+
+
+msgid "Moving"
+msgstr "Movimento"
+
+msgid "forward"
+msgstr "avanti"
+
+msgid "backpedal"
+msgstr "indietro"
+
+msgid "strafe left"
+msgstr "a sinistra"
+
+msgid "strafe right"
+msgstr "a destra"
+
+msgid "jump / swim"
+msgstr "salta / risalire in acqua"
+
+msgid "crouch / sink"
+msgstr "abbassarsi / scendere in acqua"
+
+msgid "off-hand hook"
+msgstr "hook immediato"
+
+msgid "jet pack"
+msgstr "jet pack"
+
+msgid "Attacking"
+msgstr "Attacco"
+
+msgid "primary fire"
+msgstr "fuoco primario"
+
+msgid "secondary fire"
+msgstr "fuoco secondario"
+
+msgid "Weapon switching"
+msgstr "Cambio d'arma"
+
+msgid "previous"
+msgstr "precedente"
+
+msgid "next"
+msgstr "successiva"
+
+msgid "previously used"
+msgstr "ultima usata"
+
+msgid "best"
+msgstr "migliore"
+
+msgid "reload"
+msgstr "ricarica"
+
+msgid "View"
+msgstr "Vista"
+
+msgid "hold zoom"
+msgstr "tieni zoom"
+
+msgid "toggle zoom"
+msgstr "attiva/disattiva zoom"
+
+msgid "show scores"
+msgstr "mostra punteggi"
+
+msgid "screen shot"
+msgstr "screenshot"
+
+msgid "maximize radar"
+msgstr "massimizza radar"
+
+msgid "toggle minigame menu"
+msgstr "attiva/disattiva il menù dei giochini"
+
+msgid "Communicate"
+msgstr "Comunicazione"
+
+msgid "public chat"
+msgstr "chat pubblica"
+
+msgid "team chat"
+msgstr "chat di squadra"
+
+msgid "show chat history"
+msgstr "mostra storia chat"
+
+msgid "vote YES"
+msgstr "vota SÌ"
+
+msgid "vote NO"
+msgstr "vota NO"
+
+msgid "ready"
+msgstr "pronto"
+
+msgid "Client"
+msgstr "Client"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "info del server"
+
+msgid "enter console"
+msgstr "apri console"
+
+msgid "disconnect"
+msgstr "disconnetti"
+
+msgid "quit"
+msgstr "esci"
+
+msgid "Teamplay"
+msgstr "Gioco a squadre"
+
+msgid "team chat"
+msgstr "chat di squadra"
+
+msgid "auto-join team"
+msgstr "auto-scegli squadra"
+
+msgid "team menu"
+msgstr "menu scelta squadra"
+
+msgid "sandbox menu"
+msgstr "menu sandbox"
+
+msgid "enter spectator mode"
+msgstr "modalità spettatore"
+
+msgid "drop weapon"
+msgstr "abbandona arma"
+
+msgid "drop key / drop flag"
+msgstr "abbandona chiave / bandiera"
+
+msgid "drag object"
+msgstr "trascina oggetto"
+
+msgid "3rd person view"
+msgstr "vista terza persona"
+
+msgid "User defined"
+msgstr "Definiti dall'utente"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Impostazioni avanzate del server"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Impostazioni avanzate dove puoi mettere mano ad ogni singola variabile del gioco"
+
+msgid "All players are almost invisible"
+msgstr "Tutti i giocatori sono quasi invisibili"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Rendi il tasto di chiusura console uguale a quella di apertura"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Porta sempre il laser come arma aggiuntiva nella modalità \"No items Xonotic\""
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Luminosità dell'ambiente, se è impostato ad un valore troppo alto tende a rendere la luce delle mappe opaca e piatta (predefinito: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Numero di bot nel tuo server"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "L'ammontare di vita sotto la quale il tuo giocatore viene stordito per la perdita di sangue"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Qualità del filtro anisotropico (predefinito: 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Un annuncio ti avverte dei minuti rimanenti alla fine della partita"
+
+msgid "Audio settings"
+msgstr "Impostazioni audio"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Automaticamente passa all'arma appena raccolta se è migliore di quella che stavi già usando"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Automaticamente insulta i nemici quando gli fragghi"
+
+msgid "Autoselect team (recommended)"
+msgstr "Autoseleziona team (raccomandato)"
+
+msgid "Back to work..."
+msgstr "Devo tornare a lavorare..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Testa quanto velocemente il tuo computer fa girare il demo selezionato"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Aggiungi nel segnalibri il server attualmente selezionato in modo che sia più veloce da trovare in futuro"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Luminosità del nero (predefinito: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Luminosità del bianco (predefinito: 1)"
+
+msgid "Browse and view demos"
+msgstr "Naviga e vedi le demo"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "Di quanto viene moltiplicato il contrasto nelle aree oscure (predefinito: 1)"
+
+msgid "Change the game settings"
+msgstr "Cambia le impostazioni del gioco"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Cambia la nitidezza delle textures. Valori più bassi riducono l'uso della memoria per le texture, però faranno apparire quest'ultime molto sfuocate. (predefinito: buona)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Cambia lo smussamento delle curve della mappa (predefinito: normali)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Comprimi le texture per le schede video con poca memoria grafica disponibile (predefinito: Nessuna)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Controlla la trasparenza dei waypoint"
+
+msgid "Customize your player settings"
+msgstr "Personalizza le tue impostazioni del giocatore"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Il danno causato al tuo nemico aumenta la tua vita"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "I decal più lontano di questa distanza non vengono mostrati (predefinito: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Disabilita completamente le texture per hardware molto lento. Questo dà un enorme boost alle performance, però appare molto poco gradevole. (predefinito: disabilitato)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Distanza dalla quale gli insulti possono essere uditi"
+
+msgid "Draw the weapon model"
+msgstr "Mostra il modello dell'arma"
+
+msgid "Effect settings"
+msgstr "Impostazioni effetti"
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Elimina eccesso di disegno (overdraw) eseguendo il rendering della sola profondità della scena prima di iniziare il rendering \"standard\" (predefinito: disabilitato)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Abilita i pixel shader OpenGL 2.0 per l'illuminazione (predefinito: abilitato)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Abilita l'antialiasing, che smussa i bordi dei modelli in 3D. Nota che le performance potrebbero decrementare di un bel pò (predefinito: disabilitato)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Abilita effetti bloom, che illuminano i pixel più vicini a pixel molto luminosi. Hanno un grosso impatto sulle performance. (predefinito: disabilitato)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Abilita predizione del movimento lato client"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Abilita i bagliori corona attorno a determinate luci (predefinito: abilitati)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Abilita i decal (buchi dei proiettili e sangue) (predefinito: abilitati)"
+
+msgid "Enable directional voices"
+msgstr "Abilita voci direzionali"
+
+msgid "Enable dodging"
+msgstr "Abilita schivamento"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Abilita luci dinamiche più veloci ma meno gradevoli tramite il rendering di corone luminose invece di luci dinamiche reali (predefinito: disabilitato)"
+
+msgid "Enable footstep sounds"
+msgstr "Abilita suoni dei passi"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Abilita modalità a tutto schermo (predefinito: abilitato)"
+
+msgid "Enable network update smoothing"
+msgstr "Abilita aggiornamento da rete spianato"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Abilita il rendering delle luci dinamiche come esplosioni e lancio di razzi (predefinito: abilitato)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Abilita il rendering delle luci dell'ambiente in tempo reale in mappe che le supportano. Nota che questo potrebbe avere un grande impatto sulle performance. (predefinito: disabilitato)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Abilita il rendering di ombre dalle luci dinamiche (predefinito: abilitato)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Abilita il rendering di ombre dalle luci dell'ambiente in tempo reale (predefinito: disabilitato)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Abilita spazialità (mischia leggermente i canali destro e sinistro per decrementare di un pò la separazione stereo per le cuffie)"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Abilita l'uso della lucentezza delle mappe sulle texture che la supportano (predefinito: abilitati)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Abilita l'uso delle GLSL per applicare la correzione gamma, nota che le performance potrebbero decrementare di tanto (predefinito: disabilitato)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Abilita l'uso di ombre direzionali sulle texture (predefinito: abilitato)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Abilita la sincronizzazione verticale per prevenire la lacrimazione (tearing), imposta il limite massimo di fps alla velocità di aggiornamento dello schermo (predefinito: disabilitato)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Abilita/disabilita lo sfondo dell'HUD"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr ""
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Dissolvi corone rispetto a visibilità (predefinito: abilitato)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Il campo di vista da 60 a 130 gradi, di default è a 90 gradi"
+
+msgid "Find servers to play on"
+msgstr "Cerca dei server dove giocare"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Forza il client a usare la porta selezionata a meno che non è impostata a 0"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Luminosità del rendering globale (predefinito: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Mappaggio dell'offset di maggior qualità, che ha anche un enorme impatto sulle performance (predefinito: disabilitato)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Versione a più alta qualità dei bloom, che hanno un enorme impatto sulle performance. (predefinito: disabilitato)"
+
+msgid "Host your own game"
+msgstr "Ospita la tua partita"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "Quanto grande è il fattore zoom quando il tasto per lo zoom viene premuto"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Quando velocemente la vista viene zoomata, disabilitalo per lo zoom istantaneo"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Quanto dura un colpo alla visuale per il danno (predefinito: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Bit per pixel (BPP) per il rendering, 32 è raccomandato"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Quanti pacchetti in ingresso inviare al server ogni secondo"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Come lo zoom fa variare la sensibilità del mouse, da 0 (sensibilità più bassa) a 1 (nessun cambio di sensibilità)"
+
+msgid "I got some more fragging to do!"
+msgstr "Ho ancora un pò di frag da fare!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Se impostato, riduce solo la qualità delle texture dei modelli (predefinito: abilitato)"
+
+msgid "Input settings"
+msgstr "Impostazioni input"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Valore della correzione gamma inversa, un effetto di luminosità che non tocca il bianco o il nero (predefinito: 1.125)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Inverti il movimento del mouse nell'asse Y"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Fa in modo che la CPU attenda che la GPU finisca di elaborare ogni frame, può aiutare con alcuni strani input o in presenza di video lag in alcune macchine (predefinito: disabilitato)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Rendi la caduta degli oggetti più lenta, valori inferiori significano minor gravità"
+
+msgid "Make use of DGA mouse input"
+msgstr "Fai uso dell'input DGA del mouse"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Fai uso dei Vertex Buffer Objects per salvare nella memoria grafica la geometria statica per un rendering più veloce (predefinito: Vertici e Triangoli)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Usa la lista qui sotto per definire le armi usando la rotellina del mouse"
+
+msgid "Maximum download speed"
+msgstr "Velocità massima di download"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Massimo numero di download HTTP/FTP contemporanei"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr ""
+
+msgid "Misc settings"
+msgstr "Impostazioni varie"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Intensità della sfocatura da movimento - raccomandato a 0.4"
+
+msgid "Mouse speed multiplier"
+msgstr "Moltiplicatore velocità del mouse"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Velocità mouse nel menu, non riguarda il puntamento nel gioco"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Moltiplicatore del numero di particelle. Valori inferiori significano meno particelle, che di conseguenza incrementano le performance (predefinito: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Mutatori e arene di armi"
+
+msgid "Name under which you will appear in the game"
+msgstr "Nome col quale apparirai nel gioco"
+
+msgid "Network settings"
+msgstr "Impostazioni di rete"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "\"No items Xonotic\" - invece di raccogliere oggetti, ognuno giocherà con la stessa arma. Dopo un pò di tempo, un conto alla rovescia inizierà, dopo il quale ognuno passerà ad un'altra arma."
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Nessuno: non fare test di colpo a segno per il mirino; VeraMira: sfoca il mirino quando non colpiresti il muro; Nemici: allarga anche il mirino quando colpiresti un nemico"
+
+msgid "Number of channels for the sound output"
+msgstr "Numero di canali in uscita"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Numero di mappe che sono mostrate nel voto delle mappe alla fine di una partita"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Effetto del mappaggio in offset che fa sembrare che le texture con bumpmaps \"saltino fuori\" dalle superfici piane in 2D (predefinito: disabilitato)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "È possibile infliggere danni al tuo nemico solo quando è per aria"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Non tenere conto del numero predefinito di squadre nei giochi di squadra"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Distanza per cui le particelle non vengono mostrate (predefinito: 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Ferma l'aggiornamento della lista server per prevenire il continuo spostamento di posizione dei server"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Percentuale di danno inflitto ai compagni di squadra"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Percentuale di danno inflitto ai compagni di squadra che viene riversato su di te"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Riproduci un suono quando il tuo sparo colpisce un nemico"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Gioca online, contro i tuoi amici in LAN, guarda demo o cambia le impostazioni del giocatore"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Riproduci suoni quando clicchi o navighi su oggetti del menu"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Gioca la campagna in giocatore singolo o una partita istantanea contro dei bot"
+
+msgid "Players spawn with the grappling hook"
+msgstr "I giocatori nascono con il grappling hook"
+
+msgid "Players spawn with the jetpack"
+msgstr "I giocatori nascono col jetpack"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "I giocatori rilasceranno tutte le armi che possedevano appena vengono uccisi"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Modalità mancino (Predefinito: off)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Posizione del modello dell'arma; richiede riconnessione"
+
+msgid "Quit the game"
+msgstr "Esci dal gioco"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Riduci il numero di gib o rimuovili completamente (predefinito: parecchi)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Qualità dei riflessi e delle rifrazioni, ha un enorme impatto sulle performance nelle mappe superfici riflettenti (predefinito: disabilitato)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Sostituisci il sangue e i gib con contenuti che non hanno alcun effetto di sangue (predefinito: disabilitato)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Risoluzione dei riflessi/rifrazioni (predefinito: buona)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Adattamento saturazione (0 = scala di grigi, 1 = normale, 2 = sovra-saturo), richiede il GLSL color control (predefinito: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Scala moltiplicatore dei waypoint"
+
+msgid "Screen resolution"
+msgstr "Risoluzione schermo"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Selezionando un'arena dedicata ad un'arma si darà a tutti i giocatori quell'arma con munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi."
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Imposta un differente mirino per ogni arma, buono se giochi senza i modelli delle armi"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Imposta il colore del mirino dipendente dall'arma che stai correntemente usando"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Imposta le tue armi preferite, i cambi automatici e le impostazioni dei modelli delle armi"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Mostra un grafico delle dimensioni dei pacchetti e di altre informazioni"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Mostra la data corrente, utile negli screenshot"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Mostra l'orario corrente, utile negli screenshot"
+
+msgid "Show empty servers"
+msgstr "Mostra server vuoti"
+
+msgid "Show full servers that have no slots available"
+msgstr "Mostra server pieni che non hanno slot disponibili"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Mostra maggiori informazioni riguardo il server attualmente selezionato"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Mostra il nome del giocatore a cui stai mirando"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Mostra vari waypoint specifici di certi tipi di gioco"
+
+msgid "Show your rendered frames per second"
+msgstr "Mostra i fotogrammi al secondo"
+
+msgid "Simple majority wins a vote"
+msgstr "La semplice maggioranza vince il voto"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Rendi più morbido il movimento del mouse, però rende la sua risposta leggermente più lenta"
+
+msgid "Sound output frequency"
+msgstr "Frequenza di campionamento in uscita"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Specifica quanto i bot saranno esperti"
+
+msgid "Specify your network speed with this slider"
+msgstr "Specifica la velocità della tua rete con questa barra"
+
+msgid "Swap left/right channels"
+msgstr "Inverti canali sinistro/destro"
+
+msgid "The Xonotic credits"
+msgstr "I crediti di Xonotic"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Il numero di frag necessari prima che la partita finisca"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "Il massimo numero di giocatori o bot che possono essere connessi al tuo server alla volta"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Tempo in secondi passato il quale i decal sfumano (predefinito: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Tempo limite in minuti che appena raggiunto terminerà la partita"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Usa le mappe di luce ad alta risoluzione, che appaiono più gradite alla vista, però sfruttano più memoria video (predefinito: abilitato)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Usa gli effetti di illuminazione pixel per pixel (predefinito: abilitati)"
+
+msgid "Use the old HUD layout"
+msgstr "Usa il tema del vecchio HUD"
+
+msgid "Video settings"
+msgstr "Impostazioni video"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Frequenza dell'ondeggiamento della visuale, disabilita per nessun ondeggiamento"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Le armi rimangono dopo che vengono raccolte"
index d2400b8c3639624dd48de0563854872c02854a26..48e29a32b1834e4048630e07c7df68fa1b439de0 100644 (file)
@@ -8131,3 +8131,623 @@ msgstr "Цвет команды:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Включить панель"
+
+
+msgid "Moving"
+msgstr "Движение"
+
+msgid "forward"
+msgstr "вперёд"
+
+msgid "backpedal"
+msgstr "назад"
+
+msgid "strafe left"
+msgstr "влево"
+
+msgid "strafe right"
+msgstr "вправо"
+
+msgid "jump / swim"
+msgstr "прыжок / плыть"
+
+msgid "crouch / sink"
+msgstr "пригнуться / погрузиться"
+
+msgid "off-hand hook"
+msgstr "крюк"
+
+msgid "jet pack"
+msgstr "реактивный ранец"
+
+msgid "Attacking"
+msgstr "Нападение"
+
+msgid "primary fire"
+msgstr "основной огонь"
+
+msgid "secondary fire"
+msgstr "дополнительный огонь"
+
+msgid "Weapon switching"
+msgstr "Переключение оружия"
+
+msgid "previous"
+msgstr "предыдущее"
+
+msgid "next"
+msgstr "следующее"
+
+msgid "previously used"
+msgstr "ранее использованное"
+
+msgid "best"
+msgstr "лучшее"
+
+msgid "reload"
+msgstr "перезарядить"
+
+msgid "View"
+msgstr "Вид"
+
+msgid "hold zoom"
+msgstr "увеличение"
+
+msgid "toggle zoom"
+msgstr "переключить увеличение"
+
+msgid "show scores"
+msgstr "показать очки"
+
+msgid "screen shot"
+msgstr "снимок экрана"
+
+msgid "maximize radar"
+msgstr ""
+
+msgid "toggle minigame menu"
+msgstr ""
+
+msgid "Communicate"
+msgstr "Общение"
+
+msgid "public chat"
+msgstr "общий чат"
+
+msgid "team chat"
+msgstr "чат команды"
+
+msgid "show chat history"
+msgstr "показать историю чата"
+
+msgid "vote YES"
+msgstr "голосовать ДА"
+
+msgid "vote NO"
+msgstr "голосовать НЕТ"
+
+msgid "ready"
+msgstr "готовность"
+
+msgid "Client"
+msgstr "Клиент"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "сведения о сервере"
+
+msgid "enter console"
+msgstr "открыть консоль"
+
+msgid "disconnect"
+msgstr "отключиться"
+
+msgid "quit"
+msgstr "выйти"
+
+msgid "Teamplay"
+msgstr "Командная игра"
+
+msgid "team chat"
+msgstr "чат команды"
+
+msgid "auto-join team"
+msgstr "авто-выбор команды"
+
+msgid "team menu"
+msgstr "меню команды"
+
+msgid "sandbox menu"
+msgstr ""
+
+msgid "enter spectator mode"
+msgstr "стать наблюдателем"
+
+msgid "drop weapon"
+msgstr "бросить оружие"
+
+msgid "drop key / drop flag"
+msgstr "бросить ключ или флаг"
+
+msgid "drag object"
+msgstr "drag object"
+
+msgid "3rd person view"
+msgstr ""
+
+msgid "User defined"
+msgstr "Определенно пользователем"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Дополнительные серверные настройки"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Продвинутые настройки, в которых можно подстроить каждую переменную игры"
+
+msgid "All players are almost invisible"
+msgstr "Все игроки почти невидимы"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Использовать привязку для открытия консоли также и для её сокрытия"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Always carry the laser as an additional weapon in Nix"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Окружающее освещение, если выставлено слишком сильным, приводит к тому, что свет на картах выглядит блёклым и плоским (по умолчанию: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Количество ботов на сервере"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Величина здоровья, ниже которой наступает оглушение из-за потери крови"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Anisotropic filtering quality (default: 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Звук предупреждения, сообщающий оставшиеся до конца состязания минуты"
+
+msgid "Audio settings"
+msgstr "Настройки звука"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Автоматически насмехаться над противниками после их поражений"
+
+msgid "Autoselect team (recommended)"
+msgstr "Автовыбор команды (советуется)"
+
+msgid "Back to work..."
+msgstr "Пора саночки возить..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Замерить, насколько быстро компьютер способен играть выбранное демо"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Добавить выбранный сервер в закладки, так найти его будет быстрее"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Яркость чёрного (по умолчанию: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Яркость белого (по умолчанию: 1)"
+
+msgid "Browse and view demos"
+msgstr "Список демо для просмотра"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "By how much to multiply the contrast in dark areas (default: 1)"
+
+msgid "Change the game settings"
+msgstr "Изменить настройки игры"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Change the smoothness of the curves on the map (default: normal)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Compress the textures for video cards with small amounts of video memory available (default: None)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Управление прозрачностью отметок"
+
+msgid "Customize your player settings"
+msgstr "Изменить настройки игрока"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Урон, наносимый противнику, прибавляется к собственному здоровью"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "Decals further away than this will not be drawn (default: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Расстояние, с которого будут слышны насмешки"
+
+msgid "Draw the weapon model"
+msgstr "Draw the weapon model"
+
+msgid "Effect settings"
+msgstr "Настройки эффектов"
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Включить предсказание движения на стороне клиента"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Enable corona flares around certain lights (default: enabled)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Enable decals (bullet holes and blood) (default: enabled)"
+
+msgid "Enable directional voices"
+msgstr "Enable directional voices"
+
+msgid "Enable dodging"
+msgstr "Enable dodging"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+
+msgid "Enable footstep sounds"
+msgstr "Включить звуки шагов"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "Включить полноэкранный режим (по умолчанию: включено)"
+
+msgid "Enable network update smoothing"
+msgstr "Enable network update smoothing"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Enable rendering of shadows from dynamic lights (default: disabled)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Enable rendering of shadows from realtime world lights (default: disabled)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Enable the use of glossmaps on textures supporting it (default: enabled)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Enable use of directional shading on textures (default: enabled)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Включить/выключить фон HUD"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr ""
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Fade coronas according to visibility (default: enabled)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Угол обзора в градусах, допустимы значения от 60 то 130, по умолчанию 90"
+
+msgid "Find servers to play on"
+msgstr "Поиск игровых серверов"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Force client to use chosen port unless it is set to 0"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Общая яркость вывода (по умолчанию: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+
+msgid "Host your own game"
+msgstr "Запустить собственную игру"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "How big the zoom factor is when the zoom button is pressed"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "How fast the view will be zoomed, disable to zoom instantly"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "How long a view kick from damage lasts (default: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Сколько бит на точку использовать для вывода, советуется 32"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Сколько пакетов посылать серверу каждую секунду"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+
+msgid "I got some more fragging to do!"
+msgstr "Остались здесь ещё дела!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "If set, only reduce the texture quality of models (default: enabled)"
+
+msgid "Input settings"
+msgstr "Настройки устройств ввода"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Обратить движения мыши по вертикальной оси"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Падение происходит медленнее. Чем ниже значение, тем ниже гравитация"
+
+msgid "Make use of DGA mouse input"
+msgstr "Использовать DGA ввод для мыши"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Make use of the list above when cycling through weapons with the mouse wheel"
+
+msgid "Maximum download speed"
+msgstr "Предел скорости скачивания"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Предел одновременных HTTP/FTP загрузок"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+
+msgid "Misc settings"
+msgstr "Разные настройки"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Motion blur strength - 0.4 recommended"
+
+msgid "Mouse speed multiplier"
+msgstr "Множитель скорости мыши"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Множитель скорости мыши в меню, не влияет на прицеливание в игре"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Мутаторы и арены оружий"
+
+msgid "Name under which you will appear in the game"
+msgstr "Имя, под которым вы появитесь в игре"
+
+msgid "Network settings"
+msgstr "Настройки сети"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Отключена: нет проверок перекрестья на попадание; TrueAim: размывать перекрестье, когда не наведено на стену; Враги: также увеличивать перекрестье, когда наведено на врага"
+
+msgid "Number of channels for the sound output"
+msgstr "Число каналов для вывода звука"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Количество карт, предлагаемых в голосовании после состязания"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "Только находящиеся в воздухе получают повреждения"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Заменить значение по умолчанию количества команд в командных играх"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Particles further away than this will not be drawn (default: 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Приостановить обновление списка серверов для предотвращения их скакания"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Доля урона, получаемого союзниками от союзников"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Доля урона, наносимого союзнику, которая будет отражена на себя"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Играть звук оповещения, когда выстрел достигает противника"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Играть по сети, просмотреть демо или изменить настройки игрока"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Играть звуки при взаимодействии с меню"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Начать одиночную кампанию или быструю игру против ботов"
+
+msgid "Players spawn with the grappling hook"
+msgstr "Передвижение и полёты на подтягивающем крюке"
+
+msgid "Players spawn with the jetpack"
+msgstr "Полёты на реактивном ранце"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "Во время смерти выбрасывается всё оружие, которое нёс \"убитый\", что даёт возможность его подобрать"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Poor man's left handed mode (default: off)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Position of the weapon model; requires reconnect"
+
+msgid "Quit the game"
+msgstr "Выйти из игры"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Reduce the amount of gibs or remove them completely (default: lots)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Resolution of reflections/refractions (default: good)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Множитель размера отметок"
+
+msgid "Screen resolution"
+msgstr "Разрешение экрана"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Set a different crosshair for each weapon, good if you play without weapon models"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Set the color of the crosshair depending on the weapon you are currently holding"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Set your most preferred weapons, autoswitch and weapon model settings"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Показывать график размеров пакетов и других сведений"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Показывать текущую дату, полезно на снимках экранов"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Показывать текущее время, полезно на снимках экранов"
+
+msgid "Show empty servers"
+msgstr "Показывать пустые сервера"
+
+msgid "Show full servers that have no slots available"
+msgstr "Показывать полные сервера, не имеющие свободных мест"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Показать больше сведений о выбранном сервере"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Показывать имя игрока, в которого вы целитесь"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Показывать различные отметки, определяемые видом игры"
+
+msgid "Show your rendered frames per second"
+msgstr "Show your rendered frames per second"
+
+msgid "Simple majority wins a vote"
+msgstr "Простое большинство выигрывает голосование"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Сглаживает движения мыши, но значительно ухудшает отзывчивость прицеливания"
+
+msgid "Sound output frequency"
+msgstr "Частота дискретизации для вывода звука"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Насколько искусными будут боты"
+
+msgid "Specify your network speed with this slider"
+msgstr "Укажите скорость вашей сети с помощью этого ползунка"
+
+msgid "Swap left/right channels"
+msgstr "Поменять местами правый и левый каналы"
+
+msgid "The Xonotic credits"
+msgstr "The Xonotic credits"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Количество очков, необходимых для завершения состязания"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "Предельное количество игроков и ботов, которые могут быть одновременно подключены к серверу"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Time in seconds before decals fade away (default: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Ограничение времени в минутах, состязание закончится при его достижении"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Use per-pixel lighting effects (default: enabled)"
+
+msgid "Use the old HUD layout"
+msgstr "Use the old HUD layout"
+
+msgid "Video settings"
+msgstr "Настройки изображения"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Частота качания вида"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Всё собранное оружие остаётся после возрождений"
index a2feb9ff296539e7fcb2b8125d2d002869598192..4c6bebdae559bbd451399d02e34b20f9f1986a1f 100644 (file)
@@ -8073,3 +8073,623 @@ msgstr "Колір команди:"
 #: qcsrc/menu/xonotic/util.qh:48
 msgid "Enable panel"
 msgstr "Увімкнути панель"
+
+
+msgid "Moving"
+msgstr "Рух"
+
+msgid "forward"
+msgstr "вперед"
+
+msgid "backpedal"
+msgstr "назад"
+
+msgid "strafe left"
+msgstr "крок ліворуч"
+
+msgid "strafe right"
+msgstr "крок праворуч"
+
+msgid "jump / swim"
+msgstr "стрибок / плисти нагору"
+
+msgid "crouch / sink"
+msgstr "присідання / занурення"
+
+msgid "off-hand hook"
+msgstr "гак"
+
+msgid "jet pack"
+msgstr "реактивний ранець"
+
+msgid "Attacking"
+msgstr "Бій"
+
+msgid "primary fire"
+msgstr "основний вогонь"
+
+msgid "secondary fire"
+msgstr "альтернативний вогонь"
+
+msgid "Weapon switching"
+msgstr "Вибір зброї"
+
+msgid "previous"
+msgstr "попередня"
+
+msgid "next"
+msgstr "наступна"
+
+msgid "previously used"
+msgstr "використана раніше"
+
+msgid "best"
+msgstr "найкраща"
+
+msgid "reload"
+msgstr "перезарядити"
+
+msgid "View"
+msgstr "Вид"
+
+msgid "hold zoom"
+msgstr "утримувати для зуму"
+
+msgid "toggle zoom"
+msgstr "увімк / вимк зум"
+
+msgid "show scores"
+msgstr "показати рахунок"
+
+msgid "screen shot"
+msgstr "скриншот"
+
+msgid "maximize radar"
+msgstr ""
+
+msgid "toggle minigame menu"
+msgstr ""
+
+msgid "Communicate"
+msgstr "Спілкування"
+
+msgid "public chat"
+msgstr "публічний чат"
+
+msgid "team chat"
+msgstr "командний чат"
+
+msgid "show chat history"
+msgstr "показувати історію чату"
+
+msgid "vote YES"
+msgstr "проголосувати ТАК"
+
+msgid "vote NO"
+msgstr "проголосувати НІ"
+
+msgid "ready"
+msgstr "готовий"
+
+msgid "Client"
+msgstr "Клієнт"
+
+msgid "quick menu"
+msgstr ""
+
+msgid "server info"
+msgstr "відомості про сервер"
+
+msgid "enter console"
+msgstr "увійти в консоль"
+
+msgid "disconnect"
+msgstr "роз'єднатися"
+
+msgid "quit"
+msgstr "вийти"
+
+msgid "Teamplay"
+msgstr "Командна гра"
+
+msgid "team chat"
+msgstr "командний чат"
+
+msgid "auto-join team"
+msgstr "автовибір команди"
+
+msgid "team menu"
+msgstr "командне меню"
+
+msgid "sandbox menu"
+msgstr ""
+
+msgid "enter spectator mode"
+msgstr "увійти в режим спостерігача"
+
+msgid "drop weapon"
+msgstr "викинути зброю"
+
+msgid "drop key / drop flag"
+msgstr "викинути ключ / прапор"
+
+msgid "drag object"
+msgstr ""
+
+msgid "3rd person view"
+msgstr ""
+
+msgid "User defined"
+msgstr "Визначені користувачем"
+
+msgid "userbind"
+msgstr ""
+
+
+msgid "Add every available map to your selection"
+msgstr ""
+
+msgid "Add the maps shown in Maplist above to your selection"
+msgstr ""
+
+msgid "Advanced server settings"
+msgstr "Додаткові налаштування сервера"
+
+msgid "Advanced settings where you can tweak every single variable of the game"
+msgstr "Тут ви зможете змінити будь-які деталі гри"
+
+msgid "All players are almost invisible"
+msgstr "Всі гравці майже невидимі"
+
+msgid "Allow the console toggling bind to also close the console"
+msgstr "Дозволяє закривати і відкривати консоль однією клавішею"
+
+msgid "Always carry the laser as an additional weapon in Nix"
+msgstr "Зробити лазер доступним у Нікс"
+
+msgid "Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)"
+msgstr "Навколишнє освітлення, якщо значення надто високе, то освітлення на мапах стає приглушеним та плоским (за замовчуванням: 4)"
+
+msgid "Amount of bots on your server"
+msgstr "Кількість ботів на вашому сервері"
+
+msgid "Amount of health below which your player gets stunned because of blood loss"
+msgstr "Кількість здоров'я, нижче за яку гравець буде паралізований від втрати крові"
+
+msgid "Anisotropic filtering quality (default: 1x)"
+msgstr "Якість анізотропної фільтрації (за замовчуванням: 1x)"
+
+msgid "Announcer sound telling you the remaining minutes of the match"
+msgstr "Увімкнути попередження про те, скільки залишилося часу до кінця матчу"
+
+msgid "Audio settings"
+msgstr "Налаштування аудіо"
+
+msgid "Automatically switch to newly picked up weapons if they are better than what you are carrying"
+msgstr "Автоматично перемикатися на щойно підняту зброю, якщо вона краща за ту, що ви тримаєте у руках"
+
+msgid "Automatically taunt enemies after fragging them"
+msgstr "Автоматично глузувати над ворогами після того, як ви вбили їх"
+
+msgid "Autoselect team (recommended)"
+msgstr "Автоматично обрати команду (рекомендується)"
+
+msgid "Back to work..."
+msgstr "Назад до роботи..."
+
+msgid "Benchmark how fast your computer can run the highlighted demo"
+msgstr "Перевірте як швидко ваш комп'ютер зможе програти обране демо"
+
+msgid "Bookmark the currently highlighted server so that it's faster to find in the future"
+msgstr "Зробити закладку на цьому сервері для того, щоб потім знаходити його швидше"
+
+msgid "Brightness of black (default: 0)"
+msgstr "Яскравіcть чорного (за замовчуванням: 0)"
+
+msgid "Brightness of white (default: 1)"
+msgstr "Яскравість білого (за замовчуванням: 1)"
+
+msgid "Browse and view demos"
+msgstr "Знайдіть та перегляньте демо записи"
+
+msgid "By how much to multiply the contrast in dark areas (default: 1)"
+msgstr "На скільки збільшувати контраст в темних місцях (за замовчуванням: 1)"
+
+msgid "Change the game settings"
+msgstr "Змінити налаштування гри"
+
+msgid "Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"
+msgstr "Чіткість текстур. Зниження параметру зменшить використання відеопам'яті, але зробить текстури нечіткими (за замовчуванням: добре)"
+
+msgid "Change the smoothness of the curves on the map (default: normal)"
+msgstr "Змінити рівність кривих на мапі (за замовчуванням: нормально)"
+
+msgid "Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."
+msgstr ""
+
+msgid "Compress the textures for video cards with small amounts of video memory available (default: None)"
+msgstr "Стискати текстури для відеокарт з малою кількістю відеопам'яті (за замовчуванням: вимкнуто)"
+
+msgid "Control transparency of the waypoints"
+msgstr "Вкажіть прозорість дороговказів"
+
+msgid "Customize your player settings"
+msgstr "Налаштування вашого гравця"
+
+msgid "Damage done to your enemy gets added to your own health"
+msgstr "Шкода яку ви наносите ворогам додається до вашого здоров'я"
+
+msgid "Decals further away than this will not be drawn (default: 300)"
+msgstr "Сліди на відстані більшій ніж ця не будуть створюватись (за замовчуванням: 300)"
+
+msgid "Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)"
+msgstr "Вимикає текстури повністю, для дуже слабких систем. Покращує продуктивність, але виглядає погано (за замовчуванням: вимкнуто)"
+
+msgid "Distance from which taunts can be heard"
+msgstr "Відстань на якій можливо почути глузування"
+
+msgid "Draw the weapon model"
+msgstr "Показувати модель зброї"
+
+msgid "Effect settings"
+msgstr "Налаштування ефектів"
+
+msgid "Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)"
+msgstr "Прибирає перекриття одних пікселів іншими створюючи спочатку версію сцени з лише глибиною (за замовчуванням: вимкнуто)"
+
+msgid "Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)"
+msgstr "Вмикає піксельні шейдери OpenGL 2.0 для освітлення (за замовчуванням: увімкнуто)"
+
+msgid "Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)"
+msgstr "Увімкнути антиаліасинг, який буде згладжувати грані 3D поверхонь. Прийміть до уваги, що це може сильно зменшити продуктивність. (за замовчуванням: вимкнуто)"
+
+msgid "Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)"
+msgstr "Увімкнути ефект bloom, який освітлює ближні пікселі дуже яскравих пікселів. Має сильний вплив на продуктивність (за замовчуванням: вимкнуто)"
+
+msgid "Enable clientside movement prediction"
+msgstr "Увімкнути передбачення руху зі сторони клієнта"
+
+msgid "Enable corona flares around certain lights (default: enabled)"
+msgstr "Увімкнути сонячні корони навколо деяких джерел освітлення (за замовчуванням: увімкнуто)"
+
+msgid "Enable decals (bullet holes and blood) (default: enabled)"
+msgstr "Сліди від куль та пострілів (за замовчуванням: увімкнуто)"
+
+msgid "Enable directional voices"
+msgstr "Вмикає просторові голоси"
+
+msgid "Enable dodging"
+msgstr "Вмикає ухилення"
+
+msgid "Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)"
+msgstr "Вмикає швидкіше, але не таке гарне динамічне освітлення за допомогою яскравих корон, а не справжніх динамічних вогнів (за замовчуванням: вимкнуто)"
+
+msgid "Enable footstep sounds"
+msgstr "Вмикає звуки кроків"
+
+msgid "Enable fullscreen mode (default: enabled)"
+msgstr "На повний екран (за замовчуванням: увімкнуто)"
+
+msgid "Enable network update smoothing"
+msgstr "Увімкнути згладжування оновлення мережі"
+
+msgid "Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)"
+msgstr "Вмикає рендеринг динамічних вогнів від вибухів та ракет (за замовчуванням: увімкнуто)"
+
+msgid "Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)"
+msgstr "Вмикає повний рендеринг динамічного освітлення світу, може мати сильний вплив на продуктивність. (за замовчуванням: вимкнуто)"
+
+msgid "Enable rendering of shadows from dynamic lights (default: disabled)"
+msgstr "Вмикає тіні від динамічних джерел освітлення (за замовчуванням: вимкнуто)"
+
+msgid "Enable rendering of shadows from realtime world lights (default: disabled)"
+msgstr "Вмикає тіні від динамічних джерел освітлення світу (за замовчуванням: увімкнуто)"
+
+msgid "Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)"
+msgstr "Злегка змішати правий та лівий канали щоб трохи зменшити розділення стерео для навушників"
+
+msgid "Enable the use of glossmaps on textures supporting it (default: enabled)"
+msgstr "Вмикає використання мап блиску на текстурах, які їх підтримують (за замовчуванням: увімкнуто)"
+
+msgid "Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)"
+msgstr "Вмикає GLSL для використання корекції гамми, може мати сильній вплив на продуктивність (за замовчуванням: вимкнуто)"
+
+msgid "Enable use of directional shading on textures (default: enabled)"
+msgstr "Вмикає використання directional shading на текстурах (за замовчуванням: увімкнуто)"
+
+msgid "Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)"
+msgstr "Вмикає вертикальну синхронізацію щоб запобігти розривам зображення, ваші FPS не будуть підніматися вище швидкості оновлення монітору (за замовчуванням: увімкнуто)"
+
+msgid "Enable/disable the HUD background"
+msgstr "Увімкнути/вимкнути фон HUD"
+
+msgid "Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)"
+msgstr ""
+
+msgid "Fade coronas according to visibility (default: enabled)"
+msgstr "Прибирати корони відповідно з видимістю (за замовчуванням: увімкнуто)"
+
+msgid "Field of vision in degrees from 60 to 130, default is 90"
+msgstr "Поле огляду у градусах, від 60 до 130, 90 за замовчуванням"
+
+msgid "Find servers to play on"
+msgstr "Знайти сервери для гри"
+
+msgid "Force client to use chosen port unless it is set to 0"
+msgstr "Змушувати клієнта використовувати обраний порт, але тільки якщо значення не 0"
+
+msgid "Global rendering brightness (default: 1)"
+msgstr "Яскравість (за замовчуванням: 1)"
+
+msgid "Higher quality offset mapping, which also has a huge impact on performance (default: disabled)"
+msgstr "Якісніше офсетне текстурування, має великий вплив на продуктивність (за замовчуванням: вимкнуто)"
+
+msgid "Higher quality version of bloom, which has a huge impact on performance. (default: disabled)"
+msgstr "Якісніша версія ефекту bloom, сильно впливає на продуктивність (за замовчуванням: вимкнуто)"
+
+msgid "Host your own game"
+msgstr "Почніть свою власну гру"
+
+msgid "How big the zoom factor is when the zoom button is pressed"
+msgstr "Сила зуму коли натиснута клавіша"
+
+msgid "How fast the view will be zoomed, disable to zoom instantly"
+msgstr "Швидкість зуму, вимкніть щоб збільшувати зображення миттєво"
+
+msgid "How long a view kick from damage lasts (default: 0)"
+msgstr "Як довго триватиме поштовх від ураження (за замовчуванням: 0)"
+
+msgid "How many bits per pixel (BPP) to render at, 32 is recommended"
+msgstr "Скільки використовувати бітів на піксель (BPP), рекомендується 32"
+
+msgid "How many input packets to send to the server each second"
+msgstr "Скільки вхідних пакетів посилати серверу кожну секунду"
+
+msgid "How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)"
+msgstr "Як зум змінює чутливість миші, від 0 (зменшує чутливість) до 1 (без змін)"
+
+msgid "I got some more fragging to do!"
+msgstr "На мене чекають ще кілька фрагів!"
+
+msgid "If set, only reduce the texture quality of models (default: enabled)"
+msgstr "Знижує якість текстур тільки на моделях (за замовчуванням: увімкнуто)"
+
+msgid "Input settings"
+msgstr "Налаштування керування"
+
+msgid "Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)"
+msgstr "Яскравість що не впливає на білий та чорний колір (за замовчуванням: 1.125)"
+
+msgid "Invert mouse movement on the Y-axis"
+msgstr "Інвертувати рух миші по осі Y"
+
+msgid "Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)"
+msgstr "Центральний процесор буде чекати, поки GPU відеокарти не закінчить кадр, може допомогти на деяких системах при деяких проблемах (за замовчуванням: вимкнуто)"
+
+msgid "Make things fall to the ground slower, lower value means lower gravity"
+msgstr "Предмети падатимуть повільніше, менше значення робить гравітацію нижче"
+
+msgid "Make use of DGA mouse input"
+msgstr "Використовувати ввід DGA для миші"
+
+msgid "Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)"
+msgstr "Використовувати Vertex Buffer Objects щоб зберігати нерухому геометрію у відеопам'яті для прискорення рендеренгу (за замовчуванням: вершини та трикутники)"
+
+msgid "Make use of the list above when cycling through weapons with the mouse wheel"
+msgstr "Використовувати список вгорі під час вибору зброї колесиком миші"
+
+msgid "Maximum download speed"
+msgstr "Максимальна швидкість завантаження"
+
+msgid "Maximum number of concurrent HTTP/FTP downloads"
+msgstr "Максимальна кількість одночасних HTTP/FTP завантажень"
+
+msgid "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+msgstr "Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)"
+
+msgid "Misc settings"
+msgstr "Різні налаштування"
+
+msgid "Motion blur strength - 0.4 recommended"
+msgstr "Сила ефекту motion blur - рекомендується 0.4"
+
+msgid "Mouse speed multiplier"
+msgstr "Швидкість миші"
+
+msgid "Mouse speed multiplier in the menu, does not affect aiming in the game"
+msgstr "Швидкість миші у меню, не впливає на ігровий процес"
+
+msgid "Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"
+msgstr "Кількість часток, чим менша кількість тим менший вплив на продуктивність (за замовчуванням: 1.0)"
+
+msgid "Mutators and weapon arenas"
+msgstr "Мутатори і арени"
+
+msgid "Name under which you will appear in the game"
+msgstr "Ім'я під яким ви з'явитесь у грі"
+
+msgid "Network settings"
+msgstr "Налаштування мережі"
+
+msgid "No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon."
+msgstr "Нікс (No items Xonotic) - замість того щоб підбирати предмети, всі гравці грають з однією зброєю. Через деякий час почнеться відлік, і зброя у всіх зміниться на іншу"
+
+msgid "None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy"
+msgstr "Жодного: не проводити тест на влучання для прицілу; TrueAim: робити приціл нечітким коли ви не влучите у стіну; Вороги: також збільшувати приціл коли ви влучите у ворога"
+
+msgid "Number of channels for the sound output"
+msgstr "Кількість каналів"
+
+msgid "Number of maps that are shown in the map voting at the end of a match"
+msgstr "Кількість мап які будуть доступні для голосування у кінці матчу"
+
+msgid "Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)"
+msgstr "Офсетне текстурування, що змусить текстури з мапами висот виглядати об'ємними (за замовчуванням: вимкнуто)"
+
+msgid "Only possible to inflict damage on your enemy while he's airborne"
+msgstr "Шкоду можливо нанести тільки коли ворог у повітрі"
+
+msgid "Override the default amount of teams in teamgames"
+msgstr "Переписати клькість команд за замовчуванням в командних іграх"
+
+msgid "Particles further away than this will not be drawn (default: 1000)"
+msgstr "Частки на відстані більшій ніж ця не будуть створюватись (за замовчуванням: 1000)"
+
+msgid "Pause updating the server list to prevent servers from \"jumping around\""
+msgstr "Призупинити оновлення списку серверів для зручнішого вибору"
+
+msgid "Percentage of damage dealt to teammates"
+msgstr "Процент шкоди яку ви будете наносити товаришам по команді"
+
+msgid "Percentage of teamdamage that will be mirrored to you"
+msgstr "Процент від шкоди що ви нанесли товаришу по команді який буде віддзеркалений вам"
+
+msgid "Play a hit indicator sound when your shot hits an enemy"
+msgstr "Грати спеціальний звук коли ви влучаєте у ворога"
+
+msgid "Play online, against your friends in LAN, view demos or change player settings"
+msgstr "Грайте по інтернету, локальній мережі, переглядайте демо та змінюйте налаштування гравця"
+
+msgid "Play sounds when clicking or hovering over menu items"
+msgstr "Увімкнути звуки меню"
+
+msgid "Play the singleplayer campaign or instant action matches against bots"
+msgstr "Почніть одиночну кампанію або випадковий бій проти ботів"
+
+msgid "Players spawn with the grappling hook"
+msgstr "Гравці отримують гак"
+
+msgid "Players spawn with the jetpack"
+msgstr "Гравці отримують реактивний ранець"
+
+msgid "Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps."
+msgstr ""
+
+msgid "Players will drop all weapons they possessed when they are killed"
+msgstr "Після того, як гравця вб'ють, з нього випаде вся зброя яку він мав"
+
+msgid "Poor man's left handed mode (default: off)"
+msgstr "Простий режим для лівші (за замовчуванням: вимкнуто)"
+
+msgid "Position of the weapon model; requires reconnect"
+msgstr "Положення моделі зброї, потрібно буде з'єднатися знову"
+
+msgid "Quit the game"
+msgstr "Вийти з гри"
+
+msgid "Reduce the amount of gibs or remove them completely (default: lots)"
+msgstr "Зменшити кількість шматків тіла, або відключити їх зовсім (за замовчуванням: багато)"
+
+msgid "Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)"
+msgstr "Якість віддзеркалень та заломлень, сильно впливає на продуктивність на мапах, де є дзеркальні поверхні (за замовчуванням: вимкнуто)"
+
+msgid "Remove all the maps from your selection"
+msgstr ""
+
+msgid "Remove the maps shown in Maplist above from your selection"
+msgstr ""
+
+msgid "Replace blood and gibs with content that does not have any gore effects (default: disabled)"
+msgstr "Замінити шматки тіла та кров не жорстокими елементами (за замовчуванням: вимкнуто)"
+
+msgid "Resolution of reflections/refractions (default: good)"
+msgstr "Роздільність віддзеркалень/заломлень (за замовчуванням: увімкнуто)"
+
+msgid "Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)"
+msgstr "Корекція насиченості (0 = чорно-біла, 1 = нормальна, 2 = перенасичена), необхідно використовувати шейдери GLSL для контролю кольором (за замовчуванням: 1)"
+
+msgid "Scale multiplier of the waypoints"
+msgstr "Вкажіть розмір дороговказів"
+
+msgid "Screen resolution"
+msgstr "Роздільність екрану"
+
+msgid "Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups."
+msgstr "Вибір арени з окремою зброєю дасть гравцям цю зброю і необмежену кількість боєприпасів до неї, і прибере з мапи всю іншу зброю"
+
+msgid "Set a different crosshair for each weapon, good if you play without weapon models"
+msgstr "Встановити приціл для кожної зброї окремо, корисно для гри без моделей зброї"
+
+msgid "Set the color of the crosshair depending on the weapon you are currently holding"
+msgstr "Колір прицілу буде залежати від кожної окремої зброї"
+
+msgid "Set your most preferred weapons, autoswitch and weapon model settings"
+msgstr "Вкажіть зброю якій ви надаєте перевагу, налаштуйте автоматичне перемикання та моделі зброї"
+
+msgid "Show a graph of packet sizes and other information"
+msgstr "Показувати графік розмірів пакетів та іншої інформації"
+
+msgid "Show current date, useful on screenshots"
+msgstr "Показувати поточну дату, корисно для скриншотів"
+
+msgid "Show current time of day, useful on screenshots"
+msgstr "Показувати поточний час, корисно для скриншотів"
+
+msgid "Show empty servers"
+msgstr "Показувати порожні сервери"
+
+msgid "Show full servers that have no slots available"
+msgstr "Показувати повні сервери без вільних місць"
+
+msgid "Show more information about the currently highlighted server"
+msgstr "Показати більше інформації про виділений сервер"
+
+msgid "Show the name of the player you are aiming at"
+msgstr "Показувати ім'я гравця в якого ви цілитися"
+
+msgid "Show various gametype specific waypoints"
+msgstr "Показувати дороговкази різний ігрових режимів"
+
+msgid "Show your rendered frames per second"
+msgstr "Показувати лічильник кадрів за секунду"
+
+msgid "Simple majority wins a vote"
+msgstr "Проста більшість перемагає в голосуванні"
+
+msgid "Smoothes the mouse movement, but makes aiming slightly less responsive"
+msgstr "Згладжування руху миші"
+
+msgid "Sound output frequency"
+msgstr "Частотність звуку"
+
+msgid "Specify how experienced the bots will be"
+msgstr "Вкажіть досвідченість ботів"
+
+msgid "Specify your network speed with this slider"
+msgstr "Вкажіть швидкість вашої мережі"
+
+msgid "Swap left/right channels"
+msgstr "Поміняти місцями лівий та правий канал"
+
+msgid "The Xonotic credits"
+msgstr "Розробники Xonotic"
+
+msgid "The amount of frags needed before the match will end"
+msgstr "Кількість фрагів, яка потрібна для закінчення матчу"
+
+msgid "The maximum amount of players or bots that can be connected to your server at once"
+msgstr "Максимальна кількість гравців та ботів на вашому сервері"
+
+msgid "Time in seconds before decals fade away (default: 2)"
+msgstr "Час у секундах після якого сліди зникатимуть (за замовчуванням: 2)"
+
+msgid "Timelimit in minutes that when hit, will end the match"
+msgstr "Час, після якого матч закінчиться"
+
+msgid "Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)"
+msgstr "Використовувати мапи освітлення з високою роздільністю, красиві, але використовують більше відеопам'яті (за замовчуванням: увімкнуто)"
+
+msgid "Use per-pixel lighting effects (default: enabled)"
+msgstr "Використовувати попіксельні ефекти освітлення (за замовчуванням: увімкнуто)"
+
+msgid "Use the old HUD layout"
+msgstr "Використовувати старе розміщення HUD"
+
+msgid "Video settings"
+msgstr "Налаштування відео"
+
+msgid "View bobbing frequency, disable for no bobbing"
+msgstr "Частота гойдання, вимкнути щоб прибрати гойдання"
+
+msgid "Weapons stay after they are picked up"
+msgstr "Зброя залишається після того, як була підібраною"
diff --git a/gfx/hud/default/minigames/qto/board.jpg b/gfx/hud/default/minigames/qto/board.jpg
deleted file mode 100644 (file)
index cf8fe0a..0000000
Binary files a/gfx/hud/default/minigames/qto/board.jpg and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/board_alpha.jpg b/gfx/hud/default/minigames/qto/board_alpha.jpg
deleted file mode 100644 (file)
index 44a8708..0000000
Binary files a/gfx/hud/default/minigames/qto/board_alpha.jpg and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/icon.jpg b/gfx/hud/default/minigames/qto/icon.jpg
deleted file mode 100644 (file)
index a534f48..0000000
Binary files a/gfx/hud/default/minigames/qto/icon.jpg and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/icon_notif.jpg b/gfx/hud/default/minigames/qto/icon_notif.jpg
deleted file mode 100644 (file)
index 90e0e2e..0000000
Binary files a/gfx/hud/default/minigames/qto/icon_notif.jpg and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg b/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg
deleted file mode 100644 (file)
index 040990f..0000000
Binary files a/gfx/hud/default/minigames/qto/icon_notif_alpha.jpg and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/piece0.tga b/gfx/hud/default/minigames/qto/piece0.tga
deleted file mode 100644 (file)
index fad7dbd..0000000
Binary files a/gfx/hud/default/minigames/qto/piece0.tga and /dev/null differ
diff --git a/gfx/hud/default/minigames/qto/piece1.tga b/gfx/hud/default/minigames/qto/piece1.tga
deleted file mode 100644 (file)
index 80a34c2..0000000
Binary files a/gfx/hud/default/minigames/qto/piece1.tga and /dev/null differ
diff --git a/gfx/hud/default/minigames/snake/board.jpg b/gfx/hud/default/minigames/snake/board.jpg
new file mode 100644 (file)
index 0000000..dfc5c3c
Binary files /dev/null and b/gfx/hud/default/minigames/snake/board.jpg differ
diff --git a/gfx/hud/default/minigames/snake/board_alpha.jpg b/gfx/hud/default/minigames/snake/board_alpha.jpg
new file mode 100644 (file)
index 0000000..44a8708
Binary files /dev/null and b/gfx/hud/default/minigames/snake/board_alpha.jpg differ
diff --git a/gfx/hud/default/minigames/snake/body.tga b/gfx/hud/default/minigames/snake/body.tga
new file mode 100644 (file)
index 0000000..b8064cc
Binary files /dev/null and b/gfx/hud/default/minigames/snake/body.tga differ
diff --git a/gfx/hud/default/minigames/snake/head.tga b/gfx/hud/default/minigames/snake/head.tga
new file mode 100644 (file)
index 0000000..0679f84
Binary files /dev/null and b/gfx/hud/default/minigames/snake/head.tga differ
diff --git a/gfx/hud/default/minigames/snake/icon.jpg b/gfx/hud/default/minigames/snake/icon.jpg
new file mode 100644 (file)
index 0000000..14252ae
Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon.jpg differ
diff --git a/gfx/hud/default/minigames/snake/icon_notif.jpg b/gfx/hud/default/minigames/snake/icon_notif.jpg
new file mode 100644 (file)
index 0000000..988b6db
Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon_notif.jpg differ
diff --git a/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg b/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg
new file mode 100644 (file)
index 0000000..040990f
Binary files /dev/null and b/gfx/hud/default/minigames/snake/icon_notif_alpha.jpg differ
diff --git a/gfx/hud/default/minigames/snake/mouse.tga b/gfx/hud/default/minigames/snake/mouse.tga
new file mode 100644 (file)
index 0000000..eda8ef7
Binary files /dev/null and b/gfx/hud/default/minigames/snake/mouse.tga differ
diff --git a/gfx/hud/default/minigames/snake/tail.tga b/gfx/hud/default/minigames/snake/tail.tga
new file mode 100644 (file)
index 0000000..71a7901
Binary files /dev/null and b/gfx/hud/default/minigames/snake/tail.tga differ
diff --git a/gfx/hud/default/minigames/snake/tongue.tga b/gfx/hud/default/minigames/snake/tongue.tga
new file mode 100644 (file)
index 0000000..9818d4e
Binary files /dev/null and b/gfx/hud/default/minigames/snake/tongue.tga differ
diff --git a/keybinds.txt b/keybinds.txt
deleted file mode 100644 (file)
index c57cb64..0000000
+++ /dev/null
@@ -1,98 +0,0 @@
-""                                      "Moving"
-"+forward"                              "forward"
-"+back"                                 "backpedal"
-"+moveleft"                             "strafe left"
-"+moveright"                            "strafe right"
-"+jump"                                 "jump / swim"
-"+crouch"                               "crouch / sink"
-"+hook"                                 "off-hand hook"
-"+jetpack"                              "jet pack"
-""                                      ""
-""                                      "Attacking"
-"+fire"                                 "primary fire"
-"+fire2"                                "secondary fire"
-""                                      ""
-""                                      "Weapon switching"
-"weapprev"                              "previous"
-"weapnext"                              "next"
-"weaplast"                              "previously used"
-"weapbest"                              "best"
-"reload"                                "reload"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Shotgun"
-"weapon_group_3"                        "Machine Gun / Arc"
-"weapon_group_4"                        "Mortar / Mine Layer"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Rifle"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Devastator / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Hook"
-""                                      ""
-""                                      "View"
-"+zoom"                                 "hold zoom"
-"togglezoom"                            "toggle zoom"
-"+showscores"                           "show scores"
-"screenshot"                            "screen shot"
-"+hud_panel_radar_maximized"            "maximize radar"
-"cl_cmd hud minigame"                   "toggle minigame menu"
-""                                      ""
-""                                      "Communicate"
-"messagemode"                           "public chat"
-"messagemode2"                          "team chat"
-"+con_chat_maximize"                    "show chat history"
-"vyes"                                  "vote YES"
-"vno"                                   "vote NO"
-"ready"                                 "ready"
-""                                      ""
-""                                      "Client"
-"quickmenu"                             "quick menu"
-"+show_info"                            "server info"
-"toggleconsole"                         "enter console"
-"disconnect"                            "disconnect"
-"menu_showquitdialog"                   "quit"
-""                                      ""
-""                                      "Teamplay"
-"messagemode2"                          "team chat"
-"team_auto"                             "auto-join team"
-"menu_showteamselect"                   "team menu"
-"menu_showsandboxtools"                 "sandbox menu"
-"spec"                                  "enter spectator mode"
-"dropweapon"                            "drop weapon"
-"+use"                                  "drop key / drop flag"
-"+button8"                              "drag object"
-"toggle chase_active"                   "3rd person view"
-""                                      ""
-""                                      "User defined"
-"+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.de b/keybinds.txt.de
deleted file mode 100644 (file)
index 0f30ce2..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Bewegung"
-"+forward"                              "vorwärts"
-"+back"                                 "rückwärts"
-"+moveleft"                             "links"
-"+moveright"                            "rechts"
-"+jump"                                 "springen / schwimmen"
-"+crouch"                               "ducken / sinken"
-"+hook"                                 "Enterhaken"
-"+jetpack"                              "Jetpack"
-""                                      ""
-""                                      "Angriff"
-"+fire"                                 "1. Feuermodus"
-"+fire2"                                "2. Feuermodus"
-""                                      ""
-""                                      "Waffe wechseln"
-"weapprev"                              "vorherige"
-"weapnext"                              "nächste"
-"weaplast"                              "zuletzt benutzte"
-"weapbest"                              "beste"
-"reload"                                "nachladen"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Schrotgewehr"
-"weapon_group_3"                        "Maschinengewehr / Arc"
-"weapon_group_4"                        "Mortar / Mine Layer"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Gewehr"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Devastator / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Enterhaken"
-""                                      ""
-""                                      "Anzeige"
-"+zoom"                                 "Vergrößern (festhalten)"
-"togglezoom"                            "Vergrößern (umschalten)"
-"+showscores"                           "Tabelle anzeigen"
-"screenshot"                            "Bildschirmfoto"
-"+hud_panel_radar_maximized"            "Radar maximieren"
-"cl_cmd hud minigame"                   "Minispiel-Menu an- und ausschalten"
-""                                      ""
-""                                      "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"
-"menu_showquitdialog"                                  "Beenden"
-""                                      ""
-""                                      "Teamplay"
-"messagemode2"                          "Nachricht ans Team"
-"team_auto"                             "Team automatisch wählen"
-"menu_showteamselect"                   "Team auswählen"
-"menu_showsandboxtools"                 "Sandkasten menu"
-"spec"                                  "Zuschauen"
-"dropweapon"                            "Waffe wegwerfen"
-"+use"                                  "Schlüssel oder Flagge wegwerfen"
-"+button8"                              "Objekt ziehen"
-"toggle chase_active"                   "Schultercamera"
-""                                      ""
-""                                      "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.es b/keybinds.txt.es
deleted file mode 100644 (file)
index 79c3124..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Movimiento"
-"+forward"                              "adelante"
-"+back"                                 "atrás"
-"+moveleft"                             "izquierda"
-"+moveright"                            "derecha"
-"+jump"                                 "saltar / nadar"
-"+crouch"                               "agacharse / bajar"
-"+hook"                                 "gancho"
-"+jetpack"                              "jet pack"
-""                                      ""
-""                                      "Ataque"
-"+fire"                                 "ataque primario"
-"+fire2"                                "ataque secundario"
-""                                      ""
-""                                      "Cambio de arma"
-"weapprev"                              "anterior"
-"weapnext"                              "siguiente"
-"weaplast"                              "anteriormente usado"
-"weapbest"                              "mejor"
-"reload"                                "recargar"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Shotgun"
-"weapon_group_3"                        "Machine Gun / Arc"
-"weapon_group_4"                        "Mortar / Mine Layer"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Rifle"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Devastator / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Hook"
-""                                      ""
-""                                      "Vista"
-"+zoom"                                 "mantener zoom"
-"togglezoom"                            "cambiar zoom"
-"+showscores"                           "mostrar puntaje"
-"screenshot"                            "captura de pantalla"
-"+hud_panel_radar_maximized"            "maximize radar (FIXME)"
-"cl_cmd hud minigame"                   "toggle minigame menu (FIXME)"
-""                                      ""
-""                                      "Communicación"
-"messagemode"                           "chat público"
-"messagemode2"                          "chat de equipo"
-"+con_chat_maximize"                    "mostrar historial del chat"
-"vyes"                                  "votar SI"
-"vno"                                   "votar NO"
-"ready"                                 "preparado"
-""                                      ""
-""                                      "Cliente"
-"+show_info"                            "información del servidor"
-"toggleconsole"                         "entrar en la consola"
-"disconnect"                            "desconectar"
-"menu_showquitdialog"                   "salir"
-""                                      ""
-""                                      "Juego en equipo"
-"messagemode2"                          "chat de equipo"
-"team_auto"                             "unirse al equipo automáticamente"
-"menu_showteamselect"                   "menu de equipo"
-"menu_showsandboxtools"                 "sandbox menu (FIXME)"
-"spec"                                  "entrar al modo espectador"
-"dropweapon"                            "soltar arma"
-"+use"                                  "soltar llave / soltar bandera"
-"+button8"                              "drag object (FIXME)"
-"toggle chase_active"                   "3rd person view (FIXME)"
-""                                      ""
-""                                      "Definido por el usuario"
-"+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
deleted file mode 100644 (file)
index 2f0ae6a..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Mouvement"
-"+forward"                              "avancer"
-"+back"                                 "reculer"
-"+moveleft"                             "gauche"
-"+moveright"                            "droite"
-"+jump"                                 "sauter / nager"
-"+crouch"                               "s'accroupir / couler"
-"+hook"                                 "grappin"
-"+jetpack"                              "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"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Fusil"
-"weapon_group_3"                        "Mitrailleuse / Arc"
-"weapon_group_4"                        "Mortier / Poseur de Mines"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Fusil de précision"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Devastator / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Grappin"
-""                                      ""
-""                                      "Vue"
-"+zoom"                                 "zoom"
-"togglezoom"                            "zoom 2 clics"
-"+showscores"                           "afficher les scores"
-"screenshot"                            "capture d'écran"
-"+hud_panel_radar_maximized"            "agrandir le radar"
-"cl_cmd hud minigame"                   "activer/désactiver le menu de mini-jeu"
-""                                      ""
-""                                      "Communication"
-"messagemode"                           "tchat public"
-"messagemode2"                          "tchat d'équipe"
-"+con_chat_maximize"                    "historique du tchat"
-"vyes"                                  "voter OUI"
-"vno"                                   "voter NON"
-"ready"                                 "prêt"
-""                                      ""
-""                                      "Client"
-"+show_info"                            "information serveur"
-"toggleconsole"                         "ouvrir la console"
-"disconnect"                            "se déconnecter"
-"menu_showquitdialog"                   "quitter"
-""                                      ""
-""                                      "Équipe"
-"messagemode2"                          "tchat d'équipe"
-"team_auto"                             "auto-joindre une équipe"
-"menu_showteamselect"                   "sélection d'équipe"
-"menu_showsandboxtools"                 "menu bac à sable"
-"spec"                                  "mode spectateur"
-"dropweapon"                            "lâcher l'arme"
-"+use"                                  "lâcher la clef / drapeau"
-"+button8"                              "traîner l'objet"
-"toggle chase_active"                   "vue à la 3ème personne"
-""                                      ""
-""                                      "Raccourcis personnalisés"
-"+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.hu b/keybinds.txt.hu
deleted file mode 100644 (file)
index e22299a..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Mozgás"
-"+forward"                              "előre"
-"+back"                                 "hátra"
-"+moveleft"                             "balra lépés"
-"+moveright"                            "jobbra lépés"
-"+jump"                                 "ugrás / úszás"
-"+crouch"                               "guggolás / süllyedés"
-"+hook"                                 "kézi kampó"
-"+jetpack"                              "rakéta puttony"
-""                                      ""
-""                                      "Tüzelés"
-"+fire"                                 "Elsődleges"
-"+fire2"                                "Másodlagos"
-""                                      ""
-""                                      "Fegyverváltás"
-"weapprev"                              "előző"
-"weapnext"                              "következő"
-"weaplast"                              "előzőleg használt"
-"weapbest"                              "legjobb"
-"reload"                                "újratöltés"
-"weapon_group_1"                        "Lézer"
-"weapon_group_2"                        "Vadászpuska"
-"weapon_group_3"                        "Géppuska / Arc"
-"weapon_group_4"                        "Mortar / Aknavető"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Puska"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Rakétavető / Tűzlabda"
-"weapon_group_0"                        "Port-O-Launch / Kampó"
-""                                      ""
-""                                      "Nézet"
-"+zoom"                                 "nagyítás tartás"
-"togglezoom"                            "nagyítás váltás"
-"+showscores"                           "pontszámok"
-"screenshot"                            "kép mentés"
-"+hud_panel_radar_maximized"            "maximize radar (FIXME)"
-"cl_cmd hud minigame"                   "toggle minigame menu (FIXME)"
-""                                      ""
-""                                      "Kommunikáció"
-"messagemode"                           "nyilvános beszélgetés"
-"messagemode2"                          "csapat beszélgetés"
-"+con_chat_maximize"                    "beszélgetés történet"
-"vyes"                                  "IGEN szavazat"
-"vno"                                   "NEM szavazat"
-"ready"                                 "kész"
-""                                      ""
-""                                      "Kliens"
-"+show_info"                            "kiszolgáló info"
-"toggleconsole"                         "belépés a konzolba"
-"disconnect"                            "lekapcsolodás"
-"menu_showquitdialog"                   "kilépés"
-""                                      ""
-""                                      "Csapatjáték"
-"messagemode2"                          "csapat beszélgetés"
-"team_auto"                             "automatikus csapatválasztás"
-"menu_showteamselect"                   "csapat menü"
-"menu_showsandboxtools"                 "sandbox menu (FIXME)"
-"spec"                                  "néző módba váltás"
-"dropweapon"                            "fegyver eldobás"
-"+use"                                  "zászló eldobás, kiszállás"
-"+button8"                              "drag object"
-"toggle chase_active"                   "3rd person view (FIXME)"
-""                                      ""
-""                                      "Felhasználói hozzárendelések"
-"+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.it b/keybinds.txt.it
deleted file mode 100644 (file)
index 069f9df..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Movimento"
-"+forward"                              "avanti"
-"+back"                                 "indietro"
-"+moveleft"                             "a sinistra"
-"+moveright"                            "a destra"
-"+jump"                                 "salta / risalire in acqua"
-"+crouch"                               "abbassarsi / scendere in acqua"
-"+hook"                                 "hook immediato"
-"+jetpack"                              "jet pack"
-""                                      ""
-""                                      "Attacco"
-"+fire"                                 "fuoco primario"
-"+fire2"                                "fuoco secondario"
-""                                      ""
-""                                      "Cambio d'arma"
-"weapprev"                              "precedente"
-"weapnext"                              "successiva"
-"weaplast"                              "ultima usata"
-"weapbest"                              "migliore"
-"reload"                                "ricarica"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Shotgun"
-"weapon_group_3"                        "Machine Gun / Arc"
-"weapon_group_4"                        "Mortar / Mine Layer"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Rifle"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Devastator / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Hook"
-""                                      ""
-""                                      "Vista"
-"+zoom"                                 "tieni zoom"
-"togglezoom"                            "attiva/disattiva zoom"
-"+showscores"                           "mostra punteggi"
-"screenshot"                            "screenshot"
-"+hud_panel_radar_maximized"            "massimizza radar"
-"cl_cmd hud minigame"                   "attiva/disattiva il menù dei giochini"
-""                                      ""
-""                                      "Comunicazione"
-"messagemode"                           "chat pubblica"
-"messagemode2"                          "chat di squadra"
-"+con_chat_maximize"                    "mostra storia chat"
-"vyes"                                  "vota SÌ"
-"vno"                                   "vota NO"
-"ready"                                 "pronto"
-""                                      ""
-""                                      "Client"
-"+show_info"                            "info del server"
-"toggleconsole"                         "apri console"
-"disconnect"                            "disconnetti"
-"menu_showquitdialog"                   "esci"
-""                                      ""
-""                                      "Gioco a squadre"
-"messagemode2"                          "chat di squadra"
-"team_auto"                             "auto-scegli squadra"
-"menu_showteamselect"                   "menu scelta squadra"
-"menu_showsandboxtools"                 "menu sandbox"
-"spec"                                  "modalità spettatore"
-"dropweapon"                            "abbandona arma"
-"+use"                                  "abbandona chiave / bandiera"
-"+button8"                              "trascina oggetto"
-"toggle chase_active"                   "vista terza persona"
-""                                      ""
-""                                      "Definiti dall'utente"
-"+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.ru b/keybinds.txt.ru
deleted file mode 100644 (file)
index 7be181d..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-""                                      "Движение"
-"+forward"                              "вперёд"
-"+back"                                 "назад"
-"+moveleft"                             "влево"
-"+moveright"                            "вправо"
-"+jump"                                 "прыжок / плыть"
-"+crouch"                               "пригнуться / погрузиться"
-"+hook"                                 "крюк"
-"+jetpack"                              "реактивный ранец"
-""                                      ""
-""                                      "Нападение"
-"+fire"                                 "основной огонь"
-"+fire2"                                "дополнительный огонь"
-""                                      ""
-""                                      "Переключение оружия"
-"weapprev"                              "предыдущее"
-"weapnext"                              "следующее"
-"weaplast"                              "ранее использованное"
-"weapbest"                              "лучшее"
-"reload"                                "перезарядить"
-"weapon_group_1"                        "Blaster"
-"weapon_group_2"                        "Shotgun"
-"weapon_group_3"                        "Machine Gun / Arc"
-"weapon_group_4"                        "Mortar / Mine Layer"
-"weapon_group_5"                        "Electro"
-"weapon_group_6"                        "Crylink / HLAC"
-"weapon_group_7"                        "Vortex / Rifle"
-"weapon_group_8"                        "Hagar / Seeker"
-"weapon_group_9"                        "Rocket Launcher / Fireball"
-"weapon_group_0"                        "Port-O-Launch / Hook"
-""                                      ""
-""                                      "Вид"
-"+zoom"                                 "увеличение"
-"togglezoom"                            "переключить увеличение"
-"+showscores"                           "показать очки"
-"screenshot"                            "снимок экрана"
-"+hud_panel_radar_maximized"            "maximize radar (FIXME)"
-"cl_cmd hud minigame"                   "toggle minigame menu (FIXME)"
-""                                      ""
-""                                      "Общение"
-"messagemode"                           "общий чат"
-"messagemode2"                          "чат команды"
-"+con_chat_maximize"                    "показать историю чата"
-"vyes"                                  "голосовать ДА"
-"vno"                                   "голосовать НЕТ"
-"ready"                                 "готовность"
-""                                      ""
-""                                      "Клиент"
-"+show_info"                            "сведения о сервере"
-"toggleconsole"                         "открыть консоль"
-"disconnect"                            "отключиться"
-"menu_showquitdialog"                   "выйти"
-""                                      ""
-""                                      "Командная игра"
-"messagemode2"                          "чат команды"
-"team_auto"                             "авто-выбор команды"
-"menu_showteamselect"                   "меню команды"
-"menu_showsandboxtools"                 "sandbox menu (FIXME)"
-"spec"                                  "стать наблюдателем"
-"dropweapon"                            "бросить оружие"
-"+use"                                  "бросить ключ или флаг"
-"+button8"                              "drag object"
-"toggle chase_active"                   "3rd person view (FIXME)"
-""                                      ""
-""                                      "Определенно пользователем"
-"+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.uk b/keybinds.txt.uk
deleted file mode 100644 (file)
index 07812de..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-""                                      "Рух"
-"+forward"                              "вперед"
-"+back"                                 "назад"
-"+moveleft"                             "крок ліворуч"
-"+moveright"                            "крок праворуч"
-"+jump"                                 "стрибок / плисти нагору"
-"+crouch"                               "присідання / занурення"
-"+hook"                                 "гак"
-"+jetpack"                              "реактивний ранець"
-""                                      ""
-""                                      "Бій"
-"+fire"                                 "основний вогонь"
-"+fire2"                                "альтернативний вогонь"
-""                                      ""
-""                                      "Вибір зброї"
-"weapprev"                              "попередня"
-"weapnext"                              "наступна"
-"weaplast"                              "використана раніше"
-"weapbest"                              "найкраща"
-"reload"                                "перезарядити"
-"weapon_group_1"                        "Лазер"
-"weapon_group_2"                        "Рушниця"
-"weapon_group_3"                        "Автомат / Arc"
-"weapon_group_4"                        "Мортира / Міноукладчик"
-"weapon_group_5"                        "Електро"
-"weapon_group_6"                        "Крайлінк / ВЛШГ"
-"weapon_group_7"                        "Некс / Гвинтівка"
-"weapon_group_8"                        "Хейгар / Шукач"
-"weapon_group_9"                        "Ракетна гармата / Метеор"
-"weapon_group_0"                        "Портал-О-Пуск / Гак"
-""                                      ""
-""                                      "Вид"
-"+zoom"                                 "утримувати для зуму"
-"togglezoom"                            "увімк / вимк зум"
-"+showscores"                           "показати рахунок"
-"screenshot"                            "скриншот"
-"+hud_panel_radar_maximized"            "maximize radar (FIXME)"
-""                                      ""
-""                                      "Спілкування"
-"messagemode"                           "публічний чат"
-"messagemode2"                          "командний чат"
-"+con_chat_maximize"                    "показувати історію чату"
-"vyes"                                  "проголосувати ТАК"
-"vno"                                   "проголосувати НІ"
-"ready"                                 "готовий"
-""                                      ""
-""                                      "Клієнт"
-"+show_info"                            "відомості про сервер"
-"toggleconsole"                         "увійти в консоль"
-"disconnect"                            "роз'єднатися"
-"menu_showquitdialog"                   "вийти"
-""                                      ""
-""                                      "Командна гра"
-"messagemode2"                          "командний чат"
-"team_auto"                             "автовибір команди"
-"menu_showteamselect"                   "командне меню"
-"menu_showsandboxtools"                 "sandbox menu (FIXME)"
-"spec"                                  "увійти в режим спостерігача"
-"dropweapon"                            "викинути зброю"
-"+use"                                  "викинути ключ / прапор"
-"+button8"                              "drag object"
-"toggle chase_active"                   "3rd person view (FIXME)"
-""                                      ""
-""                                      "Визначені користувачем"
-"+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"
index 9922d7e5674db21aa80098de1f956eb4f8863791..6dfec5088f886a3b229b0185c35f2e6d24a4ff17 100644 (file)
@@ -11,4 +11,11 @@ set sv_minigames_pong_ball_radius   0.03125 "Ball radius relative to the board s
 set sv_minigames_pong_ball_number   1       "Number of balls to be played at once"
 
 set sv_minigames_pong_ai_thinkspeed 0.1     "Seconds between AI actions"
-set sv_minigames_pong_ai_tolerance  0.33    "Distance of the ball relative to the paddle size"
\ No newline at end of file
+set sv_minigames_pong_ai_tolerance  0.33    "Distance of the ball relative to the paddle size"
+
+
+// Snake? Snake! SNAAAAKE!!
+set sv_minigames_snake_wrap 0 "Wrap around the edges of the screen instead of dying on touch"
+set sv_minigames_snake_delay_initial 0.7 "Initial delay between snake movement"
+set sv_minigames_snake_delay_multiplier 50 "Multiplier of incremental of movement speed (player_score / cvar)"
+set sv_minigames_snake_delay_min 0.1 "Minimum delay between snake movement (at fastest rate)"
index 9d961c0ad636036bfd440a91ecdddbb2f83dc75b..2cb6c3e7d90431937bab6a1246f001f40b05e2e6 100644 (file)
@@ -102,6 +102,7 @@ set g_monsters_spawnshieldtime 2
 set g_monsters_typefrag 1
 set g_monsters_target_range 2000
 set g_monsters_target_infront 0
+set g_monsters_target_infront_range 0.3
 set g_monsters_attack_range 120
 set g_monsters_respawn 1
 set g_monsters_respawn_delay 20
index 34bf30fdcdcfe9c052fbf6ab4d0aa136948f6b6c..51440d4a3c90da83d77f8e57033c7e2287c188d6 100644 (file)
@@ -2,39 +2,41 @@ SCM := $(shell if [ -d .svn ]; then echo svn; elif [ -d ../.git ]; then echo git
 PERL ?= perl
 QCCFLAGS_WATERMARK ?= -DWATERMARK='"$(shell git describe)"'
 QCC ?= gmqcc
-
 QCCVERSIONFILE := qccversion.$(shell (cd server && $(QCC) --version) > qccversion.txt && git hash-object qccversion.txt)
 
 # We eventually need to get rid of these.
 QCCFLAGS_WTFS ?= \
        -Wno-field-redeclared
 
-QCCFLAGS ?= \
-       -std=gmqcc \
-       -O3 -flno \
-       -Werror -fno-bail-on-werror -Wall \
-       -fftepp -fftepp-predefs -Wcpp -futf8 -frelaxed-switch -freturn-assignments \
-       $(QCCFLAGS_WTFS) \
-       $(QCCFLAGS_FEATURES) \
-       $(QCCFLAGS_EXTRA) $(QCCFLAGS_WATERMARK)
-
 QCCFLAGS_FEATURES ?= \
        -DVEHICLES_ENABLED=1 \
        -DVEHICLES_USE_ODE=0 \
        -DBUILD_MOD=$(BUILD_MOD)
 
+QCCFLAGS ?= \
+       -std=gmqcc \
+       -O3 \
+       -Werror -Wall -Wcpp \
+       $(QCCFLAGS_WTFS) \
+       -fftepp -flno -futf8 -fno-bail-on-werror -fftepp-predefs \
+       -frelaxed-switch -freturn-assignments \
+       $(QCCFLAGS_WATERMARK) \
+       $(QCCFLAGS_FEATURES) \
+       $(QCCFLAGS_EXTRA)
+
 # xonotic build system overrides this by command line argument to turn off the update-cvarcount step
 XON_BUILDSYSTEM =
 
-all: qc
 .PHONY: all
+all: qc
 
 .PHONY: qc
 qc: ../menu.dat ../progs.dat ../csprogs.dat
 
 .PHONY: clean
 clean:
-       rm -f ../progs.dat ../menu.dat ../csprogs.dat server/precache-for-csqc.inc
+       rm -f ../progs.dat ../menu.dat ../csprogs.dat
 
 $(QCCVERSIONFILE):
        $(RM) qccversion.*
@@ -45,11 +47,8 @@ FILES_CSPROGS = $(shell find client lib common warpzonelib csqcmodellib -type f
        @echo make[1]: Entering directory \`$(PWD)/client\'
        cd client && $(QCC) $(QCCFLAGS) -DCSQC
 
-server/precache-for-csqc.inc: $(FILES_CSPROGS)
-       sh collect-precache.sh
-
 FILES_PROGS = $(shell find server lib common warpzonelib csqcmodellib -type f -not -name fteqcc.log -not -name qc.asm)
-../progs.dat: $(FILES_PROGS) $(QCCVERSIONFILE) server/precache-for-csqc.inc
+../progs.dat: $(FILES_PROGS) $(QCCVERSIONFILE)
        @echo make[1]: Entering directory \`$(PWD)/server\'
        cd server && $(QCC) $(QCCFLAGS) -DSVQC
 
index 66fd813143ded40e3c222e4a70c49aefdc558fa9..12dc1b4a3ae6b23dc09ca2af94a5065d2f32fec4 100644 (file)
@@ -9,5 +9,6 @@
 #include "../dpdefs/csprogsdefs.qh"
 
 #include "../common/models/models.qh"
+#include "../common/sounds/sounds.qh"
 
 #endif
index aec000d64c7c069b8c1d342484b977b3232c680a..a83260b1049c7dfcabcb04926e9b6c817fe1dd23 100644 (file)
@@ -4,7 +4,6 @@
 #include "../common/movetypes/movetypes.qh"
 
 .float alpha;
-bool cpicon_precached;
 .int count;
 .float pain_finished;
 
@@ -21,14 +20,6 @@ bool cpicon_precached;
 
 .entity icon_realmodel;
 
-void cpicon_precache()
-{
-       if(cpicon_precached)
-               return; // already precached
-
-       cpicon_precached = true;
-}
-
 void cpicon_draw()
 {SELFPARAM();
        if(time < self.move_time) { return; }
@@ -186,7 +177,6 @@ void ent_cpicon()
                        self.count = (self.health - self.max_health) * frametime;
 
                cpicon_changeteam();
-               cpicon_precache();
                cpicon_construct();
        }
 
index 8469b5226fc36ef3f0efc15310c9732b0f654552..a2ce395917ae7561f4482c36bac921250780b1f8 100644 (file)
@@ -8,6 +8,5 @@ const int CPSF_STATUS = 4;
 const int CPSF_SETUP = 8;
 
 void ent_cpicon();
-void cpicon_precache();
 
 #endif
index 022afd9d11c937ed493fd1df41ea96f6a0140edb..0c25e60064533141963afe43b98f957756279e2f 100644 (file)
@@ -1,4 +1,3 @@
-#include "csqcmodel_hooks.qh"
 #include "_all.qh"
 
 #include "gibs.qh"
@@ -591,7 +590,7 @@ void CSQCModel_Effects_Apply(void)
        {
                if(!self.snd_looping)
                {
-                       sound(self, CH_TRIGGER_SINGLE, "misc/jetpack_fly.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
+                       sound(self, CH_TRIGGER_SINGLE, SND_JETPACK_FLY, VOL_BASE, autocvar_g_jetpack_attenuation);
                        self.snd_looping = CH_TRIGGER_SINGLE;
                }
        }
@@ -599,17 +598,12 @@ void CSQCModel_Effects_Apply(void)
        {
                if(self.snd_looping)
                {
-                       sound(self, self.snd_looping, "misc/null.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
+                       sound(self, self.snd_looping, SND_Null, VOL_BASE, autocvar_g_jetpack_attenuation);
                        self.snd_looping = 0;
                }
        }
 }
 
-void CSQCPlayer_Precache()
-{
-       precache_sound("misc/jetpack_fly.wav");
-}
-
 // general functions
 .int csqcmodel_predraw_run;
 .int anim_frame;
diff --git a/qcsrc/client/csqcmodel_hooks.qh b/qcsrc/client/csqcmodel_hooks.qh
deleted file mode 100644 (file)
index 8995880..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-#ifndef CSQCMODEL_HOOKS
-#define CSQCMODEL_HOOKS
-
-void CSQCPlayer_Precache();
-
-#endif
index ec6da98428e372d66f15348fc2c50682bec5ac0d..4f25aef13ef2d25bd6c9a1cdf81637f8a104e60c 100644 (file)
@@ -228,35 +228,33 @@ void Ent_DamageInfo(float isNew)
 
                        // spiderbot
                        case DEATH_VH_SPID_MINIGUN:
-                               string _snd;
-                               _snd = W_Sound(strcat("ric", ftos(1 + rint(random() * 2))));
-                               sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_SPIDERBOT_MINIGUN_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_SPID_ROCKET:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_SPIDERBOT_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_SPID_DEATH:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1);
                                break;
 
                        case DEATH_VH_WAKI_GUN:
-                               sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_RACER_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_WAKI_ROCKET:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_RACER_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_WAKI_DEATH:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1);
                                break;
 
                        case DEATH_VH_RAPT_CANNON:
-                               sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_RAPTOR_CANNON_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_RAPT_FRAGMENT:
@@ -268,19 +266,19 @@ void Ent_DamageInfo(float isNew)
                                        ang = vectoangles(vel);
                                        RaptorCBShellfragToss(w_org, vel, ang + '0 0 1' * (120 * i));
                                }
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_RAPTOR_BOMB_SPREAD), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_RAPT_BOMB:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_RAPTOR_BOMB_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_RAPT_DEATH:
-                               sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_EXPLOSION_BIG), self.origin, w_backoff * 1000, 1);
                                break;
                        case DEATH_VH_BUMB_GUN:
-                               sound(self, CH_SHOTS, W_Sound("fireball_impact2"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_FIREBALL_IMPACT2, VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_BIGPLASMA_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
                }
@@ -289,7 +287,6 @@ void Ent_DamageInfo(float isNew)
 
        if(DEATH_ISTURRET(w_deathtype))
        {
-               string _snd;
                traceline(w_org - normalize(force) * 16, w_org + normalize(force) * 16, MOVE_NOMONSTERS, world);
                if(trace_plane_normal != '0 0 0')
                        w_backoff = trace_plane_normal;
@@ -301,38 +298,36 @@ void Ent_DamageInfo(float isNew)
                switch(w_deathtype)
                {
                         case DEATH_TURRET_EWHEEL:
-                               sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
 
                         case DEATH_TURRET_FLAC:
                                pointparticles(particleeffectnum(EFFECT_HAGAR_EXPLODE), w_org, '0 0 0', 1);
-                               _snd = W_Sound(strcat("hagexp", ftos(1 + rint(random() * 2))));
-                               sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_HAGEXP_RANDOM(), VOL_BASE, ATTEN_NORM);
                                break;
 
                         case DEATH_TURRET_MLRS:
                         case DEATH_TURRET_HK:
                         case DEATH_TURRET_WALK_ROCKET:
                         case DEATH_TURRET_HELLION:
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, w_backoff * 1000, 1);
                                break;
 
                         case DEATH_TURRET_MACHINEGUN:
                         case DEATH_TURRET_WALK_GUN:
-                               _snd = W_Sound(strcat("ric", ftos(1 + rint(random() * 2))));
-                               sound(self, CH_SHOTS, _snd, VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_RIC_RANDOM(), VOL_BASE, ATTEN_NORM);
                                pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
 
                         case DEATH_TURRET_PLASMA:
-                               sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_ELECTRO_IMPACT), self.origin, w_backoff * 1000, 1);
                                break;
 
                         case DEATH_TURRET_WALK_MELEE:
-                               sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_MIN);
+                               sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_MIN);
                                pointparticles(particleeffectnum(EFFECT_TE_SPARK), self.origin, w_backoff * 1000, 1);
                                break;
 
index c9358b6795cea7091efad0056da321f6eb831ec0..148a8f521b0ab3a2991c9f95aa388368ca69c0f6 100644 (file)
@@ -1,22 +1,8 @@
 #include "generator.qh"
 
-bool generator_precached;
 .int count;
 .float max_health;
 
-void generator_precache()
-{
-       if(generator_precached)
-               return; // already precached
-
-       precache_sound("onslaught/shockwave.wav");
-       precache_sound(W_Sound("grenade_impact"));
-       precache_sound(W_Sound("rocket_impact"));
-       precache_sound("onslaught/electricity_explode.wav");
-
-       generator_precached = true;
-}
-
 void ons_generator_ray_draw()
 {SELFPARAM();
        if(time < self.move_time)
@@ -68,7 +54,7 @@ void generator_draw()
                if(random() < 0.01)
                {
                        pointparticles(particleeffectnum(EFFECT_ELECTRO_BALLEXPLODE), self.origin + randompos('-50 -50 -20', '50 50 50'), '0 0 0', 1);
-                       sound(self, CH_TRIGGER, "onslaught/electricity_explode.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_TRIGGER, SND_ONS_ELECTRICITY_EXPLODE, VOL_BASE, ATTEN_NORM);
                }
                else
                        pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_DAMAGED), self.origin + randompos('-60 -60 -20', '60 60 60'), '0 0 0', 1);
@@ -87,7 +73,7 @@ void generator_draw()
        // White shockwave
        if(self.count==40||self.count==20)
        {
-               sound(self, CH_TRIGGER, "onslaught/shockwave.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ONS_SHOCKWAVE, VOL_BASE, ATTEN_NORM);
                pointparticles(particleeffectnum(EFFECT_ELECTRO_COMBO), self.origin, '0 0 0', 6);
        }
 
@@ -108,7 +94,7 @@ void generator_draw()
        if(random() < 0.25)
        {
                te_explosion(self.origin);
-               sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
        }
 
        // Particles
@@ -121,7 +107,7 @@ void generator_draw()
                org = self.origin;
                te_explosion(org);
                pointparticles(particleeffectnum(EFFECT_ONS_GENERATOR_EXPLODE2), org, '0 0 0', 1);
-               sound(self, CH_TRIGGER, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        }
 
        self.move_time = time + 0.05;
@@ -213,7 +199,6 @@ void ent_generator()
                        self.count = 40;
 
                generator_changeteam();
-               generator_precache();
                generator_construct();
        }
 
index e4e1611f31273ca1d7dda2173f72405d733ab3c4..744bc5589f47a39edba81e1bf1fe78dbc215d617 100644 (file)
@@ -7,5 +7,4 @@ const int GSF_STATUS = 4;
 const int GSF_SETUP = 8;
 
 void ent_generator();
-void generator_precache();
 #endif
index 0302f184150f81525487e63b5ca272c9052be29e..5c4c338f155c5e91ad7272c5556de0c80f10c486 100644 (file)
@@ -85,7 +85,7 @@ void Gib_Touch()
        }
 
        if(!self.silent)
-               sound(self, CH_PAIN, strcat("misc/gib_splat0", ftos(floor(prandom() * 4 + 1)), ".wav"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_PAIN, SND_GIB_SPLAT_RANDOM(), VOL_BASE, ATTEN_NORM);
        pointparticles(_particleeffectnum(strcat(species_prefix(self.cnt), "blood")), self.origin + '0 0 1', '0 0 30', 10);
 
        Gib_Delete();
@@ -218,7 +218,7 @@ void Ent_GibSplash(bool isNew)
        {
                case 0x01:
                        if(!issilent)
-                               sound (self, CH_PAIN, "misc/gib.wav", VOL_BASE, ATTEN_NORM);
+                               sound (self, CH_PAIN, SND_GIB, VOL_BASE, ATTEN_NORM);
 
                        if(prandom() < amount)
                                TossGib ("models/gibs/eye.md3", org, org, vel, prandomvec() * 150, specnum, 0, issilent);
@@ -272,12 +272,3 @@ void Ent_GibSplash(bool isNew)
                        break;
        }
 }
-
-void GibSplash_Precache()
-{
-       precache_sound ("misc/gib.wav");
-    precache_sound ("misc/gib_splat01.wav");
-    precache_sound ("misc/gib_splat02.wav");
-    precache_sound ("misc/gib_splat03.wav");
-    precache_sound ("misc/gib_splat04.wav");
-}
index b33a1a5e061bf1416e11085bd812a899a0ca2e88..5b8b16bfd8c11cbac3caba4fd709716dfd8b07a6 100644 (file)
@@ -23,5 +23,4 @@ void TossGib (string mdlname, vector safeorg, vector org, vector vconst, vector
 
 void Ent_GibSplash(bool isNew);
 
-void GibSplash_Precache();
 #endif
index 528646979e987606f70fc3f9c939f9cd15aebbd8..dd70c760c34534a1456165647e1fcc019b10754a 100644 (file)
@@ -44,7 +44,7 @@ void Draw_GrapplingHook()
        if(self.teleport_time)
        if(time > self.teleport_time)
        {
-               sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM); // safeguard
+               sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM); // safeguard
                self.teleport_time = 0;
        }
 
@@ -168,7 +168,7 @@ void Draw_GrapplingHook()
 
 void Remove_GrapplingHook()
 {SELFPARAM();
-       sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+       sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
 }
 
 void Ent_ReadHook(float bIsNew, float type)
@@ -228,7 +228,7 @@ void Ent_ReadHook(float bIsNew, float type)
                                self.drawmask = MASK_NORMAL;
                                break;
                        case ENT_CLIENT_ARC_BEAM:
-                               sound (self, CH_SHOTS_SINGLE, W_Sound("lgbeam_fly"), VOL_BASE, ATTEN_NORM);
+                               sound (self, CH_SHOTS_SINGLE, SND_LGBEAM_FLY, VOL_BASE, ATTEN_NORM);
                                break;
                }
        }
@@ -236,9 +236,4 @@ void Ent_ReadHook(float bIsNew, float type)
        self.teleport_time = time + 10;
 }
 
-void Hook_Precache()
-{
-       precache_sound(W_Sound("lgbeam_fly"));
-}
-
 // TODO: hook: temporarily transform self.origin for drawing the model along warpzones!
index 8401dce049a43cd1c90accf3c6e3c30471da7946..e513ed6afa4451ee0271a1bc33d15716b869edfc 100644 (file)
@@ -2,7 +2,6 @@
 #define HOOK_H
 
 void Draw_CylindricLine(vector from, vector to, float thickness, string texture, float aspect, float shift, vector rgb, float theAlpha, float drawflag, vector vieworg);
-void Hook_Precache();
 
 void Ent_ReadHook(float bIsNew, float type);
 
index c534cc7a5db46dc3362a9b511b551e7bb4861f86..ca31f32f71bf7b5afb82bb487a650653d1da108d 100644 (file)
@@ -2,7 +2,6 @@
 #include "_all.qh"
 
 #include "controlpoint.qh"
-#include "csqcmodel_hooks.qh"
 #include "damage.qh"
 #include "effects.qh"
 #include "generator.qh"
@@ -49,7 +48,6 @@
 #include "../common/triggers/include.qh"
 
 #include "../common/turrets/cl_turrets.qh"
-#include "../common/turrets/turrets.qh"
 
 #include "../warpzonelib/client.qh"
 
@@ -153,18 +151,10 @@ void CSQC_Init(void)
        CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
        CALL_ACCUMULATED_FUNCTION(RegisterHUD_Panels);
 
-       initialize_minigames();
-
        // precaches
-       precache_sound("misc/hit.wav");
-       precache_sound("misc/typehit.wav");
 
-       generator_precache();
        Projectile_Precache();
-       Hook_Precache();
-       GibSplash_Precache();
        Tuba_Precache();
-       CSQCPlayer_Precache();
 
        if(autocvar_cl_reticle)
        {
@@ -778,7 +768,7 @@ void Ent_ReadSpawnEvent(float is_new)
                        }
                        if(autocvar_cl_spawn_event_sound)
                        {
-                               sound(self, CH_TRIGGER, "misc/spawn.wav", VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_TRIGGER, SND_SPAWN, VOL_BASE, ATTEN_NORM);
                        }
                }
        }
@@ -935,7 +925,7 @@ void Ent_Remove()
 
        if(self.snd_looping > 0)
        {
-               sound(self, self.snd_looping, "misc/null.wav", VOL_BASE, autocvar_g_jetpack_attenuation);
+               sound(self, self.snd_looping, SND_Null, VOL_BASE, autocvar_g_jetpack_attenuation);
                self.snd_looping = 0;
        }
 
index 3511c743f05b7478a6436c884775742962532b72..945f312ab29a29592806145c248229b94c1fcf92 100644 (file)
@@ -630,8 +630,6 @@ void GameTypeVote_ReadOption(int i)
 
 void MapVote_Init()
 {
-       precache_sound ("misc/invshot.wav");
-
        mv_active = 1;
        if(autocvar_hud_cursormode) { setcursormode(1); }
        else { mv_mousepos = '0.5 0 0' * vid_conwidth + '0 0.5 0' * vid_conheight; }
index b985e36f6763e2561d1c7398af44c0dae43d4a28..1b9c587abb613355193505564e30ddbff4a3cada 100644 (file)
@@ -59,7 +59,7 @@
 #include "../common/weapons/all.qc"
 
 #include "../common/turrets/cl_turrets.qc"
-#include "../common/turrets/turrets.qc"
+#include "../common/turrets/all.qc"
 
 #include "../common/triggers/include.qc"
 
index 01667366e1e4fb16441a93a3dc8a505999ec3bc1..5f896beea56bcafca0b9d35deca04654c4ad71b3 100644 (file)
@@ -173,7 +173,7 @@ bool QuickMenu_Open(string mode, string submenu)
                setcursormode(1);
        hudShiftState = 0;
 
-       QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+       QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
        return true;
 }
 
@@ -357,7 +357,7 @@ bool QuickMenu_Page_Load(string target_submenu, int new_page)
                QuickMenu_Close();
                return false;
        }
-       QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+       QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
        return true;
 }
 
@@ -380,7 +380,7 @@ bool QuickMenu_ActionForNumber(int num)
        if (QuickMenu_Page_Command[num] != "")
        {
                localcmd(strcat("\n", QuickMenu_Page_Command[num], "\n"));
-               QuickMenu_TimeOut = time + autocvar_hud_panel_quickmenu_time;
+               QuickMenu_TimeOut = ((autocvar_hud_panel_quickmenu_time > 0) ? time + autocvar_hud_panel_quickmenu_time : 0);
                return true;
        }
        if (QuickMenu_Page_Description[num] != "")
@@ -586,6 +586,7 @@ void HUD_QuickMenu(void)
                //if(!autocvar_hud_panel_quickmenu) return;
                if(!hud_panel_quickmenu) return;
 
+               if(QuickMenu_TimeOut)
                if(time > QuickMenu_TimeOut)
                {
                        QuickMenu_Close();
@@ -799,7 +800,7 @@ void QuickMenu_Default(string target_submenu)
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^killed flag, icon")), "say_team %s; g_waypointsprite_team_here_p", "killed flagcarrier (l:%y^7)", CTX(_("QMCMD^killed flagcarrier (l:%y^7)")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^dropped flag, icon")), "say_team %s; g_waypointsprite_team_here_d", "dropped flag (l:%d^7)", CTX(_("QMCMD^dropped flag (l:%d^7)")))
                QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop gun, icon")), "say_team %s; g_waypointsprite_team_here; wait; dropweapon", "dropped gun %w^7 (l:%l^7)", CTX(_("QMCMD^dropped gun %w^7 (l:%l^7)")))
-               QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; +use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
+               QUICKMENU_ENTRY_TC(CTX(_("QMCMD^drop flag/key, icon")), "say_team %s; g_waypointsprite_team_here; wait; use", "dropped flag/key %w^7 (l:%l^7)", CTX(_("QMCMD^dropped flag/key %w^7 (l:%l^7)")))
        QUICKMENU_SMENU(CTX(_("QMCMD^Team chat")), "Team chat")
        }
 
index 1acfbd7eb7b1aee14fc43e40dd8507bfe7379fe2..91ccbba5c853e7d1d7367e1da60c0f404cefefca 100644 (file)
@@ -65,7 +65,7 @@ void tubasound(entity e, bool restart)
                if (restart) {
                        snd1 = TUBA_STARTNOTE(e.tuba_instrument, e.note);
                }
-               sound(e, CH_TUBA_SINGLE, snd1, e.tuba_volume, e.tuba_attenuate * autocvar_g_balance_tuba_attenuation);
+               _sound(e, CH_TUBA_SINGLE, snd1, e.tuba_volume, e.tuba_attenuate * autocvar_g_balance_tuba_attenuation);
        }
 }
 
@@ -79,9 +79,9 @@ void Ent_TubaNote_Think()
        }
        self.nextthink = time;
        if (self.tuba_volume <= 0) {
-               sound(self, CH_TUBA_SINGLE, "misc/null.wav", 0, 0);
+               sound(self, CH_TUBA_SINGLE, SND_Null, 0, 0);
                if (self.enemy) {
-                       sound(self.enemy, CH_TUBA_SINGLE, "misc/null.wav", 0, 0);
+                       sound(self.enemy, CH_TUBA_SINGLE, SND_Null, 0, 0);
                        remove(self.enemy);
                }
                remove(self);
index 146d322fcce134b6d23df2e915c98df2d4f9c749..26089f9158e764ff2d1d47b41f2661b8494c5c46 100644 (file)
@@ -517,7 +517,7 @@ void UpdateHitsound()
                        // todo: avoid very long and very short sounds from wave stretching using different sound files? seems unnecessary
                        // todo: normalize sound pressure levels? seems unnecessary
 
-                       sound7(world, CH_INFO, "misc/hit.wav", VOL_BASE, ATTN_NONE, pitch_shift * 100, 0);
+                       sound7(world, CH_INFO, SND(HIT), VOL_BASE, ATTN_NONE, pitch_shift * 100, 0);
                }
                unaccounted_damage = 0;
                hitsound_time_prev = time;
@@ -527,7 +527,7 @@ void UpdateHitsound()
        float typehit_time = getstatf(STAT_TYPEHIT_TIME);
        if (COMPARE_INCREASING(typehit_time, typehit_time_prev) > autocvar_cl_hitsound_antispam_time)
        {
-               sound(world, CH_INFO, "misc/typehit.wav", VOL_BASE, ATTN_NONE);
+               sound(world, CH_INFO, SND_TYPEHIT, VOL_BASE, ATTN_NONE);
                typehit_time_prev = typehit_time;
        }
 }
index 1be6f8974b77bb5034279b82afb0e9ecae104b55..07228885db781391164839d875dc489315ce52bf 100644 (file)
@@ -170,7 +170,7 @@ void loopsound(entity e, int ch, string samp, float vol, float attn)
        if(self.silent)
                return;
 
-       sound(e, ch, samp, vol, attn);
+       _sound(e, ch, samp, vol, attn);
        e.snd_looping = ch;
 }
 
@@ -270,9 +270,6 @@ void Ent_Projectile()
 
        if(f & 2)
        {
-               string rm_suffix = strcat("rocketminsta_laser_", Static_Team_ColorName_Lower(self.team));
-               if(_particleeffectnum(rm_suffix) < 0 || Team_TeamToNumber(self.team) == -1) { rm_suffix = "TR_NEXUIZPLASMA"; }
-
                self.cnt = ReadByte();
 
                self.silent = (self.cnt & 0x80);
@@ -320,7 +317,7 @@ void Ent_Projectile()
 
                        CASE(RPC)                self.traileffect = particleeffectnum(EFFECT_TR_ROCKET); break;
 
-                       CASE(ROCKETMINSTA_LASER) self.traileffect = _particleeffectnum(rm_suffix); break;
+                       CASE(ROCKETMINSTA_LASER) self.traileffect = particleeffectnum(EFFECT_ROCKETMINSTA_LASER(self.team)); break;
 #undef CASE
                        default:
                                if(MUTATOR_CALLHOOK(Ent_Projectile, self))
@@ -347,7 +344,7 @@ void Ent_Projectile()
                {
                        case PROJECTILE_ELECTRO:
                                // only new engines support sound moving with object
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("electro_fly"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM);
                                self.mins = '0 0 -4';
                                self.maxs = '0 0 -4';
                                self.move_movetype = MOVETYPE_BOUNCE;
@@ -357,7 +354,7 @@ void Ent_Projectile()
                                break;
                        case PROJECTILE_RPC:
                        case PROJECTILE_ROCKET:
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("rocket_fly"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(ROCKET_FLY), VOL_BASE, ATTEN_NORM);
                                self.mins = '-3 -3 -3';
                                self.maxs = '3 3 3';
                                break;
@@ -405,12 +402,12 @@ void Ent_Projectile()
                                break;
                        case PROJECTILE_NAPALM_FOUNTAIN:
                        case PROJECTILE_FIREBALL:
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("fireball_fly2"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY2), VOL_BASE, ATTEN_NORM);
                                self.mins = '-16 -16 -16';
                                self.maxs = '16 16 16';
                                break;
                        case PROJECTILE_FIREMINE:
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("fireball_fly"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(FIREBALL_FLY), VOL_BASE, ATTEN_NORM);
                                self.move_movetype = MOVETYPE_BOUNCE;
                                self.move_touch = func_null;
                                self.mins = '-4 -4 -4';
@@ -425,7 +422,7 @@ void Ent_Projectile()
                                self.maxs = '2 2 2';
                                break;
                        case PROJECTILE_SEEKER:
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM);
                                self.mins = '-4 -4 -4';
                                self.maxs = '4 4 4';
                                break;
@@ -438,17 +435,17 @@ void Ent_Projectile()
             case PROJECTILE_RAPTORCANNON:
                                break;
             case PROJECTILE_SPIDERROCKET:
-                loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM);
+                loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM);
                                break;
             case PROJECTILE_WAKIROCKET:
-                loopsound(self, CH_SHOTS_SINGLE, W_Sound("tag_rocket_fly"), VOL_BASE, ATTEN_NORM);
+                loopsound(self, CH_SHOTS_SINGLE, SND(TAG_ROCKET_FLY), VOL_BASE, ATTEN_NORM);
                                break;
             /*
             case PROJECTILE_WAKICANNON:
                                break;
                        case PROJECTILE_BUMBLE_GUN:
                                // only new engines support sound moving with object
-                               loopsound(self, CH_SHOTS_SINGLE, W_Sound("electro_fly"), VOL_BASE, ATTEN_NORM);
+                               loopsound(self, CH_SHOTS_SINGLE, SND(ELECTRO_FLY), VOL_BASE, ATTEN_NORM);
                                self.mins = '0 0 -4';
                                self.maxs = '0 0 -4';
                                self.move_movetype = MOVETYPE_BOUNCE;
@@ -508,11 +505,5 @@ void Ent_Projectile()
 
 void Projectile_Precache()
 {
-       precache_sound(W_Sound("electro_fly"));
-       precache_sound(W_Sound("rocket_fly"));
-       precache_sound(W_Sound("fireball_fly"));
-       precache_sound(W_Sound("fireball_fly2"));
-       precache_sound(W_Sound("tag_rocket_fly"));
-
        MUTATOR_CALLHOOK(PrecacheProjectiles);
 }
diff --git a/qcsrc/collect-precache.sh b/qcsrc/collect-precache.sh
deleted file mode 100755 (executable)
index 302220c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-#!/bin/sh
-
-{
-       grep -h '\<precache_model *( *"' client/* | grep -v "//NO_SV_PRECACHE"
-       grep -h '\<precache_sound *( *"' client/* | grep -v "//NO_SV_PRECACHE"
-} > server/precache-for-csqc.inc
-
index cbd3a44ab5d40e4f739d3ef04b734e3c5d8d2754..4d82087e05dc47bea1ec9eb0b08aa18cd56247f6 100644 (file)
@@ -46,15 +46,35 @@ EFFECT(0, VORTEX_IMPACT,            "nex_impact")
 EFFECT(0, VORTEX_MUZZLEFLASH,       "nex_muzzleflash")
 
 EFFECT(1, VAPORIZER_RED,            "TE_TEI_G3RED")
-EFFECT(1, VAPORIZER_RED_HIT,        "TE_TEI_G3RED_HIT")
+EFFECT(1, VAPORIZER_HIT_RED,        "TE_TEI_G3RED_HIT")
 EFFECT(1, VAPORIZER_BLUE,           "TE_TEI_G3BLUE")
-EFFECT(1, VAPORIZER_BLUE_HIT,       "TE_TEI_G3BLUE_HIT")
+EFFECT(1, VAPORIZER_HIT_BLUE,       "TE_TEI_G3BLUE_HIT")
 EFFECT(1, VAPORIZER_YELLOW,         "TE_TEI_G3YELLOW")
-EFFECT(1, VAPORIZER_YELLOW_HIT,     "TE_TEI_G3YELLOW_HIT")
+EFFECT(1, VAPORIZER_HIT_YELLOW,     "TE_TEI_G3YELLOW_HIT")
 EFFECT(1, VAPORIZER_PINK,           "TE_TEI_G3PINK")
-EFFECT(1, VAPORIZER_PINK_HIT,       "TE_TEI_G3PINK_HIT")
+EFFECT(1, VAPORIZER_HIT_PINK,       "TE_TEI_G3PINK_HIT")
 EFFECT(1, VAPORIZER_NEUTRAL,        "TE_TEI_G3")
-EFFECT(1, VAPORIZER_NEUTRAL_HIT,    "TE_TEI_G3_HIT")
+EFFECT(1, VAPORIZER_HIT_NEUTRAL,    "TE_TEI_G3_HIT")
+entity EFFECT_VAPORIZER(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_VAPORIZER_RED;
+        case NUM_TEAM_2:    return EFFECT_VAPORIZER_BLUE;
+        case NUM_TEAM_3:    return EFFECT_VAPORIZER_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_VAPORIZER_PINK;
+        default:            return EFFECT_VAPORIZER_NEUTRAL;
+    }
+}
+entity EFFECT_VAPORIZER_HIT(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_VAPORIZER_HIT_RED;
+        case NUM_TEAM_2:    return EFFECT_VAPORIZER_HIT_BLUE;
+        case NUM_TEAM_3:    return EFFECT_VAPORIZER_HIT_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_VAPORIZER_HIT_PINK;
+        default:            return EFFECT_VAPORIZER_HIT_NEUTRAL;
+    }
+}
 
 EFFECT(0, RIFLE_IMPACT,             "machinegun_impact")
 EFFECT(0, RIFLE_MUZZLEFLASH,        "rifle_muzzleflash")
@@ -124,11 +144,53 @@ EFFECT(0, SPAWN_PINK,               "spawn_event_pink")
 EFFECT(0, SPAWNPOINT_NEUTRAL,       "spawn_point_neutral")
 EFFECT(0, SPAWN_NEUTRAL,            "spawn_event_neutral")
 
-EFFECT(0, NADE_RED_EXPLODE,         "nade_red_explode")
-EFFECT(0, NADE_BLUE_EXPLODE,        "nade_blue_explode")
-EFFECT(0, NADE_YELLOW_EXPLODE,      "nade_yellow_explode")
-EFFECT(0, NADE_PINK_EXPLODE,        "nade_pink_explode")
-EFFECT(0, NADE_NEUTRAL_EXPLODE,     "nade_neutral_explode")
+EFFECT(0, NADE_EXPLODE_RED,         "nade_red_explode")
+EFFECT(0, NADE_EXPLODE_BLUE,        "nade_blue_explode")
+EFFECT(0, NADE_EXPLODE_YELLOW,      "nade_yellow_explode")
+EFFECT(0, NADE_EXPLODE_PINK,        "nade_pink_explode")
+EFFECT(0, NADE_EXPLODE_NEUTRAL,     "nade_neutral_explode")
+entity EFFECT_NADE_EXPLODE(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_NADE_EXPLODE_RED;
+        case NUM_TEAM_2:    return EFFECT_NADE_EXPLODE_BLUE;
+        case NUM_TEAM_3:    return EFFECT_NADE_EXPLODE_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_NADE_EXPLODE_PINK;
+        default:                   return EFFECT_NADE_EXPLODE_NEUTRAL;
+    }
+}
+
+EFFECT(1, NADE_TRAIL_RED,           "nade_red")
+EFFECT(1, NADE_TRAIL_BLUE,          "nade_blue")
+EFFECT(1, NADE_TRAIL_YELLOW,        "nade_yellow")
+EFFECT(1, NADE_TRAIL_PINK,          "nade_pink")
+EFFECT(1, NADE_TRAIL_NEUTRAL,       "nade_neutral")
+entity EFFECT_NADE_TRAIL(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_NADE_TRAIL_RED;
+        case NUM_TEAM_2:    return EFFECT_NADE_TRAIL_BLUE;
+        case NUM_TEAM_3:    return EFFECT_NADE_TRAIL_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_NADE_TRAIL_PINK;
+        default:            return EFFECT_NADE_TRAIL_NEUTRAL;
+    }
+}
+
+EFFECT(1, NADE_TRAIL_BURN_RED,      "nade_red_burn")
+EFFECT(1, NADE_TRAIL_BURN_BLUE,     "nade_blue_burn")
+EFFECT(1, NADE_TRAIL_BURN_YELLOW,   "nade_yellow_burn")
+EFFECT(1, NADE_TRAIL_BURN_PINK,     "nade_pink_burn")
+EFFECT(1, NADE_TRAIL_BURN_NEUTRAL,  "nade_neutral_burn")
+entity EFFECT_NADE_TRAIL_BURN(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_NADE_TRAIL_BURN_RED;
+        case NUM_TEAM_2:    return EFFECT_NADE_TRAIL_BURN_BLUE;
+        case NUM_TEAM_3:    return EFFECT_NADE_TRAIL_BURN_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_NADE_TRAIL_BURN_PINK;
+        default:            return EFFECT_NADE_TRAIL_BURN_NEUTRAL;
+    }
+}
 
 EFFECT(0, ICEORGLASS,               "iceorglass")
 EFFECT(0, ICEFIELD,                 "icefield")
@@ -137,20 +199,43 @@ EFFECT(0, HEALING,                  "healing_fx")
 EFFECT(1, LASER_BEAM_FAST,          "nex242_misc_laser_beam_fast")
 EFFECT(0, RESPAWN_GHOST,            "respawn_ghost")
 
-EFFECT(0, FLAG_RED_TOUCH,           "redflag_touch")
-EFFECT(0, FLAG_BLUE_TOUCH,          "blueflag_touch")
-EFFECT(0, FLAG_YELLOW_TOUCH,        "yellowflag_touch")
-EFFECT(0, FLAG_PINK_TOUCH,          "pinkflag_touch")
-EFFECT(0, FLAG_NEUTRAL_TOUCH,       "neutralflag_touch")
-EFFECT(1, RED_PASS,                 "red_pass")
-EFFECT(1, BLUE_PASS,                "blue_pass")
-EFFECT(1, YELLOW_PASS,              "yellow_pass")
-EFFECT(1, PINK_PASS,                "pink_pass")
-EFFECT(1, NEUTRAL_PASS,             "neutral_pass")
-EFFECT(0, RED_CAP,                  "red_cap")
-EFFECT(0, BLUE_CAP,                 "blue_cap")
-EFFECT(0, YELLOW_CAP,               "yellow_cap")
-EFFECT(0, PINK_CAP,                 "pink_cap")
+EFFECT(0, FLAG_TOUCH_RED,           "redflag_touch")
+EFFECT(0, FLAG_TOUCH_BLUE,          "blueflag_touch")
+EFFECT(0, FLAG_TOUCH_YELLOW,        "yellowflag_touch")
+EFFECT(0, FLAG_TOUCH_PINK,          "pinkflag_touch")
+EFFECT(0, FLAG_TOUCH_NEUTRAL,       "neutralflag_touch")
+entity EFFECT_FLAG_TOUCH(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_FLAG_TOUCH_RED;
+        case NUM_TEAM_2:    return EFFECT_FLAG_TOUCH_BLUE;
+        case NUM_TEAM_3:    return EFFECT_FLAG_TOUCH_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_FLAG_TOUCH_PINK;
+        default:            return EFFECT_FLAG_TOUCH_NEUTRAL;
+    }
+}
+
+EFFECT(1, PASS_RED,                 "red_pass")
+EFFECT(1, PASS_BLUE,                "blue_pass")
+EFFECT(1, PASS_YELLOW,              "yellow_pass")
+EFFECT(1, PASS_PINK,                "pink_pass")
+EFFECT(1, PASS_NEUTRAL,             "neutral_pass")
+
+EFFECT(0, CAP_RED,                  "red_cap")
+EFFECT(0, CAP_BLUE,                 "blue_cap")
+EFFECT(0, CAP_YELLOW,               "yellow_cap")
+EFFECT(0, CAP_PINK,                 "pink_cap")
+EFFECT(0, CAP_NEUTRAL,              "neutral_cap")
+entity EFFECT_CAP(int teamid)
+{
+    switch (teamid) {
+        case NUM_TEAM_1:    return EFFECT_CAP_RED;
+        case NUM_TEAM_2:    return EFFECT_CAP_BLUE;
+        case NUM_TEAM_3:    return EFFECT_CAP_YELLOW;
+        case NUM_TEAM_4:    return EFFECT_CAP_PINK;
+        default:            return EFFECT_CAP_NEUTRAL;
+    }
+}
 
 EFFECT(0, ITEM_PICKUP,              "item_pickup")
 EFFECT(0, ITEM_RESPAWN,             "item_respawn")
@@ -187,3 +272,22 @@ EFFECT(1, TR_SLIGHTBLOOD,           "TR_SLIGHTBLOOD")
 EFFECT(1, TR_KNIGHTSPIKE,           "TR_KNIGHTSPIKE")
 EFFECT(1, TR_VORESPIKE,             "TR_VORESPIKE")
 EFFECT(0, TE_SPARK,                 "TE_SPARK")
+
+EFFECT(1, ROCKETMINSTA_LASER_RED,       "rocketminsta_laser_red")
+EFFECT(1, ROCKETMINSTA_LASER_BLUE,      "rocketminsta_laser_blue")
+EFFECT(1, ROCKETMINSTA_LASER_YELLOW,    "rocketminsta_laser_yellow")
+EFFECT(1, ROCKETMINSTA_LASER_PINK,      "rocketminsta_laser_pink")
+EFFECT(1, ROCKETMINSTA_LASER_NEUTRAL,   "rocketminsta_laser_neutral")
+entity EFFECT_ROCKETMINSTA_LASER(int teamid)
+{
+    entity e;
+    switch (teamid) {
+        case NUM_TEAM_1:    e = EFFECT_ROCKETMINSTA_LASER_RED; break;
+        case NUM_TEAM_2:    e = EFFECT_ROCKETMINSTA_LASER_BLUE; break;
+        case NUM_TEAM_3:    e = EFFECT_ROCKETMINSTA_LASER_YELLOW; break;
+        case NUM_TEAM_4:    e = EFFECT_ROCKETMINSTA_LASER_PINK; break;
+        default:            e = EFFECT_ROCKETMINSTA_LASER_NEUTRAL; break;
+    }
+    if (particleeffectnum(e) < 0 || Team_TeamToNumber(teamid) == -1) { e = EFFECT_TR_NEXUIZPLASMA; }
+    return e;
+}
index fc225cdb7d40ecf648da2b802ecd504fba8631cc..8a9e314020bd16f100774837050c14d3ed3019a5 100644 (file)
@@ -11,4 +11,14 @@ void Dump_Items()
     ));
 }
 
+string Item_Model(string item_mdl)
+{
+    string output = strcat("models/items/", item_mdl);
+#ifdef SVQC
+    MUTATOR_CALLHOOK(ItemModel, item_mdl, output);
+    output = item_model_output;
+#endif
+    return output;
+}
+
 #endif
index 2e33119fb089920e71c69ccf07051223dc945496..3f8c603e7ab2aabeb75c74f438a00e73bba7593b 100644 (file)
@@ -11,6 +11,10 @@ REGISTER_REGISTRY(RegisterItems)
 
 void Dump_Items();
 
+#ifndef MENUQC
+string Item_Model(string item_mdl);
+#endif
+
 #endif
 
 #include "inventory.qh"
index 2d487a7b51be6723a030f44af5e14d5997da9883..16673711eea4b463b17c76d37702148dfa72176b 100644 (file)
@@ -3,8 +3,14 @@
     #include "../../../server/t_items.qh"
 #endif
 
+#ifndef MENUQC
+MODEL(Bullets_ITEM, Item_Model("a_bullets.mdl"));
+#endif
+
 REGISTER_ITEM(Bullets, Ammo) {
-    this.m_model    =   "a_bullets.mdl";
+#ifndef MENUQC
+    this.m_model    =   MDL_Bullets_ITEM;
+#endif
     this.m_name     =   "bullets";
     this.m_icon     =   "ammo_bullets";
 #ifdef SVQC
@@ -12,8 +18,15 @@ REGISTER_ITEM(Bullets, Ammo) {
     this.m_itemid   =   IT_NAILS;
 #endif
 }
+
+#ifndef MENUQC
+MODEL(Cells_ITEM, Item_Model("a_cells.md3"));
+#endif
+
 REGISTER_ITEM(Cells, Ammo) {
-    this.m_model    =   "a_cells.md3";
+#ifndef MENUQC
+    this.m_model    =   MDL_Cells_ITEM;
+#endif
     this.m_name     =   "cells";
     this.m_icon     =   "ammo_cells";
 #ifdef SVQC
@@ -21,8 +34,15 @@ REGISTER_ITEM(Cells, Ammo) {
     this.m_itemid   =   IT_CELLS;
 #endif
 }
+
+#ifndef MENUQC
+MODEL(Plasma_ITEM, Item_Model("a_cells.md3"));
+#endif
+
 REGISTER_ITEM(Plasma, Ammo) {
-    this.m_model    =   "a_cells.md3";
+#ifndef MENUQC
+    this.m_model    =   MDL_Plasma_ITEM;
+#endif
     this.m_name     =   "plasma";
     this.m_icon     =   "ammo_plasma";
 #ifdef SVQC
@@ -30,8 +50,15 @@ REGISTER_ITEM(Plasma, Ammo) {
     this.m_itemid   =   IT_PLASMA;
 #endif
 }
+
+#ifndef MENUQC
+MODEL(Rockets_ITEM, Item_Model("a_rockets.md3"));
+#endif
+
 REGISTER_ITEM(Rockets, Ammo) {
-    this.m_model    =   "a_rockets.md3";
+#ifndef MENUQC
+    this.m_model    =   MDL_Rockets_ITEM;
+#endif
     this.m_name     =   "rockets";
     this.m_icon     =   "ammo_rockets";
 #ifdef SVQC
@@ -39,8 +66,15 @@ REGISTER_ITEM(Rockets, Ammo) {
     this.m_itemid   =   IT_ROCKETS;
 #endif
 }
+
+#ifndef MENUQC
+MODEL(Shells_ITEM, Item_Model("a_shells.md3"));
+#endif
+
 REGISTER_ITEM(Shells, Ammo) {
-    this.m_model    =   "a_shells.md3";
+#ifndef MENUQC
+    this.m_model    =   MDL_Shells_ITEM;
+#endif
     this.m_name     =   "shells";
     this.m_icon     =   "ammo_shells";
 #ifdef SVQC
index e7965803e2115e1e2f7f631fae6680a878d2eeaa..13a774ebcec18f693120f19e7b89982d688fe788 100644 (file)
@@ -3,8 +3,14 @@
     #include "../../../server/t_items.qh"
 #endif
 
+#ifndef MENUQC
+MODEL(ArmorSmall_ITEM, Item_Model("item_armor_small.md3"));
+#endif
+
 REGISTER_ITEM(ArmorSmall, Armor) {
-    this.m_model                =   "item_armor_small.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_ArmorSmall_ITEM;
+#endif
     this.m_sound                =   "misc/armor1.wav";
     this.m_name                 =   "5 Armor";
     this.m_icon                 =   "armor";
@@ -16,8 +22,14 @@ REGISTER_ITEM(ArmorSmall, Armor) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(ArmorMedium_ITEM, Item_Model("item_armor_medium.md3"));
+#endif
+
 REGISTER_ITEM(ArmorMedium, Armor) {
-    this.m_model                =   "item_armor_medium.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_ArmorMedium_ITEM;
+#endif
     this.m_sound                =   "misc/armor10.wav";
     this.m_name                 =   "25 Armor";
     this.m_icon                 =   "armor";
@@ -29,8 +41,14 @@ REGISTER_ITEM(ArmorMedium, Armor) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(ArmorLarge_ITEM, Item_Model("item_armor_big.md3"));
+#endif
+
 REGISTER_ITEM(ArmorLarge, Armor) {
-    this.m_model                =   "item_armor_big.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_ArmorLarge_ITEM;
+#endif
     this.m_sound                =   "misc/armor17_5.wav";
     this.m_name                 =   "50 Armor";
     this.m_icon                 =   "armor";
@@ -44,8 +62,14 @@ REGISTER_ITEM(ArmorLarge, Armor) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(ArmorMega_ITEM, Item_Model("item_armor_large.md3"));
+#endif
+
 REGISTER_ITEM(ArmorMega, Armor) {
-    this.m_model                =   "item_armor_large.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_ArmorMega_ITEM;
+#endif
     this.m_sound                =   "misc/armor25.wav";
     this.m_name                 =   "100 Armor";
     this.m_icon                 =   "item_large_armor";
index bb9d90eb44cdb9c2af8fc1d62cb54ec8665318a8..b81bde7afc22d1b0bd2152f990d5746725e215b3 100644 (file)
@@ -3,8 +3,14 @@
     #include "../../../server/t_items.qh"
 #endif
 
+#ifndef MENUQC
+MODEL(HealthSmall_ITEM, Item_Model("g_h1.md3"));
+#endif
+
 REGISTER_ITEM(HealthSmall, Health) {
-    this.m_model                =   "g_h1.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_HealthSmall_ITEM;
+#endif
     this.m_sound                =   "misc/minihealth.wav";
     this.m_name                 =   "5 Health";
     this.m_icon                 =   "health";
@@ -16,8 +22,14 @@ REGISTER_ITEM(HealthSmall, Health) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(HealthMedium_ITEM, Item_Model("g_h25.md3"));
+#endif
+
 REGISTER_ITEM(HealthMedium, Health) {
-    this.m_model                =   "g_h25.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_HealthMedium_ITEM;
+#endif
     this.m_sound                =   "misc/mediumhealth.wav";
     this.m_name                 =   "25 Health";
     this.m_icon                 =   "health";
@@ -29,8 +41,14 @@ REGISTER_ITEM(HealthMedium, Health) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(HealthLarge_ITEM, Item_Model("g_h50.md3"));
+#endif
+
 REGISTER_ITEM(HealthLarge, Health) {
-    this.m_model                =   "g_h50.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_HealthLarge_ITEM;
+#endif
     this.m_sound                =   "misc/mediumhealth.wav";
     this.m_name                 =   "50 Health";
     this.m_icon                 =   "health";
@@ -44,8 +62,14 @@ REGISTER_ITEM(HealthLarge, Health) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(HealthMega_ITEM, Item_Model("g_h100.md3"));
+#endif
+
 REGISTER_ITEM(HealthMega, Health) {
-    this.m_model                =   "g_h100.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_HealthMega_ITEM;
+#endif
     this.m_sound                =   "misc/megahealth.wav";
     this.m_name                 =   "100 Health";
     this.m_icon                 =   "item_mega_health";
index 3b4cfbc141c9a6b1798612f7b8ef7238162f20eb..63019aebe8bbf50800da4967ce6421144bb1d906 100644 (file)
@@ -6,8 +6,14 @@
 #include "ammo.qh"
 #include "powerup.qh"
 
+#ifndef MENUQC
+MODEL(Jetpack_ITEM, Item_Model("g_jetpack.md3"));
+#endif
+
 REGISTER_ITEM(Jetpack, Powerup) {
-    this.m_model                =   "g_jetpack.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_Jetpack_ITEM;
+#endif
     this.m_name                 =   "Jet pack";
     this.m_icon                 =   "jetpack";
     this.m_color                =   '0.5 0.5 0.5';
@@ -20,8 +26,14 @@ REGISTER_ITEM(Jetpack, Powerup) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(JetpackFuel_ITEM, Item_Model("g_fuel.md3"));
+#endif
+
 REGISTER_ITEM(JetpackFuel, Ammo) {
-    this.m_model    =   "g_fuel.md3";
+#ifndef MENUQC
+    this.m_model    =   MDL_JetpackFuel_ITEM;
+#endif
     this.m_name     =   "Fuel";
     this.m_icon     =   "ammo_fuel";
 #ifdef SVQC
@@ -30,8 +42,14 @@ REGISTER_ITEM(JetpackFuel, Ammo) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(JetpackRegen_ITEM, Item_Model("g_fuelregen.md3"));
+#endif
+
 REGISTER_ITEM(JetpackRegen, Pickup) {
-    this.m_model                =   "g_fuelregen.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_JetpackRegen_ITEM;
+#endif
     this.m_name                 =   "Fuel regenerator";
     this.m_icon                 =   "fuelregen";
     this.m_color                =   '1 0.5 0';
index 793230e359f831222ad7c309a7a7b001cbe332a0..6f60337c195a7ab7d79c43a04f5ec937e771ab67 100644 (file)
@@ -2,7 +2,9 @@
 #define PICKUP_H
 #include "../item.qh"
 CLASS(Pickup, GameItem)
-    ATTRIB(Pickup, m_model, string, string_null)
+#ifndef MENUQC
+    ATTRIB(Pickup, m_model, Model, NULL)
+#endif
     ATTRIB(Pickup, m_sound, string, "misc/itempickup.wav")
     ATTRIB(Pickup, m_name, string, string_null)
     METHOD(Pickup, show, void(entity this));
index fcfe2afb93a5a7c4b44183dfd6c654595f9c1c77..f411d748a8d5eaeb891ec8eace2d2dd76725695e 100644 (file)
@@ -4,8 +4,15 @@
 #ifndef SVQC
 .int m_itemid;
 #endif
+
+#ifndef MENUQC
+MODEL(Strength_ITEM, Item_Model("g_strength.md3"));
+#endif
+
 REGISTER_ITEM(Strength, Powerup) {
-    this.m_model            =   "g_strength.md3";
+#ifndef MENUQC
+    this.m_model            =   MDL_Strength_ITEM;
+#endif
     this.m_sound            =   "misc/powerup.wav";
     this.m_name             =   "Strength Powerup";
     this.m_icon             =   "strength";
@@ -14,8 +21,15 @@ REGISTER_ITEM(Strength, Powerup) {
     this.m_waypointblink    =   2;
     this.m_itemid           =   IT_STRENGTH;
 }
+
+#ifndef MENUQC
+MODEL(Shield_ITEM, Item_Model("g_invincible.md3"));
+#endif
+
 REGISTER_ITEM(Shield, Powerup) {
-    this.m_model            =   "g_invincible.md3";
+#ifndef MENUQC
+    this.m_model            =   MDL_Shield_ITEM;
+#endif
     this.m_sound            =   "misc/powerup_shield.wav";
     this.m_name             =   "Shield";
     this.m_icon             =   "shield";
index b88d219916edc4bd764e085467e1a9a0ec099701..38614c7d4629481c9c8fafeb6b029b533e263491 100644 (file)
@@ -42,27 +42,6 @@ bool minigame_hud_mouse_in(vector pos, vector sz)
               mousepos_y >= pos_y && mousepos_y < pos_y + sz_y ;
 }
 
-void initialize_minigames()
-{
-       entity last_minig = world;
-       entity minig;
-       #define MINIGAME(name,nicename) \
-               minig = spawn(); \
-               minig.classname = "minigame_descriptor"; \
-               minig.netname = strzone(strtolower(#name)); \
-               minig.message = nicename; \
-               minig.minigame_hud_board = name##_hud_board; \
-               minig.minigame_hud_status = name##_hud_status; \
-               minig.minigame_event = name##_client_event; \
-               if ( !last_minig ) minigame_descriptors = minig; \
-               else last_minig.list_next = minig; \
-               last_minig = minig;
-
-       REGISTERED_MINIGAMES
-
-       #undef MINIGAME
-}
-
 string minigame_texture_skin(string skinname, string name)
 {
        return sprintf("gfx/hud/%s/minigames/%s", skinname, name);
@@ -95,7 +74,7 @@ MINIGAME_SIMPLELINKED_ENTITIES
 
 void minigame_autoclean_entity(entity e)
 {
-       LOG_TRACE("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n");
+       LOG_DEBUG("CL Auto-cleaned: ",ftos(num_for_edict(e)), " (",e.classname,")\n");
        remove(e);
 }
 
@@ -235,7 +214,7 @@ void ent_read_minigame()
                        minigame_read_owner();
                        float ent = ReadLong();
                        self.minigame_playerslot = ent;
-                       LOG_TRACE("Player: ",GetPlayerName(ent-1),"\n");
+                       LOG_DEBUG("Player: ",GetPlayerName(ent-1),"\n");
 
                        activate = (ent == player_localnum+1 && self.owner && self.owner != active_minigame);
 
@@ -258,9 +237,9 @@ void ent_read_minigame()
 
        if ( sf & MINIG_SF_CREATE )
        {
-               LOG_TRACE("CL Reading entity: ",ftos(num_for_edict(self)),
+               LOG_DEBUG("CL Reading entity: ",ftos(num_for_edict(self)),
                        " classname:",self.classname," enttype:",ftos(self.enttype) );
-               LOG_TRACE(" sf:",ftos(sf)," netname:",self.netname,"\n\n");
+               LOG_DEBUG(" sf:",ftos(sf)," netname:",self.netname,"\n\n");
        }
 }
 #undef ReadString
index a839b1106194a7156bd56d669f4aefc720686cba..76d10986405891fa3d8e902983d33ce5ed6e0bb9 100644 (file)
@@ -79,9 +79,6 @@ string minigame_texture(string name);
 // For minigame_player: player server slot, don't use for anything else
 .float minigame_playerslot;
 
-// register all minigames
-void initialize_minigames();
-
 // client-side minigame session cleanup
 void deactivate_minigame();
 
@@ -118,4 +115,25 @@ void HUD_MinigameMenu_CustomEntry(entity parent, string message, string event_ar
        entityvar=world; \
        while( (entityvar = findentity(entityvar,owner,active_minigame)) )
 
+
+void RegisterMinigames();
+const int MINIGAMES_MAX = 24;
+entity MINIGAMES[MINIGAMES_MAX], MINIGAMES_first, MINIGAMES_last;
+int MINIGAMES_COUNT;
+#define REGISTER_MINIGAME(name,nicename) \
+    REGISTER(RegisterMinigames, MINIGAME, MINIGAMES, MINIGAMES_COUNT, name, m_id, spawn()); \
+    void name##_hud_board(vector, vector); \
+    void name##_hud_status(vector, vector); \
+    int name##_client_event(entity, string, ...); \
+    REGISTER_INIT_POST(MINIGAME, name) { \
+        this.classname = "minigame_descriptor"; \
+        this.netname = strzone(strtolower(#name)); \
+        this.message = nicename; \
+        this.minigame_hud_board = name##_hud_board; \
+               this.minigame_hud_status = name##_hud_status; \
+               this.minigame_event = name##_client_event; \
+    } \
+    REGISTER_INIT(MINIGAME, name)
+REGISTER_REGISTRY(RegisterMinigames)
+
 #endif
index 11470ec136acc3929cbd6721a720f8356e06d822..b0dba86c1ed9525cddb9f6f29b7818b3a9931c06 100644 (file)
@@ -211,18 +211,17 @@ void HUD_MinigameMenu_ClickCreate()
 {SELFPARAM();
        if ( HUD_MinigameMenu_Click_ExpandCollapse() )
        {
-               entity e;
                entity curr;
                entity prev = self;
-               for ( e = minigame_descriptors; e != world; e = e.list_next )
+               FOREACH(MINIGAMES, true, LAMBDA(
                {
                        curr = HUD_MinigameMenu_SpawnSubEntry(
-                               e.message, HUD_MinigameMenu_ClickCreate_Entry,  self );
-                       curr.netname = e.netname;
-                       curr.model = strzone(minigame_texture(strcat(e.netname,"/icon")));
+                               it.message, HUD_MinigameMenu_ClickCreate_Entry,  self );
+                       curr.netname = it.netname;
+                       curr.model = strzone(minigame_texture(strcat(it.netname,"/icon")));
                        HUD_MinigameMenu_InsertEntry( curr, prev );
                        prev = curr;
-               }
+               }));
        }
 }
 
index afcc93d4821bb69c0c8b60e9d7783118301617a9..d3874e7aa77cb42b79bc8c42230982cb0a4781f6 100644 (file)
@@ -65,25 +65,9 @@ that .owner is set to the minigame session entity and .minigame_autoclean is tru
 #include "ttt.qc"
 #include "c4.qc"
 #include "pong.qc"
-#include "qto.qc"
 #include "ps.qc"
 #include "pp.qc"
-
-/**
- * Registration:
- *     MINIGAME(id,"Name")
- *             id    (QuakeC symbol) Game identifier, used to find the functions explained above
- *             "Name"(String)        Human readable name for the game, shown in the UI
- */
-#define REGISTERED_MINIGAMES \
-       MINIGAME(nmm, "Nine Men's Morris") \
-       MINIGAME(ttt, "Tic Tac Toe") \
-       MINIGAME(pong,"Pong") \
-       MINIGAME(c4,  "Connect Four") \
-       MINIGAME(qto, "Quinto") \
-       MINIGAME(ps,  "Peg Solitaire") \
-       MINIGAME(pp,  "Push-Pull") \
-       /*empty line*/
+#include "snake.qc"
 
 /**
  * Set up automatic entity read/write functionality
index 31388d0f38a3b6457868fd3609e6cf77967f676b..98020972a742ee5a59e4eef24e69a7a483f6e69c 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(c4, "Connect Four");
+
 const float C4_TURN_PLACE = 0x0100; // player has to place a piece on the board
 const float C4_TURN_WIN   = 0x0200; // player has won
 const float C4_TURN_DRAW  = 0x0400; // no moves are possible
index 2bd4a4267fa22484af7dd6549711105b723272d6..1e4da05075ad20c76b11587a69f4a2e5b3105782 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(nmm, "Nine Men's Morris");
+
 const int NMM_TURN_PLACE = 0x0100; // player has to place a piece on the board
 const int NMM_TURN_MOVE  = 0x0200; // player has to move a piece by one tile
 const int NMM_TURN_FLY   = 0x0400; // player has to move a piece anywhere
index e295c7cd64ec867ac56af8813d0517262feb0fb8..540f7ecf2f1d506b30a28e98f045c3783f9c4e0e 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(pong, "Pong");
+
 // minigame flags
 const int PONG_STATUS_WAIT = 0x0010; // waiting for players to join
 const int PONG_STATUS_PLAY = 0x0020; // playing
index 01b257a82a94b4a17cbf9fdc763bcc2e03f1b5cf..efce0e66b6be5030a96beb0446cdd2c3378a4b66 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(pp, "Push-Pull");
+
 const int PP_TURN_PLACE = 0x0100; // player has to place a piece on the board
 const int PP_TURN_WIN   = 0x0200; // player has won
 const int PP_TURN_DRAW  = 0x0400; // players have equal scores
index 2b8de29920a416d687298b036769c2313de8141e..54be75cd46f51ba2c62756d99ec8716cb6764fd0 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(ps, "Peg Solitaire");
+
 const float PS_TURN_MOVE  = 0x0100; // player has to click on a piece on the board
 const float PS_TURN_WIN   = 0x0200; // player has won
 const float PS_TURN_DRAW  = 0x0400; // player can make no more moves
diff --git a/qcsrc/common/minigames/minigame/qto.qc b/qcsrc/common/minigames/minigame/qto.qc
deleted file mode 100644 (file)
index 76fa3ce..0000000
+++ /dev/null
@@ -1,461 +0,0 @@
-const float QTO_TURN_MOVE  = 0x0100; // player has to click on a piece on the board
-const float QTO_TURN_WIN   = 0x0200; // player has won
-const float QTO_TURN_TYPE  = 0x0f00; // turn type mask
-
-const int QTO_SF_PLAYERSCORE = MINIG_SF_CUSTOM;
-
-const int QTO_LET_CNT = 5;
-const int QTO_NUM_CNT = 5;
-
-const int QTO_TILE_SIZE = 8;
-
-.int qto_moves;
-
-// find same game piece given its tile name
-entity qto_find_piece(entity minig, string tile)
-{
-       entity e = world;
-       while ( ( e = findentity(e,owner,minig) ) )
-               if ( e.classname == "minigame_board_piece" && e.netname == tile )
-                       return e;
-       return world;
-}
-
-// Checks if the given piece completes a row
-bool qto_winning_piece(entity minigame)
-{
-       //int number = minigame_tile_number(piece.netname);
-       //int letter = minigame_tile_letter(piece.netname);
-
-       entity e = world;
-       while ( ( e = findentity(e,owner,minigame) ) )
-               if ( e.classname == "minigame_board_piece" )
-               {
-                       if(!e.cnt)
-                               return false;
-               }
-
-       return true;
-}
-
-// check if the tile name is valid (5x5 grid)
-bool qto_valid_tile(string tile)
-{
-       if ( !tile )
-               return false;
-       float number = minigame_tile_number(tile);
-       float letter = minigame_tile_letter(tile);
-       return 0 <= number && number < QTO_NUM_CNT && 0 <= letter && letter < QTO_LET_CNT;
-}
-
-void qto_setup_pieces(entity minigame)
-{
-       int i, t;
-       for(i = 0; i < QTO_NUM_CNT; ++i)
-       for(t = 0; t < QTO_LET_CNT; ++t)
-       {
-               entity piece = msle_spawn(minigame,"minigame_board_piece");
-               piece.team = 1; // init default team?
-               piece.cnt = 0; // initialize cnt
-               piece.netname = strzone(minigame_tile_buildname(t,i));
-               minigame_server_sendflags(piece,MINIG_SF_ALL);
-       }
-
-       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
-}
-
-void qto_add_score(entity minigame, int thescore)
-{
-#ifdef SVQC
-       if(!minigame)
-               return;
-       if(minigame.minigame_players)
-       {
-               minigame.minigame_players.qto_moves += thescore;
-               minigame.minigame_players.SendFlags |= QTO_SF_PLAYERSCORE;
-       }
-#endif
-}
-
-// make a move
-void qto_move(entity minigame, entity player, string pos )
-{
-       if ( minigame.minigame_flags & QTO_TURN_MOVE )
-       if ( pos )
-       {
-               if ( qto_valid_tile(pos) )
-               if ( qto_find_piece(minigame, pos) )
-               {
-                       entity piece;
-               #define DO_JUNK \
-                       if(piece) \
-                       { \
-                               piece.cnt = (piece.cnt) ? 0 : 1; \
-                               minigame_server_sendflags(piece,MINIG_SF_UPDATE); \
-                       }
-
-                       int number = minigame_tile_number(pos);
-                       int letter = minigame_tile_letter(pos);
-                       piece = qto_find_piece(minigame, pos);
-                       DO_JUNK
-                       piece = qto_find_piece(minigame, minigame_tile_buildname(letter-1,number));
-                       DO_JUNK
-                       piece = qto_find_piece(minigame, minigame_tile_buildname(letter+1,number));
-                       DO_JUNK
-                       piece = qto_find_piece(minigame, minigame_tile_buildname(letter,number-1));
-                       DO_JUNK
-                       piece = qto_find_piece(minigame, minigame_tile_buildname(letter,number+1));
-                       DO_JUNK
-
-                       qto_add_score(minigame,1); // add 1 move score
-
-                       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
-
-                       if ( qto_winning_piece(minigame) )
-                       {
-                               minigame.minigame_flags = QTO_TURN_WIN;
-                       }
-                       else
-                               minigame.minigame_flags = QTO_TURN_MOVE;
-               }
-       }
-}
-
-// restart match
-void qto_restart_match(entity minigame, entity player)
-{
-       minigame.minigame_flags = QTO_TURN_MOVE;
-       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
-       entity e = world;
-       while ( ( e = findentity(e,owner,minigame) ) )
-               if ( e.classname == "minigame_board_piece" )
-                       remove(e);
-
-       qto_setup_pieces(minigame);
-#ifdef SVQC
-       if(minigame.minigame_players)
-       {
-               minigame.minigame_players.qto_moves = 0;
-               minigame.minigame_players.SendFlags |= QTO_SF_PLAYERSCORE;
-       }
-#endif
-}
-
-#ifdef SVQC
-
-
-// required function, handle server side events
-int qto_server_event(entity minigame, string event, ...)
-{
-       switch(event)
-       {
-               case "start":
-               {
-                       qto_setup_pieces(minigame);
-                       minigame.minigame_flags = QTO_TURN_MOVE;
-                       return true;
-               }
-               case "end":
-               {
-                       entity e = world;
-                       while( (e = findentity(e, owner, minigame)) )
-                       if(e.classname == "minigame_board_piece")
-                       {
-                               if(e.netname) { strunzone(e.netname); }
-                               remove(e);
-                       }
-                       return false;
-               }
-               case "join":
-               {
-                       int pl_num = minigame_count_players(minigame);
-
-                       // Don't allow more than 1 player
-                       if(pl_num >= 1) { return false; }
-
-                       // Team 1 by default
-                       return 1;
-               }
-               case "cmd":
-               {
-                       switch(argv(0))
-                       {
-                               case "move":
-                                       qto_move(minigame, ...(0,entity), ...(1,int) == 2 ? argv(1) : string_null );
-                                       return true;
-                               case "restart":
-                                       qto_restart_match(minigame,...(0,entity));
-                                       return true;
-                       }
-
-                       return false;
-               }
-               case "network_send":
-               {
-                       entity sent = ...(0,entity);
-                       int sf = ...(1,int);
-                       if ( sent.classname == "minigame_board_piece" && (sf & MINIG_SF_UPDATE) )
-                       {
-                               WriteByte(MSG_ENTITY,sent.cnt);
-                       }
-                       else if ( sent.classname == "minigame_player" && (sf & QTO_SF_PLAYERSCORE ) )
-                       {
-                               WriteLong(MSG_ENTITY,sent.qto_moves);
-                       }
-                       return false;
-               }
-       }
-
-       return false;
-}
-
-
-#elif defined(CSQC)
-
-string qto_curr_pos; // identifier of the tile under the mouse
-vector qto_boardpos; // HUD board position
-vector qto_boardsize;// HUD board size
-
-// Required function, draw the game board
-void qto_hud_board(vector pos, vector mySize)
-{
-       minigame_hud_fitsqare(pos, mySize);
-       qto_boardpos = pos;
-       qto_boardsize = mySize;
-
-       minigame_hud_simpleboard(pos,mySize,minigame_texture("qto/board"));
-
-       vector tile_size = minigame_hud_denormalize_size('1 1 0' / QTO_TILE_SIZE,pos,mySize);
-       vector tile_pos;
-
-       bool valid = qto_valid_tile(qto_curr_pos);
-       int number = minigame_tile_number(qto_curr_pos);
-       int letter = minigame_tile_letter(qto_curr_pos);
-       string pos1 = minigame_tile_buildname(letter-1,number);
-       string pos2 = minigame_tile_buildname(letter+1,number);
-       string pos3 = minigame_tile_buildname(letter,number-1);
-       string pos4 = minigame_tile_buildname(letter,number+1);
-
-       entity e;
-       FOREACH_MINIGAME_ENTITY(e)
-       {
-               if ( e.classname == "minigame_board_piece" )
-               {
-                       tile_pos = minigame_tile_pos(e.netname,QTO_NUM_CNT,QTO_LET_CNT);
-                       tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize);
-
-                       vector tile_color = '0.4 0.4 0.4';
-
-                       if(valid)
-                       switch(e.netname)
-                       {
-                               case qto_curr_pos:
-                               case pos1: case pos2: case pos3: case pos4:
-                                       tile_color = '0.8 0.8 0.8';
-                                       break;
-                       }
-
-                       minigame_drawpic_centered( tile_pos,
-                                       minigame_texture(strcat("qto/piece", ftos(e.cnt))),
-                                       tile_size, tile_color, panel_fg_alpha, DRAWFLAG_NORMAL );
-               }
-       }
-}
-
-
-// Required function, draw the game status panel
-void qto_hud_status(vector pos, vector mySize)
-{
-       HUD_Panel_DrawBg(1);
-       vector ts;
-       ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message,
-               hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5);
-
-       pos_y += ts_y;
-       mySize_y -= ts_y;
-
-       vector player_fontsize = hud_fontsize * 1.75;
-       ts_y = ( mySize_y - 2*player_fontsize_y ) / 2;
-       ts_x = mySize_x;
-       vector mypos;
-       vector tile_size = '48 48 0';
-
-       mypos = pos;
-       drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE);
-       mypos_y += player_fontsize_y;
-       drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE);
-
-       entity e;
-       FOREACH_MINIGAME_ENTITY(e)
-       {
-               if ( e.classname == "minigame_player" )
-               {
-                       mypos = pos;
-                       minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
-                               GetPlayerName(e.minigame_playerslot-1),
-                               player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
-
-                       mypos_y += player_fontsize_y;
-                       //drawpic( mypos,
-                       //              minigame_texture("qto/piece"),
-                       //              tile_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL );
-
-                       //mypos_x += tile_size_x;
-
-                       drawstring(mypos,sprintf(_("Moves: %s"), ftos(e.qto_moves)),'32 32 0',
-                                          '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL);
-               }
-       }
-}
-
-// Turn a set of flags into a help message
-string qto_turn_to_string(int turnflags)
-{
-       if ( turnflags & QTO_TURN_WIN )
-               return _("Well done, you win!");
-
-       if ( turnflags & QTO_TURN_MOVE )
-               return _("Turn all the angry faces into happy faces");
-
-       return "";
-}
-
-// Make the correct move
-void qto_make_move(entity minigame)
-{
-       if ( minigame.minigame_flags == QTO_TURN_MOVE )
-       {
-               minigame_cmd("move ",qto_curr_pos);
-       }
-}
-
-void qto_set_curr_pos(string s)
-{
-       if ( qto_curr_pos )
-               strunzone(qto_curr_pos);
-       if ( s )
-               s = strzone(s);
-       qto_curr_pos = s;
-}
-
-// Required function, handle client events
-int qto_client_event(entity minigame, string event, ...)
-{
-       switch(event)
-       {
-               case "activate":
-               {
-                       qto_set_curr_pos("");
-                       minigame.message = qto_turn_to_string(minigame.minigame_flags);
-                       return false;
-               }
-               case "key_pressed":
-               {
-                       //if((minigame.minigame_flags & QTO_TURN_TEAM) == minigame_self.team)
-                       {
-                               switch ( ...(0,int) )
-                               {
-                                       case K_RIGHTARROW:
-                                       case K_KP_RIGHTARROW:
-                                               if ( ! qto_curr_pos )
-                                                       qto_set_curr_pos("a3");
-                                               else
-                                                       qto_set_curr_pos( minigame_relative_tile(qto_curr_pos,1,0,QTO_NUM_CNT,QTO_LET_CNT));
-                                               return true;
-                                       case K_LEFTARROW:
-                                       case K_KP_LEFTARROW:
-                                               if ( ! qto_curr_pos )
-                                                       qto_set_curr_pos("c3");
-                                               else
-                                                       qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,-1,0,QTO_NUM_CNT,QTO_LET_CNT));
-                                               return true;
-                                       case K_UPARROW:
-                                       case K_KP_UPARROW:
-                                               if ( ! qto_curr_pos )
-                                                       qto_set_curr_pos("a1");
-                                               else
-                                                       qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,0,1,QTO_NUM_CNT,QTO_LET_CNT));
-                                               return true;
-                                       case K_DOWNARROW:
-                                       case K_KP_DOWNARROW:
-                                               if ( ! qto_curr_pos )
-                                                       qto_set_curr_pos("a3");
-                                               else
-                                                       qto_set_curr_pos(minigame_relative_tile(qto_curr_pos,0,-1,QTO_NUM_CNT,QTO_LET_CNT));
-                                               return true;
-                                       case K_ENTER:
-                                       case K_KP_ENTER:
-                                       case K_SPACE:
-                                               qto_make_move(minigame);
-                                               return true;
-                               }
-                       }
-
-                       return false;
-               }
-               case "mouse_pressed":
-               {
-                       if(...(0,int) == K_MOUSE1)
-                       {
-                               qto_make_move(minigame);
-                               return true;
-                       }
-
-                       return false;
-               }
-               case "mouse_moved":
-               {
-                       vector mouse_pos = minigame_hud_normalize(mousepos,qto_boardpos,qto_boardsize);
-                       if ( minigame.minigame_flags == QTO_TURN_MOVE )
-                       {
-                               qto_set_curr_pos(minigame_tile_name(mouse_pos,QTO_NUM_CNT,QTO_LET_CNT));
-                       }
-                       if ( ! qto_valid_tile(qto_curr_pos) )
-                               qto_set_curr_pos("");
-
-                       return true;
-               }
-               case "network_receive":
-               {
-                       entity sent = ...(0,entity);
-                       int sf = ...(1,int);
-                       if ( sent.classname == "minigame" )
-                       {
-                               if ( sf & MINIG_SF_UPDATE )
-                               {
-                                       sent.message = qto_turn_to_string(sent.minigame_flags);
-                                       if ( sent.minigame_flags & minigame_self.team )
-                                               minigame_prompt();
-                               }
-                       }
-                       else if(sent.classname == "minigame_board_piece")
-                       {
-                               if(sf & MINIG_SF_UPDATE)
-                               {
-                                       sent.cnt = ReadByte();
-                               }
-                       }
-                       else if ( sent.classname == "minigame_player" && (sf & QTO_SF_PLAYERSCORE ) )
-                       {
-                               sent.qto_moves = ReadLong();
-                       }
-
-                       return false;
-               }
-               case "menu_show":
-               {
-                       HUD_MinigameMenu_CustomEntry(...(0,entity),_("Restart"),"restart");
-                       return false;
-               }
-               case "menu_click":
-               {
-                       if(...(0,string) == "restart")
-                               minigame_cmd("restart");
-                       return false;
-               }
-       }
-
-       return false;
-}
-
-#endif
diff --git a/qcsrc/common/minigames/minigame/snake.qc b/qcsrc/common/minigames/minigame/snake.qc
new file mode 100644 (file)
index 0000000..c7bf6ae
--- /dev/null
@@ -0,0 +1,621 @@
+REGISTER_MINIGAME(snake, "Snake");
+
+const float SNAKE_TURN_MOVE  = 0x0100; // the snake is moving, player must control it
+const float SNAKE_TURN_LOSS  = 0x0200; // they did it?!
+const float SNAKE_TURN_WAIT  = 0x0400; // the snake is waiting for the player to make their first move and begin the game
+const float SNAKE_TURN_TYPE  = 0x0f00; // turn type mask
+
+const int SNAKE_SF_PLAYERSCORE = MINIG_SF_CUSTOM;
+
+const int SNAKE_LET_CNT = 15;
+const int SNAKE_NUM_CNT = 15;
+
+const int SNAKE_TILE_SIZE = 15;
+
+bool autocvar_sv_minigames_snake_wrap = false;
+float autocvar_sv_minigames_snake_delay_initial = 0.7;
+float autocvar_sv_minigames_snake_delay_multiplier = 50;
+float autocvar_sv_minigames_snake_delay_min = 0.1;
+
+.int snake_score;
+.entity snake_head;
+
+.float snake_delay;
+.float snake_nextmove;
+.vector snake_dir;
+
+// find same game piece given its tile name
+entity snake_find_piece(entity minig, string tile)
+{
+       entity e = world;
+       while ( ( e = findentity(e,owner,minig) ) )
+               if ( e.classname == "minigame_board_piece" && e.netname == tile )
+                       return e;
+       return world;
+}
+
+// find same game piece given its cnt
+entity snake_find_cnt(entity minig, int tile)
+{
+       entity e = world;
+       while ( ( e = findentity(e,owner,minig) ) )
+               if ( e.classname == "minigame_board_piece" && e.cnt == tile )
+                       return e;
+       return world;
+}
+
+// check if the tile name is valid (15x15 grid)
+bool snake_valid_tile(string tile)
+{
+       if ( !tile )
+               return false;
+       int number = minigame_tile_number(tile);
+       int letter = minigame_tile_letter(tile);
+       return 0 <= number && number < SNAKE_NUM_CNT && 0 <= letter && letter < SNAKE_LET_CNT;
+}
+
+void snake_new_mouse(entity minigame)
+{
+       RandomSelection_Init();
+       int i, j;
+       for(i = 0; i < SNAKE_LET_CNT; ++i)
+       for(j = 0; j < SNAKE_NUM_CNT; ++j)
+       {
+               string pos = minigame_tile_buildname(i, j);
+               if(!snake_find_piece(minigame, pos))
+                       RandomSelection_Add(world, 0, pos, 1, 1);
+       }
+
+       entity piece = msle_spawn(minigame,"minigame_board_piece");
+       piece.team = 1;
+       piece.netname = strzone(RandomSelection_chosen_string);
+       minigame_server_sendflags(piece,MINIG_SF_ALL);
+
+       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
+}
+
+void snake_setup_pieces(entity minigame)
+{
+       int targnum = bound(1, floor(random() * SNAKE_NUM_CNT), SNAKE_NUM_CNT - 1);
+       int targlet = bound(1, floor(random() * SNAKE_LET_CNT), SNAKE_LET_CNT - 1);
+
+       entity piece = msle_spawn(minigame,"minigame_board_piece");
+       piece.team = 1; // init default team?
+       piece.netname = strzone(minigame_tile_buildname(targlet,targnum));
+       piece.cnt = 1;
+       minigame_server_sendflags(piece,MINIG_SF_ALL);
+
+       minigame.snake_head = piece;
+
+       snake_new_mouse(minigame);
+
+       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
+}
+
+void snake_add_score(entity minigame, int thescore)
+{
+#ifdef SVQC
+       if(!minigame)
+               return;
+       if(minigame.minigame_players)
+       {
+               minigame.minigame_players.snake_score += thescore;
+               minigame.minigame_players.SendFlags |= SNAKE_SF_PLAYERSCORE;
+       }
+#endif
+}
+
+void snake_move_body(entity minigame, bool ate_mouse)
+{
+       entity tail = world;
+       string tailpos = string_null;
+       vector taildir = '0 0 0';
+
+       int i, pieces = 0;
+       for(i = (SNAKE_NUM_CNT * SNAKE_LET_CNT); i >= 2; --i)
+       {
+               entity piece = snake_find_cnt(minigame, i);
+               entity nextpiece = snake_find_cnt(minigame, i - 1);
+               if(!piece)
+                       continue;
+
+               pieces++;
+
+               if(!tail)
+               {
+                       tail = piece;
+                       tailpos = piece.netname;
+                       taildir = piece.snake_dir;
+               }
+
+               if(piece.netname) { strunzone(piece.netname); }
+               piece.netname = strzone(nextpiece.netname);
+               piece.snake_dir = nextpiece.snake_dir;
+               minigame_server_sendflags(piece, MINIG_SF_ALL);
+       }
+
+       // just a head
+       if(!pieces)
+       {
+               tail = minigame.snake_head;
+               tailpos = minigame.snake_head.netname;
+               taildir = minigame.snake_head.snake_dir;
+       }
+
+       if(tail && ate_mouse)
+       {
+               int newcnt = tail.cnt + 1;
+               minigame.snake_delay = max(autocvar_sv_minigames_snake_delay_min, autocvar_sv_minigames_snake_delay_initial - (newcnt / autocvar_sv_minigames_snake_delay_multiplier));
+               snake_add_score(minigame, 1);
+
+               entity piece = msle_spawn(minigame,"minigame_board_piece");
+               piece.cnt = newcnt;
+               piece.team = 1;
+               piece.snake_dir = taildir;
+               piece.netname = strzone(tailpos);
+               minigame_server_sendflags(piece,MINIG_SF_ALL);
+
+               minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
+       }
+}
+
+void snake_move_head(entity minigame)
+{
+       entity head = minigame.snake_head;
+       string newpos;
+
+       if(autocvar_sv_minigames_snake_wrap)
+               newpos = minigame_relative_tile(head.netname, minigame.snake_dir_x, minigame.snake_dir_y, SNAKE_NUM_CNT, SNAKE_LET_CNT);
+       else
+       {
+               int myx = minigame_tile_letter(head.netname);
+               int myy = minigame_tile_number(head.netname);
+
+               myx += minigame.snake_dir_x;
+               myy += minigame.snake_dir_y;
+
+               newpos = minigame_tile_buildname(myx, myy);
+       }
+
+       if(!snake_valid_tile(newpos) || (snake_find_piece(minigame, newpos)).cnt)
+       {
+               minigame.minigame_flags = SNAKE_TURN_LOSS;
+               minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
+               return;
+       }
+
+       bool ate_mouse = false;
+       entity piece = snake_find_piece(minigame, newpos);
+       if(piece && !piece.cnt)
+               ate_mouse = true;
+
+       // move the body first, then set the new head position?
+       snake_move_body(minigame, ate_mouse);
+
+       if(ate_mouse)
+       {
+               if(piece.netname) { strunzone(piece.netname); }
+               remove(piece);
+
+               snake_new_mouse(minigame);
+       }
+
+       if(head.netname) { strunzone(head.netname); }
+       head.netname = strzone(newpos);
+       minigame_server_sendflags(head,MINIG_SF_ALL);
+}
+
+// make a move
+void snake_move(entity minigame, entity player, string dxs, string dys )
+{
+       if ( (minigame.minigame_flags & SNAKE_TURN_MOVE) || (minigame.minigame_flags & SNAKE_TURN_WAIT) )
+       if ( dxs || dys )
+       {
+               //if ( snake_valid_tile(pos) )
+               //if ( snake_find_piece(minigame, pos) )
+               {
+                       int dx = ((dxs) ? bound(-1, stof(dxs), 1) : 0);
+                       int dy = ((dys) ? bound(-1, stof(dys), 1) : 0);
+
+                       int myl = minigame_tile_letter(minigame.snake_head.netname);
+                       int myn = minigame_tile_number(minigame.snake_head.netname);
+
+                       entity head = snake_find_piece(minigame, minigame_tile_buildname(myl + dx, myn + dy));
+                       if(head && head.cnt == 2)
+                               return; // nope!
+
+                       if(minigame.minigame_flags & SNAKE_TURN_WAIT)
+                               minigame.snake_nextmove = time;
+                       minigame.minigame_flags = SNAKE_TURN_MOVE;
+                       minigame.snake_dir_x = dx;
+                       minigame.snake_dir_y = dy;
+                       minigame.snake_dir_z = 0;
+                       minigame.snake_head.snake_dir = minigame.snake_dir;
+                       minigame_server_sendflags(minigame.snake_head,MINIG_SF_UPDATE);
+                       minigame_server_sendflags(minigame,MINIG_SF_UPDATE);
+               }
+       }
+}
+
+#ifdef SVQC
+
+
+// required function, handle server side events
+int snake_server_event(entity minigame, string event, ...)
+{
+       switch(event)
+       {
+               case "start":
+               {
+                       snake_setup_pieces(minigame);
+                       minigame.snake_delay = autocvar_sv_minigames_snake_delay_initial;
+                       minigame.minigame_flags = SNAKE_TURN_WAIT;
+                       return true;
+               }
+               case "end":
+               {
+                       entity e = world;
+                       while( (e = findentity(e, owner, minigame)) )
+                       if(e.classname == "minigame_board_piece")
+                       {
+                               if(e.netname) { strunzone(e.netname); }
+                               remove(e);
+                       }
+                       minigame.snake_head = world;
+                       return false;
+               }
+               case "join":
+               {
+                       int pl_num = minigame_count_players(minigame);
+
+                       // Don't allow more than 1 player
+                       // not sure if this should be a multiplayer game (might get crazy)
+                       if(pl_num >= 1) { return false; }
+
+                       // Team 1 by default
+                       return 1;
+               }
+               case "frame":
+               {
+                       if(minigame.minigame_flags & SNAKE_TURN_MOVE)
+                       if(time >= minigame.snake_nextmove)
+                       {
+                               snake_move_head(minigame);
+                               minigame.snake_nextmove = time + minigame.snake_delay;
+                       }
+                       return false;
+               }
+               case "cmd":
+               {
+                       switch(argv(0))
+                       {
+                               case "move": 
+                                       snake_move(minigame, ...(0,entity), ((...(1,int)) >= 2 ? argv(1) : string_null), ((...(1,int)) == 3 ? argv(2) : string_null)); 
+                                       return true;
+                       }
+
+                       return false;
+               }
+               case "network_send":
+               {
+                       entity sent = ...(0,entity);
+                       int sf = ...(1,int);
+                       if ( sent.classname == "minigame_board_piece" && (sf & MINIG_SF_UPDATE) )
+                       {
+                               WriteByte(MSG_ENTITY,sent.cnt);
+                               WriteCoord(MSG_ENTITY,sent.snake_dir_x);
+                               WriteCoord(MSG_ENTITY,sent.snake_dir_y);
+                       }
+                       else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) )
+                       {
+                               WriteLong(MSG_ENTITY,sent.snake_score);
+                       }
+                       else if ( sent.classname == "minigame" && (sf & MINIG_SF_UPDATE ) )
+                       {
+                               WriteByte(MSG_ENTITY,autocvar_sv_minigames_snake_wrap);
+                       }
+                       return false;
+               }
+       }
+       
+       return false;
+}
+
+
+#elif defined(CSQC)
+
+vector snake_boardpos; // HUD board position
+vector snake_boardsize;// HUD board size
+
+bool snake_wrap;
+
+// Required function, draw the game board
+void snake_hud_board(vector pos, vector mySize)
+{
+       minigame_hud_fitsqare(pos, mySize);
+       snake_boardpos = pos;
+       snake_boardsize = mySize;
+       
+       minigame_hud_simpleboard(pos,mySize,minigame_texture("snake/board"));
+
+       vector tile_size = minigame_hud_denormalize_size('1 1 0' / SNAKE_TILE_SIZE,pos,mySize);
+       vector tile_pos;
+
+       entity tail = world;
+       int i;
+       for(i = (SNAKE_NUM_CNT * SNAKE_LET_CNT); i >= 2; --i)
+       {
+               entity piece = snake_find_cnt(active_minigame, i);
+               if(piece)
+               {
+                       tail = piece;
+                       break;
+               }
+       }
+
+       entity e;
+       FOREACH_MINIGAME_ENTITY(e)
+       {
+               if ( e.classname == "minigame_board_piece" )
+               {
+                       tile_pos = minigame_tile_pos(e.netname,SNAKE_NUM_CNT,SNAKE_LET_CNT);
+                       tile_pos = minigame_hud_denormalize(tile_pos,pos,mySize);
+                       string thepiece = "snake/mouse";
+                       if(e.cnt)
+                               thepiece = "snake/body";
+                       if(tail && e.cnt == tail.cnt)
+                               thepiece = "snake/tail";
+                       if(e.cnt == 1)
+                       {
+                               int dx = minigame_tile_letter(e.netname) + e.snake_dir_x * 2;
+                               int dy = minigame_tile_number(e.netname) + e.snake_dir_y * 2;
+                               entity mouse = snake_find_piece(active_minigame, minigame_tile_buildname(dx, dy));
+                               thepiece = "snake/head";
+                               if(mouse && !mouse.cnt)
+                               {
+                                       float myang = 0;
+                                       int myx = minigame_tile_letter(e.netname);
+                                       int myy = minigame_tile_number(e.netname);
+                                       if(myx - 2 == dx)
+                                               myang = M_PI*3/2;
+                                       if(myx + 2 == dx)
+                                               myang = M_PI/2;
+                                       if(myy - 2 == dy)
+                                               myang = M_PI;
+
+                                       int newx = minigame_tile_letter(e.netname) + e.snake_dir_x;
+                                       int newy = minigame_tile_number(e.netname) + e.snake_dir_y;
+                                       string newpos = minigame_tile_buildname(newx, newy);
+
+                                       vector my_pos = minigame_tile_pos(newpos,SNAKE_NUM_CNT,SNAKE_LET_CNT);
+                                       my_pos = minigame_hud_denormalize(my_pos,pos,mySize);
+
+                                       drawrotpic(my_pos, myang, minigame_texture("snake/tongue"),
+                                                       tile_size, tile_size/2, '1 1 1',
+                                                       panel_fg_alpha, DRAWFLAG_NORMAL );
+                               }
+                       }
+
+                       if(e.cnt == 1 || e.cnt == tail.cnt)
+                       {
+                               vector thedir = e.snake_dir;
+                               float theang = 0;
+                               if(e.cnt == tail.cnt)
+                               {
+                                       int thex = minigame_tile_letter(e.netname);
+                                       int they = minigame_tile_number(e.netname);
+                                       entity t = snake_find_cnt(active_minigame, e.cnt - 1);
+                                       int tx = minigame_tile_letter(t.netname);
+                                       int ty = minigame_tile_number(t.netname);
+
+                                       if(thex - 1 == tx)
+                                       {
+                                               thedir_y = 0;
+                                               thedir_x = -1;
+                                       }
+                                       if(they + 1 == ty)
+                                       {
+                                               thedir_x = 0;
+                                               thedir_y = 1;
+                                       }
+                                       if(they - 1 == ty)
+                                       {
+                                               thedir_x = 0;
+                                               thedir_y = -1;
+                                       }
+                               }
+
+                               if(thedir_y == -1)
+                                       theang = M_PI;
+                               if(thedir_x == 1)
+                                       theang = M_PI/2;
+                               if(thedir_x == -1)
+                                       theang = M_PI*3/2;
+
+                               drawrotpic(tile_pos, theang, minigame_texture(thepiece),
+                                                       tile_size, tile_size/2, '1 1 1',
+                                                       panel_fg_alpha, DRAWFLAG_NORMAL );
+                       }
+                       else
+                       {
+                               minigame_drawpic_centered( tile_pos,  
+                                               minigame_texture(thepiece),
+                                               tile_size, '1 1 1', panel_fg_alpha, DRAWFLAG_NORMAL );
+                       }
+               }
+       }
+
+       if ( active_minigame.minigame_flags & SNAKE_TURN_LOSS )
+       {
+               int scores = 0;
+               FOREACH_MINIGAME_ENTITY(e)
+                       if(e.classname == "minigame_player")
+                               scores = e.snake_score;
+
+               vector winfs = hud_fontsize*2;
+               string scores_text;
+               scores_text = strcat("Score: ", ftos(scores));
+               
+               vector win_pos = pos+eY*(mySize_y-winfs_y)/2;
+               vector win_sz;
+               win_sz = minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
+                       sprintf("Game over! %s", scores_text), 
+                       winfs, 0, DRAWFLAG_NORMAL, 0.5);
+               
+               drawfill(win_pos-eY*hud_fontsize_y,win_sz+2*eY*hud_fontsize_y,'0.3 0.3 1',0.8,DRAWFLAG_ADDITIVE);
+               
+               minigame_drawcolorcodedstring_wrapped(mySize_x,win_pos,
+                       sprintf("Game over! %s", scores_text), 
+                       winfs, panel_fg_alpha, DRAWFLAG_NORMAL, 0.5);
+       }
+}
+
+
+// Required function, draw the game status panel
+void snake_hud_status(vector pos, vector mySize)
+{
+       HUD_Panel_DrawBg(1);
+       vector ts;
+       ts = minigame_drawstring_wrapped(mySize_x,pos,active_minigame.descriptor.message,
+               hud_fontsize * 2, '0.25 0.47 0.72', panel_fg_alpha, DRAWFLAG_NORMAL,0.5);
+       
+       pos_y += ts_y;
+       mySize_y -= ts_y;
+       
+       vector player_fontsize = hud_fontsize * 1.75;
+       ts_y = ( mySize_y - 2*player_fontsize_y ) / 2;
+       ts_x = mySize_x;
+       vector mypos;
+       vector tile_size = '48 48 0';
+
+       mypos = pos;
+       drawfill(mypos,eX*mySize_x+eY*player_fontsize_y,'1 1 1',0.5,DRAWFLAG_ADDITIVE);
+       mypos_y += player_fontsize_y;
+       drawfill(mypos,eX*mySize_x+eY*tile_size_y,'1 1 1',0.25,DRAWFLAG_ADDITIVE);
+
+       entity e;
+       FOREACH_MINIGAME_ENTITY(e)
+       {
+               if ( e.classname == "minigame_player" )
+               {
+                       mypos = pos;
+                       minigame_drawcolorcodedstring_trunc(mySize_x,mypos,
+                               GetPlayerName(e.minigame_playerslot-1),
+                               player_fontsize, panel_fg_alpha, DRAWFLAG_NORMAL);
+                       
+                       mypos_y += player_fontsize_y;
+                       //drawpic( mypos,  
+                       //              minigame_texture("snake/piece"),
+                       //              tile_size, '1 0 0', panel_fg_alpha, DRAWFLAG_NORMAL );
+                       
+                       //mypos_x += tile_size_x;
+
+                       drawstring(mypos,ftos(e.snake_score),tile_size,
+                                          '0.7 0.84 1', panel_fg_alpha, DRAWFLAG_NORMAL);
+               }
+       }
+}
+
+// Turn a set of flags into a help message
+string snake_turn_to_string(int turnflags)
+{
+       if ( turnflags & SNAKE_TURN_LOSS )
+               return _("Game over!");
+       
+       if ( turnflags & SNAKE_TURN_WAIT )
+               return _("Press an arrow key to begin the game");
+
+       if ( turnflags & SNAKE_TURN_MOVE )
+               if(snake_wrap)
+                       return _("Avoid the snake's body, collect the mice!");
+               else
+                       return _("Avoid the screen edges and the snake's body, collect the mice!");
+       
+       return "";
+}
+
+// Make the correct move
+void snake_set_direction(entity minigame, int dx, int dy)
+{
+       //if ( minigame.minigame_flags == SNAKE_TURN_MOVE )
+       //{
+               minigame_cmd("move ",ftos(dx), " ", ftos(dy));
+       //}
+}
+
+// Required function, handle client events
+int snake_client_event(entity minigame, string event, ...)
+{
+       switch(event)
+       {
+               case "activate":
+               {
+                       minigame.message = snake_turn_to_string(minigame.minigame_flags);
+                       return false;
+               }
+               case "key_pressed":
+               {
+                       //if((minigame.minigame_flags & SNAKE_TURN_TEAM) == minigame_self.team)
+                       {
+                               switch ( ...(0,int) )
+                               {
+                                       case K_RIGHTARROW:
+                                       case K_KP_RIGHTARROW:
+                                               snake_set_direction(minigame, 1, 0);
+                                               return true;
+                                       case K_LEFTARROW:
+                                       case K_KP_LEFTARROW:
+                                               snake_set_direction(minigame, -1, 0);
+                                               return true;
+                                       case K_UPARROW:
+                                       case K_KP_UPARROW:
+                                               snake_set_direction(minigame, 0, 1);
+                                               return true;
+                                       case K_DOWNARROW:
+                                       case K_KP_DOWNARROW:
+                                               snake_set_direction(minigame, 0, -1);
+                                               return true;
+                               }
+                       }
+
+                       return false;
+               }
+               case "network_receive":
+               {
+                       entity sent = ...(0,entity);
+                       int sf = ...(1,int);
+                       if ( sent.classname == "minigame" )
+                       {
+                               if ( sf & MINIG_SF_UPDATE )
+                               {
+                                       snake_wrap = ReadByte();
+                                       sent.message = snake_turn_to_string(sent.minigame_flags);
+                                       //if ( sent.minigame_flags & minigame_self.team )
+                                               minigame_prompt();
+                               }
+                       }
+                       else if(sent.classname == "minigame_board_piece")
+                       {
+                               if(sf & MINIG_SF_UPDATE)
+                               {
+                                       sent.cnt = ReadByte();
+                                       sent.snake_dir_x = ReadCoord();
+                                       sent.snake_dir_y = ReadCoord();
+                                       sent.snake_dir_z = 0;
+                                       if(sent.cnt == 1)
+                                               minigame.snake_head = sent; // hax
+                               }
+                       }
+                       else if ( sent.classname == "minigame_player" && (sf & SNAKE_SF_PLAYERSCORE ) )
+                       {
+                               sent.snake_score = ReadLong();
+                       }
+
+                       return false;
+               }
+       }
+
+       return false;
+}
+
+#endif
\ No newline at end of file
index f2253c2a4b7c2da56fc7489a65b9829ac5389152..8c5005ed259f301e924a19c781ec2080db2e064a 100644 (file)
@@ -1,3 +1,5 @@
+REGISTER_MINIGAME(ttt, "Tic Tac Toe");
+
 const int TTT_TURN_PLACE = 0x0100; // player has to place a piece on the board
 const int TTT_TURN_WIN   = 0x0200; // player has won
 const int TTT_TURN_DRAW  = 0x0400; // no moves are possible
index c2392ae0e0a733bd154e56ca7bdb6cd1a7075ab5..6a24d37ad8033a17036e671a0e0de5dacc8dcadb 100644 (file)
@@ -2,10 +2,11 @@
 
 entity minigame_get_descriptor(string id)
 {
-       entity e;
-       for ( e = minigame_descriptors; e != world; e = e.list_next )
-               if ( e.netname == id )
-                       return e;
+       FOREACH(MINIGAMES, true, LAMBDA(
+       {
+               if(it.netname == id)
+                       return it;
+       }));
        return world;
 }
 
index 536ac5018753af104d1cbb34fc3300efcdc6a506..7425149f389d9b484c38d089ebef97c2b750f6df 100644 (file)
@@ -1,8 +1,6 @@
 #ifndef MINIGAMES_H
 #define MINIGAMES_H
 
-entity minigame_descriptors;
-
 // previous node in a doubly linked list
 .entity list_prev;
 // next node in a linked list
index 1bd9609dede6adfbe57056456d2da92779119485..36c54c18d6858a595a834ad7c726f9c0710eade2 100644 (file)
@@ -163,6 +163,14 @@ int minigame_addplayer(entity minigame_session, entity player)
        return mgteam;
 }
 
+void minigame_frame()
+{
+       entity minig = self;
+
+       minig.minigame_event(minig,"frame");
+       minig.nextthink = time;
+}
+
 entity start_minigame(entity player, string minigame )
 {
        if ( !autocvar_sv_minigames || !IS_REAL_CLIENT(player) )
@@ -175,6 +183,8 @@ entity start_minigame(entity player, string minigame )
                minig.classname = "minigame";
                minig.netname = strzone(strcat(e.netname,"_",ftos(num_for_edict(minig))));
                minig.descriptor = e;
+               minig.think = minigame_frame;
+               minig.nextthink = time;
                minig.minigame_event = e.minigame_event;
                minig.minigame_event(minig,"start");
                GameLogEcho(strcat(":minigame:start:",minig.netname));
@@ -263,25 +273,6 @@ void end_minigames()
        }
 }
 
-void initialize_minigames()
-{
-       entity last_minig = world;
-       entity minig;
-       #define MINIGAME(name,nicename) \
-               minig = spawn(); \
-               minig.classname = "minigame_descriptor"; \
-               minig.netname = #name; \
-               minig.message = nicename; \
-               minig.minigame_event = name##_server_event; \
-               if ( !last_minig ) minigame_descriptors = minig; \
-               else last_minig.list_next = minig; \
-               last_minig = minig;
-
-       REGISTERED_MINIGAMES
-
-       #undef MINIGAME
-}
-
 string invite_minigame(entity inviter, entity player)
 {
        if ( !inviter || !inviter.active_minigame )
@@ -359,9 +350,10 @@ void ClientCommand_minigame(int request, int argc, string command)
                }
                else if ( minig_cmd == "list" )
                {
-                       entity e;
-                       for ( e = minigame_descriptors; e != world; e = e.list_next )
-                               sprint(self,e.netname," (",e.message,") ","\n");
+                       FOREACH(MINIGAMES, true, LAMBDA(
+                       {
+                               sprint(self,it.netname," (",it.message,") ","\n");
+                       }));
                        return;
                }
                else if ( minig_cmd == "list-sessions" )
index 246440d39e5d0f84f03f06c0353033f03f5f4967..43b392f743a843caf5ecf26be5996be40a431536 100644 (file)
@@ -1,9 +1,6 @@
 #ifndef SV_MINIGAMES_H
 #define SV_MINIGAMES_H
 
-/// Initialize the minigame system
-void initialize_minigames();
-
 /// Create a new minigame session
 /// \return minigame session entity
 entity start_minigame(entity player, string minigame );
@@ -49,4 +46,20 @@ entity minigame_sessions;
 
 bool minigame_SendEntity(entity to, int sf);
 
+void RegisterMinigames();
+const int MINIGAMES_MAX = 24;
+entity MINIGAMES[MINIGAMES_MAX], MINIGAMES_first, MINIGAMES_last;
+int MINIGAMES_COUNT;
+#define REGISTER_MINIGAME(name,nicename) \
+    REGISTER(RegisterMinigames, MINIGAME, MINIGAMES, MINIGAMES_COUNT, name, m_id, spawn()); \
+    int name##_server_event(entity, string, ...); \
+    REGISTER_INIT_POST(MINIGAME, name) { \
+        this.classname = "minigame_descriptor"; \
+        this.netname = strzone(strtolower(#name)); \
+        this.message = nicename; \
+               this.minigame_event = name##_server_event; \
+    } \
+    REGISTER_INIT(MINIGAME, name)
+REGISTER_REGISTRY(RegisterMinigames)
+
 #endif
index c668959655db0c25c19b8214afafffb91cd62e19..0d17f43ab4ef1b9b1dbe5e28bc73db8c9f677c3b 100644 (file)
@@ -18,10 +18,7 @@ CLASS(Model, Object)
     }
     METHOD(Model, model_precache, void(entity this)) {
         string s = this.model_str();
-        int fh = fopen(s, FILE_READ);
-        if (fh >= 0) {
-            fclose(fh);
-        } else if (s && s != "" && s != "null") {
+        if (s != "" && s != "null" && !fexists(s)) {
             LOG_WARNINGF("Missing model: \"%s\"\n", s);
             return;
         }
index f30c62e21696150ff2267bcbb3030a640ef77cb8..433fed6830e23c050bb1a9aa69678cb4f420ba7a 100644 (file)
@@ -91,7 +91,7 @@ void M_Mage_Attack_Spike_Explode()
 {SELFPARAM();
        self.event_damage = func_null;
 
-       sound(self, CH_SHOTS, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
 
        self.realowner.mage_spike = world;
 
@@ -258,7 +258,7 @@ void M_Mage_Defend_Heal()
 
 void M_Mage_Attack_Push()
 {SELFPARAM();
-       sound(self, CH_SHOTS, W_Sound("tagexp1"), 1, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM);
        RadiusDamage (self, self, (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_damage), (autocvar_g_monster_mage_attack_push_radius), world, world, (autocvar_g_monster_mage_attack_push_force), DEATH_MONSTER_MAGE, self.enemy);
        Send_Effect(EFFECT_TE_EXPLOSION, self.origin, '0 0 0', 1);
 
@@ -422,8 +422,6 @@ bool M_Mage(int req)
                }
                case MR_PRECACHE:
                {
-                       precache_sound (W_Sound("grenade_impact"));
-                       precache_sound (W_Sound("tagexp1"));
                        return true;
                }
                #endif
index 3354d2f2007bc7d5a062b7ff2410cb7682a66284..fe6078303cb5cacd1b488e0bccb38d0b8f6e6490 100644 (file)
@@ -50,7 +50,7 @@ void M_Shambler_Attack_Smash()
 {SELFPARAM();
        makevectors(self.angles);
        Send_Effect(EFFECT_EXPLOSION_MEDIUM, (self.origin + (v_forward * 150)) - ('0 0 1' * self.maxs.z), '0 0 0', 1);
-       sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 
        // RadiusDamage does NOT support custom starting location, which means we must use this hack...
 
@@ -75,7 +75,7 @@ void M_Shambler_Attack_Lightning_Explode()
 {SELFPARAM();
        entity head;
 
-       sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM);
        Send_Effect(EFFECT_ELECTRO_IMPACT, '0 0 0', '0 0 0', 1);
 
        self.event_damage = func_null;
index f2bc7d789514f09e9e7f8ca4fd4770f316beb074..ba2b12695d8d9a2eb85273814b162cc161a6ac00 100644 (file)
@@ -63,7 +63,7 @@ void M_Spider_Attack_Web()
 {SELFPARAM();
        monster_makevectors(self.enemy);
 
-       sound(self, CH_SHOTS, W_Sound("electro_fire2"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_ELECTRO_FIRE2, VOL_BASE, ATTEN_NORM);
 
        entity proj = spawn ();
        proj.classname = "plasma";
@@ -176,7 +176,6 @@ bool M_Spider(int req)
                }
                case MR_PRECACHE:
                {
-                       precache_sound (W_Sound("electro_fire2"));
                        return true;
                }
                #endif
index 519a5322e02b0ca9a6235bd0893659477d99d7bc..af251215ba9d63e13e5cf8ee68689347ca0aa2c1 100644 (file)
@@ -118,7 +118,7 @@ bool Monster_ValidTarget(entity mon, entity player)
                makevectors (mon.angles);
                dot = normalize (player.origin - mon.origin) * v_forward;
 
-               if(dot <= 0.3) { return false; }
+               if(dot <= autocvar_g_monsters_target_infront_range) { return false; }
        }
 
        return true; // this target is valid!
@@ -1085,7 +1085,7 @@ void Monster_Damage(entity inflictor, entity attacker, float damage, int deathty
        self.dmg_time = time;
 
        if(sound_allowed(MSG_BROADCAST, attacker) && deathtype != DEATH_DROWN)
-               spamsound (self, CH_PAIN, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
+               spamsound (self, CH_PAIN, SND(BODYIMPACT1), VOL_BASE, ATTEN_NORM);  // FIXME: PLACEHOLDER
 
        self.velocity += force * self.damageforcescale;
 
index fedcf9fe571d6445a60fbc9ad10cffcce8844a25..7a05c85ea3b05071fdeb4fe14d8d2c443bd51cc3 100644 (file)
@@ -63,6 +63,19 @@ void Casing_Draw()
     }
 }
 
+SOUND(BRASS1, W_Sound("brass1"));
+SOUND(BRASS2, W_Sound("brass2"));
+SOUND(BRASS3, W_Sound("brass3"));
+Sound SND_BRASS_RANDOM() {
+    return SOUNDS[SND_BRASS1.m_id + floor(prandom() * 3)];
+}
+SOUND(CASINGS1, W_Sound("casings1"));
+SOUND(CASINGS2, W_Sound("casings2"));
+SOUND(CASINGS3, W_Sound("casings3"));
+Sound SND_CASINGS_RANDOM() {
+    return SOUNDS[SND_CASINGS1.m_id + floor(prandom() * 3)];
+}
+
 void Casing_Touch()
 {SELFPARAM();
     if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
@@ -78,16 +91,14 @@ void Casing_Touch()
         {
             if (time >= self.nextthink)
             {
-                string s;
-                int f = floor(prandom() * 3) + 1;
-
+                Sound s;
                 switch (self.state)
                 {
                     case 1:
-                        s = W_Sound(strcat("casings", itos(f)));
+                        s = SND_CASINGS_RANDOM();
                         break;
                     default:
-                        s = W_Sound(strcat("brass", itos(f)));
+                        s = SND_BRASS_RANDOM();
                         break;
                 }
 
@@ -163,13 +174,4 @@ MUTATOR_HOOKFUNCTION(casings, CSQC_Parse_TempEntity)
     RubbleLimit("casing", autocvar_cl_casings_maxcount, Casing_Delete);
 }
 
-STATIC_INIT(Casings)
-{
-    precache_sound(W_Sound("brass1"));
-    precache_sound(W_Sound("brass2"));
-    precache_sound(W_Sound("brass3"));
-    precache_sound(W_Sound("casings1"));
-    precache_sound(W_Sound("casings2"));
-    precache_sound(W_Sound("casings3"));
-}
 #endif
index 9ec6c291451c20a80d683138178121afbbac88c0..ba189c9bf8dc38cb416107cf24682f67e89eea05 100644 (file)
@@ -127,8 +127,8 @@ string Nade_TrailEffect(float proj, float nade_team)
     ));
     switch (proj)
     {
-        case PROJECTILE_NADE: return strcat("nade_", Static_Team_ColorName_Lower(nade_team));
-        case PROJECTILE_NADE_BURN: return strcat("nade_", Static_Team_ColorName_Lower(nade_team), "_burn");
+        case PROJECTILE_NADE:       return EFFECT_NADE_TRAIL(nade_team).eent_eff_name;
+        case PROJECTILE_NADE_BURN:  return EFFECT_NADE_TRAIL_BURN(nade_team).eent_eff_name;
     }
     return "";
 }
index 626c42c7d61d590c5d4e00f71b34041220e64edc..f2195698190f19aa8e7e2aaa64f93c131905929d 100644 (file)
@@ -1286,7 +1286,7 @@ void Local_Notification_sound(
                ));
                #endif
 
-               sound(
+               _sound(
                        world,
                        soundchannel,
                        sprintf(
diff --git a/qcsrc/common/sounds/sounds.inc b/qcsrc/common/sounds/sounds.inc
new file mode 100644 (file)
index 0000000..7993450
--- /dev/null
@@ -0,0 +1,276 @@
+// Global list of sounds
+// TODO: remove uses of _sound
+
+string W_Sound(string w_snd);
+
+SOUND(ARC_FIRE, W_Sound("arc_fire"));
+SOUND(ARC_LOOP, W_Sound("arc_loop"));
+SOUND(ARC_LOOP_OVERHEAT, W_Sound("arc_loop_overheat"));
+SOUND(ARC_STOP, W_Sound("arc_stop"));
+SOUND(CAMPINGRIFLE_FIRE2, W_Sound("campingrifle_fire2"));
+SOUND(CAMPINGRIFLE_FIRE, W_Sound("campingrifle_fire"));
+SOUND(CRYLINK_FIRE2, W_Sound("crylink_fire2"));
+SOUND(CRYLINK_FIRE, W_Sound("crylink_fire"));
+SOUND(CRYLINK_IMPACT2, W_Sound("crylink_impact2"));
+SOUND(CRYLINK_IMPACT, W_Sound("crylink_impact"));
+SOUND(CRYLINK_LINKJOIN, W_Sound("crylink_linkjoin"));
+SOUND(DRYFIRE, W_Sound("dryfire"));
+SOUND(ELECTRO_BOUNCE, W_Sound("electro_bounce"));
+SOUND(ELECTRO_FIRE2, W_Sound("electro_fire2"));
+SOUND(ELECTRO_FIRE, W_Sound("electro_fire"));
+SOUND(ELECTRO_FLY, W_Sound("electro_fly"));
+SOUND(ELECTRO_IMPACT, W_Sound("electro_impact"));
+SOUND(ELECTRO_IMPACT_COMBO, W_Sound("electro_impact_combo"));
+SOUND(FIREBALL_FIRE2, W_Sound("fireball_fire2"));
+SOUND(FIREBALL_FIRE, W_Sound("fireball_fire"));
+SOUND(FIREBALL_FLY2, W_Sound("fireball_fly2"));
+SOUND(FIREBALL_FLY, W_Sound("fireball_fly"));
+SOUND(FIREBALL_IMPACT2, W_Sound("fireball_impact2"));
+SOUND(FIREBALL_PREFIRE2, W_Sound("fireball_prefire2"));
+SOUND(FLAC_FIRE, W_Sound("flac_fire"));
+SOUND(GRENADE_BOUNCE1, W_Sound("grenade_bounce1"));
+SOUND(GRENADE_BOUNCE2, W_Sound("grenade_bounce2"));
+SOUND(GRENADE_BOUNCE3, W_Sound("grenade_bounce3"));
+SOUND(GRENADE_BOUNCE4, W_Sound("grenade_bounce4"));
+SOUND(GRENADE_BOUNCE5, W_Sound("grenade_bounce5"));
+SOUND(GRENADE_BOUNCE6, W_Sound("grenade_bounce6"));
+Sound SND_GRENADE_BOUNCE_RANDOM() {
+    return SOUNDS[SND_GRENADE_BOUNCE1.m_id + rint(random() * 5)];
+}
+SOUND(GRENADE_FIRE, W_Sound("grenade_fire"));
+SOUND(GRENADE_IMPACT, W_Sound("grenade_impact"));
+SOUND(GRENADE_STICK, W_Sound("grenade_stick"));
+SOUND(HAGAR_BEEP, W_Sound("hagar_beep"));
+SOUND(HAGAR_FIRE, W_Sound("hagar_fire"));
+SOUND(HAGAR_LOAD, W_Sound("hagar_load"));
+SOUND(HAGEXP1, W_Sound("hagexp1"));
+SOUND(HAGEXP2, W_Sound("hagexp2"));
+SOUND(HAGEXP3, W_Sound("hagexp3"));
+Sound SND_HAGEXP_RANDOM() {
+    return SOUNDS[SND_HAGEXP1.m_id + rint(random() * 2)];
+}
+
+SOUND(HOOKBOMB_FIRE, W_Sound("hookbomb_fire"));
+SOUND(HOOKBOMB_IMPACT, W_Sound("hookbomb_impact"));
+SOUND(HOOK_FIRE, W_Sound("hook_fire"));
+SOUND(HOOK_IMPACT, W_Sound("hook_impact"));
+SOUND(LASERGUN_FIRE, W_Sound("lasergun_fire"));
+SOUND(LASERIMPACT, W_Sound("laserimpact"));
+SOUND(LGBEAM_FLY, W_Sound("lgbeam_fly"));
+SOUND(MINE_DET, W_Sound("mine_det"));
+SOUND(MINE_EXP, W_Sound("mine_exp"));
+SOUND(MINE_FIRE, W_Sound("mine_fire"));
+SOUND(MINE_STICK, W_Sound("mine_stick"));
+SOUND(MINE_TRIGGER, W_Sound("mine_trigger"));
+SOUND(MINSTANEXFIRE, W_Sound("minstanexfire"));
+SOUND(NEXCHARGE, W_Sound("nexcharge"));
+SOUND(NEXFIRE, W_Sound("nexfire"));
+SOUND(NEXIMPACT, W_Sound("neximpact"));
+SOUND(NEXWHOOSH1, W_Sound("nexwhoosh1"));
+SOUND(NEXWHOOSH2, W_Sound("nexwhoosh2"));
+SOUND(NEXWHOOSH3, W_Sound("nexwhoosh3"));
+Sound SND_NEXWHOOSH_RANDOM() {
+    return SOUNDS[SND_NEXWHOOSH1.m_id + rint(random() * 2)];
+}
+SOUND(RELOAD, W_Sound("reload")); // until weapons have individual reload sounds, precache the reload sound here
+
+SOUND(RIC1, W_Sound("ric1"));
+SOUND(RIC2, W_Sound("ric2"));
+SOUND(RIC3, W_Sound("ric3"));
+Sound SND_RIC_RANDOM() {
+    return SOUNDS[SND_RIC1.m_id + rint(random() * 2)];
+}
+
+SOUND(ROCKET_DET, W_Sound("rocket_det"));
+SOUND(ROCKET_FIRE, W_Sound("rocket_fire"));
+SOUND(ROCKET_FLY, W_Sound("rocket_fly"));
+SOUND(ROCKET_IMPACT, W_Sound("rocket_impact"));
+SOUND(ROCKET_MODE, W_Sound("rocket_mode"));
+SOUND(SEEKEREXP1, W_Sound("seekerexp1"));
+SOUND(SEEKEREXP2, W_Sound("seekerexp2"));
+SOUND(SEEKEREXP3, W_Sound("seekerexp3"));
+SOUND(SEEKER_FIRE, W_Sound("seeker_fire"));
+SOUND(SHOTGUN_FIRE, W_Sound("shotgun_fire"));
+SOUND(SHOTGUN_MELEE, W_Sound("shotgun_melee"));
+SOUND(STRENGTH_FIRE, W_Sound("strength_fire"));
+SOUND(TAGEXP1, W_Sound("tagexp1"));
+SOUND(TAGEXP2, W_Sound("tagexp2"));
+SOUND(TAGEXP3, W_Sound("tagexp3"));
+SOUND(TAG_FIRE, W_Sound("tag_fire"));
+SOUND(TAG_IMPACT, W_Sound("tag_impact"));
+SOUND(TAG_ROCKET_FLY, W_Sound("tag_rocket_fly"));
+SOUND(UNAVAILABLE, W_Sound("unavailable"));
+SOUND(UZI_FIRE, W_Sound("uzi_fire"));
+SOUND(WEAPONPICKUP, W_Sound("weaponpickup"));
+SOUND(WEAPONPICKUP_NEW_TOYS, W_Sound("weaponpickup_new_toys"));
+SOUND(WEAPON_SWITCH, W_Sound("weapon_switch"));
+
+SOUND(CTF_CAPTURE_NEUTRAL, "ctf/capture.ogg");
+SOUND(CTF_CAPTURE_RED, "ctf/red_capture.wav");
+SOUND(CTF_CAPTURE_BLUE, "ctf/blue_capture.wav");
+SOUND(CTF_CAPTURE_YELLOW, "ctf/yellow_capture.ogg");
+SOUND(CTF_CAPTURE_PINK, "ctf/pink_capture.ogg");
+Sound SND_CTF_CAPTURE(int teamid) {
+    switch (teamid) {
+        case NUM_TEAM_1:    return SND_CTF_CAPTURE_RED;
+        case NUM_TEAM_2:    return SND_CTF_CAPTURE_BLUE;
+        case NUM_TEAM_3:    return SND_CTF_CAPTURE_YELLOW;
+        case NUM_TEAM_4:    return SND_CTF_CAPTURE_PINK;
+        default:            return SND_CTF_CAPTURE_NEUTRAL;
+    }
+}
+
+SOUND(CTF_DROPPED_NEUTRAL,  "ctf/neutral_dropped.wav");
+SOUND(CTF_DROPPED_RED,      "ctf/red_dropped.wav");
+SOUND(CTF_DROPPED_BLUE,     "ctf/blue_dropped.wav");
+SOUND(CTF_DROPPED_YELLOW,   "ctf/yellow_dropped.wav");
+SOUND(CTF_DROPPED_PINK,     "ctf/pink_dropped.wav");
+Sound SND_CTF_DROPPED(int teamid) {
+    switch (teamid) {
+        case NUM_TEAM_1:    return SND_CTF_DROPPED_RED;
+        case NUM_TEAM_2:    return SND_CTF_DROPPED_BLUE;
+        case NUM_TEAM_3:    return SND_CTF_DROPPED_YELLOW;
+        case NUM_TEAM_4:    return SND_CTF_DROPPED_PINK;
+        default:            return SND_CTF_DROPPED_NEUTRAL;
+    }
+}
+
+SOUND(CTF_PASS, "ctf/pass.wav");
+SOUND(CTF_RESPAWN, "ctf/flag_respawn.wav");
+
+SOUND(CTF_RETURNED_NEUTRAL,  "ctf/return.wav");
+SOUND(CTF_RETURNED_RED,      "ctf/red_returned.wav");
+SOUND(CTF_RETURNED_BLUE,     "ctf/blue_returned.wav");
+SOUND(CTF_RETURNED_YELLOW,   "ctf/yellow_returned.wav");
+SOUND(CTF_RETURNED_PINK,     "ctf/pink_returned.wav");
+Sound SND_CTF_RETURNED(int teamid) {
+    switch (teamid) {
+        case NUM_TEAM_1:    return SND_CTF_RETURNED_RED;
+        case NUM_TEAM_2:    return SND_CTF_RETURNED_BLUE;
+        case NUM_TEAM_3:    return SND_CTF_RETURNED_YELLOW;
+        case NUM_TEAM_4:    return SND_CTF_RETURNED_PINK;
+        default:            return SND_CTF_RETURNED_NEUTRAL;
+    }
+}
+
+SOUND(CTF_TAKEN_NEUTRAL,  "ctf/neutral_taken.wav");
+SOUND(CTF_TAKEN_RED,      "ctf/red_taken.wav");
+SOUND(CTF_TAKEN_BLUE,     "ctf/blue_taken.wav");
+SOUND(CTF_TAKEN_YELLOW,   "ctf/yellow_taken.wav");
+SOUND(CTF_TAKEN_PINK,     "ctf/pink_taken.wav");
+Sound SND_CTF_TAKEN(int teamid) {
+    switch (teamid) {
+        case NUM_TEAM_1:    return SND_CTF_TAKEN_RED;
+        case NUM_TEAM_2:    return SND_CTF_TAKEN_BLUE;
+        case NUM_TEAM_3:    return SND_CTF_TAKEN_YELLOW;
+        case NUM_TEAM_4:    return SND_CTF_TAKEN_PINK;
+        default:            return SND_CTF_TAKEN_NEUTRAL;
+    }
+}
+
+SOUND(CTF_TOUCH, "ctf/touch.wav");
+
+SOUND(DOM_CLAIM, "domination/claim.wav");
+
+SOUND(KA_DROPPED, "keepaway/dropped.wav");
+SOUND(KA_PICKEDUP, "keepaway/pickedup.wav");
+SOUND(KA_RESPAWN, "keepaway/respawn.wav");
+SOUND(KA_TOUCH, "keepaway/touch.wav");
+
+SOUND(KH_ALARM, "kh/alarm.wav");
+SOUND(KH_CAPTURE, "kh/capture.wav");
+SOUND(KH_COLLECT, "kh/collect.wav");
+SOUND(KH_DESTROY, "kh/destroy.wav");
+SOUND(KH_DROP, "kh/drop.wav");
+
+SOUND(NB_BOUNCE, "nexball/bounce.ogg");
+SOUND(NB_DROP, "nexball/drop.ogg");
+SOUND(NB_SHOOT1, "nexball/shoot1.ogg");
+SOUND(NB_SHOOT2, "nexball/shoot2.ogg");
+SOUND(NB_STEAL, "nexball/steal.ogg");
+
+SOUND(ONS_CONTROLPOINT_BUILD, "onslaught/controlpoint_build.ogg");
+SOUND(ONS_CONTROLPOINT_BUILT, "onslaught/controlpoint_built.ogg");
+SOUND(ONS_CONTROLPOINT_UNDERATTACK, "onslaught/controlpoint_underattack.ogg");
+SOUND(ONS_DAMAGEBLOCKEDBYSHIELD, "onslaught/damageblockedbyshield.wav");
+SOUND(ONS_ELECTRICITY_EXPLODE, "onslaught/electricity_explode.ogg");
+SOUND(ONS_GENERATOR_DECAY, "onslaught/generator_decay.ogg");
+SOUND(ONS_GENERATOR_UNDERATTACK, "onslaught/generator_underattack.ogg");
+SOUND(ONS_HIT1, "onslaught/ons_hit1.ogg");
+SOUND(ONS_HIT2, "onslaught/ons_hit2.ogg");
+SOUND(ONS_SPARK1, "onslaught/ons_spark1.ogg");
+SOUND(ONS_SPARK2, "onslaught/ons_spark2.ogg");
+SOUND(ONS_SHOCKWAVE, "onslaught/shockwave.ogg");
+
+SOUND(PORTO_BOUNCE, "porto/bounce.ogg");
+SOUND(PORTO_CREATE, "porto/create.ogg");
+SOUND(PORTO_EXPIRE, "porto/expire.ogg");
+SOUND(PORTO_EXPLODE, "porto/explode.ogg");
+SOUND(PORTO_FIRE, "porto/fire.ogg");
+SOUND(PORTO_UNSUPPORTED, "porto/unsupported.ogg");
+
+SOUND(TUR_PHASER, "turrets/phaser.ogg");
+
+SOUND(VEH_ALARM, "vehicles/alarm.wav");
+SOUND(VEH_ALARM_SHIELD, "vehicles/alarm_shield.wav");
+SOUND(VEH_MISSILE_ALARM, "vehicles/missile_alarm.wav");
+
+SOUND(VEH_BUMBLEBEE_FIRE, W_Sound("flacexp3"));
+
+SOUND(VEH_RACER_BOOST, "vehicles/racer_boost.wav");
+SOUND(VEH_RACER_IDLE, "vehicles/racer_idle.wav");
+SOUND(VEH_RACER_MOVE, "vehicles/racer_move.wav");
+
+SOUND(VEH_RAPTOR_FLY, "vehicles/raptor_fly.wav");
+SOUND(VEH_RAPTOR_SPEED, "vehicles/raptor_speed.wav");
+
+SOUND(VEH_SPIDERBOT_DIE, "vehicles/spiderbot_die.wav");
+SOUND(VEH_SPIDERBOT_IDLE, "vehicles/spiderbot_idle.wav");
+SOUND(VEH_SPIDERBOT_JUMP, "vehicles/spiderbot_jump.wav");
+SOUND(VEH_SPIDERBOT_LAND, "vehicles/spiderbot_land.wav");
+SOUND(VEH_SPIDERBOT_STRAFE, "vehicles/spiderbot_strafe.wav");
+SOUND(VEH_SPIDERBOT_WALK, "vehicles/spiderbot_walk.wav");
+
+SOUND(NADE_BEEP, "overkill/grenadebip.ogg");
+
+SOUND(BUFF_LOST, "relics/relic_effect.wav");
+
+SOUND(POWEROFF, "misc/poweroff.wav");
+SOUND(POWERUP, "misc/powerup.ogg");
+SOUND(SHIELD_RESPAWN, "misc/shield_respawn.wav");
+SOUND(STRENGTH_RESPAWN, "misc/strength_respawn.wav");
+
+SOUND(ARMOR25, "misc/armor25.wav");
+SOUND(ARMORIMPACT, "misc/armorimpact.wav");
+SOUND(BODYIMPACT1, "misc/bodyimpact1.wav");
+SOUND(BODYIMPACT2, "misc/bodyimpact2.wav");
+
+SOUND(ITEMPICKUP, "misc/itempickup.ogg");
+SOUND(ITEMRESPAWNCOUNTDOWN, "misc/itemrespawncountdown.ogg");
+SOUND(ITEMRESPAWN, "misc/itemrespawn.ogg");
+SOUND(MEGAHEALTH, "misc/megahealth.ogg");
+
+SOUND(LAVA, "player/lava.wav");
+SOUND(SLIME, "player/slime.wav");
+
+SOUND(GIB, "misc/gib.wav");
+SOUND(GIB_SPLAT01, "misc/gib_splat01.wav");
+SOUND(GIB_SPLAT02, "misc/gib_splat02.wav");
+SOUND(GIB_SPLAT03, "misc/gib_splat03.wav");
+SOUND(GIB_SPLAT04, "misc/gib_splat04.wav");
+Sound SND_GIB_SPLAT_RANDOM() {
+    return SOUNDS[SND_GIB_SPLAT01.m_id + floor(prandom() * 4)];
+}
+
+SOUND(HIT, "misc/hit.wav");
+SOUND(TYPEHIT, "misc/typehit.wav");
+
+SOUND(SPAWN, "misc/spawn.ogg");
+
+SOUND(TALK, "misc/talk.wav");
+
+SOUND(TELEPORT, "misc/teleport.ogg");
+
+SOUND(INVSHOT, "misc/invshot.wav");
+
+SOUND(JETPACK_FLY, "misc/jetpack_fly.ogg");
diff --git a/qcsrc/common/sounds/sounds.qh b/qcsrc/common/sounds/sounds.qh
new file mode 100644 (file)
index 0000000..c9838b2
--- /dev/null
@@ -0,0 +1,59 @@
+#ifndef SOUNDS_H
+#define SOUNDS_H
+
+#include "../teams.qh"
+
+// Play all sounds via sound7, for access to the extra channels.
+// Otherwise, channels 8 to 15 would be blocked for a weird QW feature.
+#ifdef SVQC
+    #define _sound(e, c, s, v, a) do { \
+        entity __e = e; \
+        if (!sound_allowed(MSG_BROADCAST, __e)) break; \
+        sound7(__e, c, s, v, a, 0, 0); \
+    } while (0)
+#else
+    #define _sound(e, c, s, v, a) sound7(e, c, s, v, a, 0, 0)
+#endif
+#define sound(e, c, s, v, a) _sound(e, c, s.sound_str(), v, a)
+// Used in places where a string is required
+#define SND(id) (SND_##id.sound_str())
+
+void RegisterSounds();
+const int MAX_SOUNDS = 128;
+entity SOUNDS[MAX_SOUNDS], SOUNDS_first, SOUNDS_last;
+int SOUNDS_COUNT;
+
+CLASS(Sound, Object)
+    ATTRIB(Sound, m_id, int, 0)
+    ATTRIB(Sound, sound_str, string(), func_null)
+    CONSTRUCTOR(Sound, string() path)
+    {
+        CONSTRUCT(Sound);
+        this.sound_str = path;
+    }
+    METHOD(Sound, sound_precache, void(entity this)) {
+        string s = this.sound_str();
+        if (s && s != "" && !fexists(strcat("sound/", s))) {
+            LOG_WARNINGF("Missing sound: \"%s\"\n", s);
+            return;
+        }
+        LOG_TRACEF("precache_sound(\"%s\")\n", s);
+        precache_sound(s);
+    }
+ENDCLASS(Sound)
+
+#define SOUND(name, path) \
+    string SND_##name##_get() { return path; } \
+    REGISTER(RegisterSounds, SND, SOUNDS, SOUNDS_COUNT, name, m_id, NEW(Sound, SND_##name##_get))
+REGISTER_REGISTRY(RegisterSounds)
+
+STATIC_INIT(RegisterSounds_precache) {
+    FOREACH(SOUNDS, true, LAMBDA({
+        it.sound_precache(it);
+    }));
+}
+
+SOUND(Null, "misc/null.wav");
+#include "sounds.inc"
+
+#endif
index 09ae8002b237211302031b806266bd8388b68ef9..af9a6b4233124190ad4ab1a417d8f6562739190b 100644 (file)
@@ -162,7 +162,7 @@ void func_breakable_behave_restore()
        self.nextthink = 0; // cancel auto respawn
        func_breakable_colormod();
        if (self.noise1)
-               sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
 }
 
 void func_breakable_init_for_player(entity player)
@@ -207,7 +207,7 @@ void func_breakable_destroy()
        func_breakable_destroyed();
 
        if(self.noise)
-               sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
 
        if(self.dmg)
                RadiusDamage(self, activator, self.dmg, self.dmg_edge, self.dmg_radius, self, world, self.dmg_force, DEATH_HURTTRIGGER, world);
index 17a30cfd03c61984b984a871fb35ac6120f50fe3..ab1cff538ef2e1bbbd6c020208578ce326ae7a03 100644 (file)
@@ -44,7 +44,7 @@ void button_fire()
                return;
 
        if (self.noise != "")
-               sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
 
        self.state = STATE_UP;
        SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, button_wait);
index 7abbe08809da076c37610254e03f125a22f7f47d..fed8e9fa424515b9c3aa8aa5aa3f5029e07b3529 100644 (file)
@@ -87,7 +87,7 @@ void door_blocked()
 void door_hit_top()
 {SELFPARAM();
        if (self.noise1 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.state = STATE_TOP;
        if (self.spawnflags & DOOR_TOGGLE)
                return;         // don't come down automatically
@@ -104,14 +104,14 @@ void door_hit_top()
 void door_hit_bottom()
 {SELFPARAM();
        if (self.noise1 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.state = STATE_BOTTOM;
 }
 
 void door_go_down()
 {SELFPARAM();
        if (self.noise2 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        if (self.max_health)
        {
                self.takedamage = DAMAGE_YES;
@@ -134,7 +134,7 @@ void door_go_up()
        }
 
        if (self.noise2 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        self.state = STATE_UP;
        SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, door_hit_top);
 
@@ -180,7 +180,7 @@ float door_check_keys(void)
                if (other.key_door_messagetime <= time)
                {
 
-                       play2(other, "misc/talk.wav");
+                       play2(other, SND(TALK));
                        Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_ALSONEED, item_keys_keylist(door.itemkeys));
                        other.key_door_messagetime = time + 2;
                }
@@ -190,7 +190,7 @@ float door_check_keys(void)
                // no keys were used
                if (other.key_door_messagetime <= time)
                {
-                       play2(other, "misc/talk.wav");
+                       play2(other, SND(TALK));
                        Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_LOCKED_NEED, item_keys_keylist(door.itemkeys));
 
                        other.key_door_messagetime = time + 2;
@@ -202,7 +202,7 @@ float door_check_keys(void)
        {
 #ifdef SVQC
                // door is now unlocked
-               play2(other, "misc/talk.wav");
+               play2(other, SND(TALK));
                Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_DOOR_UNLOCKED);
 #endif
                return true;
@@ -321,7 +321,7 @@ void door_touch()
        {
                if (IS_CLIENT(other))
                        centerprint(other, self.owner.message);
-               play2(other, "misc/talk.wav");
+               play2(other, SND(TALK));
        }
 #endif
 }
@@ -367,7 +367,7 @@ void door_generic_plat_blocked()
 void door_rotating_hit_top()
 {SELFPARAM();
        if (self.noise1 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.state = STATE_TOP;
        if (self.spawnflags & DOOR_TOGGLE)
                return;         // don't come down automatically
@@ -378,7 +378,7 @@ void door_rotating_hit_top()
 void door_rotating_hit_bottom()
 {SELFPARAM();
        if (self.noise1 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        if (self.lip==666) // self.lip is used to remember reverse opening direction for door_rotating
        {
                self.pos2 = '0 0 0' - self.pos2;
@@ -390,7 +390,7 @@ void door_rotating_hit_bottom()
 void door_rotating_go_down()
 {SELFPARAM();
        if (self.noise2 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        if (self.max_health)
        {
                self.takedamage = DAMAGE_YES;
@@ -412,7 +412,7 @@ void door_rotating_go_up()
                return;
        }
        if (self.noise2 != "")
-               sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        self.state = STATE_UP;
        SUB_CalcAngleMove (self.pos2, TSPEED_LINEAR, self.speed, door_rotating_hit_top);
 
index 10536fd943d7a2a5da40d2f407f536ed1484b9f0..8686c671f7c097c3a5307ecca54e478ef2b3734b 100644 (file)
@@ -35,7 +35,7 @@ void fd_secret_use()
        // Make a sound, wait a little...
 
        if (self.noise1 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.SUB_NEXTTHINK = self.SUB_LTIME + 0.1;
 
        temp = 1 - (self.spawnflags & SECRET_1ST_LEFT); // 1 or -1
@@ -60,7 +60,7 @@ void fd_secret_use()
        self.dest2 = self.dest1 + v_forward * self.t_length;
        SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move1);
        if (self.noise2 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
 }
 
 void fd_secret_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
@@ -74,14 +74,14 @@ void fd_secret_move1()
        self.SUB_NEXTTHINK = self.SUB_LTIME + 1.0;
        self.think = fd_secret_move2;
        if (self.noise3 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
 }
 
 // Start moving sideways w/sound...
 void fd_secret_move2()
 {SELFPARAM();
        if (self.noise2 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        SUB_CalcMove(self.dest2, TSPEED_LINEAR, self.speed, fd_secret_move3);
 }
 
@@ -89,7 +89,7 @@ void fd_secret_move2()
 void fd_secret_move3()
 {SELFPARAM();
        if (self.noise3 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
        if (!(self.spawnflags & SECRET_OPEN_ONCE))
        {
                self.SUB_NEXTTHINK = self.SUB_LTIME + self.wait;
@@ -101,7 +101,7 @@ void fd_secret_move3()
 void fd_secret_move4()
 {SELFPARAM();
        if (self.noise2 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        SUB_CalcMove(self.dest1, TSPEED_LINEAR, self.speed, fd_secret_move5);
 }
 
@@ -111,13 +111,13 @@ void fd_secret_move5()
        self.SUB_NEXTTHINK = self.SUB_LTIME + 1.0;
        self.think = fd_secret_move6;
        if (self.noise3 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
 }
 
 void fd_secret_move6()
 {SELFPARAM();
        if (self.noise2 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise2, VOL_BASE, ATTEN_NORM);
        SUB_CalcMove(self.oldorigin, TSPEED_LINEAR, self.speed, fd_secret_done);
 }
 
@@ -130,7 +130,7 @@ void fd_secret_done()
                //self.th_pain = fd_secret_use;
        }
        if (self.noise3 != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise3, VOL_BASE, ATTEN_NORM);
 }
 
 void secret_blocked()
@@ -161,7 +161,7 @@ void secret_touch()
        {
                if (IS_CLIENT(other))
                        centerprint(other, self.message);
-               play2(other, "misc/talk.wav");
+               play2(other, SND(TALK));
        }
 }
 
index 25764f38700dc1524ed40f661ed8cc39125834ac..04ab77f7fd70a4d3fd93f64b2cf26174416a7806 100644 (file)
@@ -230,7 +230,7 @@ void Draw_PointParticles()
                        if(self.noise != "")
                        {
                                setorigin(self, p);
-                               sound(self, CH_AMBIENT, self.noise, VOL_BASE * self.volume, self.atten);
+                               _sound(self, CH_AMBIENT, self.noise, VOL_BASE * self.volume, self.atten);
                        }
                        self.just_toggled = 0;
                }
index 60c8730eb68bb258c378eba2a9230eb18680dc9d..4284d24031e6d609f16428e146707ce1d5366747 100644 (file)
@@ -98,7 +98,7 @@ void train_next()
        }
 
        if(self.noise != "")
-               sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_IDLE);
+               _sound(self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_IDLE);
 }
 
 #ifdef SVQC
index b4f387470c64bea1c3e1e47fd17dbab141293e7d..dc568cae09224c001b4b1ba5c61f48bb5dede01a 100644 (file)
@@ -65,7 +65,7 @@ void plat_spawn_inside_trigger()
 
 void plat_hit_top()
 {SELFPARAM();
-       sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+       _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.state = 1;
 
        self.SUB_THINK = plat_go_down;
@@ -74,20 +74,20 @@ void plat_hit_top()
 
 void plat_hit_bottom()
 {SELFPARAM();
-       sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
+       _sound (self, CH_TRIGGER_SINGLE, self.noise1, VOL_BASE, ATTEN_NORM);
        self.state = 2;
 }
 
 void plat_go_down()
 {SELFPARAM();
-       sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
+       _sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
        self.state = 3;
        SUB_CalcMove (self.pos2, TSPEED_LINEAR, self.speed, plat_hit_bottom);
 }
 
 void plat_go_up()
 {SELFPARAM();
-       sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
+       _sound (self, CH_TRIGGER_SINGLE, self.noise, VOL_BASE, ATTEN_NORM);
        self.state = 4;
        SUB_CalcMove (self.pos1, TSPEED_LINEAR, self.speed, plat_hit_top);
 }
index 2c5262885a58c69a7240de4a184eae947199134a..2748ed6f63af351807fa7ce56d3911d7e7c2145f 100644 (file)
@@ -182,9 +182,9 @@ void TargetMusic_Advance()
                if(vol != vol0)
                {
                        if(vol0 < 0)
-                               sound(e, CH_BGM_SINGLE, e.noise, vol, ATTEN_NONE); // restart
+                               _sound(e, CH_BGM_SINGLE, e.noise, vol, ATTEN_NONE); // restart
                        else
-                               sound(e, CH_BGM_SINGLE, "", vol, ATTEN_NONE);
+                               _sound(e, CH_BGM_SINGLE, "", vol, ATTEN_NONE);
                        e.lastvol = vol;
                }
        }
@@ -223,7 +223,7 @@ void Net_TargetMusic()
                        strunzone(e.noise);
                e.noise = strzone(noi);
                precache_sound(e.noise);
-               sound(e, CH_BGM_SINGLE, e.noise, 0, ATTEN_NONE);
+               _sound(e, CH_BGM_SINGLE, e.noise, 0, ATTEN_NONE);
                if(getsoundtime(e, CH_BGM_SINGLE) < 0)
                {
                        LOG_TRACEF("Cannot initialize sound %s\n", e.noise);
@@ -310,7 +310,7 @@ void Ent_ReadTriggerMusic()
                if(self.noise != s)
                {
                        precache_sound(self.noise);
-                       sound(self, CH_BGM_SINGLE, self.noise, 0, ATTEN_NONE);
+                       _sound(self, CH_BGM_SINGLE, self.noise, 0, ATTEN_NONE);
                        if(getsoundtime(self, CH_BGM_SINGLE) < 0)
                        {
                                LOG_TRACEF("Cannot initialize sound %s\n", self.noise);
index 42cfe3200565b8b09a3e9d05212bcc1e534241d0..0b3767ff654c856a13d9e6a515dc13020c5abd4f 100644 (file)
@@ -10,9 +10,9 @@ void target_speaker_use_activator()
        {
                var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1));
                if(GetPlayerSoundSampleField_notFound)
-                       snd = "misc/null.wav";
+                       snd = SND(Null);
                else if(activator.(sample) == "")
-                       snd = "misc/null.wav";
+                       snd = SND(Null);
                else
                {
                        tokenize_console(activator.(sample));
@@ -36,9 +36,9 @@ void target_speaker_use_on()
        {
                var .string sample = GetVoiceMessageSampleField(substring(self.noise, 1, -1));
                if(GetPlayerSoundSampleField_notFound)
-                       snd = "misc/null.wav";
+                       snd = SND(Null);
                else if(activator.(sample) == "")
-                       snd = "misc/null.wav";
+                       snd = SND(Null);
                else
                {
                        tokenize_console(activator.(sample));
@@ -52,13 +52,13 @@ void target_speaker_use_on()
        }
        else
                snd = self.noise;
-       sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten);
+       _sound(self, CH_TRIGGER_SINGLE, snd, VOL_BASE * self.volume, self.atten);
        if(self.spawnflags & 3)
                self.use = target_speaker_use_off;
 }
 void target_speaker_use_off()
 {SELFPARAM();
-       sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASE * self.volume, self.atten);
+       sound(self, CH_TRIGGER_SINGLE, SND_Null, VOL_BASE * self.volume, self.atten);
        self.use = target_speaker_use_on;
 }
 void target_speaker_reset()
index bc4398601920968c61cfd7fd9d25f879569461bc..94f2bd26bc99b897a88a45002f27a6a83a7b3f78 100644 (file)
@@ -79,7 +79,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle
                if(self.pushltime < time) // only show one teleport effect per teleporter per 0.2 seconds, for better fps
                {
                        if(tflags & TELEPORT_FLAG_SOUND)
-                               sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTEN_NORM);
+                               sound (player, CH_TRIGGER, SND_TELEPORT, VOL_BASE, ATTEN_NORM);
                        if(tflags & TELEPORT_FLAG_PARTICLES)
                        {
                                Send_Effect(EFFECT_TELEPORT, player.origin, '0 0 0', 1);
index 7ce15c2e2f05f579423e872554e29ff3189cc1c3..a6b3eedde651521db1a84c409b00940cec16c6a3 100644 (file)
@@ -80,7 +80,7 @@ void trigger_gravity_touch()
        {
                other.gravity = g;
                if(self.noise != "")
-                       sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+                       _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
                UpdateCSQCProjectile(self.owner);
        }
 }
index af307a29927f4e596fd78425a402b5d0c026a803..5d4f2d0b3a2cf26a15508c630cc47bb19f90cc38 100644 (file)
@@ -19,7 +19,7 @@ void trigger_heal_touch()
                        {
                                other.health = min(other.health + self.health, self.max_health);
                                other.pauserothealth_finished = max(other.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot);
-                               sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+                               _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
                        }
                }
        }
index dfdcd7b3ae491a52658c0848cfd2d5c1bdabb607..0695811e0f4143cb95567923700fd3719825b771 100644 (file)
@@ -182,7 +182,7 @@ void trigger_push_touch()
                {
                        // flash when activated
                        Send_Effect(EFFECT_JUMPPAD, other.origin, other.velocity, 1);
-                       sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+                       _sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
                        self.pushltime = time + 0.2;
                }
                if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other))
index 7ee7773851ec061789c1b1fb01d8543310af2c7e..365c6f5a908d01a7ea8a3f7f76a51ce2545e0b70 100644 (file)
@@ -146,7 +146,7 @@ spawnfunc(trigger_keylock)
                if(self.sounds == 1)
                        self.noise = "misc/secret.wav";
                else if(self.sounds == 2)
-                       self.noise = "misc/talk.wav";
+                       self.noise = SND(TALK);
                else //if (self.sounds == 3) {
                        self.noise = "misc/trigger1.wav";
        }
@@ -157,7 +157,7 @@ spawnfunc(trigger_keylock)
 
        // set closed sourd
        if(self.noise2 == "")
-               self.noise2 = "misc/talk.wav";
+               self.noise2 = SND(TALK);
 
        // delay between triggering message2 and trigger2
        if(!self.wait) { self.wait = 5; }
index ca26d214a9a4a72507861ef9c20f95bd88e77dd0..3261520d7a19e951ebdd198c7293facdf38a1de0 100644 (file)
@@ -32,7 +32,7 @@ void multi_trigger()
        }
 
        if (self.noise)
-               sound (self.enemy, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+               _sound (self.enemy, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
 
 // don't trigger again until reset
        self.takedamage = DAMAGE_NO;
@@ -149,8 +149,7 @@ spawnfunc(trigger_multiple)
        }
        else if (self.sounds == 2)
        {
-               precache_sound ("misc/talk.wav");
-               self.noise = "misc/talk.wav";
+               self.noise = SND(TALK);
        }
        else if (self.sounds == 3)
        {
index a44c688ed9544fb16c2e27647a8dd952807a39e3..73c5c49651259aaa9376945cc6e1c080df0bb91b 100644 (file)
@@ -173,7 +173,7 @@ void SUB_UseTargets()
        {
                centerprint(activator, self.message);
                if (self.noise == "")
-                       play2(activator, "misc/talk.wav");
+                       play2(activator, SND(TALK));
        }
 
 //
diff --git a/qcsrc/common/turrets/all.inc b/qcsrc/common/turrets/all.inc
new file mode 100644 (file)
index 0000000..04bb10f
--- /dev/null
@@ -0,0 +1,12 @@
+#include "unit/ewheel.qc"
+#include "unit/flac.qc"
+#include "unit/fusionreactor.qc"
+#include "unit/hellion.qc"
+#include "unit/hk.qc"
+#include "unit/machinegun.qc"
+#include "unit/mlrs.qc"
+#include "unit/phaser.qc"
+#include "unit/plasma.qc"
+#include "unit/plasma_dual.qc"
+#include "unit/tesla.qc"
+#include "unit/walker.qc"
diff --git a/qcsrc/common/turrets/all.qc b/qcsrc/common/turrets/all.qc
new file mode 100644 (file)
index 0000000..f0fc719
--- /dev/null
@@ -0,0 +1,5 @@
+#include "all.qh"
+
+#define IMPLEMENTATION
+#include "all.inc"
+#undef IMPLEMENTATION
index 04bb10f6a548e67da5fba28ed487c71a1300f52c..4f8a728028074f31aabfc02b9ae586532d77ca2a 100644 (file)
-#include "unit/ewheel.qc"
-#include "unit/flac.qc"
-#include "unit/fusionreactor.qc"
-#include "unit/hellion.qc"
-#include "unit/hk.qc"
-#include "unit/machinegun.qc"
-#include "unit/mlrs.qc"
-#include "unit/phaser.qc"
-#include "unit/plasma.qc"
-#include "unit/plasma_dual.qc"
-#include "unit/tesla.qc"
-#include "unit/walker.qc"
+#ifndef TURRETS_H
+#define TURRETS_H
+
+// turret requests
+#define TR_SETUP          1 // (BOTH) setup turret data
+#define TR_THINK                 2 // (SERVER) logic to run every frame
+#define TR_DEATH          3 // (SERVER) called when turret dies
+#define TR_PRECACHE       4 // (BOTH) precaches models/sounds used by this turret
+#define TR_ATTACK         5 // (SERVER) called when turret attacks
+#define TR_CONFIG         6 // (ALL)
+
+// functions:
+entity get_turretinfo(int id);
+
+// fields:
+.entity tur_head;
+
+// target selection flags
+.int target_select_flags;
+.int target_validate_flags;
+const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets
+const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets
+const int TFL_TARGETSELECT_PLAYERS = 8; // target players
+const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles
+const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events
+const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection
+const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range
+const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates
+const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered
+const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates
+const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets
+const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range
+const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles
+
+// aim flags
+.int aim_flags;
+const int TFL_AIM_NO = 1; // no aiming
+const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet
+const int TFL_AIM_LEAD = 4; // try to predict target movement
+const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading
+const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact
+const int TFL_AIM_SIMPLE = 32; // aim at player's current location
+
+// tracking flags
+.int track_flags;
+const int TFL_TRACK_NO = 2; // don't move head
+const int TFL_TRACK_PITCH = 4; // pitch head
+const int TFL_TRACK_ROTATE = 8; // rotate head
+
+// prefire checks
+.int firecheck_flags;
+const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?)
+const int TFL_FIRECHECK_DISTANCES = 8; // another range check
+const int TFL_FIRECHECK_LOS = 16; // line of sight
+const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot
+const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint
+const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot
+const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates
+const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire
+const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt
+const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max
+const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays
+const int TFL_FIRECHECK_NO = 16384; // no prefire checks
+
+// attack flags
+.int shoot_flags;
+const int TFL_SHOOT_NO = 64; // no attacking
+const int TFL_SHOOT_VOLLY = 2; // fire in vollies
+const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost
+const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets
+const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode)
+const int TFL_SHOOT_CUSTOM = 32; // custom attacking
+
+// turret capabilities
+.int turret_flags;
+const int TUR_FLAG_NONE = 0; // no abilities
+const int TUR_FLAG_SNIPER = 2; // sniping turret
+const int TUR_FLAG_SPLASH = 4; // can deal splash damage
+const int TUR_FLAG_HITSCAN = 8; // hit scan
+const int TUR_FLAG_MULTIGUN = 16; // multiple guns
+const int TUR_FLAG_GUIDED = 32; // laser guided projectiles
+const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles
+const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles
+const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles
+const int TUR_FLAG_PLAYER = 512; // can damage players
+const int TUR_FLAG_MISSILE = 1024; // can damage missiles
+const int TUR_FLAG_SUPPORT = 2048; // supports other units
+const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition
+const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources
+const int TUR_FLAG_MOVE = 16384; // can move
+const int TUR_FLAG_ROAM = 32768; // roams around if not attacking
+const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret
+
+// ammo types
+#define ammo_flags currentammo
+const int TFL_AMMO_NONE = 64; // doesn't use ammo
+const int TFL_AMMO_ENERGY = 2; // uses power
+const int TFL_AMMO_BULLETS = 4; // uses bullets
+const int TFL_AMMO_ROCKETS = 8; // uses explosives
+const int TFL_AMMO_RECHARGE = 16; // regenerates ammo
+const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units
+
+// damage flags
+.int damage_flags;
+const int TFL_DMG_NO = 256; // doesn't take damage
+const int TFL_DMG_YES = 2; // can be damaged
+const int TFL_DMG_TEAM = 4; // can be damaged by teammates
+const int TFL_DMG_RETALIATE = 8; // target attackers
+const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team
+const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged
+const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim
+const int TFL_DMG_HEADSHAKE = 128; // damage shakes head
+const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning
+
+// spawn flags
+const int TSF_SUSPENDED = 1;
+const int TSF_TERRAINBASE = 2; // currently unused
+const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration
+const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible
+const int TSL_NO_RESPAWN = 16; // don't re-spawn
+const int TSL_ROAM = 32; // roam while idle
+
+// send flags
+const int TNSF_UPDATE       = 2;
+const int TNSF_STATUS       = 4;
+const int TNSF_SETUP        = 8;
+const int TNSF_ANG          = 16;
+const int TNSF_AVEL         = 32;
+const int TNSF_MOVE         = 64;
+.float anim_start_time;
+const int TNSF_ANIM         = 128;
+
+const int TNSF_FULL_UPDATE  = 16777215;
+
+
+// other useful macros
+#define TUR_ACTION(turrettype,mrequest) (get_turretinfo(turrettype)).turret_func(mrequest)
+#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name
+
+// =====================
+//  Turret Registration
+// =====================
+
+float t_null(float dummy);
+void register_turret(entity e, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname);
+
+const int TUR_MAXCOUNT = 24;
+entity turret_info[TUR_MAXCOUNT], turret_info_first, turret_info_last;
+float TUR_COUNT;
+
+#define _REGISTER_TURRET(id, func, turretflags, min_s, max_s, modelname, headmodelname, shortname, mname) \
+       float func(float); \
+       REGISTER(RegisterTurrets, TUR, turret_info, TUR_COUNT, id, m_id, NEW(Turret)) { \
+               register_turret(this, func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname); \
+       }
+void RegisterTurrets();
+REGISTER_REGISTRY(RegisterTurrets)
+
+#ifdef MENUQC
+#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
+       _REGISTER_TURRET(id,t_null,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
+#else
+#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
+       _REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
+#endif
+
+float t_null(float dummy) { return 0; }
+
+CLASS(Turret, Object)
+    ATTRIB(Turret, m_id, int, 0)
+
+    ATTRIB(Turret, turretid, int, 0)
+    /** short name */
+    ATTRIB(Turret, netname, string, string_null)
+    /** human readable name */
+    ATTRIB(Turret, turret_name, string, string_null)
+    /** t_... */
+    ATTRIB(Turret, turret_func, float(float), t_null)
+    /** currently a copy of the model */
+    ATTRIB(Turret, mdl, string, string_null)
+    /** full name of model */
+    ATTRIB(Turret, model, string, string_null)
+    /** full name of tur_head model */
+    ATTRIB(Turret, head_model, string, string_null)
+    /** TODO: deprecate! */
+    ATTRIB(Turret, cvar_basename, string, string_null)
+
+    ATTRIB(Turret, spawnflags, int, 0)
+    /** turret hitbox size */
+    ATTRIB(Turret, mins, vector, '0 0 0')
+    /** turret hitbox size */
+    ATTRIB(Turret, maxs, vector, '0 0 0')
+
+    METHOD(Turret, display, void(entity this, void(string name, string icon) returns)) {
+        returns(this.turret_name, string_null);
+    }
+
+void register_turret(Turret e, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname)
+{
+       e.classname = "turret_info";
+       e.turretid = e.m_id;
+       e.netname = shortname;
+       e.turret_name = mname;
+       e.turret_func = func;
+       e.mdl = modelname;
+       e.cvar_basename = shortname;
+       e.spawnflags = turretflags;
+       e.mins = min_s;
+       e.maxs = max_s;
+       e.model = strzone(strcat("models/turrets/", modelname));
+       e.head_model = strzone(strcat("models/turrets/", headmodelname));
+}
+ENDCLASS(Turret)
+
+
+REGISTER_TURRET(Null,
+       t_null,
+       0,
+       '-0 -0 -0',
+       '0 0 0',
+       "",
+       "",
+       "",
+       "Turret"
+);
+
+entity get_turretinfo(float id)
+{
+       entity m;
+       if(id < 1 || id > TUR_COUNT - 1)
+               return TUR_Null;
+       m = turret_info[id];
+       if(m)
+               return m;
+       return TUR_Null;
+}
+
+#include "all.inc"
+
+#endif
index 232f546c125e2ec8f117de95870e8651bb3fce7e..b2a0fe1b53bcc798b1421299487f63a619dbe835 100644 (file)
@@ -1,3 +1,5 @@
+#include "all.qh"
+
 void turret_remove()
 {SELFPARAM();
        remove(self.tur_head);
@@ -216,7 +218,7 @@ void turret_construct()
        setsize(self, tur.mins, tur.maxs);
        setsize(self.tur_head, '0 0 0', '0 0 0');
 
-       if(self.turretid == TUR_EWHEEL)
+       if(self.turretid == TUR_EWHEEL.m_id)
                setattachment(self.tur_head, self, "");
        else
                setattachment(self.tur_head, self, "tag_head");
@@ -272,7 +274,7 @@ void turret_gibboom()
 {SELFPARAM();
        float i;
 
-       sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1);
 
        for (i = 1; i < 5; i = i + 1)
@@ -318,16 +320,16 @@ entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, flo
 
 void turret_die()
 {SELFPARAM();
-       sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1);
        if (!autocvar_cl_nogibs)
        {
                // Base
-               if(self.turretid == TUR_EWHEEL)
+               if(self.turretid == TUR_EWHEEL.m_id)
                        turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 400' + '0.1 0.1 1' * (random() * 400), '-1 -1 -1', true);
-               else if (self.turretid == TUR_WALKER)
+               else if (self.turretid == TUR_WALKER.m_id)
                        turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', self.velocity + '0 0 300' + '0.1 0.1 1' * (random() * 200), '-1 -1 -1', true);
-               else if (self.turretid == TUR_TESLA)
+               else if (self.turretid == TUR_TESLA.m_id)
                        turret_gibtoss((get_turretinfo(self.turretid)).model, self.origin + '0 0 18', '0 0 200', '-1 -1 -1', false);
                else
                {
index 0f8ff9485117807a5f7e752a54b17eba6e3f3d42..f8ea64ad1151ce6bc873ca6a4feac7aba6a78d55 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef CL_TURRETS_H
 #define CL_TURRETS_H
 
+#include "all.qh"
+
 void ent_turret();
 
 #endif
index f35448e9c2212dd98506391dbced0b0133658e6d..1a8c2cbe7705e4bf9bf3f037eb37aa8d48107b97 100644 (file)
@@ -27,9 +27,8 @@ float T_Config_Queue_Compare(float root, float child, entity pass)
 
 void Dump_Turret_Settings(void)
 {
-       float i, x, totalsettings = 0;
-       for(i = TUR_FIRST; i <= TUR_LAST; ++i)
-       {
+       float x, totalsettings = 0;
+       FOREACH(turret_info, it != TUR_Null, LAMBDA({
                // step 1: clear the queue
                TUR_CONFIG_COUNT = 0;
                for(x = 0; x <= MAX_TUR_CONFIG; ++x)
@@ -50,7 +49,7 @@ void Dump_Turret_Settings(void)
                // step 5: debug info
                LOG_INFO(sprintf("#%d: %s: %d settings...\n", i, TUR_NAME(i), TUR_CONFIG_COUNT));
                totalsettings += TUR_CONFIG_COUNT;
-       }
+       }));
 
        // clear queue now that we're finished
        TUR_CONFIG_COUNT = 0;
@@ -58,5 +57,5 @@ void Dump_Turret_Settings(void)
                { tur_config_queue[x] = string_null; }
 
        // extra information
-       LOG_INFO(sprintf("Totals: %d turrets, %d settings\n", (i - 1), totalsettings));
+       LOG_INFO(sprintf("Totals: %d turrets, %d settings\n", (TUR_COUNT - 1), totalsettings));
 }
index 9c02d7ad91ec28f57adbb5ecf96ebd1472b326cb..c17061b22f0211422b48619fc1da96849e0ff222 100644 (file)
@@ -1,4 +1,5 @@
 #ifdef SVQC
+#include "all.qh"
 #include "../../server/autocvars.qh"
 
 // Generic aiming
@@ -457,7 +458,7 @@ entity turret_projectile(string _snd, float _size, float _health, float _death,
 {SELFPARAM();
        entity proj;
 
-       sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
+       _sound (self, CH_WEAPON_A, _snd, VOL_BASE, ATTEN_NORM);
        proj                             = spawn ();
        setorigin(proj, self.tur_shotorg);
        setsize(proj, '-0.5 -0.5 -0.5' * _size, '0.5 0.5 0.5' * _size);
index 8bba1c4a4a6e39ff3fcd11596b3224ec5aace3a9..1a4ade6806b29e0a713fdb63bb0c0b2da2a6e9ce 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef SV_TURRETS_H
 #define SV_TURRETS_H
 
+#include "all.qh"
+
 // turret fields
 .float ticrate; // interal ai think rate
 .vector aim_idle; // where to aim while idle
diff --git a/qcsrc/common/turrets/turrets.qc b/qcsrc/common/turrets/turrets.qc
deleted file mode 100644 (file)
index 37c85ca..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-#include "all.qh"
-
-// TURRET PLUGIN SYSTEM
-entity turret_info[TUR_MAXCOUNT];
-entity dummy_turret_info;
-
-void turrets_common_precache()
-{
-       precache_sound (W_Sound("rocket_impact"));
-
-#ifdef SVQC
-       precache_sound(W_Sound("rocket_impact"));
-#endif
-
-#ifdef TURRET_DEBUG
-       precache_model ("models/pathlib/goodsquare.md3");
-       precache_model ("models/pathlib/badsquare.md3");
-       precache_model ("models/pathlib/square.md3");
-       precache_model ("models/pathlib/edge.md3");
-#endif
-}
-
-void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname)
-{
-       entity e;
-       turret_info[id - 1] = e = spawn();
-       e.classname = "turret_info";
-       e.turretid = id;
-       e.netname = shortname;
-       e.turret_name = mname;
-       e.turret_func = func;
-       e.mdl = modelname;
-       e.cvar_basename = shortname;
-       e.spawnflags = turretflags;
-       e.mins = min_s;
-       e.maxs = max_s;
-       e.model = strzone(strcat("models/turrets/", modelname));
-       e.head_model = strzone(strcat("models/turrets/", headmodelname));
-
-       #ifndef MENUQC
-       turrets_common_precache();
-       #endif
-}
-float t_null(float dummy) { return 0; }
-void register_turrets_done()
-{
-       dummy_turret_info = spawn();
-       dummy_turret_info.classname = "turret_info";
-       dummy_turret_info.turretid = 0; // you can recognize dummies by this
-       dummy_turret_info.netname = "";
-       dummy_turret_info.turret_name = "Turret";
-       dummy_turret_info.turret_func = t_null;
-       dummy_turret_info.mdl = "";
-       dummy_turret_info.mins = '-0 -0 -0';
-       dummy_turret_info.maxs = '0 0 0';
-       dummy_turret_info.model = "";
-}
-entity get_turretinfo(float id)
-{
-       entity m;
-       if(id < TUR_FIRST || id > TUR_LAST)
-               return dummy_turret_info;
-       m = turret_info[id - 1];
-       if(m)
-               return m;
-       return dummy_turret_info;
-}
diff --git a/qcsrc/common/turrets/turrets.qh b/qcsrc/common/turrets/turrets.qh
deleted file mode 100644 (file)
index e1bf48c..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-#ifndef TURRETS_H
-#define TURRETS_H
-
-// turret requests
-#define TR_SETUP          1 // (BOTH) setup turret data
-#define TR_THINK                 2 // (SERVER) logic to run every frame
-#define TR_DEATH          3 // (SERVER) called when turret dies
-#define TR_PRECACHE       4 // (BOTH) precaches models/sounds used by this turret
-#define TR_ATTACK         5 // (SERVER) called when turret attacks
-#define TR_CONFIG         6 // (ALL)
-
-// functions:
-entity get_turretinfo(int id);
-
-// fields:
-.entity tur_head;
-
-// target selection flags
-.int target_select_flags;
-.int target_validate_flags;
-const int TFL_TARGETSELECT_NO = 2; // don't automatically find targets
-const int TFL_TARGETSELECT_LOS = 4; // require line of sight to find targets
-const int TFL_TARGETSELECT_PLAYERS = 8; // target players
-const int TFL_TARGETSELECT_MISSILES = 16; // target projectiles
-const int TFL_TARGETSELECT_TRIGGERTARGET = 32; // respond to turret_trigger_target events
-const int TFL_TARGETSELECT_ANGLELIMITS = 64; // apply extra angular limits to target selection
-const int TFL_TARGETSELECT_RANGELIMITS = 128; // limit target selection range
-const int TFL_TARGETSELECT_TEAMCHECK = 256; // don't attack teammates
-const int TFL_TARGETSELECT_NOBUILTIN = 512; // only attack targets when triggered
-const int TFL_TARGETSELECT_OWNTEAM = 1024; // only attack teammates
-const int TFL_TARGETSELECT_NOTURRETS = 2048; // don't attack other turrets
-const int TFL_TARGETSELECT_FOV = 4096; // extra limits to attack range
-const int TFL_TARGETSELECT_MISSILESONLY = 8192; // only attack missiles
-
-// aim flags
-.int aim_flags;
-const int TFL_AIM_NO = 1; // no aiming
-const int TFL_AIM_SPLASH = 2; // aim for ground around the target's feet
-const int TFL_AIM_LEAD = 4; // try to predict target movement
-const int TFL_AIM_SHOTTIMECOMPENSATE = 8; // compensate for shot traveltime when leading
-const int TFL_AIM_ZPREDICT = 16; // predict target's z position at impact
-const int TFL_AIM_SIMPLE = 32; // aim at player's current location
-
-// tracking flags
-.int track_flags;
-const int TFL_TRACK_NO = 2; // don't move head
-const int TFL_TRACK_PITCH = 4; // pitch head
-const int TFL_TRACK_ROTATE = 8; // rotate head
-
-// prefire checks
-.int firecheck_flags;
-const int TFL_FIRECHECK_DEAD = 4; // don't attack dead targets (zombies?)
-const int TFL_FIRECHECK_DISTANCES = 8; // another range check
-const int TFL_FIRECHECK_LOS = 16; // line of sight
-const int TFL_FIRECHECK_AIMDIST = 32; // consider distance impactpoint<->aimspot
-const int TFL_FIRECHECK_REALDIST = 64; // consider enemy origin<->impactpoint
-const int TFL_FIRECHECK_ANGLEDIST = 128; // consider angular diff head<->aimspot
-const int TFL_FIRECHECK_TEAMCHECK = 256; // don't attack teammates
-const int TFL_FIRECHECK_AFF = 512; // try to avoid any friendly fire
-const int TFL_FIRECHECK_AMMO_OWN = 1024; // own ammo needs to be larger than damage dealt
-const int TFL_FIRECHECK_AMMO_OTHER = 2048; // target's ammo needs to be less than max
-const int TFL_FIRECHECK_REFIRE = 4096; // check single attack finished delays
-const int TFL_FIRECHECK_NO = 16384; // no prefire checks
-
-// attack flags
-.int shoot_flags;
-const int TFL_SHOOT_NO = 64; // no attacking
-const int TFL_SHOOT_VOLLY = 2; // fire in vollies
-const int TFL_SHOOT_VOLLYALWAYS = 4; // always do a full volly, even if target is lost
-const int TFL_SHOOT_HITALLVALID = 8; // loop through all valid targets
-const int TFL_SHOOT_CLEARTARGET = 16; // lose target after attack (after volly is done if in volly mode)
-const int TFL_SHOOT_CUSTOM = 32; // custom attacking
-
-// turret capabilities
-.int turret_flags;
-const int TUR_FLAG_NONE = 0; // no abilities
-const int TUR_FLAG_SNIPER = 2; // sniping turret
-const int TUR_FLAG_SPLASH = 4; // can deal splash damage
-const int TUR_FLAG_HITSCAN = 8; // hit scan
-const int TUR_FLAG_MULTIGUN = 16; // multiple guns
-const int TUR_FLAG_GUIDED = 32; // laser guided projectiles
-const int TUR_FLAG_SLOWPROJ = 64; // turret fires slow projectiles
-const int TUR_FLAG_MEDPROJ = 128; // turret fires medium projectiles
-const int TUR_FLAG_FASTPROJ = 256; // turret fires fast projectiles
-const int TUR_FLAG_PLAYER = 512; // can damage players
-const int TUR_FLAG_MISSILE = 1024; // can damage missiles
-const int TUR_FLAG_SUPPORT = 2048; // supports other units
-const int TUR_FLAG_AMMOSOURCE = 4096; // can provide ammunition
-const int TUR_FLAG_RECIEVETARGETS = 8192; // can recieve targets from external sources
-const int TUR_FLAG_MOVE = 16384; // can move
-const int TUR_FLAG_ROAM = 32768; // roams around if not attacking
-const int TUR_FLAG_ISTURRET = 65536; // identifies this unit as a turret
-
-// ammo types
-#define ammo_flags currentammo
-const int TFL_AMMO_NONE = 64; // doesn't use ammo
-const int TFL_AMMO_ENERGY = 2; // uses power
-const int TFL_AMMO_BULLETS = 4; // uses bullets
-const int TFL_AMMO_ROCKETS = 8; // uses explosives
-const int TFL_AMMO_RECHARGE = 16; // regenerates ammo
-const int TFL_AMMO_RECIEVE = 32; // can recieve ammo from support units
-
-// damage flags
-.int damage_flags;
-const int TFL_DMG_NO = 256; // doesn't take damage
-const int TFL_DMG_YES = 2; // can be damaged
-const int TFL_DMG_TEAM = 4; // can be damaged by teammates
-const int TFL_DMG_RETALIATE = 8; // target attackers
-const int TFL_DMG_RETALIATE_TEAM = 16; // target attackers, even if on same team
-const int TFL_DMG_TARGETLOSS = 32; // loses target when damaged
-const int TFL_DMG_AIMSHAKE = 64; // damage throws off aim
-const int TFL_DMG_HEADSHAKE = 128; // damage shakes head
-const int TFL_DMG_DEATH_NORESPAWN = 256; // no re-spawning
-
-// spawn flags
-const int TSF_SUSPENDED = 1;
-const int TSF_TERRAINBASE = 2; // currently unused
-const int TSF_NO_AMMO_REGEN = 4; // disable builtin ammo regeneration
-const int TSF_NO_PATHBREAK = 8; // don't break path to chase enemies, will still fire at them if possible
-const int TSL_NO_RESPAWN = 16; // don't re-spawn
-const int TSL_ROAM = 32; // roam while idle
-
-// send flags
-const int TNSF_UPDATE       = 2;
-const int TNSF_STATUS       = 4;
-const int TNSF_SETUP        = 8;
-const int TNSF_ANG          = 16;
-const int TNSF_AVEL         = 32;
-const int TNSF_MOVE         = 64;
-.float anim_start_time;
-const int TNSF_ANIM         = 128;
-
-const int TNSF_FULL_UPDATE  = 16777215;
-
-
-// entity properties of turretinfo:
-.int turretid; // TUR_...
-.string netname; // short name
-.string turret_name; // human readable name
-.float(float) turret_func; // m_...
-.string mdl; // currently a copy of the model
-.string model; // full name of model
-.string head_model; // full name of tur_head model
-.string cvar_basename; // TODO: deprecate!
-.float spawnflags;
-.vector mins, maxs; // turret hitbox size
-
-// other useful macros
-#define TUR_ACTION(turrettype,mrequest) (get_turretinfo(turrettype)).turret_func(mrequest)
-#define TUR_NAME(turrettype) (get_turretinfo(turrettype)).turret_name
-
-// =====================
-//  Turret Registration
-// =====================
-
-float t_null(float dummy);
-void register_turret(float id, float(float) func, float turretflags, vector min_s, vector max_s, string modelname, string headmodelname, string shortname, string mname);
-void register_turrets_done();
-
-const float TUR_MAXCOUNT = 24;
-const int TUR_FIRST = 1;
-float TUR_COUNT;
-float TUR_LAST;
-
-#define REGISTER_TURRET_2(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
-       float id; \
-       float func(float); \
-       void RegisterTurrets_##id() \
-       { \
-               TUR_LAST = (id = TUR_FIRST + TUR_COUNT); \
-               ++TUR_COUNT; \
-               register_turret(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname); \
-       } \
-       ACCUMULATE_FUNCTION(RegisterTurrets, RegisterTurrets_##id)
-#ifdef MENUQC
-#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
-       REGISTER_TURRET_2(TUR_##id,t_null,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
-#else
-#define REGISTER_TURRET(id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname) \
-       REGISTER_TURRET_2(TUR_##id,func,turretflags,min_s,max_s,modelname,headmodelname,shortname,mname)
-#endif
-
-#include "all.qh"
-
-#undef REGISTER_TURRET
-ACCUMULATE_FUNCTION(RegisterTurrets, register_turrets_done)
-
-#endif
index d4e632c4c18e2ebf41b6852f379e40fbee937563..117e3478324c79a96864a30688a6ddeec925d192 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ EWHEEL,
 /* function   */ t_ewheel,
@@ -121,7 +121,7 @@ void ewheel_move_idle()
         movelib_beak_simple((autocvar_g_turrets_unit_ewheel_speed_stop));
 }
 
-spawnfunc(turret_ewheel) { if(!turret_initialize(TUR_EWHEEL)) remove(self); }
+spawnfunc(turret_ewheel) { if(!turret_initialize(TUR_EWHEEL.m_id)) remove(self); }
 
 float t_ewheel(float req)
 {SELFPARAM();
@@ -136,7 +136,7 @@ float t_ewheel(float req)
             {
                 turret_do_updates(self);
 
-                _mis = turret_projectile(W_Sound("lasergun_fire"), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE);
+                _mis = turret_projectile(SND(LASERGUN_FIRE), 1, 0, DEATH_TURRET_EWHEEL, PROJECTILE_BLASTER, TRUE, TRUE);
                 _mis.missile_flags = MIF_SPLASH;
 
                 Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
index b819ae9507d47e547f00abd538d5a8079eade54c..3b9330f7e445f2df9791059cd5fc1df06f5c6af5 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ FLAC,
 /* function   */ t_flac,
@@ -28,7 +28,7 @@ void turret_flac_projectile_think_explode()
     remove(self);
 }
 
-spawnfunc(turret_flac) { if(!turret_initialize(TUR_FLAC)) remove(self); }
+spawnfunc(turret_flac) { if(!turret_initialize(TUR_FLAC.m_id)) remove(self); }
 
 float t_flac(float req)
 {SELFPARAM();
@@ -40,7 +40,7 @@ float t_flac(float req)
 
             turret_tag_fire_update();
 
-            proj = turret_projectile(W_Sound("hagar_fire"), 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
+            proj = turret_projectile(SND(HAGAR_FIRE), 5, 0, DEATH_TURRET_FLAC, PROJECTILE_HAGAR, TRUE, TRUE);
             Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
             proj.think   = turret_flac_projectile_think_explode;
             proj.nextthink  = time + self.tur_impacttime + (random() * 0.01 - random() * 0.01);
index c1e2f5d4558220a32955efedb6546f2bb4d4563b..3b6389a96428a66be641f4012987dd652db9ef1f 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ FUSIONREACTOR,
 /* function   */ t_fusionreactor,
@@ -40,7 +40,7 @@ bool turret_fusionreactor_firecheck()
     return true;
 }
 
-spawnfunc(turret_fusionreactor) { if(!turret_initialize(TUR_FUSIONREACTOR)) remove(self); }
+spawnfunc(turret_fusionreactor) { if(!turret_initialize(TUR_FUSIONREACTOR.m_id)) remove(self); }
 
 float t_fusionreactor(float req)
 {SELFPARAM();
index 1b798bbaafce8e764ca05287b946e58c7d7fdfdb..a253d20ed102ee1aaba5fa06c21333d98373e5f5 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ HELLION,
 /* function   */ t_hellion,
@@ -76,7 +76,7 @@ void turret_hellion_missile_think()
     UpdateCSQCProjectile(self);
 }
 
-spawnfunc(turret_hellion) { if(!turret_initialize(TUR_HELLION)) remove(self); }
+spawnfunc(turret_hellion) { if(!turret_initialize(TUR_HELLION.m_id)) remove(self); }
 
 float t_hellion(float req)
 {SELFPARAM();
@@ -91,7 +91,7 @@ float t_hellion(float req)
             else
                 self.tur_shotorg = gettaginfo(self.tur_head, gettagindex(self.tur_head, "tag_fire2"));
 
-            missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE);
+            missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_HELLION, PROJECTILE_ROCKET, FALSE, FALSE);
             te_explosion (missile.origin);
             missile.think              = turret_hellion_missile_think;
             missile.nextthink  = time;
index 4dcbe9592dff0820d7389f4418bb59df96da32bd..25235734badd158eeb3ff3f46a5e43d9b93cff94 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ HK,
 /* function   */ t_hk,
@@ -273,7 +273,7 @@ float turret_hk_addtarget(entity e_target,entity e_sender)
     return 0;
 }
 
-spawnfunc(turret_hk) { if(!turret_initialize(TUR_HK)) remove(self); }
+spawnfunc(turret_hk) { if(!turret_initialize(TUR_HK.m_id)) remove(self); }
 
 float t_hk(float req)
 {SELFPARAM();
@@ -283,7 +283,7 @@ float t_hk(float req)
         {
             entity missile;
 
-            missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, FALSE, FALSE);
+            missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_HK, PROJECTILE_ROCKET, FALSE, FALSE);
             te_explosion (missile.origin);
 
             missile.think                      = turret_hk_missile_think;
index bde4f560b4b3aa45aa0a04b9a1475d109ce8c0a3..eeb889022b1610fb32c18d85bdea1a2a27dff18f 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ MACHINEGUN,
 /* function   */ t_machinegun,
@@ -11,7 +11,7 @@ REGISTER_TURRET(
 );
 #else
 #ifdef SVQC
-spawnfunc(turret_machinegun) { if(!turret_initialize(TUR_MACHINEGUN)) remove(self); }
+spawnfunc(turret_machinegun) { if(!turret_initialize(TUR_MACHINEGUN.m_id)) remove(self); }
 
 void W_MachineGun_MuzzleFlash(void);
 
@@ -48,7 +48,6 @@ float t_machinegun(float req)
         }
         case TR_PRECACHE:
         {
-            precache_sound (W_Sound("uzi_fire"));
             return true;
         }
     }
index 9ae66630756b32c99872a702bb610847ccbddb72..7e130c6e18907d57182f8427525f332eb9b54c82 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ MLRS,
 /* function   */ t_mlrs,
@@ -11,7 +11,7 @@ REGISTER_TURRET(
 );
 #else
 #ifdef SVQC
-spawnfunc(turret_mlrs) { if(!turret_initialize(TUR_MLRS)) remove(self); }
+spawnfunc(turret_mlrs) { if(!turret_initialize(TUR_MLRS.m_id)) remove(self); }
 
 float t_mlrs(float req)
 {SELFPARAM();
@@ -22,7 +22,7 @@ float t_mlrs(float req)
             entity missile;
 
             turret_tag_fire_update();
-            missile = turret_projectile(W_Sound("rocket_fire"), 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE);
+            missile = turret_projectile(SND(ROCKET_FIRE), 6, 10, DEATH_TURRET_MLRS, PROJECTILE_ROCKET, TRUE, TRUE);
             missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed);
             missile.missile_flags = MIF_SPLASH;
             te_explosion (missile.origin);
index ca947623e106afaf76421c8112feb109ac5db04c..6eec37ab4d6532abaaa5e20d9b49480e18e11f25 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ PHASER,
 /* function   */ t_phaser,
@@ -26,7 +26,7 @@ void beam_think()
         self.owner.attack_finished_single = time + self.owner.shot_refire;
         self.owner.fireflag = 2;
         self.owner.tur_head.frame = 10;
-        sound (self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+        sound (self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
         remove(self);
         return;
     }
@@ -36,7 +36,7 @@ void beam_think()
     if (time - self.shot_spread > 0)
     {
         self.shot_spread = time + 2;
-        sound (self, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
+        sound (self, CH_SHOTS_SINGLE, SND_TUR_PHASER, VOL_BASE, ATTEN_NORM);
     }
 
 
@@ -57,7 +57,7 @@ void beam_think()
 
 }
 
-spawnfunc(turret_phaser) { if(!turret_initialize(TUR_PHASER)) remove(self); }
+spawnfunc(turret_phaser) { if(!turret_initialize(TUR_PHASER.m_id)) remove(self); }
 
 float t_phaser(float req)
 {SELFPARAM();
@@ -83,7 +83,7 @@ float t_phaser(float req)
             beam.enemy = self.enemy;
             beam.bot_dodge = true;
             beam.bot_dodgerating = beam.shot_dmg;
-            sound (beam, CH_SHOTS_SINGLE, "turrets/phaser.wav", VOL_BASE, ATTEN_NORM);
+            sound (beam, CH_SHOTS_SINGLE, SND_TUR_PHASER, VOL_BASE, ATTEN_NORM);
             self.fireflag = 1;
 
             beam.attack_finished_single = self.attack_finished_single;
@@ -91,7 +91,7 @@ float t_phaser(float req)
 
             setattachment(beam,self.tur_head,"tag_fire");
 
-            soundat (self, trace_endpos, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTEN_NORM);
+            soundat (self, trace_endpos, CH_SHOTS, SND(NEXIMPACT), VOL_BASE, ATTEN_NORM);
 
             if (self.tur_head.frame == 0)
                 self.tur_head.frame = 1;
@@ -137,7 +137,6 @@ float t_phaser(float req)
         }
         case TR_PRECACHE:
         {
-            precache_sound ("turrets/phaser.wav");
             return true;
         }
     }
index 36966a1ae2f68e6741d39540e03ff6c63ce4cf1b..59c0f850a76f5663cc81de0ffa53416d8da0400f 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ PLASMA,
 /* function   */ t_plasma,
@@ -11,7 +11,7 @@ REGISTER_TURRET(
 );
 #else
 #ifdef SVQC
-spawnfunc(turret_plasma) { if(!turret_initialize(TUR_PLASMA)) remove(self); }
+spawnfunc(turret_plasma) { if(!turret_initialize(TUR_PLASMA.m_id)) remove(self); }
 
 float t_plasma(float req)
 {SELFPARAM();
@@ -30,19 +30,14 @@ float t_plasma(float req)
                 Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
 
                 // teamcolor / hit beam effect
-                vector v;
-                string s;
-                v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
-                s = strcat("TE_TEI_G3", ((self.team) ? Static_Team_ColorName_Upper(self.team) : ""));
-
-                WarpZone_TrailParticles(world, _particleeffectnum(s), self.tur_shotorg, v);
-
+                vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
+                WarpZone_TrailParticles(world, particleeffectnum(EFFECT_VAPORIZER(self.team)), self.tur_shotorg, v);
                 if (self.tur_head.frame == 0)
                     self.tur_head.frame = 1;
             }
             else
             {
-                entity missile = turret_projectile(W_Sound("hagar_fire"), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
+                entity missile = turret_projectile(SND(HAGAR_FIRE), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
                 missile.missile_flags = MIF_SPLASH;
 
                 Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
index 6469c0591d3d1a16d1fdb769f2479e86b82b3252..edcf7ed21fd4c75ff6bda5c676617b4e56d04fd7 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ PLASMA_DUAL,
 /* function   */ t_plasma_dual,
@@ -11,7 +11,7 @@ REGISTER_TURRET(
 );
 #else
 #ifdef SVQC
-spawnfunc(turret_plasma_dual) { if(!turret_initialize(TUR_PLASMA_DUAL)) remove(self); }
+spawnfunc(turret_plasma_dual) { if(!turret_initialize(TUR_PLASMA_DUAL.m_id)) remove(self); }
 
 float t_plasma_dual(float req)
 {SELFPARAM();
@@ -31,18 +31,13 @@ float t_plasma_dual(float req)
                 Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
 
                 // teamcolor / hit beam effect
-                vector v;
-                string s;
-                v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
-                s = strcat(EFFECT_VAPORIZER_NEUTRAL.eent_eff_name, ((self.team) ? Static_Team_ColorName_Upper(self.team) : ""));
-
-                WarpZone_TrailParticles(world, _particleeffectnum(s), self.tur_shotorg, v);
-
+                vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
+                WarpZone_TrailParticles(world, particleeffectnum(EFFECT_VAPORIZER(self.team)), self.tur_shotorg, v);
                 self.tur_head.frame += 1;
             }
             else
             {
-                entity missile = turret_projectile(W_Sound("hagar_fire"), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
+                entity missile = turret_projectile(SND(HAGAR_FIRE), 1, 0, DEATH_TURRET_PLASMA, PROJECTILE_ELECTRO_BEAM, TRUE, TRUE);
                 missile.missile_flags = MIF_SPLASH;
                 Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
                 self.tur_head.frame += 1;
index 76f8083a9a82312bbe0b1e833daa4c949b04a1a7..ebcc4e997767cd3870cb2f6e007d7d40c0db02fb 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ TESLA,
 /* function   */ t_tesla,
@@ -89,7 +89,7 @@ float turret_tesla_firecheck()
     return 0;
 }
 
-spawnfunc(turret_tesla) { if(!turret_initialize(TUR_TESLA)) remove(self); }
+spawnfunc(turret_tesla) { if(!turret_initialize(TUR_TESLA.m_id)) remove(self); }
 
 float t_tesla(float req)
 {SELFPARAM();
index ceacde8c2a62d7d021f9413eea59d1e107cdfd1b..a2927cfbf29765be6ff5122c8525f39a34db0cca 100644 (file)
@@ -1,4 +1,4 @@
-#ifdef REGISTER_TURRET
+#ifndef IMPLEMENTATION
 REGISTER_TURRET(
 /* TUR_##id   */ WALKER,
 /* function   */ t_walker,
@@ -221,7 +221,7 @@ void walker_fire_rocket(vector org)
     rocket = spawn ();
     setorigin(rocket, org);
 
-    sound (self, CH_WEAPON_A, W_Sound("hagar_fire"), VOL_BASE, ATTEN_NORM);
+    sound (self, CH_WEAPON_A, SND_HAGAR_FIRE, VOL_BASE, ATTEN_NORM);
     setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot
 
     rocket.classname             = "walker_rocket";
@@ -334,7 +334,7 @@ void walker_move_path()
 #endif
 }
 
-spawnfunc(turret_walker) { if(!turret_initialize(TUR_WALKER)) remove(self); }
+spawnfunc(turret_walker) { if(!turret_initialize(TUR_WALKER.m_id)) remove(self); }
 
 float t_walker(float req)
 {SELFPARAM();
@@ -342,7 +342,7 @@ float t_walker(float req)
     {
         case TR_ATTACK:
         {
-            sound (self, CH_WEAPON_A, W_Sound("uzi_fire"), VOL_BASE, ATTEN_NORM);
+            sound (self, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM);
             fireBullet (self.tur_shotorg, self.tur_shotdir_updated, self.shot_spread, 0, self.shot_dmg, self.shot_force, DEATH_TURRET_WALK_GUN, 0);
             Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, self.tur_shotorg, self.tur_shotdir_updated * 1000, 1);
 
@@ -634,7 +634,6 @@ float t_walker(float req)
         }
         case TR_PRECACHE:
         {
-            precache_sound (W_Sound("rocket_impact"));
             return true;
         }
     }
@@ -645,7 +644,7 @@ float t_walker(float req)
 #endif // SVQC
 #ifdef CSQC
 
-#include "../../../server/movelib.qh"
+#include "../../../client/movelib.qh"
 
 void walker_draw()
 {SELFPARAM();
index a054edde8a56748c5d10fcd4e8d5640ce4882a5a..a506a59fcd2808ac26419691fe3c1b5ca7f90b17 100644 (file)
@@ -271,15 +271,6 @@ string fstrunzone(string s)
        return sc;
 }
 
-bool fexists(string f)
-{
-    int fh = fopen(f, FILE_READ);
-    if (fh < 0)
-        return false;
-    fclose(fh);
-    return true;
-}
-
 // Databases (hash tables)
 const float DB_BUCKETS = 8192;
 void db_save(float db, string pFilename)
index e3fab47b7da6d9961c982b9eda081f71a6bbde7f..d43136c6734d23842a08ab570d926edfa67b1d76 100644 (file)
@@ -230,10 +230,6 @@ const float XENCODE_LEN = 5;
 string xencode(float f);
 float xdecode(string s);
 
-// Play all sounds via sound7, for access to the extra channels.
-// Otherwise, channels 8 to 15 would be blocked for a weird QW feature.
-#define sound(e,c,s,v,a) sound7(e,c,s,v,a,0,0)
-
 int lowestbit(float f);
 
 #ifdef CSQC
index 3f3b77ea3308c80749042021a1ba5a5389e6e8fa..6e26f171264eb1c1f1fda5ae170604e1b86ad98e 100644 (file)
 #ifndef MENUQC
 STATIC_INIT(vehicles_common_initialize)
 {
-#ifdef CSQC
-       precache_sound ("vehicles/alarm.wav");
-       precache_sound ("vehicles/alarm_shield.wav");
-#endif // CSQC
 #ifdef SVQC
-       precache_sound("onslaught/ons_hit2.wav");
-       precache_sound("onslaught/electricity_explode.wav");
-
        addstat(STAT_HUD, AS_INT, hud);
        addstat(STAT_VEHICLESTAT_HEALTH,  AS_INT, vehicle_health);
        addstat(STAT_VEHICLESTAT_SHIELD,  AS_INT, vehicle_shield);
index b6c8844abd8028920814b047c0b3b62202fa7326..a91e3e212abcac3e162aeb2d901200297003e7f3 100644 (file)
@@ -23,7 +23,7 @@ void vehicle_alarm(entity e, int ch, string s0und)
        if(!autocvar_cl_vehicles_alarm)
                return;
 
-       sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE);
+       _sound(e, ch, s0und, VOL_BASEVOICE, ATTEN_NONE);
 }
 
 void AuxiliaryXhair_Draw2D()
@@ -79,8 +79,8 @@ void Net_VehicleSetup()
        // hud_id == 0 means we exited a vehicle, so stop alarm sound/s
        if(hud_id == 0)
        {
-               sound(self, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
-               sound(self, CH_PAIN_SINGLE, "misc/null.wav", VOL_BASEVOICE, ATTEN_NONE);
+               sound(self, CH_TRIGGER_SINGLE, SND_Null, VOL_BASEVOICE, ATTEN_NONE);
+               sound(self, CH_PAIN_SINGLE, SND_Null, VOL_BASEVOICE, ATTEN_NONE);
                return;
        }
 
@@ -235,7 +235,7 @@ void Vehicles_drawHUD(
                if(alarm1time < time)
                {
                        alarm1time = time + 2;
-                       vehicle_alarm(self, CH_PAIN_SINGLE, "vehicles/alarm.wav");
+                       vehicle_alarm(self, CH_PAIN_SINGLE, SND(VEH_ALARM));
                }
                drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
        }
@@ -243,7 +243,7 @@ void Vehicles_drawHUD(
        {
                if(alarm1time)
                {
-                       vehicle_alarm(self, CH_PAIN_SINGLE, "misc/null.wav");
+                       vehicle_alarm(self, CH_PAIN_SINGLE, SND(Null));
                        alarm1time = 0;
                }
                drawpic_skin(tmpPos, "vehicle_icon_health", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
@@ -257,7 +257,7 @@ void Vehicles_drawHUD(
                if(alarm2time < time)
                {
                        alarm2time = time + 1;
-                       vehicle_alarm(self, CH_TRIGGER_SINGLE, "vehicles/alarm_shield.wav");
+                       vehicle_alarm(self, CH_TRIGGER_SINGLE, SND(VEH_ALARM_SHIELD));
                }
                drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha * blinkValue, DRAWFLAG_NORMAL);
        }
@@ -265,7 +265,7 @@ void Vehicles_drawHUD(
        {
                if(alarm2time)
                {
-                       vehicle_alarm(self, CH_TRIGGER_SINGLE, "misc/null.wav");
+                       vehicle_alarm(self, CH_TRIGGER_SINGLE, SND(Null));
                        alarm2time = 0;
                }
                drawpic_skin(tmpPos, "vehicle_icon_shield", tmpSize, '1 1 1', hudAlpha, DRAWFLAG_NORMAL);
index 73ff86b4bef3d04c253ec25ad3ea92b37bbe8e12..8f2f7581a215c4c8cb2264dffecfd9cfe355589f 100644 (file)
@@ -289,7 +289,7 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound,
                proj.flags                 = FL_PROJECTILE | FL_NOTARGET;
 
        if(_mzlsound)
-               sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
+               _sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
 
        if(_mzlfx)
                Send_Effect_(_mzlfx, proj.origin, proj.velocity, 1);
@@ -303,7 +303,7 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound,
 
 void vehicles_gib_explode()
 {SELFPARAM();
-       sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
        Send_Effect(EFFECT_EXPLOSION_SMALL, self.wp00.origin + '0 0 64', '0 0 0', 1);
        remove(self);
@@ -907,7 +907,7 @@ void vehicles_exit(bool eject)
 
        _vehicle.team = _vehicle.tur_head.team;
 
-       sound (_vehicle, CH_TRIGGER_SINGLE, "misc/null.wav", 1, ATTEN_NORM);
+       sound (_vehicle, CH_TRIGGER_SINGLE, SND_Null, 1, ATTEN_NORM);
        _vehicle.vehicle_hudmodel.viewmodelforclient = _vehicle;
        _vehicle.phase = time + 1;
 
index fb06eabf517cde511955f8b9df82368e738fa1ce..d36392e207734c062c41887389909d89f2efaf33 100644 (file)
@@ -104,7 +104,7 @@ float bumble_raygun_send(entity to, int sf);
 void bumblebee_fire_cannon(entity _gun, string _tagname, entity _owner)
 {
        vector v = gettaginfo(_gun, gettagindex(_gun, _tagname));
-       vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, W_Sound("flacexp3"),
+       vehicles_projectile(EFFECT_BIGPLASMA_MUZZLEFLASH.eent_eff_name, SND(VEH_BUMBLEBEE_FIRE),
                                                v, normalize(v_forward + randomvec() * autocvar_g_vehicle_bumblebee_cannon_spread) * autocvar_g_vehicle_bumblebee_cannon_speed,
                                                autocvar_g_vehicle_bumblebee_cannon_damage, autocvar_g_vehicle_bumblebee_cannon_radius, autocvar_g_vehicle_bumblebee_cannon_force,  0,
                                                DEATH_VH_BUMB_GUN, PROJECTILE_BUMBLE_GUN, 0, true, true, _owner);
@@ -716,7 +716,7 @@ void bumblebee_blowup()
                                 autocvar_g_vehicle_bumblebee_blowup_forceintensity,
                                 DEATH_VH_BUMB_DEATH, world);
 
-       sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        Send_Effect(EFFECT_EXPLOSION_BIG, (self.origin + '0 0 100') + (randomvec() * 80), '0 0 0', 1);
 
        if(self.owner.deadflag == DEAD_DYING)
@@ -732,7 +732,7 @@ void bumblebee_diethink()
 
        if(random() < 0.1)
        {
-               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
        }
 
index 1422ab83af47141da0c9741c41d0ac7e1a64de18..4d62249f47abcde8e9f63e5581a4cd4ffb47c8c3 100644 (file)
@@ -174,7 +174,7 @@ void racer_fire_cannon(string tagname)
        entity bolt;
 
        v = gettaginfo(self, gettagindex(self, tagname));
-       bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"),
+       bolt = vehicles_projectile(EFFECT_RACER_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE),
                                                   v, normalize(v_forward + randomvec() * autocvar_g_vehicle_racer_cannon_spread) * autocvar_g_vehicle_racer_cannon_speed,
                                                   autocvar_g_vehicle_racer_cannon_damage, autocvar_g_vehicle_racer_cannon_radius, autocvar_g_vehicle_racer_cannon_force,  0,
                                                   DEATH_VH_WAKI_GUN, PROJECTILE_WAKICANNON, 0, true, true, self.owner);
@@ -292,7 +292,7 @@ void racer_rocket_tracker()
 void racer_fire_rocket(string tagname, entity trg)
 {SELFPARAM();
        vector v = gettaginfo(self, gettagindex(self, tagname));
-       entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"),
+       entity rocket = vehicles_projectile(EFFECT_RACER_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE),
                                                   v, v_forward * autocvar_g_vehicle_racer_rocket_speed,
                                                   autocvar_g_vehicle_racer_rocket_damage, autocvar_g_vehicle_racer_rocket_radius, autocvar_g_vehicle_racer_rocket_force, 3,
                                                   DEATH_VH_WAKI_ROCKET, PROJECTILE_WAKIROCKET, 20, false, false, self.owner);
@@ -385,7 +385,7 @@ float racer_frame()
                {
                        self.sounds = 1;
                        self.sound_nexttime = time + 10.922667; //soundlength("vehicles/racer_move.wav");
-                       sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_move.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_MOVE, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
 #endif
        }
@@ -396,7 +396,7 @@ float racer_frame()
                {
                        self.sounds = 0;
                        self.sound_nexttime = time + 11.888604; //soundlength("vehicles/racer_idle.wav");
-                       sound (self, CH_TRIGGER_SINGLE, "vehicles/racer_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_RACER_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
        }
 #endif
@@ -435,14 +435,14 @@ float racer_frame()
                if(racer.strength_finished < time)
                {
                        racer.strength_finished = time + 10.922667; //soundlength("vehicles/racer_boost.wav");
-                       sound (racer.tur_head, CH_TRIGGER_SINGLE, "vehicles/racer_boost.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                       sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RACER_BOOST, VOL_VEHICLEENGINE, ATTEN_NORM);
                }
 #endif
        }
        else
        {
                racer.strength_finished = 0;
-               sound (racer.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+               sound (racer.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM);
        }
 
        if(cont == CONTENT_WATER || cont == CONTENT_LAVA || cont == CONTENT_SLIME)
@@ -589,7 +589,7 @@ void racer_exit(float eject)
        self.think        = racer_think;
        self.nextthink  = time;
        self.movetype   = MOVETYPE_BOUNCE;
-       sound (self.tur_head, CH_TRIGGER_SINGLE, "misc/null.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+       sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, VOL_VEHICLEENGINE, ATTEN_NORM);
 
        if(!self.owner)
                return;
@@ -856,14 +856,6 @@ bool v_racer(int req)
 
                case VR_PRECACHE:
                {
-               #ifdef SVQC
-                       precache_sound (W_Sound("lasergun_fire"));
-                       precache_sound (W_Sound("rocket_fire"));
-
-                       precache_sound ("vehicles/racer_idle.wav");
-                       precache_sound ("vehicles/racer_move.wav");
-                       precache_sound ("vehicles/racer_boost.wav");
-               #endif
                        return true;
                }
        }
index 0108a3e707560d502d0bc54938263032daeca9c8..a1c058fb00ef3015c1402959da2afc723a636427 100644 (file)
@@ -195,7 +195,7 @@ void raptor_bombdrop()
 
 void raptor_fire_cannon(entity gun, string tagname)
 {SELFPARAM();
-       vehicles_projectile(EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, W_Sound("lasergun_fire"),
+       vehicles_projectile(EFFECT_RAPTOR_MUZZLEFLASH.eent_eff_name, SND(LASERGUN_FIRE),
                                                   gettaginfo(gun, gettagindex(gun, tagname)), normalize(v_forward + randomvec() * autocvar_g_vehicle_raptor_cannon_spread) * autocvar_g_vehicle_raptor_cannon_speed,
                                                   autocvar_g_vehicle_raptor_cannon_damage, autocvar_g_vehicle_raptor_cannon_radius, autocvar_g_vehicle_raptor_cannon_force,  0,
                                                   DEATH_VH_RAPT_CANNON, PROJECTILE_RAPTORCANNON, 0, true, true, self.owner);
@@ -334,15 +334,15 @@ float raptor_frame()
        if(self.sound_nexttime < time)
        {
                self.sound_nexttime = time + 7.955812;
-               //sound (self.tur_head, CH_TRIGGER_SINGLE, "vehicles/raptor_fly.wav", 1 - ftmp,   ATTEN_NORM );
-               sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", 1, ATTEN_NORM);
+               //sound (self.tur_head, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_FLY, 1 - ftmp,   ATTEN_NORM );
+               sound (self, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_SPEED, 1, ATTEN_NORM);
                self.wait = ftmp;
        }
        /*
        else if(fabs(ftmp - self.wait) > 0.2)
        {
-               sound (self.tur_head, CH_TRIGGER_SINGLE, "", 1 - ftmp,   ATTEN_NORM );
-               sound (self, CH_TRIGGER_SINGLE, "", ftmp, ATTEN_NORM);
+               sound (self.tur_head, CH_TRIGGER_SINGLE, SND_Null, 1 - ftmp,   ATTEN_NORM );
+               sound (self, CH_TRIGGER_SINGLE, SND_Null, ftmp, ATTEN_NORM);
                self.wait = ftmp;
        }
        */
@@ -629,7 +629,7 @@ float raptor_frame()
                }
 
                if(_incomming)
-                       sound(self, CH_PAIN_SINGLE, "vehicles/missile_alarm.wav", VOL_BASE, ATTEN_NONE);
+                       sound(self, CH_PAIN_SINGLE, SND_VEH_MISSILE_ALARM, VOL_BASE, ATTEN_NONE);
 
                self.bomb1.cnt = time + 1;
        }
@@ -661,7 +661,7 @@ float raptor_takeoff()
        if(self.sound_nexttime < time)
        {
                self.sound_nexttime = time + 7.955812; //soundlength("vehicles/raptor_fly.wav");
-               sound (self, CH_TRIGGER_SINGLE, "vehicles/raptor_speed.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+               sound (self, CH_TRIGGER_SINGLE, SND_VEH_RAPTOR_SPEED, VOL_VEHICLEENGINE, ATTEN_NORM);
        }
 
        // Takeoff sequense
@@ -727,7 +727,7 @@ void raptor_diethink()
 
        if(random() < 0.05)
        {
-               sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+               sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
        }
        self.nextthink = time;
@@ -969,10 +969,6 @@ float v_raptor(float req)
                }
                case VR_PRECACHE:
                {
-                       precache_sound ("vehicles/raptor_fly.wav");
-                       precache_sound ("vehicles/raptor_speed.wav");
-                       precache_sound ("vehicles/missile_alarm.wav");
-
                        return true;
                }
        }
index d2d99e1e6707f3543afe95915f9d68c7244ffb31..6e1fffe7a70c3cecd6f49175f8bac3e9d16744fe 100644 (file)
@@ -269,7 +269,7 @@ void spiderbot_rocket_do()
        switch(self.vehicle_weapon2mode)
        {
                case SBRM_VOLLY:
-                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"),
+                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE),
                                                                   v, normalize(randomvec() * autocvar_g_vehicle_spiderbot_rocket_spread + v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
                                                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
                                                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
@@ -283,7 +283,7 @@ void spiderbot_rocket_do()
                                self.wait = -10;
                        break;
                case SBRM_GUIDE:
-                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"),
+                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE),
                                                                   v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
                                                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
                                                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, false, self.owner);
@@ -295,7 +295,7 @@ void spiderbot_rocket_do()
 
                break;
                case SBRM_ARTILLERY:
-                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, W_Sound("rocket_fire"),
+                       rocket = vehicles_projectile(EFFECT_SPIDERBOT_ROCKETLAUNCH.eent_eff_name, SND(ROCKET_FIRE),
                                                                   v, normalize(v_forward) * autocvar_g_vehicle_spiderbot_rocket_speed,
                                                                   autocvar_g_vehicle_spiderbot_rocket_damage, autocvar_g_vehicle_spiderbot_rocket_radius, autocvar_g_vehicle_spiderbot_rocket_force, 1,
                                                                   DEATH_VH_SPID_ROCKET, PROJECTILE_SPIDERROCKET, autocvar_g_vehicle_spiderbot_rocket_health, false, true, self.owner);
@@ -407,7 +407,7 @@ float spiderbot_frame()
                if(spider.flags & FL_ONGROUND)
                if(spider.frame == 4 && self.tur_head.wait != 0)
                {
-                       sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_land.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_LAND, VOL_VEHICLEENGINE, ATTEN_NORM);
                        spider.frame = 5;
                }
 
@@ -416,7 +416,7 @@ float spiderbot_frame()
 
                if((spider.flags & FL_ONGROUND) && player.BUTTON_JUMP && !spider.BUTTON_JUMP && self.tur_head.wait < time)
                {
-                       sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_jump.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                       sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_JUMP, VOL_VEHICLEENGINE, ATTEN_NORM);
                        //dprint("spiderbot_jump:", ftos(soundlength("vehicles/spiderbot_jump.wav")), "\n");
                        self.delay = 0;
 
@@ -452,7 +452,7 @@ float spiderbot_frame()
                                                self.delay = 3;
                                                self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_idle.wav");
                                                //dprint("spiderbot_idle:", ftos(soundlength("vehicles/spiderbot_idle.wav")), "\n");
-                                               sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_idle.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                                               sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_IDLE, VOL_VEHICLEENGINE, ATTEN_NORM);
                                        }
                                        movelib_beak_simple(autocvar_g_vehicle_spiderbot_speed_stop);
                                        spider.frame = 5;
@@ -496,7 +496,7 @@ float spiderbot_frame()
                                        {
                                                self.delay = 1;
                                                self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_walk.wav");
-                                               sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_walk.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                                               sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_WALK, VOL_VEHICLEENGINE, ATTEN_NORM);
                                                //dprint("spiderbot_walk:", ftos(soundlength("vehicles/spiderbot_walk.wav")), "\n");
                                        }
                                }
@@ -526,7 +526,7 @@ float spiderbot_frame()
                                        {
                                                self.delay = 2;
                                                self.sound_nexttime = time + 6.486500; //soundlength("vehicles/spiderbot_strafe.wav");
-                                               sound (self, CH_TRIGGER_SINGLE, "vehicles/spiderbot_strafe.wav", VOL_VEHICLEENGINE, ATTEN_NORM);
+                                               sound (self, CH_TRIGGER_SINGLE, SND_VEH_SPIDERBOT_STRAFE, VOL_VEHICLEENGINE, ATTEN_NORM);
                                                //dprint("spiderbot_strafe:", ftos(soundlength("vehicles/spiderbot_strafe.wav")), "\n");
                                        }
                                }
@@ -558,7 +558,7 @@ float spiderbot_frame()
                        fireBullet(v, v_forward, autocvar_g_vehicle_spiderbot_minigun_spread, autocvar_g_vehicle_spiderbot_minigun_solidpenetration,
                                 autocvar_g_vehicle_spiderbot_minigun_damage, autocvar_g_vehicle_spiderbot_minigun_force, DEATH_VH_SPID_MINIGUN, 0);
 
-                       sound (gun, CH_WEAPON_A, W_Sound("uzi_fire"), VOL_BASE, ATTEN_NORM);
+                       sound (gun, CH_WEAPON_A, SND_UZI_FIRE, VOL_BASE, ATTEN_NORM);
                        //trailparticles(self, _particleeffectnum("spiderbot_minigun_trail"), v, trace_endpos);
                        pointparticles(particleeffectnum(EFFECT_SPIDERBOT_MINIGUN_MUZZLEFLASH), v, v_forward * 2500, 1);
 
@@ -678,7 +678,7 @@ void spiderbot_headfade()
        {
                if(self.alpha > 0.1)
                {
-                       sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                        Send_Effect(EFFECT_EXPLOSION_BIG, self.origin + '0 0 100', '0 0 0', 1);
                }
                remove(self);
@@ -691,7 +691,7 @@ void spiderbot_blowup()
        {
                if(random() < 0.1)
                {
-                       sound (self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
                        Send_Effect(EFFECT_EXPLOSION_SMALL, randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
                }
                self.nextthink = time + 0.1;
@@ -925,15 +925,6 @@ float v_spiderbot(float req)
                }
                case VR_PRECACHE:
                {
-                       precache_sound (W_Sound("uzi_fire") );
-                       precache_sound (W_Sound("rocket_impact"));
-
-                       precache_sound ("vehicles/spiderbot_die.wav");
-                       precache_sound ("vehicles/spiderbot_idle.wav");
-                       precache_sound ("vehicles/spiderbot_jump.wav");
-                       precache_sound ("vehicles/spiderbot_strafe.wav");
-                       precache_sound ("vehicles/spiderbot_walk.wav");
-                       precache_sound ("vehicles/spiderbot_land.wav");
                        return true;
                }
        }
index 046298a4c4f97c7bd2111a74503b2ac7483d46c6..b972cfdec4adfa1a74a6d7ef24b4c6c7dc6b9498 100644 (file)
@@ -331,7 +331,16 @@ int GetAmmoStat(.int ammotype)
 
 string W_Sound(string w_snd)
 {
-       string output = strcat("weapons/", w_snd, ".wav");
+       #define extensions(X) X(wav) X(ogg)
+       #define tryext(ext) { if (fexists(strcat("sound/", output = strcat("weapons/", w_snd, "."#ext)))) break; }
+       string output;
+       do {
+               extensions(tryext);
+               #undef tryext
+               #undef extensions
+               output = strcat("weapons/", w_snd);
+       } while (0);
+
 #ifdef SVQC
        MUTATOR_CALLHOOK(WeaponSound, w_snd, output);
        return weapon_sound_output;
index cf117c823f2fb25468ee2bac11c9191109b9558a..6e1e2c7cb6ebdec188eab9e383154d5bbb825822 100644 (file)
@@ -267,7 +267,7 @@ void W_Arc_Beam_Think(void)
                        {
                                Send_Effect_("arc_overheat",
                                        self.beam_start, self.beam_wantdir, 1 );
-                               sound(self, CH_WEAPON_A, W_Sound("arc_stop"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_A, SND_ARC_STOP, VOL_BASE, ATTN_NORM);
                        }
                }
 
@@ -579,7 +579,7 @@ void W_Arc_Beam(float burst)
 
        // only play fire sound if 1 sec has passed since player let go the fire button
        if(time - self.beam_prev > 1)
-               sound(self, CH_WEAPON_A, W_Sound("arc_fire"), VOL_BASE, ATTN_NORM);
+               sound(self, CH_WEAPON_A, SND_ARC_FIRE, VOL_BASE, ATTN_NORM);
 
        entity beam = self.arc_beam = spawn();
        beam.classname = "W_Arc_Beam";
@@ -611,7 +611,7 @@ void Arc_Smoke()
                        if ( !self.arc_smoke_sound )
                        {
                                self.arc_smoke_sound = 1;
-                               sound(self, CH_SHOTS_SINGLE, W_Sound("arc_loop_overheat"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS_SINGLE, SND_ARC_LOOP_OVERHEAT, VOL_BASE, ATTN_NORM);
                        }
                }
        }
@@ -627,7 +627,7 @@ void Arc_Smoke()
                !( self.BUTTON_ATCK || self.BUTTON_ATCK2 ) ) || self.switchweapon != WEP_ARC.m_id )
        {
                self.arc_smoke_sound = 0;
-               sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
        }
 }
 
@@ -695,7 +695,7 @@ bool W_Arc(int req)
 
                        if(self.arc_BUTTON_ATCK_prev != 0)
                        {
-                               sound(self, CH_WEAPON_A, W_Sound("arc_stop"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_A, SND_ARC_STOP, VOL_BASE, ATTN_NORM);
                                weapon_thinkf(WFRAME_FIRE1, WEP_CVAR(arc, beam_animtime), w_ready);
                                ATTACK_FINISHED(self) = time + WEP_CVAR(arc, beam_refire) * W_WeaponRateFactor();
                        }
@@ -716,10 +716,6 @@ bool W_Arc(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("arc_fire"));
-                       precache_sound(W_Sound("arc_loop"));
-                       precache_sound(W_Sound("arc_stop"));
-                       precache_sound(W_Sound("arc_loop_overheat"));
                        if(!arc_shotorigin[0])
                        {
                                arc_shotorigin[0] = shotorg_adjust_values(CL_Weapon_GetShotOrg(WEP_ARC.m_id), false, false, 1);
@@ -1158,7 +1154,7 @@ void Draw_ArcBeam(void)
 void Remove_ArcBeam(void)
 {SELFPARAM();
        remove(self.beam_muzzleentity);
-       sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
 }
 
 void Ent_ReadArcBeam(float isnew)
@@ -1180,7 +1176,7 @@ void Ent_ReadArcBeam(float isnew)
                self.draw = Draw_ArcBeam;
                self.entremove = Remove_ArcBeam;
                self.move_time = time;
-               loopsound(self, CH_SHOTS_SINGLE, W_Sound("arc_loop"), VOL_BASE, ATTEN_NORM);
+               loopsound(self, CH_SHOTS_SINGLE, SND(ARC_LOOP), VOL_BASE, ATTEN_NORM);
 
                flash = spawn();
                flash.owner = self;
@@ -1524,7 +1520,6 @@ bool W_Arc(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("arc_loop"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index e91f424c16a684850c2bc03eb35a5513662401bb..10e55990a5594f645aeec8859e357905cf8d6135 100644 (file)
@@ -95,7 +95,7 @@ void W_Blaster_Attack(
 {SELFPARAM();
        vector s_forward = v_forward * cos(atk_shotangle * DEG2RAD) + v_up * sin(atk_shotangle * DEG2RAD);
 
-       W_SetupShot_Dir(self, s_forward, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_B, atk_damage);
+       W_SetupShot_Dir(self, s_forward, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, atk_damage);
        Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        entity missile = spawn();
@@ -223,7 +223,6 @@ bool W_Blaster(int request)
 
                case WR_INIT:
                {
-                       precache_sound(W_Sound("lasergun_fire"));
                        BLASTER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -269,13 +268,12 @@ bool W_Blaster(int request)
                        vector org2;
                        org2 = w_org + w_backoff * 6;
                        pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1);
-                       if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM); }
+                       if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); }
                        return true;
                }
 
                case WR_INIT:
                {
-                       precache_sound(W_Sound("laserimpact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 3801b0b53c9cd57073a9704873083bf29479913d..bf6c0795f5985b9f1ae274bf94f76019929e4fd2 100644 (file)
@@ -354,7 +354,7 @@ void W_Crylink_Attack(void)
        if(WEP_CVAR_PRI(crylink, joinexplode))
                maxdmg += WEP_CVAR_PRI(crylink, joinexplode_damage);
 
-       W_SetupShot(self, false, 2, W_Sound("crylink_fire"), CH_WEAPON_A, maxdmg);
+       W_SetupShot(self, false, 2, SND(CRYLINK_FIRE), CH_WEAPON_A, maxdmg);
        forward = v_forward;
        right = v_right;
        up = v_up;
@@ -463,7 +463,7 @@ void W_Crylink_Attack2(void)
        if(WEP_CVAR_SEC(crylink, joinexplode))
                maxdmg += WEP_CVAR_SEC(crylink, joinexplode_damage);
 
-       W_SetupShot(self, false, 2, W_Sound("crylink_fire2"), CH_WEAPON_A, maxdmg);
+       W_SetupShot(self, false, 2, SND(CRYLINK_FIRE2), CH_WEAPON_A, maxdmg);
        forward = v_forward;
        right = v_right;
        up = v_up;
@@ -638,9 +638,6 @@ bool W_Crylink(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("crylink_fire"));
-                       precache_sound(W_Sound("crylink_fire2"));
-                       precache_sound(W_Sound("crylink_linkjoin"));
                        CRYLINK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -671,7 +668,7 @@ bool W_Crylink(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR_PRI(crylink, ammo), WEP_CVAR_SEC(crylink, ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -699,21 +696,19 @@ bool W_Crylink(int req)
                        {
                                pointparticles(particleeffectnum(EFFECT_CRYLINK_IMPACT2), org2, '0 0 0', 1);
                                if(!w_issilent)
-                                       sound(self, CH_SHOTS, W_Sound("crylink_impact2"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_CRYLINK_IMPACT2, VOL_BASE, ATTN_NORM);
                        }
                        else
                        {
                                pointparticles(particleeffectnum(EFFECT_CRYLINK_IMPACT), org2, '0 0 0', 1);
                                if(!w_issilent)
-                                       sound(self, CH_SHOTS, W_Sound("crylink_impact"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_CRYLINK_IMPACT, VOL_BASE, ATTN_NORM);
                        }
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("crylink_impact2"));
-                       precache_sound(W_Sound("crylink_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 149dbe4dd2f1a063e81678bf7d4b684c46e1c2cb..0735f79ab4eda876d2da26f947a37ebbb3c1aba2 100644 (file)
@@ -295,7 +295,7 @@ void W_Devastator_Think(void)
                        {
                                Send_Effect(EFFECT_ROCKET_GUIDE, self.origin, self.velocity, 1);
                                // TODO add a better sound here
-                               sound(self.realowner, CH_WEAPON_B, W_Sound("rocket_mode"), VOL_BASE, ATTN_NORM);
+                               sound(self.realowner, CH_WEAPON_B, SND_ROCKET_MODE, VOL_BASE, ATTN_NORM);
                                self.count = 1;
                        }
                }
@@ -342,7 +342,7 @@ void W_Devastator_Attack(void)
 
        W_DecreaseAmmo(WEP_CVAR(devastator, ammo));
 
-       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 5, W_Sound("rocket_fire"), CH_WEAPON_A, WEP_CVAR(devastator, damage));
+       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 5, SND(ROCKET_FIRE), CH_WEAPON_A, WEP_CVAR(devastator, damage));
        Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        missile = WarpZone_RefSys_SpawnSameRefSys(self);
@@ -559,7 +559,7 @@ bool W_Devastator(int req)
                                                }
                                        }
                                        if(rockfound)
-                                               sound(self, CH_WEAPON_B, W_Sound("rocket_det"), VOL_BASE, ATTN_NORM);
+                                               sound(self, CH_WEAPON_B, SND_ROCKET_DET, VOL_BASE, ATTN_NORM);
                                }
                        }
 
@@ -567,12 +567,6 @@ bool W_Devastator(int req)
                }
                case WR_INIT:
                {
-                       //if(autocvar_sv_precacheweapons)
-                       //{
-                               precache_sound(W_Sound("rocket_det"));
-                               precache_sound(W_Sound("rocket_fire"));
-                               precache_sound(W_Sound("rocket_mode"));
-                       //}
                        DEVASTATOR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -633,7 +627,7 @@ bool W_Devastator(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(WEP_CVAR(devastator, ammo), W_Sound("reload"));
+                       W_Reload(WEP_CVAR(devastator, ammo), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -662,13 +656,12 @@ bool W_Devastator(int req)
                        org2 = w_org + w_backoff * 12;
                        pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("rocket_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 6ff7229d403f7d0e2ca5e1602350d3fda88607e2..85a75ed9c5b9f483ba6d45a3fd5f3fef45feae9f 100644 (file)
@@ -255,7 +255,7 @@ void W_Electro_Attack_Bolt(void)
                '0 0 -3',
                false,
                2,
-               W_Sound("electro_fire"),
+               SND(ELECTRO_FIRE),
                CH_WEAPON_A,
                WEP_CVAR_PRI(electro, damage)
        );
@@ -296,7 +296,7 @@ void W_Electro_Orb_Touch(void)
        else
        {
                //UpdateCSQCProjectile(self);
-               spamsound(self, CH_SHOTS, W_Sound("electro_bounce"), VOL_BASE, ATTEN_NORM);
+               spamsound(self, CH_SHOTS, SND(ELECTRO_BOUNCE), VOL_BASE, ATTEN_NORM);
                self.projectiledeathtype |= HITTYPE_BOUNCE;
        }
 }
@@ -353,7 +353,7 @@ void W_Electro_Attack_Orb(void)
                '0 0 -4',
                false,
                2,
-               W_Sound("electro_fire2"),
+               SND(ELECTRO_FIRE2),
                CH_WEAPON_A,
                WEP_CVAR_SEC(electro, damage)
        );
@@ -498,11 +498,6 @@ bool W_Electro(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("electro_bounce"));
-                       precache_sound(W_Sound("electro_fire"));
-                       precache_sound(W_Sound("electro_fire2"));
-                       precache_sound(W_Sound("electro_impact"));
-                       precache_sound(W_Sound("electro_impact_combo"));
                        ELECTRO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -538,7 +533,7 @@ bool W_Electro(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(electro, ammo), WEP_CVAR_SEC(electro, ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR_PRI(electro, ammo), WEP_CVAR_SEC(electro, ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -579,7 +574,7 @@ bool W_Electro(int req)
                        {
                                pointparticles(particleeffectnum(EFFECT_ELECTRO_BALLEXPLODE), org2, '0 0 0', 1);
                                if(!w_issilent)
-                                       sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM);
                        }
                        else
                        {
@@ -588,13 +583,13 @@ bool W_Electro(int req)
                                        // this is sent as "primary (w_deathtype & HITTYPE_BOUNCE)" to distinguish it from (w_deathtype & HITTYPE_SECONDARY) bounced balls
                                        pointparticles(particleeffectnum(EFFECT_ELECTRO_COMBO), org2, '0 0 0', 1);
                                        if(!w_issilent)
-                                               sound(self, CH_SHOTS, W_Sound("electro_impact_combo"), VOL_BASE, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_ELECTRO_IMPACT_COMBO, VOL_BASE, ATTEN_NORM);
                                }
                                else
                                {
                                        pointparticles(particleeffectnum(EFFECT_ELECTRO_IMPACT), org2, '0 0 0', 1);
                                        if(!w_issilent)
-                                               sound(self, CH_SHOTS, W_Sound("electro_impact"), VOL_BASE, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_ELECTRO_IMPACT, VOL_BASE, ATTEN_NORM);
                                }
                        }
 
@@ -602,8 +597,6 @@ bool W_Electro(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("electro_impact"));
-                       precache_sound(W_Sound("electro_impact_combo"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index f2c8c64acf6eb3a4e02c5257930d57f5b4a310f0..c334932f165f74fb96e7b120522584337460bbc3 100644 (file)
@@ -182,7 +182,7 @@ void W_Fireball_Attack1(void)
 {SELFPARAM();
        entity proj;
 
-       W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, W_Sound("fireball_fire2"), CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage));
+       W_SetupShot_ProjectileSize(self, '-16 -16 -16', '16 16 16', false, 2, SND(FIREBALL_FIRE2), CH_WEAPON_A, WEP_CVAR_PRI(fireball, damage) + WEP_CVAR_PRI(fireball, bfgdamage));
 
        Send_Effect(EFFECT_FIREBALL_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
@@ -251,7 +251,7 @@ void W_Fireball_Attack1_Frame1(void)
 void W_Fireball_Attack1_Frame0(void)
 {SELFPARAM();
        W_Fireball_AttackEffect(0, '-1.25 -3.75 0');
-       sound(self, CH_WEAPON_SINGLE, W_Sound("fireball_prefire2"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_WEAPON_SINGLE, SND_FIREBALL_PREFIRE2, VOL_BASE, ATTEN_NORM);
        weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_PRI(fireball, animtime), W_Fireball_Attack1_Frame1);
 }
 
@@ -316,7 +316,7 @@ void W_Fireball_Attack2(void)
                        f_diff = '+1.25 +3.75 0';
                        break;
        }
-       W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 2, W_Sound("fireball_fire"), CH_WEAPON_A, WEP_CVAR_SEC(fireball, damage));
+       W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 2, SND(FIREBALL_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(fireball, damage));
        traceline(w_shotorg, w_shotorg + f_diff_x * v_up + f_diff_y * v_right, MOVE_NORMAL, self);
        w_shotorg = trace_endpos;
 
@@ -399,9 +399,6 @@ bool W_Fireball(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("fireball_fire"));
-                       precache_sound(W_Sound("fireball_fire2"));
-                       precache_sound(W_Sound("fireball_prefire2"));
                        FIREBALL_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -460,14 +457,13 @@ bool W_Fireball(int req)
                                org2 = w_org + w_backoff * 16;
                                pointparticles(particleeffectnum(EFFECT_FIREBALL_EXPLODE), org2, '0 0 0', 1);
                                if(!w_issilent)
-                                       sound(self, CH_SHOTS, W_Sound("fireball_impact2"), VOL_BASE, ATTEN_NORM * 0.25); // long range boom
+                                       sound(self, CH_SHOTS, SND_FIREBALL_IMPACT2, VOL_BASE, ATTEN_NORM * 0.25); // long range boom
                        }
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("fireball_impact2"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 29ec6b78df99b259557526ee2af33e463549c90b..21755eac69a07005a2a8a24d58efab0d3f2b7c72 100644 (file)
@@ -127,7 +127,7 @@ void W_Hagar_Attack(void)
 
        W_DecreaseAmmo(WEP_CVAR_PRI(hagar, ammo));
 
-       W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage));
+       W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(hagar, damage));
 
        Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
@@ -170,7 +170,7 @@ void W_Hagar_Attack2(void)
 
        W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo));
 
-       W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
+       W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
 
        Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
@@ -223,7 +223,7 @@ void W_Hagar_Attack2_Load_Release(void)
 
        weapon_prepareattack_do(1, WEP_CVAR_SEC(hagar, refire));
 
-       W_SetupShot(self, false, 2, W_Sound("hagar_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
+       W_SetupShot(self, false, 2, SND(HAGAR_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hagar, damage));
        Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        forward = v_forward;
@@ -319,7 +319,7 @@ void W_Hagar_Attack2_Load(void)
                                self.weaponentity.state = WS_READY;
                                W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo) * self.hagar_load * -1); // give back ammo
                                self.hagar_load = 0;
-                               sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM);
 
                                // pause until we can load rockets again, once we re-press the alt fire button
                                self.hagar_loadstep = time + WEP_CVAR_SEC(hagar, load_speed) * W_WeaponRateFactor();
@@ -338,7 +338,7 @@ void W_Hagar_Attack2_Load(void)
                                        W_DecreaseAmmo(WEP_CVAR_SEC(hagar, ammo));
                                        self.weaponentity.state = WS_INUSE;
                                        self.hagar_load += 1;
-                                       sound(self, CH_WEAPON_B, W_Sound("hagar_load"), VOL_BASE * 0.8, ATTN_NORM); // sound is too loud according to most
+                                       sound(self, CH_WEAPON_B, SND_HAGAR_LOAD, VOL_BASE * 0.8, ATTN_NORM); // sound is too loud according to most
 
                                        if(self.hagar_load >= WEP_CVAR_SEC(hagar, load_max))
                                                stopped = true;
@@ -349,7 +349,7 @@ void W_Hagar_Attack2_Load(void)
                        if(stopped && !self.hagar_loadbeep && self.hagar_load) // prevents the beep from playing each frame
                        {
                                // if this is the last rocket we can load, play a beep sound to notify the player
-                               sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM);
                                self.hagar_loadbeep = true;
                                self.hagar_loadstep = time + WEP_CVAR_SEC(hagar, load_hold) * W_WeaponRateFactor();
                        }
@@ -369,7 +369,7 @@ void W_Hagar_Attack2_Load(void)
                        if(!self.hagar_warning) // prevents the beep from playing each frame
                        {
                                // we're about to automatically release after holding time, play a beep sound to notify the player
-                               sound(self, CH_WEAPON_A, W_Sound("hagar_beep"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_A, SND_HAGAR_BEEP, VOL_BASE, ATTN_NORM);
                                self.hagar_warning = true;
                        }
                }
@@ -451,9 +451,6 @@ bool W_Hagar(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("hagar_fire"));
-                       precache_sound(W_Sound("hagar_load"));
-                       precache_sound(W_Sound("hagar_beep"));
                        HAGAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -502,7 +499,7 @@ bool W_Hagar(int req)
                case WR_RELOAD:
                {
                        if(!self.hagar_load) // require releasing loaded rockets first
-                               W_Reload(min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), W_Sound("reload"));
+                               W_Reload(min(WEP_CVAR_PRI(hagar, ammo), WEP_CVAR_SEC(hagar, ammo)), SND(RELOAD));
 
                        return true;
                }
@@ -534,20 +531,17 @@ bool W_Hagar(int req)
                        if(!w_issilent)
                        {
                                if(w_random<0.15)
-                                       sound(self, CH_SHOTS, W_Sound("hagexp1"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_HAGEXP1, VOL_BASE, ATTN_NORM);
                                else if(w_random<0.7)
-                                       sound(self, CH_SHOTS, W_Sound("hagexp2"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_HAGEXP2, VOL_BASE, ATTN_NORM);
                                else
-                                       sound(self, CH_SHOTS, W_Sound("hagexp3"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_HAGEXP3, VOL_BASE, ATTN_NORM);
                        }
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("hagexp1"));
-                       precache_sound(W_Sound("hagexp2"));
-                       precache_sound(W_Sound("hagexp3"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 034a2502d422b18605069cc97faf55c4148a61cc..ac300fe540b416b632cfd2f89702dacf30f80669 100644 (file)
@@ -77,7 +77,7 @@ void W_HLAC_Attack(void)
     if(self.crouch)
         spread = spread * WEP_CVAR_PRI(hlac, spread_crouchmod);
 
-       W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage));
+       W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(hlac, damage));
        Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
        if(!autocvar_g_norecoil)
        {
@@ -125,7 +125,7 @@ void W_HLAC_Attack2(void)
     if(self.crouch)
         spread = spread * WEP_CVAR_SEC(hlac, spread_crouchmod);
 
-       W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage));
+       W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hlac, damage));
        Send_Effect(EFFECT_BLASTER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        missile = spawn();
@@ -241,7 +241,6 @@ bool W_HLAC(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("lasergun_fire"));
                        HLAC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -264,7 +263,7 @@ bool W_HLAC(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR_PRI(hlac, ammo), WEP_CVAR_SEC(hlac, ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -290,13 +289,12 @@ bool W_HLAC(int req)
                        org2 = w_org + w_backoff * 6;
                        pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("laserimpact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 18e07204af65e820b1931e7f85896a8faca5b6ef..f4c6a3c752a075b1a743c372b69b127150aa8457 100644 (file)
@@ -61,7 +61,7 @@ void W_HeavyMachineGun_Attack_Auto()
 
        W_DecreaseAmmo(WEP_CVAR(hmg, ammo));
 
-       W_SetupShot (self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(hmg, damage));
+       W_SetupShot (self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(hmg, damage));
 
        if(!autocvar_g_norecoil)
        {
@@ -118,7 +118,6 @@ bool W_HeavyMachineGun(int req)
                }
                case WR_INIT:
                {
-                       precache_sound (W_Sound("uzi_fire"));
                        HMG_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -147,7 +146,7 @@ bool W_HeavyMachineGun(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(WEP_CVAR(hmg, ammo), W_Sound("reload"));
+                       W_Reload(WEP_CVAR(hmg, ammo), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -177,19 +176,16 @@ bool W_HeavyMachineGun(int req)
                        pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), org2, w_backoff * 1000, 1);
                        if(!w_issilent)
                                if(w_random < 0.05)
-                                       sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_NORM);
                                else if(w_random < 0.1)
-                                       sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTEN_NORM);
                                else if(w_random < 0.2)
-                                       sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTEN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("ric1"));
-                       precache_sound(W_Sound("ric2"));
-                       precache_sound(W_Sound("ric3"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 3828bdb1eb84263ff867e078e3f83ee58246106c..6c1f82fdf8561a6ed83387731cbbbb89bbe64343 100644 (file)
@@ -134,7 +134,7 @@ void W_Hook_Attack2(void)
        entity gren;
 
        //W_DecreaseAmmo(WEP_CVAR_SEC(hook, ammo)); // WEAPONTODO: Figure out how to handle ammo with hook secondary (gravitybomb)
-       W_SetupShot(self, false, 4, W_Sound("hookbomb_fire"), CH_WEAPON_A, WEP_CVAR_SEC(hook, damage));
+       W_SetupShot(self, false, 4, SND(HOOKBOMB_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(hook, damage));
 
        gren = spawn();
        gren.owner = gren.realowner = self;
@@ -288,9 +288,6 @@ bool W_Hook(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("hook_impact")); // done by g_hook.qc
-                       precache_sound(W_Sound("hook_fire"));
-                       precache_sound(W_Sound("hookbomb_fire"));
                        HOOK_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -344,13 +341,12 @@ bool W_Hook(int req)
                        org2 = w_org + w_backoff * 2;
                        pointparticles(particleeffectnum(EFFECT_HOOK_EXPLODE), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("hookbomb_impact"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_HOOKBOMB_IMPACT, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("hookbomb_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 61f9210d902cfa56ddfa576292d8f11211d6e4ca..e9a50ab4393d34c6eb976ea1dbae2c77bb211f8c 100644 (file)
@@ -104,7 +104,7 @@ void W_MachineGun_MuzzleFlash(void)
 
 void W_MachineGun_Attack(int deathtype)
 {SELFPARAM();
-       W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage)));
+       W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, ((self.misc_bulletcounter == 1) ? WEP_CVAR(machinegun, first_damage) : WEP_CVAR(machinegun, sustained_damage)));
        if(!autocvar_g_norecoil)
        {
                self.punchangle_x = random() - 0.5;
@@ -180,7 +180,7 @@ void W_MachineGun_Attack_Auto(void)
 
        W_DecreaseAmmo(WEP_CVAR(machinegun, sustained_ammo));
 
-       W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
+       W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
        if(!autocvar_g_norecoil)
        {
                self.punchangle_x = random() - 0.5;
@@ -206,7 +206,7 @@ void W_MachineGun_Attack_Auto(void)
 
 void W_MachineGun_Attack_Burst(void)
 {SELFPARAM();
-       W_SetupShot(self, true, 0, W_Sound("uzi_fire"), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
+       W_SetupShot(self, true, 0, SND(UZI_FIRE), CH_WEAPON_A, WEP_CVAR(machinegun, sustained_damage));
        if(!autocvar_g_norecoil)
        {
                self.punchangle_x = random() - 0.5;
@@ -304,7 +304,6 @@ bool W_MachineGun(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("uzi_fire"));
                        MACHINEGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -347,7 +346,7 @@ bool W_MachineGun(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(max(WEP_CVAR(machinegun, sustained_ammo), WEP_CVAR(machinegun, first_ammo)), WEP_CVAR(machinegun, burst_ammo)), W_Sound("reload"));
+                       W_Reload(min(max(WEP_CVAR(machinegun, sustained_ammo), WEP_CVAR(machinegun, first_ammo)), WEP_CVAR(machinegun, burst_ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -377,19 +376,16 @@ bool W_MachineGun(int req)
                        pointparticles(particleeffectnum(EFFECT_MACHINEGUN_IMPACT), org2, w_backoff * 1000, 1);
                        if(!w_issilent)
                                if(w_random < 0.05)
-                                       sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTN_NORM);
                                else if(w_random < 0.1)
-                                       sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTN_NORM);
                                else if(w_random < 0.2)
-                                       sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("ric1"));
-                       precache_sound(W_Sound("ric2"));
-                       precache_sound(W_Sound("ric3"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index d1212d6a124fa4c90e4bfdb442d3fd07a23d2bec..40866970fb3438d3fd2fcd83cdc0bfeaccc05b76 100644 (file)
@@ -61,7 +61,7 @@ spawnfunc(weapon_minelayer) { weapon_defaultspawnfunc(WEP_MINE_LAYER.m_id); }
 
 void W_MineLayer_Stick(entity to)
 {SELFPARAM();
-       spamsound(self, CH_SHOTS, W_Sound("mine_stick"), VOL_BASE, ATTN_NORM);
+       spamsound(self, CH_SHOTS, SND(MINE_STICK), VOL_BASE, ATTN_NORM);
 
        // in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile
 
@@ -221,7 +221,7 @@ void W_MineLayer_Think(void)
        if((time > self.cnt) && (!self.mine_time) && (self.cnt > 0))
        {
                if(WEP_CVAR(minelayer, lifetime_countdown) > 0)
-                       spamsound(self, CH_SHOTS, W_Sound("mine_trigger"), VOL_BASE, ATTN_NORM);
+                       spamsound(self, CH_SHOTS, SND(MINE_TRIGGER), VOL_BASE, ATTN_NORM);
                self.mine_time = time + WEP_CVAR(minelayer, lifetime_countdown);
                self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near.
        }
@@ -244,7 +244,7 @@ void W_MineLayer_Think(void)
                if(head != self.realowner && DIFF_TEAM(head, self.realowner)) // don't trigger for team mates
                if(!self.mine_time)
                {
-                       spamsound(self, CH_SHOTS, W_Sound("mine_trigger"), VOL_BASE, ATTN_NORM);
+                       spamsound(self, CH_SHOTS, SND(MINE_TRIGGER), VOL_BASE, ATTN_NORM);
                        self.mine_time = time + WEP_CVAR(minelayer, time);
                }
                head = head.chain;
@@ -316,14 +316,14 @@ void W_MineLayer_Attack(void)
                {
                        // the refire delay keeps this message from being spammed
                        Send_Notification(NOTIF_ONE, self, MSG_MULTI, WEAPON_MINELAYER_LIMIT, WEP_CVAR(minelayer, limit));
-                       play2(self, W_Sound("unavailable"));
+                       play2(self, SND(UNAVAILABLE));
                        return;
                }
        }
 
        W_DecreaseAmmo(WEP_CVAR(minelayer, ammo));
 
-       W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, W_Sound("mine_fire"), CH_WEAPON_A, WEP_CVAR(minelayer, damage));
+       W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, SND(MINE_FIRE), CH_WEAPON_A, WEP_CVAR(minelayer, damage));
        Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        mine = WarpZone_RefSys_SpawnSameRefSys(self);
@@ -523,17 +523,13 @@ bool W_MineLayer(int req)
                        if(self.BUTTON_ATCK2)
                        {
                                if(W_MineLayer_PlacedMines(true))
-                                       sound(self, CH_WEAPON_B, W_Sound("mine_det"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_WEAPON_B, SND_MINE_DET, VOL_BASE, ATTN_NORM);
                        }
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("mine_det"));
-                       precache_sound(W_Sound("mine_fire"));
-                       precache_sound(W_Sound("mine_stick"));
-                       precache_sound(W_Sound("mine_trigger"));
                        MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -567,7 +563,7 @@ bool W_MineLayer(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(WEP_CVAR(minelayer, ammo), W_Sound("reload"));
+                       W_Reload(WEP_CVAR(minelayer, ammo), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -593,13 +589,12 @@ bool W_MineLayer(int req)
                        org2 = w_org + w_backoff * 12;
                        pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("mine_exp"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_MINE_EXP, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("mine_exp"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index b766b1c3392025573230ae98e0b4444fdbf6f14b..1276cca5d9347bbcd45d4142014a2793aa9c703f 100644 (file)
@@ -137,27 +137,14 @@ void W_Mortar_Grenade_Touch1(void)
        }
        else if(WEP_CVAR_PRI(mortar, type) == 1) // bounce
        {
-               float r;
-               r = random() * 6;
-               if(r < 1)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce1"), VOL_BASE, ATTN_NORM);
-               else if(r < 2)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce2"), VOL_BASE, ATTN_NORM);
-               else if(r < 3)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce3"), VOL_BASE, ATTN_NORM);
-               else if(r < 4)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce4"), VOL_BASE, ATTN_NORM);
-               else if(r < 5)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce5"), VOL_BASE, ATTN_NORM);
-               else
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce6"), VOL_BASE, ATTN_NORM);
+               spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTN_NORM);
                Send_Effect(EFFECT_HAGAR_BOUNCE, self.origin, self.velocity, 1);
                self.projectiledeathtype |= HITTYPE_BOUNCE;
                self.gl_bouncecnt += 1;
        }
        else if(WEP_CVAR_PRI(mortar, type) == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
        {
-               spamsound(self, CH_SHOTS, W_Sound("grenade_stick"), VOL_BASE, ATTN_NORM);
+               spamsound(self, CH_SHOTS, SND(GRENADE_STICK), VOL_BASE, ATTN_NORM);
 
                // let it stick whereever it is
                self.oldvelocity = self.velocity;
@@ -182,20 +169,7 @@ void W_Mortar_Grenade_Touch2(void)
        }
        else if(WEP_CVAR_SEC(mortar, type) == 1) // bounce
        {
-               float r;
-               r = random() * 6;
-               if(r < 1)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce1"), VOL_BASE, ATTN_NORM);
-               else if(r < 2)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce2"), VOL_BASE, ATTN_NORM);
-               else if(r < 3)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce3"), VOL_BASE, ATTN_NORM);
-               else if(r < 4)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce4"), VOL_BASE, ATTN_NORM);
-               else if(r < 5)
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce5"), VOL_BASE, ATTN_NORM);
-               else
-                       spamsound(self, CH_SHOTS, W_Sound("grenade_bounce6"), VOL_BASE, ATTN_NORM);
+               spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTN_NORM);
                Send_Effect(EFFECT_HAGAR_BOUNCE, self.origin, self.velocity, 1);
                self.projectiledeathtype |= HITTYPE_BOUNCE;
                self.gl_bouncecnt += 1;
@@ -206,7 +180,7 @@ void W_Mortar_Grenade_Touch2(void)
        }
        else if(WEP_CVAR_SEC(mortar, type) == 2 && (!other || (other.takedamage != DAMAGE_AIM && other.movetype == MOVETYPE_NONE))) // stick
        {
-               spamsound(self, CH_SHOTS, W_Sound("grenade_stick"), VOL_BASE, ATTN_NORM);
+               spamsound(self, CH_SHOTS, SND(GRENADE_STICK), VOL_BASE, ATTN_NORM);
 
                // let it stick whereever it is
                self.oldvelocity = self.velocity;
@@ -228,7 +202,7 @@ void W_Mortar_Attack(void)
 
        W_DecreaseAmmo(WEP_CVAR_PRI(mortar, ammo));
 
-       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, W_Sound("grenade_fire"), CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage));
+       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_PRI(mortar, damage));
        w_shotdir = v_forward; // no TrueAim for grenades please
 
        Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
@@ -277,7 +251,7 @@ void W_Mortar_Attack2(void)
 
        W_DecreaseAmmo(WEP_CVAR_SEC(mortar, ammo));
 
-       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, W_Sound("grenade_fire"), CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage));
+       W_SetupShot_ProjectileSize(self, '-3 -3 -3', '3 3 3', false, 4, SND(GRENADE_FIRE), CH_WEAPON_A, WEP_CVAR_SEC(mortar, damage));
        w_shotdir = v_forward; // no TrueAim for grenades please
 
        Send_Effect(EFFECT_GRENADE_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
@@ -392,7 +366,7 @@ bool W_Mortar(int req)
                                                }
                                        }
                                        if(nadefound)
-                                               sound(self, CH_WEAPON_B, W_Sound("rocket_det"), VOL_BASE, ATTN_NORM);
+                                               sound(self, CH_WEAPON_B, SND_ROCKET_DET, VOL_BASE, ATTN_NORM);
                                }
                                else if(weapon_prepareattack(1, WEP_CVAR_SEC(mortar, refire)))
                                {
@@ -405,14 +379,6 @@ bool W_Mortar(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("grenade_bounce1"));
-                       precache_sound(W_Sound("grenade_bounce2"));
-                       precache_sound(W_Sound("grenade_bounce3"));
-                       precache_sound(W_Sound("grenade_bounce4"));
-                       precache_sound(W_Sound("grenade_bounce5"));
-                       precache_sound(W_Sound("grenade_bounce6"));
-                       precache_sound(W_Sound("grenade_stick"));
-                       precache_sound(W_Sound("grenade_fire"));
                        MORTAR_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -435,7 +401,7 @@ bool W_Mortar(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), W_Sound("reload")); // WEAPONTODO
+                       W_Reload(min(WEP_CVAR_PRI(mortar, ammo), WEP_CVAR_SEC(mortar, ammo)), SND(RELOAD)); // WEAPONTODO
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -467,13 +433,12 @@ bool W_Mortar(int req)
                        org2 = w_org + w_backoff * 12;
                        pointparticles(particleeffectnum(EFFECT_GRENADE_EXPLODE), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("grenade_impact"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_GRENADE_IMPACT, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("grenade_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index 4438c5d83954c9ef61ae6537f585ed189055373d..66cdb21228b099c4d240a9b14ed12a0c5393cbf8 100644 (file)
@@ -132,19 +132,19 @@ void W_Porto_Touch(void)
 
        if(self.realowner.playerid != self.playerid)
        {
-               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                remove(self);
        }
        else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SLICK || trace_dphitcontents & DPCONTENTS_PLAYERCLIP)
        {
-               spamsound(self, CH_SHOTS, "porto/bounce.wav", VOL_BASE, ATTEN_NORM);
+               spamsound(self, CH_SHOTS, SND(PORTO_BOUNCE), VOL_BASE, ATTEN_NORM);
                // just reflect
                self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * trace_plane_normal);
                self.angles = vectoangles(self.velocity - 2 * trace_plane_normal * (self.velocity * trace_plane_normal));
        }
        else if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)
        {
-               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                W_Porto_Fail(0);
                if(self.cnt < 0)
                        Portal_ClearAll_PortalsOnly(self.realowner);
@@ -154,14 +154,14 @@ void W_Porto_Touch(void)
                // in-portal only
                if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_IN);
                        W_Porto_Success();
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        W_Porto_Fail(0);
                }
@@ -171,14 +171,14 @@ void W_Porto_Touch(void)
                // out-portal only
                if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_OUT);
                        W_Porto_Success();
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        W_Porto_Fail(0);
                }
@@ -188,7 +188,7 @@ void W_Porto_Touch(void)
                self.effects += EF_BLUE - EF_RED;
                if(Portal_SpawnInPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                {
-                       sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_IN);
                        self.right_vector = self.right_vector - 2 * trace_plane_normal * (self.right_vector * norm);
@@ -197,7 +197,7 @@ void W_Porto_Touch(void)
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                        trace_plane_normal = norm;
                        Portal_ClearAll_PortalsOnly(self.realowner);
                        W_Porto_Fail(0);
@@ -209,21 +209,21 @@ void W_Porto_Touch(void)
                {
                        if(Portal_SpawnOutPortalAtTrace(self.realowner, self.right_vector, self.portal_id))
                        {
-                               sound(self, CH_SHOTS, "porto/create.wav", VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_PORTO_CREATE, VOL_BASE, ATTEN_NORM);
                                trace_plane_normal = norm;
                                Send_Notification(NOTIF_ONE, self.realowner, MSG_CENTER, CENTER_PORTO_CREATED_OUT);
                                W_Porto_Success();
                        }
                        else
                        {
-                               sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                                Portal_ClearAll_PortalsOnly(self.realowner);
                                W_Porto_Fail(0);
                        }
                }
                else
                {
-                       sound(self, CH_SHOTS, "porto/unsupported.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_PORTO_UNSUPPORTED, VOL_BASE, ATTEN_NORM);
                        Portal_ClearAll_PortalsOnly(self.realowner);
                        W_Porto_Fail(0);
                }
@@ -234,7 +234,7 @@ void W_Porto_Attack(float type)
 {SELFPARAM();
        entity gren;
 
-       W_SetupShot(self, false, 4, "porto/fire.wav", CH_WEAPON_A, 0);
+       W_SetupShot(self, false, 4, SND(PORTO_FIRE), CH_WEAPON_A, 0);
        // always shoot from the eye
        w_shotdir = v_forward;
        w_shotorg = self.origin + self.view_ofs + ((w_shotorg - self.origin - self.view_ofs) * v_forward) * v_forward;
@@ -373,12 +373,6 @@ bool W_Porto(int req)
                }
                case WR_INIT:
                {
-                       precache_sound("porto/bounce.wav");
-                       precache_sound("porto/create.wav");
-                       precache_sound("porto/expire.wav");
-                       precache_sound("porto/explode.wav");
-                       precache_sound("porto/fire.wav");
-                       precache_sound("porto/unsupported.wav");
                        PORTO_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
index 69e325d8ef636fa9c9ec1e8f833ab907038fdb50..c156d84b46e9285841f055fffc78282f0a19e859 100644 (file)
@@ -76,12 +76,12 @@ void W_Rifle_FireBullet(float pSpread, float pDamage, float pForce, float pSolid
 
 void W_Rifle_Attack(void)
 {
-       W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), W_Sound("campingrifle_fire"));
+       W_Rifle_FireBullet(WEP_CVAR_PRI(rifle, spread), WEP_CVAR_PRI(rifle, damage), WEP_CVAR_PRI(rifle, force), WEP_CVAR_PRI(rifle, solidpenetration), WEP_CVAR_PRI(rifle, ammo), WEP_RIFLE.m_id, WEP_CVAR_PRI(rifle, tracer), WEP_CVAR_PRI(rifle, shots), SND(CAMPINGRIFLE_FIRE));
 }
 
 void W_Rifle_Attack2(void)
 {
-       W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), W_Sound("campingrifle_fire2"));
+       W_Rifle_FireBullet(WEP_CVAR_SEC(rifle, spread), WEP_CVAR_SEC(rifle, damage), WEP_CVAR_SEC(rifle, force), WEP_CVAR_SEC(rifle, solidpenetration), WEP_CVAR_SEC(rifle, ammo), WEP_RIFLE.m_id | HITTYPE_SECONDARY, WEP_CVAR_SEC(rifle, tracer), WEP_CVAR_SEC(rifle, shots), SND(CAMPINGRIFLE_FIRE2));
 }
 
 .void(void) rifle_bullethail_attackfunc;
@@ -204,8 +204,6 @@ bool W_Rifle(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("campingrifle_fire"));
-                       precache_sound(W_Sound("campingrifle_fire2"));
                        RIFLE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -233,7 +231,7 @@ bool W_Rifle(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR_PRI(rifle, ammo), WEP_CVAR_SEC(rifle, ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -274,20 +272,17 @@ bool W_Rifle(int req)
                        if(!w_issilent)
                        {
                                if(w_random < 0.2)
-                                       sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTN_NORM);
                                else if(w_random < 0.4)
-                                       sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTN_NORM);
                                else if(w_random < 0.5)
-                                       sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTN_NORM);
                        }
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("ric1"));
-                       precache_sound(W_Sound("ric2"));
-                       precache_sound(W_Sound("ric3"));
                        if(autocvar_cl_reticle && autocvar_cl_reticle_weapon)
                        {
                                precache_pic("gfx/reticle_nex");
index a8509c15e2b137640355378cc85efa3823fe84db..4286ce433746a366bc78cebda4f4ffc43d7c2113 100644 (file)
@@ -108,7 +108,7 @@ void W_RocketPropelledChainsaw_Attack (void)
        entity flash = spawn ();
 
        W_DecreaseAmmo(WEP_CVAR(rpc, ammo));
-       W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', false, 5, W_Sound("rocket_fire"), CH_WEAPON_A, WEP_CVAR(rpc, damage));
+       W_SetupShot_ProjectileSize (self, '-3 -3 -3', '3 3 3', false, 5, SND(ROCKET_FIRE), CH_WEAPON_A, WEP_CVAR(rpc, damage));
        Send_Effect(EFFECT_ROCKET_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
        PROJECTILE_MAKETRIGGER(missile);
 
@@ -182,7 +182,6 @@ bool W_RocketPropelledChainsaw(int req)
                }
                case WR_INIT:
                {
-                       precache_sound (W_Sound("rocket_fire"));
                        RPC_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -203,7 +202,7 @@ bool W_RocketPropelledChainsaw(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(WEP_CVAR(rpc, ammo), W_Sound("reload"));
+                       W_Reload(WEP_CVAR(rpc, ammo), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -239,13 +238,12 @@ bool W_RocketPropelledChainsaw(int req)
                        org2 = w_org + w_backoff * 12;
                        pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                               sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("rocket_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index d3d8ac3c7328c91fc842e8f3323f335b8c5b0060..1686ff5290fec13b21f13b7c773a598ca75a15d5 100644 (file)
@@ -250,7 +250,7 @@ void W_Seeker_Fire_Missile(vector f_diff, entity m_target)
        W_DecreaseAmmo(WEP_CVAR(seeker, missile_ammo));
 
        makevectors(self.v_angle);
-       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("seeker_fire"), CH_WEAPON_A, 0);
+       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(SEEKER_FIRE), CH_WEAPON_A, 0);
        w_shotorg += f_diff;
        Send_Effect(EFFECT_SEEKER_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
@@ -341,7 +341,7 @@ void W_Seeker_Fire_Flac(void)
                        f_diff = '+1.25 +3.75 0';
                        break;
        }
-       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("flac_fire"), CH_WEAPON_A, WEP_CVAR(seeker, flac_damage));
+       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(FLAC_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, flac_damage));
        w_shotorg += f_diff;
 
        Send_Effect(EFFECT_HAGAR_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
@@ -559,7 +559,7 @@ void W_Seeker_Fire_Tag(void)
        entity missile;
        W_DecreaseAmmo(WEP_CVAR(seeker, tag_ammo));
 
-       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, W_Sound("tag_fire"), CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count));
+       W_SetupShot_ProjectileSize(self, '-2 -2 -2', '2 2 2', false, 2, SND(TAG_FIRE), CH_WEAPON_A, WEP_CVAR(seeker, missile_damage) * WEP_CVAR(seeker, missile_count));
 
        missile                 = spawn();
        missile.owner           = missile.realowner = self;
@@ -662,9 +662,6 @@ bool W_Seeker(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("tag_fire"));
-                       precache_sound(W_Sound("flac_fire"));
-                       precache_sound(W_Sound("seeker_fire"));
                        SEEKER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -703,7 +700,7 @@ bool W_Seeker(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR(seeker, missile_ammo), WEP_CVAR(seeker, tag_ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -735,7 +732,7 @@ bool W_Seeker(int req)
                                if(w_deathtype & HITTYPE_SECONDARY)
                                {
                                        if(!w_issilent)
-                                               sound(self, CH_SHOTS, W_Sound("tag_impact"), 1, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_TAG_IMPACT, 1, ATTEN_NORM);
                                }
                                else
                                {
@@ -743,11 +740,11 @@ bool W_Seeker(int req)
                                        if(!w_issilent)
                                        {
                                                if(w_random<0.15)
-                                                       sound(self, CH_SHOTS, W_Sound("tagexp1"), 1, ATTEN_NORM);
+                                                       sound(self, CH_SHOTS, SND_TAGEXP1, 1, ATTEN_NORM);
                                                else if(w_random<0.7)
-                                                       sound(self, CH_SHOTS, W_Sound("tagexp2"), 1, ATTEN_NORM);
+                                                       sound(self, CH_SHOTS, SND_TAGEXP2, 1, ATTEN_NORM);
                                                else
-                                                       sound(self, CH_SHOTS, W_Sound("tagexp3"), 1, ATTEN_NORM);
+                                                       sound(self, CH_SHOTS, SND_TAGEXP3, 1, ATTEN_NORM);
                                        }
                                }
                        }
@@ -757,24 +754,17 @@ bool W_Seeker(int req)
                                if(!w_issilent)
                                {
                                        if(w_random<0.15)
-                                               sound(self, CH_SHOTS, W_Sound("seekerexp1"), 1, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_SEEKEREXP1, 1, ATTEN_NORM);
                                        else if(w_random<0.7)
-                                               sound(self, CH_SHOTS, W_Sound("seekerexp2"), 1, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_SEEKEREXP2, 1, ATTEN_NORM);
                                        else
-                                               sound(self, CH_SHOTS, W_Sound("seekerexp3"), 1, ATTEN_NORM);
+                                               sound(self, CH_SHOTS, SND_SEEKEREXP3, 1, ATTEN_NORM);
                                }
                        }
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("seekerexp1"));
-                       precache_sound(W_Sound("seekerexp2"));
-                       precache_sound(W_Sound("seekerexp3"));
-                       precache_sound(W_Sound("tagexp1"));
-                       precache_sound(W_Sound("tagexp2"));
-                       precache_sound(W_Sound("tagexp3"));
-                       precache_sound(W_Sound("tag_impact"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index de8f34777b4e0185ac068f36b62d305da5f68c04..a067110b7285af22ea359248ab43981093786834 100644 (file)
@@ -229,7 +229,7 @@ void W_Shockwave_Melee_Think(void)
 
 void W_Shockwave_Melee(void)
 {SELFPARAM();
-       sound(self, CH_WEAPON_A, W_Sound("shotgun_melee"), VOL_BASE, ATTN_NORM);
+       sound(self, CH_WEAPON_A, SND_SHOTGUN_MELEE, VOL_BASE, ATTN_NORM);
        weapon_thinkf(WFRAME_FIRE2, WEP_CVAR(shockwave, melee_animtime), w_ready);
 
        entity meleetemp;
@@ -360,7 +360,7 @@ void W_Shockwave_Attack(void)
        float i, queue = 0;
 
        // set up the shot direction
-       W_SetupShot(self, false, 3, W_Sound("lasergun_fire"), CH_WEAPON_B, WEP_CVAR(shockwave, blast_damage));
+       W_SetupShot(self, false, 3, SND(LASERGUN_FIRE), CH_WEAPON_B, WEP_CVAR(shockwave, blast_damage));
        vector attack_endpos = (w_shotorg + (w_shotdir * WEP_CVAR(shockwave, blast_distance)));
        WarpZone_TraceLine(w_shotorg, attack_endpos, MOVE_NOMONSTERS, self);
        vector attack_hitpos = trace_endpos;
@@ -708,9 +708,6 @@ bool W_Shockwave(int req)
                }
                case WR_INIT:
                {
-                       precache_sound("misc/itempickup.wav");
-                       precache_sound(W_Sound("lasergun_fire"));
-                       precache_sound(W_Sound("shotgun_melee"));
                        SHOCKWAVE_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -875,9 +872,6 @@ bool W_Shockwave(int req)
                }
                case WR_INIT:
                {
-                       //precache_sound(W_Sound("ric1"));
-                       //precache_sound(W_Sound("ric2"));
-                       //precache_sound(W_Sound("ric3"));
                        return false;
                }
                case WR_ZOOMRETICLE:
index ce93321a94709cfb0ff19d443fa687d978b75e6c..05f4cf6ab0bec6d3cdf88b381714882cfbc382b8 100644 (file)
@@ -61,7 +61,7 @@ void W_Shotgun_Attack(float isprimary)
 
        W_DecreaseAmmo(WEP_CVAR_PRI(shotgun, ammo));
 
-       W_SetupShot(self, true, 5, W_Sound("shotgun_fire"), ((isprimary) ? CH_WEAPON_A : CH_WEAPON_SINGLE), WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets));
+       W_SetupShot(self, true, 5, SND(SHOTGUN_FIRE), ((isprimary) ? CH_WEAPON_A : CH_WEAPON_SINGLE), WEP_CVAR_PRI(shotgun, damage) * WEP_CVAR_PRI(shotgun, bullets));
        for(sc = 0;sc < WEP_CVAR_PRI(shotgun, bullets);sc = sc + 1)
                fireBullet(w_shotorg, w_shotdir, WEP_CVAR_PRI(shotgun, spread), WEP_CVAR_PRI(shotgun, solidpenetration), WEP_CVAR_PRI(shotgun, damage), WEP_CVAR_PRI(shotgun, force), WEP_SHOTGUN.m_id, 0);
 
@@ -181,7 +181,7 @@ void W_Shotgun_Melee_Think(void)
 
 void W_Shotgun_Attack2(void)
 {SELFPARAM();
-       sound(self, CH_WEAPON_A, W_Sound("shotgun_melee"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_WEAPON_A, SND_SHOTGUN_MELEE, VOL_BASE, ATTEN_NORM);
        weapon_thinkf(WFRAME_FIRE2, WEP_CVAR_SEC(shotgun, animtime), w_ready);
 
        entity meleetemp;
@@ -203,7 +203,7 @@ void W_Shotgun_Attack3_Frame2()
                return;
        }
 
-       sound(self, CH_WEAPON_SINGLE, "misc/null.wav", VOL_BASE, ATTN_NORM); // kill previous sound
+       sound(self, CH_WEAPON_SINGLE, SND_Null, VOL_BASE, ATTN_NORM); // kill previous sound
        W_Shotgun_Attack(true); // actually is secondary, but we trick the last shot into playing full reload sound
        weapon_thinkf(WFRAME_FIRE1, WEP_CVAR_SEC(shotgun, alt_animtime), w_ready);
 }
@@ -286,9 +286,6 @@ float W_Shotgun(float req)
                }
                case WR_INIT:
                {
-                       precache_sound("misc/itempickup.wav");
-                       precache_sound(W_Sound("shotgun_fire"));
-                       precache_sound(W_Sound("shotgun_melee"));
                        SHOTGUN_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -327,7 +324,7 @@ float W_Shotgun(float req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(WEP_CVAR_PRI(shotgun, ammo), W_Sound("reload")); // WEAPONTODO
+                       W_Reload(WEP_CVAR_PRI(shotgun, ammo), SND(RELOAD)); // WEAPONTODO
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -359,11 +356,11 @@ float W_Shotgun(float req)
                        if(!w_issilent && time - self.prevric > 0.25)
                        {
                                if(w_random < 0.0165)
-                                       sound(self, CH_SHOTS, W_Sound("ric1"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC1, VOL_BASE, ATTEN_NORM);
                                else if(w_random < 0.033)
-                                       sound(self, CH_SHOTS, W_Sound("ric2"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC2, VOL_BASE, ATTEN_NORM);
                                else if(w_random < 0.05)
-                                       sound(self, CH_SHOTS, W_Sound("ric3"), VOL_BASE, ATTEN_NORM);
+                                       sound(self, CH_SHOTS, SND_RIC3, VOL_BASE, ATTEN_NORM);
                                self.prevric = time;
                        }
 
@@ -371,9 +368,6 @@ float W_Shotgun(float req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("ric1"));
-                       precache_sound(W_Sound("ric2"));
-                       precache_sound(W_Sound("ric3"));
                        return true;
                }
                case WR_ZOOMRETICLE:
index edc7079d9aad13d33a0b3ab51e9aafe01754b6e9..8cdeb61accad228365716bf78c1f03baafaa1111 100644 (file)
@@ -77,7 +77,7 @@ void W_Vaporizer_Attack(void)
        W_SetupShot(self, true, 0, "", CH_WEAPON_A, vaporizer_damage);
        // handle sound separately so we can change the volume
        // added bonus: no longer plays the strength sound (strength gives no bonus to instakill anyway)
-       sound (self, CH_WEAPON_A, W_Sound("minstanexfire"), VOL_BASE * 0.8, ATTEN_NORM);
+       sound (self, CH_WEAPON_A, SND_MINSTANEXFIRE, VOL_BASE * 0.8, ATTEN_NORM);
 
        yoda = 0;
        damage_goodhits = 0;
@@ -96,41 +96,8 @@ void W_Vaporizer_Attack(void)
        Send_Effect(EFFECT_VORTEX_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
 
        // teamcolor / hit beam effect
-       vector v;
-       v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
-       switch(self.team)
-       {
-               case NUM_TEAM_1:   // Red
-                       if(damage_goodhits)
-                               Send_Effect(EFFECT_VAPORIZER_RED_HIT, w_shotorg, v, 1);
-                       else
-                               Send_Effect(EFFECT_VAPORIZER_RED, w_shotorg, v, 1);
-                       break;
-               case NUM_TEAM_2:   // Blue
-                       if(damage_goodhits)
-                               Send_Effect(EFFECT_VAPORIZER_BLUE_HIT, w_shotorg, v, 1);
-                       else
-                               Send_Effect(EFFECT_VAPORIZER_BLUE, w_shotorg, v, 1);
-                       break;
-               case NUM_TEAM_3:   // Yellow
-                       if(damage_goodhits)
-                               Send_Effect(EFFECT_VAPORIZER_YELLOW_HIT, w_shotorg, v, 1);
-                       else
-                               Send_Effect(EFFECT_VAPORIZER_YELLOW, w_shotorg, v, 1);
-                       break;
-               case NUM_TEAM_4:   // Pink
-                       if(damage_goodhits)
-                               Send_Effect(EFFECT_VAPORIZER_PINK_HIT, w_shotorg, v, 1);
-                       else
-                               Send_Effect(EFFECT_VAPORIZER_PINK, w_shotorg, v, 1);
-                       break;
-               default:
-                       if(damage_goodhits)
-                               Send_Effect_("TE_TEI_G3_HIT", w_shotorg, v, 1);
-                       else
-                               Send_Effect_("TE_TEI_G3", w_shotorg, v, 1);
-                       break;
-       }
+       vector v = WarpZone_UnTransformOrigin(WarpZone_trace_transform, trace_endpos);
+       Send_Effect((damage_goodhits ? EFFECT_VAPORIZER_HIT(self.team) : EFFECT_VAPORIZER(self.team)), w_shotorg, v, 1);
 
        if(autocvar_g_rm)
        if(!(trace_dphitq3surfaceflags & (Q3SURFACEFLAG_SKY | Q3SURFACEFLAG_NOIMPACT)))
@@ -174,7 +141,7 @@ void W_RocketMinsta_Attack2(void)
 
        float w = self.weapon;
        self.weapon = WEP_ELECTRO.m_id;
-       W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, W_Sound("crylink_fire"), CH_WEAPON_A, autocvar_g_rm_laser_damage);
+       W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, SND(CRYLINK_FIRE), CH_WEAPON_A, autocvar_g_rm_laser_damage);
        self.weapon = w;
 
        Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
@@ -227,7 +194,7 @@ void W_RocketMinsta_Attack3 (void)
 
        int w = self.weapon;
        self.weapon = WEP_ELECTRO.m_id;
-       W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, W_Sound("electro_fire2"), CH_WEAPON_A, autocvar_g_rm_laser_damage);
+       W_SetupShot_ProjectileSize (self, '0 0 -3', '0 0 -3', false, 2, SND(ELECTRO_FIRE2), CH_WEAPON_A, autocvar_g_rm_laser_damage);
        self.weapon = w;
 
        Send_Effect(EFFECT_ELECTRO_MUZZLEFLASH, w_shotorg, w_shotdir * 1000, 1);
@@ -362,10 +329,6 @@ float W_Vaporizer(float req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("minstanexfire"));
-                       precache_sound(W_Sound("nexwhoosh1"));
-                       precache_sound(W_Sound("nexwhoosh2"));
-                       precache_sound(W_Sound("nexwhoosh3"));
                        //W_Blaster(WR_INIT); // Samual: Is this really the proper thing to do? Didn't we already run this previously?
                        VAPORIZER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
@@ -408,7 +371,7 @@ float W_Vaporizer(float req)
                        else
                                used_ammo = vaporizer_ammo;
 
-                       W_Reload(used_ammo, W_Sound("reload"));
+                       W_Reload(used_ammo, SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -434,19 +397,17 @@ float W_Vaporizer(float req)
                        if(w_deathtype & HITTYPE_SECONDARY)
                        {
                                pointparticles(particleeffectnum(EFFECT_BLASTER_IMPACT), org2, w_backoff * 1000, 1);
-                               if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("laserimpact"), VOL_BASE, ATTN_NORM); }
+                               if(!w_issilent) { sound(self, CH_SHOTS, SND_LASERIMPACT, VOL_BASE, ATTN_NORM); }
                        }
                        else
                        {
                                pointparticles(particleeffectnum(EFFECT_VORTEX_IMPACT), org2, '0 0 0', 1);
-                               if(!w_issilent) { sound(self, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTN_NORM); }
+                               if(!w_issilent) { sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM); }
                        }
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("laserimpact"));
-                       precache_sound(W_Sound("neximpact"));
                        if(autocvar_cl_reticle && autocvar_cl_reticle_weapon)
                        {
                                precache_pic("gfx/reticle_nex");
index 5e7cc479c267047e938e34dc8d738960f2a97397..8238ac22c83d87b9e7ab70242921185753bbe5bd 100644 (file)
@@ -103,10 +103,10 @@ void W_Vortex_Attack(float issecondary)
        mydmg *= charge;
        myforce *= charge;
 
-       W_SetupShot(self, true, 5, W_Sound("nexfire"), CH_WEAPON_A, mydmg);
+       W_SetupShot(self, true, 5, SND(NEXFIRE), CH_WEAPON_A, mydmg);
        if(charge > WEP_CVAR(vortex, charge_animlimit) && WEP_CVAR(vortex, charge_animlimit)) // if the Vortex is overcharged, we play an extra sound
        {
-               sound(self, CH_WEAPON_B, W_Sound("nexcharge"), VOL_BASE * (charge - 0.5 * WEP_CVAR(vortex, charge_animlimit)) / (1 - 0.5 * WEP_CVAR(vortex, charge_animlimit)), ATTN_NORM);
+               sound(self, CH_WEAPON_B, SND_NEXCHARGE, VOL_BASE * (charge - 0.5 * WEP_CVAR(vortex, charge_animlimit)) / (1 - 0.5 * WEP_CVAR(vortex, charge_animlimit)), ATTN_NORM);
        }
 
        yoda = 0;
@@ -253,11 +253,6 @@ bool W_Vortex(int req)
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("nexfire"));
-                       precache_sound(W_Sound("nexcharge"));
-                       precache_sound(W_Sound("nexwhoosh1"));
-                       precache_sound(W_Sound("nexwhoosh2"));
-                       precache_sound(W_Sound("nexwhoosh3"));
                        VORTEX_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP);
                        return true;
                }
@@ -298,7 +293,7 @@ bool W_Vortex(int req)
                }
                case WR_RELOAD:
                {
-                       W_Reload(min(WEP_CVAR_PRI(vortex, ammo), WEP_CVAR_SEC(vortex, ammo)), W_Sound("reload"));
+                       W_Reload(min(WEP_CVAR_PRI(vortex, ammo), WEP_CVAR_SEC(vortex, ammo)), SND(RELOAD));
                        return true;
                }
                case WR_SUICIDEMESSAGE:
@@ -325,13 +320,12 @@ bool W_Vortex(int req)
                        org2 = w_org + w_backoff * 6;
                        pointparticles(particleeffectnum(EFFECT_VORTEX_IMPACT), org2, '0 0 0', 1);
                        if(!w_issilent)
-                               sound(self, CH_SHOTS, W_Sound("neximpact"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_SHOTS, SND_NEXIMPACT, VOL_BASE, ATTN_NORM);
 
                        return true;
                }
                case WR_INIT:
                {
-                       precache_sound(W_Sound("neximpact"));
                        if(autocvar_cl_reticle && autocvar_cl_reticle_weapon)
                        {
                                precache_pic("gfx/reticle_nex");
index 2b15e8acb4b0d60f5e5457953aca656295e1716c..e7ee2746f553f5e06dbec8c491ca1982ad0e479c 100644 (file)
@@ -7,6 +7,7 @@
 #include "cvar.qh"
 #include "defer.qh"
 #include "draw.qh"
+#include "file.qh"
 #include "i18n.qh"
 #include "lazy.qh"
 #include "log.qh"
@@ -19,6 +20,7 @@
 #include "prandom.qc"
 #include "progname.qh"
 #include "registry.qh"
+#include "replicate.qh"
 #include "sortlist.qc"
 #include "spawnfunc.qh"
 #include "static.qh"
diff --git a/qcsrc/lib/file.qh b/qcsrc/lib/file.qh
new file mode 100644 (file)
index 0000000..f732bfe
--- /dev/null
@@ -0,0 +1,13 @@
+#ifndef FILE_H
+#define FILE_H
+
+bool fexists(string f)
+{
+    int fh = fopen(f, FILE_READ);
+    if (fh < 0)
+        return false;
+    fclose(fh);
+    return true;
+}
+
+#endif
index d9317e8cbf748754775f0cbd9320fffd890b60b5..c751fc79346b7fbb5688287cd119693b6bbdc356 100644 (file)
@@ -6,6 +6,29 @@
 #define REGISTER_INIT(ns, id) [[accumulate]] void Register_##ns##_##id##_init(entity this)
 #define REGISTER_INIT_POST(ns, id) [[accumulate]] void Register_##ns##_##id##_init_post(entity this)
 
+/**
+ * Register a new entity with a global constructor.
+ * Must be followed by a semicolon or a function body with a `this` parameter.
+ * Wrapper macros may perform actions after user initialization like so:
+ *     #define REGISTER_FOO(id) \
+ *         REGISTER(RegisterFoos, FOO, FOOS, FOOS_COUNT, id, m_id, NEW(Foo)); \
+ *         REGISTER_INIT_POST(FOO, id) { \
+ *             print("Registering foo #", this.m_id + 1, "\n"); \
+ *         } \
+ *         REGISTER_INIT(FOO, id)
+ *
+ * Don't forget to forward declare `initfunc` and call `REGISTER_REGISTRY`:
+ *     void RegisterFoos();
+ *     REGISTER_REGISTRY(RegisterFoos)
+ *
+ * @param initfunc  The global constructor to accumulate into
+ * @param ns        Short for namespace, prefix for each global (ns##_##id)
+ * @param array     The array to add each entity to. Also requires `array##_first` and `array##_last` to be defined
+ * @param counter   Global to count number of entries
+ * @param id        The identifier of the current entity being registered
+ * @param fld       The field to store the current count into
+ * @param inst      An expression to create a new instance, invoked for every registration
+ */
 #define REGISTER(initfunc, ns, array, counter, id, fld, inst)   \
     entity ns##_##id;                                           \
     REGISTER_INIT(ns, id) { }                                   \
diff --git a/qcsrc/lib/replicate.qh b/qcsrc/lib/replicate.qh
new file mode 100644 (file)
index 0000000..6ff7713
--- /dev/null
@@ -0,0 +1,49 @@
+#ifndef REPLICATE_H
+#define REPLICATE_H
+#ifndef MENUQC
+
+#define REPLICATE(...) EVAL(OVERLOAD(REPLICATE, __VA_ARGS__))
+
+[[accumulate]] void ReplicateVars(entity this, string thisname, int i) { }
+
+#define REPLICATE_3(fld, type, var)         REPLICATE_4(fld, type, var, )
+#define REPLICATE_4(fld, type, var, func)   REPLICATE_##type(fld, var, func)
+#define REPLICATE_string(fld, var, func)    REPLICATE_7(fld, string, var, , \
+    { if (field) strunzone(field); field = strzone(it); }, \
+    { if (field) strunzone(field); field = string_null; }, \
+    { \
+        /* also initialize to the default value of func when requesting cvars */ \
+        string s = func(field); \
+        if (s != field) { \
+            strunzone(field); \
+            field = strzone(s); \
+        } \
+    })
+#define REPLICATE_float(fld, var, func)     REPLICATE_7(fld, float, var, func,  { field = stof(it); },          , )
+#define REPLICATE_bool(fld, var, func)      REPLICATE_7(fld, bool, var, func,   { field = boolean(stoi(it)); }, , )
+#define REPLICATE_int(fld, var, func)       REPLICATE_7(fld, int, var, func,    { field = stoi(it); },          , )
+
+#if defined(SVQC)
+    #define REPLICATE_7(fld, type, var, func, create, destroy, after) \
+        void ReplicateVars(entity this, string thisname, int i) { \
+            type field = this.fld; \
+            if (i < 0) { destroy } \
+            else { \
+                string it = func(argv(i + 1)); \
+                bool current = thisname == var; \
+                if (i > 0) { \
+                    if (current) { create } \
+                } else { \
+                    stuffcmd(this, "cl_cmd sendcvar " var "\n"); \
+                } \
+                if (current) { after } \
+            } \
+            this.fld = field; \
+        }
+#elif defined(CSQC)
+    // TODO
+    #define REPLICATE_7(fld, type, var, func, create, destroy, after)
+#endif
+
+#endif
+#endif
index d52ae4f719e07b5017216e0251a01a6749b5d9dd..5563b969d98bfb4751e29e661b2c97a6c5248c45 100644 (file)
@@ -4,6 +4,7 @@
 void setterDummy(entity, float);
 CLASS(Animation, Object)
        METHOD(Animation, configureAnimation, void(entity, entity, void(entity, float), float, float, float, float));
+       METHOD(Animation, update, void(entity, float, float, float));
        METHOD(Animation, setTimeStartEnd, void(entity, float, float));
        METHOD(Animation, setTimeStartDuration, void(entity, float, float));
        METHOD(Animation, setValueStartEnd, void(entity, float, float));
@@ -36,6 +37,12 @@ void Animation_configureAnimation(entity me, entity obj, void(entity, float) obj
        me.setValueStartEnd(me, animStartValue, animEndValue);
 }
 
+void Animation_update(entity me, float animDuration, float animStartValue, float animEndValue)
+{
+       me.setTimeStartDuration(me, time, animDuration);
+       me.setValueStartEnd(me, animStartValue, animEndValue);
+}
+
 void Animation_setTimeStartEnd(entity me, float s, float e)
 {
        me.startTime = s;
index 343bf1d93263403a97ea80bfa0160d8d8e442527..934e8cd3426e0579ff5066fea55349e2c3760dd8 100644 (file)
@@ -44,7 +44,7 @@ void Button_resizeNotify(entity me, vector relOrigin, vector relSize, vector abs
        if(me.srcMulti)
                me.keepspaceLeft = 0;
        else
-               me.keepspaceLeft = min(0.8, absSize.y / absSize.x);
+               me.keepspaceLeft = min(0.8, absSize.x == 0 ? 0 : (absSize.y / absSize.x));
        SUPER(Button).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
 }
 void Button_configureButton(entity me, string txt, float sz, string gfx)
index e02642f69d54da9d134db6acb898c470c87a237f..ea170777eaf7245c26645fcd6c2a3dc8f5ed138e 100644 (file)
@@ -130,8 +130,8 @@ void Label_resizeNotify(entity me, vector relOrigin, vector relSize, vector absO
        SUPER(Label).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
 
        // absSize_y is height of label
-       me.realFontSize_y = me.fontSize / absSize.y;
-       me.realFontSize_x = me.fontSize / absSize.x;
+       me.realFontSize_y = absSize.y == 0 ? 0 : (me.fontSize / absSize.y);
+       me.realFontSize_x = absSize.x == 0 ? 0 : (me.fontSize / absSize.x);
        if(me.marginLeft)
                me.keepspaceLeft = me.marginLeft * me.realFontSize.x;
        if(me.marginRight)
index 4654425431199bb1913b0c4ee54fefeac866f7db..3340e335cb9aebe22d7b305022a52074cd84f123 100644 (file)
@@ -15,6 +15,8 @@ CLASS(Slider, Label)
        METHOD(Slider, mouseRelease, float(entity, vector));
        METHOD(Slider, valueToText, string(entity, float));
        METHOD(Slider, toString, string(entity));
+       METHOD(Slider, setValue_allowAnim, void(entity, float, bool));
+       METHOD(Slider, setValue_noAnim, void(entity, float));
        METHOD(Slider, setValue, void(entity, float));
        METHOD(Slider, setSliderValue, void(entity, float));
        METHOD(Slider, showNotify, void(entity));
@@ -24,6 +26,7 @@ CLASS(Slider, Label)
        ATTRIB(Slider, value, float, 0)
        ATTRIB(Slider, animated, float, 1)
        ATTRIB(Slider, sliderValue, float, 0)
+       ATTRIB(Slider, sliderAnim, entity, world)
        ATTRIB(Slider, valueMin, float, 0)
        ATTRIB(Slider, valueMax, float, 0)
        ATTRIB(Slider, valueStep, float, 0)
@@ -48,16 +51,27 @@ ENDCLASS(Slider)
 #endif
 
 #ifdef IMPLEMENTATION
-void Slider_setValue(entity me, float val)
+void Slider_setValue_allowAnim(entity me, float val, bool allowAnim)
 {
-       if (me.animated) {
-               anim.removeObjAnim(anim, me);
-               makeHostedEasing(me, Slider_setSliderValue, easingQuadInOut, 1, me.sliderValue, val);
+       if(allowAnim && me.animated) {
+               float t = 0.5;
+               if(!me.sliderAnim)
+                       me.sliderAnim = makeHostedEasing(me, Slider_setSliderValue, easingQuadOut, t, me.sliderValue, val);
+               else
+                       me.sliderAnim.update(me.sliderAnim, t, me.sliderValue, val);
        } else {
                me.setSliderValue(me, val);
        }
        me.value = val;
 }
+void Slider_setValue_noAnim(entity me, float val)
+{
+       Slider_setValue_allowAnim(me, val, false);
+}
+void Slider_setValue(entity me, float val)
+{
+       Slider_setValue_allowAnim(me, val, true);
+}
 void Slider_setSliderValue(entity me, float val)
 {
        me.sliderValue = val;
@@ -69,7 +83,7 @@ string Slider_toString(entity me)
 void Slider_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {
        SUPER(Slider).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
-       me.controlWidth = absSize.y / absSize.x;
+       me.controlWidth = absSize.x == 0 ? 0 : (absSize.y / absSize.x);
 }
 string Slider_valueToText(entity me, float val)
 {
@@ -177,14 +191,10 @@ float Slider_keyUp(entity me, float key, float ascii, float shift)
 float Slider_mouseDrag(entity me, vector pos)
 {
        float hit;
-       float v, animed;
+       float v;
        if(me.disabled)
                return 0;
 
-       anim.removeObjAnim(anim, me);
-       animed = me.animated;
-       me.animated = false;
-
        if(me.pressed)
        {
                hit = 1;
@@ -194,17 +204,18 @@ float Slider_mouseDrag(entity me, vector pos)
                if(pos.y >= 1 + me.tolerance.y) hit = 0;
                if(hit)
                {
+                       // handle dragging
+                       me.pressed = 2;
+
                        v = median(0, (pos.x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
                        if(me.valueStep)
                                v = floor(0.5 + v / me.valueStep) * me.valueStep;
-                       me.setValue(me, v);
+                       me.setValue_noAnim(me, v);
                }
                else
                        me.setValue(me, me.previousValue);
        }
 
-       me.animated = animed;
-
        return 1;
 }
 float Slider_mousePress(entity me, vector pos)
@@ -295,6 +306,14 @@ void Slider_draw(entity me)
                else
                        draw_Picture(eX * controlLeft, strcat(me.src, "_n"), eX * me.controlWidth + eY, me.color, 1);
        }
+
+       if(me.sliderAnim)
+       if(me.sliderAnim.isFinished(me.sliderAnim))
+       {
+               anim.removeObjAnim(anim, me);
+               me.sliderAnim = world;
+       }
+
        me.setText(me, me.valueToText(me, me.value));
        draw_alpha = save;
        SUPER(Slider).draw(me);
index 733b1d61255e155490021d7e12f6b53c61940acd..30b80c196d96884117def79c2c55496e65f34598 100644 (file)
@@ -6,6 +6,8 @@
 CLASS(TextSlider, Slider)
        METHOD(TextSlider, valueToText, string(entity, float));
        METHOD(TextSlider, valueToIdentifier, string(entity, float));
+       METHOD(TextSlider, setValueFromIdentifier_allowAnim, void(entity, string, bool));
+       METHOD(TextSlider, setValueFromIdentifier_noAnim, void(entity, string));
        METHOD(TextSlider, setValueFromIdentifier, void(entity, string));
        METHOD(TextSlider, getIdentifier, string(entity));
        METHOD(TextSlider, clearValues, void(entity));
@@ -35,16 +37,24 @@ string TextSlider_valueToText(entity me, int val)
                return _("Custom");
        return me.(valueStrings[val]);
 }
-void TextSlider_setValueFromIdentifier(entity me, string id)
+void TextSlider_setValueFromIdentifier_allowAnim(entity me, string id, bool allowAnim)
 {
        int i;
        for(i = 0; i < me.nValues; ++i)
                if(me.valueToIdentifier(me, i) == id)
                {
-                       SUPER(TextSlider).setValue( me, i );
+                       SUPER(TextSlider).setValue_allowAnim(me, i, allowAnim);
                        return;
                }
-       SUPER(TextSlider).setValue( me, -1 );
+       SUPER(TextSlider).setValue_allowAnim(me, -1, allowAnim);
+}
+void TextSlider_setValueFromIdentifier_noAnim(entity me, string id)
+{
+       TextSlider_setValueFromIdentifier_allowAnim(me, id, false);
+}
+void TextSlider_setValueFromIdentifier(entity me, string id)
+{
+       TextSlider_setValueFromIdentifier_allowAnim(me, id, true);
 }
 string TextSlider_getIdentifier(entity me)
 {
@@ -75,6 +85,6 @@ void TextSlider_insertValue(entity me, int pos, string theString, string theIden
 void TextSlider_configureTextSliderValues(entity me, string theDefault)
 {
        me.configureSliderValues(me, 0, 0, me.nValues - 1, 1, 1, 1);
-       me.setValueFromIdentifier(me, theDefault);
+       me.setValueFromIdentifier_noAnim(me, theDefault);
 }
 #endif
index 89966dde15a41a017a70e7fef9b09e8bc8c50c5e..3f6632f4e4663f2f57ab6c16d8088bdd311c80d3 100644 (file)
@@ -213,10 +213,8 @@ void m_init_delayed()
 
        draw_setMousePointer(SKINGFX_CURSOR, SKINSIZE_CURSOR, SKINOFFSET_CURSOR);
 
-       loadTooltips();
        anim = NEW(AnimHost);
        main = NEW(MainWindow); main.configureMainWindow(main);
-       unloadTooltips();
 
        main.resizeNotify(main, '0 0 0', eX * conwidth + eY * conheight, '0 0 0', eX * conwidth + eY * conheight);
        main.focused = 1;
index 4f0acc6814ec8e8764994560208745de3f356f49..c0a5caa12177308e7a1f82d0cbcb4afbf2fc5234 100644 (file)
@@ -6,7 +6,7 @@ CLASS(XonoticBigButton, XonoticButton)
        ATTRIB(XonoticBigButton, image, string, SKINGFX_BUTTON_BIG)
        ATTRIB(XonoticBigButton, grayImage, string, SKINGFX_BUTTON_BIG_GRAY)
 ENDCLASS(XonoticBigButton)
-entity makeXonoticButton(string theText, vector theColor);
+entity makeXonoticBigButton(string theText, vector theColor);
 #endif
 
 #ifdef IMPLEMENTATION
@@ -20,6 +20,6 @@ entity makeXonoticBigButton(string theText, vector theColor)
 
 void XonoticBigButton_configureXonoticBigButton(entity me, string theText, vector theColor)
 {
-       me.configureXonoticButton(me, theText, theColor);
+       me.configureXonoticButton(me, theText, theColor, string_null);
 }
 #endif
index 53067dde8bbbda6aef3add67d6791b89700ff879..68941771708b212522e86c8e7b651635762cbbd4 100644 (file)
@@ -2,24 +2,29 @@
 #define BIGCOMMANDBUTTON_H
 #include "commandbutton.qc"
 CLASS(XonoticBigCommandButton, XonoticCommandButton)
-       METHOD(XonoticBigCommandButton, configureXonoticBigCommandButton, void(entity, string, vector, string, float));
+       METHOD(XonoticBigCommandButton, configureXonoticBigCommandButton, void(entity, string, vector, string, float, string));
        ATTRIB(XonoticBigCommandButton, image, string, SKINGFX_BUTTON_BIG)
        ATTRIB(XonoticBigCommandButton, grayImage, string, SKINGFX_BUTTON_BIG_GRAY)
 ENDCLASS(XonoticBigCommandButton)
+entity makeXonoticBigCommandButton_T(string theText, vector theColor, string theCommand, float closesMenu, string theTooltip);
 entity makeXonoticBigCommandButton(string theText, vector theColor, string theCommand, float closesMenu);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticBigCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+entity makeXonoticBigCommandButton_T(string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
 {
        entity me;
        me = NEW(XonoticBigCommandButton);
-       me.configureXonoticBigCommandButton(me, theText, theColor, theCommand, theFlags);
+       me.configureXonoticBigCommandButton(me, theText, theColor, theCommand, theFlags, theTooltip);
        return me;
 }
+entity makeXonoticBigCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+{
+       return makeXonoticBigCommandButton_T(theText, theColor, theCommand, theFlags, string_null);
+}
 
-void XonoticBigCommandButton_configureXonoticBigCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags)
+void XonoticBigCommandButton_configureXonoticBigCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
 {
-       me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags);
+       me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags, theTooltip);
 }
 #endif
index fb0f416e96ef3220f26cad551fe04ce0670cc822..a9a8fe2160773595473d5e5cb5754c3105396e00 100644 (file)
@@ -2,7 +2,7 @@
 #define BUTTON_H
 #include "../item/button.qc"
 CLASS(XonoticButton, Button)
-       METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector));
+       METHOD(XonoticButton, configureXonoticButton, void(entity, string, vector, string));
        ATTRIB(XonoticButton, fontSize, float, SKINFONTSIZE_NORMAL)
        ATTRIB(XonoticButton, image, string, SKINGFX_BUTTON)
        ATTRIB(XonoticButton, grayImage, string, SKINGFX_BUTTON_GRAY)
@@ -15,19 +15,24 @@ CLASS(XonoticButton, Button)
        ATTRIB(XonoticButton, marginLeft, float, SKINMARGIN_BUTTON) // chars
        ATTRIB(XonoticButton, marginRight, float, SKINMARGIN_BUTTON) // chars
 ENDCLASS(XonoticButton)
+entity makeXonoticButton_T(string theText, vector theColor, string theTooltip);
 entity makeXonoticButton(string theText, vector theColor);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticButton(string theText, vector theColor)
+entity makeXonoticButton_T(string theText, vector theColor, string theTooltip)
 {
        entity me;
        me = NEW(XonoticButton);
-       me.configureXonoticButton(me, theText, theColor);
+       me.configureXonoticButton(me, theText, theColor, theTooltip);
        return me;
 }
+entity makeXonoticButton(string theText, vector theColor)
+{
+       return makeXonoticButton_T(theText, theColor, string_null);
+}
 
-void XonoticButton_configureXonoticButton(entity me, string theText, vector theColor)
+void XonoticButton_configureXonoticButton(entity me, string theText, vector theColor, string theTooltip)
 {
        if(theColor == '0 0 0')
        {
@@ -40,6 +45,6 @@ void XonoticButton_configureXonoticButton(entity me, string theText, vector theC
                me.colorC = theColor;
                me.colorF = theColor;
        }
-       me.tooltip = getZonedTooltipForIdentifier(strcat(currentDialog.classname, "/", me.text));
+       setZonedTooltip(me, theTooltip, string_null);
 }
 #endif
index 18ac036ae54d2ebfbdd327796610a3bed9ab33bf..bb63bffe43517679bd9bd279e398b64318aca232 100644 (file)
@@ -2,7 +2,7 @@
 #define CHECKBOX_H
 #include "../item/checkbox.qc"
 CLASS(XonoticCheckBox, CheckBox)
-       METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string));
+       METHOD(XonoticCheckBox, configureXonoticCheckBox, void(entity, float, float, string, string, string));
        METHOD(XonoticCheckBox, setChecked, void(entity, float));
        ATTRIB(XonoticCheckBox, fontSize, float, SKINFONTSIZE_NORMAL)
        ATTRIB(XonoticCheckBox, image, string, SKINGFX_CHECKBOX)
@@ -22,12 +22,14 @@ CLASS(XonoticCheckBox, CheckBox)
        ATTRIB(XonoticCheckBox, alpha, float, SKINALPHA_TEXT)
        ATTRIB(XonoticCheckBox, disabledAlpha, float, SKINALPHA_DISABLED)
 ENDCLASS(XonoticCheckBox)
+entity makeXonoticCheckBox_T(float, string, string, string);
 entity makeXonoticCheckBox(float, string, string);
+entity makeXonoticCheckBoxEx_T(float, float, string, string, string);
 entity makeXonoticCheckBoxEx(float, float, string, string);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
+entity makeXonoticCheckBox_T(float isInverted, string theCvar, string theText, string theTooltip)
 {
        float y, n;
        if(isInverted > 1)
@@ -50,26 +52,33 @@ entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
                n = 0;
                y = 1;
        }
-       return makeXonoticCheckBoxEx(y, n, theCvar, theText);
+       return makeXonoticCheckBoxEx_T(y, n, theCvar, theText, theTooltip);
 }
-entity makeXonoticCheckBoxEx(float theYesValue, float theNoValue, string theCvar, string theText)
+entity makeXonoticCheckBox(float isInverted, string theCvar, string theText)
+{
+       return makeXonoticCheckBox_T(isInverted, theCvar, theText, string_null);
+}
+
+entity makeXonoticCheckBoxEx_T(float theYesValue, float theNoValue, string theCvar, string theText, string theTooltip)
 {
        entity me;
        me = NEW(XonoticCheckBox);
-       me.configureXonoticCheckBox(me, theYesValue, theNoValue, theCvar, theText);
+       me.configureXonoticCheckBox(me, theYesValue, theNoValue, theCvar, theText, theTooltip);
        return me;
 }
-void XonoticCheckBox_configureXonoticCheckBox(entity me, float theYesValue, float theNoValue, string theCvar, string theText)
+entity makeXonoticCheckBoxEx(float theYesValue, float theNoValue, string theCvar, string theText)
+{
+       return makeXonoticCheckBoxEx_T(theYesValue, theNoValue, theCvar, theText, string_null);
+}
+
+void XonoticCheckBox_configureXonoticCheckBox(entity me, float theYesValue, float theNoValue, string theCvar, string theText, string theTooltip)
 {
        me.yesValue = theYesValue;
        me.noValue = theNoValue;
        me.checked = 0;
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.loadCvars(me);
+       setZonedTooltip(me, theTooltip, theCvar);
        me.configureCheckBox(me, theText, me.fontSize, me.image);
 }
 void XonoticCheckBox_setChecked(entity me, float val)
index e3ade5b26ddf381936e9eb601e28f6445038e06c..9dae25a35bb214d138c9a8c4c57ad3f54c5de3c7 100644 (file)
@@ -43,8 +43,8 @@ void XonoticSliderCheckBox_configureXonoticSliderCheckBox(entity me, float theOf
                me.savedValue = theControlledSlider.valueMin;
        me.controlledSlider = theControlledSlider;
        me.configureCheckBox(me, theText, me.fontSize, me.image);
-       me.tooltip = theControlledSlider.tooltip;
        me.cvarName = theControlledSlider.cvarName; // in case we want to display the cvar in the tooltip
+       me.tooltip = theControlledSlider.tooltip;
 }
 void XonoticSliderCheckBox_draw(entity me)
 {
index 4b5b17f0e17c5b56c1d6680fdf02f8d584fa6174..a93c9acf5d666a56611e30b01eb5b8f7acb4b322 100644 (file)
@@ -38,12 +38,8 @@ void XonoticCheckBoxString_configureXonoticCheckBoxString(entity me, string theY
        me.yesString = theYesValue;
        me.noString = theNoValue;
        me.checked = 0;
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.loadCvars(me);
        me.configureCheckBox(me, theText, me.fontSize, me.image);
 }
 void XonoticCheckBoxString_setChecked(entity me, float foo)
index 6a126dc9fd4dd1a58e874d6d4c436275599c3524..c8c26e4f365da0d1a90a48fa00d6f00c3831e6f7 100644 (file)
@@ -6,9 +6,11 @@ CLASS(XonoticColorpickerString, Image)
        METHOD(XonoticColorpickerString, mousePress, float(entity, vector));
        METHOD(XonoticColorpickerString, mouseRelease, float(entity, vector));
        METHOD(XonoticColorpickerString, mouseDrag, float(entity, vector));
+
        ATTRIB(XonoticColorpickerString, cvarName, string, string_null)
        METHOD(XonoticColorpickerString, loadCvars, void(entity));
        METHOD(XonoticColorpickerString, saveCvars, void(entity));
+
        ATTRIB(XonoticColorpickerString, prevcoords, vector, '0 0 0')
        ATTRIB(XonoticColorpickerString, image, string, SKINGFX_COLORPICKER)
        ATTRIB(XonoticColorpickerString, imagemargin, vector, SKINMARGIN_COLORPICKER)
@@ -30,14 +32,9 @@ entity makeXonoticColorpickerString(string theCvar, string theDefaultCvar)
 
 void XonoticColorpickerString_configureXonoticColorpickerString(entity me, string theCvar, string theDefaultCvar)
 {
-       me.cvarName = theCvar;
        me.configureImage(me, me.image);
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.loadCvars(me);
 }
 
 void XonoticColorpickerString_loadCvars(entity me)
index db1ec61ef2a06aea43e50103cc9793eb26ac2c99..0a4943e41acba2c543bf4b0ae83e7876c3c5b086 100644 (file)
@@ -8,21 +8,26 @@
 #define COMMANDBUTTON_H
 #include "button.qc"
 CLASS(XonoticCommandButton, XonoticButton)
-       METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float));
+       METHOD(XonoticCommandButton, configureXonoticCommandButton, void(entity, string, vector, string, float, string));
        ATTRIB(XonoticCommandButton, onClickCommand, string, string_null)
        ATTRIB(XonoticCommandButton, flags, float, 0)
 ENDCLASS(XonoticCommandButton)
+entity makeXonoticCommandButton_T(string theText, vector theColor, string theCommand, float closesMenu, string theTooltip);
 entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float closesMenu);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+entity makeXonoticCommandButton_T(string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
 {
        entity me;
        me = NEW(XonoticCommandButton);
-       me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags);
+       me.configureXonoticCommandButton(me, theText, theColor, theCommand, theFlags, theTooltip);
        return me;
 }
+entity makeXonoticCommandButton(string theText, vector theColor, string theCommand, float theFlags)
+{
+       return makeXonoticCommandButton_T(theText, theColor, theCommand, theFlags, string_null);
+}
 
 void XonoticCommandButton_Click(entity me, entity other)
 {
@@ -35,9 +40,9 @@ void XonoticCommandButton_Click(entity me, entity other)
                m_goto(string_null);
 }
 
-void XonoticCommandButton_configureXonoticCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags)
+void XonoticCommandButton_configureXonoticCommandButton(entity me, string theText, vector theColor, string theCommand, float theFlags, string theTooltip)
 {
-       me.configureXonoticButton(me, theText, theColor);
+       me.configureXonoticButton(me, theText, theColor, theTooltip);
        me.onClickCommand = theCommand;
        me.flags = theFlags;
        me.onClick = XonoticCommandButton_Click;
index 7c23b4c97bf039a659d6504761ddfa0171ab031d..7395071344cfa9b5b7d083b2229e9366e843f52e 100644 (file)
@@ -41,6 +41,5 @@ void XonoticDialog_configureDialog(entity me)
 {
        currentDialog = me;
        SUPER(XonoticDialog).configureDialog(me);
-       me.tooltip = getZonedTooltipForIdentifier(me.classname);
 }
 #endif
index 6cf608fd4dc8aeb34e08286b5b854dd8f0079c72..9559211b05bf08384481e9866be6d7f5b0b26a1a 100644 (file)
@@ -5,6 +5,7 @@ CLASS(XonoticCreditsDialog, XonoticDialog)
        METHOD(XonoticCreditsDialog, fill, void(entity));
        METHOD(XonoticCreditsDialog, focusEnter, void(entity));
        ATTRIB(XonoticCreditsDialog, title, string, _("Credits"))
+       ATTRIB(XonoticCreditsDialog, tooltip, string, _("The Xonotic credits"))
        ATTRIB(XonoticCreditsDialog, color, vector, SKINCOLOR_DIALOG_CREDITS)
        ATTRIB(XonoticCreditsDialog, intendedWidth, float, SKINWIDTH_CREDITS)
        ATTRIB(XonoticCreditsDialog, rows, float, SKINROWS_CREDITS)
index 19e243844b8a45438015f943cbad0f00c754d37e..27c922fbe97533774f63f711ac9ed47a1ac2e7ec 100644 (file)
@@ -58,7 +58,8 @@ void XonoticFirstRunDialog_fill(entity me)
                        label.allowColors = 1;
                        label.alpha = 1;
        me.TR(me);
-               me.TD(me, 1, 3.75, box = makeXonoticInputBox(1, "_cl_name"));
+               me.TD(me, 1, 3.75, box = makeXonoticInputBox_T(1, "_cl_name",
+                       _("Name under which you will appear in the game")));
                        box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
                        box.maxLength = -127; // negative means encoded length in bytes
                        box.saveImmediately = 0;  // Sorry, can't do this, it spams "name" commands.
index 6b9556507441e7a55cce2f05ab69f744a2bc9749..9969a7b212c6f22e652c5a9e60e6bed84e645733 100644 (file)
@@ -27,8 +27,8 @@ void XonoticMonsterToolsDialog_fill(entity me)
                me.TD(me, 1, 0.4, e = makeXonoticRadioButton(2, "menu_monsters_edit_spawn", "wyvern", _("Wyvern")));
        me.TR(me);
                me.TDempty(me, 0.1);
-               me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Spawn"), '0 0 0', "cmd mobspawn $menu_monsters_edit_spawn $menu_monsters_edit_movetarget", 0));
-               me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Remove"), '0 0 0', "cmd mobkill", 0));
+               me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Spawn"), '0 0 0', "spawnmob $menu_monsters_edit_spawn $menu_monsters_edit_movetarget", 0));
+               me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Remove"), '0 0 0', "killmob", 0));
        me.TR(me);
                me.TD(me, 1, 0.5, e = makeXonoticCommandButton(_("Move target:"), '0 0 0', "editmob movetarget $menu_monsters_edit_movetarget", 0));
                me.TD(me, 1, 0.5, e = makeXonoticRadioButton(2, "menu_monsters_edit_movetarget", "1", _("Follow")));
index fb0b00fda0ba4645911cd7f7fae08736714ed084..0cef712a918f76f3591048f3407bdfe7630d7632 100644 (file)
@@ -4,6 +4,7 @@
 CLASS(XonoticMultiplayerDialog, XonoticDialog)
        METHOD(XonoticMultiplayerDialog, fill, void(entity));
        ATTRIB(XonoticMultiplayerDialog, title, string, _("Multiplayer"))
+       ATTRIB(XonoticMultiplayerDialog, tooltip, string, _("Play online, against your friends in LAN, view demos or change player settings"))
        ATTRIB(XonoticMultiplayerDialog, color, vector, SKINCOLOR_DIALOG_MULTIPLAYER)
        ATTRIB(XonoticMultiplayerDialog, intendedWidth, float, 0.96)
        ATTRIB(XonoticMultiplayerDialog, rows, float, 24)
@@ -17,8 +18,10 @@ void XonoticMultiplayerDialog_fill(entity me)
        entity mc, e;
        mc = makeXonoticTabController(me.rows - 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Servers"), makeXonoticServerListTab()));
-               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Create"), makeXonoticServerCreateTab()));
+               me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Servers"), makeXonoticServerListTab(),
+                       _("Find servers to play on")));
+               me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Create"), makeXonoticServerCreateTab(),
+                       _("Host your own game")));
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Media"), makeXonoticMediaTab()));
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Profile"), makeXonoticProfileTab()));
 
index 5b7b5ef7ac9d890ecec867fc97bfe0aa718d7e4c..bafd9b6ff3b3163893a2af0e9f3aaedf3a18b37b 100644 (file)
@@ -21,17 +21,17 @@ entity makeXonoticServerCreateTab();
 
 #ifdef IMPLEMENTATION
 
-void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar)
+void GameType_ConfigureSliders(entity e, entity l, string pLabel, float pMin, float pMax, float pStep, string pCvar, string theTooltip)
 {
        if(pCvar == "")
        {
-               e.configureXonoticTextSlider(e, string_null);
+               e.configureXonoticTextSlider(e, string_null, string_null);
                l.setText(l, pLabel);
                e.disabled = l.disabled = true;
        }
        else
        {
-               e.configureXonoticTextSlider(e, pCvar);
+               e.configureXonoticTextSlider(e, pCvar, theTooltip);
 
                // clear old values
                int i;
@@ -75,7 +75,8 @@ void XonoticServerCreateTab_fill(entity me)
 
        me.gotoRC(me, 12.5, 0);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Time limit:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("timelimit_override"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("timelimit_override",
+                       _("Timelimit in minutes that when hit, will end the match")));
                        e.addValue(e, ZCTX(_("TIMLIM^Default")), "-1");
                        e.addValue(e, ZCTX(_("TIMLIM^1 minute")), "1");
                        e.addValue(e, ZCTX(_("TIMLIM^2 minutes")), "2");
@@ -98,8 +99,7 @@ void XonoticServerCreateTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, me.labelFraglimit = makeXonoticTextLabel(0, _("Frag limit:")));
-               me.TD(me, 1, 2, me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
-                       GameType_ConfigureSliders(me.sliderFraglimit, me.labelFraglimit, _("Frag limit:"), 5, 100, 5, "fraglimit_override");
+               me.TD(me, 1, 2, e = me.sliderFraglimit = makeXonoticTextSlider("fraglimit_override"));
 
        me.gotoRC(me, 15, 0);
                me.TD(me, 1, 1, me.labelTeams = makeXonoticTextLabel(0, _("Teams:")));
@@ -111,14 +111,17 @@ void XonoticServerCreateTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Player slots:")));
-               me.TD(me, 1, 2, makeXonoticSlider(1, 32, 1, "menu_maxplayers"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 1, "menu_maxplayers",
+                       _("The maximum amount of players or bots that can be connected to your server at once")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Number of bots:")));
-               me.TD(me, 1, 2, makeXonoticSlider(0, 9, 1, "bot_number"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 9, 1, "bot_number",
+                       _("Amount of bots on your server")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bot skill:")));
                        setDependent(e, "bot_number", 0, -1);
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("skill"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("skill",
+                       _("Specify how experienced the bots will be")));
                        e.addValue(e, _("Botlike"), "0");
                        e.addValue(e, _("Beginner"), "1");
                        e.addValue(e, _("You will win"), "2");
@@ -145,7 +148,8 @@ void XonoticServerCreateTab_fill(entity me)
        // this decision was made in this poll: http://forums.xonotic.org/showthread.php?tid=5445
        me.gotoRC(me, me.rows - 2.5, 0);
                me.TDempty(me, 0.5);
-               me.TD(me, 1, 2, e = makeXonoticButton(_("Mutators..."), '0 0 0'));
+               me.TD(me, 1, 2, e = makeXonoticButton_T(_("Mutators..."), '0 0 0',
+                       _("Mutators and weapon arenas")));
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.mutatorsDialog;
                        main.mutatorsDialog.refilterEntity = me.mapListBox;
@@ -163,8 +167,8 @@ void XonoticServerCreateTab_fill(entity me)
        me.gotoRC(me, me.rows - 4.5, me.firstColumn);
                // string filter label and box
                me.TD(me, 1, 0.35, e = makeXonoticTextLabel(1, _("Filter:")));
-               me.mapListBox.stringFilterBox = makeXonoticMapListStringFilterBox(me, 0, string_null);
-               me.mapListBox.stringFilterBox.tooltip = getZonedTooltipForIdentifier("XonoticMultiplayerDialog_StringFilterBox");
+               me.mapListBox.stringFilterBox = makeXonoticInputBox_T(0, string_null,
+                       _("Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done."));
                me.TD(me, 1, me.columns - me.firstColumn - 0.35, e = me.mapListBox.stringFilterBox);
                        e.onChange = MapList_StringFilterBox_Change;
                        e.keyDown = MapList_StringFilterBox_keyDown;
@@ -174,18 +178,22 @@ void XonoticServerCreateTab_fill(entity me)
        me.gotoRC(me, me.rows - 3.5, me.firstColumn);
                // the selection buttons
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.3, e = makeXonoticButton(_("Add shown"), '0 0 0'));
+               me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add shown"), '0 0 0',
+                       _("Add the maps shown in Maplist above to your selection")));
                        e.onClick = MapList_Add_Shown;
                        e.onClickEntity = me.mapListBox;
-               me.TD(me, 1, 1.3, e = makeXonoticButton(_("Remove shown"), '0 0 0'));
+               me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove shown"), '0 0 0',
+                       _("Remove the maps shown in Maplist above from your selection")));
                        e.onClick = MapList_Remove_Shown;
                        e.onClickEntity = me.mapListBox;
        me.gotoRC(me, me.rows - 2.5, me.firstColumn);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.3, e = makeXonoticButton(_("Add all"), '0 0 0'));
+               me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Add all"), '0 0 0',
+                       _("Add every available map to your selection")));
                        e.onClick = MapList_Add_All;
                        e.onClickEntity = me.mapListBox;
-               me.TD(me, 1, 1.3, e = makeXonoticButton(_("Remove all"), '0 0 0'));
+               me.TD(me, 1, 1.3, e = makeXonoticButton_T(_("Remove all"), '0 0 0',
+                       _("Remove all the maps from your selection")));
                        e.onClick = MapList_Remove_All;
                        e.onClickEntity = me.mapListBox;
 
@@ -211,34 +219,34 @@ void XonoticServerCreateTab_gameTypeChangeNotify(entity me)
 
        switch(gt)
        {
-               case MAPINFO_TYPE_CTF:        GameType_ConfigureSliders(e, l, _("Capture limit:"),   1,   20, 1, "capturelimit_override");     break;
-               case MAPINFO_TYPE_DOMINATION: GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "g_domination_point_limit"); break;
-               case MAPINFO_TYPE_KEYHUNT:    GameType_ConfigureSliders(e, l, _("Point limit:"),   200, 1500, 50, "g_keyhunt_point_limit");    break;
-               case MAPINFO_TYPE_LMS:        GameType_ConfigureSliders(e, l, _("Lives:"),           3,   50,  1, "g_lms_lives_override");     break;
-               case MAPINFO_TYPE_RACE:       GameType_ConfigureSliders(e, l, _("Laps:"),            1,   25,  1, "g_race_laps_limit");        break;
-               case MAPINFO_TYPE_NEXBALL:    GameType_ConfigureSliders(e, l, _("Goals:"),           1,   50,  1, "g_nexball_goallimit");      break;
-               case MAPINFO_TYPE_ASSAULT:    GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "");                         break;
-               case MAPINFO_TYPE_ONSLAUGHT:  GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "");                         break;
-               case MAPINFO_TYPE_CTS:        GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "");                         break;
-               case MAPINFO_TYPE_INVASION:   GameType_ConfigureSliders(e, l, _("Point limit:"),     5,    0,  5, "");                         break;
-       case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"),     5,  100,  5, "g_tdm_point_limit");        break;
-               default:                      GameType_ConfigureSliders(e, l, _("Frag limit:"),      5,  100,  5, "fraglimit_override");       break;
+               case MAPINFO_TYPE_CTF:            GameType_ConfigureSliders(e, l, _("Capture limit:"),   1,   20, 1,  "capturelimit_override", string_null); break;
+               case MAPINFO_TYPE_DOMINATION:     GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "g_domination_point_limit", string_null); break;
+               case MAPINFO_TYPE_KEYHUNT:        GameType_ConfigureSliders(e, l, _("Point limit:"),   200, 1500, 50, "g_keyhunt_point_limit", string_null); break;
+               case MAPINFO_TYPE_LMS:            GameType_ConfigureSliders(e, l, _("Lives:"),           3,   50,  1, "g_lms_lives_override", string_null); break;
+               case MAPINFO_TYPE_RACE:           GameType_ConfigureSliders(e, l, _("Laps:"),            1,   25,  1, "g_race_laps_limit", string_null); break;
+               case MAPINFO_TYPE_NEXBALL:        GameType_ConfigureSliders(e, l, _("Goals:"),           1,   50,  1, "g_nexball_goallimit", string_null); break;
+               case MAPINFO_TYPE_ASSAULT:        GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "", string_null); break;
+               case MAPINFO_TYPE_ONSLAUGHT:      GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "", string_null); break;
+               case MAPINFO_TYPE_CTS:            GameType_ConfigureSliders(e, l, _("Point limit:"),    50,  500, 10, "", string_null); break;
+               case MAPINFO_TYPE_INVASION:       GameType_ConfigureSliders(e, l, _("Point limit:"),     5,    0,  5, "", string_null); break;
+               case MAPINFO_TYPE_TEAM_DEATHMATCH:GameType_ConfigureSliders(e, l, _("Point limit:"),     5,  100,  5, "g_tdm_point_limit", string_null); break;
+               default:                          GameType_ConfigureSliders(e, l, _("Frag limit:"),      5,  100,  5, "fraglimit_override", _("The amount of frags needed before the match will end")); break;
        }
 
        string x = string_null;
+       string theTooltip = string_null;
        e = me.sliderTeams;
        switch(gt)
        {
+               // old tooltip: _("Override the default amount of teams in teamgames")
                case MAPINFO_TYPE_CA:               x = "g_ca_teams_override";          break;
                case MAPINFO_TYPE_DOMINATION:       x = "g_domination_teams_override";  break;
                case MAPINFO_TYPE_FREEZETAG:        x = "g_freezetag_teams_override";   break;
                case MAPINFO_TYPE_KEYHUNT:          x = "g_keyhunt_teams_override";     break;
                case MAPINFO_TYPE_TEAM_DEATHMATCH:  x = "g_tdm_teams_override";         break;
        }
-       e.configureXonoticTextSlider(e, x);
+       e.configureXonoticTextSlider(e, x, theTooltip);
        e.configureXonoticTextSliderValues(e);
-       if(!x)
-               e.value = 0;
        me.sliderTeams.disabled = me.labelTeams.disabled = !x;
 
        me.mapListBox.refilter(me.mapListBox);
index 8e7a37f8d6bc925eb08f57c50a0659b5bbf71769..0329f1ee7657837c1797a882e0cb11fa09c4e5cb 100644 (file)
@@ -167,26 +167,31 @@ void XonoticMutatorsDialog_fill(entity me)
                me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Gameplay mutators:")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_dodging", _("Dodging")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_dodging", _("Dodging"),
+                       _("Enable dodging")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_touchexplode", _("Touch explode")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_cloaked", _("Cloaked")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_cloaked", _("Cloaked"),
+                       _("All players are almost invisible")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_buffs", _("Buffs")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_midair", _("Midair")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_midair", _("Midair"),
+                       _("Only possible to inflict damage on your enemy while he's airborne")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_vampire", _("Vampire")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_vampire", _("Vampire"),
+                       _("Damage done to your enemy gets added to your own health")));
                        setDependent(e, "g_instagib", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticSlider(10, 50, 1, "g_bloodloss");
+               s = makeXonoticSlider_T(10, 50, 1, "g_bloodloss",
+                       _("Amount of health below which your player gets stunned because of blood loss"));
                me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(0, 1, s, _("Blood loss")));
                        setDependent(e, "g_instagib", 0, 0);
        me.TR(me);
@@ -194,7 +199,8 @@ void XonoticMutatorsDialog_fill(entity me)
                me.TD(me, 1, 1.6, s);
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticSlider(80, 400, 8, "sv_gravity");
+               s = makeXonoticSlider_T(80, 400, 8, "sv_gravity",
+                       _("Make things fall to the ground slower, lower value means lower gravity"));
                        s.valueDigits = 0;
                        s.valueDisplayMultiplier = 0.125; // show gravity in percent
                me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(800, 1, s, _("Low gravity")));
@@ -206,10 +212,12 @@ void XonoticMutatorsDialog_fill(entity me)
                me.TD(me, 1, 2, makeXonoticTextLabel(0, _("Weapon & item mutators:")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_grappling_hook", _("Grappling hook")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_grappling_hook", _("Grappling hook"),
+                       _("Players spawn with the grappling hook")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_jetpack", _("Jet pack")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_jetpack", _("Jet pack"),
+                       _("Players spawn with the jetpack")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_invincible_projectiles", _("Invincible Projectiles")));
@@ -224,18 +232,21 @@ void XonoticMutatorsDialog_fill(entity me)
                        setDependent(e, "g_instagib", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_pinata", _("Piñata")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_pinata", _("Piñata"),
+                       _("Players will drop all weapons they possessed when they are killed")));
                        setDependentWeird(e, checkCompatibility_pinata);
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "g_weapon_stay", _("Weapons stay")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "g_weapon_stay", _("Weapons stay"),
+                       _("Weapons stay after they are picked up")));
                        setDependentWeird(e, checkCompatibility_weaponstay);
        me.TR(me);
 
        me.gotoRC(me, 0, 2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 2, e = makeXonoticRadioButton(1, string_null, string_null, _("Regular (no arena)")));
        me.TR(me);
-               me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:")));
+               me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "g_weaponarena", "menu_weaponarena", _("Weapon arenas:"),
+                       _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
                        e.cvarValueIsAnotherCvar = true;
                        e.cvarOffValue = "0";
        for(i = WEP_FIRST, j = 0; i <= WEP_LAST; ++i)
@@ -252,25 +263,30 @@ void XonoticMutatorsDialog_fill(entity me)
        }
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_weaponarena", "most", _("Most weapons")));
+               me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "most", _("Most weapons"),
+                       _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
                        e.cvarOffValue = "0";
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_weaponarena", "all", _("All weapons")));
+               me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_weaponarena", "all", _("All weapons"),
+                       _("Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.")));
                        e.cvarOffValue = "0";
        me.TR(me);
                me.TD(me, 1, 4, makeXonoticTextLabel(0, _("Special arenas:")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_instagib", "1", _("InstaGib")));
+               me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_instagib", "1", _("InstaGib"),
+                       _("Players will be given only one weapon, which can instantly kill the opponent with a single shot. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode does not inflict any damage but is good for doing trickjumps.")));
                        e.cvarOffValue = "0";
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticRadioButton(1, "g_nix", "1", _("NIX")));
+               me.TD(me, 1, 1.8, e = makeXonoticRadioButton_T(1, "g_nix", "1", _("NIX"),
+                       _("No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.")));
                        e.cvarOffValue = "0";
        me.TR(me);
                me.TDempty(me, 0.4);
-               me.TD(me, 1, 1.6, e = makeXonoticCheckBox(0, "g_nix_with_blaster", _("with blaster")));
+               me.TD(me, 1, 1.6, e = makeXonoticCheckBox_T(0, "g_nix_with_blaster", _("with blaster"),
+                       _("Always carry the blaster as an additional weapon in Nix")));
                        setDependent(e, "g_nix", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
index 86829871bd695c14e693e6275330ba7f452c311b..fba5f193098652d55e7dfb00556e3f712145dc6a 100644 (file)
@@ -36,15 +36,18 @@ void XonoticServerListTab_fill(entity me)
                me.TD(me, 1, 0.9, e = makeXonoticCheckBox(0, "menu_slist_categories", ZCTX(_("SRVS^Categories"))));
                        e.onClickEntity = slist;
                        e.onClick = ServerList_Categories_Click;
-               me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty"))));
+               me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "menu_slist_showempty", ZCTX(_("SRVS^Empty")),
+                       _("Show empty servers")));
                        slist.filterShowEmpty = e.checked;
                        e.onClickEntity = slist;
                        e.onClick = ServerList_ShowEmpty_Click;
-               me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "menu_slist_showfull", ZCTX(_("SRVS^Full"))));
+               me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "menu_slist_showfull", ZCTX(_("SRVS^Full")),
+                       _("Show full servers that have no slots available")));
                        slist.filterShowFull = e.checked;
                        e.onClickEntity = slist;
                        e.onClick = ServerList_ShowFull_Click;
-               me.TD(me, 1, 0.6, e = makeXonoticCheckBox(0, "net_slist_pause", _("Pause")));
+               me.TD(me, 1, 0.6, e = makeXonoticCheckBox_T(0, "net_slist_pause", _("Pause"),
+                       _("Pause updating the server list to prevent servers from \"jumping around\"")));
 
        me.gotoRC(me, 2, 0);
                me.TD(me, 1, 1, slist.sortButton1 = makeXonoticButton(string_null, '0 0 0'));
@@ -67,7 +70,8 @@ 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_T(_("Info..."), '0 0 0',
+                       _("Show more information about the currently highlighted server")));
                        e.onClick = ServerList_Info_Click;
                        e.onClickEntity = slist;
                        slist.infoButton = e;
index abecd1ed5bd18e27576748b3ebc0f6dd0c2287e8..19c97f771f8dfb61a665fe07ee279c49a33a35e5 100644 (file)
@@ -25,7 +25,8 @@ void XonoticMediaTab_fill(entity me)
        mc = makeXonoticTabController(me.rows - 2);
 
        me.gotoRC(me, 0.5, 0);
-               me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Demos"), makeXonoticDemoBrowserTab()));
+               me.TD(me, 1, 1, e = mc.makeTabButton_T(mc, _("Demos"), makeXonoticDemoBrowserTab(),
+                       _("Browse and view demos")));
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Screenshots"), makeXonoticScreenshotBrowserTab()));
                me.TD(me, 1, 1, e = mc.makeTabButton(mc, _("Music Player"), makeXonoticMusicPlayerTab()));
 
index 6172174d5b8898262477a3e501cabbc3bc6b004b..d48ad77d54bb5539f5008515112325e94294a5aa 100644 (file)
@@ -62,7 +62,8 @@ void XonoticDemoBrowserTab_fill(entity me)
                me.TD(me, me.rows - 2.5, me.columns, demolist);
 
        me.gotoRC(me, me.rows - 1, 0);
-               me.TD(me, 1, me.columns / 2, e = makeXonoticButton(_("Timedemo"), '0 0 0'));
+               me.TD(me, 1, me.columns / 2, e = makeXonoticButton_T(_("Timedemo"), '0 0 0',
+                       _("Benchmark how fast your computer can run the highlighted demo")));
                        e.democlicktype = DMO_TIME;
                        e.onClick = DemoConfirm_Check_Gamestatus;
                        e.onClickEntity = me; // demolist is global anyway
index 80d1ffe995529298daae79e82ad75aee1dff49f3..122beda18dcf929287d67b19aadc0d8eace64675 100644 (file)
@@ -49,7 +49,8 @@ void XonoticProfileTab_fill(entity me)
                        label.fontSize = SKINFONTSIZE_TITLE;
 
        me.gotoRC(me, 2.5, 0);
-               me.TD(me, 1, 3.0, box = makeXonoticInputBox(1, "_cl_name"));
+               me.TD(me, 1, 3.0, box = makeXonoticInputBox_T(1, "_cl_name",
+                       _("Name under which you will appear in the game")));
                        box.forbiddenCharacters = "\r\n\\\"$"; // don't care, isn't getting saved
                        box.maxLength = -127; // negative means encoded length in bytes
                        box.saveImmediately = 0;  // Sorry, can't do this, it spams "name" commands.
index a7591c71c935ac9de1115a4aac8eae1a97170d4f..74692cf87677e734e16b7e8c814ca548a6c52fcb 100644 (file)
@@ -4,6 +4,7 @@
 CLASS(XonoticQuitDialog, XonoticDialog)
        METHOD(XonoticQuitDialog, fill, void(entity));
        ATTRIB(XonoticQuitDialog, title, string, _("Quit"))
+       ATTRIB(XonoticQuitDialog, tooltip, string, _("Quit the game"))
        ATTRIB(XonoticQuitDialog, color, vector, SKINCOLOR_DIALOG_QUIT)
        ATTRIB(XonoticQuitDialog, intendedWidth, float, 0.5)
        ATTRIB(XonoticQuitDialog, rows, float, 3)
@@ -20,8 +21,10 @@ void XonoticQuitDialog_fill(entity me)
                me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("Are you sure you want to quit?")));
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCommandButton(_("Yes"), '1 0 0', "echo ]quit\nquit", 0));
-               me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0'));
+               me.TD(me, 1, 1, e = makeXonoticCommandButton_T(_("Yes"), '1 0 0', "echo ]quit\nquit", 0,
+                       _("Back to work...")));
+               me.TD(me, 1, 1, e = makeXonoticButton_T(_("No"), '0 1 0',
+                       _("I got some more fragging to do!")));
                        e.onClick = Dialog_Close;
                        e.onClickEntity = me;
 }
index e776411f2fccbd3f44f45e18e705cb000fce6062..ed463f22b099d77b108098f3a04cdbc78c97be6a 100644 (file)
@@ -4,6 +4,7 @@
 CLASS(XonoticSettingsDialog, XonoticDialog)
        METHOD(XonoticSettingsDialog, fill, void(entity));
        ATTRIB(XonoticSettingsDialog, title, string, _("Settings"))
+       ATTRIB(XonoticSettingsDialog, tooltip, string, _("Change the game settings"))
        ATTRIB(XonoticSettingsDialog, color, vector, SKINCOLOR_DIALOG_SETTINGS)
        ATTRIB(XonoticSettingsDialog, intendedWidth, float, 0.96)
        ATTRIB(XonoticSettingsDialog, rows, float, 18)
@@ -17,14 +18,14 @@ void XonoticSettingsDialog_fill(entity me)
        entity mc;
        mc = makeXonoticTabController(me.rows - 2.5);
        me.TR(me);
-               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Video"),   makeXonoticVideoSettingsTab()));
-               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Effects"), makeXonoticEffectsSettingsTab()));
-               me.TD(me, 1, 2, mc.makeTabButton(mc, _("Audio"),   makeXonoticAudioSettingsTab()));
+               me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Video"),   makeXonoticVideoSettingsTab(), _("Video settings")));
+               me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Effects"), makeXonoticEffectsSettingsTab(), _("Effects settings")));
+               me.TD(me, 1, 2, mc.makeTabButton_T(mc, _("Audio"),   makeXonoticAudioSettingsTab(), _("Audio settings")));
        me.TR(me);
                me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Game"),    NEW(XonoticGameSettingsTab)));
-               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Input"),   makeXonoticInputSettingsTab()));
+               me.TD(me, 1, 1.5, mc.makeTabButton_T(mc, _("Input"),   makeXonoticInputSettingsTab(), _("Input settings")));
                me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("User"),    makeXonoticUserSettingsTab()));
-               me.TD(me, 1, 1.5, mc.makeTabButton(mc, _("Misc"),    makeXonoticMiscSettingsTab()));
+               me.TD(me, 1, 1.5, mc.makeTabButton_T(mc, _("Misc"),    makeXonoticMiscSettingsTab(), _("Misc settings")));
        me.gotoRC(me, 2.5, 0);
                me.TD(me, me.rows - 2.5, me.columns, mc);
 }
index 13f5264c17028172b3ce097058b328948deccdb6..be2778117047a1f7d5e67e0710e1210cf744cc6e 100644 (file)
@@ -25,12 +25,12 @@ void XonoticAudioSettingsTab_fill(entity me)
        entity e, s;
 
        me.TR(me);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "mastervolume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "mastervolume", "-");
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Master:")));
                me.TD(me, 1, 2, s);
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "bgmvolume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "bgmvolume", "-");
                makeMulti(s, "snd_channel8volume");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Music:")));
                me.TD(me, 1, 2, s);
@@ -38,7 +38,7 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_staticvolume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_staticvolume", "-");
                makeMulti(s, "snd_channel9volume");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, ZCTX(_("VOL^Ambient:"))));
                me.TD(me, 1, 2, s);
@@ -46,49 +46,49 @@ void XonoticAudioSettingsTab_fill(entity me)
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel0volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel0volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Info:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel3volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel3volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Items:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel6volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel6volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Pain:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel7volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel7volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Player:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel4volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel4volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Shots:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel2volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel2volume", "-");
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Voice:")));
                me.TD(me, 1, 2, s);
                setDependentStringNotEqual(e, "mastervolume", "0");
                setDependentStringNotEqual(s, "mastervolume", "0");
        me.TR(me);
                me.TDempty(me, 0.2);
-               s = makeXonoticDecibelsSlider(-40, 0, 0.4, "snd_channel1volume");
+               s = makeXonoticDecibelsSlider_T(-40, 0, 0.4, "snd_channel1volume", "-");
                makeMulti(s, "snd_channel5volume"); // @!#%'n Tuba
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Weapons:")));
                me.TD(me, 1, 2, s);
@@ -102,7 +102,8 @@ void XonoticAudioSettingsTab_fill(entity me)
 
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Frequency:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_speed"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("snd_speed",
+                       _("Sound output frequency")));
                        e.addValue(e, _("8 kHz"), "8000");
                        e.addValue(e, _("11.025 kHz"), "11025");
                        e.addValue(e, _("16 kHz"), "16000");
@@ -114,7 +115,8 @@ void XonoticAudioSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Channels:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("snd_channels"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("snd_channels",
+                       _("Number of channels for the sound output")));
                        e.addValue(e, _("Mono"), "1");
                        e.addValue(e, _("Stereo"), "2");
                        e.addValue(e, _("2.1"), "3");
@@ -126,21 +128,27 @@ void XonoticAudioSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "snd_swapstereo", _("Swap stereo output channels")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "snd_swapstereo", _("Swap stereo output channels"),
+                       _("Swap left/right channels")));
                setDependent(e, "snd_channels", 1.5, 0.5);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "snd_spatialization_control", _("Headphone friendly mode")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "snd_spatialization_control", _("Headphone friendly mode"),
+                       _("Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)")));
                setDependent(e, "snd_channels", 1.5, 0.5);
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, makeXonoticCheckBox(0, "cl_hitsound", _("Hit indication sound")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_hitsound", _("Hit indication sound"),
+                       _("Play a hit indicator sound when your shot hits an enemy")));
                e.sendCvars = true;
        me.TR(me);
                me.TD(me, 1, 3, makeXonoticCheckBox(0, "con_chatsound", _("Chat message sound")));
        me.TR(me);
-               me.hiddenMenuSoundsSlider = makeXonoticSlider(1, 1, 1, "menu_sounds");
-               me.TD(me, 1, 1.2, makeXonoticSliderCheckBox(0, 1, me.hiddenMenuSoundsSlider, _("Menu sounds")));
+               me.hiddenMenuSoundsSlider = makeXonoticSlider_T(1, 1, 1, "menu_sounds",
+                       _("Play sounds when clicking or hovering over menu items"));
+               me.TD(me, 1, 1.2, e = makeXonoticSliderCheckBox(0, 1, me.hiddenMenuSoundsSlider, _("Menu sounds")));
+                       e.tooltip = me.hiddenMenuSoundsSlider.tooltip;
                me.TD(me, 1, 1.8, e = makeXonoticSliderCheckBox(2, 0, me.hiddenMenuSoundsSlider, _("Focus sounds")));
+                       e.tooltip = me.hiddenMenuSoundsSlider.tooltip;
                setDependent(e, "menu_sounds", 1, 2);
        me.TR(me);
        me.TR(me);
@@ -153,7 +161,8 @@ void XonoticAudioSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, makeXonoticTextLabel(0, _("Automatic taunts:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_autotaunt"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_autotaunt",
+                       _("Automatically taunt enemies after fragging them")));
                        e.addValue(e, _("Never"), "0");
                        e.addValue(e, _("Sometimes"), "0.35");
                        e.addValue(e, _("Often"), "0.65");
index c07152997182d197c5f8c0b24f22b0ce92a5f035..9089691590d6ccfaef63f852905c163ee6754040 100644 (file)
@@ -49,7 +49,8 @@ void XonoticEffectsSettingsTab_fill(entity me)
 
        me.gotoRC(me, 1.25, 0);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Geometry detail:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("r_subdivisions_tolerance"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_subdivisions_tolerance",
+                       _("Change the smoothness of the curves on the map (default: normal)")));
                        e.addValue(e, ZCTX(_("DET^Lowest")), "16");
                        e.addValue(e, ZCTX(_("DET^Low")), "8");
                        e.addValue(e, ZCTX(_("DET^Normal")), "4");
@@ -107,43 +108,54 @@ void XonoticEffectsSettingsTab_fill(entity me)
                if(cvar("developer"))
                {
                        me.TDempty(me, 0.2);
-                       me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx(3, 0, "r_showsurfaces", _("Show surfaces")));
+                       me.TD(me, 1, 2.8, e = makeXonoticCheckBoxEx_T(3, 0, "r_showsurfaces", _("Show surfaces"),
+                               _("Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)")));
                }
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(1, "mod_q3bsp_nolightmaps", _("Use lightmaps")));
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_deluxemapping", _("Deluxe mapping")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(1, "mod_q3bsp_nolightmaps", _("Use lightmaps"),
+                       _("Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_deluxemapping", _("Deluxe mapping"),
+                       _("Use per-pixel lighting effects (default: enabled)")));
                        setDependentAND(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_gloss", _("Gloss")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_gloss", _("Gloss"),
+                       _("Enable the use of glossmaps on textures supporting it (default: enabled)")));
                        setDependentAND3(e, "vid_gl20", 1, 1, "mod_q3bsp_nolightmaps", 0, 0, "r_glsl_deluxemapping", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping", _("Offset mapping")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping", _("Offset mapping"),
+                       _("Offset mapping effect that will make textures with bumpmaps appear like they \"pop out\" of the flat 2D surface (default: disabled)")));
                        setDependent(e, "vid_gl20", 1, 1);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_glsl_offsetmapping_reliefmapping", _("Relief mapping"),
+                       _("Higher quality offset mapping, which also has a huge impact on performance (default: disabled)")));
                        setDependentAND(e, "vid_gl20", 1, 1, "r_glsl_offsetmapping", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_water", _("Reflections:")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_water", _("Reflections:"),
+                       _("Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)")));
                        setDependent(e, "vid_gl20", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("r_water_resolutionmultiplier"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_water_resolutionmultiplier",
+                       _("Resolution of reflections/refractions (default: good)")));
                        e.addValue(e, _("Blurred"), "0.25");
                        e.addValue(e, ZCTX(_("REFL^Good")), "0.5");
                        e.addValue(e, _("Sharp"), "1");
                        e.configureXonoticTextSliderValues(e);
                        setDependentAND(e, "vid_gl20", 1, 1, "r_water", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_decals", _("Decals")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "cl_decals", _("Decals"),
+                       _("Enable decals (bullet holes and blood) (default: enabled)")));
                me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "cl_decals_models", _("Decals on models")));
                        setDependent(e, "cl_decals", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
                        setDependent(e, "cl_decals", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawdecals_drawdistance"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawdecals_drawdistance",
+                       _("Decals further away than this will not be drawn (default: 300)")));
                        setDependent(e, "cl_decals", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Time:")));
                        setDependent(e, "cl_decals", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(1, 20, 1, "cl_decals_fadetime"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 20, 1, "cl_decals_fadetime",
+                       _("Time in seconds before decals fade away (default: 2)")));
                        setDependent(e, "cl_decals", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
@@ -155,37 +167,48 @@ void XonoticEffectsSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
 
        me.gotoRC(me, 1.25, 3.2); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "r_coronas", "0", _("No dynamic lighting")));
+               me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "r_coronas", "0", _("No dynamic lighting"),
+                       _("Enable corona flares around certain lights (default: enabled)")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticRadioButton(1, "gl_flashblend", string_null, _("Fake corona lighting")));
+               me.TD(me, 1, 3, e = makeXonoticRadioButton_T(1, "gl_flashblend", string_null, _("Fake corona lighting"),
+                       _("Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)")));
                makeMulti(e, "r_coronas");
        me.TR(me);
-               me.TD(me, 1, 2, e = makeXonoticRadioButton(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting")));
+               me.TD(me, 1, 2, e = makeXonoticRadioButton_T(1, "r_shadow_realtime_dlight", string_null, _("Realtime dynamic lighting"),
+                       _("Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)")));
                makeMulti(e, "r_coronas");
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_dlight_shadows", _("Shadows")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_dlight_shadows", _("Shadows"),
+                       _("Enable rendering of shadows from dynamic lights (default: disabled)")));
                        setDependent(e, "r_shadow_realtime_dlight", 1, 1);
        me.TR(me);
-               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "r_shadow_realtime_world", _("Realtime world lighting")));
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_realtime_world_shadows", _("Shadows")));
+               me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world", _("Realtime world lighting"),
+                       _("Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_shadow_realtime_world_shadows", _("Shadows"),
+                       _("Enable rendering of shadows from realtime world lights (default: disabled)")));
                        setDependent(e, "r_shadow_realtime_world", 1, 1);
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 1.8, e = makeXonoticCheckBox(0, "r_shadow_usenormalmap", _("Use normal maps")));
+               me.TD(me, 1, 1.8, e = makeXonoticCheckBox_T(0, "r_shadow_usenormalmap", _("Use normal maps"),
+                       _("Enable use of directional shading on textures (default: enabled)")));
                        setDependentOR(e, "r_shadow_realtime_dlight", 1, 1, "r_shadow_realtime_world", 1, 1);
                me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_shadow_shadowmapping", _("Soft shadows")));
                        setDependentWeird(e, someShadowCvarIsEnabled);
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "r_coronas_occlusionquery", _("Fade corona according to visibility")));
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "r_coronas_occlusionquery", _("Fade corona according to visibility"),
+                       _("Fade coronas according to visibility (default: enabled)")));
                        setDependent(e, "r_coronas", 1, 1);
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "r_bloom", _("Bloom")));
-               me.TD(me, 1, 2, e = makeXonoticCheckBoxEx(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "r_bloom", _("Bloom"),
+                       _("Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)")));
+               me.TD(me, 1, 2, e = makeXonoticCheckBoxEx_T(0.5, 0, "hud_postprocessing_maxbluralpha", _("Extra postprocessing effects"),
+                       _("Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)")));
                        makeMulti(e, "hud_powerup");
                        setDependent(e, "vid_gl20", 1, 1);
        me.TR(me);
-               s = makeXonoticSlider(0.1, 1, 0.1, "r_motionblur");
+               s = makeXonoticSlider_T(0.1, 1, 0.1, "r_motionblur",
+                       _("Motion blur strength - 0.4 recommended"));
                me.TD(me, 1, 1, e = makeXonoticSliderCheckBox(0, 1, s, _("Motion blur:")));
                if(s.value != e.savedValue)
                        e.savedValue = 0.4; // default
@@ -206,7 +229,8 @@ void XonoticEffectsSettingsTab_fill(entity me)
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Distance:")));
                        setDependent(e, "cl_particles", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(200, 500, 20, "r_drawparticles_drawdistance"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(200, 500, 20, "r_drawparticles_drawdistance",
+                       _("Particles further away than this will not be drawn (default: 1000)")));
                        setDependent(e, "cl_particles", 1, 1);
 
        me.gotoRC(me, me.rows - 1, 0);
index 7a5db16f3dc039fb5b8ea17087c7eb5cbe1ba8dd..62c2d658fa02ff771d98de12740878034314e9c0 100644 (file)
@@ -36,7 +36,8 @@ void XonoticGameCrosshairSettingsTab_fill(entity me)
        me.TR(me); //me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_enabled", "0", _("No crosshair")));
        //me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_per_weapon", string_null, _("Per weapon")));
+               me.TD(me, 1, 1, e = makeXonoticRadioButton_T(3, "crosshair_per_weapon", string_null, _("Per weapon"),
+                       _("Set a different crosshair for each weapon, good if you play without weapon models")));
                makeMulti(e, "crosshair_enabled");
        //me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticRadioButton(3, "crosshair_enabled", "2", _("Custom")));
@@ -139,7 +140,8 @@ void XonoticGameCrosshairSettingsTab_fill(entity me)
                        setDependent(e, "crosshair_enabled", 1, 2);
        /*me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Hit testing:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("crosshair_hittest"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("crosshair_hittest",
+                       _("None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy")));
                        e.addValue(e, ZCTX(_("HTTST^Disabled")), "0");
                        e.addValue(e, ZCTX(_("HTTST^TrueAim")), "1");
                        e.addValue(e, ZCTX(_("HTTST^Enemies")), "1.25");
index 2c4903b0d99fb1ae79cfdba143f8fb0941fe73c3..a14fb189f543969f8361c7621e17f860b57dd934 100644 (file)
@@ -71,12 +71,14 @@ void XonoticGameHUDSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Waypoints")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_hidewaypoints", _("Display waypoint markers for objectives on the map")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(1, "cl_hidewaypoints", _("Display waypoint markers for objectives on the map"),
+                       _("Show various gametype specific waypoints")));
        me.TR(me);
                me.TDempty(me, 0.2);
                me.TD(me, 1, 0.8, e = makeXonoticTextLabel(0, _("Alpha:")));
                        setDependent(e, "cl_hidewaypoints", 0, 0);
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.1, 1, 0.05, "g_waypointsprite_alpha"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0.1, 1, 0.05, "g_waypointsprite_alpha",
+                       _("Control transparency of the waypoints")));
                        setDependent(e, "cl_hidewaypoints", 0, 0);
        me.TR(me);
                me.TDempty(me, 0.2);
index 7b0794bdd782e671c84693eb6b60b715dbba2b48..17dbdee08fe9059e03a898b476cfddfa3bc6360b 100644 (file)
@@ -66,7 +66,8 @@ void XonoticGameModelSettingsTab_fill(entity me)
                me.TD(me, 1, 2, e = makeXonoticSlider(0, 2, 0.2, "cl_deathglow"));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gibs:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_nogibs"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_nogibs",
+                       _("Reduce the amount of gibs or remove them completely (default: lots)")));
                        e.addValue(e, ZCTX(_("GIBS^None")), "1");
                        e.addValue(e, ZCTX(_("GIBS^Few")), "0.75");
                        e.addValue(e, ZCTX(_("GIBS^Many")), "0.5");
index 207c87b9e4f62a10729a569cb0fb06538450d620..40b5aebba40e884b9e2f594315121ba7aa7cb21a 100644 (file)
@@ -77,16 +77,19 @@ void XonoticGameViewSettingsTab_fill(entity me)
 
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Field of view:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(60, 130, 5, "fov"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(60, 130, 5, "fov",
+                       _("Field of vision in degrees from 60 to 130, default is 90")));
        me.TR(me);
        me.TR(me);
                //me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom factor:"))));
-               me.TD(me, 1, 2, e = makeXonoticSlider(2, 30, 0.5, "cl_zoomfactor"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(2, 30, 0.5, "cl_zoomfactor",
+                       _("How big the zoom factor is when the zoom button is pressed")));
        me.TR(me);
                //me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom speed:"))));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("cl_zoomspeed"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("cl_zoomspeed",
+                       _("How fast the view will be zoomed, disable to zoom instantly")));
                        e.addValue(e, "1", "1"); // Samual: for() loop doesn't work here, even though it would make sense.
                        e.addValue(e, "2", "2");
                        e.addValue(e, "3", "3");
@@ -100,7 +103,8 @@ void XonoticGameViewSettingsTab_fill(entity me)
        me.TR(me);
                //me.TDempty(me, 0.2);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("ZOOM^Zoom sensitivity:"))));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 1, 0.1, "cl_zoomsensitivity"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 1, 0.1, "cl_zoomsensitivity",
+                       _("How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)")));
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "cl_velocityzoom_enabled", _("Velocity zoom")));
index dd8c6fd501b00ab5cfc138b22bbd1a447cce1e5f..f8845822c9f4be22b86f7dcf9248850afa4a4cae 100644 (file)
@@ -47,24 +47,30 @@ void XonoticGameWeaponsSettingsTab_fill(entity me)
                        e.onClickEntity = me.weaponsList;
 
        me.gotoRC(me, 0, 3); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_weaponpriority_useforcycling", _("Use priority list for weapon cycling"),
+                       _("Make use of the list above when cycling through weapons with the mouse wheel")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_weaponimpulsemode", _("Cycle through only usable weapon selections")));
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_autoswitch", _("Auto switch weapons on pickup")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_autoswitch", _("Auto switch weapons on pickup"),
+                       _("Automatically switch to newly picked up weapons if they are better than what you are carrying")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_unpress_attack_on_weapon_switch", _("Release attack buttons when you switch weapons")));
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "r_drawviewmodel", _("Draw 1st person weapon model")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "r_drawviewmodel", _("Draw 1st person weapon model"),
+                       _("Draw the weapon model")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "4", _("Left align")));
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "4", _("Left align"),
+                       _("Position of the weapon model; requires reconnect")));
                        setDependent(e, "r_drawviewmodel", 1, 1);
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "cl_gunalign", "1", _("Center")));
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "cl_gunalign", "1", _("Center"),
+                       _("Position of the weapon model; requires reconnect")));
                        setDependent(e, "r_drawviewmodel", 1, 1);
-               me.TD(me, 1, 1.0, e = makeXonoticRadioButton(1, "cl_gunalign", "3", _("Right align")));
+               me.TD(me, 1, 1.0, e = makeXonoticRadioButton_T(1, "cl_gunalign", "3", _("Right align"),
+                       _("Position of the weapon model; requires reconnect")));
                        setDependent(e, "r_drawviewmodel", 1, 1);
        me.TR(me);
        me.TR(me);
index c36c26e547f2227fc0b922dd1be3deffacf5aea9..937fe879049cee1e57f16bdd2a8c5ab8f68acef4 100644 (file)
@@ -58,11 +58,14 @@ void XonoticInputSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Mouse")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Sensitivity:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(1, 32, 0.2, "sensitivity"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 32, 0.2, "sensitivity",
+                       _("Mouse speed multiplier")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_filter", _("Smooth aiming")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "m_filter", _("Smooth aiming"),
+                       _("Smoothes the mouse movement, but makes aiming slightly less responsive")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(1.022, "m_pitch", _("Invert aiming")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(1.022, "m_pitch", _("Invert aiming"),
+                       _("Invert mouse movement on the Y-axis")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "menu_mouse_absolute", _("Use system mouse positioning")));
                        makeMulti(e, "hud_cursormode");
@@ -72,7 +75,10 @@ void XonoticInputSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "m_accelerate", _("Enable built in mouse acceleration")));
        me.TR(me);
                if(cvar_type("vid_dgamouse") & CVAR_TYPEFLAG_ENGINE)
-                       me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_dgamouse", _("Disable system mouse acceleration")));
+               {
+                       me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "vid_dgamouse", _("Disable system mouse acceleration"),
+                               _("Make use of DGA mouse input")));
+               }
                else if(cvar_type("apple_mouse_noaccel") & CVAR_TYPEFLAG_ENGINE)
                        me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "apple_mouse_noaccel", _("Disable system mouse acceleration")));
                else
@@ -85,7 +91,8 @@ void XonoticInputSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "con_closeontoggleconsole", _("Pressing \"enter console\" key also closes it"),
+                       _("Allow the console toggling bind to also close the console")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(1, "cl_movement_track_canjump", _("Automatically repeat jumping if holding jump")));
                        e.sendCvars = true;
index 877b070ffae125e17375b909d2f81edf15a3a31d..3a68ef0e4f66c47963a9783d2b32fd0cf4b8f543 100644 (file)
@@ -27,11 +27,13 @@ void XonoticMiscSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Network")));
        me.TR(me);
                me.TD(me, 1, 1.2, e = makeXonoticTextLabel(0, _("Client UDP port:")));
-               me.TD(me, 1, 1.5, e = makeXonoticInputBox(0, "cl_port"));
+               me.TD(me, 1, 1.5, e = makeXonoticInputBox_T(0, "cl_port",
+                       _("Force client to use chosen port unless it is set to 0")));
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Bandwidth:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("_cl_rate"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("_cl_rate",
+                       _("Specify your network speed with this slider")));
                        e.addValue(e, _("56k"), "4000");
                        e.addValue(e, _("ISDN"), "7000");
                        e.addValue(e, _("Slow ADSL"), "15000");
@@ -40,18 +42,21 @@ void XonoticMiscSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Input packets/s:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 5, "cl_netfps"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(20, 100, 5, "cl_netfps",
+                       _("How many input packets to send to the server each second")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Server queries/s:")));
                me.TD(me, 1, 2, e = makeXonoticSlider(20, 100, 10, "net_slist_queriespersecond"));
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Downloads:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(1, 5, 1, "cl_curl_maxdownloads"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1, 5, 1, "cl_curl_maxdownloads",
+                       _("Maximum number of concurrent HTTP/FTP downloads")));
        me.TR(me);
                me.TDempty(me, 0.1);
                me.TD(me, 1, 0.9, e = makeXonoticTextLabel(0, _("Speed (kB/s):")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(10, 2000, 50, "cl_curl_maxspeed"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(10, 2000, 50, "cl_curl_maxspeed",
+                       _("Maximum download speed")));
        me.TR(me);
                if(cvar("developer"))
                {
@@ -59,9 +64,11 @@ void XonoticMiscSettingsTab_fill(entity me)
                        me.TD(me, 1, 2, e = makeXonoticSlider(0, 1000, 25, "cl_netlocalping"));
                }
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "shownetgraph", _("Show netgraph")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "shownetgraph", _("Show netgraph"),
+                       _("Show a graph of packet sizes and other information")));
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement", _("Client-side movement prediction")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "cl_movement", _("Client-side movement prediction"),
+                       _("Enable clientside movement prediction")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_movement_errorcompensation", _("Movement error compensation")));
                setDependent(e, "cl_movement", 1, 1);
@@ -113,26 +120,30 @@ void XonoticMiscSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "cl_maxfps_alwayssleep", _("Save processing time for other apps")));
                setDependent(e, "cl_maxfps", 1, 1000);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showfps", _("Show frames per second")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showfps", _("Show frames per second"),
+                       _("Show your rendered frames per second")));
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticHeaderLabel(_("Other")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("menu_tooltips"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("menu_tooltips",
+                       _("Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)")));
                        e.addValue(e, ZCTX(_("TLTIP^Disabled")), "0");
                        e.addValue(e, ZCTX(_("TLTIP^Standard")), "1");
                        e.addValue(e, ZCTX(_("TLTIP^Advanced")), "2");
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "showtime", _("Show current date and time")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "showtime", _("Show current date and time"),
+                       _("Show current date and time of day, useful on screenshots")));
                        makeMulti(e, "showdate");
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "developer", _("Enable developer mode")));
 
        me.TR(me);
                me.TDempty(me, 0.5);
-               me.TD(me, 1, 2, e = makeXonoticButton(_("Advanced settings..."), '0 0 0'));
+               me.TD(me, 1, 2, e = makeXonoticButton_T(_("Advanced settings..."), '0 0 0',
+                       _("Advanced settings where you can tweak every single variable of the game")));
                        e.onClick = DialogOpenButton_Click;
                        e.onClickEntity = main.cvarsDialog;
        me.TR(me);
index 4a8712c2601e57f1360e92948c064c6fa778b898..062d538bba6e7e322ac602c509110532ce8e9ee2 100644 (file)
@@ -75,7 +75,8 @@ void XonoticUserSettingsTab_fill(entity me)
                        e.onClickEntity = sk;
 
        me.gotoRC(me, 11.5, 3.25); me.setFirstColumn(me, me.currentColumn);
-               me.TD(me, 1, 2.5, e = makeXonoticCheckBox(0, "cl_gentle", _("Disable gore effects and harsh language")));
+               me.TD(me, 1, 2.5, e = makeXonoticCheckBox_T(0, "cl_gentle", _("Disable gore effects and harsh language"),
+                       _("Replace blood and gibs with content that does not have any gore effects (default: disabled)")));
 
        //me.TR(me);
        //      me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Menu tooltips:")));
index c4981bb1ae2e57a69716ecb1724cfaf19ed19cf3..ce016ffa9d38709db23dc08a9941312dd5c42e1e 100644 (file)
@@ -41,20 +41,27 @@ void XonoticVideoSettingsTab_fill(entity me)
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Color depth:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_bitsperpixel"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_bitsperpixel",
+                       _("How many bits per pixel (BPP) to render at, 32 is recommended")));
                        e.addValue(e, _("16bit"), "16");
                        e.addValue(e, _("32bit"), "32");
                        e.configureXonoticTextSliderValues(e);
        me.TR(me);
-               me.TD(me, 1, 1, e = makeXonoticCheckBox(0, "vid_fullscreen", _("Full screen")));
-               me.TD(me, 1, 2, e = makeXonoticCheckBox(0, "vid_vsync", _("Vertical Synchronization")));
+               me.TD(me, 1, 1, e = makeXonoticCheckBox_T(0, "vid_fullscreen", _("Full screen"),
+                       _("Enable fullscreen mode (default: enabled)")));
+               me.TD(me, 1, 2, e = makeXonoticCheckBox_T(0, "vid_vsync", _("Vertical Synchronization"),
+                       _("Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)")));
 
        me.TR(me);
                if(cvar("developer"))
-                       { me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "v_flipped", _("Flip view horizontally"))); }
+               {
+                       me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "v_flipped", _("Flip view horizontally"),
+                               _("Poor man's left handed mode (default: off)")));
+               }
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Anisotropy:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("gl_texture_anisotropy"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("gl_texture_anisotropy",
+                       _("Anisotropic filtering quality (default: 1x)")));
                        e.addValue(e, ZCTX(_("ANISO^Disabled")), "1");
                        e.addValue(e, _("2x"), "2");
                        e.addValue(e, _("4x"), "4");
@@ -64,7 +71,8 @@ void XonoticVideoSettingsTab_fill(entity me)
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Antialiasing:")));
                        setDependent(e, "r_viewfbo", 0, 0);
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("vid_samples"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("vid_samples",
+                       _("Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)")));
                        e.addValue(e, ZCTX(_("AA^Disabled")), "1");
                        e.addValue(e, _("2x"), "2");
                        e.addValue(e, _("4x"), "4");
@@ -77,7 +85,8 @@ void XonoticVideoSettingsTab_fill(entity me)
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Depth first:")));
-               me.TD(me, 1, 2, e = makeXonoticTextSlider("r_depthfirst"));
+               me.TD(me, 1, 2, e = makeXonoticTextSlider_T("r_depthfirst",
+                       _("Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)")));
                        e.addValue(e, ZCTX(_("DF^Disabled")), "0");
                        e.addValue(e, ZCTX(_("DF^World")), "1");
                        e.addValue(e, ZCTX(_("DF^All")), "2");
@@ -86,49 +95,62 @@ void XonoticVideoSettingsTab_fill(entity me)
                me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Vertex Buffer Objects (VBOs)")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "0", ZCTX(_("VBO^Off"))));
-               me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)")));
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "0", ZCTX(_("VBO^Off")),
+                       _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+               me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "3", _("Vertices, some Tris (compatible)"),
+                       _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 0.9, e = makeXonoticRadioButton(1, "gl_vbo", "2", _("Vertices")));
-               me.TD(me, 1, 1.9, e = makeXonoticRadioButton(1, "gl_vbo", "1", _("Vertices and Triangles")));
+               me.TD(me, 1, 0.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "2", _("Vertices"),
+                       _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
+               me.TD(me, 1, 1.9, e = makeXonoticRadioButton_T(1, "gl_vbo", "1", _("Vertices and Triangles"),
+                       _("Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)")));
 
        me.gotoRC(me, 0, 3.2); me.setFirstColumn(me, me.currentColumn);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Brightness:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.0, 0.5, 0.02, "v_brightness"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0.0, 0.5, 0.02, "v_brightness",
+                       _("Brightness of black (default: 0)")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 3.0, 0.05, "v_contrast"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 3.0, 0.05, "v_contrast",
+                       _("Brightness of white (default: 1)")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Gamma:")));
                        setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "v_gamma"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "v_gamma",
+                       _("Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)")));
                        setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Contrast boost:")));
                        setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(1.0, 5.0, 0.1, "v_contrastboost"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(1.0, 5.0, 0.1, "v_contrastboost",
+                       _("By how much to multiply the contrast in dark areas (default: 1)")));
                        setDependentAND(e, "vid_gl20", 1, 1, "v_glslgamma", 1, 1);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Saturation:")));
                        setDependent(e, "vid_gl20", 1, 1);
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_glsl_saturation"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_glsl_saturation",
+                       _("Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)")));
                        setDependent(e, "vid_gl20", 1, 1);
        me.TR(me);
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, ZCTX(_("LIT^Ambient:"))));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0, 20.0, 0.25, "r_ambient"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0, 20.0, 0.25, "r_ambient",
+                       _("Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)")));
        me.TR(me);
                me.TD(me, 1, 1, e = makeXonoticTextLabel(0, _("Intensity:")));
-               me.TD(me, 1, 2, e = makeXonoticSlider(0.5, 2.0, 0.05, "r_hdr_scenebrightness"));
+               me.TD(me, 1, 2, e = makeXonoticSlider_T(0.5, 2.0, 0.05, "r_hdr_scenebrightness",
+                       _("Global rendering brightness (default: 1)")));
        me.TR(me);
        me.TR(me);
-               me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "gl_finish", _("Wait for GPU to finish each frame")));
+               me.TD(me, 1, 3, e = makeXonoticCheckBox_T(0, "gl_finish", _("Wait for GPU to finish each frame"),
+                       _("Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)")));
        me.TR(me);
                me.TD(me, 1, 3, e = makeXonoticCheckBox(0, "vid_gl20", _("Use OpenGL 2.0 shaders (GLSL)")));
        me.TR(me);
                me.TDempty(me, 0.2);
-               me.TD(me, 1, 2.8, e = makeXonoticCheckBox(0, "v_glslgamma", _("Use GLSL to handle color control")));
+               me.TD(me, 1, 2.8, e = makeXonoticCheckBox_T(0, "v_glslgamma", _("Use GLSL to handle color control"),
+                       _("Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)")));
                        setDependent(e, "vid_gl20", 1, 1);
        if(cvar("developer"))
        {
index 8dab35f9974ba36d8fd8455b0f134ac2dd3078c1..1cdc2826781420dae8df98a6af112ef0cb983601 100644 (file)
@@ -4,6 +4,7 @@
 CLASS(XonoticSingleplayerDialog, XonoticDialog)
        METHOD(XonoticSingleplayerDialog, fill, void(entity));
        ATTRIB(XonoticSingleplayerDialog, title, string, _("Singleplayer"))
+       ATTRIB(XonoticSingleplayerDialog, tooltip, string, _("Play the singleplayer campaign or instant action matches against bots"))
        ATTRIB(XonoticSingleplayerDialog, color, vector, SKINCOLOR_DIALOG_SINGLEPLAYER)
        ATTRIB(XonoticSingleplayerDialog, intendedWidth, float, 0.80)
        ATTRIB(XonoticSingleplayerDialog, rows, float, 24)
index 2c09e8613d1513030530933b5de8409c743ac4d9..a47e2c21113bb1119dfdcda2f19e0991f239e9b0 100644 (file)
@@ -19,12 +19,16 @@ ENDCLASS(XonoticTeamSelectDialog)
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeTeamButton(string theName, vector theColor, string commandtheName)
+entity makeTeamButton_T(string theName, vector theColor, string commandtheName, string theTooltip)
 {
        entity b;
-       b = makeXonoticBigCommandButton(theName, theColor, commandtheName, 1);
+       b = makeXonoticBigCommandButton_T(theName, theColor, commandtheName, 1, theTooltip);
        return b;
 }
+entity makeTeamButton(string theName, vector theColor, string commandtheName)
+{
+       return makeTeamButton_T(theName, theColor, commandtheName, string_null);
+}
 
 void XonoticTeamSelectDialog_showNotify(entity me)
 {
@@ -41,14 +45,15 @@ 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_T(_("join 'best' team (auto-select)"), '0 0 0', "cmd selectteam auto; cmd join",
+                       _("Autoselect team (recommended)")));
                        e.preferredFocusPriority = 1;
        me.TR(me);
        me.TR(me);
-               me.TD(me, 2, 1, me.team1 = makeTeamButton(_("red"), '1 0.5 0.5', "cmd selectteam red; cmd join"));
-               me.TD(me, 2, 1, me.team2 = makeTeamButton(_("blue"), '0.5 0.5 1', "cmd selectteam blue; cmd join"));
-               me.TD(me, 2, 1, me.team3 = makeTeamButton(_("yellow"), '1 1 0.5', "cmd selectteam yellow; cmd join"));
-               me.TD(me, 2, 1, me.team4 = makeTeamButton(_("pink"), '1 0.5 1', "cmd selectteam pink; cmd join"));
+               me.TD(me, 2, 1, e = me.team1 = makeTeamButton(_("red"), '1 0.5 0.5', "cmd selectteam red; cmd join"));
+               me.TD(me, 2, 1, e = me.team2 = makeTeamButton(_("blue"), '0.5 0.5 1', "cmd selectteam blue; cmd join"));
+               me.TD(me, 2, 1, e = me.team3 = makeTeamButton(_("yellow"), '1 1 0.5', "cmd selectteam yellow; cmd join"));
+               me.TD(me, 2, 1, e = 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));
index f27a62678259ea5ceb46215a98465d0d579a0f2b..fb80866903247d7b7e64321dfdd40aa3c394b59f 100644 (file)
@@ -29,17 +29,14 @@ entity makeXonoticGametypeButton(float theGroup, string theCvar, string theText)
 {
        entity me;
        me = NEW(XonoticGametypeButton);
-       me.configureXonoticGametypeButton(me, theGroup, theCvar, theText);
+       me.configureXonoticGametypeButton(me, theGroup, theCvar, theText, theTooltip);
        return me;
 }
-void XonoticGametypeButton_configureXonoticGametypeButton(entity me, float theGroup, string theCvar, string theText)
+void XonoticGametypeButton_configureXonoticGametypeButton(entity me, float theGroup, string theCvar, string theText, string theTooltip)
 {
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.loadCvars(me);
+       setZonedTooltip(me, theTooltip, theCvar);
        me.configureRadioButton(me, theText, me.fontSize, me.image, theGroup, 0);
        me.align = 0.5;
        me.onClick = GameTypeButton_Click;
index 0ff3aaee366b1f0d788bf92c009be0ca7893d74e..6dc49c02ea7ec9df3c7d6e9437d0898b4acd0240 100644 (file)
@@ -2,9 +2,10 @@
 #define INPUTBOX_H
 #include "../item/inputbox.qc"
 CLASS(XonoticInputBox, InputBox)
-       METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string));
+       METHOD(XonoticInputBox, configureXonoticInputBox, void(entity, float, string, string));
        METHOD(XonoticInputBox, focusLeave, void(entity));
        METHOD(XonoticInputBox, setText, void(entity, string));
+       METHOD(XonoticInputBox, keyDown, float(entity, float, float, float));
        ATTRIB(XonoticInputBox, fontSize, float, SKINFONTSIZE_NORMAL)
        ATTRIB(XonoticInputBox, image, string, SKINGFX_INPUTBOX)
        ATTRIB(XonoticInputBox, onChange, void(entity, entity), func_null)
@@ -29,31 +30,32 @@ CLASS(XonoticInputBox, InputBox)
        METHOD(XonoticInputBox, loadCvars, void(entity));
        METHOD(XonoticInputBox, saveCvars, void(entity));
        ATTRIB(XonoticInputBox, sendCvars, float, 0)
-       METHOD(XonoticInputBox, keyDown, float(entity, float, float, float));
 
        ATTRIB(XonoticInputBox, saveImmediately, float, 0)
 ENDCLASS(XonoticInputBox)
+entity makeXonoticInputBox_T(float, string, string theTooltip);
 entity makeXonoticInputBox(float, string);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticInputBox(float doEditColorCodes, string theCvar)
+entity makeXonoticInputBox_T(float doEditColorCodes, string theCvar, string theTooltip)
 {
        entity me;
        me = NEW(XonoticInputBox);
-       me.configureXonoticInputBox(me, doEditColorCodes, theCvar);
+       me.configureXonoticInputBox(me, doEditColorCodes, theCvar, theTooltip);
        return me;
 }
-void XonoticInputBox_configureXonoticInputBox(entity me, float doEditColorCodes, string theCvar)
+entity makeXonoticInputBox(float doEditColorCodes, string theCvar)
+{
+       return makeXonoticInputBox_T(doEditColorCodes, theCvar, string_null);
+}
+void XonoticInputBox_configureXonoticInputBox(entity me, float doEditColorCodes, string theCvar, string theTooltip)
 {
        me.configureInputBox(me, "", 0, me.fontSize, me.image);
        me.editColorCodes = doEditColorCodes;
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.loadCvars(me);
+       setZonedTooltip(me, theTooltip, theCvar);
        me.cursorPos = strlen(me.text);
 }
 void XonoticInputBox_focusLeave(entity me)
index a510a757c9cec36bafbff07d26476a12891fc1d8..a64c77b0fff568b4776fe9d4d9ed725ff7e02ccc 100644 (file)
@@ -45,24 +45,105 @@ int Xonotic_KeyBinds_Count = -1;
 
 void Xonotic_KeyBinds_Read()
 {
-       int fh;
-       string s;
-
        Xonotic_KeyBinds_Count = 0;
-       fh = fopen(language_filename("keybinds.txt"), FILE_READ);
-       if(fh < 0)
-               return;
-       while((s = fgets(fh)))
+
+       #define KEYBIND_DEF(func, desc) do { \
+               if((Xonotic_KeyBinds_Count < MAX_KEYBINDS)) { \
+                       Xonotic_KeyBinds_Functions[Xonotic_KeyBinds_Count] = strzone(func); \
+                       Xonotic_KeyBinds_Descriptions[Xonotic_KeyBinds_Count] = strzone(desc); \
+                       ++Xonotic_KeyBinds_Count; \
+               } \
+       } while(0)
+
+       KEYBIND_DEF(""                                      , _("Moving"));
+       KEYBIND_DEF("+forward"                              , _("forward"));
+       KEYBIND_DEF("+back"                                 , _("backpedal"));
+       KEYBIND_DEF("+moveleft"                             , _("strafe left"));
+       KEYBIND_DEF("+moveright"                            , _("strafe right"));
+       KEYBIND_DEF("+jump"                                 , _("jump / swim"));
+       KEYBIND_DEF("+crouch"                               , _("crouch / sink"));
+       KEYBIND_DEF("+hook"                                 , _("off-hand hook"));
+       KEYBIND_DEF("+jetpack"                              , _("jet pack"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("Attacking"));
+       KEYBIND_DEF("+fire"                                 , _("primary fire"));
+       KEYBIND_DEF("+fire2"                                , _("secondary fire"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("Weapon switching"));
+       KEYBIND_DEF("weapprev"                              , _("previous"));
+       KEYBIND_DEF("weapnext"                              , _("next"));
+       KEYBIND_DEF("weaplast"                              , _("previously used"));
+       KEYBIND_DEF("weapbest"                              , _("best"));
+       KEYBIND_DEF("reload"                                , _("reload"));
+
+       int i;
+
+       #define ADD_TO_W_LIST(pred) do { \
+               for(i = WEP_FIRST; i <= WEP_LAST; ++i) \
+               { \
+                       wep = get_weaponinfo(i); \
+                       if(wep.impulse == imp && (pred)) \
+                               w_list = strcat(w_list, WEP_NAME(i), " / "); \
+               } \
+       } while(0)
+
+       int imp;
+       entity wep;
+       string w_list = "";
+       for(imp = 1; imp <= 9; ++imp)
        {
-               if(tokenize_console(s) != 2)
-                       continue;
-               Xonotic_KeyBinds_Functions[Xonotic_KeyBinds_Count] = strzone(argv(0));
-               Xonotic_KeyBinds_Descriptions[Xonotic_KeyBinds_Count] = strzone(argv(1));
-               ++Xonotic_KeyBinds_Count;
-               if(Xonotic_KeyBinds_Count >= MAX_KEYBINDS)
+               ADD_TO_W_LIST(!(wep.flags & WEP_FLAG_MUTATORBLOCKED) && !(wep.flags & WEP_FLAG_SUPERWEAPON));
+               ADD_TO_W_LIST(wep.flags & WEP_FLAG_SUPERWEAPON);
+               ADD_TO_W_LIST(wep.flags & WEP_FLAG_MUTATORBLOCKED);
+               if(w_list)
+                       KEYBIND_DEF(strcat("weapon_group_", itos(imp)), substring(w_list, 0, -4));
+               w_list = "";
+               if(imp == 0)
                        break;
+               if(imp == 9)
+                       imp = -1;
        }
-       fclose(fh);
+       #undef ADD_TO_W_LIST
+
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("View"));
+       KEYBIND_DEF("+zoom"                                 , _("hold zoom"));
+       KEYBIND_DEF("togglezoom"                            , _("toggle zoom"));
+       KEYBIND_DEF("+showscores"                           , _("show scores"));
+       KEYBIND_DEF("screenshot"                            , _("screen shot"));
+       KEYBIND_DEF("+hud_panel_radar_maximized"            , _("maximize radar"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("Communicate"));
+       KEYBIND_DEF("messagemode"                           , _("public chat"));
+       KEYBIND_DEF("messagemode2"                          , _("team chat"));
+       KEYBIND_DEF("+con_chat_maximize"                    , _("show chat history"));
+       KEYBIND_DEF("vyes"                                  , _("vote YES"));
+       KEYBIND_DEF("vno"                                   , _("vote NO"));
+       KEYBIND_DEF("ready"                                 , _("ready"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("Client"));
+       KEYBIND_DEF("+show_info"                            , _("server info"));
+       KEYBIND_DEF("toggleconsole"                         , _("enter console"));
+       KEYBIND_DEF("disconnect"                            , _("disconnect"));
+       KEYBIND_DEF("menu_showquitdialog"                   , _("quit"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("Teamplay"));
+       KEYBIND_DEF("messagemode2"                          , _("team chat"));
+       KEYBIND_DEF("team_auto"                             , _("auto-join team"));
+       KEYBIND_DEF("menu_showteamselect"                   , _("team menu"));
+       KEYBIND_DEF("menu_showsandboxtools"                 , _("sandbox menu"));
+       KEYBIND_DEF("spec"                                  , _("enter spectator mode"));
+       KEYBIND_DEF("dropweapon"                            , _("drop weapon"));
+       KEYBIND_DEF("+use"                                  , _("drop key / drop flag"));
+       KEYBIND_DEF("+button8"                              , _("drag object"));
+       KEYBIND_DEF("toggle chase_active"                   , _("3rd person view"));
+       KEYBIND_DEF(""                                      , "");
+       KEYBIND_DEF(""                                      , _("User defined"));
+
+       for(i = 1; i <= 32; ++i)
+               KEYBIND_DEF(strcat("+userbind ", itos(i)), strcat("$userbind", itos(i)));
+
+       #undef KEYBIND_DEF
 }
 
 entity makeXonoticKeyBinder()
index 843acad9082f9db87c3a828bbd70f145409eca3c..91d8eaa3de36d6bf14896d31cea4895f8aaf3e20 100644 (file)
@@ -48,7 +48,6 @@ CLASS(XonoticMapList, XonoticListBox)
        ATTRIB(XonoticMapList, alphaBG, float, 0)
 ENDCLASS(XonoticMapList)
 entity makeXonoticMapList();
-entity makeXonoticMapListStringFilterBox(entity me, float doEditColorCodes, string theCvar);
 void MapList_StringFilterBox_Change(entity box, entity me);
 float MapList_StringFilterBox_keyDown(entity me, float key, float ascii, float shift);
 void MapList_Add_Shown(entity btn, entity me);
@@ -64,10 +63,6 @@ void XonoticMapList_destroy(entity me)
        MapInfo_Shutdown();
 }
 
-entity makeXonoticMapListStringFilterBox(entity me, float doEditColorCodes, string theCvar)
-{
-       return makeXonoticInputBox(doEditColorCodes, theCvar);
-}
 entity makeXonoticMapList()
 {
        entity me;
index 65f2486f2111e57d749bc28ff73ac2aff1254afa..ceeae22ea060f06fd39b071852cfa2cd4263ff5c 100644 (file)
@@ -2,7 +2,7 @@
 #define RADIOBUTTON_H
 #include "../item/radiobutton.qc"
 CLASS(XonoticRadioButton, RadioButton)
-       METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string));
+       METHOD(XonoticRadioButton, configureXonoticRadioButton, void(entity, float, string, string, string, string));
        METHOD(XonoticRadioButton, draw, void(entity));
        METHOD(XonoticRadioButton, setChecked, void(entity, float));
        ATTRIB(XonoticRadioButton, fontSize, float, SKINFONTSIZE_NORMAL)
@@ -22,26 +22,28 @@ CLASS(XonoticRadioButton, RadioButton)
        ATTRIB(XonoticRadioButton, alpha, float, SKINALPHA_TEXT)
        ATTRIB(XonoticRadioButton, disabledAlpha, float, SKINALPHA_DISABLED)
 ENDCLASS(XonoticRadioButton)
+entity makeXonoticRadioButton_T(float, string, string, string, string theTooltip);
 entity makeXonoticRadioButton(float, string, string, string);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticRadioButton(float theGroup, string theCvar, string theValue, string theText)
+entity makeXonoticRadioButton_T(float theGroup, string theCvar, string theValue, string theText, string theTooltip)
 {
        entity me;
        me = NEW(XonoticRadioButton);
-       me.configureXonoticRadioButton(me, theGroup, theCvar, theValue, theText);
+       me.configureXonoticRadioButton(me, theGroup, theCvar, theValue, theText, theTooltip);
        return me;
 }
-void XonoticRadioButton_configureXonoticRadioButton(entity me, float theGroup, string theCvar, string theValue, string theText)
+entity makeXonoticRadioButton(float theGroup, string theCvar, string theValue, string theText)
 {
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.cvarValue = theValue;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               me.loadCvars(me);
-       }
+       return makeXonoticRadioButton_T(theGroup, theCvar, theValue, theText, string_null);
+}
+void XonoticRadioButton_configureXonoticRadioButton(entity me, float theGroup, string theCvar, string theValue, string theText, string theTooltip)
+{
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       me.cvarValue = theValue;
+       me.loadCvars(me);
+       setZonedTooltip(me, theTooltip, theCvar);
        me.configureRadioButton(me, theText, me.fontSize, me.image, theGroup, 0);
 }
 void XonoticRadioButton_setChecked(entity me, float val)
index 8aa5c105e895d097c955f787bb844b0349460848..f49ea947e73bb7dd8601718453a75cd152b3a1f4 100644 (file)
@@ -433,11 +433,17 @@ void XonoticServerList_toggleFavorite(entity me, string srv)
 
 void ServerList_Update_favoriteButton(entity btn, entity me)
 {
-       me.favoriteButton.setText(me.favoriteButton,
-               (IsFavorite(me.ipAddressBox.text) ?
-                       _("Remove") : _("Favorite")
-               )
-       );
+       entity e = me.favoriteButton;
+       if(IsFavorite(me.ipAddressBox.text))
+       {
+               e.setText(e, _("Remove"));
+               clearTooltip(e);
+       }
+       else
+       {
+               e.setText(e, _("Favorite"));
+               setZonedTooltip(e, _("Bookmark the currently highlighted server so that it's faster to find in the future"), string_null);
+       }
 }
 
 entity makeXonoticServerList()
index 46379d5a35aa4d08dd12625d5818895903fd2599..7ecd7a9d0a4e6a03ead4ee4e262ddaea22136813 100644 (file)
@@ -2,7 +2,7 @@
 #define SLIDER_H
 #include "../item/slider.qc"
 CLASS(XonoticSlider, Slider)
-       METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string));
+       METHOD(XonoticSlider, configureXonoticSlider, void(entity, float, float, float, string, string));
        METHOD(XonoticSlider, setValue, void(entity, float));
        ATTRIB(XonoticSlider, fontSize, float, SKINFONTSIZE_NORMAL)
        ATTRIB(XonoticSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
@@ -23,18 +23,23 @@ CLASS(XonoticSlider, Slider)
        ATTRIB(XonoticSlider, alpha, float, SKINALPHA_TEXT)
        ATTRIB(XonoticSlider, disabledAlpha, float, SKINALPHA_DISABLED)
 ENDCLASS(XonoticSlider)
+entity makeXonoticSlider_T(float, float, float, string, string theTooltip);
 entity makeXonoticSlider(float, float, float, string);
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
 {
        entity me;
        me = NEW(XonoticSlider);
-       me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
+       me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar, theTooltip);
        return me;
 }
-void XonoticSlider_configureXonoticSlider(entity me, float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+{
+       return makeXonoticSlider_T(theValueMin, theValueMax, theValueStep, theCvar, string_null);
+}
+void XonoticSlider_configureXonoticSlider(entity me, float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
 {
        float vp;
        vp = theValueStep * 10;
@@ -43,17 +48,15 @@ void XonoticSlider_configureXonoticSlider(entity me, float theValueMin, float th
 
        me.configureSliderVisuals(me, me.fontSize, me.align, me.valueSpace, me.image);
 
+       me.cvarName = (theCvar) ? theCvar : string_null;
        if(theCvar)
-       {
                // Prevent flickering of the slider button by initialising the
                // slider out of bounds to hide the button before loading the cvar
                me.configureSliderValues(me, theValueMin, theValueMin-theValueStep, theValueMax, theValueStep, theValueStep, vp);
-               me.cvarName = theCvar;
-               me.loadCvars(me);
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-       }
        else
                me.configureSliderValues(me, theValueMin, theValueMin, theValueMax, theValueStep, theValueStep, vp);
+       me.loadCvars(me);
+       setZonedTooltip(me, theTooltip, theCvar);
 }
 void XonoticSlider_setValue(entity me, float val)
 {
@@ -68,7 +71,7 @@ void XonoticSlider_loadCvars(entity me)
        if (!me.cvarName)
                return;
 
-       me.setValue( me, cvar(me.cvarName) );
+       me.setValue_noAnim(me, cvar(me.cvarName));
 }
 void XonoticSlider_saveCvars(entity me)
 {
index eabbaf16d5d5c6f376048a3df0bb51be1dcd2dbf..e577cba66407ce84db002f16a1d7c860e7a7a365 100644 (file)
@@ -6,6 +6,7 @@ CLASS(XonoticDecibelsSlider, XonoticSlider)
        METHOD(XonoticDecibelsSlider, saveCvars, void(entity));
        METHOD(XonoticDecibelsSlider, valueToText, string(entity, float));
 ENDCLASS(XonoticDecibelsSlider)
+entity makeXonoticDecibelsSlider_T(float, float, float, string, string);
 entity makeXonoticDecibelsSlider(float, float, float, string);
 #endif
 
@@ -39,13 +40,17 @@ float fromDecibelOfSquare(float f, float mi)
        return exp(A * f);
 }
 
-entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+entity makeXonoticDecibelsSlider_T(float theValueMin, float theValueMax, float theValueStep, string theCvar, string theTooltip)
 {
        entity me;
        me = NEW(XonoticDecibelsSlider);
-       me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar);
+       me.configureXonoticSlider(me, theValueMin, theValueMax, theValueStep, theCvar, theTooltip);
        return me;
 }
+entity makeXonoticDecibelsSlider(float theValueMin, float theValueMax, float theValueStep, string theCvar)
+{
+       return makeXonoticDecibelsSlider_T(theValueMin, theValueMax, theValueStep, theCvar, string_null);
+}
 void XonoticDecibelsSlider_loadCvars(entity me)
 {
        float v;
@@ -57,9 +62,9 @@ void XonoticDecibelsSlider_loadCvars(entity me)
 
        // snapping
        if(v > fromDecibelOfSquare(me.valueMax - 0.5 * me.valueStep, me.valueMin))
-               Slider_setValue(me, me.valueMax);
+               Slider_setValue_noAnim(me, me.valueMax);
        else
-               Slider_setValue(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v, me.valueMin) / me.valueStep) );
+               Slider_setValue_noAnim(me, me.valueStep * floor(0.5 + toDecibelOfSquare(v, me.valueMin) / me.valueStep));
 }
 void XonoticDecibelsSlider_saveCvars(entity me)
 {
index f7acdfeca3155a92df0bae8cf3f41927226c72ca..1a7ee2c4a59101b65826e0ef2f1dce73485bc9d5 100644 (file)
@@ -19,7 +19,8 @@ entity makeXonoticParticlesSlider()
 }
 void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
 {
-       me.configureXonoticTextSlider(me, "cl_particles_quality");
+       me.configureXonoticTextSlider(me, "cl_particles_quality",
+               _("Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)"));
        if(cvar("developer")) { me.addValue(me, ZCTX(_("PART^OMG")),      "0.4 250 0"); }
        me.addValue(me,                         ZCTX(_("PART^Low")),      "0.4 500 0");
        me.addValue(me,                         ZCTX(_("PART^Medium")),   "0.8 750 0");
@@ -31,7 +32,7 @@ void XonoticParticlesSlider_configureXonoticParticlesSlider(entity me)
 }
 void XonoticParticlesSlider_loadCvars(entity me)
 {
-       me.setValueFromIdentifier(me, sprintf("%s %s %s",
+       me.setValueFromIdentifier_noAnim(me, sprintf("%s %s %s",
                cvar_string("cl_particles_quality"),
                cvar_string("r_drawparticles_drawdistance"),
                cvar_string("cl_damageeffect")
index 7c1dec045e0c46c65574f0589c80c842a06f409e..93ad740cdea5afbac93bef5855b453fb056a590d 100644 (file)
@@ -20,7 +20,8 @@ entity makeXonoticPicmipSlider()
 }
 void XonoticPicmipSlider_configureXonoticPicmipSlider(entity me)
 {
-       me.configureXonoticTextSlider(me, "gl_picmip");
+       me.configureXonoticTextSlider(me, "gl_picmip",
+               _("Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)"));
        me.autofix(me);
        me.have_s3tc = GL_Have_TextureCompression();
 }
index 93291ea1d35654fcea58258a24161c6a90ef1310..c6d95b4304315381f3e3cbc973a572998079d244 100644 (file)
@@ -129,7 +129,8 @@ void XonoticResolutionSlider_addResolution(entity me, float w, float h, float pi
 float autocvar_menu_vid_allowdualscreenresolution;
 void XonoticResolutionSlider_configureXonoticResolutionSlider(entity me)
 {
-       me.configureXonoticTextSlider(me, "_menu_vid_width");
+       me.configureXonoticTextSlider(me, "_menu_vid_width",
+               _("Screen resolution"));
        me.loadResolutions(me, cvar("vid_fullscreen"));
 }
 void XonoticResolutionSlider_loadResolutions(entity me, float fullscreen)
@@ -211,7 +212,7 @@ void XonoticResolutionSlider_loadResolutions(entity me, float fullscreen)
 }
 void XonoticResolutionSlider_loadCvars(entity me)
 {
-       me.setValueFromIdentifier(me, strcat(cvar_string("_menu_vid_width"), " ", cvar_string("_menu_vid_height"), " ", cvar_string("_menu_vid_pixelheight")));
+       me.setValueFromIdentifier_noAnim(me, strcat(cvar_string("_menu_vid_width"), " ", cvar_string("_menu_vid_height"), " ", cvar_string("_menu_vid_pixelheight")));
 }
 void XonoticResolutionSlider_saveCvars(entity me)
 {
index d64a990d23475360fae077c0ad7adb608e21ee12..ecf850f404f083b3548ed59138d7e34973c9ce80 100644 (file)
@@ -19,7 +19,7 @@ entity makeXonoticScoreboardFadeTimeSlider()
 }
 void XonoticScoreboardFadeTimeSlider_configureXonoticScoreboardFadeTimeSlider(entity me)
 {
-       me.configureXonoticTextSlider(me, "scoreboard_fadeinspeed");
+       me.configureXonoticTextSlider(me, "scoreboard_fadeinspeed", string_null);
        me.addValue(me, ZCTX(_("PART^Slow")),     "5 2.5");
        me.addValue(me, ZCTX(_("PART^Normal")),   "10 5");
        me.addValue(me, ZCTX(_("PART^Fast")),     "15 7.5");
@@ -28,7 +28,7 @@ void XonoticScoreboardFadeTimeSlider_configureXonoticScoreboardFadeTimeSlider(en
 }
 void XonoticScoreboardFadeTimeSlider_loadCvars(entity me)
 {
-       me.setValueFromIdentifier(me, sprintf("%s %s",
+       me.setValueFromIdentifier_noAnim(me, sprintf("%s %s",
                cvar_string("scoreboard_fadeinspeed"),
                cvar_string("scoreboard_fadeoutspeed")
        ));
index ec30b9c2d44ea687e32248f27a0ffd14196c07bf..2fae65a89b4599d70830c88dfed67a111f592afb 100644 (file)
@@ -3,6 +3,7 @@
 #include "../item/modalcontroller.qc"
 CLASS(XonoticTabController, ModalController)
        METHOD(XonoticTabController, configureXonoticTabController, void(entity, float));
+       METHOD(XonoticTabController, makeTabButton_T, entity(entity, string, entity, string));
        METHOD(XonoticTabController, makeTabButton, entity(entity, string, entity));
        ATTRIB(XonoticTabController, rows, float, 0)
        ATTRIB(XonoticTabController, fontSize, float, SKINFONTSIZE_NORMAL)
@@ -23,14 +24,18 @@ void XonoticTabController_configureXonoticTabController(entity me, float theRows
 {
        me.rows = theRows;
 }
-entity XonoticTabController_makeTabButton(entity me, string theTitle, entity tab)
+entity XonoticTabController_makeTabButton_T(entity me, string theTitle, entity tab, string theTooltip)
 {
        entity b;
        if(me.rows != tab.rows)
                error("Tab dialog height mismatch!");
-       b = makeXonoticButton(theTitle, '0 0 0');
+       b = makeXonoticButton_T(theTitle, '0 0 0', theTooltip);
                me.addTab(me, tab, b);
        // TODO make this real tab buttons (with color parameters, and different gfx)
        return b;
 }
+entity XonoticTabController_makeTabButton(entity me, string theTitle, entity tab)
+{
+       return XonoticTabController_makeTabButton_T(me, theTitle, tab, string_null);
+}
 #endif
index 8864654040e97242cd5ecab4aef2a576ef7cc785..8c4682ee0ffbf9a25d5692bdd18ed1c267014777 100644 (file)
@@ -2,7 +2,7 @@
 #define TEXTSLIDER_H
 #include "../item/textslider.qc"
 CLASS(XonoticTextSlider, TextSlider)
-       METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string));
+       METHOD(XonoticTextSlider, configureXonoticTextSlider, void(entity, string, string));
        METHOD(XonoticTextSlider, setValue, void(entity, float));
        METHOD(XonoticTextSlider, configureXonoticTextSliderValues, void(entity));
        ATTRIB(XonoticTextSlider, fontSize, float, SKINFONTSIZE_NORMAL)
@@ -24,26 +24,28 @@ CLASS(XonoticTextSlider, TextSlider)
        ATTRIB(XonoticTextSlider, alpha, float, SKINALPHA_TEXT)
        ATTRIB(XonoticTextSlider, disabledAlpha, float, SKINALPHA_DISABLED)
 ENDCLASS(XonoticTextSlider)
+entity makeXonoticTextSlider_T(string, string theTooltip);
 entity makeXonoticTextSlider(string); // note: you still need to call addValue and configureXonoticTextSliderValues!
 #endif
 
 #ifdef IMPLEMENTATION
-entity makeXonoticTextSlider(string theCvar)
+entity makeXonoticTextSlider_T(string theCvar, string theTooltip)
 {
        entity me;
        me = NEW(XonoticTextSlider);
-       me.configureXonoticTextSlider(me, theCvar);
+       me.configureXonoticTextSlider(me, theCvar, theTooltip);
        return me;
 }
-void XonoticTextSlider_configureXonoticTextSlider(entity me, string theCvar)
+entity makeXonoticTextSlider(string theCvar)
+{
+       return makeXonoticTextSlider_T(theCvar, string_null);
+}
+void XonoticTextSlider_configureXonoticTextSlider(entity me, string theCvar, string theTooltip)
 {
        me.configureSliderVisuals(me, me.fontSize, me.align, me.valueSpace, me.image);
-       if(theCvar)
-       {
-               me.cvarName = theCvar;
-               me.tooltip = getZonedTooltipForIdentifier(theCvar);
-               // don't load it yet
-       }
+       me.cvarName = (theCvar) ? theCvar : string_null;
+       // me.loadCvars(me); // don't load it yet
+       setZonedTooltip(me, theTooltip, theCvar);
 }
 void XonoticTextSlider_setValue(entity me, float val)
 {
@@ -63,7 +65,7 @@ void XonoticTextSlider_loadCvars(entity me)
        float i;
        for(i = 1; i < n; ++i)
                s = strcat(s, " ", cvar_string(argv(i)));
-       me.setValueFromIdentifier(me, s);
+       me.setValueFromIdentifier_noAnim(me, s);
        if(me.value < 0 && n > 1)
        {
                // if it failed: check if all cvars have the same value
@@ -72,7 +74,7 @@ void XonoticTextSlider_loadCvars(entity me)
                        if(cvar_string(argv(i)) != cvar_string(argv(i-1)))
                                break;
                if(i >= n)
-                       me.setValueFromIdentifier(me, cvar_string(argv(0)));
+                       me.setValueFromIdentifier_noAnim(me, cvar_string(argv(0)));
        }
 }
 void XonoticTextSlider_saveCvars(entity me)
index 619e1d1a5a5e40da48989789c482bf9276286dad..f4faea62b92a3623530aa684f63a54fb58445590 100644 (file)
@@ -17,39 +17,6 @@ float GL_Have_TextureCompression()
        return (GL_CheckExtension("GL_EXT_texture_compression_s3tc") && GL_CheckExtension("GL_ARB_texture_compression"));
 }
 
-void loadTooltips()
-{
-       tooltipdb = db_load(language_filename("tooltips.db"));
-}
-void unloadTooltips()
-{
-       if(tooltipdb >= 0)
-               db_close(tooltipdb);
-       tooltipdb = -1;
-}
-string getZonedTooltipForIdentifier(string s)
-{
-       string t;
-       if(s == "")
-               return string_null;
-       if(tooltipdb >= 0)
-       {
-               t = db_get(tooltipdb, s);
-               if(t == "-")
-                       return string_null;
-               if(t != "")
-                       return strzone(t);
-       }
-       if(prvm_language == "en")
-       {
-               t = cvar_description(s);
-               if(t != "" && t != "custom cvar")
-                       return strzone(t);
-       }
-       LOG_TRACE("WARNING: no tooltip set for ", s, "\n");
-       return string_null;
-}
-
 .entity parent, firstChild, nextSibling;
 void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass)
 {
@@ -274,6 +241,32 @@ void setDependentWeird(entity e, float(entity) func)
        setDependent_Check(e);
 }
 
+void setZonedTooltip(entity e, string theTooltip, string theCvar)
+{
+       if(theTooltip == "") // no tooltip, use cvar description then
+       {
+               if(theCvar != "" && prvm_language == "en")
+               {
+                       string t = cvar_description(theCvar);
+                       if(t != "" && t != "custom cvar")
+                               theTooltip = t;
+               }
+       }
+       else if(theTooltip == "-") // no cvar description as tooltip
+       {
+               theTooltip = string_null;
+       }
+
+       if(e.tooltip)
+               strunzone(e.tooltip);
+       e.tooltip = (theTooltip != "") ? strzone(theTooltip) : string_null;
+}
+
+void clearTooltip(entity e)
+{
+       setZonedTooltip(e, string_null, string_null);
+}
+
 // URI SYSTEM ////////////////////////////////////////////////////////
 
 float _Nex_ExtResponseSystem_Queried;
index 2564a86ed4b724f69640797542b083109d1fd4c5..9e989a4662070fea39b6ae7a8934dd2f1109f00a 100644 (file)
@@ -19,10 +19,8 @@ void setDependentAND3(entity e, string theCvarName, float theCvarMin, float theC
 void setDependentStringNotEqual(entity e, string theCvarName, string theCvarValue);
 void setDependentWeird(entity e, float(entity) func);
 
-int tooltipdb;
-void loadTooltips();
-void unloadTooltips();
-string getZonedTooltipForIdentifier(string s);
+void setZonedTooltip(entity e, string theTooltip, string theCvar);
+void clearTooltip(entity e);
 
 string resolvemod(string m);
 
index 9d7617e006f9621665a4f4cb999181b25a7bde1f..d3771bafc88846e6c8982f3f62482c8daf99ad96 100644 (file)
@@ -10,5 +10,6 @@
 #include "../dpdefs/dpextensions.qh"
 
 #include "../common/models/models.qh"
+#include "../common/sounds/sounds.qh"
 
 #endif
index fcf209faca6ddbdb2e7e7ea44c4ee407dea503af..5358b662cf952e75673d8c1d5f083b34644e5662 100644 (file)
@@ -702,6 +702,7 @@ int autocvar_g_monsters_max_perplayer;
 float autocvar_g_monsters_damageforcescale = 0.8;
 float autocvar_g_monsters_target_range;
 bool autocvar_g_monsters_target_infront;
+float autocvar_g_monsters_target_infront_range = 0.3;
 float autocvar_g_monsters_attack_range;
 int autocvar_g_monsters_score_kill;
 int autocvar_g_monsters_score_spawned;
index 7a3ac0561af3c6ec66917479cad1b6a2ab1756de..629009761fbcece18ce7d57a4f2094d6ef842eef 100644 (file)
@@ -856,7 +856,7 @@ void havocbot_movetogoal()
 void havocbot_chooseenemy()
 {SELFPARAM();
        entity head, best, head2;
-       float rating, bestrating, i, hf;
+       float rating, bestrating, hf;
        vector eye, v;
        if (autocvar_bot_nofire || IS_INDEPENDENT_PLAYER(self))
        {
@@ -908,10 +908,29 @@ void havocbot_chooseenemy()
 
        self.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_CORPSE;
 
-       for(i = 0; ; ++i)
+       bool scan_transparent = false;
+       bool scan_secondary_targets = false;
+       bool have_secondary_targets = false;
+       while(true)
        {
-               while (head)
+               scan_secondary_targets = false;
+               :scan_targets
+               for( ; head; head = head.chain)
                {
+                       if(!scan_secondary_targets)
+                       {
+                               if(head.classname == "misc_breakablemodel")
+                               {
+                                       have_secondary_targets = true;
+                                       continue;
+                               }
+                       }
+                       else
+                       {
+                               if(head.classname != "misc_breakablemodel")
+                                       continue;
+                       }
+
                        v = (head.absmin + head.absmax) * 0.5;
                        rating = vlen(v - eye);
                        if (rating<autocvar_bot_ai_enemydetectionradius)
@@ -925,20 +944,29 @@ void havocbot_chooseenemy()
                                        bestrating = rating;
                                }
                        }
-                       head = head.chain;
+               }
+
+               if(!best && have_secondary_targets && !scan_secondary_targets)
+               {
+                       scan_secondary_targets = true;
+                       // restart the loop
+                       head = head2;
+                       bestrating = 100000000;
+                       goto scan_targets;
                }
 
                // I want to do a second scan if no enemy was found or I don't have weapons
                // TODO: Perform the scan when using the rifle (requires changes on the rifle code)
                if(best || self.weapons) // || self.weapon == WEP_RIFLE.m_id
                        break;
-               if(i)
+               if(scan_transparent)
                        break;
 
                // Set flags to see through transparent objects
                self.dphitcontentsmask |= DPCONTENTS_OPAQUE;
 
                head = head2;
+               scan_transparent = true;
        }
 
        // Restore hit flags
@@ -946,6 +974,8 @@ void havocbot_chooseenemy()
 
        self.enemy = best;
        self.havocbot_stickenemy = true;
+       if(best && best.classname == "misc_breakablemodel")
+               self.havocbot_stickenemy = false;
 }
 
 float havocbot_chooseweapon_checkreload(int new_weapon)
index 46193160da9e1203c42e755814a4a64ce6534d41..72951cd6628b36e574d77b98abac0b2bfd2d6a0b 100644 (file)
@@ -1050,7 +1050,7 @@ float bot_cmd_sound()
                atten = stof(argv(2));
 
        precache_sound(f);
-       sound(self, chan, sample, vol, atten);
+       _sound(self, chan, sample, vol, atten);
 
        return CMD_STATUS_FINISHED;
 }
index 0721d05fc20f76d97e881a3508ea3b4a2e9ee11e..9912174dd8d17a5a024fd8ac9e77f5340e839b49 100644 (file)
@@ -283,7 +283,7 @@ float CheatImpulse(float i)
                                e = self;
 
                        Send_Effect(EFFECT_ROCKET_EXPLODE, e.origin, '0 0 0', 1);
-                       sound(e, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                       sound(e, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 
                        e2 = spawn();
                        setorigin(e2, e.origin);
index bd9c46a9b09de09f634d092f47fe4f6c3f91279f..da1a180d4c38dad14c8d1678b6edd6e2731ab8fc 100644 (file)
@@ -205,6 +205,7 @@ void PutObserverInServer (void)
        }
 
        self.frags = FRAGS_SPECTATOR;
+       self.bot_attack = false;
 
        MUTATOR_CALLHOOK(MakePlayerObserver);
 
@@ -329,9 +330,8 @@ void FixPlayermodel()
        {
                if(teamplay)
                {
-                       string s;
-                       s = Static_Team_ColorName_Lower(self.team);
-                       if(s != "neutral")
+                       string s = Static_Team_ColorName_Lower(self.team);
+                       if (s != "neutral")
                        {
                                defaultmodel = cvar_string(strcat("sv_defaultplayermodel_", s));
                                defaultskin = cvar(strcat("sv_defaultplayerskin_", s));
@@ -1447,7 +1447,7 @@ void play_countdown(float finished, string samp)
        if(IS_REAL_CLIENT(self))
                if(floor(finished - time - frametime) != floor(finished - time))
                        if(finished - time < 6)
-                               sound (self, CH_INFO, samp, VOL_BASE, ATTEN_NORM);
+                               _sound (self, CH_INFO, samp, VOL_BASE, ATTEN_NORM);
 }
 
 void player_powerups (void)
@@ -1472,7 +1472,7 @@ void player_powerups (void)
        {
                if (self.items & ITEM_Strength.m_itemid)
                {
-                       play_countdown(self.strength_finished, "misc/poweroff.wav");
+                       play_countdown(self.strength_finished, SND(POWEROFF));
                        self.effects = self.effects | (EF_BLUE | EF_ADDITIVE | EF_FULLBRIGHT);
                        if (time > self.strength_finished)
                        {
@@ -1492,7 +1492,7 @@ void player_powerups (void)
                }
                if (self.items & ITEM_Shield.m_itemid)
                {
-                       play_countdown(self.invincible_finished, "misc/poweroff.wav");
+                       play_countdown(self.invincible_finished, SND(POWEROFF));
                        self.effects = self.effects | (EF_RED | EF_ADDITIVE | EF_FULLBRIGHT);
                        if (time > self.invincible_finished)
                        {
@@ -1525,7 +1525,7 @@ void player_powerups (void)
                        }
                        else
                        {
-                               play_countdown(self.superweapons_finished, "misc/poweroff.wav");
+                               play_countdown(self.superweapons_finished, SND(POWEROFF));
                                if (time > self.superweapons_finished)
                                {
                                        self.items = self.items - (self.items & IT_SUPERWEAPON);
index f7f3c03b722c7efb0f5c24afe11d7139374af143..182c3304111966ef15918f978c652ea16e12c002 100644 (file)
@@ -182,11 +182,11 @@ void PlayerCorpseDamage (entity inflictor, entity attacker, float damage, int de
        if(sound_allowed(MSG_BROADCAST, attacker))
        {
                if (save > 10)
-                       sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_ARMORIMPACT, VOL_BASE, ATTEN_NORM);
                else if (take > 30)
-                       sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_BODYIMPACT2, VOL_BASE, ATTEN_NORM);
                else if (take > 10)
-                       sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_BODYIMPACT1, VOL_BASE, ATTEN_NORM);
        }
 
        if (take > 50)
@@ -395,11 +395,11 @@ void PlayerDamage (entity inflictor, entity attacker, float damage, int deathtyp
        if(sound_allowed(MSG_BROADCAST, attacker))
        {
                if (save > 10)
-                       sound (self, CH_SHOTS, "misc/armorimpact.wav", VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_ARMORIMPACT, VOL_BASE, ATTEN_NORM);
                else if (take > 30)
-                       sound (self, CH_SHOTS, "misc/bodyimpact2.wav", VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_SHOTS, SND_BODYIMPACT2, VOL_BASE, ATTEN_NORM);
                else if (take > 10)
-                       sound (self, CH_SHOTS, "misc/bodyimpact1.wav", VOL_BASE, ATTEN_NORM); // FIXME possibly remove them?
+                       sound (self, CH_SHOTS, SND_BODYIMPACT1, VOL_BASE, ATTEN_NORM); // FIXME possibly remove them?
        }
 
        if (take > 50)
@@ -1225,7 +1225,7 @@ void GlobalSound(string sample, float chan, float voicetype)
                        }
                        break;
                case VOICETYPE_PLAYERSOUND:
-                       sound(self, chan, sample, VOL_BASE, ATTEN_NORM);
+                       _sound(self, chan, sample, VOL_BASE, ATTEN_NORM);
                        break;
                default:
                        backtrace("Invalid voice type!");
index 82d6e7b6bc14647d7a94cd17604cc78e7c093f6b..723b137a1366c54d7480eea6a8ee1523ced2ca1e 100644 (file)
@@ -145,7 +145,9 @@ const float MAX_DAMAGEEXTRARADIUS = 16;
 .float pauserothealth_finished;
 .float pauserotarmor_finished;
 .float pauserotfuel_finished;
+// string overrides entity
 .string item_pickupsound;
+.entity item_pickupsound_ent;
 
 // definitions for weaponsystem
 // more WEAPONTODO: move these to their proper files
index b5d87eed172cb27eafd02cec6d4af64a6dfd440e..2cc773b73f526b53a46b927692be1ba1069d9970 100644 (file)
@@ -560,6 +560,7 @@ void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypo
        targ.revive_progress = ((frozen_type == 3) ? 1 : 0);
        targ.health = ((frozen_type == 3) ? targ_maxhealth : 1);
        targ.revive_speed = freeze_time;
+       self.bot_attack = false;
 
        entity ice, head;
        ice = spawn();
@@ -591,6 +592,9 @@ void Freeze (entity targ, float freeze_time, float frozen_type, float show_waypo
 
 void Unfreeze (entity targ)
 {
+       if(!targ.frozen)
+               return;
+
        if(targ.frozen && targ.frozen != 3) // only reset health if target was frozen
                targ.health = ((IS_PLAYER(targ)) ? start_health : targ.max_health);
 
@@ -598,6 +602,7 @@ void Unfreeze (entity targ)
        targ.frozen = 0;
        targ.revive_progress = 0;
        targ.revival_time = time;
+       self.bot_attack = true;
 
        WaypointSprite_Kill(targ.waypointsprite_attached);
 
index 6a95a61fe0afe8dc89637c887a253ef729b1647c..779ec90c9932e921265729ad0053863d710a7cf8 100644 (file)
@@ -91,7 +91,7 @@ void GrapplingHookThink();
 void GrapplingHook_Stop()
 {SELFPARAM();
        Send_Effect(EFFECT_HOOK_IMPACT, self.origin, '0 0 0', 1);
-       sound (self, CH_SHOTS, W_Sound("hook_impact"), VOL_BASE, ATTEN_NORM);
+       sound (self, CH_SHOTS, SND_HOOK_IMPACT, VOL_BASE, ATTEN_NORM);
 
        self.state = 1;
        self.think = GrapplingHookThink;
@@ -357,7 +357,7 @@ void FireGrapplingHook (void)
        vs = hook_shotorigin[s];
 
        // UGLY WORKAROUND: play this on CH_WEAPON_B so it can't cut off fire sounds
-       sound (self, CH_WEAPON_B, W_Sound("hook_fire"), VOL_BASE, ATTEN_NORM);
+       sound (self, CH_WEAPON_B, SND_HOOK_FIRE, VOL_BASE, ATTEN_NORM);
        org = self.origin + self.view_ofs + v_forward * vs.x + v_right * -vs.y + v_up * vs.z;
 
        tracebox(self.origin + self.view_ofs, '-3 -3 -3', '3 3 3', org, MOVE_NORMAL, self);
index 635b0d8e8fd0ae9071a18f347d1c1798a801929b..53990fb21392f0b22c64d91ab93e8cc49e39e526 100644 (file)
@@ -608,8 +608,6 @@ spawnfunc(worldspawn)
        CALL_ACCUMULATED_FUNCTION(RegisterNotifications);
        CALL_ACCUMULATED_FUNCTION(RegisterDeathtypes);
 
-       initialize_minigames();
-
        ServerProgsDB = db_load(strcat("server.db", autocvar_sessionid));
 
        TemporaryDB = db_create();
index f25879c8828fd4ca04144728153242c5395dac66..713fbf6c3df57e87a8c704e7916da1ba11e562b0 100644 (file)
@@ -234,7 +234,7 @@ spawnfunc(item_key)
                self.message = strzone(strcat("You've picked up the ", self.netname, "!"));
 
        if (self.noise == "")
-               self.noise = "misc/itempickup.wav";
+               self.noise = SND(ITEMPICKUP);
 
        // save the name for later
        item_keys_names[lowestbit(self.itemkeys)] = self.netname;
index 356a2b74af2c765bf04528b55fa4a27568d1a04f..a6164747dbdfa8fba56b601c5ea995496c4a35a1 100644 (file)
@@ -299,6 +299,8 @@ string formatmessage(string msg)
                        case "x": replacement = ((cursor_ent.netname == "" || !cursor_ent) ? "nothing" : cursor_ent.netname); break;
                        case "s": replacement = ftos(vlen(self.velocity - self.velocity_z * '0 0 1')); break;
                        case "S": replacement = ftos(vlen(self.velocity)); break;
+                       case "t": replacement = seconds_tostring(ceil(max(0, autocvar_timelimit * 60 + game_starttime - time))); break;
+                       case "T": replacement = seconds_tostring(floor(time - game_starttime)); break;
                        default:
                        {
                                MUTATOR_CALLHOOK(FormatMessage, escape, replacement, msg);
@@ -417,6 +419,8 @@ void GetCvars(float f)
 
        Notification_GetCvars();
 
+       ReplicateVars(this, s, f);
+
        GetCvars_handleFloat(s, f, autoswitch, "cl_autoswitch");
        GetCvars_handleFloat(s, f, cvar_cl_autoscreenshot, "cl_autoscreenshot");
        GetCvars_handleFloat(s, f, cvar_cl_jetpack_jump, "cl_jetpack_jump");
@@ -762,14 +766,6 @@ float sound_allowed(float destin, entity e)
     return true;
 }
 
-#undef sound
-void sound(entity e, float chan, string samp, float vol, float attenu)
-{
-    if (!sound_allowed(MSG_BROADCAST, e))
-        return;
-    sound7(e, chan, samp, vol, attenu, 0, 0);
-}
-
 void soundtoat(float _dest, entity e, vector o, float chan, string samp, float vol, float attenu)
 {
     float entno, idx;
@@ -845,7 +841,7 @@ void stopsoundto(float _dest, entity e, float chan)
     if (entno >= 8192 || chan < 0 || chan > 7)
     {
         float idx, sflags;
-        idx = precache_sound_index("misc/null.wav");
+        idx = precache_sound_index(SND(Null));
         sflags = SND_LARGEENTITY;
         if (idx >= 256)
             sflags |= SND_LARGESOUND;
@@ -893,7 +889,7 @@ float spamsound(entity e, float chan, string samp, float vol, float _atten)
     if (time > e.spamtime)
     {
         e.spamtime = time;
-        sound(e, chan, samp, vol, _atten);
+        _sound(e, chan, samp, vol, _atten);
         return true;
     }
     return false;
@@ -918,7 +914,7 @@ void play2all(string samp)
     if (autocvar_bot_sound_monopoly)
         return;
 
-    sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE);
+    _sound(world, CH_INFO, samp, VOL_BASE, ATTEN_NONE);
 }
 
 void PrecachePlayerSounds(string f);
@@ -1011,36 +1007,8 @@ void precache()
     }
 
     // gore and miscellaneous sounds
-    //precache_sound ("misc/h2ohit.wav");
-    precache_sound ("misc/armorimpact.wav");
-    precache_sound ("misc/bodyimpact1.wav");
-    precache_sound ("misc/bodyimpact2.wav");
-    precache_sound ("misc/gib.wav");
-    precache_sound ("misc/gib_splat01.wav");
-    precache_sound ("misc/gib_splat02.wav");
-    precache_sound ("misc/gib_splat03.wav");
-    precache_sound ("misc/gib_splat04.wav");
     PrecacheGlobalSound((globalsound_fall = "misc/hitground 4"));
     PrecacheGlobalSound((globalsound_metalfall = "misc/metalhitground 4"));
-    precache_sound ("misc/null.wav");
-    precache_sound ("misc/spawn.wav");
-    precache_sound ("misc/talk.wav");
-    precache_sound ("misc/teleport.wav");
-    precache_sound ("misc/poweroff.wav");
-    precache_sound ("player/lava.wav");
-    precache_sound ("player/slime.wav");
-
-    // common weapon precaches
-       precache_sound (W_Sound("reload")); // until weapons have individual reload sounds, precache the reload sound here
-    precache_sound (W_Sound("weapon_switch"));
-    precache_sound (W_Sound("weaponpickup"));
-    precache_sound (W_Sound("unavailable"));
-    precache_sound (W_Sound("dryfire"));
-    if (g_grappling_hook)
-    {
-        precache_sound (W_Sound("hook_fire")); // hook
-        precache_sound (W_Sound("hook_impact")); // hook
-    }
 
 #if 0
     // Disabled this code because it simply does not work (e.g. ignores bgmvolume, overlaps with "cd loop" controlled tracks).
@@ -1055,8 +1023,6 @@ void precache()
         ambientsound ('0 0 0', self.noise, VOL_BASE, ATTEN_NONE);
     }
 #endif
-
-#include "precache-for-csqc.inc"
 }
 
 
@@ -1468,7 +1434,7 @@ string uid2name(string myuid) {
        return s;
 }
 
-float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
+float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
 {
     float m, i;
     vector start, org, delta, end, enddown, mstart;
@@ -1477,8 +1443,8 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f
     m = e.dphitcontentsmask;
     e.dphitcontentsmask = goodcontents | badcontents;
 
-    org = world.mins;
-    delta = world.maxs - world.mins;
+    org = boundmin;
+    delta = boundmax - boundmin;
 
     start = end = org;
 
@@ -1579,6 +1545,11 @@ float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, f
         return false;
 }
 
+float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance)
+{
+       return MoveToRandomLocationWithinBounds(e, world.mins, world.maxs, goodcontents, badcontents, badsurfaceflags, attempts, maxaboveground, minviewdistance);
+}
+
 void write_recordmarker(entity pl, float tstart, float dt)
 {
     GameLogEcho(strcat(":recordset:", ftos(pl.playerid), ":", ftos(dt)));
index f1f003820d1b8c736c48261847a34a83f4699164..fc3583bb16bc6824dd5c0f4fce6638af8e631c13 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "../common/constants.qh"
 #include "../common/mapinfo.qh"
-#include "../common/turrets/turrets.qh"
+#include "../common/turrets/all.qh"
 
 #ifdef RELEASE
 #define cvar_string_normal builtin_cvar_string
@@ -106,6 +106,8 @@ float LostMovetypeFollow(entity ent);
 
 string uid2name(string myuid);
 
+float MoveToRandomLocationWithinBounds(entity e, vector boundmin, vector boundmax, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance);
+
 float MoveToRandomMapLocation(entity e, float goodcontents, float badcontents, float badsurfaceflags, float attempts, float maxaboveground, float minviewdistance);
 
 string NearestLocation(vector p);
index db93a4321d53ad107a8a8a5a725ce61237332889..108b8dda6f369b10163cdc376d968e90e6d65a49 100644 (file)
@@ -239,7 +239,7 @@ void ctf_Handle_Drop(entity flag, entity player, int droptype)
 
        // messages and sounds
        Send_Notification(NOTIF_ALL, world, MSG_INFO, ((flag.team) ? APP_TEAM_ENT_4(flag, INFO_CTF_LOST_) : INFO_CTF_LOST_NEUTRAL), player.netname);
-       sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTEN_NONE);
+       _sound(flag, CH_TRIGGER, flag.snd_flag_dropped, VOL_BASE, ATTEN_NONE);
        ctf_EventLog("dropped", player.team, player);
 
        // scoring
@@ -296,7 +296,7 @@ void ctf_Handle_Retrieve(entity flag, entity player)
        flag.ctf_status = FLAG_CARRY;
 
        // messages and sounds
-       sound(player, CH_TRIGGER, flag.snd_flag_pass, VOL_BASE, ATTEN_NORM);
+       _sound(player, CH_TRIGGER, flag.snd_flag_pass, VOL_BASE, ATTEN_NORM);
        ctf_EventLog("receive", flag.team, player);
 
        FOR_EACH_REALPLAYER(tmp_player)
@@ -363,7 +363,7 @@ void ctf_Handle_Throw(entity player, entity receiver, int droptype)
                        flag.ctf_status = FLAG_PASSING;
 
                        // other
-                       sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTEN_NORM);
+                       _sound(player, CH_TRIGGER, flag.snd_flag_touch, VOL_BASE, ATTEN_NORM);
                        WarpZone_TrailParticles(world, _particleeffectnum(flag.passeffect), player.origin, targ_origin);
                        ctf_EventLog("pass", flag.team, player);
                        break;
@@ -436,7 +436,7 @@ void ctf_Handle_Capture(entity flag, entity toucher, int capturetype)
        // messages and sounds
        Send_Notification(NOTIF_ONE, player, MSG_CENTER, ((enemy_flag.team) ? APP_TEAM_ENT_4(enemy_flag, CENTER_CTF_CAPTURE_) : CENTER_CTF_CAPTURE_NEUTRAL));
        ctf_CaptureRecord(enemy_flag, player);
-       sound(player, CH_TRIGGER, ((ctf_oneflag) ? player_team_flag.snd_flag_capture : ((DIFF_TEAM(player, flag)) ? enemy_flag.snd_flag_capture : flag.snd_flag_capture)), VOL_BASE, ATTEN_NONE);
+       _sound(player, CH_TRIGGER, ((ctf_oneflag) ? player_team_flag.snd_flag_capture : ((DIFF_TEAM(player, flag)) ? enemy_flag.snd_flag_capture : flag.snd_flag_capture)), VOL_BASE, ATTEN_NONE);
 
        switch(capturetype)
        {
@@ -485,7 +485,7 @@ void ctf_Handle_Return(entity flag, entity player)
                Send_Notification(NOTIF_ONE, player, MSG_CENTER, APP_TEAM_ENT_4(flag, CENTER_CTF_RETURN_));
                Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(flag, INFO_CTF_RETURN_), player.netname);
        }
-       sound(player, CH_TRIGGER, flag.snd_flag_returned, VOL_BASE, ATTEN_NONE);
+       _sound(player, CH_TRIGGER, flag.snd_flag_returned, VOL_BASE, ATTEN_NONE);
        ctf_EventLog("return", flag.team, player);
 
        // scoring
@@ -573,7 +573,7 @@ void ctf_Handle_Pickup(entity flag, entity player, int pickuptype)
        else
                Send_Notification(NOTIF_ONE, tmp_entity, MSG_CHOICE, ((SAME_TEAM(flag, player)) ? CHOICE_CTF_PICKUP_ENEMY_TEAM : CHOICE_CTF_PICKUP_ENEMY), Team_ColorCode(player.team), player.netname);
 
-       sound(player, CH_TRIGGER, flag.snd_flag_taken, VOL_BASE, ATTEN_NONE);
+       _sound(player, CH_TRIGGER, flag.snd_flag_taken, VOL_BASE, ATTEN_NONE);
 
        // scoring
        PlayerScore_Add(player, SP_CTF_PICKUPS, 1);
@@ -641,7 +641,7 @@ void ctf_CheckFlagReturn(entity flag, int returntype)
                                case RETURN_TIMEOUT:
                                        { Send_Notification(NOTIF_ALL, world, MSG_INFO, ((flag.team) ? APP_TEAM_ENT_4(flag, INFO_CTF_FLAGRETURN_TIMEOUT_) : INFO_CTF_FLAGRETURN_TIMEOUT_NEUTRAL)); break; }
                        }
-                       sound(flag, CH_TRIGGER, flag.snd_flag_respawn, VOL_BASE, ATTEN_NONE);
+                       _sound(flag, CH_TRIGGER, flag.snd_flag_respawn, VOL_BASE, ATTEN_NONE);
                        ctf_EventLog("returned", flag.team, world);
                        ctf_RespawnFlag(flag);
                }
@@ -941,7 +941,7 @@ void ctf_FlagTouch()
                if(time > self.wait) // if we haven't in a while, play a sound/effect
                {
                        Send_Effect_(self.toucheffect, self.origin, '0 0 0', 1);
-                       sound(self, CH_TRIGGER, self.snd_flag_touch, VOL_BASE, ATTEN_NORM);
+                       _sound(self, CH_TRIGGER, self.snd_flag_touch, VOL_BASE, ATTEN_NORM);
                        self.wait = time + FLAG_TOUCHRATE;
                }
                return;
@@ -1091,7 +1091,6 @@ void set_flag_string(entity flag, .string field, string value, string teamname)
 void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag entity on the map as a spawnfunc
 {SELFPARAM();
        // declarations
-       string teamname = Static_Team_ColorName_Lower(teamnumber);
        setself(flag); // for later usage with droptofloor()
 
        // main setup
@@ -1124,6 +1123,7 @@ void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag e
        flag.nextthink = time + FLAG_THINKRATE;
        flag.ctf_status = FLAG_BASE;
 
+       string teamname = Static_Team_ColorName_Lower(teamnumber);
        // appearence
        if(!flag.scale)                         { flag.scale = FLAG_SCALE; }
        if(flag.skin == 0)                      { flag.skin = cvar(sprintf("g_ctf_flag_%s_skin", teamname)); }
@@ -1133,22 +1133,18 @@ void ctf_FlagSetup(int teamnumber, entity flag) // called when spawning a flag e
        set_flag_string(flag, capeffect,        "%s_cap",               teamname);
 
        // sounds
-       set_flag_string(flag, snd_flag_taken,           "ctf/%s_taken.wav",     teamname);
-       set_flag_string(flag, snd_flag_returned,        "ctf/%s_returned.wav",  teamname);
-       set_flag_string(flag, snd_flag_capture,         "ctf/%s_capture.wav",   teamname);
-       set_flag_string(flag, snd_flag_dropped,         "ctf/%s_dropped.wav",   teamname);
-       if(flag.snd_flag_respawn == "")         { flag.snd_flag_respawn = "ctf/flag_respawn.wav"; } // if there is ever a team-based sound for this, update the code to match.
-       if(flag.snd_flag_touch == "")           { flag.snd_flag_touch = "ctf/touch.wav"; } // again has no team-based sound
-       if(flag.snd_flag_pass == "")            { flag.snd_flag_pass = "ctf/pass.wav"; } // same story here
-
-       // precache
-       precache_sound(flag.snd_flag_taken);
-       precache_sound(flag.snd_flag_returned);
-       precache_sound(flag.snd_flag_capture);
+       flag.snd_flag_taken = SND(CTF_TAKEN(teamnumber));
+       flag.snd_flag_returned = SND(CTF_RETURNED(teamnumber));
+       flag.snd_flag_capture = SND(CTF_CAPTURE(teamnumber));
+       flag.snd_flag_dropped = SND(CTF_DROPPED(teamnumber));
+       if (flag.snd_flag_respawn == "") flag.snd_flag_respawn = SND(CTF_RESPAWN); // if there is ever a team-based sound for this, update the code to match.
        precache_sound(flag.snd_flag_respawn);
-       precache_sound(flag.snd_flag_dropped);
+       if (flag.snd_flag_touch == "") flag.snd_flag_touch = SND(CTF_TOUCH); // again has no team-based sound
        precache_sound(flag.snd_flag_touch);
+       if (flag.snd_flag_pass == "") flag.snd_flag_pass = SND(CTF_PASS); // same story here
        precache_sound(flag.snd_flag_pass);
+
+       // precache
        precache_model(flag.model);
 
        // appearence
index 50d644836c46cc9a865fbaef32cc75168cd893aa..34b2875105a6f404588ad6d05477c2920230c369 100644 (file)
@@ -61,9 +61,9 @@ void dompoint_captured ()
 
        if (head.noise != "")
                if(self.enemy)
-                       sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM);
+                       _sound(self.enemy, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM);
                else
-                       sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM);
+                       _sound(self, CH_TRIGGER, head.noise, VOL_BASE, ATTEN_NORM);
        if (head.noise1 != "")
                play2all(head.noise1);
 
@@ -582,12 +582,12 @@ void dom_spawnpoint(vector org)
 // spawn some default teams if the map is not set up for domination
 void dom_spawnteams(float teams)
 {
-       dom_spawnteam("Red", NUM_TEAM_1-1, "models/domination/dom_red.md3", 0, "domination/claim.wav", "", "Red team has captured a control point");
-       dom_spawnteam("Blue", NUM_TEAM_2-1, "models/domination/dom_blue.md3", 0, "domination/claim.wav", "", "Blue team has captured a control point");
+       dom_spawnteam("Red", NUM_TEAM_1-1, "models/domination/dom_red.md3", 0, SND(DOM_CLAIM), "", "Red team has captured a control point");
+       dom_spawnteam("Blue", NUM_TEAM_2-1, "models/domination/dom_blue.md3", 0, SND(DOM_CLAIM), "", "Blue team has captured a control point");
        if(teams >= 3)
-               dom_spawnteam("Yellow", NUM_TEAM_3-1, "models/domination/dom_yellow.md3", 0, "domination/claim.wav", "", "Yellow team has captured a control point");
+               dom_spawnteam("Yellow", NUM_TEAM_3-1, "models/domination/dom_yellow.md3", 0, SND(DOM_CLAIM), "", "Yellow team has captured a control point");
        if(teams >= 4)
-               dom_spawnteam("Pink", NUM_TEAM_4-1, "models/domination/dom_pink.md3", 0, "domination/claim.wav", "", "Pink team has captured a control point");
+               dom_spawnteam("Pink", NUM_TEAM_4-1, "models/domination/dom_pink.md3", 0, SND(DOM_CLAIM), "", "Pink team has captured a control point");
        dom_spawnteam("", 0, "models/domination/dom_unclaimed.md3", 0, "", "", "");
 }
 
@@ -623,8 +623,6 @@ void dom_DelayedInit() // Do this check with a delay so we can wait for teams to
 
 void dom_Initialize()
 {
-       precache_sound("domination/claim.wav");
-
        InitializeEntity(world, dom_DelayedInit, INITPRIO_GAMETYPE);
 }
 
index 6d7c8c99014567a349791a5845ef1a655ea456e0..b265e41d3d5ae47a29097f683546e602da99e87a 100644 (file)
@@ -53,7 +53,7 @@ void ka_RespawnBall() // runs whenever the ball needs to be relocated
        WaypointSprite_Spawn(WP_KaBall, 0, 0, self, '0 0 64', world, self.team, self, waypointsprite_attachedforcarrier, false, RADARICON_FLAGCARRIER);
        WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
 
-       sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+       sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
 }
 
 void ka_TimeScoring()
@@ -82,7 +82,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        if (!IS_PLAYER(other))
        {  // The ball just touched an object, most likely the world
                Send_Effect(EFFECT_BALL_SPARKS, self.origin, '0 0 0', 1);
-               sound(self, CH_TRIGGER, "keepaway/touch.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_KA_TOUCH, VOL_BASE, ATTEN_NORM);
                return;
        }
        else if(self.wait > time) { return; }
@@ -112,7 +112,7 @@ void ka_TouchEvent() // runs any time that the ball comes in contact with someth
        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_PICKUP, other.netname);
        Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_CENTER, CENTER_KEEPAWAY_PICKUP, other.netname);
        Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_KEEPAWAY_PICKUP_SELF);
-       sound(self.owner, CH_TRIGGER, "keepaway/pickedup.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+       sound(self.owner, CH_TRIGGER, SND_KA_PICKEDUP, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
 
        // scoring
        PlayerScore_Add(other, SP_KEEPAWAY_PICKUPS, 1);
@@ -154,7 +154,7 @@ void ka_DropEvent(entity plyr) // runs any time that a player is supposed to los
        ka_EventLog("dropped", plyr);
        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_KEEPAWAY_DROPPED, plyr.netname);
        Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_KEEPAWAY_DROPPED, plyr.netname);
-       sound(other, CH_TRIGGER, "keepaway/dropped.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+       sound(other, CH_TRIGGER, SND_KA_DROPPED, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
 
        // scoring
        // PlayerScore_Add(plyr, SP_KEEPAWAY_DROPS, 1); Not anymore, this is 100% the same as pickups and is useless.
@@ -428,11 +428,6 @@ void ka_Initialize() // run at the start of a match, initiates game mode
        if(!g_keepaway)
                return;
 
-       precache_sound("keepaway/pickedup.wav");
-       precache_sound("keepaway/dropped.wav");
-       precache_sound("keepaway/respawn.wav");
-       precache_sound("keepaway/touch.wav");
-
        ka_ScoreRules();
        ka_SpawnBall();
 }
index 56e55d86d9c3e4791c3912c9b89983ecaf09339b..c02b42513bc9fae4bd26bb580026d79db0ab45eb 100644 (file)
@@ -63,12 +63,6 @@ float kh_interferemsg_time, kh_interferemsg_team;
 .float kh_previous_owner_playerid;
 .float kh_cp_duration;
 
-string kh_sound_capture = "kh/capture.wav";
-string kh_sound_destroy = "kh/destroy.wav";
-string kh_sound_drop = "kh/drop.wav";
-string kh_sound_collect = "kh/collect.wav";
-string kh_sound_alarm = "kh/alarm.wav";  // the new siren/alarm
-
 float kh_key_dropped, kh_key_carried;
 
 const float ST_KH_CAPS = 1;
@@ -430,7 +424,7 @@ void kh_Key_Damage(entity inflictor, entity attacker, float damage, int deathtyp
 
 void kh_Key_Collect(entity key, entity player)  //a player picks up a dropped key
 {
-       sound(player, CH_TRIGGER, kh_sound_collect, VOL_BASE, ATTEN_NORM);
+       sound(player, CH_TRIGGER, SND_KH_COLLECT, VOL_BASE, ATTEN_NORM);
 
        if(key.kh_dropperteam != player.team)
        {
@@ -575,7 +569,7 @@ void kh_WinnerTeam(float teem)  // runs when a team wins // Samual: Teem?.... TE
        midpoint = midpoint * (1 / kh_teams);
        te_customflash(midpoint, 1000, 1, Team_ColorRGB(teem) * 0.5 + '0.5 0.5 0.5');  // make the color >=0.5 in each component
 
-       play2all(kh_sound_capture);
+       play2all(SND(KH_CAPTURE));
        kh_FinishRound();
 }
 
@@ -664,7 +658,7 @@ void kh_LoserTeam(float teem, entity lostkey)  // runs when a player pushes a fl
 
        Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_ENT_4(lostkey, INFO_KEYHUNT_LOST_), lostkey.kh_previous_owner.netname);
 
-       play2all(kh_sound_destroy);
+       play2all(SND(KH_DESTROY));
        te_tarexplosion(lostkey.origin);
 
        kh_FinishRound();
@@ -696,7 +690,7 @@ void kh_Key_Think()  // runs all the time
        {
                if(self.siren_time < time)
                {
-                       sound(self.owner, CH_TRIGGER, kh_sound_alarm, VOL_BASE, ATTEN_NORM);  // play a simple alarm
+                       sound(self.owner, CH_TRIGGER, SND_KH_ALARM, VOL_BASE, ATTEN_NORM);  // play a simple alarm
                        self.siren_time = time + 2.5;  // repeat every 2.5 seconds
                }
 
@@ -832,7 +826,7 @@ void kh_Key_DropOne(entity key)
        key.pushltime = time + autocvar_g_balance_keyhunt_protecttime;
        key.kh_dropperteam = key.team;
 
-       sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTEN_NORM);
+       sound(player, CH_TRIGGER, SND_KH_DROP, VOL_BASE, ATTEN_NORM);
 }
 
 void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies
@@ -858,7 +852,7 @@ void kh_Key_DropAll(entity player, float suicide) // runs whenever a player dies
                        if(suicide)
                                key.kh_dropperteam = player.team;
                }
-               sound(player, CH_TRIGGER, kh_sound_drop, VOL_BASE, ATTEN_NORM);
+               sound(player, CH_TRIGGER, SND_KH_DROP, VOL_BASE, ATTEN_NORM);
        }
 }
 
@@ -1003,12 +997,6 @@ float kh_HandleFrags(entity attacker, entity targ, float f)  // adds to the play
 
 void kh_Initialize()  // sets up th KH environment
 {
-       precache_sound(kh_sound_capture);
-       precache_sound(kh_sound_destroy);
-       precache_sound(kh_sound_drop);
-       precache_sound(kh_sound_collect);
-       precache_sound(kh_sound_alarm);  // the new siren
-
        // setup variables
        kh_teams = autocvar_g_keyhunt_teams_override;
        if(kh_teams < 2)
index 0227f96875cb3ce35a1939f09c92cf15016c7625..3675831acc915ff9961e7eba121a77230707acf9 100644 (file)
@@ -207,7 +207,7 @@ void InitBall(void)
        self.teamtime = 0;
        self.pusher = world;
        self.team = false;
-       sound(self, CH_TRIGGER, self.noise1, VOL_BASE, ATTEN_NORM);
+       _sound(self, CH_TRIGGER, self.noise1, VOL_BASE, ATTEN_NORM);
        WaypointSprite_Ping(self.waypointsprite_attachedforcarrier);
        LogNB("init", world);
 }
@@ -254,7 +254,7 @@ void football_touch(void)
        {
                if(time > self.lastground + 0.1)
                {
-                       sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+                       _sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
                        self.lastground = time;
                }
                if(vlen(self.velocity) && !self.cnt)
@@ -310,7 +310,7 @@ void basketball_touch(void)
        }
        else if(other.solid == SOLID_BSP)
        {
-               sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
+               _sound(self, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM);
                if(vlen(self.velocity) && !self.cnt)
                        self.nextthink = min(time + autocvar_g_nexball_delay_idle, self.teamtime);
        }
@@ -376,7 +376,7 @@ void GoalTouch(void)
                pscore = 1;
        }
 
-       sound(ball, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NONE);
+       _sound(ball, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NONE);
 
        if(ball.team && pscore)
        {
@@ -515,13 +515,13 @@ void SpawnBall(void)
        if(!autocvar_g_nexball_sound_bounce)
                self.noise = "";
        else if(self.noise == "")
-               self.noise = "sound/nexball/bounce.wav";
+               self.noise = SND(NB_BOUNCE);
        //bounce sound placeholder (FIXME)
        if(self.noise1 == "")
-               self.noise1 = "sound/nexball/drop.wav";
+               self.noise1 = SND(NB_DROP);
        //ball drop sound placeholder (FIXME)
        if(self.noise2 == "")
-               self.noise2 = "sound/nexball/steal.wav";
+               self.noise2 = SND(NB_STEAL);
        //stealing sound placeholder (FIXME)
        if(self.noise) precache_sound(self.noise);
        precache_sound(self.noise1);
@@ -623,7 +623,7 @@ spawnfunc(nexball_fault)
 {
        self.team = GOAL_FAULT;
        if(self.noise == "")
-               self.noise = "misc/typehit.wav";
+               self.noise = SND(TYPEHIT);
        SpawnGoal();
 }
 
@@ -631,7 +631,7 @@ spawnfunc(nexball_out)
 {
        self.team = GOAL_OUT;
        if(self.noise == "")
-               self.noise = "misc/typehit.wav";
+               self.noise = SND(TYPEHIT);
        SpawnGoal();
 }
 
@@ -705,7 +705,7 @@ void W_Nexball_Touch(void)
                        if(!attacker.ballcarried)
                        {
                                LogNB("stole", attacker);
-                               sound(other, CH_TRIGGER, ball.noise2, VOL_BASE, ATTEN_NORM);
+                               _sound(other, CH_TRIGGER, ball.noise2, VOL_BASE, ATTEN_NORM);
 
                                if(SAME_TEAM(attacker, other) && time > attacker.teamkill_complain)
                                {
@@ -727,7 +727,7 @@ void W_Nexball_Attack(float t)
        if(!(ball = self.ballcarried))
                return;
 
-       W_SetupShot(self, false, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0);
+       W_SetupShot(self, false, 4, SND(NB_SHOOT1), CH_WEAPON_A, 0);
        tracebox(w_shotorg, BALL_MINS, BALL_MAXS, w_shotorg, MOVE_WORLDONLY, world);
        if(trace_startsolid)
        {
@@ -761,7 +761,7 @@ void W_Nexball_Attack2(void)
        if(self.ballcarried.enemy)
        {
                entity _ball = self.ballcarried;
-               W_SetupShot(self, false, 4, "nexball/shoot1.wav", CH_WEAPON_A, 0);
+               W_SetupShot(self, false, 4, SND(NB_SHOOT1), CH_WEAPON_A, 0);
                DropBall(_ball, w_shotorg, trigger_push_calculatevelocity(_ball.origin, _ball.enemy, 32));
                _ball.think = W_Nexball_Think;
                _ball.nextthink = time;
@@ -774,7 +774,7 @@ void W_Nexball_Attack2(void)
        entity missile;
        if(!(balls & BALL_BASKET))
                return;
-       W_SetupShot(self, false, 2, "nexball/shoot2.wav", CH_WEAPON_A, 0);
+       W_SetupShot(self, false, 2, SND(NB_SHOOT2), CH_WEAPON_A, 0);
        missile = spawn();
 
        missile.owner = self;
@@ -860,9 +860,6 @@ float w_nexball_weapon(float req)
        }
        else if(req == WR_INIT)
        {
-               precache_sound("nexball/shoot1.wav");
-               precache_sound("nexball/shoot2.wav");
-               precache_sound("misc/typehit.wav");
        }
        else if(req == WR_SETUP)
        {
index 9d88f70698796e6928de7890f56388bf2a9c8440..35a8e7bdc76c92f9eb04356f197c02b73d762cbe 100644 (file)
@@ -31,7 +31,7 @@ void ons_CaptureShield_Touch()
 
        if(IS_REAL_CLIENT(other))
        {
-               play2(other, "onslaught/damageblockedbyshield.wav");
+               play2(other, SND(ONS_DAMAGEBLOCKEDBYSHIELD));
 
                if(self.enemy.classname == "onslaught_generator")
                        Send_Notification(NOTIF_ONE, other, MSG_CENTER, CENTER_ONS_GENERATOR_SHIELDED);
@@ -353,7 +353,7 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag
                if (time > self.pain_finished)
                        if (IS_PLAYER(attacker))
                        {
-                               play2(attacker, "onslaught/damageblockedbyshield.wav");
+                               play2(attacker, SND(ONS_DAMAGEBLOCKEDBYSHIELD));
                                self.pain_finished = time + 1;
                                attacker.typehitsound += 1; // play both sounds (shield is way too quiet)
                        }
@@ -364,7 +364,7 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag
        if(IS_PLAYER(attacker))
        if(time - ons_notification_time[self.team] > 10)
        {
-               play2team(self.team, "onslaught/controlpoint_underattack.wav");
+               play2team(self.team, SND(ONS_CONTROLPOINT_UNDERATTACK));
                ons_notification_time[self.team] = time;
        }
 
@@ -378,13 +378,13 @@ void ons_ControlPoint_Icon_Damage(entity inflictor, entity attacker, float damag
        pointparticles(particleeffectnum(EFFECT_SPARKS), hitloc, force*-1, 1);
        //sound on every hit
        if (random() < 0.5)
-               sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE+0.3, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ONS_HIT1, VOL_BASE+0.3, ATTEN_NORM);
        else
-               sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE+0.3, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ONS_HIT2, VOL_BASE+0.3, ATTEN_NORM);
 
        if (self.health < 0)
        {
-               sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
                pointparticles(particleeffectnum(EFFECT_ROCKET_EXPLODE), self.origin, '0 0 0', 1);
                Send_Notification(NOTIF_ALL, world, MSG_INFO, APP_TEAM_NUM_4(self.team, INFO_ONSLAUGHT_CPDESTROYED_), self.owner.message, attacker.netname);
 
@@ -490,9 +490,9 @@ void ons_ControlPoint_Icon_Think()
                Send_Effect(EFFECT_ELECTRIC_SPARKS, self.origin + randompos('-10 -10 -20', '10 10 20'), '0 0 0', 1);
 
                if(random() > 0.8)
-                       sound(self, CH_PAIN, "onslaught/ons_spark1.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_PAIN, SND_ONS_SPARK1, VOL_BASE, ATTEN_NORM);
                else if (random() > 0.5)
-                       sound(self, CH_PAIN, "onslaught/ons_spark2.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_PAIN, SND_ONS_SPARK2, VOL_BASE, ATTEN_NORM);
        }
 }
 
@@ -516,11 +516,11 @@ void ons_ControlPoint_Icon_BuildThink()
                self.health = self.max_health;
                self.count = autocvar_g_onslaught_cp_regen * ONS_CP_THINKRATE; // slow repair rate from now on
                self.think = ons_ControlPoint_Icon_Think;
-               sound(self, CH_TRIGGER, "onslaught/controlpoint_built.wav", VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILT, VOL_BASE, ATTEN_NORM);
                self.owner.iscaptured = true;
                self.solid = SOLID_BBOX;
 
-               Send_Effect_(sprintf("%s_cap", Static_Team_ColorName_Lower(self.owner.team)), self.owner.origin, '0 0 0', 1);
+               Send_Effect(EFFECT_CAP(self.owner.team), self.owner.origin, '0 0 0', 1);
 
                WaypointSprite_UpdateMaxHealth(self.owner.sprite, self.max_health);
                WaypointSprite_UpdateHealth(self.owner.sprite, self.health);
@@ -572,13 +572,13 @@ void ons_ControlPoint_Icon_Spawn(entity cp, entity player)
        e.colormap = 1024 + (e.team - 1) * 17;
        e.count = (e.max_health - e.health) * ONS_CP_THINKRATE / autocvar_g_onslaught_cp_buildtime; // how long it takes to build
 
-       sound(e, CH_TRIGGER, "onslaught/controlpoint_build.wav", VOL_BASE, ATTEN_NORM);
+       sound(e, CH_TRIGGER, SND_ONS_CONTROLPOINT_BUILD, VOL_BASE, ATTEN_NORM);
 
        cp.goalentity = e;
        cp.team = e.team;
        cp.colormap = e.colormap;
 
-       Send_Effect_(sprintf("%sflag_touch", Static_Team_ColorName_Lower(player.team)), e.origin, '0 0 0', 1);
+       Send_Effect(EFFECT_FLAG_TOUCH(player.team), e.origin, '0 0 0', 1);
 
        WaypointSprite_UpdateBuildFinished(cp.sprite, time + (e.max_health - e.health) / (e.count / ONS_CP_THINKRATE));
        WaypointSprite_UpdateRule(cp.sprite,cp.team,SPRITERULE_TEAMPLAY);
@@ -751,15 +751,6 @@ void ons_ControlPoint_Setup(entity cp)
 
        if(cp.message == "") { cp.message = "a"; }
 
-       // precache - TODO: clean up!
-       precache_sound("onslaught/controlpoint_build.wav");
-       precache_sound("onslaught/controlpoint_built.wav");
-       precache_sound(W_Sound("grenade_impact"));
-       precache_sound("onslaught/damageblockedbyshield.wav");
-       precache_sound("onslaught/controlpoint_underattack.wav");
-       precache_sound("onslaught/ons_spark1.wav");
-       precache_sound("onslaught/ons_spark2.wav");
-
        // appearence
        setmodel_fixsize(cp, MDL_ONS_CP_PAD1);
 
@@ -838,7 +829,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de
                        if (time > self.pain_finished)
                                if (IS_PLAYER(attacker))
                                {
-                                       play2(attacker, "onslaught/damageblockedbyshield.wav");
+                                       play2(attacker, SND(ONS_DAMAGEBLOCKEDBYSHIELD));
                                        attacker.typehitsound += 1;
                                        self.pain_finished = time + 1;
                                }
@@ -849,7 +840,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de
                        self.pain_finished = time + 10;
                        entity head;
                        FOR_EACH_REALPLAYER(head) if(SAME_TEAM(head, self)) { Send_Notification(NOTIF_ONE, head, MSG_CENTER, CENTER_GENERATOR_UNDERATTACK); }
-                       play2team(self.team, "onslaught/generator_underattack.wav");
+                       play2team(self.team, SND(ONS_GENERATOR_UNDERATTACK));
                }
        }
        self.health = self.health - damage;
@@ -890,7 +881,7 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de
        // Throw some flaming gibs on damage, more damage = more chance for gib
        if(random() < damage/220)
        {
-               sound(self, CH_TRIGGER, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+               sound(self, CH_TRIGGER, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
        }
        else
        {
@@ -899,9 +890,9 @@ void ons_GeneratorDamage(entity inflictor, entity attacker, float damage, int de
 
                //sound on every hit
                if (random() < 0.5)
-                       sound(self, CH_TRIGGER, "onslaught/ons_hit1.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_TRIGGER, SND_ONS_HIT1, VOL_BASE, ATTEN_NORM);
                else
-                       sound(self, CH_TRIGGER, "onslaught/ons_hit2.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_TRIGGER, SND_ONS_HIT2, VOL_BASE, ATTEN_NORM);
        }
 
        self.SendFlags |= GSF_STATUS;
@@ -921,7 +912,7 @@ void ons_GeneratorThink()
                                if(SAME_TEAM(e, self))
                                {
                                        Send_Notification(NOTIF_ONE, e, MSG_CENTER, CENTER_ONS_NOTSHIELDED_TEAM);
-                    soundto(MSG_ONE, e, CHAN_AUTO, "kh/alarm.wav", VOL_BASE, ATTEN_NONE);    // FIXME: unique sound?
+                    soundto(MSG_ONE, e, CHAN_AUTO, SND(KH_ALARM), VOL_BASE, ATTEN_NONE);    // FIXME: unique sound?
                 }
                                else
                                        Send_Notification(NOTIF_ONE, e, MSG_CENTER, APP_TEAM_NUM_4(self.team, CENTER_ONS_NOTSHIELDED_));
@@ -1008,16 +999,6 @@ void ons_GeneratorSetup(entity gen) // called when spawning a generator entity o
        gen.isshielded = true;
        gen.touch = onslaught_generator_touch;
 
-       // precache - TODO: clean up!
-       precache_sound("onslaught/generator_decay.wav");
-       precache_sound(W_Sound("grenade_impact"));
-       precache_sound(W_Sound("rocket_impact"));
-       precache_sound("onslaught/generator_underattack.wav");
-       precache_sound("onslaught/shockwave.wav");
-       precache_sound("onslaught/ons_hit1.wav");
-       precache_sound("onslaught/ons_hit2.wav");
-       precache_sound("onslaught/generator_underattack.wav");
-
        // appearence
        // model handled by CSQC
        setsize(gen, GENERATOR_MIN, GENERATOR_MAX);
@@ -1095,7 +1076,7 @@ bool Onslaught_CheckWinner()
                if (!wpforenemy_announced)
                {
                        Send_Notification(NOTIF_ALL, world, MSG_CENTER, CENTER_OVERTIME_CONTROLPOINT);
-                       sound(world, CH_INFO, "onslaught/generator_decay.wav", VOL_BASE, ATTEN_NONE);
+                       sound(world, CH_INFO, SND_ONS_GENERATOR_DECAY, VOL_BASE, ATTEN_NONE);
 
                        wpforenemy_announced = true;
                }
@@ -1149,7 +1130,7 @@ bool Onslaught_CheckWinner()
 
        ons_stalemate = false;
 
-       play2all(sprintf("ctf/%s_capture.wav", Static_Team_ColorName_Lower(winner_team)));
+       play2all(SND(CTF_CAPTURE(winner_team)));
 
        round_handler_Init(7, autocvar_g_onslaught_warmup, autocvar_g_onslaught_round_timelimit);
 
@@ -1658,7 +1639,7 @@ bool ons_Teleport(entity player, entity tele_target, float range, bool tele_effe
                                if ( tele_effects )
                                {
                                        Send_Effect(EFFECT_TELEPORT, player.origin, '0 0 0', 1);
-                                       sound (player, CH_TRIGGER, "misc/teleport.wav", VOL_BASE, ATTEN_NORM);
+                                       sound (player, CH_TRIGGER, SND_TELEPORT, VOL_BASE, ATTEN_NORM);
                                }
                                setorigin(player, loc);
                                player.angles = '0 1 0' * ( theta * RAD2DEG + 180 );
@@ -2114,11 +2095,6 @@ void ons_DelayedInit() // Do this check with a delay so we can wait for teams to
 
 void ons_Initialize()
 {
-       precache_sound("ctf/red_capture.wav");
-       precache_sound("ctf/blue_capture.wav");
-       precache_sound("ctf/yellow_capture.wav");
-       precache_sound("ctf/pink_capture.wav");
-
        ons_captureshield_force = autocvar_g_onslaught_shield_force;
 
        addstat(STAT_ROUNDLOST, AS_INT, ons_roundlost);
index 79004e1c4163898d4c021d89fa2d2213564e5793..fb0c2b7b6feb8dec218c58d58e04b5ebb59688c4 100644 (file)
@@ -140,7 +140,7 @@ void buff_Respawn(entity ent)
 
        WaypointSprite_Ping(ent.buff_waypoint);
 
-       sound(ent, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
+       sound(ent, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NONE); // ATTEN_NONE (it's a sound intended to be heard anywhere)
 }
 
 void buff_Touch()
@@ -178,7 +178,7 @@ void buff_Touch()
                        Send_Notification(NOTIF_ALL, world, MSG_INFO, INFO_ITEM_BUFF_LOST, other.netname, buffid);
 
                        other.buffs = 0;
-                       //sound(other, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM);
+                       //sound(other, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
                }
                else { return; } // do nothing
        }
@@ -191,7 +191,7 @@ void buff_Touch()
        Send_Notification(NOTIF_ALL_EXCEPT, other, MSG_INFO, INFO_ITEM_BUFF, other.netname, buffid);
 
        Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(self), '0 0 0', 1);
-       sound(other, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTN_NORM);
+       sound(other, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTN_NORM);
        other.buffs |= (self.buffs);
 }
 
@@ -271,7 +271,7 @@ void buff_Think()
                if(!self.buff_activetime)
                {
                        self.buff_active = true;
-                       sound(self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTN_NORM);
+                       sound(self, CH_TRIGGER, SND_STRENGTH_RESPAWN, VOL_BASE, ATTN_NORM);
                        Send_Effect(EFFECT_ITEM_RESPAWN, CENTER_OR_VIEWOFS(self), '0 0 0', 1);
                }
        }
@@ -596,7 +596,7 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerUseKey)
                Send_Notification(NOTIF_ALL_EXCEPT, self, MSG_INFO, INFO_ITEM_BUFF_LOST, self.netname, buffid);
 
                self.buffs = 0;
-               sound(self, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM);
+               sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
                return true;
        }
        return false;
@@ -661,8 +661,8 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerThrowKey)
                        Send_Effect(EFFECT_ELECTRO_COMBO, their_org, '0 0 0', 1);
                        Send_Effect(EFFECT_ELECTRO_COMBO, my_org, '0 0 0', 1);
 
-                       sound(self, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM);
-                       sound(closest, CH_TRIGGER, "keepaway/respawn.wav", VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM);
+                       sound(closest, CH_TRIGGER, SND_KA_RESPAWN, VOL_BASE, ATTEN_NORM);
 
                        // TODO: add a counter to handle how many times one can teleport, and a delay to prevent spam
                        self.buffs = 0;
@@ -771,7 +771,7 @@ MUTATOR_HOOKFUNCTION(buffs_PlayerThink)
                        if(buff_lost >= 2)
                        {
                                Send_Notification(NOTIF_ONE, self, MSG_MULTI, ITEM_BUFF_DROP, buffid); // TODO: special timeout message?
-                               sound(self, CH_TRIGGER, "relics/relic_effect.wav", VOL_BASE, ATTN_NORM);
+                               sound(self, CH_TRIGGER, SND_BUFF_LOST, VOL_BASE, ATTN_NORM);
                        }
                        self.buffs = 0;
                }
@@ -957,12 +957,6 @@ void buffs_DelayedInit()
 
 void buffs_Initialize()
 {
-       precache_sound("misc/strength_respawn.wav");
-       precache_sound("misc/shield_respawn.wav");
-       precache_sound("relics/relic_effect.wav");
-       precache_sound(W_Sound("rocket_impact"));
-       precache_sound("keepaway/respawn.wav");
-
        addstat(STAT_BUFFS, AS_INT, buffs);
        addstat(STAT_BUFF_TIME, AS_FLOAT, buff_time);
 
index 938b9873513fa71701930f05b558810868fc5a6c..cbe57ca2ac5f671c5c99325a5a2ca196e89a335c 100644 (file)
@@ -187,7 +187,7 @@ MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups)
 
        if (self.items & ITEM_Invisibility.m_itemid)
        {
-               play_countdown(self.strength_finished, "misc/poweroff.wav");
+               play_countdown(self.strength_finished, SND(POWEROFF));
                if (time > self.strength_finished)
                {
                        self.alpha = default_player_alpha;
@@ -210,7 +210,7 @@ MUTATOR_HOOKFUNCTION(instagib_PlayerPowerups)
 
        if (self.items & ITEM_Speed.m_itemid)
        {
-               play_countdown(self.invincible_finished, "misc/poweroff.wav");
+               play_countdown(self.invincible_finished, SND(POWEROFF));
                if (time > self.invincible_finished)
                {
                        self.items &= ~ITEM_Speed.m_itemid;
index 8beec7db2de94177af6921f1592058842cc9d704..87abd78a2c1d1a060fef72b4efd3bf35dda49683 100644 (file)
@@ -5,8 +5,14 @@ float instagib_respawntimejitter_ammo = 0;
 GETTER(float, instagib_respawntime_ammo)
 GETTER(float, instagib_respawntimejitter_ammo)
 
+#ifndef MENUQC
+MODEL(VaporizerCells_ITEM, Item_Model("a_cells.md3"));
+#endif
+
 REGISTER_ITEM(VaporizerCells, Ammo) {
-    this.m_model                =   "a_cells.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_VaporizerCells_ITEM;
+#endif
     this.m_sound                =   "misc/itempickup.wav";
     this.m_name                 =   "Vaporizer Ammo";
     this.m_icon                 =   "ammo_supercells";
@@ -18,8 +24,14 @@ REGISTER_ITEM(VaporizerCells, Ammo) {
 #endif
 }
 
+#ifndef MENUQC
+MODEL(ExtraLife_ITEM, Item_Model("g_h100.md3"));
+#endif
+
 REGISTER_ITEM(ExtraLife, Powerup) {
-    this.m_model                =   "g_h100.md3";
+#ifndef MENUQC
+    this.m_model                =   MDL_ExtraLife_ITEM;
+#endif
     this.m_sound                =   "misc/megahealth.wav";
     this.m_name                 =   "Extra life";
     this.m_icon                 =   "item_mega_health";
@@ -29,8 +41,14 @@ REGISTER_ITEM(ExtraLife, Powerup) {
     this.m_itemid               =   IT_NAILS;
 }
 
+#ifndef MENUQC
+MODEL(Invisibility_ITEM, Item_Model("g_strength.md3"));
+#endif
+
 REGISTER_ITEM(Invisibility, Powerup) {
-    this.m_model            =   "g_strength.md3";
+#ifndef MENUQC
+    this.m_model            =   MDL_Invisibility_ITEM;
+#endif
     this.m_sound            =   "misc/powerup.wav";
     this.m_name             =   "Invisibility";
     this.m_icon             =   "strength";
@@ -40,8 +58,14 @@ REGISTER_ITEM(Invisibility, Powerup) {
     this.m_itemid           =   IT_STRENGTH;
 }
 
+#ifndef MENUQC
+MODEL(Speed_ITEM, Item_Model("g_invincible.md3"));
+#endif
+
 REGISTER_ITEM(Speed, Powerup) {
-    this.m_model            =   "g_invincible.md3";
+#ifndef MENUQC
+    this.m_model            =   MDL_Speed_ITEM;
+#endif
     this.m_sound            =   "misc/powerup_shield.wav";
     this.m_name             =   "Speed";
     this.m_icon             =   "shield";
index 99c785482591566d980e983541454aa9def1dcee..19a0aa462c688f842043f9a703cc8bfd50862e44 100644 (file)
@@ -121,7 +121,7 @@ void nade_napalm_ball()
        entity proj;
        vector kick;
 
-       spamsound(self, CH_SHOTS, W_Sound("fireball_fire"), VOL_BASE, ATTEN_NORM);
+       spamsound(self, CH_SHOTS, SND(FIREBALL_FIRE), VOL_BASE, ATTEN_NORM);
 
        proj = spawn ();
        proj.owner = self.owner;
@@ -250,17 +250,9 @@ void nade_ice_think()
        {
                if ( autocvar_g_nades_ice_explode )
                {
-                       entity expef = NULL;
-                       switch(self.realowner.team)
-                       {
-                               case NUM_TEAM_1: expef = EFFECT_NADE_RED_EXPLODE; break;
-                               case NUM_TEAM_2: expef = EFFECT_NADE_BLUE_EXPLODE; break;
-                               case NUM_TEAM_3: expef = EFFECT_NADE_YELLOW_EXPLODE; break;
-                               case NUM_TEAM_4: expef = EFFECT_NADE_PINK_EXPLODE; break;
-                               default:                 expef = EFFECT_NADE_NEUTRAL_EXPLODE; break;
-                       }
+                       entity expef = EFFECT_NADE_EXPLODE(self.realowner.team);
                        Send_Effect(expef, self.origin + '0 0 1', '0 0 0', 1);
-                       sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+                       sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 
                        RadiusDamage(self, self.realowner, autocvar_g_nades_nade_damage, autocvar_g_nades_nade_edgedamage,
                                autocvar_g_nades_nade_radius, self, world, autocvar_g_nades_nade_force, self.projectiledeathtype, self.enemy);
@@ -517,21 +509,15 @@ void nade_boom()
 
                default:
                case NADE_TYPE_NORMAL:
-                       switch(self.realowner.team)
-                       {
-                               case NUM_TEAM_1: expef = EFFECT_NADE_RED_EXPLODE; break;
-                               case NUM_TEAM_2: expef = EFFECT_NADE_BLUE_EXPLODE; break;
-                               case NUM_TEAM_3: expef = EFFECT_NADE_YELLOW_EXPLODE; break;
-                               case NUM_TEAM_4: expef = EFFECT_NADE_PINK_EXPLODE; break;
-                               default:                 expef = EFFECT_NADE_NEUTRAL_EXPLODE; break;
-                       }
+                       expef = EFFECT_NADE_EXPLODE(self.realowner.team);
+                       break;
        }
 
        if(expef)
                Send_Effect(expef, findbetterlocation(self.origin, 8), '0 0 0', 1);
 
-       sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, ATTEN_NORM);
-       sound(self, CH_SHOTS, W_Sound("rocket_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, ATTEN_NORM);
+       sound(self, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM);
 
        self.event_damage = func_null; // prevent somehow calling damage in the next call
 
@@ -584,7 +570,7 @@ void nade_touch()
        //UpdateCSQCProjectile(self);
        if(self.health == self.max_health)
        {
-               spamsound(self, CH_SHOTS, W_Sound(strcat("grenade_bounce", ftos(1 + rint(random() * 5)))), VOL_BASE, ATTEN_NORM);
+               spamsound(self, CH_SHOTS, SND(GRENADE_BOUNCE_RANDOM()), VOL_BASE, ATTEN_NORM);
                return;
        }
 
@@ -594,7 +580,7 @@ void nade_touch()
 
 void nade_beep()
 {SELFPARAM();
-       sound(self, CH_SHOTS_SINGLE, "overkill/grenadebip.ogg", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
+       sound(self, CH_SHOTS_SINGLE, SND_NADE_BEEP, VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
        self.think = nade_boom;
        self.nextthink = max(self.wait, time);
 }
@@ -649,7 +635,7 @@ void nade_damage(entity inflictor, entity attacker, float damage, int deathtype,
 
        if(self.health == self.max_health)
        {
-               sound(self, CH_SHOTS_SINGLE, "misc/null.wav", VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
+               sound(self, CH_SHOTS_SINGLE, SND_Null, VOL_BASE, 0.5 *(ATTEN_LARGE + ATTEN_MAX));
                self.nextthink = max(time + autocvar_g_nades_nade_lifetime, time);
                self.think = nade_beep;
        }
@@ -759,7 +745,7 @@ void nades_GiveBonus(entity player, float score)
                if ( player.bonus_nade_score >= 1 )
                {
                        Send_Notification(NOTIF_ONE, player, MSG_CENTER, CENTER_NADE_BONUS);
-                       play2(player,"kh/alarm.wav");
+                       play2(player, SND(KH_ALARM));
                        player.bonus_nades++;
                        player.bonus_nade_score -= 1;
                }
@@ -1198,15 +1184,6 @@ void nades_Initialize()
        addstat(STAT_NADE_BONUS_SCORE, AS_FLOAT, bonus_nade_score);
        addstat(STAT_HEALING_ORB, AS_FLOAT, stat_healing_orb);
        addstat(STAT_HEALING_ORB_ALPHA, AS_FLOAT, stat_healing_orb_alpha);
-
-       precache_sound(W_Sound("rocket_impact"));
-       precache_sound(W_Sound("grenade_bounce1"));
-       precache_sound(W_Sound("grenade_bounce2"));
-       precache_sound(W_Sound("grenade_bounce3"));
-       precache_sound(W_Sound("grenade_bounce4"));
-       precache_sound(W_Sound("grenade_bounce5"));
-       precache_sound(W_Sound("grenade_bounce6"));
-       precache_sound("overkill/grenadebip.ogg");
 }
 
 MUTATOR_DEFINITION(mutator_nades)
index 172ee4d651430b2d8a6e08458f54cfb71a4f17f9..9b51d9abb8640fbcaf4f3bbcf5ef83d5f652f760 100644 (file)
@@ -190,8 +190,10 @@ MUTATOR_HOOKFUNCTION(nt_SetWeaponreplace)
 
 MUTATOR_HOOKFUNCTION(nt_FilterItem)
 {SELFPARAM();
-       if(nt_IsNewToy(self.weapon) && autocvar_g_new_toys_use_pickupsound)
-               self.item_pickupsound = W_Sound("weaponpickup_new_toys");
+       if(nt_IsNewToy(self.weapon) && autocvar_g_new_toys_use_pickupsound) {
+               self.item_pickupsound = string_null;
+               self.item_pickupsound_ent = SND_WEAPONPICKUP_NEW_TOYS;
+       }
        return 0;
 }
 
@@ -207,8 +209,6 @@ MUTATOR_DEFINITION(mutator_new_toys)
                if(time > 1) // game loads at time 1
                        error("This cannot be added at runtime\n");
 
-               precache_sound(W_Sound("weaponpickup_new_toys"));
-
                // mark the guns as ok to use by e.g. impulse 99
                float i;
                for(i = WEP_FIRST; i <= WEP_LAST; ++i)
index 33df11312ca2a0552de865af256de10844270db3..2114efc92d56cc0c1773e3b74a8c42a1e38d3875 100644 (file)
@@ -174,7 +174,7 @@ MUTATOR_HOOKFUNCTION(ok_PlayerPreThink)
                {
                        //Send_Notification(NOTIF_ONE, self, MSG_CENTER, CENTER_OVERKILL_CHARGE);
                        self.ok_notice_time = time + 2;
-                       play2(self, W_Sound("dryfire"));
+                       play2(self, SND(DRYFIRE));
                }
                if(self.weaponentity.state != WS_CLEAR)
                        w_ready();
@@ -319,8 +319,6 @@ void ok_Initialize()
 
        precache_all_playermodels("models/ok_player/*.dpm");
 
-       precache_sound(W_Sound("dryfire"));
-
        addstat(STAT_OK_AMMO_CHARGE, AS_FLOAT, ok_use_ammocharge);
        addstat(STAT_OK_AMMO_CHARGEPOOL, AS_FLOAT, ok_ammo_charge);
 
index 4f49d550d9704aa1d44a4959288db4dae0168770..faa74bb1dcf74e989eeb50311e1b83c82bd1fba6 100644 (file)
@@ -10,7 +10,7 @@ void PlayerTouchExplode(entity p1, entity p2)
        org = (p1.origin + p2.origin) * 0.5;
        org.z += (p1.mins.z + p2.mins.z) * 0.5;
 
-       sound(self, CH_TRIGGER, W_Sound("grenade_impact"), VOL_BASE, ATTEN_NORM);
+       sound(self, CH_TRIGGER, SND_GRENADE_IMPACT, VOL_BASE, ATTEN_NORM);
        Send_Effect(EFFECT_EXPLOSION_SMALL, org, '0 0 0', 1);
 
        entity e;
index 509e920511e4cad52582e1737ebeb4f946567972..ed3ffc5e77dfe6c3cd90afdcdad0e8bf2475a3d4 100644 (file)
@@ -30,7 +30,7 @@ void sandbox_ObjectFunction_Touch()
        intensity -= autocvar_g_sandbox_object_material_velocity_min; // start from minimum velocity, not actual velocity
        intensity = bound(0, intensity * autocvar_g_sandbox_object_material_velocity_factor, 1);
 
-       sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTEN_NORM);
+       _sound(self, CH_TRIGGER, strcat("object/impact_", self.material, "_", ftos(ceil(random() * 5)) , ".wav"), VOL_BASE * intensity, ATTEN_NORM);
        Send_Effect_(strcat("impact_", self.material), self.origin, '0 0 0', ceil(intensity * 10)); // allow a count from 1 to 10
 }
 
diff --git a/qcsrc/server/pathlib.qc b/qcsrc/server/pathlib.qc
deleted file mode 100644 (file)
index a563a02..0000000
+++ /dev/null
@@ -1,973 +0,0 @@
-#include "pathlib.qh"
-#include "_all.qh"
-
-#define medium spawnshieldtime
-
-//#define DEBUGPATHING
-#ifdef DEBUGPATHING
-float edge_show(vector point,float fsize);
-void mark_error(vector where,float lifetime);
-void mark_info(vector where,float lifetime);
-entity mark_misc(vector where,float lifetime);
-
-void pathlib_showpath(entity start)
-{
-    entity e;
-    e = start;
-    while(e.path_next)
-    {
-        te_lightning1(e,e.origin,e.path_next.origin);
-        e = e.path_next;
-    }
-}
-
-void path_dbg_think()
-{
-    pathlib_showpath(self);
-    self.nextthink = time + 1;
-}
-
-void __showpath2_think()
-{
-    mark_info(self.origin,1);
-    if(self.path_next)
-    {
-        self.path_next.think     = __showpath2_think;
-        self.path_next.nextthink = time + 0.15;
-    }
-    else
-    {
-        self.owner.think     = __showpath2_think;
-        self.owner.nextthink = time + 0.15;
-    }
-}
-
-void pathlib_showpath2(entity path)
-{
-    path.think     = __showpath2_think;
-    path.nextthink = time;
-}
-
-#endif
-
-void pathlib_deletepath(entity start)
-{
-    entity e;
-
-    e = findchainentity(owner, start);
-    while(e)
-    {
-        e.think = SUB_Remove;
-        e.nextthink = time;
-        e = e.chain;
-    }
-}
-
-float  walknode_stepsize;
-vector walknode_stepup;
-vector walknode_maxdrop;
-vector walknode_boxup;
-vector walknode_boxmax;
-vector walknode_boxmin;
-float  pathlib_movenode_goodnode;
-
-float floor_ok(vector point)
-{
-    float pc;
-
-    if(trace_dphitq3surfaceflags & Q3SURFACEFLAG_SKY)
-        return 0;
-
-    pc = pointcontents(point);
-
-    switch(pc)
-    {
-        case CONTENT_SOLID:
-        case CONTENT_SLIME:
-        case CONTENT_LAVA:
-        case CONTENT_SKY:
-            return 0;
-        case CONTENT_EMPTY:
-            if(pointcontents(point - '0 0 1') != CONTENT_SOLID)
-                return 0;
-            break;
-        case CONTENT_WATER:
-            return 1;
-    }
-    if(pointcontents(point - '0 0 1') == CONTENT_SOLID)
-        return 1;
-
-    return 0;
-}
-
-#define _pcheck(p) traceline(p+z_up,p-z_down,MOVE_WORLDONLY,self); if (!floor_ok(trace_endpos)) return 1
-float edge_check(vector point,float fsize)
-{
-    vector z_up,z_down;
-
-    z_up   = '0 0 1' * fsize;
-    z_down = '0 0 1' * fsize;
-
-    _pcheck(point + ('1 1 0'  * fsize));
-    _pcheck(point + ('1 -1 0'  * fsize));
-    _pcheck(point + ('1 0 0' * fsize));
-
-    _pcheck(point + ('0 1 0'  * fsize));
-    _pcheck(point + ('0 -1 0' * fsize));
-
-    _pcheck(point + ('-1 0 0'  * fsize));
-    _pcheck(point + ('-1 1 0'  * fsize));
-    _pcheck(point + ('-1 -1 0' * fsize));
-
-    return 0;
-}
-
-#ifdef DEBUGPATHING
-#define _pshow(p) mark_error(p,10)
-float edge_show(vector point,float fsize)
-{
-
-    _pshow(point + ('1 1 0'  * fsize));
-    _pshow(point + ('1 -1 0' * fsize));
-    _pshow(point + ('1 0 0'  * fsize));
-
-    _pshow(point + ('0 1 0'  * fsize));
-    _pshow(point + ('0 -1 0' * fsize));
-
-    _pshow(point + ('-1 0 0'  * fsize));
-    _pshow(point + ('-1 1 0'  * fsize));
-    _pshow(point + ('-1 -1 0' * fsize));
-
-    return 0;
-}
-#endif
-
-var vector pathlib_movenode(vector start,vector end,float doedge);
-vector pathlib_wateroutnode(vector start,vector end,float doedge)
-{
-    vector surface;
-
-    pathlib_movenode_goodnode = 0;
-
-    end.x = fsnap(end.x, pathlib_gridsize);
-    end.y = fsnap(end.y, pathlib_gridsize);
-
-    traceline(end + ('0 0 0.25' * pathlib_gridsize),end - ('0 0 1' * pathlib_gridsize),MOVE_WORLDONLY,self);
-    end = trace_endpos;
-
-    if(pointcontents(end - '0 0 1') != CONTENT_SOLID)
-        return end;
-
-    for(surface = start ; surface.z < (end.z + 32); ++surface.z)
-    {
-        if(pointcontents(surface) == CONTENT_EMPTY)
-            break;
-    }
-
-    if(pointcontents(surface + '0 0 1') != CONTENT_EMPTY)
-        return end;
-
-    tracebox(start + '0 0 64', walknode_boxmin,walknode_boxmax, end + '0 0 64', MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    if(fabs(surface.z - end.z) > 32)
-        pathlib_movenode_goodnode = 0;
-
-    return end;
-}
-
-vector pathlib_swimnode(vector start,vector end,float doedge)
-{
-    pathlib_movenode_goodnode = 0;
-
-    if(pointcontents(start) != CONTENT_WATER)
-        return end;
-
-    end.x = fsnap(end.x, pathlib_gridsize);
-    end.y = fsnap(end.y, pathlib_gridsize);
-
-    if(pointcontents(end) == CONTENT_EMPTY)
-        return pathlib_wateroutnode( start, end, doedge);
-
-    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_flynode(vector start,vector end)
-{
-    pathlib_movenode_goodnode = 0;
-
-    end.x = fsnap(end.x, pathlib_gridsize);
-    end.y = fsnap(end.y, pathlib_gridsize);
-
-    tracebox(start, walknode_boxmin,walknode_boxmax, end, MOVE_WORLDONLY, self);
-    if(trace_fraction == 1)
-        pathlib_movenode_goodnode = 1;
-
-    return end;
-}
-
-vector pathlib_walknode(vector start,vector end,float doedge)
-{
-    vector direction,point,last_point,s,e;
-    float steps, distance, i,laststep;
-
-    pathlib_movenode_goodnode = 0;
-
-    s   = start;
-    e   = end;
-    e.z = 0;
-    s.z = 0;
-    direction  = normalize(s - e);
-
-    distance    = vlen(start - end);
-    laststep    = distance / walknode_stepsize;
-    steps       = floor(laststep);
-    laststep    = laststep - steps;
-
-    point = start;
-    s     = point + walknode_stepup;
-    e     = point - walknode_maxdrop;
-
-    traceline(s, e,MOVE_WORLDONLY,self);
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    if (floor_ok(trace_endpos) == 0)
-        return trace_endpos;
-
-    last_point = trace_endpos;
-
-    for(i = 0; i < steps; ++i)
-    {
-        point = last_point + direction * walknode_stepsize;
-
-        s = point + walknode_stepup;
-        e = point - walknode_maxdrop;
-        traceline(s, e,MOVE_WORLDONLY,self);
-        if(trace_fraction == 1.0)
-            return trace_endpos;
-
-        point = trace_endpos;
-        if (!floor_ok(trace_endpos))
-            return trace_endpos;
-
-        tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
-        if(trace_fraction != 1.0)
-            return trace_endpos;
-
-        if(doedge)
-        if(edge_check(point,pathlib_edge_check_size))
-            return trace_endpos;
-
-        last_point = point;
-    }
-
-    point = last_point + direction * walknode_stepsize * laststep;
-
-    point.x = fsnap(point.x, pathlib_gridsize);
-    point.y = fsnap(point.y, pathlib_gridsize);
-
-    s = point + walknode_stepup;
-    e = point - walknode_maxdrop;
-    traceline(s, e,MOVE_WORLDONLY,self);
-
-    if(trace_fraction == 1.0)
-        return trace_endpos;
-
-    point = trace_endpos;
-
-    if (!floor_ok(trace_endpos))
-        return trace_endpos;
-
-    tracebox(last_point + walknode_boxup, walknode_boxmin,walknode_boxmax, point + walknode_boxup, MOVE_WORLDONLY, self);
-    if(trace_fraction != 1.0)
-        return trace_endpos;
-
-    pathlib_movenode_goodnode = 1;
-    return point;
-}
-
-var float pathlib_cost(entity parent,vector to, float static_cost);
-float pathlib_g_static(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_static_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + static_cost * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + static_cost;
-}
-
-float pathlib_g_euclidean(entity parent,vector to, float static_cost)
-{
-    return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-float pathlib_g_euclidean_water(entity parent,vector to, float static_cost)
-{
-    if(inwater(to))
-        return parent.pathlib_node_g + vlen(parent.origin - to) * pathlib_movecost_waterfactor;
-    else
-        return parent.pathlib_node_g + vlen(parent.origin - to);
-}
-
-var float(vector from,vector to) pathlib_heuristic;
-
-/**
-    Manhattan Menas we expect to move up,down left or right
-    No diagonal moves espected. (like moving bewteen city blocks)
-**/
-float pathlib_h_manhattan(vector a,vector b)
-{
-    //h(n) = D * (abs(n.x-goal.x) + abs(n.y-goal.y))
-
-    float h;
-    h  = fabs(a.x - b.x);
-    h += fabs(a.y - b.y);
-    h *= pathlib_gridsize;
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves
-    to have teh same cost.
-**/
-float pathlib_h_diagonal(vector a,vector b)
-{
-    //h(n) = D * max(abs(n.x-goal.x), abs(n.y-goal.y))
-    float h,x,y;
-
-    x = fabs(a.x - b.x);
-    y = fabs(a.y - b.y);
-    h = pathlib_movecost * max(x,y);
-
-    return h;
-}
-
-/**
-    This heuristic only considers the stright line distance.
-    Will usualy mean a lower H then G meaning A* Will speand more
-    and run slower.
-**/
-float pathlib_h_euclidean(vector a,vector b)
-{
-    return vlen(a - b);
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-**/
-float pathlib_h_diagonal2(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y;
-
-    /*
-    h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-    */
-
-    x = fabs(a.x - b.x);
-    y = fabs(a.y - b.y);
-
-    h_diag = min(x,y);
-    h_str = x + y;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
-
-/**
-    This heuristic consider both stright and disagonal moves,
-    But has a separate cost for diagonal moves.
-
-
-**/
-float pathlib_h_diagonal2sdp(vector preprev,vector prev,vector point,vector end)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-
-    x = fabs(point.x - end.x);
-    y = fabs(point.y - end.y);
-    z = fabs(point.z - end.z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    float m;
-    vector d1,d2;
-
-    d1 = normalize(preprev - point);
-    d2 = normalize(prev    - point);
-    m = vlen(d1-d2);
-    //bprint("pathlib_h_diagonal2sdp-M = ",ftos(m),"\n");
-
-    return h * m;
-}
-
-
-float pathlib_h_diagonal3(vector a,vector b)
-{
-    float h_diag,h_str,h,x,y,z;
-
-    //h_diagonal(n) = min(abs(n.x-goal.x), abs(n.y-goal.y))
-    //h_straight(n) = (abs(n.x-goal.x) + abs(n.y-goal.y))
-    //h(n) = D2 * h_diagonal(n) + D * (h_straight(n) - 2*h_diagonal(n)))
-
-    x = fabs(a.x - b.x);
-    y = fabs(a.y - b.y);
-    z = fabs(a.z - b.z);
-
-    h_diag = min3(x,y,z);
-    h_str = x + y + z;
-
-    h =  pathlib_movecost_diag * h_diag;
-    h += pathlib_movecost * (h_str - 2 * h_diag);
-
-    return h;
-}
-
-const float PATHLIB_NODEEXPIRE = 0.05;
-float pathlib_scraplist_cnt;
-entity newnode()
-{
-    entity n;
-#ifdef PATHLIB_USE_NODESCRAP
-    if(pathlib_scraplist_cnt)
-    {
-        n = findentity(world,owner,scraplist);
-        if(n)
-        {
-            --pathlib_scraplist_cnt;
-            ++pathlib_recycle_cnt;
-            return n;
-        }
-        else
-            pathlib_scraplist_cnt = 0;
-    }
-#endif
-    ++pathlib_made_cnt;
-    n = spawn();
-    n.think      = SUB_Remove;
-    n.nextthink  = time + PATHLIB_NODEEXPIRE;
-    return n;
-}
-
-void dumpnode(entity n)
-{
-#ifdef PATHLIB_USE_NODESCRAP
-    ++pathlib_scraplist_cnt;
-
-    n.path_next    = world;
-    n.path_prev    = world;
-    n.is_path_node = false;
-    n.owner        = scraplist;
-#else
-    //n.is_path_node = false;
-    n.think        = SUB_Remove;
-    n.nextthink    = time;
-#endif
-}
-
-entity pathlib_mknode(vector where,entity parent)
-{
-    entity node;
-
-    node              = newnode();
-    node.is_path_node = true;
-    node.owner        = openlist;
-    node.path_prev    = parent;
-
-    setorigin(node, where);
-
-    ++pathlib_open_cnt;
-
-    node.medium = pointcontents(where);
-
-    return node;
-}
-
-var float pathlib_expandnode(entity node, vector start, vector goal);
-float pathlib_expandnode_star(entity node, vector start, vector goal);
-float pathlib_expandnode_box(entity node, vector start, vector goal);
-
-var float pathlib_makenode(entity parent,vector start, vector to, vector goal,float cost);
-float pathlib_makenode_adaptive(entity parent,vector start, vector to, vector goal,float cost)
-{
-    entity node;
-    float h,g,f,doedge;
-    vector where;
-
-    ++pathlib_searched_cnt;
-
-    if(inwater(parent.origin))
-    {
-        pathlib_expandnode = pathlib_expandnode_box;
-        pathlib_movenode   = pathlib_swimnode;
-       doedge = 0;
-    }
-    else
-    {
-        if(inwater(to))
-        {
-            pathlib_expandnode = pathlib_expandnode_box;
-            pathlib_movenode   = pathlib_swimnode;
-           doedge = 0;
-        }
-        else
-        {
-
-            pathlib_expandnode = pathlib_expandnode_star;
-            pathlib_movenode   = pathlib_walknode;
-            doedge = 1;
-        }
-    }
-
-    where = pathlib_movenode(parent.origin,to,0);
-    if (!pathlib_movenode_goodnode)
-        return 0;
-
-    if(doedge)
-    if(edge_check(where,pathlib_edge_check_size))
-        return 0;
-
-    if(parent.path_prev)
-        pathlib_h_diagonal2sdp(parent.path_prev.origin,parent.origin,where,goal);
-
-    h = pathlib_heuristic(where,goal);
-    g = pathlib_cost(parent,where,cost);
-    f = g + h;
-
-    node = findradius(where,pathlib_gridsize * 0.75);
-    while(node)
-    {
-        if(node.is_path_node == true)
-        {
-            ++pathlib_merge_cnt;
-            if(node.owner == openlist)
-            {
-                if(node.pathlib_node_g > g)
-                {
-                    node.pathlib_node_h = h;
-                    node.pathlib_node_g = g;
-                    node.pathlib_node_f = f;
-                    node.path_prev = parent;
-                }
-
-                if (!best_open_node)
-                    best_open_node = node;
-                else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-                    best_open_node = node;
-            }
-
-            return 1;
-        }
-        node = node.chain;
-    }
-
-    node = pathlib_mknode(where,parent);
-    node.pathlib_node_h = h;
-    node.pathlib_node_g = g;
-    node.pathlib_node_f = f;
-
-    if (!best_open_node)
-        best_open_node = node;
-    else if(best_open_node.pathlib_node_f > node.pathlib_node_f)
-        best_open_node = node;
-
-    return 1;
-}
-
-entity pathlib_getbestopen()
-{
-    entity node;
-    entity bestnode;
-
-    if(best_open_node)
-    {
-        ++pathlib_bestcash_hits;
-        pathlib_bestcash_saved += pathlib_open_cnt;
-
-        return best_open_node;
-    }
-
-    node = findchainentity(owner,openlist);
-    if(!node)
-        return world;
-
-    bestnode = node;
-    while(node)
-    {
-        ++pathlib_bestopen_seached;
-        if(node.pathlib_node_f < bestnode.pathlib_node_f)
-            bestnode = node;
-
-        node = node.chain;
-    }
-
-    return bestnode;
-}
-
-void pathlib_close_node(entity node,vector goal)
-{
-
-    if(node.owner == closedlist)
-    {
-        LOG_TRACE("Pathlib: Tried to close a closed node!\n");
-        return;
-    }
-
-    if(node == best_open_node)
-        best_open_node = world;
-
-    ++pathlib_closed_cnt;
-    --pathlib_open_cnt;
-
-    node.owner = closedlist;
-
-    if(vlen(node.origin - goal) <= pathlib_gridsize)
-    {
-        vector goalmove;
-
-        goalmove = pathlib_walknode(node.origin,goal,1);
-        if(pathlib_movenode_goodnode)
-        {
-            goal_node         = node;
-            pathlib_foundgoal = true;
-        }
-    }
-}
-
-float pathlib_expandnode_star(entity node, vector start, vector goal)
-{
-    vector point;
-    vector where;
-    float nodecnt = 0;
-
-    where = node.origin;
-
-    v_forward = '1 0 0';
-    v_right   = '0 1 0';
-
-    // Forward
-    point = where + v_forward * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Back
-    point = where - v_forward * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Right
-    point = where + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Left
-    point = where - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost);
-
-    // Forward-right
-    point = where + v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Forward-left
-    point = where + v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-right
-    point = where - v_forward * pathlib_gridsize + v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    // Back-left
-    point = where - v_forward * pathlib_gridsize - v_right * pathlib_gridsize;
-    nodecnt += pathlib_makenode(node,start,point,goal,pathlib_movecost_diag);
-
-    return pathlib_open_cnt;
-}
-
-float pathlib_expandnode_box(entity node, vector start, vector goal)
-{
-    vector v;
-
-    for(v.z = node.origin.z - pathlib_gridsize; v.z <= node.origin.z + pathlib_gridsize; v.z += pathlib_gridsize)
-    for(v.y = node.origin.y - pathlib_gridsize; v.y <= node.origin.y + pathlib_gridsize; v.y += pathlib_gridsize)
-    for(v.x = node.origin.x - pathlib_gridsize; v.x <= node.origin.x + pathlib_gridsize; v.x += pathlib_gridsize)
-    {
-        if(vlen(v - node.origin))
-            pathlib_makenode(node,start,v,goal,pathlib_movecost);
-    }
-
-    return pathlib_open_cnt;
-}
-
-void pathlib_cleanup()
-{
-    entity node;
-
-    node = findfloat(world,is_path_node, true);
-    while(node)
-    {
-        dumpnode(node);
-        node = findfloat(node,is_path_node, true);
-    }
-
-    if(openlist)
-        remove(openlist);
-
-    if(closedlist)
-        remove(closedlist);
-
-    best_open_node = world;
-    openlist       = world;
-    closedlist     = world;
-}
-
-var float buildpath_nodefilter(vector n,vector c,vector p);
-float buildpath_nodefilter_directional(vector n,vector c,vector p)
-{
-    vector d1,d2;
-
-    d2 = normalize(p - c);
-    d1 = normalize(c - n);
-
-    if(vlen(d1-d2) < 0.25)
-        return 1;
-
-    return 0;
-}
-
-float buildpath_nodefilter_moveskip(vector n,vector c,vector p)
-{
-    pathlib_walknode(p,n,1);
-    if(pathlib_movenode_goodnode)
-        return 1;
-
-    return 0;
-}
-
-entity path_build(entity next, vector where, entity prev, entity start)
-{
-    entity path;
-
-    if(prev && next)
-        if(buildpath_nodefilter)
-            if(buildpath_nodefilter(next.origin,where,prev.origin))
-                return next;
-
-
-    path           = spawn();
-    path.owner     = start;
-    path.path_next = next;
-
-    setorigin(path,where);
-
-    if(!next)
-        path.classname = "path_end";
-    else
-    {
-        if(!prev)
-            path.classname = "path_start";
-        else
-            path.classname = "path_node";
-    }
-
-    return path;
-}
-
-entity pathlib_astar(vector from,vector to)
-{
-    entity path, start, end, open, n, ln;
-    float ptime, ftime, ctime;
-
-    ptime = gettime(GETTIME_REALTIME);
-
-    pathlib_cleanup();
-
-    // Select water<->land capable node make/link
-    pathlib_makenode     = pathlib_makenode_adaptive;
-    // Select XYZ cost estimate
-    pathlib_heuristic    = pathlib_h_diagonal3;
-    // Select distance + waterfactor cost
-    pathlib_cost         = pathlib_g_euclidean_water;
-    // Select star expander
-    pathlib_expandnode   = pathlib_expandnode_star;
-    // Select walk simulation movement test
-    pathlib_movenode     = pathlib_walknode;
-    // Filter final nodes by direction
-    buildpath_nodefilter = buildpath_nodefilter_directional;
-
-    // If the start is in water we need diffrent settings
-    if(inwater(from))
-    {
-        // Select volumetric node expaner
-        pathlib_expandnode = pathlib_expandnode_box;
-
-        // Water movement test
-        pathlib_movenode   = pathlib_swimnode;
-    }
-
-    if (!openlist)
-        openlist       = spawn();
-
-    if (!closedlist)
-        closedlist     = spawn();
-
-    if (!scraplist)
-        scraplist      = spawn();
-
-    pathlib_closed_cnt       = 0;
-    pathlib_open_cnt         = 0;
-    pathlib_made_cnt         = 0;
-    pathlib_merge_cnt        = 0;
-    pathlib_searched_cnt     = 0;
-    pathlib_bestopen_seached = 0;
-    pathlib_bestcash_hits    = 0;
-    pathlib_bestcash_saved   = 0;
-    pathlib_recycle_cnt      = 0;
-
-    pathlib_gridsize       = 128;
-    pathlib_movecost       = pathlib_gridsize;
-    pathlib_movecost_diag  = vlen(('1 1 0' * pathlib_gridsize));
-    pathlib_movecost_waterfactor = 1.1;
-    pathlib_foundgoal      = 0;
-
-    walknode_boxmax   = self.maxs * 1.5;
-    walknode_boxmin   = self.mins * 1.5;
-
-    pathlib_edge_check_size = (vlen(walknode_boxmin - walknode_boxmax) * 0.5);
-
-    walknode_boxup    = '0 0 2' * self.maxs.z;
-    walknode_stepsize = 32;
-    walknode_stepup   = '0 0 1' * walknode_stepsize;
-    walknode_maxdrop  = '0 0 3' * walknode_stepsize;
-
-    from.x = fsnap(from.x,pathlib_gridsize);
-    from.y = fsnap(from.y,pathlib_gridsize);
-
-    to.x = fsnap(to.x,pathlib_gridsize);
-    to.y = fsnap(to.y,pathlib_gridsize);
-
-    LOG_TRACE("AStar init. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n");
-    path = pathlib_mknode(from,world);
-    pathlib_close_node(path,to);
-    if(pathlib_foundgoal)
-    {
-        LOG_TRACE("AStar: Goal found on first node!\n");
-
-        open           = spawn();
-        open.owner     = open;
-        open.classname = "path_end";
-        setorigin(open,path.origin);
-
-        pathlib_cleanup();
-
-        return open;
-    }
-
-    if(pathlib_expandnode(path,from,to) <= 0)
-    {
-        LOG_TRACE("AStar path fail.\n");
-        pathlib_cleanup();
-
-        return world;
-    }
-
-    best_open_node = pathlib_getbestopen();
-    n = best_open_node;
-    pathlib_close_node(best_open_node,to);
-    if(inwater(n.origin))
-        pathlib_expandnode_box(n,from,to);
-    else
-        pathlib_expandnode_star(n,from,to);
-
-    while(pathlib_open_cnt)
-    {
-        best_open_node = pathlib_getbestopen();
-        n = best_open_node;
-        pathlib_close_node(best_open_node,to);
-
-        if(inwater(n.origin))
-            pathlib_expandnode_box(n,from,to);
-        else
-            pathlib_expandnode(n,from,to);
-
-        if(pathlib_foundgoal)
-        {
-            LOG_TRACE("Target found. Rebuilding and filtering path...\n");
-            ftime = gettime(GETTIME_REALTIME);
-            ptime = ftime - ptime;
-
-            start = path_build(world,path.origin,world,world);
-            end   = path_build(world,goal_node.origin,world,start);
-            ln    = end;
-
-            open = goal_node;
-            for(open = goal_node; open.path_prev != path; open = open.path_prev)
-            {
-                n    = path_build(ln,open.origin,open.path_prev,start);
-                ln.path_prev = n;
-                ln = n;
-            }
-            start.path_next = n;
-            n.path_prev = start;
-            ftime = gettime(GETTIME_REALTIME) - ftime;
-
-            ctime = gettime(GETTIME_REALTIME);
-            pathlib_cleanup();
-            ctime = gettime(GETTIME_REALTIME) - ctime;
-
-
-#ifdef DEBUGPATHING
-            pathlib_showpath2(start);
-
-            LOG_TRACE("Time used -      pathfinding: ", ftos(ptime),"\n");
-            LOG_TRACE("Time used - rebuild & filter: ", ftos(ftime),"\n");
-            LOG_TRACE("Time used -          cleanup: ", ftos(ctime),"\n");
-            LOG_TRACE("Time used -            total: ", ftos(ptime + ftime + ctime),"\n");
-            LOG_TRACE("Time used -         # frames: ", ftos(ceil((ptime + ftime + ctime) / sys_frametime)),"\n\n");
-            LOG_TRACE("Nodes -         created: ", ftos(pathlib_made_cnt),"\n");
-            LOG_TRACE("Nodes -            open: ", ftos(pathlib_open_cnt),"\n");
-            LOG_TRACE("Nodes -          merged: ", ftos(pathlib_merge_cnt),"\n");
-            LOG_TRACE("Nodes -          closed: ", ftos(pathlib_closed_cnt),"\n");
-            LOG_TRACE("Nodes -        searched: ", ftos(pathlib_searched_cnt),"\n");
-
-        if(pathlib_recycle_cnt)
-            LOG_TRACE("Nodes -      make/reuse: ", ftos(pathlib_made_cnt / pathlib_recycle_cnt),"\n");
-        if(pathlib_recycle_cnt)
-            LOG_TRACE("Nodes -          reused: ", ftos(pathlib_recycle_cnt),"\n");
-
-            LOG_TRACE("Nodes bestopen searched: ", ftos(pathlib_bestopen_seached),"\n");
-            LOG_TRACE("Nodes bestcash -   hits: ", ftos(pathlib_bestcash_hits),"\n");
-            LOG_TRACE("Nodes bestcash -   save: ", ftos(pathlib_bestcash_saved),"\n");
-            LOG_TRACE("AStar done. ", ftos(pathlib_scraplist_cnt), " nodes on scrap\n\n");
-#endif
-            return start;
-        }
-    }
-
-    LOG_TRACE("A* Faild to find a path! Try a smaller gridsize.\n");
-
-    pathlib_cleanup();
-
-    return world;
-}
diff --git a/qcsrc/server/pathlib.qh b/qcsrc/server/pathlib.qh
deleted file mode 100644 (file)
index da4ae0c..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-#ifndef PATHLIB_H
-#define PATHLIB_H
-
-//#define PATHLIB_RDFIELDS
-#ifdef PATHLIB_RDFIELDS
-    #define path_next swampslug
-    #define path_prev lasertarget
-#else
-    .entity path_next;
-    .entity path_prev;
-#endif
-
-entity openlist;
-entity closedlist;
-entity scraplist;
-
-.float pathlib_node_g;
-.float pathlib_node_h;
-.float pathlib_node_f;
-
-float pathlib_open_cnt;
-float pathlib_closed_cnt;
-float pathlib_made_cnt;
-float pathlib_merge_cnt;
-float pathlib_recycle_cnt;
-float pathlib_searched_cnt;
-
-float pathlib_bestopen_seached;
-float pathlib_bestcash_hits;
-float pathlib_bestcash_saved;
-
-float pathlib_gridsize;
-
-float pathlib_movecost;
-float pathlib_movecost_diag;
-float pathlib_movecost_waterfactor;
-
-float pathlib_edge_check_size;
-
-float pathlib_foundgoal;
-entity goal_node;
-
-entity best_open_node;
-.float is_path_node;
-
-#define inwater(point) (pointcontents(point) == CONTENT_WATER)
-
-#endif
index 878e8fd5b113fda6f8e03a6fb6f2b04521999d85..3e452f66e7dc02dbf2937410c44e08ba8684f95d 100644 (file)
@@ -1,4 +1,4 @@
-#include "../pathlib.qh"
+#include "pathlib.qh"
 
 float pathlib_g_static(entity parent,vector to, float static_cost)
 {
index 09dae70edcbfa192dd6dd136f3eeec6197f69f3b..37e167aae71064e0b87c927aaf8f730058b92e0b 100644 (file)
@@ -1,4 +1,4 @@
-#include "../pathlib.qh"
+#include "pathlib.qh"
 
 MODEL(SQUARE,       "models/pathlib/square.md3");
 MODEL(SQUARE_GOOD,  "models/pathlib/goodsquare.md3");
index 7501b63607be225e551f2c4696879acf7fff14d4..30fa073849d9f9b5827a050a5b269ce1b7269b03 100644 (file)
@@ -414,14 +414,14 @@ void Portal_Remove(entity portal, float killed)
        if(killed)
        {
                fixedmakevectors(portal.mangle);
-               sound(portal, CH_SHOTS, "porto/explode.wav", VOL_BASE, ATTEN_NORM);
+               sound(portal, CH_SHOTS, SND_PORTO_EXPLODE, VOL_BASE, ATTEN_NORM);
                Send_Effect(EFFECT_ROCKET_EXPLODE, portal.origin + v_forward * 16, v_forward * 1024, 4);
                remove(portal);
        }
        else
        {
                Portal_MakeBrokenPortal(portal);
-               sound(portal, CH_SHOTS, "porto/expire.wav", VOL_BASE, ATTEN_NORM);
+               sound(portal, CH_SHOTS, SND_PORTO_EXPIRE, VOL_BASE, ATTEN_NORM);
                SUB_SetFade(portal, time, 0.5);
        }
 }
index 069c964590595c381586967b3b13619b6fa4f6e9..4eceb36b98584c25035c9447ac24e40266c83934 100644 (file)
@@ -30,7 +30,6 @@
 #include "mapvoting.qc"
 #include "miscfunctions.qc"
 #include "movelib.qc"
-// #include "pathlib.qc" // TODO: was never used. Seems to duplicate `pathlib/`
 #include "playerdemo.qc"
 #include "portals.qc"
 #include "race.qc"
 #include "../common/turrets/sv_turrets.qc"
 #include "../common/turrets/config.qc"
 #include "../common/turrets/util.qc"
-#include "../common/turrets/turrets.qc"
+#include "../common/turrets/all.qc"
 #include "../common/turrets/checkpoint.qc"
 #include "../common/turrets/targettrigger.qc"
 #include "../common/weapons/config.qc"
index 948e2d37435cdc392bce62b4bb52045fdb2f4054..138051827bcad56fac48d9ed1f993596a8f405cc 100644 (file)
@@ -90,7 +90,7 @@ void CreatureFrame (void)
                                                if (self.watersound_finished < time)
                                                {
                                                        self.watersound_finished = time + 0.5;
-                                                       sound (self, CH_PLAYER_SINGLE, "player/lava.wav", VOL_BASE, ATTEN_NORM);
+                                                       sound (self, CH_PLAYER_SINGLE, SND_LAVA, VOL_BASE, ATTEN_NORM);
                                                }
                                                Damage (self, world, world, autocvar_g_balance_contents_playerdamage_lava * autocvar_g_balance_contents_damagerate * self.waterlevel, DEATH_LAVA, self.origin, '0 0 0');
                                        }
@@ -99,7 +99,7 @@ void CreatureFrame (void)
                                                if (self.watersound_finished < time)
                                                {
                                                        self.watersound_finished = time + 0.5;
-                                                       sound (self, CH_PLAYER_SINGLE, "player/slime.wav", VOL_BASE, ATTEN_NORM);
+                                                       sound (self, CH_PLAYER_SINGLE, SND_SLIME, VOL_BASE, ATTEN_NORM);
                                                }
                                                Damage (self, world, world, autocvar_g_balance_contents_playerdamage_slime * autocvar_g_balance_contents_damagerate * self.waterlevel, DEATH_SLIME, self.origin, '0 0 0');
                                        }
index bfdcdb860e267fff7a385d17fa76cd4c6fa4c3ab..067e0140976fb18399e1f71ec32247933d6cbac5 100644 (file)
@@ -3,7 +3,6 @@
 
 #define objerror builtin_objerror
 #define droptofloor builtin_droptofloor
-#define sound builtin_sound
 #define remove builtin_remove
 #define cvar_set builtin_cvar_set
 #define cvar_string builtin_cvar_string
index c256d4df9022dc6a9fa7b8de864f2506737603fb..015d4aeb2cae9d50b22bd734a824a48e150b2e34 100644 (file)
@@ -436,11 +436,11 @@ void Item_Respawn (void)
        Item_Show(self, 1);
        // this is ugly...
        if(self.items == ITEM_Strength.m_itemid)
-               sound (self, CH_TRIGGER, "misc/strength_respawn.wav", VOL_BASE, ATTEN_NORM);    // play respawn sound
+               sound (self, CH_TRIGGER, SND_STRENGTH_RESPAWN, VOL_BASE, ATTEN_NORM);   // play respawn sound
        else if(self.items == ITEM_Shield.m_itemid)
-               sound (self, CH_TRIGGER, "misc/shield_respawn.wav", VOL_BASE, ATTEN_NORM);      // play respawn sound
+               sound (self, CH_TRIGGER, SND_SHIELD_RESPAWN, VOL_BASE, ATTEN_NORM);     // play respawn sound
        else
-               sound (self, CH_TRIGGER, "misc/itemrespawn.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
+               sound (self, CH_TRIGGER, SND_ITEMRESPAWN, VOL_BASE, ATTEN_NORM);        // play respawn sound
        setorigin (self, self.origin);
 
     if (Item_ItemsTime_Allow(self.itemdef, self.weapons))
@@ -472,15 +472,24 @@ void Item_RespawnCountdown (void)
                if(self.count == 1)
                {
                        MUTATOR_CALLHOOK(Item_RespawnCountdown, string_null, '0 0 0');
-                       int wpextra = 0;
-            entity e = self.itemdef;
-            if (e) wpextra = e.m_id;
-                       if (self.flags & FL_WEAPON) {
-                               entity wi = get_weaponinfo(self.weapon);
-                               if (wi) wpextra = wi.m_id;
-                       }
-            entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP);
-            wp.wp_extra = wpextra;
+                       do {
+                               {
+                                       entity wi = get_weaponinfo(self.weapon);
+                                       if (wi.m_id) {
+                                               entity wp = WaypointSprite_Spawn(WP_Weapon, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP);
+                                               wp.wp_extra = wi.m_id;
+                                               break;
+                                       }
+                               }
+                               {
+                                       entity ii = self.itemdef;
+                                       if (ii.m_id) {
+                                               entity wp = WaypointSprite_Spawn(WP_Item, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP);
+                                               wp.wp_extra = ii.m_id;
+                                               break;
+                                       }
+                               }
+                       } while (0);
             if(self.waypointsprite_attached)
             {
                 GameItem def = self.itemdef;
@@ -498,7 +507,7 @@ void Item_RespawnCountdown (void)
                                if(self.waypointsprite_visible_for_player(e))
                                {
                                        msg_entity = e;
-                                       soundto(MSG_ONE, this, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTEN_NORM);      // play respawn sound
+                                       soundto(MSG_ONE, this, CH_TRIGGER, SND(ITEMRESPAWNCOUNTDOWN), VOL_BASE, ATTEN_NORM);    // play respawn sound
                                }
                        setself(this);
 
@@ -506,7 +515,7 @@ void Item_RespawnCountdown (void)
                        //WaypointSprite_UpdateHealth(self.waypointsprite_attached, self.count);
                }
                else
-                       sound(self, CH_TRIGGER, "misc/itemrespawncountdown.wav", VOL_BASE, ATTEN_NORM); // play respawn sound
+                       sound(self, CH_TRIGGER, SND_ITEMRESPAWNCOUNTDOWN, VOL_BASE, ATTEN_NORM);        // play respawn sound
        }
 }
 
@@ -750,7 +759,7 @@ void Item_Touch (void)
        other.last_pickup = time;
 
        Send_Effect(EFFECT_ITEM_PICKUP, CENTER_OR_VIEWOFS(self), '0 0 0', 1);
-       sound (other, CH_TRIGGER, self.item_pickupsound, VOL_BASE, ATTEN_NORM);
+       _sound (other, CH_TRIGGER, (self.item_pickupsound ? self.item_pickupsound : self.item_pickupsound_ent.sound_str()), VOL_BASE, ATTEN_NORM);
 
        if (self.classname == "droppedweapon")
                remove (self);
@@ -1119,14 +1128,6 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
                precache_model (self.model);
                precache_sound (self.item_pickupsound);
 
-               precache_sound ("misc/itemrespawncountdown.wav");
-               if(itemid == ITEM_Strength.m_itemid)
-                       precache_sound ("misc/strength_respawn.wav");
-               else if(itemid == ITEM_Shield.m_itemid)
-                       precache_sound ("misc/shield_respawn.wav");
-               else
-                       precache_sound ("misc/itemrespawn.wav");
-
                if((itemflags & (FL_POWERUP | FL_WEAPON)) || (itemid & (IT_HEALTH | IT_ARMOR | IT_KEY1 | IT_KEY2)))
                        self.target = "###item###"; // for finding the nearest item using find()
 
@@ -1196,17 +1197,10 @@ void StartItem (string itemmodel, string pickupsound, float defaultrespawntime,
        }
 }
 
-string Item_Model(string item_mdl)
-{
-       string output = strcat("models/items/", item_mdl);
-       MUTATOR_CALLHOOK(ItemModel, item_mdl, output);
-       return strzone(item_model_output);
-}
-
 void StartItemA (entity a)
 {SELFPARAM();
     self.itemdef = a;
-    StartItem(Item_Model(a.m_model), a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue);
+    StartItem(strzone(a.m_model.model_str()), a.m_sound, a.m_respawntime(), a.m_respawntimejitter(), a.m_name, a.m_itemid, 0, a.m_itemflags, a.m_pickupevalfunc, a.m_botvalue);
 }
 
 spawnfunc(item_rockets)
@@ -1371,7 +1365,6 @@ spawnfunc(item_health100) { spawnfunc_item_health_mega(this); }
 
 spawnfunc(item_strength)
 {
-               precache_sound("weapons/strength_fire.wav");
                if(!self.strength_finished)
                        self.strength_finished = autocvar_g_balance_powerup_strength_time;
                StartItemA (ITEM_Strength);
@@ -1425,13 +1418,6 @@ spawnfunc(target_items)
        if(!self.superweapons_finished)
                self.superweapons_finished = autocvar_g_balance_superweapons_time;
 
-       precache_sound("misc/itempickup.wav");
-       precache_sound("misc/megahealth.wav");
-       precache_sound("misc/armor25.wav");
-       precache_sound("misc/powerup.wav");
-       precache_sound("misc/poweroff.wav");
-       precache_sound(W_Sound("weaponpickup"));
-
        n = tokenize_console(self.netname);
        if(argv(0) == "give")
        {
@@ -1660,12 +1646,12 @@ void GiveSound(entity e, float v0, float v1, float t, string snd_incr, string sn
        if(v1 <= v0 - t)
        {
                if(snd_decr != "")
-                       sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM);
+                       _sound (e, CH_TRIGGER, snd_decr, VOL_BASE, ATTEN_NORM);
        }
        else if(v0 >= v0 + t)
        {
                if(snd_incr != "")
-                       sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM);
+                       _sound (e, CH_TRIGGER, snd_incr, VOL_BASE, ATTEN_NORM);
        }
 }
 
@@ -1831,31 +1817,31 @@ float GiveItems(entity e, float beginarg, float endarg)
                op = OP_SET;
        }
 
-       POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, "misc/itempickup.wav", string_null);
-       POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, "misc/powerup.wav", "misc/poweroff.wav");
-       POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, "misc/powerup.wav", "misc/poweroff.wav");
-       POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, "misc/itempickup.wav", string_null);
+       POSTGIVE_BIT(e, items, ITEM_JetpackRegen.m_itemid, SND(ITEMPICKUP), string_null);
+       POSTGIVE_BIT(e, items, IT_UNLIMITED_SUPERWEAPONS, SND(POWERUP), SND(POWEROFF));
+       POSTGIVE_BIT(e, items, IT_UNLIMITED_WEAPON_AMMO, SND(POWERUP), SND(POWEROFF));
+       POSTGIVE_BIT(e, items, ITEM_Jetpack.m_itemid, SND(ITEMPICKUP), string_null);
        for(j = WEP_FIRST; j <= WEP_LAST; ++j)
        {
                wi = get_weaponinfo(j);
                if(wi.weapon)
                {
-                       POSTGIVE_WEAPON(e, j, W_Sound("weaponpickup"), string_null);
+                       POSTGIVE_WEAPON(e, j, SND(WEAPONPICKUP), string_null);
                        if (!(save_weapons & WepSet_FromWeapon(j)))
                                if(e.weapons & WepSet_FromWeapon(j))
                                        WEP_ACTION(wi.weapon, WR_INIT);
                }
        }
-       POSTGIVE_VALUE(e, strength_finished, 1, "misc/powerup.wav", "misc/poweroff.wav");
-       POSTGIVE_VALUE(e, invincible_finished, 1, "misc/powerup_shield.wav", "misc/poweroff.wav");
-       POSTGIVE_VALUE(e, ammo_nails, 0, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE(e, ammo_cells, 0, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE(e, ammo_plasma, 0, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE(e, ammo_shells, 0, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE(e, ammo_rockets, 0, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, "misc/itempickup.wav", string_null);
-       POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/armor25.wav", string_null);
-       POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, "misc/megahealth.wav", string_null);
+       POSTGIVE_VALUE(e, strength_finished, 1, SND(POWERUP), SND(POWEROFF));
+       POSTGIVE_VALUE(e, invincible_finished, 1, "misc/powerup_shield.wav", SND(POWEROFF));
+       POSTGIVE_VALUE(e, ammo_nails, 0, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE(e, ammo_cells, 0, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE(e, ammo_plasma, 0, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE(e, ammo_shells, 0, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE(e, ammo_rockets, 0, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE_ROT(e, ammo_fuel, 1, pauserotfuel_finished, autocvar_g_balance_pause_fuel_rot, pauseregen_finished, autocvar_g_balance_pause_fuel_regen, SND(ITEMPICKUP), string_null);
+       POSTGIVE_VALUE_ROT(e, armorvalue, 1, pauserotarmor_finished, autocvar_g_balance_pause_armor_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(ARMOR25), string_null);
+       POSTGIVE_VALUE_ROT(e, health, 1, pauserothealth_finished, autocvar_g_balance_pause_health_rot, pauseregen_finished, autocvar_g_balance_pause_health_regen, SND(MEGAHEALTH), string_null);
 
        if(e.superweapons_finished <= 0)
                if(self.weapons & WEPSET_SUPERWEAPONS)
index db712933d0bd4c31359071ceb26c831de5e34104..f1720757f6607564db7f1a89083570178afac39b 100644 (file)
@@ -30,7 +30,7 @@ void W_PlayStrengthSound(entity player) // void W_PlayStrengthSound
                && ((time > player.prevstrengthsound + autocvar_sv_strengthsound_antispam_time) // prevent insane sound spam
                || (time > player.prevstrengthsoundattempt + autocvar_sv_strengthsound_antispam_refire_threshold)))
                {
-                       sound(player, CH_TRIGGER, W_Sound("strength_fire"), VOL_BASE, ATTEN_NORM);
+                       sound(player, CH_TRIGGER, SND_STRENGTH_FIRE, VOL_BASE, ATTEN_NORM);
                        player.prevstrengthsound = time;
                }
                player.prevstrengthsoundattempt = time;
index de240ce2ef66997ddbec1bf6d5d50c437f51ee7e..ce464c18e49252562f12f5b2b17e8dcd0716a9dc 100644 (file)
@@ -63,7 +63,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain)
                                if (complain)
                                if(IS_REAL_CLIENT(cl))
                                {
-                                       play2(cl, W_Sound("unavailable"));
+                                       play2(cl, SND(UNAVAILABLE));
                                        Send_WeaponComplain (cl, wpn, 0);
                                }
                                return false;
@@ -107,7 +107,7 @@ float client_hasweapon(entity cl, float wpn, float andammo, float complain)
                        Send_WeaponComplain (cl, wpn, 2);
                }
 
-               play2(cl, W_Sound("unavailable"));
+               play2(cl, SND(UNAVAILABLE));
        }
        return false;
 }
index 202b29fda738118ae1e2d282350993e2db822a30..81261383f5f061b3aeeb001fb4e2e0c1bd7a2179 100644 (file)
@@ -177,7 +177,8 @@ void weapon_defaultspawnfunc(float wpn)
        if(self.team)
                f |= FL_NO_WEAPON_STAY;
 
-       StartItem(e.model, "weapons/weaponpickup.wav", self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
+       StartItem(e.model, string_null, self.respawntime, self.respawntimejitter, e.message, 0, e.weapon, f, weapon_pickupevalfunc, e.bot_pickupbasevalue);
+       self.item_pickupsound_ent = SND_WEAPONPICKUP;
        #if 0 // WEAPONTODO
        if (self.modelindex) // don't precache if self was removed
                WEP_ACTION(e.weapon, WR_INIT);
index 7c033fa889113363cbbd2626138a347ea8e0f697..69821aaaf6d84f42f79055407747e6f521e14d8c 100644 (file)
@@ -131,7 +131,7 @@ void W_SetupShot_Dir_ProjectileSize_Range(entity ent, vector s_forward, vector m
 
        if (snd != "")
        {
-               sound (ent, chan, snd, VOL_BASE, ATTN_NORM);
+               _sound (ent, chan, snd, VOL_BASE, ATTN_NORM);
                W_PlayStrengthSound(ent);
        }
 
@@ -287,7 +287,7 @@ void FireRailgunBullet (vector start, vector end, float bdamage, float bforce, f
                        if(f <= 0)
                                continue;
 
-                       snd = W_Sound(strcat("nexwhoosh", ftos(floor(random() * 3) + 1)));
+                       snd = SND(NEXWHOOSH_RANDOM());
 
                        if(!pseudoprojectile)
                                pseudoprojectile = spawn(); // we need this so the sound uses the "entchannel4" volume
index 076a172c8da323eb8e46e16bfddfbdddbfc87443..ba33c515ffea422da230ed8648cb308279ab1bf2 100644 (file)
@@ -474,7 +474,7 @@ float weapon_prepareattack_checkammo(float secondary)
 
                if(self.weapon == self.switchweapon && time - self.prevdryfire > 1) // only play once BEFORE starting to switch weapons
                {
-                       sound (self, CH_WEAPON_A, W_Sound("dryfire"), VOL_BASE, ATTEN_NORM);
+                       sound (self, CH_WEAPON_A, SND_DRYFIRE, VOL_BASE, ATTEN_NORM);
                        self.prevdryfire = time;
                }
 
@@ -732,7 +732,7 @@ void W_WeaponFrame()
                        if(ATTACK_FINISHED(self) <= time + self.weapon_frametime * 0.5)
                        {
                        #endif
-                               sound(self, CH_WEAPON_SINGLE, W_Sound("weapon_switch"), VOL_BASE, ATTN_NORM);
+                               sound(self, CH_WEAPON_SINGLE, SND_WEAPON_SWITCH, VOL_BASE, ATTN_NORM);
                                self.weaponentity.state = WS_DROP;
                                weapon_thinkf(WFRAME_DONTCHANGE, oldwep.switchdelay_drop, w_clear);
                        #ifndef INDEPENDENT_ATTACK_FINISHED
@@ -927,7 +927,7 @@ void W_Reload(float sent_ammo_min, string sent_sound)
        {
                if(IS_REAL_CLIENT(self) && self.reload_complain < time)
                {
-                       play2(self, W_Sound("unavailable"));
+                       play2(self, SND(UNAVAILABLE));
                        sprint(self, strcat("You don't have enough ammo to reload the ^2", WEP_NAME(self.weapon), "\n"));
                        self.reload_complain = time + 1;
                }
@@ -951,7 +951,7 @@ void W_Reload(float sent_ammo_min, string sent_sound)
 
        // now begin the reloading process
 
-       sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM);
+       _sound(self, CH_WEAPON_SINGLE, self.reload_sound, VOL_BASE, ATTEN_NORM);
 
        // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon,
        // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there,
diff --git a/tooltips.db b/tooltips.db
deleted file mode 100644 (file)
index 02887e6..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-0
-\XonoticSingleplayerDialog\Play the singleplayer campaign or instant action matches against bots
-
-
-\XonoticMultiplayerDialog\Play online, against your friends in LAN, view demos or change player settings
-\XonoticMultiplayerDialog/Servers\Find servers to play on
-\menu_slist_showempty\Show empty servers
-\menu_slist_showfull\Show full servers that have no slots available
-\net_slist_pause\Pause updating the server list to prevent servers from "jumping around"
-\XonoticMultiplayerDialog/Info...\Show more information about the currently highlighted server
-\XonoticMultiplayerDialog/Bookmark\Bookmark the currently highlighted server so that it's faster to find in the future
-\XonoticMultiplayerDialog/Create\Host your own game
-\XonoticMultiplayerDialog/Demos\Browse and view demos
-\XonoticMultiplayerDialog/Player Setup\Customize your player settings
-
-\XonoticTeamSelectDialog/join 'best' team (auto-select)\Autoselect team (recommended)
-\XonoticTeamSelectDialog/red\Join the red team
-\XonoticTeamSelectDialog/blue\Join the blue team
-\XonoticTeamSelectDialog/yellow\Join the yellow team
-\XonoticTeamSelectDialog/pink\Join the pink team
-
-\timelimit_override\Timelimit in minutes that when hit, will end the match
-\fraglimit_override\The amount of frags needed before the match will end
-\menu_maxplayers\The maximum amount of players or bots that can be connected to your server at once
-\bot_number\Amount of bots on your server
-\skill\Specify how experienced the bots will be
-\g_maplist_votable\Number of maps that are shown in the map voting at the end of a match
-\sv_vote_simple_majority_factor\Simple majority wins a vote
-\XonoticMultiplayerDialog/Advanced settings...\Advanced server settings
-\XonoticMultiplayerDialog/Mutators...\Mutators and weapon arenas
-\g_dodging\Enable dodging
-\g_cloaked\All players are almost invisible
-\g_footsteps\Enable footstep sounds
-\g_midair\Only possible to inflict damage on your enemy while he's airborne
-\g_vampire\Damage done to your enemy gets added to your own health
-\g_bloodloss\Amount of health below which your player gets stunned because of blood loss
-\sv_gravity\Make things fall to the ground slower, lower value means lower gravity
-\g_grappling_hook\Players spawn with the grappling hook
-\g_jetpack\Players spawn with the jetpack
-\g_pinata\Players will drop all weapons they possessed when they are killed
-\g_weapon_stay\Weapons stay after they are picked up
-\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
-\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
-\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
-\g_nix_with_laser\Always carry the laser as an additional weapon in Nix
-
-\XonoticMultiplayerDialog_StringFilterBox\Click here or Ctrl-F to provide a keyword to narrow down the maplist above. Ctrl-Delete to clear; Enter when done.
-\XonoticMultiplayerDialog/Add shown\Add the maps shown in Maplist above to your selection
-\XonoticMultiplayerDialog/Remove shown\Remove the maps shown in Maplist above from your selection
-\XonoticMultiplayerDialog/Add all\Add every available map to your selection
-\XonoticMultiplayerDialog/Remove all\Remove all the maps from your selection
-
-
-\XonoticMultiplayerDialog/Timedemo\Benchmark how fast your computer can run the highlighted demo
-
-\fov\Field of vision in degrees from 60 to 130, default is 90
-\cl_bobcycle\View bobbing frequency, disable for no bobbing
-\cl_zoomfactor\How big the zoom factor is when the zoom button is pressed
-\cl_zoomsensitivity\How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)
-\cl_zoomspeed\How fast the view will be zoomed, disable to zoom instantly
-\XonoticMultiplayerDialog/Weapon settings...\Set your most preferred weapons, autoswitch and weapon model settings
-
-\cl_weaponpriority_useforcycling\Make use of the list above when cycling through weapons with the mouse wheel
-\cl_autoswitch\Automatically switch to newly picked up weapons if they are better than what you are carrying
-\r_drawviewmodel\Draw the weapon model
-\cl_gunalign\Position of the weapon model; requires reconnect
-
-\crosshair_per_weapon\Set a different crosshair for each weapon, good if you play without weapon models
-\crosshair_color_per_weapon\Set the color of the crosshair depending on the weapon you are currently holding
-\crosshair_size\Adjust the size of the crosshair
-\crosshair_alpha\Adjust the opacity of the crosshair
-\crosshair_color\Adjust the crosshair color
-\sbar_hudselector\Use the old HUD layout
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Name under which you will appear in the game
-
-\XonoticSettingsDialog\Change the game settings
-\XonoticCreditsDialog\The Xonotic credits
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Quit the game
-\XonoticQuitDialog/Yes\Back to work...
-\XonoticQuitDialog/No\I got some more fragging to do!
-
-\XonoticSettingsDialog/Input\Input settings
-\sensitivity\Mouse speed multiplier
-\menu_mouse_speed\Mouse speed multiplier in the menu, does not affect aiming in the game
-\m_filter\Smoothes the mouse movement, but makes aiming slightly less responsive
-\m_pitch\Invert mouse movement on the Y-axis
-\vid_dgamouse\Make use of DGA mouse input
-\con_closeontoggleconsole\Allow the console toggling bind to also close the console
-
-\XonoticSettingsDialog/Video\Video settings
-\vid_width\Screen resolution
-\vid_bitsperpixel\How many bits per pixel (BPP) to render at, 32 is recommended
-\vid_fullscreen\Enable fullscreen mode (default: enabled)
-\vid_vsync\Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)
-\gl_texture_anisotropy\Anisotropic filtering quality (default: 1x)
-\r_glsl\Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)
-\gl_vbo\Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)
-\r_depthfirst\Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)
-\gl_texturecompression\Compress the textures for video cards with small amounts of video memory available (default: None)
-\gl_finish\Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)
-\v_brightness\Brightness of black (default: 0)
-\v_contrast\Brightness of white (default: 1)
-\v_gamma\Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)
-\v_contrastboost\By how much to multiply the contrast in dark areas (default: 1)
-\r_glsl_saturation\Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)
-\v_glslgamma\Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)
-\r_ambient\Ambient lighting, if set too high it tends to make light on maps look dull and flat (default: 4)
-\r_hdr_scenebrightness\Global rendering brightness (default: 1)
-\vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)
-\v_flipped\Poor man's left handed mode (default: off)
-
-\XonoticSettingsDialog/Effects\Effect settings
-\r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal)
-\gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)
-\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
-\mod_q3bsp_nolightmaps\Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)
-\cl_particles_quality\Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1)
-\r_drawparticles_drawdistance\Particles further away than this will not be drawn (default: 1000)
-\cl_decals\Enable decals (bullet holes and blood) (default: enabled)
-\r_drawdecals_drawdistance\Decals further away than this will not be drawn (default: 300)
-\cl_decals_time\Time in seconds before decals fade away (default: 2)
-\cl_gentle\Replace blood and gibs with content that does not have any gore effects (default: disabled)
-\cl_nogibs\Reduce the amount of gibs or remove them completely (default: lots)
-\v_kicktime\How long a view kick from damage lasts (default: 0)
-\r_glsl_deluxemapping\Use per-pixel lighting effects (default: enabled)
-\r_shadow_gloss\Enable the use of glossmaps on textures supporting it (default: enabled)
-\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
-\r_shadow_realtime_dlight\Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)
-\r_shadow_realtime_dlight_shadows\Enable rendering of shadows from dynamic lights (default: disabled)
-\r_shadow_realtime_world\Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)
-\r_shadow_realtime_world_shadows\Enable rendering of shadows from realtime world lights (default: disabled)
-\r_shadow_usenormalmap\Enable use of directional shading on textures (default: enabled)
-\r_showsurfaces\Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)
-\r_glsl_offsetmapping\Offset mapping effect that will make textures with bumpmaps appear like they "pop out" of the flat 2D surface (default: disabled)
-\r_glsl_offsetmapping_reliefmapping\Higher quality offset mapping, which also has a huge impact on performance (default: disabled)
-\r_water\Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)
-\r_water_resolutionmultiplier\Resolution of reflections/refractions (default: good)
-\r_coronas\Enable corona flares around certain lights (default: enabled)
-\r_coronas_occlusionquery\Fade coronas according to visibility (default: enabled)
-\r_bloom\Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)
-\r_hdr\Higher quality version of bloom, which has a huge impact on performance. (default: disabled)
-\r_motionblur\Motion blur strength - 0.4 recommended
-\hud_postprocessing_maxbluralpha\Enables special postprocessing effects for when damaged or under water or using a powerup (default: disabled)
-
-\XonoticSettingsDialog/Audio\Audio settings
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Sound output frequency
-\snd_channels\Number of channels for the sound output
-\snd_swapstereo\Swap left/right channels
-\snd_spatialization_control\Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)
-\cl_voice_directional\Enable directional voices
-\cl_voice_directional_taunt_attenuation\Distance from which taunts can be heard
-\cl_autotaunt\Automatically taunt enemies after fragging them
-\cl_sound_maptime_warning\Announcer sound telling you the remaining minutes of the match
-\cl_hitsound\Play a hit indicator sound when your shot hits an enemy
-\menu_sounds\Play sounds when clicking or hovering over menu items
-
-\XonoticSettingsDialog/Network\Network settings
-\cl_movement\Enable clientside movement prediction
-\cl_nolerp\Enable network update smoothing
-\shownetgraph\Show a graph of packet sizes and other information
-\_cl_rate\Specify your network speed with this slider
-\cl_netfps\How many input packets to send to the server each second
-\cl_curl_maxdownloads\Maximum number of concurrent HTTP/FTP downloads
-\cl_curl_maxspeed\Maximum download speed
-\cl_port\Force client to use chosen port unless it is set to 0
-
-\XonoticSettingsDialog/Misc\Misc settings
-\menu_tooltips\Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)
-\showtime\Show current time of day, useful on screenshots
-\showdate\Show current date, useful on screenshots
-\showfps\Show your rendered frames per second
-
-\XonoticSettingsDialog/Advanced settings...\Advanced settings where you can tweak every single variable of the game
-\g_friendlyfire\Percentage of damage dealt to teammates
-\g_mirrordamage\Percentage of teamdamage that will be mirrored to you
-\g_tdm_teams_override\Override the default amount of teams in teamgames
-
-\viewsize\Enable/disable the HUD background
-\cl_hidewaypoints\Show various gametype specific waypoints
-\g_waypointsprite_scale\Scale multiplier of the waypoints
-\g_waypointsprite_alpha\Control transparency of the waypoints
-\cl_shownames\Show the name of the player you are aiming at
-
-\crosshair_hittest\None: do not do hit tests for the crosshair; TrueAim: blur the crosshair when you would not hit the wall; Enemies: also enlarge the crosshair when you would hit an enemy
diff --git a/tooltips.db.de b/tooltips.db.de
deleted file mode 100644 (file)
index f3ef207..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-0
-\XonoticSingleplayerDialog\Spiele die Einzelspieler-Kampagne oder habe Instant-Action Spiele gegen Bots
-
-
-\XonoticMultiplayerDialog\Spiele online, gegen deine Freunde im LAN, schaue dir Demos an oder ändere deine Spieler-Einstellungen
-\XonoticMultiplayerDialog/Server\Finde Server und spiele online
-\menu_slist_showempty\Aktiviere die Anzeige von leeren Servern
-\menu_slist_showfull\Aktiviere die Anzeige von vollen Servern, die keinen freien Platz mehr haben
-\net_slist_pause\Unterbreche die automatische Aktualisierung der Serverliste um ein "Herumspringen" zu verhindern
-\XonoticMultiplayerDialog/Info...\Lass dir mehr Informationen über den markierten Server anzeigen
-\XonoticMultiplayerDialog/Speichern\Setze ein Lesezeichen für den markierten Server um ihn beim nächsten Mal schneller wiederzufinden
-\XonoticMultiplayerDialog/Starten\Hoste dein eigenes Spiel
-\XonoticMultiplayerDialog/Demos\Schaue dir Demos an
-\XonoticMultiplayerDialog/Spieler-Einstellungen\Ändere deine Spieler-Einstellungen
-\XonoticTeamSelectDialog/'bestem' Team beitreten\Automatische Auswahl des Teams (bevorzugt)
-\XonoticTeamSelectDialog/rot\Trete dem roten Team bei
-\XonoticTeamSelectDialog/blau\Trete dem blauen Team bei
-\XonoticTeamSelectDialog/gelb\Trete dem gelben Team bei
-\XonoticTeamSelectDialog/pink\Trete dem pinken Team bei
-
-\timelimit_override\Wähle ein Zeitlimit bei dem die Map endet oder verwende den Map-Standard für diese Option
-\fraglimit_override\Wähle die Anzahl an Frags die benötigt wird, damit die Map endet oder verwende den Map-Standard für diese Option
-\menu_maxplayers\Wähle die maximale Anzahl der Spieler, welche sich mit deinem Server gleichzeitig verbinden dürfen. Freie Plätze können mit Bots aufgefüllt werden
-\bot_number\Wähle die maximale Anzahl von Bots auf dem Server
-\skill\Stelle die Stärke der Bots ein
-\g_maplist_votable\Anzahl von Maps, welche am Ende des Spiels zur Wahl stehen
-\sv_vote_simple_majority_factor\Die einfache Mehrheit gewinnt die Abstimmung
-\XonoticMultiplayerDialog/Erweiterte Einstellungen...\Erweiterte Einstellungen für den Server
-\XonoticMultiplayerDialog/Mutators...\Wähle Mutators und Waffen-Arenen
-\g_dodging\Ausweichmodus: Es ist möglich rasch zur Seite zu springen (spezielle Bewegung)
-\g_cloaked\Tarnmodus: Alle Spieler sind fast unsichtbar
-\g_footsteps\Schrittklang: Schritte von Spielern erzeugen Geräusche
-\g_midair\"Luft"modus: Dem Gegner Schaden zuzufügen ist nur möglich, wenn er sich in der Luft befindet
-\g_vampire\Vampirmodus: Der Schaden dem du anderen Spielern zufügst, wird deiner eigenen Lebensenergie hinzugefügt
-\g_bloodloss\Blutverlust: Aktiviere diesen Modus und stelle den Wert der Lebensenergie, bei der Spieler auf Grund von Blutverlust betäubt wirken, ein
-\sv_gravity\Verringere die Schwerkraft und lass Gegenstände langsamer zu Boden fallen, ein niedrigerer Wert verringert die Gravitation
-\g_grappling_hook\Neu erzeugte/auferstandene Spieler starten mit dem Enterhaken
-\g_jetpack\Neu erzeugte/auferstandene Spieler starten mit dem Jetpack
-\g_pinata\Gestorbene Spieler lassen alle Waffen fallen, die sie besaßen - Waffen verschwinden nicht
-\g_rocket_flying\Raketen fliegen in allen Physikeinstellungen
-\g_weapon_stay\Alle Waffen bleiben liegen, auch wenn sie aufgenommen wurden
-\g_weaponarena\Waffen-Arenen: Die Auswahl einer Waffen-Arena führt dazu, dass jeder Spieler mit der gewählten Waffe startet. Diese hat unendlich viel Munition, andere Waffen sind nicht vorhanden - Spezielle Waffen-Arenen: Spieler starten mit allen Waffen und unendlich viel Munition
-\g_instagib\Alle Spieler starten mit der MinstaNex, eine elektromagnetische Schienenkanone mit unendlich viel Schaden. Wenn ein Spieler keine Munition mehr hat, bleiben ihm 10 Sekunden um neue zu finden, ansonsten stirbt er. Der 2. Feuermodus ist Laser, welcher keinen Schaden hinzufügen kann. Dieser eignet sich gut für Tricksprünge
-\g_nix\Es gibt keine aufzusammelnden Gegenstände in Xonotic - Anstelle der Möglichkeit Waffen aufzusammeln, spielen alle mit der gleichen Waffe. Nach einiger Zeit startet ein Countdown, danach wechseln alle Spieler zu einer neuen gleichen Waffe
-\g_nix_with_blaster\In Nix ist als zweite Waffe der Laser vorhanden
-\XonoticMultiplayerDialog/Select all\Wähle alle Maps
-\XonoticMultiplayerDialog/Select none\Wähle alle Maps ab
-
-
-\XonoticMultiplayerDialog/Timedemo\Mache einen Benchmark-Test der markierten Demo. Die Demo wird in Zeitraffer, -lupe abgespielt. Das Ergebnis wird in "gamedir/data/benchmark.log" gespeichert
-
-\fov\Stelle den Wert für das Sichtfeld in Grad (60-130) ein - Standard ist 90
-\cl_bobcycle\Setze einen Wert für das Sicht-Wackeln oder deaktiviere es vollständig
-\cl_zoomfactor\Setze den Vergrößerungsfaktor
-\cl_zoomsensitivity\Bestimme die Änderung der Empfindlichkeit während des Vergrößerns. Werte von 0 (geringste Sensitivität) bis 1 (keine Änderung der Sensitivität sind möglich)
-\cl_zoomspeed\Bestimme wie schnell der angegebene Vergrößerungsfaktor erreicht werden soll, deaktivieren für sofortige Vergrößerung
-\XonoticMultiplayerDialog/Waffeneinstellungen...\Lege deine bevorzugten Waffen fest, den automatischen Wechsel der Waffen und weiteres
-
-\cl_weaponpriority_useforcycling\Verwende die oben angegebene Liste, wenn die Waffen mit Hilfe des Mausrads gewechselt werden
-\cl_autoswitch\Wechsel automatisch zu der neu aufgesammelten Waffe, wenn diese in der Liste weiter oben steht als die, welche Du gerade trägst
-\r_drawviewmodel\Darstellung der Waffe im Spiel
-\cl_gunalign\Position der Waffe, links oder rechts; erfordert Neustart
-
-\crosshair_per_weapon\Ermögliche unterschiedliche Fadenkreuze für unterschiedliche Waffen. Diese Option ist zu empfehlen, wenn du ohne dargestelltes Waffenmodel spielst
-\crosshair_color_override\Ermögliche unterschiedliche Farben für unterschiedliche Fadenkreuze, abhängig von der Waffe die gerade getragen wird
-\crosshair_size\Lege die Größe des Fadenkreuzes fest
-\crosshair_color_alpha\Lege die Opazität des Fadenkreuzes fest
-\crosshair_color_by_health\Die Einfärbung des Fadenkreuzes ist abhängig von der Lebensenergie
-\crosshair_color_red\Roter Farbanteil des Fadenkreuzes
-\crosshair_color_green\Grüner Farbanteil des Fadenkreuzes
-\crosshair_color_blue\Blauer Farbanteil des Fadenkreuzes
-\sbar_hudselector\Verwende das alte HUD Layout
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Lege deinen Namen im Spiel fest
-
-\XonoticSettingsDialog\Ändere die Spiel-Einstellungen
-\XonoticCreditsDialog\Die Xonotic Entwickler
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Beende das Spiel
-\XonoticQuitDialog/Ja\Zurück an die Arbeit...
-\XonoticQuitDialog/Nein\Ich muss noch ein paar Typen fraggen!
-\XonoticSettingsDialog/Eingabe\Einstellungen der Eingabe
-\sensitivity\Geschwindigkeitsmultiplikator um die Sensitivität der Maus einzustellen
-\menu_mouse_speed\Multiplikator für die Geschwindigkeit der Maus im Menü, hat keinen Effekt auf die Mausbewegung im Spiel
-\m_filter\Glättet die Mausbewegung, aber verringert leicht die Reaktion des Zielens
-\m_pitch\Umkehren der Mausbewegung entlang der Y-Achse
-\vid_dgamouse\Verwende die DGA Maus Eingabe
-\joy_enable\Zur Verwendung eines Joysticks aktivieren
-\con_closeontoggleconsole\Schließen der Konsole auch mit der Taste, die zum Öffnen verwendet wird
-\sbar_showbinds\Darstellung von gedrückten Aktionen / gedrückten Tasten, während des Spielens
-\cl_showpressedkeys\Lass dir die gedrückten Tasten während des Spielens anzeigen
-
-\XonoticSettingsDialog/Grafik\Grafik Einstellungen
-
-\vid_width\Einstellung der zu verwendenden Bildschirmauflösung
-\vid_bitsperpixel\Bestimme wie viele Bits pro Pixel (BPP) gerendert werden sollen, 32 ist der bevorzugte Wert
-\vid_fullscreen\Aktiviere den Vollbildmodus (Standard: aktiviert)
-\vid_vsync\Aktiviere die vertikale Synchronisation um ein Zeilenreißen zu unterdrücken, die FPS werden auf den Wert der Bildwiederholungsrate deines Monitors gesetzt (Standard: deaktiviert)
-\vid_gl20\Aktiviere OpenGL 2.0 für Lichteffekte (Standard: aktiviert)
-\gl_vbo\Speicher Eckpunkte und/oder Dreiecke der statischen Geometrie im Videospeicher um ein schnelleres Rendern zu ermöglichen (Standard: Eckpunkte, einige Dreiecke)
-\r_depthfirst\Verhindere das Überblenden, in dem das Tiefenbild der Szene vor dem Licht gerendert wird (Standard: nur Map)
-\gl_texturecompression\Komprimiere die Texturen für Grafikkarten mit einem geringen Grafikspeicher (Standard: deaktiviert)
-\gl_finish\Die Grafikkarte wartet bis die CPU die Berechnung eines jeden Frames beendet hat, dies kann bei merkwürdigen Verhalten der Eingabe helfen (Standard: deaktiviert)
-\v_brightness\Helligkeit von Schwarz (Standard: 0)
-\v_contrast\Helligkeit von Weiß (Standard: 1)
-\v_gamma\Korrekturwert für die Kontraststärke (Gamma-Wert), Helligkeitseffekt, der keinen Einfluss auf Weiß und Schwarz hat (Standard: 1)
-\v_contrastboost\Faktor für die Änderung des Kontrasts in dunklen Bildteilen (Standard: 1)
-\r_glsl_saturation\Sättigungskorrektur (0 = Graustufenbild, 1 = normales Bild, 2 = übersättigtes Bild), benötigt GLSL Farbkontrolle (Standard: 1)
-\v_glslgamma\Aktiviere die Verwendung von GLSL um die Gamma-Korrektur zu ermöglichen, kann die Leistung stark verringern (Standard: Aus)
-\r_ambient\Umgebungslicht, ein zu hoch eingestellter Wert lässt die Map matt und flach erscheinen (Standard: 4)
-\r_hdr_scenebrightness\Globales Rendern der Lichtstärke (Standard: 1)
-\vid_samples\Aktiviere Antialiasing um Ecken der 3D-Geometire zu glätten. Kann die Leistung stark verringern (Standard: Aus)
-\v_flipped\Linkshänder Modus (Standard: deaktiviert)
-
-\XonoticSettingsDialog/Effekte\Einstellungen der Effekte
-\r_subdivisions_tolerance\Ändere die Qualität der Geometrie in der Map - Rundheit/Glattheit von Kurven (Standard: Gut)
-\gl_picmip\Ändere die Auflösung von Texturen. Ein geringerer Wert verringert die Auslastung des Speichers, aber lässt die Texturen verschwommen aussehen. (Standard: Gut)
-\gl_texturecompression\Wenn aktiviert, wird die Kompression von Texturen verhindert.
-\r_picmipworld\Wenn aktiviert, wird nur die Texturqualität von Modellen verringert (Standard: aktiviert)
-\mod_q3bsp_nolightmaps\Verwende hochauflösende Lightmaps, welche sehr schön aussehen, aber etwas mehr Videospeicher benötigen (Standard: aktiviert)
-\cl_particles_quality\Faktor für die Anzahl von Partikel. Weniger bedeutet weniger Partikel, was zu einer besseren Leistung führt (Standard: 1.0)
-\r_drawparticles_drawdistance\Weiter, als eingestellt, entfernte Partikel werden nicht dargestellt (Standard 1000)
-\cl_decals\Aktiviere Dekore (Einschusslöcher und Blut) (Standard: aktiviert)
-\r_drawdecals_drawdistance\Weiter, als eingestellt, entfernte Dekore werden nicht dargestellt (Standard: 300)
-\cl_decals_time\Zeit in Sekunden nach dem Dekore verschwinden (Standard: 2)
-\cl_gentle\Blut und Fleischteile werden durch andere, nicht blutige, Effekte ersetzt
-\cl_nogibs\Verringere die Anzahl von Fleischteilen oder entferne sie vollständig (Standard: Viele)
-\v_kicktime\Wert für die Dauer der Beeinträchtigung der Sicht durch einen Schaden (Standard: 0)
-\gl_texture_anisotropy\Qualität für das Filtern von Anisotropie (Standard: Aus)
-\r_glsl_deluxemapping\Verwende ein-Pixel Lichteffekte (Standard: aktiviert)
-\r_shadow_gloss\Aktiviere Glanzeffekte für Texturen, wenn die Textur es unterstützt. (Standard: aktiviert)
-\gl_flashblend\Aktiviere schnell gerenderte dynamische Lichter. Es wird eine große Korona anstelle von eines richtigen dynamischen Lichts dargestellt (Standard: aktiviert)
-\r_shadow_realtime_dlight\Aktiviere das Rendern von dynamischen Lichtern, wie Explosionen und Raketen-Lichter (Standard: aktiviert) 
-\r_shadow_realtime_dlight_shadows\Aktiviere das Rendern von Schatten von dynamischen Lichtern (Standard: deaktiviert)
-\r_shadow_realtime_world\Aktiviere das Rendern der gesamten Echtzeit-Welt-Lichter. Hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)
-\r_shadow_realtime_world_shadows\Aktiviere das Rendern von Schatten von Echtzeit-Welt-Lichter (Standard: deaktiviert)
-\r_shadow_usenormalmap\Aktiviere die Verwendung von gerichteter Schattierung auf Texturen (Standard: aktiviert)
-\r_showsurfaces\Komplettes Deaktivieren von Texturen für sehr langsame Hardware. Starke Verbesserung der Leistung, sieht aber sehr komisch aus (Standard: deaktiviert)
-\r_glsl_offsetmapping\Effekt für den Tiefendruck von Texturen, dieser Effekt lässt Texturen mit Bumpmap aus der 2D Ebene "herausgedrückt" erscheinen (Deaktiviert: deaktiviert)
-\r_glsl_offsetmapping_reliefmapping\Bessere Qualität des Offsetmappings, hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)
-\r_water\Reflektions- und Refraktionsqualität, hat einen großen Einfluss auf die Leistung von Maps mit reflektierenden Oberflächen (Standard: deaktiviert)
-\r_water_resolutionmultiplier\Auflösung von Reflektion und Refraktion (Standard: gut)
-\r_coronas\Aktiviere die Korona um bestimmte Lichter (Standard: aktiviert)
-\r_coronas_occlusionquery\Verringern der Korona - Angepasst an die Sichtbarkeit (Standard: deaktiviert)
-\r_bloom\Aktiviere Überstrahlung, welche die umgebenden Pixel sehr hell erleuchteter Pixel erhellt. Dieser Effekt hat einen großen Einfluss auf die Leistung (Standard: deaktiviert)
-\r_hdr\Bessere Qualität des Überstrahlungseffekts, hat einen sehr großen Einfluss auf die Leistung (Standard: deaktiviert)
-\r_motionblur\Wert für die Bewegungsunschärfe - 0.5 empfohlen
-\r_damageblur\Wert für die Unschärfe bei einer Verletzung - 0.4 empfohlen
-
-\XonoticSettingsDialog/Ton\Audio Einstellungen
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Ausgangsfrequenz des Tons
-\snd_channels\Anzahl der Kanäle für die Audiowiedergabe
-\snd_swapstereo\Linken und Rechten Kanal der Stereowiedergabe tauschen
-\snd_spatialization_control\Aktiviere "räumlicheren" Klang (Mischung des linken und rechten Kanals um die Stereo-Trennung leicht zu verringern, für Kopfhörer)
-\cl_voice_directional\Aktiviere richtungsunabhängige Geräusche
-\cl_voice_directional_taunt_attenuation\Distanz in der spöttige Bemerkungen anderer Spieler gehört werden können
-\cl_autotaunt\Automatisches Abspielen einer spöttigen Bemerkung, wenn Gegner gefraggt wurden 
-\cl_sound_maptime_warning\Abspielen einer Ansage für die verbleibenden Minuten des Spiels
-\cl_hitsound\Spiele einen Treffer-Sound, wenn der Spieler auf den gezielt wurde, getroffen wurde
-\menu_sounds\Sound abspielen, wenn auf ein Menüitem geklickt wird oder mit dem Mauszeiger auf das Menüitem gezeigt wird
-
-\XonoticSettingsDialog/Netzwerk\Netzwerk Einstellungen
-\cl_movement\Aktiviere die Client-seitige Bewegungssimulation
-\cl_nolerp\Aktiviere die Netzwerk Update Glättung
-\shownetgraph\Anzeige eines Netzwerkgraphs für gesendete/empfangene Pakete und weitere Informationen
-\_cl_rate\Gib deine Netzwerkgeschwindigkeit mit dem Schieberegler an
-\cl_netfps\Anzahl der Pakete die pro Sekunde zum Server, mit dem du verbunden bist, geschickt werden sollen
-\cl_curl_maxdownloads\Maximale Anzahl der gleichzeitigen HTTP/FTP Downloads
-\cl_curl_maxspeed\Stelle die maximale Download Geschwindigkeit ein
-\cl_port\Stelle den zu verwendenden UDP Port als Client ein.  Wenn der Port auf 0 gesetzt ist, wird kein Port erzwungen
-
-\XonoticSettingsDialog/Sonstiges\Sonstige Einstellungen, wie Sprache, Menü-Skins
-\showtime\Uhrzeit im Spiel anzeigen, geeignet für Screenshots
-\showdate\Datum im Spiel anzeigen, geeignet für Screenshots
-\showfps\Zeige die gerenderten Frames pro Sekunde
-\cl_showspeed\Zeige die Geschwindigkeit des Spielers
-\cl_showspeed_unit\Wähle die Einheit, in der die Geschwindigkeit angezeigt werden soll, qu/s = in/s
-\cl_showacceleration\Zeige die Beschleunigung des Spielers
-\cl_showacceleration_scale\Skalierungsfaktor für das Akzelerometer
-
-\XonoticSettingsDialog/Erweiterte Einstellungen...\Erweiterte Einstellungen, in denen du jede beliebige Variable des Spiels ändern kannst
-\g_friendlyfire\Prozentualer Anteil des Schadens, der Mitspielern hinzugefügt wird
-\g_mirrordamage\Prozentualer Anteil des Team-Schadens der auf dich zurückgeworfen wird
-\g_tdm_teams_override\Überschreibe die Standardgröße eines Teams in Teammodi
-
-\cl_teamradar_position\-
-\cl_teamradar_size\-
-\cl_teamradar_zoommode\-
-\cl_teamradar_rotation\-
-\cl_teamradar_scale\-
-\cl_teamradar_foreground_alpha\-
-\cl_teamradar_background_alpha\Wert für die Opazität des Radar-Hintergrunds
-\viewsize\Aktiviere/Deaktiviere den HUD-Hintergrund
-\sbar_alpha_bg\Wert für die Opazität des HUD-Hintergrunds
-\sbar_color_bg_r\Roter Farbanteil des HUD-Hintergrunds
-\sbar_color_bg_g\Grüner Farbanteil des HUD-Hintergrunds
-\sbar_color_bg_b\Blauer Farbanteil des HUD-Hintergrunds
-\sbar_color_bg_team\Team-Farben Sättigung des HUD-Hintergrunds
-\cl_hidewaypoints\Lass dir verschiedene Spieltyp spezifische Wegpunkte anzeigen
-\g_waypointsprite_scale\Skalierungsfaktor für Wegpunkte
-\g_waypointsprite_alpha\Verändere den Wert der Transparenz von der Anzeige der Wegpunkte
-\cl_shownames\Lass dir den Namen des Spielers anzeigen auf den du gerade zielst
-
-\crosshair_hittest\Aus: Führe keinen Treffer-Test für das Fadenkreuz aus; TrueAim: Trübe das Fadenkreuz, wenn du nicht die Wand treffen würdest; Gegner: Vergrößere zudem das Fadenkreuz, wenn du einen Gegner treffen würdest
-
diff --git a/tooltips.db.es b/tooltips.db.es
deleted file mode 100644 (file)
index 249d5ef..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-0
-\XonoticSingleplayerDialog\ Empieza una campaña de un solo jugador o acción instantánea de batalla contra bots
-
-
-\XonoticMultiplayerDialog\Juega online, contra tus amigos en LAN, ver demos o cambia la configuración del jugador
-\XonoticMultiplayerDialog/Servidores\Encuentra servidores para jugar
-\menu_slist_showempty\Mostrar servidores vacíos
-\menu_slist_showfull\Mostrar los servidores que no tienen espacio disponible
-\net_slist_pause\Pausa la actualización de la lista de servidores para evitar que salteen
-\XonoticMultiplayerDialog/Info...\Mostrar mas información sobre el actual servidor resaltado
-\XonoticMultiplayerDialog/Marcador\Marcar el actual servidor resaltado para que sea mas facil encontrarlo en un futuro
-\XonoticMultiplayerDialog/Crear\Crear tu propio juego
-\XonoticMultiplayerDialog/Demos\Navegar y ver demos
-\XonoticMultiplayerDialog/Player Setup\Configuración de jugador
-
-\XonoticTeamSelectDialog/Unirse al'mejor' equipo (seleccion automática)\Auto seleccionar equipo (recomendado)
-\XonoticTeamSelectDialog/rojo\Unirse al equipo rojo
-\XonoticTeamSelectDialog/azul\Unirse al equipo azul
-\XonoticTeamSelectDialog/amarillo\Unirse al equipo amarillo
-\XonoticTeamSelectDialog/rosa\Unirse al equipo rosa
-
-\timelimit_override\Límite de tiempo en minutos que cuando pase, terminara el combate
-\fraglimit_override\Cantidad de puntos necesarios antes de que termine el combate
-\menu_maxplayers\La máxima cantidad de jugadores o bots que pueden conectarse a tu servidor a la vez
-\bot_number\Cantidad de bots en tu servidor
-\skill\Especificar que experiencia tendran los bots
-\g_maplist_votable\Numero de mapas que seran mostrados en en voto dde mapas al final de un combate
-\sv_vote_simple_majority_factor\La mayoria gana
-\XonoticMultiplayerDialog/Advanced settings...\Configuración avanzada ddel servidor
-\XonoticMultiplayerDialog/Mutators...\Mutators
-\g_dodging\Activar esquivado
-\g_cloaked\Todos los jugadores son casi invisibles
-\g_footsteps\Activar sonidos de pasos
-\g_midair\solo es posible dañar a tu enemigo mientras este en el aire
-\g_vampire\Daño dado a tu enemigo sera añadido a tu propia vida
-\g_bloodloss\Cantidad de vida sera afectada por perdida de sangre
-\sv_gravity\Hace que las cosas caigan lentamente al suelo, un valor bajo significa baja gravedad
-\g_grappling_hook\Los jugadores aparecen con un gancho para aferrarse
-\g_jetpack\Los jugadores aparecen con el jetpack
-\g_pinata\Los jugadores dejan todas las armas cuando mueren
-\g_weapon_stay\Las armas quedan despues de que son tomadas
-\g_weaponarena\Seleccionando un arma, dara a todos los jugadores cual arma se eligió asi como infinita munición, y deshabilita cualquier otra toma de arma.
-\g_instagib\Los jugadores tendran Minstanex, el cual es un railgun con daño infinito. Si el jugador queda sin munición, tendra 10 segundos para buscar mas o morira. El modo de disparo secundario es un laser que no inflige daño y es bueno para hacer bromas.
-\g_nix\Xonotic sin items - en vez de recoger items, todos juegan con la misma arma. Despues de algún tiempo, comienza una cuenta regresiva, despues del cual todos juegan con otra arma.
-\g_nix_with_blaster\Siempre lleva el láser como arma adicional en Nix
-\XonoticMultiplayerDialog/Select all\Seleccionar todos los mapas
-\XonoticMultiplayerDialog/Select none\Deseleccionar todos los mapas
-
-
-\XonoticMultiplayerDialog/Demo temporizado\Prueba cuan rápido tu computadora puede correr la demo seleccionada
-
-\fov\Campo de visión en grados de 60 a 130, 90 es el default
-\cl_bobcycle\Frecuencia de balanceo de la vista
-\cl_zoomfactor\Cuan grande es el factor de zoom cuando la tecla de zoom es presionada
-\cl_zoomsensitivity\Cuanto el zoom cambia la sensibilidad, desde 0 (baja sensibilidad) a 1 (sin cambio de sensibilidad)
-\cl_zoomspeed\Cuan rápido es la vista ampliada, deshabilitar para un zoom instantáneo
-\XonoticMultiplayerDialog/Weapon settings...\Seleccionar tu arma preferida, cambio automático y modelo de arma
-
-\cl_weaponpriority_useforcycling\Haz uso de la lista de abajo when cambia de arma con la rueda del raton
-\cl_autoswitch\Cambia automáticamente al arma recogida si es mejor que la que esta llevando
-\r_drawviewmodel\Muestra el modelo de arma
-\cl_gunalign\Posición del modelo de arma; requiere conexión
-
-\crosshair_per_weapon\Configura diferentes miras para cada arma, esto ayuda si estas jugando sin un modelo de arma
-\crosshair_color_override\Tambien configura el color del punto de mira dependiendo del arma que uses actualmente
-\crosshair_size\Ajusta el tamaño del punto de mira
-\crosshair_color_alpha\Ajusta la opacidad del punto de mira
-\crosshair_color_red\Componente rojo del color del punto de mira
-\crosshair_color_green\Componente verde del color del punto de mira
-\crosshair_color_blue\Componente azul del color del punto de mira
-\sbar_hudselector\Usar el viejo diseño de HUD
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Nombre con el cual aparecerás en el juego
-
-\XonoticSettingsDialog\Cambiar la configuración del juego
-\XonoticCreditsDialog\Los créditos de Xonotic
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Salir del juego
-\XonoticQuitDialog/Si\Volver al trabajo...
-\XonoticQuitDialog/No\Tengo algunos puntos más por hacer!
-
-\XonoticSettingsDialog/Entrada\configuración de entrada
-\sensitivity\Multiplicador de velocidad del ratón
-\menu_mouse_speed\Multiplicador de velocidad del raton en el menu, esto no afecta al apuntar en el juego
-\m_filter\Suaviza el movimiento del raton, pero hace menos sensible al apuntar al objetivo
-\m_pitch\Invierte el movimiento del raton en el eje Y
-\vid_dgamouse\Hace uso de la entrada DGA del raton
-\con_closeontoggleconsole\Permite el fijar un lazo de la consola para tambien cerrarla
-\sbar_showbinds\Display actions / Teclas vinculadas en la cadena se mostrará en el juego
-\cl_showpressedkeys\Mostrar el movimiento de teclas que el jugador esta presionando
-
-\XonoticSettingsDialog/Video\configuración de video
-\vid_width\Resolución de pantalla
-\vid_bitsperpixel\Cuantos bits por pixel (BPP) para renderizar, 32 es lo recomendado
-\vid_fullscreen\Habilitar el modo de pantalla completa (habilitado por defecto)
-\vid_vsync\Habilitar sincronización vertical para prevenir rasgaduras en la imagen, limitara los fps a la tasa de refresco del monitor (desactivado por defecto)
-\r_glsl\Habilitar sombreado de pixel de OpenGL 2.0 (activado por defecto)
-\gl_vbo\Haz uso de objetos de búfer de vertices para almacenar geometría estática en la memoria de video para acelerar el renderizado (Vertices y Triangulos por defecto)
-\r_depthfirst\Eliminar sobre-dibujado renderizando una version de única profundidad de la escena antes de que comience la renderización normal (desactivado por defecto)
-\gl_texturecompression\Comprimir las texturas para tarjetas de video con poca cantidad de memoria disponible (ninguno por defecto)
-\gl_finish\Hacer que la CPU wait esperen que la gpu termine cada marco, puede ayudar con algunas extrañas entradas o retraso de video en algunas máquinas (desactivado por defecto)
-\v_brightness\Brillo en negros (por defecto: 0)
-\v_contrast\Brillo en blancos (por defecto: 1)
-\v_gamma\Valor de corrección de gama inverso, un efecto de brillo que no afecta a blancos o negros (por defecto: 1.125)
-\v_contrastboost\Por cuanto multiplicar el contraste en areas oscuras (por defecto: 1)
-\r_glsl_saturation\Ajuste de saturación (0 = escala de grises, 1 = normal, 2 = sobresaturado), requiere un control de color (por defecto: 1)
-\v_glslgamma\Abilita el uso de GLSL para aplicar en la corrección gama, note que esto podría disminuir mucho el rendimiento (default: disabled)
-\r_ambient\iluminación del ambiente, si se configura en muy elevado, tiende a hacer luz en los mapas de imagen aburrida y plana (por defecto: 4)
-\r_hdr_scenebrightness\Brillo del renderizador global (por defecto: 1)
-\vid_samples\activar antialiasing, el cual suaviza los bordes en geometrias en 3D. Note que esto puede disminuir bastante el rendimiento (por defecto: desactivado)
-\v_flipped\Invertir la imagen horizontalmente (por defecto: desactivado)
-
-\XonoticSettingsDialog/Efectos\configuración de efectos.
-\r_subdivisions_tolerance\Cambiar la suavidad de las curvas en el mapa (por defecto: normal)
-\gl_picmip\Cambiar la dureza de las texturas. Bajándolo efectivamente reducira el uso de la memoria de la textura, pero hará que las texturas aparezcan muy borrosas. (por defecto: bueno)
-\r_picmipworld\Si se activa, solo reduce la calidad de texturas de los modelos (activado por defecto)
-\mod_q3bsp_nolightmaps\Use mapas de alta resolución, hara que se vea lindo pero reducira la memoria de video (activado por defecto)
-\cl_particles_quality\Multiplicador de cantidad de partículas. Menos significa menos partículas, lo cual dara mejor rendimiento (por defecto: 1.0)
-\r_drawparticles_drawdistance\Las partículas que se alejen de esto no se dibujarán (por defecto: 1000)
-\cl_decals\Activar decals (agujeros de balas y sangre) (habilitado por defecto)
-\r_drawdecals_drawdistance\Los decals que se alejen de esta distancia no se dibujarán (por defecto: 300)
-\cl_decals_time\Tiempo en segundos antes de que los decals desaparezcan (por defecto: 2)
-\cl_gentle\Reemplazar sangre y tripas por cosas que no tengan nada de gore (desactivado por defecto)
-\cl_nogibs\Reduce la cantidad de tripas o lo remueve completamente (por defecto: muchos)
-\v_kicktime\Cuanto tiempo se verá el ultimo daño (por defecto: 0)
-\gl_texture_anisotropy\Calidad de filtrado anisotrópico (por defecto: 1x)
-\r_glsl_deluxemapping\Usar efectos de iluminado por pixel (activado por defecto)
-\r_shadow_gloss\Activar el uso de glossmaps en texturas soportandolo (activado por defecto)
-\gl_flashblend\Activar luces dinámicas por renderizado de coronas en vez de iluminación dinámica real (desactivado por defecto)
-\r_shadow_realtime_dlight\Activar renderizado de luces dinámicas como explosiones y luces de cohete (activado por defecto)
-\r_shadow_realtime_dlight_shadows\Activar renderizado de sombras de luces dinamicas (desactivado por defecto)
-\r_shadow_realtime_world\Activar renderizado de la iluminación del mundo en tiempo real en mapas que lo soporten. Note que esto puede tener un gran impacto en el rendimiento. (desactivado por defecto)
-\r_shadow_realtime_world_shadows\Activar renderizado de sombras de luces del mundo en tiempo real (desactivado por defecto)
-\r_shadow_usenormalmap\Activar el uso de sombreado direccional en texturas (activado por defecto)
-\r_showsurfaces\Desactivar texturas completamente para hardware muy lento. Esto aumentara el rendimiento en gran medida, pero se verça muy feo. (desactivado por defecto)
-\r_glsl_offsetmapping\Efecto de mapeado del desplazamiento, que hará texturas con mapas de relieve parecerse como resaltado de la superficie plana de 2D (desactivado por defecto)
-\r_glsl_offsetmapping_reliefmapping\Alta calidad de mapeado de desplazamiento, el cual también tiene un gran impacto en el rendimiento (desactivado por defecto)
-\r_water\Calidad de refleccion y refracción, tiene un gran impacto en el rendimiento en mapas de superficies reflectantes (desactivado por defecto)
-\r_water_resolutionmultiplier\Resolución de reflecciones/refracciones (por defecto: bueno)
-\r_coronas\Habilitar iluminación en corona alrededor de ciertas luces (activado por defecto)
-\r_coronas_occlusionquery\Coronas apagadas acorde a la visibilidad (activado por defecto)
-\r_bloom\Activar efecto bloom, que ilumina los píxeles vecinos de píxeles muy brillantes.Tiene un gran impacto en el rendimiento. (desactivado por defecto)
-\r_hdr\Versión de gran calidad de bloom, que tiene un gran impacto en el rendimiento. (desactivado por defecto)
-\r_motionblur\Nivel de difuminado de movimiento - 0.5 recomendado
-\r_damageblur\Cantidad de difuminado de movimiento en presencia de daños - 0.4 recomendado
-
-\XonoticSettingsDialog/Sonido\configuración de audio
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Frecuencia de salida del sonido
-\snd_channels\Número de canales para la salida del sonido
-\snd_swapstereo\Invertir canales izquierda o derecha
-\snd_spatialization_control\Activar espacialización (mezcla ligeramente el canal derecho e izquierdo para disminuir la separación estereo un poco en los auriculares)
-\cl_voice_directional\Activar voces direccionales
-\cl_voice_directional_taunt_attenuation\Distancia desde el cual las burlas pueden escucharse
-\cl_autotaunt\automáticamente burlarse del enemigo al anotar puntos
-\cl_sound_maptime_warning\Sonido del anunciante que te indica el tiempo restante del combate
-\cl_hitsound\Reproduce un sonido indicador de anotacion cuando disparas a un enemigo
-\menu_sounds\Reproduce sonidos cuando se clickea o se posiciona sobre un item del menú
-
-\XonoticSettingsDialog/Red\configuración de la red
-\cl_movement\Activar predicción de movimiento del lado del cliente
-\cl_nolerp\Activar actualización suave en la red
-\shownetgraph\Activar un gráfico de tamaño de paquetes y otra información
-\_cl_rate\Especificar tu velocidad de conección con este separador
-\cl_netfps\Cuantos paquetes de entrada mandar a un servidor por cada segundo
-\cl_curl_maxdownloads\Número máximo de descargas concurrentes de HTTP/FTP
-\cl_curl_maxspeed\Velocidad de descarga máxima
-\cl_port\Forzar al cliente a usar un puerto elegido a menos que se establezca en 0
-
-\XonoticSettingsDialog/Misc\configuración misc
-\showtime\Mostrar la hora y el día actual, útil en capturas de pantalla
-\showdate\Mostrar el día actual, útil en capturas de pantalla
-\showfps\Mostrar tus marcos/frames por segundo
-\cl_showspeed\Mostrar la velocidad del jugador
-\cl_showspeed_unit\Seleccionar la velocidad del velocímetro. qu/s = in/s
-\cl_showacceleration\Mostrar la aceleración del jugador
-\cl_showacceleration_scale\Cambiar el acelerómetro por este multiplicador de escala
-
-\XonoticSettingsDialog/configuración avanzada...\configuracion avanzada donde puedes ajustar cada variable del juego
-\g_friendlyfire\Porcentaje de daño infligido a tus compañeros de equipo
-\g_mirrordamage\Porcentaje de daño de equipo que se reflejará a ti
-\g_tdm_teams_override\Sobreescribir la cantidad de equipos por defecto de los modos en equipo
-
-\cl_teamradar_position\-
-\cl_teamradar_size\-
-\cl_teamradar_zoommode\-
-\cl_teamradar_rotation\-
-\cl_teamradar_scale\-
-\cl_teamradar_foreground_alpha\-
-\cl_teamradar_background_alpha\Valor de opacidad del radar de fondo
-\viewsize\Enable/Desavilitar el HUD de fondo
-\sbar_alpha_bg\alor de opacidad del HUD de fondo
-\sbar_color_bg_r\Componente rojo del HUD de fondo
-\sbar_color_bg_g\Componente verde del HUD de fondo
-\sbar_color_bg_b\Componente azul del HUD de fondo
-\sbar_color_bg_team\Saturacion del color de equipo del HUD de fondo
-\cl_hidewaypoints\Mostrar indicadores de ubicación/caminos específicos de diferentes tipos de juego
-\g_waypointsprite_scale\Escala del multiplicador de los indicadores de ubicación/caminos
-\g_waypointsprite_alpha\Transparencia del control de los indicadores de ubicación/caminos
-\cl_shownames\Mostrar el nombre del jugador al que estás apuntando
-
-\crosshair_hittest\Ninguno: no hacer pruebas de aciertos para el punto de mira; Apuntado: difuminar la punta de mira cuando no se apunta contra la pared; Enemigos: también ampliar el punto de mira cuando aciertas al enemigo
diff --git a/tooltips.db.fr b/tooltips.db.fr
deleted file mode 100644 (file)
index 595e776..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-0
-\XonoticSingleplayerDialog\Jouer tout seul contre des adversaires contrôlés par ordinateur
-
-
-\XonoticMultiplayerDialog\Jouer en ligne, en LAN avec vos amis, voir vos démos et modifier vos paramètres joueur
-\XonoticMultiplayerDialog/Serveurs\Trouver des serveurs où jouer
-\menu_slist_showempty\Montrer les serveurs vides
-\menu_slist_showfull\Montrer les serveurs où toutes les places sont prises
-\net_slist_pause\Ne pas mettre à jour la liste de serveurs pour éviter de "glisser" sur un autre serveur
-\XonoticMultiplayerDialog/Info...\Montrer plus d'informations sur le serveur sélectionné
-\XonoticMultiplayerDialog/Marque-page\Mettre le serveur en haut de la liste pour pouvoir le repérer plus facilement plus tard
-\XonoticMultiplayerDialog/Créer\Héberger votre propre partie
-\XonoticMultiplayerDialog/Vidéos\Parcourir et regarder vos démos
-\XonoticMultiplayerDialog/Player Setup\Personnaliser vos paramètres joueur
-
-\XonoticTeamSelectDialog/join 'best' team (auto-select)\Auto-séléction de l'équipe (recommandé)
-\XonoticTeamSelectDialog/rouge\Rejoindre l'équipe rouge
-\XonoticTeamSelectDialog/bleu\Rejoindre l'équipe bleue
-\XonoticTeamSelectDialog/jaune\Rejoindre l'équipe jaune
-\XonoticTeamSelectDialog/rose\Rejoindre l'équipe rose
-
-\timelimit_override\Limite de temps, le match se termine lorsque celle-ci est atteinte
-\fraglimit_override\Limite de frags pour le match, le match se termine lorsque celle-ci est atteinte
-\menu_maxplayers\Le nombre maximum de personnes pouvant jouer sur votre serveur en même temps
-\bot_number\Nombre d'adversaires contrôlés par 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\La majorité simple remporte un vote
-\XonoticMultiplayerDialog/Advanced settings...\Paramètres serveur avancés
-\XonoticMultiplayerDialog/Mutators...\Mutators et arènes avec une seule arme
-\g_dodging\Activer les esquives
-\g_cloaked\Tous les joueurs sont presque invisibles
-\g_footsteps\Activer les bruits de pas
-\g_midair\Il faut que votre adversaire soit en l'air pour lui infliger des dégâts
-\g_vampire\Les dégâts infligés à vos ennemis vous rendent la santé
-\g_bloodloss\Si vous avez moins de santé que spécifié ici, vous perdrez du sang et mourrez progressivement
-\sv_gravity\Vous tombez plus lentement, une valeur peu élevée correspond à une faible gravité
-\g_grappling_hook\Tous les joueurs ont un grappin
-\g_jetpack\Tous les joueurs ont un jetpack
-\g_pinata\Les joueurs lâchent toutes leurs armes quand ils meurent
-\g_weapon_stay\Les armes restent où elles sont lorsqu'elles sont ramassées
-\g_weaponarena\Sélectionner une arène avec une seule arme fera apparaître les joueurs avec cette arme et des munitions illimitées, et désactive toutes les autres armes
-\g_instagib\Tous les joueurs reçoivent un Minstanex, qui est un fusil de précision d'une puissance infinie. Si vous êtes à court de munition, vous mourrez dans les 10 secondes à moins de parvenir à recharger votre arme. Le tir secondaire est un laser qui n'inflige aucun dégât et qui est utile pour sauter sur de longues distances.
-\g_nix\No Items Xonotic - tous les joueurs jouent avec la même arme, et celle-ci change régulièrement.
-\g_nix_with_blaster\Autoriser le laser en plus de l'arme courante dans le mode Nix
-\XonoticMultiplayerDialog/Select all\Sélectionner toutes les cartes
-\XonoticMultiplayerDialog/Select none\Désélectionner toutes les cartes
-
-
-\XonoticMultiplayerDialog/Test Performance\Faire un test de performance en utilisant la démo sélectionnée
-
-\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 vue lorsque vous courez
-\cl_zoomfactor\Facteur du zoom lorsque vous appuyez sur le bouton de zoom
-\cl_zoomsensitivity\Changer la sensibilité du zoom : 0 est la valeur la plus basse, 1 correspond à l'absence de zoom
-\cl_zoomspeed\Facteur "d'adoucissement" du zoom, 0 le 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 avec la molette de la souris
-\cl_autoswitch\Automatiquement changer d'arme si vous ramassez une meilleure arme que celle que vous portez
-\r_drawviewmodel\Afficher l'arme à la première personne
-\cl_gunalign\Position de l'arme à l'écran, reconnection au serveur nécessaire pour prendre effet
-
-\crosshair_per_weapon\Définir un viseur différent pour chaque arme, utile si vous jouez sans afficher l'arme
-\crosshair_color_per_weapon\Définir la couleur du viseur selon l'arme que vous utilisez
-\crosshair_size\Ajuster la taille du viseur
-\crosshair_color_alpha\Ajuster l'opacité du viseur
-\crosshair_color\Ajuster la couleur du viseur
-\sbar_hudselector\Utiliser l'ancienne interface HUD
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_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/Oui\Retour au boulot...
-\XonoticQuitDialog/Non\'Faut que je fragge plus de monde!
-
-\XonoticSettingsDialog/Contrôles\Paramètres contrôle souris/clavier
-\sensitivity\Sensibilité de la souris
-\menu_mouse_speed\Sensibilité 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
-\m_pitch\Inverser la souris sur l'axe vertical (mode jeu d'avion)
-\vid_dgamouse\Utiliser une souris DGA
-\con_closeontoggleconsole\Permet de fermer la console avec le même raccourci utilisé pour l'ouvrir
-
-\XonoticSettingsDialog/Vidéo\Paramètres vidéo
-\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é)
-\gl_texture_anisotropy\Qualité du filtrage anistrope (par défaut : 1x)
-\r_glsl\Activer les Shaders OpenGL 2.0 pour des effets de lumière améliorés (par défaut : désactivé)
-\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\Demander au processeur d'attendre la fin du rendu graphique afin é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 n'affectant pas la luminosité du noir ou du blanc (par défaut : 1.125)
-\v_contrastboost\Multiplier le constraste dans les 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 ambiante, si elle est trop élévée, les cartes auront un éclairage plus "plat" et moins contrasté (par défaut : 4)
-\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 (par défaut : désactivé)
-\v_flipped\Mode miroir (par défaut : désactivé)
-
-\XonoticSettingsDialog/Graphiques\Paramètres des effets graphiques
-\r_subdivisions_tolerance\Ajuster la qualité des modèles 3D de la 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 : bon)
-\r_picmipworld\Si activé, réduira uniquement la qualité des textures des joueurs (par défaut : activé)
-\mod_q3bsp_nolightmaps\Utiliser des lightmaps haute résolution, augmente l'utilisation de la mémoire, 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 : 1)
-\r_drawparticles_drawdistance\Toutes les particules situées au-delà de 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\Durée en secondes avant que les marques d'impacts ne disparaissent (par défaut : 2)
-\cl_gentle\Remplacer les effets gores par des effets moins violents (par défaut : désactivé)
-\cl_nogibs\Réduire les effets gores ou les désactiver totalement (par défaut : beaucoup)
-\v_kicktime\Faire trembler la vue lorsque vous êtes touché (durée par défaut : 0)
-\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\Activer les lumières dynamiques rapides - mais plus laides - en affichant des couronnes de lumière à la place des vraies lumières dynamiques (par défaut : désactivé)
-\r_shadow_realtime_dlight\Activer le rendu des lumières dynamiques des explosions et des roquettes (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 (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 légères, mais le rendu est très 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\Qualité des reflets et de la réfraction de l'eau et des portails, a un gros impact sur la performance dans les cartes avec des surfaces réfléchissantes (par défaut : désactivé)
-\r_water_resolutionmultiplier\Résolution des reflets/réfractions (par défaut : bon)
-\r_coronas\Activer des effets d'éblouissement peu gourmands autour de certaines sources de lumière (par défaut : activé)
-\r_coronas_occlusionquery\Estomper les effets d'éblouissement pour ne pas perdre en visibilité (par défaut : activé)
-\r_bloom\Activer l'effet "bloom", qui éclaire les pixels situés au voisinage de pixels très brillants. A un gros impact sur la performance (par défaut : désactivé)
-\r_hdr\Effet "bloom" de qualité encore supérieure, mais encore plus gourmand (par défaut : désactivé)
-\r_motionblur\Intensité du flou de mouvement - 0.4 est recommandé
-\hud_postprocessing_maxbluralpha\Activer des effets de postprocessing spéciaux lorque vous êtes touché, lorsque vous êtes sous l'eau ou lorsque vous utilisez un bonus (par défaut : désactivé)
-
-\XonoticSettingsDialog/Audio\Paramètres audio
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Fréquence de la sortie audio
-\snd_channels\Nombre de canaux pour la sortie audio
-\snd_swapstereo\Inverser les canaux stéréo gauche/droite
-\snd_spatialization_control\Essayer de diminuer le "contraste" entre la partie gauche et droite du casque pour un meilleur son
-\cl_voice_directional\Activer les voix directionnelles des personnages sur la carte
-\cl_voice_directional_taunt_attenuation\Distance jusqu'à laquelle les voix demeurent audibles
-\cl_autotaunt\Automatiquement narguer les ennemis lorsque vous les tuez
-\cl_sound_maptime_warning\Voix (en anglais) qui annonce le temps restant avant la fin du match
-\cl_hitsound\Jouer un son lorsque vous touchez un ennemi
-\menu_sounds\Jouer des sons en cliquant ou en survolant des boutons
-
-\XonoticSettingsDialog/Réseau\Paramètres 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\Afficher la taille des paquets et d'autres informations dans un graphique
-\_cl_rate\Spécifier la vitesse de votre réseau avec ce curseur
-\cl_netfps\Nombre maximum de paquets à envoyer au serveur chaque seconde
-\cl_curl_maxdownloads\Nombre maximum de téléchargements simultanés en HTTP/FTP
-\cl_curl_maxspeed\Vitesse maximale de téléchargement
-\cl_port\Forcer le client à passer par le port choisi sauf s'il est défini à 0
-
-\XonoticSettingsDialog/Autres\Autres paramètres
-\menu_tooltips\Info-bulles : désactivé, standard ou avancé (affiche aussi la cvar ou la commande associée)
-\showtime\Afficher l'heure, utile pour les captures d'écran
-\showdate\Afficher la date, utile pour les captures d'écran
-\showfps\Afficher le nombre d'images par seconde actuel (FPS = Frames Per Second)
-
-\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\Outrepasser le nombre d'équipes définies par la carte
-
-\viewsize\Enable/Désactiver l'arrière plan de l'interface
-\cl_hidewaypoints\Afficher 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 avez dans votre viseur
-
-\crosshair_hittest\Aucun: aucun effet de viseur - TrueAim: rendre le viseur flou si vous risquez de tirer dans un mur - Ennemis: rendre le viseur plus grand si vous pouvez toucher un ennemi
diff --git a/tooltips.db.hu b/tooltips.db.hu
deleted file mode 100644 (file)
index f3444ed..0000000
+++ /dev/null
@@ -1,292 +0,0 @@
-0
-//FŐMENÜ
-\XonoticSingleplayerDialog\Egyjátékos mód vagy azonnali játék gépi vezérlésű botok ellen
-\XonoticMultiplayerDialog\Játék interneten keresztül, helyi hálózaton, demók megtekintése, vagy a karaktered beállításainak finomítása
-\XonoticSettingsDialog\A játék beállításainak megváltoztatása: billentyűzetkiosztás, képernyőfelbontás, vizuális effektek, audió, stb.
-
-//TÖBBJÁTÉKOS MENÜ SZERVEREK FÜL
-\XonoticMultiplayerDialog/Szerverek keresése a játékhoz
-\menu_slist_showempty\Üres szerverek mutatása
-\menu_slist_showfull\Teli szerverek mutatása, amelyeken nincs már szabad férőhely
-\net_slist_pause\Megállítja a szerver lista frissítését, hogy a szerverek ne "ugráljanak össze-vissza" a listában
-\XonoticMultiplayerDialog/Szerverek\Internetes és helyi hálózaton indított szerverek böngészése
-\XonoticMultiplayerDialog/Létrehozás\Saját játékszerver indítása
-\XonoticMultiplayerDialog/Törlés\A szűkítési paraméterek törlése
-\XonoticMultiplayerDialog/Csatlakozok!\Csatlakozás a kiválasztott szerverhez. Sok sikert és jó szórakozást!
-\XonoticMultiplayerDialog/Könyvjelző\Az éppen kiválasztott szerver megjelölése, hogy a jövőben könnyebben megtaláld
-\XonoticMultiplayerDialog/További infó\Még több információ megjelenítése az éppen kiválasztott szerverről
-
-//TÖBBJÁTÉKOS MENÜ LÉTREHOZÁS FÜL
-\timelimit_override\Időhatár percekben mérve, aminek elérése után vége a meccsnek
-\fraglimit_override\Gyilokok száma, amit a meccs vége előtt el kell érni
-\menu_maxplayers\A játékosok és botok maximális összlétszáma, ahányan egyszerre a szerverre csatlakozhatnak
-\bot_number\Botok száma a szervereden
-\skill\A botok ügyességi szintjének meghatározása
-\XonoticMultiplayerDialog/Az összes\Minden pálya kiválasztása
-\XonoticMultiplayerDialog/Egyik sem\Egyik pálya sincs kiválasztva
-
-//TÖBBJÁTÉKOS MENÜ LÉTREHOZÁS FÜL MÓDOSÍTÓK ABLAK
-\XonoticMultiplayerDialog/Módosítók...\Módosítók és fegyverarénák
-\g_dodging\El tudsz szökkenni jobbra-balra a lövések elől
-\g_cloaked\Minden játékos majdnem láthatatlan
-\g_footsteps\Enable footstep sounds
-\g_midair\Csak addig tudod az ellenséged megsebezni, amíg az levegőben tartózkodik
-\g_vampire\Annyi pont adódik életerődhöz, amennyi sebzést a másiknak okozol
-\g_bloodloss\Életerőpont, ami alatt a játékos elkábul a vérveszteségtől
-\sv_gravity\A tárgyak lassabban esnek a földre, kisebb érték alacsonyabb gravitációt jelent
-\g_grappling_hook\A játékosok arzenáljában a vonóhorog is szerepelni fog 
-\g_jetpack\A játékosok hátán sugárhajtóműves hátizsák van
-\g_invincible_projectiles\A már kilőtt lövedékeket (pl. rakéta, gránát) nem lehet elpusztítani
-\g_rocket_flying\Rakétarepülés engedélyezése. Tartsd lenyomva a másodlagos tüzelés gombot, és lőj magad alá a rakétavetővel! 
-\g_pinata\A játékosok eldobnak minden fegyvert, amit birtokoltak a haláluk előtt
-\g_weapon_stay\A fegyverek a helyükön maradnak, még azután is, hogy valaki felvette őket
-\g_weaponarena\A kiválasztott fegyver aréna minden játékosnak ugyanazt a fegyvert biztosítja korlátlan lőszerrel, és letiltja minden más fegyver felvételét
-\g_instagib\A játékosok egy Minstanex-et kapnak, ami egy azonnal ölő mesterlövész fegyver. Ha a játékos kifogy a lőszerből, 10 másodperce van muníciót találni, vagy meghal. A másodlagos tűz mód a lézer, amely nem okoz kárt, de jól jön trükkös ugrások végrehajtásánál
-\g_nix\Xonotic felvehető fegyverek nélkül – Mindenki ugyanazzal a fegyverrel játszik. Kis idő után visszaszámlálás indul, amely végén mindenki fegyvert vált
-\g_nix_with_blaster\Mindig legyen a lézer a Nix mellett kiegészítésül 
-
-//TÖBBJÁTÉKOS MENÜ LÉTREHOZÁS FÜL HALADÓ BEÁLLÍTÁSOK ABLAK
-\XonoticMultiplayerDialog/Haladó beállítások...\Haladó szerverbeállítások
-\sv_spectate\A csak nézőként csatlakozó játékosok engedélyezése
-\g_spawnshieldtime\A Védelmező megjenésének ideje
-\slowmo\A játék sebessége. A nagyobb értékek gyorsabb játékot eredményeznek.
-\g_friendlyfire\Sérülés viszonylagos mértéke, amit a csapattársadnak okozol
-\g_friendlyfire_virtual\A csapattárs csak vizuálisan szenvedjen el sérülést a sebzésedtől, de életerőpontot ne veszítsen
-\g_mirrordamage\Általad okozott csapatsérülés viszonylagos mértéke, amit te szenvedsz el büntetésből, mert a csapattársad ellen fordultál
-\g_mirrordamage_virtual\Csak vizuálisan szenvedj el sérülést azért, mert a csapattársad ellen fordultál
-\g_tdm_teams_override\Csapatjátékban felülbírálja a csapatok számának alapbeállítását
-\g_maplist_votable\A meccs utáni pályaválasztásnál megjelenő szvazati lehetőségek száma
-\sv_vote_simple_majority_factor\Egyszerű többség nyerjen egy szavazásban
-
-//TÖBBJÁTÉKOS MENÜ DEMÓK FÜL
-\XonoticMultiplayerDialog/Demók\Demók böngészése és megtekintése
-\cl_autodemo\Visszajátszható ún. 'demó' felvételek készítése automatikusan az aktuális játékodról.
-\XonoticMultiplayerDialog/Időmérés\Leméri, hogy a számítógéped milyen gyorsan képes futtatni a kiválasztott demót.
-\XonoticMultiplayerDialog/Visszajátszás\A kiválasztott demó felvétel lejátszása.
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL
-\_cl_name\A név, amivel szerepelsz a játékban. Ha engedélyezted a statisztikák gyűjtését és elküldését, akkor a http://stats.xonotic.org -on ezen a néven fogsz szerepelni az adatbázisban
-\_cl_color\A játékoskaraktered elsődleges és másodlagos színei. 
-\XonoticMultiplayerDialog/Játékos beállítások\Játékosmodell, célkereszt, HUD, és egyéb játékosorientált beállítások
-\crosshair_enabled\A célkereszt letiltása vagy engedélyezése. A célkereszt változhat fegyverenként egy előre megadott készletből, vagy engedélyezd az "Egyéni célkereszt" opciót, és válassz egy célkeresztet az alábbi listából!
-\crosshair\Válassz a listából egy egyéni célkeresztet!
-\crosshair_per_weapon\Különböző célkeresztek beállítása az éppen kézben tartott fegyverhez; hasznos lehet fegyvermodell nélküli játék során
-\crosshair_color_per_weapon\A célkereszt színének változtatása az éppen kézben tartott fegyvertől függően
-\crosshair_color_by_health\A célkereszt színének változtatás az életerőd függvényében
-\crosshair_size\A csúszkával a célkereszt méretét tudod beállítani
-\crosshair_alpha\A csúszkával a célkereszt átlátszóságát tudod beállítani
-\crosshair_color\A célkereszt színének megváltoztatása 
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL CÉLKERESZT ABLAK
-\crosshair_dot\A célkereszt közepén elhelyezkedő pont engedélyezése
-\crosshair_dot_size\A csúszkával a célkereszt közepén elhelyezkedő pont méretét tudod beállítani
-\crosshair_dot_alpha\A csúszkával a célkereszt közepén elhelyezkedő pont átlátszóságát tudod beállítani. Az érték növelésével az átlátszóság csökken.
-\crosshair_dot_color_custom\A célkereszt közepén elhelyezkedő pont színének beállítása. Egyéni szín beállításához használd az "Egyéni" opciót, majd válassz a palettáról egy színt!
-\crosshair_effect_scalefade\A célkereszt animációi kifejezettebbek és jobban láthatóak lesznek.
-\crosshair_ring\A célkereszt körül egy gyűrű jelenik meg, amely az épp kézben tartott fegyver állapotáról ad információt (pl. Nex töltöttségi szintje, Gépfegyver tárban lévő töltényei stb.)
-\crosshair_hittest\A találatellenőrzés megjelenítése a célkereszten. Nincs: a találat lehetősége nincs hatással a célkeresztre; Valós célzás: elmossa a célkeresztet, mikor nem a falat találod el; Ellenségek: Fel is nagyítja a célkeresztet, mikor egy ellenfelet találsz el
-\crosshair_hittest_blur\A célkereszt elmosása, ha a lövés elakadna a falban (nagyon hasznos fedezék mögül tüzelés esetén)
-\crosshair_hitindication\A célkereszt egy pillanatra megnő sikeres találat esetén
-\crosshair_pickup\A célkereszt egy pillanatra megnő tárgyak (életerő, muníció, fegyverek, zászló stb.) felvétele esetén
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL JÁTÉKOSMODELL ABLAK
-\cl_deathglow\A csúszkával a holttestek elhalványulásának idejét tudod beállítani másodpercben mérve
-\cl_nogibs\A csúszkával a felrobbantott ellendelek húscafatainak mennyiségének tudod beállítani (alapértelmezett: sok)
-\cl_playerdetailreduction\A csúszkával játékoskarakterek kinézetének butítását tudod beállítani. A magasabb értékek grafikailag roszabb minőségű, de gyorsabban leképezhető modelleket eredményeznek
-\cl_forceplayermodels\Az összes játékos ugyan azzal a modellel fog megjelenni a képernyődön mint te magad, attól függetlenül, hogy ők mit állítanak be maguknak. Hasznos lehet azoknak, akik versenyszerűen játszanak, és a "megaerebus" modellt választják.
-\cl_forcelplayercolors\Az összes játékos ugyan azzal az elsődleges és másodlagos színnel fog megjelenni a te képernyődön mint te magad, attól függetlenül, hogy ők mit állítanak be maguknak.
-
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL NÉZET ABLAK
-\XonoticTeamSelectDialog/További célkereszt beállítások\További lehetőségek a célkereszt testreszabására, pl. középső pont, gyűrű, találatjelzési viselkedés stb.
-\fov\A látószög fokokban mérve 60-tól 130-ig, az alapérték 90 fok
-\cl_reticle\A távcső használatas során távcsőkeret rajzolása a képernyőre, illetve ennek letiltása
-\cl_zoomfactor\A nagyítási szorzó a ráközelítés gomb megnyomása esetén
-\cl_zoomspeed\Milyen gyorsan hajtsa végre a távcső a nagyítást. Tiltás esetén a nagyítás azonnal végbemegy
-\cl_zoomsensitivity\Nagyítás során az egér érzékenységének változtatása a könnyebb célzás érdekében, 0-tól (kisebb érzékenység) 1-ig (nem változik az érzékenység)
-\cl_velocityzoom_type\A távcső használata során a nagyítási és kicsinyítési animáció sebességének finomítása 
-\cl_velocityzoom\Az animálás simításának mértéke
-\cl_clippedspectating\Nézőként csatlakozva ezen opció bekapcsolásával átjárhatsz a falakon, ellenkező esetben csak a pálya valós, fizikai határain belül tudsz mozogni
-\chase_active\Az első személy nézet bekapcsolása esetén a képernyőn a saját szemszögödből látod a történéseket, mintha te magad is ott lennél. Harmadik személy nézet esetén a játékoskarakteredet felülről, a háta mögül követed. 
-\cl_bobfall\Ha bekapcsolod ezt az opciót, az ugrások utáni földre érkezéskor a képernyő finoman rugózik
-\cl_smoothviewheight\Ha bekapcsolod ezt az opciót, leguggolás során a nézőpont változása finoman történik
-\v_idlescale\Ha bekapcsolod ezt az opciót, egy helyben való ácsorgás során a képernyő ingadozik, mintha finoman jobbra-balra tekintgetnél
-\cl_bob\A képernyő biccentése járás közben
-\chase_back\A csúszkával a kamera hátrafelé való távolságát tudod beállítani harmadik személy nézet esetén 
-\chase_up\A csúszkával a kamera felfelé való távolságát tudod beállítani harmadik személy nézet esetén
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL FEGYVER BEÁLLÍTÁSOK ABLAK
-\XonoticMultiplayerDialog/Fegyver beállítások\A legkedveltebb fegyver, önműködő fegyverváltás és fegyvermodell pozíciójának beállításai
-\cl_weaponpriority_useforcycling\A bal oldali lista használata, amikor az előző fegyver/következő fegyver gombokkal váltasz a fegyverek között
-\cl_autoswitch\A játék önmagától átvált az újonnan felvett fegyverre, ha az jobb az addig kézben tartottnál az elsőbbségi lista szerint
-\r_drawviewmodel\Az éppen kézben tartott fegyver megjelenítése
-\cl_gunalign\Fegyvermodell helyzete. FIGYELEM! Ha játék közben vagy, újra kell csatlakoznod a szerverhez (helyi játék esetén újra kell indítanod azt), hogy a változtatás életbe lépjen!
-\cl_followmodel\A fegyver mozgatása a tekinteteddel együtt, ahogy nézelődsz
-\cl_bobmodel\A fegyver finom fel-le mozgatása futás során, mintha valóban a kezedben lenne
-\cl_viewmodel_scale\A kirajzolt fegyvermodell mérete
-
-//TÖBBJÁTÉKOS MENÜ JÁTÉKOS BEÁLLÍTÁSOK FÜL HUD BEÁLLÍTÁSOK ABLAK
-\hud_damage\Véres foltok rajzolása a képernyőre sérülés esetén. A csúszkával a vérfoltok mennyiségét tudod szabályozni (0 - letiltva)
-\hud_damage_factor\A csúszkával a sérülés esetén a képernyőre rajzolt vérfoltok átlátszóságát tudod szabályozni. Az érték növelésével a foltok egyre kevésbé lesznek átláthatóak
-\hud_damage_fade_rate\A csúszkával a sérülés esetén a képernyőre rajzolt vérfoltok elhalványulásának sebességét tudod szabályozni. Az érték növelésével a foltok gyorsabban eltűnnek a látómeződből
-\cl_hidewaypoints\Különböző játéktípusok során iránypontok rajzolása a képernyőre, amik segítenek a tájékozódásban (pl. bázisok, generátorok, uralmi pontok helyzete stb.)
-\g_waypointsprite_scale\A csúszkával az iránypontok méretét tudod szabályozni. A nagyobb értékek nagyobb feliratokat eredményeznek
-\g_waypointsprite_alpha\A csúszkával az iránypontok átlátszóságát tudod szabályozni. Az érték növelésével az iránypontok egyre kevésbé lesznek átláthatóak
-\g_waypointsprite_edgeoffset_bottom\A csúszkával az iránypontoknak a képernyő széleitől mért távolságát tudod szabályozni. Az érték növelésével az iránypontok távolabb kerülnek a képernyő széleitől.
-\hud_shownames\A látómeződben tartózkodó játékosok nevének mutatása
-\hud_shownames_crosshairdistance\Csak azon játékosok nevének mutatása, akit épp célba vettél
-\hud_shownames_status\Csapatjátékokban a csapattársaid neve alatt az életerejük és páncélzatuk állapota is jelenjen meg
-
-//BEÁLLÍTÁSOK ABLAK BEMENET FÜL
-\XonoticSettingsDialog/Bemenet\Billentyűzetkiosztás, egér és botkormány beállítások
-\con_closeontoggleconsole\A konzol egy különleges interfész, amelynek segítségél különböző parancsokat tudsz adni a játéknak (a parancsok listáját megtalálhatod az Egyéb -> Haladó beállítások alatt). Ennek az opciónak a bekapcsolásával a konzolnyitó billentyűvel be is tudod zárni a konzolt. A konzolnyitó billentyű (BACKQUOTE) sajnos nem létezik magyar billentyűzeten, ezért ha ilyet használsz, először meg kell változtatnod a billentyű hozzárendelést a bal oldali listában (Kliens: belépés a konzolba), vagy használd a SHIFT+ESC kombinációt.
-\cl_movement_track_canjump\Ha lenyomva tartod mozgás közben az ugrás billentyűt, földet érés után automatikusan újra ugrik a karaktered
-\joy_enable\Ha botkormányt vagy kontrollert szeretnél használni a játék irányításához, kapcsold be ezt az opciót
-\sensitivity\Ezzel a csúszkával az egér érzékenységét tudod szabályozni. A magasabb értékek érzékenyebb egeret eredményeznek 
-\m_filter\Simítja az egérmozgást, de így célzás pontossága némiképp csökkenhet
-\m_pitch\Fordított egérmozgás az Y-tengely (fel-le) mentén
-\menu_mouse_speed\Egér sebessége a menüben, nincs hatással a játékbeli célzásra
-\m_accelerate\Amikor gyorsan húzod az egeret, a játék rásegít egy kicsit, de a lassú egérmozgások sebességét nem változtatja
-\vid_dgamouse\Segíti a DGA egér bemenet használatát
-
-//BEÁLLÍTÁSOK ABLAK VIDEÓ FÜL
-\XonoticSettingsDialog/Videó\Videó beállítások: képernyő felbontás, színmélység, fényerő, kontraszt, stb.
-\_menu_vid_width\A csúszkával a képernyő felbontását tudod megváltoztatni. TIPP: Ha több monitorod van, és a kép az összes monitorra szét van feszítve, akkor az Egyéb -> Haladó beállításokban keresd ki a listából a "vid_netwmfullscreen" változót, és állítsd át az értékét "1"-re! Ez megoldja problémát, de ebben az esetben csak a képernyőd natív felbontását tudod csak használni! 
-\menu_vid_scale\A csúszkával a menü és más feliratok betűméretét tudod beállítni
-\vid_bitsperpixel\Színmélyég BPP-ben (bits per pixel). Az ajánlott színmélyég 32bit
-\vid_fullscreen\Teljes képernyős mód engedélyezése (alapértelmezett: engedélyezve)
-\vid_vsync\A függőleges szinkronizáció engedélyezése, a megjelenített kép szétesésének megakadályozására. A másodpercenként leképzett képkockák számát (FPS) a képernyő frissítési frekvenciájához igazítja (alapértelmezett: kikapcsolva)
-\gl_texture_anisotropy\Az anizotrópikus szűrés használatával a megjelenített textúrák távolságtól függetlenül is élesek maradnak, így javul a képminőség. FIGYELEM! Jelentősen csökkenheti a teljesítményt gyengébb számítógépeken (alapérték: 1x)
-\vid_samples\Az élsimítás engedélyezésével a leképzett 3D-s tárgyak széleinek "csipkézettsége" csökken. FIGYELEM! Jelentősen csökkenheti a teljesítményt gyengébb számítógépeken (alapértelmezett: letiltva)
-\r_viewfbo\A jó minőségű Framebuffer használatával tovább javíthatod "Ragyogás" és a "Mozgási elmosódás" effektek minőségét. Az opció engedélyezése az Élsimítás tiltásával jár. 
-\r_depthfirst\Leképzés előtt egy távolságteszt történik, és az aktuális leképzés a közelebbi eseményekkel, tárgyakkal kezdődik. Ez vonatkozhat csak a világ geometriájára, illetve a modellekre is (alapértelmezett: letiltva)
-\gl_vbo\A gyorsabb leképzés érdekében a megjelenítendő statikus geometria a videó memóriában ún. Vertex Buffer Objectként kerül tárolásra (alapértelmezett: Csúcspontok és háromszögek, kompatibilis)
-\v_brightness\A képernyő fényereje, a fekete szín fényességének változtatásával (alapérték: 0)
-\v_contrast\A csúszkával a képernyő kontrasztját tud szabályozni, azaz a fehér szín fényességét (alapérték: 1)
-\v_gamma\Fordított gamma korrekciós érték, egy fényességi hatás , ami nem befolyásolja a fehéret vagy feketét (alapérték: 1)
-\v_contrastboost\A csúszkával a sötét területek kontrasztját tudod növelni (alapérték: 1)
-\r_glsl_saturation\Színtelítettség beállítása  (0 = szürke, 1 = normál, 2 = túltelített ), GLSL színkezelés szükséges (alapérték: 1)
-\r_ambient\Környezeti világítás, a túl magasra beállítás a kép fakóságát eredményezheti (alapérték: 4)
-\r_hdr_scenebrightness\Általános világosság  (alapérték: 1)
-\gl_finish\A processzor megvárja amíg a videókártya befejezi a képkockát leképzését, ez segíthet egyes gépeken jelentkező furcsa bemeneti és videó késés problémák kiküszöbölésében (alapértelmezett: letiltva)
-\r_glsl\Az OpenGL 2.0 pixel shaderek használatának engedélyezése (alapértelmezett: engedélyezve)
-\v_glslgamma\A GLSL alkalmazása a gamma korrekcióhoz, Megjegyzendő, hogy jelentősen csökkenheti a teljesítményt  (alapértelmezett: letiltva)
-\v_psycho\Ilyet lehet az, ha LSD hatása alatt játszol. FIGYELEM! Epilepsziások számára nagyon nem ajánlott!
-\r_trippy\A képernyő ide-oda hullámzik, mintha részeg lennél, mint a csap.
-\v_flipped\A teljes képernyő vízszintes tükrözése, "szegény ember bal kezes módja". (alapértelmezett: ki)
-
-//BEÁLLÍTÁSOK ABLAK HATÁSOK FÜL
-\XonoticSettingsDialog/Effektek\Különböző grafikai effektek beállításai: geometriai részletesség, textúra élesség, fények, árnyékolás, tükröződés, utófeldolgozás stb.
-\r_subdivisions_tolerance\A csúszkával az ívelt geometria finomságát, részletességét tudod szabályozni (alapértelmezett: normál)
-\gl_picmip\A csúszkával a textúrák élességét tudod beállítani. Kisebb érték hatásosan csökkenti a textúra memória használatot, de a textúrák megjelenése csúnyább, homályosabb lesz. (alapértelmezett: jó)
-\r_texture_dds_load\Veszteségmentes DDS textúrák használata TGA helyett, ha lehetséges
-\mod_q3bsp_nolightmaps\Nagy részletességű fénytérképek használata a statikus árnyékok leképzéséhez, ami szépen néz ki, de kissé megemeli a szükséges videó memória mennyiségét (alapértelmezett: engedélyezve)
-\r_glsl_deluxemapping\Képpontokkénti megvilágítás és árnyékolás használata a statikus fényekhez. A textúrák nagy része így olyan lesz, mintha valós felületük lenne. (alapértelmezett: engedélyezve)
-\r_shadow_gloss\A felületek felszínén megcsillanó fény engedélyezése. (alapértelmezett: engedélyezve)
-\cl_particles_quality\A különböző effektek (robbanások, becsapódások) által létrehozott effekt-részecskék számának szorzója. A kisebb értékek kevesebb részecske megjelenítését eredményezik, ami gyengébb gépeken növelheti a teljesítményt. (alapérték: 1.0)
-\r_drawparticles_drawdistance\A különböző effektek (robbanások, becsapódások) által létrehozott effekt-részecskék maximális megjelenítési távolsága (azaz ettől az értéktől messzebb már nem jelennek meg). (alapérték: 1000)
-\cl_damageeffect\A csúszkával a fegyverek típusától függően a sebzési effektek megjelenítését (pl. vérzés, kis lángnyelvek, elektromos kisülések stb.) szabályozhatod a játékos karaktereken (teljesen letilhatod, csak a játékosok testrészein jelenjenek meg, ahol a becsapódás történt, vagy minden modellen).  
-\cl_decals\Becsapódási nyomok (égési és robbanási nyomok, vérfoltok) engedélyzése és tiltása (alapértelmezett: engedélyezve)
-\cl_decals_models\Becsapódási nyomok, (égési nyomok, vérfoltok) engedélyzése és tiltása a játékos karakterek testén is
-\r_drawdecals_drawdistance\A becsapódási nyomok maximális megjelenítési távolsága (azaz ettől az értéktől messzebb már nem jelennek meg) (alapérték: 300)
-\cl_decals_time\A becsapódási nyomok eltűnésének kezdetének időtartama másodpercben mérve (alapérték: 2)
-\r_coronas\Fényudvarok megjelenítése bizonyos effektek körül. (alapértelmezett: engedélyezve)
-\r_coronas_occlusionquery\A fényudvarok elhalványítása láthatóságuk szerint (alapértelmezett: engedélyezve)
-\gl_flashblend\Gyors, de nagyon csúnya dinamikus fényekeffektek megjelenítése a valós dinamikus világítás helyett. Csak nagyon gyenge számítógépek esetén ajánlott (alapértelmezett: letiltva)
-\r_shadow_realtime_dlight\Dinamikus fényeffektek engedélyezése, mint pl. robbanások és rakéták fényei (alapértelmezett: engedélyezve)
-\r_shadow_realtime_dlight_shadows\A dinamikus fényeffektek árnyékokat is vetnek (alapértelmezett: letiltva)
-\r_shadow_realtime_world\Teljesen valós idejű és dinamikus megvilágítások engedélyezése azokon a pályákon, amik támogatják. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)
-\r_shadow_realtime_world_shadows\A teljesen valós idejű és dinamikus fények árnyékokat is vetnek. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)
-\r_shadow_usenormalmap\A dinamikus fényeffektek által vetett árnyékok megjelenítése a textúrákon (alapértelmezett: engedélyezve)
-\r_shadow_shadowmapping\A dinamikus fényeffektek által vetett árnyékok simítása, finomítása. Az opció használatához engedélyezned kell a Vertex Buffer Objectek használatát (Videó fül).
-\r_glsl_offsetmapping\A texúrák kidomborításának engedélyezése, mintha valódi felületük lenne (alapértelmezett: letiltva)
-\r_glsl_offsetmapping_reliefmapping\Még jobb minőségű, finomabb Offset mapping. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva)
-\r_bloom\A fényes testek felületén végigfutó halvány, derengő ragyogás engedélyezése FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott! (alapértelmezett: letiltva).
-\r_water\Valós idejű tükröződések, portálok és fénytörések engedélyzése. FIGYELEM! Az opció bekapcsolása jelentősen ronthatja a grafikai teljesítményt, az opció bekapcsolása csak nagyon erős számítógéppel rendelkezők számára ajánlott!  (alapértelmezett: letiltva)
-\r_water_resolutionmultiplier\Tükröződések/A csúszkával a valós idejű tükröződési effektek minőségét tudod szabályozni. (alapértelmezett: jó)
-\r_motionblur\A csúszkával a mozgási elmosódás intenzivitását tudod szabályozni. Az ajánlott érték 0.4
-\hud_postprocessing_maxbluralpha\Extra képernyő effektek engedélyezése, mint pl. víz alatti hullámok, Sebzésnövelő használata során extra kontrasztos látómező stb.
-
-//BEÁLLÍTÁSOK ABLAK HANG FÜL
-\XonoticSettingsDialog/Hang\Hang beállítások: sávok és csatornák hangerejének beállítása, figyelmeztető hangok, gúnyolódások stb. 
-\mastervolume\A csúszkával a játék általános hangerejét állíthatod be 
-\bgmvolume\A csúszkával a játék háttérzenéjének hangerejét állíthatod be
-\snd_staticvolume\A csúszkával a pályák háttérzajainak (gépek motorhangjai, lámpák zümmögése, dörgés stb.) hangerejét állíthatod
-\snd_channel0volume\A csúszkával a játék során hallható információs hangok (figyelmeztetések, visszaszámlálások stb.) 
-\snd_channel3volume\A csúszkával a játék során a felvett tárgyak effektjeinek hangerejét állíthatod be
-\snd_channel6volume\A csúszkával a játékosok fájdalmas nyögéseinek és sikolyainak hangerejét állíthatod be
-\snd_channel7volume\A csúszkával a játékosok egyéb hangjainak hangerejét állíthatod be
-\snd_channel4volume\A csúszkával a robbanások, becsapódások hangerejét állíthatod be
-\snd_channel2volume\A csúszkával a játékosok gúnyolódásainak és egyéb üzeneteinek hangerejét állíthatod be
-\snd_channel1volume\A csúszkával a fegyverek elsülésének hangerejét állíthatod be
-\snd_mutewhenidle\A játék teljes némítása, ha pl. ALT-TAB-bal átváltasz egy másik programra, minimalizálod, stb.
-\snd_speed\Hang kimenet frekvenciája
-\snd_channels\A hang kimenet csatornáinak száma 
-\snd_swapstereo\A jobb és bal hangcsatornák felcserélése
-\snd_spatialization_control\A jobb és bal hangcsatornák enyhe összemosása, a sztereó szétválasztás csökkentésére fejhallgatókban
-\cl_autotaunt\Ha megölsz valakit, kigúnyolod egy mindenki álltal hallható hangüzenetben. A csúszkával ezeknek a beszólásoknak a gyakoriságát változtathatod
-\cl_sound_maptime_warning\Figyelmeztető hang, ami a meccsből hátralévő percekről tájékoztat
-\cl_hitsound\Találatjelző hang adása, ha sikeresen eltaláltad az ellenségedet
-\menu_sounds\Menühangok engedélyezése, ha valamire rákattintasz, vagy az opciók felett mozgatod az egeret
-\con_chatsound\Pittyenések szöveges csevely üzenetek esetén
-\cl_announcer_maptime\Figyelmeztető hangok lejátszása az adott játékból hátralévő időről. Ez történhet az utolsó egy percben, csak akkor, ha még 5 perc van hátra, vagy mindkét esetben
-
-//BEÁLLÍTÁSOK ABLAK FELHASZNÁLÓ FÜL
-\XonoticSettingsDialog/Felhasználó\Menü felületek, nyelvezet beállítása, statisztika stb.
-\XonoticSettingsDialog/Nyelv beállítása\A játék fordításának és nyelvezetének beállítása. A gombra kattintva a játék menüje újraindul a listában kiválasztott fordítással
-\cl_gentle\A véres és erőszakos grafikai tartalmak cserélése színes mintákká, "gyerek barát mód" (alapértelmezett: letiltva)
-\cl_allow_uidtracking\Játékos statisztikák gyűjtésének és elküldésének engedélyezése, mint pl. tüzelési pontosság, gyilokok száma, összegyűjtött pontok, stb. A statisztikák bármikor megtekinthetők a http://stats.xonotic.org weboldalon 
-\cl_allow_uid2name\Az opció engedélyezésével a http://stats.xonotic.org weboldalon a nickneved is szerepelni fog, így könnyebben megtalálhatod magad
-
-//BEÁLLÍTÁSOK ABLAK EGYÉB FÜL
-\XonoticSettingsDialog/Egyéb\Hálózati beállítások, FPS limit, haladó beállítások stb.
-\_cl_rate\A csúszkával a hálózati kapcsolatod sebessége és típusát tudod meghatározni 
-\cl_netfps\A csúszkával a szerver felé küldött adatcsomagok másodpercenkénti számát tudod beállítani. Magasabb érték finomabb mozgást eredményezhet.
-\cl_port\Az adott UDP port használata az alapértelmezett helyett
-\shownetgraph\Csomagméret és egyéb információk grafikonjának kirajzolása játék közben a képernyő jobb alsó sarkába
-\cl_movement\Kliensoldali mozgásbecslés engedélyezése. Ez az opció rossz minőségű, vagy lassú kapcsolat esetén segíthet a késés (lag) okozta mozgási problémák javításában
-\cl_movement_errorcompensation\Összeveti a szerver és a kliens adatait a mozgásról, tovább finomítva és pontosítva azt
-\cl_curl_maxdownloads\A csúszkával az egyszerre futó HTTP/FTP letöltések (pályák, modellek stb.) maximális számát tudod beállítani
-\cl_curl_maxspeed\A csúszkával a maximális letöltési sebességet tudod beállítani
-\cl_maxfps\A csúszkával a maximális képfrissítési (képkocka per másodperc, FPS) sebességet tudod beállítani.
-\cl_minfps\A csúszkával a minimális képfrissítési (képkocka per másodperc, FPS) sebességet tudod beállítani. Ha a gép teljesítménye nem bírja, akkor a játék automatikusan visszavesz egyes grafikai elemek minőségéből, hogy a kívánt minimális értéket tartani tudja
-\showfps\A másodpercenként megjelenített képkockák (FPS) számának kijelzése a képernyő jobb alsó sarkában  
-\menu_tooltips\A csúszkával a menüopciók tippjeinek részletesség tudod beállítani. Letilthatod az összes tippet, iletve a "Részletes" választása esetén a tippek mellett az adott változó is megjelenik
-\showtime\Az aktuális időt kijelzése a képernyő jobb alsó sarkában
-\showdate\Az aktuális dátum kijelzése a képernyő jobb alsó sarkában
-\developer\Fejlesztők számára fenntartott menü opció, rendszerüzenetek és egyéb információk kijelzésére, RENDES JÁTÉK ESETÉN BEKAPCSOLÁSA NEM AJÁNLOTT. Hasznos lehet ellenben hibakeresés és bejelentés során.
-\XonoticSettingsDialog/Haladó beállítások...\Haladó beállítások, ahol finomíthatod a játék minden egyes változóját. Ha nem értesz hozzá, inkább ne piszkáld...
-
-\XonoticTeamSelectDialog/Csatlakozás a 'legjobb' csapathoz (auto-választás)\Automatikus csapatválasztás a játék állásának és játékosok számának függvényében (ajánlott)
-\XonoticTeamSelectDialog/Vörös\Csatlakozás a Vörös csapathoz
-\XonoticTeamSelectDialog/Kék\Csatlakozás a Kék csapathoz
-\XonoticTeamSelectDialog/Sárga\Csatlakozás a Sárga csapathoz
-\XonoticTeamSelectDialog/Rózsaszín\Csatlakozás a Rózsaszín csapathoz
-
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticCreditsDialog\A Xonotic készítőinek és segítségnyújtóinak listája
-\XonoticQuitDialog\Kilépés a játékból
-\XonoticQuitDialog/Igen\Vissza a munkához...
-\XonoticQuitDialog/Nem\A mészárlás folytatódik!
-
-//SEHOL SE HASZNÁLT, DE MÉG JÓL JÖHET KÉSŐBB
-\cl_voice_directional\Irányított hangok engedélyezése
-\cl_voice_directional_taunt_attenuation\A távolság, ahonnan a gúnyolódás még hallható
-\viewsize\HUD hátterének engedélyezése/letiltása
-\r_hdr\A bloom magas minőségű verziója, ami óriási hatással van a teljesítményre. (alapértelmezett: letiltva)
-\r_damageblur\Mozgási elmosódás mértéke sérülés esetén – ajánlott értéke 0.4
-\r_showsurfaces\Textúra összetettség letiltása nagyon lassú gépeken. Ez egy  nagy gyorsulást hozz a teljesítményben, de nagyon csúnyán néz ki. (alapértelmezett: letiltva)
-\r_picmipworld\Ha ha be van állítva, csak a modellek textúra minősége csökken (alapértelmezett: engedélyezve)
-\gl_texturecompression\Textúrák tömörítése, hogy a videokártyán található memóriából kevesebbet használjon (alapértelmezett: nem)
-
-\v_kicktime\Mennyi ideig legyen a kép kiütve a  sérülés után (alapérték: 0)
-\cl_nolerp\Engedélyezi a hálózat frissítés simítását
diff --git a/tooltips.db.it b/tooltips.db.it
deleted file mode 100644 (file)
index 1a919bc..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-0
-\XonoticSingleplayerDialog\Gioca la campagna in giocatore singolo o una partita istantanea contro dei bot
-
-
-\XonoticMultiplayerDialog\Gioca online, contro i tuoi amici in LAN, guarda demo o cambia le impostazioni del giocatore
-\XonoticMultiplayerDialog/Server\Cerca dei server dove giocare
-\menu_slist_showempty\Mostra server vuoti
-\menu_slist_showfull\Mostra server pieni che non hanno slot disponibili
-\net_slist_pause\Ferma l'aggiornamento della lista server per prevenire il continuo spostamento di posizione dei server
-\XonoticMultiplayerDialog/Info...\Mostra maggiori informazioni riguardo il server attualmente selezionato
-\XonoticMultiplayerDialog/Aggiungi tra i preferiti\Aggiungi nel segnalibri il server attualmente selezionato in modo che sia più veloce da trovare in futuro
-\XonoticMultiplayerDialog/Crea\Ospita la tua partita
-\XonoticMultiplayerDialog/Demo\Naviga e vedi le demo
-\XonoticMultiplayerDialog/Setup giocatore\Personalizza le tue impostazioni del giocatore
-
-\XonoticTeamSelectDialog/entra nel 'miglior' team (auto-selezione)\Autoseleziona team (raccomandato)
-\XonoticTeamSelectDialog/rosso\Entra nel team rosso
-\XonoticTeamSelectDialog/blu\Entra nel team blu
-\XonoticTeamSelectDialog/giallo\Entra nel team giallo
-\XonoticTeamSelectDialog/rosa\Entra nel team rosa
-
-\timelimit_override\Tempo limite in minuti che appena raggiunto terminerà la partita
-\fraglimit_override\Il numero di frag necessari prima che la partita finisca
-\menu_maxplayers\Il massimo numero di giocatori o bot che possono essere connessi al tuo server alla volta
-\bot_number\Numero di bot nel tuo server
-\skill\Specifica quanto i bot saranno esperti
-\g_maplist_votable\Numero di mappe che sono mostrate nel voto delle mappe alla fine di una partita
-\sv_vote_simple_majority_factor\La semplice maggioranza vince il voto
-\XonoticMultiplayerDialog/Impostazioni avanzate...\Impostazioni avanzate del server
-\XonoticMultiplayerDialog/Mutatori...\Mutatori e arene di armi
-\g_dodging\Abilita schivamento
-\g_cloaked\Tutti i giocatori sono quasi invisibili
-\g_footsteps\Abilita suoni dei passi
-\g_midair\È possibile infliggere danni al tuo nemico solo quando è per aria
-\g_vampire\Il danno causato al tuo nemico aumenta la tua vita
-\g_bloodloss\L'ammontare di vita sotto la quale il tuo giocatore viene stordito per la perdita di sangue
-\sv_gravity\Rendi la caduta degli oggetti più lenta, valori inferiori significano minor gravità
-\g_grappling_hook\I giocatori nascono con il grappling hook
-\g_jetpack\I giocatori nascono col jetpack
-\g_pinata\I giocatori rilasceranno tutte le armi che possedevano appena vengono uccisi
-\g_weapon_stay\Le armi rimangono dopo che vengono raccolte
-\g_weaponarena\Selezionando un'arena dedicata ad un'arma si darà a tutti i giocatori quell'arma con munizioni infinite, e disabiliterà tutti gli altri raccoglimenti delle armi.
-\g_instagib\Ai giocatori sarà dato il Minstanex, che è un railgun con danni illimitati. Se il giocatore rimane senza munizioni, avrà 10 secondi per trovarne alcune, altrimenti morirà. Il fuoco secondario è un laser che non infligge nessun danno ed è buono per effettuare vari trickjump.
-\g_nix\"No items Xonotic" - invece di raccogliere oggetti, ognuno giocherà con la stessa arma. Dopo un pò di tempo, un conto alla rovescia inizierà, dopo il quale ognuno passerà ad un'altra arma.
-\g_nix_with_blaster\Porta sempre il laser come arma aggiuntiva nella modalità "No items Xonotic"
-\XonoticMultiplayerDialog/Seleziona tutto\Seleziona tutte le mappe
-\XonoticMultiplayerDialog/Deseleziona tutto\Deseleziona tutte le mappe
-
-
-\XonoticMultiplayerDialog/Timedemo\Testa quanto velocemente il tuo computer fa girare il demo selezionato
-
-\fov\Il campo di vista da 60 a 130 gradi, di default è a 90 gradi
-\cl_bobcycle\Frequenza dell'ondeggiamento della visuale, disabilita per nessun ondeggiamento
-\cl_zoomfactor\Quanto grande è il fattore zoom quando il tasto per lo zoom viene premuto
-\cl_zoomsensitivity\Come lo zoom fa variare la sensibilità del mouse, da 0 (sensibilità più bassa) a 1 (nessun cambio di sensibilità)
-\cl_zoomspeed\Quando velocemente la vista viene zoomata, disabilitalo per lo zoom istantaneo
-\XonoticMultiplayerDialog/Impostazioni arma...\Imposta le tue armi preferite, i cambi automatici e le impostazioni dei modelli delle armi
-
-\cl_weaponpriority_useforcycling\Usa la lista qui sotto per definire le armi usando la rotellina del mouse
-\cl_autoswitch\Automaticamente passa all'arma appena raccolta se è migliore di quella che stavi già usando
-\r_drawviewmodel\Mostra il modello dell'arma
-\cl_gunalign\Posizione del modello dell'arma; richiede riconnessione
-
-\crosshair_per_weapon\Imposta un differente mirino per ogni arma, buono se giochi senza i modelli delle armi
-\crosshair_color_per_weapon\Imposta il colore del mirino dipendente dall'arma che stai correntemente usando
-\crosshair_size\Imposta la dimensione del mirino
-\crosshair_alpha\Imposta l'opacità del mirino
-\crosshair_color\Imposta il colore del mirino
-\sbar_hudselector\Usa il tema del vecchio HUD
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Nome col quale apparirai nel gioco
-
-\XonoticSettingsDialog\Cambia le impostazioni del gioco
-\XonoticCreditsDialog\I crediti di Xonotic
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Esci dal gioco
-\XonoticQuitDialog/Sì\Devo tornare a lavorare...
-\XonoticQuitDialog/No\Ho ancora un pò di frag da fare!
-
-\XonoticSettingsDialog/Comandi\Impostazioni input
-\sensitivity\Moltiplicatore velocità del mouse
-\menu_mouse_speed\Velocità mouse nel menu, non riguarda il puntamento nel gioco
-\m_filter\Rendi più morbido il movimento del mouse, però rende la sua risposta leggermente più lenta
-\m_pitch\Inverti il movimento del mouse nell'asse Y
-\vid_dgamouse\Fai uso dell'input DGA del mouse
-\con_closeontoggleconsole\Rendi il tasto di chiusura console uguale a quella di apertura
-
-\XonoticSettingsDialog/Video\Impostazioni video
-\vid_width\Risoluzione schermo
-\vid_bitsperpixel\Bit per pixel (BPP) per il rendering, 32 è raccomandato
-\vid_fullscreen\Abilita modalità a tutto schermo (predefinito: abilitato)
-\vid_vsync\Abilita la sincronizzazione verticale per prevenire la lacrimazione (tearing), imposta il limite massimo di fps alla velocità di aggiornamento dello schermo (predefinito: disabilitato)
-\gl_texture_anisotropy\Qualità del filtro anisotropico (predefinito: 1x)
-\r_glsl\Abilita i pixel shader OpenGL 2.0 per l'illuminazione (predefinito: abilitato)
-\gl_vbo\Fai uso dei Vertex Buffer Objects per salvare nella memoria grafica la geometria statica per un rendering più veloce (predefinito: Vertici e Triangoli)
-\r_depthfirst\Elimina eccesso di disegno (overdraw) eseguendo il rendering della sola profondità della scena prima di iniziare il rendering "standard" (predefinito: disabilitato)
-\gl_texturecompression\Comprimi le texture per le schede video con poca memoria grafica disponibile (predefinito: Nessuna)
-\gl_finish\Fa in modo che la CPU attenda che la GPU finisca di elaborare ogni frame, può aiutare con alcuni strani input o in presenza di video lag in alcune macchine (predefinito: disabilitato)
-\v_brightness\Luminosità del nero (predefinito: 0)
-\v_contrast\Luminosità del bianco (predefinito: 1)
-\v_gamma\Valore della correzione gamma inversa, un effetto di luminosità che non tocca il bianco o il nero (predefinito: 1.125)
-\v_contrastboost\Di quanto viene moltiplicato il contrasto nelle aree oscure (predefinito: 1)
-\r_glsl_saturation\Adattamento saturazione (0 = scala di grigi, 1 = normale, 2 = sovra-saturo), richiede il GLSL color control (predefinito: 1)
-\v_glslgamma\Abilita l'uso delle GLSL per applicare la correzione gamma, nota che le performance potrebbero decrementare di tanto (predefinito: disabilitato)
-\r_ambient\Luminosità dell'ambiente, se è impostato ad un valore troppo alto tende a rendere la luce delle mappe opaca e piatta (predefinito: 4)
-\r_hdr_scenebrightness\Luminosità del rendering globale (predefinito: 1)
-\vid_samples\Abilita l'antialiasing, che smussa i bordi dei modelli in 3D. Nota che le performance potrebbero decrementare di un bel pò (predefinito: disabilitato)
-\v_flipped\Modalità mancino (Predefinito: off)
-
-\XonoticSettingsDialog/Effetti\Impostazioni effetti
-\r_subdivisions_tolerance\Cambia lo smussamento delle curve della mappa (predefinito: normali)
-\gl_picmip\Cambia la nitidezza delle textures. Valori più bassi riducono l'uso della memoria per le texture, però faranno apparire quest'ultime molto sfuocate. (predefinito: buona)
-\r_picmipworld\Se impostato, riduce solo la qualità delle texture dei modelli (predefinito: abilitato)
-\mod_q3bsp_nolightmaps\Usa le mappe di luce ad alta risoluzione, che appaiono più gradite alla vista, però sfruttano più memoria video (predefinito: abilitato)
-\cl_particles_quality\Moltiplicatore del numero di particelle. Valori inferiori significano meno particelle, che di conseguenza incrementano le performance (predefinito: 1.0)
-\r_drawparticles_drawdistance\Distanza per cui le particelle non vengono mostrate (predefinito: 1000)
-\cl_decals\Abilita i decal (buchi dei proiettili e sangue) (predefinito: abilitati)
-\r_drawdecals_drawdistance\I decal più lontano di questa distanza non vengono mostrati (predefinito: 300)
-\cl_decals_time\Tempo in secondi passato il quale i decal sfumano (predefinito: 2)
-\cl_gentle\Sostituisci il sangue e i gib con contenuti che non hanno alcun effetto di sangue (predefinito: disabilitato)
-\cl_nogibs\Riduci il numero di gib o rimuovili completamente (predefinito: parecchi)
-\v_kicktime\Quanto dura un colpo alla visuale per il danno (predefinito: 0)
-\r_glsl_deluxemapping\Usa gli effetti di illuminazione pixel per pixel (predefinito: abilitati)
-\r_shadow_gloss\Abilita l'uso della lucentezza delle mappe sulle texture che la supportano (predefinito: abilitati)
-\gl_flashblend\Abilita luci dinamiche più veloci ma meno gradevoli tramite il rendering di corone luminose invece di luci dinamiche reali (predefinito: disabilitato)
-\r_shadow_realtime_dlight\Abilita il rendering delle luci dinamiche come esplosioni e lancio di razzi (predefinito: abilitato)
-\r_shadow_realtime_dlight_shadows\Abilita il rendering di ombre dalle luci dinamiche (predefinito: abilitato)
-\r_shadow_realtime_world\Abilita il rendering delle luci dell'ambiente in tempo reale in mappe che le supportano. Nota che questo potrebbe avere un grande impatto sulle performance. (predefinito: disabilitato)
-\r_shadow_realtime_world_shadows\Abilita il rendering di ombre dalle luci dell'ambiente in tempo reale (predefinito: disabilitato)
-\r_shadow_usenormalmap\Abilita l'uso di ombre direzionali sulle texture (predefinito: abilitato)
-\r_showsurfaces\Disabilita completamente le texture per hardware molto lento. Questo dà un enorme boost alle performance, però appare molto poco gradevole. (predefinito: disabilitato)
-\r_glsl_offsetmapping\Effetto del mappaggio in offset che fa sembrare che le texture con bumpmaps "saltino fuori" dalle piane superfici in 2D (predefinito: disabilitato)
-\r_glsl_offsetmapping_reliefmapping\Mappaggio dell'offset di maggior qualità, che ha anche un enorme impatto sulle performance (predefinito: disabilitato)
-\r_water\Qualità dei riflessi e delle rifrazioni, ha un enorme impatto sulle performance nelle mappe superfici riflettenti (predefinito: disabilitato)
-\r_water_resolutionmultiplier\Risoluzione dei riflessi/rifrazioni (predefinito: buona)
-\r_coronas\Abilita i bagliori corona attorno a determinate luci (predefinito: abilitati)
-\r_coronas_occlusionquery\Dissolvi corone rispetto a visibilità (predefinito: abilitato)
-\r_bloom\Abilita effetti bloom, che illuminano i pixel più vicini a pixel molto luminosi. Hanno un grosso impatto sulle performance. (predefinito: disabilitato)
-\r_hdr\Versione a più alta qualità dei bloom, che hanno un enorme impatto sulle performance. (predefinito: disabilitato)
-\r_motionblur\Intensità della sfocatura da movimento - raccomandato a 0.4
-
-\XonoticSettingsDialog/Audio\Impostazioni audio
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Frequenza di campionamento in uscita
-\snd_channels\Numero di canali in uscita
-\snd_swapstereo\Inverti canali sinistro/destro
-\snd_spatialization_control\Abilita spazialità (mischia leggermente i canali destro e sinistro per decrementare di un pò la separazione stereo per le cuffie)
-\cl_voice_directional\Abilita voci direzionali
-\cl_voice_directional_taunt_attenuation\Distanza dalla quale gli insulti possono essere uditi
-\cl_autotaunt\Automaticamente insulta i nemici quando gli fragghi
-\cl_sound_maptime_warning\Un annuncio ti avverte dei minuti rimanenti alla fine della partita
-\cl_hitsound\Riproduci un suono quando il tuo sparo colpisce un nemico
-\menu_sounds\Riproduci suoni quando clicchi o navighi su oggetti del menu
-
-\XonoticSettingsDialog/Rete\Impostazioni di rete
-\cl_movement\Abilita predizione del movimento lato client
-\cl_nolerp\Abilita aggiornamento da rete spianato
-\shownetgraph\Mostra un grafico delle dimensioni dei pacchetti e di altre informazioni
-\_cl_rate\Specifica la velocità della tua rete con questa barra
-\cl_netfps\Quanti pacchetti in ingresso inviare al server ogni secondo
-\cl_curl_maxdownloads\Massimo numero di download HTTP/FTP contemporanei
-\cl_curl_maxspeed\Velocità massima di download
-\cl_port\Forza il client a usare la porta selezionata a meno che non è impostata a 0
-
-\XonoticSettingsDialog/Altro\Impostazioni varie
-\showtime\Mostra l'orario corrente, utile negli screenshot
-\showdate\Mostra la data corrente, utile negli screenshot
-\showfps\Mostra i fotogrammi al secondo
-
-\XonoticSettingsDialog/Impostazioni avanzate...\Impostazioni avanzate dove puoi mettere mano ad ogni singola variabile del gioco
-\g_friendlyfire\Percentuale di danno inflitto ai compagni di squadra
-\g_mirrordamage\Percentuale di danno inflitto ai compagni di squadra che viene riversato su di te
-\g_tdm_teams_override\Non tenere conto del numero predefinito di squadre nei giochi di squadra
-
-\viewsize\Abilita/disabilita lo sfondo dell'HUD
-\cl_hidewaypoints\Mostra vari waypoint specifici di certi tipi di gioco
-\g_waypointsprite_scale\Scala moltiplicatore dei waypoint
-\g_waypointsprite_alpha\Controlla la trasparenza dei waypoint
-\cl_shownames\Mostra il nome del giocatore a cui stai mirando
-
-\crosshair_hittest\Nessuno: non fare test di colpo a segno per il mirino; VeraMira: sfoca il mirino quando non colpiresti il muro; Nemici: allarga anche il mirino quando colpiresti un nemico
diff --git a/tooltips.db.ru b/tooltips.db.ru
deleted file mode 100644 (file)
index 1c5d8e2..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-0
-\XonoticSingleplayerDialog\Начать одиночную кампанию или быструю игру против ботов
-
-
-\XonoticMultiplayerDialog\Играть по сети, просмотреть демо или изменить настройки игрока
-\XonoticMultiplayerDialog/Серверы\Поиск игровых серверов
-\menu_slist_showempty\Показывать пустые сервера
-\menu_slist_showfull\Показывать полные сервера, не имеющие свободных мест
-\net_slist_pause\Приостановить обновление списка серверов для предотвращения их скакания
-\XonoticMultiplayerDialog/Info...\Показать больше сведений о выбранном сервере
-\XonoticMultiplayerDialog/В закладки\Добавить выбранный сервер в закладки, так найти его будет быстрее
-\XonoticMultiplayerDialog/Создать\Запустить собственную игру
-\XonoticMultiplayerDialog/Демо\Список демо для просмотра
-\XonoticMultiplayerDialog/Player Setup\Изменить настройки игрока
-
-\XonoticTeamSelectDialog/join 'best' team (auto-select)\Автовыбор команды (советуется)
-\XonoticTeamSelectDialog/красная\Присоединиться к красной команде
-\XonoticTeamSelectDialog/синяя\Присоединиться к синей команде
-\XonoticTeamSelectDialog/жёлтая\Присоединиться к жёлтой команде
-\XonoticTeamSelectDialog/розовая\Присоединиться к розовой команде
-
-\timelimit_override\Ограничение времени в минутах, состязание закончится при его достижении
-\fraglimit_override\Количество очков, необходимых для завершения состязания
-\menu_maxplayers\Предельное количество игроков и ботов, которые могут быть одновременно подключены к серверу
-\bot_number\Количество ботов на сервере
-\skill\Насколько искусными будут боты
-\g_maplist_votable\Количество карт, предлагаемых в голосовании после состязания
-\sv_vote_simple_majority_factor\Простое большинство выигрывает голосование
-\XonoticMultiplayerDialog/Advanced settings...\Дополнительные серверные настройки
-\XonoticMultiplayerDialog/Mutators...\Мутаторы и арены оружий
-\g_dodging\Enable dodging
-\g_cloaked\Все игроки почти невидимы
-\g_footsteps\Включить звуки шагов
-\g_midair\Только находящиеся в воздухе получают повреждения
-\g_vampire\Урон, наносимый противнику, прибавляется к собственному здоровью
-\g_bloodloss\Величина здоровья, ниже которой наступает оглушение из-за потери крови
-\sv_gravity\Падение происходит медленнее. Чем ниже значение, тем ниже гравитация
-\g_grappling_hook\Передвижение и полёты на подтягивающем крюке
-\g_jetpack\Полёты на реактивном ранце
-\g_pinata\Во время смерти выбрасывается всё оружие, которое нёс "убитый", что даёт возможность его подобрать
-\g_weapon_stay\Всё собранное оружие остаётся после возрождений
-\g_weaponarena\Selecting a weapon arena will give all players that weapon at spawn as well as unlimited ammo, and disable all other weapon pickups.
-\g_instagib\Players will be given the Minstanex, which is a railgun with infinite damage. If the player runs out of ammo, he will have 10 seconds to find some or if he fails to do so, face death. The secondary fire mode is a laser which does not inflict any damage and is good for doing trickjumps.
-\g_nix\No items Xonotic - instead of pickup items, everyone plays with the same weapon. After some time, a countdown will start, after which everyone will switch to another weapon.
-\g_nix_with_blaster\Always carry the laser as an additional weapon in Nix
-\XonoticMultiplayerDialog/Select all\Выбрать все карты
-\XonoticMultiplayerDialog/Select none\Снять выделение со всех карт
-
-
-\XonoticMultiplayerDialog/Проверка производительности\Замерить, насколько быстро компьютер способен играть выбранное демо
-
-\fov\Угол обзора в градусах, допустимы значения от 60 то 130, по умолчанию 90
-\cl_bobcycle\Частота качания вида
-\cl_zoomfactor\How big the zoom factor is when the zoom button is pressed
-\cl_zoomsensitivity\How zoom changes sensitivity, from 0 (lower sensitivity) to 1 (no sensitivity change)
-\cl_zoomspeed\How fast the view will be zoomed, disable to zoom instantly
-\XonoticMultiplayerDialog/Weapon settings...\Set your most preferred weapons, autoswitch and weapon model settings
-
-\cl_weaponpriority_useforcycling\Make use of the list above when cycling through weapons with the mouse wheel
-\cl_autoswitch\Automatically switch to newly picked up weapons if they are better than what you are carrying
-\r_drawviewmodel\Draw the weapon model
-\cl_gunalign\Position of the weapon model; requires reconnect
-
-\crosshair_per_weapon\Set a different crosshair for each weapon, good if you play without weapon models
-\crosshair_color_per_weapon\Set the color of the crosshair depending on the weapon you are currently holding
-\crosshair_size\Настроить размер перекрестья
-\crosshair_color_alpha\Настроить прозрачность перекрестья
-\crosshair_color\Adjust the crosshair color
-\sbar_hudselector\Use the old HUD layout
-\XonoticMultiplayerDialog/Waypoints setup...\-
-\_cl_name\Имя, под которым вы появитесь в игре
-
-\XonoticSettingsDialog\Изменить настройки игры
-\XonoticCreditsDialog\The Xonotic credits
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Выйти из игры
-\XonoticQuitDialog/Да\Пора саночки возить...
-\XonoticQuitDialog/Нет\Остались здесь ещё дела!
-
-\XonoticSettingsDialog/Ввод\Настройки устройств ввода
-\sensitivity\Множитель скорости мыши
-\menu_mouse_speed\Множитель скорости мыши в меню, не влияет на прицеливание в игре
-\m_filter\Сглаживает движения мыши, но значительно ухудшает отзывчивость прицеливания
-\m_pitch\Обратить движения мыши по вертикальной оси
-\vid_dgamouse\Использовать DGA ввод для мыши
-\con_closeontoggleconsole\Использовать привязку для открытия консоли также и для её сокрытия
-
-\XonoticSettingsDialog/Изображение\Настройки изображения
-\vid_width\Разрешение экрана
-\vid_bitsperpixel\Сколько бит на точку использовать для вывода, советуется 32
-\vid_fullscreen\Включить полноэкранный режим (по умолчанию: включено)
-\vid_vsync\Enable vertical synchronization to prevent tearing, will cap your fps to the screen refresh rate (default: disabled)
-\gl_texture_anisotropy\Anisotropic filtering quality (default: 1x)
-\r_glsl\Enable OpenGL 2.0 pixel shaders for lightning (default: enabled)
-\gl_vbo\Make use of Vertex Buffer Objects to store static geometry in video memory for faster rendering (default: Vertex and Triangles)
-\r_depthfirst\Eliminate overdraw by rendering a depth-only version of the scene before the normal rendering starts (default: disabled)
-\gl_texturecompression\Compress the textures for video cards with small amounts of video memory available (default: None)
-\gl_finish\Make the CPU wait for the GPU to finish each frame, can help with some strange input or video lag on some machines (default: disabled)
-\v_brightness\Яркость чёрного (по умолчанию: 0)
-\v_contrast\Яркость белого (по умолчанию: 1)
-\v_gamma\Inverse gamma correction value, a brightness effect that does not affect white or black (default: 1.125)
-\v_contrastboost\By how much to multiply the contrast in dark areas (default: 1)
-\r_glsl_saturation\Saturation adjustment (0 = grayscale, 1 = normal, 2 = oversaturated), requires GLSL color control (default: 1)
-\v_glslgamma\Enable use of GLSL to apply gamma correction, note that it might decrease performance by a lot (default: disabled)
-\r_ambient\Окружающее освещение, если выставлено слишком сильным, приводит к тому, что свет на картах выглядит блёклым и плоским (по умолчанию: 4)
-\r_hdr_scenebrightness\Общая яркость вывода (по умолчанию: 1)
-\vid_samples\Enable antialiasing, which smooths the edges of 3D geometry. Note that it might decrease performance by quite a lot (default: disabled)
-\v_flipped\Poor man's left handed mode (default: off)
-
-\XonoticSettingsDialog/Эффекты\Настройки эффектов
-\r_subdivisions_tolerance\Change the smoothness of the curves on the map (default: normal)
-\gl_picmip\Change the sharpness of the textures. Lowering it will effectively reduce texture memory usage, but make the textures appear very blurry. (default: good)
-\r_picmipworld\If set, only reduce the texture quality of models (default: enabled)
-\mod_q3bsp_nolightmaps\Use high resolution lightmaps, which will look pretty but use up some extra video memory (default: enabled)
-\cl_particles_quality\Multiplier for amount of particles. Less means less particles, which in turn gives for better performance (default: 1.0)
-\r_drawparticles_drawdistance\Particles further away than this will not be drawn (default: 1000)
-\cl_decals\Enable decals (bullet holes and blood) (default: enabled)
-\r_drawdecals_drawdistance\Decals further away than this will not be drawn (default: 300)
-\cl_decals_time\Time in seconds before decals fade away (default: 2)
-\cl_gentle\Replace blood and gibs with content that does not have any gore effects (default: disabled)
-\cl_nogibs\Reduce the amount of gibs or remove them completely (default: lots)
-\v_kicktime\How long a view kick from damage lasts (default: 0)
-\r_glsl_deluxemapping\Use per-pixel lighting effects (default: enabled)
-\r_shadow_gloss\Enable the use of glossmaps on textures supporting it (default: enabled)
-\gl_flashblend\Enable faster but uglier dynamic lights by rendering bright coronas instead of real dynamic lights (default: disabled)
-\r_shadow_realtime_dlight\Enable rendering of dynamic lights such as explosions and rocket lights (default: enabled)
-\r_shadow_realtime_dlight_shadows\Enable rendering of shadows from dynamic lights (default: disabled)
-\r_shadow_realtime_world\Enable rendering of full realtime world lighting on maps that support it. Note that this might have a big impact on performance. (default: disabled)
-\r_shadow_realtime_world_shadows\Enable rendering of shadows from realtime world lights (default: disabled)
-\r_shadow_usenormalmap\Enable use of directional shading on textures (default: enabled)
-\r_showsurfaces\Disable textures completely for very slow hardware. This gives a huge performance boost, but looks very ugly. (default: disabled)
-\r_glsl_offsetmapping\Offset mapping effect that will make textures with bumpmaps appear like they "pop out" of the flat 2D surface (default: disabled)
-\r_glsl_offsetmapping_reliefmapping\Higher quality offset mapping, which also has a huge impact on performance (default: disabled)
-\r_water\Reflection and refraction quality, has a huge impact on performance on maps with reflecting surfaces (default: disabled)
-\r_water_resolutionmultiplier\Resolution of reflections/refractions (default: good)
-\r_coronas\Enable corona flares around certain lights (default: enabled)
-\r_coronas_occlusionquery\Fade coronas according to visibility (default: enabled)
-\r_bloom\Enable bloom effect, which brightens the neighboring pixels of very bright pixels. Has a big impact on performance. (default: disabled)
-\r_hdr\Higher quality version of bloom, which has a huge impact on performance. (default: disabled)
-\r_motionblur\Motion blur strength - 0.4 recommended
-
-\XonoticSettingsDialog/Звук\Настройки звука
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Частота дискретизации для вывода звука
-\snd_channels\Число каналов для вывода звука
-\snd_swapstereo\Поменять местами правый и левый каналы
-\snd_spatialization_control\Enable spatialization (blend the right and left channel slightly to decrease stereo separation a bit for headphones)
-\cl_voice_directional\Enable directional voices
-\cl_voice_directional_taunt_attenuation\Расстояние, с которого будут слышны насмешки
-\cl_autotaunt\Автоматически насмехаться над противниками после их поражений
-\cl_sound_maptime_warning\Звук предупреждения, сообщающий оставшиеся до конца состязания минуты
-\cl_hitsound\Играть звук оповещения, когда выстрел достигает противника
-\menu_sounds\Играть звуки при взаимодействии с меню
-
-\XonoticSettingsDialog/Сеть\Настройки сети
-\cl_movement\Включить предсказание движения на стороне клиента
-\cl_nolerp\Enable network update smoothing
-\shownetgraph\Показывать график размеров пакетов и других сведений
-\_cl_rate\Укажите скорость вашей сети с помощью этого ползунка
-\cl_netfps\Сколько пакетов посылать серверу каждую секунду
-\cl_curl_maxdownloads\Предел одновременных HTTP/FTP загрузок
-\cl_curl_maxspeed\Предел скорости скачивания
-\cl_port\Force client to use chosen port unless it is set to 0
-
-\XonoticSettingsDialog/Разное\Разные настройки
-\menu_tooltips\Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)
-\showtime\Показывать текущее время, полезно на снимках экранов
-\showdate\Показывать текущую дату, полезно на снимках экранов
-\showfps\Show your rendered frames per second
-
-\XonoticSettingsDialog/Advanced settings...\Продвинутые настройки, в которых можно подстроить каждую переменную игры
-\g_friendlyfire\Доля урона, получаемого союзниками от союзников
-\g_mirrordamage\Доля урона, наносимого союзнику, которая будет отражена на себя
-\g_tdm_teams_override\Заменить значение по умолчанию количества команд в командных играх
-
-\viewsize\Включить/выключить фон HUD
-\cl_hidewaypoints\Показывать различные отметки, определяемые видом игры
-\g_waypointsprite_scale\Множитель размера отметок
-\g_waypointsprite_alpha\Управление прозрачностью отметок
-\cl_shownames\Показывать имя игрока, в которого вы целитесь
-
-\crosshair_hittest\Отключена: нет проверок перекрестья на попадание; TrueAim: размывать перекрестье, когда не наведено на стену; Враги: также увеличивать перекрестье, когда наведено на врага
diff --git a/tooltips.db.uk b/tooltips.db.uk
deleted file mode 100644 (file)
index 38bba35..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-0
-\XonoticSingleplayerDialog\Почніть одиночну кампанію або випадковий бій проти ботів
-
-
-\XonoticMultiplayerDialog\Грайте по інтернету, локальній мережі, переглядайте демо та змінюйте налаштування гравця
-\XonoticMultiplayerDialog/Сервери\Знайти сервери для гри
-\menu_slist_showempty\Показувати порожні сервери
-\menu_slist_showfull\Показувати повні сервери без вільних місць
-\net_slist_pause\Призупинити оновлення списку серверів для зручнішого вибору
-\XonoticMultiplayerDialog/Відомості...\Показати більше інформації про виділений сервер
-\XonoticMultiplayerDialog/Закладка\Зробити закладку на цьому сервері для того, щоб потім знаходити його швидше
-\XonoticMultiplayerDialog/Створити\Почніть свою власну гру
-\XonoticMultiplayerDialog/Демо\Знайдіть та перегляньте демо записи
-\XonoticMultiplayerDialog/Гравець\Налаштування вашого гравця
-
-\XonoticTeamSelectDialog/обрати підхожу команду (автовибір)\Автоматично обрати команду (рекомендується)
-\XonoticTeamSelectDialog/червона\Приєднатися до червоної команди
-\XonoticTeamSelectDialog/синя\Приєднатися до синьої команди
-\XonoticTeamSelectDialog/жовта\Приєднатися до жовтої команди
-\XonoticTeamSelectDialog/рожева\Приєднатися до рожевої команди
-
-\timelimit_override\Час, після якого матч закінчиться
-\fraglimit_override\Кількість фрагів, яка потрібна для закінчення матчу
-\menu_maxplayers\Максимальна кількість гравців та ботів на вашому сервері
-\bot_number\Кількість ботів на вашому сервері
-\skill\Вкажіть досвідченість ботів
-\g_maplist_votable\Кількість мап які будуть доступні для голосування у кінці матчу
-\sv_vote_simple_majority_factor\Проста більшість перемагає в голосуванні
-\XonoticMultiplayerDialog/Додаткові налаштування...\Додаткові налаштування сервера
-\XonoticMultiplayerDialog/Мутатори...\Мутатори і арени
-\g_dodging\Вмикає ухилення
-\g_cloaked\Всі гравці майже невидимі
-\g_footsteps\Вмикає звуки кроків
-\g_midair\Шкоду можливо нанести тільки коли ворог у повітрі
-\g_vampire\Шкода яку ви наносите ворогам додається до вашого здоров'я
-\g_bloodloss\Кількість здоров'я, нижче за яку гравець буде паралізований від втрати крові
-\sv_gravity\Предмети падатимуть повільніше, менше значення робить гравітацію нижче
-\g_grappling_hook\Гравці отримують гак
-\g_jetpack\Гравці отримують реактивний ранець
-\g_pinata\Після того, як гравця вб'ють, з нього випаде вся зброя яку він мав
-\g_weapon_stay\Зброя залишається після того, як була підібраною
-\g_weaponarena\Вибір арени з окремою зброєю дасть гравцям цю зброю і необмежену кількість боєприпасів до неї, і прибере з мапи всю іншу зброю
-\g_instagib\Гравці отримують МінстаНекс, рейкову гармату яка вбиває одним пострілом. Якщо гравець витратить усі боєприпаси, у нього буде десять секунд щоб поновити його, інакше він загине. Альтернативний вогонь гармати це лазер який не наносить шкоди, корисний для трюків
-\g_nix\Нікс (No items Xonotic) - замість того щоб підбирати предмети, всі гравці грають з однією зброєю. Через деякий час почнеться відлік, і зброя у всіх зміниться на іншу
-\g_nix_with_blaster\Зробити лазер доступним у Нікс
-\XonoticMultiplayerDialog/Обрати все\Обрати всі мапи
-\XonoticMultiplayerDialog/Обрати нічого\Зняти вибір з усіх мап
-
-
-\XonoticMultiplayerDialog/Тест продуктивності\Перевірте як швидко ваш комп'ютер зможе програти обране демо
-
-\fov\Поле огляду у градусах, від 60 до 130, 90 за замовчуванням
-\cl_bobcycle\Частота гойдання, вимкнути щоб прибрати гойдання
-\cl_zoomfactor\Сила зуму коли натиснута клавіша
-\cl_zoomsensitivity\Як зум змінює чутливість миші, від 0 (зменшує чутливість) до 1 (без змін)
-\cl_zoomspeed\Швидкість зуму, вимкніть щоб збільшувати зображення миттєво
-\XonoticMultiplayerDialog/Налаштування зброї...\Вкажіть зброю якій ви надаєте перевагу, налаштуйте автоматичне перемикання та моделі зброї
-
-\cl_weaponpriority_useforcycling\Використовувати список вгорі під час вибору зброї колесиком миші
-\cl_autoswitch\Автоматично перемикатися на щойно підняту зброю, якщо вона краща за ту, що ви тримаєте у руках
-\r_drawviewmodel\Показувати модель зброї
-\cl_gunalign\Положення моделі зброї, потрібно буде з'єднатися знову
-
-\crosshair_per_weapon\Встановити приціл для кожної зброї окремо, корисно для гри без моделей зброї
-\crosshair_color_per_weapon\Колір прицілу буде залежати від кожної окремої зброї
-\crosshair_size\Встановити розмір прицілу
-\crosshair_alpha\Встановити прозорість прицілу
-\crosshair_color\Встановити колір прицілу
-\sbar_hudselector\Використовувати старе розміщення HUD
-\XonoticMultiplayerDialog/Налаштування дороговказів...\-
-\_cl_name\Ім'я під яким ви з'явитесь у грі
-
-\XonoticSettingsDialog\Змінити налаштування гри
-\XonoticCreditsDialog\Розробники Xonotic
-\XonoticTeamSelectDialog\-
-\XonoticMutatorsDialog\-
-\XonoticMapInfoDialog\-
-\XonoticUserbindEditDialog\-
-\XonoticWinnerDialog\-
-\XonoticWeaponsDialog\-
-\XonoticRadarDialog\-
-\XonoticServerInfoDialog\-
-\XonoticCvarsDialog\-
-
-\XonoticQuitDialog\Вийти з гри
-\XonoticQuitDialog/Так\Назад до роботи...
-\XonoticQuitDialog/Ні\На мене чекають ще кілька фрагів!
-
-\XonoticSettingsDialog/Керування\Налаштування керування
-\sensitivity\Швидкість миші
-\menu_mouse_speed\Швидкість миші у меню, не впливає на ігровий процес
-\m_filter\Згладжування руху миші
-\m_pitch\Інвертувати рух миші по осі Y
-\vid_dgamouse\Використовувати ввід DGA для миші
-\con_closeontoggleconsole\Дозволяє закривати і відкривати консоль однією клавішею
-
-\XonoticSettingsDialog/Відео\Налаштування відео
-\vid_width\Роздільність екрану
-\vid_bitsperpixel\Скільки використовувати бітів на піксель (BPP), рекомендується 32
-\vid_fullscreen\На повний екран (за замовчуванням: увімкнуто)
-\vid_vsync\Вмикає вертикальну синхронізацію щоб запобігти розривам зображення, ваші FPS не будуть підніматися вище швидкості оновлення монітору (за замовчуванням: увімкнуто)
-\gl_texture_anisotropy\Якість анізотропної фільтрації (за замовчуванням: 1x)
-\r_glsl\Вмикає піксельні шейдери OpenGL 2.0 для освітлення (за замовчуванням: увімкнуто)
-\gl_vbo\Використовувати Vertex Buffer Objects щоб зберігати нерухому геометрію у відеопам'яті для прискорення рендеренгу (за замовчуванням: вершини та трикутники)
-\r_depthfirst\Прибирає перекриття одних пікселів іншими створюючи спочатку версію сцени з лише глибиною (за замовчуванням: вимкнуто)
-\gl_texturecompression\Стискати текстури для відеокарт з малою кількістю відеопам'яті (за замовчуванням: вимкнуто)
-\gl_finish\Центральний процесор буде чекати, поки GPU відеокарти не закінчить кадр, може допомогти на деяких системах при деяких проблемах (за замовчуванням: вимкнуто)
-\v_brightness\Яскравіcть чорного (за замовчуванням: 0)
-\v_contrast\Яскравість білого (за замовчуванням: 1)
-\v_gamma\Яскравість що не впливає на білий та чорний колір (за замовчуванням: 1.125)
-\v_contrastboost\На скільки збільшувати контраст в темних місцях (за замовчуванням: 1)
-\r_glsl_saturation\Корекція насиченості (0 = чорно-біла, 1 = нормальна, 2 = перенасичена), необхідно використовувати шейдери GLSL для контролю кольором (за замовчуванням: 1)
-\v_glslgamma\Вмикає GLSL для використання корекції гамми, може мати сильній вплив на продуктивність (за замовчуванням: вимкнуто)
-\r_ambient\Навколишнє освітлення, якщо значення надто високе, то освітлення на мапах стає приглушеним та плоским (за замовчуванням: 4)
-\r_hdr_scenebrightness\Яскравість (за замовчуванням: 1)
-\vid_samples\Увімкнути антиаліасинг, який буде згладжувати грані 3D поверхонь. Прийміть до уваги, що це може сильно зменшити продуктивність. (за замовчуванням: вимкнуто)
-\v_flipped\Простий режим для лівші (за замовчуванням: вимкнуто)
-
-\XonoticSettingsDialog/Ефекти\Налаштування ефектів
-\r_subdivisions_tolerance\Змінити рівність кривих на мапі (за замовчуванням: нормально)
-\gl_picmip\Чіткість текстур. Зниження параметру зменшить використання відеопам'яті, але зробить текстури нечіткими (за замовчуванням: добре)
-\r_picmipworld\Знижує якість текстур тільки на моделях (за замовчуванням: увімкнуто)
-\mod_q3bsp_nolightmaps\Використовувати мапи освітлення з високою роздільністю, красиві, але використовують більше відеопам'яті (за замовчуванням: увімкнуто)
-\cl_particles_quality\Кількість часток, чим менша кількість тим менший вплив на продуктивність (за замовчуванням: 1.0)
-\r_drawparticles_drawdistance\Частки на відстані більшій ніж ця не будуть створюватись (за замовчуванням: 1000)
-\cl_decals\Сліди від куль та пострілів (за замовчуванням: увімкнуто)
-\r_drawdecals_drawdistance\Сліди на відстані більшій ніж ця не будуть створюватись (за замовчуванням: 300)
-\cl_decals_time\Час у секундах після якого сліди зникатимуть (за замовчуванням: 2)
-\cl_gentle\Замінити шматки тіла та кров не жорстокими елементами (за замовчуванням: вимкнуто)
-\cl_nogibs\Зменшити кількість шматків тіла, або відключити їх зовсім (за замовчуванням: багато)
-\v_kicktime\Як довго триватиме поштовх від ураження (за замовчуванням: 0)
-\r_glsl_deluxemapping\Використовувати попіксельні ефекти освітлення (за замовчуванням: увімкнуто)
-\r_shadow_gloss\Вмикає використання мап блиску на текстурах, які їх підтримують (за замовчуванням: увімкнуто)
-\gl_flashblend\Вмикає швидкіше, але не таке гарне динамічне освітлення за допомогою яскравих корон, а не справжніх динамічних вогнів (за замовчуванням: вимкнуто)
-\r_shadow_realtime_dlight\Вмикає рендеринг динамічних вогнів від вибухів та ракет (за замовчуванням: увімкнуто)
-\r_shadow_realtime_dlight_shadows\Вмикає тіні від динамічних джерел освітлення (за замовчуванням: вимкнуто)
-\r_shadow_realtime_world\Вмикає повний рендеринг динамічного освітлення світу, може мати сильний вплив на продуктивність. (за замовчуванням: вимкнуто)
-\r_shadow_realtime_world_shadows\Вмикає тіні від динамічних джерел освітлення світу (за замовчуванням: увімкнуто)
-\r_shadow_usenormalmap\Вмикає використання directional shading на текстурах (за замовчуванням: увімкнуто)
-\r_showsurfaces\Вимикає текстури повністю, для дуже слабких систем. Покращує продуктивність, але виглядає погано (за замовчуванням: вимкнуто)
-\r_glsl_offsetmapping\Офсетне текстурування, що змусить текстури з мапами висот виглядати об'ємними (за замовчуванням: вимкнуто)
-\r_glsl_offsetmapping_reliefmapping\Якісніше офсетне текстурування, має великий вплив на продуктивність (за замовчуванням: вимкнуто)
-\r_water\Якість віддзеркалень та заломлень, сильно впливає на продуктивність на мапах, де є дзеркальні поверхні (за замовчуванням: вимкнуто)
-\r_water_resolutionmultiplier\Роздільність віддзеркалень/заломлень (за замовчуванням: увімкнуто)
-\r_coronas\Увімкнути сонячні корони навколо деяких джерел освітлення (за замовчуванням: увімкнуто)
-\r_coronas_occlusionquery\Прибирати корони відповідно з видимістю (за замовчуванням: увімкнуто)
-\r_bloom\Увімкнути ефект bloom, який освітлює ближні пікселі дуже яскравих пікселів. Має сильний вплив на продуктивність (за замовчуванням: вимкнуто)
-\r_hdr\Якісніша версія ефекту bloom, сильно впливає на продуктивність (за замовчуванням: вимкнуто)
-\r_motionblur\Сила ефекту motion blur - рекомендується 0.4
-
-\XonoticSettingsDialog/Звук\Налаштування аудіо
-\mastervolume\-
-\bgmvolume\-
-\snd_staticvolume\-
-\snd_channel0volume\-
-\snd_channel3volume\-
-\snd_channel6volume\-
-\snd_channel7volume\-
-\snd_channel4volume\-
-\snd_channel2volume\-
-\snd_channel1volume\-
-\snd_speed\Частотність звуку
-\snd_channels\Кількість каналів
-\snd_swapstereo\Поміняти місцями лівий та правий канал
-\snd_spatialization_control\Злегка змішати правий та лівий канали щоб трохи зменшити розділення стерео для навушників
-\cl_voice_directional\Вмикає просторові голоси
-\cl_voice_directional_taunt_attenuation\Відстань на якій можливо почути глузування
-\cl_autotaunt\Автоматично глузувати над ворогами після того, як ви вбили їх
-\cl_sound_maptime_warning\Увімкнути попередження про те, скільки залишилося часу до кінця матчу
-\cl_hitsound\Грати спеціальний звук коли ви влучаєте у ворога
-\menu_sounds\Увімкнути звуки меню
-
-\XonoticSettingsDialog/Мережа\Налаштування мережі
-\cl_movement\Увімкнути передбачення руху зі сторони клієнта
-\cl_nolerp\Увімкнути згладжування оновлення мережі
-\shownetgraph\Показувати графік розмірів пакетів та іншої інформації
-\_cl_rate\Вкажіть швидкість вашої мережі
-\cl_netfps\Скільки вхідних пакетів посилати серверу кожну секунду
-\cl_curl_maxdownloads\Максимальна кількість одночасних HTTP/FTP завантажень
-\cl_curl_maxspeed\Максимальна швидкість завантаження
-\cl_port\Змушувати клієнта використовувати обраний порт, але тільки якщо значення не 0
-
-\XonoticSettingsDialog/Різне\Різні налаштування
-\menu_tooltips\Menu tooltips: disabled, standard or advanced (also shows cvar or console command bound to the menu item)
-\showtime\Показувати поточний час, корисно для скриншотів
-\showdate\Показувати поточну дату, корисно для скриншотів
-\showfps\Показувати лічильник кадрів за секунду
-
-\XonoticSettingsDialog/Додаткові налаштування...\Тут ви зможете змінити будь-які деталі гри
-\g_friendlyfire\Процент шкоди яку ви будете наносити товаришам по команді 
-\g_mirrordamage\Процент від шкоди що ви нанесли товаришу по команді який буде віддзеркалений вам
-\g_tdm_teams_override\Переписати клькість команд за замовчуванням в командних іграх
-
-\viewsize\Увімкнути/вимкнути фон HUD
-\cl_hidewaypoints\Показувати дороговкази різний ігрових режимів
-\g_waypointsprite_scale\Вкажіть розмір дороговказів
-\g_waypointsprite_alpha\Вкажіть прозорість дороговказів
-\cl_shownames\Показувати ім'я гравця в якого ви цілитися
-
-\crosshair_hittest\Жодного: не проводити тест на влучання для прицілу; TrueAim: робити приціл нечітким коли ви не влучите у стіну; Вороги: також збільшувати приціл коли ви влучите у ворога