aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
authoruruk2014-06-19 11:34:25 +0200
committeruruk2014-06-19 11:34:25 +0200
commit56c7df46d3f713bdf8817217807570bcf0d976c9 (patch)
tree89716355d18fd6aaec3e871d1cee1109468b2da4 /engines
parent535b70934e80591aed0cd221c9a9928de3ede2f4 (diff)
downloadscummvm-rg350-56c7df46d3f713bdf8817217807570bcf0d976c9.tar.gz
scummvm-rg350-56c7df46d3f713bdf8817217807570bcf0d976c9.tar.bz2
scummvm-rg350-56c7df46d3f713bdf8817217807570bcf0d976c9.zip
CGE2: Implement showing the selected item in the inventory.
Now the selected item's picture is blinking until deselected.
Diffstat (limited to 'engines')
-rw-r--r--engines/cge2/cge2.cpp3
-rw-r--r--engines/cge2/cge2.h4
-rw-r--r--engines/cge2/cge2_main.cpp56
3 files changed, 38 insertions, 25 deletions
diff --git a/engines/cge2/cge2.cpp b/engines/cge2/cge2.cpp
index 96beff7195..9e1e30a109 100644
--- a/engines/cge2/cge2.cpp
+++ b/engines/cge2/cge2.cpp
@@ -71,7 +71,6 @@ CGE2Engine::CGE2Engine(OSystem *syst, const ADGameDescription *gameDescription)
for (int i = 0; i < 2; i++)
_vol[i] = nullptr;
_eventManager = nullptr;
- _blinkSprite = nullptr;
_map = nullptr;
_quitFlag = false;
@@ -153,8 +152,6 @@ void CGE2Engine::deinit() {
}
delete _sys;
delete _eventManager;
- if (_blinkSprite != nullptr)
- delete _blinkSprite;
delete _map;
}
diff --git a/engines/cge2/cge2.h b/engines/cge2/cge2.h
index bb59c48446..c02b01c33a 100644
--- a/engines/cge2/cge2.h
+++ b/engines/cge2/cge2.h
@@ -83,6 +83,9 @@ class Map;
#define kOffUseCount 130
#define kOffUseText 131
+#define kSysTimeRate 6 // 12 Hz
+#define kBlinkRate 4 // 3 Hz
+
enum CallbackType {
kNullCB = 0, kQGame, kXScene, kSoundSetVolume
};
@@ -255,7 +258,6 @@ public:
Sprite *_busyPtr;
Sprite *_vol[2];
EventManager *_eventManager;
- Sprite *_blinkSprite;
Map *_map;
private:
void init();
diff --git a/engines/cge2/cge2_main.cpp b/engines/cge2/cge2_main.cpp
index 669b28d4d3..816eea1889 100644
--- a/engines/cge2/cge2_main.cpp
+++ b/engines/cge2/cge2_main.cpp
@@ -39,7 +39,9 @@
namespace CGE2 {
System::System(CGE2Engine *vm) : Sprite(vm), _vm(vm) {
- warning("STUB: System::System()");
+ _blinkCounter = 0;
+ _blinkSprite = nullptr;
+ tick();
}
void System::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
@@ -82,12 +84,12 @@ void System::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
if (pos.x >= (kPocketsWidth >> 1))
++n;
s = _vm->_heroTab[_vm->_sex]->_pocket[n];
- if (_vm->_blinkSprite)
- _vm->_blinkSprite->_flags._hide = false;
- if (_vm->_blinkSprite == s)
- _vm->_blinkSprite = nullptr;
+ if (_vm->_sys->_blinkSprite)
+ _vm->_sys->_blinkSprite->_flags._hide = false;
+ if (_vm->_sys->_blinkSprite == s)
+ _vm->_sys->_blinkSprite = nullptr;
else
- _vm->_blinkSprite = s;
+ _vm->_sys->_blinkSprite = s;
}
}
}
@@ -98,7 +100,15 @@ void System::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
}
void System::tick() {
- warning("STUB: System::tick()");
+ _time = kSysTimeRate;
+
+ if (_blinkCounter)
+ --_blinkCounter;
+ else {
+ if (_blinkSprite)
+ _blinkSprite->_flags._hide ^= 1;
+ _blinkCounter = kBlinkRate;
+ }
}
int CGE2Engine::number(char *s) { // TODO: Rework it later to include the preceding token() call!
@@ -588,6 +598,10 @@ bool CGE2Engine::isHero(Sprite *spr) {
}
void CGE2Engine::tick() {
+ // system pseudo-sprite
+ if (_sys && _sys->_time && (--_sys->_time == 0))
+ _sys->tick();
+
for (Sprite *spr = _vga->_showQ->first(); spr; spr = spr->_next) {
if (spr->_time && (--spr->_time == 0))
spr->tick();
@@ -928,9 +942,9 @@ void CGE2Engine::killText() {
void CGE2Engine::switchHero(int sex) {
if (sex != _sex) {
int scene = _heroTab[sex]->_ptr->_scene;
- if (_blinkSprite) {
- _blinkSprite->_flags._hide = false;
- _blinkSprite = nullptr;
+ if (_sys->_blinkSprite) {
+ _sys->_blinkSprite->_flags._hide = false;
+ _sys->_blinkSprite = nullptr;
}
if (scene >= 0) {
_commandHandler->addCommand(kCmdSeq, -1, 2, _heroTab[_sex]->_face);
@@ -960,7 +974,7 @@ void Sprite::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
}
if ((mask & kMouseLeftUp) && _vm->_commandHandler->idle()) {
- if (_vm->isHero(this) && !_vm->_blinkSprite) {
+ if (_vm->isHero(this) && !_vm->_sys->_blinkSprite) {
_vm->switchHero((this == _vm->_heroTab[1]->_ptr) ? 1 : 0);
} else if (_flags._kept) { // sprite in pocket
for (int sex = 0; sex < 2; ++sex) {
@@ -968,12 +982,12 @@ void Sprite::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
if (_vm->_heroTab[sex]->_pocket[p] == this) {
_vm->switchHero(sex);
if (_vm->_sex == sex) {
- if (_vm->_blinkSprite)
- _vm->_blinkSprite->_flags._hide = false;
- if (_vm->_blinkSprite == this)
- _vm->_blinkSprite = nullptr;
+ if (_vm->_sys->_blinkSprite)
+ _vm->_sys->_blinkSprite->_flags._hide = false;
+ if (_vm->_sys->_blinkSprite == this)
+ _vm->_sys->_blinkSprite = nullptr;
else
- _vm->_blinkSprite = this;
+ _vm->_sys->_blinkSprite = this;
}
}
}
@@ -983,11 +997,11 @@ void Sprite::touch(uint16 mask, V2D pos, Common::KeyCode keyCode) {
if (!_vm->_talk) {
if ((_ref & 0xFF) < 200 && h->distance(this) > (h->_maxDist << 1))
h->walkTo(this);
- else if (_vm->_blinkSprite) {
- if (works(_vm->_blinkSprite)) {
- _vm->feedSnail(_vm->_blinkSprite, (_vm->_sex) ? kMTake : kFTake, _vm->_heroTab[_vm->_sex]->_ptr);
- _vm->_blinkSprite->_flags._hide = false;
- _vm->_blinkSprite = nullptr;
+ else if (_vm->_sys->_blinkSprite) {
+ if (works(_vm->_sys->_blinkSprite)) {
+ _vm->feedSnail(_vm->_sys->_blinkSprite, (_vm->_sex) ? kMTake : kFTake, _vm->_heroTab[_vm->_sex]->_ptr);
+ _vm->_sys->_blinkSprite->_flags._hide = false;
+ _vm->_sys->_blinkSprite = nullptr;
} else
_vm->offUse();