lundi 29 juin 2009

City 17 fait son come-back !

Vous vous souvenez peut-être de «City 17» paru pour la première fois le 27 décembre 2005 ?

Cette version est tellement vieille que j'imagine qu'elle reste introuvable sur la toile.

City 17 est devenu plus sérieux lorsque l'équipe du mod « Taturana's » décida de me donner les éléments de leur mod, c'est à dire models, coding, sons, etc...

C'est alors que City 17, en version 3.0, aurait du apparaitre peu de temps après la version 2 du mod et juste avant la grande sortie de « Smod » que beaucoup doivent connaitre.
Cette version ne put sortir pour cause informatique, les fichiers étant irrécupérables cette version fut enterré rapidement.

La version 4.0 quant à elle est sortie il y a environs 1 an.
Elle utilise le code de « Taturana's » mais cette version a beaucoup de problèmes, elle crash et elle est surtout dépassée par les événements.

Le retour de « City 17 » est annoncé !

L'arrivée prochaine de la nouvelle version du mod est prévue pour bientôt, il ne me reste plus qu'à réglé quelques soucis cotés armes et models.
Ainsi je ferai en sorte que les maps présentés dans la version 4.0 de City 17 puissent fonctionner sans problème dans cette nouvelle version qui utilisera le moteur de la Orange Box.

En attendant, vous pouvez voir le nouveau logo du mod créé par « Eaglesg »



Voici la liste des armes qui est actuellement dans le mod à ce stade :

357
AK47
AR2
PHEROPODE
CMP150
ARBALETE
GRENADE
MAIN
MP5K
OICW
GRAVITY GUN
TAUCANNON
9MM
PYTHON
RPG
FUSIL A POMPE (2 fusils sont disponible)


Pour le moment il y en a pas mal, il se peut qu'il y en est d'autres.

En attendant, le mod n'a toujours pas d'histoire vu que celui ci retrace plus ou moins le parcours vue avec Half-Life 2 Beta.

City 17 devrait quand à lui sortir pendant ces vacances, plus exactement fin Aout.

Dernière édition : 2011

vendredi 12 juin 2009

[TUTO]Mettre un model pour le cadavre du joueur dès sa mort

Ce petit tutorial va vous permettre de mettre un model au joueur, c'est à dire que lorsque le joueur sera mort, dans le jeu vous aurez le model prédéfini qui tombera comme un ragdoll

Un peu comme Half-Life 2 Deathmatch alors que Half-Life 2 ne propose pas ça.

Ce code a été réalisé pour la Orange Box.

Les logiciels requis sont :

Visual Studio C++ 2008 Express Édition (La version Express Édition est amplement suffisante, elle est en français d'ailleurs)
Notepad++ (Notepad++ est un outil sympa pour l'édition rapide de vos fichiers .cpp et .h)

Réglages :

Les réglages pour Visual Studio C++ 2008 Express Édition sont ci-dessous :

Ouvrez Visual Studio c++ 2008 Express Édition, ouvrez ensuite votre projet game_episodic-2005
En haut à droite se trouve une barre avec 'Debug' 'WIN32', (image ci-dessous), maintenant un clic gauche sur 'Debug' ou 'WIN32' (c'est la même chose), 'Gestionnaire de configurations'.



Faites le nécessaire pour que l'image que j'ai mis en dessous soit la même que dans votre tableau.

C'est à dire :

Configuration de la solution active : Release // Plateforme de la solution active : Win32

client_episodic-2005 // Release // Win32 // une case est ici, elle faut qu'elle soit remplit
server_episodic-2005 // Release // Win32 // une case est ici, elle faut qu'elle soit remplit




Une fois terminé, nous pouvons maintenant fixé un problème du code qui est d'ailleurs très connu.
Le problème est connu pour ne pas compilé les .dll, mais il existe une solution et là voici :

A la ligne 348 du fichier client/c_vguiscreen.cpp, vous devriez avoir ceci :

dist = c_x / tan( M_PI * scaled_fov / 360.0 );


Pour ensuite le remplacé par ceci :

float dist_denom = tan( M_PI * scaled_fov / 360.0f );
dist = c_x / dist_denom;




Sauvegardez ensuite.

Partie Coding :


HL2_Player.cpp

Ouvrez dans Visual Studio C++ 2008 Express Édition le fichier HL2_Player.cpp qui se trouve dans Server\Source Files\HL2 DLL de votre fichier server_episodic-2005 du projet game_episodic-2005

Une fois ouvert, repérez ceci :



Pour ensuite ajouté la ligne surligné en rouge comme présenté ci-dessous qui est celle ci :

PrecacheModel( "models/barney.mdl" );




Toujours dans votre HL2_Player.cpp, rendez-vous comme ci-dessous aux lignes suivantes :



Vous pourrez voir 'player.mdl', remplacez le par 'barney.mdl' vu que plus haut on a définit barney.mdl dans PrecacheModel.
Évidement si vous voulez un autre model, remplacez barney.mdl par le model que vous voulez comme par exemple :

breen.mdl
alyx.mdl


Nous allons rajouté de nouvelles lignes de codes qui permettront au joueur d'avoir ses animations lorsqu'on aura la commande thirdperson activé dans le jeu.

Il vous suffit d'ajouté ceci dans votre HL2_Player.cpp :

// Set the activity based on an event or current state
void CHL2_Player::SetAnimation( PLAYER_ANIM playerAnim )
{
int animDesired;

float speed;

speed = GetAbsVelocity().Length2D();

if ( GetFlags() & ( FL_FROZEN | FL_ATCONTROLS ) )
{
speed = 0;
playerAnim = PLAYER_IDLE;
}

Activity idealActivity = ACT_RUN;

// This could stand to be redone. Why is playerAnim abstracted from activity? (sjb)
if ( playerAnim == PLAYER_JUMP )
{
idealActivity = ACT_JUMP;
}
else if ( playerAnim == PLAYER_DIE )
{
if ( m_lifeState == LIFE_ALIVE )
{
return;
}
}
else if ( playerAnim == PLAYER_ATTACK1 )
{
if ( GetActivity( ) == ACT_HOVER ||
GetActivity( ) == ACT_SWIM ||
GetActivity( ) == ACT_HOP ||
GetActivity( ) == ACT_LEAP ||
GetActivity( ) == ACT_DIESIMPLE )
{
idealActivity = GetActivity( );
}
else
{
idealActivity = ACT_GESTURE_RANGE_ATTACK1;
}
}
else if ( playerAnim == PLAYER_RELOAD )
{
idealActivity = ACT_GESTURE_RELOAD;
}
else if ( playerAnim == PLAYER_IDLE || playerAnim == PLAYER_WALK )
{
if ( !( GetFlags() & FL_ONGROUND ) && GetActivity( ) == ACT_HL2MP_JUMP ) // Still jumping
{
idealActivity = GetActivity( );
}
/*
else if ( GetWaterLevel() > 1 )
{
if ( speed == 0 )
idealActivity = ACT_HOVER;
else
idealActivity = ACT_SWIM;
}
*/
else
{
if ( GetFlags() & FL_DUCKING )
{
if ( speed > 0 )
{
idealActivity = ACT_WALK_CROUCH;
}
else
{
idealActivity = ACT_COVER_LOW; //ACT_IDLE_CROUCH;
}
}
else
{
if ( speed > 0 )
{
//alexj - fixed a bug here (walk and run were swapped)
idealActivity = m_fIsSprinting ? ACT_RUN : ACT_WALK;
}
else
{
idealActivity = ACT_IDLE;
}
}
}

//idealActivity = TranslateTeamActivity( idealActivity );
}

if ( idealActivity == ACT_GESTURE_RANGE_ATTACK1 )
{
RestartGesture( Weapon_TranslateActivity( idealActivity ) );

// FIXME: this seems a bit wacked
Weapon_SetActivity( Weapon_TranslateActivity( ACT_RANGE_ATTACK1 ), 0 );

return;
}
else if ( idealActivity == ACT_GESTURE_RELOAD )
{
RestartGesture( Weapon_TranslateActivity( idealActivity ) );
return;
}
else
{
SetActivity( idealActivity );

animDesired = SelectWeightedSequence( Weapon_TranslateActivity ( idealActivity ) );

if (animDesired == -1)
{
animDesired = SelectWeightedSequence( idealActivity );

if ( animDesired == -1 )
{
animDesired = 0;
}
}

// Already using the desired animation?
if ( GetSequence() == animDesired )
return;

m_flPlaybackRate = 1.0;
ResetSequence( animDesired );
SetCycle( 0 );
return;
}

// Already using the desired animation?
if ( GetSequence() == animDesired )
return;

//Msg( "Set animation to %d\n", animDesired );
// Reset to first frame of desired animation
ResetSequence( animDesired );
SetCycle( 0 );
}

HL2_Player.h

Pour finir, rendez-vous dans HL2_Player.h
et cherchez les lignes suivantes :

bool CanZoom( CBaseEntity *pRequester );
void ToggleZoom(void);
void StartZooming( void );
void StopZooming( void );
bool IsZooming( void );
void CheckSuitZoom( void );


Auxquelles vous remplacerez par celle ci :

bool CanZoom( CBaseEntity *pRequester );
void ToggleZoom(void);
void StartZooming( void );
void StopZooming( void );
bool IsZooming( void );
void CheckSuitZoom( void );
void SetAnimation( PLAYER_ANIM playerAnim );


Sauvegardez ensuite.

Compilation :

Phase finale, la compilation

Maintenez un clique droit sur server_episodic-2005 // Générer

Le fichier server.dll se trouvera donc dans src\game\server\bin

Dans le jeu :



L'image présenté représente le model hgrunt.mdl

Dernière édition : 2011