# BZFlag

BZFlag (abréviation de Battle Zone capture the Flag) est un jeu vidéo multijoueur et libre de chars en 3D (OpenGL) du genre FPS.
Il est développé par une soixantaine de volontaires dont principalement Tim Riker. Il a été écrit originellement pour Irix, mais fonctionne maintenant sous Windows, Linux, Mac OS X, BSD, Solaris et d'autres plateformes. Il est distribué sous la licence GNU LGPL, une licence un peu différente de la GNU GPL sous laquelle il a longtemps été distribué. C'est donc un logiciel libre.
BZFlag est très populaire, avec des parties en ligne toujours en cours. Il y a une moyenne de 250 serveurs actifs à tout moment, ainsi que plus de 4500 joueurs enregistrés sur le forum officiel. En avril 2004, BZFlag est sélectionné comme « projet du mois « par la plate-forme SourceForge.net.

## Vue d'ensemble

Lors d'une partie de BZFlag, chaque joueur conduit un char vu à la première personne, dans un monde (appelé une “carte”). Le but du jeu est de détruire les chars adverses. Les chars peuvent sauter, tirer et bouger dans toutes les directions. Ils peuvent également ramasser des drapeaux (voir plus bas).
Le joueur dispose d'une vue à la première personne (voir devant le char), d'un radar et d'une console permettant de discuter entre joueurs.
Chaque char appartient à une équipe, et chaque équipe se distingue par sa couleur: rouge, vert, bleu, mauve et enfin jaune pour les chars de l'équipe filou. L'équipe filou est utilisé pour les combats sans équipe, c'est-à-dire que ses membres peuvent se tuer entre eux. Et pour finir, une équipe d'observateurs qui restent à part (couleur blanche).
Il y a trois types de jeu différents. Les types sont spécifiques aux cartes.
* Le type le plus simple est appelé “chacun pour soi” (“free for all” en anglais), l'objectif est alors de tuer tous les chars ennemis.
* Un deuxième type de jeu bien apprécié est appelé “capture du drapeau”, l'objectif est de capturer le drapeau de l'équipe adverse (ou d'une des équipes adverses), et de le ramener à sa propre base, tout en empêchant les ennemis de capturer le drapeau de sa propre équipe. Les chars d'une équipe dont le drapeau est mené sur une base ennemi sont détruits.
* Enfin le dernier type (le moins joué) est appelé “Chasse au lapin”. L'objectif pour tous les chars (appelés des chasseurs) est de tuer le char désigné (appelé évidemment le lapin) et qui apparaît en blanc pour l'occasion. Le char qui détruit le "lapin" le devient à son tour. Généralement le but est de rester "lapin" le plus longtemps possible.

## Histoire du développement

Initialement, BZFlag était un projet écrit en C par Chris Schoneman en 1992. Il reprenait un jeu très populaire et innovant: Battlezone. Son nom de baptême était “bz”, et malgré les ressemblances avec le jeu du même nom de Chris Fouts, les deux jeux étaient complètement indépendants l'un de l'autre.
Au début, BZFlag était simplement un Shoot them up sans autre spécificité. C'est après que Schoneman et ses amis (qui l'ont aidé à développer BZFlag depuis le début) ne commencent à s'ennuyer de ce concept, qu'ils inventèrent le mode de capture du drapeau. Celui-ci demandait plus de stratégie et d'habileté et donc redonna de l'intérêt au jeu.
C'est en 1993 que BZFlag a été rendu public pour la première fois. Cela fut un tournant dans l'histoire de ce jeu, car un tricheur édita le code source de son client afin de se donner des nouveaux pouvoirs que la version officielle ne permettait pas. Cela a inspiré Schoneman et ses amis. Ils ont rajouté des supers drapeaux qui modifiaient les performances du char. Les quatre premiers drapeaux étaient la Vélocité, la Rotation rapide, le Tir accéléré et l'Accélérateur d'Oscillations qui permet aux chars de traverser les objets. Il n'y avait alors qu'un seul drapeau de chaque type sur la carte, et tous les drapeaux portaient une marque distinctive pour qu'on puisse les reconnaître. Les mauvais et d'autres bons drapeaux ont ensuite été rajoutés, et les marques distinctives ont été supprimées. Cette idée des drapeaux reste aujourd'hui une part principale du jeu.
En 1997, la version 1.7d apporta une nouvelle fonctionnalité révolutionnaire : une liste des serveurs publics intégrée au jeu. Car jusque-là, les joueurs devaient soit utiliser leurs propres serveurs, soit connaître l'adresse d'autres serveurs, soit lire une liste publiée et maintenue par des tiers. Mais dorénavant cette nouvelle liste (hébergée sur le site officiel de BZFlag) permettait à n'importe qui de jouer sur les serveurs qui décidaient de devenir publics. Beaucoup disent que sans cette fonctionnalité BZFlag ne serait jamais devenu aussi populaire qu'aujourd'hui.
Finalement Schoneman a réécrit BZFlag en C++ pour la troisième compétition IndiZone des SGI, et gagna dans la catégorie des Moteurs 3D. Ensuite le projet fut donné à Tim Riker qui actuellement le maintient et le fait évoluer depuis la version 1.7e.

## Les divisions

Il existe beaucoup de divisions dans BZFlag. Les divisions sont lancées et gérées par un ou plusieurs administrateurs qui sont eux-mêmes des joueurs. Les matchs de division durent 30 minutes et ne sont que d'un seul type de partie - avec une exception. Par exemple, la première division fut la division Ducati. Dans cette division, les joueurs s'affrontaient sur des cartes générées aléatoirement, rouges contre verts, avec deux munitions, des ricochets mais pas de saut. Ceci avait pour but tester les véritables compétences des joueurs. Voici une autre division du même genre : la division Pillbox. Cette division diffère de la Ducati dans quelques règles : pas de ricochet et trois munitions au lieu de deux, de plus la carte est fixe. L'exception est la récente division Open où les équipes choisissent une carte pour chaque match et la durée de la partie.

## Les cartes

Un serveur BZFlag peut utiliser une carte créée au hasard par le système, ou une carte personnalisée créée par l'utilisateur en utilisant un langage proche du langage de script. Bien que l'écriture des cartes soit assez simple dans ce langage, la plupart des utilisateurs se servent de l'éditeur officiel, BZEdit, qui permet d'automatiser le processus. BZEdit est distribué avec le jeu et est disponible sur le site BZFlag de SourceForge.net.
Pour simplifier, il existe trois objets basiques :
* Pavé
* Pyramide
* Téléporteur
Les deux premiers sont configurables. Les téléporteurs sont rectangulaires et bordés de jaune. Tous les téléporteurs ne téléportent pas : suivant le bon vouloir du cartographe.
Avant la version 2.0, les cartes étaient basiques et n'incluaient que ces trois objets. La version 2.0 a introduit bon nombre de nouveaux éléments complexes par exemple l'eau. Un petit programme a été créé pour BZFlag afin de convertir les fichiers 3D Studio Max en cartes BZFlag.
La syntaxe pour la description de chaque élément commence par le nom de l'élément, puis suivent ses spécifications, et elle termine par le mot "end". L'exemple suivant place un cube de dimension 1 000 unités (un char mesure environ une unité) aux coordonnées 50x 50y, il n'est pas tourné vers le Nord :
Voici la liste des objets :
| Objet | Description |
| world | Définit des variables d'environnement |
| options | Détermine les options de ligne de commande pour BZFS |
| waterLevel | Définit le niveau de l'eau |
| dynamicColor | Définit certaines modifications de couleurs |
| textureMatrix | Personnalise la texture du monde |
| physics | Personnalise |
| define | Crée une liste d'objets modifiables par groupe |
| group | Modifies un objet de groupe |
| mesh | Crée un objet 3D |
| meshbox | Crée un cube |
| arc | Crée un arc |
| cone | Crée un cône |
| sphere | Crée une sphère |
| tetra | Crée un tétraèdre |
| box | Crée un pavé |
| pyramid | Crée une pyramide |
| link | Ajoute un lien à un téléporteur |
| base | Crée un base (pour les parties de type capture du drapeau) |
| weapon | Crée une arme "naturelle" (le monde tire à un certain moment) |
| zone | Définie une "zone" dans laquelle une partition du monde à ses propres variables |
| teleporter | Crée un téléporteur |
Les commentaires commencent par "#". Les multiples espaces sont ignorées.

## Les drapeaux

BZFlag possède deux types de drapeau : les drapeaux d'équipe et les super drapeaux. Un drapeau d'équipe est placé dans un monde uniquement pour les parties "capture du drapeau" ; il représente l'équipe dont il a la couleur. Les super drapeaux peuvent être placés dans un monde pour les parties "match à mort/ chacun pour soi", "capture du drapeau", ou "chasse au lapin" ; mais ils sont contrôlés par l'administrateur du serveur. La quantité, le type, et la position de super drapeaux peuvent être contrôlés par l'administrateur. Les super drapeaux se déclinent en deux catégories : les bons et les mauvais, ils affectent les chars positivement ou négativement suivant cette catégorie. Un mauvais drapeau peut baisser un attribut du char : son viseur, sa vitesse ; tandis qu'un bon drapeau effectue l'opposé et aide le char. Un bon super drapeau est généralement porté jusqu'à l'explosion du char, ou jusqu'à ce que le joueur choisisse de s'en séparer. Un mauvais super drapeau est généralement automatiquement jeté après un certain temps (souvent quelques secondes), ou grâce à l'utilisation d'un drapeau "remède", ou après un certain nombre de "victoires" (explosion de chars adverses), ou encore jusqu'à ce que le char explose lui-même. Ces règles sont gérées par l'administrateur. Tous les super drapeaux ont un code d'une ou deux lettres qui est affiché à côté du nom du joueur sur le tableau des scores. Ci-dessous la liste des super drapeaux avec leur code et description.

### Les bons drapeaux

* Agility (A) - Agilité : accélération rapide, et rotation plus rapide, Mais pas autant qu'avec les drapeaux spécifiques à ces deux effets.
* Burrow (BU) - Enterré : le char est à moitié enterré, il se déplace lentement, il peut tirer et ne peut pas être touché par des attaques normales, mais il peut être écrasé. C'est une cible facile pour les joueurs disposant de SW ou GM
* Cloaking (CL) - Invisibilité: rend le char invisible pour les autres joueurs et invincible face au laser
* Genocide (G) - Génocide : l'explosion d'un char détruit toute son équipe
* Guided Missile (GM) - Missile guidé : les munitions tirées sont des missiles guidés qui poursuivent l'adversaire sur lequel ils sont verrouillés ; un missile guidé ne peut pas être verrouillé sur un char portant un drapeau Furtif. Il est possible de verrouiller/changer de cible après avoir tiré.
* Identify (ID) - Identification : identifie ce qu'est le plus proche drapeau
* Invisible Bullet (IB) - Obus invisible: les obus tirés sont invisibles sur les radars des autres chars
* Jumping (J) - Saut : le char peut sauter (si le serveur ne l'interdit pas explicitement)
* Laser (L) - Laser : tire un rayon laser (le laser ne peut pas tuer un char portant le drapeau Invisibilité). Le temps de rechargement est long, la portée et la vitesse infinie.
* Machine Gun (MG) - Mitrailleuse : tire les munitions avec un court temps de recharge, mais la portée est réduite
* Masquerade (MQ) - Imposture : le char est déguisé en char de la même équipe, mais ses tirs sont vus normalement par l'autre équipe.
* Narrow (N) - Plat : Le char est plat, et donc très dur a toucher de face, mais d'une taille normale dans l'autre sens.
* Oscillation Overthruster (OO) - Accélérateur d'oscillations : le char peut traverser les constructions (le nom de ce drapeau est une référence au film The Adventures of Buckaroo Banzai Across the Eighth Dimension)
* Phantom Zone (PZ) - Zone fantôme : le char peut "zoné" et "dézoné" en traversant un téléporteur ; quand un char est "zoné", l'herbe devient violette, il peut traverser les constructions, il ne plus tirer ni être touché (à part face à un autre char "zoné"), il peut néanmoins être détruit par un Super obus et une Onde de choc ; le drapeau ne peut pas être jeté tant que le char est « zoné »
* Quick Turn (QT) - Rotation rapide : tourne plus rapidement
* Rapid Fire (RF) - Tir accéléré : les obus sont rapides mais ont une portée réduite
* Ricochet (R) - Ricochet : autorise les tirs à ricocher sur les constructions et les murs si non permis par les réglages serveurs
* Seer (SE) - Prophète : le char peut voir normalement les chars portant un drapeau Invisibilité ou Furtif ou Imposture ainsi que les Obus invisibles
* Shield (SH) - Bouclier : le char peut être touché une fois sans exploser
* Shockwave (SW) - Onde de choc : les obus sont remplacés par une onde de choc de forme sphérique.
* Super Bullet (SB) - Super obus : les Super obus traversent les constructions
* Stealth (ST) - Furtif : le char n'est plus visible sur les radars des autres chars
* Steamroller (SR) - Rouleau compresseur: le char peut exploser d'autres chars en les touchant
* Thief (TH) - Voleur : le char est petit et rapide, il peut voler les drapeaux des autres en leur tirant dessus avec un rayon (ce drapeau est jeté dès qu'un autre est volé)
* Tiny (T) - Mince : le char est plus petit en longueur et largeur
* Useless (US) - Inutile : sans effet
* High Speed (HS) - Vitesse élevée : la vitesse du char est plus élevée
* Wings (WG) - Ailes : le char peut voler, en re-sautant lorsqu'il est en l'air (le nombre de sauts dépend du serveur). De plus, il peut changer de direction et bouger lorsqu'il est en l'air.
Dans une carte spéciale de la dernière version de bzflag, Apocalypse de Planet Mofo, six nouveaux drapeaux sont présents :
* Killer Rabbit of Caerbannog (KR) : quand un tir touche un joueur ennemi, celui meurt en créant une onde de choc autour de lui
* Ass Cannon (AC) : le char tire à la fois par devant et par derrière, à noter que si un tir émis par l'arrière ricoche contre un mur et touche le joueur ayant tiré, celui-ci ne meurt pas
* Death Blossom (DB) : le char émet 12 tirs à la fois, selon les heures d'une horloge, de courte portée. Seul le tir à midi peut tuer le joueur en ricochant
* Triple Point (TR) : chaque mort ennemie rapporte trois points
* Fifty Point (FP) : chaque mort ennemie rapporte cinquante points (un seul tir disponible)
* Triple Barrel (TB) : le char tire trois obus à 11h, 12h et 13h simultanément

### Les mauvais drapeaux

* Blindness (B) - Cécité : impossible de voir le monde extérieur, mais le radar fonctionne encore
* Bouncy (BY) - Rebondissant : le char saute de façon incontrôlable
* Colorblindness (CB) - Daltonisme : le char ne différencie pas les couleurs des autres (tous sont des filous)
* Forward Only (FO) - En avant : le char ne peut qu'avancer
* Jamming (JM) - Brouillage : le radar est obstrué
* Left Turn Only (LT) - À gauche : le char ne peut tourner qu'à gauche
* Momentum (M) - Inertie : le char conserve longtemps son élan, et accélère lentement
* No Jumping (NJ) - A terre : le char ne peut pas sauter
* Obesity (O) - Obésité : le char est gros et facile à toucher
* Right Turn Only (RT) - À droite: le char ne peut tourner qu'à droite
* Reverse Only (RO) - En arrière : le char ne peut que reculer
* Reverse Controls (RC) - Contrôles inversés : le char a des contrôles inversés par rapport à d'habitude (avant pour arrière...)
* Trigger-Happy (TR) - Tir fou : le char tire dès que les munitions le permettent, sans contrôle
* Wide-Angle View (WA) - Grand angle : le char a une vision avec grand angle

### Les drapeaux d'équipe

* Équipe rouge
* Équipe verte
* Équipe bleue
* Équipe violette
* Équipe jaune - Les filous (équipe jaune) n'ont ni base, ni drapeau d'équipe. Ils ne peuvent donc pas réaliser de capture. Néanmoins, ils peuvent ramasser un drapeau d'équipe et le déplacer, ce qui est fait la plupart du temps pour aider une autre équipe. Lorsqu'un serveur accepte les drapeaux antidotes, permettant d'enlever les mauvais drapeaux de votre char, ces drapeaux sont vus comme des drapeaux d'équipe jaune.

## Les commandes de jeu

Les serveurs acceptent de nombreuses commandes dans BZFlag. Selon les serveurs, les joueurs peuvent en utiliser certaines ou non. Les commandes ci-dessous sont des commandes générales, et certains serveurs en proposent d'autres.
* register - La commande /register est obsolète, elle permettait de s'enregistrer sur un serveur pour bénéficier de l'attribut enregistré (+) sur le serveur. Désormais, les serveurs l'interdisent tous, et préfèrent utiliser le Global Login.
* msg - Arguments: /msg <joueur> <message>. Envoie un message privé a un joueur.
* vote - Arguments: /vote <vote>. Vote pour un Poll (vote). Les arguments sont: En cas d'accord, oui yes 1, en cas de refus, non no 0. Notez qu'il y a d'autres possibilités, car il est possible d'utiliser les oui/non de beaucoup de langues..
* ban - Commande réservée aux admins pour bannir un joueur sans recourir à un vote.
* kick - Commande réservée aux admins pour éjecter un joueur sans recourir à un vote.
* kill - Commande réservée aux admins pour tuer un joueur sans recourir à un vote.
* say - Arguments: /say <message>. Permet l'affichage d'un message par "SERVER". Réservé généralement aux joueurs enregistrés (+) sur certains serveur, et sinon aux admins.
Les administrateurs disposent aussi généralement de commandes pour modifier les variables d'environnement, c'est-à-dire des paramètres comme la portée, la vitesse, le nombre, de tirs. Les administrateurs peuvent aussi donner un drapeau spécifique a une personne.

### Poll, les votes

La commande /poll permet de soumettre un vote à tous les joueurs du serveur pour différentes raisons. On y répond en utilisant la commande /vote Les paramètres sont énoncés dans cet ordre : /poll <type> <joueur, si nécessaire> <commentaire>
Les types peuvent être :
* flagreset - Demande aux joueurs s'ils veulent effectuer un "flagreset", c'est-à-dire une remise à Zéro des drapeaux (les réinitialiser aux réglages initiaux du serveur)
* ban - Lance un vote pour bannir un joueur pour une durée dépendant du serveur
* kick - Lance un vote pour éjecter un joueur du serveur
* kill - Lance un vote pour tuer un joueur
À noter que les administrateurs peuvent Annuler les votes.