aboutsummaryrefslogtreecommitdiff
path: root/gob/game.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gob/game.cpp')
-rw-r--r--gob/game.cpp1491
1 files changed, 747 insertions, 744 deletions
diff --git a/gob/game.cpp b/gob/game.cpp
index 5187cfd6ff..b664a69d92 100644
--- a/gob/game.cpp
+++ b/gob/game.cpp
@@ -36,57 +36,60 @@
namespace Gob {
-Game_ExtTable *game_extTable = 0;
-
-char *game_totFileData = 0;
-Game_TotTextTable *game_totTextData;
-Game_TotResTable *game_totResourceTable = 0;
-char *game_imFileData = 0;
-int16 game_extHandle = 0;
-char game_curExtFile[14];
-char game_curTotFile[14];
-char game_curImaFile[18];
-
-Game_Collision *game_collisionAreas = 0;
-char game_shouldPushColls = 0;
-char game_collStr[256];
-
-int16 game_lastCollKey;
-int16 game_lastCollAreaIndex;
-int16 game_lastCollId;
-
-char game_handleMouse;
-char game_forceHandleMouse;
+int16 Game::captureCount = 0;
+Common::Rect Game::captureStack[20];
+
+Game::Game(GobEngine *vm) : _vm(vm) {
+ extTable = 0;
+ totFileData = 0;
+ totResourceTable = 0;
+ imFileData = 0;
+ extHandle = 0;
+ collisionAreas = 0;
+ shouldPushColls = 0;
+ totTextData = 0;
+
+ // Collisions stack
+ collStackSize = 0;
+ for (int i = 0; i < 3; i++) {
+ collStack[i] = 0;
+ collStackElemSizes[i] = 0;
+ }
-char game_tempStr[256];
+ for (int i = 0; i < 20; i++)
+ soundSamples[i] = 0;
-int16 game_activeCollResId;
-int16 game_activeCollIndex;
+ curTotFile[0] = 0;
+ curExtFile[0] = 0;
+ totToLoad[0] = 0;
-// Collisions stack
-int16 game_collStackSize = 0;
-Game_Collision *game_collStack[3];
-int16 game_collStackElemSizes[3];
+ startTimeKey = 0;
+ mouseButtons = 0;
-int16 game_mouseButtons = 0;
+ lastCollKey = 0;
+ lastCollAreaIndex = 0;
+ lastCollId = 0;
-// Capture
-static Common::Rect game_captureStack[20];
-static int16 game_captureCount = 0;
+ activeCollResId = 0;
+ activeCollIndex = 0;
+ ghandleMouse = 0;
+ forceHandleMouse = 0;
-Snd_SoundDesc *game_soundSamples[20];
+ tempStr[0] = 0;
+ curImaFile[0] = 0;
+ soundFromExt[0] = 0;
+ collStr[0] = 0;
-char game_soundFromExt[20];
-char game_totToLoad[20];
-int32 game_startTimeKey;
+ // Capture
+}
-char *game_loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
+char *Game::loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
int16 commonHandle;
int16 itemsCount;
int32 offset;
uint32 size;
- Game_ExtItem *item;
+ ExtItem *item;
char isPacked;
int16 handle;
int32 tableSize;
@@ -96,12 +99,12 @@ char *game_loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
char *dataPtr;
itemId -= 30000;
- if (game_extTable == 0)
+ if (extTable == 0)
return 0;
commonHandle = -1;
- itemsCount = game_extTable->itemsCount;
- item = &game_extTable->items[itemId];
+ itemsCount = extTable->itemsCount;
+ item = &extTable->items[itemId];
tableSize = szGame_ExtTable + szGame_ExtItem * itemsCount;
offset = item->offset;
@@ -114,29 +117,29 @@ char *game_loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
if (pResWidth != 0) {
*pResWidth = item->width & 0x7fff;
*pResHeight = item->height;
- debug(7, "game_loadExtData(%d, %d, %d)", itemId, *pResWidth, *pResHeight);
+ debug(7, "loadExtData(%d, %d, %d)", itemId, *pResWidth, *pResHeight);
}
- debug(7, "game_loadExtData(%d, 0, 0)", itemId);
+ debug(7, "loadExtData(%d, 0, 0)", itemId);
if (item->height == 0)
size += (item->width & 0x7fff) << 16;
debug(7, "size: %d off: %d", size, offset);
if (offset >= 0) {
- handle = game_extHandle;
+ handle = extHandle;
} else {
offset = -(offset + 1);
tableSize = 0;
- data_closeData(game_extHandle);
+ _vm->_dataio->closeData(extHandle);
strcpy(path, "commun.ex1");
- path[strlen(path) - 1] = *(game_totFileData + 0x3c) + '0';
- commonHandle = data_openData(path);
+ path[strlen(path) - 1] = *(totFileData + 0x3c) + '0';
+ commonHandle = _vm->_dataio->openData(path);
handle = commonHandle;
}
debug(7, "off: %ld size: %ld", offset, tableSize);
- data_seekData(handle, offset + tableSize, SEEK_SET);
+ _vm->_dataio->seekData(handle, offset + tableSize, SEEK_SET);
if (isPacked)
dataBuf = (char *)malloc(size);
else
@@ -145,20 +148,20 @@ char *game_loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
dataPtr = dataBuf;
while (size > 32000) {
// BUG: huge->far conversion. Need normalization?
- data_readData(handle, (char *)dataPtr, 32000);
+ _vm->_dataio->readData(handle, (char *)dataPtr, 32000);
size -= 32000;
dataPtr += 32000;
}
- data_readData(handle, (char *)dataPtr, size);
+ _vm->_dataio->readData(handle, (char *)dataPtr, size);
if (commonHandle != -1) {
- data_closeData(commonHandle);
- game_extHandle = data_openData(game_curExtFile);
+ _vm->_dataio->closeData(commonHandle);
+ extHandle = _vm->_dataio->openData(curExtFile);
}
if (isPacked != 0) {
packedBuf = dataBuf;
dataBuf = (char *)malloc(READ_LE_UINT32(packedBuf));
- unpackData(packedBuf, dataBuf);
+ _vm->_pack->unpackData(packedBuf, dataBuf);
free(packedBuf);
}
@@ -166,30 +169,30 @@ char *game_loadExtData(int16 itemId, int16 *pResWidth, int16 *pResHeight) {
}
-void game_clearCollisions() {
+void Game::clearCollisions() {
int16 i;
for (i = 0; i < 250; i++) {
- game_collisionAreas[i].id = 0;
- game_collisionAreas[i].left = -1;
+ collisionAreas[i].id = 0;
+ collisionAreas[i].left = -1;
}
}
-void game_addNewCollision(int16 id, int16 left, int16 top, int16 right, int16 bottom,
+void Game::addNewCollision(int16 id, int16 left, int16 top, int16 right, int16 bottom,
int16 flags, int16 key, int16 funcEnter, int16 funcLeave) {
int16 i;
- Game_Collision *ptr;
+ Collision *ptr;
- debug(5, "game_addNewCollision");
+ debug(5, "addNewCollision");
debug(5, "id = %x", id);
debug(5, "left = %d, top = %d, right = %d, bottom = %d", left, top, right, bottom);
debug(5, "flags = %x, key = %x", flags, key);
debug(5, "funcEnter = %d, funcLeave = %d", funcEnter, funcLeave);
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left != -1)
+ if (collisionAreas[i].left != -1)
continue;
- ptr = &game_collisionAreas[i];
+ ptr = &collisionAreas[i];
ptr->id = id;
ptr->left = left;
ptr->top = top;
@@ -201,63 +204,63 @@ void game_addNewCollision(int16 id, int16 left, int16 top, int16 right, int16 bo
ptr->funcLeave = funcLeave;
return;
}
- error("game_addNewCollision: Collision array full!\n");
+ error("addNewCollision: Collision array full!\n");
}
-void game_freeCollision(int16 id) {
+void Game::freeCollision(int16 id) {
int16 i;
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].id == id)
- game_collisionAreas[i].left = -1;
+ if (collisionAreas[i].id == id)
+ collisionAreas[i].left = -1;
}
}
-void game_pushCollisions(char all) {
- Game_Collision *srcPtr;
- Game_Collision *destPtr;
+void Game::pushCollisions(char all) {
+ Collision *srcPtr;
+ Collision *destPtr;
int16 size;
- debug(4, "game_pushCollisions");
- for (size = 0, srcPtr = game_collisionAreas; srcPtr->left != -1;
+ debug(4, "pushCollisions");
+ for (size = 0, srcPtr = collisionAreas; srcPtr->left != -1;
srcPtr++) {
if (all || (srcPtr->id & 0x8000))
size++;
}
- destPtr = (Game_Collision *)malloc(size * sizeof(Game_Collision));
- game_collStack[game_collStackSize] = destPtr;
- game_collStackElemSizes[game_collStackSize] = size;
- game_collStackSize++;
+ destPtr = (Collision *)malloc(size * sizeof(Collision));
+ collStack[collStackSize] = destPtr;
+ collStackElemSizes[collStackSize] = size;
+ collStackSize++;
- for (srcPtr = game_collisionAreas; srcPtr->left != -1; srcPtr++) {
+ for (srcPtr = collisionAreas; srcPtr->left != -1; srcPtr++) {
if (all || (srcPtr->id & 0x8000)) {
- memcpy(destPtr, srcPtr, sizeof(Game_Collision));
+ memcpy(destPtr, srcPtr, sizeof(Collision));
srcPtr->left = -1;
destPtr++;
}
}
}
-void game_popCollisions(void) {
- Game_Collision *destPtr;
- Game_Collision *srcPtr;
+void Game::popCollisions(void) {
+ Collision *destPtr;
+ Collision *srcPtr;
- debug(4, "game_popCollision");
+ debug(4, "popCollision");
- game_collStackSize--;
- for (destPtr = game_collisionAreas; destPtr->left != -1; destPtr++);
+ collStackSize--;
+ for (destPtr = collisionAreas; destPtr->left != -1; destPtr++);
- srcPtr = game_collStack[game_collStackSize];
+ srcPtr = collStack[collStackSize];
memcpy(destPtr, srcPtr,
- game_collStackElemSizes[game_collStackSize] *
- sizeof(Game_Collision));
+ collStackElemSizes[collStackSize] *
+ sizeof(Collision));
- free(game_collStack[game_collStackSize]);
+ free(collStack[collStackSize]);
}
-int16 game_checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
- Game_Collision *ptr;
+int16 Game::checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
+ Collision *ptr;
int16 i;
if (resId != 0)
@@ -265,7 +268,7 @@ int16 game_checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
*resIndex = 0;
- ptr = game_collisionAreas;
+ ptr = collisionAreas;
for (i = 0; ptr->left != -1; ptr++, i++) {
if (all) {
if ((ptr->flags & 0xf) > 1)
@@ -274,10 +277,10 @@ int16 game_checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
if ((ptr->flags & 0xff00) != 0)
continue;
- if (inter_mouseX < ptr->left
- || inter_mouseX > ptr->right
- || inter_mouseY < ptr->top
- || inter_mouseY > ptr->bottom)
+ if (_vm->_global->inter_mouseX < ptr->left
+ || _vm->_global->inter_mouseX > ptr->right
+ || _vm->_global->inter_mouseY < ptr->top
+ || _vm->_global->inter_mouseY > ptr->bottom)
continue;
if (resId != 0)
@@ -292,14 +295,14 @@ int16 game_checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
if ((ptr->flags & 0xf) != 1 && (ptr->flags & 0xf) != 2)
continue;
- if ((ptr->flags & 0xf0) >> 4 != game_mouseButtons - 1
+ if ((ptr->flags & 0xf0) >> 4 != mouseButtons - 1
&& (ptr->flags & 0xf0) >> 4 != 2)
continue;
- if (inter_mouseX < ptr->left
- || inter_mouseX > ptr->right
- || inter_mouseY < ptr->top
- || inter_mouseY > ptr->bottom)
+ if (_vm->_global->inter_mouseX < ptr->left
+ || _vm->_global->inter_mouseX > ptr->right
+ || _vm->_global->inter_mouseY < ptr->top
+ || _vm->_global->inter_mouseY > ptr->bottom)
continue;
if (resId != 0)
@@ -309,88 +312,88 @@ int16 game_checkMousePoint(int16 all, int16 *resId, int16 *resIndex) {
}
}
- if (game_mouseButtons != 1 && all == 0)
+ if (mouseButtons != 1 && all == 0)
return 0x11b;
return 0;
}
-void game_capturePush(int16 left, int16 top, int16 width, int16 height) {
+void Game::capturePush(int16 left, int16 top, int16 width, int16 height) {
int16 right;
- if (game_captureCount == 20)
- error("game_capturePush: Capture stack overflow!");
+ if (captureCount == 20)
+ error("capturePush: Capture stack overflow!");
- game_captureStack[game_captureCount].left = left;
- game_captureStack[game_captureCount].top = top;
- game_captureStack[game_captureCount].right = left + width;
- game_captureStack[game_captureCount].bottom = top + height;
+ captureStack[captureCount].left = left;
+ captureStack[captureCount].top = top;
+ captureStack[captureCount].right = left + width;
+ captureStack[captureCount].bottom = top + height;
- draw_spriteTop = top;
- draw_spriteBottom = height;
+ _vm->_draw->spriteTop = top;
+ _vm->_draw->spriteBottom = height;
right = left + width - 1;
left &= 0xfff0;
right |= 0xf;
- draw_spritesArray[30 + game_captureCount] =
- vid_initSurfDesc(videoMode, right - left + 1, height, 0);
+ _vm->_draw->spritesArray[30 + captureCount] =
+ _vm->_video->initSurfDesc(_vm->_global->videoMode, right - left + 1, height, 0);
- draw_sourceSurface = 21;
- draw_destSurface = 30 + game_captureCount;
+ _vm->_draw->sourceSurface = 21;
+ _vm->_draw->destSurface = 30 + captureCount;
- draw_spriteLeft = left;
- draw_spriteRight = right - left + 1;
- draw_destSpriteX = 0;
- draw_destSpriteY = 0;
- draw_transparency = 0;
- draw_spriteOperation(0);
- game_captureCount++;
+ _vm->_draw->spriteLeft = left;
+ _vm->_draw->spriteRight = right - left + 1;
+ _vm->_draw->destSpriteX = 0;
+ _vm->_draw->destSpriteY = 0;
+ _vm->_draw->transparency = 0;
+ _vm->_draw->spriteOperation(0);
+ captureCount++;
}
-void game_capturePop(char doDraw) {
- if (game_captureCount <= 0)
+void Game::capturePop(char doDraw) {
+ if (captureCount <= 0)
return;
- game_captureCount--;
+ captureCount--;
if (doDraw) {
- draw_destSpriteX = game_captureStack[game_captureCount].left;
- draw_destSpriteY = game_captureStack[game_captureCount].top;
- draw_spriteRight =
- game_captureStack[game_captureCount].width();
- draw_spriteBottom =
- game_captureStack[game_captureCount].height();
-
- draw_transparency = 0;
- draw_sourceSurface = 30 + game_captureCount;
- draw_destSurface = 21;
- draw_spriteLeft = draw_destSpriteX & 0xf;
- draw_spriteTop = 0;
- draw_spriteOperation(0);
+ _vm->_draw->destSpriteX = captureStack[captureCount].left;
+ _vm->_draw->destSpriteY = captureStack[captureCount].top;
+ _vm->_draw->spriteRight =
+ captureStack[captureCount].width();
+ _vm->_draw->spriteBottom =
+ captureStack[captureCount].height();
+
+ _vm->_draw->transparency = 0;
+ _vm->_draw->sourceSurface = 30 + captureCount;
+ _vm->_draw->destSurface = 21;
+ _vm->_draw->spriteLeft = _vm->_draw->destSpriteX & 0xf;
+ _vm->_draw->spriteTop = 0;
+ _vm->_draw->spriteOperation(0);
}
- vid_freeSurfDesc(draw_spritesArray[30 + game_captureCount]);
+ _vm->_video->freeSurfDesc(_vm->_draw->spritesArray[30 + captureCount]);
}
-char *game_loadTotResource(int16 id) {
- Game_TotResItem *itemPtr;
+char *Game::loadTotResource(int16 id) {
+ TotResItem *itemPtr;
int32 offset;
- itemPtr = &game_totResourceTable->items[id];
+ itemPtr = &totResourceTable->items[id];
offset = itemPtr->offset;
if (offset >= 0) {
- return ((char *)game_totResourceTable) + szGame_TotResTable +
- szGame_TotResItem * game_totResourceTable->itemsCount + offset;
+ return ((char *)totResourceTable) + szGame_TotResTable +
+ szGame_TotResItem * totResourceTable->itemsCount + offset;
} else {
- return (char *)(game_imFileData + (int32)READ_LE_UINT32(&((int32 *)game_imFileData)[-offset - 1]));
+ return (char *)(imFileData + (int32)READ_LE_UINT32(&((int32 *)imFileData)[-offset - 1]));
}
}
-void game_loadSound(int16 slot, char *dataPtr) {
- Snd_SoundDesc *soundDesc;
+void Game::loadSound(int16 slot, char *dataPtr) {
+ Snd::SoundDesc *soundDesc;
- soundDesc = (Snd_SoundDesc *)malloc(sizeof(Snd_SoundDesc));
+ soundDesc = (Snd::SoundDesc *)malloc(sizeof(Snd::SoundDesc));
- game_soundSamples[slot] = soundDesc;
+ soundSamples[slot] = soundDesc;
soundDesc->frequency = (dataPtr[4] << 8) + dataPtr[5];
soundDesc->size = (dataPtr[1] << 16) + (dataPtr[2] << 8) + dataPtr[3];
@@ -401,77 +404,77 @@ void game_loadSound(int16 slot, char *dataPtr) {
soundDesc->flag = 0;
}
-void game_interLoadSound(int16 slot) {
+void Game::interLoadSound(int16 slot) {
char *dataPtr;
int16 id;
if (slot == -1)
- slot = parse_parseValExpr();
+ slot = _vm->_parse->parseValExpr();
- id = inter_load16();
+ id = _vm->_inter->load16();
if (id == -1) {
- inter_execPtr += 9;
+ _vm->_global->inter_execPtr += 9;
return;
}
if (id >= 30000) {
- dataPtr = game_loadExtData(id, 0, 0);
- game_soundFromExt[slot] = 1;
+ dataPtr = loadExtData(id, 0, 0);
+ soundFromExt[slot] = 1;
} else {
- dataPtr = game_loadTotResource(id);
- game_soundFromExt[slot] = 0;
+ dataPtr = loadTotResource(id);
+ soundFromExt[slot] = 0;
}
- game_loadSound(slot, dataPtr);
+ loadSound(slot, dataPtr);
}
-void game_freeSoundSlot(int16 slot) {
+void Game::freeSoundSlot(int16 slot) {
if (slot == -1)
- slot = parse_parseValExpr();
+ slot = _vm->_parse->parseValExpr();
- if (game_soundSamples[slot] == 0)
+ if (soundSamples[slot] == 0)
return;
- if (game_soundFromExt[slot] == 1) {
- free(game_soundSamples[slot]->data - 6);
- game_soundFromExt[slot] = 0;
+ if (soundFromExt[slot] == 1) {
+ free(soundSamples[slot]->data - 6);
+ soundFromExt[slot] = 0;
}
- free(game_soundSamples[slot]);
- game_soundSamples[slot] = 0;
+ free(soundSamples[slot]);
+ soundSamples[slot] = 0;
}
-int16 game_checkKeys(int16 *pMouseX, int16 *pMouseY, int16 *pButtons, char handleMouse) {
- util_processInput();
+int16 Game::checkKeys(int16 *pMouseX, int16 *pMouseY, int16 *pButtons, char handleMouse) {
+ _vm->_util->processInput();
if (VAR(58) != 0) {
- if (mult_frameStart != (int)VAR(58) - 1)
- mult_frameStart++;
+ if (_vm->_mult->frameStart != (int)VAR(58) - 1)
+ _vm->_mult->frameStart++;
else
- mult_frameStart = 0;
+ _vm->_mult->frameStart = 0;
- mult_playMult(mult_frameStart + VAR(57), mult_frameStart + VAR(57), 1,
+ _vm->_mult->playMult(_vm->_mult->frameStart + VAR(57), _vm->_mult->frameStart + VAR(57), 1,
handleMouse);
}
- if (inter_soundEndTimeKey != 0
- && util_getTimeKey() >= inter_soundEndTimeKey) {
- snd_stopSound(inter_soundStopVal);
- inter_soundEndTimeKey = 0;
+ if (_vm->_inter->soundEndTimeKey != 0
+ && _vm->_util->getTimeKey() >= _vm->_inter->soundEndTimeKey) {
+ _vm->_snd->stopSound(_vm->_inter->soundStopVal);
+ _vm->_inter->soundEndTimeKey = 0;
}
- if (useMouse == 0)
- error("game_checkKeys: Can't work without mouse!");
+ if (_vm->_global->useMouse == 0)
+ error("checkKeys: Can't work without mouse!");
- util_getMouseState(pMouseX, pMouseY, pButtons);
+ _vm->_util->getMouseState(pMouseX, pMouseY, pButtons);
if (*pButtons == 3)
*pButtons = 0;
- return util_checkKey();
+ return _vm->_util->checkKey();
}
-int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
+int16 Game::checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
int16 *pResIndex) {
char *savedIP;
int16 resIndex;
@@ -481,9 +484,9 @@ int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
uint32 timeKey;
if (deltaTime >= -1) {
- game_lastCollKey = 0;
- game_lastCollAreaIndex = 0;
- game_lastCollId = 0;
+ lastCollKey = 0;
+ lastCollAreaIndex = 0;
+ lastCollId = 0;
}
if (pResId != 0)
@@ -491,48 +494,48 @@ int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
resIndex = 0;
- if (draw_cursorIndex == -1 && handleMouse != 0
- && game_lastCollKey == 0) {
- game_lastCollKey =
- game_checkMousePoint(1, &game_lastCollId,
- &game_lastCollAreaIndex);
+ if (_vm->_draw->gcursorIndex == -1 && handleMouse != 0
+ && lastCollKey == 0) {
+ lastCollKey =
+ checkMousePoint(1, &lastCollId,
+ &lastCollAreaIndex);
- if (game_lastCollKey != 0 && (game_lastCollId & 0x8000) != 0) {
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcEnter;
+ if (lastCollKey != 0 && (lastCollId & 0x8000) != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcEnter;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
}
if (handleMouse != 0)
- draw_animateCursor(-1);
+ _vm->_draw->animateCursor(-1);
- timeKey = util_getTimeKey();
+ timeKey = _vm->_util->getTimeKey();
while (1) {
- if (inter_terminate != 0) {
+ if (_vm->_inter->terminate != 0) {
if (handleMouse)
- draw_blitCursor();
+ _vm->_draw->blitCursor();
return 0;
}
- if (draw_noInvalidated == 0) {
+ if (_vm->_draw->noInvalidated == 0) {
if (handleMouse)
- draw_animateCursor(-1);
+ _vm->_draw->animateCursor(-1);
else
- draw_blitInvalidated();
+ _vm->_draw->blitInvalidated();
}
- // NOTE: the original asm does the below game_checkKeys call
+ // NOTE: the original asm does the below checkKeys call
// _before_ this check. However, that can cause keypresses to get lost
// since there's a return statement in this check.
// Additionally, I added a 'deltaTime == -1' check there, since
- // when this function is called with deltaTime == -1 in game_inputArea,
+ // when this function is called with deltaTime == -1 in inputArea,
// and the return value is then discarded.
if (deltaTime < 0) {
- uint32 curtime = util_getTimeKey();
+ uint32 curtime = _vm->_util->getTimeKey();
if (deltaTime == -1 || curtime + deltaTime > timeKey) {
if (pResId != 0)
*pResId = 0;
@@ -544,18 +547,18 @@ int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
}
}
- key = game_checkKeys(&inter_mouseX, &inter_mouseY,
- &game_mouseButtons, handleMouse);
+ key = checkKeys(&_vm->_global->inter_mouseX, &_vm->_global->inter_mouseY,
+ &mouseButtons, handleMouse);
- if (handleMouse == 0 && game_mouseButtons != 0) {
- util_waitMouseRelease(0);
+ if (handleMouse == 0 && mouseButtons != 0) {
+ _vm->_util->waitMouseRelease(0);
key = 3;
}
if (key != 0) {
if (handleMouse == 1)
- draw_blitCursor();
+ _vm->_draw->blitCursor();
if (pResId != 0)
*pResId = 0;
@@ -563,118 +566,118 @@ int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
if (pResIndex != 0)
*pResIndex = 0;
- if (game_lastCollKey != 0 &&
- game_collisionAreas[game_lastCollAreaIndex].funcLeave != 0) {
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcLeave;
+ if (lastCollKey != 0 &&
+ collisionAreas[lastCollAreaIndex].funcLeave != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcLeave;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
- game_lastCollKey = 0;
+ lastCollKey = 0;
if (key != 0)
return key;
}
if (handleMouse != 0) {
- if (game_mouseButtons != 0) {
+ if (mouseButtons != 0) {
oldIndex = 0;
- draw_animateCursor(2);
+ _vm->_draw->animateCursor(2);
if (deltaTime <= 0) {
if (handleMouse == 1)
- util_waitMouseRelease(1);
+ _vm->_util->waitMouseRelease(1);
} else if (deltaTime > 0) {
- util_delay(deltaTime);
+ _vm->_util->delay(deltaTime);
}
- draw_animateCursor(-1);
+ _vm->_draw->animateCursor(-1);
if (pResId != 0)
*pResId = 0;
- key = game_checkMousePoint(0, pResId, &resIndex);
+ key = checkMousePoint(0, pResId, &resIndex);
if (pResIndex != 0)
*pResIndex = resIndex;
if (key != 0 || (pResId != 0 && *pResId != 0)) {
if (handleMouse == 1 && (deltaTime <= 0
- || game_mouseButtons == 0))
- draw_blitCursor();
-
- if (game_lastCollKey != 0 &&
- game_collisionAreas[game_lastCollAreaIndex].funcLeave != 0) {
- savedIP = inter_execPtr;
- inter_execPtr =
- (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcLeave;
-
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ || mouseButtons == 0))
+ _vm->_draw->blitCursor();
+
+ if (lastCollKey != 0 &&
+ collisionAreas[lastCollAreaIndex].funcLeave != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr =
+ (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcLeave;
+
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
- game_lastCollKey = 0;
+ lastCollKey = 0;
return key;
}
- if (game_lastCollKey != 0 &&
- game_collisionAreas[game_lastCollAreaIndex].funcLeave != 0) {
- savedIP = inter_execPtr;
- inter_execPtr =
- (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcLeave;
+ if (lastCollKey != 0 &&
+ collisionAreas[lastCollAreaIndex].funcLeave != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr =
+ (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcLeave;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
- game_lastCollKey =
- game_checkMousePoint(1, &game_lastCollId,
- &game_lastCollAreaIndex);
+ lastCollKey =
+ checkMousePoint(1, &lastCollId,
+ &lastCollAreaIndex);
- if (game_lastCollKey != 0
- && (game_lastCollId & 0x8000) != 0) {
- savedIP = inter_execPtr;
- inter_execPtr =
- (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcEnter;
+ if (lastCollKey != 0
+ && (lastCollId & 0x8000) != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr =
+ (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcEnter;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
} else {
if (handleMouse != 0 &&
- (inter_mouseX != draw_cursorX
- || inter_mouseY != draw_cursorY)) {
- oldIndex = game_lastCollAreaIndex;
- oldId = game_lastCollId;
+ (_vm->_global->inter_mouseX != _vm->_draw->cursorX
+ || _vm->_global->inter_mouseY != _vm->_draw->cursorY)) {
+ oldIndex = lastCollAreaIndex;
+ oldId = lastCollId;
key =
- game_checkMousePoint(1,
- &game_lastCollId,
- &game_lastCollAreaIndex);
+ checkMousePoint(1,
+ &lastCollId,
+ &lastCollAreaIndex);
- if (key != game_lastCollKey) {
- if (game_lastCollKey != 0
+ if (key != lastCollKey) {
+ if (lastCollKey != 0
&& (oldId & 0x8000) != 0) {
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData +
- game_collisionAreas[oldIndex].funcLeave;
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData +
+ collisionAreas[oldIndex].funcLeave;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
- game_lastCollKey = key;
- if (game_lastCollKey != 0 && (game_lastCollId & 0x8000) != 0) {
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData +
- game_collisionAreas[game_lastCollAreaIndex].funcEnter;
+ lastCollKey = key;
+ if (lastCollKey != 0 && (lastCollId & 0x8000) != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData +
+ collisionAreas[lastCollAreaIndex].funcEnter;
- inter_funcBlock(0);
- inter_execPtr = savedIP;
+ _vm->_inter->funcBlock(0);
+ _vm->_global->inter_execPtr = savedIP;
}
}
}
@@ -682,19 +685,19 @@ int16 game_checkCollisions(char handleMouse, int16 deltaTime, int16 *pResId,
}
if (handleMouse != 0)
- draw_animateCursor(-1);
+ _vm->_draw->animateCursor(-1);
- util_delay(10);
+ _vm->_util->delay(10);
- snd_loopSounds();
+ _vm->_snd->loopSounds();
}
}
-int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 backColor,
+int16 Game::inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 backColor,
int16 frontColor, char *str, int16 fontIndex, char inpType, int16 *pTotTime) {
int16 handleMouse;
uint32 editSize;
- FontDesc *pFont;
+ Video::FontDesc *pFont;
char curSym;
int16 key;
const char *str1;
@@ -704,116 +707,116 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
int16 flag;
int16 savedKey;
- if (game_handleMouse != 0 &&
- (useMouse != 0 || game_forceHandleMouse != 0))
+ if (ghandleMouse != 0 &&
+ (_vm->_global->useMouse != 0 || forceHandleMouse != 0))
handleMouse = 1;
else
handleMouse = 0;
pos = strlen(str);
- pFont = draw_fonts[fontIndex];
+ pFont = _vm->_draw->fonts[fontIndex];
editSize = width / pFont->itemWidth;
while (1) {
- strcpy(game_tempStr, str);
- strcat(game_tempStr, " ");
- if (strlen(game_tempStr) > editSize)
- strcpy(game_tempStr, str);
-
- draw_destSpriteX = xPos;
- draw_destSpriteY = yPos;
- draw_spriteRight = editSize * pFont->itemWidth;
- draw_spriteBottom = height;
-
- draw_destSurface = 21;
- draw_backColor = backColor;
- draw_frontColor = frontColor;
- draw_textToPrint = game_tempStr;
- draw_transparency = 1;
- draw_fontIndex = fontIndex;
- draw_spriteOperation(DRAW_FILLRECT);
-
- draw_destSpriteY = yPos + (height - 8) / 2;
-
- draw_spriteOperation(DRAW_PRINTTEXT);
+ strcpy(tempStr, str);
+ strcat(tempStr, " ");
+ if (strlen(tempStr) > editSize)
+ strcpy(tempStr, str);
+
+ _vm->_draw->destSpriteX = xPos;
+ _vm->_draw->destSpriteY = yPos;
+ _vm->_draw->spriteRight = editSize * pFont->itemWidth;
+ _vm->_draw->spriteBottom = height;
+
+ _vm->_draw->destSurface = 21;
+ _vm->_draw->backColor = backColor;
+ _vm->_draw->frontColor = frontColor;
+ _vm->_draw->textToPrint = tempStr;
+ _vm->_draw->transparency = 1;
+ _vm->_draw->fontIndex = fontIndex;
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
+
+ _vm->_draw->destSpriteY = yPos + (height - 8) / 2;
+
+ _vm->_draw->spriteOperation(DRAW_PRINTTEXT);
if (pos == editSize)
pos--;
- curSym = game_tempStr[pos];
+ curSym = tempStr[pos];
flag = 1;
while (1) {
- game_tempStr[0] = curSym;
- game_tempStr[1] = 0;
+ tempStr[0] = curSym;
+ tempStr[1] = 0;
- draw_destSpriteX = xPos + pFont->itemWidth * pos;
- draw_destSpriteY = yPos + height - 1;
- draw_spriteRight = pFont->itemWidth;
- draw_spriteBottom = 1;
- draw_destSurface = 21;
- draw_backColor = frontColor;
- draw_spriteOperation(DRAW_FILLRECT);
+ _vm->_draw->destSpriteX = xPos + pFont->itemWidth * pos;
+ _vm->_draw->destSpriteY = yPos + height - 1;
+ _vm->_draw->spriteRight = pFont->itemWidth;
+ _vm->_draw->spriteBottom = 1;
+ _vm->_draw->destSurface = 21;
+ _vm->_draw->backColor = frontColor;
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
if (flag != 0) {
- key = game_checkCollisions(handleMouse, -1,
- &game_activeCollResId,
- &game_activeCollIndex);
+ key = checkCollisions(handleMouse, -1,
+ &activeCollResId,
+ &activeCollIndex);
}
flag = 0;
- key = game_checkCollisions(handleMouse, -300,
- &game_activeCollResId, &game_activeCollIndex);
+ key = checkCollisions(handleMouse, -300,
+ &activeCollResId, &activeCollIndex);
if (*pTotTime > 0) {
*pTotTime -= 300;
if (*pTotTime <= 1) {
key = 0;
- game_activeCollResId = 0;
+ activeCollResId = 0;
break;
}
}
- game_tempStr[0] = curSym;
- game_tempStr[1] = 0;
- draw_destSpriteX = xPos + pFont->itemWidth * pos;
- draw_destSpriteY = yPos + height - 1;
- draw_spriteRight = pFont->itemWidth;
- draw_spriteBottom = 1;
- draw_destSurface = 21;
- draw_backColor = backColor;
- draw_frontColor = frontColor;
- draw_textToPrint = game_tempStr;
- draw_transparency = 1;
- draw_spriteOperation(DRAW_FILLRECT);
-
- draw_destSpriteY = yPos + (height - 8) / 2;
- draw_spriteOperation(DRAW_PRINTTEXT);
-
- if (key != 0 || game_activeCollResId != 0)
+ tempStr[0] = curSym;
+ tempStr[1] = 0;
+ _vm->_draw->destSpriteX = xPos + pFont->itemWidth * pos;
+ _vm->_draw->destSpriteY = yPos + height - 1;
+ _vm->_draw->spriteRight = pFont->itemWidth;
+ _vm->_draw->spriteBottom = 1;
+ _vm->_draw->destSurface = 21;
+ _vm->_draw->backColor = backColor;
+ _vm->_draw->frontColor = frontColor;
+ _vm->_draw->textToPrint = tempStr;
+ _vm->_draw->transparency = 1;
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
+
+ _vm->_draw->destSpriteY = yPos + (height - 8) / 2;
+ _vm->_draw->spriteOperation(DRAW_PRINTTEXT);
+
+ if (key != 0 || activeCollResId != 0)
break;
- key = game_checkCollisions(handleMouse, -300,
- &game_activeCollResId, &game_activeCollIndex);
+ key = checkCollisions(handleMouse, -300,
+ &activeCollResId, &activeCollIndex);
if (*pTotTime > 0) {
*pTotTime -= 300;
if (*pTotTime <= 1) {
key = 0;
- game_activeCollResId = 0;
+ activeCollResId = 0;
break;
}
}
- if (key != 0 || game_activeCollResId != 0)
+ if (key != 0 || activeCollResId != 0)
break;
- if (inter_terminate != 0)
+ if (_vm->_inter->terminate != 0)
return 0;
}
- if (key == 0 || game_activeCollResId != 0
- || inter_terminate != 0)
+ if (key == 0 || activeCollResId != 0
+ || _vm->_inter->terminate != 0)
return 0;
switch (key) {
@@ -833,7 +836,7 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
case 0xe08: // Backspace
if (pos > 0) {
- util_cutFromStr(str, pos - 1, 1);
+ _vm->_util->cutFromStr(str, pos - 1, 1);
pos--;
continue;
}
@@ -843,7 +846,7 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
if (pos >= strlen(str))
continue;
- util_cutFromStr(str, pos, 1);
+ _vm->_util->cutFromStr(str, pos, 1);
continue;
case 0x1c0d: // Enter
@@ -862,21 +865,21 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
return key;
case 0x11b: // Escape
- if (useMouse != 0)
+ if (_vm->_global->useMouse != 0)
continue;
- game_forceHandleMouse = !game_forceHandleMouse;
+ forceHandleMouse = !forceHandleMouse;
- if (game_handleMouse != 0 &&
- (useMouse != 0 || game_forceHandleMouse != 0))
+ if (ghandleMouse != 0 &&
+ (_vm->_global->useMouse != 0 || forceHandleMouse != 0))
handleMouse = 1;
else
handleMouse = 0;
- if (pressedKeys[1] == 0)
+ if (_vm->_global->pressedKeys[1] == 0)
continue;
- while (pressedKeys[1] != 0);
+ while (_vm->_global->pressedKeys[1] != 0);
continue;
default:
@@ -906,17 +909,17 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
if (key >= ' ' && key <= 0xff) {
if (editSize == strlen(str))
- util_cutFromStr(str, strlen(str) - 1,
+ _vm->_util->cutFromStr(str, strlen(str) - 1,
1);
if (key >= 'a' && key <= 'z')
key += ('A' - 'a');
pos++;
- game_tempStr[0] = key;
- game_tempStr[1] = 0;
+ tempStr[0] = key;
+ tempStr[1] = 0;
- util_insertStr(game_tempStr, str, pos - 1);
+ _vm->_util->insertStr(tempStr, str, pos - 1);
//strupr(str);
}
@@ -924,8 +927,8 @@ int16 game_inputArea(int16 xPos, int16 yPos, int16 width, int16 height, int16 ba
}
}
-int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * inpDesc) {
- Game_Collision *collArea;
+int16 Game::multiEdit(int16 time, int16 index, int16 *pCurPos, InputDesc * inpDesc) {
+ Collision *collArea;
int16 descInd;
int16 key;
int16 found = -1;
@@ -933,7 +936,7 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
descInd = 0;
for (i = 0; i < 250; i++) {
- collArea = &game_collisionAreas[i];
+ collArea = &collisionAreas[i];
if (collArea->left == -1)
continue;
@@ -947,25 +950,25 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
if ((collArea->flags & 0x0f) > 10)
continue;
- strcpy(game_tempStr, inter_variables + collArea->key);
+ strcpy(tempStr, _vm->_global->inter_variables + collArea->key);
- draw_destSpriteX = collArea->left;
- draw_destSpriteY = collArea->top;
- draw_spriteRight = collArea->right - collArea->left + 1;
- draw_spriteBottom = collArea->bottom - collArea->top + 1;
+ _vm->_draw->destSpriteX = collArea->left;
+ _vm->_draw->destSpriteY = collArea->top;
+ _vm->_draw->spriteRight = collArea->right - collArea->left + 1;
+ _vm->_draw->spriteBottom = collArea->bottom - collArea->top + 1;
- draw_destSurface = 21;
+ _vm->_draw->destSurface = 21;
- draw_backColor = inpDesc[descInd].backColor;
- draw_frontColor = inpDesc[descInd].frontColor;
- draw_textToPrint = game_tempStr;
- draw_transparency = 1;
- draw_fontIndex = inpDesc[descInd].fontIndex;
- draw_spriteOperation(DRAW_FILLRECT);
- draw_destSpriteY +=
+ _vm->_draw->backColor = inpDesc[descInd].backColor;
+ _vm->_draw->frontColor = inpDesc[descInd].frontColor;
+ _vm->_draw->textToPrint = tempStr;
+ _vm->_draw->transparency = 1;
+ _vm->_draw->fontIndex = inpDesc[descInd].fontIndex;
+ _vm->_draw->spriteOperation(DRAW_FILLRECT);
+ _vm->_draw->destSpriteY +=
((collArea->bottom - collArea->top + 1) - 8) / 2;
- draw_spriteOperation(DRAW_PRINTTEXT);
+ _vm->_draw->spriteOperation(DRAW_PRINTTEXT);
descInd++;
}
@@ -977,7 +980,7 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
descInd = 0;
for (i = 0; i < 250; i++) {
- collArea = &game_collisionAreas[i];
+ collArea = &collisionAreas[i];
if (collArea->left == -1)
continue;
@@ -1001,34 +1004,34 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
assert(found != -1);
- collArea = &game_collisionAreas[found];
+ collArea = &collisionAreas[found];
- key = game_inputArea(collArea->left, collArea->top,
+ key = inputArea(collArea->left, collArea->top,
collArea->right - collArea->left + 1,
collArea->bottom - collArea->top + 1,
inpDesc[*pCurPos].backColor, inpDesc[*pCurPos].frontColor,
- inter_variables + collArea->key,
+ _vm->_global->inter_variables + collArea->key,
inpDesc[*pCurPos].fontIndex, collArea->flags, &time);
- if (inter_terminate != 0)
+ if (_vm->_inter->terminate != 0)
return 0;
switch (key) {
case 0:
- if (game_activeCollResId == 0)
+ if (activeCollResId == 0)
return 0;
- if ((game_collisionAreas[game_activeCollIndex].
+ if ((collisionAreas[activeCollIndex].
flags & 0x0f) < 3)
return 0;
- if ((game_collisionAreas[game_activeCollIndex].
+ if ((collisionAreas[activeCollIndex].
flags & 0x0f) > 10)
return 0;
*pCurPos = 0;
for (i = 0; i < 250; i++) {
- collArea = &game_collisionAreas[i];
+ collArea = &collisionAreas[i];
if (collArea->left == -1)
continue;
@@ -1042,7 +1045,7 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
if ((collArea->flags & 0x0f) > 10)
continue;
- if (i == game_activeCollIndex)
+ if (i == activeCollIndex)
break;
pCurPos[0]++;
@@ -1087,15 +1090,15 @@ int16 game_multiEdit(int16 time, int16 index, int16 *pCurPos, Game_InputDesc * i
}
}
-int16 game_adjustKey(int16 key) {
+int16 Game::adjustKey(int16 key) {
if (key <= 0x60 || key >= 0x7b)
return key;
return key - 0x20;
}
-void game_collisionsBlock(void) {
- Game_InputDesc descArray[20];
+void Game::collisionsBlock(void) {
+ InputDesc descArray[20];
int16 array[250];
char count;
int16 collResId;
@@ -1125,29 +1128,29 @@ void game_collisionsBlock(void) {
int16 var_24;
int16 var_26;
int16 collStackPos;
- Game_Collision *collPtr;
+ Collision *collPtr;
int16 timeKey;
char *savedIP;
- if (game_shouldPushColls)
- game_pushCollisions(1);
+ if (shouldPushColls)
+ pushCollisions(1);
collResId = -1;
- inter_execPtr++;
- count = *inter_execPtr++;
- game_handleMouse = inter_execPtr[0];
- deltaTime = 1000 * (byte)inter_execPtr[1];
- descIndex2 = (byte)inter_execPtr[2];
- stackPos2 = (byte)inter_execPtr[3];
- descIndex = (byte)inter_execPtr[4];
+ _vm->_global->inter_execPtr++;
+ count = *_vm->_global->inter_execPtr++;
+ ghandleMouse = _vm->_global->inter_execPtr[0];
+ deltaTime = 1000 * (byte)_vm->_global->inter_execPtr[1];
+ descIndex2 = (byte)_vm->_global->inter_execPtr[2];
+ stackPos2 = (byte)_vm->_global->inter_execPtr[3];
+ descIndex = (byte)_vm->_global->inter_execPtr[4];
if (stackPos2 != 0 || descIndex != 0)
deltaTime /= 100;
timeVal = deltaTime;
- inter_execPtr += 6;
+ _vm->_global->inter_execPtr += 6;
- startIP = inter_execPtr;
+ startIP = _vm->_global->inter_execPtr;
WRITE_VAR(16, 0);
var_22 = 0;
index = 0;
@@ -1155,31 +1158,31 @@ void game_collisionsBlock(void) {
for (curCmd = 0; curCmd < count; curCmd++) {
array[curCmd] = 0;
- cmd = *inter_execPtr++;
+ cmd = *_vm->_global->inter_execPtr++;
if ((cmd & 0x40) != 0) {
cmd -= 0x40;
- cmdHigh = (byte)*inter_execPtr;
- inter_execPtr++;
+ cmdHigh = (byte)*_vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr++;
cmdHigh <<= 8;
} else {
cmdHigh = 0;
}
if ((cmd & 0x80) != 0) {
- left = parse_parseValExpr();
- top = parse_parseValExpr();
- width = parse_parseValExpr();
- height = parse_parseValExpr();
+ left = _vm->_parse->parseValExpr();
+ top = _vm->_parse->parseValExpr();
+ width = _vm->_parse->parseValExpr();
+ height = _vm->_parse->parseValExpr();
} else {
- left = inter_load16();
- top = inter_load16();
- width = inter_load16();
- height = inter_load16();
+ left = _vm->_inter->load16();
+ top = _vm->_inter->load16();
+ width = _vm->_inter->load16();
+ height = _vm->_inter->load16();
}
cmd &= 0x7f;
- debug(4, "game_collisionsBlock(%d)", cmd);
+ debug(4, "collisionsBlock(%d)", cmd);
switch (cmd) {
case 3:
@@ -1191,41 +1194,41 @@ void game_collisionsBlock(void) {
case 9:
case 10:
- util_waitKey();
+ _vm->_util->waitKey();
var_22 = 1;
- key = parse_parseVarIndex();
- descArray[index].fontIndex = inter_load16();
- descArray[index].backColor = *inter_execPtr++;
- descArray[index].frontColor = *inter_execPtr++;
+ key = _vm->_parse->parseVarIndex();
+ descArray[index].fontIndex = _vm->_inter->load16();
+ descArray[index].backColor = *_vm->_global->inter_execPtr++;
+ descArray[index].frontColor = *_vm->_global->inter_execPtr++;
if (cmd < 5 || cmd > 8) {
descArray[index].ptr = 0;
} else {
- descArray[index].ptr = inter_execPtr + 2;
- inter_execPtr += inter_load16();
+ descArray[index].ptr = _vm->_global->inter_execPtr + 2;
+ _vm->_global->inter_execPtr += _vm->_inter->load16();
}
if (left == -1)
break;
if ((cmd & 1) == 0) {
- game_addNewCollision(curCmd + 0x8000, left,
+ addNewCollision(curCmd + 0x8000, left,
top,
left +
width *
- draw_fonts[descArray[index].fontIndex]->
+ _vm->_draw->fonts[descArray[index].fontIndex]->
itemWidth - 1, top + height - 1, cmd, key,
0,
- inter_execPtr - (char *)game_totFileData);
+ _vm->_global->inter_execPtr - (char *)totFileData);
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
} else {
- game_addNewCollision(curCmd + 0x8000, left,
+ addNewCollision(curCmd + 0x8000, left,
top,
left +
width *
- draw_fonts[descArray[index].fontIndex]->
+ _vm->_draw->fonts[descArray[index].fontIndex]->
itemWidth - 1, top + height - 1, cmd, key,
0, 0);
}
@@ -1233,18 +1236,18 @@ void game_collisionsBlock(void) {
break;
case 21:
- key = inter_load16();
- array[curCmd] = inter_load16();
- flags = inter_load16() & 3;
+ key = _vm->_inter->load16();
+ array[curCmd] = _vm->_inter->load16();
+ flags = _vm->_inter->load16() & 3;
- game_addNewCollision(curCmd + 0x8000, left, top,
+ addNewCollision(curCmd + 0x8000, left, top,
left + width - 1,
top + height - 1,
(flags << 4) + cmdHigh + 2, key,
- inter_execPtr - (char *)game_totFileData, 0);
+ _vm->_global->inter_execPtr - (char *)totFileData, 0);
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
break;
case 20:
@@ -1252,97 +1255,97 @@ void game_collisionsBlock(void) {
// Fall through to case 2
case 2:
- key = inter_load16();
- array[curCmd] = inter_load16();
- flags = inter_load16() & 3;
+ key = _vm->_inter->load16();
+ array[curCmd] = _vm->_inter->load16();
+ flags = _vm->_inter->load16() & 3;
- game_addNewCollision(curCmd + 0x8000, left, top,
+ addNewCollision(curCmd + 0x8000, left, top,
left + width - 1,
top + height - 1,
(flags << 4) + cmdHigh + 2, key, 0,
- inter_execPtr - (char *)game_totFileData);
+ _vm->_global->inter_execPtr - (char *)totFileData);
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
break;
case 0:
- inter_execPtr += 6;
- startIP = inter_execPtr;
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 6;
+ startIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
key = curCmd + 0xA000;
- game_addNewCollision(curCmd + 0x8000, left, top,
+ addNewCollision(curCmd + 0x8000, left, top,
left + width - 1,
top + height - 1,
cmd + cmdHigh, key,
- startIP - (char *)game_totFileData,
- inter_execPtr - (char *)game_totFileData);
+ startIP - (char *)totFileData,
+ _vm->_global->inter_execPtr - (char *)totFileData);
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
break;
case 1:
- key = inter_load16();
- array[curCmd] = inter_load16();
- flags = inter_load16() & 3;
+ key = _vm->_inter->load16();
+ array[curCmd] = _vm->_inter->load16();
+ flags = _vm->_inter->load16() & 3;
- startIP = inter_execPtr;
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ startIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
if (key == 0)
key = curCmd + 0xa000;
- game_addNewCollision(curCmd + 0x8000, left, top,
+ addNewCollision(curCmd + 0x8000, left, top,
left + width - 1,
top + height - 1,
(flags << 4) + cmd + cmdHigh, key,
- startIP - (char *)game_totFileData,
- inter_execPtr - (char *)game_totFileData);
+ startIP - (char *)totFileData,
+ _vm->_global->inter_execPtr - (char *)totFileData);
- inter_execPtr += 2;
- inter_execPtr += READ_LE_UINT16(inter_execPtr);
+ _vm->_global->inter_execPtr += 2;
+ _vm->_global->inter_execPtr += READ_LE_UINT16(_vm->_global->inter_execPtr);
break;
}
}
- game_forceHandleMouse = 0;
- util_waitKey();
+ forceHandleMouse = 0;
+ _vm->_util->waitKey();
do {
if (var_22 != 0) {
key =
- game_multiEdit(deltaTime, index, &curEditIndex,
+ multiEdit(deltaTime, index, &curEditIndex,
descArray);
if (key == 0x1c0d) {
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
- if ((game_collisionAreas[i].flags & 1) != 0)
+ if ((collisionAreas[i].flags & 1) != 0)
continue;
- if ((game_collisionAreas[i].flags & 0x0f) <= 2)
+ if ((collisionAreas[i].flags & 0x0f) <= 2)
continue;
- collResId = game_collisionAreas[i].id;
- game_activeCollResId = collResId;
+ collResId = collisionAreas[i].id;
+ activeCollResId = collResId;
collResId &= 0x7fff;
- game_activeCollIndex = i;
+ activeCollIndex = i;
break;
}
break;
}
} else {
key =
- game_checkCollisions(game_handleMouse, -deltaTime,
- &game_activeCollResId, &game_activeCollIndex);
+ checkCollisions(ghandleMouse, -deltaTime,
+ &activeCollResId, &activeCollIndex);
}
if ((key & 0xff) >= ' ' && (key & 0xff) <= 0xff &&
@@ -1350,44 +1353,44 @@ void game_collisionsBlock(void) {
key = '0' + (((key >> 8) - 1) % 10) + (key & 0xff00);
}
- if (game_activeCollResId == 0) {
+ if (activeCollResId == 0) {
if (key != 0) {
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].
+ if ((collisionAreas[i].
id & 0x8000) == 0)
continue;
- if (game_collisionAreas[i].key == key
- || game_collisionAreas[i].key ==
+ if (collisionAreas[i].key == key
+ || collisionAreas[i].key ==
0x7fff) {
- game_activeCollResId =
- game_collisionAreas[i].id;
- game_activeCollIndex = i;
+ activeCollResId =
+ collisionAreas[i].id;
+ activeCollIndex = i;
break;
}
}
- if (game_activeCollResId == 0) {
+ if (activeCollResId == 0) {
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
- if ((game_collisionAreas[i].key & 0xff00) != 0)
+ if ((collisionAreas[i].key & 0xff00) != 0)
continue;
- if (game_collisionAreas[i].key == 0)
+ if (collisionAreas[i].key == 0)
continue;
- if (game_adjustKey(key & 0xff) == game_adjustKey(game_collisionAreas[i].key) || game_collisionAreas[i].key == 0x7fff) {
- game_activeCollResId = game_collisionAreas[i].id;
- game_activeCollIndex = i;
+ if (adjustKey(key & 0xff) == adjustKey(collisionAreas[i].key) || collisionAreas[i].key == 0x7fff) {
+ activeCollResId = collisionAreas[i].id;
+ activeCollIndex = i;
break;
}
}
@@ -1397,9 +1400,9 @@ void game_collisionsBlock(void) {
if (deltaTime != 0 && VAR(16) == 0) {
if (stackPos2 != 0) {
collStackPos = 0;
- collPtr = game_collisionAreas;
+ collPtr = collisionAreas;
- for (i = 0, collPtr = game_collisionAreas; collPtr->left != -1; i++, collPtr++) {
+ for (i = 0, collPtr = collisionAreas; collPtr->left != -1; i++, collPtr++) {
if ((collPtr->id & 0x8000) == 0)
continue;
@@ -1407,64 +1410,64 @@ void game_collisionsBlock(void) {
if (collStackPos != stackPos2)
continue;
- game_activeCollResId = collPtr->id;
- game_activeCollIndex = i;
- WRITE_VAR(2, inter_mouseX);
- WRITE_VAR(3, inter_mouseY);
- WRITE_VAR(4, game_mouseButtons);
- WRITE_VAR(16, array[(uint16)game_activeCollResId & ~0x8000]);
+ activeCollResId = collPtr->id;
+ activeCollIndex = i;
+ WRITE_VAR(2, _vm->_global->inter_mouseX);
+ WRITE_VAR(3, _vm->_global->inter_mouseY);
+ WRITE_VAR(4, mouseButtons);
+ WRITE_VAR(16, array[(uint16)activeCollResId & ~0x8000]);
if (collPtr->funcLeave != 0) {
- timeKey = util_getTimeKey();
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData + collPtr->funcLeave;
- game_shouldPushColls = 1;
- savedCollStackSize = game_collStackSize;
- inter_funcBlock(0);
+ timeKey = _vm->_util->getTimeKey();
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData + collPtr->funcLeave;
+ shouldPushColls = 1;
+ savedCollStackSize = collStackSize;
+ _vm->_inter->funcBlock(0);
- if (savedCollStackSize != game_collStackSize)
- game_popCollisions();
+ if (savedCollStackSize != collStackSize)
+ popCollisions();
- game_shouldPushColls = 0;
- inter_execPtr = savedIP;
- deltaTime = timeVal - (util_getTimeKey() - timeKey);
+ shouldPushColls = 0;
+ _vm->_global->inter_execPtr = savedIP;
+ deltaTime = timeVal - (_vm->_util->getTimeKey() - timeKey);
if (deltaTime < 2)
deltaTime = 2;
}
if (VAR(16) == 0)
- game_activeCollResId = 0;
+ activeCollResId = 0;
break;
}
} else {
if (descIndex != 0) {
counter = 0;
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
counter++;
if (counter != descIndex)
continue;
- game_activeCollResId = game_collisionAreas[i].id;
- game_activeCollIndex = i;
+ activeCollResId = collisionAreas[i].id;
+ activeCollIndex = i;
break;
}
} else {
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
- game_activeCollResId = game_collisionAreas[i].id;
- game_activeCollIndex = i;
+ activeCollResId = collisionAreas[i].id;
+ activeCollIndex = i;
break;
}
}
@@ -1473,18 +1476,18 @@ void game_collisionsBlock(void) {
if (descIndex2 != 0) {
counter = 0;
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
counter++;
if (counter != descIndex2)
continue;
- game_activeCollResId = game_collisionAreas[i].id;
- game_activeCollIndex = i;
+ activeCollResId = collisionAreas[i].id;
+ activeCollIndex = i;
break;
}
}
@@ -1492,86 +1495,86 @@ void game_collisionsBlock(void) {
}
}
- if (game_activeCollResId == 0)
+ if (activeCollResId == 0)
continue;
- if (game_collisionAreas[game_activeCollIndex].funcLeave != 0)
+ if (collisionAreas[activeCollIndex].funcLeave != 0)
continue;
- WRITE_VAR(2, inter_mouseX);
- WRITE_VAR(3, inter_mouseY);
- WRITE_VAR(4, game_mouseButtons);
- WRITE_VAR(16, array[(uint16)game_activeCollResId & ~0x8000]);
+ WRITE_VAR(2, _vm->_global->inter_mouseX);
+ WRITE_VAR(3, _vm->_global->inter_mouseY);
+ WRITE_VAR(4, mouseButtons);
+ WRITE_VAR(16, array[(uint16)activeCollResId & ~0x8000]);
- if (game_collisionAreas[game_activeCollIndex].funcEnter != 0) {
- savedIP = inter_execPtr;
- inter_execPtr = (char *)game_totFileData +
- game_collisionAreas[game_activeCollIndex].
+ if (collisionAreas[activeCollIndex].funcEnter != 0) {
+ savedIP = _vm->_global->inter_execPtr;
+ _vm->_global->inter_execPtr = (char *)totFileData +
+ collisionAreas[activeCollIndex].
funcEnter;
- game_shouldPushColls = 1;
+ shouldPushColls = 1;
- collStackPos = game_collStackSize;
- inter_funcBlock(0);
- if (collStackPos != game_collStackSize)
- game_popCollisions();
- game_shouldPushColls = 0;
- inter_execPtr = savedIP;
+ collStackPos = collStackSize;
+ _vm->_inter->funcBlock(0);
+ if (collStackPos != collStackSize)
+ popCollisions();
+ shouldPushColls = 0;
+ _vm->_global->inter_execPtr = savedIP;
}
WRITE_VAR(16, 0);
- game_activeCollResId = 0;
+ activeCollResId = 0;
}
- while (game_activeCollResId == 0 && inter_terminate == 0);
+ while (activeCollResId == 0 && _vm->_inter->terminate == 0);
- if (((uint16)game_activeCollResId & ~0x8000) == collResId) {
+ if (((uint16)activeCollResId & ~0x8000) == collResId) {
collStackPos = 0;
var_24 = 0;
var_26 = 1;
for (i = 0; i < 250; i++) {
- if (game_collisionAreas[i].left == -1)
+ if (collisionAreas[i].left == -1)
continue;
- if ((game_collisionAreas[i].id & 0x8000) == 0)
+ if ((collisionAreas[i].id & 0x8000) == 0)
continue;
- if ((game_collisionAreas[i].flags & 0x0f) < 3)
+ if ((collisionAreas[i].flags & 0x0f) < 3)
continue;
- if ((game_collisionAreas[i].flags & 0x0f) > 10)
+ if ((collisionAreas[i].flags & 0x0f) > 10)
continue;
- if ((game_collisionAreas[i].flags & 0x0f) > 8) {
- strcpy(game_tempStr,
- inter_variables + game_collisionAreas[i].key);
+ if ((collisionAreas[i].flags & 0x0f) > 8) {
+ strcpy(tempStr,
+ _vm->_global->inter_variables + collisionAreas[i].key);
while ((pos =
- util_strstr(" ", game_tempStr)) != 0) {
- util_cutFromStr(game_tempStr, pos - 1, 1);
- pos = util_strstr(" ", game_tempStr);
+ _vm->_util->strstr(" ", tempStr)) != 0) {
+ _vm->_util->cutFromStr(tempStr, pos - 1, 1);
+ pos = _vm->_util->strstr(" ", tempStr);
}
- strcpy(inter_variables + game_collisionAreas[i].key, game_tempStr);
+ strcpy(_vm->_global->inter_variables + collisionAreas[i].key, tempStr);
}
- if ((game_collisionAreas[i].flags & 0x0f) >= 5 &&
- (game_collisionAreas[i].flags & 0x0f) <= 8) {
+ if ((collisionAreas[i].flags & 0x0f) >= 5 &&
+ (collisionAreas[i].flags & 0x0f) <= 8) {
str = descArray[var_24].ptr;
- strcpy(game_tempStr, inter_variables + game_collisionAreas[i].key);
+ strcpy(tempStr, _vm->_global->inter_variables + collisionAreas[i].key);
- if ((game_collisionAreas[i].flags & 0x0f) < 7)
- util_prepareStr(game_tempStr);
+ if ((collisionAreas[i].flags & 0x0f) < 7)
+ _vm->_util->prepareStr(tempStr);
pos = 0;
do {
- strcpy(game_collStr, str);
+ strcpy(collStr, str);
pos += strlen(str) + 1;
str += strlen(str) + 1;
- if ((game_collisionAreas[i].flags & 0x0f) < 7)
- util_prepareStr(game_collStr);
+ if ((collisionAreas[i].flags & 0x0f) < 7)
+ _vm->_util->prepareStr(collStr);
- if (strcmp(game_tempStr, game_collStr) == 0) {
+ if (strcmp(tempStr, collStr) == 0) {
VAR(17)++;
WRITE_VAR(17 + var_26, 1);
break;
@@ -1592,137 +1595,137 @@ void game_collisionsBlock(void) {
}
savedIP = 0;
- if (inter_terminate == 0) {
- savedIP = (char *)game_totFileData +
- game_collisionAreas[game_activeCollIndex].funcLeave;
+ if (_vm->_inter->terminate == 0) {
+ savedIP = (char *)totFileData +
+ collisionAreas[activeCollIndex].funcLeave;
- WRITE_VAR(2, inter_mouseX);
- WRITE_VAR(3, inter_mouseY);
- WRITE_VAR(4, game_mouseButtons);
+ WRITE_VAR(2, _vm->_global->inter_mouseX);
+ WRITE_VAR(3, _vm->_global->inter_mouseY);
+ WRITE_VAR(4, mouseButtons);
if (VAR(16) == 0) {
- WRITE_VAR(16, array[(uint16)game_activeCollResId & ~0x8000]);
+ WRITE_VAR(16, array[(uint16)activeCollResId & ~0x8000]);
}
}
for (curCmd = 0; curCmd < count; curCmd++) {
- game_freeCollision(curCmd + 0x8000);
+ freeCollision(curCmd + 0x8000);
}
- inter_execPtr = savedIP;
+ _vm->_global->inter_execPtr = savedIP;
}
-void game_prepareStart(void) {
+void Game::prepareStart(void) {
int16 i;
- game_clearCollisions();
+ clearCollisions();
- pPaletteDesc->unused2 = draw_unusedPalette2;
- pPaletteDesc->unused1 = draw_unusedPalette1;
- pPaletteDesc->vgaPal = draw_vgaPalette;
+ _vm->_global->pPaletteDesc->unused2 = _vm->_draw->unusedPalette2;
+ _vm->_global->pPaletteDesc->unused1 = _vm->_draw->unusedPalette1;
+ _vm->_global->pPaletteDesc->vgaPal = _vm->_draw->vgaPalette;
- vid_setFullPalette(pPaletteDesc);
+ _vm->_video->setFullPalette(_vm->_global->pPaletteDesc);
- draw_backSurface = vid_initSurfDesc(videoMode, 320, 200, 0);
+ _vm->_draw->backSurface = _vm->_video->initSurfDesc(_vm->_global->videoMode, 320, 200, 0);
- vid_fillRect(draw_backSurface, 0, 0, 319, 199, 1);
- draw_frontSurface = pPrimarySurfDesc;
- vid_fillRect(draw_frontSurface, 0, 0, 319, 199, 1);
+ _vm->_video->fillRect(_vm->_draw->backSurface, 0, 0, 319, 199, 1);
+ _vm->_draw->frontSurface = _vm->_global->pPrimarySurfDesc;
+ _vm->_video->fillRect(_vm->_draw->frontSurface, 0, 0, 319, 199, 1);
- util_setMousePos(152, 92);
+ _vm->_util->setMousePos(152, 92);
- draw_cursorX = 152;
- inter_mouseX = 152;
+ _vm->_draw->cursorX = 152;
+ _vm->_global->inter_mouseX = 152;
- draw_cursorY = 92;
- inter_mouseY = 92;
- draw_invalidatedCount = 0;
- draw_noInvalidated = 1;
- draw_applyPal = 0;
- draw_paletteCleared = 0;
- draw_cursorWidth = 16;
- draw_cursorHeight = 16;
- draw_transparentCursor = 1;
+ _vm->_draw->cursorY = 92;
+ _vm->_global->inter_mouseY = 92;
+ _vm->_draw->invalidatedCount = 0;
+ _vm->_draw->noInvalidated = 1;
+ _vm->_draw->applyPal = 0;
+ _vm->_draw->paletteCleared = 0;
+ _vm->_draw->cursorWidth = 16;
+ _vm->_draw->cursorHeight = 16;
+ _vm->_draw->transparentCursor = 1;
for (i = 0; i < 40; i++) {
- draw_cursorAnimLow[i] = -1;
- draw_cursorAnimDelays[i] = 0;
- draw_cursorAnimHigh[i] = 0;
+ _vm->_draw->cursorAnimLow[i] = -1;
+ _vm->_draw->cursorAnimDelays[i] = 0;
+ _vm->_draw->cursorAnimHigh[i] = 0;
}
- draw_cursorAnimLow[1] = 0;
- draw_cursorSprites = vid_initSurfDesc(videoMode, 32, 16, 2);
- draw_cursorBack = vid_initSurfDesc(videoMode, 16, 16, 0);
- draw_renderFlags = 0;
- draw_backDeltaX = 0;
- draw_backDeltaY = 0;
+ _vm->_draw->cursorAnimLow[1] = 0;
+ _vm->_draw->cursorSprites = _vm->_video->initSurfDesc(_vm->_global->videoMode, 32, 16, 2);
+ _vm->_draw->cursorBack = _vm->_video->initSurfDesc(_vm->_global->videoMode, 16, 16, 0);
+ _vm->_draw->renderFlags = 0;
+ _vm->_draw->backDeltaX = 0;
+ _vm->_draw->backDeltaY = 0;
- game_startTimeKey = util_getTimeKey();
+ startTimeKey = _vm->_util->getTimeKey();
}
-void game_loadTotFile(char *path) {
+void Game::loadTotFile(char *path) {
int16 handle;
- handle = data_openData(path);
+ handle = _vm->_dataio->openData(path);
if (handle >= 0) {
- data_closeData(handle);
- game_totFileData = data_getData(path);
+ _vm->_dataio->closeData(handle);
+ totFileData = _vm->_dataio->getData(path);
} else {
- game_totFileData = 0;
+ totFileData = 0;
}
}
-void game_loadExtTable(void) {
+void Game::loadExtTable(void) {
int16 count, i;
// Function is correct. [sev]
- game_extHandle = data_openData(game_curExtFile);
- if (game_extHandle < 0)
+ extHandle = _vm->_dataio->openData(curExtFile);
+ if (extHandle < 0)
return;
- data_readData(game_extHandle, (char *)&count, 2);
+ _vm->_dataio->readData(extHandle, (char *)&count, 2);
count = FROM_LE_16(count);
- data_seekData(game_extHandle, 0, 0);
- game_extTable = (Game_ExtTable *)malloc(sizeof(Game_ExtTable)
- + sizeof(Game_ExtItem) * count);
+ _vm->_dataio->seekData(extHandle, 0, 0);
+ extTable = (ExtTable *)malloc(sizeof(ExtTable)
+ + sizeof(ExtItem) * count);
- data_readData(game_extHandle, (char *)&game_extTable->itemsCount, 2);
- game_extTable->itemsCount = FROM_LE_16(game_extTable->itemsCount);
- data_readData(game_extHandle, (char *)&game_extTable->unknown, 1);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->itemsCount, 2);
+ extTable->itemsCount = FROM_LE_16(extTable->itemsCount);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->unknown, 1);
for (i = 0; i < count; i++) {
- data_readData(game_extHandle, (char *)&game_extTable->items[i].offset, 4);
- game_extTable->items[i].offset = FROM_LE_32(game_extTable->items[i].offset);
- data_readData(game_extHandle, (char *)&game_extTable->items[i].size, 2);
- game_extTable->items[i].size = FROM_LE_16(game_extTable->items[i].size);
- data_readData(game_extHandle, (char *)&game_extTable->items[i].width, 2);
- game_extTable->items[i].width = FROM_LE_16(game_extTable->items[i].width);
- data_readData(game_extHandle, (char *)&game_extTable->items[i].height, 2);
- game_extTable->items[i].height = FROM_LE_16(game_extTable->items[i].height);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->items[i].offset, 4);
+ extTable->items[i].offset = FROM_LE_32(extTable->items[i].offset);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->items[i].size, 2);
+ extTable->items[i].size = FROM_LE_16(extTable->items[i].size);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->items[i].width, 2);
+ extTable->items[i].width = FROM_LE_16(extTable->items[i].width);
+ _vm->_dataio->readData(extHandle, (char *)&extTable->items[i].height, 2);
+ extTable->items[i].height = FROM_LE_16(extTable->items[i].height);
}
}
-void game_loadImFile(void) {
+void Game::loadImFile(void) {
char path[20];
int16 handle;
- if (game_totFileData[0x3d] != 0 && game_totFileData[0x3b] == 0)
+ if (totFileData[0x3d] != 0 && totFileData[0x3b] == 0)
return;
strcpy(path, "commun.im1");
- if (game_totFileData[0x3b] != 0)
- path[strlen(path) - 1] = '0' + game_totFileData[0x3b];
+ if (totFileData[0x3b] != 0)
+ path[strlen(path) - 1] = '0' + totFileData[0x3b];
- handle = data_openData(path);
+ handle = _vm->_dataio->openData(path);
if (handle < 0)
return;
- data_closeData(handle);
- game_imFileData = data_getData(path);
+ _vm->_dataio->closeData(handle);
+ imFileData = _vm->_dataio->getData(path);
}
-void game_playTot(int16 skipPlay) {
+void Game::playTot(int16 skipPlay) {
char savedTotName[20];
int16 *oldCaptureCounter;
int16 *oldBreakFrom;
@@ -1738,202 +1741,202 @@ void game_playTot(int16 skipPlay) {
char *savedIP;
int16 i;
- oldNestLevel = inter_nestLevel;
- oldBreakFrom = inter_breakFromLevel;
- oldCaptureCounter = scen_pCaptureCounter;
- savedIP = inter_execPtr;
+ oldNestLevel = _vm->_inter->nestLevel;
+ oldBreakFrom = _vm->_inter->breakFromLevel;
+ oldCaptureCounter = _vm->_scenery->pCaptureCounter;
+ savedIP = _vm->_global->inter_execPtr;
- inter_nestLevel = &nestLevel;
- inter_breakFromLevel = &breakFrom;
- scen_pCaptureCounter = &captureCounter;
- strcpy(savedTotName, game_curTotFile);
+ _vm->_inter->nestLevel = &nestLevel;
+ _vm->_inter->breakFromLevel = &breakFrom;
+ _vm->_scenery->pCaptureCounter = &captureCounter;
+ strcpy(savedTotName, curTotFile);
if (skipPlay == 0) {
while (1) {
for (i = 0; i < 4; i++) {
- draw_fontToSprite[i].sprite = -1;
- draw_fontToSprite[i].base = -1;
- draw_fontToSprite[i].width = -1;
- draw_fontToSprite[i].height = -1;
+ _vm->_draw->fontToSprite[i].sprite = -1;
+ _vm->_draw->fontToSprite[i].base = -1;
+ _vm->_draw->fontToSprite[i].width = -1;
+ _vm->_draw->fontToSprite[i].height = -1;
}
- cd_stopPlaying();
- draw_animateCursor(4);
- inter_initControlVars();
- mult_initAll();
- mult_zeroMultData();
+ _vm->_cdrom->stopPlaying();
+ _vm->_draw->animateCursor(4);
+ _vm->_inter->initControlVars();
+ _vm->_mult->initAll();
+ _vm->_mult->zeroMultData();
for (i = 0; i < 20; i++)
- draw_spritesArray[i] = 0;
+ _vm->_draw->spritesArray[i] = 0;
- draw_spritesArray[20] = draw_frontSurface;
- draw_spritesArray[21] = draw_backSurface;
- draw_spritesArray[23] = draw_cursorSprites;
+ _vm->_draw->spritesArray[20] = _vm->_draw->frontSurface;
+ _vm->_draw->spritesArray[21] = _vm->_draw->backSurface;
+ _vm->_draw->spritesArray[23] = _vm->_draw->cursorSprites;
for (i = 0; i < 20; i++)
- game_soundSamples[i] = 0;
+ soundSamples[i] = 0;
- game_totTextData = 0;
- game_totResourceTable = 0;
- game_imFileData = 0;
- game_extTable = 0;
- game_extHandle = -1;
+ totTextData = 0;
+ totResourceTable = 0;
+ imFileData = 0;
+ extTable = 0;
+ extHandle = -1;
needFreeResTable = 1;
needTextFree = 1;
- game_totToLoad[0] = 0;
+ totToLoad[0] = 0;
- if (game_curTotFile[0] == 0 && game_totFileData == 0)
+ if (curTotFile[0] == 0 && totFileData == 0)
break;
- game_loadTotFile(game_curTotFile);
- if (game_totFileData == 0) {
- draw_blitCursor();
+ loadTotFile(curTotFile);
+ if (totFileData == 0) {
+ _vm->_draw->blitCursor();
break;
}
- strcpy(game_curImaFile, game_curTotFile);
- strcpy(game_curExtFile, game_curTotFile);
+ strcpy(curImaFile, curTotFile);
+ strcpy(curExtFile, curTotFile);
- game_curImaFile[strlen(game_curImaFile) - 4] = 0;
- strcat(game_curImaFile, ".ima");
+ curImaFile[strlen(curImaFile) - 4] = 0;
+ strcat(curImaFile, ".ima");
- game_curExtFile[strlen(game_curExtFile) - 4] = 0;
- strcat(game_curExtFile, ".ext");
+ curExtFile[strlen(curExtFile) - 4] = 0;
+ strcat(curExtFile, ".ext");
- debug(4, "IMA: %s", game_curImaFile);
- debug(4, "EXT: %s", game_curExtFile);
+ debug(4, "IMA: %s", curImaFile);
+ debug(4, "EXT: %s", curExtFile);
- filePtr = (char *)game_totFileData + 0x30;
+ filePtr = (char *)totFileData + 0x30;
if (READ_LE_UINT32(filePtr) != (uint32)-1) {
- curPtr = game_totFileData;
- game_totTextData =
- (Game_TotTextTable *) (curPtr +
- READ_LE_UINT32((char *)game_totFileData + 0x30));
+ curPtr = totFileData;
+ totTextData =
+ (TotTextTable *) (curPtr +
+ READ_LE_UINT32((char *)totFileData + 0x30));
- game_totTextData->itemsCount = (int16)READ_LE_UINT16(&game_totTextData->itemsCount);
+ totTextData->itemsCount = (int16)READ_LE_UINT16(&totTextData->itemsCount);
- for (i = 0; i < game_totTextData->itemsCount; ++i) {
- game_totTextData->items[i].offset = (int16)READ_LE_UINT16(&game_totTextData->items[i].offset);
- game_totTextData->items[i].size = (int16)READ_LE_UINT16(&game_totTextData->items[i].size);
+ for (i = 0; i < totTextData->itemsCount; ++i) {
+ totTextData->items[i].offset = (int16)READ_LE_UINT16(&totTextData->items[i].offset);
+ totTextData->items[i].size = (int16)READ_LE_UINT16(&totTextData->items[i].size);
}
needTextFree = 0;
}
- filePtr = (char *)game_totFileData + 0x34;
+ filePtr = (char *)totFileData + 0x34;
if (READ_LE_UINT32(filePtr) != (uint32)-1) {
- curPtr = game_totFileData;
+ curPtr = totFileData;
- game_totResourceTable =
- (Game_TotResTable *)(curPtr +
- READ_LE_UINT32((char *)game_totFileData + 0x34));
+ totResourceTable =
+ (TotResTable *)(curPtr +
+ READ_LE_UINT32((char *)totFileData + 0x34));
- game_totResourceTable->itemsCount = (int16)READ_LE_UINT16(&game_totResourceTable->itemsCount);
+ totResourceTable->itemsCount = (int16)READ_LE_UINT16(&totResourceTable->itemsCount);
- for (i = 0; i < game_totResourceTable->itemsCount; ++i) {
- game_totResourceTable->items[i].offset = (int32)READ_LE_UINT32(&game_totResourceTable->items[i].offset);
- game_totResourceTable->items[i].size = (int16)READ_LE_UINT16(&game_totResourceTable->items[i].size);
- game_totResourceTable->items[i].width = (int16)READ_LE_UINT16(&game_totResourceTable->items[i].width);
- game_totResourceTable->items[i].height = (int16)READ_LE_UINT16(&game_totResourceTable->items[i].height);
+ for (i = 0; i < totResourceTable->itemsCount; ++i) {
+ totResourceTable->items[i].offset = (int32)READ_LE_UINT32(&totResourceTable->items[i].offset);
+ totResourceTable->items[i].size = (int16)READ_LE_UINT16(&totResourceTable->items[i].size);
+ totResourceTable->items[i].width = (int16)READ_LE_UINT16(&totResourceTable->items[i].width);
+ totResourceTable->items[i].height = (int16)READ_LE_UINT16(&totResourceTable->items[i].height);
}
needFreeResTable = 0;
}
- game_loadImFile();
- game_loadExtTable();
+ loadImFile();
+ loadExtTable();
- inter_animDataSize = READ_LE_UINT16((char *)game_totFileData + 0x38);
- if (inter_variables == 0) {
- variablesCount = READ_LE_UINT32((char *)game_totFileData + 0x2c);
- inter_variables = (char *)malloc(variablesCount * 4);
+ _vm->_global->inter_animDataSize = READ_LE_UINT16((char *)totFileData + 0x38);
+ if (_vm->_global->inter_variables == 0) {
+ variablesCount = READ_LE_UINT32((char *)totFileData + 0x2c);
+ _vm->_global->inter_variables = (char *)malloc(variablesCount * 4);
for (i = 0; i < variablesCount; i++)
WRITE_VAR(i, 0);
}
- inter_execPtr = (char *)game_totFileData;
- inter_execPtr += READ_LE_UINT32((char *)game_totFileData + 0x64);
+ _vm->_global->inter_execPtr = (char *)totFileData;
+ _vm->_global->inter_execPtr += READ_LE_UINT32((char *)totFileData + 0x64);
- inter_renewTimeInVars();
+ _vm->_inter->renewTimeInVars();
- WRITE_VAR(13, useMouse);
- WRITE_VAR(14, soundFlags);
- WRITE_VAR(15, videoMode);
- WRITE_VAR(16, language);
+ WRITE_VAR(13, _vm->_global->useMouse);
+ WRITE_VAR(14, _vm->_global->soundFlags);
+ WRITE_VAR(15, _vm->_global->videoMode);
+ WRITE_VAR(16, _vm->_global->language);
- inter_callSub(2);
+ _vm->_inter->callSub(2);
- if (game_totToLoad[0] != 0)
- inter_terminate = 0;
+ if (totToLoad[0] != 0)
+ _vm->_inter->terminate = 0;
- variablesCount = READ_LE_UINT32((char *)game_totFileData + 0x2c);
- draw_blitInvalidated();
- free(game_totFileData);
- game_totFileData = 0;
+ variablesCount = READ_LE_UINT32((char *)totFileData + 0x2c);
+ _vm->_draw->blitInvalidated();
+ free(totFileData);
+ totFileData = 0;
if (needTextFree)
- free(game_totTextData);
- game_totTextData = 0;
+ free(totTextData);
+ totTextData = 0;
if (needFreeResTable)
- free(game_totResourceTable);
- game_totResourceTable = 0;
+ free(totResourceTable);
+ totResourceTable = 0;
- free(game_imFileData);
- game_imFileData = 0;
+ free(imFileData);
+ imFileData = 0;
- free(game_extTable);
- game_extTable = 0;
+ free(extTable);
+ extTable = 0;
- if (game_extHandle >= 0)
- data_closeData(game_extHandle);
+ if (extHandle >= 0)
+ _vm->_dataio->closeData(extHandle);
- game_extHandle = -1;
+ extHandle = -1;
- for (i = 0; i < *scen_pCaptureCounter; i++)
- game_capturePop(0);
+ for (i = 0; i < *_vm->_scenery->pCaptureCounter; i++)
+ capturePop(0);
- mult_checkFreeMult();
- mult_freeAll();
+ _vm->_mult->checkFreeMult();
+ _vm->_mult->freeAll();
for (i = 0; i < 20; i++) {
- if (draw_spritesArray[i] != 0)
- vid_freeSurfDesc(draw_spritesArray[i]);
- draw_spritesArray[i] = 0;
+ if (_vm->_draw->spritesArray[i] != 0)
+ _vm->_video->freeSurfDesc(_vm->_draw->spritesArray[i]);
+ _vm->_draw->spritesArray[i] = 0;
}
- snd_stopSound(0);
+ _vm->_snd->stopSound(0);
for (i = 0; i < 20; i++)
- game_freeSoundSlot(i);
+ freeSoundSlot(i);
- if (game_totToLoad[0] == 0)
+ if (totToLoad[0] == 0)
break;
- strcpy(game_curTotFile, game_totToLoad);
+ strcpy(curTotFile, totToLoad);
}
}
- strcpy(game_curTotFile, savedTotName);
+ strcpy(curTotFile, savedTotName);
- inter_nestLevel = oldNestLevel;
- inter_breakFromLevel = oldBreakFrom;
- scen_pCaptureCounter = oldCaptureCounter;
- inter_execPtr = savedIP;
+ _vm->_inter->nestLevel = oldNestLevel;
+ _vm->_inter->breakFromLevel = oldBreakFrom;
+ _vm->_scenery->pCaptureCounter = oldCaptureCounter;
+ _vm->_global->inter_execPtr = savedIP;
}
-void game_start(void) {
- game_collisionAreas = (Game_Collision *)malloc(250 * sizeof(Game_Collision));
- game_prepareStart();
- game_playTot(0);
+void Game::start(void) {
+ collisionAreas = (Collision *)malloc(250 * sizeof(Collision));
+ prepareStart();
+ playTot(0);
- free(game_collisionAreas);
+ free(collisionAreas);
- vid_freeSurfDesc(draw_cursorSprites);
- vid_freeSurfDesc(draw_cursorBack);
- vid_freeSurfDesc(draw_backSurface);
+ _vm->_video->freeSurfDesc(_vm->_draw->cursorSprites);
+ _vm->_video->freeSurfDesc(_vm->_draw->cursorBack);
+ _vm->_video->freeSurfDesc(_vm->_draw->backSurface);
}
} // End of namespace Gob