aboutsummaryrefslogtreecommitdiff
path: root/engines/cge2
diff options
context:
space:
mode:
authoruruk2014-06-02 14:33:30 +0200
committeruruk2014-06-02 14:33:30 +0200
commit0e62716038ec5ba108cbc272b1b06b49a608b11b (patch)
tree787f11a28b8a663cca99c5ab323cd6381c7470c9 /engines/cge2
parent79ef03801d90064291aaa4709c8560c9c98cf5b7 (diff)
downloadscummvm-rg350-0e62716038ec5ba108cbc272b1b06b49a608b11b.tar.gz
scummvm-rg350-0e62716038ec5ba108cbc272b1b06b49a608b11b.tar.bz2
scummvm-rg350-0e62716038ec5ba108cbc272b1b06b49a608b11b.zip
CGE2: Add and use Spare::take().
Diffstat (limited to 'engines/cge2')
-rw-r--r--engines/cge2/cge2_main.cpp2
-rw-r--r--engines/cge2/spare.cpp14
-rw-r--r--engines/cge2/spare.h1
3 files changed, 16 insertions, 1 deletions
diff --git a/engines/cge2/cge2_main.cpp b/engines/cge2/cge2_main.cpp
index 1ca99bd5ff..532836186c 100644
--- a/engines/cge2/cge2_main.cpp
+++ b/engines/cge2/cge2_main.cpp
@@ -399,7 +399,7 @@ void CGE2Engine::switchCave(int cav) {
}
void CGE2Engine::showBak(int ref) {
- Sprite *spr = _spare->locate(ref);
+ Sprite *spr = _spare->take(ref);
if (spr != nullptr) {
_bitmapPalette = _vga->_sysPal;
spr->expand();
diff --git a/engines/cge2/spare.cpp b/engines/cge2/spare.cpp
index be2fc64d23..043122199c 100644
--- a/engines/cge2/spare.cpp
+++ b/engines/cge2/spare.cpp
@@ -45,6 +45,19 @@ Sprite *Spare::locate(int ref) {
return nullptr;
}
+Sprite *Spare::take(int ref) {
+ Sprite *spr = nullptr;
+ if ((spr = locate(ref)) != nullptr) {
+ for (uint i = 0; i < _container.size(); ++i) {
+ if (spr == _container[i]) {
+ _container.remove_at(i);
+ break;
+ }
+ }
+ }
+ return spr;
+}
+
void Spare::takeCave(int cav) {
int bakRef = cav << 8;
Common::Array<Sprite*> tempCont = _container;
@@ -52,6 +65,7 @@ void Spare::takeCave(int cav) {
Sprite *spr = tempCont[i];
int c = spr->_scene;
if ((c == _vm->_now || c == 0) && spr->_ref != bakRef) {
+ spr = take(spr->_ref);
_vm->_vga->_showQ->insert(spr);
}
}
diff --git a/engines/cge2/spare.h b/engines/cge2/spare.h
index 7bd520d9d0..18909225db 100644
--- a/engines/cge2/spare.h
+++ b/engines/cge2/spare.h
@@ -40,6 +40,7 @@ public:
~Spare() { clear(); }
void store(Sprite *spr);
Sprite *locate(int ref);
+ Sprite *take(int ref);
void takeCave(int cav);
void update(Sprite *spr);
void dispose(Sprite *spr);