aboutsummaryrefslogtreecommitdiff
path: root/engines/cine
diff options
context:
space:
mode:
authorStrangerke2014-03-22 11:41:22 +0100
committerStrangerke2014-03-22 11:42:06 +0100
commit9dcb5594888797143e8ec3eaee213d3c42f2c558 (patch)
treea05250cdbeed16a224b210a0b079601ca0f1446c /engines/cine
parent3bcc3a6849bcf27a35790581bb4476f9ed2a4355 (diff)
downloadscummvm-rg350-9dcb5594888797143e8ec3eaee213d3c42f2c558.tar.gz
scummvm-rg350-9dcb5594888797143e8ec3eaee213d3c42f2c558.tar.bz2
scummvm-rg350-9dcb5594888797143e8ec3eaee213d3c42f2c558.zip
CINE: Add a safeguard, split makeCommandLine() per game type
Diffstat (limited to 'engines/cine')
-rw-r--r--engines/cine/various.cpp114
-rw-r--r--engines/cine/various.h2
2 files changed, 78 insertions, 38 deletions
diff --git a/engines/cine/various.cpp b/engines/cine/various.cpp
index aa1c22c165..8687699a44 100644
--- a/engines/cine/various.cpp
+++ b/engines/cine/various.cpp
@@ -557,12 +557,20 @@ int16 selectSubObject(int16 x, int16 y, int16 param) {
}
}
+ if (selectedObject >= 20)
+ error("Invalid value for selectedObject: %d", selectedObject);
return objListTab[selectedObject];
}
-// TODO: Make separate functions for Future Wars's and Operation Stealth's version of this function, this is getting too messy
-// TODO: Add support for using the different prepositions for different verbs (Doesn't work currently)
void makeCommandLine() {
+ if (g_cine->getGameType() == Cine::GType_FW)
+ makeFWCommandLine();
+ else
+ makeOSCommandLine();
+}
+
+// TODO: Add support for using the different prepositions for different verbs (Doesn't work currently)
+void makeOSCommandLine() {
uint16 x, y;
commandVar1 = 0;
@@ -578,28 +586,16 @@ void makeCommandLine() {
int16 si;
getMouseData(mouseUpdateStatus, &dummyU16, &x, &y);
-
- if (g_cine->getGameType() == Cine::GType_FW) {
- si = selectSubObject(x, y + 8, -2);
- } else {
- si = selectSubObject(x, y + 8, -subObjectUseTable[playerCommand]);
- }
+ si = selectSubObject(x, y + 8, -subObjectUseTable[playerCommand]);
if (si < 0) {
- if (g_cine->getGameType() == Cine::GType_OS) {
- canUseOnObject = 0;
- } else { // Future Wars
- playerCommand = -1;
- g_cine->_commandBuffer = "";
- }
+ canUseOnObject = 0;
} else {
- if (g_cine->getGameType() == Cine::GType_OS) {
- if (si >= 8000) {
- si -= 8000;
- canUseOnObject = canUseOnItemTable[playerCommand];
- } else {
- canUseOnObject = 0;
- }
+ if (si >= 8000) {
+ si -= 8000;
+ canUseOnObject = canUseOnItemTable[playerCommand];
+ } else {
+ canUseOnObject = 0;
}
commandVar3[0] = si;
@@ -607,27 +603,21 @@ void makeCommandLine() {
g_cine->_commandBuffer += " ";
g_cine->_commandBuffer += g_cine->_objectTable[commandVar3[0]].name;
g_cine->_commandBuffer += " ";
- if (g_cine->getGameType() == Cine::GType_OS) {
- g_cine->_commandBuffer += commandPrepositionTable[playerCommand];
- } else { // Future Wars
- g_cine->_commandBuffer += defaultCommandPreposition;
- }
+ g_cine->_commandBuffer += commandPrepositionTable[playerCommand];
}
}
- if (g_cine->getGameType() == Cine::GType_OS || !(playerCommand != -1 && choiceResultTable[playerCommand] == 2)) {
- if (playerCommand == 2) {
- getMouseData(mouseUpdateStatus, &dummyU16, &x, &y);
- CursorMan.showMouse(false);
- processInventory(x, y + 8);
- playerCommand = -1;
- commandVar1 = 0;
- g_cine->_commandBuffer = "";
- CursorMan.showMouse(true);
- }
+ if (playerCommand == 2) {
+ getMouseData(mouseUpdateStatus, &dummyU16, &x, &y);
+ CursorMan.showMouse(false);
+ processInventory(x, y + 8);
+ playerCommand = -1;
+ commandVar1 = 0;
+ g_cine->_commandBuffer = "";
+ CursorMan.showMouse(true);
}
- if (g_cine->getGameType() == Cine::GType_OS && playerCommand != 2) {
+ if (playerCommand != 2) {
if (playerCommand != -1 && canUseOnObject != 0) { // call use on sub object
int16 si;
@@ -665,7 +655,55 @@ void makeCommandLine() {
}
}
- if (g_cine->getGameType() == Cine::GType_OS || !disableSystemMenu) {
+ isDrawCommandEnabled = 1;
+ renderer->setCommand(g_cine->_commandBuffer);
+}
+
+// TODO: Add support for using the different prepositions for different verbs (Doesn't work currently)
+void makeFWCommandLine() {
+ uint16 x, y;
+
+ commandVar1 = 0;
+ commandVar2 = -10;
+
+ if (playerCommand != -1) {
+ g_cine->_commandBuffer = defaultActionCommand[playerCommand];
+ } else {
+ g_cine->_commandBuffer = "";
+ }
+
+ if ((playerCommand != -1) && (choiceResultTable[playerCommand] == 2)) { // need object selection?
+ int16 si;
+
+ getMouseData(mouseUpdateStatus, &dummyU16, &x, &y);
+ si = selectSubObject(x, y + 8, -2);
+
+ if (si < 0) {
+ playerCommand = -1;
+ g_cine->_commandBuffer = "";
+ } else {
+ commandVar3[0] = si;
+ commandVar1 = 1;
+ g_cine->_commandBuffer += " ";
+ g_cine->_commandBuffer += g_cine->_objectTable[commandVar3[0]].name;
+ g_cine->_commandBuffer += " ";
+ g_cine->_commandBuffer += defaultCommandPreposition;
+ }
+ }
+
+ if (!(playerCommand != -1 && choiceResultTable[playerCommand] == 2)) {
+ if (playerCommand == 2) {
+ getMouseData(mouseUpdateStatus, &dummyU16, &x, &y);
+ CursorMan.showMouse(false);
+ processInventory(x, y + 8);
+ playerCommand = -1;
+ commandVar1 = 0;
+ g_cine->_commandBuffer = "";
+ CursorMan.showMouse(true);
+ }
+ }
+
+ if (!disableSystemMenu) {
isDrawCommandEnabled = 1;
renderer->setCommand(g_cine->_commandBuffer);
}
diff --git a/engines/cine/various.h b/engines/cine/various.h
index 04f2d47743..eb6312997d 100644
--- a/engines/cine/various.h
+++ b/engines/cine/various.h
@@ -37,6 +37,8 @@ void initLanguage(Common::Language lang);
int16 makeMenuChoice(const CommandeType commandList[], uint16 height, uint16 X, uint16 Y, uint16 width, bool recheckValue = false);
void makeCommandLine();
+void makeFWCommandLine();
+void makeOSCommandLine();
void makeActionMenu();
void waitPlayerInput();
void setTextWindow(uint16 param1, uint16 param2, uint16 param3, uint16 param4);