Bonjour à tous ! Si vous êtes là c'est que vous souhaitez créer votre propre
mod ou dll ou voir comment ils sont fait.
Cette rubrique va s'étoffer et grandir. Vous pouvez même contribuer à son
amélioration, en y apportant vos propres informations sous la forme d'un
tutorial. Nous serons heureux, s'il est de qualité et d'un intérêt certain,
de le publier.
Retrouvez certain de ces article dans le magazine PC TEAM.
Créations :
Cette rubrique du site vous permettra de publier vos créations et d'en faire
profiter le plus grand nombre !
Quake 2, tout comme Quake, possède son propre langage de
programmation : le Quake 2
Dll. Cette Dll (direct link library) se trouve stockée sous le nom GameX86.dll
dans le répertoire BaseQ2 et, tout comme le progs.dat de Quake, elle savère
aisément modifiable. Un simple compilateur C, les codes sources dId Software
et hop, cest parti ! La plus grosse différence entre Quake 1 et Quake 2
vient de ce que celui-ci se rapproche beaucoup plus du C/C++ standard
(pointeurs, structures, et toutes ces petites réjouissances
).
Contrairement au langage de programmation de Quake2, le
QuakeC ne faisait que reprendre quelques fonctions de Quake 1, aussi appelées
built-in functions . On pourrait donc dire que le QuakeC nétait
en vérité, quun simple langage de macros ! Le Quake2 DLL, quant à
lui, dispose de toute la puissance du C/C++, un des langages les plus proches du
langage machine. Voici quelques atouts de la programmation en Quake2 DLL, qui
faisaient défaut jusque là, pour le QuakeC :
-
Accès aux fichiers sur le disque : lecture/écriture de données depuis
Quake2.
-
Utilisation des formules de transformations de vecteurs
du moteur de Quake2.
-
Utilisation de toutes les possibilités du langage C :
tableaux, pointeurs, API, chaînes de caractères, structures
-
Un code vraiment plus structuré que celui obtenu avec le
QuakeC.
-
Le lien entre le programmeur et le moteur est beaucoup
plus grand. Les possibilités de modifications du jeu se montrent presque
totales (doù la Totale Conversion !).
-
Le choix des types de variables à utiliser a augmenté
de manière notable (environ 3 pour le QuakeC, aux alentours de 10 pour le
Quake2 DLL).
-
Le programmeur peut adapter tout son savoir du C/C++ au
profit de Quake2.
Pour les novices, il sera facile dapprendre à
programmer en Quake2 DLL à laide de nombreux ouvrages expliquant la
programmation en C vendus en librairie, puisque le Quake2 DLL sapparente à
ce standard.
- De nombreux sites dédiés à la programmation pour
Quake2 se trouvent maintenant disponibles sur le net, mais malheureusement, en anglais
).
Finalement, le Quake2 DLL se révèle vraiment plus
puissant que le QuakeC, et permet au programmeur des possibilités de créations
beaucoup plus vastes que son aîné
Installation de lenvironnement de programmation
Comme il est indiqué plus haut, trois éléments savèrent
nécessaires pour commencer à personnaliser son Quake 2 :
Avant toute chose, vous devez posséder au minimum la
version 3.14 de Quake 2. Vous ne lavez pas ? Jetez un coup dil sur
les anciens CD-Roms de PC-Team ou installez une version encore plus récente (
3.17
).
Allez faire un petit tour sur le CD Pro de PC-Team de ce
mois-ci et installez donc les codes sources de Quake 2 dans le dossier
c:\q2source .Cette archive contient aussi le fameux makefile.
Ensuite, dé-zippez dans un sous-répertoire c:\lcc le compilateur Lcc,
entièrement gratuit contrairement aux géants du marché. Lancez le setup.exe
de Lcc afin de configurer les différents chemins daccès. Cest fait ?
Parfait !
Première modification
Lcc contient un éditeur de fichiers .c bien pratique . Il
met en couleurs les remarques, les mots clés et permet donc une visualisation
plus facile.
On lance cet éditeur par le fichier wedit.exe présent
dans le dossier c:\lcc\bin. A cet égard, nous vous conseillons de créer un
raccourci vers ce programme, car nous nous en servirons à chaque modification.
Ouvrez le fichier c:\Q2source\p_weapon.c depuis WEDIT. On
va y ajouter une petite modification : notre but sera dafficher un texte
chaque fois que lon tire au blaster.
A la ligne 747 se trouve le début de la fonction
Weapon_Blaster_Fire (les numéros de lignes se voient indiqués près du titre
du programme). Après la déclaration de la variable damage
(la première ligne), insérez cette ligne-ci :
CODE
gi.dprintf ( Quake 2 Dlls : essai\n ) ;
Vous devez donc obtenir comme résultat final :
CODE
void Weapon_Blaster_Fire (edict_t *ent)
{
int damage;
gi.dprintf (" Quake 2 Dlls : essai\n ") ;
if (deathmatch->value)
Sauvez p_weapon.c et lancez le fichier go.bat qui réside
dans c:\Q2source. La compilation sexécute et prend fin moins dune minute
plus tard. Si une erreur a été trouvée, recommencez ! Lerreur typique
consiste à oublier de glisser cette instruction APRES la déclaration de la (ou
des variables). Le fichier gameX86.dll a été créé. Copiez celui-ci dans le
dossier BaseQ2 de votre dossier Quake2. Démarrez Quake 2 et tirez au blaster. Si lordinateur affiche la phrase que
vous avez tapée, tout fonctionne. Sil ny a aucune modification ou que
Quake 2 crashe, cest que vous avez fait une erreur
Bien entendu, vous pouvez écrire une autre phrase ou
essayer dinsérer cette ligne autre part (dans Weapon_Shotgun_fire par
exemple) . Cette fonction se trouve quelques dizaines de lignes plus loin.
Conclusion de notre première partie...
Bon, à nen pas douter, nous ne donnons pas dans le
supra-méga-génial, mais cest un bon début, non ? Dailleurs, dès
le prochain numéro, le rythme se montrera sensiblement plus élevé et des résultats
tangibles arriveront rapidement. Nous vous conseillons aussi dacheter un bon
bouquin sur le C (cela suffit largement pour Quake 2). Par ailleurs, le CD de ce
mois contient neuf tutoriaux de programmation C (en anglais évidemment). Et
pour les fins connaisseurs du Quake C, rien ne vaut la recherche en trifouillant
dans chaque fichier
Bon courage !
Makefile ? ? ?
Un makefile désigne un tout petit fichier (au environ de
5k) qui indique au compilateur C ce quil doit faire, la liste des fichiers à
compiler et de quelle façon les compiler (pour obtenir comme résultat une Dll,
un exécutable).
|
LES PRINCIPAUX FICHIERS DE QUAKE 2
|
|
Voici un listing général des différents
fichiers sources de Quake2
|
|
FICHIERS
|
LEURS FONCTIONS
|
|
g_ai.c
|
Intelligence artificielle
|
|
g_cmds.c
|
Commandes de la console
|
|
g_combat.c
|
Détection des combats et gestion des dommages
|
|
g_items.c
|
Items (armes, armures, trousses, etc.)
|
|
g_local.h
|
Un des fichiers les plus importants du jeu :
contient tous les prototypes des fonctions du jeu, les structures et déclarations
de variables, nécessaires à tous les autres fichiers sources du jeu.
Nous en parlerons plus en détail dans le prochain article.
|
|
g_main.c
|
Point dentrée de Quake2 (paradoxalement, pas fort
utile à éditer !)
|
|
g_monster.c
|
Fonctions générales des monstres
|
|
g_move.c
|
Déplacement des monstres
|
|
g_phys.c
|
Gestion de la physique (gravité
)
|
|
g_save.c
|
Sauvegarde des parties
|
|
g_spawn.c
|
Initialisation du jeu
|
|
g_svcmds.c
|
Commandes de la console accessibles uniquement depuis
la console
|
|
g_turret.c
|
Fonctions relatives aux tourelles (celle de Jail1)
|
|
g_weapon.c
|
Fonctions relatives aux armes. Ces fonctions sont
appelées via p_weapon.c
|
|
game.h
|
Contient certaines variables globales ainsi que
certaines structures
|
|
m_?????.c
|
Code source des différents monstres
|
|
m_?????.h
|
Contient la définition des frames des monstres
|
|
p_client.c
|
Fonctions relatives à l'architecture
client-serveur(du côté du client).
|
|
p_hud.c
|
Fonctions relatives aux intermissions (vidéo,...)
|
|
p_trail.c
|
Liste circulaire des dernières "cordonnées"
du joueur (utilisée par les monstres, pour la poursuite de celui-ci)
|
|
p_view.c
|
Fonctions relatives à la vue(la vue devient bleue
avec un Quad Damage par exemple)
|
|
p_weapon.c
|
Fonctions relatives des armes
|
|
q_shared.c
|
Fonctions provenant du moteur 3D du jeu (angles,
vecteurs, ...)
|
|
q_shared.h
|
Contient des structures, des prototypes de fonctions,
des variables globale ... Provient du moteur 3D du jeu
|
|