000
29.09.2007, 11:25
RikkuZooo
|
Wir erstellen ein Doom 1-2 ehnliches hud face:

so als erstes suchen wir in der datei: health.cpp nach
DECLARE_MESSAGE(m_Health, Damage ) wir schreiben nun darunter:
DECLARE_MESSAGE(m_Health, Anime) so jetzt suchen wir weiter nach:
#define DAMAGE_NAME "sprites/%d_dmg.spr" wir schreiben nun darunter:
#define ANIME1_NAME "sprites/colette01.spr" #define ANIME2_NAME "sprites/colette02.spr" #define ANIME3_NAME "sprites/colette03.spr" damit später bein schaden sich auch die bilder andern so jetzt gehen wir zu:
int CHudHealth::VidInit(void) ersetzt denn code einfach hiermit:
int CHudHealth::VidInit(void) { m_hSprite = 0; m_hSpriteAnime = 0;
m_HUD_dmg_bio = gHUD.GetSpriteIndex( "dmg_bio" ) + 1; m_HUD_cross = gHUD.GetSpriteIndex( "cross" );
giDmgHeight = gHUD.GetSpriteRect(m_HUD_dmg_bio).right - gHUD.GetSpriteRect(m_HUD_dmg_bio).left; giDmgWidth = gHUD.GetSpriteRect(m_HUD_dmg_bio).bottom - gHUD.GetSpriteRect(m_HUD_dmg_bio).top; return 1; } unter:
int CHudHealth:: MsgFunc_Damage(const char *pszName, int iSize, void *pbuf ) schreiben wir das:
int CHudHealth::MsgFunc_Anime(const char *pszName, int iSize, void *pbuf ) { BEGIN_READ( pbuf, iSize );
m_iFlags |= HUD_ACTIVE;
return 1; } nun ersetzten wir die:
int CHudHealth::Draw(float flTime) durch denn code hier:
int CHudHealth::Draw(float flTime) { int r, g, b; int a = 0, x, y; int HealthWidth;
if ( (gHUD.m_iHideHUDDisplay & HIDEHUD_HEALTH) || gEngfuncs.IsSpectateOnly() ) return 1;
if ( (gHUD.m_iHideHUDDisplay & ( HIDEHUD_WEAPONS | HIDEHUD_ALL )) ) return 1;
if ( !m_hSprite ) m_hSprite = LoadSprite(PAIN_NAME);
// Has health changed? Flash the health # if (m_fFade) { m_fFade -= (gHUD.m_flTimeDelta * 20); if (m_fFade <= 0) { a = MIN_ALPHA; m_fFade = 0; }
// Fade the health number back to dim
a = MIN_ALPHA + (m_fFade/FADE_TIME) * 128;
} else a = MIN_ALPHA;
// If health is getting low, make it bright red if (m_iHealth <= 15) a = 200; GetPainColor( r, g, b ); ScaleColors(r, g, b, a );
// UnpackRGB(r, g, b, RGB_YELLOWISH);
if ( !m_hSpriteAnime ) { m_hSpriteAnime = LoadSprite(ANIME1_NAME);
Anime_width = SPR_Width(m_hSpriteAnime, 0)*2.25; Anime_height = SPR_Height(m_hSpriteAnime, 0)*10; }
// Only draw health if we have the suit. if (gHUD.m_iWeaponBits & (1<<(WEAPON_SUIT))) { HealthWidth = gHUD.GetSpriteRect(gHUD.m_HUD_number_0).right - gHUD.GetSpriteRect(gHUD.m_HUD_number_0).left; int CrossWidth = gHUD.GetSpriteRect(m_HUD_cross).right - gHUD.GetSpriteRect(m_HUD_cross).left;
y = ScreenHeight - gHUD.m_iFontHeight - gHUD.m_iFontHeight / 2; x = CrossWidth /2;
SPR_Set(gHUD.GetSprite(m_HUD_cross), r, g, b); SPR_DrawAdditive(0, x, y, &gHUD.GetSpriteRect(m_HUD_cross));
x = CrossWidth + HealthWidth / 2;
x = gHUD.DrawHudNumber(x, y, DHN_3DIGITS | DHN_DRAWZERO, m_iHealth, r, g, b);
x += HealthWidth/2;
int iHeight = gHUD.m_iFontHeight; int iWidth = HealthWidth/10; FillRGBA(x, y, iWidth, iHeight, 0, 200, 50, a);
if (m_iHealth <= 100) m_hSpriteAnime = LoadSprite(ANIME1_NAME); if (m_iHealth <= 55) m_hSpriteAnime = LoadSprite(ANIME2_NAME); if (m_iHealth <= 15) m_hSpriteAnime = LoadSprite(ANIME3_NAME);
SPR_Set(m_hSpriteAnime, r, g, b);
x = ScreenWidth - Anime_width - Anime_width; y = Anime_height / 2;
SPR_DrawAdditive(a, x, y, NULL); }
DrawDamage(flTime); return DrawPain(flTime); } so jetzt öffnen wir die: health.h dort überschreiben wir die klasse:
class CHudHealth: public CHudBase und überschreiben es hiermit:
class CHudHealth: public CHudBase { public: virtual int Init( void ); virtual int VidInit( void ); virtual int Draw(float fTime); virtual void Reset( void ); int MsgFunc_Health(const char *pszName, int iSize, void *pbuf); int MsgFunc_Damage(const char *pszName, int iSize, void *pbuf); int MsgFunc_Anime(const char *pszName, int iSize, void *pbuf); int m_iHealth; int m_HUD_dmg_bio; int m_HUD_cross; float m_fAttackFront, m_fAttackRear, m_fAttackLeft, m_fAttackRight; void GetPainColor( int &r, int &g, int &b ); float m_fFade;
private: HSPRITE m_hSprite; HSPRITE m_hDamage; HSPRITE m_hSpriteAnime; DAMAGE_IMAGE m_dmg[NUM_DMG_TYPES]; int m_bitsDamage; int Anime_height, Anime_width; int DrawPain(float fTime); int DrawDamage(float fTime); void CalcDamageDirection(vec3_t vecFrom); void UpdateTiles(float fTime, long bits); }; denke mal solte alles gehen wenn nicht schauts euch hier an: Download Source
--
AirChina Mobile
Dieser Beitrag wurde am 29.09.2007 um 14:28 von RikkuZooo bearbeitet.
|