diff options
author | David Turner | 2011-01-31 07:44:40 +0000 |
---|---|---|
committer | David Turner | 2011-01-31 07:44:40 +0000 |
commit | c11fdabab9d694d37f53e68d5e288133cfc3dcfd (patch) | |
tree | 3e38b1e54cc3c5533a1ee69be0bf643cd30cf428 | |
parent | 9573b1d2f54818f9bdac4a91e0a90b306ade7810 (diff) | |
download | scummvm-rg350-c11fdabab9d694d37f53e68d5e288133cfc3dcfd.tar.gz scummvm-rg350-c11fdabab9d694d37f53e68d5e288133cfc3dcfd.tar.bz2 scummvm-rg350-c11fdabab9d694d37f53e68d5e288133cfc3dcfd.zip |
TEENAGENT: Fix Memory Leaks.
svn-id: r55672
-rw-r--r-- | engines/teenagent/inventory.cpp | 6 | ||||
-rw-r--r-- | engines/teenagent/inventory.h | 4 | ||||
-rw-r--r-- | engines/teenagent/scene.cpp | 83 | ||||
-rw-r--r-- | engines/teenagent/scene.h | 6 | ||||
-rw-r--r-- | engines/teenagent/surface.cpp | 4 | ||||
-rw-r--r-- | engines/teenagent/surface.h | 1 | ||||
-rw-r--r-- | engines/teenagent/teenagent.cpp | 15 | ||||
-rw-r--r-- | engines/teenagent/teenagent.h | 1 |
8 files changed, 68 insertions, 52 deletions
diff --git a/engines/teenagent/inventory.cpp b/engines/teenagent/inventory.cpp index 16a5f20ee6..bc4ac24da4 100644 --- a/engines/teenagent/inventory.cpp +++ b/engines/teenagent/inventory.cpp @@ -33,7 +33,7 @@ namespace TeenAgent { -void Inventory::init(TeenAgentEngine *engine) { +Inventory::Inventory(TeenAgentEngine *engine) { _engine = engine; _active = false; @@ -86,6 +86,10 @@ void Inventory::init(TeenAgentEngine *engine) { hovered_obj = selected_obj = NULL; } +Inventory::~Inventory() { + delete[] items; +} + bool Inventory::has(byte item) const { for (int i = 0; i < 24; ++i) { if (inventory[i] == item) diff --git a/engines/teenagent/inventory.h b/engines/teenagent/inventory.h index 571c9cf6d7..ad73ff25a9 100644 --- a/engines/teenagent/inventory.h +++ b/engines/teenagent/inventory.h @@ -38,7 +38,9 @@ class TeenAgentEngine; class Inventory { public: - void init(TeenAgentEngine *engine); + Inventory(TeenAgentEngine *engine); + ~Inventory(); + void render(Graphics::Surface *surface, int delta); void clear(); diff --git a/engines/teenagent/scene.cpp b/engines/teenagent/scene.cpp index 25054e54fc..b55a67ad2e 100644 --- a/engines/teenagent/scene.cpp +++ b/engines/teenagent/scene.cpp @@ -37,13 +37,49 @@ namespace TeenAgent { -Scene::Scene() : intro(false), _engine(NULL), - _system(NULL), - _id(0), ons(0), +Scene::Scene(TeenAgentEngine *engine, OSystem *system) : intro(false), _id(0), ons(0), orientation(kActorRight), actor_talking(false), message_timer(0), message_first_frame(0), message_last_frame(0), message_animation(NULL), - current_event(SceneEvent::kNone), hide_actor(false), callback(0), callback_timer(0), - _fade_timer(0), _idle_timer(0) {} + current_event(SceneEvent::kNone), hide_actor(false), callback(0), callback_timer(0), _idle_timer(0) { + _engine = engine; + _system = system; + + _fade_timer = 0; + on_enabled = true; + + memset(palette, 0, sizeof(palette)); + background.pixels = 0; + + FilePack varia; + varia.open("varia.res"); + + Common::ScopedPtr<Common::SeekableReadStream> s(varia.getStream(1)); + if (!s) + error("invalid resource data"); + + teenagent.load(s, Animation::kTypeVaria); + if (teenagent.empty()) + error("invalid mark animation"); + + s.reset(varia.getStream(2)); + if (!s) + error("invalid resource data"); + + teenagent_idle.load(s, Animation::kTypeVaria); + if (teenagent_idle.empty()) + error("invalid mark animation"); + + varia.close(); + loadObjectData(); +} + +Scene::~Scene() { + if (background.pixels) + background.free(); + + delete[] ons; + ons = 0; +} void Scene::warp(const Common::Point &_point, byte o) { Common::Point point(_point); @@ -200,39 +236,6 @@ void Scene::moveTo(const Common::Point &_point, byte orient, bool validate) { orientation = orient; } - -void Scene::init(TeenAgentEngine *engine, OSystem *system) { - _engine = engine; - _system = system; - - _fade_timer = 0; - on_enabled = true; - - memset(palette, 0, sizeof(palette)); - - FilePack varia; - varia.open("varia.res"); - - Common::ScopedPtr<Common::SeekableReadStream> s(varia.getStream(1)); - if (!s) - error("invalid resource data"); - - teenagent.load(s, Animation::kTypeVaria); - if (teenagent.empty()) - error("invalid mark animation"); - - s.reset(varia.getStream(2)); - if (!s) - error("invalid resource data"); - - teenagent_idle.load(s, Animation::kTypeVaria); - if (teenagent_idle.empty()) - error("invalid mark animation"); - - varia.close(); - loadObjectData(); -} - void Scene::loadObjectData() { Resources *res = Resources::instance(); @@ -300,8 +303,6 @@ Object *Scene::findObject(const Common::Point &point) { return NULL; } - - byte *Scene::getOns(int id) { Resources *res = Resources::instance(); return res->dseg.ptr(res->dseg.get_word(0xb4f5 + (id - 1) * 2)); @@ -465,7 +466,6 @@ byte Scene::peekFlagEvent(uint16 addr) const { return Resources::instance()->dseg.get_byte(addr); } - void Scene::push(const SceneEvent &event) { //debug(0, "push"); //event.dump(); @@ -1245,7 +1245,6 @@ uint Scene::messageDuration(const Common::String &str) { return delay * 10; } - void Scene::displayMessage(const Common::String &str, byte color, const Common::Point &pos) { //assert(!str.empty()); //debug(0, "displayMessage: %s", str.c_str()); diff --git a/engines/teenagent/scene.h b/engines/teenagent/scene.h index 28d0db6a7b..2dc5bc9c83 100644 --- a/engines/teenagent/scene.h +++ b/engines/teenagent/scene.h @@ -125,11 +125,11 @@ struct SceneEvent { class Scene { public: - bool intro; + Scene(TeenAgentEngine *engine, OSystem *system); + ~Scene(); - Scene(); + bool intro; - void init(TeenAgentEngine *engine, OSystem *system); void init(int id, const Common::Point &pos); bool render(bool tick_game, bool tick_mark, uint32 message_delta); int getId() const { return _id; } diff --git a/engines/teenagent/surface.cpp b/engines/teenagent/surface.cpp index 129d1bcd6f..96672ca1b3 100644 --- a/engines/teenagent/surface.cpp +++ b/engines/teenagent/surface.cpp @@ -32,6 +32,10 @@ namespace TeenAgent { Surface::Surface() : x(0), y(0) { } +Surface::~Surface() { + free(); +} + void Surface::load(Common::SeekableReadStream *stream, Type type) { //debug(0, "load()"); free(); diff --git a/engines/teenagent/surface.h b/engines/teenagent/surface.h index 64e50f9bdf..b44fd3c21a 100644 --- a/engines/teenagent/surface.h +++ b/engines/teenagent/surface.h @@ -38,6 +38,7 @@ public: uint16 x, y; Surface(); + ~Surface(); void load(Common::SeekableReadStream *stream, Type type); Common::Rect render(Graphics::Surface *surface, int dx = 0, int dy = 0, bool mirror = false, Common::Rect src_rect = Common::Rect(), uint zoom = 256) const; diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp index 2f3bd21ae4..acd3eca2e9 100644 --- a/engines/teenagent/teenagent.cpp +++ b/engines/teenagent/teenagent.cpp @@ -50,6 +50,14 @@ namespace TeenAgent { TeenAgentEngine::TeenAgentEngine(OSystem *system, const ADGameDescription *gd) : Engine(system), action(kActionNone), _gameDescription(gd) { music = new MusicPlayer(); + + console = 0; +} + +TeenAgentEngine::~TeenAgentEngine() { + delete music; + + delete console; } bool TeenAgentEngine::trySelectedObject() { @@ -458,13 +466,10 @@ Common::Error TeenAgentEngine::run() { Common::EventManager *_event = _system->getEventManager(); initGraphics(320, 200, false); - - scene = new Scene; - inventory = new Inventory; console = new Console(this); - scene->init(this, _system); - inventory->init(this); + scene = new Scene(this, _system); + inventory = new Inventory(this); init(); diff --git a/engines/teenagent/teenagent.h b/engines/teenagent/teenagent.h index 069e6e40d0..7c70866285 100644 --- a/engines/teenagent/teenagent.h +++ b/engines/teenagent/teenagent.h @@ -55,6 +55,7 @@ public: enum Action { kActionNone, kActionExamine, kActionUse }; TeenAgentEngine(OSystem *system, const ADGameDescription *gd); + ~TeenAgentEngine(); virtual Common::Error run(); virtual Common::Error loadGameState(int slot); |