Présentation du SDK de Half-Life

Écrit le 03/07/2003 par Bicou
Dernière mise à jour : 30/01/2006

Introduction

Ceci est une explication sur le SDK, qui ne sera je pense jamais finie puisqu'il y a toujours quelque chose à rajouter. N'hésitez pas à me contacter pour des ajouts éventuels. Merci.

Côté client

Le client sert à afficher toutes sortes de choses sur l'écran du joueur : sprites, textes, menus VGUI et images (TGA).

Il sert également à créer des nouvelles commandes et à les associer à une touche, il y a un tutorial pour ça ici.

Pour afficher des informations, il existe deux moyens : le viewport et le hud. Le viewport sert à afficher les menus VGUI, le hud sert à afficher les sprites. On dispose également de la TriAPI qui permet de tracer des polys en temps réel directement par le code, mais c'est un peu plus compliqué, il y a un tutorial qui l'explique ici même.

viewport

Pour le viewport, la classe principale est TeamFortressViewport (.h/.cpp). Sont membres toutes sortes de fonctions et d'objets. Les fonctions sont celles qui affichent/éteignent les menus, celles qui reçoivent les messages envoyés par le serveur, et les membres sont des objets de classes, qui sont les menus VGUI.

Concrètement : déclarer une classe dérivée de CMenuPanel (qui est la classe principale pour créer ses menus) dans un .h (style vgui_monmenu.h), et l'implémenter dans un .cpp (vgui_monmenu.cpp). Dans le .cpp, il faut le constructeur, il définit les positions de tous les objets qui seront sur le menu : boutons (CommandButton), images (CImageLabel), labels (pour le texte) (Label), etc. Tous ces éléments sont des objets ; ils doivent être déclarés dans la classe du menu (dans vgui_monmenu.h).

HUD

La classe principale est Chud, elle marche exactement comme le viewport, c'est à dire qu'elle contient les fonctions qui reçoivent les messages envoyés par le serveur, et les objets, qui sont les différents éléments du HUD.

La classe principale pour créer une partie du HUD, c'est CHudBase (c'est l'équivalent de CMenuPanel). Il y a toujours les mêmes membres dans une fonction du HUD, c'est Init() (pour initialiser les variables), VidInit() (pour initialiser les variables relatives aux sprites), Draw() (pour l'afficher), et MsgFunc_***() (pour recevoir le message du serveur).

Côté serveur

Bon là c'est beaucoup plus compliqué parce qu'il y a beaucoup plus de choses, de possibilités...

Tout marche globalement par entités, dont voici la hiérarchie des classes, pour mieux comprendre :

Comme ça on voit que les joueurs sont des monstres, et que tout dérive de CBaseEntity. CBaseMonster crée des monstres, CBasePlayerWeapon crée des armes.

Armes

Les armes sont déclarées dans weapons.h, et définies dans un .cpp à part. On a :

Pour que l'arme soit précachée en temps voulu et ainsi éviter tout plantage, il faut ajouter deux lignes dans weapons.cpp, qui servent à lancer la fonction Precache() de l'arme.

Monstres

Les monstres sont déclarés en « entier » dans un .cpp (c'est à dire la classe ET son implémentation). On a :

Il existe d'autres fonctions importantes : celles de l'IA, mais DukeNukem a fait des tuts très bien pour expliquer le fonctionnement.