- Consolidated the mug shot code shared by DSBarInfo and DDoomStatusBar

into a single place.
- Fixed: Setting an invalid mug shot state crashed the game.
- Fixed my attempts to be clever with strings yesterday.


SVN r1009 (trunk)
This commit is contained in:
Randy Heit 2008-06-01 03:35:47 +00:00
parent ccf123407a
commit 4850a98c13
9 changed files with 837 additions and 789 deletions

View file

@ -1,3 +1,9 @@
May 31, 2008
- Consolidated the mug shot code shared by DSBarInfo and DDoomStatusBar
into a single place.
- Fixed: Setting an invalid mug shot state crashed the game.
- Fixed my attempts to be clever with strings yesterday.
May 30, 2008 May 30, 2008
- If an actor's current target temporarily goes unshootable, its threshold - If an actor's current target temporarily goes unshootable, its threshold
is now reset to 0, so it will more readily switch back to it. is now reset to 0, so it will more readily switch back to it.

View file

@ -21,9 +21,6 @@
#define ST_STRAIGHTFACECOUNT (TICRATE/2) #define ST_STRAIGHTFACECOUNT (TICRATE/2)
#define ST_TURNCOUNT (1*TICRATE) #define ST_TURNCOUNT (1*TICRATE)
#define ST_OUCHCOUNT (1*TICRATE) #define ST_OUCHCOUNT (1*TICRATE)
#define ST_RAMPAGEDELAY (2*TICRATE)
#define ST_MUCHPAIN 20
EXTERN_CVAR (Bool, vid_fps) EXTERN_CVAR (Bool, vid_fps)
@ -51,14 +48,6 @@ public:
BigHeight = tex->GetHeight(); BigHeight = tex->GetHeight();
DoCommonInit (); DoCommonInit ();
bEvilGrin = false;
bNormal = true;
bDamageFaceActive = false;
bOuchActive = false;
CurrentState = NULL;
RampageTimer = 0;
LastDamageAngle = 1;
} }
~DDoomStatusBar () ~DDoomStatusBar ()
@ -104,7 +93,7 @@ public:
// set face background color // set face background color
StatusBarTex.SetPlayerRemap(translationtables[TRANSLATION_Players][int(CPlayer - players)]); StatusBarTex.SetPlayerRemap(translationtables[TRANSLATION_Players][int(CPlayer - players)]);
} }
bEvilGrin = false; MugShot.bEvilGrin = false;
} }
void Tick () void Tick ()
@ -113,28 +102,7 @@ public:
RandomNumber = M_Random (); RandomNumber = M_Random ();
//Do some stuff related to the mug shot that has to be done at 35fps //Do some stuff related to the mug shot that has to be done at 35fps
if(CurrentState != NULL) MugShot.Tick(CPlayer);
{
CurrentState->tick();
if(CurrentState->finished)
{
bNormal = true;
bOuchActive = false;
CurrentState = NULL;
}
}
if((CPlayer->cmd.ucmd.buttons & (BT_ATTACK|BT_ALTATTACK)) && !(CPlayer->cheats & (CF_FROZEN | CF_TOTALLYFROZEN)))
{
if(RampageTimer != ST_RAMPAGEDELAY)
{
RampageTimer++;
}
}
else
{
RampageTimer = 0;
}
FaceHealth = CPlayer->health;
} }
void Draw (EHudState state) void Draw (EHudState state)
@ -160,7 +128,6 @@ public:
OldArmor = -1; OldArmor = -1;
OldActiveAmmo = -1; OldActiveAmmo = -1;
OldFrags = -9999; OldFrags = -9999;
FaceHealth = -9999;
} }
DrawMainBar (); DrawMainBar ();
if (CPlayer->inventorytics > 0 && !(level.flags & LEVEL_NOINVENTORYBAR)) if (CPlayer->inventorytics > 0 && !(level.flags & LEVEL_NOINVENTORYBAR))
@ -171,22 +138,6 @@ public:
} }
} }
//See sbarinfo_display.cpp
void SetMugShotState (const char* stateName, bool waitTillDone=false)
{
bNormal = false; //Assume we are not setting god or normal for now.
bOuchActive = false;
MugShotState *state = (MugShotState *) FindMugShotState(stateName);
if(state != CurrentState)
{
if(!waitTillDone || CurrentState == NULL || CurrentState->finished)
{
CurrentState = state;
state->reset();
}
}
}
private: private:
struct FDoomStatusBarTexture : public FTexture struct FDoomStatusBarTexture : public FTexture
{ {
@ -747,151 +698,22 @@ private:
void ReceivedWeapon (AWeapon *weapon) void ReceivedWeapon (AWeapon *weapon)
{ {
bEvilGrin = true; MugShot.bEvilGrin = true;
}
int UpdateState ()
{
int i;
angle_t badguyangle;
angle_t diffang;
if(CPlayer->health > 0)
{
if(bEvilGrin)
{
if(CurrentState == NULL)
bEvilGrin = false;
else if(CPlayer->bonuscount)
{
SetMugShotState("grin", false);
return 0;
}
}
if (CPlayer->damagecount)
{
int damageAngle = 1;
if(CPlayer->attacker && CPlayer->attacker != CPlayer->mo)
{
if(CPlayer->mo != NULL)
{
//The next 12 lines is from the Doom statusbar code.
badguyangle = R_PointToAngle2(CPlayer->mo->x, CPlayer->mo->y, CPlayer->attacker->x, CPlayer->attacker->y);
if(badguyangle > CPlayer->mo->angle)
{
// whether right or left
diffang = badguyangle - CPlayer->mo->angle;
i = diffang > ANG180;
}
else
{
// whether left or right
diffang = CPlayer->mo->angle - badguyangle;
i = diffang <= ANG180;
} // confusing, aint it?
if(i && diffang >= ANG45)
{
damageAngle = 0;
}
else if(!i && diffang >= ANG45)
{
damageAngle = 2;
}
}
}
bool useOuch = false;
const char *stateName;
if ((FaceHealth != -1 && CPlayer->health - FaceHealth > 20) || bOuchActive)
{
useOuch = true;
stateName = "ouch.";
}
else
stateName = "pain.";
FString fullStateName;
fullStateName << stateName << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState(stateName);
bDamageFaceActive = !(CurrentState == NULL);
LastDamageAngle = damageAngle;
bOuchActive = useOuch;
return damageAngle;
}
if(bDamageFaceActive)
{
if(CurrentState == NULL)
bDamageFaceActive = false;
else
{
bool useOuch = false;
const char *stateName;
if ((FaceHealth != -1 && CPlayer->health - FaceHealth > 20) || bOuchActive)
{
useOuch = true;
stateName = "ouch.";
}
else
stateName = "pain.";
FString fullStateName;
fullStateName << stateName << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState(stateName);
bOuchActive = useOuch;
return LastDamageAngle;
}
}
if(RampageTimer == ST_RAMPAGEDELAY)
{
SetMugShotState("rampage", !bNormal); //If we have nothing better to show use the rampage face.
return 0;
}
if(bNormal)
{
if((CPlayer->cheats & CF_GODMODE) || (CPlayer->mo != NULL && CPlayer->mo->flags2 & MF2_INVULNERABLE))
SetMugShotState("god");
else
SetMugShotState("normal");
bNormal = true; //SetMugShotState sets bNormal to false.
}
}
else
{
FString fullStateName;
fullStateName << "death." << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState("death");
}
return 0;
} }
void DrawFace() void DrawFace()
{ {
// If a player has an inventory item selected, it takes the place of the
// face, for lack of a better place to put it.
if (CPlayer->mo->InvSel == NULL || (level.flags & LEVEL_NOINVENTORYBAR)) if (CPlayer->mo->InvSel == NULL || (level.flags & LEVEL_NOINVENTORYBAR))
{ {
int angle = UpdateState(); FTexture *face = MugShot.GetFace(CPlayer, "STF", 5, false, false);
int level = 0;
for(level = 0;CPlayer->health < (4-level)*(CPlayer->mo->GetMaxHealth()/5);level++);
if(CurrentState != NULL)
{
FString defaultFace = "STF";
FPlayerSkin *skin = &skins[CPlayer->morphTics ? CPlayer->MorphedPlayerClass : CPlayer->userinfo.skin];
FTexture *face = CurrentState->getCurrentFrameTexture(defaultFace, skin, level, angle);
if (face != NULL) if (face != NULL)
{ {
DrawPartialImage(&StatusBarTex, 142, 37); DrawPartialImage(&StatusBarTex, 142, 37);
DrawImage(face, 143, 0); DrawImage(face, 143, 0);
} }
} }
}
else else
{ {
DrawDimImage(TexMan(CPlayer->mo->InvSel->Icon), 144, 0, CPlayer->mo->InvSel->Amount <= 0); DrawDimImage(TexMan(CPlayer->mo->InvSel->Icon), 144, 0, CPlayer->mo->InvSel->Amount <= 0);
@ -902,6 +724,11 @@ private:
} }
} }
void SetMugShotState (const char *state_name, bool wait_till_done)
{
MugShot.SetState(state_name, wait_till_done);
}
enum enum
{ {
imgKEYS0, imgKEYS0,
@ -952,18 +779,9 @@ private:
char ArmsRefresh[3]; char ArmsRefresh[3];
char AmmoRefresh; char AmmoRefresh;
char MaxAmmoRefresh; char MaxAmmoRefresh;
char FaceRefresh;
char KeysRefresh; char KeysRefresh;
//Mugshot FMugShot MugShot;
MugShotState *CurrentState;
int RampageTimer;
int LastDamageAngle;
int FaceHealth;
bool bEvilGrin;
bool bDamageFaceActive;
bool bNormal;
bool bOuchActive;
}; };
IMPLEMENT_CLASS(DDoomStatusBar) IMPLEMENT_CLASS(DDoomStatusBar)

View file

@ -52,6 +52,8 @@ enum EHudState
class AWeapon; class AWeapon;
// HUD Message base object --------------------------------------------------
class DHUDMessage : public DObject class DHUDMessage : public DObject
{ {
DECLARE_CLASS (DHUDMessage, DObject) DECLARE_CLASS (DHUDMessage, DObject)
@ -92,6 +94,8 @@ private:
friend class DBaseStatusBar; friend class DBaseStatusBar;
}; };
// HUD Message; appear instantly, then fade out type ------------------------
class DHUDMessageFadeOut : public DHUDMessage class DHUDMessageFadeOut : public DHUDMessage
{ {
DECLARE_CLASS (DHUDMessageFadeOut, DHUDMessage) DECLARE_CLASS (DHUDMessageFadeOut, DHUDMessage)
@ -109,6 +113,8 @@ protected:
DHUDMessageFadeOut() {} DHUDMessageFadeOut() {}
}; };
// HUD Message; fade in, then fade out type ---------------------------------
class DHUDMessageFadeInOut : public DHUDMessageFadeOut class DHUDMessageFadeInOut : public DHUDMessageFadeOut
{ {
DECLARE_CLASS (DHUDMessageFadeInOut, DHUDMessageFadeOut) DECLARE_CLASS (DHUDMessageFadeInOut, DHUDMessageFadeOut)
@ -126,6 +132,8 @@ protected:
DHUDMessageFadeInOut() {} DHUDMessageFadeInOut() {}
}; };
// HUD Message; type on, then fade out type ---------------------------------
class DHUDMessageTypeOnFadeOut : public DHUDMessageFadeOut class DHUDMessageTypeOnFadeOut : public DHUDMessageFadeOut
{ {
DECLARE_CLASS (DHUDMessageTypeOnFadeOut, DHUDMessageFadeOut) DECLARE_CLASS (DHUDMessageTypeOnFadeOut, DHUDMessageFadeOut)
@ -147,6 +155,73 @@ protected:
DHUDMessageTypeOnFadeOut() {} DHUDMessageTypeOnFadeOut() {}
}; };
// Mug shots ----------------------------------------------------------------
struct FMugShotFrame
{
TArray<FString> Graphic;
int Delay;
FMugShotFrame();
~FMugShotFrame();
FTexture *GetTexture(const char *default_face, FPlayerSkin *skin, int random, int level=0,
int direction=0, bool usesLevels=false, bool health2=false, bool healthspecial=false,
bool directional=false);
};
struct FMugShotState
{
BYTE bUsesLevels:1;
BYTE bHealth2:1; // Health level is the 2nd character from the end.
BYTE bHealthSpecial:1; // Like health2 only the 2nd frame gets the normal health type.
BYTE bDirectional:1; // Faces direction of damage.
BYTE bFinished:1;
unsigned int Position;
int Time;
int Random;
FName State;
TArray<FMugShotFrame> Frames;
FMugShotState(FName name);
~FMugShotState();
void Tick();
void Reset();
FMugShotFrame &GetCurrentFrame() { return Frames[Position]; }
FTexture *GetCurrentFrameTexture(const char *default_face, FPlayerSkin *skin, int level=0, int direction=0)
{
return GetCurrentFrame().GetTexture(default_face, skin, Random, level, direction, bUsesLevels, bHealth2, bHealthSpecial, bDirectional);
}
private:
FMugShotState();
};
class player_s;
struct FMugShot
{
FMugShot();
void Tick(player_s *player);
bool SetState(const char *state_name, bool wait_till_done=false);
int UpdateState(player_s *player, bool xdeath, bool animated_god_mode);
FTexture *GetFace(player_s *player, const char *default_face, int accuracy, bool xdeath, bool animated_god_mode);
FMugShotState *CurrentState;
int RampageTimer;
int LastDamageAngle;
int FaceHealth;
bool bEvilGrin;
bool bDamageFaceActive;
bool bNormal;
bool bOuchActive;
};
extern TArray<FMugShotState> MugShotStates;
FMugShotState *FindMugShotState(FName state);
int FindMugShotStateIndex(FName state);
// Base Status Bar ----------------------------------------------------------
class FTexture; class FTexture;
class AAmmo; class AAmmo;
@ -218,7 +293,7 @@ public:
virtual void ShowPop (int popnum); virtual void ShowPop (int popnum);
virtual void ReceivedWeapon (AWeapon *weapon); virtual void ReceivedWeapon (AWeapon *weapon);
virtual bool MustDrawLog(EHudState state); virtual bool MustDrawLog(EHudState state);
virtual void SetMugShotState (const char* stateName, bool waitTillDone=false) {} virtual void SetMugShotState (const char *state_name, bool wait_till_done=false);
void DrawLog(); void DrawLog();
protected: protected:
@ -285,6 +360,8 @@ private:
extern DBaseStatusBar *StatusBar; extern DBaseStatusBar *StatusBar;
// Status bar factories -----------------------------------------------------
DBaseStatusBar *CreateDoomStatusBar(); DBaseStatusBar *CreateDoomStatusBar();
DBaseStatusBar *CreateHereticStatusBar(); DBaseStatusBar *CreateHereticStatusBar();
DBaseStatusBar *CreateHexenStatusBar(); DBaseStatusBar *CreateHexenStatusBar();

View file

@ -0,0 +1,473 @@
/*
** sbar_mugshot.cpp
**
** Draws customizable mugshots for the status bar.
**
**---------------------------------------------------------------------------
** Copyright 2008 Braden Obrzut
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
*/
#include "r_defs.h"
#include "r_main.h"
#include "m_random.h"
#include "d_player.h"
#include "d_event.h"
#include "sbar.h"
#define ST_RAMPAGEDELAY (2*TICRATE)
#define ST_MUCHPAIN 20
TArray<FMugShotState> MugShotStates;
//===========================================================================
//
// FMugShotFrame constructor
//
//===========================================================================
FMugShotFrame::FMugShotFrame()
{
}
//===========================================================================
//
// FMugShotFrame destructor
//
//===========================================================================
FMugShotFrame::~FMugShotFrame()
{
}
//===========================================================================
//
// FMugShotFrame :: GetTexture
//
// Assemble a graphic name with the specified prefix and return the FTexture.
//
//===========================================================================
FTexture *FMugShotFrame::GetTexture(const char *default_face, FPlayerSkin *skin, int random, int level,
int direction, bool uses_levels, bool health2, bool healthspecial, bool directional)
{
int index = !directional ? random % Graphic.Size() : direction;
if ((unsigned int)index > Graphic.Size() - 1)
{
index = Graphic.Size() - 1;
}
FString sprite(skin->face[0] != 0 ? skin->face : default_face, 3);
sprite += Graphic[index];
if (uses_levels) //change the last character to the level
{
if (!health2 && (!healthspecial || index == 1))
{
sprite.LockBuffer()[2 + Graphic[index].Len()] += level;
}
else
{
sprite.LockBuffer()[1 + Graphic[index].Len()] += level;
}
sprite.UnlockBuffer();
}
return TexMan[TexMan.CheckForTexture(sprite, 0, true)];
}
//===========================================================================
//
// MugShotState default constructor
//
//===========================================================================
FMugShotState::FMugShotState()
{
}
//===========================================================================
//
// MugShotState named constructor
//
//===========================================================================
FMugShotState::FMugShotState(FName name)
{
State = name;
bUsesLevels = false;
bHealth2 = false;
bHealthSpecial = false;
bDirectional = false;
bFinished = true;
Random = M_Random();
}
//===========================================================================
//
// MugShotState destructor
//
//===========================================================================
FMugShotState::~FMugShotState()
{
}
//===========================================================================
//
// FMugShotState :: Tick
//
//===========================================================================
void FMugShotState::Tick()
{
if (Time == -1)
{ //When the delay is negative 1, stay on this frame indefinitely.
return;
}
if (Time != 0)
{
Time--;
}
else if (Position < Frames.Size() - 1)
{
Position++;
Time = Frames[Position].Delay;
Random = M_Random();
}
else
{
bFinished = true;
}
}
//===========================================================================
//
// FMugShotState :: Reset
//
//===========================================================================
void FMugShotState::Reset()
{
Time = Frames[0].Delay;
Position = 0;
bFinished = false;
Random = M_Random();
}
//===========================================================================
//
// FindMugShotState
//
//===========================================================================
FMugShotState *FindMugShotState(FName state)
{
for (unsigned int i = 0; i < MugShotStates.Size(); i++)
{
if (MugShotStates[i].State == state)
return &MugShotStates[i];
}
return NULL;
}
//===========================================================================
//
// FindMugShotStateIndex
//
// Used to allow replacements of states
//
//===========================================================================
int FindMugShotStateIndex(FName state)
{
for (unsigned int i = 0; i < MugShotStates.Size(); i++)
{
if (MugShotStates[i].State == state)
return i;
}
return -1;
}
//===========================================================================
//
// FMugShot constructor
//
//===========================================================================
FMugShot::FMugShot()
{
FaceHealth = -1;
bEvilGrin = false;
bNormal = true;
bDamageFaceActive = false;
bOuchActive = false;
CurrentState = NULL;
RampageTimer = 0;
LastDamageAngle = 1;
}
//===========================================================================
//
// FMugShot :: Tick
//
// Do some stuff related to the mug shot that has to be done at 35fps
//
//===========================================================================
void FMugShot::Tick(player_t *player)
{
if (CurrentState != NULL)
{
CurrentState->Tick();
if (CurrentState->bFinished)
{
bNormal = true;
bOuchActive = false;
CurrentState = NULL;
}
}
if ((player->cmd.ucmd.buttons & (BT_ATTACK|BT_ALTATTACK)) && !(player->cheats & (CF_FROZEN | CF_TOTALLYFROZEN)))
{
if (RampageTimer != ST_RAMPAGEDELAY)
{
RampageTimer++;
}
}
else
{
RampageTimer = 0;
}
FaceHealth = player->health;
}
//===========================================================================
//
// FMugShot :: SetState
//
// Sets the mug shot state and resets it if it is not the state we are
// already on. Wait_till_done is basically a priority variable; when set to
// true the state won't change unless the previous state is finished.
// Returns true if the requested state was switched to or is already playing,
// and false if the requested state could not be set.
//
//===========================================================================
bool FMugShot::SetState(const char *state_name, bool wait_till_done)
{
// Search for full name.
FMugShotState *state = FindMugShotState(FName(state_name, true));
if (state == NULL)
{
// Search for initial name, if the full one contains a dot.
const char *dot = strchr(state_name, '.');
if (dot != NULL)
{
state = FindMugShotState(FName(state_name, dot - state_name, true));
}
if (state == NULL)
{
// Requested state does not exist, so do nothing.
return false;
}
}
bNormal = false; //Assume we are not setting god or normal for now.
bOuchActive = false;
if (state != CurrentState)
{
if (!wait_till_done || CurrentState == NULL || CurrentState->bFinished)
{
CurrentState = state;
state->Reset();
return true;
}
return false;
}
return true;
}
//===========================================================================
//
// FMugShot :: UpdateState
//
//===========================================================================
int FMugShot::UpdateState(player_t *player, bool xdeath, bool animated_god_mode)
{
int i;
angle_t badguyangle;
angle_t diffang;
FString full_state_name;
if (player->health > 0)
{
if (bEvilGrin)
{
if (CurrentState == NULL)
{
bEvilGrin = false;
}
else if (player->bonuscount)
{
SetState("grin", false);
return 0;
}
}
if (player->damagecount)
{
int damage_angle = 1;
if (player->attacker && player->attacker != player->mo)
{
if (player->mo != NULL)
{
// The next 12 lines are from the Doom statusbar code.
badguyangle = R_PointToAngle2(player->mo->x, player->mo->y, player->attacker->x, player->attacker->y);
if (badguyangle > player->mo->angle)
{
// whether right or left
diffang = badguyangle - player->mo->angle;
i = diffang > ANG180;
}
else
{
// whether left or right
diffang = player->mo->angle - badguyangle;
i = diffang <= ANG180;
} // confusing, aint it?
if (i && diffang >= ANG45)
{
damage_angle = 0;
}
else if (!i && diffang >= ANG45)
{
damage_angle = 2;
}
}
}
bool use_ouch = false;
if ((FaceHealth != -1 && player->health - FaceHealth > ST_MUCHPAIN) || bOuchActive)
{
use_ouch = true;
full_state_name = "ouch.";
}
else
{
full_state_name = "pain.";
}
full_state_name += player->LastDamageType;
if (SetState(full_state_name))
{
bDamageFaceActive = (CurrentState != NULL);
LastDamageAngle = damage_angle;
bOuchActive = use_ouch;
}
return damage_angle;
}
if (bDamageFaceActive)
{
if (CurrentState == NULL)
{
bDamageFaceActive = false;
}
else
{
bool use_ouch = false;
if ((FaceHealth != -1 && player->health - FaceHealth > ST_MUCHPAIN) || bOuchActive)
{
use_ouch = true;
full_state_name = "ouch.";
}
else
{
full_state_name = "pain.";
}
full_state_name += player->LastDamageType;
if (SetState(full_state_name))
{
bOuchActive = use_ouch;
}
return LastDamageAngle;
}
}
if (RampageTimer == ST_RAMPAGEDELAY)
{
SetState("rampage", !bNormal); //If we have nothing better to show, use the rampage face.
return 0;
}
if (bNormal)
{
bool good;
if ((player->cheats & CF_GODMODE) || (player->mo != NULL && player->mo->flags2 & MF2_INVULNERABLE))
{
good = SetState(animated_god_mode ? "godanimated" : "god");
}
else
{
good = SetState("normal");
}
if (good)
{
bNormal = true; //SetState sets bNormal to false.
}
}
}
else
{
if (!xdeath || !(player->cheats & CF_EXTREMELYDEAD))
{
full_state_name = "death.";
}
else
{
full_state_name = "xdeath.";
}
full_state_name += player->LastDamageType;
SetState(full_state_name);
}
return 0;
}
FTexture *FMugShot::GetFace(player_t *player, const char *default_face, int accuracy, bool xdeath, bool animated_god_mode)
{
if (player->mo->InvSel == NULL || (level.flags & LEVEL_NOINVENTORYBAR))
{
int angle = UpdateState(player, xdeath, animated_god_mode);
int level = 0;
while (player->health < (4-level) * (player->mo->GetMaxHealth()/5))
{
level++;
}
if (CurrentState != NULL)
{
FPlayerSkin *skin = &skins[player->morphTics ? player->MorphedPlayerClass : player->userinfo.skin];
return CurrentState->GetCurrentFrameTexture(default_face, skin, level, angle);
}
}
return NULL;
}

View file

@ -133,7 +133,7 @@ struct SBarInfo
int GetGameType() { return gameType; } int GetGameType() { return gameType; }
void ParseSBarInfo(int lump); void ParseSBarInfo(int lump);
void ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block); void ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block);
void ParseMugShotBlock(FScanner &sc, MugShotState &state); void ParseMugShotBlock(FScanner &sc, FMugShotState &state);
void getCoordinates(FScanner &sc, SBarInfoCommand &cmd); //retrieves the next two arguments as x and y. void getCoordinates(FScanner &sc, SBarInfoCommand &cmd); //retrieves the next two arguments as x and y.
int getSignedInteger(FScanner &sc); //returns a signed integer. int getSignedInteger(FScanner &sc); //returns a signed integer.
int newImage(const char* patchname); int newImage(const char* patchname);
@ -147,47 +147,6 @@ struct SBarInfo
extern SBarInfo *SBarInfoScript; extern SBarInfo *SBarInfoScript;
//Mug Shot scripting structs.
struct MugShotState;
struct MugShotFrame
{
TArray<FString> graphic;
int delay;
MugShotFrame();
~MugShotFrame();
FTexture *getTexture(FString &defaultFace, FPlayerSkin *skn, int random, int level=0, int direction=0, bool usesLevels=false, bool health2=false, bool healthspecial=false, bool directional=false);
};
struct MugShotState
{
bool usesLevels;
bool health2; //health level is the 2nd character from the end.
bool healthspecial; //like health2 only the 2nd frame gets the normal health type.
bool directional; //faces direction of damage.
unsigned int position;
int time;
int random;
bool finished;
FName state;
TArray<MugShotFrame> frames;
MugShotState();
MugShotState(FString name);
~MugShotState();
void tick();
void reset();
MugShotFrame getCurrentFrame() { return frames[position]; }
FTexture *getCurrentFrameTexture(FString &defaultFace, FPlayerSkin *skn, int level=0, int direction=0) { return getCurrentFrame().getTexture(defaultFace, skn, random, level, direction, usesLevels, health2, healthspecial, directional); }
};
extern TArray<MugShotState> MugShotStates;
const MugShotState *FindMugShotState(FString state);
int FindMugShotStateIndex(FName state);
// Enums used between the parser and the display // Enums used between the parser and the display
enum //statusbar flags enum //statusbar flags
@ -386,7 +345,7 @@ private:
void DrawGraphic(FTexture* texture, int x, int y, int xOffset, int yOffset, int alpha, bool translate=false, bool dim=false, bool center=false); void DrawGraphic(FTexture* texture, int x, int y, int xOffset, int yOffset, int alpha, bool translate=false, bool dim=false, bool center=false);
void DrawString(const char* str, int x, int y, int xOffset, int yOffset, int alpha, EColorRange translation, int spacing=0); void DrawString(const char* str, int x, int y, int xOffset, int yOffset, int alpha, EColorRange translation, int spacing=0);
void DrawNumber(int num, int len, int x, int y, int xOffset, int yOffset, int alpha, EColorRange translation, int spacing=0, bool fillzeros=false); void DrawNumber(int num, int len, int x, int y, int xOffset, int yOffset, int alpha, EColorRange translation, int spacing=0, bool fillzeros=false);
void DrawFace(FString &defaultFace, int accuracy, bool xdth, bool animatedgodmode, int x, int y, int xOffset, int yOffset, int alpha); void DrawFace(const char *defaultFace, int accuracy, bool xdth, bool animatedgodmode, int x, int y, int xOffset, int yOffset, int alpha);
int updateState(bool xdth, bool animatedgodmode); int updateState(bool xdth, bool animatedgodmode);
void DrawInventoryBar(int type, int num, int x, int y, int xOffset, int yOffset, int alpha, bool alwaysshow, void DrawInventoryBar(int type, int num, int x, int y, int xOffset, int yOffset, int alpha, bool alwaysshow,
int counterx, int countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter); int counterx, int countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter);
@ -397,14 +356,6 @@ private:
FImageCollection Images; FImageCollection Images;
FPlayerSkin *oldSkin; FPlayerSkin *oldSkin;
FFont *drawingFont; FFont *drawingFont;
FString lastPrefix;
MugShotState *currentState;
bool weaponGrin;
bool damageFaceActive;
bool mugshotNormal;
bool ouchActive;
int lastDamageAngle;
int rampageTimer;
int oldHealth; int oldHealth;
int oldArmor; int oldArmor;
int mugshotHealth; int mugshotHealth;
@ -417,6 +368,7 @@ private:
FBarShader shader_horz_reverse; FBarShader shader_horz_reverse;
FBarShader shader_vert_normal; FBarShader shader_vert_normal;
FBarShader shader_vert_reverse; FBarShader shader_vert_reverse;
FMugShot MugShot;
}; };
#endif //__SBarInfo_SBAR_H__ #endif //__SBarInfo_SBAR_H__

View file

@ -74,83 +74,6 @@ enum
imgINVRTGEM2, imgINVRTGEM2,
}; };
// Custom Mug Shot Stuff (Find mug shot state functions are with the parser).
MugShotFrame::MugShotFrame()
{
}
MugShotFrame::~MugShotFrame()
{
graphic.Clear();
}
//Assemble a graphic name with the specified prefix and return the FTexture.
FTexture *MugShotFrame::getTexture(FString &defaultFace, FPlayerSkin *skin, int random, int level, int direction, bool usesLevels, bool health2, bool healthspecial, bool directional)
{
int index = !directional ? random % graphic.Size() : direction;
if(index > (signed int) (graphic.Size()-1))
index = graphic.Size()-1;
FString sprite(skin->face[0] != 0 ? skin->face : &defaultFace[0], 3);
sprite += graphic[index];
if(usesLevels) //change the last character to the level
{
if(!health2 && (!healthspecial || index == 1))
sprite.LockBuffer()[2 + graphic[index].Len()] += level;
else
sprite.LockBuffer()[1 + graphic[index].Len()] += level;
sprite.UnlockBuffer();
}
return TexMan[TexMan.CheckForTexture(sprite, 0, true)];
}
MugShotState::MugShotState()
{
}
MugShotState::MugShotState(FString name)
{
name.ToLower();
state = FName(name);
usesLevels = false;
health2 = false;
healthspecial = false;
directional = false;
random = M_Random();
}
MugShotState::~MugShotState()
{
frames.Clear();
}
void MugShotState::tick()
{
if(time == -1) //When the delay is negative 1 stay on this frame indefinitely
return;
if(time != 0)
{
time--;
}
else if(position != frames.Size()-1)
{
position++;
time = frames[position].delay;
random = M_Random();
}
else
{
finished = true;
}
}
void MugShotState::reset()
{
time = frames[0].delay;
position = 0;
finished = false;
random = M_Random();
}
//Used for shading //Used for shading
FBarShader::FBarShader(bool vertical, bool reverse) //make an alpha map FBarShader::FBarShader(bool vertical, bool reverse) //make an alpha map
{ {
@ -258,19 +181,10 @@ DSBarInfo::DSBarInfo () : DBaseStatusBar (SBarInfoScript->height),
invBarOffset = SBarInfoScript->Images.Size(); invBarOffset = SBarInfoScript->Images.Size();
Images.Init(&patchnames[0], patchnames.Size()); Images.Init(&patchnames[0], patchnames.Size());
drawingFont = V_GetFont("ConFont"); drawingFont = V_GetFont("ConFont");
rampageTimer = 0;
oldHealth = 0; oldHealth = 0;
oldArmor = 0; oldArmor = 0;
mugshotHealth = -1;
lastPrefix = "";
weaponGrin = false;
damageFaceActive = false;
mugshotNormal = true;
ouchActive = false;
lastDamageAngle = 1;
chainWiggle = 0; chainWiggle = 0;
artiflash = 4; artiflash = 4;
currentState = NULL;
currentPopup = POP_None; currentPopup = POP_None;
pendingPopup = POP_None; pendingPopup = POP_None;
} }
@ -347,9 +261,13 @@ void DSBarInfo::NewGame ()
void DSBarInfo::AttachToPlayer (player_t *player) void DSBarInfo::AttachToPlayer (player_t *player)
{ {
player_t *oldplayer = CPlayer;
currentState = NULL;
DBaseStatusBar::AttachToPlayer(player); DBaseStatusBar::AttachToPlayer(player);
MugShot.CurrentState = NULL;
}
void DSBarInfo::SetMugShotState (const char *state_name, bool wait_till_done)
{
MugShot.SetState(state_name, wait_till_done);
} }
void DSBarInfo::Tick () void DSBarInfo::Tick ()
@ -400,29 +318,7 @@ void DSBarInfo::Tick ()
artiflash--; artiflash--;
} }
//Do some stuff related to the mug shot that has to be done at 35fps MugShot.Tick(CPlayer);
if(currentState != NULL)
{
currentState->tick();
if(currentState->finished)
{
ouchActive = false;
mugshotNormal = true;
currentState = NULL;
}
}
if((CPlayer->cmd.ucmd.buttons & (BT_ATTACK|BT_ALTATTACK)) && !(CPlayer->cheats & (CF_FROZEN | CF_TOTALLYFROZEN)))
{
if(rampageTimer != ST_RAMPAGETIME)
{
rampageTimer++;
}
}
else
{
rampageTimer = 0;
}
mugshotHealth = CPlayer->health;
if(currentPopup != POP_None) if(currentPopup != POP_None)
{ {
SBarInfoScript->popups[currentPopup].tick(); SBarInfoScript->popups[currentPopup].tick();
@ -437,7 +333,7 @@ void DSBarInfo::Tick ()
void DSBarInfo::ReceivedWeapon(AWeapon *weapon) void DSBarInfo::ReceivedWeapon(AWeapon *weapon)
{ {
weaponGrin = true; MugShot.bEvilGrin = true;
} }
void DSBarInfo::FlashItem(const PClass *itemtype) void DSBarInfo::FlashItem(const PClass *itemtype)
@ -465,24 +361,6 @@ void DSBarInfo::ShowPop(int popnum)
} }
} }
//Public so it can be called by ACS
//Sets the mug shot state and resets it if it is not the state we are already on.
//waitTillDone is basically a priority variable when just to true the state won't change unless the previous state is finished.
void DSBarInfo::SetMugShotState(const char* stateName, bool waitTillDone)
{
mugshotNormal = false;
ouchActive = false;
MugShotState *state = (MugShotState *) FindMugShotState(stateName);
if(state != currentState)
{
if(!waitTillDone || currentState == NULL || currentState->finished)
{
currentState = state;
state->reset();
}
}
}
void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int alpha) void DSBarInfo::doCommands(SBarInfoBlock &block, int xOffset, int yOffset, int alpha)
{ {
//prepare ammo counts //prepare ammo counts
@ -1349,162 +1227,21 @@ void DSBarInfo::DrawNumber(int num, int len, int x, int y, int xOffset, int yOff
} }
if(SBarInfoScript->spacingCharacter == '\0') if(SBarInfoScript->spacingCharacter == '\0')
x -= int(drawingFont->StringWidth(value)+(spacing * value.Len())); x -= int(drawingFont->StringWidth(value)+(spacing * value.Len()));
else //monospaced so just multiplay the character size else //monospaced, so just multiplay the character size
x -= int((drawingFont->GetCharWidth((int) SBarInfoScript->spacingCharacter) + spacing) * value.Len()); x -= int((drawingFont->GetCharWidth((int) SBarInfoScript->spacingCharacter) + spacing) * value.Len());
DrawString(value, x, y, xOffset, yOffset, alpha, translation, spacing); DrawString(value, x, y, xOffset, yOffset, alpha, translation, spacing);
} }
//draws the mug shot //draws the mug shot
void DSBarInfo::DrawFace(FString &defaultFace, int accuracy, bool xdth, bool animatedgodmode, int x, int y, int xOffset, int yOffset, int alpha) void DSBarInfo::DrawFace(const char *defaultFace, int accuracy, bool xdth, bool animatedgodmode, int x, int y, int xOffset, int yOffset, int alpha)
{ {
int angle = updateState(xdth, animatedgodmode); FTexture *face = MugShot.GetFace(CPlayer, defaultFace, accuracy, xdth, animatedgodmode);
int level = 0;
while (CPlayer->health < (accuracy-level-1)*(CPlayer->mo->GetMaxHealth()/accuracy))
{
level++;
}
if(currentState != NULL)
{
FPlayerSkin *skin = &skins[CPlayer->morphTics ? CPlayer->MorphedPlayerClass : CPlayer->userinfo.skin];
FTexture *face = currentState->getCurrentFrameTexture(defaultFace, skin, level, angle);
if (face != NULL) if (face != NULL)
{
DrawGraphic(face, x, y, xOffset, yOffset, alpha); DrawGraphic(face, x, y, xOffset, yOffset, alpha);
} }
} }
int DSBarInfo::updateState(bool xdth, bool animatedgodmode)
{
int i;
angle_t badguyangle;
angle_t diffang;
if(CPlayer->health > 0)
{
if(weaponGrin)
{
if(currentState == NULL)
weaponGrin = false;
if(CPlayer->bonuscount)
{
SetMugShotState("grin", false);
return 0;
}
}
if (CPlayer->damagecount)
{
int damageAngle = 1;
if(CPlayer->attacker && CPlayer->attacker != CPlayer->mo)
{
if(CPlayer->mo != NULL)
{
//The next 12 lines is from the Doom statusbar code.
badguyangle = R_PointToAngle2(CPlayer->mo->x, CPlayer->mo->y, CPlayer->attacker->x, CPlayer->attacker->y);
if(badguyangle > CPlayer->mo->angle)
{
// whether right or left
diffang = badguyangle - CPlayer->mo->angle;
i = diffang > ANG180;
}
else
{
// whether left or right
diffang = CPlayer->mo->angle - badguyangle;
i = diffang <= ANG180;
} // confusing, aint it?
if(i && diffang >= ANG45)
{
damageAngle = 0;
}
else if(!i && diffang >= ANG45)
{
damageAngle = 2;
}
}
}
bool setOuch = false;
const char *stateName;
if ((mugshotHealth != -1 && CPlayer->health - mugshotHealth > 20) || ouchActive)
{
setOuch = true;
stateName = "ouch.";
}
else
stateName = "pain.";
FString fullStateName;
fullStateName << stateName << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState(stateName);
damageFaceActive = !(currentState == NULL);
lastDamageAngle = damageAngle;
ouchActive = setOuch;
return damageAngle;
}
if(damageFaceActive)
{
if(currentState == NULL)
damageFaceActive = false;
else
{
bool setOuch = false;
const char *stateName;
if ((mugshotHealth != -1 && CPlayer->health - mugshotHealth > 20) || ouchActive)
{
setOuch = true;
stateName = "ouch.";
}
else
stateName = "pain.";
FString fullStateName;
fullStateName << stateName << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState(stateName);
ouchActive = setOuch;
return lastDamageAngle;
}
}
if(rampageTimer == ST_RAMPAGETIME)
{
SetMugShotState("rampage", !mugshotNormal);
return 0;
}
if(mugshotNormal)
{
if((CPlayer->cheats & CF_GODMODE) || (CPlayer->mo != NULL && CPlayer->mo->flags2 & MF2_INVULNERABLE))
{
if(animatedgodmode)
SetMugShotState("godanimated");
else
SetMugShotState("god");
}
else
SetMugShotState("normal");
mugshotNormal = true; //SetMugShotState sets this to false
}
}
else
{
const char *stateName;
if(!xdth || !(CPlayer->cheats & CF_EXTREMELYDEAD))
stateName = "death.";
else
stateName = "xdeath.";
FString fullStateName;
fullStateName << stateName << CPlayer->LastDamageType;
if(FindMugShotState(fullStateName) != NULL)
SetMugShotState(fullStateName);
else
SetMugShotState(stateName);
}
return 0;
}
void DSBarInfo::DrawInventoryBar(int type, int num, int x, int y, int xOffset, int yOffset, int alpha, bool alwaysshow, void DSBarInfo::DrawInventoryBar(int type, int num, int x, int y, int xOffset, int yOffset, int alpha, bool alwaysshow,
int counterx, int countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter) int counterx, int countery, EColorRange translation, bool drawArtiboxes, bool noArrows, bool alwaysshowcounter)
{ //yes, there is some Copy & Paste here too { //yes, there is some Copy & Paste here too

View file

@ -38,8 +38,8 @@
#include "sc_man.h" #include "sc_man.h"
#include "v_font.h" #include "v_font.h"
#include "w_wad.h" #include "w_wad.h"
#include "sbar.h"
#include "d_player.h" #include "d_player.h"
#include "sbar.h"
#include "sbarinfo.h" #include "sbarinfo.h"
#include "templates.h" #include "templates.h"
#include "m_random.h" #include "m_random.h"
@ -47,7 +47,6 @@
#include "i_system.h" #include "i_system.h"
SBarInfo *SBarInfoScript; SBarInfo *SBarInfoScript;
TArray<MugShotState> MugShotStates;
static const char *SBarInfoTopLevel[] = static const char *SBarInfoTopLevel[] =
{ {
@ -287,28 +286,28 @@ void SBarInfo::ParseSBarInfo(int lump)
case SBARINFO_MUGSHOT: case SBARINFO_MUGSHOT:
{ {
sc.MustGetToken(TK_StringConst); sc.MustGetToken(TK_StringConst);
MugShotState state(sc.String); FMugShotState state(sc.String);
if(sc.CheckToken(',')) //first loop must be a comma if(sc.CheckToken(',')) //first loop must be a comma
{ {
do do
{ {
sc.MustGetToken(TK_Identifier); sc.MustGetToken(TK_Identifier);
if(sc.Compare("health")) if(sc.Compare("health"))
state.usesLevels = true; state.bUsesLevels = true;
else if(sc.Compare("health2")) else if(sc.Compare("health2"))
state.usesLevels = state.health2 = true; state.bUsesLevels = state.bHealth2 = true;
else if(sc.Compare("healthspecial")) else if(sc.Compare("healthspecial"))
state.usesLevels = state.healthspecial = true; state.bUsesLevels = state.bHealthSpecial = true;
else if(sc.Compare("directional")) else if(sc.Compare("directional"))
state.directional = true; state.bDirectional = true;
else else
sc.ScriptError("Unknown MugShot state flag '%s'.", sc.String); sc.ScriptError("Unknown MugShot state flag '%s'.", sc.String);
} }
while(sc.CheckToken(',') || sc.CheckToken('|')); while(sc.CheckToken(',') || sc.CheckToken('|'));
} }
ParseMugShotBlock(sc, state); ParseMugShotBlock(sc, state);
int index = 0; int index;
if((index = FindMugShotStateIndex(state.state)) != -1) //We already had this state, remove the old one. if((index = FindMugShotStateIndex(state.State)) != -1) //We already had this state, remove the old one.
{ {
MugShotStates.Delete(index); MugShotStates.Delete(index);
} }
@ -1152,12 +1151,12 @@ void SBarInfo::ParseSBarInfoBlock(FScanner &sc, SBarInfoBlock &block)
sc.MustGetToken('}'); sc.MustGetToken('}');
} }
void SBarInfo::ParseMugShotBlock(FScanner &sc, MugShotState &state) void SBarInfo::ParseMugShotBlock(FScanner &sc, FMugShotState &state)
{ {
sc.MustGetToken('{'); sc.MustGetToken('{');
while(!sc.CheckToken('}')) while(!sc.CheckToken('}'))
{ {
MugShotFrame frame; FMugShotFrame frame;
bool multiframe = false; bool multiframe = false;
if(sc.CheckToken('{')) if(sc.CheckToken('{'))
multiframe = true; multiframe = true;
@ -1166,14 +1165,14 @@ void SBarInfo::ParseMugShotBlock(FScanner &sc, MugShotState &state)
sc.MustGetToken(TK_Identifier); sc.MustGetToken(TK_Identifier);
if(strlen(sc.String) > 5) if(strlen(sc.String) > 5)
sc.ScriptError("MugShot frames cannot exceed 5 characters."); sc.ScriptError("MugShot frames cannot exceed 5 characters.");
frame.graphic.Push(sc.String); frame.Graphic.Push(sc.String);
} }
while(multiframe && sc.CheckToken(',')); while(multiframe && sc.CheckToken(','));
if(multiframe) if(multiframe)
sc.MustGetToken('}'); sc.MustGetToken('}');
frame.delay = getSignedInteger(sc); frame.Delay = getSignedInteger(sc);
sc.MustGetToken(';'); sc.MustGetToken(';');
state.frames.Push(frame); state.Frames.Push(frame);
} }
} }
@ -1315,17 +1314,6 @@ SBarInfoBlock::SBarInfoBlock()
alpha = FRACUNIT; alpha = FRACUNIT;
} }
const MugShotState *FindMugShotState(FString state)
{
state.ToLower();
for(unsigned int i = 0;i < MugShotStates.Size();i++)
{
if(MugShotStates[i].state == state)
return &MugShotStates[i];
}
return NULL;
}
//Popup //Popup
Popup::Popup() Popup::Popup()
{ {
@ -1435,14 +1423,3 @@ void Popup::close()
opened = false; opened = false;
moving = true; moving = true;
} }
//Used to allow replacements of states
int FindMugShotStateIndex(FName state)
{
for(unsigned int i = 0;i < MugShotStates.Size();i++)
{
if(MugShotStates[i].state == state)
return i;
}
return -1;
}

View file

@ -1331,6 +1331,10 @@ bool DBaseStatusBar::MustDrawLog(EHudState)
return true; return true;
} }
void DBaseStatusBar::SetMugShotState(const char *stateName, bool waitTillDone)
{
}
//--------------------------------------------------------------------------- //---------------------------------------------------------------------------
// //
// DrawTopStuff // DrawTopStuff

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="Windows-1252"?> <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject <VisualStudioProject
ProjectType="Visual C++" ProjectType="Visual C++"
Version="8,00" Version="8.00"
Name="zdoom" Name="zdoom"
ProjectGUID="{8049475B-5C87-46F9-9358-635218A4EF18}" ProjectGUID="{8049475B-5C87-46F9-9358-635218A4EF18}"
RootNamespace=" zdoom" RootNamespace=" zdoom"
@ -135,112 +135,6 @@
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
/> />
</Configuration> </Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
Description="Checking svnrevision.h..."
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/zdoom.tlb"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;jpeg-6b;snes_spc\snes_spc"
PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,HAVE_STRUPR,HAVE_FILELENGTH"
MinimalRebuild="true"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
ForceConformanceInForLoopScope="true"
PrecompiledHeaderFile=""
AssemblerOutput="0"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="0"
DisableSpecificWarnings="4996"
ForcedIncludeFiles=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="gdi32.lib user32.lib comctl32.lib shell32.lib advapi32.lib comdlg32.lib ole32.lib dxguid.lib dsound.lib dinput8.lib strmiids.lib wsock32.lib winmm.lib fmodex_vc.lib setupapi.lib ws2_32.lib"
OutputFile="../zdoomd.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
IgnoreDefaultLibraryNames="libcmt;msvcrtd;msvcrt"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/zdoomd.pdb"
SubSystem="2"
StackReserveSize="0"
TerminalServerAware="2"
SetChecksum="false"
TargetMachine="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration <Configuration
Name="Release|x64" Name="Release|x64"
OutputDirectory="$(PlatformName)\$(ConfigurationName)" OutputDirectory="$(PlatformName)\$(ConfigurationName)"
@ -352,6 +246,112 @@
Name="VCPostBuildEventTool" Name="VCPostBuildEventTool"
/> />
</Configuration> </Configuration>
<Configuration
Name="Debug|Win32"
OutputDirectory=".\Debug"
IntermediateDirectory=".\Debug"
ConfigurationType="1"
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
UseOfMFC="0"
ATLMinimizesCRunTimeLibraryUsage="false"
>
<Tool
Name="VCPreBuildEventTool"
Description="Checking svnrevision.h..."
CommandLine="$(OutDir)\updaterevision.exe src src/svnrevision.h"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
PreprocessorDefinitions="_DEBUG"
MkTypLibCompatible="true"
SuppressStartupBanner="true"
TargetEnvironment="1"
TypeLibraryName=".\Debug/zdoom.tlb"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="src\win32;src\sound;src;zlib;src\g_shared;src\g_doom;src\g_raven;src\g_heretic;src\g_hexen;src\g_strife;jpeg-6b;snes_spc\snes_spc"
PreprocessorDefinitions="WIN32,_DEBUG,_WIN32,_WINDOWS,USEASM,_CRTDBG_MAP_ALLOC,HAVE_STRUPR,HAVE_FILELENGTH"
MinimalRebuild="true"
RuntimeLibrary="1"
EnableFunctionLevelLinking="true"
ForceConformanceInForLoopScope="true"
PrecompiledHeaderFile=""
AssemblerOutput="0"
AssemblerListingLocation=".\Debug/"
ObjectFile=".\Debug/"
ProgramDataBaseFileName=".\Debug/"
WarningLevel="3"
SuppressStartupBanner="true"
Detect64BitPortabilityProblems="true"
DebugInformationFormat="4"
CompileAs="0"
DisableSpecificWarnings="4996"
ForcedIncludeFiles=""
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
PreprocessorDefinitions="_DEBUG"
Culture="1033"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalOptions="/MACHINE:I386"
AdditionalDependencies="gdi32.lib user32.lib comctl32.lib shell32.lib advapi32.lib comdlg32.lib ole32.lib dxguid.lib dsound.lib dinput8.lib strmiids.lib wsock32.lib winmm.lib fmodex_vc.lib setupapi.lib ws2_32.lib"
OutputFile="../zdoomd.exe"
LinkIncremental="2"
SuppressStartupBanner="true"
AdditionalLibraryDirectories=""
IgnoreDefaultLibraryNames="libcmt;msvcrtd;msvcrt"
GenerateDebugInformation="true"
ProgramDatabaseFile=".\Debug/zdoomd.pdb"
SubSystem="2"
StackReserveSize="0"
TerminalServerAware="2"
SetChecksum="false"
TargetMachine="0"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration <Configuration
Name="Debug|x64" Name="Debug|x64"
OutputDirectory="$(PlatformName)\$(ConfigurationName)" OutputDirectory="$(PlatformName)\$(ConfigurationName)"
@ -930,16 +930,6 @@
Outputs="&quot;src/$(InputName).h&quot;" Outputs="&quot;src/$(InputName).h&quot;"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Creating $(InputName).h from src/$(InputFileName)"
CommandLine="tools\re2c\re2c --no-generation-date -s -o &quot;src/$(InputName).h&quot; &quot;src/$(InputFileName)&quot;&#x0D;&#x0A;"
Outputs="&quot;src/$(InputName).h&quot;"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
> >
@ -950,6 +940,16 @@
Outputs="&quot;src/$(InputName).h&quot;" Outputs="&quot;src/$(InputName).h&quot;"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Creating $(InputName).h from src/$(InputFileName)"
CommandLine="tools\re2c\re2c --no-generation-date -s -o &quot;src/$(InputName).h&quot; &quot;src/$(InputFileName)&quot;&#x0D;&#x0A;"
Outputs="&quot;src/$(InputName).h&quot;"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -1544,16 +1544,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1565,6 +1555,16 @@
Outputs="$(IntDir)/$(InputName).obj" Outputs="$(IntDir)/$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1590,16 +1590,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1611,6 +1601,16 @@
Outputs="$(IntDir)/$(InputName).obj" Outputs="$(IntDir)/$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1636,16 +1636,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1657,6 +1647,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1682,16 +1682,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1703,6 +1693,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1728,16 +1728,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1749,6 +1739,16 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Debug|Win32"
>
<Tool
Name="VCCustomBuildTool"
Description="Assembling $(InputPath)..."
CommandLine="nasm -g -o &quot;$(IntDir)\$(InputName).obj&quot; -f win32 &quot;$(InputPath)&quot;&#x0D;&#x0A;$(OutDir)\fixrtext &quot;$(IntDir)\$(InputName).obj&quot;&#x0D;&#x0A;"
Outputs="$(IntDir)\$(InputName).obj"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -1914,6 +1914,14 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
> >
@ -1924,14 +1932,6 @@
Outputs="$(IntDir)\$(InputName).obj" Outputs="$(IntDir)\$(InputName).obj"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
ExcludedFromBuild="true"
>
<Tool
Name="VCCustomBuildTool"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
@ -2093,6 +2093,10 @@
RelativePath=".\src\g_shared\sbar.h" RelativePath=".\src\g_shared\sbar.h"
> >
</File> </File>
<File
RelativePath=".\src\g_shared\sbar_mugshot.cpp"
>
</File>
<File <File
RelativePath=".\src\g_shared\sbarinfo.h" RelativePath=".\src\g_shared\sbarinfo.h"
> >
@ -2793,6 +2797,14 @@
AdditionalIncludeDirectories="src\win32;$(NoInherit)" AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Debug|Win32"
> >
@ -2802,14 +2814,6 @@
AdditionalIncludeDirectories="src\win32;$(NoInherit)" AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration
Name="Release|x64"
>
<Tool
Name="VCResourceCompilerTool"
AdditionalIncludeDirectories="src\win32;$(NoInherit)"
/>
</FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|x64" Name="Debug|x64"
> >
@ -3080,7 +3084,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3088,7 +3092,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3120,7 +3124,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3128,7 +3132,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3157,7 +3161,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3166,7 +3170,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3196,7 +3200,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3204,7 +3208,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3233,7 +3237,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3242,7 +3246,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3273,7 +3277,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3282,7 +3286,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3312,7 +3316,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3320,7 +3324,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3349,7 +3353,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3358,7 +3362,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3389,7 +3393,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3398,7 +3402,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3429,7 +3433,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3438,7 +3442,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3468,7 +3472,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3476,7 +3480,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3504,7 +3508,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3512,7 +3516,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3540,7 +3544,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3548,7 +3552,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3576,7 +3580,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3584,7 +3588,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3614,7 +3618,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3624,7 +3628,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3668,7 +3672,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3676,7 +3680,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
ExcludedFromBuild="true" ExcludedFromBuild="true"
> >
<Tool <Tool
@ -3710,7 +3714,7 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Debug|Win32" Name="Release|x64"
> >
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
@ -3720,12 +3724,12 @@
/> />
</FileConfiguration> </FileConfiguration>
<FileConfiguration <FileConfiguration
Name="Release|x64" Name="Debug|Win32"
> >
<Tool <Tool
Name="VCCustomBuildTool" Name="VCCustomBuildTool"
Description="Generating xlat_parser.c and xlat_parser.h..." Description="Generating xlat_parser.c and xlat_parser.h..."
CommandLine="tools\lemon\lemon.exe &quot;$(InputPath)&quot;" CommandLine="tools\lemon\lemon.exe &quot;$(InputPath)&quot;&#x0D;&#x0A;"
Outputs="$(InputDir)xlat_parser.c;$(InputDir)xlat_parser.h" Outputs="$(InputDir)xlat_parser.c;$(InputDir)xlat_parser.h"
/> />
</FileConfiguration> </FileConfiguration>