aboutsummaryrefslogtreecommitdiff
path: root/engines
diff options
context:
space:
mode:
Diffstat (limited to 'engines')
-rw-r--r--engines/cge/cge.cpp2
-rw-r--r--engines/cge/cge.h3
-rw-r--r--engines/cge/cge_main.cpp28
-rw-r--r--engines/cge/events.cpp4
-rw-r--r--engines/cge/events.h3
-rw-r--r--engines/cge/game.cpp11
-rw-r--r--engines/cge/game.h15
-rw-r--r--engines/cge/snail.cpp8
-rw-r--r--engines/cge/snail.h14
-rw-r--r--engines/cge/sound.cpp14
-rw-r--r--engines/cge/sound.h7
-rw-r--r--engines/cge/text.cpp10
-rw-r--r--engines/cge/text.h3
-rw-r--r--engines/cge/vmenu.h1
-rw-r--r--engines/cge/walk.cpp12
-rw-r--r--engines/cge/walk.h2
16 files changed, 67 insertions, 70 deletions
diff --git a/engines/cge/cge.cpp b/engines/cge/cge.cpp
index 1297aea5e3..349bf3f31c 100644
--- a/engines/cge/cge.cpp
+++ b/engines/cge/cge.cpp
@@ -105,7 +105,7 @@ void CGEEngine::init() {
_mouse = new Mouse(this);
_keyboard = new Keyboard(this);
- _eventManager = new EventManager();
+ _eventManager = new EventManager(this);
_fx = new Fx(16); // must precede SOUND!!
_sound = new Sound(this);
diff --git a/engines/cge/cge.h b/engines/cge/cge.h
index 24288cdece..af526742b3 100644
--- a/engines/cge/cge.h
+++ b/engines/cge/cge.h
@@ -40,6 +40,7 @@ namespace CGE {
class Console;
class Sprite;
+class Cluster;
#define kSavegameVersion 2
#define kSavegameStrSize 11
@@ -232,6 +233,8 @@ public:
void sndSetVolume();
Sprite *locate(int ref);
Sprite *spriteAt(int x, int y);
+ Cluster XZ(int16 x, int16 y);
+ void killText();
void snBackPt(Sprite *spr, int stp);
void snHBarrier(const int scene, const int barX);
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index dde8fd1c11..7d9acb462c 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -540,7 +540,7 @@ Square::Square(CGEEngine *vm) : Sprite(vm, NULL), _vm(vm) {
void Square::touch(uint16 mask, int x, int y) {
Sprite::touch(mask, x, y);
if (mask & kMouseLeftUp) {
- XZ(_x + x, _y + y).cell() = 0;
+ _vm->XZ(_x + x, _y + y).cell() = 0;
_snail_->addCom(kSnKill, -1, 0, this);
}
}
@@ -778,7 +778,7 @@ void System::touch(uint16 mask, int x, int y) {
if (mask & kEventKeyb) {
_vm->keyClick();
- killText();
+ _vm->killText();
if (_vm->_startupMode == 1) {
_snail->addCom(kSnClear, -1, 0, NULL);
return;
@@ -831,7 +831,7 @@ void System::touch(uint16 mask, int x, int y) {
if (_horzLine && !_horzLine->_flags._hide) {
if (y >= kMapTop && y < kMapTop + kMapHig) {
- Cluster tmpCluster = XZ(x, y);
+ Cluster tmpCluster = _vm->XZ(x, y);
int16 x1 = tmpCluster._pt.x;
int16 z1 = tmpCluster._pt.y;
Cluster::_map[z1][x1] = 1;
@@ -840,7 +840,7 @@ void System::touch(uint16 mask, int x, int y) {
} else {
if (!_talk && _snail->idle() && _hero
&& y >= kMapTop && y < kMapTop + kMapHig && !_vm->_game) {
- _hero->findWay(XZ(x, y));
+ _hero->findWay(_vm->XZ(x, y));
}
}
}
@@ -850,7 +850,7 @@ void System::touch(uint16 mask, int x, int y) {
void System::tick() {
if (!_vm->_startupMode)
if (--_funDel == 0) {
- killText();
+ _vm->killText();
if (_snail->idle()) {
if (_vm->_flag[0]) // Pain flag
_vm->heroCover(9);
@@ -1239,6 +1239,24 @@ Sprite *CGEEngine::spriteAt(int x, int y) {
return spr;
}
+Cluster CGEEngine::XZ(int16 x, int16 y) {
+ if (y < kMapTop)
+ y = kMapTop;
+
+ if (y > kMapTop + kMapHig - kMapGridZ)
+ y = kMapTop + kMapHig - kMapGridZ;
+
+ return Cluster(x / kMapGridX, (y - kMapTop) / kMapGridZ);
+}
+
+void CGEEngine::killText() {
+ if (!_talk)
+ return;
+
+ _snail_->addCom(kSnKill, -1, 0, _talk);
+ _talk = NULL;
+}
+
void CGEEngine::mainLoop() {
_vga->show();
_snail_->runCom();
diff --git a/engines/cge/events.cpp b/engines/cge/events.cpp
index 1330466aa2..59e0d5f87a 100644
--- a/engines/cge/events.cpp
+++ b/engines/cge/events.cpp
@@ -271,7 +271,7 @@ void Mouse::newMouse(Common::Event &event) {
/*----------------- EventManager interface -----------------*/
-EventManager::EventManager() {
+EventManager::EventManager(CGEEngine *vm) : _vm(vm){
_quitFlag = false;
_eventQueueHead = 0;
_eventQueueTail = 0;
@@ -349,7 +349,7 @@ void EventManager::handleEvents() {
// discard Text if button released
if (e._mask & (kMouseLeftUp | kMouseRightUp))
- killText();
+ _vm->killText();
}
_eventQueueTail = (_eventQueueTail + 1) % kEventMax;
}
diff --git a/engines/cge/events.h b/engines/cge/events.h
index f170455fa7..26678a5ae2 100644
--- a/engines/cge/events.h
+++ b/engines/cge/events.h
@@ -134,6 +134,7 @@ private:
class EventManager {
private:
+ CGEEngine *_vm;
Common::Event _event;
CGEEvent _eventQueue[kEventMax];
uint16 _eventQueueHead;
@@ -143,7 +144,7 @@ private:
public:
bool _quitFlag;
- EventManager();
+ EventManager(CGEEngine *vm);
void poll();
void clearEvent(Sprite *spr);
diff --git a/engines/cge/game.cpp b/engines/cge/game.cpp
index 115de222ad..851f6c59fb 100644
--- a/engines/cge/game.cpp
+++ b/engines/cge/game.cpp
@@ -30,15 +30,10 @@
namespace CGE {
-const int Fly::_l = 20,
- Fly::_t = 40,
- Fly::_r = 110,
- Fly::_b = 100;
-
Fly::Fly(CGEEngine *vm, Bitmap **shpl)
: Sprite(vm, shpl), _tx(0), _ty(0), _vm(vm) {
step(_vm->newRandom(2));
- gotoxy(_l + _vm->newRandom(_r - _l - _w), _t + _vm->newRandom(_b - _t - _h));
+ gotoxy(kFlyL + _vm->newRandom(kFlyR - kFlyL - _w), kFlyT + _vm->newRandom(kFlyB - kFlyT - _h));
}
void Fly::tick() {
@@ -49,9 +44,9 @@ void Fly::tick() {
_tx = _vm->newRandom(3) - 1;
_ty = _vm->newRandom(3) - 1;
}
- if (_x + _tx < _l || _x + _tx + _w > _r)
+ if (_x + _tx < kFlyL || _x + _tx + _w > kFlyR)
_tx = -_tx;
- if (_y + _ty < _t || _y + _ty + _h > _b)
+ if (_y + _ty < kFlyT || _y + _ty + _h > kFlyB)
_ty = -_ty;
gotoxy(_x + _tx, _y + _ty);
}
diff --git a/engines/cge/game.h b/engines/cge/game.h
index 88ef4344ba..4d5acf7371 100644
--- a/engines/cge/game.h
+++ b/engines/cge/game.h
@@ -32,17 +32,20 @@
namespace CGE {
+enum {
+ kFlyL = 20,
+ kFlyT = 40,
+ kFlyR = 110,
+ kFlyB = 100
+};
+
class Fly : public Sprite {
- static const int _l;
- static const int _t;
- static const int _r;
- static const int _b;
+private:
+ CGEEngine *_vm;
public:
int _tx, _ty;
Fly(CGEEngine *vm, Bitmap **shpl);
void tick();
-private:
- CGEEngine *_vm;
};
} // End of namespace CGE
diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp
index 19adf6bcb4..b542006014 100644
--- a/engines/cge/snail.cpp
+++ b/engines/cge/snail.cpp
@@ -415,7 +415,7 @@ void Snail::addCom(SnCom com, int ref, int val, void *ptr) {
snc->_cbType = kNullCB;
if (com == kSnClear) {
_tail = _head;
- killText();
+ _vm->killText();
_timerExpiry = 0;
}
}
@@ -429,7 +429,7 @@ void Snail::addCom2(SnCom com, int ref, int val, CallbackType cbType) {
snc->_cbType = cbType;
if (com == kSnClear) {
_tail = _head;
- killText();
+ _vm->killText();
_timerExpiry = 0;
}
}
@@ -449,7 +449,7 @@ void Snail::insCom(SnCom com, int ref, int val, void *ptr) {
snc->_ptr = ptr;
if (com == kSnClear) {
_tail = _head;
- killText();
+ _vm->killText();
_timerExpiry = 0;
}
}
@@ -956,7 +956,7 @@ void Snail::runCom() {
_timerExpiry = 0;
} else {
if (_textDelay) {
- killText();
+ _vm->killText();
_textDelay = false;
}
}
diff --git a/engines/cge/snail.h b/engines/cge/snail.h
index 533d6b74ef..481f0a5542 100644
--- a/engines/cge/snail.h
+++ b/engines/cge/snail.h
@@ -60,17 +60,11 @@ public:
void *_ptr;
CallbackType _cbType;
} *_snList;
- uint8 _head;
- uint8 _tail;
- bool _turbo;
- bool _busy;
- bool _textDelay;
- uint32 _timerExpiry;
static const char *_comText[];
bool _talkEnable;
+
Snail(CGEEngine *vm, bool turbo);
~Snail();
-
void runCom();
void addCom(SnCom com, int ref, int val, void *ptr);
void addCom2(SnCom com, int ref, int val, CallbackType cbType);
@@ -78,6 +72,12 @@ public:
bool idle();
private:
CGEEngine *_vm;
+ bool _turbo;
+ uint8 _head;
+ uint8 _tail;
+ bool _busy;
+ bool _textDelay;
+ uint32 _timerExpiry;
};
} // End of namespace CGE
diff --git a/engines/cge/sound.cpp b/engines/cge/sound.cpp
index 3dec5e749b..93ccbe9c80 100644
--- a/engines/cge/sound.cpp
+++ b/engines/cge/sound.cpp
@@ -35,13 +35,6 @@
namespace CGE {
-DataCk *loadWave(EncryptedStream *file) {
- byte *data = (byte *)malloc(file->size());
- file->read(data, file->size());
-
- return new DataCk(data, file->size());
-}
-
DataCk::DataCk(byte *buf, int bufSize) {
_buf = buf;
_ckSize = bufSize;
@@ -181,6 +174,13 @@ DataCk *Fx::load(int idx, int ref) {
return wav;
}
+DataCk *Fx::loadWave(EncryptedStream *file) {
+ byte *data = (byte *)malloc(file->size());
+ file->read(data, file->size());
+
+ return new DataCk(data, file->size());
+}
+
DataCk *Fx::operator[](int ref) {
int i;
if ((i = find(ref)) < _size)
diff --git a/engines/cge/sound.h b/engines/cge/sound.h
index 727ee78a5b..26a1525831 100644
--- a/engines/cge/sound.h
+++ b/engines/cge/sound.h
@@ -64,11 +64,10 @@ public:
}
};
-DataCk *loadWave(EncryptedStream *file);
-
class Sound {
public:
SmpInfo _smpinf;
+
Sound(CGEEngine *vm);
~Sound();
void open();
@@ -87,17 +86,19 @@ private:
void sndDigiStop(SmpInfo *PSmpInfo);
};
-
class Fx {
struct Handler {
int _ref;
DataCk *_wav;
} *_cache;
int _size;
+
DataCk *load(int idx, int ref);
+ DataCk *loadWave(EncryptedStream *file);
int find(int ref);
public:
DataCk *_current;
+
Fx(int size);
~Fx();
void clear();
diff --git a/engines/cge/text.cpp b/engines/cge/text.cpp
index 3268070aff..c28e3ba70a 100644
--- a/engines/cge/text.cpp
+++ b/engines/cge/text.cpp
@@ -137,7 +137,7 @@ char *Text::getText(int ref) {
}
void Text::say(const char *text, Sprite *spr) {
- killText();
+ _vm->killText();
_talk = new Talk(_vm, text, kTBRound);
if (!_talk)
return;
@@ -205,12 +205,4 @@ void Text::sayTime(Sprite *spr) {
say(t, spr);
}
-void killText() {
- if (!_talk)
- return;
-
- _snail_->addCom(kSnKill, -1, 0, _talk);
- _talk = NULL;
-}
-
} // End of namespace CGE
diff --git a/engines/cge/text.h b/engines/cge/text.h
index 668f307f72..5acdaaa519 100644
--- a/engines/cge/text.h
+++ b/engines/cge/text.h
@@ -61,11 +61,8 @@ private:
CGEEngine *_vm;
};
-extern Talk *_talk;
extern Text *_text;
-void killText();
-
} // End of namespace CGE
#endif
diff --git a/engines/cge/vmenu.h b/engines/cge/vmenu.h
index b8740a9e93..89ef7a9484 100644
--- a/engines/cge/vmenu.h
+++ b/engines/cge/vmenu.h
@@ -51,7 +51,6 @@ private:
CGEEngine *_vm;
};
-
class Vmenu : public Talk {
public:
static Vmenu *_addr;
diff --git a/engines/cge/walk.cpp b/engines/cge/walk.cpp
index cda2875ac4..4de8bc779d 100644
--- a/engines/cge/walk.cpp
+++ b/engines/cge/walk.cpp
@@ -47,16 +47,6 @@ bool Cluster::isValid() const {
return (_pt.x >= 0) && (_pt.x < kMapXCnt) && (_pt.y >= 0) && (_pt.y < kMapZCnt);
}
-Cluster XZ(int16 x, int16 y) {
- if (y < kMapTop)
- y = kMapTop;
-
- if (y > kMapTop + kMapHig - kMapGridZ)
- y = kMapTop + kMapHig - kMapGridZ;
-
- return Cluster(x / kMapGridX, (y - kMapTop) / kMapGridZ);
-}
-
Walk::Walk(CGEEngine *vm, BitmapPtr *shpl)
: Sprite(vm, shpl), _dir(kDirNone), _tracePtr(-1), _level(0), _target(-1, -1), _findLevel(-1), _vm(vm) {
}
@@ -65,7 +55,7 @@ void Walk::tick() {
if (_flags._hide)
return;
- _here = XZ(_x + _w / 2, _y + _h);
+ _here = _vm->XZ(_x + _w / 2, _y + _h);
if (_dir != kDirNone) {
_sys->funTouch();
diff --git a/engines/cge/walk.h b/engines/cge/walk.h
index 9b94120bb4..2224ae8745 100644
--- a/engines/cge/walk.h
+++ b/engines/cge/walk.h
@@ -86,8 +86,6 @@ public:
bool find1Way(Cluster c);
};
-Cluster XZ(int16 x, int16 y);
-
extern Walk *_hero;
} // End of namespace CGE