summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog2
-rw-r--r--src/being.cpp25
-rw-r--r--src/being.h6
-rw-r--r--src/game.cpp27
4 files changed, 28 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 0029f422..58d461e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -4,6 +4,8 @@
2005-09-13 Björn Steinbrink <B.Steinbrink@gmx.de>
+ * src/being.cpp, src/being.h, src/game.cpp: Merged createBeing and
+ add_node into createBeing.
* src/main.cpp, src/main.h, src/gui/char_select.cpp,
src/gui/login.cpp: Removed some globals.
* src/main.cpp, src/main.h, src/gui/char_select.cpp,
diff --git a/src/being.cpp b/src/being.cpp
index a0b9a88c..579ad54f 100644
--- a/src/being.cpp
+++ b/src/being.cpp
@@ -53,8 +53,14 @@ PATH_NODE::PATH_NODE(unsigned short x, unsigned short y):
{
}
-void add_node(Being *being)
+Being* createBeing(unsigned int id, unsigned short job, Map *map)
{
+ Being *being = new Being;
+
+ being->setId(id);
+ being->job = job;
+ being->setMap(map);
+
beings.push_back(being);
// If the being is a player, request the name
@@ -64,20 +70,25 @@ void add_node(Being *being)
WFIFOSET(6);
}
// If the being is a monster then load the monsterset
- else if (being->job >= 1002 && monsterset.find(
- being->job - 1002) == monsterset.end()) {
+ else if (being->job >= 1002 &&
+ monsterset.find(being->job - 1002) == monsterset.end())
+ {
std::stringstream filename;
+
filename << "graphics/sprites/monster" << (being->job - 1002) << ".png";
logger->log("%s",filename.str().c_str());
- ResourceManager *resman = ResourceManager::getInstance();
- Image *monsterbitmap = resman->getImage(filename.str());
+
+ Image *monsterbitmap =
+ ResourceManager::getInstance()->getImage(filename.str());
+
if (!monsterbitmap) {
logger->error("Unable to load monster.png");
- }
- else {
+ } else {
monsterset[being->job - 1002] = new Spriteset(monsterbitmap, 60, 60);
}
}
+
+ return being;
}
void remove_node(unsigned int id)
diff --git a/src/being.h b/src/being.h
index 8d945b76..3b9e0d93 100644
--- a/src/being.h
+++ b/src/being.h
@@ -232,9 +232,6 @@ class Being
void setPath(std::list<PATH_NODE> path);
};
-/** Add a Being to the list */
-void add_node(Being *being);
-
/** Return a specific id Being */
Being *findNode(unsigned int id);
@@ -244,6 +241,9 @@ Being *findNode(unsigned short x, unsigned short y);
/** Return a being at specific coordinates with specific type*/
Being *findNode(unsigned short x, unsigned short y, Being::Type type);
+/** Create a being and add it to the list of beings */
+Being *createBeing(unsigned int id, unsigned short job, Map *map);
+
/** Remove a Being */
void remove_node(unsigned int id);
diff --git a/src/game.cpp b/src/game.cpp
index bfabc528..54f900b1 100644
--- a/src/game.cpp
+++ b/src/game.cpp
@@ -172,17 +172,6 @@ int get_elapsed_time(int start_time)
}
}
-Being* createBeing(unsigned int id, unsigned short job, Map *map)
-{
- Being *being = new Being;
-
- being->setId(id);
- being->job = job;
- being->setMap(map);
-
- return being;
-}
-
/**
* Create all the various globally accessible gui windows
*/
@@ -318,8 +307,6 @@ void do_init()
player_node->setWeapon(char_info->weapon);
- add_node(player_node);
-
remove("packet.list");
// Initialize joypad
@@ -1066,7 +1053,6 @@ void do_parse()
being->setHairColor(RFIFOW(28));
being->setWeapon(RFIFOW(18));
being->setMap(tiledMap);
- add_node(being);
}
else
{
@@ -1120,7 +1106,6 @@ void do_parse()
if (being == NULL)
{
being = createBeing(RFIFOL(2), RFIFOW(14), tiledMap);
- add_node(being);
}
being->speed = RFIFOW(6);
@@ -1147,7 +1132,6 @@ void do_parse()
if (being == NULL)
{
being = createBeing(RFIFOL(2), RFIFOW(14), tiledMap);
- add_node(being);
}
being->action = Being::STAND;
@@ -1167,7 +1151,6 @@ void do_parse()
if (being == NULL)
{
being = createBeing(RFIFOL(2), RFIFOW(14), tiledMap);
- add_node(being);
}
being->speed = RFIFOW(6);
@@ -1378,20 +1361,20 @@ void do_parse()
{
empty_floor_items();
+ // Remove the player, so it is not deleted
+ beings.remove(player_node);
+
// Delete all beings except the local player
std::list<Being *>::iterator i;
for (i = beings.begin(); i != beings.end(); i++)
{
- if ((*i) != player_node)
- {
- delete (*i);
- }
+ delete (*i);
}
beings.clear();
autoTarget = NULL;
// Re-add the local player node
- add_node(player_node);
+ beings.push_back(player_node);
player_node->action = Being::STAND;
player_node->frame = 0;