aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStrangerke2012-03-24 15:19:54 +0100
committerStrangerke2012-04-06 08:23:48 +0200
commit7b94de6408f6c83287870ceb137471f2055f76f9 (patch)
treeaba847ecdf47cd95bafab801a69d8ae951f44d71
parenta87b992e8dd144c869db8498925662119f822d20 (diff)
downloadscummvm-rg350-7b94de6408f6c83287870ceb137471f2055f76f9.tar.gz
scummvm-rg350-7b94de6408f6c83287870ceb137471f2055f76f9.tar.bz2
scummvm-rg350-7b94de6408f6c83287870ceb137471f2055f76f9.zip
MORTEVIELLE: Get rid of mor.cpp
-rw-r--r--engines/mortevielle/actions.cpp117
-rw-r--r--engines/mortevielle/dialogs.cpp5
-rw-r--r--engines/mortevielle/menu.cpp37
-rw-r--r--engines/mortevielle/menu.h3
-rw-r--r--engines/mortevielle/module.mk1
-rw-r--r--engines/mortevielle/mor.cpp618
-rw-r--r--engines/mortevielle/mor.h82
-rw-r--r--engines/mortevielle/mortevielle.cpp596
-rw-r--r--engines/mortevielle/mortevielle.h40
-rw-r--r--engines/mortevielle/outtext.cpp3
-rw-r--r--engines/mortevielle/saveload.cpp1
-rw-r--r--engines/mortevielle/speech.cpp1
12 files changed, 706 insertions, 798 deletions
diff --git a/engines/mortevielle/actions.cpp b/engines/mortevielle/actions.cpp
index 70979becfd..0247eca2e1 100644
--- a/engines/mortevielle/actions.cpp
+++ b/engines/mortevielle/actions.cpp
@@ -28,7 +28,6 @@
#include "common/scummsys.h"
#include "mortevielle/dialogs.h"
#include "mortevielle/menu.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mortevielle.h"
#include "mortevielle/mouse.h"
#include "mortevielle/outtext.h"
@@ -59,17 +58,17 @@ void MortevielleEngine::fctMove() {
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(1);
+ setCoordinates(1);
if (_num == 0)
return;
if (_num == 1) {
_coreVar._currPlace = OWN_ROOM;
- _menu.setDestinationMenuText(OWN_ROOM);
+ _menu.setDestinationText(OWN_ROOM);
} else if (_num == 7) {
_coreVar._currPlace = ATTIC;
- _menu.setDestinationMenuText(ATTIC);
+ _menu.setDestinationText(ATTIC);
}
if (_num != 6)
@@ -86,7 +85,7 @@ void MortevielleEngine::fctMove() {
showMoveMenuAlert();
return;
}
- tsort();
+ exitRoom();
int menuChoice = 1;
while (_menu._moveMenu[menuChoice] != _msg[4])
@@ -97,14 +96,14 @@ void MortevielleEngine::fctMove() {
gotoManorFront();
else if (menuChoice == 2)
checkManorDistance();
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
return;
} else if (_coreVar._currPlace == INSIDE_WELL) {
if (menuChoice == 1)
floodedInWell();
else if (menuChoice == 2)
gotoManorBack();
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
return;
} else if ((_coreVar._currPlace == BUREAU) && (menuChoice == 1))
menuChoice = 6;
@@ -174,7 +173,7 @@ void MortevielleEngine::fctMove() {
if ((menuChoice < 5) || (menuChoice == 13) || (menuChoice == 14))
affrep();
resetRoomVariables(_coreVar._currPlace);
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
}
/**
@@ -226,15 +225,15 @@ void MortevielleEngine::fctTake() {
if ((_anyone) || (_keyPressedEsc))
return;
if (_caff == 3) {
- tcoord(2);
+ setCoordinates(2);
if (_num == 1) {
_crep = 152;
return;
}
}
- tcoord(5);
+ setCoordinates(5);
if ((_num == 0) || ((_num == 1) && (_coreVar._currPlace == CRYPT))) {
- tcoord(8);
+ setCoordinates(8);
if (_num != 0) {
if (_currBitIndex > 0)
_coreVar._faithScore += 3;
@@ -302,14 +301,12 @@ void MortevielleEngine::fctTake() {
* @remarks Originally called 'tsprendre'
*/
void MortevielleEngine::fctInventoryTake() {
- int cx, cy, cz;
-
- cx = 0;
+ int cx = 0;
do {
++cx;
} while (_menu._inventoryMenu[cx] != _msg[4]);
- cz = 0;
- cy = 0;
+ int cz = 0;
+ int cy = 0;
do {
++cy;
if (ord(_coreVar._sjer[cy]) != 0)
@@ -317,7 +314,7 @@ void MortevielleEngine::fctInventoryTake() {
} while (cz != cx);
cz = ord(_coreVar._sjer[cy]);
_coreVar._sjer[cy] = chr(0);
- modinv();
+ _menu.setInventoryText();
avpoing(cz);
_crep = 998;
clearScreenType2();
@@ -333,9 +330,9 @@ void MortevielleEngine::fctLift() {
tfleche();
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(3);
+ setCoordinates(3);
if (_num == 0) {
- tcoord(8);
+ setCoordinates(8);
if (_num != 0) {
if (_currBitIndex > 0)
++_coreVar._faithScore;
@@ -363,13 +360,13 @@ void MortevielleEngine::fctLift() {
*/
void MortevielleEngine::fctRead() {
if (_caff > 99)
- st4(_caff);
+ getReadDescription(_caff);
else {
if (!_syn)
ecr3(getEngineString(S_READ));
tfleche();
if (!(_anyone) && !(_keyPressedEsc)) {
- tcoord(4);
+ setCoordinates(4);
if (_num != 0)
_crep = 107;
}
@@ -384,7 +381,7 @@ void MortevielleEngine::fctSelfRead() {
if (_coreVar._selectedObjectId == 0)
_crep = 186;
else
- st4(_coreVar._selectedObjectId);
+ getReadDescription(_coreVar._selectedObjectId);
}
/**
@@ -403,9 +400,9 @@ void MortevielleEngine::fctLook() {
tfleche();
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(5);
+ setCoordinates(5);
if (_num == 0) {
- tcoord(8);
+ setCoordinates(8);
_crep = 131;
if (_num != 0) {
if (_coreVar._currPlace == ATTIC) {
@@ -484,7 +481,7 @@ void MortevielleEngine::fctSearch() {
const byte r[14] = {123, 104, 123, 131, 131, 123, 104, 131, 123, 123, 106, 123, 123, 107};
if (_caff > 99) {
- st7(_caff);
+ getSearchDescription(_caff);
return;
}
@@ -501,9 +498,9 @@ void MortevielleEngine::fctSearch() {
return;
}
- tcoord(6);
+ setCoordinates(6);
if (_num == 0) {
- tcoord(7);
+ setCoordinates(7);
if (_num != 0) {
int cx = 0;
do {
@@ -526,7 +523,7 @@ void MortevielleEngine::fctSearch() {
_crep = 997;
}
} else {
- tcoord(8);
+ setCoordinates(8);
_crep = 997;
if (_num != 0) {
if (_currBitIndex > 0)
@@ -575,7 +572,7 @@ void MortevielleEngine::fctSearch() {
*/
void MortevielleEngine::fctSelfSearch() {
if (_coreVar._selectedObjectId != 0)
- st7(_coreVar._selectedObjectId);
+ getSearchDescription(_coreVar._selectedObjectId);
else
_crep = 186;
}
@@ -606,7 +603,7 @@ void MortevielleEngine::fctOpen() {
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(7);
+ setCoordinates(7);
if (_num != 0) {
if (_currBitIndex > 0)
_coreVar._faithScore += 2;
@@ -662,7 +659,7 @@ void MortevielleEngine::fctPlace() {
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(8);
+ setCoordinates(8);
if (_num != 0) {
_crep = 999;
if (_caff == 13) {
@@ -719,11 +716,11 @@ void MortevielleEngine::fctPlace() {
_menu.displayMenu();
if (enterPassageFl) {
_coreVar._currPlace = SECRET_PASSAGE;
- _menu.setDestinationMenuText(SECRET_PASSAGE);
+ _menu.setDestinationText(SECRET_PASSAGE);
} else {
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
setPal(14);
- dessin(0);
+ dessin();
aniof(1, 2);
aniof(1, 1);
alertTxt = getString(577);
@@ -790,7 +787,7 @@ void MortevielleEngine::fctTurn() {
tfleche();
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(9);
+ setCoordinates(9);
if (_num != 0) {
_crep = 997;
if ((_coreVar._currPlace == ATTIC) && (_coreVar._atticRodHoleObjectId == 159) && (_coreVar._atticBallHoleObjectId == 141)) {
@@ -825,7 +822,7 @@ void MortevielleEngine::fctSelfHide() {
ecr3(getEngineString(S_HIDE_SELF));
tfleche();
if (!(_anyone) && !(_keyPressedEsc)) {
- tcoord(10);
+ setCoordinates(10);
if (_num == 0)
_hiddenHero = false;
else {
@@ -847,7 +844,7 @@ void MortevielleEngine::fctAttach() {
ecr3(getEngineString(S_TIE));
tfleche();
if (!(_anyone) && !(_keyPressedEsc)) {
- tcoord(8);
+ setCoordinates(8);
_crep = 997;
if ((_num != 0) && (_coreVar._currPlace == WELL)) {
_crep = 999;
@@ -876,7 +873,7 @@ void MortevielleEngine::fctClose() {
_crep = 998;
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(7);
+ setCoordinates(7);
if (_num != 0) {
int cx = 0;
do {
@@ -969,7 +966,7 @@ void MortevielleEngine::fctSelfPut() {
tfleche();
if ((_anyone) || (_keyPressedEsc))
return;
- tcoord(7);
+ setCoordinates(7);
_crep = 124;
if (_num != 0) {
int chai;
@@ -989,7 +986,7 @@ void MortevielleEngine::fctSelfPut() {
}
}
} else {
- tcoord(8);
+ setCoordinates(8);
if (_num != 0) {
_crep = 998;
if (_caff == PURPLE_ROOM) {
@@ -1026,7 +1023,7 @@ void MortevielleEngine::fctSelfPut() {
} else {
_crep = 124;
if (_caff == WELL) {
- tcoord(5);
+ setCoordinates(5);
if (_num != 0)
_crep = 185;
}
@@ -1089,11 +1086,11 @@ void MortevielleEngine::fctEat() {
if ((_coreVar._currPlace > LANDING) && (_coreVar._currPlace < ROOM26)) {
_crep = 148;
} else {
- tsort();
+ exitRoom();
_coreVar._currPlace = DINING_ROOM;
_caff = 10;
resetRoomVariables(_coreVar._currPlace);
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
int j, h, m;
updateHour(j, h, m);
@@ -1129,7 +1126,7 @@ void MortevielleEngine::fctEat() {
void MortevielleEngine::fctEnter() {
if ((_coreVar._currPlace == MANOR_FRONT) || (_coreVar._currPlace == MANOR_BACK)) {
gotoDiningRoom();
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
} else if (_coreVar._currPlace == LANDING)
showMoveMenuAlert();
else if (_ment == 0)
@@ -1140,7 +1137,7 @@ void MortevielleEngine::fctEnter() {
} else {
int z = 0;
if (!_blo)
- z = t11(_ment);
+ z = getPresence(_ment);
if (z != 0) {
if ((_ment == 3) || (_ment == 7))
_crep = 179;
@@ -1173,7 +1170,7 @@ void MortevielleEngine::fctEnter() {
_coreVar._currPlace = _ment;
affrep();
resetRoomVariables(_coreVar._currPlace);
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
_ment = 0;
_savedBitIndex = 0;
_currBitIndex = 0;
@@ -1193,12 +1190,12 @@ void MortevielleEngine::fctSleep() {
return;
}
if (_coreVar._currPlace != OWN_ROOM) {
- tsort();
+ exitRoom();
_coreVar._currPlace = OWN_ROOM;
affrep();
afdes();
resetRoomVariables(_coreVar._currPlace);
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
}
clearScreenType3();
clearScreenType2();
@@ -1253,7 +1250,7 @@ void MortevielleEngine::fctForce() {
* @remarks Originally called 'tsortir'
*/
void MortevielleEngine::fctLeave() {
- tsort();
+ exitRoom();
_crep = 0;
if ((_coreVar._currPlace == MOUNTAIN) || (_coreVar._currPlace == MANOR_FRONT) || (_coreVar._currPlace == MANOR_BACK) || (_coreVar._currPlace == WELL))
_crep = 997;
@@ -1270,7 +1267,7 @@ void MortevielleEngine::fctLeave() {
nextPlace = SECRET_PASSAGE;
_crep = 176;
} else if (_coreVar._currPlace == SECRET_PASSAGE)
- nextPlace = t23coul();
+ nextPlace = checkLeaveSecretPassage();
else if (_coreVar._currPlace == INSIDE_WELL)
nextPlace = WELL;
@@ -1281,7 +1278,7 @@ void MortevielleEngine::fctLeave() {
if (_crep == 0)
_crep = nextPlace;
resetRoomVariables(nextPlace);
- _menu.setDestinationMenuText(nextPlace);
+ _menu.setDestinationText(nextPlace);
}
}
@@ -1298,7 +1295,7 @@ void MortevielleEngine::fctWait() {
++_jh;
prepareRoom();
if (!_blo)
- t11(_coreVar._currPlace);
+ getPresence(_coreVar._currPlace);
if ((_currBitIndex != 0) && (_savedBitIndex == 0)) {
_crep = 998;
if ((_coreVar._currPlace == ATTIC) || (_coreVar._currPlace == CELLAR))
@@ -1357,7 +1354,7 @@ void MortevielleEngine::fctDiscuss() {
repon(2, _caff);
suj = _caff + 60;
}
- tkey1(false);
+ testKey(false);
mennor();
_mouse.hideMouse();
hirs();
@@ -1527,7 +1524,7 @@ void MortevielleEngine::fctDiscuss() {
drawClock();
affrep();
/* chech;*/
- _menu.setDestinationMenuText(_coreVar._currPlace);
+ _menu.setDestinationText(_coreVar._currPlace);
clearScreenType3();
}
@@ -1575,7 +1572,7 @@ void MortevielleEngine::endGame() {
clearScreenType2();
clearScreenType3();
repon(9, 1509);
- tkey1(false);
+ testKey(false);
_mouse.hideMouse();
_caff = 70;
taffich();
@@ -1586,18 +1583,18 @@ void MortevielleEngine::endGame() {
clearScreenType1();
repon(9, 1509);
repon(2, 142);
- tkey1(false);
+ testKey(false);
_caff = 32;
afdes();
repon(6, 34);
repon(2, 35);
startMusicOrSpeech(0);
- tkey1(false);
+ testKey(false);
// A wait message was displayed.
- // tkey1 was called before and after.
+ // testKey (aka tkey1) was called before and after.
// Most likely the double call is useless, thus removed
//
- // tkey1(false);
+ // testKey(false);
resetVariables();
}
@@ -1608,7 +1605,7 @@ void MortevielleEngine::endGame() {
void MortevielleEngine::askRestart() {
clearScreenType2();
startMusicOrSpeech(0);
- tkey1(false);
+ testKey(false);
displayEmptyHand();
resetVariables();
initGame();
diff --git a/engines/mortevielle/dialogs.cpp b/engines/mortevielle/dialogs.cpp
index 1f97ee0fe6..19ff58071c 100644
--- a/engines/mortevielle/dialogs.cpp
+++ b/engines/mortevielle/dialogs.cpp
@@ -29,7 +29,6 @@
#include "mortevielle/dialogs.h"
#include "mortevielle/keyboard.h"
#include "mortevielle/mortevielle.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mouse.h"
#include "mortevielle/outtext.h"
#include "mortevielle/speech.h"
@@ -61,7 +60,7 @@ int Alert::show(const Common::String &msg, int n) {
g_vm->setMouseClick(false);
decodeAlertDetails(msg, caseNumb, lignNumb, nbcol, chaine, cas);
- sauvecr(50, (NUM_LINES + 1) << 4);
+ g_vm->sauvecr(50, (NUM_LINES + 1) << 4);
i = 0;
if (chaine == "") {
@@ -170,7 +169,7 @@ int Alert::show(const Common::String &msg, int n) {
tmp4 += " ";
g_vm->_screenSurface.drawString(tmp4, 1);
}
- charecr(50, (NUM_LINES + 1) << 4);
+ g_vm->charecr(50, (NUM_LINES + 1) << 4);
g_vm->_mouse.showMouse();
/* Restore the background area */
diff --git a/engines/mortevielle/menu.cpp b/engines/mortevielle/menu.cpp
index 5bc0940f6c..d7ece8a7eb 100644
--- a/engines/mortevielle/menu.cpp
+++ b/engines/mortevielle/menu.cpp
@@ -29,7 +29,6 @@
#include "common/str.h"
#include "common/textconsole.h"
#include "mortevielle/menu.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mortevielle.h"
#include "mortevielle/mouse.h"
#include "mortevielle/outtext.h"
@@ -88,7 +87,7 @@ void Menu::setText(int menuId, Common::String name) {
* Init destination menu
* @remarks Originally called 'tmlieu'
*/
-void Menu::setDestinationMenuText(int roomId) {
+void Menu::setDestinationText(int roomId) {
Common::String nomp;
if (roomId == 26)
@@ -323,7 +322,7 @@ void Menu::menuDown(int ii) {
xco = _menuConstants[ii - 1][0];
lignNumb = _menuConstants[ii - 1][3];
g_vm->_mouse.hideMouse();
- sauvecr(10, (_menuConstants[ii - 1][1] + 1) << 1);
+ g_vm->sauvecr(10, (_menuConstants[ii - 1][1] + 1) << 1);
xco = xco << 3;
if (g_vm->_res == 1)
cx = 10;
@@ -396,7 +395,7 @@ void Menu::menuDown(int ii) {
*/
void Menu::menuUp(int xx) {
if (_multiTitle) {
- charecr(10, (_menuConstants[xx - 1][1] + 1) << 1);
+ g_vm->charecr(10, (_menuConstants[xx - 1][1] + 1) << 1);
/* Restore the background area */
assert(g_vm->_screenSurface.pitch == g_vm->_backgroundSurface.pitch);
@@ -538,7 +537,7 @@ void Menu::initMenu() {
_moveMenu[i] = 0x200 + i;
_inventoryMenu[i] = 0x100 + i;
if (i > 6)
- g_vm->_menu.disableMenuItem(_inventoryMenu[i]);
+ disableMenuItem(_inventoryMenu[i]);
}
_msg3 = OPCODE_NONE;
_msg4 = OPCODE_NONE;
@@ -567,7 +566,7 @@ void Menu::setSearchMenu() {
* @remarks Originally called 'mfouen'
*/
void Menu::unsetSearchMenu() {
- setDestinationMenuText(g_vm->_coreVar._currPlace);
+ setDestinationText(g_vm->_coreVar._currPlace);
for (int i = 1; i <= 11; ++i)
enableMenuItem(_actionMenu[i]);
@@ -575,4 +574,30 @@ void Menu::unsetSearchMenu() {
setText(OPCODE_LIFT, g_vm->getEngineString(S_RAISE));
}
+/**
+ * Set Inventory menu texts
+ * @remarks Originally called 'modinv'
+ */
+void Menu::setInventoryText() {
+ int r;
+ Common::String nomp;
+
+ int cy = 0;
+ for (int i = 1; i <= 6; ++i) {
+ if (g_vm->_coreVar._sjer[i] != chr(0)) {
+ ++cy;
+ r = (ord(g_vm->_coreVar._sjer[i]) + 400);
+ nomp = g_vm->getString(r - 501 + kInventoryStringIndex);
+ setText(_inventoryMenu[cy], nomp);
+ enableMenuItem(_inventoryMenu[i]);
+ }
+ }
+
+ if (cy < 6) {
+ for (int i = cy + 1; i <= 6; ++i) {
+ setText(_inventoryMenu[i], " ");
+ disableMenuItem(_inventoryMenu[i]);
+ }
+ }
+}
} // End of namespace Mortevielle
diff --git a/engines/mortevielle/menu.h b/engines/mortevielle/menu.h
index f4d12bc676..37612edd06 100644
--- a/engines/mortevielle/menu.h
+++ b/engines/mortevielle/menu.h
@@ -62,7 +62,8 @@ public:
int _moveMenu[8];
void setText(int menuId, Common::String name);
- void setDestinationMenuText(int roomId);
+ void setDestinationText(int roomId);
+ void setInventoryText();
void disableMenuItem(int menuId);
void enableMenuItem(int menuId);
void displayMenu();
diff --git a/engines/mortevielle/module.mk b/engines/mortevielle/module.mk
index 58978c9d25..fe02e1114f 100644
--- a/engines/mortevielle/module.mk
+++ b/engines/mortevielle/module.mk
@@ -7,7 +7,6 @@ MODULE_OBJS := \
graphics.o \
keyboard.o \
menu.o \
- mor.o \
mortevielle.o \
mouse.o \
outtext.o \
diff --git a/engines/mortevielle/mor.cpp b/engines/mortevielle/mor.cpp
deleted file mode 100644
index 09857c8014..0000000000
--- a/engines/mortevielle/mor.cpp
+++ /dev/null
@@ -1,618 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on original Mortville Manor DOS source code
- * Copyright (c) 1988-1989 Lankhor
- */
-
-#include "common/endian.h"
-#include "common/file.h"
-#include "common/str.h"
-#include "common/system.h"
-#include "common/textconsole.h"
-#include "mortevielle/dialogs.h"
-#include "mortevielle/graphics.h"
-#include "mortevielle/menu.h"
-#include "mortevielle/mor.h"
-#include "mortevielle/mortevielle.h"
-#include "mortevielle/mouse.h"
-#include "mortevielle/outtext.h"
-#include "mortevielle/speech.h"
-#include "mortevielle/var_mor.h"
-
-#include "mortevielle/keyboard.h"
-
-namespace Mortevielle {
-
-/* NIVEAU 10 */
-void phaz(int &rand, int &p, int cf) {
- p += cf;
- rand = g_vm->getRandomNumber(1, 100);
-}
-
-int t11(int roomId) {
- int retVal = 0;
- int rand;
-
- int p = g_vm->getPresenceStats(rand, g_vm->_coreVar._faithScore, roomId);
- g_vm->_place = roomId;
- if ((roomId > OWN_ROOM) && (roomId < DINING_ROOM)) {
- if (p != -500) {
- if (rand > p) {
- g_vm->displayAloneText();
- retVal = 0;
- } else {
- g_vm->setPresenceFlags(g_vm->_place);
- retVal = g_vm->getPresenceBitIndex(g_vm->_place);
- }
- } else
- retVal = g_vm->getPresenceBitIndex(g_vm->_place);
- }
-
- if (roomId > ROOM9) {
- if ((roomId > LANDING) && (roomId != CHAPEL) && (roomId != ROOM26))
- g_vm->displayAloneText();
- else {
- int h = 0;
- if (roomId == DINING_ROOM)
- p = g_vm->getPresenceStatsDiningRoom(h);
- else if (roomId == BUREAU)
- p = g_vm->getPresenceStatsBureau(h);
- else if (roomId == KITCHEN)
- p = g_vm->getPresenceStatsKitchen();
- else if ((roomId == ATTIC) || (roomId == CELLAR))
- p = g_vm->getPresenceStatsAttic();
- else if ((roomId == LANDING) || (roomId == ROOM26))
- p = g_vm->getPresenceStatsLanding();
- else if (roomId == CHAPEL)
- p = g_vm->getPresenceStatsChapel(h);
- p += g_vm->_coreVar._faithScore;
- rand = g_vm->getRandomNumber(1, 100);
- if (rand > p) {
- g_vm->displayAloneText();
- retVal = 0;
- } else {
- if (roomId == DINING_ROOM)
- p = g_vm->setPresenceDiningRoom(h);
- else if (roomId == BUREAU)
- p = g_vm->setPresenceBureau(h);
- else if ((roomId == KITCHEN) || (roomId == ATTIC) || (roomId == CELLAR))
- p = g_vm->setPresenceKitchen();
- else if ((roomId == LANDING) || (roomId == ROOM26))
- p = g_vm->setPresenceLanding();
- else if (roomId == CHAPEL)
- p = g_vm->setPresenceChapel(h);
- retVal = p;
- }
- }
- }
-
- return retVal;
-}
-
-void writetp(Common::String s, int t) {
- if (g_vm->_res == 2)
- g_vm->_screenSurface.drawString(s, t);
- else
- g_vm->_screenSurface.drawString(g_vm->copy(s, 1, 25), t);
-}
-
-void aniof(int ouf, int num) {
- if ((g_vm->_caff == 7) && ((num == 4) || (num == 5)))
- return;
-
- if ((g_vm->_caff == 10) && (num == 7))
- num = 6;
- else if (g_vm->_caff == 12) {
- if (num == 3)
- num = 4;
- else if (num == 4)
- num = 3;
- }
-
- int ad = kAdrAni;
- int offset = g_vm->animof(ouf, num);
-
- GfxSurface surface;
- surface.decode(&g_vm->_mem[ad * 16 + offset]);
- g_vm->_screenSurface.drawPicture(surface, 0, 12);
-
- g_vm->prepareScreenType1();
-}
-
-/* NIVEAU 9 */
-void dessin(int ad) {
- if (ad != 0)
- g_vm->draw(kAdrDes, ((ad % 160) * 2), (ad / 160));
- else {
- g_vm->clearScreenType1();
- if (g_vm->_caff > 99) {
- g_vm->draw(kAdrDes, 60, 33);
- g_vm->_screenSurface.drawBox(118, 32, 291, 121, 15); // Medium box
- } else if (g_vm->_caff > 69) {
- g_vm->draw(kAdrDes, 112, 48); // Heads
- g_vm->_screenSurface.drawBox(222, 47, 155, 91, 15);
- } else {
- g_vm->draw(kAdrDes, 0, 12);
- g_vm->prepareScreenType1();
- if ((g_vm->_caff < 30) || (g_vm->_caff > 32)) {
- for (int cx = 1; cx <= 6; ++cx) {
- if (ord(g_vm->_touv[cx]) != 0)
- aniof(1, ord(g_vm->_touv[cx]));
- }
-
- if (g_vm->_caff == 13) {
- if (g_vm->_coreVar._atticBallHoleObjectId == 141)
- aniof(1, 7);
-
- if (g_vm->_coreVar._atticRodHoleObjectId == 159)
- aniof(1, 6);
- } else if ((g_vm->_caff == 14) && (g_vm->_coreVar._cellarObjectId == 151))
- aniof(1, 2);
- else if ((g_vm->_caff == 17) && (g_vm->_coreVar._secretPassageObjectId == 143))
- aniof(1, 1);
- else if ((g_vm->_caff == 24) && (g_vm->_coreVar._wellObjectId != 0))
- aniof(1, 1);
- }
-
- if (g_vm->_caff < ROOM26)
- g_vm->startMusicOrSpeech(1);
- }
- }
-}
-
-void fenat(char ans) {
- int coul;
-
- g_vm->_mouse.hideMouse();
- if (g_vm->_currGraphicalDevice == MODE_CGA)
- coul = 2;
- else if (g_vm->_currGraphicalDevice == MODE_HERCULES)
- coul = 1;
- else
- coul = 12;
-
- g_vm->_screenSurface.writeCharacter(Common::Point(306, 193), ord(ans), coul);
- g_vm->_screenSurface.drawBox(300, 191, 16, 8, 15);
- g_vm->_mouse.showMouse();
-}
-
-
-/* NIVEAU 8 */
-void afdes() {
- taffich();
- dessin(0);
- g_vm->_okdes = false;
-}
-
-void tkey1(bool d) {
- bool quest = false;
- int x, y, c;
-
- g_vm->_mouse.hideMouse();
- fenat('K');
-
- // Wait for release from any key or mouse button
- while (g_vm->keyPressed())
- g_vm->_key = testou();
-
- do {
- g_vm->_mouse.getMousePosition(x, y, c);
- g_vm->keyPressed();
- } while (c != 0);
-
- // Event loop
- do {
- if (d)
- g_vm->prepareRoom();
- quest = g_vm->keyPressed();
- g_vm->_mouse.getMousePosition(x, y, c);
- CHECK_QUIT;
- } while (!(quest || (c != 0) || (d && g_vm->_anyone)));
- if (quest)
- testou();
- g_vm->setMouseClick(false);
- g_vm->_mouse.showMouse();
-}
-
-/* NIVEAU 7 */
-void tlu(int af, int ob) {
- g_vm->_caff = 32;
- afdes();
- g_vm->repon(6, ob + 4000);
- g_vm->repon(2, 999);
- tkey1(true);
- g_vm->_caff = af;
- g_vm->_msg[3] = OPCODE_NONE;
- g_vm->_crep = 998;
-}
-
-void affrep() {
- g_vm->_caff = g_vm->_coreVar._currPlace;
- g_vm->_crep = g_vm->_coreVar._currPlace;
-}
-
-void tsort() {
-
- if ((g_vm->_iouv > 0) && (g_vm->_coreVar._currPlace != 0)) {
- if (g_vm->_coreVar._faithScore < 50)
- g_vm->_coreVar._faithScore += 2;
- else
- g_vm->_coreVar._faithScore += (g_vm->_coreVar._faithScore / 10);
- }
-
- for (int cx = 1; cx <= 7; ++cx)
- g_vm->_touv[cx] = chr(0);
- g_vm->_ment = 0;
- g_vm->_iouv = 0;
- g_vm->_mchai = 0;
- g_vm->resetRoomVariables(g_vm->_coreVar._currPlace);
-}
-
-void st4(int ob) {
- g_vm->_crep = 997;
-
- switch (ob) {
- case 114 :
- g_vm->_crep = 109;
- break;
- case 110 :
- g_vm->_crep = 107;
- break;
- case 158 :
- g_vm->_crep = 113;
- break;
- case 152:
- case 153:
- case 154:
- case 155:
- case 156:
- case 150:
- case 100:
- case 157:
- case 160:
- case 161 :
- tlu(g_vm->_caff, ob);
- break;
- default:
- break;
- }
-}
-
-void modinv() {
- int r;
- Common::String nomp;
-
- int cy = 0;
- for (int i = 1; i <= 6; ++i) {
- if (g_vm->_coreVar._sjer[i] != chr(0)) {
- ++cy;
- r = (ord(g_vm->_coreVar._sjer[i]) + 400);
- nomp = g_vm->getString(r - 501 + kInventoryStringIndex);
- g_vm->_menu.setText(g_vm->_menu._inventoryMenu[cy], nomp);
- g_vm->_menu.enableMenuItem(g_vm->_menu._inventoryMenu[i]);
- }
- }
-
- if (cy < 6) {
- for (int i = cy + 1; i <= 6; ++i) {
- g_vm->_menu.setText(g_vm->_menu._inventoryMenu[i], " ");
- g_vm->_menu.disableMenuItem(g_vm->_menu._inventoryMenu[i]);
- }
- }
-}
-
-void mennor() {
- g_vm->_menu.menuUp(g_vm->_msg[3]);
-}
-
-void premtet() {
- g_vm->draw(kAdrDes, 10, 80);
- g_vm->_screenSurface.drawBox(18, 79, 155, 91, 15);
-}
-
-/* NIVEAU 5 */
-void ajchai() {
- int cy = kAcha + ((g_vm->_mchai - 1) * 10) - 1;
- int cx = 0;
- do {
- ++cx;
- } while ((cx <= 9) && (g_vm->_tabdon[cy + cx] != 0));
-
- if (g_vm->_tabdon[cy + cx] == 0)
- g_vm->_tabdon[cy + cx] = g_vm->_coreVar._selectedObjectId;
- else
- g_vm->_crep = 192;
-}
-
-void ajjer(int ob) {
- int cx = 0;
- do {
- ++cx;
- } while ((cx <= 5) && (ord(g_vm->_coreVar._sjer[cx]) != 0));
-
- if (ord(g_vm->_coreVar._sjer[cx]) == 0) {
- g_vm->_coreVar._sjer[(cx)] = chr(ob);
- modinv();
- } else
- g_vm->_crep = 139;
-}
-
-void quelquun() {
- if (g_vm->_menu._menuDisplayed)
- g_vm->_menu.eraseMenu();
-
- g_vm->endSearch();
- g_vm->_crep = 997;
-L1:
- if (!g_vm->_hiddenHero) {
- if (g_vm->_crep == 997)
- g_vm->_crep = 138;
- g_vm->repon(2, g_vm->_crep);
- if (g_vm->_crep == 138)
- g_vm->_speechManager.startSpeech(5, 2, 1);
- else
- g_vm->_speechManager.startSpeech(4, 4, 1);
-
- if (g_vm->_iouv == 0)
- g_vm->_coreVar._faithScore += 2;
- else if (g_vm->_coreVar._faithScore < 50)
- g_vm->_coreVar._faithScore += 4;
- else
- g_vm->_coreVar._faithScore += 3 * (g_vm->_coreVar._faithScore / 10);
- tsort();
- g_vm->_menu.setDestinationMenuText(LANDING);
- int cx = g_vm->convertBitIndexToCharacterIndex(g_vm->_currBitIndex);
- g_vm->_caff = 69 + cx;
- g_vm->_crep = g_vm->_caff;
- g_vm->_msg[3] = MENU_DISCUSS;
- g_vm->_msg[4] = g_vm->_menu._discussMenu[cx];
- g_vm->_syn = true;
- g_vm->_col = true;
- } else {
- if (g_vm->getRandomNumber(1, 3) == 2) {
- g_vm->_hiddenHero = false;
- g_vm->_crep = 137;
- goto L1;
- } else {
- g_vm->repon(2, 136);
- int rand = (g_vm->getRandomNumber(0, 4)) - 2;
- g_vm->_speechManager.startSpeech(3, rand, 1);
- g_vm->clearScreenType2();
- g_vm->displayAloneText();
- g_vm->resetRoomVariables(MANOR_FRONT);
- affrep();
- }
- }
- if (g_vm->_menu._menuDisplayed)
- g_vm->_menu.drawMenu();
-}
-
-void tsuiv() {
- int tbcl;
- int cl;
-
- int cy = kAcha + ((g_vm->_mchai - 1) * 10) - 1;
- int cx = 0;
- do {
- ++cx;
- ++g_vm->_cs;
- cl = cy + g_vm->_cs;
- tbcl = g_vm->_tabdon[cl];
- } while ((tbcl == 0) && (g_vm->_cs <= 9));
-
- if ((tbcl != 0) && (g_vm->_cs < 11)) {
- ++g_vm->_is;
- g_vm->_caff = tbcl;
- g_vm->_crep = g_vm->_caff + 400;
- if (g_vm->_currBitIndex != 0)
- g_vm->_coreVar._faithScore += 2;
- } else {
- affrep();
- g_vm->endSearch();
- if (cx > 9)
- g_vm->_crep = 131;
- }
-}
-
-void tfleche() {
- bool qust;
- char touch;
-
- if (g_vm->_num == 9999)
- return;
-
- fenat(chr(152));
- bool inRect = false;
- do {
- touch = '\0';
-
- do {
- g_vm->_mouse.moveMouse(qust, touch);
- CHECK_QUIT;
-
- if (g_vm->getMouseClick())
- inRect = (g_vm->_mouse._pos.x < 256 * g_vm->_res) && (g_vm->_mouse._pos.y < 176) && (g_vm->_mouse._pos.y > 12);
- g_vm->prepareRoom();
- } while (!(qust || inRect || g_vm->_anyone));
-
- if (qust && (touch == '\103'))
- Alert::show(g_vm->_hintPctMessage, 1);
- } while (!((touch == '\73') || ((touch == '\104') && (g_vm->_x != 0) && (g_vm->_y != 0)) || (g_vm->_anyone) || (inRect)));
-
- if (touch == '\73')
- g_vm->_keyPressedEsc = true;
-
- if (inRect) {
- g_vm->_x = g_vm->_mouse._pos.x;
- g_vm->_y = g_vm->_mouse._pos.y;
- }
-}
-
-void tcoord(int sx) {
- int sy, ix, iy;
- int ib;
-
-
- g_vm->_num = 0;
- g_vm->_crep = 999;
- int a = 0;
- int atdon = amzon + 3;
- int cy = 0;
- while (cy < g_vm->_caff) {
- a += g_vm->_tabdon[atdon];
- atdon += 4;
- ++cy;
- }
-
- if (g_vm->_tabdon[atdon] == 0) {
- g_vm->_crep = 997;
- return;
- }
-
- a += kFleche;
- int cb = 0;
- for (cy = 0; cy <= (sx - 2); ++cy) {
- ib = (g_vm->_tabdon[a + cb] << 8) + g_vm->_tabdon[(a + cb + 1)];
- cb += (ib * 4) + 2;
- }
- ib = (g_vm->_tabdon[a + cb] << 8) + g_vm->_tabdon[(a + cb + 1)];
- if (ib == 0) {
- g_vm->_crep = 997;
- return;
- }
-
- cy = 1;
- do {
- cb += 2;
- sx = g_vm->_tabdon[a + cb] * g_vm->_res;
- sy = g_vm->_tabdon[(a + cb + 1)];
- cb += 2;
- ix = g_vm->_tabdon[a + cb] * g_vm->_res;
- iy = g_vm->_tabdon[(a + cb + 1)];
- ++cy;
- } while (!(((g_vm->_x >= sx) && (g_vm->_x <= ix) && (g_vm->_y >= sy) && (g_vm->_y <= iy)) || (cy > ib)));
-
- if ((g_vm->_x >= sx) && (g_vm->_x <= ix) && (g_vm->_y >= sy) && (g_vm->_y <= iy)) {
- g_vm->_num = cy - 1;
- return;
- }
-
- g_vm->_crep = 997;
-}
-
-
-void st7(int ob) {
- switch (ob) {
- case 116:
- case 144:
- g_vm->_crep = 104;
- break;
- case 126:
- case 111:
- g_vm->_crep = 108;
- break;
- case 132:
- g_vm->_crep = 111;
- break;
- case 142:
- g_vm->_crep = 112;
- break;
- default:
- g_vm->_crep = 183;
- st4(ob);
- }
-}
-
-void treg(int ob) {
- int mdes = g_vm->_caff;
- g_vm->_caff = ob;
-
- if (((g_vm->_caff > 29) && (g_vm->_caff < 33)) || (g_vm->_caff == 144) || (g_vm->_caff == 147) || (g_vm->_caff == 149) || (g_vm->_msg[4] == OPCODE_SLOOK)) {
- afdes();
- if ((g_vm->_caff > 29) && (g_vm->_caff < 33))
- g_vm->repon(2, g_vm->_caff);
- else
- g_vm->repon(2, g_vm->_caff + 400);
- tkey1(true);
- g_vm->_caff = mdes;
- g_vm->_msg[3] = 0;
- g_vm->_crep = 998;
- } else {
- g_vm->_obpart = true;
- g_vm->_crep = g_vm->_caff + 400;
- g_vm->_menu.setSearchMenu();
- }
-}
-
-void avpoing(int &ob) {
- g_vm->_crep = 999;
- if (g_vm->_coreVar._selectedObjectId != 0)
- ajjer(g_vm->_coreVar._selectedObjectId);
-
- if (g_vm->_crep != 139) {
- g_vm->displayItemInHand(ob + 400);
- g_vm->_coreVar._selectedObjectId = ob;
- ob = 0;
- }
-}
-
-void rechai(int &ch) {
- int tmpPlace = g_vm->_coreVar._currPlace;
-
- if (g_vm->_coreVar._currPlace == CRYPT)
- tmpPlace = CELLAR;
- ch = g_vm->_tabdon[achai + (tmpPlace * 7) + g_vm->_num - 1];
-}
-
-int t23coul() {
- if (!g_vm->checkInventory(143)) {
- g_vm->_crep = 1512;
- g_vm->loseGame();
- }
-
- return CELLAR;
-}
-
-void st13(int ob) {
- if ((ob == 114) || (ob == 116) || (ob == 126) || (ob == 132) ||
- (ob == 111) || (ob == 106) || (ob == 102) || (ob == 100) ||
- (ob == 110) || (ob == 153) || (ob == 154) || (ob == 155) ||
- (ob == 156) || (ob == 157) || (ob == 144) || (ob == 158) ||
- (ob == 150) || (ob == 152))
- g_vm->_crep = 999;
- else
- g_vm->_crep = 105;
-}
-
-void sauvecr(int y, int dy) {
-// g_vm->_mouse.hideMouse();
-// g_vm->_mouse.showMouse();
-}
-
-void charecr(int y, int dy) {
-// g_vm->_mouse.hideMouse();
-// g_vm->_mouse.showMouse();
-}
-
-} // End of namespace Mortevielle
diff --git a/engines/mortevielle/mor.h b/engines/mortevielle/mor.h
deleted file mode 100644
index b55dc46537..0000000000
--- a/engines/mortevielle/mor.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/* ScummVM - Graphic Adventure Engine
- *
- * ScummVM is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
-
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
-
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- */
-
-/*
- * This code is based on original Mortville Manor DOS source code
- * Copyright (c) 1988-1989 Lankhor
- */
-
-#ifndef MORTEVIELLE_MOR_H
-#define MORTEVIELLE_MOR_H
-
-#include "common/str.h"
-#include "mortevielle/var_mor.h"
-
-namespace Mortevielle {
-
-const int kTime1 = 410;
-const int kTime2 = 250;
-
-static const int _actionMenu[12] = { OPCODE_NONE,
- OPCODE_SHIDE, OPCODE_ATTACH, OPCODE_FORCE, OPCODE_SLEEP,
- OPCODE_ENTER, OPCODE_CLOSE, OPCODE_KNOCK, OPCODE_EAT,
- OPCODE_PLACE, OPCODE_OPEN, OPCODE_LEAVE
-};
-
-/* NIVEAU 10 */
-extern void phaz(int &rand, int &p, int cf);
-extern int t11(int roomId);
-extern void writetp(Common::String s, int t);
-extern void aniof(int ouf, int num);
-/* NIVEAU 9 */
-extern void dessin(int ad);
-extern void fenat(char ans);
-/* NIVEAU 8 */
-extern void afdes();
-extern void tkey1(bool d);
-/* NIVEAU 7 */
-extern void tlu(int af, int ob);
-extern void affrep();
-/* NIVEAU 6 */
-extern void tsort();
-extern void st4(int ob);
-extern void modinv();
-extern void mennor();
-extern void premtet();
-/* NIVEAU 5 */
-extern void ajchai();
-extern void ajjer(int ob);
-extern void quelquun();
-extern void tsuiv();
-extern void tfleche();
-extern void tcoord(int sx);
-extern void st7(int ob);
-extern void treg(int ob);
-extern void avpoing(int &ob);
-extern void rechai(int &ch);
-extern int t23coul();
-extern void st13(int ob);
-
-extern void sauvecr(int y, int dy);
-extern void charecr(int y, int dy);
-} // End of namespace Mortevielle
-#endif
diff --git a/engines/mortevielle/mortevielle.cpp b/engines/mortevielle/mortevielle.cpp
index cd5c2151b2..6d1a949516 100644
--- a/engines/mortevielle/mortevielle.cpp
+++ b/engines/mortevielle/mortevielle.cpp
@@ -32,7 +32,6 @@
#include "mortevielle/dialogs.h"
#include "mortevielle/keyboard.h"
#include "mortevielle/menu.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mouse.h"
#include "mortevielle/outtext.h"
#include "mortevielle/saveload.h"
@@ -697,7 +696,7 @@ void MortevielleEngine::handleAction() {
taffich();
if (_okdes) {
_okdes = false;
- dessin(0);
+ dessin();
}
if ((!_syn) || (_col))
repon(2, _crep);
@@ -1658,7 +1657,7 @@ void MortevielleEngine::loseGame() {
_mchai = 0;
_menu.unsetSearchMenu();
if (!_blo)
- t11(MANOR_FRONT);
+ getPresence(MANOR_FRONT);
_loseGame = true;
clearScreenType1();
@@ -1753,7 +1752,7 @@ void MortevielleEngine::gotoDiningRoom() {
afdes();
_screenSurface.drawBox(223, 47, 155, 91, 15);
repon(2, 33);
- tkey1(false);
+ testKey(false);
mennor();
_mouse.hideMouse();
hirs();
@@ -1766,7 +1765,7 @@ void MortevielleEngine::gotoDiningRoom() {
affrep();
resetPresenceInRooms(DINING_ROOM);
if (!_blo)
- minute = t11(OWN_ROOM);
+ getPresence(OWN_ROOM);
_currBitIndex = 0;
_savedBitIndex = 0;
_coreVar._alreadyEnteredManor = true;
@@ -1889,8 +1888,8 @@ void MortevielleEngine::gameLoaded() {
repon(2, _crep);
clearScreenType3();
_endGame = false;
- _menu.setDestinationMenuText(_coreVar._currPlace);
- modinv();
+ _menu.setDestinationText(_coreVar._currPlace);
+ _menu.setInventoryText();
if (_coreVar._selectedObjectId != 0)
displayItemInHand(_coreVar._selectedObjectId + 400);
_mouse.showMouse();
@@ -1975,7 +1974,7 @@ void MortevielleEngine::handleOpcode() {
fctSelfHide();
} else {
if (_anyone) {
- quelquun();
+ interactNPC();
_anyone = false;
mennor();
return;
@@ -3118,39 +3117,594 @@ int MortevielleEngine::getPresenceStats(int &rand, int cf, int roomId) {
*/
void MortevielleEngine::setPresenceFlags(int roomId) {
if ((roomId == GREEN_ROOM) || (roomId == DARKBLUE_ROOM)) {
- int rand = g_vm->getRandomNumber(1, 2);
+ int rand = getRandomNumber(1, 2);
if (roomId == GREEN_ROOM) {
if (rand == 1)
- g_vm->_roomPresenceLuc = true;
+ _roomPresenceLuc = true;
else
- g_vm->_roomPresenceIda = true;
+ _roomPresenceIda = true;
} else { // roomId == DARKBLUE_ROOM
if (rand == 1)
- g_vm->_roomPresenceGuy = true;
+ _roomPresenceGuy = true;
else
- g_vm->_roomPresenceEva = true;
+ _roomPresenceEva = true;
}
} else if (roomId == PURPLE_ROOM)
- g_vm->_purpleRoomPresenceLeo = true;
+ _purpleRoomPresenceLeo = true;
else if (roomId == TOILETS)
- g_vm->_toiletsPresenceBobMax = true;
+ _toiletsPresenceBobMax = true;
else if (roomId == BLUE_ROOM)
- g_vm->_roomPresenceMax = true;
+ _roomPresenceMax = true;
else if (roomId == RED_ROOM)
- g_vm->_roomPresenceBob = true;
+ _roomPresenceBob = true;
else if (roomId == BATHROOM)
- g_vm->_bathRoomPresenceBobMax = true;
+ _bathRoomPresenceBobMax = true;
else if (roomId == GREEN_ROOM2)
- g_vm->_roomPresencePat = true;
+ _roomPresencePat = true;
else if (roomId == ROOM9)
- g_vm->_room9PresenceLeo = true;
+ _room9PresenceLeo = true;
}
void MortevielleEngine::init_nbrepm() {
static const byte ipm[9] = { 0, 4, 5, 6, 7, 5, 6, 5, 8 };
for (int idx = 0; idx < 9; ++idx)
- g_vm->_nbrepm[idx] = ipm[idx];
+ _nbrepm[idx] = ipm[idx];
+}
+
+void MortevielleEngine::phaz(int &rand, int &p, int cf) {
+ p += cf;
+ rand = getRandomNumber(1, 100);
+}
+
+/**
+ * Get Presence
+ * @remarks Originally called 't11'
+ */
+int MortevielleEngine::getPresence(int roomId) {
+ int retVal = 0;
+ int rand;
+
+ int p = getPresenceStats(rand, _coreVar._faithScore, roomId);
+ _place = roomId;
+ if ((roomId > OWN_ROOM) && (roomId < DINING_ROOM)) {
+ if (p != -500) {
+ if (rand > p) {
+ displayAloneText();
+ retVal = 0;
+ } else {
+ setPresenceFlags(_place);
+ retVal = getPresenceBitIndex(_place);
+ }
+ } else
+ retVal = getPresenceBitIndex(_place);
+ }
+
+ if (roomId > ROOM9) {
+ if ((roomId > LANDING) && (roomId != CHAPEL) && (roomId != ROOM26))
+ displayAloneText();
+ else {
+ int h = 0;
+ if (roomId == DINING_ROOM)
+ p = getPresenceStatsDiningRoom(h);
+ else if (roomId == BUREAU)
+ p = getPresenceStatsBureau(h);
+ else if (roomId == KITCHEN)
+ p = getPresenceStatsKitchen();
+ else if ((roomId == ATTIC) || (roomId == CELLAR))
+ p = getPresenceStatsAttic();
+ else if ((roomId == LANDING) || (roomId == ROOM26))
+ p = getPresenceStatsLanding();
+ else if (roomId == CHAPEL)
+ p = getPresenceStatsChapel(h);
+ p += _coreVar._faithScore;
+ rand = getRandomNumber(1, 100);
+ if (rand > p) {
+ displayAloneText();
+ retVal = 0;
+ } else {
+ if (roomId == DINING_ROOM)
+ p = setPresenceDiningRoom(h);
+ else if (roomId == BUREAU)
+ p = setPresenceBureau(h);
+ else if ((roomId == KITCHEN) || (roomId == ATTIC) || (roomId == CELLAR))
+ p = setPresenceKitchen();
+ else if ((roomId == LANDING) || (roomId == ROOM26))
+ p = setPresenceLanding();
+ else if (roomId == CHAPEL)
+ p = setPresenceChapel(h);
+ retVal = p;
+ }
+ }
+ }
+
+ return retVal;
+}
+
+void MortevielleEngine::writetp(Common::String s, int t) {
+ if (_res == 2)
+ _screenSurface.drawString(s, t);
+ else
+ _screenSurface.drawString(copy(s, 1, 25), t);
+}
+
+void MortevielleEngine::aniof(int ouf, int num) {
+ if ((_caff == 7) && ((num == 4) || (num == 5)))
+ return;
+
+ if ((_caff == 10) && (num == 7))
+ num = 6;
+ else if (_caff == 12) {
+ if (num == 3)
+ num = 4;
+ else if (num == 4)
+ num = 3;
+ }
+
+ int ad = kAdrAni;
+ int offset = animof(ouf, num);
+
+ GfxSurface surface;
+ surface.decode(&_mem[ad * 16 + offset]);
+ _screenSurface.drawPicture(surface, 0, 12);
+
+ prepareScreenType1();
+}
+
+void MortevielleEngine::dessin() {
+ clearScreenType1();
+ if (_caff > 99) {
+ draw(kAdrDes, 60, 33);
+ _screenSurface.drawBox(118, 32, 291, 121, 15); // Medium box
+ } else if (_caff > 69) {
+ draw(kAdrDes, 112, 48); // Heads
+ _screenSurface.drawBox(222, 47, 155, 91, 15);
+ } else {
+ draw(kAdrDes, 0, 12);
+ prepareScreenType1();
+ if ((_caff < 30) || (_caff > 32)) {
+ for (int cx = 1; cx <= 6; ++cx) {
+ if (ord(_touv[cx]) != 0)
+ aniof(1, ord(_touv[cx]));
+ }
+
+ if (_caff == 13) {
+ if (_coreVar._atticBallHoleObjectId == 141)
+ aniof(1, 7);
+
+ if (_coreVar._atticRodHoleObjectId == 159)
+ aniof(1, 6);
+ } else if ((_caff == 14) && (_coreVar._cellarObjectId == 151))
+ aniof(1, 2);
+ else if ((_caff == 17) && (_coreVar._secretPassageObjectId == 143))
+ aniof(1, 1);
+ else if ((_caff == 24) && (_coreVar._wellObjectId != 0))
+ aniof(1, 1);
+ }
+
+ if (_caff < ROOM26)
+ startMusicOrSpeech(1);
+ }
+}
+
+void MortevielleEngine::afdes() {
+ taffich();
+ dessin();
+ _okdes = false;
+}
+
+/**
+ * Engine function - Place
+ * @remarks Originally called 'tkey1'
+ */
+void MortevielleEngine::testKey(bool d) {
+ bool quest = false;
+ int x, y, c;
+
+ _mouse.hideMouse();
+ fenat('K');
+
+ // Wait for release from any key or mouse button
+ while (keyPressed())
+ _key = testou();
+
+ do {
+ _mouse.getMousePosition(x, y, c);
+ keyPressed();
+ } while (c != 0);
+
+ // Event loop
+ do {
+ if (d)
+ prepareRoom();
+ quest = keyPressed();
+ _mouse.getMousePosition(x, y, c);
+ CHECK_QUIT;
+ } while (!(quest || (c != 0) || (d && _anyone)));
+ if (quest)
+ testou();
+ setMouseClick(false);
+ _mouse.showMouse();
+}
+
+void MortevielleEngine::tlu(int af, int ob) {
+ _caff = 32;
+ afdes();
+ repon(6, ob + 4000);
+ repon(2, 999);
+ testKey(true);
+ _caff = af;
+ _msg[3] = OPCODE_NONE;
+ _crep = 998;
+}
+
+void MortevielleEngine::affrep() {
+ _caff = _coreVar._currPlace;
+ _crep = _coreVar._currPlace;
+}
+
+/**
+ * Exit room
+ * @remarks Originally called 'tsort'
+ */
+void MortevielleEngine::exitRoom() {
+ if ((_iouv > 0) && (_coreVar._currPlace != OWN_ROOM)) {
+ if (_coreVar._faithScore < 50)
+ _coreVar._faithScore += 2;
+ else
+ _coreVar._faithScore += (_coreVar._faithScore / 10);
+ }
+
+ for (int cx = 1; cx <= 7; ++cx)
+ _touv[cx] = chr(0);
+ _ment = 0;
+ _iouv = 0;
+ _mchai = 0;
+ resetRoomVariables(_coreVar._currPlace);
+}
+
+/**
+ * get 'read' description
+ * @remarks Originally called 'st4'
+ */
+void MortevielleEngine::getReadDescription(int objId) {
+ _crep = 997;
+
+ switch (objId) {
+ case 114 :
+ _crep = 109;
+ break;
+ case 110 :
+ _crep = 107;
+ break;
+ case 158 :
+ _crep = 113;
+ break;
+ case 152:
+ case 153:
+ case 154:
+ case 155:
+ case 156:
+ case 150:
+ case 100:
+ case 157:
+ case 160:
+ case 161 :
+ tlu(_caff, objId);
+ break;
+ default:
+ break;
+ }
+}
+
+/**
+ * get 'search' description
+ * @remarks Originally called 'st7'
+ */
+void MortevielleEngine::getSearchDescription(int objId) {
+ switch (objId) {
+ case 116:
+ case 144:
+ _crep = 104;
+ break;
+ case 126:
+ case 111:
+ _crep = 108;
+ break;
+ case 132:
+ _crep = 111;
+ break;
+ case 142:
+ _crep = 112;
+ break;
+ default:
+ _crep = 183;
+ getReadDescription(objId);
+ }
+}
+
+void MortevielleEngine::mennor() {
+ g_vm->_menu.menuUp(g_vm->_msg[3]);
+}
+
+void MortevielleEngine::premtet() {
+ g_vm->draw(kAdrDes, 10, 80);
+ g_vm->_screenSurface.drawBox(18, 79, 155, 91, 15);
+}
+
+void MortevielleEngine::ajchai() {
+ int cy = kAcha + ((g_vm->_mchai - 1) * 10) - 1;
+ int cx = 0;
+ do {
+ ++cx;
+ } while ((cx <= 9) && (g_vm->_tabdon[cy + cx] != 0));
+
+ if (g_vm->_tabdon[cy + cx] == 0)
+ g_vm->_tabdon[cy + cx] = g_vm->_coreVar._selectedObjectId;
+ else
+ g_vm->_crep = 192;
+}
+
+void MortevielleEngine::ajjer(int ob) {
+ int cx = 0;
+ do {
+ ++cx;
+ } while ((cx <= 5) && (ord(g_vm->_coreVar._sjer[cx]) != 0));
+
+ if (ord(g_vm->_coreVar._sjer[cx]) == 0) {
+ g_vm->_coreVar._sjer[(cx)] = chr(ob);
+ g_vm->_menu.setInventoryText();
+ } else
+ g_vm->_crep = 139;
+}
+
+/**
+ * Interact with NPC
+ * @remarks Originally called 'quelquun'
+ */
+void MortevielleEngine::interactNPC() {
+ if (g_vm->_menu._menuDisplayed)
+ g_vm->_menu.eraseMenu();
+
+ g_vm->endSearch();
+ g_vm->_crep = 997;
+L1:
+ if (!g_vm->_hiddenHero) {
+ if (g_vm->_crep == 997)
+ g_vm->_crep = 138;
+ g_vm->repon(2, g_vm->_crep);
+ if (g_vm->_crep == 138)
+ g_vm->_speechManager.startSpeech(5, 2, 1);
+ else
+ g_vm->_speechManager.startSpeech(4, 4, 1);
+
+ if (g_vm->_iouv == 0)
+ g_vm->_coreVar._faithScore += 2;
+ else if (g_vm->_coreVar._faithScore < 50)
+ g_vm->_coreVar._faithScore += 4;
+ else
+ g_vm->_coreVar._faithScore += 3 * (g_vm->_coreVar._faithScore / 10);
+ g_vm->exitRoom();
+ g_vm->_menu.setDestinationText(LANDING);
+ int cx = g_vm->convertBitIndexToCharacterIndex(g_vm->_currBitIndex);
+ g_vm->_caff = 69 + cx;
+ g_vm->_crep = g_vm->_caff;
+ g_vm->_msg[3] = MENU_DISCUSS;
+ g_vm->_msg[4] = g_vm->_menu._discussMenu[cx];
+ g_vm->_syn = true;
+ g_vm->_col = true;
+ } else {
+ if (g_vm->getRandomNumber(1, 3) == 2) {
+ g_vm->_hiddenHero = false;
+ g_vm->_crep = 137;
+ goto L1;
+ } else {
+ g_vm->repon(2, 136);
+ int rand = (g_vm->getRandomNumber(0, 4)) - 2;
+ g_vm->_speechManager.startSpeech(3, rand, 1);
+ g_vm->clearScreenType2();
+ g_vm->displayAloneText();
+ g_vm->resetRoomVariables(MANOR_FRONT);
+ g_vm->affrep();
+ }
+ }
+ if (g_vm->_menu._menuDisplayed)
+ g_vm->_menu.drawMenu();
+}
+
+void MortevielleEngine::tsuiv() {
+ int tbcl;
+ int cy = kAcha + ((g_vm->_mchai - 1) * 10) - 1;
+ int cx = 0;
+ do {
+ ++cx;
+ ++g_vm->_cs;
+ int cl = cy + g_vm->_cs;
+ tbcl = g_vm->_tabdon[cl];
+ } while ((tbcl == 0) && (g_vm->_cs <= 9));
+
+ if ((tbcl != 0) && (g_vm->_cs < 11)) {
+ ++g_vm->_is;
+ g_vm->_caff = tbcl;
+ g_vm->_crep = g_vm->_caff + 400;
+ if (g_vm->_currBitIndex != 0)
+ g_vm->_coreVar._faithScore += 2;
+ } else {
+ g_vm->affrep();
+ g_vm->endSearch();
+ if (cx > 9)
+ g_vm->_crep = 131;
+ }
+}
+
+void MortevielleEngine::tfleche() {
+ bool qust;
+ char touch;
+
+ if (g_vm->_num == 9999)
+ return;
+
+ fenat(chr(152));
+ bool inRect = false;
+ do {
+ touch = '\0';
+
+ do {
+ g_vm->_mouse.moveMouse(qust, touch);
+ CHECK_QUIT;
+
+ if (g_vm->getMouseClick())
+ inRect = (g_vm->_mouse._pos.x < 256 * g_vm->_res) && (g_vm->_mouse._pos.y < 176) && (g_vm->_mouse._pos.y > 12);
+ g_vm->prepareRoom();
+ } while (!(qust || inRect || g_vm->_anyone));
+
+ if (qust && (touch == '\103'))
+ Alert::show(g_vm->_hintPctMessage, 1);
+ } while (!((touch == '\73') || ((touch == '\104') && (g_vm->_x != 0) && (g_vm->_y != 0)) || (g_vm->_anyone) || (inRect)));
+
+ if (touch == '\73')
+ g_vm->_keyPressedEsc = true;
+
+ if (inRect) {
+ g_vm->_x = g_vm->_mouse._pos.x;
+ g_vm->_y = g_vm->_mouse._pos.y;
+ }
+}
+
+/**
+ * Set coordinates
+ * @remarks Originally called 'tcoord'
+ */
+void MortevielleEngine::setCoordinates(int sx) {
+ int sy, ix, iy;
+ int ib;
+
+
+ g_vm->_num = 0;
+ g_vm->_crep = 999;
+ int a = 0;
+ int atdon = amzon + 3;
+ int cy = 0;
+ while (cy < g_vm->_caff) {
+ a += g_vm->_tabdon[atdon];
+ atdon += 4;
+ ++cy;
+ }
+
+ if (g_vm->_tabdon[atdon] == 0) {
+ g_vm->_crep = 997;
+ return;
+ }
+
+ a += kFleche;
+ int cb = 0;
+ for (cy = 0; cy <= (sx - 2); ++cy) {
+ ib = (g_vm->_tabdon[a + cb] << 8) + g_vm->_tabdon[(a + cb + 1)];
+ cb += (ib * 4) + 2;
+ }
+ ib = (g_vm->_tabdon[a + cb] << 8) + g_vm->_tabdon[(a + cb + 1)];
+ if (ib == 0) {
+ g_vm->_crep = 997;
+ return;
+ }
+
+ cy = 1;
+ do {
+ cb += 2;
+ sx = g_vm->_tabdon[a + cb] * g_vm->_res;
+ sy = g_vm->_tabdon[(a + cb + 1)];
+ cb += 2;
+ ix = g_vm->_tabdon[a + cb] * g_vm->_res;
+ iy = g_vm->_tabdon[(a + cb + 1)];
+ ++cy;
+ } while (!(((g_vm->_x >= sx) && (g_vm->_x <= ix) && (g_vm->_y >= sy) && (g_vm->_y <= iy)) || (cy > ib)));
+
+ if ((g_vm->_x >= sx) && (g_vm->_x <= ix) && (g_vm->_y >= sy) && (g_vm->_y <= iy)) {
+ g_vm->_num = cy - 1;
+ return;
+ }
+
+ g_vm->_crep = 997;
+}
+
+void MortevielleEngine::treg(int objId) {
+ int mdes = g_vm->_caff;
+ g_vm->_caff = objId;
+
+ if (((g_vm->_caff > 29) && (g_vm->_caff < 33)) || (g_vm->_caff == 144) || (g_vm->_caff == 147) || (g_vm->_caff == 149) || (g_vm->_msg[4] == OPCODE_SLOOK)) {
+ g_vm->afdes();
+ if ((g_vm->_caff > 29) && (g_vm->_caff < 33))
+ g_vm->repon(2, g_vm->_caff);
+ else
+ g_vm->repon(2, g_vm->_caff + 400);
+ g_vm->testKey(true);
+ g_vm->_caff = mdes;
+ g_vm->_msg[3] = 0;
+ g_vm->_crep = 998;
+ } else {
+ g_vm->_obpart = true;
+ g_vm->_crep = g_vm->_caff + 400;
+ g_vm->_menu.setSearchMenu();
+ }
+}
+
+void MortevielleEngine::avpoing(int &objId) {
+ g_vm->_crep = 999;
+ if (g_vm->_coreVar._selectedObjectId != 0)
+ g_vm->ajjer(g_vm->_coreVar._selectedObjectId);
+
+ if (g_vm->_crep != 139) {
+ g_vm->displayItemInHand(objId + 400);
+ g_vm->_coreVar._selectedObjectId = objId;
+ objId = 0;
+ }
+}
+
+void MortevielleEngine::rechai(int &ch) {
+ int tmpPlace = g_vm->_coreVar._currPlace;
+
+ if (g_vm->_coreVar._currPlace == CRYPT)
+ tmpPlace = CELLAR;
+ ch = g_vm->_tabdon[achai + (tmpPlace * 7) + g_vm->_num - 1];
+}
+
+/**
+ * Check before leaving the secret passage
+ * @remarks Originally called 't23coul'
+ */
+int MortevielleEngine::checkLeaveSecretPassage() {
+ if (!g_vm->checkInventory(143)) {
+ g_vm->_crep = 1512;
+ g_vm->loseGame();
+ }
+
+ return CELLAR;
+}
+
+void MortevielleEngine::fenat(char ans) {
+ int coul;
+
+ g_vm->_mouse.hideMouse();
+ if (g_vm->_currGraphicalDevice == MODE_CGA)
+ coul = 2;
+ else if (g_vm->_currGraphicalDevice == MODE_HERCULES)
+ coul = 1;
+ else
+ coul = 12;
+
+ g_vm->_screenSurface.writeCharacter(Common::Point(306, 193), ord(ans), coul);
+ g_vm->_screenSurface.drawBox(300, 191, 16, 8, 15);
+ g_vm->_mouse.showMouse();
+}
+
+void MortevielleEngine::sauvecr(int y, int dy) {
+// _mouse.hideMouse();
+// _mouse.showMouse();
+}
+
+void MortevielleEngine::charecr(int y, int dy) {
+// _mouse.hideMouse();
+// _mouse.showMouse();
}
} // End of namespace Mortevielle
diff --git a/engines/mortevielle/mortevielle.h b/engines/mortevielle/mortevielle.h
index bb594d2415..6e55bebd7e 100644
--- a/engines/mortevielle/mortevielle.h
+++ b/engines/mortevielle/mortevielle.h
@@ -73,6 +73,12 @@ enum DataType {
kGameStrings = 1
};
+static const int _actionMenu[12] = { OPCODE_NONE,
+ OPCODE_SHIDE, OPCODE_ATTACH, OPCODE_FORCE, OPCODE_SLEEP,
+ OPCODE_ENTER, OPCODE_CLOSE, OPCODE_KNOCK, OPCODE_EAT,
+ OPCODE_PLACE, OPCODE_OPEN, OPCODE_LEAVE
+};
+
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 400
#define SCREEN_ORIG_HEIGHT 200
@@ -80,6 +86,9 @@ enum DataType {
#define MORT_DAT "mort.dat"
#define GAME_FRAME_DELAY (1000 / 50)
+const int kTime1 = 410;
+const int kTime2 = 250;
+
const int kAcha = 492;
const int kAdrDes = 0x7000;
const int kFleche = 1758;
@@ -167,11 +176,18 @@ private:
int readclock();
void palette(int v1);
int checkLeoMaxRandomPresence();
+ void interactNPC();
void adzon();
void text1(int x, int y, int nb, int m);
void modif(int &nu);
void initouv();
+ void phaz(int &rand, int &p, int cf);
+ void writetp(Common::String s, int t);
+ void premtet();
+ void ajchai();
+ void tfleche();
+ void setCoordinates(int sx);
public:
Common::String _hintPctMessage;
@@ -417,9 +433,14 @@ public:
void displayItemInHand(int objId);
void displayEmptyHand();
void resetRoomVariables(int roomId);
- int getPresenceStats(int &rand, int cf, int roomId);
+ int getPresenceStats(int &rand, int cf, int roomId);
void setPresenceFlags(int roomId);
-
+ int getPresence(int roomId);
+ void testKey(bool d);
+ void exitRoom();
+ void getReadDescription(int objId);
+ void getSearchDescription(int objId);
+ int checkLeaveSecretPassage();
void pictout(int seg, int dep, int x, int y);
int animof(int ouf, int num);
@@ -427,6 +448,21 @@ public:
void ecr2(Common::String text);
void ecr3(Common::String text);
void init_nbrepm();
+ void aniof(int ouf, int num);
+ void dessin();
+ void afdes();
+ void tlu(int af, int ob);
+ void affrep();
+ void mennor();
+ void ajjer(int ob);
+ void tsuiv();
+ void treg(int objId);
+ void avpoing(int &objId);
+ void rechai(int &ch);
+ void fenat(char ans);
+
+ void sauvecr(int y, int dy);
+ void charecr(int y, int dy);
};
diff --git a/engines/mortevielle/outtext.cpp b/engines/mortevielle/outtext.cpp
index 92831ec2f4..35d42251b1 100644
--- a/engines/mortevielle/outtext.cpp
+++ b/engines/mortevielle/outtext.cpp
@@ -27,7 +27,6 @@
#include "common/file.h"
#include "common/str.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mouse.h"
#include "mortevielle/outtext.h"
#include "mortevielle/graphics.h"
@@ -338,7 +337,7 @@ void taffich() {
if ((a == 13) || (a == 14))
g_vm->displayAloneText();
else if (!g_vm->_blo)
- cx = t11(g_vm->_coreVar._currPlace);
+ g_vm->getPresence(g_vm->_coreVar._currPlace);
g_vm->_savedBitIndex = 0;
}
}
diff --git a/engines/mortevielle/saveload.cpp b/engines/mortevielle/saveload.cpp
index daa59b231b..4c5e6252d5 100644
--- a/engines/mortevielle/saveload.cpp
+++ b/engines/mortevielle/saveload.cpp
@@ -28,7 +28,6 @@
#include "common/file.h"
#include "common/system.h"
#include "mortevielle/dialogs.h"
-#include "mortevielle/mor.h"
#include "mortevielle/mortevielle.h"
#include "mortevielle/mouse.h"
#include "mortevielle/saveload.h"
diff --git a/engines/mortevielle/speech.cpp b/engines/mortevielle/speech.cpp
index 5b9e8415dc..c374d20a6d 100644
--- a/engines/mortevielle/speech.cpp
+++ b/engines/mortevielle/speech.cpp
@@ -30,7 +30,6 @@
#include "mortevielle/speech.h"
#include "mortevielle/sound.h"
#include "mortevielle/mortevielle.h"
-#include "mortevielle/mor.h"
#include "mortevielle/var_mor.h"
namespace Mortevielle {