aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/teenagent/inventory.cpp41
-rw-r--r--engines/teenagent/inventory.h5
-rw-r--r--engines/teenagent/teenagent.cpp2
3 files changed, 30 insertions, 18 deletions
diff --git a/engines/teenagent/inventory.cpp b/engines/teenagent/inventory.cpp
index 193c413367..24297912ca 100644
--- a/engines/teenagent/inventory.cpp
+++ b/engines/teenagent/inventory.cpp
@@ -117,9 +117,13 @@ void Inventory::clear() {
}
}
-void Inventory::flush() {
- for (int i = 0; i < 24; ++i)
+void Inventory::reload() {
+ for (int i = 0; i < 24; ++i) {
graphics[i].free();
+ uint item = inventory[i];
+ if (item != 0)
+ graphics[i].load(this, item);
+ }
}
void Inventory::add(byte item) {
@@ -285,17 +289,31 @@ void Inventory::Item::backgroundEffect(Graphics::Surface *s) {
}
}
-void Inventory::Item::render(Inventory *inventory, InventoryObject *obj, Graphics::Surface *dst, int delta) {
- Resources *res = Resources::instance();
-
- backgroundEffect(dst);
- rect.render(dst, hovered ? 233 : 234);
+void Inventory::Item::load(Inventory *inventory, uint item_id) {
+ InventoryObject *obj = &inventory->objects[item_id];
if (obj->animated) {
if (animation.empty()) {
debug(0, "loading item %d from offset %x", obj->id, inventory->offset[obj->id - 1]);
Common::MemoryReadStream s(inventory->items + inventory->offset[obj->id - 1], inventory->offset[obj->id] - inventory->offset[obj->id - 1]);
animation.load(&s, Animation::kTypeInventory);
}
+ } else {
+ if (surface.empty()) {
+ debug(0, "loading item %d from offset %x", obj->id, inventory->offset[obj->id - 1]);
+ Common::MemoryReadStream s(inventory->items + inventory->offset[obj->id - 1], inventory->offset[obj->id] - inventory->offset[obj->id - 1]);
+ surface.load(&s, Surface::kTypeOns);
+ }
+ }
+}
+
+void Inventory::Item::render(Inventory *inventory, uint item_id, Graphics::Surface *dst, int delta) {
+ InventoryObject *obj = &inventory->objects[item_id];
+ Resources *res = Resources::instance();
+
+ backgroundEffect(dst);
+ rect.render(dst, hovered ? 233 : 234);
+ load(inventory, item_id);
+ if (obj->animated) {
if (hovered) {
Surface *s = animation.currentFrame(delta);
if (animation.currentIndex() == 0)
@@ -308,11 +326,6 @@ void Inventory::Item::render(Inventory *inventory, InventoryObject *obj, Graphic
s->render(dst, rect.left + 1, rect.top + 1);
}
} else {
- if (surface.empty()) {
- debug(0, "loading item %d from offset %x", obj->id, inventory->offset[obj->id - 1]);
- Common::MemoryReadStream s(inventory->items + inventory->offset[obj->id - 1], inventory->offset[obj->id] - inventory->offset[obj->id - 1]);
- surface.load(&s, Surface::kTypeOns);
- }
surface.render(dst, rect.left + 1, rect.top + 1);
}
@@ -344,9 +357,7 @@ void Inventory::render(Graphics::Surface *surface, int delta) {
continue;
//debug(0, "%d,%d -> %u", x0, y0, item);
-
- InventoryObject *obj = &objects[item];
- graphics[idx].render(this, obj, surface, delta);
+ graphics[idx].render(this, item, surface, delta);
}
}
}
diff --git a/engines/teenagent/inventory.h b/engines/teenagent/inventory.h
index bce27c0cce..571c9cf6d7 100644
--- a/engines/teenagent/inventory.h
+++ b/engines/teenagent/inventory.h
@@ -42,7 +42,7 @@ public:
void render(Graphics::Surface *surface, int delta);
void clear();
- void flush();
+ void reload();
void add(byte item);
bool has(byte item) const;
void remove(byte item);
@@ -71,8 +71,9 @@ private:
Item() : hovered(false) {}
void free();
+ void load(Inventory *inventory, uint item_id);
void backgroundEffect(Graphics::Surface *s);
- void render(Inventory *inventory, InventoryObject *obj, Graphics::Surface *surface, int delta);
+ void render(Inventory *inventory, uint item_id, Graphics::Surface *surface, int delta);
} graphics[24];
bool _active;
diff --git a/engines/teenagent/teenagent.cpp b/engines/teenagent/teenagent.cpp
index 657d76ef7c..3b67bbfba6 100644
--- a/engines/teenagent/teenagent.cpp
+++ b/engines/teenagent/teenagent.cpp
@@ -211,7 +211,7 @@ Common::Error TeenAgentEngine::loadGameState(int slot) {
scene->clear();
inventory->activate(false);
- inventory->flush();
+ inventory->reload();
setMusic(Resources::instance()->dseg.get_byte(0xDB90));