Outils pour utilisateurs

Outils du site


quake3:mod_quick_tuto

Modding quick tutorial

Mirroir de cette page.

Introduction

Pour créer un mod il est nécessaire de savoir programmer en langage C. Quake III ne fait pas ce que font généralement les autres jeux – c'est à dire permettre le modding via un langage de script (comme le Lua) ou d'autre chose encore plus abstraites pour permettre aux non initiés à la programmation des jeux et|ou non familiers au code du jeu dans son ensemble de faire de petites modification du comportement du jeu.

Deux catégories de Mods

Tout d'abord il vous faut savoir qu'il existe deux catégories de mods de Quake III :

  1. Les mods QVM
  2. Les mods DLL

Un mod QVM aura les mêmes effets InGame qu'un mod DLL. La seule différence est dans la manière sont ils sont exécutés.

Les mods QVM se créent en compilant vos sources dans un fichier QVM. Cela ressemble beaucoup au bytecode Java – ils contiennent des instructions que le moteur de Quake III interprète à l'exécution.

Les mods DLL se créent en compilant vos sources dans une DLL Windows (ou une shared library Unix). Ces DLLs ne sont aucunement différentes des DLLs Win32 – l'OS charge ces DLLs comme tout code natif et le moteur Quake III appelle les fonctions qu'ils contiennent.

Dans le reste de cet article, on se consacrera à la création d'un mod DLL.

Récupérer le code source

Tout d'abord nous devons récupérer le code source de Quake III Arena. Vous pouvez le télécharger ici : Q3A 1.32b sources (code source original d'Id Software avec les fichiers projets MSVS 2003)

Avec ces sources vous aurez besoin d'avoir une licence Quake 3 Arena même pour exécuter un mod, ça ne fonctionne pas avec la Démo. Les licences coûtent ~10€.

Mais plus besoin depuis que IoQuake3 a ajouté une CVar pour créer un mod standalone : Télécharger IoQuake3. De plus ce projet maintient le code, corrige les bugs, porte le code sur d'autres plateforme et ajoute quelques fonctionnalités ! il est donc bien plus intéressant que le code source d'origine.

Dans tous les cas si vous modifiez Quake III il est nécessaire d'avoir les assets (maps, images, sons, …) donc d'avoir la licence, sinon récupérez les assets d'open arena ou basez vous sur les source d'une modification complète de Quake3 comme tremulous.

Game Project Structure

There are eight project files included in the source. vous n'en utiliserez que 3:

  • cgame
  • game
  • quake3

Nous en ferons des DLLs windows. Cependant, vous devez changer le dossier d'output de ces DLLs. Dans les propriétés du projets mettez le dossier “baseq3″ de votre installation Quake III comme dossier d'output (dans mon cas c'est “c:\quake3\baseq3″).

Modification du Code

Nous allons changer une ligne de code qui augmentera la cadence de tir du lance roquette. dans le projet game ouvrez le fichier source bg_pmove.c, et recherchez la fonction PM_Weapon. Une fois la fonction trouvée, scrollez jusqu'à la fin de celle-ci où vous devez trouver cette instruction:

     switch( pm->ps->weapon ) {

Dans le bloc switch, cherchez le cas WP_ROCKET_LAUNCHER; c'est à peu près 125 lignes après le début de la fonction. Vous modifierez la variable “addTime”, mettez la à 100. Donc à la place de:

     case WP_ROCKET_LAUNCHER:
        addTime = 800;
 
        break;

Vous devez voir:

     case WP_ROCKET_LAUNCHER:
        addTime = 100; // for rapid fire
        break;

Dans la barre d'outils de Visual Studio choisissez la cible “Debug”, elle permet d'avoir de meilleures informations en cas de crashs.

Maintenant compilons : Dans le menu, sélectionnez “BuildRebuild Solution”. Un rebuild complet permet de virer les objets qui ont pu être oubliés par accident dans les sources.

Installation et lancement du Mod

Il est temps de faire tourner nos DLLs et de tester notre mod. Les DLLs ont été crées dans “c:\quake3\baseq3″ (ou votre répertoire d'installation de Quake III). Vérifiez-y leur présence :

  • cgamex86.dll
  • qagamex86.dll
  • uix86.dll

Il ne reste plus qu'à lancer quake 3 avec cette commande :

   ”quake3.exe +set sv_pure 0 +set vm_game 0 +set vm_cgame 0 +set vm_ui 0”

Une fois le jeu lancé chargez une map solo sans bot (pour ne pas être distrait). une fois sur la map, appuyez sur tilde (”~”) pour faire apparaître la console Quake III. Elle doit contenir une tonne de message de status. Utilisez les boutons <Page Up> et <Page Down> pour scroller. Vous voulez voir les message attestant que vos DLLs se sont bien chargées. Le message de status pour qagamex86 est quelque part plus haut, alors que ceux pour cgamex86 et uix86 sont vers le bas. Ces lignes devraient ressembler à, “LoadLibrary qagamex86.dll ok.

Une fois que vos DLLs se chargent correctement, c'est fini! Maintenant ramassez un lance roquettes et voyez à quelle cadence il tire !! Une map pour vite obtenir un lance roquette est q3dm1 accessible en mode Squirmish.

Plus Fun encore

Voici une autre modification pour que le lance roquette agisse comme une arme rapide. Quand nous avons changé la cadence de tir du lance roquette plus haut, nous avons juste changé le débit des roquettes (le temps entre chaque tir), mais pas leur vitesse. Le jeu sera plus fun et on pourra fragger comme des fous si la roquette va bien plus vite !

Pour le faire, ouvrez la source g_missile.c dans le projet game et recherchez la fonction “fire_rocket”. Une fois rendu, vous remarquerez que la fonction est assez petite et que son utilité est de definir les propriétés du projectile. Vous porterez attention à cette ligne à la fin de la fonction :

     VectorScale( dir, 900, bolt->s.pos.trDelta );

Changez la en :

     VectorScale( dir, 1800, bolt->s.pos.trDelta );

Mettez une valeur inférieure à 900 vous donnera des roquettes moins rapides, supérieur à 900 vous donnera des roquettes plus rapides. Mais attention! vous pouvez désormais tirer des roquettes plus rapides, mais le bots aussi le peuvent !

Conclusion

La création d'un mod complexe qui modifie plus d'une ligne requiert une compréhension et une étude approfondie du code de Quake III. Mais vous pouvez apprendre rapidement en testant diverses modifications du code et/ou via un debugger.

-Greg Dolley
-Trad. par Mr-Hide

quake3/mod_quick_tuto.txt · Dernière modification: 2011/11/30 16:46 par mrhide