Bienvenue dans le côté obscur de HL2: le HUD.
Ce tutoriel a pour but d'expliquer en détail comment rajouter des images dans le HUD, les positionner, changer la couleur de la texture quand on arrive a x point de vie et modifier la position des indications comme la vie, l'armure, les munitions etc...
Petite EDIT de Eaglesg: Drone part du principe que vous vous y connaissez un peu en C++ et que vous avez bien configuré comme des grands Visual C++ Ce tutoriel a été écrit a l'aide du tuto sur valve wiki "basic hud modification" et mes découverte donc certaines affirmation peuvent être fausse. Merci de me les signaler de manière agréable et pas m'assassiner car pour l'instant c'est le seul tuto de modification de hud claire et surtout en fr, merci.Pour commencer il nous faut une texture au format
vtf et son
vmt associé.
Voici à quoi doit ressembler le
vmt, si vous voulez avoir une couche alpha reconnue par le moteur:
- Code:
-
"UnlitGeneric"
{
"$basetexture" "HUD/texture_vie"
"$translucent" "1"
"$translucency" "1"
"$ignorez" "1"
}
Je rappelle que les
vtf doivent avoir une taille en multiple de 2.
Maintenant il va falloir coder. c'est à mettre du côté client.
Commencez par créer le fichier
hud_texture_vie.h et insérez-y ce code
- Code:
-
#include "hudelement.h"
#include
using namespace vgui;
class CHudTextureVie : public CHudElement, public Panel
{
DECLARE_CLASS_SIMPLE( CHudTextureVie, Panel );
public:
CHudTextureVie( const char *pElementName );
void togglePrint();
virtual void OnThink();
protected:
virtual void Paint();
int m_nTextureVie;
};
C'est fini pour le .h
Ensuite créez un fichier
hud_texture_vie.cpp placez y les include suivant
- Code:
-
#include "hud.h"
#include "cbase.h"
#include "hud_texture_vie.h"
#include "iclientmode.h"
#include "hud_macros.h"
#include "vgui_controls/controls.h"
#include "vgui/ISurface.h"
#include "tier0/memdbgon.h"
using namespace vgui;
DECLARE_HUDELEMENT( CHudTextureVie );
Là, on va indiquer au moteur de hl2
- Où se situe le
vmt - Si la texture est visible ou non
- Quelle est la transparence de la couche alpha
- Vérifier si on a la CPMH (HEV pour les anglais) ou pas
- Code:
-
CHudTextureVie::CHudTextureVie( const char *pElementName ) : CHudElement( pElementName ), BaseClass( NULL, "HudTextureVie" )
{
Panel *pParent = g_pClientMode->GetViewport();
SetParent( pParent );
SetVisible( false );
SetAlpha( 255 );
//AW Create Texture for Looking around
m_nTextureVie = surface()->CreateNewTextureID(); //crée un id pour la nouvelle texture
surface()->DrawSetTextureFile( m_nTextureVie, "HUD/TextureVie" , true, true); // indique le chemain de la texture et si je ne me tronpe pas l'assigne a son ID (m_nTextureVie), ne pressisez pas l'extention
SetHiddenBits( HIDEHUD_PLAYERDEAD | HIDEHUD_NEEDSUIT );
}
Quelque chose d'intéressant dans la 1ere ligne du code:
- Code:
-
CHudElement( pElementName ), BaseClass( NULL, "HudTextureVie" )
"HudTextureVie" permet de définir au moteur où aller chercher les coordonnées de la texture dans HudLayout.res mais ne vous inquiétez pas je détaillerais cette partie plus tard.
La prochaine fonction va permettre de charger la texture et de l'afficher.
- Code:
-
void CHudTextureVie::Paint()
{
SetPaintBorderEnabled(false);
surface()->DrawSetTexture( m_nTextureVie ); // affiche la texture associer a l'ID
surface()->DrawTexturedRect( 0, 0, 128, 128 ); //positionne la texture quui vient d'etre affichée et indique la dimention de celle ci (les 2 dernier chifre)
}
les coordonnées de la texture sont celles par défaut et seront modifiables mais pas encore les dimensions (j'ai pas encore tester ça fait que 3 jours que je code entre mes révisions de bac... C'est plus tôt l'inverse...
)
- Code:
-
surface()->DrawTexturedRect( xspacing , yspacing, xsize, ysize );
Dès que j'ai des infos dessus je complèterais.
- Code:
-
static ConVar show_beta("show_beta", "0", 0, "toggles beta icon in upper right corner");
Cette ligne se place après le dernier include comme ceci:
- Code:
-
#include "tier0/memdbgon.h"
using namespace vgui;
DECLARE_HUDELEMENT( CHudTextureVie );
static ConVar hud_texturevie("hud_texturevie", "0", 0, "toggles beta icon in upper right corner");
Elle permet de définir une commande dans la console de hl2 (clique droit sur l'icône du mod =>
option de lancement =>
-dev -console puis
ok,
-dev permet de désactiver la vidéo d'intro et les maps en background et
-console (très dur...) affiche la console)
Tapez dans la console
hud_texturevie 1 et en lançant une map. Vous pourrez voire votre texture mais pas du tout à l'endroit attendue ,
hud_texturevie 0 effacer la texture (mais allez au bout du tuto).
Pour finir avec le codding ajoutez ces 2 dernières fonctions:
- Code:
-
void CHudTextureVie::togglePrint()
{
if (!hud_texturevie.GetBool())
this->SetVisible(false);
else
this->SetVisible(true);
}
et
- Code:
-
void CHudTextureVie::OnThink()
{
togglePrint();
BaseClass::OnThink();
}
CHudTextureVie::togglePrint() permet d'afficher la texture si
hud_texturevie 1 a été rentré sinon on affiche pas la texture
CHudTextureVie::OnThink(. Je ne sais pas a quoi elle sert mais elle y est donc je l'ai mise.
Voila la partie codding est finie il reste plus qu'à compiler.
Passons au fichier de configuration, ce qui est un apport non négligeable par rapport a HL1
Allez dans le dossier
scripts/HudLayout.res, ouvrez le là vous devriez voir un code de cette forme:
- Code:
-
HudTextureVie
{
"fieldName" "HudTextureVie"
"xpos" "r86"
"ypos" "6"
"wide" "80"
"tall" "34"
"visible" "0"
"enabled" "1"
"PaintBackgroundType" "2"
}
Rajoutez-le juste après
health, enregistrez et exécutez votre mod et là, si tout a fonctionné, vous devriez voir une texture en haut a droite de votre écran. Si un quadrillage rose et noir apparait au lieu de la texture, ne vous affolez pas, c'est juste que le moteur ne trouve pas la texture. Cela ne vient en aucun cas d'une erreur de code. Revérifiez tout vos chemins.
La première partie de ce tuto est finie.
La deuxième partie va expliquer comment déplacer la vie, l'armure, et les munitions.
Tout se passe dans
recource\ClientShem.resscript\HudLayout.resscript\Hudanimation.txtClientShem.res contient toutes les couleur du hud et les tailles des cratères.
HudLayout.res contient toutes les coordonnée de position des élément du hud.
Hudanimation.txt quant a lui, il permet de paramétrer comment réagi, par exemple la vie quand on se fais mal, la couleur passe au rouge a 19 de vie, et bien c'est dans ce fichier que c'est paramétré ce changement de couleur est un event et est appeler par le code quand la vie est inférieur a 20
par contre si on veut faire que la vie passe de vert a jaune a 40 de vie il faudra coder l'event et dans hudanimation il faudra crée une nouvelle portion de code (facile il suffira de copier le changement de couleur pour 19 de vie)
Cette partie n'est pas terminée car je n'ai pas mes fichiers modifiés sous la main et pas d'image pour agrémenter cette partie. La première partie sera aussi complétée avec des images.
Bon test pour les plus courageux qui on envie de tester dès maintenant ce tuto bourré de fautes d'orthographe (
EDIT: Plus maintenant, Eaglesg le super-correcteur est passé ) (et oui si je passe pas mon bac de LV2 c'est pas pour rien
merci la dyslexie)