aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engines/cge/snail.cpp12
-rw-r--r--engines/cge/snail.h4
2 files changed, 9 insertions, 7 deletions
diff --git a/engines/cge/snail.cpp b/engines/cge/snail.cpp
index a10ab21658..6600b75245 100644
--- a/engines/cge/snail.cpp
+++ b/engines/cge/snail.cpp
@@ -425,7 +425,7 @@ const char *SNAIL::ComTxt[] = {
SNAIL::SNAIL(CGEEngine *vm, bool turbo)
: Turbo(turbo), Busy(false), TextDelay(false),
- Pause(0), TalkEnable(true),
+ _timerExpiry(0), TalkEnable(true),
Head(0), Tail(0), SNList(farnew(COM, 256)), _vm(vm) {
}
@@ -446,7 +446,7 @@ void SNAIL::AddCom(SNCOM com, int ref, int val, void *ptr) {
if (com == SNCLEAR) {
Tail = Head;
KillText();
- Pause = 0;
+ _timerExpiry = 0;
}
_enable();
}
@@ -469,7 +469,7 @@ void SNAIL::InsCom(SNCOM com, int ref, int val, void *ptr) {
if (com == SNCLEAR) {
Tail = Head;
KillText();
- Pause = 0;
+ _timerExpiry = 0;
}
_enable();
}
@@ -913,7 +913,7 @@ void SNAIL::RunCom(void) {
COM *snc = &SNList[Tail];
if (! Turbo) { // only for the slower one
- if (Pause)
+ if (_timerExpiry && (_timerExpiry > g_system->getMillis()))
break;
else {
if (TextDelay) {
@@ -930,7 +930,7 @@ void SNAIL::RunCom(void) {
case SNLABEL :
break;
case SNPAUSE :
- _heart->setXTimer(&Pause, snc->Val);
+ _timerExpiry = g_system->getMillis() + snc->Val * SNAIL_FRAME_DELAY;
if (Talk)
TextDelay = true;
break;
@@ -938,7 +938,7 @@ void SNAIL::RunCom(void) {
if (sprel) {
if (sprel->SeqTest(snc->Val) &&
(snc->Val >= 0 || sprel != Hero || Hero->_tracePtr < 0)) {
- _heart->setXTimer(&Pause, sprel->_time);
+ _timerExpiry = g_system->getMillis() + sprel->_time * SNAIL_FRAME_DELAY;
} else
goto xit;
}
diff --git a/engines/cge/snail.h b/engines/cge/snail.h
index e1df628d3b..3221f5c02e 100644
--- a/engines/cge/snail.h
+++ b/engines/cge/snail.h
@@ -47,6 +47,8 @@ namespace CGE {
#define SNPOST(c,r,v,p) Snail->AddCom(c,r,v,p)
#define SNPOST_(c,r,v,p) Snail_->AddCom(c,r,v,p)
+#define SNAIL_FRAME_RATE 62
+#define SNAIL_FRAME_DELAY (1000 / SNAIL_FRAME_RATE)
typedef struct {
uint8 Horz, Vert;
@@ -87,7 +89,7 @@ public:
} *SNList;
uint8 Head, Tail;
bool Turbo, Busy, TextDelay;
- uint16 Pause;
+ uint32 _timerExpiry;
static const char *ComTxt[];
bool TalkEnable;
SNAIL(CGEEngine *vm, bool turbo = false);