diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | src/being.cpp | 3 | ||||
-rw-r--r-- | src/monster.cpp | 14 | ||||
-rw-r--r-- | src/resources/monsterdb.cpp | 6 | ||||
-rw-r--r-- | src/resources/monsterinfo.cpp | 5 | ||||
-rw-r--r-- | src/resources/monsterinfo.h | 8 |
6 files changed, 39 insertions, 2 deletions
@@ -1,6 +1,11 @@ 2007-12-28 Philipp Sehmisch <tmw@crushnet.org> * data/maps/new_3-1.tmx: Some mapping errors fixed by Zipon. + * src/being.cpp, src/monster.cpp, src/resources/monsterinfo.cpp, + src/resources/monsterinfo.h: Added the possibility to assign particle + effects to monsters in the monster database. + * data/monsters.xml: Added flame particle effect to fire goblin as a + proof of concept. 2007-12-26 Bjørn Lindeijer <bjorn@lindeijer.nl> diff --git a/src/being.cpp b/src/being.cpp index b068270b..ad60dc2f 100644 --- a/src/being.cpp +++ b/src/being.cpp @@ -83,7 +83,6 @@ Being::~Being() { std::for_each(mSprites.begin(), mSprites.end(), make_dtor(mSprites)); clearPath(); - setMap(NULL); for ( std::list<Particle *>::iterator i = mChildParticleEffects.begin(); i != mChildParticleEffects.end(); @@ -92,6 +91,8 @@ Being::~Being() (*i)->kill(); } + setMap(NULL); + instances--; if (instances == 0) diff --git a/src/monster.cpp b/src/monster.cpp index 779b4f56..e2a07e86 100644 --- a/src/monster.cpp +++ b/src/monster.cpp @@ -26,6 +26,7 @@ #include "animatedsprite.h" #include "game.h" #include "sound.h" +#include "particle.h" #include "resources/monsterdb.h" @@ -35,7 +36,9 @@ Monster::Monster(Uint32 id, Uint16 job, Map *map): Being(id, job, map) { - std::string filename = MonsterDB::get(job - 1002).getSprite(); + const MonsterInfo& info = MonsterDB::get(job - 1002); + + std::string filename = info.getSprite(); if (filename != "") { mSprites[BASE_SPRITE] = AnimatedSprite::load( @@ -45,6 +48,15 @@ Monster::Monster(Uint32 id, Uint16 job, Map *map): { mSprites[BASE_SPRITE] = AnimatedSprite::load("graphics/sprites/error.xml"); } + + const std::list<std::string> &particleEffects = info.getParticleEffects(); + for ( std::list<std::string>::const_iterator i = particleEffects.begin(); + i != particleEffects.end(); + i++ + ) + { + controlParticle(particleEngine->addEffect((*i), 0, 0)); + } } void diff --git a/src/resources/monsterdb.cpp b/src/resources/monsterdb.cpp index 84e3a219..e007eda0 100644 --- a/src/resources/monsterdb.cpp +++ b/src/resources/monsterdb.cpp @@ -142,6 +142,12 @@ MonsterDB::load() filename, event.c_str(), currentInfo->getName().c_str()); } } + + if (xmlStrEqual(spriteNode->name, BAD_CAST "particlefx")) + { + currentInfo->addParticleEffect( + (const char*) spriteNode->xmlChildrenNode->content); + } } mMonsterInfos[XML::getProperty(monsterNode, "id", 0)] = currentInfo; } diff --git a/src/resources/monsterinfo.cpp b/src/resources/monsterinfo.cpp index c4c9ce10..8238dc3e 100644 --- a/src/resources/monsterinfo.cpp +++ b/src/resources/monsterinfo.cpp @@ -70,3 +70,8 @@ MonsterInfo::getSound(MonsterSoundEvent event) const return i->second->at(rand()%i->second->size()); } } + +void MonsterInfo::addParticleEffect(std::string filename) +{ + mParticleEffects.push_back(filename); +} diff --git a/src/resources/monsterinfo.h b/src/resources/monsterinfo.h index 7d49db1a..d9d17510 100644 --- a/src/resources/monsterinfo.h +++ b/src/resources/monsterinfo.h @@ -27,6 +27,7 @@ #include <map> #include <string> #include <vector> +#include <list> #include "../being.h" @@ -71,6 +72,9 @@ class MonsterInfo void addSound(MonsterSoundEvent event, std::string filename); + void + addParticleEffect(std::string filename); + const std::string& getName() const { return mName; } @@ -83,11 +87,15 @@ class MonsterInfo std::string getSound(MonsterSoundEvent event) const; + const std::list<std::string>& + getParticleEffects() const { return mParticleEffects; } + private: std::string mName; std::string mSprite; Being::TargetCursorSize mTargetCursorSize; std::map<MonsterSoundEvent, std::vector<std::string>* > mSounds; + std::list<std::string> mParticleEffects; }; #endif |