summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/being/being.cpp34
-rw-r--r--src/being/being.h1
-rw-r--r--src/defaults.cpp1
3 files changed, 33 insertions, 3 deletions
diff --git a/src/being/being.cpp b/src/being/being.cpp
index 70dcee8a1..987971a78 100644
--- a/src/being/being.cpp
+++ b/src/being/being.cpp
@@ -134,6 +134,7 @@ Being::Being(const BeingId id,
mInfo(BeingInfo::unknown),
mEmotionSprite(nullptr),
mAnimationEffect(nullptr),
+ mGmBadge(nullptr),
mGuildBadge(nullptr),
mPartyBadge(nullptr),
mTeamBadge(nullptr),
@@ -293,6 +294,7 @@ Being::~Being()
delete2(mText);
delete2(mEmotionSprite);
delete2(mAnimationEffect);
+ delete2(mGmBadge);
delete2(mGuildBadge);
delete2(mPartyBadge);
delete2(mTeamBadge);
@@ -1386,6 +1388,8 @@ void Being::setAction(const BeingActionT &action, const int attackId)
mEmotionSprite->play(currentAction);
if (mAnimationEffect)
mAnimationEffect->play(currentAction);
+ if (mGmBadge)
+ mGmBadge->play(currentAction);
if (mGuildBadge)
mGuildBadge->play(currentAction);
if (mPartyBadge)
@@ -1455,6 +1459,8 @@ void Being::setDirection(const uint8_t direction)
mEmotionSprite->setSpriteDirection(dir);
if (mAnimationEffect)
mAnimationEffect->setSpriteDirection(dir);
+ if (mGmBadge)
+ mGmBadge->setSpriteDirection(dir);
if (mGuildBadge)
mGuildBadge->setSpriteDirection(dir);
if (mPartyBadge)
@@ -1565,6 +1571,8 @@ void Being::logic()
if (mAnimationEffect->isTerminated())
delete2(mAnimationEffect)
}
+ if (mGmBadge)
+ mGmBadge->update(time);
if (mGuildBadge)
mGuildBadge->update(time);
if (mPartyBadge)
@@ -1905,6 +1913,11 @@ void Being::drawEmotion(Graphics *const graphics,
mTeamBadge->draw(graphics, x, y);
x += 16;
}
+ if (mGmBadge)
+ {
+ mGmBadge->draw(graphics, x, y);
+ x += 16;
+ }
if (mGuildBadge)
{
mGuildBadge->draw(graphics, x, y);
@@ -2566,9 +2579,22 @@ void Being::setGender(const GenderT gender)
void Being::setGM(const bool gm)
{
- mIsGM = gm;
-
- updateColors();
+ if (mIsGM != gm)
+ {
+ delete2(mGmBadge);
+ mIsGM = gm;
+ if (mIsGM && mShowBadges)
+ {
+ const std::string gmBadge = paths.getStringValue("gmbadge");
+ if (!gmBadge.empty())
+ {
+ mGmBadge = AnimatedSprite::load(
+ paths.getStringValue("badges") + gmBadge);
+ }
+ }
+ updateColors();
+ updateBadgesCount();
+ }
}
void Being::talkTo() const
@@ -3798,6 +3824,8 @@ void Being::updateBadgesCount()
mBadgesCount = 0;
if (mTeamBadge)
mBadgesCount ++;
+ if (mGmBadge)
+ mBadgesCount ++;
if (mGuildBadge)
mBadgesCount ++;
if (mPartyBadge)
diff --git a/src/being/being.h b/src/being/being.h
index 1f01001c3..cd56f5626 100644
--- a/src/being/being.h
+++ b/src/being/being.h
@@ -961,6 +961,7 @@ class Being notfinal : public ActorSprite,
BeingInfo *mInfo;
AnimatedSprite *mEmotionSprite;
AnimatedSprite *mAnimationEffect;
+ AnimatedSprite *mGmBadge;
AnimatedSprite *mGuildBadge;
AnimatedSprite *mPartyBadge;
AnimatedSprite *mTeamBadge;
diff --git a/src/defaults.cpp b/src/defaults.cpp
index a7b2c14b7..2d1a4f77b 100644
--- a/src/defaults.cpp
+++ b/src/defaults.cpp
@@ -603,6 +603,7 @@ DefaultsData* getPathsDefaults()
AddDEF("team1badge", "team1.xml");
AddDEF("team2badge", "team2.xml");
AddDEF("team3badge", "team3.xml");
+ AddDEF("gmbadge", "gm.xml");
return configData;
}