aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Turner2011-01-31 07:44:40 +0000
committerDavid Turner2011-01-31 07:44:40 +0000
commitc11fdabab9d694d37f53e68d5e288133cfc3dcfd (patch)
tree3e38b1e54cc3c5533a1ee69be0bf643cd30cf428
parent9573b1d2f54818f9bdac4a91e0a90b306ade7810 (diff)
downloadscummvm-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.cpp6
-rw-r--r--engines/teenagent/inventory.h4
-rw-r--r--engines/teenagent/scene.cpp83
-rw-r--r--engines/teenagent/scene.h6
-rw-r--r--engines/teenagent/surface.cpp4
-rw-r--r--engines/teenagent/surface.h1
-rw-r--r--engines/teenagent/teenagent.cpp15
-rw-r--r--engines/teenagent/teenagent.h1
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);